Housein Abo Shaar пре 1 месец
родитељ
комит
2ce6faabbb
3 измењених фајлова са 264 додато и 20 уклоњено
  1. 2 0
      .gitignore
  2. 251 0
      biome.json
  3. 11 20
      package.json

+ 2 - 0
.gitignore

@@ -389,3 +389,5 @@ Network Trash Folder
 Temporary Items
 .apdisk
 __admin-ui/
+.nx
+.eslintcache

+ 251 - 0
biome.json

@@ -0,0 +1,251 @@
+{
+  "$schema": "https://biomejs.dev/schemas/2.3.8/schema.json",
+  "vcs": { "enabled": true, "clientKind": "git", "useIgnoreFile": true },
+  "files": { "ignoreUnknown": false },
+  "formatter": {
+    "enabled": true,
+    "formatWithErrors": false,
+    "indentStyle": "space",
+    "indentWidth": 4,
+    "lineEnding": "lf",
+    "lineWidth": 110,
+    "attributePosition": "auto",
+    "bracketSameLine": false,
+    "bracketSpacing": true,
+    "expand": "auto",
+    "useEditorconfig": true,
+    "includes": [
+      "**",
+      "!**/generated-types.ts",
+      "!**/lazy-extensions.module.ts",
+      "!**/shared-extensions.module.ts",
+      "!**/generated-graphql-shop-errors.ts",
+      "!**/generated-graphql-admin-errors.ts"
+    ]
+  },
+  "linter": {
+    "enabled": true,
+    "rules": { "recommended": false, "style": { "useBlockStatements": "off" } },
+    "includes": [
+      "**",
+      "!**/node_modules/**",
+      "!**/dist/**",
+      "!**/generated*",
+      "!**/*.js",
+      "!**/*.d.ts",
+      "!/packages/ui-devkit/scaffold/**/*",
+      "!/packages/dev-server/load-testing/**/*",
+      "!/docs/layouts/**/*"
+    ]
+  },
+  "javascript": {
+    "formatter": {
+      "jsxQuoteStyle": "double",
+      "quoteProperties": "asNeeded",
+      "trailingCommas": "all",
+      "semicolons": "always",
+      "arrowParentheses": "asNeeded",
+      "bracketSameLine": false,
+      "quoteStyle": "single",
+      "attributePosition": "auto",
+      "bracketSpacing": true
+    }
+  },
+  "html": {
+    "formatter": {
+      "indentScriptAndStyle": false,
+      "selfCloseVoidElements": "always"
+    }
+  },
+  "overrides": [
+    { "includes": ["**/*.ts", "**/*.tsx"], "javascript": { "globals": [] } },
+    {
+      "includes": ["**/*.ts", "**/*.tsx"],
+      "linter": {
+        "rules": {
+          "complexity": { "noArguments": "error" },
+          "correctness": {
+            "noConstAssign": "off",
+            "noGlobalObjectCalls": "off",
+            "noInvalidBuiltinInstantiation": "off",
+            "noInvalidConstructorSuper": "off",
+            "noSetterReturn": "off",
+            "noUndeclaredVariables": "off",
+            "noUnreachable": "off",
+            "noUnreachableSuper": "off"
+          },
+          "style": { "useConst": "error" },
+          "suspicious": {
+            "noClassAssign": "off",
+            "noDuplicateClassMembers": "off",
+            "noDuplicateObjectKeys": "off",
+            "noDuplicateParameters": "off",
+            "noFunctionAssign": "off",
+            "noImportAssign": "off",
+            "noRedeclare": "off",
+            "noUnsafeNegation": "off",
+            "noVar": "error",
+            "noWith": "off",
+            "useGetterReturn": "off"
+          }
+        }
+      }
+    },
+    {
+      "includes": ["**/*.ts", "**/*.tsx"],
+      "linter": {
+        "rules": {
+          "complexity": { "noUselessTypeConstraint": "error" },
+          "correctness": { "noUnusedVariables": "error" },
+          "style": {
+            "noCommonJs": "error",
+            "noNamespace": "error",
+            "useArrayLiterals": "error",
+            "useAsConstAssertion": "error"
+          },
+          "suspicious": {
+            "noExplicitAny": "error",
+            "noExtraNonNullAssertion": "error",
+            "noMisleadingInstantiator": "error",
+            "noNonNullAssertedOptionalChain": "error",
+            "noUnsafeDeclarationMerging": "error",
+            "useNamespaceKeyword": "error"
+          }
+        }
+      }
+    },
+    { "includes": ["**/*.ts", "**/*.tsx"], "javascript": { "globals": [] } },
+    {
+      "includes": ["**/*.ts", "**/*.tsx"],
+      "linter": {
+        "rules": {
+          "complexity": { "noArguments": "error" },
+          "correctness": {
+            "noConstAssign": "off",
+            "noGlobalObjectCalls": "off",
+            "noInvalidBuiltinInstantiation": "off",
+            "noInvalidConstructorSuper": "off",
+            "noSetterReturn": "off",
+            "noUndeclaredVariables": "off",
+            "noUnreachable": "off",
+            "noUnreachableSuper": "off"
+          },
+          "style": { "useConst": "error" },
+          "suspicious": {
+            "noClassAssign": "off",
+            "noDuplicateClassMembers": "off",
+            "noDuplicateObjectKeys": "off",
+            "noDuplicateParameters": "off",
+            "noFunctionAssign": "off",
+            "noImportAssign": "off",
+            "noRedeclare": "off",
+            "noUnsafeNegation": "off",
+            "noVar": "error",
+            "noWith": "off",
+            "useGetterReturn": "off"
+          }
+        }
+      }
+    },
+    {
+      "includes": ["**/*.ts", "**/*.tsx"],
+      "linter": {
+        "rules": {
+          "complexity": { "noUselessTypeConstraint": "error" },
+          "correctness": { "noUnusedVariables": "error" },
+          "style": {
+            "noCommonJs": "error",
+            "noNamespace": "error",
+            "useArrayLiterals": "error",
+            "useAsConstAssertion": "error"
+          },
+          "suspicious": {
+            "noExplicitAny": "error",
+            "noExtraNonNullAssertion": "error",
+            "noMisleadingInstantiator": "error",
+            "noNonNullAssertedOptionalChain": "error",
+            "noUnsafeDeclarationMerging": "error",
+            "useAwait": "error",
+            "useNamespaceKeyword": "error"
+          }
+        }
+      }
+    },
+    {
+      "includes": ["**/*.ts", "**/*.tsx"],
+      "javascript": { "globals": ["exports"] },
+      "linter": {
+        "rules": {
+          "complexity": {
+            "noUselessTypeConstraint": "error",
+            "noUselessUndefinedInitialization": "error",
+            "useLiteralKeys": "error"
+          },
+          "correctness": {
+            "noInvalidConstructorSuper": "error",
+            "noInvalidUseBeforeDeclaration": "off",
+            "noPrecisionLoss": "error",
+            "noUnsafeFinally": "error",
+            "noUnusedLabels": "error",
+            "noUnusedVariables": "off",
+            "useIsNan": "error",
+            "useParseIntRadix": "error",
+            "useValidTypeof": "off"
+          },
+          "security": { "noGlobalEval": "error" },
+          "style": {
+            "noInferrableTypes": "error",
+            "noNamespace": "error",
+            "noNonNullAssertion": "error",
+            "useArrayLiterals": "error",
+            "useAsConstAssertion": "error",
+            "useConsistentArrayType": {
+              "level": "error",
+              "options": { "syntax": "shorthand" }
+            },
+            "useConsistentBuiltinInstantiation": "error",
+            "useConsistentMemberAccessibility": {
+              "level": "off",
+              "options": { "accessibility": "explicit" }
+            },
+            "useConsistentTypeDefinitions": "off",
+            "useConst": "error",
+            "useForOf": "error",
+            "useShorthandFunctionType": "error",
+            "useSingleVarDeclarator": "error",
+            "useUnifiedTypeSignatures": "error"
+          },
+          "suspicious": {
+            "noBitwiseOperators": "error",
+            "noConsole": "error",
+            "noDebugger": "error",
+            "noDoubleEquals": "error",
+            "noEmptyBlockStatements": "error",
+            "noExplicitAny": "off",
+            "noExtraNonNullAssertion": "error",
+            "noFallthroughSwitchClause": "error",
+            "noMisleadingInstantiator": "error",
+            "noNonNullAssertedOptionalChain": "error",
+            "noVar": "error",
+            "useAdjacentOverloadSignatures": "error",
+            "useAwait": "warn",
+            "useGuardForIn": "error",
+            "useNamespaceKeyword": "error"
+          }
+        }
+      }
+    },
+    {
+      "includes": ["packages/ui-devkit/src/client/**/*"],
+      "javascript": { "globals": [] }
+    },
+    {
+      "includes": ["packages/ui-devkit/src/compiler/**/*"],
+      "javascript": { "globals": [] }
+    }
+  ],
+  "assist": {
+    "enabled": true,
+    "actions": { "source": { "organizeImports": "on" } }
+  }
+}

