@sarj/eslint-plugin 4.1.0 → 5.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +27 -3
- package/dist/index.cjs +1503 -644
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +60 -26
- package/dist/index.d.ts +60 -26
- package/dist/index.js +1709 -847
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dist/index.d.cts
CHANGED
|
@@ -86,8 +86,10 @@ interface RuleOptions$2 {
|
|
|
86
86
|
* "allow": ["[\\\\/]lib[\\\\/]api[\\\\/]", "-gateway\\\\.ts$"]
|
|
87
87
|
* }]
|
|
88
88
|
*
|
|
89
|
-
* Supplying `allow` REPLACES the
|
|
90
|
-
*
|
|
89
|
+
* Supplying `allow` REPLACES the default CLIENT-LAYER patterns. Test files are
|
|
90
|
+
* no longer part of that list — they are recognised unconditionally by the
|
|
91
|
+
* shared `isTestFile` predicate — so a repo that overrides `allow` keeps its
|
|
92
|
+
* test tree exempt without having to remember the test patterns.
|
|
91
93
|
*
|
|
92
94
|
* CORPUS SWEEP (2220 files, zod / TanStack Query / react-router / swr /
|
|
93
95
|
* zustand, 2026-07): 96 raw hits. The defaults missed three path conventions
|
|
@@ -103,6 +105,44 @@ interface RuleOptions$2 {
|
|
|
103
105
|
* - `__testfixtures__/` — 8 hits from jscodeshift fixtures such as
|
|
104
106
|
* `query/packages/query-codemods/src/v5/remove-overloads/__testfixtures__/bug-reports.input.tsx`,
|
|
105
107
|
* which are input/output text for a codemod, not code that runs.
|
|
108
|
+
*
|
|
109
|
+
* SECOND SWEEP (25,508 deduped TS/TSX files across zod / trpc / dub /
|
|
110
|
+
* openstatus / formbricks / documenso / unkey / midday / papermark / cal.com /
|
|
111
|
+
* hono plus six first-party repos, 2026-07): 1,019 hits, 50 read in a seeded
|
|
112
|
+
* random sample — 24 true positives, 21 false positives, 5 arguable. At a 42%
|
|
113
|
+
* false-positive rate this was the loudest rule of the five audited, and the
|
|
114
|
+
* cause was the same one the first sweep found, just further along: the reports
|
|
115
|
+
* were landing ON the client layer, under names the `allow` list did not know.
|
|
116
|
+
*
|
|
117
|
+
* - **Vendor wrapper modules** — 147 findings. `*Service.ts`, `services/`,
|
|
118
|
+
* `connectors/` (16), `providers/` (12), `integrations/` (16),
|
|
119
|
+
* `notifications/<vendor>/` (29), `adapters/`, `*-fetcher.ts`. Every fetch
|
|
120
|
+
* in them is an absolute-URL call to ONE third-party origin — they ARE the
|
|
121
|
+
* module the rule wants the fetch to live in. Citable:
|
|
122
|
+
* `cal.com/packages/app-store/office365calendar/lib/CalendarService.ts:265`,
|
|
123
|
+
* `openstatus/packages/notifications/telegram/src/index.ts:81`,
|
|
124
|
+
* `formbricks/apps/web/lib/googleSheet/service.ts:164`.
|
|
125
|
+
* Recall cost: 0 of the 50 sampled true positives lived in such a path —
|
|
126
|
+
* every one was a `.tsx` component/page/modal or a React hook.
|
|
127
|
+
* - **Test-path drift** — 36 findings. The rule hand-rolled its own test-path
|
|
128
|
+
* list instead of using the shared `isTestFile`, so it missed `playwright/`
|
|
129
|
+
* (19) and the `.e2e.ts` basename. The single loudest file corpus-wide was
|
|
130
|
+
* `cal.com/apps/web/playwright/oauth-provider.e2e.ts` (16 findings). The
|
|
131
|
+
* sibling rule `require-fetch-timeout` had always used `isTestFile`; this
|
|
132
|
+
* was pure drift between two rules that see the same call sites.
|
|
133
|
+
* - **Asset / passthrough handoff** — see `isConstructedArgumentHandoff`.
|
|
134
|
+
*
|
|
135
|
+
* DELIBERATELY NOT GUARDED: restricting the rule to component/hook files. It
|
|
136
|
+
* would cut the residual false-positive rate from ~25% to ~4%, but costs ~80
|
|
137
|
+
* real positives in `.ts` background jobs (e.g.
|
|
138
|
+
* `papermark/lib/trigger/convert-pdf-direct.ts:332`).
|
|
139
|
+
*
|
|
140
|
+
* DELIBERATELY NOT ALLOWED: a `-provider.*` BASENAME, even though the
|
|
141
|
+
* `providers/` DIRECTORY is. In the corpus that basename is usually a React
|
|
142
|
+
* context or modal provider calling the app's own API —
|
|
143
|
+
* `dub/apps/web/ui/modals/modal-provider.tsx:134` is exactly the true-positive
|
|
144
|
+
* shape — and the two vendor files that carry it are already covered by
|
|
145
|
+
* `integrations/`.
|
|
106
146
|
*/
|
|
107
147
|
|
|
108
148
|
interface RuleOptions$1 {
|
|
@@ -197,9 +237,6 @@ interface LoggingOptions {
|
|
|
197
237
|
}
|
|
198
238
|
|
|
199
239
|
declare const rules: {
|
|
200
|
-
"ban-loose-type-guards-in-tests": _typescript_eslint_utils_ts_eslint.RuleModule<"banLooseTypeGuardsInTests", readonly [], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
|
|
201
|
-
name: string;
|
|
202
|
-
};
|
|
203
240
|
"enforce-file-structure": _typescript_eslint_utils_ts_eslint.RuleModule<"importsFirst" | "useServerDirective", readonly [], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
|
|
204
241
|
name: string;
|
|
205
242
|
};
|
|
@@ -280,6 +317,12 @@ declare const rules: {
|
|
|
280
317
|
"prefer-zod-enum": _typescript_eslint_utils_ts_eslint.RuleModule<"preferEnum", readonly [], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
|
|
281
318
|
name: string;
|
|
282
319
|
};
|
|
320
|
+
"prefer-zod-infer": _typescript_eslint_utils_ts_eslint.RuleModule<"handWrittenTwin", readonly [{
|
|
321
|
+
ignoreTypeNames?: readonly string[];
|
|
322
|
+
requireIdenticalShape?: boolean;
|
|
323
|
+
}?], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
|
|
324
|
+
name: string;
|
|
325
|
+
};
|
|
283
326
|
"no-silent-promise-catch": _typescript_eslint_utils_ts_eslint.RuleModule<"silentCatch", readonly [], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
|
|
284
327
|
name: string;
|
|
285
328
|
};
|
|
@@ -352,19 +395,15 @@ declare const rules: {
|
|
|
352
395
|
"require-interface-for-injected-service": _typescript_eslint_utils_ts_eslint.RuleModule<"requireInterface", readonly [], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
|
|
353
396
|
name: string;
|
|
354
397
|
};
|
|
355
|
-
"strict-test-assertions": _typescript_eslint_utils_ts_eslint.RuleModule<"combineAssertions", [], unknown, _typescript_eslint_utils_ts_eslint.RuleListener
|
|
356
|
-
"prefer-non-nullable-collection": _typescript_eslint_utils_ts_eslint.RuleModule<"preferNonNullableCollection", readonly [], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
|
|
398
|
+
"strict-test-assertions": _typescript_eslint_utils_ts_eslint.RuleModule<"combineAssertions" | "assertArrayOnce", readonly [], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
|
|
357
399
|
name: string;
|
|
358
400
|
};
|
|
359
|
-
"
|
|
401
|
+
"prefer-non-nullable-collection": _typescript_eslint_utils_ts_eslint.RuleModule<"preferNonNullableCollection", readonly [], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
|
|
360
402
|
name: string;
|
|
361
403
|
};
|
|
362
404
|
"no-async-callback-in-waitfor": _typescript_eslint_utils_ts_eslint.RuleModule<"noAsyncCallbackInWaitFor", readonly [], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
|
|
363
405
|
name: string;
|
|
364
406
|
};
|
|
365
|
-
"prefer-setup-file-mocks": _typescript_eslint_utils_ts_eslint.RuleModule<"preferSetupFileMocks", readonly [], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
|
|
366
|
-
name: string;
|
|
367
|
-
};
|
|
368
407
|
};
|
|
369
408
|
declare const plugin: {
|
|
370
409
|
meta: {
|
|
@@ -372,9 +411,6 @@ declare const plugin: {
|
|
|
372
411
|
version: string;
|
|
373
412
|
};
|
|
374
413
|
rules: {
|
|
375
|
-
"ban-loose-type-guards-in-tests": _typescript_eslint_utils_ts_eslint.RuleModule<"banLooseTypeGuardsInTests", readonly [], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
|
|
376
|
-
name: string;
|
|
377
|
-
};
|
|
378
414
|
"enforce-file-structure": _typescript_eslint_utils_ts_eslint.RuleModule<"importsFirst" | "useServerDirective", readonly [], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
|
|
379
415
|
name: string;
|
|
380
416
|
};
|
|
@@ -455,6 +491,12 @@ declare const plugin: {
|
|
|
455
491
|
"prefer-zod-enum": _typescript_eslint_utils_ts_eslint.RuleModule<"preferEnum", readonly [], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
|
|
456
492
|
name: string;
|
|
457
493
|
};
|
|
494
|
+
"prefer-zod-infer": _typescript_eslint_utils_ts_eslint.RuleModule<"handWrittenTwin", readonly [{
|
|
495
|
+
ignoreTypeNames?: readonly string[];
|
|
496
|
+
requireIdenticalShape?: boolean;
|
|
497
|
+
}?], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
|
|
498
|
+
name: string;
|
|
499
|
+
};
|
|
458
500
|
"no-silent-promise-catch": _typescript_eslint_utils_ts_eslint.RuleModule<"silentCatch", readonly [], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
|
|
459
501
|
name: string;
|
|
460
502
|
};
|
|
@@ -527,19 +569,15 @@ declare const plugin: {
|
|
|
527
569
|
"require-interface-for-injected-service": _typescript_eslint_utils_ts_eslint.RuleModule<"requireInterface", readonly [], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
|
|
528
570
|
name: string;
|
|
529
571
|
};
|
|
530
|
-
"strict-test-assertions": _typescript_eslint_utils_ts_eslint.RuleModule<"combineAssertions", [], unknown, _typescript_eslint_utils_ts_eslint.RuleListener
|
|
531
|
-
"prefer-non-nullable-collection": _typescript_eslint_utils_ts_eslint.RuleModule<"preferNonNullableCollection", readonly [], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
|
|
572
|
+
"strict-test-assertions": _typescript_eslint_utils_ts_eslint.RuleModule<"combineAssertions" | "assertArrayOnce", readonly [], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
|
|
532
573
|
name: string;
|
|
533
574
|
};
|
|
534
|
-
"
|
|
575
|
+
"prefer-non-nullable-collection": _typescript_eslint_utils_ts_eslint.RuleModule<"preferNonNullableCollection", readonly [], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
|
|
535
576
|
name: string;
|
|
536
577
|
};
|
|
537
578
|
"no-async-callback-in-waitfor": _typescript_eslint_utils_ts_eslint.RuleModule<"noAsyncCallbackInWaitFor", readonly [], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
|
|
538
579
|
name: string;
|
|
539
580
|
};
|
|
540
|
-
"prefer-setup-file-mocks": _typescript_eslint_utils_ts_eslint.RuleModule<"preferSetupFileMocks", readonly [], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
|
|
541
|
-
name: string;
|
|
542
|
-
};
|
|
543
581
|
};
|
|
544
582
|
configs: {
|
|
545
583
|
recommended: {
|
|
@@ -548,7 +586,6 @@ declare const plugin: {
|
|
|
548
586
|
"@sarj/zod-naming-convention": string;
|
|
549
587
|
"@sarj/require-assert-never": string;
|
|
550
588
|
"@sarj/require-zod-form-validation": string;
|
|
551
|
-
"@sarj/ban-loose-type-guards-in-tests": string;
|
|
552
589
|
"@sarj/enforce-file-structure": string;
|
|
553
590
|
"@sarj/no-client-side-data-fetching": string;
|
|
554
591
|
"@sarj/prefer-server-actions": string;
|
|
@@ -570,6 +607,7 @@ declare const plugin: {
|
|
|
570
607
|
"@sarj/no-unsafe-mock-casting": string;
|
|
571
608
|
"@sarj/prefer-string-literal-union": string;
|
|
572
609
|
"@sarj/prefer-zod-enum": string;
|
|
610
|
+
"@sarj/prefer-zod-infer": string;
|
|
573
611
|
"@sarj/require-fetch-timeout": string;
|
|
574
612
|
"@sarj/no-silent-promise-catch": string;
|
|
575
613
|
"@sarj/prefer-constant-time-secret-compare": string;
|
|
@@ -590,9 +628,7 @@ declare const plugin: {
|
|
|
590
628
|
"@sarj/no-tautological-expect": string;
|
|
591
629
|
"@sarj/require-interface-for-injected-service": string;
|
|
592
630
|
"@sarj/prefer-non-nullable-collection": string;
|
|
593
|
-
"@sarj/no-implicit-attribute-access": string;
|
|
594
631
|
"@sarj/no-async-callback-in-waitfor": string;
|
|
595
|
-
"@sarj/prefer-setup-file-mocks": string;
|
|
596
632
|
};
|
|
597
633
|
};
|
|
598
634
|
strict: {
|
|
@@ -601,7 +637,6 @@ declare const plugin: {
|
|
|
601
637
|
"@sarj/zod-naming-convention": string;
|
|
602
638
|
"@sarj/require-assert-never": string;
|
|
603
639
|
"@sarj/require-zod-form-validation": string;
|
|
604
|
-
"@sarj/ban-loose-type-guards-in-tests": string;
|
|
605
640
|
"@sarj/enforce-file-structure": string;
|
|
606
641
|
"@sarj/no-raw-env": string;
|
|
607
642
|
"@sarj/no-enum": string;
|
|
@@ -625,6 +660,7 @@ declare const plugin: {
|
|
|
625
660
|
"@sarj/no-unsafe-mock-casting": string;
|
|
626
661
|
"@sarj/prefer-string-literal-union": string;
|
|
627
662
|
"@sarj/prefer-zod-enum": string;
|
|
663
|
+
"@sarj/prefer-zod-infer": string;
|
|
628
664
|
"@sarj/require-fetch-timeout": string;
|
|
629
665
|
"@sarj/no-silent-promise-catch": string;
|
|
630
666
|
"@sarj/prefer-constant-time-secret-compare": string;
|
|
@@ -647,9 +683,7 @@ declare const plugin: {
|
|
|
647
683
|
"@sarj/no-tautological-expect": string;
|
|
648
684
|
"@sarj/require-interface-for-injected-service": string;
|
|
649
685
|
"@sarj/prefer-non-nullable-collection": string;
|
|
650
|
-
"@sarj/no-implicit-attribute-access": string;
|
|
651
686
|
"@sarj/no-async-callback-in-waitfor": string;
|
|
652
|
-
"@sarj/prefer-setup-file-mocks": string;
|
|
653
687
|
};
|
|
654
688
|
};
|
|
655
689
|
};
|
package/dist/index.d.ts
CHANGED
|
@@ -86,8 +86,10 @@ interface RuleOptions$2 {
|
|
|
86
86
|
* "allow": ["[\\\\/]lib[\\\\/]api[\\\\/]", "-gateway\\\\.ts$"]
|
|
87
87
|
* }]
|
|
88
88
|
*
|
|
89
|
-
* Supplying `allow` REPLACES the
|
|
90
|
-
*
|
|
89
|
+
* Supplying `allow` REPLACES the default CLIENT-LAYER patterns. Test files are
|
|
90
|
+
* no longer part of that list — they are recognised unconditionally by the
|
|
91
|
+
* shared `isTestFile` predicate — so a repo that overrides `allow` keeps its
|
|
92
|
+
* test tree exempt without having to remember the test patterns.
|
|
91
93
|
*
|
|
92
94
|
* CORPUS SWEEP (2220 files, zod / TanStack Query / react-router / swr /
|
|
93
95
|
* zustand, 2026-07): 96 raw hits. The defaults missed three path conventions
|
|
@@ -103,6 +105,44 @@ interface RuleOptions$2 {
|
|
|
103
105
|
* - `__testfixtures__/` — 8 hits from jscodeshift fixtures such as
|
|
104
106
|
* `query/packages/query-codemods/src/v5/remove-overloads/__testfixtures__/bug-reports.input.tsx`,
|
|
105
107
|
* which are input/output text for a codemod, not code that runs.
|
|
108
|
+
*
|
|
109
|
+
* SECOND SWEEP (25,508 deduped TS/TSX files across zod / trpc / dub /
|
|
110
|
+
* openstatus / formbricks / documenso / unkey / midday / papermark / cal.com /
|
|
111
|
+
* hono plus six first-party repos, 2026-07): 1,019 hits, 50 read in a seeded
|
|
112
|
+
* random sample — 24 true positives, 21 false positives, 5 arguable. At a 42%
|
|
113
|
+
* false-positive rate this was the loudest rule of the five audited, and the
|
|
114
|
+
* cause was the same one the first sweep found, just further along: the reports
|
|
115
|
+
* were landing ON the client layer, under names the `allow` list did not know.
|
|
116
|
+
*
|
|
117
|
+
* - **Vendor wrapper modules** — 147 findings. `*Service.ts`, `services/`,
|
|
118
|
+
* `connectors/` (16), `providers/` (12), `integrations/` (16),
|
|
119
|
+
* `notifications/<vendor>/` (29), `adapters/`, `*-fetcher.ts`. Every fetch
|
|
120
|
+
* in them is an absolute-URL call to ONE third-party origin — they ARE the
|
|
121
|
+
* module the rule wants the fetch to live in. Citable:
|
|
122
|
+
* `cal.com/packages/app-store/office365calendar/lib/CalendarService.ts:265`,
|
|
123
|
+
* `openstatus/packages/notifications/telegram/src/index.ts:81`,
|
|
124
|
+
* `formbricks/apps/web/lib/googleSheet/service.ts:164`.
|
|
125
|
+
* Recall cost: 0 of the 50 sampled true positives lived in such a path —
|
|
126
|
+
* every one was a `.tsx` component/page/modal or a React hook.
|
|
127
|
+
* - **Test-path drift** — 36 findings. The rule hand-rolled its own test-path
|
|
128
|
+
* list instead of using the shared `isTestFile`, so it missed `playwright/`
|
|
129
|
+
* (19) and the `.e2e.ts` basename. The single loudest file corpus-wide was
|
|
130
|
+
* `cal.com/apps/web/playwright/oauth-provider.e2e.ts` (16 findings). The
|
|
131
|
+
* sibling rule `require-fetch-timeout` had always used `isTestFile`; this
|
|
132
|
+
* was pure drift between two rules that see the same call sites.
|
|
133
|
+
* - **Asset / passthrough handoff** — see `isConstructedArgumentHandoff`.
|
|
134
|
+
*
|
|
135
|
+
* DELIBERATELY NOT GUARDED: restricting the rule to component/hook files. It
|
|
136
|
+
* would cut the residual false-positive rate from ~25% to ~4%, but costs ~80
|
|
137
|
+
* real positives in `.ts` background jobs (e.g.
|
|
138
|
+
* `papermark/lib/trigger/convert-pdf-direct.ts:332`).
|
|
139
|
+
*
|
|
140
|
+
* DELIBERATELY NOT ALLOWED: a `-provider.*` BASENAME, even though the
|
|
141
|
+
* `providers/` DIRECTORY is. In the corpus that basename is usually a React
|
|
142
|
+
* context or modal provider calling the app's own API —
|
|
143
|
+
* `dub/apps/web/ui/modals/modal-provider.tsx:134` is exactly the true-positive
|
|
144
|
+
* shape — and the two vendor files that carry it are already covered by
|
|
145
|
+
* `integrations/`.
|
|
106
146
|
*/
|
|
107
147
|
|
|
108
148
|
interface RuleOptions$1 {
|
|
@@ -197,9 +237,6 @@ interface LoggingOptions {
|
|
|
197
237
|
}
|
|
198
238
|
|
|
199
239
|
declare const rules: {
|
|
200
|
-
"ban-loose-type-guards-in-tests": _typescript_eslint_utils_ts_eslint.RuleModule<"banLooseTypeGuardsInTests", readonly [], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
|
|
201
|
-
name: string;
|
|
202
|
-
};
|
|
203
240
|
"enforce-file-structure": _typescript_eslint_utils_ts_eslint.RuleModule<"importsFirst" | "useServerDirective", readonly [], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
|
|
204
241
|
name: string;
|
|
205
242
|
};
|
|
@@ -280,6 +317,12 @@ declare const rules: {
|
|
|
280
317
|
"prefer-zod-enum": _typescript_eslint_utils_ts_eslint.RuleModule<"preferEnum", readonly [], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
|
|
281
318
|
name: string;
|
|
282
319
|
};
|
|
320
|
+
"prefer-zod-infer": _typescript_eslint_utils_ts_eslint.RuleModule<"handWrittenTwin", readonly [{
|
|
321
|
+
ignoreTypeNames?: readonly string[];
|
|
322
|
+
requireIdenticalShape?: boolean;
|
|
323
|
+
}?], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
|
|
324
|
+
name: string;
|
|
325
|
+
};
|
|
283
326
|
"no-silent-promise-catch": _typescript_eslint_utils_ts_eslint.RuleModule<"silentCatch", readonly [], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
|
|
284
327
|
name: string;
|
|
285
328
|
};
|
|
@@ -352,19 +395,15 @@ declare const rules: {
|
|
|
352
395
|
"require-interface-for-injected-service": _typescript_eslint_utils_ts_eslint.RuleModule<"requireInterface", readonly [], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
|
|
353
396
|
name: string;
|
|
354
397
|
};
|
|
355
|
-
"strict-test-assertions": _typescript_eslint_utils_ts_eslint.RuleModule<"combineAssertions", [], unknown, _typescript_eslint_utils_ts_eslint.RuleListener
|
|
356
|
-
"prefer-non-nullable-collection": _typescript_eslint_utils_ts_eslint.RuleModule<"preferNonNullableCollection", readonly [], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
|
|
398
|
+
"strict-test-assertions": _typescript_eslint_utils_ts_eslint.RuleModule<"combineAssertions" | "assertArrayOnce", readonly [], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
|
|
357
399
|
name: string;
|
|
358
400
|
};
|
|
359
|
-
"
|
|
401
|
+
"prefer-non-nullable-collection": _typescript_eslint_utils_ts_eslint.RuleModule<"preferNonNullableCollection", readonly [], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
|
|
360
402
|
name: string;
|
|
361
403
|
};
|
|
362
404
|
"no-async-callback-in-waitfor": _typescript_eslint_utils_ts_eslint.RuleModule<"noAsyncCallbackInWaitFor", readonly [], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
|
|
363
405
|
name: string;
|
|
364
406
|
};
|
|
365
|
-
"prefer-setup-file-mocks": _typescript_eslint_utils_ts_eslint.RuleModule<"preferSetupFileMocks", readonly [], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
|
|
366
|
-
name: string;
|
|
367
|
-
};
|
|
368
407
|
};
|
|
369
408
|
declare const plugin: {
|
|
370
409
|
meta: {
|
|
@@ -372,9 +411,6 @@ declare const plugin: {
|
|
|
372
411
|
version: string;
|
|
373
412
|
};
|
|
374
413
|
rules: {
|
|
375
|
-
"ban-loose-type-guards-in-tests": _typescript_eslint_utils_ts_eslint.RuleModule<"banLooseTypeGuardsInTests", readonly [], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
|
|
376
|
-
name: string;
|
|
377
|
-
};
|
|
378
414
|
"enforce-file-structure": _typescript_eslint_utils_ts_eslint.RuleModule<"importsFirst" | "useServerDirective", readonly [], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
|
|
379
415
|
name: string;
|
|
380
416
|
};
|
|
@@ -455,6 +491,12 @@ declare const plugin: {
|
|
|
455
491
|
"prefer-zod-enum": _typescript_eslint_utils_ts_eslint.RuleModule<"preferEnum", readonly [], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
|
|
456
492
|
name: string;
|
|
457
493
|
};
|
|
494
|
+
"prefer-zod-infer": _typescript_eslint_utils_ts_eslint.RuleModule<"handWrittenTwin", readonly [{
|
|
495
|
+
ignoreTypeNames?: readonly string[];
|
|
496
|
+
requireIdenticalShape?: boolean;
|
|
497
|
+
}?], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
|
|
498
|
+
name: string;
|
|
499
|
+
};
|
|
458
500
|
"no-silent-promise-catch": _typescript_eslint_utils_ts_eslint.RuleModule<"silentCatch", readonly [], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
|
|
459
501
|
name: string;
|
|
460
502
|
};
|
|
@@ -527,19 +569,15 @@ declare const plugin: {
|
|
|
527
569
|
"require-interface-for-injected-service": _typescript_eslint_utils_ts_eslint.RuleModule<"requireInterface", readonly [], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
|
|
528
570
|
name: string;
|
|
529
571
|
};
|
|
530
|
-
"strict-test-assertions": _typescript_eslint_utils_ts_eslint.RuleModule<"combineAssertions", [], unknown, _typescript_eslint_utils_ts_eslint.RuleListener
|
|
531
|
-
"prefer-non-nullable-collection": _typescript_eslint_utils_ts_eslint.RuleModule<"preferNonNullableCollection", readonly [], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
|
|
572
|
+
"strict-test-assertions": _typescript_eslint_utils_ts_eslint.RuleModule<"combineAssertions" | "assertArrayOnce", readonly [], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
|
|
532
573
|
name: string;
|
|
533
574
|
};
|
|
534
|
-
"
|
|
575
|
+
"prefer-non-nullable-collection": _typescript_eslint_utils_ts_eslint.RuleModule<"preferNonNullableCollection", readonly [], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
|
|
535
576
|
name: string;
|
|
536
577
|
};
|
|
537
578
|
"no-async-callback-in-waitfor": _typescript_eslint_utils_ts_eslint.RuleModule<"noAsyncCallbackInWaitFor", readonly [], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
|
|
538
579
|
name: string;
|
|
539
580
|
};
|
|
540
|
-
"prefer-setup-file-mocks": _typescript_eslint_utils_ts_eslint.RuleModule<"preferSetupFileMocks", readonly [], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
|
|
541
|
-
name: string;
|
|
542
|
-
};
|
|
543
581
|
};
|
|
544
582
|
configs: {
|
|
545
583
|
recommended: {
|
|
@@ -548,7 +586,6 @@ declare const plugin: {
|
|
|
548
586
|
"@sarj/zod-naming-convention": string;
|
|
549
587
|
"@sarj/require-assert-never": string;
|
|
550
588
|
"@sarj/require-zod-form-validation": string;
|
|
551
|
-
"@sarj/ban-loose-type-guards-in-tests": string;
|
|
552
589
|
"@sarj/enforce-file-structure": string;
|
|
553
590
|
"@sarj/no-client-side-data-fetching": string;
|
|
554
591
|
"@sarj/prefer-server-actions": string;
|
|
@@ -570,6 +607,7 @@ declare const plugin: {
|
|
|
570
607
|
"@sarj/no-unsafe-mock-casting": string;
|
|
571
608
|
"@sarj/prefer-string-literal-union": string;
|
|
572
609
|
"@sarj/prefer-zod-enum": string;
|
|
610
|
+
"@sarj/prefer-zod-infer": string;
|
|
573
611
|
"@sarj/require-fetch-timeout": string;
|
|
574
612
|
"@sarj/no-silent-promise-catch": string;
|
|
575
613
|
"@sarj/prefer-constant-time-secret-compare": string;
|
|
@@ -590,9 +628,7 @@ declare const plugin: {
|
|
|
590
628
|
"@sarj/no-tautological-expect": string;
|
|
591
629
|
"@sarj/require-interface-for-injected-service": string;
|
|
592
630
|
"@sarj/prefer-non-nullable-collection": string;
|
|
593
|
-
"@sarj/no-implicit-attribute-access": string;
|
|
594
631
|
"@sarj/no-async-callback-in-waitfor": string;
|
|
595
|
-
"@sarj/prefer-setup-file-mocks": string;
|
|
596
632
|
};
|
|
597
633
|
};
|
|
598
634
|
strict: {
|
|
@@ -601,7 +637,6 @@ declare const plugin: {
|
|
|
601
637
|
"@sarj/zod-naming-convention": string;
|
|
602
638
|
"@sarj/require-assert-never": string;
|
|
603
639
|
"@sarj/require-zod-form-validation": string;
|
|
604
|
-
"@sarj/ban-loose-type-guards-in-tests": string;
|
|
605
640
|
"@sarj/enforce-file-structure": string;
|
|
606
641
|
"@sarj/no-raw-env": string;
|
|
607
642
|
"@sarj/no-enum": string;
|
|
@@ -625,6 +660,7 @@ declare const plugin: {
|
|
|
625
660
|
"@sarj/no-unsafe-mock-casting": string;
|
|
626
661
|
"@sarj/prefer-string-literal-union": string;
|
|
627
662
|
"@sarj/prefer-zod-enum": string;
|
|
663
|
+
"@sarj/prefer-zod-infer": string;
|
|
628
664
|
"@sarj/require-fetch-timeout": string;
|
|
629
665
|
"@sarj/no-silent-promise-catch": string;
|
|
630
666
|
"@sarj/prefer-constant-time-secret-compare": string;
|
|
@@ -647,9 +683,7 @@ declare const plugin: {
|
|
|
647
683
|
"@sarj/no-tautological-expect": string;
|
|
648
684
|
"@sarj/require-interface-for-injected-service": string;
|
|
649
685
|
"@sarj/prefer-non-nullable-collection": string;
|
|
650
|
-
"@sarj/no-implicit-attribute-access": string;
|
|
651
686
|
"@sarj/no-async-callback-in-waitfor": string;
|
|
652
|
-
"@sarj/prefer-setup-file-mocks": string;
|
|
653
687
|
};
|
|
654
688
|
};
|
|
655
689
|
};
|