From 602e484290a79cc8b2d52e9150f02096ab899674 Mon Sep 17 00:00:00 2001 From: Gonzalo Riestra Date: Thu, 30 Jul 2026 12:53:49 +0200 Subject: [PATCH] Add type-aware Oxlint alongside ESLint --- .github/workflows/tests-main.yml | 3 + .github/workflows/tests-pr.yml | 2 + docs/cli/get-started.md | 2 +- oxlint.json | 688 +++++++++++++++++++++++++++++++ package.json | 9 +- pnpm-lock.yaml | 274 ++++++++++++ 6 files changed, 974 insertions(+), 4 deletions(-) create mode 100644 oxlint.json diff --git a/.github/workflows/tests-main.yml b/.github/workflows/tests-main.yml index cb3799a9516..d1ec478e613 100644 --- a/.github/workflows/tests-main.yml +++ b/.github/workflows/tests-main.yml @@ -48,6 +48,9 @@ jobs: - name: Check formatting run: pnpm prettier if: ${{ matrix.os == 'ubuntu-latest' && matrix.node == '26.1.0' }} + - name: Oxlint + run: pnpm lint:oxlint + if: ${{ matrix.os == 'ubuntu-latest' && matrix.node == '26.1.0' }} - name: Lint run: pnpm nx run-many --all --skip-nx-cache --target=lint --output-style=stream if: ${{ matrix.os == 'ubuntu-latest' && matrix.node == '26.1.0' }} diff --git a/.github/workflows/tests-pr.yml b/.github/workflows/tests-pr.yml index 302d0906da1..d257ae10538 100644 --- a/.github/workflows/tests-pr.yml +++ b/.github/workflows/tests-pr.yml @@ -53,6 +53,8 @@ jobs: node-version: ${{ env.DEFAULT_NODE_VERSION }} - name: Check formatting run: pnpm prettier + - name: Oxlint + run: pnpm lint:oxlint - name: Lint run: pnpm nx run-many --all --skip-nx-cache --target=lint --output-style=stream diff --git a/docs/cli/get-started.md b/docs/cli/get-started.md index 06e49bdc8eb..b6d1da7470b 100644 --- a/docs/cli/get-started.md +++ b/docs/cli/get-started.md @@ -70,7 +70,7 @@ Besides the scripts for building and running the CLIs, there are others that mig - `pnpm test`: Runs the tests of all the packages. - `pnpm prettier`: Checks formatting for all linted source files. - `pnpm prettier:fix`: Formats all linted source files. -- `pnpm lint`: Runs Prettier and ESLint checks for all the packages. +- `pnpm lint`: Runs Prettier, Oxlint, and ESLint checks for all the packages. - `pnpm lint:fix`: Runs Prettier and ESLint for all the packages and fixes the fixable issues. - `pnpm type-check`: Type-checks all the packagesusing the Typescript `tsc` tool. - `pnpm clean`: Removes the `dist` directory from all the packages. diff --git a/oxlint.json b/oxlint.json new file mode 100644 index 00000000000..f6010eae72c --- /dev/null +++ b/oxlint.json @@ -0,0 +1,688 @@ +{ + "$schema": "./node_modules/oxlint/configuration_schema.json", + "plugins": [ + "typescript", + "promise", + "import", + "node", + "unicorn" + ], + "categories": { + "correctness": "off" + }, + "options": { + "typeAware": true + }, + "env": { + "builtin": true, + "commonjs": true, + "es2024": true + }, + "globals": { + "__dirname": "readonly", + "__filename": "readonly", + "AbortController": "readonly", + "AbortSignal": "readonly", + "atob": "readonly", + "Blob": "readonly", + "BroadcastChannel": "readonly", + "btoa": "readonly", + "Buffer": "readonly", + "ByteLengthQueuingStrategy": "readonly", + "clearImmediate": "readonly", + "clearInterval": "readonly", + "clearTimeout": "readonly", + "CloseEvent": "readonly", + "CompressionStream": "readonly", + "console": "readonly", + "CountQueuingStrategy": "readonly", + "crypto": "readonly", + "Crypto": "readonly", + "CryptoKey": "readonly", + "CustomEvent": "readonly", + "DecompressionStream": "readonly", + "DOMException": "readonly", + "Event": "readonly", + "EventTarget": "readonly", + "fetch": "readonly", + "File": "readonly", + "FormData": "readonly", + "Headers": "readonly", + "MessageChannel": "readonly", + "MessageEvent": "readonly", + "MessagePort": "readonly", + "navigator": "readonly", + "Navigator": "readonly", + "performance": "readonly", + "Performance": "readonly", + "PerformanceEntry": "readonly", + "PerformanceMark": "readonly", + "PerformanceMeasure": "readonly", + "PerformanceObserver": "readonly", + "PerformanceObserverEntryList": "readonly", + "PerformanceResourceTiming": "readonly", + "process": "readonly", + "queueMicrotask": "readonly", + "ReadableByteStreamController": "readonly", + "ReadableStream": "readonly", + "ReadableStreamBYOBReader": "readonly", + "ReadableStreamBYOBRequest": "readonly", + "ReadableStreamDefaultController": "readonly", + "ReadableStreamDefaultReader": "readonly", + "Request": "readonly", + "Response": "readonly", + "setImmediate": "readonly", + "setInterval": "readonly", + "setTimeout": "readonly", + "structuredClone": "readonly", + "SubtleCrypto": "readonly", + "TextDecoder": "readonly", + "TextDecoderStream": "readonly", + "TextEncoder": "readonly", + "TextEncoderStream": "readonly", + "TransformStream": "readonly", + "TransformStreamDefaultController": "readonly", + "URL": "readonly", + "URLSearchParams": "readonly", + "WebAssembly": "readonly", + "WebSocket": "readonly", + "WritableStream": "readonly", + "WritableStreamDefaultController": "readonly", + "WritableStreamDefaultWriter": "readonly" + }, + "ignorePatterns": [ + "**/dist/**", + "**/node_modules/**", + "**/coverage/**", + "**/vendor/**", + "**/bin/bundle.js", + "**/*.d.ts", + "**/*.cjs", + "packages/e2e/scripts/**", + "packages/ui-extensions-server-kit/**", + "packages/ui-extensions-test-utils/**" + ], + "rules": { + "array-callback-return": "error", + "block-scoped-var": "error", + "eqeqeq": [ + "error", + "always", + { + "null": "ignore" + } + ], + "guard-for-in": "error", + "no-alert": "error", + "no-case-declarations": "error", + "no-caller": "error", + "no-div-regex": "error", + "no-empty-function": "error", + "no-empty-pattern": "error", + "no-eval": "error", + "no-extend-native": "error", + "no-extra-bind": "error", + "no-extra-label": "error", + "no-fallthrough": "error", + "no-global-assign": "error", + "no-implicit-coercion": "error", + "no-implicit-globals": "error", + "no-implied-eval": "error", + "no-iterator": "error", + "no-labels": "error", + "no-lone-blocks": "error", + "no-loop-func": "error", + "no-new-func": "error", + "no-new-wrappers": "error", + "no-new": "error", + "no-param-reassign": "error", + "no-proto": "error", + "no-redeclare": "error", + "no-return-assign": "error", + "no-self-assign": [ + "error", + { + "props": true + } + ], + "no-self-compare": "error", + "no-sequences": "error", + "no-throw-literal": "error", + "no-unmodified-loop-condition": "error", + "no-unused-expressions": "error", + "no-unused-labels": "error", + "no-useless-call": "error", + "no-useless-catch": "error", + "no-useless-concat": "error", + "no-useless-escape": "error", + "no-useless-return": "error", + "no-void": "error", + "no-warning-comments": "error", + "no-with": "error", + "prefer-promise-reject-errors": [ + "error", + { + "allowEmptyReject": true + } + ], + "radix": "error", + "require-await": "error", + "yoda": [ + "error", + "never" + ], + "no-constructor-return": "error", + "grouped-accessor-pairs": "error", + "max-params": [ + "error", + 10 + ], + "for-direction": "error", + "getter-return": [ + "error", + { + "allowImplicit": true + } + ], + "no-async-promise-executor": "error", + "no-compare-neg-zero": "error", + "no-cond-assign": "error", + "no-constant-condition": [ + "error", + { + "checkLoops": false + } + ], + "no-control-regex": "error", + "no-dupe-keys": "error", + "no-duplicate-case": "error", + "no-empty-character-class": "error", + "no-empty": "error", + "no-ex-assign": "error", + "no-extra-boolean-cast": "error", + "no-func-assign": "error", + "no-inner-declarations": "error", + "no-invalid-regexp": "error", + "no-irregular-whitespace": "error", + "no-misleading-character-class": "error", + "no-obj-calls": "error", + "no-prototype-builtins": "error", + "no-regex-spaces": "error", + "no-sparse-arrays": "error", + "no-template-curly-in-string": "error", + "no-unreachable": "error", + "no-unsafe-finally": "error", + "no-unsafe-negation": "error", + "use-isnan": "error", + "valid-typeof": "error", + "no-setter-return": "error", + "no-dupe-else-if": "error", + "func-name-matching": "error", + "func-style": [ + "error", + "declaration", + { + "allowArrowFunctions": true + } + ], + "id-length": "off", + "new-cap": [ + "error", + { + "newIsCap": true, + "capIsNew": false + } + ], + "no-array-constructor": "error", + "no-lonely-if": "error", + "no-multi-assign": "error", + "no-negated-condition": "error", + "no-nested-ternary": "error", + "no-unneeded-ternary": "error", + "operator-assignment": [ + "error", + "always" + ], + "prefer-object-spread": "error", + "unicode-bom": [ + "error", + "never" + ], + "prefer-exponentiation-operator": "error", + "no-delete-var": "error", + "no-label-var": "error", + "no-restricted-globals": "error", + "no-shadow-restricted-names": "error", + "no-shadow": "error", + "no-unused-vars": "error", + "no-use-before-define": [ + "error", + "nofunc" + ], + "constructor-super": "error", + "no-class-assign": "error", + "no-const-assign": "error", + "no-dupe-class-members": "error", + "no-this-before-super": "error", + "no-useless-constructor": "error", + "no-useless-rename": "error", + "no-var": "error", + "object-shorthand": [ + "error", + "always", + { + "avoidQuotes": true + } + ], + "prefer-const": "error", + "prefer-numeric-literals": "error", + "prefer-rest-params": "error", + "prefer-spread": "error", + "prefer-template": "error", + "require-yield": "error", + "symbol-description": "error", + "promise/catch-or-return": "error", + "promise/no-return-wrap": "error", + "promise/param-names": "error", + "promise/no-nesting": "error", + "promise/valid-params": "error", + "import/default": "error", + "import/namespace": "error", + "import/no-named-default": "error", + "import/no-absolute-path": "error", + "import/no-webpack-loader-syntax": "error", + "import/no-self-import": "error", + "import/no-cycle": "error", + "import/no-named-as-default": "off", + "import/no-named-as-default-member": "off", + "import/no-mutable-exports": "error", + "import/first": "error", + "import/no-duplicates": "error", + "import/extensions": [ + "error", + { + "js": "never", + "json": "always", + "svg": "always", + "png": "always", + "jpg": "always", + "ico": "always", + "graphql": "always", + "css": "always", + "sass": "always", + "scss": "always", + "less": "always", + "styl": "always" + } + ], + "import/newline-after-import": "error", + "import/no-anonymous-default-export": "error", + "node/callback-return": [ + "error", + [ + "callback", + "cb", + "next" + ] + ], + "node/handle-callback-err": [ + "error", + "^.*(e|E)rr(or)?$" + ], + "node/no-new-require": "error", + "node/no-path-concat": "error", + "node/no-exports-assign": "error", + "typescript/consistent-return": "error", + "typescript/dot-notation": [ + "error", + { + "allowKeywords": true + } + ] + }, + "overrides": [ + { + "files": [ + "**/*.ts", + "**/*.tsx" + ], + "rules": { + "no-unused-vars": [ + "error", + { + "args": "all", + "argsIgnorePattern": "^_", + "caughtErrors": "none", + "caughtErrorsIgnorePattern": "^_", + "destructuredArrayIgnorePattern": "^_", + "varsIgnorePattern": "^_", + "ignoreRestSiblings": true + } + ], + "no-useless-constructor": "off", + "no-shadow": "off", + "no-use-before-define": "off", + "require-await": "off", + "no-empty-function": "off", + "no-dupe-keys": "off", + "no-unreachable": "off", + "valid-typeof": "off", + "no-const-assign": "off", + "no-this-before-super": "off", + "no-redeclare": "off", + "no-dupe-class-members": "off", + "array-callback-return": "off", + "getter-return": "off", + "typescript/explicit-function-return-type": "off", + "typescript/explicit-member-accessibility": "off", + "typescript/no-explicit-any": [ + "error", + { + "fixToUnknown": true + } + ], + "typescript/no-inferrable-types": [ + "error", + { + "ignoreParameters": false, + "ignoreProperties": false + } + ], + "typescript/no-namespace": "off", + "typescript/no-non-null-assertion": "off", + "typescript/prefer-namespace-keyword": "off", + "typescript/adjacent-overload-signatures": "error", + "typescript/no-empty-interface": "off", + "typescript/array-type": [ + "error", + { + "default": "array", + "readonly": "generic" + } + ], + "typescript/no-empty-object-type": "off", + "typescript/no-wrapper-object-types": "error", + "typescript/no-extraneous-class": [ + "error", + { + "allowConstructorOnly": false, + "allowEmpty": false, + "allowStaticOnly": false + } + ], + "typescript/no-misused-new": "error", + "typescript/no-require-imports": "off", + "typescript/no-this-alias": [ + "error", + { + "allowDestructuring": true, + "allowedNames": [] + } + ], + "typescript/prefer-function-type": "off", + "typescript/promise-function-async": "off", + "typescript/ban-ts-comment": "error", + "typescript/consistent-type-assertions": [ + "error", + { + "assertionStyle": "as", + "objectLiteralTypeAssertions": "allow" + } + ], + "typescript/consistent-type-definitions": [ + "error", + "interface" + ], + "typescript/no-floating-promises": "error", + "typescript/prefer-for-of": "error", + "typescript/require-array-sort-compare": "off", + "typescript/strict-boolean-expressions": "off", + "typescript/triple-slash-reference": [ + "error", + { + "path": "never", + "types": "never", + "lib": "never" + } + ], + "typescript/unified-signatures": "error", + "typescript/await-thenable": "off", + "typescript/no-for-in-array": "off", + "typescript/no-misused-promises": "error", + "typescript/no-unnecessary-type-assertion": "off", + "typescript/prefer-includes": "off", + "typescript/prefer-regexp-exec": "off", + "typescript/prefer-string-starts-ends-with": "off", + "typescript/require-await": "off", + "typescript/unbound-method": "off", + "typescript/no-unnecessary-qualifier": "off", + "typescript/restrict-plus-operands": "off", + "typescript/no-unnecessary-type-arguments": "off", + "typescript/prefer-readonly": "error", + "typescript/consistent-indexed-object-style": "off", + "typescript/no-unnecessary-type-constraint": "error", + "no-console": "error", + "no-await-in-loop": "error", + "no-restricted-imports": [ + "error", + { + "paths": [ + { + "name": "path", + "message": "Please use: import { joinPath } from '@shopify/cli-kit/node/path'" + }, + { + "name": "node:path", + "message": "Please use: import { joinPath } from '@shopify/cli-kit/node/path'" + }, + { + "name": "child_process", + "message": "Please use: import { exec } from '@shopify/cli-kit/node/system'" + }, + { + "name": "node:child_process", + "message": "Please use: import { exec } from '@shopify/cli-kit/node/system'" + } + ] + } + ], + "vitest/consistent-test-it": [ + "error", + { + "fn": "test", + "withinDescribe": "test" + } + ], + "vitest/max-nested-describe": [ + "error", + { + "max": 2 + } + ], + "vitest/no-disabled-tests": "error", + "vitest/prefer-expect-resolves": "error", + "promise/catch-or-return": [ + "error", + { + "allowFinally": true + } + ], + "prefer-promise-reject-errors": "off", + "no-unused-expressions": [ + "error", + { + "allowTernary": true + } + ], + "no-restricted-globals": [ + "error", + { + "name": "fetch", + "message": "Please use our alternative fetch implementation in @shopify/cli-kit/node/http instead of Node.js built-in fetch. Built-in fetch does not support HTTP proxies." + } + ], + "import/extensions": [ + "error", + "ignorePackages", + { + "ts": "never", + "tsx": "never", + "js": "always" + } + ], + "import/no-cycle": "off", + "node/callback-return": "off", + "typescript/no-var-requires": "off", + "typescript/switch-exhaustiveness-check": "error", + "typescript/consistent-return": "off", + "typescript/no-unsafe-argument": "off", + "typescript/no-unsafe-assignment": "off", + "typescript/no-unsafe-call": "off", + "typescript/no-unsafe-member-access": "off", + "typescript/no-unsafe-return": "off", + "typescript/restrict-template-expressions": "off", + "typescript/no-unsafe-enum-comparison": "off", + "typescript/prefer-nullish-coalescing": "error", + "typescript/prefer-promise-reject-errors": "error", + "typescript/only-throw-error": "error", + "typescript/use-unknown-in-catch-callback-variable": "off", + "typescript/no-confusing-void-expression": "off", + "typescript/non-nullable-type-assertion-style": "off" + }, + "plugins": [ + "vitest" + ], + "env": { + "node": true + } + }, + { + "files": [ + "**/*.test.ts", + "**/*.test.tsx", + "**/*.test-data.ts", + "**/testing/*.ts", + "**/testing/*.tsx" + ], + "rules": { + "no-restricted-globals": "off", + "no-unused-vars": "off", + "no-empty-function": "off", + "typescript/no-explicit-any": "off", + "typescript/no-non-null-assertion": "off", + "typescript/no-dynamic-delete": "off", + "typescript/unbound-method": "off", + "typescript/no-redundant-type-constituents": "off", + "typescript/no-confusing-void-expression": "off", + "typescript/no-unnecessary-template-expression": "error", + "typescript/restrict-plus-operands": "off", + "typescript/non-nullable-type-assertion-style": "off", + "typescript/prefer-reduce-type-parameter": "error" + } + }, + { + "files": [ + "**/bin/*.js" + ], + "rules": { + "import/extensions": "off" + } + }, + { + "files": [ + "**/public/**/*.ts" + ], + "rules": { + "jsdoc/check-access": "error", + "jsdoc/check-property-names": "error", + "jsdoc/check-tag-names": "error", + "jsdoc/empty-tags": "error", + "jsdoc/implements-on-classes": "error", + "jsdoc/no-defaults": "error", + "jsdoc/require-param": "off", + "jsdoc/require-param-description": "error", + "jsdoc/require-param-name": "error", + "jsdoc/require-property": "error", + "jsdoc/require-property-description": "error", + "jsdoc/require-property-name": "error", + "jsdoc/require-property-type": "error", + "jsdoc/require-returns": "off", + "jsdoc/require-returns-description": "error", + "jsdoc/require-yields": "error" + }, + "plugins": [ + "jsdoc" + ] + }, + { + "files": [ + "**/*.test.ts" + ], + "rules": { + "typescript/no-explicit-any": "off" + } + }, + { + "files": [ + "src/public/**/*.ts" + ], + "rules": { + "typescript/explicit-module-boundary-types": "error" + } + }, + { + "files": [ + "src/private/node/ui/components/**/*.tsx" + ], + "rules": { + "react/function-component-definition": [ + "error", + { + "namedComponents": "arrow-function", + "unnamedComponents": "arrow-function" + } + ], + "react/hook-use-state": "error", + "react/jsx-boolean-value": "error", + "react/jsx-curly-brace-presence": "error", + "react/jsx-fragments": "error", + "react/jsx-handler-names": "error", + "react/jsx-no-useless-fragment": "error", + "react/jsx-pascal-case": "error", + "react/no-namespace": "error", + "react/no-object-type-as-default-prop": "error", + "react/self-closing-comp": "error", + "no-restricted-imports": [ + "error", + { + "paths": [ + { + "name": "react", + "importNames": [ + "FC" + ], + "message": "Please use FunctionComponent from react instead." + } + ] + } + ], + "import/no-default-export": "error", + "import/no-namespace": "error" + }, + "plugins": [ + "react" + ] + }, + { + "files": [ + "src/public/node/ui.tsx" + ], + "rules": { + "max-params": [ + "error", + 1 + ] + } + } + ] +} diff --git a/package.json b/package.json index f97831d5580..48b59308905 100644 --- a/package.json +++ b/package.json @@ -17,10 +17,11 @@ "graphql-codegen:get-graphql-schemas": "bin/get-graphql-schemas.js", "graphql-codegen": "nx run-many --target=graphql-codegen --all", "knip": "knip", - "lint:affected": "pnpm prettier && nx affected --target=lint", + "lint:affected": "pnpm prettier && pnpm lint:oxlint && nx affected --target=lint", "lint:fix:affected": "pnpm prettier:fix && nx affected --target=lint:fix", "lint:fix": "pnpm prettier:fix && nx run-many --target=lint:fix --all --skip-nx-cache", - "lint": "pnpm prettier && nx run-many --target=lint --all --skip-nx-cache", + "lint": "pnpm prettier && pnpm lint:oxlint && nx run-many --target=lint --all --skip-nx-cache", + "lint:oxlint": "oxlint --config oxlint.json --deny-warnings packages/app/src packages/cli-kit/src packages/cli/src packages/create-app/src packages/organizations/src packages/plugin-cloudflare/src packages/plugin-did-you-mean/src packages/store/src packages/theme/src packages/ui-extensions-server-kit/src packages/ui-extensions-test-utils/src packages/cli/bin packages/e2e", "prettier": "prettier --check \"packages/{app,cli-kit,cli,create-app,organizations,plugin-cloudflare,plugin-did-you-mean,store,theme,ui-extensions-server-kit,ui-extensions-test-utils}/src/**/*.{js,ts,tsx}\" \"packages/cli/bin/*.js\" \"packages/e2e/{setup,helpers,tests}/**/*.ts\" \"packages/e2e/*.ts\"", "prettier:fix": "prettier --write \"packages/{app,cli-kit,cli,create-app,organizations,plugin-cloudflare,plugin-did-you-mean,store,theme,ui-extensions-server-kit,ui-extensions-test-utils}/src/**/*.{js,ts,tsx}\" \"packages/cli/bin/*.js\" \"packages/e2e/{setup,helpers,tests}/**/*.ts\" \"packages/e2e/*.ts\"", "create-homebrew-pr": "bin/create-homebrew-pr.js", @@ -61,8 +62,8 @@ "bugsnag-build-reporter": "^2.0.0", "commander": "^9.4.0", "esbuild": "0.28.1", - "eslint-plugin-jsdoc": "50.8.0", "eslint": "^9.39.5", + "eslint-plugin-jsdoc": "50.8.0", "execa": "^7.2.0", "fast-glob": "3.3.3", "find-up": "^6.3.0", @@ -77,6 +78,8 @@ "nx": "22.7.7", "oclif": "4.23.27", "octokit-plugin-create-pull-request": "^3.12.2", + "oxlint": "1.75.0", + "oxlint-tsgolint": "7.0.2001", "pathe": "1.1.2", "pin-github-action": "^3.5.1", "prettier": "3.8.4", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index bfcb98806f2..7fe2a1f12b4 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -140,6 +140,12 @@ importers: octokit-plugin-create-pull-request: specifier: ^3.12.2 version: 3.13.1 + oxlint: + specifier: 1.75.0 + version: 1.75.0(oxlint-tsgolint@7.0.2001) + oxlint-tsgolint: + specifier: 7.0.2001 + version: 7.0.2001 pathe: specifier: 1.1.2 version: 1.1.2 @@ -3379,6 +3385,150 @@ packages: cpu: [x64] os: [win32] + '@oxlint-tsgolint/darwin-arm64@7.0.2001': + resolution: {integrity: sha512-CUJEdbSZ54+Xy9OXqOhWLTKZKV0BBiV7C2i/ygyVmXtkUNXx5YCzN8DpSSshTAKktoL7S+tnQ/ftFG/i7X896w==, tarball: https://registry.npmjs.org/@oxlint-tsgolint/darwin-arm64/-/darwin-arm64-7.0.2001.tgz} + cpu: [arm64] + os: [darwin] + + '@oxlint-tsgolint/darwin-x64@7.0.2001': + resolution: {integrity: sha512-pXfBb5BqONCcgrXQNUZWXgiYmRSWJzd97S8i41VVOh6ut0tyo+cJ5FKFpczDHxiVNfj/3e7c9B4MtztNdpIVCw==, tarball: https://registry.npmjs.org/@oxlint-tsgolint/darwin-x64/-/darwin-x64-7.0.2001.tgz} + cpu: [x64] + os: [darwin] + + '@oxlint-tsgolint/linux-arm64@7.0.2001': + resolution: {integrity: sha512-roP7zujb/QDPzDwEKsFFpzNHHy91/Y7oX9vQXk78ekyZtcQj1QXDIMH33gjDdHBfRl4K9pZ36xhRgrP4Zr+R8A==, tarball: https://registry.npmjs.org/@oxlint-tsgolint/linux-arm64/-/linux-arm64-7.0.2001.tgz} + cpu: [arm64] + os: [linux] + + '@oxlint-tsgolint/linux-x64@7.0.2001': + resolution: {integrity: sha512-UDezNqdECVmngu2TPnjaS1YoAmcTaBoI5lV9vk3VahBxoi+I5r9k3iJTT7qZoYWOXTD/7T7bNcwRgrocR6BscQ==, tarball: https://registry.npmjs.org/@oxlint-tsgolint/linux-x64/-/linux-x64-7.0.2001.tgz} + cpu: [x64] + os: [linux] + + '@oxlint-tsgolint/win32-arm64@7.0.2001': + resolution: {integrity: sha512-uJZhqB6pdXLuN+AD1F5082byyQti/NPmJA77GtcFlmT2HzRelqbNls3SaIqxpjdFgvSBF9g0yOKGBkGFg7kX8Q==, tarball: https://registry.npmjs.org/@oxlint-tsgolint/win32-arm64/-/win32-arm64-7.0.2001.tgz} + cpu: [arm64] + os: [win32] + + '@oxlint-tsgolint/win32-x64@7.0.2001': + resolution: {integrity: sha512-FkDRm8hx9OwzGQqyWG1tO5QrTLRApff9DzSgpz9QZau37BR8d1VYKOxMLGf6shPZntJFoTwIIJYT68VndYDCog==, tarball: https://registry.npmjs.org/@oxlint-tsgolint/win32-x64/-/win32-x64-7.0.2001.tgz} + cpu: [x64] + os: [win32] + + '@oxlint/binding-android-arm-eabi@1.75.0': + resolution: {integrity: sha512-lutovtFzJqlRaqpZrCqSSGaHZzl9nIxxpjLzhSRLunN6dCLylj0uzlCyQGaQDIys7rrv8kVXiFO+R4Zpn0bX7g==, tarball: https://registry.npmjs.org/@oxlint/binding-android-arm-eabi/-/binding-android-arm-eabi-1.75.0.tgz} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm] + os: [android] + + '@oxlint/binding-android-arm64@1.75.0': + resolution: {integrity: sha512-hXI0hDgHkw4w5nfru72aG7y+2iQJmC4waH/KV6H/hbgA6yAP5jYNx0P9yug15Hs0tWl/+mda3Jjn/2gmDT48tw==, tarball: https://registry.npmjs.org/@oxlint/binding-android-arm64/-/binding-android-arm64-1.75.0.tgz} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [android] + + '@oxlint/binding-darwin-arm64@1.75.0': + resolution: {integrity: sha512-D91BWbK/dMYfCcrghspPIuKs2D9LF4Z/OabVSQjw1AO6PWxArD7teDA48bm0ySFqWDaPVqmQRl5GMWNglTXyrQ==, tarball: https://registry.npmjs.org/@oxlint/binding-darwin-arm64/-/binding-darwin-arm64-1.75.0.tgz} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [darwin] + + '@oxlint/binding-darwin-x64@1.75.0': + resolution: {integrity: sha512-02mpwzf12BonZ6PT0TuQoomvEh2kVl2WGBIKWezCyToIS+rYkQZ6GXnARBAl9A4Ovm2V+Xe7M4KretyqmmcnJQ==, tarball: https://registry.npmjs.org/@oxlint/binding-darwin-x64/-/binding-darwin-x64-1.75.0.tgz} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [darwin] + + '@oxlint/binding-freebsd-x64@1.75.0': + resolution: {integrity: sha512-qZJgLnDaBsiL5YESx2t/TZ8eXkL9fEkKoXEdzegROhlz9A0lgyGnZ0dAzJrh7LJAHQl2K9RdRueN2s/9N7+odg==, tarball: https://registry.npmjs.org/@oxlint/binding-freebsd-x64/-/binding-freebsd-x64-1.75.0.tgz} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [freebsd] + + '@oxlint/binding-linux-arm-gnueabihf@1.75.0': + resolution: {integrity: sha512-7XlaWA5BJD3XpCfrEqjEe6Zseeb14S7QGa304XfwKignRaKQ+eIj775BQ7nIslggWickl4IsPUFqJ+/gAyNHVg==, tarball: https://registry.npmjs.org/@oxlint/binding-linux-arm-gnueabihf/-/binding-linux-arm-gnueabihf-1.75.0.tgz} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm] + os: [linux] + + '@oxlint/binding-linux-arm-musleabihf@1.75.0': + resolution: {integrity: sha512-av6Tpv8yrcMMMOadOqENBhlsLRcGFXXwoQ0hzHhsmS9FJ4Wioy8we427GbcMe2XTxmL2e60T67H1Dyr3up+tAA==, tarball: https://registry.npmjs.org/@oxlint/binding-linux-arm-musleabihf/-/binding-linux-arm-musleabihf-1.75.0.tgz} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm] + os: [linux] + + '@oxlint/binding-linux-arm64-gnu@1.75.0': + resolution: {integrity: sha512-WcUhd8fHT5plrA14lANevl+hOl815mVI5t2hU21oFWrZKFXIVV/Sr4rWQV0NzSvzBupbMLNc5ErEA6Ehxh5jMg==, tarball: https://registry.npmjs.org/@oxlint/binding-linux-arm64-gnu/-/binding-linux-arm64-gnu-1.75.0.tgz} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [linux] + + '@oxlint/binding-linux-arm64-musl@1.75.0': + resolution: {integrity: sha512-UWzp5wRHFe/ESO3+eEaxXsTkYTGLYjnTsi/I5neEacXSItQ6WNleapfOAeA4x2b8nyhJ4uQxqvtv9pHv8kWJtQ==, tarball: https://registry.npmjs.org/@oxlint/binding-linux-arm64-musl/-/binding-linux-arm64-musl-1.75.0.tgz} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [linux] + + '@oxlint/binding-linux-ppc64-gnu@1.75.0': + resolution: {integrity: sha512-XEVRwGMLKCUKrvhLAz4F6AIh8MJrQVdSZtAmPpRZt9tGPsUnamPOcl3dS/ZQzJnar/Ymgc//+xho0L60Emzuxg==, tarball: https://registry.npmjs.org/@oxlint/binding-linux-ppc64-gnu/-/binding-linux-ppc64-gnu-1.75.0.tgz} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [ppc64] + os: [linux] + + '@oxlint/binding-linux-riscv64-gnu@1.75.0': + resolution: {integrity: sha512-mAG4DUXqfLC8cTjMD2kt3jDmVzFREYtDyeLNdLdsCcBc4Zbl2EMuiFektGBilQwkNjYnMvCqJs55U+Hyb+b+jw==, tarball: https://registry.npmjs.org/@oxlint/binding-linux-riscv64-gnu/-/binding-linux-riscv64-gnu-1.75.0.tgz} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [riscv64] + os: [linux] + + '@oxlint/binding-linux-riscv64-musl@1.75.0': + resolution: {integrity: sha512-95hrAvriAlI+pekSomTFIn0+bawMDlDwTNVmdjsFusTHyL2JWh7TWvRNG/Lkim72uN8OiCcO9wcaC6omLP5E3w==, tarball: https://registry.npmjs.org/@oxlint/binding-linux-riscv64-musl/-/binding-linux-riscv64-musl-1.75.0.tgz} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [riscv64] + os: [linux] + + '@oxlint/binding-linux-s390x-gnu@1.75.0': + resolution: {integrity: sha512-4b6f2+FrtruAESrCqIKcrarzfrSx+wk2QNcp+RT91/Prc+pMQMAfyZ1rG1c3tFQNl8Bc616tx40uNXyxNBRPbQ==, tarball: https://registry.npmjs.org/@oxlint/binding-linux-s390x-gnu/-/binding-linux-s390x-gnu-1.75.0.tgz} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [s390x] + os: [linux] + + '@oxlint/binding-linux-x64-gnu@1.75.0': + resolution: {integrity: sha512-nshAhrUvXFUWOvqQ2soIw7HFNWvpvEV4o0cYSqPtzLiPF5gKyYTDOOTJ6Rn8g8K/iGvPIrbDA4v8+5MvnjJrrg==, tarball: https://registry.npmjs.org/@oxlint/binding-linux-x64-gnu/-/binding-linux-x64-gnu-1.75.0.tgz} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [linux] + + '@oxlint/binding-linux-x64-musl@1.75.0': + resolution: {integrity: sha512-e4jNxLKnxLC6sYBQRxrI2pgIIxnmMtF8U/VwNYcjTT/CLS+spH624cYVnj07bTKwaEWT37/e025isOs6j/0xqA==, tarball: https://registry.npmjs.org/@oxlint/binding-linux-x64-musl/-/binding-linux-x64-musl-1.75.0.tgz} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [linux] + + '@oxlint/binding-openharmony-arm64@1.75.0': + resolution: {integrity: sha512-hZ2lH+1qLf/DiEP9UWuQTK2JWj/BgvMB4jhIV4SmNU1wfEiYYX4TynQyAZXx0j9X4qRYizAL042SKaV+8ynh4w==, tarball: https://registry.npmjs.org/@oxlint/binding-openharmony-arm64/-/binding-openharmony-arm64-1.75.0.tgz} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [openharmony] + + '@oxlint/binding-win32-arm64-msvc@1.75.0': + resolution: {integrity: sha512-Ilj6PNzGDS3bCU0MSJH7Msh0NhH+T/mRp2shwg+q+GHeVlPwP5LEboW96aW+3kVKFk6zYZy1Xi5pZkqZh6X8KQ==, tarball: https://registry.npmjs.org/@oxlint/binding-win32-arm64-msvc/-/binding-win32-arm64-msvc-1.75.0.tgz} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [win32] + + '@oxlint/binding-win32-ia32-msvc@1.75.0': + resolution: {integrity: sha512-QVit2nOEOiPhkmsrksPSkoGCdnZRNkspt8fwoYyP09te1VEbnSj4LAxua4rc8FKTmWkySVe05j8iz9GXYfF1AQ==, tarball: https://registry.npmjs.org/@oxlint/binding-win32-ia32-msvc/-/binding-win32-ia32-msvc-1.75.0.tgz} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [ia32] + os: [win32] + + '@oxlint/binding-win32-x64-msvc@1.75.0': + resolution: {integrity: sha512-DSxnNkBUAYARPwJtR12Ig3deWr8w0H997xP6jy33i+e0SyYJw8FKuz4+cZtpmPEhQmvlPJE3X/2vNxDmLkd/rA==, tarball: https://registry.npmjs.org/@oxlint/binding-win32-x64-msvc/-/binding-win32-x64-msvc-1.75.0.tgz} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [win32] + '@parcel/watcher-android-arm64@2.5.6': resolution: {integrity: sha512-YQxSS34tPF/6ZG7r/Ih9xy+kP/WwediEUsqmtf0cuCV5TPPKw/PQHRhueUo6JdeFJaqV3pyjm0GdYjZotbRt/A==, tarball: https://registry.npmjs.org/@parcel/watcher-android-arm64/-/watcher-android-arm64-2.5.6.tgz} engines: {node: '>= 10.0.0'} @@ -7260,6 +7410,23 @@ packages: oxc-resolver@11.20.0: resolution: {integrity: sha512-CblytBiV/a/ZXY34dsVU2NxhIOxMXst8CvDCtyBelVITgd7PLrKzbEbA6oKLdPjvDKDzCiW48qzmzZ+mYaqn+g==, tarball: https://registry.npmjs.org/oxc-resolver/-/oxc-resolver-11.20.0.tgz} + oxlint-tsgolint@7.0.2001: + resolution: {integrity: sha512-KjK/XLcXr1DSyonKhsuFqJRiuKqcyG9j3LJ8nkOsrLzGvodBPqzHOKauy10asLMDI0sUpvb+1sxlzff3udZvfg==, tarball: https://registry.npmjs.org/oxlint-tsgolint/-/oxlint-tsgolint-7.0.2001.tgz} + hasBin: true + + oxlint@1.75.0: + resolution: {integrity: sha512-m9WzjRcRYA/uqIZDa9tclrieoPJ/ln1QYTKdFx6NUOs8uY5DiHlIwRQoCrHT6OM6O3ww3l2skY5gO7G7ZphE7g==, tarball: https://registry.npmjs.org/oxlint/-/oxlint-1.75.0.tgz} + engines: {node: ^20.19.0 || >=22.12.0} + hasBin: true + peerDependencies: + oxlint-tsgolint: '>=7.0.2001' + vite-plus: '*' + peerDependenciesMeta: + oxlint-tsgolint: + optional: true + vite-plus: + optional: true + p-cancelable@3.0.0: resolution: {integrity: sha512-mlVgR3PGuzlo0MmTdk4cXqXWlwQDLnONTAg6sm62XkMJEiRxN3GL3SffkYvqwonbkJBcrI7Uvv5Zh9yjvn2iUw==, tarball: https://registry.npmjs.org/p-cancelable/-/p-cancelable-3.0.0.tgz} engines: {node: '>=12.20'} @@ -12185,6 +12352,81 @@ snapshots: '@oxc-resolver/binding-win32-x64-msvc@11.20.0': optional: true + '@oxlint-tsgolint/darwin-arm64@7.0.2001': + optional: true + + '@oxlint-tsgolint/darwin-x64@7.0.2001': + optional: true + + '@oxlint-tsgolint/linux-arm64@7.0.2001': + optional: true + + '@oxlint-tsgolint/linux-x64@7.0.2001': + optional: true + + '@oxlint-tsgolint/win32-arm64@7.0.2001': + optional: true + + '@oxlint-tsgolint/win32-x64@7.0.2001': + optional: true + + '@oxlint/binding-android-arm-eabi@1.75.0': + optional: true + + '@oxlint/binding-android-arm64@1.75.0': + optional: true + + '@oxlint/binding-darwin-arm64@1.75.0': + optional: true + + '@oxlint/binding-darwin-x64@1.75.0': + optional: true + + '@oxlint/binding-freebsd-x64@1.75.0': + optional: true + + '@oxlint/binding-linux-arm-gnueabihf@1.75.0': + optional: true + + '@oxlint/binding-linux-arm-musleabihf@1.75.0': + optional: true + + '@oxlint/binding-linux-arm64-gnu@1.75.0': + optional: true + + '@oxlint/binding-linux-arm64-musl@1.75.0': + optional: true + + '@oxlint/binding-linux-ppc64-gnu@1.75.0': + optional: true + + '@oxlint/binding-linux-riscv64-gnu@1.75.0': + optional: true + + '@oxlint/binding-linux-riscv64-musl@1.75.0': + optional: true + + '@oxlint/binding-linux-s390x-gnu@1.75.0': + optional: true + + '@oxlint/binding-linux-x64-gnu@1.75.0': + optional: true + + '@oxlint/binding-linux-x64-musl@1.75.0': + optional: true + + '@oxlint/binding-openharmony-arm64@1.75.0': + optional: true + + '@oxlint/binding-win32-arm64-msvc@1.75.0': + optional: true + + '@oxlint/binding-win32-ia32-msvc@1.75.0': + optional: true + + '@oxlint/binding-win32-x64-msvc@1.75.0': + optional: true + '@parcel/watcher-android-arm64@2.5.6': optional: true @@ -16645,6 +16887,38 @@ snapshots: '@oxc-resolver/binding-win32-arm64-msvc': 11.20.0 '@oxc-resolver/binding-win32-x64-msvc': 11.20.0 + oxlint-tsgolint@7.0.2001: + optionalDependencies: + '@oxlint-tsgolint/darwin-arm64': 7.0.2001 + '@oxlint-tsgolint/darwin-x64': 7.0.2001 + '@oxlint-tsgolint/linux-arm64': 7.0.2001 + '@oxlint-tsgolint/linux-x64': 7.0.2001 + '@oxlint-tsgolint/win32-arm64': 7.0.2001 + '@oxlint-tsgolint/win32-x64': 7.0.2001 + + oxlint@1.75.0(oxlint-tsgolint@7.0.2001): + optionalDependencies: + '@oxlint/binding-android-arm-eabi': 1.75.0 + '@oxlint/binding-android-arm64': 1.75.0 + '@oxlint/binding-darwin-arm64': 1.75.0 + '@oxlint/binding-darwin-x64': 1.75.0 + '@oxlint/binding-freebsd-x64': 1.75.0 + '@oxlint/binding-linux-arm-gnueabihf': 1.75.0 + '@oxlint/binding-linux-arm-musleabihf': 1.75.0 + '@oxlint/binding-linux-arm64-gnu': 1.75.0 + '@oxlint/binding-linux-arm64-musl': 1.75.0 + '@oxlint/binding-linux-ppc64-gnu': 1.75.0 + '@oxlint/binding-linux-riscv64-gnu': 1.75.0 + '@oxlint/binding-linux-riscv64-musl': 1.75.0 + '@oxlint/binding-linux-s390x-gnu': 1.75.0 + '@oxlint/binding-linux-x64-gnu': 1.75.0 + '@oxlint/binding-linux-x64-musl': 1.75.0 + '@oxlint/binding-openharmony-arm64': 1.75.0 + '@oxlint/binding-win32-arm64-msvc': 1.75.0 + '@oxlint/binding-win32-ia32-msvc': 1.75.0 + '@oxlint/binding-win32-x64-msvc': 1.75.0 + oxlint-tsgolint: 7.0.2001 + p-cancelable@3.0.0: {} p-filter@2.1.0: