@ocavue/eslint-config 3.8.5 → 3.9.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.
@@ -1,4 +1,5 @@
1
- import type { Config } from './types.js';
1
+ import type { Config, Rules } from './types.js';
2
+ export declare const packageJsonRules: Rules;
2
3
  /**
3
4
  * Sort package.json keys
4
5
  */
@@ -1 +1 @@
1
- {"version":3,"file":"package-json.d.ts","sourceRoot":"","sources":["../src/package-json.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,YAAY,CAAA;AAExC;;GAEG;AACH,wBAAgB,WAAW,IAAI,MAAM,EAAE,CAuEtC"}
1
+ {"version":3,"file":"package-json.d.ts","sourceRoot":"","sources":["../src/package-json.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,YAAY,CAAA;AAG/C,eAAO,MAAM,gBAAgB,EAAE,KA6L9B,CAAA;AAED;;GAEG;AACH,wBAAgB,WAAW,IAAI,MAAM,EAAE,CAStC"}
@@ -1,77 +1,161 @@
1
1
  import pkgJson from 'eslint-plugin-package-json';
2
+ // @keep-sorted
3
+ export const packageJsonRules = {
4
+ // https://github.com/JoshuaKGoldberg/eslint-plugin-package-json/blob/v0.88.1/docs/rules/no-redundant-files.md
5
+ 'package-json/no-redundant-files': 'error',
6
+ // https://github.com/JoshuaKGoldberg/eslint-plugin-package-json/blob/v0.88.1/docs/rules/no-redundant-publishConfig.md
7
+ 'package-json/no-redundant-publishConfig': 'error',
8
+ // https://github.com/JoshuaKGoldberg/eslint-plugin-package-json/blob/v0.88.1/docs/rules/order-properties.md
9
+ 'package-json/order-properties': [
10
+ 'warn',
11
+ {
12
+ order: [
13
+ 'name',
14
+ 'displayName',
15
+ 'publisher',
16
+ 'type',
17
+ 'version',
18
+ 'private',
19
+ 'packageManager',
20
+ 'description',
21
+ 'author',
22
+ 'license',
23
+ 'funding',
24
+ 'homepage',
25
+ 'repository',
26
+ 'bugs',
27
+ 'contributes',
28
+ 'keywords',
29
+ 'categories',
30
+ 'sideEffects',
31
+ 'main',
32
+ 'module',
33
+ 'types',
34
+ 'style',
35
+ 'exports',
36
+ 'typesVersions',
37
+ 'bin',
38
+ 'icon',
39
+ 'files',
40
+ 'engines',
41
+ 'scripts',
42
+ 'dependencies',
43
+ 'peerDependencies',
44
+ 'peerDependenciesMeta',
45
+ 'optionalDependencies',
46
+ 'devDependencies',
47
+ 'publishConfig',
48
+ 'overrides',
49
+ 'resolutions',
50
+ ],
51
+ },
52
+ ],
53
+ // https://github.com/JoshuaKGoldberg/eslint-plugin-package-json/blob/v0.88.1/docs/rules/repository-shorthand.md
54
+ 'package-json/repository-shorthand': 'error',
55
+ // https://github.com/JoshuaKGoldberg/eslint-plugin-package-json/blob/v0.88.1/docs/rules/require-license.md
56
+ 'package-json/require-license': 'warn',
57
+ // https://github.com/JoshuaKGoldberg/eslint-plugin-package-json/blob/v0.88.1/docs/rules/require-name.md
58
+ 'package-json/require-name': 'warn',
59
+ // https://github.com/JoshuaKGoldberg/eslint-plugin-package-json/blob/v0.88.1/docs/rules/require-type.md
60
+ 'package-json/require-type': 'error',
61
+ // https://github.com/JoshuaKGoldberg/eslint-plugin-package-json/blob/v0.88.1/docs/rules/require-version.md
62
+ 'package-json/require-version': 'error',
63
+ // https://github.com/JoshuaKGoldberg/eslint-plugin-package-json/blob/v0.88.1/docs/rules/sort-collections.md
64
+ 'package-json/sort-collections': [
65
+ 'warn',
66
+ [
67
+ // Copied from the link below but remove "scripts" because we don't
68
+ // want to sort scripts
69
+ // https://github.com/JoshuaKGoldberg/eslint-plugin-package-json/blob/v0.88.1/src/rules/sort-collections.ts#L7
70
+ 'config',
71
+ 'dependencies',
72
+ 'devDependencies',
73
+ 'exports',
74
+ 'optionalDependencies',
75
+ 'overrides',
76
+ 'peerDependencies',
77
+ 'peerDependenciesMeta',
78
+ ],
79
+ ],
80
+ // https://github.com/JoshuaKGoldberg/eslint-plugin-package-json/blob/v0.88.1/docs/rules/specify-peers-locally.md
81
+ 'package-json/specify-peers-locally': 'error',
82
+ // https://github.com/JoshuaKGoldberg/eslint-plugin-package-json/blob/v0.88.1/docs/rules/unique-dependencies.md
83
+ 'package-json/unique-dependencies': 'error',
84
+ // https://github.com/JoshuaKGoldberg/eslint-plugin-package-json/blob/v0.88.1/docs/rules/valid-author.md
85
+ 'package-json/valid-author': 'error',
86
+ // https://github.com/JoshuaKGoldberg/eslint-plugin-package-json/blob/v0.88.1/docs/rules/valid-bin.md
87
+ 'package-json/valid-bin': 'error',
88
+ // https://github.com/JoshuaKGoldberg/eslint-plugin-package-json/blob/v0.88.1/docs/rules/valid-bundleDependencies.md
89
+ 'package-json/valid-bundleDependencies': 'error',
90
+ // https://github.com/JoshuaKGoldberg/eslint-plugin-package-json/blob/v0.88.1/docs/rules/valid-config.md
91
+ 'package-json/valid-config': 'error',
92
+ // https://github.com/JoshuaKGoldberg/eslint-plugin-package-json/blob/v0.88.1/docs/rules/valid-contributors.md
93
+ 'package-json/valid-contributors': 'error',
94
+ // https://github.com/JoshuaKGoldberg/eslint-plugin-package-json/blob/v0.88.1/docs/rules/valid-cpu.md
95
+ 'package-json/valid-cpu': 'error',
96
+ // https://github.com/JoshuaKGoldberg/eslint-plugin-package-json/blob/v0.88.1/docs/rules/valid-dependencies.md
97
+ 'package-json/valid-dependencies': 'error',
98
+ // https://github.com/JoshuaKGoldberg/eslint-plugin-package-json/blob/v0.88.1/docs/rules/valid-description.md
99
+ 'package-json/valid-description': 'error',
100
+ // https://github.com/JoshuaKGoldberg/eslint-plugin-package-json/blob/v0.88.1/docs/rules/valid-devDependencies.md
101
+ 'package-json/valid-devDependencies': 'error',
102
+ // https://github.com/JoshuaKGoldberg/eslint-plugin-package-json/blob/v0.88.1/docs/rules/valid-directories.md
103
+ 'package-json/valid-directories': 'error',
104
+ // https://github.com/JoshuaKGoldberg/eslint-plugin-package-json/blob/v0.88.1/docs/rules/valid-engines.md
105
+ 'package-json/valid-engines': 'error',
106
+ // https://github.com/JoshuaKGoldberg/eslint-plugin-package-json/blob/v0.88.1/docs/rules/valid-exports.md
107
+ 'package-json/valid-exports': 'error',
108
+ // https://github.com/JoshuaKGoldberg/eslint-plugin-package-json/blob/v0.88.1/docs/rules/valid-files.md
109
+ 'package-json/valid-files': 'error',
110
+ // https://github.com/JoshuaKGoldberg/eslint-plugin-package-json/blob/v0.88.1/docs/rules/valid-homepage.md
111
+ 'package-json/valid-homepage': 'error',
112
+ // https://github.com/JoshuaKGoldberg/eslint-plugin-package-json/blob/v0.88.1/docs/rules/valid-keywords.md
113
+ 'package-json/valid-keywords': 'error',
114
+ // https://github.com/JoshuaKGoldberg/eslint-plugin-package-json/blob/v0.88.1/docs/rules/valid-license.md
115
+ 'package-json/valid-license': 'error',
116
+ // https://github.com/JoshuaKGoldberg/eslint-plugin-package-json/blob/v0.88.1/docs/rules/valid-main.md
117
+ 'package-json/valid-main': 'error',
118
+ // https://github.com/JoshuaKGoldberg/eslint-plugin-package-json/blob/v0.88.1/docs/rules/valid-man.md
119
+ 'package-json/valid-man': 'error',
120
+ // https://github.com/JoshuaKGoldberg/eslint-plugin-package-json/blob/v0.88.1/docs/rules/valid-module.md
121
+ 'package-json/valid-module': 'error',
122
+ // https://github.com/JoshuaKGoldberg/eslint-plugin-package-json/blob/v0.88.1/docs/rules/valid-name.md
123
+ 'package-json/valid-name': 'error',
124
+ // https://github.com/JoshuaKGoldberg/eslint-plugin-package-json/blob/v0.88.1/docs/rules/valid-optionalDependencies.md
125
+ 'package-json/valid-optionalDependencies': 'error',
126
+ // https://github.com/JoshuaKGoldberg/eslint-plugin-package-json/blob/v0.88.1/docs/rules/valid-os.md
127
+ 'package-json/valid-os': 'error',
128
+ // https://github.com/JoshuaKGoldberg/eslint-plugin-package-json/blob/v0.88.1/docs/rules/valid-peerDependencies.md
129
+ 'package-json/valid-peerDependencies': 'error',
130
+ // https://github.com/JoshuaKGoldberg/eslint-plugin-package-json/blob/v0.88.1/docs/rules/valid-private.md
131
+ 'package-json/valid-private': 'error',
132
+ // https://github.com/JoshuaKGoldberg/eslint-plugin-package-json/blob/v0.88.1/docs/rules/valid-publishConfig.md
133
+ 'package-json/valid-publishConfig': 'error',
134
+ // https://github.com/JoshuaKGoldberg/eslint-plugin-package-json/blob/v0.88.1/docs/rules/valid-repository-directory.md
135
+ 'package-json/valid-repository-directory': 'error',
136
+ // https://github.com/JoshuaKGoldberg/eslint-plugin-package-json/blob/v0.88.1/docs/rules/valid-repository.md
137
+ 'package-json/valid-repository': 'error',
138
+ // https://github.com/JoshuaKGoldberg/eslint-plugin-package-json/blob/v0.88.1/docs/rules/valid-scripts.md
139
+ 'package-json/valid-scripts': 'error',
140
+ // https://github.com/JoshuaKGoldberg/eslint-plugin-package-json/blob/v0.88.1/docs/rules/valid-sideEffects.md
141
+ 'package-json/valid-sideEffects': 'error',
142
+ // https://github.com/JoshuaKGoldberg/eslint-plugin-package-json/blob/v0.88.1/docs/rules/valid-type.md
143
+ 'package-json/valid-type': 'error',
144
+ // https://github.com/JoshuaKGoldberg/eslint-plugin-package-json/blob/v0.88.1/docs/rules/valid-version.md
145
+ 'package-json/valid-version': 'error',
146
+ // https://github.com/JoshuaKGoldberg/eslint-plugin-package-json/blob/v0.88.1/docs/rules/valid-workspaces.md
147
+ 'package-json/valid-workspaces': 'error',
148
+ };
2
149
  /**
3
150
  * Sort package.json keys
4
151
  */
5
152
  export function packageJson() {
6
153
  const pkgJsonConfig = pkgJson.configs.recommended;
7
- const config = {
8
- ...pkgJsonConfig,
9
- rules: {
10
- ...pkgJsonConfig.rules,
11
- 'package-json/no-empty-fields': 'off',
12
- 'package-json/require-description': 'off',
13
- 'package-json/sort-collections': [
14
- 'warn',
15
- [
16
- // Copied from the link below but remove "scripts" because we don't
17
- // want to sort scripts
18
- // https://github.com/JoshuaKGoldberg/eslint-plugin-package-json/blob/v0.88.1/src/rules/sort-collections.ts#L7
19
- 'config',
20
- 'dependencies',
21
- 'devDependencies',
22
- 'exports',
23
- 'optionalDependencies',
24
- 'overrides',
25
- 'peerDependencies',
26
- 'peerDependenciesMeta',
27
- ],
28
- ],
29
- 'package-json/order-properties': [
30
- 'warn',
31
- {
32
- order: [
33
- 'name',
34
- 'displayName',
35
- 'publisher',
36
- 'type',
37
- 'version',
38
- 'private',
39
- 'packageManager',
40
- 'description',
41
- 'author',
42
- 'license',
43
- 'funding',
44
- 'homepage',
45
- 'repository',
46
- 'bugs',
47
- 'contributes',
48
- 'keywords',
49
- 'categories',
50
- 'sideEffects',
51
- 'main',
52
- 'module',
53
- 'types',
54
- 'style',
55
- 'exports',
56
- 'typesVersions',
57
- 'bin',
58
- 'icon',
59
- 'files',
60
- 'engines',
61
- 'scripts',
62
- 'dependencies',
63
- 'peerDependencies',
64
- 'peerDependenciesMeta',
65
- 'optionalDependencies',
66
- 'devDependencies',
67
- 'publishConfig',
68
- 'overrides',
69
- 'resolutions',
70
- ],
71
- },
72
- ],
154
+ return [
155
+ {
156
+ ...pkgJsonConfig,
157
+ rules: packageJsonRules,
73
158
  },
74
- };
75
- return [config];
159
+ ];
76
160
  }
77
161
  //# sourceMappingURL=package-json.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"package-json.js","sourceRoot":"","sources":["../src/package-json.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,MAAM,4BAA4B,CAAA;AAIhD;;GAEG;AACH,MAAM,UAAU,WAAW;IACzB,MAAM,aAAa,GAAW,OAAO,CAAC,OAAO,CAAC,WAAW,CAAA;IACzD,MAAM,MAAM,GAAW;QACrB,GAAG,aAAa;QAChB,KAAK,EAAE;YACL,GAAG,aAAa,CAAC,KAAK;YACtB,8BAA8B,EAAE,KAAK;YACrC,kCAAkC,EAAE,KAAK;YACzC,+BAA+B,EAAE;gBAC/B,MAAM;gBACN;oBACE,mEAAmE;oBACnE,uBAAuB;oBACvB,8GAA8G;oBAC9G,QAAQ;oBACR,cAAc;oBACd,iBAAiB;oBACjB,SAAS;oBACT,sBAAsB;oBACtB,WAAW;oBACX,kBAAkB;oBAClB,sBAAsB;iBACvB;aACF;YACD,+BAA+B,EAAE;gBAC/B,MAAM;gBACN;oBACE,KAAK,EAAE;wBACL,MAAM;wBACN,aAAa;wBACb,WAAW;wBACX,MAAM;wBACN,SAAS;wBACT,SAAS;wBACT,gBAAgB;wBAChB,aAAa;wBACb,QAAQ;wBACR,SAAS;wBACT,SAAS;wBACT,UAAU;wBACV,YAAY;wBACZ,MAAM;wBACN,aAAa;wBACb,UAAU;wBACV,YAAY;wBACZ,aAAa;wBACb,MAAM;wBACN,QAAQ;wBACR,OAAO;wBACP,OAAO;wBACP,SAAS;wBACT,eAAe;wBACf,KAAK;wBACL,MAAM;wBACN,OAAO;wBACP,SAAS;wBACT,SAAS;wBACT,cAAc;wBACd,kBAAkB;wBAClB,sBAAsB;wBACtB,sBAAsB;wBACtB,iBAAiB;wBACjB,eAAe;wBACf,WAAW;wBACX,aAAa;qBACd;iBACF;aACF;SACF;KACF,CAAA;IACD,OAAO,CAAC,MAAM,CAAC,CAAA;AACjB,CAAC"}
1
+ {"version":3,"file":"package-json.js","sourceRoot":"","sources":["../src/package-json.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=package-json.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"package-json.test.d.ts","sourceRoot":"","sources":["../src/package-json.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,24 @@
1
+ import pkgJson from 'eslint-plugin-package-json';
2
+ import { test } from 'vitest';
3
+ import { packageJsonRules } from "./package-json.js";
4
+ import { checkRules } from "./test-utils.js";
5
+ test('package-json rules should match recommended rules', () => {
6
+ const plugin = pkgJson.configs.recommended.plugins['package-json'];
7
+ const recommendedRules = pkgJson.configs?.recommended?.rules || {};
8
+ checkRules({
9
+ plugin,
10
+ currentRules: packageJsonRules,
11
+ recommendedRules,
12
+ disabledRules: [
13
+ // https://github.com/JoshuaKGoldberg/eslint-plugin-package-json/blob/v0.88.1/docs/rules/no-empty-fields.md
14
+ 'package-json/no-empty-fields',
15
+ // https://github.com/JoshuaKGoldberg/eslint-plugin-package-json/blob/v0.88.1/docs/rules/require-description.md
16
+ 'package-json/require-description',
17
+ ],
18
+ enabledRules: [
19
+ // https://github.com/JoshuaKGoldberg/eslint-plugin-package-json/blob/v0.88.1/docs/rules/order-properties.md
20
+ 'package-json/order-properties',
21
+ ],
22
+ });
23
+ });
24
+ //# sourceMappingURL=package-json.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"package-json.test.js","sourceRoot":"","sources":["../src/package-json.test.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,MAAM,4BAA4B,CAAA;AAChD,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAA;AAE7B,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAA;AACpD,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAG5C,IAAI,CAAC,mDAAmD,EAAE,GAAG,EAAE;IAC7D,MAAM,MAAM,GAAW,OAAO,CAAC,OAAO,CAAC,WAAW,CAAC,OAAO,CAAC,cAAc,CAAC,CAAA;IAC1E,MAAM,gBAAgB,GAAU,OAAO,CAAC,OAAO,EAAE,WAAW,EAAE,KAAK,IAAI,EAAE,CAAA;IAEzE,UAAU,CAAC;QACT,MAAM;QACN,YAAY,EAAE,gBAAgB;QAC9B,gBAAgB;QAChB,aAAa,EAAE;YACb,2GAA2G;YAC3G,8BAA8B;YAE9B,+GAA+G;YAC/G,kCAAkC;SACnC;QACD,YAAY,EAAE;YACZ,4GAA4G;YAC5G,+BAA+B;SAChC;KACF,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"react.d.ts","sourceRoot":"","sources":["../src/react.ts"],"names":[],"mappings":"AAGA,OAAO,EAAuB,KAAK,YAAY,EAAE,MAAM,cAAc,CAAA;AACrE,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,YAAY,CAAA;AAExC,wBAAgB,KAAK,CAAC,OAAO,CAAC,EAAE,YAAY,GAAG,MAAM,EAAE,CA8CtD"}
1
+ {"version":3,"file":"react.d.ts","sourceRoot":"","sources":["../src/react.ts"],"names":[],"mappings":"AAGA,OAAO,EAAuB,KAAK,YAAY,EAAE,MAAM,cAAc,CAAA;AACrE,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,YAAY,CAAA;AAExC,wBAAgB,KAAK,CAAC,OAAO,CAAC,EAAE,YAAY,GAAG,MAAM,EAAE,CA0DtD"}
package/dist/react.js CHANGED
@@ -21,10 +21,18 @@ export function react(options) {
21
21
  },
22
22
  rules: {
23
23
  ...reactConfig.rules,
24
- '@eslint-react/dom/no-flush-sync': 'off',
25
24
  '@eslint-react/web-api/no-leaked-event-listener': 'off',
26
- '@eslint-react/no-array-index-key': 'off',
27
25
  '@eslint-react/naming-convention/context-name': 'off',
26
+ // I know these patterns are dangerous, but they are useful in some cases.
27
+ '@eslint-react/no-children-map': 'off',
28
+ '@eslint-react/no-clone-element': 'off',
29
+ '@eslint-react/no-dangerously-set-innerhtml': 'off',
30
+ '@eslint-react/dom/no-flush-sync': 'off',
31
+ '@eslint-react/no-array-index-key': 'off',
32
+ // See https://github.com/Rel1cx/eslint-react/issues/1381
33
+ '@eslint-react/jsx-key-before-spread': 'off',
34
+ // https://github.com/Rel1cx/eslint-react/pull/1380
35
+ '@eslint-react/naming-convention/ref-name': 'off',
28
36
  },
29
37
  },
30
38
  {
package/dist/react.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"react.js","sourceRoot":"","sources":["../src/react.ts"],"names":[],"mappings":"AAAA,OAAO,WAAW,MAAM,6BAA6B,CAAA;AACrD,OAAO,gBAAgB,MAAM,2BAA2B,CAAA;AAExD,OAAO,EAAE,mBAAmB,EAAqB,MAAM,cAAc,CAAA;AAGrE,MAAM,UAAU,KAAK,CAAC,OAAsB;IAC1C,MAAM,EAAE,KAAK,EAAE,aAAa,EAAE,OAAO,EAAE,GAAG,mBAAmB,CAAC,OAAO,CAAC,CAAA;IAEtE,MAAM,WAAW,GAAW,WAAW,CAAC,OAAO,CAAC,wBAAwB,CAAC,CAAA;IAEzE,MAAM,2BAA2B,GAC/B,gBAAgB,CAAC,OAAO,CAAC,IAAI,CAAC,aAAa,CAAC,CAAA;IAC9C,MAAM,mCAAmC,GACvC,gBAAgB,CAAC,OAAO,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAA;IACrD,MAAM,gBAAgB,GAAW,aAAa;QAC5C,CAAC,CAAC,mCAAmC;QACrC,CAAC,CAAC,2BAA2B,CAAA;IAE/B,MAAM,OAAO,GAAa;QACxB;YACE,GAAG,WAAW;YACd,IAAI,EAAE,OAAO;YACb,KAAK,EAAE,KAAK;YACZ,QAAQ,EAAE;gBACR,SAAS,EAAE;oBACT,OAAO,EAAE,OAAO;iBACjB;aACF;YACD,KAAK,EAAE;gBACL,GAAG,WAAW,CAAC,KAAK;gBACpB,iCAAiC,EAAE,KAAK;gBACxC,gDAAgD,EAAE,KAAK;gBACvD,kCAAkC,EAAE,KAAK;gBACzC,8CAA8C,EAAE,KAAK;aACtD;SACF;QAED;YACE,GAAG,gBAAgB;YACnB,IAAI,EAAE,aAAa;YACnB,KAAK,EAAE,KAAK;YACZ,KAAK,EAAE;gBACL,GAAG,gBAAgB,CAAC,KAAK;gBACzB,8EAA8E;gBAC9E,6CAA6C;gBAC7C,kBAAkB,EAAE,KAAK;aAC1B;SACF;KACF,CAAA;IAED,OAAO,OAAO,CAAA;AAChB,CAAC"}
1
+ {"version":3,"file":"react.js","sourceRoot":"","sources":["../src/react.ts"],"names":[],"mappings":"AAAA,OAAO,WAAW,MAAM,6BAA6B,CAAA;AACrD,OAAO,gBAAgB,MAAM,2BAA2B,CAAA;AAExD,OAAO,EAAE,mBAAmB,EAAqB,MAAM,cAAc,CAAA;AAGrE,MAAM,UAAU,KAAK,CAAC,OAAsB;IAC1C,MAAM,EAAE,KAAK,EAAE,aAAa,EAAE,OAAO,EAAE,GAAG,mBAAmB,CAAC,OAAO,CAAC,CAAA;IAEtE,MAAM,WAAW,GAAW,WAAW,CAAC,OAAO,CAAC,wBAAwB,CAAC,CAAA;IAEzE,MAAM,2BAA2B,GAC/B,gBAAgB,CAAC,OAAO,CAAC,IAAI,CAAC,aAAa,CAAC,CAAA;IAC9C,MAAM,mCAAmC,GACvC,gBAAgB,CAAC,OAAO,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAA;IACrD,MAAM,gBAAgB,GAAW,aAAa;QAC5C,CAAC,CAAC,mCAAmC;QACrC,CAAC,CAAC,2BAA2B,CAAA;IAE/B,MAAM,OAAO,GAAa;QACxB;YACE,GAAG,WAAW;YACd,IAAI,EAAE,OAAO;YACb,KAAK,EAAE,KAAK;YACZ,QAAQ,EAAE;gBACR,SAAS,EAAE;oBACT,OAAO,EAAE,OAAO;iBACjB;aACF;YACD,KAAK,EAAE;gBACL,GAAG,WAAW,CAAC,KAAK;gBAEpB,gDAAgD,EAAE,KAAK;gBACvD,8CAA8C,EAAE,KAAK;gBAErD,0EAA0E;gBAC1E,+BAA+B,EAAE,KAAK;gBACtC,gCAAgC,EAAE,KAAK;gBACvC,4CAA4C,EAAE,KAAK;gBACnD,iCAAiC,EAAE,KAAK;gBACxC,kCAAkC,EAAE,KAAK;gBAEzC,yDAAyD;gBACzD,qCAAqC,EAAE,KAAK;gBAE5C,mDAAmD;gBACnD,0CAA0C,EAAE,KAAK;aAClD;SACF;QAED;YACE,GAAG,gBAAgB;YACnB,IAAI,EAAE,aAAa;YACnB,KAAK,EAAE,KAAK;YACZ,KAAK,EAAE;gBACL,GAAG,gBAAgB,CAAC,KAAK;gBACzB,8EAA8E;gBAC9E,6CAA6C;gBAC7C,kBAAkB,EAAE,KAAK;aAC1B;SACF;KACF,CAAA;IAED,OAAO,OAAO,CAAA;AAChB,CAAC"}
@@ -0,0 +1,20 @@
1
+ import type { Plugin, Rules } from './types.ts';
2
+ export declare function collectEnabledRuleNames(rules: Partial<Rules>): string[];
3
+ export declare function getRuleLink(plugin: Plugin, ruleName: string): string | undefined;
4
+ /**
5
+ * Check that all rule differences between recommended and current configs are explicitly declared.
6
+ *
7
+ * This function ensures that:
8
+ * 1. All recommended rules are either used or explicitly disabled with a reason
9
+ * 2. All extra enabled rules are explicitly declared with a reason
10
+ *
11
+ * When differences are found, detailed error messages with documentation links are shown.
12
+ */
13
+ export declare function checkRules(options: {
14
+ plugin: Plugin;
15
+ currentRules: Rules;
16
+ recommendedRules: Rules;
17
+ disabledRules: string[];
18
+ enabledRules: string[];
19
+ }): void;
20
+ //# sourceMappingURL=test-utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"test-utils.d.ts","sourceRoot":"","sources":["../src/test-utils.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,YAAY,CAAA;AAE/C,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,OAAO,CAAC,KAAK,CAAC,GAAG,MAAM,EAAE,CAYvE;AAED,wBAAgB,WAAW,CACzB,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,GACf,MAAM,GAAG,SAAS,CAcpB;AA8BD;;;;;;;;GAQG;AACH,wBAAgB,UAAU,CAAC,OAAO,EAAE;IAClC,MAAM,EAAE,MAAM,CAAA;IACd,YAAY,EAAE,KAAK,CAAA;IACnB,gBAAgB,EAAE,KAAK,CAAA;IACvB,aAAa,EAAE,MAAM,EAAE,CAAA;IACvB,YAAY,EAAE,MAAM,EAAE,CAAA;CACvB,GAAG,IAAI,CA6EP"}
@@ -0,0 +1,108 @@
1
+ import { expect } from 'vitest';
2
+ export function collectEnabledRuleNames(rules) {
3
+ const enabledRuleNames = [];
4
+ for (const [ruleName, ruleConfig] of Object.entries(rules)) {
5
+ if (ruleConfig == null)
6
+ continue;
7
+ if (ruleConfig === 'off' || ruleConfig === 0)
8
+ continue;
9
+ if (Array.isArray(ruleConfig)) {
10
+ const severity = ruleConfig[0];
11
+ if (severity === 'off' || severity === 0)
12
+ continue;
13
+ }
14
+ enabledRuleNames.push(ruleName);
15
+ }
16
+ return enabledRuleNames;
17
+ }
18
+ export function getRuleLink(plugin, ruleName) {
19
+ const ruleNames = [ruleName];
20
+ if (ruleName.includes('/')) {
21
+ ruleNames.push(ruleName.split('/', 2)[1]);
22
+ }
23
+ for (const name of ruleNames) {
24
+ const link = plugin.rules?.[name]?.meta?.docs?.url;
25
+ if (link) {
26
+ return link;
27
+ }
28
+ }
29
+ return undefined;
30
+ }
31
+ /**
32
+ * Format a rule violation message with documentation link
33
+ */
34
+ function formatRuleViolation(type, ruleName, details) {
35
+ const separator = '━'.repeat(60);
36
+ let output = `${separator}\n`;
37
+ output += `❌ ${type}: ${ruleName}\n\n`;
38
+ output += ` ${details.message}\n`;
39
+ if (details.link) {
40
+ output += `\n 📖 Documentation: ${details.link}\n`;
41
+ }
42
+ output += `\n 💡 Fix: ${details.fix}\n`;
43
+ output += separator;
44
+ return output;
45
+ }
46
+ /**
47
+ * Check that all rule differences between recommended and current configs are explicitly declared.
48
+ *
49
+ * This function ensures that:
50
+ * 1. All recommended rules are either used or explicitly disabled with a reason
51
+ * 2. All extra enabled rules are explicitly declared with a reason
52
+ *
53
+ * When differences are found, detailed error messages with documentation links are shown.
54
+ */
55
+ export function checkRules(options) {
56
+ const { plugin, currentRules, recommendedRules, disabledRules, enabledRules, } = options;
57
+ const violations = [];
58
+ const normalizedDisabled = new Set(disabledRules);
59
+ const normalizedEnabled = new Set(enabledRules);
60
+ const recommendedRuleNames = collectEnabledRuleNames(recommendedRules);
61
+ const currentRuleNames = collectEnabledRuleNames(currentRules);
62
+ const recommendedSet = new Set(recommendedRuleNames);
63
+ // 1. Check missing recommended rules (should be in disabledRules)
64
+ for (const ruleName of recommendedRuleNames) {
65
+ if (!(ruleName in currentRules) && !normalizedDisabled.has(ruleName)) {
66
+ const link = getRuleLink(plugin, ruleName);
67
+ violations.push(formatRuleViolation('Missing Disabled Declaration', ruleName, {
68
+ message: 'This rule is recommended but not in your config.',
69
+ fix: `Add to disabledRules array:\n '${ruleName}',`,
70
+ link,
71
+ }));
72
+ }
73
+ }
74
+ // 2. Check unnecessary disabled rules (not actually recommended)
75
+ for (const ruleName of disabledRules) {
76
+ if (!recommendedSet.has(ruleName)) {
77
+ violations.push(formatRuleViolation('Unnecessary Disabled Declaration', ruleName, {
78
+ message: 'This rule is not recommended, no need to disable it.',
79
+ fix: `Remove '${ruleName}' from disabledRules array`,
80
+ }));
81
+ }
82
+ }
83
+ // 3. Check undeclared extra rules (should be in enabledRules)
84
+ for (const ruleName of currentRuleNames) {
85
+ if (!recommendedSet.has(ruleName) && !normalizedEnabled.has(ruleName)) {
86
+ const link = getRuleLink(plugin, ruleName);
87
+ violations.push(formatRuleViolation('Undeclared Extra Rule', ruleName, {
88
+ message: 'This rule is not recommended but you enabled it.',
89
+ fix: `Add to enabledRules array:\n '${ruleName}',`,
90
+ link,
91
+ }));
92
+ }
93
+ }
94
+ // 4. Check unnecessary enabled rules (actually recommended)
95
+ for (const ruleName of enabledRules) {
96
+ if (recommendedSet.has(ruleName)) {
97
+ violations.push(formatRuleViolation('Unnecessary Enabled Declaration', ruleName, {
98
+ message: 'This rule is already recommended, no need to declare as enabled.',
99
+ fix: `Remove '${ruleName}' from enabledRules array`,
100
+ }));
101
+ }
102
+ }
103
+ // Report all violations
104
+ if (violations.length > 0) {
105
+ expect.fail('\n\n' + violations.join('\n\n'));
106
+ }
107
+ }
108
+ //# sourceMappingURL=test-utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"test-utils.js","sourceRoot":"","sources":["../src/test-utils.ts"],"names":[],"mappings":"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"}
package/dist/types.d.ts CHANGED
@@ -1,4 +1,5 @@
1
- import type { Linter } from 'eslint';
1
+ import type { Linter, ESLint } from 'eslint';
2
2
  export type Config = Linter.Config;
3
3
  export type Rules = Partial<Linter.RulesRecord>;
4
+ export type Plugin = ESLint.Plugin;
4
5
  //# sourceMappingURL=types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA;AAEpC,MAAM,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAA;AAElC,MAAM,MAAM,KAAK,GAAG,OAAO,CAAC,MAAM,CAAC,WAAW,CAAC,CAAA"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA;AAE5C,MAAM,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAA;AAElC,MAAM,MAAM,KAAK,GAAG,OAAO,CAAC,MAAM,CAAC,WAAW,CAAC,CAAA;AAE/C,MAAM,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAA"}
package/dist/unicorn.d.ts CHANGED
@@ -1,3 +1,4 @@
1
1
  import type { Linter } from 'eslint';
2
+ export declare const unicornRules: Linter.RulesRecord;
2
3
  export declare function unicorn(): Linter.Config[];
3
4
  //# sourceMappingURL=unicorn.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"unicorn.d.ts","sourceRoot":"","sources":["../src/unicorn.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA;AAGpC,wBAAgB,OAAO,IAAI,MAAM,CAAC,MAAM,EAAE,CA4HzC"}
1
+ {"version":3,"file":"unicorn.d.ts","sourceRoot":"","sources":["../src/unicorn.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA;AAIpC,eAAO,MAAM,YAAY,EAAE,MAAM,CAAC,WAsHjC,CAAA;AAED,wBAAgB,OAAO,IAAI,MAAM,CAAC,MAAM,EAAE,CAUzC"}
package/dist/unicorn.js CHANGED
@@ -1,4 +1,86 @@
1
1
  import plugin from 'eslint-plugin-unicorn';
2
+ // @keep-sorted
3
+ export const unicornRules = {
4
+ // Improve regexes
5
+ 'unicorn/better-regex': 'error',
6
+ // Pass error message when throwing errors
7
+ 'unicorn/error-message': 'error',
8
+ // Uppercase regex escapes
9
+ 'unicorn/escape-case': 'error',
10
+ // Enforce explicitly comparing the length or size property of a value
11
+ 'unicorn/explicit-length-check': 'error',
12
+ // Disallow eslint-disable comments without specific rule names
13
+ 'unicorn/no-abusive-eslint-disable': 'error',
14
+ // Prevent recursive getters/setters from calling themselves
15
+ 'unicorn/no-accessor-recursion': 'warn',
16
+ // Do not use a `for` loop that can be replaced with a `for-of` loop.
17
+ 'unicorn/no-for-loop': 'error',
18
+ // Prefer Unicode escapes over hexadecimal escapes
19
+ 'unicorn/no-hex-escape': 'warn',
20
+ // Array.isArray instead of instanceof etc
21
+ 'unicorn/no-instanceof-builtins': 'error',
22
+ // Avoid passing expressions to removeEventListener
23
+ 'unicorn/no-invalid-remove-event-listener': 'warn',
24
+ // Disallow named usage of default import/export
25
+ 'unicorn/no-named-default': 'warn',
26
+ // Disallow negating the left side in equality checks
27
+ 'unicorn/no-negation-in-equality-check': 'warn',
28
+ // Prevent deprecated `new Buffer()`
29
+ 'unicorn/no-new-buffer': 'error',
30
+ // Keep regex literals safe!
31
+ 'unicorn/no-unsafe-regex': 'off',
32
+ // Disallow spreading when direct usage works
33
+ 'unicorn/no-useless-spread': 'warn',
34
+ // Lowercase number formatting for octal, hex, binary (0x1'error' instead of 0X1'error')
35
+ 'unicorn/number-literal-case': 'error',
36
+ // Prefer `.addEventListener()` and `.removeEventListener()` over `on`-functions.
37
+ 'unicorn/prefer-add-event-listener': 'error',
38
+ // Prefer `.find(…)` and `.findLast(…)` over the first or last element from
39
+ 'unicorn/prefer-array-find': 'error',
40
+ // Prefer `.flatMap(…)` over `.map(…).flat()`.
41
+ 'unicorn/prefer-array-flat-map': 'error',
42
+ // Prefer Array#flat over manual flattening
43
+ 'unicorn/prefer-array-flat': 'warn',
44
+ // Prefer `.flatMap(…)` over `.map(…).flat()`
45
+ 'unicorn/prefer-array-index-of': 'error',
46
+ // Prefer `.some(…)` over `.filter(…).length` check
47
+ 'unicorn/prefer-array-some': 'error',
48
+ // Prefer BigInt literals over the constructor
49
+ 'unicorn/prefer-bigint-literals': 'warn',
50
+ // Prefer Date.now() to get the number of milliseconds since the Unix Epoch
51
+ // https://github.com/sindresorhus/eslint-plugin-unicorn/blob/v62.0.0/docs/rules/prefer-date-now.md
52
+ 'unicorn/prefer-date-now': 'warn',
53
+ // Prefer `export…from` when re-exporting
54
+ 'unicorn/prefer-export-from': ['warn', { ignoreUsedVariables: true }],
55
+ // Prefer `import.meta.dirname` over `path.dirname(fileURLToPath(import.meta.url))`
56
+ 'unicorn/prefer-import-meta-properties': 'warn',
57
+ // includes over indexOf when checking for existence
58
+ 'unicorn/prefer-includes': 'error',
59
+ // Prefer `KeyboardEvent#key` over `KeyboardEvent#keyCode`
60
+ 'unicorn/prefer-keyboard-event-key': 'error',
61
+ // Enforce the use of `Math.trunc` instead of bitwise operators.
62
+ 'unicorn/prefer-math-trunc': 'error',
63
+ // Prefer negative index over `.length - index` when possible
64
+ 'unicorn/prefer-negative-index': 'error',
65
+ // Prefer using the node: protocol
66
+ 'unicorn/prefer-node-protocol': 'error',
67
+ // Prefer `Number` static properties over global ones.
68
+ 'unicorn/prefer-number-properties': 'warn',
69
+ // Prefer `RegExp#test()` over `String#match()` and `RegExp#exec()`
70
+ 'unicorn/prefer-regexp-test': 'warn',
71
+ // Enforce combining multiple `Array#push()` into one call.
72
+ 'unicorn/prefer-single-call': 'warn',
73
+ // Prefer using the `String.raw` tag to avoid escaping `\`
74
+ 'unicorn/prefer-string-raw': 'warn',
75
+ // String methods startsWith/endsWith instead of more complicated stuff
76
+ 'unicorn/prefer-string-starts-ends-with': 'error',
77
+ // Prefer using `structuredClone` to create a deep clone
78
+ 'unicorn/prefer-structured-clone': 'warn',
79
+ // Enforce throwing type error when throwing error while checking typeof
80
+ 'unicorn/prefer-type-error': 'error',
81
+ // Use new when throwing error
82
+ 'unicorn/throw-new-error': 'error',
83
+ };
2
84
  export function unicorn() {
3
85
  return [
4
86
  {
@@ -6,84 +88,7 @@ export function unicorn() {
6
88
  plugins: {
7
89
  unicorn: plugin,
8
90
  },
9
- rules: {
10
- // Pass error message when throwing errors
11
- 'unicorn/error-message': 'error',
12
- // Uppercase regex escapes
13
- 'unicorn/escape-case': 'error',
14
- // Prevent recursive getters/setters from calling themselves
15
- 'unicorn/no-accessor-recursion': 'warn',
16
- // Array.isArray instead of instanceof etc
17
- 'unicorn/no-instanceof-builtins': 'error',
18
- // Prefer Unicode escapes over hexadecimal escapes
19
- 'unicorn/no-hex-escape': 'warn',
20
- // Prevent deprecated `new Buffer()`
21
- 'unicorn/no-new-buffer': 'error',
22
- // Avoid passing expressions to removeEventListener
23
- 'unicorn/no-invalid-remove-event-listener': 'warn',
24
- // Disallow named usage of default import/export
25
- 'unicorn/no-named-default': 'warn',
26
- // Disallow negating the left side in equality checks
27
- 'unicorn/no-negation-in-equality-check': 'warn',
28
- // Keep regex literals safe!
29
- 'unicorn/no-unsafe-regex': 'off',
30
- // Lowercase number formatting for octal, hex, binary (0x1'error' instead of 0X1'error')
31
- 'unicorn/number-literal-case': 'error',
32
- // Disallow spreading when direct usage works
33
- 'unicorn/no-useless-spread': 'warn',
34
- // includes over indexOf when checking for existence
35
- 'unicorn/prefer-includes': 'error',
36
- // String methods startsWith/endsWith instead of more complicated stuff
37
- 'unicorn/prefer-string-starts-ends-with': 'error',
38
- // Enforce throwing type error when throwing error while checking typeof
39
- 'unicorn/prefer-type-error': 'error',
40
- // Use new when throwing error
41
- 'unicorn/throw-new-error': 'error',
42
- // Prefer using the node: protocol
43
- 'unicorn/prefer-node-protocol': 'error',
44
- // Enforce explicitly comparing the length or size property of a value
45
- 'unicorn/explicit-length-check': 'error',
46
- // Prefer `.flatMap(…)` over `.map(…).flat()`
47
- 'unicorn/prefer-array-index-of': 'error',
48
- // Improve regexes
49
- 'unicorn/better-regex': 'error',
50
- // Enforce combining multiple `Array#push()` into one call.
51
- 'unicorn/prefer-single-call': 'warn',
52
- // Do not use a `for` loop that can be replaced with a `for-of` loop.
53
- 'unicorn/no-for-loop': 'error',
54
- // Disallow eslint-disable comments without specific rule names
55
- 'unicorn/no-abusive-eslint-disable': 'error',
56
- // Prefer `.addEventListener()` and `.removeEventListener()` over `on`-functions.
57
- 'unicorn/prefer-add-event-listener': 'error',
58
- // Prefer `.find(…)` and `.findLast(…)` over the first or last element from
59
- 'unicorn/prefer-array-find': 'error',
60
- // Prefer Array#flat over manual flattening
61
- 'unicorn/prefer-array-flat': 'warn',
62
- // Prefer `.flatMap(…)` over `.map(…).flat()`.
63
- 'unicorn/prefer-array-flat-map': 'error',
64
- // Prefer `.some(…)` over `.filter(…).length` check
65
- 'unicorn/prefer-array-some': 'error',
66
- // Prefer BigInt literals over the constructor
67
- 'unicorn/prefer-bigint-literals': 'warn',
68
- // Prefer `KeyboardEvent#key` over `KeyboardEvent#keyCode`
69
- 'unicorn/prefer-keyboard-event-key': 'error',
70
- // Enforce the use of `Math.trunc` instead of bitwise operators.
71
- 'unicorn/prefer-math-trunc': 'error',
72
- // Prefer negative index over `.length - index` when possible
73
- 'unicorn/prefer-negative-index': 'error',
74
- // Prefer `Number` static properties over global ones.
75
- 'unicorn/prefer-number-properties': 'warn',
76
- // Prefer `RegExp#test()` over `String#match()` and `RegExp#exec()`
77
- 'unicorn/prefer-regexp-test': 'warn',
78
- // Prefer using `structuredClone` to create a deep clone
79
- 'unicorn/prefer-structured-clone': 'warn',
80
- // Prefer using the `String.raw` tag to avoid escaping `\`
81
- 'unicorn/prefer-string-raw': 'warn',
82
- // Prefer `import.meta.dirname` over `path.dirname(fileURLToPath(import.meta.url))`
83
- 'unicorn/prefer-import-meta-properties': 'warn',
84
- // Prefer `export…from` when re-exporting
85
- 'unicorn/prefer-export-from': ['warn', { ignoreUsedVariables: true }],
86
- },
91
+ rules: unicornRules,
87
92
  },
88
93
  ];
89
94
  }
@@ -1 +1 @@
1
- {"version":3,"file":"unicorn.js","sourceRoot":"","sources":["../src/unicorn.ts"],"names":[],"mappings":"AACA,OAAO,MAAM,MAAM,uBAAuB,CAAA;AAE1C,MAAM,UAAU,OAAO;IACrB,OAAO;QACL;YACE,IAAI,EAAE,SAAS;YACf,OAAO,EAAE;gBACP,OAAO,EAAE,MAAM;aAChB;YACD,KAAK,EAAE;gBACL,0CAA0C;gBAC1C,uBAAuB,EAAE,OAAO;gBAEhC,0BAA0B;gBAC1B,qBAAqB,EAAE,OAAO;gBAE9B,4DAA4D;gBAC5D,+BAA+B,EAAE,MAAM;gBAEvC,0CAA0C;gBAC1C,gCAAgC,EAAE,OAAO;gBAEzC,kDAAkD;gBAClD,uBAAuB,EAAE,MAAM;gBAE/B,oCAAoC;gBACpC,uBAAuB,EAAE,OAAO;gBAEhC,mDAAmD;gBACnD,0CAA0C,EAAE,MAAM;gBAElD,gDAAgD;gBAChD,0BAA0B,EAAE,MAAM;gBAElC,qDAAqD;gBACrD,uCAAuC,EAAE,MAAM;gBAE/C,4BAA4B;gBAC5B,yBAAyB,EAAE,KAAK;gBAEhC,wFAAwF;gBACxF,6BAA6B,EAAE,OAAO;gBAEtC,6CAA6C;gBAC7C,2BAA2B,EAAE,MAAM;gBAEnC,oDAAoD;gBACpD,yBAAyB,EAAE,OAAO;gBAElC,uEAAuE;gBACvE,wCAAwC,EAAE,OAAO;gBAEjD,wEAAwE;gBACxE,2BAA2B,EAAE,OAAO;gBAEpC,8BAA8B;gBAC9B,yBAAyB,EAAE,OAAO;gBAElC,kCAAkC;gBAClC,8BAA8B,EAAE,OAAO;gBAEvC,sEAAsE;gBACtE,+BAA+B,EAAE,OAAO;gBAExC,6CAA6C;gBAC7C,+BAA+B,EAAE,OAAO;gBAExC,kBAAkB;gBAClB,sBAAsB,EAAE,OAAO;gBAE/B,2DAA2D;gBAC3D,4BAA4B,EAAE,MAAM;gBAEpC,qEAAqE;gBACrE,qBAAqB,EAAE,OAAO;gBAE9B,+DAA+D;gBAC/D,mCAAmC,EAAE,OAAO;gBAE5C,iFAAiF;gBACjF,mCAAmC,EAAE,OAAO;gBAE5C,2EAA2E;gBAC3E,2BAA2B,EAAE,OAAO;gBAEpC,2CAA2C;gBAC3C,2BAA2B,EAAE,MAAM;gBAEnC,8CAA8C;gBAC9C,+BAA+B,EAAE,OAAO;gBAExC,mDAAmD;gBACnD,2BAA2B,EAAE,OAAO;gBAEpC,8CAA8C;gBAC9C,gCAAgC,EAAE,MAAM;gBAExC,0DAA0D;gBAC1D,mCAAmC,EAAE,OAAO;gBAE5C,gEAAgE;gBAChE,2BAA2B,EAAE,OAAO;gBAEpC,6DAA6D;gBAC7D,+BAA+B,EAAE,OAAO;gBAExC,sDAAsD;gBACtD,kCAAkC,EAAE,MAAM;gBAE1C,mEAAmE;gBACnE,4BAA4B,EAAE,MAAM;gBAEpC,wDAAwD;gBACxD,iCAAiC,EAAE,MAAM;gBAEzC,0DAA0D;gBAC1D,2BAA2B,EAAE,MAAM;gBAEnC,mFAAmF;gBACnF,uCAAuC,EAAE,MAAM;gBAE/C,yCAAyC;gBACzC,4BAA4B,EAAE,CAAC,MAAM,EAAE,EAAE,mBAAmB,EAAE,IAAI,EAAE,CAAC;aACtE;SACF;KACF,CAAA;AACH,CAAC"}
1
+ {"version":3,"file":"unicorn.js","sourceRoot":"","sources":["../src/unicorn.ts"],"names":[],"mappings":"AACA,OAAO,MAAM,MAAM,uBAAuB,CAAA;AAE1C,eAAe;AACf,MAAM,CAAC,MAAM,YAAY,GAAuB;IAC9C,kBAAkB;IAClB,sBAAsB,EAAE,OAAO;IAE/B,0CAA0C;IAC1C,uBAAuB,EAAE,OAAO;IAEhC,0BAA0B;IAC1B,qBAAqB,EAAE,OAAO;IAE9B,sEAAsE;IACtE,+BAA+B,EAAE,OAAO;IAExC,+DAA+D;IAC/D,mCAAmC,EAAE,OAAO;IAE5C,4DAA4D;IAC5D,+BAA+B,EAAE,MAAM;IAEvC,qEAAqE;IACrE,qBAAqB,EAAE,OAAO;IAE9B,kDAAkD;IAClD,uBAAuB,EAAE,MAAM;IAE/B,0CAA0C;IAC1C,gCAAgC,EAAE,OAAO;IAEzC,mDAAmD;IACnD,0CAA0C,EAAE,MAAM;IAElD,gDAAgD;IAChD,0BAA0B,EAAE,MAAM;IAElC,qDAAqD;IACrD,uCAAuC,EAAE,MAAM;IAE/C,oCAAoC;IACpC,uBAAuB,EAAE,OAAO;IAEhC,4BAA4B;IAC5B,yBAAyB,EAAE,KAAK;IAEhC,6CAA6C;IAC7C,2BAA2B,EAAE,MAAM;IAEnC,wFAAwF;IACxF,6BAA6B,EAAE,OAAO;IAEtC,iFAAiF;IACjF,mCAAmC,EAAE,OAAO;IAE5C,2EAA2E;IAC3E,2BAA2B,EAAE,OAAO;IAEpC,8CAA8C;IAC9C,+BAA+B,EAAE,OAAO;IAExC,2CAA2C;IAC3C,2BAA2B,EAAE,MAAM;IAEnC,6CAA6C;IAC7C,+BAA+B,EAAE,OAAO;IAExC,mDAAmD;IACnD,2BAA2B,EAAE,OAAO;IAEpC,8CAA8C;IAC9C,gCAAgC,EAAE,MAAM;IAExC,2EAA2E;IAC3E,mGAAmG;IACnG,yBAAyB,EAAE,MAAM;IAEjC,yCAAyC;IACzC,4BAA4B,EAAE,CAAC,MAAM,EAAE,EAAE,mBAAmB,EAAE,IAAI,EAAE,CAAC;IAErE,mFAAmF;IACnF,uCAAuC,EAAE,MAAM;IAE/C,oDAAoD;IACpD,yBAAyB,EAAE,OAAO;IAElC,0DAA0D;IAC1D,mCAAmC,EAAE,OAAO;IAE5C,gEAAgE;IAChE,2BAA2B,EAAE,OAAO;IAEpC,6DAA6D;IAC7D,+BAA+B,EAAE,OAAO;IAExC,kCAAkC;IAClC,8BAA8B,EAAE,OAAO;IAEvC,sDAAsD;IACtD,kCAAkC,EAAE,MAAM;IAE1C,mEAAmE;IACnE,4BAA4B,EAAE,MAAM;IAEpC,2DAA2D;IAC3D,4BAA4B,EAAE,MAAM;IAEpC,0DAA0D;IAC1D,2BAA2B,EAAE,MAAM;IAEnC,uEAAuE;IACvE,wCAAwC,EAAE,OAAO;IAEjD,wDAAwD;IACxD,iCAAiC,EAAE,MAAM;IAEzC,wEAAwE;IACxE,2BAA2B,EAAE,OAAO;IAEpC,8BAA8B;IAC9B,yBAAyB,EAAE,OAAO;CACnC,CAAA;AAED,MAAM,UAAU,OAAO;IACrB,OAAO;QACL;YACE,IAAI,EAAE,SAAS;YACf,OAAO,EAAE;gBACP,OAAO,EAAE,MAAM;aAChB;YACD,KAAK,EAAE,YAAY;SACpB;KACF,CAAA;AACH,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=unicorn.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"unicorn.test.d.ts","sourceRoot":"","sources":["../src/unicorn.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,216 @@
1
+ import plugin from 'eslint-plugin-unicorn';
2
+ import { test } from 'vitest';
3
+ import { checkRules } from './test-utils.js';
4
+ import { unicornRules } from './unicorn.js';
5
+ test('Unicorn rules should match recommended rules', () => {
6
+ // @keep-sorted
7
+ const disabledRules = [
8
+ // https://github.com/sindresorhus/eslint-plugin-unicorn/blob/v62.0.0/docs/rules/catch-error-name.md
9
+ 'unicorn/catch-error-name',
10
+ // https://github.com/sindresorhus/eslint-plugin-unicorn/blob/v62.0.0/docs/rules/consistent-assert.md
11
+ 'unicorn/consistent-assert',
12
+ // https://github.com/sindresorhus/eslint-plugin-unicorn/blob/v62.0.0/docs/rules/consistent-date-clone.md
13
+ 'unicorn/consistent-date-clone',
14
+ // https://github.com/sindresorhus/eslint-plugin-unicorn/blob/v62.0.0/docs/rules/consistent-empty-array-spread.md
15
+ 'unicorn/consistent-empty-array-spread',
16
+ // https://github.com/sindresorhus/eslint-plugin-unicorn/blob/v62.0.0/docs/rules/consistent-existence-index-check.md
17
+ 'unicorn/consistent-existence-index-check',
18
+ // https://github.com/sindresorhus/eslint-plugin-unicorn/blob/v62.0.0/docs/rules/consistent-function-scoping.md
19
+ 'unicorn/consistent-function-scoping',
20
+ // https://github.com/sindresorhus/eslint-plugin-unicorn/blob/v62.0.0/docs/rules/empty-brace-spaces.md
21
+ 'unicorn/empty-brace-spaces',
22
+ // https://github.com/sindresorhus/eslint-plugin-unicorn/blob/v62.0.0/docs/rules/expiring-todo-comments.md
23
+ 'unicorn/expiring-todo-comments',
24
+ // https://github.com/sindresorhus/eslint-plugin-unicorn/blob/v62.0.0/docs/rules/filename-case.md
25
+ 'unicorn/filename-case',
26
+ // https://github.com/sindresorhus/eslint-plugin-unicorn/blob/v62.0.0/docs/rules/import-style.md
27
+ 'unicorn/import-style',
28
+ // https://github.com/sindresorhus/eslint-plugin-unicorn/blob/v62.0.0/docs/rules/new-for-builtins.md
29
+ 'unicorn/new-for-builtins',
30
+ // https://github.com/sindresorhus/eslint-plugin-unicorn/blob/v62.0.0/docs/rules/no-anonymous-default-export.md
31
+ 'unicorn/no-anonymous-default-export',
32
+ // https://github.com/sindresorhus/eslint-plugin-unicorn/blob/v62.0.0/docs/rules/no-array-callback-reference.md
33
+ 'unicorn/no-array-callback-reference',
34
+ // https://github.com/sindresorhus/eslint-plugin-unicorn/blob/v62.0.0/docs/rules/no-array-for-each.md
35
+ 'unicorn/no-array-for-each',
36
+ // https://github.com/sindresorhus/eslint-plugin-unicorn/blob/v62.0.0/docs/rules/no-array-method-this-argument.md
37
+ 'unicorn/no-array-method-this-argument',
38
+ // https://github.com/sindresorhus/eslint-plugin-unicorn/blob/v62.0.0/docs/rules/no-array-reduce.md
39
+ 'unicorn/no-array-reduce',
40
+ // https://github.com/sindresorhus/eslint-plugin-unicorn/blob/v62.0.0/docs/rules/no-array-reverse.md
41
+ 'unicorn/no-array-reverse',
42
+ // https://github.com/sindresorhus/eslint-plugin-unicorn/blob/v62.0.0/docs/rules/no-array-sort.md
43
+ 'unicorn/no-array-sort',
44
+ // https://github.com/sindresorhus/eslint-plugin-unicorn/blob/v62.0.0/docs/rules/no-await-expression-member.md
45
+ 'unicorn/no-await-expression-member',
46
+ // https://github.com/sindresorhus/eslint-plugin-unicorn/blob/v62.0.0/docs/rules/no-await-in-promise-methods.md
47
+ 'unicorn/no-await-in-promise-methods',
48
+ // https://github.com/sindresorhus/eslint-plugin-unicorn/blob/v62.0.0/docs/rules/no-console-spaces.md
49
+ 'unicorn/no-console-spaces',
50
+ // https://github.com/sindresorhus/eslint-plugin-unicorn/blob/v62.0.0/docs/rules/no-document-cookie.md
51
+ 'unicorn/no-document-cookie',
52
+ // https://github.com/sindresorhus/eslint-plugin-unicorn/blob/v62.0.0/docs/rules/no-empty-file.md
53
+ 'unicorn/no-empty-file',
54
+ // https://github.com/sindresorhus/eslint-plugin-unicorn/blob/v62.0.0/docs/rules/no-immediate-mutation.md
55
+ 'unicorn/no-immediate-mutation',
56
+ // https://github.com/sindresorhus/eslint-plugin-unicorn/blob/v62.0.0/docs/rules/no-invalid-fetch-options.md
57
+ 'unicorn/no-invalid-fetch-options',
58
+ // https://github.com/sindresorhus/eslint-plugin-unicorn/blob/v62.0.0/docs/rules/no-lonely-if.md
59
+ 'unicorn/no-lonely-if',
60
+ // https://github.com/sindresorhus/eslint-plugin-unicorn/blob/v62.0.0/docs/rules/no-magic-array-flat-depth.md
61
+ 'unicorn/no-magic-array-flat-depth',
62
+ // https://github.com/sindresorhus/eslint-plugin-unicorn/blob/v62.0.0/docs/rules/no-negated-condition.md
63
+ 'unicorn/no-negated-condition',
64
+ // https://github.com/sindresorhus/eslint-plugin-unicorn/blob/v62.0.0/docs/rules/no-nested-ternary.md
65
+ 'unicorn/no-nested-ternary',
66
+ // https://github.com/sindresorhus/eslint-plugin-unicorn/blob/v62.0.0/docs/rules/no-new-array.md
67
+ 'unicorn/no-new-array',
68
+ // https://github.com/sindresorhus/eslint-plugin-unicorn/blob/v62.0.0/docs/rules/no-null.md
69
+ 'unicorn/no-null',
70
+ // https://github.com/sindresorhus/eslint-plugin-unicorn/blob/v62.0.0/docs/rules/no-object-as-default-parameter.md
71
+ 'unicorn/no-object-as-default-parameter',
72
+ // https://github.com/sindresorhus/eslint-plugin-unicorn/blob/v62.0.0/docs/rules/no-process-exit.md
73
+ 'unicorn/no-process-exit',
74
+ // https://github.com/sindresorhus/eslint-plugin-unicorn/blob/v62.0.0/docs/rules/no-single-promise-in-promise-methods.md
75
+ 'unicorn/no-single-promise-in-promise-methods',
76
+ // https://github.com/sindresorhus/eslint-plugin-unicorn/blob/v62.0.0/docs/rules/no-static-only-class.md
77
+ 'unicorn/no-static-only-class',
78
+ // https://github.com/sindresorhus/eslint-plugin-unicorn/blob/v62.0.0/docs/rules/no-thenable.md
79
+ 'unicorn/no-thenable',
80
+ // https://github.com/sindresorhus/eslint-plugin-unicorn/blob/v62.0.0/docs/rules/no-this-assignment.md
81
+ 'unicorn/no-this-assignment',
82
+ // https://github.com/sindresorhus/eslint-plugin-unicorn/blob/v62.0.0/docs/rules/no-typeof-undefined.md
83
+ 'unicorn/no-typeof-undefined',
84
+ // https://github.com/sindresorhus/eslint-plugin-unicorn/blob/v62.0.0/docs/rules/no-unnecessary-array-flat-depth.md
85
+ 'unicorn/no-unnecessary-array-flat-depth',
86
+ // https://github.com/sindresorhus/eslint-plugin-unicorn/blob/v62.0.0/docs/rules/no-unnecessary-array-splice-count.md
87
+ 'unicorn/no-unnecessary-array-splice-count',
88
+ // https://github.com/sindresorhus/eslint-plugin-unicorn/blob/v62.0.0/docs/rules/no-unnecessary-await.md
89
+ 'unicorn/no-unnecessary-await',
90
+ // https://github.com/sindresorhus/eslint-plugin-unicorn/blob/v62.0.0/docs/rules/no-unnecessary-polyfills.md
91
+ 'unicorn/no-unnecessary-polyfills',
92
+ // https://github.com/sindresorhus/eslint-plugin-unicorn/blob/v62.0.0/docs/rules/no-unnecessary-slice-end.md
93
+ 'unicorn/no-unnecessary-slice-end',
94
+ // https://github.com/sindresorhus/eslint-plugin-unicorn/blob/v62.0.0/docs/rules/no-unreadable-array-destructuring.md
95
+ 'unicorn/no-unreadable-array-destructuring',
96
+ // https://github.com/sindresorhus/eslint-plugin-unicorn/blob/v62.0.0/docs/rules/no-unreadable-iife.md
97
+ 'unicorn/no-unreadable-iife',
98
+ // https://github.com/sindresorhus/eslint-plugin-unicorn/blob/v62.0.0/docs/rules/no-useless-collection-argument.md
99
+ 'unicorn/no-useless-collection-argument',
100
+ // https://github.com/sindresorhus/eslint-plugin-unicorn/blob/v62.0.0/docs/rules/no-useless-error-capture-stack-trace.md
101
+ 'unicorn/no-useless-error-capture-stack-trace',
102
+ // https://github.com/sindresorhus/eslint-plugin-unicorn/blob/v62.0.0/docs/rules/no-useless-fallback-in-spread.md
103
+ 'unicorn/no-useless-fallback-in-spread',
104
+ // https://github.com/sindresorhus/eslint-plugin-unicorn/blob/v62.0.0/docs/rules/no-useless-length-check.md
105
+ 'unicorn/no-useless-length-check',
106
+ // https://github.com/sindresorhus/eslint-plugin-unicorn/blob/v62.0.0/docs/rules/no-useless-promise-resolve-reject.md
107
+ 'unicorn/no-useless-promise-resolve-reject',
108
+ // https://github.com/sindresorhus/eslint-plugin-unicorn/blob/v62.0.0/docs/rules/no-useless-switch-case.md
109
+ 'unicorn/no-useless-switch-case',
110
+ // https://github.com/sindresorhus/eslint-plugin-unicorn/blob/v62.0.0/docs/rules/no-useless-undefined.md
111
+ 'unicorn/no-useless-undefined',
112
+ // https://github.com/sindresorhus/eslint-plugin-unicorn/blob/v62.0.0/docs/rules/no-zero-fractions.md
113
+ 'unicorn/no-zero-fractions',
114
+ // https://github.com/sindresorhus/eslint-plugin-unicorn/blob/v62.0.0/docs/rules/numeric-separators-style.md
115
+ 'unicorn/numeric-separators-style',
116
+ // https://github.com/sindresorhus/eslint-plugin-unicorn/blob/v62.0.0/docs/rules/prefer-at.md
117
+ 'unicorn/prefer-at',
118
+ // https://github.com/sindresorhus/eslint-plugin-unicorn/blob/v62.0.0/docs/rules/prefer-blob-reading-methods.md
119
+ 'unicorn/prefer-blob-reading-methods',
120
+ // https://github.com/sindresorhus/eslint-plugin-unicorn/blob/v62.0.0/docs/rules/prefer-class-fields.md
121
+ 'unicorn/prefer-class-fields',
122
+ // https://github.com/sindresorhus/eslint-plugin-unicorn/blob/v62.0.0/docs/rules/prefer-classlist-toggle.md
123
+ 'unicorn/prefer-classlist-toggle',
124
+ // https://github.com/sindresorhus/eslint-plugin-unicorn/blob/v62.0.0/docs/rules/prefer-code-point.md
125
+ 'unicorn/prefer-code-point',
126
+ // https://github.com/sindresorhus/eslint-plugin-unicorn/blob/v62.0.0/docs/rules/prefer-default-parameters.md
127
+ 'unicorn/prefer-default-parameters',
128
+ // https://github.com/sindresorhus/eslint-plugin-unicorn/blob/v62.0.0/docs/rules/prefer-dom-node-append.md
129
+ 'unicorn/prefer-dom-node-append',
130
+ // https://github.com/sindresorhus/eslint-plugin-unicorn/blob/v62.0.0/docs/rules/prefer-dom-node-dataset.md
131
+ 'unicorn/prefer-dom-node-dataset',
132
+ // https://github.com/sindresorhus/eslint-plugin-unicorn/blob/v62.0.0/docs/rules/prefer-dom-node-remove.md
133
+ 'unicorn/prefer-dom-node-remove',
134
+ // https://github.com/sindresorhus/eslint-plugin-unicorn/blob/v62.0.0/docs/rules/prefer-dom-node-text-content.md
135
+ 'unicorn/prefer-dom-node-text-content',
136
+ // https://github.com/sindresorhus/eslint-plugin-unicorn/blob/v62.0.0/docs/rules/prefer-event-target.md
137
+ 'unicorn/prefer-event-target',
138
+ // https://github.com/sindresorhus/eslint-plugin-unicorn/blob/v62.0.0/docs/rules/prefer-global-this.md
139
+ 'unicorn/prefer-global-this',
140
+ // https://github.com/sindresorhus/eslint-plugin-unicorn/blob/v62.0.0/docs/rules/prefer-logical-operator-over-ternary.md
141
+ 'unicorn/prefer-logical-operator-over-ternary',
142
+ // https://github.com/sindresorhus/eslint-plugin-unicorn/blob/v62.0.0/docs/rules/prefer-math-min-max.md
143
+ 'unicorn/prefer-math-min-max',
144
+ // https://github.com/sindresorhus/eslint-plugin-unicorn/blob/v62.0.0/docs/rules/prefer-modern-dom-apis.md
145
+ 'unicorn/prefer-modern-dom-apis',
146
+ // https://github.com/sindresorhus/eslint-plugin-unicorn/blob/v62.0.0/docs/rules/prefer-modern-math-apis.md
147
+ 'unicorn/prefer-modern-math-apis',
148
+ // https://github.com/sindresorhus/eslint-plugin-unicorn/blob/v62.0.0/docs/rules/prefer-module.md
149
+ 'unicorn/prefer-module',
150
+ // https://github.com/sindresorhus/eslint-plugin-unicorn/blob/v62.0.0/docs/rules/prefer-native-coercion-functions.md
151
+ 'unicorn/prefer-native-coercion-functions',
152
+ // https://github.com/sindresorhus/eslint-plugin-unicorn/blob/v62.0.0/docs/rules/prefer-object-from-entries.md
153
+ 'unicorn/prefer-object-from-entries',
154
+ // https://github.com/sindresorhus/eslint-plugin-unicorn/blob/v62.0.0/docs/rules/prefer-optional-catch-binding.md
155
+ 'unicorn/prefer-optional-catch-binding',
156
+ // https://github.com/sindresorhus/eslint-plugin-unicorn/blob/v62.0.0/docs/rules/prefer-prototype-methods.md
157
+ 'unicorn/prefer-prototype-methods',
158
+ // https://github.com/sindresorhus/eslint-plugin-unicorn/blob/v62.0.0/docs/rules/prefer-query-selector.md
159
+ 'unicorn/prefer-query-selector',
160
+ // https://github.com/sindresorhus/eslint-plugin-unicorn/blob/v62.0.0/docs/rules/prefer-reflect-apply.md
161
+ 'unicorn/prefer-reflect-apply',
162
+ // https://github.com/sindresorhus/eslint-plugin-unicorn/blob/v62.0.0/docs/rules/prefer-response-static-json.md
163
+ 'unicorn/prefer-response-static-json',
164
+ // https://github.com/sindresorhus/eslint-plugin-unicorn/blob/v62.0.0/docs/rules/prefer-set-has.md
165
+ 'unicorn/prefer-set-has',
166
+ // https://github.com/sindresorhus/eslint-plugin-unicorn/blob/v62.0.0/docs/rules/prefer-set-size.md
167
+ 'unicorn/prefer-set-size',
168
+ // https://github.com/sindresorhus/eslint-plugin-unicorn/blob/v62.0.0/docs/rules/prefer-spread.md
169
+ 'unicorn/prefer-spread',
170
+ // https://github.com/sindresorhus/eslint-plugin-unicorn/blob/v62.0.0/docs/rules/prefer-string-replace-all.md
171
+ 'unicorn/prefer-string-replace-all',
172
+ // https://github.com/sindresorhus/eslint-plugin-unicorn/blob/v62.0.0/docs/rules/prefer-string-slice.md
173
+ 'unicorn/prefer-string-slice',
174
+ // https://github.com/sindresorhus/eslint-plugin-unicorn/blob/v62.0.0/docs/rules/prefer-string-trim-start-end.md
175
+ 'unicorn/prefer-string-trim-start-end',
176
+ // https://github.com/sindresorhus/eslint-plugin-unicorn/blob/v62.0.0/docs/rules/prefer-switch.md
177
+ 'unicorn/prefer-switch',
178
+ // https://github.com/sindresorhus/eslint-plugin-unicorn/blob/v62.0.0/docs/rules/prefer-ternary.md
179
+ 'unicorn/prefer-ternary',
180
+ // https://github.com/sindresorhus/eslint-plugin-unicorn/blob/v62.0.0/docs/rules/prefer-top-level-await.md
181
+ 'unicorn/prefer-top-level-await',
182
+ // https://github.com/sindresorhus/eslint-plugin-unicorn/blob/v62.0.0/docs/rules/prevent-abbreviations.md
183
+ 'unicorn/prevent-abbreviations',
184
+ // https://github.com/sindresorhus/eslint-plugin-unicorn/blob/v62.0.0/docs/rules/relative-url-style.md
185
+ 'unicorn/relative-url-style',
186
+ // https://github.com/sindresorhus/eslint-plugin-unicorn/blob/v62.0.0/docs/rules/require-array-join-separator.md
187
+ 'unicorn/require-array-join-separator',
188
+ // https://github.com/sindresorhus/eslint-plugin-unicorn/blob/v62.0.0/docs/rules/require-module-attributes.md
189
+ 'unicorn/require-module-attributes',
190
+ // https://github.com/sindresorhus/eslint-plugin-unicorn/blob/v62.0.0/docs/rules/require-module-specifiers.md
191
+ 'unicorn/require-module-specifiers',
192
+ // https://github.com/sindresorhus/eslint-plugin-unicorn/blob/v62.0.0/docs/rules/require-number-to-fixed-digits-argument.md
193
+ 'unicorn/require-number-to-fixed-digits-argument',
194
+ // https://github.com/sindresorhus/eslint-plugin-unicorn/blob/v62.0.0/docs/rules/switch-case-braces.md
195
+ 'unicorn/switch-case-braces',
196
+ // https://github.com/sindresorhus/eslint-plugin-unicorn/blob/v62.0.0/docs/rules/template-indent.md
197
+ 'unicorn/template-indent',
198
+ // https://github.com/sindresorhus/eslint-plugin-unicorn/blob/v62.0.0/docs/rules/text-encoding-identifier-case.md
199
+ 'unicorn/text-encoding-identifier-case',
200
+ ];
201
+ // @keep-sorted
202
+ const enabledRules = [
203
+ // https://github.com/sindresorhus/eslint-plugin-unicorn/blob/v62.0.0/docs/rules/better-regex.md
204
+ 'unicorn/better-regex',
205
+ // https://github.com/sindresorhus/eslint-plugin-unicorn/blob/v62.0.0/docs/rules/prefer-import-meta-properties.md
206
+ 'unicorn/prefer-import-meta-properties',
207
+ ];
208
+ checkRules({
209
+ plugin,
210
+ currentRules: unicornRules,
211
+ recommendedRules: plugin.configs.recommended.rules || {},
212
+ disabledRules,
213
+ enabledRules,
214
+ });
215
+ });
216
+ //# sourceMappingURL=unicorn.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"unicorn.test.js","sourceRoot":"","sources":["../src/unicorn.test.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@ocavue/eslint-config",
3
3
  "type": "module",
4
- "version": "3.8.5",
4
+ "version": "3.9.0",
5
5
  "description": "Opinionated ESLint config preset",
6
6
  "author": "ocavue <ocavue@gmail.com>",
7
7
  "license": "MIT",
@@ -43,18 +43,19 @@
43
43
  "eslint-plugin-react-hooks": "^7.0.1",
44
44
  "eslint-plugin-unicorn": "^62.0.0",
45
45
  "eslint-plugin-vue": "^10.6.2",
46
- "globals": "^16.5.0",
46
+ "globals": "^17.0.0",
47
47
  "typescript-eslint": "^8.52.0",
48
48
  "vue-eslint-parser": "^10.2.0"
49
49
  },
50
50
  "devDependencies": {
51
51
  "@ocavue/tsconfig": "^0.6.2",
52
- "@types/node": "^20.17.9",
52
+ "@types/node": "^20.19.27",
53
53
  "eslint": "^9.39.2",
54
54
  "jiti": "^2.6.1",
55
55
  "pkg-pr-new": "^0.0.62",
56
56
  "prettier": "^3.7.4",
57
- "typescript": "^5.9.3"
57
+ "typescript": "^5.9.3",
58
+ "vitest": "^4.0.16"
58
59
  },
59
60
  "renovate": {
60
61
  "extends": [
@@ -62,6 +63,7 @@
62
63
  ]
63
64
  },
64
65
  "scripts": {
66
+ "test": "vitest",
65
67
  "build": "tsc -b",
66
68
  "check": "prettier --check .",
67
69
  "fix": "eslint --fix . && prettier --write .",