@sarj/eslint-plugin 6.1.0 → 7.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 +33 -6
- package/dist/index.cjs +6784 -6944
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +255 -460
- package/dist/index.d.ts +255 -460
- package/dist/index.js +6679 -6874
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dist/index.d.ts
CHANGED
|
@@ -1,27 +1,11 @@
|
|
|
1
1
|
import * as _typescript_eslint_utils_ts_eslint from '@typescript-eslint/utils/ts-eslint';
|
|
2
2
|
|
|
3
3
|
/**
|
|
4
|
-
* @fileoverview
|
|
5
|
-
* members' own names and types — the VOLUME arm of the comment family, judged
|
|
6
|
-
* once per TYPE rather than once per comment.
|
|
7
|
-
*
|
|
8
|
-
* interface SapCredentials {
|
|
9
|
-
* // Database host.
|
|
10
|
-
* host?: string;
|
|
11
|
-
* // Database host port.
|
|
12
|
-
* port?: number;
|
|
13
|
-
* // Database username.
|
|
14
|
-
* username?: string;
|
|
15
|
-
* }
|
|
16
|
-
*
|
|
17
|
-
* `jsdoc-restates-signature` needs every content word covered, so it deletes
|
|
18
|
-
* the first row and cannot touch the second. That is the right verdict for one
|
|
19
|
-
* line and the wrong one for ten, so the unit of judgement here is the type.
|
|
4
|
+
* @fileoverview no-type-member-comment-wall — an object type whose member comments mostly re-spell the members is a wall the reader pays for by the block.
|
|
20
5
|
*
|
|
21
6
|
* Examples: https://github.com/sarj-ai/standards/blob/main/packages/typescript/tests/rules/no-type-member-comment-wall.test.ts
|
|
22
7
|
* Evidence: https://github.com/sarj-ai/standards/blob/main/docs/rules/no-type-member-comment-wall.md
|
|
23
8
|
*/
|
|
24
|
-
|
|
25
9
|
/** Every threshold this rule applies; each is documented at `DEFAULTS`. */
|
|
26
10
|
interface RuleOptions$3 {
|
|
27
11
|
readonly minCommentedMembers: number;
|
|
@@ -31,47 +15,11 @@ interface RuleOptions$3 {
|
|
|
31
15
|
}
|
|
32
16
|
|
|
33
17
|
/**
|
|
34
|
-
* @fileoverview
|
|
35
|
-
* storage.
|
|
36
|
-
*
|
|
37
|
-
* Some features are stateless deliberately: they derive everything they need
|
|
38
|
-
* from reads against the systems of record (Slack, Linear, GitHub, a CRM) plus
|
|
39
|
-
* markers in the artefacts they themselves produced. The reason is operational
|
|
40
|
-
* — such a feature can be re-run and back-filled freely, whereas a private
|
|
41
|
-
* table or key/value namespace immediately diverges from what a human can
|
|
42
|
-
* actually see and audit in the system of record. Adding a store to one of
|
|
43
|
-
* these modules silently deletes that property, and nothing else in the
|
|
44
|
-
* toolchain notices.
|
|
45
|
-
*
|
|
46
|
-
* WHAT IT CATCHES, inside the configured modules only
|
|
47
|
-
* db.prepare(sql) // a SQL statement
|
|
48
|
-
* kv.put(key, value) // a key/value write
|
|
49
|
-
* kv.getWithMetadata(key) // a key/value read
|
|
50
|
-
*
|
|
51
|
-
* OPT-IN BY DESIGN
|
|
52
|
-
* `modules` defaults to an EMPTY list, which makes the rule a no-op. That is
|
|
53
|
-
* deliberate: the method names alone (`put`, `prepare`) carry no type
|
|
54
|
-
* information, so the rule is only meaningful — and only quiet enough to live
|
|
55
|
-
* in a shared preset — when it is pointed at the specific directories a team
|
|
56
|
-
* has declared stateless.
|
|
57
|
-
*
|
|
58
|
-
* "@sarj/no-storage-in-stateless-modules": ["error", {
|
|
59
|
-
* "modules": ["[\\\\/]engineer-digest[\\\\/]", "[\\\\/]digest[\\\\/]"]
|
|
60
|
-
* }]
|
|
61
|
-
*
|
|
62
|
-
* `modules` entries are regular-expression sources matched against the absolute
|
|
63
|
-
* filename. `methods` overrides the storage method names if a driver names
|
|
64
|
-
* things differently.
|
|
18
|
+
* @fileoverview no-storage-in-stateless-modules — private storage inside a module a team declared stateless diverges from the system of record, silently.
|
|
65
19
|
*
|
|
66
|
-
*
|
|
67
|
-
*
|
|
68
|
-
* - `.put()` with fewer than two arguments — a one-argument `put` is more
|
|
69
|
-
* often a builder or queue helper than a key/value write.
|
|
70
|
-
*
|
|
71
|
-
* If a feature genuinely cannot be expressed statelessly, that is a design
|
|
72
|
-
* conversation, not a disable comment.
|
|
20
|
+
* Examples: https://github.com/sarj-ai/standards/blob/main/packages/typescript/tests/rules/no-storage-in-stateless-modules.test.ts
|
|
21
|
+
* Evidence: https://github.com/sarj-ai/standards/blob/main/docs/rules/no-storage-in-stateless-modules.md
|
|
73
22
|
*/
|
|
74
|
-
|
|
75
23
|
interface RuleOptions$2 {
|
|
76
24
|
/** Regex sources matched against the filename. Empty means the rule is off. */
|
|
77
25
|
readonly modules?: readonly string[];
|
|
@@ -80,476 +28,336 @@ interface RuleOptions$2 {
|
|
|
80
28
|
}
|
|
81
29
|
|
|
82
30
|
/**
|
|
83
|
-
* @fileoverview
|
|
84
|
-
*
|
|
85
|
-
* A bare `fetch()` in a route handler, server action or component opts out of
|
|
86
|
-
* whatever the codebase's client layer provides — retry/backoff, timeouts,
|
|
87
|
-
* status handling, auth headers, structured log breadcrumbs. It is also the
|
|
88
|
-
* shape that cannot be stubbed in a test without monkey-patching global
|
|
89
|
-
* `fetch`, so the call site quietly becomes untestable.
|
|
90
|
-
*
|
|
91
|
-
* WHAT IT CATCHES
|
|
92
|
-
* fetch(url) // bare global
|
|
93
|
-
* globalThis.fetch(url) // explicit global receiver
|
|
94
|
-
* window.fetch(url)
|
|
95
|
-
*
|
|
96
|
-
* NOT FLAGGED
|
|
97
|
-
* - Files whose path matches one of the `allow` patterns. The defaults cover
|
|
98
|
-
* the conventions we have seen in practice — a `clients/` directory, a
|
|
99
|
-
* `*-client.ts` module, an `http-client.*` wrapper, an `api/` directory or
|
|
100
|
-
* `api.ts` / `*-api.ts` module — plus test files and codemod fixtures.
|
|
101
|
-
* - A method named `fetch` on some other receiver (`cache.fetch(k)`,
|
|
102
|
-
* `queryClient.fetch()`): only the global is HTTP.
|
|
103
|
-
* - A pre-signed upload/download URL transfer (`fetch(uploadUrl, ...)`,
|
|
104
|
-
* `fetch(file.downloadUrl)`). Those URLs are one-off storage handoffs,
|
|
105
|
-
* not calls to a first-party service API that belongs behind a client
|
|
106
|
-
* wrapper.
|
|
107
|
-
* - `new Request(...)` / `axios(...)` and friends. This rule is about the
|
|
108
|
-
* global `fetch`, not about every HTTP library.
|
|
109
|
-
*
|
|
110
|
-
* CONFIGURATION
|
|
111
|
-
* `allow` is a list of regular-expression sources matched against the absolute
|
|
112
|
-
* filename, so a repo that keeps its client layer somewhere else can say so
|
|
113
|
-
* rather than sprinkling disable comments:
|
|
114
|
-
*
|
|
115
|
-
* "@sarj/no-raw-fetch-outside-clients": ["error", {
|
|
116
|
-
* "allow": ["[\\\\/]lib[\\\\/]api[\\\\/]", "-gateway\\\\.ts$"]
|
|
117
|
-
* }]
|
|
31
|
+
* @fileoverview no-raw-fetch-outside-clients — a bare `fetch` outside the client layer opts out of retry, timeout and status handling, and cannot be stubbed.
|
|
118
32
|
*
|
|
119
|
-
*
|
|
120
|
-
* no
|
|
121
|
-
* shared `isTestFile` predicate — so a repo that overrides `allow` keeps its
|
|
122
|
-
* test tree exempt without having to remember the test patterns.
|
|
123
|
-
*
|
|
124
|
-
* CORPUS SWEEP (2220 files, zod / TanStack Query / react-router / swr /
|
|
125
|
-
* zustand, 2026-07): 96 raw hits. The defaults missed three path conventions
|
|
126
|
-
* that ARE the client layer, so the reports landed on the very modules the rule
|
|
127
|
-
* wants the `fetch` to live in:
|
|
128
|
-
* - `api.ts` / `api/` / `*-api.ts` — 15 hits, e.g.
|
|
129
|
-
* `query/examples/react/star-wars/src/api.ts:7`, a module that exists solely
|
|
130
|
-
* to own `getFilm`/`getPerson` HTTP calls. `api` is the same convention
|
|
131
|
-
* family as `clients/`, just the other common spelling.
|
|
132
|
-
* - Hyphenated test basenames (`*-test.ts` / `*-spec.ts`) — the default list
|
|
133
|
-
* only knew the dotted `*.test.ts` form, so react-router's entire suite
|
|
134
|
-
* (which names files `single-fetch-test.ts`) was unprotected.
|
|
135
|
-
* - `__testfixtures__/` — 8 hits from jscodeshift fixtures such as
|
|
136
|
-
* `query/packages/query-codemods/src/v5/remove-overloads/__testfixtures__/bug-reports.input.tsx`,
|
|
137
|
-
* which are input/output text for a codemod, not code that runs.
|
|
138
|
-
*
|
|
139
|
-
* SECOND SWEEP (25,508 deduped TS/TSX files across zod / trpc / dub /
|
|
140
|
-
* openstatus / formbricks / documenso / unkey / midday / papermark / cal.com /
|
|
141
|
-
* hono plus six first-party repos, 2026-07): 1,019 hits, 50 read in a seeded
|
|
142
|
-
* random sample — 24 true positives, 21 false positives, 5 arguable. At a 42%
|
|
143
|
-
* false-positive rate this was the loudest rule of the five audited, and the
|
|
144
|
-
* cause was the same one the first sweep found, just further along: the reports
|
|
145
|
-
* were landing ON the client layer, under names the `allow` list did not know.
|
|
146
|
-
*
|
|
147
|
-
* - **Vendor wrapper modules** — 147 findings. `*Service.ts`, `services/`,
|
|
148
|
-
* `connectors/` (16), `providers/` (12), `integrations/` (16),
|
|
149
|
-
* `notifications/<vendor>/` (29), `adapters/`, `*-fetcher.ts`. Every fetch
|
|
150
|
-
* in them is an absolute-URL call to ONE third-party origin — they ARE the
|
|
151
|
-
* module the rule wants the fetch to live in. Citable:
|
|
152
|
-
* `cal.com/packages/app-store/office365calendar/lib/CalendarService.ts:265`,
|
|
153
|
-
* `openstatus/packages/notifications/telegram/src/index.ts:81`,
|
|
154
|
-
* `formbricks/apps/web/lib/googleSheet/service.ts:164`.
|
|
155
|
-
* Recall cost: 0 of the 50 sampled true positives lived in such a path —
|
|
156
|
-
* every one was a `.tsx` component/page/modal or a React hook.
|
|
157
|
-
* - **Test-path drift** — 36 findings. The rule hand-rolled its own test-path
|
|
158
|
-
* list instead of using the shared `isTestFile`, so it missed `playwright/`
|
|
159
|
-
* (19) and the `.e2e.ts` basename. The single loudest file corpus-wide was
|
|
160
|
-
* `cal.com/apps/web/playwright/oauth-provider.e2e.ts` (16 findings). The
|
|
161
|
-
* sibling rule `require-fetch-timeout` had always used `isTestFile`; this
|
|
162
|
-
* was pure drift between two rules that see the same call sites.
|
|
163
|
-
* - **Asset / passthrough handoff** — see `isConstructedArgumentHandoff`.
|
|
164
|
-
*
|
|
165
|
-
* DELIBERATELY NOT GUARDED: restricting the rule to component/hook files. It
|
|
166
|
-
* would cut the residual false-positive rate from ~25% to ~4%, but costs ~80
|
|
167
|
-
* real positives in `.ts` background jobs (e.g.
|
|
168
|
-
* `papermark/lib/trigger/convert-pdf-direct.ts:332`).
|
|
169
|
-
*
|
|
170
|
-
* DELIBERATELY NOT ALLOWED: a `-provider.*` BASENAME, even though the
|
|
171
|
-
* `providers/` DIRECTORY is. In the corpus that basename is usually a React
|
|
172
|
-
* context or modal provider calling the app's own API —
|
|
173
|
-
* `dub/apps/web/ui/modals/modal-provider.tsx:134` is exactly the true-positive
|
|
174
|
-
* shape — and the two vendor files that carry it are already covered by
|
|
175
|
-
* `integrations/`.
|
|
33
|
+
* Examples: https://github.com/sarj-ai/standards/blob/main/packages/typescript/tests/rules/no-raw-fetch-outside-clients.test.ts
|
|
34
|
+
* Evidence: https://github.com/sarj-ai/standards/blob/main/docs/rules/no-raw-fetch-outside-clients.md
|
|
176
35
|
*/
|
|
177
|
-
|
|
178
36
|
interface RuleOptions$1 {
|
|
179
37
|
/** Regular-expression sources matched against the filename. */
|
|
180
38
|
readonly allow?: readonly string[];
|
|
181
39
|
}
|
|
182
40
|
|
|
183
41
|
/**
|
|
184
|
-
* @fileoverview
|
|
185
|
-
*
|
|
186
|
-
* `db.prepare(sql)` takes a STATIC statement plus `?` / `$1` placeholders bound
|
|
187
|
-
* through `.bind(...)`. Interpolating a value into the statement text bypasses
|
|
188
|
-
* the binding layer completely: that is SQL injection, and it also defeats the
|
|
189
|
-
* driver's prepared-statement cache, because every distinct value produces a
|
|
190
|
-
* distinct statement to compile. The shape is identical across Cloudflare D1,
|
|
191
|
-
* better-sqlite3 and node-postgres, so the rule is driver-agnostic.
|
|
42
|
+
* @fileoverview _logging — shared recognition of logging / error-reporting calls, so the catch rules and the secret rule cannot disagree.
|
|
192
43
|
*
|
|
193
|
-
*
|
|
194
|
-
* db.prepare(`select * from users where id = '${userId}'`)
|
|
195
|
-
* db.prepare("select * from users where id = '" + userId + "'")
|
|
196
|
-
* db.exec(`delete from sessions where token = '${token}'`)
|
|
197
|
-
*
|
|
198
|
-
* NOT FLAGGED
|
|
199
|
-
* - `${CONSTANT_CASE}` fragments. A module-level constant — the column-list
|
|
200
|
-
* constants several repos keep (`${CANDIDATE_COLS}`, `${TABLES.USERS}`) —
|
|
201
|
-
* is a compile-time value, not user input. Anything starting lowercase is
|
|
202
|
-
* treated as runtime data.
|
|
203
|
-
* - A template literal with no interpolations at all.
|
|
204
|
-
* - Tagged templates (`` sql`select ... ${id}` ``). A tag function receives the
|
|
205
|
-
* static strings and the values separately and is the parameterising
|
|
206
|
-
* mechanism, not a bypass of it.
|
|
207
|
-
* - `.prepare()` on something that is not a database. Requiring an
|
|
208
|
-
* interpolated runtime value keeps this rare in practice.
|
|
209
|
-
* - A statement text that contains no SQL data-statement keyword. `exec` and
|
|
210
|
-
* `query` are not SQL-specific names: a 5-repo sweep of real TypeScript
|
|
211
|
-
* (zod / TanStack Query / react-router / swr / zustand, 2,186 files) found
|
|
212
|
-
* 4/4 hits were `child_process.exec` building a SHELL command line —
|
|
213
|
-
* an `open <url>` at
|
|
214
|
-
* react-router/integration/helpers/playwright-fixture.ts:230 and an
|
|
215
|
-
* `npm view <pkg>@<version> version` at
|
|
216
|
-
* react-router/scripts/changes/publish.ts:111. Requiring the statement to
|
|
217
|
-
* actually read as SQL (`SELECT` / `INSERT INTO` / `UPDATE` / `DELETE FROM`
|
|
218
|
-
* / DDL / `PRAGMA` / a CTE head) takes that class to zero without touching
|
|
219
|
-
* any real injection: an interpolated statement with no SQL verb in it was
|
|
220
|
-
* never a SQL statement.
|
|
221
|
-
*
|
|
222
|
-
* CONFIGURATION
|
|
223
|
-
* `methods` is the list of statement-taking method names to inspect. Extend it
|
|
224
|
-
* for a driver that names things differently:
|
|
225
|
-
*
|
|
226
|
-
* "@sarj/no-dynamic-sql": ["error", { "methods": ["prepare", "exec", "raw"] }]
|
|
227
|
-
*
|
|
228
|
-
* Supplying `methods` REPLACES the defaults.
|
|
44
|
+
* Evidence: https://github.com/sarj-ai/standards/blob/main/docs/rules/_logging.md
|
|
229
45
|
*/
|
|
230
46
|
|
|
47
|
+
/** Shared `loggerNames` / `logFunctions` option shape. */
|
|
48
|
+
interface LoggingOptions {
|
|
49
|
+
readonly loggerNames?: readonly string[];
|
|
50
|
+
readonly logFunctions?: readonly string[];
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
/**
|
|
54
|
+
* @fileoverview no-dynamic-sql — a runtime value interpolated into statement text is SQL injection, and it defeats the prepared-statement cache.
|
|
55
|
+
*
|
|
56
|
+
* Examples: https://github.com/sarj-ai/standards/blob/main/packages/typescript/tests/rules/no-dynamic-sql.test.ts
|
|
57
|
+
* Evidence: https://github.com/sarj-ai/standards/blob/main/docs/rules/no-dynamic-sql.md
|
|
58
|
+
*/
|
|
231
59
|
interface RuleOptions {
|
|
232
60
|
/** Statement-taking method names to inspect. Replaces the defaults. */
|
|
233
61
|
readonly methods?: readonly string[];
|
|
234
62
|
}
|
|
235
63
|
|
|
236
64
|
/**
|
|
237
|
-
* @fileoverview
|
|
238
|
-
* Used by `no-log-only-catch`, `no-sentinel-return-on-catch` and
|
|
239
|
-
* `no-secret-in-log` so all three rules agree on what counts as "this call
|
|
240
|
-
* writes to a log sink" before deciding a catch silently swallows an error or a
|
|
241
|
-
* secret leaks.
|
|
242
|
-
*
|
|
243
|
-
* Two shapes are recognised:
|
|
65
|
+
* @fileoverview _renames — a renamed rule keeps its old name registered as a deprecated alias, because a name that simply vanishes reads as growth to a shrink-only baseline.
|
|
244
66
|
*
|
|
245
|
-
*
|
|
246
|
-
* logger RECEIVER: `console.error(...)`, `logger.warn(...)`,
|
|
247
|
-
* `this.logger.info(...)`, and builder/factory chains
|
|
248
|
-
* (`logger.bind({...}).info(...)`, `logging.getLogger(n).info(...)`).
|
|
249
|
-
* - **Free-function-shaped** — a project-declared logging function, e.g.
|
|
250
|
-
* `logEvent("pr_scan.failed", { repo, error })`. Structured loggers that are
|
|
251
|
-
* plain functions taking a meta object are the dominant real-world shape and
|
|
252
|
-
* have no logger receiver at all, so they are invisible to the receiver
|
|
253
|
-
* heuristic. Projects declare theirs via the shared `logFunctions` rule
|
|
254
|
-
* option; `loggerNames` extends the receiver set the same way.
|
|
255
|
-
*
|
|
256
|
-
* Both options are OFF by default (empty), so default behaviour is unchanged.
|
|
257
|
-
* Declaring them makes the catch rules stop reporting a correctly-logged
|
|
258
|
-
* degraded return AND makes `no-secret-in-log` start inspecting those calls —
|
|
259
|
-
* the second effect closes a real hole, since `logEvent("auth", { botToken })`
|
|
260
|
-
* was previously never examined.
|
|
67
|
+
* Evidence: https://github.com/sarj-ai/standards/blob/main/docs/rules/_renames.md
|
|
261
68
|
*/
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
readonly
|
|
266
|
-
readonly
|
|
267
|
-
}
|
|
69
|
+
declare const renamedRules: {
|
|
70
|
+
readonly "jsdoc-restates-signature": "no-restated-jsdoc";
|
|
71
|
+
readonly "no-async-callback-in-waitfor": "no-async-callback-in-wait-for";
|
|
72
|
+
readonly "strict-test-assertions": "prefer-whole-object-assertion";
|
|
73
|
+
readonly "trailing-value-narration": "no-trailing-value-narration";
|
|
74
|
+
};
|
|
268
75
|
|
|
269
76
|
declare const rules: {
|
|
270
77
|
"enforce-file-structure": _typescript_eslint_utils_ts_eslint.RuleModule<"importsFirst" | "useServerDirective", readonly [], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
|
|
271
78
|
name: string;
|
|
272
79
|
};
|
|
80
|
+
"no-async-callback-in-wait-for": _typescript_eslint_utils_ts_eslint.RuleModule<"noAsyncCallbackInWaitFor", readonly [], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
|
|
81
|
+
name: string;
|
|
82
|
+
};
|
|
273
83
|
"no-client-side-data-fetching": _typescript_eslint_utils_ts_eslint.RuleModule<"noClientFetch", readonly [], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
|
|
274
84
|
name: string;
|
|
275
85
|
};
|
|
276
86
|
"no-comment-cruft": _typescript_eslint_utils_ts_eslint.RuleModule<"commentedOutCode" | "sectionBanner" | "fileHeaderPreamble" | "redundantNarration" | "untrackedTodo", readonly [], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
|
|
277
87
|
name: string;
|
|
278
88
|
};
|
|
279
|
-
"no-
|
|
280
|
-
ignoreFiles?: readonly string[];
|
|
281
|
-
}?], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
|
|
89
|
+
"no-conditional-in-test": _typescript_eslint_utils_ts_eslint.RuleModule<"noConditionalInTest", readonly [], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
|
|
282
90
|
name: string;
|
|
283
91
|
};
|
|
284
|
-
"no-
|
|
92
|
+
"no-cors-wildcard-with-credentials": _typescript_eslint_utils_ts_eslint.RuleModule<"corsWildcardWithCredentials", readonly [], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
|
|
285
93
|
name: string;
|
|
286
94
|
};
|
|
287
|
-
"no-
|
|
95
|
+
"no-dynamic-sql": _typescript_eslint_utils_ts_eslint.RuleModule<"dynamicSql", readonly [RuleOptions?], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
|
|
288
96
|
name: string;
|
|
289
97
|
};
|
|
290
|
-
"no-
|
|
98
|
+
"no-enum": _typescript_eslint_utils_ts_eslint.RuleModule<"noEnum", readonly [{
|
|
99
|
+
ignoreFiles?: readonly string[];
|
|
100
|
+
}?], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
|
|
291
101
|
name: string;
|
|
292
102
|
};
|
|
293
|
-
"no-
|
|
103
|
+
"no-fat-try-blocks": _typescript_eslint_utils_ts_eslint.RuleModule<"fatTryBlock", readonly [], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
|
|
294
104
|
name: string;
|
|
295
105
|
};
|
|
296
|
-
"no-
|
|
106
|
+
"no-hand-rolled-sleep": _typescript_eslint_utils_ts_eslint.RuleModule<"handRolledSleep" | "handRolledTimeoutRace", readonly [{
|
|
107
|
+
allowIn?: readonly string[];
|
|
108
|
+
checkClientModules?: boolean;
|
|
109
|
+
}?], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
|
|
297
110
|
name: string;
|
|
298
111
|
};
|
|
299
|
-
"no-
|
|
112
|
+
"no-insecure-random-id": _typescript_eslint_utils_ts_eslint.RuleModule<"insecureRandomId", readonly [], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
|
|
300
113
|
name: string;
|
|
301
114
|
};
|
|
302
|
-
"no-
|
|
115
|
+
"no-json-stringify-error": _typescript_eslint_utils_ts_eslint.RuleModule<"noJsonStringifyError", readonly [], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
|
|
303
116
|
name: string;
|
|
304
117
|
};
|
|
305
|
-
"
|
|
118
|
+
"no-log-only-catch": _typescript_eslint_utils_ts_eslint.RuleModule<"noLogOnlyCatch" | "emptyCatch", readonly [LoggingOptions?], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
|
|
306
119
|
name: string;
|
|
307
120
|
};
|
|
308
|
-
"
|
|
121
|
+
"no-offset-pagination": _typescript_eslint_utils_ts_eslint.RuleModule<"noOffsetPagination", readonly [], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
|
|
309
122
|
name: string;
|
|
310
123
|
};
|
|
311
|
-
"
|
|
312
|
-
requireSemanticTokens?: boolean;
|
|
313
|
-
}?], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
|
|
124
|
+
"no-positional-tuple-return": _typescript_eslint_utils_ts_eslint.RuleModule<"noPositionalTupleReturn", readonly [], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
|
|
314
125
|
name: string;
|
|
315
126
|
};
|
|
316
|
-
"
|
|
127
|
+
"no-raw-env": _typescript_eslint_utils_ts_eslint.RuleModule<"noRawEnv", readonly [], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
|
|
317
128
|
name: string;
|
|
318
129
|
};
|
|
319
|
-
"
|
|
130
|
+
"no-raw-fetch-outside-clients": _typescript_eslint_utils_ts_eslint.RuleModule<"rawFetch", readonly [RuleOptions$1?], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
|
|
320
131
|
name: string;
|
|
321
132
|
};
|
|
322
|
-
"
|
|
133
|
+
"no-repeated-string-literal": _typescript_eslint_utils_ts_eslint.RuleModule<"noRepeatedStringLiteral", readonly [], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
|
|
323
134
|
name: string;
|
|
324
135
|
};
|
|
325
|
-
"
|
|
326
|
-
convention?: "prefix" | "suffix" | "either";
|
|
327
|
-
}?], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
|
|
136
|
+
"no-restated-comment": _typescript_eslint_utils_ts_eslint.RuleModule<"restatesLineBelow", readonly [], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
|
|
328
137
|
name: string;
|
|
329
138
|
};
|
|
330
|
-
"no-
|
|
139
|
+
"no-restated-jsdoc": _typescript_eslint_utils_ts_eslint.RuleModule<"restatesSignature" | "deleteBlock", readonly [], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
|
|
331
140
|
name: string;
|
|
332
141
|
};
|
|
333
|
-
"no-
|
|
142
|
+
"no-secret-in-log": _typescript_eslint_utils_ts_eslint.RuleModule<"noSecretInLog" | "noRawBodyInLog", readonly [LoggingOptions?], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
|
|
334
143
|
name: string;
|
|
335
144
|
};
|
|
336
|
-
"no-
|
|
145
|
+
"no-select-star": _typescript_eslint_utils_ts_eslint.RuleModule<"noSelectStar", readonly [], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
|
|
337
146
|
name: string;
|
|
338
147
|
};
|
|
339
|
-
"no-
|
|
148
|
+
"no-sentinel-return-on-catch": _typescript_eslint_utils_ts_eslint.RuleModule<"noSentinelReturn", readonly [LoggingOptions?], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
|
|
340
149
|
name: string;
|
|
341
150
|
};
|
|
342
|
-
"
|
|
343
|
-
ignoreFields?: readonly string[];
|
|
344
|
-
}?], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
|
|
151
|
+
"no-silent-promise-catch": _typescript_eslint_utils_ts_eslint.RuleModule<"silentCatch", readonly [], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
|
|
345
152
|
name: string;
|
|
346
153
|
};
|
|
347
|
-
"
|
|
154
|
+
"no-sleep-in-test-body": _typescript_eslint_utils_ts_eslint.RuleModule<"noSleepInTestBody", readonly [], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
|
|
348
155
|
name: string;
|
|
349
156
|
};
|
|
350
|
-
"
|
|
351
|
-
ignoreTypeNames?: readonly string[];
|
|
352
|
-
requireIdenticalShape?: boolean;
|
|
353
|
-
}?], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
|
|
157
|
+
"no-storage-in-stateless-modules": _typescript_eslint_utils_ts_eslint.RuleModule<"storageInStatelessModule", readonly [RuleOptions$2?], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
|
|
354
158
|
name: string;
|
|
355
159
|
};
|
|
356
|
-
"no-
|
|
160
|
+
"no-string-concat-in-loop": _typescript_eslint_utils_ts_eslint.RuleModule<"noStringConcatInLoop", readonly [], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
|
|
357
161
|
name: string;
|
|
358
162
|
};
|
|
359
|
-
"
|
|
360
|
-
allowIn?: readonly string[];
|
|
361
|
-
}?], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
|
|
163
|
+
"no-tautological-expect": _typescript_eslint_utils_ts_eslint.RuleModule<"tautologicalComparison" | "tautologicalMatcher", readonly [], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
|
|
362
164
|
name: string;
|
|
363
165
|
};
|
|
364
|
-
"no-
|
|
166
|
+
"no-trailing-value-narration": _typescript_eslint_utils_ts_eslint.RuleModule<"narratesValue", readonly [], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
|
|
365
167
|
name: string;
|
|
366
168
|
};
|
|
367
|
-
"no-
|
|
169
|
+
"no-type-member-comment-wall": _typescript_eslint_utils_ts_eslint.RuleModule<"commentWall", readonly [Partial<RuleOptions$3>?], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
|
|
368
170
|
name: string;
|
|
369
171
|
};
|
|
370
|
-
"no-
|
|
172
|
+
"no-unnecessary-use-client": _typescript_eslint_utils_ts_eslint.RuleModule<"unnecessaryUseClient", readonly [], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
|
|
371
173
|
name: string;
|
|
372
174
|
};
|
|
373
|
-
"no-
|
|
175
|
+
"no-unsafe-mock-casting": _typescript_eslint_utils_ts_eslint.RuleModule<"unsafeMockCast", [], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
|
|
374
176
|
name: string;
|
|
375
177
|
};
|
|
376
|
-
"no-
|
|
178
|
+
"no-zod-native-enum": _typescript_eslint_utils_ts_eslint.RuleModule<"nativeEnum" | "enumOfTsEnum", readonly [], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
|
|
377
179
|
name: string;
|
|
378
180
|
};
|
|
379
|
-
"
|
|
380
|
-
allowIn?: readonly string[];
|
|
381
|
-
checkClientModules?: boolean;
|
|
382
|
-
}?], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
|
|
181
|
+
"prefer-constant-time-secret-compare": _typescript_eslint_utils_ts_eslint.RuleModule<"preferConstantTimeSecretCompare", readonly [], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
|
|
383
182
|
name: string;
|
|
384
183
|
};
|
|
385
|
-
"
|
|
184
|
+
"prefer-discriminated-union": _typescript_eslint_utils_ts_eslint.RuleModule<"preferDiscriminatedUnion", readonly [], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
|
|
386
185
|
name: string;
|
|
387
186
|
};
|
|
388
|
-
"prefer-
|
|
187
|
+
"prefer-module-level-constant": _typescript_eslint_utils_ts_eslint.RuleModule<"hoistCollection" | "hoistRegex", readonly [{
|
|
188
|
+
minElements?: number;
|
|
189
|
+
checkRegex?: boolean;
|
|
190
|
+
ignoreTestFiles?: boolean;
|
|
191
|
+
}?], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
|
|
389
192
|
name: string;
|
|
390
193
|
};
|
|
391
|
-
"
|
|
194
|
+
"prefer-module-level-schema": _typescript_eslint_utils_ts_eslint.RuleModule<"hoistSchema", readonly [{
|
|
195
|
+
factories?: readonly string[];
|
|
196
|
+
ignoreTestFiles?: boolean;
|
|
197
|
+
minProperties?: number;
|
|
198
|
+
}?], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
|
|
392
199
|
name: string;
|
|
393
200
|
};
|
|
394
|
-
"
|
|
201
|
+
"prefer-non-nullable-collection": _typescript_eslint_utils_ts_eslint.RuleModule<"preferNonNullableCollection", readonly [], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
|
|
395
202
|
name: string;
|
|
396
203
|
};
|
|
397
|
-
"
|
|
204
|
+
"prefer-schema-for-api-payload": _typescript_eslint_utils_ts_eslint.RuleModule<"unparsedJsonAccess", readonly [], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
|
|
398
205
|
name: string;
|
|
399
206
|
};
|
|
400
|
-
"
|
|
207
|
+
"prefer-semantic-colors": _typescript_eslint_utils_ts_eslint.RuleModule<"rawPalette" | "arbitraryColor" | "inlineColor", readonly [{
|
|
208
|
+
requireSemanticTokens?: boolean;
|
|
209
|
+
}?], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
|
|
401
210
|
name: string;
|
|
402
211
|
};
|
|
403
|
-
"
|
|
212
|
+
"prefer-server-actions": _typescript_eslint_utils_ts_eslint.RuleModule<"preferServerAction", readonly [], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
|
|
404
213
|
name: string;
|
|
405
214
|
};
|
|
406
|
-
"prefer-
|
|
407
|
-
|
|
408
|
-
checkRegex?: boolean;
|
|
409
|
-
ignoreTestFiles?: boolean;
|
|
215
|
+
"prefer-string-literal-union": _typescript_eslint_utils_ts_eslint.RuleModule<"bareChoiceField" | "comparisonCluster", readonly [{
|
|
216
|
+
ignoreFields?: readonly string[];
|
|
410
217
|
}?], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
|
|
411
218
|
name: string;
|
|
412
219
|
};
|
|
413
|
-
"
|
|
220
|
+
"prefer-whole-object-assertion": _typescript_eslint_utils_ts_eslint.RuleModule<"combineAssertions" | "assertArrayOnce", readonly [], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
|
|
414
221
|
name: string;
|
|
415
222
|
};
|
|
416
|
-
"
|
|
223
|
+
"prefer-zod-enum": _typescript_eslint_utils_ts_eslint.RuleModule<"preferEnum", readonly [], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
|
|
417
224
|
name: string;
|
|
418
225
|
};
|
|
419
|
-
"
|
|
226
|
+
"prefer-zod-infer": _typescript_eslint_utils_ts_eslint.RuleModule<"handWrittenTwin", readonly [{
|
|
227
|
+
ignoreTypeNames?: readonly string[];
|
|
228
|
+
requireIdenticalShape?: boolean;
|
|
229
|
+
}?], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
|
|
420
230
|
name: string;
|
|
421
231
|
};
|
|
422
|
-
"
|
|
232
|
+
"require-assert-never": _typescript_eslint_utils_ts_eslint.RuleModule<"missingAssertNever", readonly [], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
|
|
423
233
|
name: string;
|
|
424
234
|
};
|
|
425
|
-
"
|
|
235
|
+
"require-fetch-timeout": _typescript_eslint_utils_ts_eslint.RuleModule<"missingSignal", readonly [{
|
|
236
|
+
allowIn?: readonly string[];
|
|
237
|
+
}?], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
|
|
426
238
|
name: string;
|
|
427
239
|
};
|
|
428
240
|
"require-interface-for-injected-service": _typescript_eslint_utils_ts_eslint.RuleModule<"requireInterface", readonly [], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
|
|
429
241
|
name: string;
|
|
430
242
|
};
|
|
431
|
-
"
|
|
432
|
-
name: string;
|
|
433
|
-
};
|
|
434
|
-
"prefer-non-nullable-collection": _typescript_eslint_utils_ts_eslint.RuleModule<"preferNonNullableCollection", readonly [], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
|
|
243
|
+
"require-zod-form-validation": _typescript_eslint_utils_ts_eslint.RuleModule<"missingZodValidation", readonly [], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
|
|
435
244
|
name: string;
|
|
436
245
|
};
|
|
437
|
-
"
|
|
246
|
+
"store-insert-requires-on-conflict": _typescript_eslint_utils_ts_eslint.RuleModule<"storeInsertRequiresOnConflict", readonly [], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
|
|
438
247
|
name: string;
|
|
439
248
|
};
|
|
440
|
-
"
|
|
441
|
-
|
|
442
|
-
ignoreTestFiles?: boolean;
|
|
443
|
-
minProperties?: number;
|
|
249
|
+
"zod-naming-convention": _typescript_eslint_utils_ts_eslint.RuleModule<"zPrefix" | "schemaSuffix" | "zodSchemaName", readonly [{
|
|
250
|
+
convention?: "prefix" | "suffix" | "either";
|
|
444
251
|
}?], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
|
|
445
252
|
name: string;
|
|
446
253
|
};
|
|
447
254
|
};
|
|
255
|
+
type RuleModule = (typeof rules)[keyof typeof rules];
|
|
448
256
|
declare const recommendedRules: {
|
|
449
|
-
readonly "@sarj/zod-naming-convention": "warn";
|
|
450
|
-
readonly "@sarj/require-assert-never": "error";
|
|
451
|
-
readonly "@sarj/require-zod-form-validation": "error";
|
|
452
257
|
readonly "@sarj/enforce-file-structure": "warn";
|
|
258
|
+
readonly "@sarj/no-async-callback-in-wait-for": "warn";
|
|
453
259
|
readonly "@sarj/no-client-side-data-fetching": "warn";
|
|
454
|
-
readonly "@sarj/
|
|
455
|
-
readonly "@sarj/no-
|
|
456
|
-
readonly "@sarj/
|
|
457
|
-
readonly "@sarj/no-
|
|
458
|
-
readonly "@sarj/no-
|
|
260
|
+
readonly "@sarj/no-comment-cruft": "warn";
|
|
261
|
+
readonly "@sarj/no-conditional-in-test": "warn";
|
|
262
|
+
readonly "@sarj/no-cors-wildcard-with-credentials": "warn";
|
|
263
|
+
readonly "@sarj/no-dynamic-sql": "warn";
|
|
264
|
+
readonly "@sarj/no-fat-try-blocks": "warn";
|
|
265
|
+
readonly "@sarj/no-hand-rolled-sleep": "warn";
|
|
459
266
|
readonly "@sarj/no-insecure-random-id": "warn";
|
|
460
267
|
readonly "@sarj/no-json-stringify-error": "warn";
|
|
268
|
+
readonly "@sarj/no-log-only-catch": "warn";
|
|
269
|
+
readonly "@sarj/no-offset-pagination": "warn";
|
|
270
|
+
readonly "@sarj/no-positional-tuple-return": "warn";
|
|
271
|
+
readonly "@sarj/no-repeated-string-literal": "warn";
|
|
272
|
+
readonly "@sarj/no-restated-comment": "warn";
|
|
273
|
+
readonly "@sarj/no-restated-jsdoc": "warn";
|
|
274
|
+
readonly "@sarj/no-secret-in-log": "warn";
|
|
275
|
+
readonly "@sarj/no-select-star": "warn";
|
|
276
|
+
readonly "@sarj/no-sentinel-return-on-catch": "warn";
|
|
277
|
+
readonly "@sarj/no-silent-promise-catch": "warn";
|
|
278
|
+
readonly "@sarj/no-sleep-in-test-body": "warn";
|
|
461
279
|
readonly "@sarj/no-string-concat-in-loop": "warn";
|
|
280
|
+
readonly "@sarj/no-tautological-expect": "warn";
|
|
281
|
+
readonly "@sarj/no-trailing-value-narration": "warn";
|
|
282
|
+
readonly "@sarj/no-type-member-comment-wall": "warn";
|
|
283
|
+
readonly "@sarj/no-unnecessary-use-client": "warn";
|
|
284
|
+
readonly "@sarj/no-unsafe-mock-casting": "warn";
|
|
285
|
+
readonly "@sarj/no-zod-native-enum": "warn";
|
|
286
|
+
readonly "@sarj/prefer-constant-time-secret-compare": "error";
|
|
462
287
|
readonly "@sarj/prefer-discriminated-union": "warn";
|
|
463
|
-
readonly "@sarj/
|
|
288
|
+
readonly "@sarj/prefer-module-level-constant": "warn";
|
|
289
|
+
readonly "@sarj/prefer-module-level-schema": "warn";
|
|
290
|
+
readonly "@sarj/prefer-non-nullable-collection": "warn";
|
|
291
|
+
readonly "@sarj/prefer-schema-for-api-payload": "warn";
|
|
464
292
|
readonly "@sarj/prefer-semantic-colors": readonly ["warn", {
|
|
465
293
|
readonly requireSemanticTokens: true;
|
|
466
294
|
}];
|
|
467
|
-
readonly "@sarj/
|
|
468
|
-
readonly "@sarj/no-cors-wildcard-with-credentials": "warn";
|
|
469
|
-
readonly "@sarj/no-secret-in-log": "warn";
|
|
470
|
-
readonly "@sarj/no-unsafe-mock-casting": "warn";
|
|
295
|
+
readonly "@sarj/prefer-server-actions": "warn";
|
|
471
296
|
readonly "@sarj/prefer-string-literal-union": "warn";
|
|
297
|
+
readonly "@sarj/prefer-whole-object-assertion": "warn";
|
|
472
298
|
readonly "@sarj/prefer-zod-enum": "warn";
|
|
473
299
|
readonly "@sarj/prefer-zod-infer": "warn";
|
|
300
|
+
readonly "@sarj/require-assert-never": "error";
|
|
474
301
|
readonly "@sarj/require-fetch-timeout": "warn";
|
|
475
|
-
readonly "@sarj/no-silent-promise-catch": "warn";
|
|
476
|
-
readonly "@sarj/prefer-constant-time-secret-compare": "error";
|
|
477
|
-
readonly "@sarj/store-insert-requires-on-conflict": "warn";
|
|
478
|
-
readonly "@sarj/no-offset-pagination": "warn";
|
|
479
|
-
readonly "@sarj/no-select-star": "warn";
|
|
480
|
-
readonly "@sarj/no-hand-rolled-sleep": "warn";
|
|
481
|
-
readonly "@sarj/no-sleep-in-test-body": "warn";
|
|
482
|
-
readonly "@sarj/no-conditional-in-test": "warn";
|
|
483
|
-
readonly "@sarj/no-repeated-string-literal": "warn";
|
|
484
|
-
readonly "@sarj/no-positional-tuple-return": "warn";
|
|
485
|
-
readonly "@sarj/no-dynamic-sql": "warn";
|
|
486
|
-
readonly "@sarj/no-zod-native-enum": "warn";
|
|
487
|
-
readonly "@sarj/prefer-module-level-constant": "warn";
|
|
488
|
-
readonly "@sarj/no-restated-comment": "warn";
|
|
489
|
-
readonly "@sarj/jsdoc-restates-signature": "warn";
|
|
490
|
-
readonly "@sarj/trailing-value-narration": "warn";
|
|
491
|
-
readonly "@sarj/no-type-member-comment-wall": "warn";
|
|
492
|
-
readonly "@sarj/no-tautological-expect": "warn";
|
|
493
302
|
readonly "@sarj/require-interface-for-injected-service": "warn";
|
|
494
|
-
readonly "@sarj/
|
|
495
|
-
readonly "@sarj/
|
|
496
|
-
readonly "@sarj/
|
|
497
|
-
readonly "@sarj/strict-test-assertions": "warn";
|
|
303
|
+
readonly "@sarj/require-zod-form-validation": "error";
|
|
304
|
+
readonly "@sarj/store-insert-requires-on-conflict": "warn";
|
|
305
|
+
readonly "@sarj/zod-naming-convention": "warn";
|
|
498
306
|
};
|
|
499
307
|
declare const strictRules: {
|
|
500
|
-
readonly "@sarj/zod-naming-convention": "error";
|
|
501
|
-
readonly "@sarj/require-assert-never": "error";
|
|
502
|
-
readonly "@sarj/require-zod-form-validation": "error";
|
|
503
308
|
readonly "@sarj/enforce-file-structure": "error";
|
|
504
|
-
readonly "@sarj/no-
|
|
505
|
-
readonly "@sarj/no-enum": "error";
|
|
309
|
+
readonly "@sarj/no-async-callback-in-wait-for": "error";
|
|
506
310
|
readonly "@sarj/no-client-side-data-fetching": "error";
|
|
507
|
-
readonly "@sarj/
|
|
508
|
-
readonly "@sarj/no-
|
|
509
|
-
readonly "@sarj/
|
|
510
|
-
readonly "@sarj/no-
|
|
511
|
-
readonly "@sarj/no-
|
|
311
|
+
readonly "@sarj/no-comment-cruft": "error";
|
|
312
|
+
readonly "@sarj/no-conditional-in-test": "error";
|
|
313
|
+
readonly "@sarj/no-cors-wildcard-with-credentials": "error";
|
|
314
|
+
readonly "@sarj/no-dynamic-sql": "error";
|
|
315
|
+
readonly "@sarj/no-enum": "error";
|
|
316
|
+
readonly "@sarj/no-fat-try-blocks": "error";
|
|
317
|
+
readonly "@sarj/no-hand-rolled-sleep": "error";
|
|
512
318
|
readonly "@sarj/no-insecure-random-id": "error";
|
|
513
319
|
readonly "@sarj/no-json-stringify-error": "error";
|
|
320
|
+
readonly "@sarj/no-log-only-catch": "error";
|
|
321
|
+
readonly "@sarj/no-offset-pagination": "error";
|
|
322
|
+
readonly "@sarj/no-positional-tuple-return": "error";
|
|
323
|
+
readonly "@sarj/no-raw-env": "error";
|
|
324
|
+
readonly "@sarj/no-raw-fetch-outside-clients": "error";
|
|
325
|
+
readonly "@sarj/no-repeated-string-literal": "error";
|
|
326
|
+
readonly "@sarj/no-restated-comment": "error";
|
|
327
|
+
readonly "@sarj/no-restated-jsdoc": "error";
|
|
328
|
+
readonly "@sarj/no-secret-in-log": "error";
|
|
329
|
+
readonly "@sarj/no-select-star": "error";
|
|
330
|
+
readonly "@sarj/no-sentinel-return-on-catch": "error";
|
|
331
|
+
readonly "@sarj/no-silent-promise-catch": "error";
|
|
332
|
+
readonly "@sarj/no-sleep-in-test-body": "error";
|
|
333
|
+
readonly "@sarj/no-storage-in-stateless-modules": "error";
|
|
514
334
|
readonly "@sarj/no-string-concat-in-loop": "error";
|
|
335
|
+
readonly "@sarj/no-tautological-expect": "error";
|
|
336
|
+
readonly "@sarj/no-trailing-value-narration": "error";
|
|
337
|
+
readonly "@sarj/no-type-member-comment-wall": "error";
|
|
338
|
+
readonly "@sarj/no-unnecessary-use-client": "error";
|
|
339
|
+
readonly "@sarj/no-unsafe-mock-casting": "error";
|
|
340
|
+
readonly "@sarj/no-zod-native-enum": "error";
|
|
341
|
+
readonly "@sarj/prefer-constant-time-secret-compare": "error";
|
|
515
342
|
readonly "@sarj/prefer-discriminated-union": "error";
|
|
516
|
-
readonly "@sarj/
|
|
343
|
+
readonly "@sarj/prefer-module-level-constant": "error";
|
|
344
|
+
readonly "@sarj/prefer-module-level-schema": "error";
|
|
345
|
+
readonly "@sarj/prefer-non-nullable-collection": "error";
|
|
346
|
+
readonly "@sarj/prefer-schema-for-api-payload": "error";
|
|
517
347
|
readonly "@sarj/prefer-semantic-colors": readonly ["error", {
|
|
518
348
|
readonly requireSemanticTokens: true;
|
|
519
349
|
}];
|
|
520
|
-
readonly "@sarj/
|
|
521
|
-
readonly "@sarj/no-cors-wildcard-with-credentials": "error";
|
|
522
|
-
readonly "@sarj/no-secret-in-log": "error";
|
|
523
|
-
readonly "@sarj/no-unsafe-mock-casting": "error";
|
|
350
|
+
readonly "@sarj/prefer-server-actions": "error";
|
|
524
351
|
readonly "@sarj/prefer-string-literal-union": "error";
|
|
352
|
+
readonly "@sarj/prefer-whole-object-assertion": "error";
|
|
525
353
|
readonly "@sarj/prefer-zod-enum": "error";
|
|
526
354
|
readonly "@sarj/prefer-zod-infer": "error";
|
|
355
|
+
readonly "@sarj/require-assert-never": "error";
|
|
527
356
|
readonly "@sarj/require-fetch-timeout": "error";
|
|
528
|
-
readonly "@sarj/no-silent-promise-catch": "error";
|
|
529
|
-
readonly "@sarj/prefer-constant-time-secret-compare": "error";
|
|
530
|
-
readonly "@sarj/store-insert-requires-on-conflict": "error";
|
|
531
|
-
readonly "@sarj/no-offset-pagination": "error";
|
|
532
|
-
readonly "@sarj/no-select-star": "error";
|
|
533
|
-
readonly "@sarj/no-hand-rolled-sleep": "error";
|
|
534
|
-
readonly "@sarj/no-sleep-in-test-body": "error";
|
|
535
|
-
readonly "@sarj/no-conditional-in-test": "error";
|
|
536
|
-
readonly "@sarj/no-repeated-string-literal": "error";
|
|
537
|
-
readonly "@sarj/no-positional-tuple-return": "error";
|
|
538
|
-
readonly "@sarj/no-dynamic-sql": "error";
|
|
539
|
-
readonly "@sarj/no-raw-fetch-outside-clients": "error";
|
|
540
|
-
readonly "@sarj/no-storage-in-stateless-modules": "error";
|
|
541
|
-
readonly "@sarj/no-zod-native-enum": "error";
|
|
542
|
-
readonly "@sarj/prefer-module-level-constant": "error";
|
|
543
|
-
readonly "@sarj/no-restated-comment": "error";
|
|
544
|
-
readonly "@sarj/jsdoc-restates-signature": "error";
|
|
545
|
-
readonly "@sarj/trailing-value-narration": "error";
|
|
546
|
-
readonly "@sarj/no-type-member-comment-wall": "error";
|
|
547
|
-
readonly "@sarj/no-tautological-expect": "error";
|
|
548
357
|
readonly "@sarj/require-interface-for-injected-service": "error";
|
|
549
|
-
readonly "@sarj/
|
|
550
|
-
readonly "@sarj/
|
|
551
|
-
readonly "@sarj/
|
|
552
|
-
readonly "@sarj/strict-test-assertions": "error";
|
|
358
|
+
readonly "@sarj/require-zod-form-validation": "error";
|
|
359
|
+
readonly "@sarj/store-insert-requires-on-conflict": "error";
|
|
360
|
+
readonly "@sarj/zod-naming-convention": "error";
|
|
553
361
|
};
|
|
554
362
|
type FlatPreset = {
|
|
555
363
|
readonly name: string;
|
|
@@ -557,207 +365,194 @@ type FlatPreset = {
|
|
|
557
365
|
readonly rules: Record<string, unknown>;
|
|
558
366
|
};
|
|
559
367
|
/**
|
|
560
|
-
* The presets, as FLAT config objects
|
|
561
|
-
*
|
|
562
|
-
*
|
|
563
|
-
* rejects that outright:
|
|
564
|
-
*
|
|
565
|
-
* Config (unnamed): Key "plugins": This appears to be in eslintrc format
|
|
566
|
-
* (array of strings) rather than flat config format (object).
|
|
567
|
-
*
|
|
568
|
-
* So `sarj.configs.strict`, the "just extend the plugin, do not copy the file"
|
|
569
|
-
* path, threw for anyone who tried it, and copying `eslint.strict.mjs` and
|
|
570
|
-
* editing the copy was the only thing that worked -- exactly the vendoring
|
|
571
|
-
* these presets exist to prevent. `plugins` is now the object form flat config
|
|
572
|
-
* wants, so both presets go straight into an `eslint.config.mjs` array (no
|
|
573
|
-
* spread):
|
|
574
|
-
*
|
|
575
|
-
* import sarj from "@sarj/eslint-plugin";
|
|
576
|
-
* export default [sarj.configs.strict];
|
|
577
|
-
*
|
|
578
|
-
* Neither preset sets `files` or a parser. They carry rules and nothing else,
|
|
579
|
-
* so they compose with whatever a repo already has rather than narrowing it.
|
|
368
|
+
* The presets, as FLAT config objects — `plugins` is the object form, so both go
|
|
369
|
+
* straight into an `eslint.config.mjs` array with no spread. Neither sets
|
|
370
|
+
* `files` or a parser, so they compose with whatever a repo already has.
|
|
580
371
|
*/
|
|
581
372
|
declare const plugin: {
|
|
582
373
|
meta: {
|
|
583
374
|
readonly name: "@sarj/eslint-plugin";
|
|
584
|
-
readonly version: "
|
|
375
|
+
readonly version: "7.0.0";
|
|
585
376
|
};
|
|
586
377
|
rules: {
|
|
378
|
+
"jsdoc-restates-signature": RuleModule;
|
|
379
|
+
"no-async-callback-in-waitfor": RuleModule;
|
|
380
|
+
"strict-test-assertions": RuleModule;
|
|
381
|
+
"trailing-value-narration": RuleModule;
|
|
587
382
|
"enforce-file-structure": _typescript_eslint_utils_ts_eslint.RuleModule<"importsFirst" | "useServerDirective", readonly [], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
|
|
588
383
|
name: string;
|
|
589
384
|
};
|
|
385
|
+
"no-async-callback-in-wait-for": _typescript_eslint_utils_ts_eslint.RuleModule<"noAsyncCallbackInWaitFor", readonly [], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
|
|
386
|
+
name: string;
|
|
387
|
+
};
|
|
590
388
|
"no-client-side-data-fetching": _typescript_eslint_utils_ts_eslint.RuleModule<"noClientFetch", readonly [], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
|
|
591
389
|
name: string;
|
|
592
390
|
};
|
|
593
391
|
"no-comment-cruft": _typescript_eslint_utils_ts_eslint.RuleModule<"commentedOutCode" | "sectionBanner" | "fileHeaderPreamble" | "redundantNarration" | "untrackedTodo", readonly [], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
|
|
594
392
|
name: string;
|
|
595
393
|
};
|
|
596
|
-
"no-
|
|
597
|
-
ignoreFiles?: readonly string[];
|
|
598
|
-
}?], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
|
|
394
|
+
"no-conditional-in-test": _typescript_eslint_utils_ts_eslint.RuleModule<"noConditionalInTest", readonly [], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
|
|
599
395
|
name: string;
|
|
600
396
|
};
|
|
601
|
-
"no-
|
|
397
|
+
"no-cors-wildcard-with-credentials": _typescript_eslint_utils_ts_eslint.RuleModule<"corsWildcardWithCredentials", readonly [], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
|
|
602
398
|
name: string;
|
|
603
399
|
};
|
|
604
|
-
"no-
|
|
400
|
+
"no-dynamic-sql": _typescript_eslint_utils_ts_eslint.RuleModule<"dynamicSql", readonly [RuleOptions?], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
|
|
605
401
|
name: string;
|
|
606
402
|
};
|
|
607
|
-
"no-
|
|
403
|
+
"no-enum": _typescript_eslint_utils_ts_eslint.RuleModule<"noEnum", readonly [{
|
|
404
|
+
ignoreFiles?: readonly string[];
|
|
405
|
+
}?], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
|
|
608
406
|
name: string;
|
|
609
407
|
};
|
|
610
|
-
"no-
|
|
408
|
+
"no-fat-try-blocks": _typescript_eslint_utils_ts_eslint.RuleModule<"fatTryBlock", readonly [], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
|
|
611
409
|
name: string;
|
|
612
410
|
};
|
|
613
|
-
"no-
|
|
411
|
+
"no-hand-rolled-sleep": _typescript_eslint_utils_ts_eslint.RuleModule<"handRolledSleep" | "handRolledTimeoutRace", readonly [{
|
|
412
|
+
allowIn?: readonly string[];
|
|
413
|
+
checkClientModules?: boolean;
|
|
414
|
+
}?], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
|
|
614
415
|
name: string;
|
|
615
416
|
};
|
|
616
|
-
"no-
|
|
417
|
+
"no-insecure-random-id": _typescript_eslint_utils_ts_eslint.RuleModule<"insecureRandomId", readonly [], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
|
|
617
418
|
name: string;
|
|
618
419
|
};
|
|
619
|
-
"no-
|
|
420
|
+
"no-json-stringify-error": _typescript_eslint_utils_ts_eslint.RuleModule<"noJsonStringifyError", readonly [], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
|
|
620
421
|
name: string;
|
|
621
422
|
};
|
|
622
|
-
"
|
|
423
|
+
"no-log-only-catch": _typescript_eslint_utils_ts_eslint.RuleModule<"noLogOnlyCatch" | "emptyCatch", readonly [LoggingOptions?], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
|
|
623
424
|
name: string;
|
|
624
425
|
};
|
|
625
|
-
"
|
|
426
|
+
"no-offset-pagination": _typescript_eslint_utils_ts_eslint.RuleModule<"noOffsetPagination", readonly [], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
|
|
626
427
|
name: string;
|
|
627
428
|
};
|
|
628
|
-
"
|
|
629
|
-
requireSemanticTokens?: boolean;
|
|
630
|
-
}?], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
|
|
429
|
+
"no-positional-tuple-return": _typescript_eslint_utils_ts_eslint.RuleModule<"noPositionalTupleReturn", readonly [], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
|
|
631
430
|
name: string;
|
|
632
431
|
};
|
|
633
|
-
"
|
|
432
|
+
"no-raw-env": _typescript_eslint_utils_ts_eslint.RuleModule<"noRawEnv", readonly [], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
|
|
634
433
|
name: string;
|
|
635
434
|
};
|
|
636
|
-
"
|
|
435
|
+
"no-raw-fetch-outside-clients": _typescript_eslint_utils_ts_eslint.RuleModule<"rawFetch", readonly [RuleOptions$1?], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
|
|
637
436
|
name: string;
|
|
638
437
|
};
|
|
639
|
-
"
|
|
438
|
+
"no-repeated-string-literal": _typescript_eslint_utils_ts_eslint.RuleModule<"noRepeatedStringLiteral", readonly [], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
|
|
640
439
|
name: string;
|
|
641
440
|
};
|
|
642
|
-
"
|
|
643
|
-
convention?: "prefix" | "suffix" | "either";
|
|
644
|
-
}?], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
|
|
441
|
+
"no-restated-comment": _typescript_eslint_utils_ts_eslint.RuleModule<"restatesLineBelow", readonly [], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
|
|
645
442
|
name: string;
|
|
646
443
|
};
|
|
647
|
-
"no-
|
|
444
|
+
"no-restated-jsdoc": _typescript_eslint_utils_ts_eslint.RuleModule<"restatesSignature" | "deleteBlock", readonly [], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
|
|
648
445
|
name: string;
|
|
649
446
|
};
|
|
650
|
-
"no-
|
|
447
|
+
"no-secret-in-log": _typescript_eslint_utils_ts_eslint.RuleModule<"noSecretInLog" | "noRawBodyInLog", readonly [LoggingOptions?], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
|
|
651
448
|
name: string;
|
|
652
449
|
};
|
|
653
|
-
"no-
|
|
450
|
+
"no-select-star": _typescript_eslint_utils_ts_eslint.RuleModule<"noSelectStar", readonly [], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
|
|
654
451
|
name: string;
|
|
655
452
|
};
|
|
656
|
-
"no-
|
|
453
|
+
"no-sentinel-return-on-catch": _typescript_eslint_utils_ts_eslint.RuleModule<"noSentinelReturn", readonly [LoggingOptions?], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
|
|
657
454
|
name: string;
|
|
658
455
|
};
|
|
659
|
-
"
|
|
660
|
-
ignoreFields?: readonly string[];
|
|
661
|
-
}?], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
|
|
456
|
+
"no-silent-promise-catch": _typescript_eslint_utils_ts_eslint.RuleModule<"silentCatch", readonly [], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
|
|
662
457
|
name: string;
|
|
663
458
|
};
|
|
664
|
-
"
|
|
459
|
+
"no-sleep-in-test-body": _typescript_eslint_utils_ts_eslint.RuleModule<"noSleepInTestBody", readonly [], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
|
|
665
460
|
name: string;
|
|
666
461
|
};
|
|
667
|
-
"
|
|
668
|
-
ignoreTypeNames?: readonly string[];
|
|
669
|
-
requireIdenticalShape?: boolean;
|
|
670
|
-
}?], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
|
|
462
|
+
"no-storage-in-stateless-modules": _typescript_eslint_utils_ts_eslint.RuleModule<"storageInStatelessModule", readonly [RuleOptions$2?], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
|
|
671
463
|
name: string;
|
|
672
464
|
};
|
|
673
|
-
"no-
|
|
465
|
+
"no-string-concat-in-loop": _typescript_eslint_utils_ts_eslint.RuleModule<"noStringConcatInLoop", readonly [], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
|
|
674
466
|
name: string;
|
|
675
467
|
};
|
|
676
|
-
"
|
|
677
|
-
allowIn?: readonly string[];
|
|
678
|
-
}?], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
|
|
468
|
+
"no-tautological-expect": _typescript_eslint_utils_ts_eslint.RuleModule<"tautologicalComparison" | "tautologicalMatcher", readonly [], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
|
|
679
469
|
name: string;
|
|
680
470
|
};
|
|
681
|
-
"no-
|
|
471
|
+
"no-trailing-value-narration": _typescript_eslint_utils_ts_eslint.RuleModule<"narratesValue", readonly [], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
|
|
682
472
|
name: string;
|
|
683
473
|
};
|
|
684
|
-
"no-
|
|
474
|
+
"no-type-member-comment-wall": _typescript_eslint_utils_ts_eslint.RuleModule<"commentWall", readonly [Partial<RuleOptions$3>?], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
|
|
685
475
|
name: string;
|
|
686
476
|
};
|
|
687
|
-
"no-
|
|
477
|
+
"no-unnecessary-use-client": _typescript_eslint_utils_ts_eslint.RuleModule<"unnecessaryUseClient", readonly [], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
|
|
688
478
|
name: string;
|
|
689
479
|
};
|
|
690
|
-
"no-
|
|
480
|
+
"no-unsafe-mock-casting": _typescript_eslint_utils_ts_eslint.RuleModule<"unsafeMockCast", [], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
|
|
691
481
|
name: string;
|
|
692
482
|
};
|
|
693
|
-
"no-
|
|
483
|
+
"no-zod-native-enum": _typescript_eslint_utils_ts_eslint.RuleModule<"nativeEnum" | "enumOfTsEnum", readonly [], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
|
|
694
484
|
name: string;
|
|
695
485
|
};
|
|
696
|
-
"
|
|
697
|
-
allowIn?: readonly string[];
|
|
698
|
-
checkClientModules?: boolean;
|
|
699
|
-
}?], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
|
|
486
|
+
"prefer-constant-time-secret-compare": _typescript_eslint_utils_ts_eslint.RuleModule<"preferConstantTimeSecretCompare", readonly [], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
|
|
700
487
|
name: string;
|
|
701
488
|
};
|
|
702
|
-
"
|
|
489
|
+
"prefer-discriminated-union": _typescript_eslint_utils_ts_eslint.RuleModule<"preferDiscriminatedUnion", readonly [], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
|
|
703
490
|
name: string;
|
|
704
491
|
};
|
|
705
|
-
"prefer-
|
|
492
|
+
"prefer-module-level-constant": _typescript_eslint_utils_ts_eslint.RuleModule<"hoistCollection" | "hoistRegex", readonly [{
|
|
493
|
+
minElements?: number;
|
|
494
|
+
checkRegex?: boolean;
|
|
495
|
+
ignoreTestFiles?: boolean;
|
|
496
|
+
}?], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
|
|
706
497
|
name: string;
|
|
707
498
|
};
|
|
708
|
-
"
|
|
499
|
+
"prefer-module-level-schema": _typescript_eslint_utils_ts_eslint.RuleModule<"hoistSchema", readonly [{
|
|
500
|
+
factories?: readonly string[];
|
|
501
|
+
ignoreTestFiles?: boolean;
|
|
502
|
+
minProperties?: number;
|
|
503
|
+
}?], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
|
|
709
504
|
name: string;
|
|
710
505
|
};
|
|
711
|
-
"
|
|
506
|
+
"prefer-non-nullable-collection": _typescript_eslint_utils_ts_eslint.RuleModule<"preferNonNullableCollection", readonly [], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
|
|
712
507
|
name: string;
|
|
713
508
|
};
|
|
714
|
-
"
|
|
509
|
+
"prefer-schema-for-api-payload": _typescript_eslint_utils_ts_eslint.RuleModule<"unparsedJsonAccess", readonly [], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
|
|
715
510
|
name: string;
|
|
716
511
|
};
|
|
717
|
-
"
|
|
512
|
+
"prefer-semantic-colors": _typescript_eslint_utils_ts_eslint.RuleModule<"rawPalette" | "arbitraryColor" | "inlineColor", readonly [{
|
|
513
|
+
requireSemanticTokens?: boolean;
|
|
514
|
+
}?], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
|
|
718
515
|
name: string;
|
|
719
516
|
};
|
|
720
|
-
"
|
|
517
|
+
"prefer-server-actions": _typescript_eslint_utils_ts_eslint.RuleModule<"preferServerAction", readonly [], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
|
|
721
518
|
name: string;
|
|
722
519
|
};
|
|
723
|
-
"prefer-
|
|
724
|
-
|
|
725
|
-
checkRegex?: boolean;
|
|
726
|
-
ignoreTestFiles?: boolean;
|
|
520
|
+
"prefer-string-literal-union": _typescript_eslint_utils_ts_eslint.RuleModule<"bareChoiceField" | "comparisonCluster", readonly [{
|
|
521
|
+
ignoreFields?: readonly string[];
|
|
727
522
|
}?], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
|
|
728
523
|
name: string;
|
|
729
524
|
};
|
|
730
|
-
"
|
|
525
|
+
"prefer-whole-object-assertion": _typescript_eslint_utils_ts_eslint.RuleModule<"combineAssertions" | "assertArrayOnce", readonly [], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
|
|
731
526
|
name: string;
|
|
732
527
|
};
|
|
733
|
-
"
|
|
528
|
+
"prefer-zod-enum": _typescript_eslint_utils_ts_eslint.RuleModule<"preferEnum", readonly [], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
|
|
734
529
|
name: string;
|
|
735
530
|
};
|
|
736
|
-
"
|
|
531
|
+
"prefer-zod-infer": _typescript_eslint_utils_ts_eslint.RuleModule<"handWrittenTwin", readonly [{
|
|
532
|
+
ignoreTypeNames?: readonly string[];
|
|
533
|
+
requireIdenticalShape?: boolean;
|
|
534
|
+
}?], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
|
|
737
535
|
name: string;
|
|
738
536
|
};
|
|
739
|
-
"
|
|
537
|
+
"require-assert-never": _typescript_eslint_utils_ts_eslint.RuleModule<"missingAssertNever", readonly [], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
|
|
740
538
|
name: string;
|
|
741
539
|
};
|
|
742
|
-
"
|
|
540
|
+
"require-fetch-timeout": _typescript_eslint_utils_ts_eslint.RuleModule<"missingSignal", readonly [{
|
|
541
|
+
allowIn?: readonly string[];
|
|
542
|
+
}?], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
|
|
743
543
|
name: string;
|
|
744
544
|
};
|
|
745
545
|
"require-interface-for-injected-service": _typescript_eslint_utils_ts_eslint.RuleModule<"requireInterface", readonly [], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
|
|
746
546
|
name: string;
|
|
747
547
|
};
|
|
748
|
-
"
|
|
749
|
-
name: string;
|
|
750
|
-
};
|
|
751
|
-
"prefer-non-nullable-collection": _typescript_eslint_utils_ts_eslint.RuleModule<"preferNonNullableCollection", readonly [], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
|
|
548
|
+
"require-zod-form-validation": _typescript_eslint_utils_ts_eslint.RuleModule<"missingZodValidation", readonly [], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
|
|
752
549
|
name: string;
|
|
753
550
|
};
|
|
754
|
-
"
|
|
551
|
+
"store-insert-requires-on-conflict": _typescript_eslint_utils_ts_eslint.RuleModule<"storeInsertRequiresOnConflict", readonly [], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
|
|
755
552
|
name: string;
|
|
756
553
|
};
|
|
757
|
-
"
|
|
758
|
-
|
|
759
|
-
ignoreTestFiles?: boolean;
|
|
760
|
-
minProperties?: number;
|
|
554
|
+
"zod-naming-convention": _typescript_eslint_utils_ts_eslint.RuleModule<"zPrefix" | "schemaSuffix" | "zodSchemaName", readonly [{
|
|
555
|
+
convention?: "prefix" | "suffix" | "either";
|
|
761
556
|
}?], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
|
|
762
557
|
name: string;
|
|
763
558
|
};
|
|
@@ -768,4 +563,4 @@ declare const plugin: {
|
|
|
768
563
|
};
|
|
769
564
|
};
|
|
770
565
|
|
|
771
|
-
export { plugin as default, recommendedRules, rules, strictRules };
|
|
566
|
+
export { plugin as default, recommendedRules, renamedRules, rules, strictRules };
|