eslint-config-typed 7.6.0 → 7.7.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/plugins/total-functions/rules/no-hidden-type-assertions.d.mts.map +1 -1
- package/dist/plugins/total-functions/rules/no-hidden-type-assertions.mjs +53 -44
- package/dist/plugins/total-functions/rules/no-hidden-type-assertions.mjs.map +1 -1
- package/dist/plugins/ts-restrictions/rules/no-date-only-string-to-date.d.mts +50 -0
- package/dist/plugins/ts-restrictions/rules/no-date-only-string-to-date.d.mts.map +1 -0
- package/dist/plugins/ts-restrictions/rules/no-date-only-string-to-date.mjs +215 -0
- package/dist/plugins/ts-restrictions/rules/no-date-only-string-to-date.mjs.map +1 -0
- package/dist/plugins/ts-restrictions/rules/rules.d.mts +3 -0
- package/dist/plugins/ts-restrictions/rules/rules.d.mts.map +1 -1
- package/dist/plugins/ts-restrictions/rules/rules.mjs +2 -0
- package/dist/plugins/ts-restrictions/rules/rules.mjs.map +1 -1
- package/dist/plugins/vitest-coding-style/rules/no-expect-to-strict-equal.d.mts +8 -1
- package/dist/plugins/vitest-coding-style/rules/no-expect-to-strict-equal.d.mts.map +1 -1
- package/dist/plugins/vitest-coding-style/rules/no-expect-to-strict-equal.mjs +70 -9
- package/dist/plugins/vitest-coding-style/rules/no-expect-to-strict-equal.mjs.map +1 -1
- package/dist/plugins/vitest-coding-style/rules/prefer-assert-is-false-over-expect-false.d.mts.map +1 -1
- package/dist/plugins/vitest-coding-style/rules/prefer-assert-is-false-over-expect-false.mjs +6 -8
- package/dist/plugins/vitest-coding-style/rules/prefer-assert-is-false-over-expect-false.mjs.map +1 -1
- package/dist/plugins/vitest-coding-style/rules/prefer-assert-is-true-over-expect-true.d.mts.map +1 -1
- package/dist/plugins/vitest-coding-style/rules/prefer-assert-is-true-over-expect-true.mjs +6 -8
- package/dist/plugins/vitest-coding-style/rules/prefer-assert-is-true-over-expect-true.mjs.map +1 -1
- package/dist/plugins/vitest-coding-style/rules/rules.d.mts +1 -1
- package/dist/plugins/vitest-coding-style/rules/vitest-binding.d.mts +9 -0
- package/dist/plugins/vitest-coding-style/rules/vitest-binding.d.mts.map +1 -1
- package/dist/plugins/vitest-coding-style/rules/vitest-binding.mjs +16 -0
- package/dist/plugins/vitest-coding-style/rules/vitest-binding.mjs.map +1 -1
- package/dist/rules/eslint-ts-restrictions-rules.d.mts +1 -0
- package/dist/rules/eslint-ts-restrictions-rules.d.mts.map +1 -1
- package/dist/rules/eslint-ts-restrictions-rules.mjs +1 -0
- package/dist/rules/eslint-ts-restrictions-rules.mjs.map +1 -1
- package/dist/types/rules/eslint-cypress-rules.d.mts +1 -2
- package/dist/types/rules/eslint-cypress-rules.d.mts.map +1 -1
- package/dist/types/rules/eslint-functional-rules.d.mts +16 -17
- package/dist/types/rules/eslint-functional-rules.d.mts.map +1 -1
- package/dist/types/rules/eslint-import-rules.d.mts +28 -28
- package/dist/types/rules/eslint-import-rules.d.mts.map +1 -1
- package/dist/types/rules/eslint-jest-rules.d.mts +22 -23
- package/dist/types/rules/eslint-jest-rules.d.mts.map +1 -1
- package/dist/types/rules/eslint-jsx-a11y-rules.d.mts +36 -37
- package/dist/types/rules/eslint-jsx-a11y-rules.d.mts.map +1 -1
- package/dist/types/rules/eslint-math-rules.d.mts +3 -4
- package/dist/types/rules/eslint-math-rules.d.mts.map +1 -1
- package/dist/types/rules/eslint-n-rules.d.mts +31 -32
- package/dist/types/rules/eslint-n-rules.d.mts.map +1 -1
- package/dist/types/rules/eslint-playwright-rules.d.mts +23 -24
- package/dist/types/rules/eslint-playwright-rules.d.mts.map +1 -1
- package/dist/types/rules/eslint-plugin-rules.d.mts +14 -15
- package/dist/types/rules/eslint-plugin-rules.d.mts.map +1 -1
- package/dist/types/rules/eslint-plugin-sort-destructure-keys-rules.d.mts +1 -2
- package/dist/types/rules/eslint-plugin-sort-destructure-keys-rules.d.mts.map +1 -1
- package/dist/types/rules/eslint-prefer-arrow-functions-rules.d.mts +1 -2
- package/dist/types/rules/eslint-prefer-arrow-functions-rules.d.mts.map +1 -1
- package/dist/types/rules/eslint-promise-rules.d.mts +9 -10
- package/dist/types/rules/eslint-promise-rules.d.mts.map +1 -1
- package/dist/types/rules/eslint-react-coding-style-rules.d.mts +6 -7
- package/dist/types/rules/eslint-react-coding-style-rules.d.mts.map +1 -1
- package/dist/types/rules/eslint-react-hooks-rules.d.mts +28 -29
- package/dist/types/rules/eslint-react-hooks-rules.d.mts.map +1 -1
- package/dist/types/rules/eslint-react-perf-rules.d.mts +4 -5
- package/dist/types/rules/eslint-react-perf-rules.d.mts.map +1 -1
- package/dist/types/rules/eslint-react-refresh-rules.d.mts +1 -2
- package/dist/types/rules/eslint-react-refresh-rules.d.mts.map +1 -1
- package/dist/types/rules/eslint-react-rules.d.mts +63 -63
- package/dist/types/rules/eslint-react-rules.d.mts.map +1 -1
- package/dist/types/rules/eslint-rules.d.mts +83 -83
- package/dist/types/rules/eslint-rules.d.mts.map +1 -1
- package/dist/types/rules/eslint-stylistic-rules.d.mts +61 -61
- package/dist/types/rules/eslint-stylistic-rules.d.mts.map +1 -1
- package/dist/types/rules/eslint-testing-library-rules.d.mts +12 -13
- package/dist/types/rules/eslint-testing-library-rules.d.mts.map +1 -1
- package/dist/types/rules/eslint-ts-restrictions-rules.d.mts +46 -4
- package/dist/types/rules/eslint-ts-restrictions-rules.d.mts.map +1 -1
- package/dist/types/rules/eslint-unicorn-rules.d.mts +77 -77
- package/dist/types/rules/eslint-unicorn-rules.d.mts.map +1 -1
- package/dist/types/rules/eslint-vitest-coding-style-rules.d.mts +1 -1
- package/dist/types/rules/eslint-vitest-rules.d.mts +24 -25
- package/dist/types/rules/eslint-vitest-rules.d.mts.map +1 -1
- package/dist/types/rules/typescript-eslint-rules.d.mts +69 -69
- package/dist/types/rules/typescript-eslint-rules.d.mts.map +1 -1
- package/package.json +10 -10
- package/src/plugins/total-functions/rules/no-hidden-type-assertions.mts +97 -101
- package/src/plugins/total-functions/rules/no-hidden-type-assertions.test.mts +180 -7
- package/src/plugins/ts-restrictions/rules/no-date-only-string-to-date.mts +305 -0
- package/src/plugins/ts-restrictions/rules/no-date-only-string-to-date.test.mts +254 -0
- package/src/plugins/ts-restrictions/rules/rules.mts +2 -0
- package/src/plugins/vitest-coding-style/rules/no-expect-to-strict-equal.mts +109 -13
- package/src/plugins/vitest-coding-style/rules/no-expect-to-strict-equal.test.mts +126 -0
- package/src/plugins/vitest-coding-style/rules/prefer-assert-is-false-over-expect-false.mts +6 -9
- package/src/plugins/vitest-coding-style/rules/prefer-assert-is-true-over-expect-true.mts +6 -9
- package/src/plugins/vitest-coding-style/rules/vitest-binding.mts +24 -0
- package/src/rules/eslint-ts-restrictions-rules.mts +1 -0
- package/src/types/rules/eslint-cypress-rules.mts +1 -9
- package/src/types/rules/eslint-functional-rules.mts +16 -54
- package/src/types/rules/eslint-import-rules.mts +28 -84
- package/src/types/rules/eslint-jest-rules.mts +22 -72
- package/src/types/rules/eslint-jsx-a11y-rules.mts +36 -114
- package/src/types/rules/eslint-math-rules.mts +3 -15
- package/src/types/rules/eslint-n-rules.mts +31 -99
- package/src/types/rules/eslint-playwright-rules.mts +23 -75
- package/src/types/rules/eslint-plugin-rules.mts +14 -48
- package/src/types/rules/eslint-plugin-sort-destructure-keys-rules.mts +1 -9
- package/src/types/rules/eslint-prefer-arrow-functions-rules.mts +1 -9
- package/src/types/rules/eslint-promise-rules.mts +9 -33
- package/src/types/rules/eslint-react-coding-style-rules.mts +6 -24
- package/src/types/rules/eslint-react-hooks-rules.mts +28 -90
- package/src/types/rules/eslint-react-perf-rules.mts +4 -18
- package/src/types/rules/eslint-react-refresh-rules.mts +1 -9
- package/src/types/rules/eslint-react-rules.mts +63 -189
- package/src/types/rules/eslint-rules.mts +83 -249
- package/src/types/rules/eslint-stylistic-rules.mts +61 -183
- package/src/types/rules/eslint-testing-library-rules.mts +12 -42
- package/src/types/rules/eslint-ts-restrictions-rules.mts +49 -12
- package/src/types/rules/eslint-unicorn-rules.mts +77 -231
- package/src/types/rules/eslint-vitest-coding-style-rules.mts +1 -1
- package/src/types/rules/eslint-vitest-rules.mts +24 -78
- package/src/types/rules/typescript-eslint-rules.mts +69 -207
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"no-hidden-type-assertions.d.mts","sourceRoot":"","sources":["../../../../src/plugins/total-functions/rules/no-hidden-type-assertions.mts"],"names":[],"mappings":"AAIA,OAAO,EAEL,WAAW,EAEZ,MAAM,0BAA0B,CAAC;
|
|
1
|
+
{"version":3,"file":"no-hidden-type-assertions.d.mts","sourceRoot":"","sources":["../../../../src/plugins/total-functions/rules/no-hidden-type-assertions.mts"],"names":[],"mappings":"AAIA,OAAO,EAEL,WAAW,EAEZ,MAAM,0BAA0B,CAAC;AAsBlC,oDAAoD;AAEpD,eAAO,MAAM,sBAAsB;;CA8QxB,CAAC"}
|
|
@@ -13,7 +13,7 @@ export const noHiddenTypeAssertions = createRule({
|
|
|
13
13
|
description: 'Bans hidden type assertions.',
|
|
14
14
|
},
|
|
15
15
|
messages: {
|
|
16
|
-
errorStringGeneric: 'Do not use hidden type assertions.
|
|
16
|
+
errorStringGeneric: 'Do not use hidden type assertions. Set the type argument to `unknown` or `never` rather than to an arbitrary type, whether written or inferred from the context.',
|
|
17
17
|
},
|
|
18
18
|
schema: [],
|
|
19
19
|
defaultOptions: [],
|
|
@@ -26,6 +26,22 @@ export const noHiddenTypeAssertions = createRule({
|
|
|
26
26
|
|
|
27
27
|
|
|
28
28
|
|
|
29
|
+
const checkerFrom58 = checker;
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
const writtenTypeArgumentOrDefault = (typeArguments, index, typeParameter) => {
|
|
35
|
+
const typeNode = typeArguments?.[index] ?? typeParameter.default;
|
|
36
|
+
return typeNode === undefined
|
|
37
|
+
? undefined
|
|
38
|
+
: checker.getTypeAtLocation(typeNode);
|
|
39
|
+
};
|
|
40
|
+
|
|
41
|
+
|
|
42
|
+
|
|
43
|
+
|
|
44
|
+
|
|
29
45
|
|
|
30
46
|
|
|
31
47
|
|
|
@@ -45,47 +61,34 @@ export const noHiddenTypeAssertions = createRule({
|
|
|
45
61
|
|
|
46
62
|
|
|
47
63
|
|
|
48
|
-
|
|
64
|
+
|
|
65
|
+
|
|
66
|
+
|
|
67
|
+
const hiddenTypeParamsOf = (declaration) => {
|
|
49
68
|
const { typeParameters, type: returnType } = declaration;
|
|
50
69
|
if (returnType === undefined ||
|
|
51
70
|
typeParameters === undefined ||
|
|
52
71
|
typeParameters.length === 0) {
|
|
53
72
|
return undefined;
|
|
54
73
|
}
|
|
55
|
-
const
|
|
74
|
+
const hidden = typeParameters.flatMap((typeParameter, index) => {
|
|
56
75
|
const symbol = checker.getSymbolAtLocation(typeParameter.name);
|
|
57
76
|
return symbol !== undefined &&
|
|
58
|
-
referencesTypeParameter(returnType, symbol)
|
|
59
|
-
|
|
77
|
+
referencesTypeParameter(returnType, symbol) &&
|
|
78
|
+
!declaration.parameters.some((parameter) => parameter.type !== undefined &&
|
|
79
|
+
referencesTypeParameter(parameter.type, symbol))
|
|
80
|
+
? [{ typeParameter, index }]
|
|
60
81
|
: [];
|
|
61
82
|
});
|
|
62
|
-
return Arr.isNonEmpty(
|
|
83
|
+
return Arr.isNonEmpty(hidden) ? hidden : undefined;
|
|
63
84
|
};
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
const returnTypeParamsAppearInValueParams = (declaration, typeParamsUsedInReturnType) => typeParamsUsedInReturnType.every(({ symbol }) => declaration.parameters.some((parameter) => parameter.type !== undefined &&
|
|
70
|
-
referencesTypeParameter(parameter.type, symbol)));
|
|
71
85
|
const mut_analysisCache = new WeakMap();
|
|
72
86
|
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
87
|
const analyzeSignature = (declaration) => {
|
|
79
88
|
if (mut_analysisCache.has(declaration)) {
|
|
80
89
|
return mut_analysisCache.get(declaration);
|
|
81
90
|
}
|
|
82
|
-
const
|
|
83
|
-
const analysis = typeParamsUsedInReturnType === undefined
|
|
84
|
-
? undefined
|
|
85
|
-
: {
|
|
86
|
-
typeParamsUsedInReturnType,
|
|
87
|
-
appearInValueParams: returnTypeParamsAppearInValueParams(declaration, typeParamsUsedInReturnType),
|
|
88
|
-
};
|
|
91
|
+
const analysis = hiddenTypeParamsOf(declaration);
|
|
89
92
|
mut_analysisCache.set(declaration, analysis);
|
|
90
93
|
return analysis;
|
|
91
94
|
};
|
|
@@ -99,8 +102,7 @@ export const noHiddenTypeAssertions = createRule({
|
|
|
99
102
|
declaration.kind === SyntaxKind.JSDocSignature) {
|
|
100
103
|
return false;
|
|
101
104
|
}
|
|
102
|
-
|
|
103
|
-
return analysis !== undefined && !analysis.appearInValueParams;
|
|
105
|
+
return analyzeSignature(declaration) !== undefined;
|
|
104
106
|
});
|
|
105
107
|
|
|
106
108
|
|
|
@@ -112,6 +114,8 @@ export const noHiddenTypeAssertions = createRule({
|
|
|
112
114
|
|
|
113
115
|
|
|
114
116
|
|
|
117
|
+
|
|
118
|
+
|
|
115
119
|
const isCallThroughCastOfHiddenTypeAssertion = (node, callSignature) => {
|
|
116
120
|
const layers = typeWrapperLayers(node.callee);
|
|
117
121
|
const castIndex = layers.findIndex((layer) => layer.type === AST_NODE_TYPES.TSAsExpression ||
|
|
@@ -119,8 +123,11 @@ export const noHiddenTypeAssertions = createRule({
|
|
|
119
123
|
if (castIndex === -1) {
|
|
120
124
|
return false;
|
|
121
125
|
}
|
|
122
|
-
const
|
|
123
|
-
|
|
126
|
+
const predicate = checker.getTypePredicateOfSignature(callSignature);
|
|
127
|
+
const assertedType = predicate === undefined
|
|
128
|
+
? callSignature.getReturnType()
|
|
129
|
+
: predicate.type;
|
|
130
|
+
if (assertedType === undefined || isUnknownOrNever(assertedType)) {
|
|
124
131
|
return false;
|
|
125
132
|
}
|
|
126
133
|
return layers
|
|
@@ -156,22 +163,23 @@ export const noHiddenTypeAssertions = createRule({
|
|
|
156
163
|
|
|
157
164
|
|
|
158
165
|
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
166
|
+
|
|
167
|
+
|
|
168
|
+
|
|
169
|
+
|
|
170
|
+
|
|
171
|
+
|
|
172
|
+
|
|
173
|
+
const resolvedTypeArguments = checkerFrom58.getTypeArgumentsForResolvedSignature?.(callSignature);
|
|
174
|
+
const assertsSomething = analysis.some(({ index, typeParameter }) => {
|
|
175
|
+
const resolved = resolvedTypeArguments?.[index];
|
|
176
|
+
if (resolved !== undefined && isUnknownOrNever(resolved)) {
|
|
177
|
+
return false;
|
|
178
|
+
}
|
|
179
|
+
const written = writtenTypeArgumentOrDefault(tsExpressionNode.typeArguments, index, typeParameter);
|
|
180
|
+
return written === undefined || !isUnknownOrNever(written);
|
|
170
181
|
});
|
|
171
|
-
if (
|
|
172
|
-
return;
|
|
173
|
-
}
|
|
174
|
-
if (!analysis.appearInValueParams) {
|
|
182
|
+
if (assertsSomething) {
|
|
175
183
|
context.report({
|
|
176
184
|
node,
|
|
177
185
|
messageId: 'errorStringGeneric',
|
|
@@ -181,4 +189,5 @@ export const noHiddenTypeAssertions = createRule({
|
|
|
181
189
|
};
|
|
182
190
|
},
|
|
183
191
|
});
|
|
192
|
+
const isUnknownOrNever = (type) => isTypeUnknownType(type) || isTypeNeverType(type);
|
|
184
193
|
//# sourceMappingURL=no-hidden-type-assertions.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"no-hidden-type-assertions.mjs","sourceRoot":"","sources":["../../../../src/plugins/total-functions/rules/no-hidden-type-assertions.mts"],"names":[],"mappings":"AAAA,OAAO,EACL,eAAe,EACf,iBAAiB,GAClB,MAAM,+BAA+B,CAAC;AACvC,OAAO,EACL,cAAc,EACd,WAAW,GAEZ,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AACtD,OAAO,EAAE,GAAG,EAAE,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"no-hidden-type-assertions.mjs","sourceRoot":"","sources":["../../../../src/plugins/total-functions/rules/no-hidden-type-assertions.mts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import { type TSESLint } from '@typescript-eslint/utils';
|
|
2
|
+
type Options = readonly [
|
|
3
|
+
Readonly<{
|
|
4
|
+
functions?: readonly string[];
|
|
5
|
+
}>?
|
|
6
|
+
];
|
|
7
|
+
type MessageIds = 'dateOnlyString';
|
|
8
|
+
/**
|
|
9
|
+
* Disallow passing a date-only string to `new Date` or `Date.parse`.
|
|
10
|
+
*
|
|
11
|
+
* ## Why
|
|
12
|
+
*
|
|
13
|
+
* ECMAScript reads the ISO date-only forms — `YYYY`, `YYYY-MM` and
|
|
14
|
+
* `YYYY-MM-DD`, the year also as a sign and six digits — as midnight **UTC**,
|
|
15
|
+
* while the same string with a time (`YYYY-MM-DDTHH:mm`) is local time. Read
|
|
16
|
+
* back with the local getters (`getDate`, `getMonth`, …), the date-only form is
|
|
17
|
+
* therefore the day before wherever the offset is negative, and code or a test
|
|
18
|
+
* written east of UTC passes there and fails west of it. Build the date from
|
|
19
|
+
* its numbers, or write the time and zone (`T00:00:00Z`) when UTC is meant.
|
|
20
|
+
*
|
|
21
|
+
* Only the ISO forms are reported: `'2026/11/03'`, `'+2026-11-03'` or `'20261'`
|
|
22
|
+
* are not ISO, and V8 reads them as local time.
|
|
23
|
+
*
|
|
24
|
+
* ## What it sees
|
|
25
|
+
*
|
|
26
|
+
* The first argument is judged by its type: a string literal type that is a
|
|
27
|
+
* date alone, or a union, an intersection (a branded literal) or a type
|
|
28
|
+
* parameter's constraint with one. So a literal written at the call is seen,
|
|
29
|
+
* and so is a `const` holding one or a row of an `as const` table; a `string`
|
|
30
|
+
* is not, whatever it holds at run time. It is reported when any layer of its
|
|
31
|
+
* `as` / `satisfies` / `!` / `<T>` wrappers has such a type, since a widening
|
|
32
|
+
* cast does not change the string, and when a branch of a `?:`, `??` or `||`, or
|
|
33
|
+
* the right of `&&`, does, since `x ?? '2026-11-03'` is a `string` once `x` is.
|
|
34
|
+
*
|
|
35
|
+
* The callee is read through those wrappers and through `?.`, and a computed
|
|
36
|
+
* member with a static key (`Date['parse']`) is the same member. A `Date`
|
|
37
|
+
* declared in the file is not the global and is left alone. The constructor is
|
|
38
|
+
* matched by name, so `const D = Date` or a subclass of `Date` is not seen
|
|
39
|
+
* unless `functions` names it.
|
|
40
|
+
*
|
|
41
|
+
* ## Options
|
|
42
|
+
*
|
|
43
|
+
* `functions` names further callees, called or constructed, that hand their
|
|
44
|
+
* first argument to `new Date`, as a dotted path (`'DateUtils.from'`). They are
|
|
45
|
+
* matched by the names written at the call, so an import renamed at the call
|
|
46
|
+
* site is not seen.
|
|
47
|
+
*/
|
|
48
|
+
export declare const noDateOnlyStringToDate: TSESLint.RuleModule<MessageIds, Options>;
|
|
49
|
+
export {};
|
|
50
|
+
//# sourceMappingURL=no-date-only-string-to-date.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"no-date-only-string-to-date.d.mts","sourceRoot":"","sources":["../../../../src/plugins/ts-restrictions/rules/no-date-only-string-to-date.mts"],"names":[],"mappings":"AAAA,OAAO,EAGL,KAAK,QAAQ,EAEd,MAAM,0BAA0B,CAAC;AAUlC,KAAK,OAAO,GAAG,SAAS;IACtB,QAAQ,CAAC;QACP,SAAS,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;KAC/B,CAAC,CAAC;CACJ,CAAC;AAEF,KAAK,UAAU,GAAG,gBAAgB,CAAC;AAEnC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAuCG;AACH,eAAO,MAAM,sBAAsB,EAAE,QAAQ,CAAC,UAAU,CAAC,UAAU,EAAE,OAAO,CA4KhE,CAAC"}
|
|
@@ -0,0 +1,215 @@
|
|
|
1
|
+
import { AST_NODE_TYPES, ESLintUtils, } from '@typescript-eslint/utils';
|
|
2
|
+
import { createGetLayerTypes, isRuntimeBound, skipTypeWrappers, } 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
|
+
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
|
|
40
|
+
|
|
41
|
+
|
|
42
|
+
|
|
43
|
+
|
|
44
|
+
export const noDateOnlyStringToDate = {
|
|
45
|
+
meta: {
|
|
46
|
+
type: 'problem',
|
|
47
|
+
docs: {
|
|
48
|
+
description: 'Disallow a date-only string (`YYYY-MM-DD`) read by `new Date` or `Date.parse`, which take it as midnight UTC rather than local midnight',
|
|
49
|
+
},
|
|
50
|
+
schema: [
|
|
51
|
+
{
|
|
52
|
+
type: 'object',
|
|
53
|
+
properties: {
|
|
54
|
+
functions: {
|
|
55
|
+
type: 'array',
|
|
56
|
+
items: { type: 'string' },
|
|
57
|
+
description: 'Further callees, called or constructed, as dotted paths such as `DateUtils.from`, that pass their first argument to `new Date`.',
|
|
58
|
+
},
|
|
59
|
+
},
|
|
60
|
+
additionalProperties: false,
|
|
61
|
+
},
|
|
62
|
+
],
|
|
63
|
+
messages: {
|
|
64
|
+
dateOnlyString: 'A date-only string is midnight UTC to `{{callee}}`, the day before in local time west of UTC. Build the date from its numbers, or write the time and zone (`T00:00:00Z`) if UTC is meant.',
|
|
65
|
+
},
|
|
66
|
+
defaultOptions: [{}],
|
|
67
|
+
},
|
|
68
|
+
create: (context) => {
|
|
69
|
+
const functions = new Set(context.options[0]?.functions);
|
|
70
|
+
const services = ESLintUtils.getParserServices(context);
|
|
71
|
+
const checker = services.program.getTypeChecker();
|
|
72
|
+
const getLayerTypes = createGetLayerTypes(services);
|
|
73
|
+
|
|
74
|
+
|
|
75
|
+
|
|
76
|
+
|
|
77
|
+
|
|
78
|
+
|
|
79
|
+
const isDateOnlyType = (type) => {
|
|
80
|
+
if (type.isStringLiteral()) {
|
|
81
|
+
return dateOnlyPattern.test(type.value);
|
|
82
|
+
}
|
|
83
|
+
if (type.isUnionOrIntersection()) {
|
|
84
|
+
return type.types.some(isDateOnlyType);
|
|
85
|
+
}
|
|
86
|
+
const constraint = type.isTypeParameter()
|
|
87
|
+
? checker.getBaseConstraintOfType(type)
|
|
88
|
+
: undefined;
|
|
89
|
+
return constraint !== undefined && isDateOnlyType(constraint);
|
|
90
|
+
};
|
|
91
|
+
|
|
92
|
+
|
|
93
|
+
|
|
94
|
+
|
|
95
|
+
const isGlobalDate = (callee) => {
|
|
96
|
+
const path = namePath(callee);
|
|
97
|
+
const root = path === 'Date'
|
|
98
|
+
? 'Date'
|
|
99
|
+
: path === 'globalThis.Date'
|
|
100
|
+
? 'globalThis'
|
|
101
|
+
: undefined;
|
|
102
|
+
return (root !== undefined &&
|
|
103
|
+
!isRuntimeBound(context.sourceCode, asNode(callee), root));
|
|
104
|
+
};
|
|
105
|
+
|
|
106
|
+
const checkedCallee = (callee, isNew) => {
|
|
107
|
+
if (isNew && isGlobalDate(callee)) {
|
|
108
|
+
return 'Date';
|
|
109
|
+
}
|
|
110
|
+
const unwrapped = skipTypeWrappers(callee);
|
|
111
|
+
|
|
112
|
+
const value = unwrapped.type === AST_NODE_TYPES.ChainExpression
|
|
113
|
+
? skipTypeWrappers(unwrapped.expression)
|
|
114
|
+
: unwrapped;
|
|
115
|
+
if (!isNew &&
|
|
116
|
+
value.type === AST_NODE_TYPES.MemberExpression &&
|
|
117
|
+
memberName(value) === 'parse' &&
|
|
118
|
+
isGlobalDate(value.object)) {
|
|
119
|
+
return 'Date.parse';
|
|
120
|
+
}
|
|
121
|
+
const path = namePath(value);
|
|
122
|
+
return path !== undefined && functions.has(path) ? path : undefined;
|
|
123
|
+
};
|
|
124
|
+
|
|
125
|
+
|
|
126
|
+
|
|
127
|
+
|
|
128
|
+
|
|
129
|
+
|
|
130
|
+
|
|
131
|
+
|
|
132
|
+
const isDateOnlyString = (node) => {
|
|
133
|
+
if (getLayerTypes(node).some(isDateOnlyType)) {
|
|
134
|
+
return true;
|
|
135
|
+
}
|
|
136
|
+
const value = skipTypeWrappers(node);
|
|
137
|
+
if (value.type === AST_NODE_TYPES.ConditionalExpression) {
|
|
138
|
+
return (isDateOnlyString(value.consequent) ||
|
|
139
|
+
isDateOnlyString(value.alternate));
|
|
140
|
+
}
|
|
141
|
+
return (value.type === AST_NODE_TYPES.LogicalExpression &&
|
|
142
|
+
((value.operator !== '&&' && isDateOnlyString(value.left)) ||
|
|
143
|
+
isDateOnlyString(value.right)));
|
|
144
|
+
};
|
|
145
|
+
const check = (node) => {
|
|
146
|
+
const callee = checkedCallee(node.callee, node.type === AST_NODE_TYPES.NewExpression);
|
|
147
|
+
const first = node.arguments[0];
|
|
148
|
+
if (callee === undefined ||
|
|
149
|
+
first === undefined ||
|
|
150
|
+
!isDateOnlyString(first)) {
|
|
151
|
+
return;
|
|
152
|
+
}
|
|
153
|
+
context.report({
|
|
154
|
+
node: asNode(first),
|
|
155
|
+
messageId: 'dateOnlyString',
|
|
156
|
+
data: { callee },
|
|
157
|
+
});
|
|
158
|
+
};
|
|
159
|
+
return {
|
|
160
|
+
NewExpression: check,
|
|
161
|
+
CallExpression: check,
|
|
162
|
+
};
|
|
163
|
+
},
|
|
164
|
+
};
|
|
165
|
+
|
|
166
|
+
|
|
167
|
+
|
|
168
|
+
|
|
169
|
+
const dateOnlyPattern = /^(?:\d{4}|[+-]\d{6})(?:|-\d{2}|-\d{2}-\d{2})$/u;
|
|
170
|
+
|
|
171
|
+
const staticString = (node) => {
|
|
172
|
+
const value = skipTypeWrappers(node);
|
|
173
|
+
if (value.type === AST_NODE_TYPES.Literal) {
|
|
174
|
+
return typeof value.value === 'string' ? value.value : undefined;
|
|
175
|
+
}
|
|
176
|
+
return value.type === AST_NODE_TYPES.TemplateLiteral &&
|
|
177
|
+
Arr.isEmpty(value.expressions)
|
|
178
|
+
? (value.quasis[0]?.value.cooked ?? undefined)
|
|
179
|
+
: undefined;
|
|
180
|
+
};
|
|
181
|
+
|
|
182
|
+
|
|
183
|
+
|
|
184
|
+
const memberName = (node) => !node.computed && node.property.type === AST_NODE_TYPES.Identifier
|
|
185
|
+
? node.property.name
|
|
186
|
+
: node.computed
|
|
187
|
+
? staticString(node.property)
|
|
188
|
+
: undefined;
|
|
189
|
+
|
|
190
|
+
|
|
191
|
+
|
|
192
|
+
|
|
193
|
+
|
|
194
|
+
const namePath = (node) => {
|
|
195
|
+
const unwrapped = skipTypeWrappers(node);
|
|
196
|
+
|
|
197
|
+
const value = unwrapped.type === AST_NODE_TYPES.ChainExpression
|
|
198
|
+
? skipTypeWrappers(unwrapped.expression)
|
|
199
|
+
: unwrapped;
|
|
200
|
+
if (value.type === AST_NODE_TYPES.Identifier) {
|
|
201
|
+
return value.name;
|
|
202
|
+
}
|
|
203
|
+
if (value.type !== AST_NODE_TYPES.MemberExpression) {
|
|
204
|
+
return undefined;
|
|
205
|
+
}
|
|
206
|
+
const object = namePath(value.object);
|
|
207
|
+
const name = memberName(value);
|
|
208
|
+
return object === undefined || name === undefined
|
|
209
|
+
? undefined
|
|
210
|
+
: `${object}.${name}`;
|
|
211
|
+
};
|
|
212
|
+
const asNode = (node) =>
|
|
213
|
+
|
|
214
|
+
node;
|
|
215
|
+
//# sourceMappingURL=no-date-only-string-to-date.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"no-date-only-string-to-date.mjs","sourceRoot":"","sources":["../../../../src/plugins/ts-restrictions/rules/no-date-only-string-to-date.mts"],"names":[],"mappings":"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"}
|
|
@@ -6,6 +6,9 @@ export declare const tsRestrictionsRules: {
|
|
|
6
6
|
readonly 'explicit-collection-type-arguments': import("@typescript-eslint/utils/ts-eslint").RuleModule<"addInferredTypeArguments" | "missingTypeArguments", readonly [], unknown, import("@typescript-eslint/utils/ts-eslint").RuleListener>;
|
|
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
|
+
readonly 'no-date-only-string-to-date': import("@typescript-eslint/utils/ts-eslint").RuleModule<"dateOnlyString", readonly [(Readonly<{
|
|
10
|
+
functions?: readonly string[];
|
|
11
|
+
}> | undefined)?], unknown, import("@typescript-eslint/utils/ts-eslint").RuleListener>;
|
|
9
12
|
readonly 'no-detached-jsdoc': import("@typescript-eslint/utils/ts-eslint").RuleModule<"detachedJsdoc", readonly [], unknown, import("@typescript-eslint/utils/ts-eslint").RuleListener>;
|
|
10
13
|
readonly 'no-export-type-side-effects': import("@typescript-eslint/utils/ts-eslint").RuleModule<"importFromDeclaration" | "useTopLevelQualifier", readonly [], unknown, import("@typescript-eslint/utils/ts-eslint").RuleListener>;
|
|
11
14
|
readonly 'no-negated-comparison': import("@typescript-eslint/utils/ts-eslint").RuleModule<"invertComparison" | "negatedComparison" | "negatedComparisonMaybeNaN", readonly [], unknown, import("@typescript-eslint/utils/ts-eslint").RuleListener>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rules.d.mts","sourceRoot":"","sources":["../../../../src/plugins/ts-restrictions/rules/rules.mts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"rules.d.mts","sourceRoot":"","sources":["../../../../src/plugins/ts-restrictions/rules/rules.mts"],"names":[],"mappings":"AA0BA,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAyBU,CAAC"}
|
|
@@ -2,6 +2,7 @@ import { checkDestructuringCompleteness } from './check-destructuring-completene
|
|
|
2
2
|
import { explicitCollectionTypeArguments } from './explicit-collection-type-arguments.mjs';
|
|
3
3
|
import { functionOrder } from './function-order.mjs';
|
|
4
4
|
import { jsxBooleanLogicalOperands } from './jsx-boolean-logical-operands.mjs';
|
|
5
|
+
import { noDateOnlyStringToDate } from './no-date-only-string-to-date.mjs';
|
|
5
6
|
import { noDetachedJsdoc } from './no-detached-jsdoc.mjs';
|
|
6
7
|
import { noExportTypeSideEffects } from './no-export-type-side-effects.mjs';
|
|
7
8
|
import { noNegatedComparison } from './no-negated-comparison.mjs';
|
|
@@ -26,6 +27,7 @@ export const tsRestrictionsRules = {
|
|
|
26
27
|
'explicit-collection-type-arguments': explicitCollectionTypeArguments,
|
|
27
28
|
'function-order': functionOrder,
|
|
28
29
|
'jsx-boolean-logical-operands': jsxBooleanLogicalOperands,
|
|
30
|
+
'no-date-only-string-to-date': noDateOnlyStringToDate,
|
|
29
31
|
'no-detached-jsdoc': noDetachedJsdoc,
|
|
30
32
|
'no-export-type-side-effects': noExportTypeSideEffects,
|
|
31
33
|
'no-negated-comparison': noNegatedComparison,
|
|
@@ -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,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"}
|
|
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,sBAAsB,EAAE,MAAM,mCAAmC,CAAC;AAC3E,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,6BAA6B,EAAE,sBAAsB;IACrD,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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { type TSESLint } from '@typescript-eslint/utils';
|
|
2
|
-
type MessageIds = 'useAssert';
|
|
2
|
+
type MessageIds = 'useAssert' | 'useAssertMovingMessage';
|
|
3
3
|
/**
|
|
4
4
|
* The trade-off, measured in `assert-vs-expect-strict-equality.test.mts`:
|
|
5
5
|
*
|
|
@@ -22,6 +22,13 @@ type MessageIds = 'useAssert';
|
|
|
22
22
|
* and `<T>` (`expect(X)!.toStrictEqual(Y)`); `X` and `Y` keep theirs. `expect`
|
|
23
23
|
* is Vitest's only (`getVitestReceiver`), and the fix names Vitest's `assert`
|
|
24
24
|
* only (`createVitestAssertFixer`).
|
|
25
|
+
*
|
|
26
|
+
* `expect(X, message)` is reported too, and its message becomes the third
|
|
27
|
+
* argument, `assert.deepStrictEqual(X, Y, message)`. That moves its evaluation
|
|
28
|
+
* from before `Y` to after it, so the fix is written only when the order cannot
|
|
29
|
+
* matter: either side is a literal, or neither has a side effect
|
|
30
|
+
* (`mayHaveEffect`). Otherwise it is reported as `useAssertMovingMessage`, with
|
|
31
|
+
* no fix.
|
|
25
32
|
*/
|
|
26
33
|
export declare const noExpectToStrictEqualRule: TSESLint.RuleModule<MessageIds>;
|
|
27
34
|
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,
|
|
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,EAGL,KAAK,QAAQ,EAEd,MAAM,0BAA0B,CAAC;AAUlC,KAAK,UAAU,GAAG,WAAW,GAAG,wBAAwB,CAAC;AAOzD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AACH,eAAO,MAAM,yBAAyB,EAAE,QAAQ,CAAC,UAAU,CAAC,UAAU,CAgH5D,CAAC"}
|