eslint-config-typed 7.5.0 → 7.6.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.
Files changed (76) hide show
  1. package/README.md +10 -1
  2. package/dist/configs/nodejs.d.mts +14 -1
  3. package/dist/configs/nodejs.d.mts.map +1 -1
  4. package/dist/configs/nodejs.mjs +37 -4
  5. package/dist/configs/nodejs.mjs.map +1 -1
  6. package/dist/plugins/immer-coding-style/rules/prefer-curried-produce.d.mts +17 -3
  7. package/dist/plugins/immer-coding-style/rules/prefer-curried-produce.d.mts.map +1 -1
  8. package/dist/plugins/immer-coding-style/rules/prefer-curried-produce.mjs +124 -40
  9. package/dist/plugins/immer-coding-style/rules/prefer-curried-produce.mjs.map +1 -1
  10. package/dist/plugins/ts-restrictions/rules/no-export-type-side-effects.d.mts +23 -0
  11. package/dist/plugins/ts-restrictions/rules/no-export-type-side-effects.d.mts.map +1 -0
  12. package/dist/plugins/ts-restrictions/rules/no-export-type-side-effects.mjs +78 -0
  13. package/dist/plugins/ts-restrictions/rules/no-export-type-side-effects.mjs.map +1 -0
  14. package/dist/plugins/ts-restrictions/rules/rules.d.mts +1 -0
  15. package/dist/plugins/ts-restrictions/rules/rules.d.mts.map +1 -1
  16. package/dist/plugins/ts-restrictions/rules/rules.mjs +2 -0
  17. package/dist/plugins/ts-restrictions/rules/rules.mjs.map +1 -1
  18. package/dist/plugins/vitest-coding-style/rules/no-expect-to-strict-equal.d.mts +3 -1
  19. package/dist/plugins/vitest-coding-style/rules/no-expect-to-strict-equal.d.mts.map +1 -1
  20. package/dist/plugins/vitest-coding-style/rules/no-expect-to-strict-equal.mjs +11 -12
  21. package/dist/plugins/vitest-coding-style/rules/no-expect-to-strict-equal.mjs.map +1 -1
  22. package/dist/plugins/vitest-coding-style/rules/prefer-assert-is-false-over-expect-false.d.mts +2 -1
  23. package/dist/plugins/vitest-coding-style/rules/prefer-assert-is-false-over-expect-false.d.mts.map +1 -1
  24. package/dist/plugins/vitest-coding-style/rules/prefer-assert-is-false-over-expect-false.mjs +36 -24
  25. package/dist/plugins/vitest-coding-style/rules/prefer-assert-is-false-over-expect-false.mjs.map +1 -1
  26. package/dist/plugins/vitest-coding-style/rules/prefer-assert-is-true-over-expect-true.d.mts +2 -1
  27. package/dist/plugins/vitest-coding-style/rules/prefer-assert-is-true-over-expect-true.d.mts.map +1 -1
  28. package/dist/plugins/vitest-coding-style/rules/prefer-assert-is-true-over-expect-true.mjs +36 -24
  29. package/dist/plugins/vitest-coding-style/rules/prefer-assert-is-true-over-expect-true.mjs.map +1 -1
  30. package/dist/plugins/vitest-coding-style/rules/vitest-binding.d.mts +25 -0
  31. package/dist/plugins/vitest-coding-style/rules/vitest-binding.d.mts.map +1 -1
  32. package/dist/plugins/vitest-coding-style/rules/vitest-binding.mjs +56 -1
  33. package/dist/plugins/vitest-coding-style/rules/vitest-binding.mjs.map +1 -1
  34. package/dist/rules/eslint-rules.d.mts +58 -4
  35. package/dist/rules/eslint-rules.d.mts.map +1 -1
  36. package/dist/rules/eslint-rules.mjs +21 -3
  37. package/dist/rules/eslint-rules.mjs.map +1 -1
  38. package/dist/rules/eslint-ts-restrictions-rules.d.mts +1 -0
  39. package/dist/rules/eslint-ts-restrictions-rules.d.mts.map +1 -1
  40. package/dist/rules/eslint-ts-restrictions-rules.mjs +1 -0
  41. package/dist/rules/eslint-ts-restrictions-rules.mjs.map +1 -1
  42. package/dist/rules/eslint-unicorn-rules.d.mts +24 -6
  43. package/dist/rules/eslint-unicorn-rules.d.mts.map +1 -1
  44. package/dist/rules/eslint-unicorn-rules.mjs +22 -4
  45. package/dist/rules/eslint-unicorn-rules.mjs.map +1 -1
  46. package/dist/rules/node-version-gated-apis.d.mts +74 -14
  47. package/dist/rules/node-version-gated-apis.d.mts.map +1 -1
  48. package/dist/rules/node-version-gated-apis.mjs +146 -20
  49. package/dist/rules/node-version-gated-apis.mjs.map +1 -1
  50. package/dist/rules/typescript-eslint-rules.d.mts.map +1 -1
  51. package/dist/rules/typescript-eslint-rules.mjs +4 -0
  52. package/dist/rules/typescript-eslint-rules.mjs.map +1 -1
  53. package/dist/types/rules/eslint-ts-restrictions-rules.d.mts +15 -0
  54. package/dist/types/rules/eslint-ts-restrictions-rules.d.mts.map +1 -1
  55. package/package.json +10 -10
  56. package/src/configs/nodejs.mts +63 -4
  57. package/src/configs/nodejs.test.mts +83 -0
  58. package/src/configs/typescript.test.mts +64 -2
  59. package/src/plugins/immer-coding-style/rules/prefer-curried-produce.mts +207 -63
  60. package/src/plugins/immer-coding-style/rules/prefer-curried-produce.test.mts +316 -10
  61. package/src/plugins/ts-restrictions/rules/no-export-type-side-effects.mts +102 -0
  62. package/src/plugins/ts-restrictions/rules/no-export-type-side-effects.test.mts +129 -0
  63. package/src/plugins/ts-restrictions/rules/rules.mts +2 -0
  64. package/src/plugins/vitest-coding-style/rules/no-expect-to-strict-equal.mts +27 -21
  65. package/src/plugins/vitest-coding-style/rules/no-expect-to-strict-equal.test.mts +115 -0
  66. package/src/plugins/vitest-coding-style/rules/prefer-assert-coding-style-rules.test.mts +330 -0
  67. package/src/plugins/vitest-coding-style/rules/prefer-assert-is-false-over-expect-false.mts +58 -31
  68. package/src/plugins/vitest-coding-style/rules/prefer-assert-is-true-over-expect-true.mts +58 -31
  69. package/src/plugins/vitest-coding-style/rules/vitest-binding.mts +89 -1
  70. package/src/rules/eslint-rules.mts +24 -4
  71. package/src/rules/eslint-ts-restrictions-rules.mts +1 -0
  72. package/src/rules/eslint-unicorn-rules.mts +24 -6
  73. package/src/rules/node-version-gated-apis.mts +202 -47
  74. package/src/rules/node-version-gated-apis.test.mts +75 -5
  75. package/src/rules/typescript-eslint-rules.mts +5 -1
  76. package/src/types/rules/eslint-ts-restrictions-rules.mts +16 -0
