diff --git a/.oxlintrc.json b/.oxlintrc.json new file mode 100644 index 00000000..0dbddde7 --- /dev/null +++ b/.oxlintrc.json @@ -0,0 +1,160 @@ +{ + "$schema": "./node_modules/oxlint/configuration_schema.json", + "plugins": [], + "categories": { + "correctness": "off" + }, + "env": { + "builtin": true + }, + "overrides": [ + { + "files": ["**/*.{js,mjs,cjs,ts,mts,cts,jsx,tsx}"], + "rules": { + "constructor-super": "error", + "for-direction": "error", + "getter-return": "error", + "no-async-promise-executor": "error", + "no-case-declarations": "error", + "no-class-assign": "error", + "no-compare-neg-zero": "error", + "no-cond-assign": "error", + "no-const-assign": "error", + "no-constant-binary-expression": "error", + "no-constant-condition": "error", + "no-control-regex": "error", + "no-debugger": "error", + "no-delete-var": "error", + "no-dupe-class-members": "error", + "no-dupe-else-if": "error", + "no-dupe-keys": "error", + "no-duplicate-case": "error", + "no-empty": "error", + "no-empty-character-class": "error", + "no-empty-pattern": "error", + "no-empty-static-block": "error", + "no-ex-assign": "error", + "no-extra-boolean-cast": "error", + "no-fallthrough": "error", + "no-func-assign": "error", + "no-global-assign": "error", + "no-import-assign": "error", + "no-invalid-regexp": "error", + "no-irregular-whitespace": "error", + "no-loss-of-precision": "error", + "no-misleading-character-class": "error", + "no-new-native-nonconstructor": "error", + "no-nonoctal-decimal-escape": "error", + "no-obj-calls": "error", + "no-prototype-builtins": "error", + "no-redeclare": "error", + "no-regex-spaces": "error", + "no-self-assign": "error", + "no-setter-return": "error", + "no-shadow-restricted-names": "error", + "no-sparse-arrays": "error", + "no-this-before-super": "error", + "no-undef": "error", + "no-unexpected-multiline": "error", + "no-unreachable": "error", + "no-unsafe-finally": "error", + "no-unsafe-negation": "error", + "no-unsafe-optional-chaining": "error", + "no-unused-labels": "error", + "no-unused-private-class-members": "error", + "no-unused-vars": "error", + "no-useless-backreference": "error", + "no-useless-catch": "error", + "no-useless-escape": "error", + "no-with": "error", + "require-yield": "error", + "use-isnan": "error", + "valid-typeof": "error" + } + }, + { + "files": ["**/*.{js,mjs,cjs,ts,mts,cts,jsx,tsx}", "**/*.cts"], + "rules": { + "constructor-super": "off", + "getter-return": "off", + "no-class-assign": "off", + "no-const-assign": "off", + "no-dupe-class-members": "off", + "no-dupe-keys": "off", + "no-func-assign": "off", + "no-import-assign": "off", + "no-new-native-nonconstructor": "off", + "no-obj-calls": "off", + "no-redeclare": "off", + "no-setter-return": "off", + "no-this-before-super": "off", + "no-undef": "off", + "no-unreachable": "off", + "no-unsafe-negation": "off", + "no-var": "error", + "no-with": "off", + "prefer-rest-params": "error", + "prefer-spread": "error" + } + }, + { + "files": ["**/*.{js,mjs,cjs,ts,mts,cts,jsx,tsx}"], + "rules": { + "@typescript-eslint/ban-ts-comment": "error", + "no-array-constructor": "error", + "@typescript-eslint/no-duplicate-enum-values": "error", + "@typescript-eslint/no-empty-object-type": "error", + "@typescript-eslint/no-explicit-any": "error", + "@typescript-eslint/no-extra-non-null-assertion": "error", + "@typescript-eslint/no-misused-new": "error", + "@typescript-eslint/no-namespace": "error", + "@typescript-eslint/no-non-null-asserted-optional-chain": "error", + "@typescript-eslint/no-require-imports": "error", + "@typescript-eslint/no-this-alias": "error", + "@typescript-eslint/no-unnecessary-type-constraint": "error", + "@typescript-eslint/no-unsafe-declaration-merging": "error", + "@typescript-eslint/no-unsafe-function-type": "error", + "no-unused-expressions": "error", + "no-unused-vars": "error", + "@typescript-eslint/no-wrapper-object-types": "error", + "@typescript-eslint/prefer-as-const": "error", + "@typescript-eslint/prefer-namespace-keyword": "error", + "@typescript-eslint/triple-slash-reference": "error" + }, + "plugins": ["typescript"] + }, + { + "files": ["**/*.{js,mjs,cjs,ts,mts,cts,jsx,tsx}"], + "rules": { + "curly": "off", + "no-unexpected-multiline": "off", + "unicorn/empty-brace-spaces": "off", + "unicorn/no-nested-ternary": "off", + "unicorn/number-literal-case": "off" + }, + "plugins": ["unicorn"] + }, + { + "files": ["**/*.{js,mjs,cjs,ts,mts,cts,jsx,tsx}"], + "rules": { + "react-hooks/rules-of-hooks": "error", + "react-hooks/exhaustive-deps": "error", + "@typescript-eslint/no-explicit-any": "off", + "no-case-declarations": "error", + "no-fallthrough": "error", + "no-empty": [ + "warn", + { + "allowEmptyCatch": true + } + ], + "no-unused-vars": "off" + }, + "plugins": ["react", "typescript"], + "env": { + "browser": true, + "shared-node-browser": true + } + } + ] +} diff --git a/package.json b/package.json index 1cfd8cde..b1f9ac61 100644 --- a/package.json +++ b/package.json @@ -109,6 +109,7 @@ "lint-staged": "^16.2.6", "meta-json-schema": "^1.19.14", "node-fetch": "^3.3.2", + "oxlint": "^1.25.0", "prettier": "^3.6.2", "sass": "^1.93.3", "tar": "^7.5.2", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 77cce79d..949066e7 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -228,6 +228,9 @@ importers: node-fetch: specifier: ^3.3.2 version: 3.3.2 + oxlint: + specifier: ^1.25.0 + version: 1.25.0 prettier: specifier: ^3.6.2 version: 3.6.2 @@ -1331,6 +1334,46 @@ packages: '@octokit/types@13.10.0': resolution: {integrity: sha512-ifLaO34EbbPj0Xgro4G5lP5asESjwHracYJvVaPIyXMuiuXLlhic3S47cBdTb+jfODkTE5YtGCLt3Ay3+J97sA==} + '@oxlint/darwin-arm64@1.25.0': + resolution: {integrity: sha512-OLx4XyUv5SO7k8y5FzJIoTKan+iKK53T1Ws8fBIl4zblUIWI66ZIqSVG2A2rxOBA7XfINqCz8UipGzOW9yzKcg==} + cpu: [arm64] + os: [darwin] + + '@oxlint/darwin-x64@1.25.0': + resolution: {integrity: sha512-srndNPiliA0rchYKqYfOdqA9kqyVQ6YChK3XJe9Lxo/YG8tTJ5K65g2A5SHTT2s1Nm5DnQa5AKZH7w+7KI/m8A==} + cpu: [x64] + os: [darwin] + + '@oxlint/linux-arm64-gnu@1.25.0': + resolution: {integrity: sha512-W9+DnHDbygprpGV586BolwWES+o2raOcSJv404nOFPQjWZ09efG24nuXrg/fpyoMQb4YoW2W1fvlnyMVU+ADcw==} + cpu: [arm64] + os: [linux] + + '@oxlint/linux-arm64-musl@1.25.0': + resolution: {integrity: sha512-1tIMpQhKlItm7uKzs3lluG7KorZR5ItoNKd1iFYF/IPmZ+i0/iuZ7MVWXRjBcgQMhMYSdfZpSVEdFKcFz2HDxA==} + cpu: [arm64] + os: [linux] + + '@oxlint/linux-x64-gnu@1.25.0': + resolution: {integrity: sha512-xVkmk/zkIulc5o0OUWY04DyBfKotnq9+60O9I5c0DpdKAELVLhZkLmct0apx3jAX6Z/3yYPzhc6Lw1Ia3jU3VQ==} + cpu: [x64] + os: [linux] + + '@oxlint/linux-x64-musl@1.25.0': + resolution: {integrity: sha512-IeO10dZosJV58YzN0gckhRYac+FM9s5VCKUx2ghgbKR91z/bpSRcRl8Sy5cWTkcVwu3ZTikhK8aXC6j7XIqKNw==} + cpu: [x64] + os: [linux] + + '@oxlint/win32-arm64@1.25.0': + resolution: {integrity: sha512-mpdiXZm2oNuSQAbTEPRDuSeR6v1DCD7Cl/xouR2ggHZu3AKZ4XYmm29hyrzIxrYVoQ/5j+182TGdOpGYn9xQJg==} + cpu: [arm64] + os: [win32] + + '@oxlint/win32-x64@1.25.0': + resolution: {integrity: sha512-opoIACOkcFloWQO6dubBLbcWwW52ML8+3deFdr0WE0PeM9UXdLB0jRMuLsEnplmBoy9TRvmxDJ+Pw8xc2PsOfQ==} + cpu: [x64] + os: [win32] + '@parcel/watcher-android-arm64@2.5.1': resolution: {integrity: sha512-KF8+j9nNbUN8vzOFDpRMsaKBHZ/mcjEjMToVMJOhTozkDonQFFrRcfdLWn6yWKCmJKmdVxSgHiYvTCef4/qcBA==} engines: {node: '>= 10.0.0'} @@ -3505,6 +3548,16 @@ packages: resolution: {integrity: sha512-qFOyK5PjiWZd+QQIh+1jhdb9LpxTF0qs7Pm8o5QHYZ0M3vKqSqzsZaEB6oWlxZ+q2sJBMI/Ktgd2N5ZwQoRHfg==} engines: {node: '>= 0.4'} + oxlint@1.25.0: + resolution: {integrity: sha512-O6iJ9xeuy9eQCi8/EghvsNO6lzSaUPs0FR1uLy51Exp3RkVpjvJKyPPhd9qv65KLnfG/BNd2HE/rH0NbEfVVzA==} + engines: {node: ^20.19.0 || >=22.12.0} + hasBin: true + peerDependencies: + oxlint-tsgolint: '>=0.4.0' + peerDependenciesMeta: + oxlint-tsgolint: + optional: true + p-limit@3.1.0: resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} engines: {node: '>=10'} @@ -5597,6 +5650,30 @@ snapshots: dependencies: '@octokit/openapi-types': 24.2.0 + '@oxlint/darwin-arm64@1.25.0': + optional: true + + '@oxlint/darwin-x64@1.25.0': + optional: true + + '@oxlint/linux-arm64-gnu@1.25.0': + optional: true + + '@oxlint/linux-arm64-musl@1.25.0': + optional: true + + '@oxlint/linux-x64-gnu@1.25.0': + optional: true + + '@oxlint/linux-x64-musl@1.25.0': + optional: true + + '@oxlint/win32-arm64@1.25.0': + optional: true + + '@oxlint/win32-x64@1.25.0': + optional: true + '@parcel/watcher-android-arm64@2.5.1': optional: true @@ -8080,6 +8157,17 @@ snapshots: safe-push-apply: 1.0.0 optional: true + oxlint@1.25.0: + optionalDependencies: + '@oxlint/darwin-arm64': 1.25.0 + '@oxlint/darwin-x64': 1.25.0 + '@oxlint/linux-arm64-gnu': 1.25.0 + '@oxlint/linux-arm64-musl': 1.25.0 + '@oxlint/linux-x64-gnu': 1.25.0 + '@oxlint/linux-x64-musl': 1.25.0 + '@oxlint/win32-arm64': 1.25.0 + '@oxlint/win32-x64': 1.25.0 + p-limit@3.1.0: dependencies: yocto-queue: 0.1.0