From 1d3af6362b3368b44d1aa117f6a7a42448372ef4 Mon Sep 17 00:00:00 2001 From: eden chazard Date: Fri, 5 Sep 2025 15:57:52 +0100 Subject: [PATCH 1/3] eslint config --- eslint-config/README.md | 165 ++++++++++++++++++++ eslint-config/examples/base-only.js | 13 ++ eslint-config/examples/complete.js | 5 + eslint-config/examples/custom.js | 15 ++ eslint-config/examples/typescript-vitest.js | 15 ++ eslint-config/examples/vue-no-vitest.js | 13 ++ eslint-config/package.json | 55 +++++++ eslint-config/src/base.js | 121 ++++++++++++++ eslint-config/src/index.js | 42 +++++ eslint-config/src/vitest.js | 16 ++ eslint-config/src/vue.js | 85 ++++++++++ 11 files changed, 545 insertions(+) create mode 100644 eslint-config/README.md create mode 100644 eslint-config/examples/base-only.js create mode 100644 eslint-config/examples/complete.js create mode 100644 eslint-config/examples/custom.js create mode 100644 eslint-config/examples/typescript-vitest.js create mode 100644 eslint-config/examples/vue-no-vitest.js create mode 100644 eslint-config/package.json create mode 100644 eslint-config/src/base.js create mode 100644 eslint-config/src/index.js create mode 100644 eslint-config/src/vitest.js create mode 100644 eslint-config/src/vue.js diff --git a/eslint-config/README.md b/eslint-config/README.md new file mode 100644 index 0000000..ffb7567 --- /dev/null +++ b/eslint-config/README.md @@ -0,0 +1,165 @@ +# @synergitech/eslint-config + +SynergiTech's shareable ESLint configuration with support for TypeScript, Vue, and Vitest. + +## Installation + +```bash +npm install --save-dev @synergitech/eslint-config +``` + +You'll also need to install the peer dependencies based on which features you want to use: + +### For the complete configuration (recommended): + +```bash +npm install --save-dev @eslint/js eslint-config-prettier eslint-plugin-import-x eslint-plugin-no-relative-import-paths eslint-plugin-unused-imports eslint-plugin-vitest eslint-plugin-vue globals typescript-eslint +``` + +### For base configuration only (no Vue, no Vitest): + +```bash +npm install --save-dev @eslint/js eslint-config-prettier eslint-plugin-import-x eslint-plugin-no-relative-import-paths eslint-plugin-unused-imports globals typescript-eslint +``` + +## Usage + +### Complete Configuration (Vue + TypeScript + Vitest) + +For the full configuration with Vue and Vitest support (equivalent to the original configuration): + +```javascript +// eslint.config.js +import config from "@synergitech/eslint-config"; + +export default config; +``` + +### Base Configuration Only (TypeScript without Vue/Vitest) + +For projects that only need TypeScript support without Vue or Vitest: + +```javascript +// eslint.config.js +import tseslint from "typescript-eslint"; +import prettierConfig from "eslint-config-prettier"; +import baseConfig from "@synergitech/eslint-config/base"; + +export default tseslint.config( + { + ignores: ["node_modules", "dist", "build"], + }, + ...baseConfig, + prettierConfig +); +``` + +### Vue Configuration without Vitest + +For Vue projects that don't use Vitest for testing: + +```javascript +// eslint.config.js +import tseslint from "typescript-eslint"; +import prettierConfig from "eslint-config-prettier"; +import vueConfig from "@synergitech/eslint-config/vue"; + +export default tseslint.config( + { + ignores: ["node_modules", "dist", "build"], + }, + ...vueConfig, + prettierConfig +); +``` + +### TypeScript + Vitest without Vue + +For TypeScript projects using Vitest but not Vue: + +```javascript +// eslint.config.js +import tseslint from "typescript-eslint"; +import prettierConfig from "eslint-config-prettier"; +import baseConfig from "@synergitech/eslint-config/base"; +import vitestConfig from "@synergitech/eslint-config/vitest"; + +export default tseslint.config( + { + ignores: ["node_modules", "dist", "build"], + }, + ...baseConfig, + ...vitestConfig, + prettierConfig +); +``` + +### Custom Configuration + +You can also extend any of the configurations with your own rules: + +```javascript +// eslint.config.js +import tseslint from "typescript-eslint"; +import config from "@synergitech/eslint-config"; + +export default tseslint.config(...config, { + rules: { + // Your custom rules here + "no-console": "warn", // Override the default "error" + }, +}); +``` + +## What's Included + +### Base Configuration + +- ESLint recommended rules +- TypeScript ESLint recommended rules +- Import/export rules (import-x plugin) +- Unused imports cleanup +- No relative import paths enforcement +- Comprehensive JavaScript/TypeScript best practices + +### Vue Configuration + +- All base configuration rules +- Vue ESLint recommended rules +- Vue 3 Composition API best practices +- Custom Vue-specific rules for better code quality + +### Vitest Configuration + +- Vitest ESLint recommended rules +- Applied only to test files (`**/*.spec.{js,ts}`, `**/*.test.{js,ts}`) + +## Rules Philosophy + +This configuration follows these principles: + +- **Strict but practical**: Enforces best practices while avoiding overly pedantic rules +- **Modern JavaScript/TypeScript**: Targets ES2021+ with modern syntax preferences +- **Import hygiene**: Maintains clean import/export statements +- **Vue best practices**: Follows Vue 3 Composition API recommendations +- **Test-friendly**: Provides appropriate rules for test files + +## Contributing + +This configuration is maintained by SynergiTech. If you have suggestions for improvements, please open an issue or pull request. + +## Migration from Monolithic Config + +If you're migrating from a large monolithic ESLint configuration (like the original 218-line `eslint.config.js`), you can now replace it with just 3 lines: + +```javascript +// Before: 218 lines of configuration +// After: 3 lines using shareable config +import config from "@synergitech/eslint-config"; + +export default config; +``` + +This provides the exact same linting behaviour while being much more maintainable and reusable across projects. + +See [MIGRATION.md](./MIGRATION.md) for detailed migration examples. diff --git a/eslint-config/examples/base-only.js b/eslint-config/examples/base-only.js new file mode 100644 index 0000000..d59232d --- /dev/null +++ b/eslint-config/examples/base-only.js @@ -0,0 +1,13 @@ +// Base configuration only (TypeScript without Vue/Vitest) +// For projects that only need TypeScript support +import tseslint from "typescript-eslint"; +import prettierConfig from "eslint-config-prettier"; +import baseConfig from "@synergitech/eslint-config/base"; + +export default tseslint.config( + { + ignores: ["node_modules", "dist", "build"], + }, + ...baseConfig, + prettierConfig +); \ No newline at end of file diff --git a/eslint-config/examples/complete.js b/eslint-config/examples/complete.js new file mode 100644 index 0000000..8a3d87e --- /dev/null +++ b/eslint-config/examples/complete.js @@ -0,0 +1,5 @@ +// Complete configuration (Vue + TypeScript + Vitest) +// This is equivalent to the original eslint.config.js +import config from "@synergitech/eslint-config"; + +export default config; \ No newline at end of file diff --git a/eslint-config/examples/custom.js b/eslint-config/examples/custom.js new file mode 100644 index 0000000..8522e29 --- /dev/null +++ b/eslint-config/examples/custom.js @@ -0,0 +1,15 @@ +// Custom configuration example +// Extending the complete config with custom rules +import tseslint from "typescript-eslint"; +import config from "@synergitech/eslint-config"; + +export default tseslint.config( + ...config, + { + rules: { + // Your custom rules here + "no-console": "warn", // Override the default "error" + // Add any project-specific rules + }, + } +); \ No newline at end of file diff --git a/eslint-config/examples/typescript-vitest.js b/eslint-config/examples/typescript-vitest.js new file mode 100644 index 0000000..12a855c --- /dev/null +++ b/eslint-config/examples/typescript-vitest.js @@ -0,0 +1,15 @@ +// TypeScript + Vitest without Vue +// For TypeScript projects using Vitest but not Vue +import tseslint from "typescript-eslint"; +import prettierConfig from "eslint-config-prettier"; +import baseConfig from "@synergitech/eslint-config/base"; +import vitestConfig from "@synergitech/eslint-config/vitest"; + +export default tseslint.config( + { + ignores: ["node_modules", "dist", "build"], + }, + ...baseConfig, + ...vitestConfig, + prettierConfig +); diff --git a/eslint-config/examples/vue-no-vitest.js b/eslint-config/examples/vue-no-vitest.js new file mode 100644 index 0000000..a1d4ed3 --- /dev/null +++ b/eslint-config/examples/vue-no-vitest.js @@ -0,0 +1,13 @@ +// Vue configuration without Vitest +// For Vue projects that don't use Vitest for testing +import tseslint from "typescript-eslint"; +import prettierConfig from "eslint-config-prettier"; +import vueConfig from "@synergitech/eslint-config/vue"; + +export default tseslint.config( + { + ignores: ["node_modules", "dist", "build"], + }, + ...vueConfig, + prettierConfig +); \ No newline at end of file diff --git a/eslint-config/package.json b/eslint-config/package.json new file mode 100644 index 0000000..acbef8d --- /dev/null +++ b/eslint-config/package.json @@ -0,0 +1,55 @@ +{ + "name": "@synergitech/eslint-config", + "version": "1.0.0", + "license": "MIT", + "private": false, + "type": "module", + "exports": { + ".": "./src/index.js", + "./base": "./src/base.js", + "./vue": "./src/vue.js", + "./vitest": "./src/vitest.js" + }, + "files": [ + "src/" + ], + "description": "SynergiTech's shareable ESLint configuration", + "keywords": [ + "eslint", + "eslintconfig", + "typescript", + "vue", + "vitest" + ], + "homepage": "https://github.com/SynergiTech/laravel-coding-standards", + "repository": { + "type": "git", + "url": "git+https://github.com/SynergiTech/laravel-coding-standards.git" + }, + "bugs": { + "url": "https://github.com/SynergiTech/laravel-coding-standards/issues" + }, + "author": { + "name": "synergitech", + "url": "https://www.npmjs.com/~synergitech" + }, + "peerDependencies": { + "@eslint/js": "^9.33.0", + "eslint-config-prettier": "^10.1.8", + "eslint-plugin-import-x": "^4.16.1", + "eslint-plugin-no-relative-import-paths": "^1.6.1", + "eslint-plugin-unused-imports": "^4.2.0", + "eslint-plugin-vitest": "^0.5.4", + "eslint-plugin-vue": "^10.4.0", + "globals": "^16.3.0", + "typescript-eslint": "^8.39.0" + }, + "peerDependenciesMeta": { + "eslint-plugin-vue": { + "optional": true + }, + "eslint-plugin-vitest": { + "optional": true + } + } +} \ No newline at end of file diff --git a/eslint-config/src/base.js b/eslint-config/src/base.js new file mode 100644 index 0000000..dde34df --- /dev/null +++ b/eslint-config/src/base.js @@ -0,0 +1,121 @@ +import eslint from "@eslint/js"; +import tseslint from "typescript-eslint"; +import pluginNoRelativeImportPaths from "eslint-plugin-no-relative-import-paths"; +import pluginUnusedImports from "eslint-plugin-unused-imports"; +import pluginImportX from "eslint-plugin-import-x"; +import globals from "globals"; + +/** + * Base ESLint configuration with TypeScript support + * Includes core JS/TS rules without Vue or Vitest + */ +export default tseslint.config( + eslint.configs.recommended, + ...tseslint.configs.recommended, + { + languageOptions: { + ecmaVersion: 13, + sourceType: "module", + globals: { + ...globals.browser, + es2021: true, + App: "writable", + }, + parserOptions: { + parser: tseslint.parser, + sourceType: "module", + }, + }, + plugins: { + "import-x": pluginImportX, + "unused-imports": pluginUnusedImports, + "no-relative-import-paths": pluginNoRelativeImportPaths, + }, + rules: { + "no-console": "error", + "no-var": "error", + // Disable the base rule as it can report incorrect errors + "no-unused-vars": "off", + "@typescript-eslint/no-unused-vars": [ + "error", + { + caughtErrors: "none", + args: "none", + varsIgnorePattern: "^_", + argsIgnorePattern: "^_", + }, + ], + // Allow unused expressions for callback patterns + "@typescript-eslint/no-unused-expressions": "off", + "unused-imports/no-unused-imports": "error", + "no-relative-import-paths/no-relative-import-paths": "error", + "import-x/extensions": ["error", "ignorePackages"], + "import-x/no-useless-path-segments": "error", + "import-x/first": "error", + "import-x/newline-after-import": "error", + "import-x/order": "error", + "array-callback-return": "error", + "no-constructor-return": "error", + "no-duplicate-imports": "error", + "no-inner-declarations": "error", + "no-promise-executor-return": "error", + "no-self-compare": "error", + "no-template-curly-in-string": "error", + "no-unreachable-loop": "error", + // Would be nice, but tends to be a little chaotic. + // "no-use-before-define": "error", + // Not working + // "no-useless-assignment": "error", + "require-atomic-updates": "error", + "default-case-last": "error", + "default-param-last": "error", + "dot-notation": "error", + eqeqeq: "error", + "grouped-accessor-pairs": "error", + "no-array-constructor": "error", + "no-caller": "error", + "no-else-return": "error", + "no-eval": "error", + "no-extend-native": "error", + "no-lone-blocks": "error", + "no-lonely-if": "error", + "no-multi-assign": "error", + "no-nested-ternary": "error", + "no-new-func": "error", + "no-new-wrappers": "error", + "no-object-constructor": "error", + // Maybe? + // "no-param-reassign": "error", + "no-return-assign": "error", + "no-sequences": "error", + "no-throw-literal": "error", + "no-undef-init": "error", + "no-unneeded-ternary": "error", + "no-unused-expressions": "error", + "no-useless-call": "error", + "no-useless-computed-key": "error", + "no-useless-return": "error", + // Controversial... + "object-shorthand": "error", + "one-var": ["error", "never"], + // Might annoy some people. + // "operator-assignment": "error", + "prefer-const": "error", + "prefer-exponentiation-operator": "error", + "prefer-object-has-own": "error", + "prefer-promise-reject-errors": "error", + "prefer-rest-params": "error", + "prefer-template": "error", + "require-await": "error", + yoda: "error", + }, + }, + // Typescript generation (rightly) generates any types for many scenarios. + // It's not ideal, but there's not too much we can do. + { + files: ["**/types/generated.d.ts"], + rules: { + "@typescript-eslint/no-explicit-any": "off", + }, + } +); diff --git a/eslint-config/src/index.js b/eslint-config/src/index.js new file mode 100644 index 0000000..272572d --- /dev/null +++ b/eslint-config/src/index.js @@ -0,0 +1,42 @@ +import tseslint from "typescript-eslint"; +import prettierConfig from "eslint-config-prettier"; +import vueConfig from "./vue.js"; +import vitestConfig from "./vitest.js"; + +/** + * Complete ESLint configuration including Vue and Vitest support + * This is the default export that provides the full configuration + * equivalent to the original eslint.config.js + */ +export default tseslint.config( + { + ignores: [ + ".docker", + ".docker-contents", + ".github", + "app", + "bootstrap", + "build", + "config", + "database", + "lang", + "node_modules", + "public", + "resources/css", + "resources/certificates", + "resources/js/routes", + "resources/js/actions", + "resources/js/wayfinder", + "resources/views", + "routes", + "settings", + "storage", + "tests/Feature", + "tests/Unit", + "vendor", + ], + }, + ...vueConfig, + ...vitestConfig, + prettierConfig +); \ No newline at end of file diff --git a/eslint-config/src/vitest.js b/eslint-config/src/vitest.js new file mode 100644 index 0000000..a32a989 --- /dev/null +++ b/eslint-config/src/vitest.js @@ -0,0 +1,16 @@ +import tseslint from "typescript-eslint"; +import pluginVitest from "eslint-plugin-vitest"; + +/** + * Vitest ESLint configuration for test files + * Can be combined with base or vue configs + */ +export default tseslint.config({ + files: ["**/*.spec.{js,ts}", "**/*.test.{js,ts}"], + plugins: { + vitest: pluginVitest, + }, + rules: { + ...pluginVitest.configs.recommended.rules, + }, +}); \ No newline at end of file diff --git a/eslint-config/src/vue.js b/eslint-config/src/vue.js new file mode 100644 index 0000000..c3a3174 --- /dev/null +++ b/eslint-config/src/vue.js @@ -0,0 +1,85 @@ +import tseslint from "typescript-eslint"; +import pluginVue from "eslint-plugin-vue"; +import baseConfig from "./base.js"; + +/** + * Vue ESLint configuration that extends the base config + * Includes Vue-specific rules and parser configuration + */ +export default tseslint.config( + ...baseConfig, + ...pluginVue.configs["flat/recommended"], + { + languageOptions: { + parserOptions: { + parser: tseslint.parser, + extraFileExtensions: [".vue"], + sourceType: "module", + }, + }, + plugins: { + vue: pluginVue, + }, + rules: { + "vue/no-console": "error", + "vue/multi-word-component-names": "off", + "vue/singleline-html-element-content-newline": "off", + "vue/require-default-prop": "off", + "vue/no-v-html": "off", + "vue/no-undef-components": [ + "error", + { + ignorePatterns: ["ais-(.+)"], + }, + ], + "vue/attribute-hyphenation": [ + "error", + "always", + { + // Annoyingly in Inertia links these aren't props and don't work if they've been + // hyphenated so I'm putting them on the ignore list so that `lint --fix` + // doesn't keep 'fixing' them. + ignore: [ + "onCancelToken", + "onBefore", + "onStart", + "onProgress", + "onFinish", + "onCancel", + "onSuccess", + ], + }, + ], + "vue/html-self-closing": ["off", { html: { void: "always" } }], + "vue/block-order": [ + "error", + { + order: ["template", "script[setup]", "script:not([setup])", "style"], + }, + ], + "vue/define-props-declaration": "error", + "vue/prefer-true-attribute-shorthand": "error", + "vue/prefer-use-template-ref": "error", + "vue/no-setup-props-reactivity-loss": "error", + "vue/no-ref-object-reactivity-loss": "error", + "vue/no-import-compiler-macros": "error", + "vue/no-duplicate-attr-inheritance": "error", + "vue/next-tick-style": "error", + "vue/html-button-has-type": "error", + "vue/define-macros-order": [ + "error", + { + order: [ + "defineOptions", + "defineEmits", + "defineProps", + "defineSlots", + "defineExpose", + ], + }, + ], + // Handled with our Prettier config. + "vue/html-indent": 0, + }, + } +); \ No newline at end of file From 2be0e71b363e884ebca1b0815cb86691d489e4ea Mon Sep 17 00:00:00 2001 From: eden chazard Date: Fri, 5 Sep 2025 15:59:57 +0100 Subject: [PATCH 2/3] readmeeee --- eslint-config/README.md | 26 +++----------------------- 1 file changed, 3 insertions(+), 23 deletions(-) diff --git a/eslint-config/README.md b/eslint-config/README.md index ffb7567..9f78ffe 100644 --- a/eslint-config/README.md +++ b/eslint-config/README.md @@ -5,7 +5,7 @@ SynergiTech's shareable ESLint configuration with support for TypeScript, Vue, a ## Installation ```bash -npm install --save-dev @synergitech/eslint-config +npm i -D @synergitech/eslint-config ``` You'll also need to install the peer dependencies based on which features you want to use: @@ -13,13 +13,13 @@ You'll also need to install the peer dependencies based on which features you wa ### For the complete configuration (recommended): ```bash -npm install --save-dev @eslint/js eslint-config-prettier eslint-plugin-import-x eslint-plugin-no-relative-import-paths eslint-plugin-unused-imports eslint-plugin-vitest eslint-plugin-vue globals typescript-eslint +npm i -D @eslint/js eslint-config-prettier eslint-plugin-import-x eslint-plugin-no-relative-import-paths eslint-plugin-unused-imports eslint-plugin-vitest eslint-plugin-vue globals typescript-eslint ``` ### For base configuration only (no Vue, no Vitest): ```bash -npm install --save-dev @eslint/js eslint-config-prettier eslint-plugin-import-x eslint-plugin-no-relative-import-paths eslint-plugin-unused-imports globals typescript-eslint +npm i -D @eslint/js eslint-config-prettier eslint-plugin-import-x eslint-plugin-no-relative-import-paths eslint-plugin-unused-imports globals typescript-eslint ``` ## Usage @@ -143,23 +143,3 @@ This configuration follows these principles: - **Import hygiene**: Maintains clean import/export statements - **Vue best practices**: Follows Vue 3 Composition API recommendations - **Test-friendly**: Provides appropriate rules for test files - -## Contributing - -This configuration is maintained by SynergiTech. If you have suggestions for improvements, please open an issue or pull request. - -## Migration from Monolithic Config - -If you're migrating from a large monolithic ESLint configuration (like the original 218-line `eslint.config.js`), you can now replace it with just 3 lines: - -```javascript -// Before: 218 lines of configuration -// After: 3 lines using shareable config -import config from "@synergitech/eslint-config"; - -export default config; -``` - -This provides the exact same linting behaviour while being much more maintainable and reusable across projects. - -See [MIGRATION.md](./MIGRATION.md) for detailed migration examples. From e7010a9cc59afde0c698f50ed2703b0cc0abcb9e Mon Sep 17 00:00:00 2001 From: eden chazard Date: Fri, 5 Sep 2025 16:01:26 +0100 Subject: [PATCH 3/3] rm examples --- eslint-config/examples/base-only.js | 13 ------------- eslint-config/examples/complete.js | 5 ----- eslint-config/examples/custom.js | 15 --------------- eslint-config/examples/typescript-vitest.js | 15 --------------- eslint-config/examples/vue-no-vitest.js | 13 ------------- 5 files changed, 61 deletions(-) delete mode 100644 eslint-config/examples/base-only.js delete mode 100644 eslint-config/examples/complete.js delete mode 100644 eslint-config/examples/custom.js delete mode 100644 eslint-config/examples/typescript-vitest.js delete mode 100644 eslint-config/examples/vue-no-vitest.js diff --git a/eslint-config/examples/base-only.js b/eslint-config/examples/base-only.js deleted file mode 100644 index d59232d..0000000 --- a/eslint-config/examples/base-only.js +++ /dev/null @@ -1,13 +0,0 @@ -// Base configuration only (TypeScript without Vue/Vitest) -// For projects that only need TypeScript support -import tseslint from "typescript-eslint"; -import prettierConfig from "eslint-config-prettier"; -import baseConfig from "@synergitech/eslint-config/base"; - -export default tseslint.config( - { - ignores: ["node_modules", "dist", "build"], - }, - ...baseConfig, - prettierConfig -); \ No newline at end of file diff --git a/eslint-config/examples/complete.js b/eslint-config/examples/complete.js deleted file mode 100644 index 8a3d87e..0000000 --- a/eslint-config/examples/complete.js +++ /dev/null @@ -1,5 +0,0 @@ -// Complete configuration (Vue + TypeScript + Vitest) -// This is equivalent to the original eslint.config.js -import config from "@synergitech/eslint-config"; - -export default config; \ No newline at end of file diff --git a/eslint-config/examples/custom.js b/eslint-config/examples/custom.js deleted file mode 100644 index 8522e29..0000000 --- a/eslint-config/examples/custom.js +++ /dev/null @@ -1,15 +0,0 @@ -// Custom configuration example -// Extending the complete config with custom rules -import tseslint from "typescript-eslint"; -import config from "@synergitech/eslint-config"; - -export default tseslint.config( - ...config, - { - rules: { - // Your custom rules here - "no-console": "warn", // Override the default "error" - // Add any project-specific rules - }, - } -); \ No newline at end of file diff --git a/eslint-config/examples/typescript-vitest.js b/eslint-config/examples/typescript-vitest.js deleted file mode 100644 index 12a855c..0000000 --- a/eslint-config/examples/typescript-vitest.js +++ /dev/null @@ -1,15 +0,0 @@ -// TypeScript + Vitest without Vue -// For TypeScript projects using Vitest but not Vue -import tseslint from "typescript-eslint"; -import prettierConfig from "eslint-config-prettier"; -import baseConfig from "@synergitech/eslint-config/base"; -import vitestConfig from "@synergitech/eslint-config/vitest"; - -export default tseslint.config( - { - ignores: ["node_modules", "dist", "build"], - }, - ...baseConfig, - ...vitestConfig, - prettierConfig -); diff --git a/eslint-config/examples/vue-no-vitest.js b/eslint-config/examples/vue-no-vitest.js deleted file mode 100644 index a1d4ed3..0000000 --- a/eslint-config/examples/vue-no-vitest.js +++ /dev/null @@ -1,13 +0,0 @@ -// Vue configuration without Vitest -// For Vue projects that don't use Vitest for testing -import tseslint from "typescript-eslint"; -import prettierConfig from "eslint-config-prettier"; -import vueConfig from "@synergitech/eslint-config/vue"; - -export default tseslint.config( - { - ignores: ["node_modules", "dist", "build"], - }, - ...vueConfig, - prettierConfig -); \ No newline at end of file