package/README.md CHANGED
@@ -367,6 +367,15 @@ export default [
367
367
  ] satisfies readonly FlatConfig[];
368
368
  ```
369
369
 
370
+ The presets report the built-in APIs, globals and syntax that the oldest
371
+ Node.js in this package's `engines.node` lacks (`Temporal`, `Iterator.zip`,
372
+ `using`, …), and turn off the rules whose fixes would write them. Files that run
373
+ only on a known newer Node.js, such as a repository's own scripts, pass its
374
+ major: `eslintConfigForNodeJs(['scripts/**'], { nodeMajor: 26 })` allows what
375
+ Node.js 26 has and still reports what it lacks. With `nodeMajor` the preset sets
376
+ the options of `no-restricted-globals`, `no-restricted-properties` and
377
+ `no-restricted-syntax` for those files, replacing any set before it.
378
+
370
379
  ### Node.js TypeScript Project
371
380
 
372
381
  ```tsx
@@ -571,7 +580,7 @@ The shape of the rule option varies depending on the rule, so please check the c
571
580
 
572
581
  **`eslintPluginTsRestrictions`** - Custom ESLint plugin with additional rules for TypeScript
573
582
 
574
- - Currently, this plugin only provides the `ts-restrictions/no-restricted-syntax` rule (which duplicates ESLint's `no-restricted-syntax` rule).
583
+ - Provides the `ts-restrictions/*` rules; `eslintTsRestrictionsRules` lists each one with the severity the preset sets. `ts-restrictions/no-restricted-syntax` duplicates ESLint's `no-restricted-syntax` rule.
575
584
  - Can be used to set the error level to `error` or `warn` as needed.
576
585
 
577
586
  Example:
@@ -1,3 +1,16 @@
1
1
  import { type FlatConfig } from '../types/index.mjs';
2
- export declare const eslintConfigForNodeJs: (files?: readonly string[]) => FlatConfig;
2
+ /**
3
+ * The Node.js globals and rules for `files`.
4
+ *
5
+ * `nodeMajor` is for files that run only on a known Node.js, newer than this
6
+ * package's `engines.node` floor — a repository's own scripts, say. The APIs,
7
+ * globals and syntax that the floor lacks and that runtime has are then
8
+ * allowed (`nodeVersionGateAt`); without it, every one the floor lacks is
9
+ * reported. With it, the preset sets the options of `no-restricted-globals`,
10
+ * `no-restricted-properties` and `no-restricted-syntax` for `files`, replacing
11
+ * any set before it there, as a flat config does.
12
+ */
13
+ export declare const eslintConfigForNodeJs: (files?: readonly string[], options?: Readonly<{
14
+ nodeMajor?: number;
15
+ }>) => FlatConfig;
3
16
  //# sourceMappingURL=nodejs.d.mts.map
@@ -1 +1 @@
1
- {"version":3,"file":"nodejs.d.mts","sourceRoot":"","sources":["../../src/configs/nodejs.mts"],"names":[],"mappings":"AAGA,OAAO,EAAoB,KAAK,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAEvE,eAAO,MAAM,qBAAqB,WAAY,SAAS,MAAM,EAAE,KAAG,UA8CrD,CAAC"}
1
+ {"version":3,"file":"nodejs.d.mts","sourceRoot":"","sources":["../../src/configs/nodejs.mts"],"names":[],"mappings":"AAQA,OAAO,EAIL,KAAK,UAAU,EAChB,MAAM,oBAAoB,CAAC;AAE5B;;;;;;;;;;GAUG;AACH,eAAO,MAAM,qBAAqB,WACxB,SAAS,MAAM,EAAE,YACf,QAAQ,CAAC;IAAE,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,KACzC,UAmDU,CAAC"}
@@ -1,8 +1,19 @@
1
1
  import globals from 'globals';
2
2
  import { Arr } from 'ts-data-forge';
3
- import { restrictedGlobals } from '../rules/index.mjs';
4
- import { defineKnownRules } from '../types/index.mjs';
5
- export const eslintConfigForNodeJs = (files) => ({
3
+ import { nodeVersionGateAt, restrictedGlobals, restrictedGlobalsWithoutNodeVersionGate, restrictedSyntaxWithoutNodeVersionGate, } from '../rules/index.mjs';
4
+ import { defineKnownRules, } from '../types/index.mjs';
5
+
6
+
7
+
8
+
9
+
10
+
11
+
12
+
13
+
14
+
15
+
16
+ export const eslintConfigForNodeJs = (files, options) => ({
6
17
  ...(files === undefined ? {} : { files }),
7
18
  languageOptions: {
8
19
 
@@ -11,7 +22,11 @@ export const eslintConfigForNodeJs = (files) => ({
11
22
  },
12
23
  },
13
24
  rules: defineKnownRules({
14
- 'no-restricted-globals': Arr.toUnshifted('error')(restrictedGlobals),
25
+ ...(options?.nodeMajor === undefined
26
+ ? {
27
+ 'no-restricted-globals': Arr.toUnshifted('error')(restrictedGlobals),
28
+ }
29
+ : runtimeGate(options.nodeMajor)),
15
30
  'no-alert': 'off',
16
31
  'no-implicit-globals': 'off',
17
32
  'no-script-url': 'off',
@@ -47,4 +62,22 @@ export const eslintConfigForNodeJs = (files) => ({
47
62
  'unicorn/require-passive-events': 'off',
48
63
  }),
49
64
  });
65
+
66
+ const runtimeGate = (nodeMajor) => {
67
+ const gate = nodeVersionGateAt(nodeMajor);
68
+ const globalsOption = [
69
+ ...restrictedGlobalsWithoutNodeVersionGate,
70
+ ...gate.globals,
71
+ ];
72
+ const propertiesOption = gate.properties;
73
+ const syntaxOption = [
74
+ ...restrictedSyntaxWithoutNodeVersionGate,
75
+ ...gate.syntax,
76
+ ];
77
+ return {
78
+ 'no-restricted-globals': Arr.toUnshifted('error')(globalsOption),
79
+ 'no-restricted-properties': Arr.toUnshifted('error')(propertiesOption),
80
+ 'no-restricted-syntax': Arr.toUnshifted('error')(syntaxOption),
81
+ };
82
+ };
50
83
  //# sourceMappingURL=nodejs.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"nodejs.mjs","sourceRoot":"","sources":["../../src/configs/nodejs.mts"],"names":[],"mappings":"AAAA,OAAO,OAAO,MAAM,SAAS,CAAC;AAC9B,OAAO,EAAE,GAAG,EAAE,MAAM,eAAe,CAAC;AACpC,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,EAAE,gBAAgB,EAAmB,MAAM,oBAAoB,CAAC;AAEvE,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC,KAAyB,EAAc,EAAE,CAC7E,CAAC;IACC,GAAG,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC;IACzC,eAAe,EAAE;QACf,iEAAiE;QACjE,OAAO,EAAE;YACP,GAAG,OAAO,CAAC,IAAI;SAChB;KACF;IACD,KAAK,EAAE,gBAAgB,CAAC;QACtB,uBAAuB,EAAE,GAAG,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,iBAAiB,CAAC;QACpE,UAAU,EAAE,KAAK;QACjB,qBAAqB,EAAE,KAAK;QAC5B,eAAe,EAAE,KAAK;QAEtB,4BAA4B,EAAE,KAAK;QACnC,kCAAkC,EAAE,KAAK;QACzC,0CAA0C,EAAE,KAAK;QACjD,qCAAqC,EAAE,KAAK;QAC5C,iCAAiC,EAAE,KAAK;QACxC,gCAAgC,EAAE,KAAK;QACvC,0BAA0B,EAAE,KAAK;QACjC,gCAAgC,EAAE,KAAK;QACvC,sCAAsC,EAAE,KAAK;QAC7C,6BAA6B,EAAE,KAAK;QACpC,mCAAmC,EAAE,KAAK;QAC1C,gCAAgC,EAAE,KAAK;QACvC,+BAA+B,EAAE,KAAK;QACtC,4CAA4C,EAAE,KAAK;QACnD,mCAAmC,EAAE,KAAK;QAC1C,+BAA+B,EAAE,KAAK;QACtC,yBAAyB,EAAE,KAAK;QAChC,4BAA4B,EAAE,KAAK;QACnC,qCAAqC,EAAE,KAAK;QAC5C,sCAAsC,EAAE,KAAK;QAC7C,uCAAuC,EAAE,KAAK;QAC9C,4BAA4B,EAAE,KAAK;QACnC,2CAA2C,EAAE,KAAK;QAClD,sCAAsC,EAAE,KAAK;QAC7C,gCAAgC,EAAE,KAAK;QACvC,uBAAuB,EAAE,KAAK;QAC9B,gCAAgC,EAAE,KAAK;QACvC,qCAAqC,EAAE,KAAK;QAC5C,4BAA4B,EAAE,KAAK;QACnC,gCAAgC,EAAE,KAAK;KACxC,CAAC;CACH,CAAU,CAAC"}
1
+ {"version":3,"file":"nodejs.mjs","sourceRoot":"","sources":["../../src/configs/nodejs.mts"],"names":[],"mappings":"AAAA,OAAO,OAAO,MAAM,SAAS,CAAC;AAC9B,OAAO,EAAE,GAAG,EAAE,MAAM,eAAe,CAAC;AACpC,OAAO,EACL,iBAAiB,EACjB,iBAAiB,EACjB,uCAAuC,EACvC,sCAAsC,GACvC,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACL,gBAAgB,GAIjB,MAAM,oBAAoB,CAAC;AAE5B;;;;;;;;;;GAUG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAAG,CACnC,KAAyB,EACzB,OAA0C,EAC9B,EAAE,CACd,CAAC;IACC,GAAG,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC;IACzC,eAAe,EAAE;QACf,iEAAiE;QACjE,OAAO,EAAE;YACP,GAAG,OAAO,CAAC,IAAI;SAChB;KACF;IACD,KAAK,EAAE,gBAAgB,CAAC;QACtB,GAAG,CAAC,OAAO,EAAE,SAAS,KAAK,SAAS;YAClC,CAAC,CAAC;gBACE,uBAAuB,EACrB,GAAG,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,iBAAiB,CAAC;aAC9C;YACH,CAAC,CAAC,WAAW,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;QACnC,UAAU,EAAE,KAAK;QACjB,qBAAqB,EAAE,KAAK;QAC5B,eAAe,EAAE,KAAK;QAEtB,4BAA4B,EAAE,KAAK;QACnC,kCAAkC,EAAE,KAAK;QACzC,0CAA0C,EAAE,KAAK;QACjD,qCAAqC,EAAE,KAAK;QAC5C,iCAAiC,EAAE,KAAK;QACxC,gCAAgC,EAAE,KAAK;QACvC,0BAA0B,EAAE,KAAK;QACjC,gCAAgC,EAAE,KAAK;QACvC,sCAAsC,EAAE,KAAK;QAC7C,6BAA6B,EAAE,KAAK;QACpC,mCAAmC,EAAE,KAAK;QAC1C,gCAAgC,EAAE,KAAK;QACvC,+BAA+B,EAAE,KAAK;QACtC,4CAA4C,EAAE,KAAK;QACnD,mCAAmC,EAAE,KAAK;QAC1C,+BAA+B,EAAE,KAAK;QACtC,yBAAyB,EAAE,KAAK;QAChC,4BAA4B,EAAE,KAAK;QACnC,qCAAqC,EAAE,KAAK;QAC5C,sCAAsC,EAAE,KAAK;QAC7C,uCAAuC,EAAE,KAAK;QAC9C,4BAA4B,EAAE,KAAK;QACnC,2CAA2C,EAAE,KAAK;QAClD,sCAAsC,EAAE,KAAK;QAC7C,gCAAgC,EAAE,KAAK;QACvC,uBAAuB,EAAE,KAAK;QAC9B,gCAAgC,EAAE,KAAK;QACvC,qCAAqC,EAAE,KAAK;QAC5C,4BAA4B,EAAE,KAAK;QACnC,gCAAgC,EAAE,KAAK;KACxC,CAAC;CACH,CAAU,CAAC;AAEd,6DAA6D;AAC7D,MAAM,WAAW,GAAG,CAClB,SAAiB,EAKhB,EAAE;IACH,MAAM,IAAI,GAAG,iBAAiB,CAAC,SAAS,CAAC,CAAC;IAE1C,MAAM,aAAa,GAA+C;QAChE,GAAG,uCAAuC;QAC1C,GAAG,IAAI,CAAC,OAAO;KACP,CAAC;IAEX,MAAM,gBAAgB,GACpB,IAAI,CAAC,UAAU,CAAC;IAElB,MAAM,YAAY,GAA8C;QAC9D,GAAG,sCAAsC;QACzC,GAAG,IAAI,CAAC,MAAM;KACN,CAAC;IAEX,OAAO;QACL,uBAAuB,EAAE,GAAG,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,aAAa,CAAC;QAChE,0BAA0B,EAAE,GAAG,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,gBAAgB,CAAC;QACtE,sBAAsB,EAAE,GAAG,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,YAAY,CAAC;KAC/D,CAAC;AACJ,CAAC,CAAC"}
@@ -3,8 +3,9 @@ type MessageIds = 'useCurriedProduce';
3
3
  /**
4
4
  * Rewrites `(state) => produce(state, recipe)` as `produce(recipe)`. The base
5
5
  * state is recognized through type wrappers (`produce(state satisfies State,
6
- * recipe)`), which change nothing at run time and go with the argument; the
7
- * type an `as` gives it is kept as the type argument (`produce<State>`).
6
+ * recipe)`), which change nothing at run time and go with the argument. The
7
+ * type argument is the call's own (`produce<State>(state, recipe)`), else the
8
+ * parameter's annotation, else the wrapper's return type.
8
9
  *
9
10
  * The curried form passes its extra arguments on to the recipe (`recipe(draft,
10
11
  * ...args)`), so `xs.map((s) => produce(s, r))` → `xs.map(produce(r))` would
@@ -19,7 +20,20 @@ type MessageIds = 'useCurriedProduce';
19
20
  * would have nowhere to declare, and so is a base under `!`
20
21
  * (`produce(state!, recipe)`): the curried form would take the draft's narrower
21
22
  * type, and its callers could no longer pass what the wrapper took.
22
- * An optional parameter is left alone for the same reason.
23
+ * An optional parameter is left alone for the same reason, and so is a base
24
+ * under an `as` or `<T>` whose type is not the parameter's annotation
25
+ * (`(state: State | undefined) => produce(state as State, recipe)`), or that
26
+ * casts an unannotated parameter, whose type may come from the context.
27
+ * A call under `as` or `<T>` (`produce(state, recipe) as View`) is left alone
28
+ * too, since no curried form returns the type it asserts.
29
+ *
30
+ * `produce` is immer's: a named, aliased, default or namespace import from
31
+ * `immer` that nothing nearer shadows. The call and its callee are read through
32
+ * type wrappers. A call under `satisfies` or `!`, and a callee or namespace
33
+ * object in any wrapper (`(produce as typeof produce)(state, recipe)`,
34
+ * `(immer as T).produce(…)`), are reported without a fix, which could not keep
35
+ * the wrapper; so is an updater with a comment outside the recipe, which the
36
+ * fix would delete.
23
37
  */
24
38
  export declare const preferCurriedProduceRule: TSESLint.RuleModule<MessageIds>;
25
39
  export {};
@@ -1 +1 @@
1
- {"version":3,"file":"prefer-curried-produce.d.mts","sourceRoot":"","sources":["../../../../src/plugins/immer-coding-style/rules/prefer-curried-produce.mts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,QAAQ,EAEd,MAAM,0BAA0B,CAAC;AASlC,KAAK,UAAU,GAAG,mBAAmB,CAAC;AAOtC;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,eAAO,MAAM,wBAAwB,EAAE,QAAQ,CAAC,UAAU,CAAC,UAAU,CA0F3D,CAAC"}
1
+ {"version":3,"file":"prefer-curried-produce.d.mts","sourceRoot":"","sources":["../../../../src/plugins/immer-coding-style/rules/prefer-curried-produce.mts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,QAAQ,EAEd,MAAM,0BAA0B,CAAC;AAalC,KAAK,UAAU,GAAG,mBAAmB,CAAC;AAOtC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AACH,eAAO,MAAM,wBAAwB,EAAE,QAAQ,CAAC,UAAU,CAAC,UAAU,CAuL3D,CAAC"}
@@ -1,5 +1,5 @@
1
1
  import { AST_NODE_TYPES, } from '@typescript-eslint/utils';
2
- import { isTypeWrapper, skipTypeWrappers, typeWrapperLayers, } from 'eslint-rule-forge';
2
+ import { buildCalleeResolver, getImportDeclarations, hasCommentWithin, hasForeignBinding, isTypeWrapper, skipTypeWrappers, typeWrapperLayers, } from 'eslint-rule-forge';
3
3
  import { Arr, hasKey, isRecord } from 'ts-data-forge';
4
4
 
5
5
 
@@ -15,6 +15,20 @@ import { Arr, hasKey, isRecord } from 'ts-data-forge';
15
15
 
16
16
 
17
17
 
18
+
19
+
20
+
21
+
22
+
23
+
24
+
25
+
26
+
27
+
28
+
29
+
30
+
31
+
18
32
 
19
33
 
20
34
 
@@ -37,6 +51,35 @@ export const preferCurriedProduceRule = {
37
51
  },
38
52
  create: (context) => {
39
53
  const sourceCode = context.sourceCode;
54
+ const immerImports = getImportDeclarations(sourceCode.ast, immerModule);
55
+ if (Arr.isEmpty(immerImports)) {
56
+ return {};
57
+ }
58
+ const resolveCallee = buildCalleeResolver(immerImports);
59
+
60
+ const defaultImportNames = new Set(immerImports.flatMap((declaration) => Arr.generate(function* () {
61
+ for (const specifier of declaration.specifiers) {
62
+ if (specifier.type === AST_NODE_TYPES.ImportDefaultSpecifier) {
63
+ yield specifier.local.name;
64
+ }
65
+ }
66
+ })));
67
+ const isImmerProduce = (call) => {
68
+ const callee = call.callee;
69
+ const canonicalName = resolveCallee(callee)?.canonicalName;
70
+ const unwrapped = skipTypeWrappers(callee);
71
+ if (canonicalName !== 'produce' &&
72
+ canonicalName !== 'default' &&
73
+ !(unwrapped.type === AST_NODE_TYPES.Identifier &&
74
+ defaultImportNames.has(unwrapped.name))) {
75
+ return false;
76
+ }
77
+ const bound = unwrapped.type === AST_NODE_TYPES.MemberExpression
78
+ ? skipTypeWrappers(unwrapped.object)
79
+ : unwrapped;
80
+ return (bound.type === AST_NODE_TYPES.Identifier &&
81
+ !hasForeignBinding(sourceCode, call, bound.name, immerModule));
82
+ };
40
83
  return {
41
84
  ArrowFunctionExpression: (node) => {
42
85
  if (node.async ||
@@ -53,8 +96,12 @@ export const preferCurriedProduceRule = {
53
96
  return;
54
97
  }
55
98
  const { name: parameterName } = param;
56
- const callExpression = node.body;
57
- if (!isProduceCall(callExpression)) {
99
+ const callExpression = skipTypeWrappers(node.body);
100
+
101
+
102
+ if (callExpression.type !== AST_NODE_TYPES.CallExpression ||
103
+ !isImmerProduce(callExpression) ||
104
+ typeWrapperLayers(node.body).some((layer) => castTypeOf(layer) !== undefined)) {
58
105
  return;
59
106
  }
60
107
  const [baseArgument, ...restArguments] = callExpression.arguments;
@@ -68,6 +115,14 @@ export const preferCurriedProduceRule = {
68
115
  if (typeWrapperLayers(baseArgument).some((layer) => layer.type === AST_NODE_TYPES.TSNonNullExpression)) {
69
116
  return;
70
117
  }
118
+
119
+
120
+
121
+ if (assertsOtherType(baseArgument, param.typeAnnotation === undefined
122
+ ? undefined
123
+ : tokensText(sourceCode, param.typeAnnotation.typeAnnotation), sourceCode)) {
124
+ return;
125
+ }
71
126
  const baseIdentifier = findIdentifier(baseArgument, parameterName);
72
127
  if (baseIdentifier === undefined) {
73
128
  return;
@@ -75,10 +130,17 @@ export const preferCurriedProduceRule = {
75
130
  if (hasOtherReferences(context, parameterName, baseIdentifier)) {
76
131
  return;
77
132
  }
133
+ const recipe = restArguments[0];
134
+ const isFixable = node.body === callExpression &&
135
+ !hasWrappedCallee(callExpression) &&
136
+ !hasCommentWithin(sourceCode, node, [
137
+ [node.range[0], recipe.range[0]],
138
+ [recipe.range[1], node.range[1]],
139
+ ]);
78
140
  report(context, {
79
141
  arrowFunction: node,
80
- baseArgument,
81
142
  callExpression,
143
+ isFixable,
82
144
  remainingArguments: restArguments,
83
145
  sourceCode,
84
146
  });
@@ -97,17 +159,6 @@ const getTypeArguments = (node) => {
97
159
  }
98
160
  return undefined;
99
161
  };
100
-
101
-
102
-
103
-
104
- const getAssertedType = (node) => {
105
- if (node.type === AST_NODE_TYPES.TSAsExpression ||
106
- node.type === AST_NODE_TYPES.TSTypeAssertion) {
107
- return node.typeAnnotation;
108
- }
109
- return isTypeWrapper(node) ? getAssertedType(node.expression) : undefined;
110
- };
111
162
  const getArrowFunctionParameterType = ({ arrowFunction, sourceCode, }) => {
112
163
  const [parameter] = arrowFunction.params;
113
164
  if (parameter?.type !== AST_NODE_TYPES.Identifier) {
@@ -124,16 +175,13 @@ const getArrowFunctionReturnType = ({ arrowFunction, sourceCode, }) => {
124
175
  ? undefined
125
176
  : sourceCode.getText(typeAnnotation);
126
177
  };
127
- const getTypeParametersText = ({ arrowFunction, baseArgument, callExpression, sourceCode, }) => {
178
+ const getTypeParametersText = ({ arrowFunction, callExpression, sourceCode, }) => {
128
179
  const typeArguments = getTypeArguments(callExpression);
129
180
  if (typeArguments !== undefined) {
130
181
  return sourceCode.getText(typeArguments);
131
182
  }
132
183
 
133
- const assertedType = getAssertedType(baseArgument);
134
- if (assertedType !== undefined) {
135
- return `<${sourceCode.getText(assertedType)}>`;
136
- }
184
+
137
185
  const parameterType = getArrowFunctionParameterType({
138
186
  arrowFunction,
139
187
  sourceCode,
@@ -165,31 +213,67 @@ const normalizeMultilineText = (text) => {
165
213
  const normalized = lines.map((line, index) => index === 0 ? line : line.slice(minIndent));
166
214
  return normalized.join('\n');
167
215
  };
168
- const report = (context, { arrowFunction, baseArgument, callExpression, remainingArguments, sourceCode, }) => {
169
- const calleeText = sourceCode.getText(callExpression.callee);
170
- const typeParametersText = getTypeParametersText({
171
- arrowFunction,
172
- baseArgument,
173
- callExpression,
174
- sourceCode,
175
- });
176
- const remainingArgumentsText = remainingArguments
177
- .map((argument) => normalizeMultilineText(sourceCode.getText(argument)))
178
- .join(', ');
179
- const replacement = `${calleeText}${typeParametersText}(${remainingArgumentsText})`;
216
+ const report = (context, { arrowFunction, callExpression, isFixable, remainingArguments, sourceCode, }) => {
217
+ const buildReplacement = () => {
218
+ const calleeText = sourceCode.getText(callExpression.callee);
219
+ const typeParametersText = getTypeParametersText({
220
+ arrowFunction,
221
+ callExpression,
222
+ sourceCode,
223
+ });
224
+ const remainingArgumentsText = remainingArguments
225
+ .map((argument) => normalizeMultilineText(sourceCode.getText(argument)))
226
+ .join(', ');
227
+ return `${calleeText}${typeParametersText}(${remainingArgumentsText})`;
228
+ };
180
229
  context.report({
181
230
  node: arrowFunction,
182
231
  messageId: 'useCurriedProduce',
183
- fix: (fixer) => fixer.replaceText(arrowFunction, replacement),
232
+ fix: isFixable
233
+ ? (fixer) => fixer.replaceText(arrowFunction, buildReplacement())
234
+ : null,
184
235
  });
185
236
  };
186
- const isProduceCall = (node) => {
187
- if (node.type !== AST_NODE_TYPES.CallExpression) {
188
- return false;
189
- }
190
- return (node.callee.type === AST_NODE_TYPES.Identifier &&
191
- node.callee.name === 'produce');
192
- };
237
+ const immerModule = 'immer';
238
+
239
+
240
+
241
+
242
+ const castTypeOf = (node) => node.type === AST_NODE_TYPES.TSAsExpression ||
243
+ node.type === AST_NODE_TYPES.TSTypeAssertion
244
+ ? node.typeAnnotation
245
+ : undefined;
246
+
247
+
248
+
249
+
250
+
251
+ const hasWrappedCallee = ({ callee, }) => isTypeWrapper(callee) ||
252
+ (callee.type === AST_NODE_TYPES.MemberExpression &&
253
+ isTypeWrapper(callee.object));
254
+
255
+
256
+
257
+
258
+ const tokensText = (sourceCode,
259
+
260
+ node) => sourceCode
261
+ .getTokens(node)
262
+ .map((token) => token.value)
263
+ .join(' ');
264
+
265
+
266
+
267
+
268
+
269
+
270
+
271
+ const assertsOtherType = (argument, parameterType, sourceCode) => argument.type !== AST_NODE_TYPES.SpreadElement &&
272
+ typeWrapperLayers(argument).some((layer) => {
273
+ const castType = castTypeOf(layer);
274
+ return (castType !== undefined &&
275
+ tokensText(sourceCode, castType) !== parameterType);
276
+ });
193
277
 
194
278
 
195
279
 
@@ -1 +1 @@
1
- {"version":3,"file":"prefer-curried-produce.mjs","sourceRoot":"","sources":["../../../../src/plugins/immer-coding-style/rules/prefer-curried-produce.mts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"prefer-curried-produce.mjs","sourceRoot":"","sources":["../../../../src/plugins/immer-coding-style/rules/prefer-curried-produce.mts"],"names":[],"mappings":"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"}
@@ -0,0 +1,23 @@
1
+ import { type TSESLint } from '@typescript-eslint/utils';
2
+ type Options = readonly [];
3
+ type MessageIds = 'useTopLevelQualifier' | 'importFromDeclaration';
4
+ /**
5
+ * The export-side twin of `@typescript-eslint/no-import-type-side-effects`.
6
+ *
7
+ * Under `verbatimModuleSyntax`, TypeScript drops each inline `type` specifier
8
+ * of `export { type A } from 'm'` and keeps the declaration, so a re-export
9
+ * whose specifiers are all inline `type` is emitted as `export {} from 'm'`: a
10
+ * runtime load of `m`, which fails at module load when `m` is a types-only
11
+ * package with no JavaScript entry. `export type { A } from 'm'` is erased
12
+ * whole. A declaration with no `from` is left alone, since `export {}` loads
13
+ * nothing, and so is one in a declaration file or a `declare module` block,
14
+ * where nothing is emitted.
15
+ *
16
+ * The fix removes each inline `type` and adds one after `export`. A re-export
17
+ * with import attributes (`with { type: 'json' }`) gets its own message and no
18
+ * fix, since TypeScript rejects attributes on a type-only re-export (TS2857):
19
+ * its types are better imported from where they are declared.
20
+ */
21
+ export declare const noExportTypeSideEffects: TSESLint.RuleModule<MessageIds, Options>;
22
+ export {};
23
+ //# sourceMappingURL=no-export-type-side-effects.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"no-export-type-side-effects.d.mts","sourceRoot":"","sources":["../../../../src/plugins/ts-restrictions/rules/no-export-type-side-effects.mts"],"names":[],"mappings":"AAAA,OAAO,EAAkB,KAAK,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AAIzE,KAAK,OAAO,GAAG,SAAS,EAAE,CAAC;AAE3B,KAAK,UAAU,GAAG,sBAAsB,GAAG,uBAAuB,CAAC;AAEnE;;;;;;;;;;;;;;;;GAgBG;AACH,eAAO,MAAM,uBAAuB,EAAE,QAAQ,CAAC,UAAU,CAAC,UAAU,EAAE,OAAO,CA4EjE,CAAC"}
@@ -0,0 +1,78 @@
1
+ import { AST_NODE_TYPES } from '@typescript-eslint/utils';
2
+ import { inlineTypeQualifierRange } from 'eslint-rule-forge';
3
+ import { Arr } from 'ts-data-forge';
4
+
5
+
6
+
7
+
8
+
9
+
10
+
11
+
12
+
13
+
14
+
15
+
16
+
17
+
18
+
19
+
20
+
21
+ export const noExportTypeSideEffects = {
22
+ meta: {
23
+ type: 'problem',
24
+ docs: {
25
+ description: 'Enforce a top-level `export type` qualifier on a re-export whose specifiers all have inline `type` qualifiers',
26
+ },
27
+ fixable: 'code',
28
+ schema: [],
29
+ messages: {
30
+ useTopLevelQualifier: "Under `verbatimModuleSyntax`, TypeScript removes only the inline type specifiers, which leaves `export {} from '…'` behind: a runtime import. Write `export type { … } from '…'` instead.",
31
+ importFromDeclaration: "Under `verbatimModuleSyntax`, TypeScript removes only the inline type specifiers, which leaves `export {} from '…' with { … }` behind: a runtime import. A type-only re-export cannot carry import attributes, so re-export these types from the module that declares them.",
32
+ },
33
+ defaultOptions: [],
34
+ },
35
+ create: (context) => {
36
+ if (/\.d\.[cm]?ts$/u.test(context.filename)) {
37
+ return {};
38
+ }
39
+ const { sourceCode } = context;
40
+ return {
41
+ ExportNamedDeclaration: (node) => {
42
+ if (node.source === null ||
43
+ node.exportKind === 'type' ||
44
+ Arr.isEmpty(node.specifiers) ||
45
+ node.specifiers.some((s) => s.exportKind !== 'type') ||
46
+ sourceCode
47
+ .getAncestors(node)
48
+ .some((a) => a.type === AST_NODE_TYPES.TSModuleDeclaration)) {
49
+ return;
50
+ }
51
+ if (Arr.isNonEmpty(node.attributes)) {
52
+ context.report({ node, messageId: 'importFromDeclaration' });
53
+ return;
54
+ }
55
+
56
+
57
+ const exportKeyword = sourceCode.getFirstToken(node);
58
+ const qualifierRanges = Arr.generate(function* () {
59
+ for (const specifier of node.specifiers) {
60
+ const range = inlineTypeQualifierRange(sourceCode, specifier);
61
+ if (range !== undefined) {
62
+ yield range;
63
+ }
64
+ }
65
+ });
66
+ context.report({
67
+ node,
68
+ messageId: 'useTopLevelQualifier',
69
+ fix: exportKeyword === null ||
70
+ qualifierRanges.length !== node.specifiers.length
71
+ ? null
72
+ : (fixer) => Arr.toPushed(qualifierRanges.map((range) => fixer.removeRange(range)), fixer.insertTextAfter(exportKeyword, ' type')),
73
+ });
74
+ },
75
+ };
76
+ },
77
+ };
78
+ //# sourceMappingURL=no-export-type-side-effects.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"no-export-type-side-effects.mjs","sourceRoot":"","sources":["../../../../src/plugins/ts-restrictions/rules/no-export-type-side-effects.mts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAiB,MAAM,0BAA0B,CAAC;AACzE,OAAO,EAAE,wBAAwB,EAAE,MAAM,mBAAmB,CAAC;AAC7D,OAAO,EAAE,GAAG,EAAE,MAAM,eAAe,CAAC;AAMpC;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,CAAC,MAAM,uBAAuB,GAClC;IACE,IAAI,EAAE;QACJ,IAAI,EAAE,SAAS;QACf,IAAI,EAAE;YACJ,WAAW,EACT,+GAA+G;SAClH;QACD,OAAO,EAAE,MAAM;QACf,MAAM,EAAE,EAAE;QACV,QAAQ,EAAE;YACR,oBAAoB,EAClB,2LAA2L;YAC7L,qBAAqB,EACnB,6QAA6Q;SAChR;QACD,cAAc,EAAE,EAAE;KACnB;IAED,MAAM,EAAE,CAAC,OAAO,EAAE,EAAE;QAClB,IAAI,gBAAgB,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC5C,OAAO,EAAE,CAAC;QACZ,CAAC;QAED,MAAM,EAAE,UAAU,EAAE,GAAG,OAAO,CAAC;QAE/B,OAAO;YACL,sBAAsB,EAAE,CAAC,IAAI,EAAE,EAAE;gBAC/B,IACE,IAAI,CAAC,MAAM,KAAK,IAAI;oBACpB,IAAI,CAAC,UAAU,KAAK,MAAM;oBAC1B,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC;oBAC5B,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,KAAK,MAAM,CAAC;oBACpD,UAAU;yBACP,YAAY,CAAC,IAAI,CAAC;yBAClB,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,cAAc,CAAC,mBAAmB,CAAC,EAC7D,CAAC;oBACD,OAAO;gBACT,CAAC;gBAED,IAAI,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC;oBACpC,OAAO,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,uBAAuB,EAAE,CAAC,CAAC;oBAE7D,OAAO;gBACT,CAAC;gBAED,oEAAoE;gBACpE,8CAA8C;gBAC9C,MAAM,aAAa,GAAG,UAAU,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;gBAErD,MAAM,eAAe,GAAG,GAAG,CAAC,QAAQ,CAAC,QAAQ,CAAC;oBAC5C,KAAK,MAAM,SAAS,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;wBACxC,MAAM,KAAK,GAAG,wBAAwB,CAAC,UAAU,EAAE,SAAS,CAAC,CAAC;wBAE9D,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;4BACxB,MAAM,KAAK,CAAC;wBACd,CAAC;oBACH,CAAC;gBACH,CAAC,CAAC,CAAC;gBAEH,OAAO,CAAC,MAAM,CAAC;oBACb,IAAI;oBACJ,SAAS,EAAE,sBAAsB;oBACjC,GAAG,EACD,aAAa,KAAK,IAAI;wBACtB,eAAe,CAAC,MAAM,KAAK,IAAI,CAAC,UAAU,CAAC,MAAM;wBAC/C,CAAC,CAAC,IAAI;wBACN,CAAC,CAAC,CAAC,KAAK,EAAE,EAAE,CACR,GAAG,CAAC,QAAQ,CACV,eAAe,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,EACxD,KAAK,CAAC,eAAe,CAAC,aAAa,EAAE,OAAO,CAAC,CAC9C;iBACV,CAAC,CAAC;YACL,CAAC;SACF,CAAC;IACJ,CAAC;CACO,CAAC"}
@@ -7,6 +7,7 @@ export declare const tsRestrictionsRules: {
7
7
  readonly 'function-order': import("@typescript-eslint/utils/ts-eslint").RuleModule<"calleeAfterCaller" | "exportedAfterHelper", readonly [], unknown, import("@typescript-eslint/utils/ts-eslint").RuleListener>;
8
8
  readonly 'jsx-boolean-logical-operands': import("@typescript-eslint/utils/ts-eslint").RuleModule<"booleanOperands" | "nonBooleanLeft", readonly [], unknown, import("@typescript-eslint/utils/ts-eslint").RuleListener>;
9
9
  readonly 'no-detached-jsdoc': import("@typescript-eslint/utils/ts-eslint").RuleModule<"detachedJsdoc", readonly [], unknown, import("@typescript-eslint/utils/ts-eslint").RuleListener>;
10
+ readonly 'no-export-type-side-effects': import("@typescript-eslint/utils/ts-eslint").RuleModule<"importFromDeclaration" | "useTopLevelQualifier", readonly [], unknown, import("@typescript-eslint/utils/ts-eslint").RuleListener>;
10
11
  readonly 'no-negated-comparison': import("@typescript-eslint/utils/ts-eslint").RuleModule<"invertComparison" | "negatedComparison" | "negatedComparisonMaybeNaN", readonly [], unknown, import("@typescript-eslint/utils/ts-eslint").RuleListener>;
11
12
  readonly 'no-ragged-comment-wrap': import("@typescript-eslint/utils/ts-eslint").RuleModule<"raggedWrap", readonly [(Readonly<{
12
13
  printWidth?: number;
@@ -1 +1 @@
1
- {"version":3,"file":"rules.d.mts","sourceRoot":"","sources":["../../../../src/plugins/ts-restrictions/rules/rules.mts"],"names":[],"mappings":"AAwBA,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAuBU,CAAC"}
1
+ {"version":3,"file":"rules.d.mts","sourceRoot":"","sources":["../../../../src/plugins/ts-restrictions/rules/rules.mts"],"names":[],"mappings":"AAyBA,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAwBU,CAAC"}
@@ -3,6 +3,7 @@ import { explicitCollectionTypeArguments } from './explicit-collection-type-argu
3
3
  import { functionOrder } from './function-order.mjs';
4
4
  import { jsxBooleanLogicalOperands } from './jsx-boolean-logical-operands.mjs';
5
5
  import { noDetachedJsdoc } from './no-detached-jsdoc.mjs';
6
+ import { noExportTypeSideEffects } from './no-export-type-side-effects.mjs';
6
7
  import { noNegatedComparison } from './no-negated-comparison.mjs';
7
8
  import { noRaggedCommentWrap } from './no-ragged-comment-wrap.mjs';
8
9
  import { noRestrictedCastName } from './no-restricted-cast-name.mjs';
@@ -26,6 +27,7 @@ export const tsRestrictionsRules = {
26
27
  'function-order': functionOrder,
27
28
  'jsx-boolean-logical-operands': jsxBooleanLogicalOperands,
28
29
  'no-detached-jsdoc': noDetachedJsdoc,
30
+ 'no-export-type-side-effects': noExportTypeSideEffects,
29
31
  'no-negated-comparison': noNegatedComparison,
30
32
  'no-ragged-comment-wrap': noRaggedCommentWrap,
31
33
  'no-restricted-cast-name': noRestrictedCastName,
@@ -1 +1 @@
1
- {"version":3,"file":"rules.mjs","sourceRoot":"","sources":["../../../../src/plugins/ts-restrictions/rules/rules.mts"],"names":[],"mappings":"AACA,OAAO,EAAE,8BAA8B,EAAE,MAAM,wCAAwC,CAAC;AACxF,OAAO,EAAE,+BAA+B,EAAE,MAAM,0CAA0C,CAAC;AAC3F,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,yBAAyB,EAAE,MAAM,oCAAoC,CAAC;AAC/E,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAC1D,OAAO,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;AAClE,OAAO,EAAE,mBAAmB,EAAE,MAAM,8BAA8B,CAAC;AACnE,OAAO,EAAE,oBAAoB,EAAE,MAAM,+BAA+B,CAAC;AACrE,OAAO,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AAChE,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,EAAE,sBAAsB,EAAE,MAAM,iCAAiC,CAAC;AACzE,OAAO,EAAE,8BAA8B,EAAE,MAAM,yCAAyC,CAAC;AACzF,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAC9D,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAC5D,OAAO,EAAE,+BAA+B,EAAE,MAAM,2CAA2C,CAAC;AAC5F,OAAO,EAAE,4BAA4B,EAAE,MAAM,wCAAwC,CAAC;AACtF,OAAO,EAAE,+BAA+B,EAAE,MAAM,2CAA2C,CAAC;AAC5F,OAAO,EAAE,8BAA8B,EAAE,MAAM,0CAA0C,CAAC;AAC1F,OAAO,EAAE,4BAA4B,EAAE,MAAM,yCAAyC,CAAC;AACvF,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,sBAAsB,EAAE,MAAM,kCAAkC,CAAC;AAE1E,MAAM,CAAC,MAAM,mBAAmB,GAAG;IACjC,kCAAkC,EAAE,8BAA8B;IAClE,oCAAoC,EAAE,+BAA+B;IACrE,gBAAgB,EAAE,aAAa;IAC/B,8BAA8B,EAAE,yBAAyB;IACzD,mBAAmB,EAAE,eAAe;IACpC,uBAAuB,EAAE,mBAAmB;IAC5C,wBAAwB,EAAE,mBAAmB;IAC7C,yBAAyB,EAAE,oBAAoB;IAC/C,sBAAsB,EAAE,kBAAkB;IAC1C,kBAAkB,EAAE,cAAc;IAClC,2BAA2B,EAAE,sBAAsB;IACnD,mCAAmC,EAAE,8BAA8B;IACnE,qBAAqB,EAAE,iBAAiB;IACxC,eAAe,EAAE,YAAY;IAC7B,oBAAoB,EAAE,gBAAgB;IACtC,qCAAqC,EAAE,+BAA+B;IACtE,kCAAkC,EAAE,4BAA4B;IAChE,qCAAqC,EAAE,+BAA+B;IACtE,oCAAoC,EAAE,8BAA8B;IACpE,mCAAmC,EAAE,4BAA4B;IACjE,gBAAgB,EAAE,aAAa;IAC/B,4BAA4B,EAAE,sBAAsB;CACZ,CAAC"}
1
+ {"version":3,"file":"rules.mjs","sourceRoot":"","sources":["../../../../src/plugins/ts-restrictions/rules/rules.mts"],"names":[],"mappings":"AACA,OAAO,EAAE,8BAA8B,EAAE,MAAM,wCAAwC,CAAC;AACxF,OAAO,EAAE,+BAA+B,EAAE,MAAM,0CAA0C,CAAC;AAC3F,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,yBAAyB,EAAE,MAAM,oCAAoC,CAAC;AAC/E,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAC1D,OAAO,EAAE,uBAAuB,EAAE,MAAM,mCAAmC,CAAC;AAC5E,OAAO,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;AAClE,OAAO,EAAE,mBAAmB,EAAE,MAAM,8BAA8B,CAAC;AACnE,OAAO,EAAE,oBAAoB,EAAE,MAAM,+BAA+B,CAAC;AACrE,OAAO,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AAChE,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,EAAE,sBAAsB,EAAE,MAAM,iCAAiC,CAAC;AACzE,OAAO,EAAE,8BAA8B,EAAE,MAAM,yCAAyC,CAAC;AACzF,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAC9D,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAC5D,OAAO,EAAE,+BAA+B,EAAE,MAAM,2CAA2C,CAAC;AAC5F,OAAO,EAAE,4BAA4B,EAAE,MAAM,wCAAwC,CAAC;AACtF,OAAO,EAAE,+BAA+B,EAAE,MAAM,2CAA2C,CAAC;AAC5F,OAAO,EAAE,8BAA8B,EAAE,MAAM,0CAA0C,CAAC;AAC1F,OAAO,EAAE,4BAA4B,EAAE,MAAM,yCAAyC,CAAC;AACvF,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,sBAAsB,EAAE,MAAM,kCAAkC,CAAC;AAE1E,MAAM,CAAC,MAAM,mBAAmB,GAAG;IACjC,kCAAkC,EAAE,8BAA8B;IAClE,oCAAoC,EAAE,+BAA+B;IACrE,gBAAgB,EAAE,aAAa;IAC/B,8BAA8B,EAAE,yBAAyB;IACzD,mBAAmB,EAAE,eAAe;IACpC,6BAA6B,EAAE,uBAAuB;IACtD,uBAAuB,EAAE,mBAAmB;IAC5C,wBAAwB,EAAE,mBAAmB;IAC7C,yBAAyB,EAAE,oBAAoB;IAC/C,sBAAsB,EAAE,kBAAkB;IAC1C,kBAAkB,EAAE,cAAc;IAClC,2BAA2B,EAAE,sBAAsB;IACnD,mCAAmC,EAAE,8BAA8B;IACnE,qBAAqB,EAAE,iBAAiB;IACxC,eAAe,EAAE,YAAY;IAC7B,oBAAoB,EAAE,gBAAgB;IACtC,qCAAqC,EAAE,+BAA+B;IACtE,kCAAkC,EAAE,4BAA4B;IAChE,qCAAqC,EAAE,+BAA+B;IACtE,oCAAoC,EAAE,8BAA8B;IACpE,mCAAmC,EAAE,4BAA4B;IACjE,gBAAgB,EAAE,aAAa;IAC/B,4BAA4B,EAAE,sBAAsB;CACZ,CAAC"}
@@ -19,7 +19,9 @@ type MessageIds = 'useAssert';
19
19
  * recovered by adding a second assertion.
20
20
  *
21
21
  * The calls and the `expect` function are read through `as`, `satisfies`, `!`
22
- * and `<T>` (`expect(X)!.toStrictEqual(Y)`); `X` and `Y` keep theirs.
22
+ * and `<T>` (`expect(X)!.toStrictEqual(Y)`); `X` and `Y` keep theirs. `expect`
23
+ * is Vitest's only (`getVitestReceiver`), and the fix names Vitest's `assert`
24
+ * only (`createVitestAssertFixer`).
23
25
  */
24
26
  export declare const noExpectToStrictEqualRule: TSESLint.RuleModule<MessageIds>;
25
27
  export {};
@@ -1 +1 @@
1
- {"version":3,"file":"no-expect-to-strict-equal.d.mts","sourceRoot":"","sources":["../../../../src/plugins/vitest-coding-style/rules/no-expect-to-strict-equal.mts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,QAAQ,EAEd,MAAM,0BAA0B,CAAC;AAIlC,KAAK,UAAU,GAAG,WAAW,CAAC;AAO9B;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,eAAO,MAAM,yBAAyB,EAAE,QAAQ,CAAC,UAAU,CAAC,UAAU,CAoE5D,CAAC"}
1
+ {"version":3,"file":"no-expect-to-strict-equal.d.mts","sourceRoot":"","sources":["../../../../src/plugins/vitest-coding-style/rules/no-expect-to-strict-equal.mts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,QAAQ,EAEd,MAAM,0BAA0B,CAAC;AAQlC,KAAK,UAAU,GAAG,WAAW,CAAC;AAO9B;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,eAAO,MAAM,yBAAyB,EAAE,QAAQ,CAAC,UAAU,CAAC,UAAU,CAiF5D,CAAC"}