+ 11 - 20
package.json

@@ -14,8 +14,9 @@
     "watch": "lerna run watch --parallel",
     "watch:core-common": "lerna run --scope @vendure/common --scope @vendure/core watch --parallel",
     "build:core-common": "lerna run --scope @vendure/common --scope @vendure/core build",
-    "lint": "eslint --fix",
-    "format": "prettier --write --html-whitespace-sensitivity ignore",
+    "lint": "biome lint --write",
+    "format": "biome format --write",
+    "check": "biome check --write",
     "docs:generate-typescript-docs": "ts-node scripts/docs/generate-typescript-docs.ts",
     "docs:generate-graphql-docs": "ts-node scripts/docs/generate-graphql-docs.ts --api=shop && ts-node scripts/docs/generate-graphql-docs.ts --api=admin",
     "docs:build": "npm run docs:generate-typescript-docs && npm run docs:generate-graphql-docs",
@@ -34,6 +35,7 @@
     "publish-local": "lerna version --force-publish --no-git-tag-version && cd scripts && ./publish-to-verdaccio.sh"
   },
   "devDependencies": {
+    "@biomejs/biome": "2.3.8",
     "@commitlint/cli": "^19.1.0",
     "@commitlint/config-conventional": "^19.1.0",
     "@gql.tada/cli-utils": "^1.6.5",
@@ -44,7 +46,6 @@
     "@graphql-codegen/typescript": "5.0.1",
     "@graphql-codegen/typescript-operations": "5.0.1",
     "@graphql-tools/schema": "^10.0.25",
-    "gql.tada": "^1.8.10",
     "@swc/core": "^1.4.6",
     "@types/klaw-sync": "^6.0.5",
     "@types/node": "^20.11.19",
@@ -52,6 +53,8 @@
     "conventional-changelog-core": "^7.0.0",
     "cross-env": "^7.0.3",
     "find": "^0.3.0",
+    "globals": "^16.5.0",
+    "gql.tada": "^1.8.10",
     "graphql": "~16.11.0",
     "husky": "^4.3.0",
     "klaw-sync": "^6.0.0",
@@ -63,6 +66,7 @@
     "tinybench": "^2.6.0",
     "ts-node": "^10.9.2",
     "typescript": "5.8.2",
+    "typescript-eslint": "^8.48.1",
     "unplugin-swc": "^1.4.4",
     "vitest": "^3.2.4"
   },
@@ -80,26 +84,13 @@
     "@apollo/server": "^5.0.0"
   },
   "workspaces": {
-    "packages": [
-      "packages/*"
-    ],
-    "nohoist": [
-      "**/@types/jasmine",
-      "**/@types/jasminewd2"
-    ]
+    "packages": ["packages/*"],
+    "nohoist": ["**/@types/jasmine", "**/@types/jasminewd2"]
   },
   "commitlint": {
-    "extends": [
-      "@commitlint/config-conventional"
-    ],
+    "extends": ["@commitlint/config-conventional"],
     "rules": {
-      "subject-case": [
-        2,
-        "always",
-        [
-          "sentence-case"
-        ]
-      ]
+      "subject-case": [2, "always", ["sentence-case"]]
     }
   },
   "husky": {