@soleil-se/eslint-config 5.3.2 → 6.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -7,6 +7,13 @@ Alla förändringar i detta repository antecknas här.
7
7
  Formatet baseras på [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
8
8
  och projektet använder [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
9
9
 
10
+ ## [6.0.0] - 2025-02-04
11
+
12
+ * Uppdatera till ESLint 9 och format på konfigurationsfiler till flat config.
13
+ * Ändra `trailingComma` till 'all' i Prettier-konfigurationen.
14
+ * Lägg till global för `envision`.
15
+ * Döpt om `legacy` till `script-module` då det är det den används till.
16
+
10
17
  ## [5.3.2] - 2024-12-13
11
18
 
12
19
  * Stäng av regeln `svelte/no-unused-svelte-ignore` då den strular.
package/LICENSE.md CHANGED
@@ -1 +1 @@
1
- (c) Copyright 2023 Soleil AB, all rights reserved.
1
+ (c) Copyright 2025 Soleil AB, all rights reserved.
package/README.md CHANGED
@@ -4,105 +4,92 @@ ESLint konfiguration för Sitevision projekt som bygger på Airbnbs JavaScript s
4
4
  **ES2015+**
5
5
  <https://github.com/airbnb/javascript>
6
6
 
7
- **Legacy (ES5)**
8
- <https://github.com/airbnb/javascript/tree/es5-deprecated/es5>
9
-
10
7
  Om man stöter på ett fel man inte förstår kan man kolla i styleguiden eller söka på ESLints hemsida.
11
8
  <https://eslint.org/docs/rules/>
12
9
 
13
10
  ## Installera
14
11
 
15
- Installera konfigurationen, ESLint, Prettier, Svelte och de plugins som behövs genom att köra:
12
+ Installera dependencies och sätt upp konfigurationsfiler:
16
13
 
17
14
  ```sh
18
- npx @soleil-se/eslint-config-sitevision --setup
15
+ npx @soleil-se/eslint-config-sitevision@latest --setup
19
16
  ```
20
17
 
21
18
  För att installera manuellt installera följande dependencies och skapa upp konfigurationsfiler enligt [nedan](#config).
22
19
 
23
20
  ```sh
24
- npm i @soleil-se/eslint-config-sitevision eslint eslint-config-airbnb-base eslint-plugin-import eslint-plugin-svelte svelte svelte-preprocess eslint-config-prettier --save-dev
21
+ npm i @soleil-se/eslint-config-sitevision eslint --save-dev
25
22
  ```
26
23
 
27
24
  ## Uppgradera
28
25
 
26
+ Enklast är att köra setup skriptet för att uppdatera till senaste versionen.
27
+ ```sh
28
+ npx @soleil-se/eslint-config-sitevision@latest --setup
29
+ ```
29
30
 
30
- :::details[Version 4.x.x > 5.x.x]
31
+ :::::details[Manuellt]
32
+ ::::steps
33
+ :::step[Avinstallera plugins]
34
+ Avinstallera alla gamla plugins med:
31
35
 
32
- - Uppgradera `@soleil-se/eslint-config-sitevision` till version 5.
33
- - Avinstallera `eslint-plugin-svelte3`.
34
- - Installera `eslint-plugin-svelte`.
35
- - Installera `eslint-config-prettier` om det inte redan är installerat.
36
+ ```sh
37
+ npm remove eslint-config-airbnb-base eslint-plugin-import eslint-plugin-svelte
38
+ ```
36
39
 
37
- ```sh
38
- npm i @soleil-se/eslint-config-sitevision@5 eslint-plugin-svelte eslint-plugin-prettier --save-dev && npm remove eslint-plugin-svelte3
39
- ```
40
+ :::
41
+ :::step[Uppdatera dependencies]
42
+ Uppdatera `@soleil-se/eslint-config-sitevision` till version 6 och `eslint` till version 9:
43
+
44
+ ```sh
45
+ npm i @soleil-se/eslint-config-sitevision@6 eslint@9 --save-dev
46
+ ```
47
+
48
+ :::
49
+ :::step[Ta bort gammal konfiguration]
40
50
 
41
- :::
42
- :::details[Version 3.x.x > 4.x.x]
43
-
44
- - Om Vue används i projektet **stanna** på version 3, stödet för Vue plockas bort i denna version.
45
- - Uppgradera `@soleil-se/eslint-config-sitevision` till version 4.
46
- - Om Svelte används i projektet installera `eslint-config-prettier`.
47
- - Byt ut alla importer av konfigurationer:
48
- - `@soleil-se/eslint-config-sitevision/global` > `@soleil-se/eslint-config-sitevision`
49
- - `@soleil-se/eslint-config-sitevision/webapp` > `@soleil-se/eslint-config-sitevision`
50
- - `@soleil-se/eslint-config-sitevision/client` > `@soleil-se/eslint-config-sitevision`
51
- - `@soleil-se/eslint-config-sitevision/server-es6` > `@soleil-se/eslint-config-sitevision`
52
- - `@soleil-se/eslint-config-sitevision/universal` > `@soleil-se/eslint-config-sitevision`
53
- - Byt ut alla importer av legacy-konfigurationer:
54
- - `@soleil-se/eslint-config-sitevision/server-legacy` > `@soleil-se/eslint-config-sitevision/legacy`
55
- - `@soleil-se/eslint-config-sitevision/server` > `@soleil-se/eslint-config-sitevision/legacy`
56
- :::
57
- :::details[Version 2.x.x > 3.x.x]
58
-
59
- - Uppgradera `@soleil-se/eslint-config-sitevision` till version 3.
60
- - Uppgradera `eslint` till version 8.
61
- - Uppgradera `eslint-config-airbnb-base` till version 15.
62
- - Ändra importer till Sitevisions API:er till `@sitevision/api/(server|common|client)/NamnPåAPI`.
63
- :::
64
- :::details[Version 1.x.x > 2.x.x]
65
-
66
- - Uppgradera `eslint` till version 7.
67
- - Installera alla dependencies enligt installationssteget.
68
- - Om `@soleil-se/eslint-config-sitevision/vue` används byt till `@soleil-se/eslint-config-sitevision/client`.
69
- :::
51
+ Ta bort gamla konfigurationsfiler.
52
+
53
+ - `.eslintrc.cjs`
54
+ - `.eslintignore`
55
+ - `.prettierrc.cjs`
56
+
57
+ :::
58
+ :::step[Skapa upp ny konfiguration]
59
+ Skapa upp nya konfigurationsfiler enligt [nedan](#config).
60
+ :::
61
+
62
+ ::::
63
+
64
+ :::::
70
65
 
71
66
  ## Config
72
67
 
73
- ESLint läser främst från `.eslintrc.cjs` filer i projektet.
68
+ ESLint läser främst från `eslint.config.js` filer i projektet.
74
69
  <https://eslint.org/docs/user-guide/configuring#using-configuration-files-1>
75
70
 
76
71
  ### Importera config
77
72
 
78
73
  ```js
79
- // .eslintrc.cjs
80
- module.exports = {
81
- extends: '@soleil-se/eslint-config-sitevision',
82
- };
83
- ```
74
+ // eslint.config.js
75
+ import sitevision from '@soleil-se/eslint-config-sitevision';
84
76
 
85
- Legacy config som används i en kontext med stöd för ES5 och delvis ES2015+.
86
- Till exempel serverkod som ska laddas upp som den är till Sitevision utan kompilering.
77
+ export default [
78
+ ...sitevision,
79
+ ];
87
80
 
88
- ```js
89
- // .eslintrc.cjs
90
- module.exports = {
91
- extends: '@soleil-se/eslint-config-sitevision/legacy',
92
- root: true,
93
- };
94
81
  ```
95
82
 
96
- ### ESLint ignore
83
+ Config för skriptmoduler och Rhino.
84
+
85
+ ```js
86
+ // eslint.config.js
87
+ import script from '@soleil-se/eslint-config-sitevision/script-module';
97
88
 
98
- Lägg med en `.eslintignore` fil i roten för att slå av linting av filer i bland annat `node_modules` och `dist`.
89
+ export default [
90
+ ...script,
91
+ ];
99
92
 
100
- ```text
101
- // .eslintignore
102
- dist
103
- node_nodules
104
- **/node_nodules
105
- svelte.config
106
93
  ```
107
94
 
108
95
  ## Editors
@@ -190,28 +177,28 @@ Slår man på `{ "mode": "auto" }` försöker den automatiskt hitta rätt konfig
190
177
 
191
178
  ```json
192
179
  // settings.json
193
- {
194
- "files.eol": "\n",
195
- "files.insertFinalNewline": true,
196
- "editor.codeActionsOnSave": {
197
- "source.fixAll.eslint": true
198
- },
199
- "editor.rulers": [
200
- 100
201
- ],
202
- "editor.formatOnSave": false,
203
- "editor.tabSize": 2,
204
- "editor.insertSpaces": true,
205
- "eslint.validate": [
206
- "javascript",
207
- "javascriptreact",
208
- "svelte",
209
- ],
210
- "[svelte]": {
211
- "editor.formatOnSave": true
212
- },
213
- "eslint.workingDirectories": [{ "mode": "auto" }],
214
- }
180
+
181
+ "files.eol": "\n",
182
+ "files.insertFinalNewline": true,
183
+ "editor.codeActionsOnSave": {
184
+ "source.fixAll.eslint": "explicit"
185
+ },
186
+ "editor.rulers": [
187
+ 100
188
+ ],
189
+ "editor.formatOnSave": false,
190
+ "editor.tabSize": 2,
191
+ "editor.insertSpaces": true,
192
+ "eslint.validate": [
193
+ "javascript",
194
+ "javascriptreact",
195
+ "svelte",
196
+ ],
197
+ "[svelte]": {
198
+ "editor.formatOnSave": true
199
+ },
200
+ "eslint.workingDirectories": [{ "mode": "auto" }],
201
+
215
202
  ```
216
203
 
217
204
  ## CLI
@@ -228,11 +215,12 @@ Installera [Svelte](https://marketplace.visualstudio.com/items?itemName=svelte.s
228
215
  Formatering av kod i Svelte använder Prettier så man behöver lägga till insällningar för det så HTML kan formateras,
229
216
  dessvärre påverkar detta även JavaScript så några regler som man är van vid har fått stängas av så
230
217
  det inte krockar med Prettier.
231
- Skapa en fil som heter `.prettierrc.js` i roten av projektet.
218
+ Skapa en fil som heter `prettier.config.js` i roten av appen eller projektet.
232
219
 
233
220
  ```js
234
- // .prettierrc.cjs
235
- module.exports = require('@soleil-se/eslint-config-sitevision/svelte.prettier');
221
+ // prettier.config.js
222
+ export { default } from '@soleil-se/eslint-config-sitevision/prettier';
223
+
236
224
  ```
237
225
 
238
226
  För att formatera automatiskt behöver man lägga till följande i `settings.json` i Visual Studio Code.
package/bin/index.js CHANGED
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env node
2
2
 
3
3
  if (process.argv.includes('--setup')) {
4
- require('../setup');
4
+ import('../setup.js');
5
5
  } else {
6
- console.log('Available commands:\n--setup: Setup ESLint + Prettier configuration and dependencies needed for @soleil/eslint-config.');
6
+ console.log('Available commands:\n--setup: Setup ESLint + Prettier configuration and dependencies needed for @soleil/eslint-config-sitevision.');
7
7
  }
@@ -0,0 +1,5 @@
1
+ import config from './node-config.js';
2
+
3
+ export default [
4
+ ...config,
5
+ ];
package/index.js CHANGED
@@ -1,121 +1,61 @@
1
- const { hasSvelte, hasPrettier } = require('./utils/hasDependency');
2
- const restrictedImports = require('./utils/restrictedImports');
1
+ import globals from 'globals';
2
+ import importPlugin from 'eslint-plugin-import';
3
+ import eslintPluginSvelte from 'eslint-plugin-svelte';
4
+ import eslintConfigPrettier from 'eslint-config-prettier';
3
5
 
4
- module.exports = {
5
- extends: ['airbnb-base'],
6
- parserOptions: {
7
- ecmaVersion: 'latest',
8
- sourceType: 'module',
9
- },
10
- env: {
11
- browser: true,
12
- jquery: true,
13
- },
14
- globals: {
15
- process: 'readonly',
16
- Packages: 'readonly',
17
- },
18
- rules: {
19
- 'import/extensions': ['error', 'never', {
20
- ignorePackages: true,
21
- pattern: {
22
- svelte: 'always',
23
- json: 'always',
6
+ import jsRules from './rules/js/index.js';
7
+ import svelteRules from './rules/svelte/index.js';
8
+
9
+ export default [
10
+ {
11
+ name: 'soleil/base',
12
+ languageOptions: {
13
+ ecmaVersion: 'latest',
14
+ sourceType: 'module',
15
+ globals: {
16
+ process: 'readonly',
17
+ Packages: 'readonly',
18
+ envision: 'readonly',
19
+ ...globals.browser,
24
20
  },
25
- }],
26
- 'import/no-unresolved': [2, { ignore: ['#', '@sitevision/api/server', '@sitevision/api/common', '@sitevision/api/client', 'svelte/'] }],
27
- 'import/prefer-default-export': 0,
28
- 'object-curly-newline': ['error', {
29
- ObjectExpression: { minProperties: 8, multiline: true, consistent: true },
30
- ObjectPattern: { minProperties: 8, multiline: true, consistent: true },
31
- ImportDeclaration: { minProperties: 8, multiline: true, consistent: true },
32
- ExportDeclaration: { minProperties: 8, multiline: true, consistent: true },
33
- }],
34
- 'no-console': [1, { allow: ['error'] }],
35
- 'no-restricted-imports': restrictedImports,
36
- 'max-len': ['error', 100, 2, {
37
- ignoreUrls: true,
38
- ignoreComments: true,
39
- ignoreRegExpLiterals: true,
40
- ignoreStrings: true,
41
- ignoreTemplateLiterals: true,
42
- }],
43
- },
44
- settings: {
45
- svelte: {
21
+ },
22
+ ignores: ['dist', 'node_modules'],
23
+ plugins: { import: importPlugin },
24
+ rules: jsRules,
25
+ settings: {
26
+ svelte: {
46
27
  // Ignore max-len in template and style, still works for script tags.
47
- ignoreWarnings: [
48
- 'max-len',
49
- ],
28
+ ignoreWarnings: [
29
+ 'max-len',
30
+ ],
31
+ },
50
32
  },
51
33
  },
52
- overrides: hasSvelte ? [{
53
- files: ['*.svelte'],
54
- extends: ['plugin:svelte/recommended', 'plugin:svelte/prettier']
55
- .concat(hasPrettier ? ['prettier'] : []),
34
+ ...eslintPluginSvelte.configs['flat/recommended'],
35
+ ...eslintPluginSvelte.configs['flat/prettier'],
36
+ {
37
+ name: 'soleil/svelte',
38
+ files: ['**/*.svelte'],
56
39
  rules: {
57
- // Turn off rules not applicable for Svelte
58
- 'import/no-mutable-exports': 0,
59
- 'import/no-named-as-default': 0,
60
- 'import/no-named-as-default-member': 0,
61
- 'import/named': 0,
62
- 'import/namespace': 0,
63
- 'import/default': 0,
64
- 'import/no-cycle': 0,
65
- 'import/no-unused-modules': 0,
66
- 'import/no-deprecated': 0,
67
- 'no-multiple-empty-lines': 0,
68
- 'no-label-var': 0,
69
- 'no-undef-init': 0,
70
- 'no-return-assign': 0,
71
- 'operator-linebreak': 'off',
72
- 'object-curly-newline': 'off',
73
- // Security Vulnerability
74
- 'svelte/no-at-html-tags': 'warn',
75
- // Possible Errors
76
- 'svelte/infinite-reactive-loop': 'error',
77
- 'svelte/no-dupe-else-if-blocks': 'error',
78
- 'svelte/no-dupe-on-directives': 'error',
79
- 'svelte/no-reactive-reassign': 'error',
80
- 'svelte/no-store-async': 'error',
81
- 'svelte/require-store-reactive-access': 'error',
82
- 'svelte/valid-compile': 0,
83
- // Best Practices
84
- 'svelte/no-at-debug-tags': 'warn',
85
- 'svelte/no-immutable-reactive-statements': 'warn',
86
- 'svelte/no-reactive-functions': 'warn',
87
- 'svelte/no-reactive-literals': 'warn',
88
- 'svelte/no-useless-mustaches': 'warn',
89
- 'svelte/no-unused-svelte-ignore': 0,
90
- // Stylistic
91
- 'svelte/no-extra-reactive-curlies': 'warn',
92
- 'svelte/prefer-style-directive': 'warn',
93
- 'svelte/sort-attributes': 'warn',
94
- 'svelte/spaced-html-comment': 'warn',
95
- // Extension Rules
96
- 'svelte/no-trailing-spaces': 'error',
97
- // Same value as airbnb-base.
98
- 'max-len': ['error', 100, 2, {
99
- ignoreUrls: true,
100
- ignoreComments: true,
101
- ignoreRegExpLiterals: true,
102
- ignoreStrings: true,
103
- ignoreTemplateLiterals: true,
104
- }],
105
- // Do not enforce const because of reactivity for runes in Svelte 5.
106
- 'prefer-const': 0,
40
+ ...svelteRules,
41
+ ...eslintConfigPrettier.rules,
107
42
  },
108
43
  }, {
109
- files: ['svelte.config.js'],
110
- rules: {
111
- 'import/no-extraneous-dependencies': 0,
44
+ name: 'soleil/svelte.js',
45
+ files: ['**/*.svelte.js', '**/*.svelte.ts'],
46
+ languageOptions: {
47
+ ecmaVersion: 'latest',
48
+ sourceType: 'module',
49
+ globals: {
50
+ $state: 'readonly',
51
+ $derived: 'readonly',
52
+ $effect: 'readonly',
53
+ $inspect: 'readonly',
54
+ },
112
55
  },
113
- },
114
- {
115
- files: ['*.svelte.js, *.svelte.ts'],
116
56
  rules: {
117
57
  // Do not enforce const because of reactivity for runes in Svelte 5.
118
58
  'prefer-const': 0,
119
59
  },
120
- }] : [],
121
- };
60
+ },
61
+ ];
package/node-config.js ADDED
@@ -0,0 +1,9 @@
1
+ import config from './index.js';
2
+
3
+ export default [...config, {
4
+ rules: {
5
+ 'import/extensions': ['error', 'ignorePackages', {
6
+ js: 'always',
7
+ }],
8
+ },
9
+ }];
package/package.json CHANGED
@@ -1,24 +1,31 @@
1
1
  {
2
2
  "name": "@soleil-se/eslint-config",
3
- "version": "5.3.2",
3
+ "version": "6.0.0",
4
4
  "description": "ESLint konfiguration för Sitevision utveckling",
5
5
  "author": "Soleil AB",
6
6
  "license": "UNLICENSED",
7
7
  "private": false,
8
8
  "homepage": "https://docs.soleil.se/packages/@soleil-se/eslint-config/",
9
+ "type": "module",
9
10
  "bin": "./bin/index.js",
11
+ "main": "./index.js",
12
+ "exports": {
13
+ ".": "./index.js",
14
+ "./prettier": "./prettier-config.js",
15
+ "./script-module": "./script-module-config.js",
16
+ "./node": "./node-config.js"
17
+ },
18
+ "dependencies": {
19
+ "eslint-config-prettier": "^10.0.1",
20
+ "eslint-plugin-import": "^2.31.0",
21
+ "eslint-plugin-svelte": "^2.46.1",
22
+ "globals": "^15.14.0"
23
+ },
10
24
  "devDependencies": {
11
- "eslint": "^8.57.0",
12
- "eslint-config-airbnb-base": "^15.0.0",
13
- "eslint-plugin-import": "^2.29.1",
14
- "eslint-plugin-svelte": "^2.39.0",
15
- "eslint-config-prettier": "^9.1.0",
16
- "svelte": "^4.2.17"
25
+ "eslint": "^9.18.0",
26
+ "svelte": "^5.17.4"
17
27
  },
18
28
  "peerDependencies": {
19
- "eslint": "^8.0.0",
20
- "eslint-config-airbnb-base": "^15.0.0",
21
- "eslint-plugin-import": "^2.25.0"
22
- },
23
- "dependencies": {}
29
+ "eslint": ">= 9"
30
+ }
24
31
  }
@@ -1,10 +1,10 @@
1
- module.exports = {
1
+ export default {
2
2
  printWidth: 100,
3
3
  tabWidth: 2,
4
4
  singleQuote: true,
5
5
  arrowParens: 'always',
6
6
  svelteStrictMode: false,
7
- trailingComma: 'es5',
7
+ trailingComma: 'all',
8
8
  svelteSortOrder: 'options-scripts-markup-styles',
9
9
  bracketSameLine: false,
10
10
  };