diff --git a/package.json b/package.json index f2cccf75b8..5946d3289f 100644 --- a/package.json +++ b/package.json @@ -37,6 +37,7 @@ "watch": "pnpm dev", "dev": "node scripts/dev.mjs", "lint": "pnpm -r lint", + "biome-lint": "pnpm -r biome-lint", "cy:open": "pnpm cypress open --browser --e2e --config-file=cypress.config.ts", "cy:run": "pnpm cypress run", "e2e": "pnpm start-server-and-test start:test http://localhost:61812 cy:run", @@ -68,6 +69,7 @@ "glob": "11.0.0" }, "devDependencies": { + "@biomejs/biome": "1.9.3", "@misskey-dev/eslint-plugin": "2.0.3", "@types/node": "20.14.12", "@typescript-eslint/eslint-plugin": "7.17.0", diff --git a/packages/backend/biome.json b/packages/backend/biome.json new file mode 100644 index 0000000000..ab73fd8682 --- /dev/null +++ b/packages/backend/biome.json @@ -0,0 +1,127 @@ +{ + "$schema": "https://biomejs.dev/schemas/1.8.3/schema.json", + "organizeImports": { "enabled": true }, + "linter": { + "enabled": true, + "rules": { + "recommended": false, + "complexity": { + "noBannedTypes": "error", + "noExtraBooleanCast": "error", + "noMultipleSpacesInRegularExpressionLiterals": "error", + "noUselessCatch": "error", + "noUselessTypeConstraint": "error", + "noWith": "error" + }, + "correctness": { + "noConstAssign": "error", + "noConstantCondition": "warn", + "noEmptyCharacterClassInRegex": "error", + "noEmptyPattern": "warn", + "noGlobalObjectCalls": "error", + "noInnerDeclarations": "off", + "noInvalidConstructorSuper": "error", + "noNewSymbol": "error", + "noNonoctalDecimalEscape": "error", + "noPrecisionLoss": "error", + "noSelfAssign": "error", + "noSetterReturn": "error", + "noSwitchDeclarations": "error", + "noUndeclaredVariables": "error", + "noUnreachable": "error", + "noUnreachableSuper": "error", + "noUnsafeFinally": "error", + "noUnsafeOptionalChaining": "error", + "noUnusedLabels": "error", + "noUnusedVariables": "error", + "useArrayLiterals": "off", + "useIsNan": "error", + "useValidForDirection": "error", + "useYield": "error" + }, + "style": { + "noDefaultExport": "warn", + "noInferrableTypes": "warn", + "noNamespace": "error", + "noNonNullAssertion": "warn", + "noParameterAssign": "warn", + "noRestrictedGlobals": { + "level": "error", + "options": { "deniedGlobals": ["__dirname", "__filename"] } + }, + "noVar": "error", + "useAsConstAssertion": "error" + }, + "suspicious": { + "noAsyncPromiseExecutor": "off", + "noCatchAssign": "error", + "noClassAssign": "error", + "noCompareNegZero": "error", + "noControlCharactersInRegex": "warn", + "noDebugger": "error", + "noDoubleEquals": "error", + "noDuplicateCase": "error", + "noDuplicateClassMembers": "error", + "noDuplicateObjectKeys": "error", + "noDuplicateParameters": "error", + "noEmptyBlockStatements": "off", + "noExplicitAny": "warn", + "noExtraNonNullAssertion": "error", + "noFallthroughSwitchClause": "error", + "noFunctionAssign": "error", + "noGlobalAssign": "error", + "noImportAssign": "error", + "noMisleadingCharacterClass": "error", + "noMisleadingInstantiator": "error", + "noPrototypeBuiltins": "error", + "noRedeclare": "error", + "noShadowRestrictedNames": "error", + "noUnsafeDeclarationMerging": "error", + "noUnsafeNegation": "error", + "useGetterReturn": "error", + "useValidTypeof": "error" + } + }, + "ignore": [ + "**/node_modules", + "built", + "@types/**/*", + "migration" + ] + }, + "overrides": [ + { + "include": ["*.ts", "*.tsx", "*.mts", "*.cts"], + "linter": { + "rules": { + "correctness": { + "noConstAssign": "off", + "noGlobalObjectCalls": "off", + "noInvalidConstructorSuper": "off", + "noInvalidNewBuiltin": "off", + "noNewSymbol": "off", + "noSetterReturn": "off", + "noUndeclaredVariables": "off", + "noUnreachable": "off", + "noUnreachableSuper": "off" + }, + "style": { + "noArguments": "error", + "noVar": "error", + "useConst": "error" + }, + "suspicious": { + "noDuplicateClassMembers": "off", + "noDuplicateObjectKeys": "off", + "noDuplicateParameters": "off", + "noFunctionAssign": "off", + "noImportAssign": "off", + "noRedeclare": "off", + "noUnsafeNegation": "off", + "useGetterReturn": "off" + } + } + } + } + ] +} diff --git a/packages/backend/package.json b/packages/backend/package.json index 1b4f04f20b..3b5dea1e96 100644 --- a/packages/backend/package.json +++ b/packages/backend/package.json @@ -22,6 +22,9 @@ "typecheck": "tsc --noEmit", "eslint": "eslint --quiet \"src/**/*.ts\"", "lint": "pnpm typecheck && pnpm eslint", + "biome-lint": "pnpm typecheck && pnpm biome lint", + "format": "pnpm biome format", + "format:write": "pnpm biome format --write", "jest": "cross-env NODE_ENV=test node --experimental-vm-modules --experimental-import-meta-resolve node_modules/jest/bin/jest.js --forceExit --config jest.config.unit.cjs", "jest:e2e": "cross-env NODE_ENV=test node --experimental-vm-modules --experimental-import-meta-resolve node_modules/jest/bin/jest.js --forceExit --config jest.config.e2e.cjs", "jest-and-coverage": "cross-env NODE_ENV=test node --experimental-vm-modules --experimental-import-meta-resolve node_modules/jest/bin/jest.js --coverage --forceExit --config jest.config.unit.cjs", @@ -192,6 +195,7 @@ "xev": "3.0.2" }, "devDependencies": { + "@biomejs/biome": "1.9.3", "@jest/globals": "29.7.0", "@nestjs/platform-express": "10.4.3", "@simplewebauthn/types": "10.0.0", diff --git a/packages/cherrypick-js/biome.json b/packages/cherrypick-js/biome.json new file mode 100644 index 0000000000..fae2bf52ce --- /dev/null +++ b/packages/cherrypick-js/biome.json @@ -0,0 +1,126 @@ +{ + "$schema": "https://biomejs.dev/schemas/1.8.3/schema.json", + "organizeImports": { "enabled": true }, + "linter": { + "enabled": true, + "rules": { + "recommended": false, + "complexity": { + "noBannedTypes": "error", + "noExtraBooleanCast": "error", + "noMultipleSpacesInRegularExpressionLiterals": "error", + "noUselessCatch": "error", + "noUselessTypeConstraint": "error", + "noWith": "error" + }, + "correctness": { + "noConstAssign": "error", + "noConstantCondition": "warn", + "noEmptyCharacterClassInRegex": "error", + "noEmptyPattern": "warn", + "noGlobalObjectCalls": "error", + "noInnerDeclarations": "off", + "noInvalidConstructorSuper": "error", + "noNewSymbol": "error", + "noNonoctalDecimalEscape": "error", + "noPrecisionLoss": "error", + "noSelfAssign": "error", + "noSetterReturn": "error", + "noSwitchDeclarations": "error", + "noUndeclaredVariables": "error", + "noUnreachable": "error", + "noUnreachableSuper": "error", + "noUnsafeFinally": "error", + "noUnsafeOptionalChaining": "error", + "noUnusedLabels": "error", + "noUnusedVariables": "error", + "useArrayLiterals": "off", + "useIsNan": "error", + "useValidForDirection": "error", + "useYield": "error" + }, + "style": { + "noDefaultExport": "warn", + "noInferrableTypes": "warn", + "noNamespace": "error", + "noNonNullAssertion": "warn", + "noParameterAssign": "warn", + "noVar": "error", + "useAsConstAssertion": "error" + }, + "suspicious": { + "noAsyncPromiseExecutor": "off", + "noCatchAssign": "error", + "noClassAssign": "error", + "noCompareNegZero": "error", + "noControlCharactersInRegex": "warn", + "noDebugger": "error", + "noDoubleEquals": "error", + "noDuplicateCase": "error", + "noDuplicateClassMembers": "error", + "noDuplicateObjectKeys": "error", + "noDuplicateParameters": "error", + "noEmptyBlockStatements": "off", + "noExplicitAny": "warn", + "noExtraNonNullAssertion": "error", + "noFallthroughSwitchClause": "error", + "noFunctionAssign": "error", + "noGlobalAssign": "error", + "noImportAssign": "error", + "noMisleadingCharacterClass": "error", + "noMisleadingInstantiator": "error", + "noPrototypeBuiltins": "error", + "noRedeclare": "error", + "noShadowRestrictedNames": "error", + "noUnsafeDeclarationMerging": "error", + "noUnsafeNegation": "error", + "useGetterReturn": "error", + "useValidTypeof": "error" + } + }, + "ignore": [ + "**/node_modules", + "built", + "coverage", + "jest.config.ts", + "test", + "test-d", + "generator" + ] + }, + "overrides": [ + { + "include": ["*.ts", "*.tsx"], + "linter": { + "rules": { + "correctness": { + "noConstAssign": "off", + "noGlobalObjectCalls": "off", + "noInvalidConstructorSuper": "off", + "noInvalidNewBuiltin": "off", + "noNewSymbol": "off", + "noSetterReturn": "off", + "noUndeclaredVariables": "off", + "noUnreachable": "off", + "noUnreachableSuper": "off" + }, + "style": { + "noArguments": "error", + "noVar": "error", + "useConst": "error" + }, + "suspicious": { + "noDuplicateClassMembers": "off", + "noDuplicateObjectKeys": "off", + "noDuplicateParameters": "off", + "noFunctionAssign": "off", + "noImportAssign": "off", + "noRedeclare": "off", + "noUnsafeNegation": "off", + "useGetterReturn": "off" + } + } + } + } + ] +} diff --git a/packages/cherrypick-js/package.json b/packages/cherrypick-js/package.json index 6152b1f802..3f1a04eff8 100644 --- a/packages/cherrypick-js/package.json +++ b/packages/cherrypick-js/package.json @@ -26,6 +26,9 @@ "eslint": "eslint './**/*.{js,jsx,ts,tsx}'", "typecheck": "tsc --noEmit", "lint": "pnpm typecheck && pnpm eslint", + "biome-lint": "pnpm typecheck && pnpm biome lint", + "format": "pnpm biome format", + "format:write": "pnpm biome format --write", "jest": "jest --coverage --detectOpenHandles", "test": "pnpm jest && pnpm tsd", "update-autogen-code": "pnpm --filter cherrypick-js-type-generator generate && ncp generator/built/autogen src/autogen" @@ -36,6 +39,7 @@ "directory": "packages/cherrypick-js" }, "devDependencies": { + "@biomejs/biome": "1.9.3", "@microsoft/api-extractor": "7.47.9", "@swc/jest": "0.2.36", "@types/jest": "29.5.13", diff --git a/packages/frontend-embed/biome.json b/packages/frontend-embed/biome.json new file mode 100644 index 0000000000..3867749276 --- /dev/null +++ b/packages/frontend-embed/biome.json @@ -0,0 +1,12 @@ +{ + "$schema": "https://biomejs.dev/schemas/1.8.3/schema.json", + "organizeImports": { + "enabled": true + }, + "linter": { + "enabled": true, + "rules": { + "recommended": true + } + } +} diff --git a/packages/frontend-embed/package.json b/packages/frontend-embed/package.json index fe9602a6a1..86fcdf0d81 100644 --- a/packages/frontend-embed/package.json +++ b/packages/frontend-embed/package.json @@ -8,7 +8,10 @@ "build": "vite build", "typecheck": "vue-tsc --noEmit", "eslint": "eslint --quiet \"src/**/*.{ts,vue}\"", - "lint": "pnpm typecheck && pnpm eslint" + "lint": "pnpm typecheck && pnpm eslint", + "biome-lint": "pnpm typecheck && pnpm biome lint", + "format": "pnpm biome format", + "format:write": "pnpm biome format --write" }, "dependencies": { "@discordapp/twemoji": "15.1.0", @@ -39,6 +42,7 @@ "vue": "3.5.10" }, "devDependencies": { + "@biomejs/biome": "1.9.3", "@misskey-dev/summaly": "5.1.0", "@testing-library/vue": "8.1.0", "@types/estree": "1.0.6", diff --git a/packages/frontend-shared/biome.json b/packages/frontend-shared/biome.json new file mode 100644 index 0000000000..3867749276 --- /dev/null +++ b/packages/frontend-shared/biome.json @@ -0,0 +1,12 @@ +{ + "$schema": "https://biomejs.dev/schemas/1.8.3/schema.json", + "organizeImports": { + "enabled": true + }, + "linter": { + "enabled": true, + "rules": { + "recommended": true + } + } +} diff --git a/packages/frontend-shared/package.json b/packages/frontend-shared/package.json index f103bba896..1ac222924c 100644 --- a/packages/frontend-shared/package.json +++ b/packages/frontend-shared/package.json @@ -18,9 +18,13 @@ "watch": "nodemon -w package.json -e json --exec \"node ./build.js --watch\"", "eslint": "eslint './**/*.{js,jsx,ts,tsx}'", "typecheck": "tsc --noEmit", - "lint": "pnpm typecheck && pnpm eslint" + "lint": "pnpm typecheck && pnpm eslint", + "biome-lint": "pnpm typecheck && pnpm biome lint", + "format": "pnpm biome format", + "format:write": "pnpm biome format --write" }, "devDependencies": { + "@biomejs/biome": "1.9.3", "@types/node": "20.14.12", "@typescript-eslint/eslint-plugin": "7.17.0", "@typescript-eslint/parser": "7.17.0", diff --git a/packages/frontend/biome.json b/packages/frontend/biome.json new file mode 100644 index 0000000000..3867749276 --- /dev/null +++ b/packages/frontend/biome.json @@ -0,0 +1,12 @@ +{ + "$schema": "https://biomejs.dev/schemas/1.8.3/schema.json", + "organizeImports": { + "enabled": true + }, + "linter": { + "enabled": true, + "rules": { + "recommended": true + } + } +} diff --git a/packages/frontend/package.json b/packages/frontend/package.json index f477b6002c..173abe2c93 100644 --- a/packages/frontend/package.json +++ b/packages/frontend/package.json @@ -14,7 +14,10 @@ "test-and-coverage": "vitest --run --coverage --globals", "typecheck": "vue-tsc --noEmit", "eslint": "eslint --quiet \"src/**/*.{ts,vue}\"", - "lint": "pnpm typecheck && pnpm eslint" + "lint": "pnpm typecheck && pnpm eslint", + "biome-lint": "pnpm typecheck && pnpm biome lint", + "format": "pnpm biome format", + "format:write": "pnpm biome format --write" }, "dependencies": { "@dice-roller/rpg-dice-roller": "^5.5.0", @@ -84,6 +87,7 @@ "vuedraggable": "next" }, "devDependencies": { + "@biomejs/biome": "1.9.3", "@misskey-dev/summaly": "5.1.0", "@storybook/addon-actions": "8.3.3", "@storybook/addon-essentials": "8.3.3", diff --git a/packages/misskey-bubble-game/biome.json b/packages/misskey-bubble-game/biome.json new file mode 100644 index 0000000000..b2eaad8ca9 --- /dev/null +++ b/packages/misskey-bubble-game/biome.json @@ -0,0 +1,126 @@ +{ + "$schema": "https://biomejs.dev/schemas/1.8.3/schema.json", + "organizeImports": { "enabled": true }, + "linter": { + "enabled": true, + "rules": { + "recommended": false, + "complexity": { + "noBannedTypes": "error", + "noExtraBooleanCast": "error", + "noMultipleSpacesInRegularExpressionLiterals": "error", + "noUselessCatch": "error", + "noUselessTypeConstraint": "error", + "noWith": "error" + }, + "correctness": { + "noConstAssign": "error", + "noConstantCondition": "warn", + "noEmptyCharacterClassInRegex": "error", + "noEmptyPattern": "warn", + "noGlobalObjectCalls": "error", + "noInnerDeclarations": "off", + "noInvalidConstructorSuper": "error", + "noNewSymbol": "error", + "noNonoctalDecimalEscape": "error", + "noPrecisionLoss": "error", + "noSelfAssign": "error", + "noSetterReturn": "error", + "noSwitchDeclarations": "error", + "noUndeclaredVariables": "error", + "noUnreachable": "error", + "noUnreachableSuper": "error", + "noUnsafeFinally": "error", + "noUnsafeOptionalChaining": "error", + "noUnusedLabels": "error", + "noUnusedVariables": "error", + "useArrayLiterals": "off", + "useIsNan": "error", + "useValidForDirection": "error", + "useYield": "error" + }, + "style": { + "noDefaultExport": "warn", + "noInferrableTypes": "warn", + "noNamespace": "error", + "noNonNullAssertion": "warn", + "noParameterAssign": "warn", + "noVar": "error", + "useAsConstAssertion": "error" + }, + "suspicious": { + "noAsyncPromiseExecutor": "off", + "noCatchAssign": "error", + "noClassAssign": "error", + "noCompareNegZero": "error", + "noControlCharactersInRegex": "warn", + "noDebugger": "error", + "noDoubleEquals": "error", + "noDuplicateCase": "error", + "noDuplicateClassMembers": "error", + "noDuplicateObjectKeys": "error", + "noDuplicateParameters": "error", + "noEmptyBlockStatements": "off", + "noExplicitAny": "warn", + "noExtraNonNullAssertion": "error", + "noFallthroughSwitchClause": "error", + "noFunctionAssign": "error", + "noGlobalAssign": "error", + "noImportAssign": "error", + "noMisleadingCharacterClass": "error", + "noMisleadingInstantiator": "error", + "noPrototypeBuiltins": "error", + "noRedeclare": "error", + "noShadowRestrictedNames": "error", + "noUnsafeDeclarationMerging": "error", + "noUnsafeNegation": "error", + "useGetterReturn": "error", + "useValidTypeof": "error" + } + }, + "ignore": [ + "**/node_modules", + "built", + "coverage", + "jest.config.ts", + "test", + "test-d" + ] + }, + "javascript": { "globals": [] }, + "overrides": [ + { + "include": ["**/*.ts", "**/*.tsx"], + "linter": { + "rules": { + "correctness": { + "noConstAssign": "off", + "noGlobalObjectCalls": "off", + "noInvalidConstructorSuper": "off", + "noInvalidNewBuiltin": "off", + "noNewSymbol": "off", + "noSetterReturn": "off", + "noUndeclaredVariables": "off", + "noUnreachable": "off", + "noUnreachableSuper": "off" + }, + "style": { + "noArguments": "error", + "noVar": "error", + "useConst": "error" + }, + "suspicious": { + "noDuplicateClassMembers": "off", + "noDuplicateObjectKeys": "off", + "noDuplicateParameters": "off", + "noFunctionAssign": "off", + "noImportAssign": "off", + "noRedeclare": "off", + "noUnsafeNegation": "off", + "useGetterReturn": "off" + } + } + } + } + ] +} diff --git a/packages/misskey-bubble-game/package.json b/packages/misskey-bubble-game/package.json index 528eb00b74..e579c171b0 100644 --- a/packages/misskey-bubble-game/package.json +++ b/packages/misskey-bubble-game/package.json @@ -19,9 +19,13 @@ "watch": "nodemon -w package.json -e json --exec \"node ./build.js --watch\"", "eslint": "eslint './**/*.{js,jsx,ts,tsx}'", "typecheck": "tsc --noEmit", - "lint": "pnpm typecheck && pnpm eslint" + "lint": "pnpm typecheck && pnpm eslint", + "biome-lint": "pnpm typecheck && pnpm biome lint", + "format": "pnpm biome format", + "format:write": "pnpm biome format --write" }, "devDependencies": { + "@biomejs/biome": "1.9.3", "@types/matter-js": "0.19.6", "@types/seedrandom": "3.0.8", "@types/node": "20.11.5", diff --git a/packages/misskey-reversi/biome.json b/packages/misskey-reversi/biome.json new file mode 100644 index 0000000000..9b1d735681 --- /dev/null +++ b/packages/misskey-reversi/biome.json @@ -0,0 +1,122 @@ +{ + "$schema": "https://biomejs.dev/schemas/1.8.3/schema.json", + "organizeImports": { "enabled": true }, + "linter": { + "enabled": true, + "rules": { + "recommended": false, + "complexity": { + "noBannedTypes": "error", + "noExtraBooleanCast": "error", + "noMultipleSpacesInRegularExpressionLiterals": "error", + "noUselessCatch": "error", + "noUselessTypeConstraint": "error", + "noWith": "error" + }, + "correctness": { + "noConstAssign": "error", + "noConstantCondition": "warn", + "noEmptyCharacterClassInRegex": "error", + "noEmptyPattern": "warn", + "noGlobalObjectCalls": "error", + "noInnerDeclarations": "off", + "noInvalidConstructorSuper": "error", + "noNewSymbol": "error", + "noNonoctalDecimalEscape": "error", + "noPrecisionLoss": "error", + "noSelfAssign": "error", + "noSetterReturn": "error", + "noSwitchDeclarations": "error", + "noUndeclaredVariables": "error", + "noUnreachable": "error", + "noUnreachableSuper": "error", + "noUnsafeFinally": "error", + "noUnsafeOptionalChaining": "error", + "noUnusedLabels": "error", + "noUnusedVariables": "error", + "useArrayLiterals": "off", + "useIsNan": "error", + "useValidForDirection": "error", + "useYield": "error" + }, + "style": { + "noDefaultExport": "warn", + "noInferrableTypes": "warn", + "noNamespace": "error", + "noNonNullAssertion": "warn", + "noParameterAssign": "warn", + "noVar": "error", + "useAsConstAssertion": "error" + }, + "suspicious": { + "noAsyncPromiseExecutor": "off", + "noCatchAssign": "error", + "noClassAssign": "error", + "noCompareNegZero": "error", + "noControlCharactersInRegex": "warn", + "noDebugger": "error", + "noDoubleEquals": "error", + "noDuplicateCase": "error", + "noDuplicateClassMembers": "error", + "noDuplicateObjectKeys": "error", + "noDuplicateParameters": "error", + "noEmptyBlockStatements": "off", + "noExplicitAny": "warn", + "noExtraNonNullAssertion": "error", + "noFallthroughSwitchClause": "error", + "noFunctionAssign": "error", + "noGlobalAssign": "error", + "noImportAssign": "error", + "noMisleadingCharacterClass": "error", + "noMisleadingInstantiator": "error", + "noPrototypeBuiltins": "error", + "noRedeclare": "error", + "noShadowRestrictedNames": "error", + "noUnsafeDeclarationMerging": "error", + "noUnsafeNegation": "error", + "useGetterReturn": "error", + "useValidTypeof": "error" + } + }, + "ignore": [ + "**/node_modules", + "built" + ] + }, + "javascript": { "globals": [] }, + "overrides": [ + { + "include": ["**/*.ts", "**/*.tsx"], + "linter": { + "rules": { + "correctness": { + "noConstAssign": "off", + "noGlobalObjectCalls": "off", + "noInvalidConstructorSuper": "off", + "noInvalidNewBuiltin": "off", + "noNewSymbol": "off", + "noSetterReturn": "off", + "noUndeclaredVariables": "off", + "noUnreachable": "off", + "noUnreachableSuper": "off" + }, + "style": { + "noArguments": "error", + "noVar": "error", + "useConst": "error" + }, + "suspicious": { + "noDuplicateClassMembers": "off", + "noDuplicateObjectKeys": "off", + "noDuplicateParameters": "off", + "noFunctionAssign": "off", + "noImportAssign": "off", + "noRedeclare": "off", + "noUnsafeNegation": "off", + "useGetterReturn": "off" + } + } + } + } + ] +} diff --git a/packages/misskey-reversi/package.json b/packages/misskey-reversi/package.json index c6db6e6221..bd7bd4a3e4 100644 --- a/packages/misskey-reversi/package.json +++ b/packages/misskey-reversi/package.json @@ -19,9 +19,13 @@ "watch": "nodemon -w package.json -e json --exec \"node ./build.js --watch\"", "eslint": "eslint './**/*.{js,jsx,ts,tsx}'", "typecheck": "tsc --noEmit", - "lint": "pnpm typecheck && pnpm eslint" + "lint": "pnpm typecheck && pnpm eslint", + "biome-lint": "pnpm typecheck && pnpm biome lint", + "format": "pnpm biome format", + "format:write": "pnpm biome format --write" }, "devDependencies": { + "@biomejs/biome": "1.9.3", "@types/node": "20.11.5", "@typescript-eslint/eslint-plugin": "7.1.0", "@typescript-eslint/parser": "7.1.0", diff --git a/packages/sw/biome.json b/packages/sw/biome.json new file mode 100644 index 0000000000..3157cd31ad --- /dev/null +++ b/packages/sw/biome.json @@ -0,0 +1,119 @@ +{ + "$schema": "https://biomejs.dev/schemas/1.8.3/schema.json", + "organizeImports": { "enabled": true }, + "linter": { + "enabled": true, + "rules": { + "recommended": false, + "complexity": { + "noBannedTypes": "error", + "noExtraBooleanCast": "error", + "noMultipleSpacesInRegularExpressionLiterals": "error", + "noUselessCatch": "error", + "noUselessTypeConstraint": "error", + "noWith": "error" + }, + "correctness": { + "noConstAssign": "error", + "noConstantCondition": "warn", + "noEmptyCharacterClassInRegex": "error", + "noEmptyPattern": "warn", + "noGlobalObjectCalls": "error", + "noInnerDeclarations": "off", + "noInvalidConstructorSuper": "error", + "noNewSymbol": "error", + "noNonoctalDecimalEscape": "error", + "noPrecisionLoss": "error", + "noSelfAssign": "error", + "noSetterReturn": "error", + "noSwitchDeclarations": "error", + "noUndeclaredVariables": "error", + "noUnreachable": "error", + "noUnreachableSuper": "error", + "noUnsafeFinally": "error", + "noUnsafeOptionalChaining": "error", + "noUnusedLabels": "error", + "noUnusedVariables": "error", + "useArrayLiterals": "off", + "useIsNan": "error", + "useValidForDirection": "error", + "useYield": "error" + }, + "style": { + "noDefaultExport": "warn", + "noInferrableTypes": "warn", + "noNamespace": "error", + "noNonNullAssertion": "warn", + "noParameterAssign": "warn", + "noVar": "error", + "useAsConstAssertion": "error" + }, + "suspicious": { + "noAsyncPromiseExecutor": "off", + "noCatchAssign": "error", + "noClassAssign": "error", + "noCompareNegZero": "error", + "noControlCharactersInRegex": "warn", + "noDebugger": "error", + "noDoubleEquals": "error", + "noDuplicateCase": "error", + "noDuplicateClassMembers": "error", + "noDuplicateObjectKeys": "error", + "noDuplicateParameters": "error", + "noEmptyBlockStatements": "off", + "noExplicitAny": "warn", + "noExtraNonNullAssertion": "error", + "noFallthroughSwitchClause": "error", + "noFunctionAssign": "error", + "noGlobalAssign": "error", + "noImportAssign": "error", + "noMisleadingCharacterClass": "error", + "noMisleadingInstantiator": "error", + "noPrototypeBuiltins": "error", + "noRedeclare": "error", + "noShadowRestrictedNames": "error", + "noUnsafeDeclarationMerging": "error", + "noUnsafeNegation": "error", + "useGetterReturn": "error", + "useValidTypeof": "error" + } + }, + "ignore": ["build.js"] + }, + "javascript": { "globals": [] }, + "overrides": [ + { + "include": ["**/*.ts", "**/*.tsx"], + "linter": { + "rules": { + "correctness": { + "noConstAssign": "off", + "noGlobalObjectCalls": "off", + "noInvalidConstructorSuper": "off", + "noInvalidNewBuiltin": "off", + "noNewSymbol": "off", + "noSetterReturn": "off", + "noUndeclaredVariables": "off", + "noUnreachable": "off", + "noUnreachableSuper": "off" + }, + "style": { + "noArguments": "error", + "noVar": "error", + "useConst": "error" + }, + "suspicious": { + "noDuplicateClassMembers": "off", + "noDuplicateObjectKeys": "off", + "noDuplicateParameters": "off", + "noFunctionAssign": "off", + "noImportAssign": "off", + "noRedeclare": "off", + "noUnsafeNegation": "off", + "useGetterReturn": "off" + } + } + } + } + ] +} diff --git a/packages/sw/package.json b/packages/sw/package.json index 35f55cda99..1b85d81e0a 100644 --- a/packages/sw/package.json +++ b/packages/sw/package.json @@ -6,7 +6,10 @@ "build": "node build.js", "typecheck": "tsc --noEmit", "eslint": "eslint --quiet src/**/*.ts", - "lint": "pnpm typecheck && pnpm eslint" + "lint": "pnpm typecheck && pnpm eslint", + "biome-lint": "pnpm typecheck && pnpm biome lint", + "format": "pnpm biome format", + "format:write": "pnpm biome format --write" }, "dependencies": { "esbuild": "0.23.1", @@ -14,6 +17,7 @@ "cherrypick-js": "workspace:*" }, "devDependencies": { + "@biomejs/biome": "1.9.3", "@typescript-eslint/parser": "7.17.0", "@typescript/lib-webworker": "npm:@types/serviceworker@0.0.67", "eslint-plugin-import": "2.30.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index c28b31b6c3..b5b4da8530 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -50,6 +50,9 @@ importers: specifier: 4.4.0 version: 4.4.0(encoding@0.1.13) devDependencies: + '@biomejs/biome': + specifier: 1.9.3 + version: 1.9.3 '@misskey-dev/eslint-plugin': specifier: 2.0.3 version: 2.0.3(@eslint/compat@1.1.1)(@typescript-eslint/eslint-plugin@7.17.0(@typescript-eslint/parser@7.17.0(eslint@9.8.0)(typescript@5.6.2))(eslint@9.8.0)(typescript@5.6.2))(@typescript-eslint/parser@7.17.0(eslint@9.8.0)(typescript@5.6.2))(eslint-plugin-import@2.30.0(@typescript-eslint/parser@7.17.0(eslint@9.8.0)(typescript@5.6.2))(eslint@9.8.0))(eslint@9.8.0)(globals@15.9.0) @@ -544,6 +547,9 @@ importers: specifier: 6.0.3 version: 6.0.3 devDependencies: + '@biomejs/biome': + specifier: 1.9.3 + version: 1.9.3 '@jest/globals': specifier: 29.7.0 version: 29.7.0 @@ -713,6 +719,9 @@ importers: specifier: 4.4.0 version: 4.4.0 devDependencies: + '@biomejs/biome': + specifier: 1.9.3 + version: 1.9.3 '@microsoft/api-extractor': specifier: 7.47.9 version: 7.47.9(@types/node@20.14.12) @@ -993,6 +1002,9 @@ importers: specifier: next version: 4.1.0(vue@3.5.10(typescript@5.6.2)) devDependencies: + '@biomejs/biome': + specifier: 1.9.3 + version: 1.9.3 '@misskey-dev/summaly': specifier: 5.1.0 version: 5.1.0 @@ -1103,7 +1115,7 @@ importers: version: 7.17.0(eslint@9.8.0)(typescript@5.6.2) '@vitest/coverage-v8': specifier: 1.6.0 - version: 1.6.0(vitest@1.6.0(@types/node@20.14.12)(happy-dom@10.0.3)(jsdom@24.1.1)(sass@1.79.3)(terser@5.33.0)) + version: 1.6.0(vitest@1.6.0(@types/node@20.14.12)(happy-dom@10.0.3)(jsdom@24.1.1(bufferutil@4.0.7)(utf-8-validate@6.0.3))(sass@1.79.3)(terser@5.33.0)) '@vue/runtime-core': specifier: 3.5.10 version: 3.5.10 @@ -1172,7 +1184,7 @@ importers: version: 1.0.3 vitest: specifier: 1.6.0 - version: 1.6.0(@types/node@20.14.12)(happy-dom@10.0.3)(jsdom@24.1.1)(sass@1.79.3)(terser@5.33.0) + version: 1.6.0(@types/node@20.14.12)(happy-dom@10.0.3)(jsdom@24.1.1(bufferutil@4.0.7)(utf-8-validate@6.0.3))(sass@1.79.3)(terser@5.33.0) vitest-fetch-mock: specifier: 0.2.2 version: 0.2.2(encoding@0.1.13)(vitest@1.6.0(@types/node@20.14.12)(happy-dom@10.0.3)(jsdom@24.1.1(bufferutil@4.0.7)(utf-8-validate@6.0.3))(sass@1.79.3)(terser@5.33.0)) @@ -1267,6 +1279,9 @@ importers: specifier: 3.5.10 version: 3.5.10(typescript@5.6.2) devDependencies: + '@biomejs/biome': + specifier: 1.9.3 + version: 1.9.3 '@misskey-dev/summaly': specifier: 5.1.0 version: 5.1.0 @@ -1302,7 +1317,7 @@ importers: version: 7.17.0(eslint@9.8.0)(typescript@5.6.2) '@vitest/coverage-v8': specifier: 1.6.0 - version: 1.6.0(vitest@1.6.0(@types/node@20.14.12)(happy-dom@10.0.3)(jsdom@24.1.1)(sass@1.79.3)(terser@5.33.0)) + version: 1.6.0(vitest@1.6.0(@types/node@20.14.12)(happy-dom@10.0.3)(jsdom@24.1.1(bufferutil@4.0.7)(utf-8-validate@6.0.3))(sass@1.79.3)(terser@5.33.0)) '@vue/runtime-core': specifier: 3.5.10 version: 3.5.10 @@ -1364,6 +1379,9 @@ importers: specifier: 3.4.37 version: 3.4.37(typescript@5.5.4) devDependencies: + '@biomejs/biome': + specifier: 1.9.3 + version: 1.9.3 '@types/node': specifier: 20.14.12 version: 20.14.12 @@ -1398,6 +1416,9 @@ importers: specifier: 3.0.5 version: 3.0.5 devDependencies: + '@biomejs/biome': + specifier: 1.9.3 + version: 1.9.3 '@types/matter-js': specifier: 0.19.6 version: 0.19.6 @@ -1435,6 +1456,9 @@ importers: specifier: 1.2.2 version: 1.2.2 devDependencies: + '@biomejs/biome': + specifier: 1.9.3 + version: 1.9.3 '@types/node': specifier: 20.11.5 version: 20.11.5 @@ -1472,6 +1496,9 @@ importers: specifier: 6.2.1 version: 6.2.1 devDependencies: + '@biomejs/biome': + specifier: 1.9.3 + version: 1.9.3 '@typescript-eslint/parser': specifier: 7.17.0 version: 7.17.0(eslint@9.8.0)(typescript@5.6.2) @@ -1916,6 +1943,59 @@ packages: '@bcoe/v8-coverage@0.2.3': resolution: {integrity: sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==} + '@biomejs/biome@1.9.3': + resolution: {integrity: sha512-POjAPz0APAmX33WOQFGQrwLvlu7WLV4CFJMlB12b6ZSg+2q6fYu9kZwLCOA+x83zXfcPd1RpuWOKJW0GbBwLIQ==} + engines: {node: '>=14.21.3'} + hasBin: true + + '@biomejs/cli-darwin-arm64@1.9.3': + resolution: {integrity: sha512-QZzD2XrjJDUyIZK+aR2i5DDxCJfdwiYbUKu9GzkCUJpL78uSelAHAPy7m0GuPMVtF/Uo+OKv97W3P9nuWZangQ==} + engines: {node: '>=14.21.3'} + cpu: [arm64] + os: [darwin] + + '@biomejs/cli-darwin-x64@1.9.3': + resolution: {integrity: sha512-vSCoIBJE0BN3SWDFuAY/tRavpUtNoqiceJ5PrU3xDfsLcm/U6N93JSM0M9OAiC/X7mPPfejtr6Yc9vSgWlEgVw==} + engines: {node: '>=14.21.3'} + cpu: [x64] + os: [darwin] + + '@biomejs/cli-linux-arm64-musl@1.9.3': + resolution: {integrity: sha512-VBzyhaqqqwP3bAkkBrhVq50i3Uj9+RWuj+pYmXrMDgjS5+SKYGE56BwNw4l8hR3SmYbLSbEo15GcV043CDSk+Q==} + engines: {node: '>=14.21.3'} + cpu: [arm64] + os: [linux] + + '@biomejs/cli-linux-arm64@1.9.3': + resolution: {integrity: sha512-vJkAimD2+sVviNTbaWOGqEBy31cW0ZB52KtpVIbkuma7PlfII3tsLhFa+cwbRAcRBkobBBhqZ06hXoZAN8NODQ==} + engines: {node: '>=14.21.3'} + cpu: [arm64] + os: [linux] + + '@biomejs/cli-linux-x64-musl@1.9.3': + resolution: {integrity: sha512-TJmnOG2+NOGM72mlczEsNki9UT+XAsMFAOo8J0me/N47EJ/vkLXxf481evfHLlxMejTY6IN8SdRSiPVLv6AHlA==} + engines: {node: '>=14.21.3'} + cpu: [x64] + os: [linux] + + '@biomejs/cli-linux-x64@1.9.3': + resolution: {integrity: sha512-x220V4c+romd26Mu1ptU+EudMXVS4xmzKxPVb9mgnfYlN4Yx9vD5NZraSx/onJnd3Gh/y8iPUdU5CDZJKg9COA==} + engines: {node: '>=14.21.3'} + cpu: [x64] + os: [linux] + + '@biomejs/cli-win32-arm64@1.9.3': + resolution: {integrity: sha512-lg/yZis2HdQGsycUvHWSzo9kOvnGgvtrYRgoCEwPBwwAL8/6crOp3+f47tPwI/LI1dZrhSji7PNsGKGHbwyAhw==} + engines: {node: '>=14.21.3'} + cpu: [arm64] + os: [win32] + + '@biomejs/cli-win32-x64@1.9.3': + resolution: {integrity: sha512-cQMy2zanBkVLpmmxXdK6YePzmZx0s5Z7KEnwmrW54rcXK3myCNbQa09SwGZ8i/8sLw0H9F3X7K4rxVNGU8/D4Q==} + engines: {node: '>=14.21.3'} + cpu: [x64] + os: [win32] + '@bull-board/api@6.0.0': resolution: {integrity: sha512-O0IsIwAOU47bPTJnqRO7RtKFQToMvwRebbuPi6M+SG1gXyiqixLg9pycnfXgSeroaT9E7QQ2PsCPW1HO8VORvw==} peerDependencies: @@ -12876,6 +12956,41 @@ snapshots: '@bcoe/v8-coverage@0.2.3': {} + '@biomejs/biome@1.9.3': + optionalDependencies: + '@biomejs/cli-darwin-arm64': 1.9.3 + '@biomejs/cli-darwin-x64': 1.9.3 + '@biomejs/cli-linux-arm64': 1.9.3 + '@biomejs/cli-linux-arm64-musl': 1.9.3 + '@biomejs/cli-linux-x64': 1.9.3 + '@biomejs/cli-linux-x64-musl': 1.9.3 + '@biomejs/cli-win32-arm64': 1.9.3 + '@biomejs/cli-win32-x64': 1.9.3 + + '@biomejs/cli-darwin-arm64@1.9.3': + optional: true + + '@biomejs/cli-darwin-x64@1.9.3': + optional: true + + '@biomejs/cli-linux-arm64-musl@1.9.3': + optional: true + + '@biomejs/cli-linux-arm64@1.9.3': + optional: true + + '@biomejs/cli-linux-x64-musl@1.9.3': + optional: true + + '@biomejs/cli-linux-x64@1.9.3': + optional: true + + '@biomejs/cli-win32-arm64@1.9.3': + optional: true + + '@biomejs/cli-win32-x64@1.9.3': + optional: true + '@bull-board/api@6.0.0(@bull-board/ui@6.0.0)': dependencies: '@bull-board/ui': 6.0.0 @@ -16489,7 +16604,7 @@ snapshots: vite: 5.4.8(@types/node@20.14.12)(sass@1.79.3)(terser@5.33.0) vue: 3.5.10(typescript@5.6.2) - '@vitest/coverage-v8@1.6.0(vitest@1.6.0(@types/node@20.14.12)(happy-dom@10.0.3)(jsdom@24.1.1)(sass@1.79.3)(terser@5.33.0))': + '@vitest/coverage-v8@1.6.0(vitest@1.6.0(@types/node@20.14.12)(happy-dom@10.0.3)(jsdom@24.1.1(bufferutil@4.0.7)(utf-8-validate@6.0.3))(sass@1.79.3)(terser@5.33.0))': dependencies: '@ampproject/remapping': 2.2.1 '@bcoe/v8-coverage': 0.2.3 @@ -16504,7 +16619,7 @@ snapshots: std-env: 3.7.0 strip-literal: 2.1.0 test-exclude: 6.0.0 - vitest: 1.6.0(@types/node@20.14.12)(happy-dom@10.0.3)(jsdom@24.1.1)(sass@1.79.3)(terser@5.33.0) + vitest: 1.6.0(@types/node@20.14.12)(happy-dom@10.0.3)(jsdom@24.1.1(bufferutil@4.0.7)(utf-8-validate@6.0.3))(sass@1.79.3)(terser@5.33.0) transitivePeerDependencies: - supports-color @@ -24457,11 +24572,11 @@ snapshots: vitest-fetch-mock@0.2.2(encoding@0.1.13)(vitest@1.6.0(@types/node@20.14.12)(happy-dom@10.0.3)(jsdom@24.1.1(bufferutil@4.0.7)(utf-8-validate@6.0.3))(sass@1.79.3)(terser@5.33.0)): dependencies: cross-fetch: 3.1.5(encoding@0.1.13) - vitest: 1.6.0(@types/node@20.14.12)(happy-dom@10.0.3)(jsdom@24.1.1)(sass@1.79.3)(terser@5.33.0) + vitest: 1.6.0(@types/node@20.14.12)(happy-dom@10.0.3)(jsdom@24.1.1(bufferutil@4.0.7)(utf-8-validate@6.0.3))(sass@1.79.3)(terser@5.33.0) transitivePeerDependencies: - encoding - vitest@1.6.0(@types/node@20.14.12)(happy-dom@10.0.3)(jsdom@24.1.1)(sass@1.79.3)(terser@5.33.0): + vitest@1.6.0(@types/node@20.14.12)(happy-dom@10.0.3)(jsdom@24.1.1(bufferutil@4.0.7)(utf-8-validate@6.0.3))(sass@1.79.3)(terser@5.33.0): dependencies: '@vitest/expect': 1.6.0 '@vitest/runner': 1.6.0