diff --git a/.oxlintrc.json b/.oxlintrc.json new file mode 100644 index 000000000..dbc88a570 --- /dev/null +++ b/.oxlintrc.json @@ -0,0 +1,41 @@ +{ + "$schema": "./node_modules/oxlint/configuration_schema.json", + "plugins": [], + "categories": { + "correctness": "off" + }, + "env": { + "builtin": true + }, + "overrides": [ + { + "files": [ + "**/*.{js,mjs,jsx,ts,tsx}" + ], + "rules": { + "no-console": "warn", + "no-debugger": "warn", + "prefer-const": "warn", + "eslint-comments/no-unused-disable": "warn", + "no-only-tests/no-only-tests": "warn", + "no-unused-vars": [ + "warn", + { + "argsIgnorePattern": "^_", + "varsIgnorePattern": "^_", + "caughtErrorsIgnorePattern": "^_" + } + ], + "typescript/no-unnecessary-type-constraint": "warn", + "typescript/no-useless-empty-export": "warn" + }, + "jsPlugins": [ + "eslint-plugin-eslint-comments", + "eslint-plugin-no-only-tests" + ], + "plugins": [ + "typescript" + ] + } + ] +} \ No newline at end of file diff --git a/eslint.config.mjs b/eslint.config.mjs deleted file mode 100644 index 06a8add90..000000000 --- a/eslint.config.mjs +++ /dev/null @@ -1,50 +0,0 @@ -import typescriptEslint from "@typescript-eslint/eslint-plugin"; -import noOnlyTests from "eslint-plugin-no-only-tests"; -import eslintComments from "eslint-plugin-eslint-comments"; -import tsParser from "@typescript-eslint/parser"; - -/** @type {import("eslint").Linter.Config} */ -export default { - - files: ["**/*.{js,mjs,jsx,ts,tsx}"], - ignores: ["**/{dist,node_modules,__snapshots__}/**/*", "packages/*/dev/**/*", "site/**/*"], - - plugins: { - "@typescript-eslint": typescriptEslint, - "no-only-tests": noOnlyTests, - "eslint-comments": eslintComments, - }, - - languageOptions: { - parser: tsParser, - ecmaVersion: 5, - sourceType: "module", - - parserOptions: { - project: true, - tsconfigRootDir: import.meta.dirname, - }, - }, - - rules: { - "no-console": "warn", - "no-debugger": "warn", - "prefer-const": "warn", - - "@typescript-eslint/no-unused-vars": ["warn", { - argsIgnorePattern: "^_", - varsIgnorePattern: "^_", - caughtErrorsIgnorePattern: "^_", - }], - - "@typescript-eslint/no-unnecessary-boolean-literal-compare": "warn", - "@typescript-eslint/no-unnecessary-condition": "warn", - "@typescript-eslint/no-unnecessary-qualifier": "warn", - "@typescript-eslint/no-unnecessary-type-arguments": "warn", - "@typescript-eslint/no-unnecessary-type-assertion": "warn", - "@typescript-eslint/no-unnecessary-type-constraint": "warn", - "@typescript-eslint/no-useless-empty-export": "warn", - "eslint-comments/no-unused-disable": "warn", - "no-only-tests/no-only-tests": "warn", - }, -}; diff --git a/package.json b/package.json index 21d89fa4c..53691da96 100644 --- a/package.json +++ b/package.json @@ -14,8 +14,9 @@ "generate": "pnpm run build && pnpm -dir site run generate", "dev": "pnpm -dir site run dev", "format": "prettier --cache -w {site,packages,scripts,template}/**/*.{js,ts,json,css,tsx,jsx,md,html}", - "lint:packages": "eslint --max-warnings 0 \"packages/*/src/**/*\"", - "lint:tests": "eslint \"packages/*/test/**\" --rule \"no-only-tests/no-only-tests: error\"", + "lint:packages": "oxlint --max-warnings 0 packages --ignore-pattern \"packages/*/{test,stories,dev}\"", + "lint:stories": "oxlint packages --ignore-pattern \"packages/*/{src,dev,test}\"", + "lint:tests": "oxlint packages --ignore-pattern \"packages/*/{src,stories,dev}\"", "lint": "pnpm run \"/^lint:.*/\"", "test:client": "vitest -c ./configs/vitest.config.ts", "test:ssr": "pnpm run test:client --mode ssr", @@ -49,7 +50,7 @@ "babel-preset-solid": "2.0.0-beta.14", "esbuild": "^0.25.5", "esbuild-plugin-solid": "^0.6.0", - "eslint": "^9.28.0", + "oxlint": "^1.71.0", "eslint-plugin-eslint-comments": "^3.2.0", "eslint-plugin-no-only-tests": "^3.3.0", "geist": "^1.7.1", diff --git a/packages/a11y/test/index.test.tsx b/packages/a11y/test/index.test.tsx index e8352ff7b..88ebeab79 100644 --- a/packages/a11y/test/index.test.tsx +++ b/packages/a11y/test/index.test.tsx @@ -426,6 +426,7 @@ describe("createFormControlInput", () => { it("deregisters fieldId on dispose", () => { const container = document.createElement("div"); const ctx = createFormControl({ id: "ctrl" }); + // oxlint-disable-next-line no-unused-vars let fp!: ReturnType["fieldProps"]; const dispose = render(() => { diff --git a/packages/audio/src/index.ts b/packages/audio/src/index.ts index 55b23fb14..c45eb4e06 100644 --- a/packages/audio/src/index.ts +++ b/packages/audio/src/index.ts @@ -121,7 +121,7 @@ export const makeAudioPlayer = ( player, play: () => player.play(), pause: () => player.pause(), - // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition + // oxlint-disable-next-line @typescript-eslint/no-unnecessary-condition seek: player.fastSeek ? (time: number) => player.fastSeek(time) : (time: number) => (player.currentTime = time), diff --git a/packages/audio/test/index.test.ts b/packages/audio/test/index.test.ts index bebd60837..240c1953f 100644 --- a/packages/audio/test/index.test.ts +++ b/packages/audio/test/index.test.ts @@ -1,5 +1,5 @@ import "./setup"; -import { createRoot, createSignal, flush, untrack } from "solid-js"; +import { createRoot, createSignal, flush } from "solid-js"; import { describe, expect, it } from "vitest"; import { makeAudio, makeAudioPlayer, createAudio } from "../src/index.js"; diff --git a/packages/broadcast-channel/dev/hooks/useTrackPages.tsx b/packages/broadcast-channel/dev/hooks/useTrackPages.tsx index a61cd7e9c..b72bc0958 100644 --- a/packages/broadcast-channel/dev/hooks/useTrackPages.tsx +++ b/packages/broadcast-channel/dev/hooks/useTrackPages.tsx @@ -28,7 +28,7 @@ export function useTrackPages(id?: string) { }); let intervalId: number = 0; - let tabsMap: { [key: string]: boolean } = { [pageId]: true }; + const tabsMap: { [key: string]: boolean } = { [pageId]: true }; onMessage(({ data }) => { const { id, ids, state } = data; diff --git a/packages/db-store/src/index.ts b/packages/db-store/src/index.ts index 747a17f74..fc098a725 100644 --- a/packages/db-store/src/index.ts +++ b/packages/db-store/src/index.ts @@ -138,7 +138,7 @@ export const createDbStore = ( if (typeof opts.onError === "function") { opts.onError(error); } else if (DEV) { - // eslint-disable-next-line no-console + // oxlint-disable-next-line no-console console.error(error); } return Promise.resolve(); diff --git a/packages/deep/src/store-updates.ts b/packages/deep/src/store-updates.ts index d78f63a77..c85e146e6 100644 --- a/packages/deep/src/store-updates.ts +++ b/packages/deep/src/store-updates.ts @@ -172,7 +172,7 @@ export function captureStoreUpdates(store: T): () => NestedUpd if (!(typeof store === "object" && store !== null && $TRACK in store)) { if (DEV) { - // eslint-disable-next-line no-console + // oxlint-disable-next-line no-console console.warn("captureStoreUpdates expects a store, got", store); } let init = true; diff --git a/packages/deep/test/updates.test.ts b/packages/deep/test/updates.test.ts index c1b1533f4..50cc96ea0 100644 --- a/packages/deep/test/updates.test.ts +++ b/packages/deep/test/updates.test.ts @@ -1,6 +1,6 @@ import { describe, test, expect } from "vitest"; import { createEffect, createRoot, createSignal, flush } from "solid-js"; -import { createStore, reconcile } from "solid-js"; +import { createStore } from "solid-js"; import { captureStoreUpdates } from "../src/index.js"; describe("createStoreDelta", () => { diff --git a/packages/event-listener/stories/event-listener.stories.tsx b/packages/event-listener/stories/event-listener.stories.tsx index 1c4d983e2..dccf5f50c 100644 --- a/packages/event-listener/stories/event-listener.stories.tsx +++ b/packages/event-listener/stories/event-listener.stories.tsx @@ -3,7 +3,6 @@ import preview from "../../../.storybook/preview.js"; import { makeEventListener, createEventListener, - createEventSignal, WindowEventListener, } from "@solid-primitives/event-listener"; import readme from "../README.md?raw"; diff --git a/packages/fetch/src/cache.ts b/packages/fetch/src/cache.ts index e03f04b52..0ebc88df2 100644 --- a/packages/fetch/src/cache.ts +++ b/packages/fetch/src/cache.ts @@ -84,7 +84,7 @@ export const withCache: RequestModifier = } catch (e) { !isServer && DEV && - // eslint-disable-next-line no-console + // oxlint-disable-next-line no-console console.warn("attempt to invalidate cache for", requestData, "failed with error", e); } }; @@ -136,7 +136,7 @@ export const withCacheStorage: RequestModifier = } catch (e) { !isServer && DEV && - // eslint-disable-next-line no-console + // oxlint-disable-next-line no-console console.warn("attempt to parse stored request cache failed with error", e); } const originalWriteCache = requestContext.writeCache; @@ -145,7 +145,7 @@ export const withCacheStorage: RequestModifier = try { storage.setItem(key, JSON.stringify(requestContext.cache)); } catch (e) { - // eslint-disable-next-line no-console + // oxlint-disable-next-line no-console !isServer && DEV && console.warn("attempt to store request cache failed with error", e); } }; diff --git a/packages/fetch/src/modifiers.ts b/packages/fetch/src/modifiers.ts index 201ccf840..06c8ed2c2 100644 --- a/packages/fetch/src/modifiers.ts +++ b/packages/fetch/src/modifiers.ts @@ -19,7 +19,7 @@ export const wrapFetcher = ( if (!originalFetcher) { throw new Error("could not read resource fetcher"); } - // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition + // oxlint-disable-next-line @typescript-eslint/no-unnecessary-condition requestContext.fetcher = wrapper(originalFetcher) || originalFetcher; }; diff --git a/packages/fetch/src/request.ts b/packages/fetch/src/request.ts index 9cd579af0..58c1172bb 100644 --- a/packages/fetch/src/request.ts +++ b/packages/fetch/src/request.ts @@ -12,7 +12,7 @@ if (isServer && !fetchFallback) { fetchFallback = nodeFetch; } catch (_e) { fetchFallback = () => { - // eslint-disable-next-line no-console + // oxlint-disable-next-line no-console console.warn( '"\x1b[33m⚠️ package missing to run createFetch on the server.\n Please run:\x1b[0m\n\nnpm i node-fetch\n"', ); diff --git a/packages/filesystem/src/reactive.ts b/packages/filesystem/src/reactive.ts index ead0e0c1f..a8957dc0e 100644 --- a/packages/filesystem/src/reactive.ts +++ b/packages/filesystem/src/reactive.ts @@ -25,7 +25,7 @@ type AsyncEntry = { const makeAsyncEntry = (fetch: () => Promise): AsyncEntry => { const [read, write] = createSignal(undefined, OWNED_WRITE); - // eslint-disable-next-line @typescript-eslint/no-explicit-any + // oxlint-disable-next-line @typescript-eslint/no-explicit-any const set = write as (v: T | undefined) => void; const doFetch = () => { fetch().then(v => set(v)); diff --git a/packages/filesystem/src/tools.ts b/packages/filesystem/src/tools.ts index 5909422b9..4627fe281 100644 --- a/packages/filesystem/src/tools.ts +++ b/packages/filesystem/src/tools.ts @@ -67,7 +67,7 @@ export const rsync = async ( `${dest}${dest.endsWith("/") ? "" : "/"}${getItemName(entry)}`, )); } - // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition + // oxlint-disable-next-line @typescript-eslint/no-unnecessary-condition } else if (srcType === "file") { const fileData = "async" in fs1 ? await fs1.readFile(src) : await toPromise(() => fs1.readFile(src)); diff --git a/packages/filesystem/src/watcher-chokidar.ts b/packages/filesystem/src/watcher-chokidar.ts index b39b22145..32ac82642 100644 --- a/packages/filesystem/src/watcher-chokidar.ts +++ b/packages/filesystem/src/watcher-chokidar.ts @@ -13,7 +13,7 @@ export const makeChokidarWatcher = (basePath: string = "/"): Watcher => { .on("unlink", path => subscriber?.("rm", path)) .on("unlinkDir", path => subscriber?.("rm", path)), ) - // eslint-disable-next-line no-console + // oxlint-disable-next-line no-console .catch(e => console.warn(e)); return fn => { diff --git a/packages/flux-store/stories/flux-store.stories.tsx b/packages/flux-store/stories/flux-store.stories.tsx index 7de33f61f..85ff120c0 100644 --- a/packages/flux-store/stories/flux-store.stories.tsx +++ b/packages/flux-store/stories/flux-store.stories.tsx @@ -9,7 +9,6 @@ import { } from "../src/index.js"; import readme from "../README.md?raw"; import { - Badge, BoolRow, Button, ButtonRow, diff --git a/packages/focus/stories/focus.stories.tsx b/packages/focus/stories/focus.stories.tsx index d0d76afd0..0e4c4afe2 100644 --- a/packages/focus/stories/focus.stories.tsx +++ b/packages/focus/stories/focus.stories.tsx @@ -13,7 +13,6 @@ import { BoolRow, Button, ButtonRow, - Card, colors, Container, EventLog, diff --git a/packages/form/test/index.test.ts b/packages/form/test/index.test.ts index dfc77a3ee..286f6d757 100644 --- a/packages/form/test/index.test.ts +++ b/packages/form/test/index.test.ts @@ -524,7 +524,7 @@ describe("submit", () => { it("allows re-submit after correcting a validation error", async () => { const onSubmit = vi.fn(); - // eslint-disable-next-line @typescript-eslint/no-explicit-any + // oxlint-disable-next-line @typescript-eslint/no-explicit-any let form: any; const dispose = createRoot(d => { diff --git a/packages/intersection-observer/src/index.ts b/packages/intersection-observer/src/index.ts index a6b1a9495..06447c955 100644 --- a/packages/intersection-observer/src/index.ts +++ b/packages/intersection-observer/src/index.ts @@ -57,7 +57,7 @@ export type CreateViewportObserverReturnValue = [ function observe(el: Element, instance: IntersectionObserver): void { if (DEV && el instanceof HTMLElement && el.style.display === "contents") { - // eslint-disable-next-line no-console + // oxlint-disable-next-line no-console console.warn( `[@solid-primitives/intersection-observer] IntersectionObserver is not able to observe elements with 'display: "contents"' style:`, el, diff --git a/packages/intersection-observer/stories/intersectionObserver.stories.tsx b/packages/intersection-observer/stories/intersectionObserver.stories.tsx index 2f24a0d03..bd8a2676a 100644 --- a/packages/intersection-observer/stories/intersectionObserver.stories.tsx +++ b/packages/intersection-observer/stories/intersectionObserver.stories.tsx @@ -8,7 +8,7 @@ import { type AddViewportObserverEntry, } from "@solid-primitives/intersection-observer"; import readme from "../README.md?raw"; -import { btnStyle, Container } from "../../../.storybook/ui/index.js"; +import { Container } from "../../../.storybook/ui/index.js"; const meta = preview.meta({ title: "Display & Media/Intersection Observer", diff --git a/packages/jsx-tokenizer/src/index.ts b/packages/jsx-tokenizer/src/index.ts index 274c25a19..9610bc9a1 100644 --- a/packages/jsx-tokenizer/src/index.ts +++ b/packages/jsx-tokenizer/src/index.ts @@ -115,7 +115,7 @@ export function createToken

( : () => { !isServer && DEV && - // eslint-disable-next-line no-console + // oxlint-disable-next-line no-console console.warn( `Tokens can only be rendered with resolveTokens. ("${symbol.description}")`, ); @@ -149,7 +149,7 @@ function getResolvedTokens( // other element else if (addElements) resolved.push(value); else if (!isServer && DEV && value) - // eslint-disable-next-line no-console + // oxlint-disable-next-line no-console console.warn(`Invalid JSX Element passed to token resolver:`, value); return resolved; diff --git a/packages/lifecycle/test/index.test.ts b/packages/lifecycle/test/index.test.ts index 17ef787d9..636106340 100644 --- a/packages/lifecycle/test/index.test.ts +++ b/packages/lifecycle/test/index.test.ts @@ -1,5 +1,5 @@ import { describe, test, expect } from "vitest"; -import { createMemo, createRoot, createSignal, flush, onSettled, sharedConfig } from "solid-js"; +import { createMemo, createRoot, flush, onSettled, sharedConfig } from "solid-js"; import { createIsMounted, isHydrated } from "../src/index.js"; describe("createIsMounted", () => { diff --git a/packages/list-state/stories/listState.stories.tsx b/packages/list-state/stories/listState.stories.tsx index 3a0cd749c..db7e040ca 100644 --- a/packages/list-state/stories/listState.stories.tsx +++ b/packages/list-state/stories/listState.stories.tsx @@ -222,6 +222,7 @@ export const MultiSelect = meta.story({ }, }); +// oxlint-disable-next-line no-unused-vars const ORIENTATIONS = ["vertical", "horizontal"] as const; export const HorizontalList = meta.story({ diff --git a/packages/list/src/index.ts b/packages/list/src/index.ts index 97af3c626..3d932f041 100644 --- a/packages/list/src/index.ts +++ b/packages/list/src/index.ts @@ -208,6 +208,7 @@ function updateKeyedMap(this: MapData): any[ runWithOwner(this._owner, () => { let i: number | undefined, j: number | undefined, + /* oxlint-disable-next-line prefer-const */ mapper = this._rows ? this._unkeyed ? () => { @@ -270,12 +271,19 @@ function updateKeyedMap(this: MapData): any[ newEnd: number, item: Item, key: any, + /* oxlint-disable-next-line prefer-const */ newIndices: Map, + /* oxlint-disable-next-line prefer-const */ newIndicesNext: number[], + /* oxlint-disable-next-line prefer-const */ temp: MappedItem[] = new Array(newLen), + /* oxlint-disable-next-line prefer-const */ tempNodes: Root[] = new Array(newLen), + /* oxlint-disable-next-line prefer-const */ tempRows: Signal[] | undefined = this._rows ? new Array(newLen) : undefined, + /* oxlint-disable-next-line prefer-const */ tempIndexes: Signal[] | undefined = this._indexes ? new Array(newLen) : undefined, + /* oxlint-disable-next-line prefer-const */ unusedIndexes: number[] | undefined = this._recycle && !this._unkeyed ? [] : undefined; // unkeyed uses every element, no need to reuse // skip common prefix diff --git a/packages/marker/stories/marker.stories.tsx b/packages/marker/stories/marker.stories.tsx index d522a9fb9..86b75e2ff 100644 --- a/packages/marker/stories/marker.stories.tsx +++ b/packages/marker/stories/marker.stories.tsx @@ -63,7 +63,7 @@ export const SearchHighlightStory = meta.story({ - {(para, i) => ( + {(para) => (

(

- info + info {v().message}
), warning: v => (
- warning #{v().code} + warning #{v().code} {v().message}
), error: v => (
- error #{v().code} + error #{v().code} {v().message}
diff --git a/packages/media/src/index.ts b/packages/media/src/index.ts index 0923bcd0a..75d109525 100644 --- a/packages/media/src/index.ts +++ b/packages/media/src/index.ts @@ -136,7 +136,7 @@ export function createBreakpoints( { enumerable: false, get: () => Object.keys(breakpoints).pop() }, ); - // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition + // oxlint-disable-next-line @typescript-eslint/no-unnecessary-condition if (isServer || !window.matchMedia) return fallback; const { mediaFeature = "min-width", watchChange = true } = options; diff --git a/packages/mediastream/src/index.ts b/packages/mediastream/src/index.ts index e9dd38eb3..ec2cbf22c 100644 --- a/packages/mediastream/src/index.ts +++ b/packages/mediastream/src/index.ts @@ -86,6 +86,7 @@ export const createStream = (streamSource: StreamSourceDescription): StreamRetur else stopStream(s); }).catch((err: unknown) => { if (active) setStream(undefined); + // oxlint-disable-next-line no-console console.error(err); }); } else { @@ -253,6 +254,7 @@ export const createScreen = ( else stopStream(s); }).catch((err: unknown) => { if (active) setStream(undefined); + // oxlint-disable-next-line no-console console.error(err); }); } else { diff --git a/packages/mutable/src/index.ts b/packages/mutable/src/index.ts index 523b415f0..f91a855f6 100644 --- a/packages/mutable/src/index.ts +++ b/packages/mutable/src/index.ts @@ -131,7 +131,7 @@ function setProperty( if (state[$HAS] && state[$HAS][property] && prev === undefined) state[$HAS][property].$(); } - // eslint-disable-next-line prefer-const + // oxlint-disable-next-line prefer-const let nodes = getNodes(state, $NODE), node: DataNode | undefined; diff --git a/packages/notification/src/index.ts b/packages/notification/src/index.ts index 5bdebcfc6..3a30d9138 100644 --- a/packages/notification/src/index.ts +++ b/packages/notification/src/index.ts @@ -48,7 +48,7 @@ export function makeNotification( const show = (): Notification | null => { if (Notification.permission !== "granted") { if (isDev) - // eslint-disable-next-line no-console + // oxlint-disable-next-line no-console console.warn( `[@solid-primitives/notification] show() called with Notification.permission "${Notification.permission}" — must be "granted".`, ); @@ -138,7 +138,7 @@ export function createNotification( const show = (): Notification | null => { if (Notification.permission !== "granted") { if (isDev) - // eslint-disable-next-line no-console + // oxlint-disable-next-line no-console console.warn( `[@solid-primitives/notification] show() called with Notification.permission "${Notification.permission}" — must be "granted".`, ); diff --git a/packages/pagination/src/index.ts b/packages/pagination/src/index.ts index 7862e7f9a..cdcad8e45 100644 --- a/packages/pagination/src/index.ts +++ b/packages/pagination/src/index.ts @@ -6,7 +6,6 @@ import { createMemo, createSignal, onCleanup, - untrack, } from "solid-js"; import { isServer, type JSX } from "@solidjs/web"; diff --git a/packages/pagination/stories/pagination.stories.tsx b/packages/pagination/stories/pagination.stories.tsx index 37cfcbbc2..446f6ea87 100644 --- a/packages/pagination/stories/pagination.stories.tsx +++ b/packages/pagination/stories/pagination.stories.tsx @@ -69,7 +69,7 @@ export const CreatePaginationStory = meta.story({ render: () => { const [totalPages, setTotalPages] = createSignal(20); const [maxVisible, setMaxVisible] = createSignal(7); - const [paginationProps, page, setPage] = createPagination(() => ({ + const [paginationProps, page, _setPage] = createPagination(() => ({ pages: totalPages(), maxPages: maxVisible(), })); diff --git a/packages/permission/src/index.ts b/packages/permission/src/index.ts index 989c3086f..a0e8cabe6 100644 --- a/packages/permission/src/index.ts +++ b/packages/permission/src/index.ts @@ -19,7 +19,7 @@ export const createPermission = ( const [status, setStatus] = createSignal(undefined, { ownedWrite: true, }); - // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition + // oxlint-disable-next-line @typescript-eslint/no-unnecessary-condition if (navigator) { navigator.permissions .query(typeof name === "string" ? { name } : name) diff --git a/packages/platform/src/index.ts b/packages/platform/src/index.ts index 42f87fc87..408f34ab0 100644 --- a/packages/platform/src/index.ts +++ b/packages/platform/src/index.ts @@ -51,7 +51,7 @@ export const isSafari: boolean = !!n.vendor && n.vendor.includes("Apple") && ua && !ua.includes("CriOS") && !ua.includes("FxiOS"); /** Browser is Internet Explorer 6-11 */ -// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition +// oxlint-disable-next-line @typescript-eslint/no-unnecessary-condition export const isIE = /*@cc_on!@*/ false || !!w.document.documentMode; /** is Chromium-based browser */ diff --git a/packages/pointer/src/index.ts b/packages/pointer/src/index.ts index 5f4e64027..1a3120afe 100644 --- a/packages/pointer/src/index.ts +++ b/packages/pointer/src/index.ts @@ -177,7 +177,7 @@ export function createPerPointerListeners( const type = "pointer" + key.substring(2).toLowerCase(); return (fn: Handler) => { if (!init) { - // eslint-disable-next-line no-console + // oxlint-disable-next-line no-console if (!isServer && DEV) console.warn(onlyInitMessage); return; } @@ -215,13 +215,13 @@ export function createPerPointerListeners( // onMove() fn => { if (init) addListener("pointermove", fn, pointerId); - // eslint-disable-next-line no-console + // oxlint-disable-next-line no-console else if (!isServer && DEV) console.warn(onlyInitMessage); }, // onUp() fn => { if (init) onUp = fn; - // eslint-disable-next-line no-console + // oxlint-disable-next-line no-console else if (!isServer && DEV) console.warn(onlyInitMessage); }, ); diff --git a/packages/presence/stories/presence.stories.tsx b/packages/presence/stories/presence.stories.tsx index d62e7d280..d769dd37d 100644 --- a/packages/presence/stories/presence.stories.tsx +++ b/packages/presence/stories/presence.stories.tsx @@ -96,7 +96,7 @@ export const ItemSwitcher = meta.story({ render: () => { const ITEMS = ["Alpha", "Beta", "Gamma", "Delta"] as const; const [active, setActive] = createSignal<(typeof ITEMS)[number] | undefined>(ITEMS[0]); - const { isMounted, mountedItem, isVisible, isEntering, isExiting } = createPresence(active, { + const { isMounted, mountedItem, isEntering, isExiting } = createPresence(active, { transitionDuration: 400, }); diff --git a/packages/promise/test/intex.test.ts b/packages/promise/test/intex.test.ts index a3325c95b..575c52f36 100644 --- a/packages/promise/test/intex.test.ts +++ b/packages/promise/test/intex.test.ts @@ -266,7 +266,7 @@ describe("untilAll", () => { }); test("rejects when the root disposes before all conditions are met", async () => { - const [a, setA] = createSignal(false); + const [a, _setA] = createSignal(false); let threw = false; const dispose = createRoot(dispose => { @@ -496,6 +496,7 @@ describe("retry", () => { }); test("does not delay after the last failed attempt", async () => { + // oxlint-disable-next-line no-unused-vars let attempts = 0; const delayFn = vi.fn(() => 500); diff --git a/packages/promise/test/server.test.ts b/packages/promise/test/server.test.ts index 52316b4f7..e954f319a 100644 --- a/packages/promise/test/server.test.ts +++ b/packages/promise/test/server.test.ts @@ -1,5 +1,5 @@ import { describe, test, expect } from "vitest"; -import { createRoot, createSignal } from "solid-js"; +import { createSignal } from "solid-js"; import { until, changed, promiseTimeout, raceTimeout } from "../src/index.js"; describe("SSR", () => { diff --git a/packages/props/stories/props.stories.tsx b/packages/props/stories/props.stories.tsx index e61f67b30..ac7dd0754 100644 --- a/packages/props/stories/props.stories.tsx +++ b/packages/props/stories/props.stories.tsx @@ -3,7 +3,6 @@ import preview from "../../../.storybook/preview.js"; import { combineProps, combineHandlers, - filterProps, partitionProps, } from "@solid-primitives/props"; import readme from "../README.md?raw"; diff --git a/packages/props/test/filterProps.test.ts b/packages/props/test/filterProps.test.ts index 004d3dee2..31ea52bc7 100644 --- a/packages/props/test/filterProps.test.ts +++ b/packages/props/test/filterProps.test.ts @@ -48,6 +48,7 @@ describe("filterProps", () => { ); flush(); expect(captured).toEqual({ a: 1, c: 3 }); + queueMicrotask(dispose); }); setProps({ a: 1, b: 2, c: 3, d: 4, e: 5 }); @@ -119,6 +120,7 @@ describe("filterProps + createPropsPredicate", () => { expect(captured).toEqual({ a: 1, c: 3 }); expect(checked).toEqual(["a", "b", "c"]); checked.length = 0; + queueMicrotask(dispose); }); setProps({ a: 1, b: 2, c: 3, d: 4, e: 5 }); @@ -173,6 +175,7 @@ describe("partitionProps", () => { flush(); expect(capturedMatched).toEqual({ a: 1, c: 3 }); expect(capturedRest).toEqual({ b: 2 }); + queueMicrotask(dispose); }); setProps({ a: 10, b: 20, c: 30, d: 40 }); diff --git a/packages/range/src/indexRange.ts b/packages/range/src/indexRange.ts index a8f949ad7..bc20a388f 100644 --- a/packages/range/src/indexRange.ts +++ b/packages/range/src/indexRange.ts @@ -113,7 +113,7 @@ export function indexRange( return () => { let _step = getStep(); if (_step === 0) { - // eslint-disable-next-line no-console + // oxlint-disable-next-line no-console if (!isServer && DEV) console.warn("Range cannot have a step of 0"); return items; } diff --git a/packages/range/src/mapRange.ts b/packages/range/src/mapRange.ts index e6ad7de7a..2d3cba869 100644 --- a/packages/range/src/mapRange.ts +++ b/packages/range/src/mapRange.ts @@ -116,7 +116,7 @@ export function mapRange( return () => { let _step = getStep(); if (_step === 0) { - // eslint-disable-next-line no-console + // oxlint-disable-next-line no-console if (!isServer && DEV) console.warn("Range cannot have a step of 0"); return items; } diff --git a/packages/scheduled/stories/scheduled.stories.tsx b/packages/scheduled/stories/scheduled.stories.tsx index aa9d9e45a..e445f9604 100644 --- a/packages/scheduled/stories/scheduled.stories.tsx +++ b/packages/scheduled/stories/scheduled.stories.tsx @@ -8,7 +8,7 @@ import { createScheduled, } from "@solid-primitives/scheduled"; import readme from "../README.md?raw"; -import { StatRow, EventLog, Button as Btn, Container } from "../../../.storybook/ui/index.js"; +import { StatRow, Button as Btn, Container } from "../../../.storybook/ui/index.js"; const meta = preview.meta({ title: "Utilities/Scheduled", diff --git a/packages/share/src/web-share.ts b/packages/share/src/web-share.ts index 8d0e32c16..0b0550c52 100644 --- a/packages/share/src/web-share.ts +++ b/packages/share/src/web-share.ts @@ -20,13 +20,13 @@ import { INTERNAL_OPTIONS } from "@solid-primitives/utils"; export const makeWebShare = () => { const share = (data: ShareData) => { // Some browsers do not support `WebShare`, so sharing failed. - // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition + // oxlint-disable-next-line @typescript-eslint/no-unnecessary-condition if (!navigator.share) { return Promise.reject("your browser does not support web share."); } // Some browsers do not support `files` and `navigator.canShare`, so sharing failed. - // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition + // oxlint-disable-next-line @typescript-eslint/no-unnecessary-condition if (data.files && (!navigator.canShare || !navigator.canShare(data))) { return Promise.reject("your browser does not support share files."); } diff --git a/packages/signal-builders/src/number.ts b/packages/signal-builders/src/number.ts index d6a07dda4..b73849864 100644 --- a/packages/signal-builders/src/number.ts +++ b/packages/signal-builders/src/number.ts @@ -11,6 +11,7 @@ import { type Accessor, createMemo } from "solid-js"; */ export function add(...a: MaybeAccessor[]): Accessor; export function add(...a: MaybeAccessor[]): Accessor; +export function add(...a: MaybeAccessor<(number | string)>[]): Accessor; export function add(...a: MaybeAccessor[]): Accessor { return createMemo(() => _.add(...accessArray(a))); } diff --git a/packages/signal-builders/stories/signal-builders.stories.tsx b/packages/signal-builders/stories/signal-builders.stories.tsx index f2a54dae0..a3a321d05 100644 --- a/packages/signal-builders/stories/signal-builders.stories.tsx +++ b/packages/signal-builders/stories/signal-builders.stories.tsx @@ -1,7 +1,6 @@ import { createSignal, For, Show } from "solid-js"; import preview from "../../../.storybook/preview.js"; import { - push, filter, sort, capitalize, diff --git a/packages/signal-builders/test/index.test.ts b/packages/signal-builders/test/index.test.ts index e988b096a..50ffc2896 100644 --- a/packages/signal-builders/test/index.test.ts +++ b/packages/signal-builders/test/index.test.ts @@ -295,7 +295,7 @@ describe("add()", () => { it("updates when signal changes", () => { const [a, setA] = createSignal(1); - const [b, setB] = createSignal(2); + const [b, _setB] = createSignal(2); const { result, dispose } = createRoot(d => ({ result: add(a, b), dispose: d })); expect(result()).toBe(3); setA(10); diff --git a/packages/spring/src/index.ts b/packages/spring/src/index.ts index 1f503c8d8..39a1274dd 100644 --- a/packages/spring/src/index.ts +++ b/packages/spring/src/index.ts @@ -214,7 +214,7 @@ export function makeSpring( value_last = value_current; setSignal((value_current = new_value)); - // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition + // oxlint-disable-next-line @typescript-eslint/no-unnecessary-condition if (settled) { stopAnimation(); } else { diff --git a/packages/state-machine/src/index.ts b/packages/state-machine/src/index.ts index cd327d0dd..511178888 100644 --- a/packages/state-machine/src/index.ts +++ b/packages/state-machine/src/index.ts @@ -196,11 +196,11 @@ export function createMachine>( next[key as any] = (input: any) => next(key, input); } - // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition + // oxlint-disable-next-line @typescript-eslint/no-unnecessary-condition while (true) { pendingType = undefined; value = untrack(() => (states as any)[type](value, next)); - if (pendingType === undefined) break; // eslint-disable-line @typescript-eslint/no-unnecessary-condition + if (pendingType === undefined) break; // oxlint-disable-line @typescript-eslint/no-unnecessary-condition type = pendingType; value = pendingValue; } diff --git a/packages/state-machine/stories/createMachine.stories.tsx b/packages/state-machine/stories/createMachine.stories.tsx index bcdd62573..9465ad22a 100644 --- a/packages/state-machine/stories/createMachine.stories.tsx +++ b/packages/state-machine/stories/createMachine.stories.tsx @@ -220,7 +220,9 @@ export const InlineEdit = meta.story({ // Forward references so state callbacks can trigger external transitions. // These are assigned after createMachine returns; closures capture the // binding, not the value, so they resolve correctly at call time. + // oxlint-disable-next-line prefer-const let toEdit!: () => void; + // oxlint-disable-next-line prefer-const let toRead!: () => void; const state = createMachine<{ diff --git a/packages/static-store/src/index.ts b/packages/static-store/src/index.ts index 4c1781e0a..684d2f0d6 100644 --- a/packages/static-store/src/index.ts +++ b/packages/static-store/src/index.ts @@ -1,6 +1,5 @@ import { accessWith, isObject, type SetterParam } from "@solid-primitives/utils"; import { - type Accessor, createMemo, createSignal, type ComputeFunction, diff --git a/packages/storage/src/persisted.ts b/packages/storage/src/persisted.ts index e766fb736..71d1f0876 100644 --- a/packages/storage/src/persisted.ts +++ b/packages/storage/src/persisted.ts @@ -151,7 +151,7 @@ export function makePersisted< const value = deserialize(data); (signal[1] as any)(() => value); } catch (e) { - // eslint-disable-next-line no-console + // oxlint-disable-next-line no-console if (DEV) console.warn(e); } } @@ -160,7 +160,7 @@ export function makePersisted< const value = deserialize(data); (signal[1] as any)(reconcile(value, () => true)); } catch (e) { - // eslint-disable-next-line no-console + // oxlint-disable-next-line no-console if (DEV) console.warn(e); } }; @@ -247,7 +247,7 @@ export const wsSync = (ws: WebSocket, warnOnError: boolean = !!DEV): Persistence subscriber(data); } } catch (e) { - // eslint-disable-next-line no-console + // oxlint-disable-next-line no-console if (warnOnError) console.warn(e); } }), diff --git a/packages/storage/stories/storage.stories.tsx b/packages/storage/stories/storage.stories.tsx index f8d2897e8..7ab71f8af 100644 --- a/packages/storage/stories/storage.stories.tsx +++ b/packages/storage/stories/storage.stories.tsx @@ -5,7 +5,6 @@ import readme from "../README.md?raw"; import { Button, ButtonRow, - Code, Container, Section, StatRow, diff --git a/packages/storage/test/persisted.test.ts b/packages/storage/test/persisted.test.ts index 818ba76b8..c5aae9fab 100644 --- a/packages/storage/test/persisted.test.ts +++ b/packages/storage/test/persisted.test.ts @@ -126,13 +126,13 @@ describe("makePersisted", () => { it("only updates the leaves in initialization", async () => { mockAsyncStorage.setItem("test4a", JSON.stringify({ a: { b: { c: 1 } } })); - let triggered = { a: 0, b: 0, c: 0 }; + const triggered = { a: 0, b: 0, c: 0 }; await createRoot(async (dispose) => { const [state, setState] = createStore({ a: { b: { c: 0 } } }); createEffect(() => state.a, (_) => { triggered.a++; }); createEffect(() => state.a.b, (_) => { triggered.b++; }); createEffect(() => state.a.b.c, (_) => { triggered.c++; }); - const [store, setStore, init] = makePersisted( + const [store, _setStore] = makePersisted( [state, setState], { storage: mockAsyncStorage, name: "test4a" } ); diff --git a/packages/utils/src/index.ts b/packages/utils/src/index.ts index e39e21ba6..ffa868070 100644 --- a/packages/utils/src/index.ts +++ b/packages/utils/src/index.ts @@ -167,7 +167,7 @@ export const withAccess = , V = MaybeAccessorValue fn: (value: NonNullable) => void, ) => { const _value = access(value); - // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition + // oxlint-disable-next-line @typescript-eslint/no-unnecessary-condition typeof _value != null && fn(_value as NonNullable); }; diff --git a/packages/video/src/createVideo.ts b/packages/video/src/createVideo.ts index db6152972..2548e8740 100644 --- a/packages/video/src/createVideo.ts +++ b/packages/video/src/createVideo.ts @@ -118,7 +118,7 @@ export const createVideo = ( const [player, cleanup] = makeVideo(access(src), {}, options); onCleanup(cleanup); - // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition + // oxlint-disable-next-line @typescript-eslint/no-unnecessary-condition const seek = player.fastSeek ? (time: number) => player.fastSeek(time) : (time: number) => { player.currentTime = time; }; diff --git a/packages/video/src/createVideoPlayer.ts b/packages/video/src/createVideoPlayer.ts index 394ce7f4b..01ae251a8 100644 --- a/packages/video/src/createVideoPlayer.ts +++ b/packages/video/src/createVideoPlayer.ts @@ -56,7 +56,7 @@ export const makeVideoPlayer = ( player, play: () => player.play(), pause: () => player.pause(), - // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition + // oxlint-disable-next-line @typescript-eslint/no-unnecessary-condition seek: player.fastSeek ? (time: number) => player.fastSeek(time) : (time: number) => { diff --git a/packages/video/stories/createVideoPlayer.stories.tsx b/packages/video/stories/createVideoPlayer.stories.tsx index 9dff200a4..ed01c631e 100644 --- a/packages/video/stories/createVideoPlayer.stories.tsx +++ b/packages/video/stories/createVideoPlayer.stories.tsx @@ -25,6 +25,7 @@ export default meta; const VIDEO = "/video/big_buck_bunny_sall.mp4"; +// oxlint-disable-next-line no-unused-vars const fmt = (s: number) => `${Math.floor(s / 60)}:${String(Math.floor(s % 60)).padStart(2, "0")}`; const SPEEDS = [0.5, 1, 1.5, 2] as const; diff --git a/packages/websocket/src/index.ts b/packages/websocket/src/index.ts index a7c19a97a..2e3d37ea9 100644 --- a/packages/websocket/src/index.ts +++ b/packages/websocket/src/index.ts @@ -122,6 +122,7 @@ export const makeReconnectingWS = ( protocols?: string | string[], options: WSReconnectOptions = {}, ) => { + // oxlint-disable-next-line no-unused-vars let retries = options.retries || Infinity; let ws: ReconnectingWebSocket; const queue: WSMessage[] = []; @@ -131,7 +132,7 @@ export const makeReconnectingWS = ( let events: Parameters[] = [["close", onClose]]; const getWS = () => { ws?.removeEventListener("close", onClose); - // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition + // oxlint-disable-next-line @typescript-eslint/no-unnecessary-condition if (ws && ws.readyState < 2) ws.close(); ws = Object.assign(makeWS(url, protocols, queue), { reconnect: getWS, diff --git a/packages/websocket/stories/websocket.stories.tsx b/packages/websocket/stories/websocket.stories.tsx index f87ddf04a..a7916a062 100644 --- a/packages/websocket/stories/websocket.stories.tsx +++ b/packages/websocket/stories/websocket.stories.tsx @@ -13,7 +13,6 @@ import { Badge, Button, ButtonRow, - Card, Container, EventLog, Section, diff --git a/packages/workers/test/index.test.ts b/packages/workers/test/index.test.ts index ef237b248..82c343471 100644 --- a/packages/workers/test/index.test.ts +++ b/packages/workers/test/index.test.ts @@ -276,7 +276,7 @@ describe("abort", () => { }); it("abort() after the promise already resolved is a no-op", async () => { - let mainListeners: ((e: { data: unknown }) => void)[] = []; + const mainListeners: ((e: { data: unknown }) => void)[] = []; const mock = { addEventListener: vi.fn((_: string, h: (e: { data: unknown }) => void) => { mainListeners.push(h); }), removeEventListener: vi.fn(), diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 816a7db2a..02630740e 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -53,15 +53,12 @@ importers: esbuild-plugin-solid: specifier: ^0.6.0 version: 0.6.0(esbuild@0.25.5)(solid-js@2.0.0-beta.14) - eslint: - specifier: ^9.28.0 - version: 9.28.0(jiti@1.21.7) eslint-plugin-eslint-comments: specifier: ^3.2.0 version: 3.2.0(eslint@9.28.0(jiti@1.21.7)) eslint-plugin-no-only-tests: specifier: ^3.3.0 - version: 3.3.0 + version: 3.4.0 geist: specifier: ^1.7.1 version: 1.7.2(next@16.2.7(@babel/core@7.29.0)(react-dom@19.2.7(react@19.2.7))(react@19.2.7)(sass@1.77.8)) @@ -71,6 +68,9 @@ importers: json-to-markdown-table: specifier: ^1.0.0 version: 1.0.0 + oxlint: + specifier: ^1.71.0 + version: 1.71.0 prettier: specifier: ^3.5.3 version: 3.5.3 @@ -3196,6 +3196,128 @@ packages: cpu: [x64] os: [win32] + '@oxlint/binding-android-arm-eabi@1.71.0': + resolution: {integrity: sha512-ImGmd1njEg4FEJH03jhRnveEegtO3czCtfptvaHivKAZQIYATbVFBrrzbaYMYv0oJioTnxZAZVSyV+oL7W8S2g==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm] + os: [android] + + '@oxlint/binding-android-arm64@1.71.0': + resolution: {integrity: sha512-4A5BEexBrwY1YFF8Kiq/lp/wQPRG79G3BWIE1FuWaM5MvmpYSd+7ZySVcKkHdwo0UDzdQGddp6pD9mpctMqLnw==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [android] + + '@oxlint/binding-darwin-arm64@1.71.0': + resolution: {integrity: sha512-9wJA9GJulLwS2usU3CEisI/ESDO1n1z9eyTCvApMDrAkbJ1ve0mORgTMjcWWsKxkzkeZ2N/Gpra5IQE7x8tYgQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [darwin] + + '@oxlint/binding-darwin-x64@1.71.0': + resolution: {integrity: sha512-PlLCjS06V0PeJMAJwzjrExw1sYNW9Gch3JtNlcwwZDXGlTYDuwHNN89zYH8LTXFfgkVtsYvs2nv0FqrzyuFDzg==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [darwin] + + '@oxlint/binding-freebsd-x64@1.71.0': + resolution: {integrity: sha512-Lhil7bWre0ncxbUoDoxfS0JzpTz17BRQKW7iwoAUY8GJ66+WwJEfYPCFJ1P0WgVZR5/O/b3Q2pENlHOjeXLOGQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [freebsd] + + '@oxlint/binding-linux-arm-gnueabihf@1.71.0': + resolution: {integrity: sha512-Oo9/L58PYD3RC0x05d2upAPLllHytTjHQGsnC06P6Ynn7jKkp5mdImQxXdJ3+FnBaKspNpGogzgVsi6g872LiA==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm] + os: [linux] + + '@oxlint/binding-linux-arm-musleabihf@1.71.0': + resolution: {integrity: sha512-mSHfyfgJrEbyIR29ejaeS50BdPk+GoNPlC1dckpDiUZbJAIel68sjSMdOt4WY0/gva+ECC7FNITQkxMJU+vSBw==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm] + os: [linux] + + '@oxlint/binding-linux-arm64-gnu@1.71.0': + resolution: {integrity: sha512-n9yY4M2tiy3aij4AqtlnspzpfdpeT5JQfK2/w2d8oyp5W0FRwOb1dIeX99nORNcxGr08iD9bH8N5XFz3I2iy8w==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [linux] + libc: [glibc] + + '@oxlint/binding-linux-arm64-musl@1.71.0': + resolution: {integrity: sha512-fJZrs5sDZtTaPIOiemRQQmo82Ezy+vOGXemPc4Ok7iVVsYsFa7SlW6Z5XN819VfsqBHRm3NJ3rTdnR8+bJYJdQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [linux] + libc: [musl] + + '@oxlint/binding-linux-ppc64-gnu@1.71.0': + resolution: {integrity: sha512-cwl7VKGERIy9p+G+AvZdfy/06q0aHXaTt/mMRReC751iuNYJgqKjB7NydXSS30nBT9vtr2tunciOtrR4fD6FUA==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [ppc64] + os: [linux] + libc: [glibc] + + '@oxlint/binding-linux-riscv64-gnu@1.71.0': + resolution: {integrity: sha512-eZ8ieVXvzGi8jr7+ybQGPK2STw3mldfxZlgA2738iflfB/rzA69sE6m5rDRpQaxC7dpm745Enlh1Tod0QAk9Gg==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [riscv64] + os: [linux] + libc: [glibc] + + '@oxlint/binding-linux-riscv64-musl@1.71.0': + resolution: {integrity: sha512-puMDbQYe6+NXwfMusojoA7CXGn2b3utukmd23PQqc1E3XhVCwyZ+FueSMzDYeNgDV2dUfIVXAAKZBcFDeCL6sA==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [riscv64] + os: [linux] + libc: [musl] + + '@oxlint/binding-linux-s390x-gnu@1.71.0': + resolution: {integrity: sha512-4NJLxBs1ujISCt3L/1FcywLs73PWtJuw+piD6feK2V6h6OS6P7xu9/sWt1DTRLibe6QCzmfZzmM/2HPORoV/Lg==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [s390x] + os: [linux] + libc: [glibc] + + '@oxlint/binding-linux-x64-gnu@1.71.0': + resolution: {integrity: sha512-cFDaiR8L3430qp88tfZnvFlt3KotFhR/DlbIL0nHOMMYiG/9Wy4l+6f7t8G8pTa9bd8Lt8+M0y/qjRQ/xcB74g==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [linux] + libc: [glibc] + + '@oxlint/binding-linux-x64-musl@1.71.0': + resolution: {integrity: sha512-orfixdt76KlpNly9z0PkWBBNfwjKz+JFVLP/7wnVchlKNU9Dpt9InU/ZggeSej6fC7qwHmHNOGlhLnQXcYoGuA==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [linux] + libc: [musl] + + '@oxlint/binding-openharmony-arm64@1.71.0': + resolution: {integrity: sha512-9emQu2lAp6yhPB3XuI+++vR+l/o6JR1X+EpxwcumPdQXBWXEPAsquPGL7l158EqU8SebQMXTUa/S5zN98juyHw==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [openharmony] + + '@oxlint/binding-win32-arm64-msvc@1.71.0': + resolution: {integrity: sha512-bd5kI8spYwTm3BILDtGhi73zoup5dw8MlPQNT8YB3BD5UIsjNe3K9/4ctrzQMX4SZMoK5HgzVLkLJzacEXB7fA==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [win32] + + '@oxlint/binding-win32-ia32-msvc@1.71.0': + resolution: {integrity: sha512-W4HvOHGzVLHcrmFu+bMrJlho+/yrlX5ZNdJZqGe8MEldkQG+RHYhxxad9P4jvWAYFmIqUA5i9DQ8QsJqSU9GIw==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [ia32] + os: [win32] + + '@oxlint/binding-win32-x64-msvc@1.71.0': + resolution: {integrity: sha512-D2kyEIPHk/G/wiZLnwTVC/sVst+T/lKldVOjAFpgTIBUAOlry72e5OiapDbDBF4LfJLkN5ypJb/8Eu6yJzkveQ==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [win32] + '@peculiar/asn1-schema@2.3.13': resolution: {integrity: sha512-3Xq3a01WkHRZL8X04Zsfg//mGaA21xlL4tlVn4v2xGT0JStiztATRkMwa5b+f/HXmY2smsiLXYK46Gwgzvfg3g==} @@ -4701,8 +4823,8 @@ packages: peerDependencies: eslint: '>=4.19.1' - eslint-plugin-no-only-tests@3.3.0: - resolution: {integrity: sha512-brcKcxGnISN2CcVhXJ/kEQlNa0MEfGRtwKtWA16SkqXHKitaKIMrfemJKLKX1YqDU5C/5JY3PvZXd5jEW04e0Q==} + eslint-plugin-no-only-tests@3.4.0: + resolution: {integrity: sha512-4S3/9Nb7A2tiMcpzEQE9bQSlpeOz6WJkgryBuou/SA8W2x2c8Zf4j0NvTKBjv6qNhF9T79tmkecm/0CHqV0UGg==} engines: {node: '>=5.0.0'} eslint-scope@8.4.0: @@ -5826,6 +5948,19 @@ packages: oxc-resolver@11.20.0: resolution: {integrity: sha512-CblytBiV/a/ZXY34dsVU2NxhIOxMXst8CvDCtyBelVITgd7PLrKzbEbA6oKLdPjvDKDzCiW48qzmzZ+mYaqn+g==} + oxlint@1.71.0: + resolution: {integrity: sha512-U1m1X+C0vDj7DC1e13IoZULzEcPczE7UOMTs8VlZGHUEIUaSTZKo5qkPsQEfzpgnQ29Pea/w3Xntk62UCecxZw==} + engines: {node: ^20.19.0 || >=22.12.0} + hasBin: true + peerDependencies: + oxlint-tsgolint: '>=0.22.1' + vite-plus: '*' + peerDependenciesMeta: + oxlint-tsgolint: + optional: true + vite-plus: + optional: true + p-filter@2.1.0: resolution: {integrity: sha512-ZBxxZ5sL2HghephhpGAQdoskxplTwr7ICaehZwLIlfL6acuVgZPm8yBNuRAFBGEqtD/hmUeq9eqLg2ys9Xr/yw==} engines: {node: '>=8'} @@ -8023,7 +8158,7 @@ snapshots: globals: 14.0.0 ignore: 5.3.2 import-fresh: 3.3.1 - js-yaml: 4.1.0 + js-yaml: 4.1.1 minimatch: 3.1.2 strip-json-comments: 3.1.1 transitivePeerDependencies: @@ -8868,6 +9003,63 @@ snapshots: '@oxc-resolver/binding-win32-x64-msvc@11.20.0': optional: true + '@oxlint/binding-android-arm-eabi@1.71.0': + optional: true + + '@oxlint/binding-android-arm64@1.71.0': + optional: true + + '@oxlint/binding-darwin-arm64@1.71.0': + optional: true + + '@oxlint/binding-darwin-x64@1.71.0': + optional: true + + '@oxlint/binding-freebsd-x64@1.71.0': + optional: true + + '@oxlint/binding-linux-arm-gnueabihf@1.71.0': + optional: true + + '@oxlint/binding-linux-arm-musleabihf@1.71.0': + optional: true + + '@oxlint/binding-linux-arm64-gnu@1.71.0': + optional: true + + '@oxlint/binding-linux-arm64-musl@1.71.0': + optional: true + + '@oxlint/binding-linux-ppc64-gnu@1.71.0': + optional: true + + '@oxlint/binding-linux-riscv64-gnu@1.71.0': + optional: true + + '@oxlint/binding-linux-riscv64-musl@1.71.0': + optional: true + + '@oxlint/binding-linux-s390x-gnu@1.71.0': + optional: true + + '@oxlint/binding-linux-x64-gnu@1.71.0': + optional: true + + '@oxlint/binding-linux-x64-musl@1.71.0': + optional: true + + '@oxlint/binding-openharmony-arm64@1.71.0': + optional: true + + '@oxlint/binding-win32-arm64-msvc@1.71.0': + optional: true + + '@oxlint/binding-win32-ia32-msvc@1.71.0': + optional: true + + '@oxlint/binding-win32-x64-msvc@1.71.0': + optional: true + '@peculiar/asn1-schema@2.3.13': dependencies: asn1js: 3.0.5 @@ -10576,7 +10768,7 @@ snapshots: eslint: 9.28.0(jiti@1.21.7) ignore: 5.3.2 - eslint-plugin-no-only-tests@3.3.0: {} + eslint-plugin-no-only-tests@3.4.0: {} eslint-scope@8.4.0: dependencies: @@ -11926,6 +12118,28 @@ snapshots: '@oxc-resolver/binding-win32-arm64-msvc': 11.20.0 '@oxc-resolver/binding-win32-x64-msvc': 11.20.0 + oxlint@1.71.0: + optionalDependencies: + '@oxlint/binding-android-arm-eabi': 1.71.0 + '@oxlint/binding-android-arm64': 1.71.0 + '@oxlint/binding-darwin-arm64': 1.71.0 + '@oxlint/binding-darwin-x64': 1.71.0 + '@oxlint/binding-freebsd-x64': 1.71.0 + '@oxlint/binding-linux-arm-gnueabihf': 1.71.0 + '@oxlint/binding-linux-arm-musleabihf': 1.71.0 + '@oxlint/binding-linux-arm64-gnu': 1.71.0 + '@oxlint/binding-linux-arm64-musl': 1.71.0 + '@oxlint/binding-linux-ppc64-gnu': 1.71.0 + '@oxlint/binding-linux-riscv64-gnu': 1.71.0 + '@oxlint/binding-linux-riscv64-musl': 1.71.0 + '@oxlint/binding-linux-s390x-gnu': 1.71.0 + '@oxlint/binding-linux-x64-gnu': 1.71.0 + '@oxlint/binding-linux-x64-musl': 1.71.0 + '@oxlint/binding-openharmony-arm64': 1.71.0 + '@oxlint/binding-win32-arm64-msvc': 1.71.0 + '@oxlint/binding-win32-ia32-msvc': 1.71.0 + '@oxlint/binding-win32-x64-msvc': 1.71.0 + p-filter@2.1.0: dependencies: p-map: 2.1.0 diff --git a/scripts/new-package.ts b/scripts/new-package.ts index 4a889f97a..60a95c1e3 100644 --- a/scripts/new-package.ts +++ b/scripts/new-package.ts @@ -1,4 +1,4 @@ -/* eslint-disable no-console */ +/* oxlint-disable no-console */ import * as fsp from "node:fs/promises"; import * as path from "node:path"; import * as url from "node:url"; diff --git a/scripts/update-readme.ts b/scripts/update-readme.ts index b3a0682e3..f9b83ccb5 100644 --- a/scripts/update-readme.ts +++ b/scripts/update-readme.ts @@ -14,7 +14,7 @@ type PackageData = { "Solid 2": string; }; -// eslint-disable-next-line no-console +// oxlint-disable-next-line no-console console.log("updateReadme", "Updating README documentation"); const githubURL = "https://github.com/solidjs-community/solid-primitives/tree/main/packages/"; diff --git a/scripts/utils/calculate-bundlesize.ts b/scripts/utils/calculate-bundlesize.ts index 7f50eccef..3c77347b6 100644 --- a/scripts/utils/calculate-bundlesize.ts +++ b/scripts/utils/calculate-bundlesize.ts @@ -76,7 +76,7 @@ export const getPackageBundlesize = async ( external: ["solid-js", "node-fetch", "chokidar", "fs", ...(peerDependencies ?? [])], }); } catch (e) { - // eslint-disable-next-line no-console + // oxlint-disable-next-line no-console console.error( `Error when building ${exportName ? `${packageName}_${exportName}` : packageName}:\n`, e, diff --git a/scripts/utils/utils.ts b/scripts/utils/utils.ts index d03580ebd..88f1080e5 100644 --- a/scripts/utils/utils.ts +++ b/scripts/utils/utils.ts @@ -22,9 +22,9 @@ export function getPackageNameFromCWD(): string | null { return null; } -// eslint-disable-next-line no-console +// oxlint-disable-next-line no-console export const log_info = (string: string) => console.log(`\x1b[34m${string}\x1b[0m`); -// eslint-disable-next-line no-console +// oxlint-disable-next-line no-console export const log_error = (string: string) => console.log(`\x1b[31m${string}\x1b[0m`); export const checkValidPackageName = (name: string) => diff --git a/site/scripts/generate.ts b/site/scripts/generate.ts index 8c96668e1..3fb421885 100644 --- a/site/scripts/generate.ts +++ b/site/scripts/generate.ts @@ -176,7 +176,7 @@ async function generatePackageSize(module: ModuleData) { const packages = [] as PackageListItem[]; - for (let module of await getModulesData()) { + for (const module of await getModulesData()) { if (module.primitive == null) continue; const [readme, primitives, packageSize] = await Promise.all([ @@ -199,7 +199,7 @@ async function generatePackageSize(module: ModuleData) { // gather all module names into one json file await fsp.writeFile(packagesDist, JSON.stringify(packages, null, 2)); - // eslint-disable-next-line no-console + // oxlint-disable-next-line no-console console.log(`\nGenerated data for ${packages.length} packages.\n`); })(); diff --git a/site/src/client.tsx b/site/src/client.tsx index aa0f7b2a2..a9e7e0a60 100644 --- a/site/src/client.tsx +++ b/site/src/client.tsx @@ -6,9 +6,9 @@ import { hydrateStart, StartClient } from "@tanstack/solid-start/client"; // Batch them into a single collapsed group so the dev console stays usable. if (import.meta.env.MODE === "development") { const keys: string[] = []; - // eslint-disable-next-line no-console + // oxlint-disable-next-line no-console const cw = console.warn; - // eslint-disable-next-line no-console + // oxlint-disable-next-line no-console console.warn = (...args) => { if (args[0] === "Unable to find DOM nodes for hydration key:") { keys.push(args[1]); @@ -16,10 +16,10 @@ if (import.meta.env.MODE === "development") { } else cw(...args); }; const logStoredWarnings = debounce(() => { - // eslint-disable-next-line no-console + // oxlint-disable-next-line no-console console.groupCollapsed(`There were ${keys.length} hydration warnings.`); keys.forEach(key => cw("Unable to find DOM nodes for hydration key:", key)); - // eslint-disable-next-line no-console + // oxlint-disable-next-line no-console console.groupEnd(); keys.length = 0; }, 1000); diff --git a/site/src/routeTree.gen.ts b/site/src/routeTree.gen.ts index e44978b18..0c5b0eb11 100644 --- a/site/src/routeTree.gen.ts +++ b/site/src/routeTree.gen.ts @@ -1,4 +1,4 @@ -/* eslint-disable */ +/* oxlint-disable */ // @ts-nocheck