@sarj/eslint-plugin 6.1.0 → 7.1.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 +34 -6
- package/dist/index.cjs +6905 -6919
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +264 -461
- package/dist/index.d.ts +264 -461
- package/dist/index.js +6898 -6947
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dist/index.d.cts
CHANGED
|
@@ -1,29 +1,13 @@
|
|
|
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.
|
|
4
|
+
* @fileoverview _comment-wall — the shared judgement behind the comment-VOLUME rules: a run of member comments that mostly re-spell their members is a wall.
|
|
7
5
|
*
|
|
8
|
-
*
|
|
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.
|
|
20
|
-
*
|
|
21
|
-
* Examples: https://github.com/sarj-ai/standards/blob/main/packages/typescript/tests/rules/no-type-member-comment-wall.test.ts
|
|
22
|
-
* Evidence: https://github.com/sarj-ai/standards/blob/main/docs/rules/no-type-member-comment-wall.md
|
|
6
|
+
* Evidence: https://github.com/sarj-ai/standards/blob/main/docs/rules/_comment-wall.md
|
|
23
7
|
*/
|
|
24
8
|
|
|
25
|
-
/** Every threshold
|
|
26
|
-
interface
|
|
9
|
+
/** Every threshold the wall rules apply; each is documented at `WALL_DEFAULTS`. */
|
|
10
|
+
interface WallOptions {
|
|
27
11
|
readonly minCommentedMembers: number;
|
|
28
12
|
readonly minCommentedRatio: number;
|
|
29
13
|
readonly minRestatedRatio: 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,341 @@ 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
|
};
|
|
273
|
-
"no-
|
|
80
|
+
"no-async-callback-in-wait-for": _typescript_eslint_utils_ts_eslint.RuleModule<"noAsyncCallbackInWaitFor", readonly [], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
|
|
274
81
|
name: string;
|
|
275
82
|
};
|
|
276
|
-
"no-
|
|
83
|
+
"no-client-side-data-fetching": _typescript_eslint_utils_ts_eslint.RuleModule<"noClientFetch", readonly [], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
|
|
277
84
|
name: string;
|
|
278
85
|
};
|
|
279
|
-
"no-
|
|
280
|
-
ignoreFiles?: readonly string[];
|
|
281
|
-
}?], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
|
|
86
|
+
"no-comment-cruft": _typescript_eslint_utils_ts_eslint.RuleModule<"commentedOutCode" | "sectionBanner" | "fileHeaderPreamble" | "redundantNarration" | "untrackedTodo", readonly [], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
|
|
282
87
|
name: string;
|
|
283
88
|
};
|
|
284
|
-
"no-
|
|
89
|
+
"no-conditional-in-test": _typescript_eslint_utils_ts_eslint.RuleModule<"noConditionalInTest", readonly [], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
|
|
285
90
|
name: string;
|
|
286
91
|
};
|
|
287
|
-
"no-
|
|
92
|
+
"no-cors-wildcard-with-credentials": _typescript_eslint_utils_ts_eslint.RuleModule<"corsWildcardWithCredentials", readonly [], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
|
|
288
93
|
name: string;
|
|
289
94
|
};
|
|
290
|
-
"no-
|
|
95
|
+
"no-dynamic-sql": _typescript_eslint_utils_ts_eslint.RuleModule<"dynamicSql", readonly [RuleOptions?], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
|
|
291
96
|
name: string;
|
|
292
97
|
};
|
|
293
|
-
"no-
|
|
98
|
+
"no-enum": _typescript_eslint_utils_ts_eslint.RuleModule<"noEnum", readonly [{
|
|
99
|
+
ignoreFiles?: readonly string[];
|
|
100
|
+
}?], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
|
|
294
101
|
name: string;
|
|
295
102
|
};
|
|
296
|
-
"no-
|
|
103
|
+
"no-fat-try-blocks": _typescript_eslint_utils_ts_eslint.RuleModule<"fatTryBlock", readonly [], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
|
|
297
104
|
name: string;
|
|
298
105
|
};
|
|
299
|
-
"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> & {
|
|
300
110
|
name: string;
|
|
301
111
|
};
|
|
302
|
-
"no-
|
|
112
|
+
"no-insecure-random-id": _typescript_eslint_utils_ts_eslint.RuleModule<"insecureRandomId", readonly [], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
|
|
303
113
|
name: string;
|
|
304
114
|
};
|
|
305
|
-
"
|
|
115
|
+
"no-json-stringify-error": _typescript_eslint_utils_ts_eslint.RuleModule<"noJsonStringifyError", readonly [], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
|
|
306
116
|
name: string;
|
|
307
117
|
};
|
|
308
|
-
"
|
|
118
|
+
"no-log-only-catch": _typescript_eslint_utils_ts_eslint.RuleModule<"noLogOnlyCatch" | "emptyCatch", readonly [LoggingOptions?], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
|
|
309
119
|
name: string;
|
|
310
120
|
};
|
|
311
|
-
"
|
|
312
|
-
requireSemanticTokens?: boolean;
|
|
313
|
-
}?], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
|
|
121
|
+
"no-offset-pagination": _typescript_eslint_utils_ts_eslint.RuleModule<"noOffsetPagination", readonly [], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
|
|
314
122
|
name: string;
|
|
315
123
|
};
|
|
316
|
-
"
|
|
124
|
+
"no-positional-tuple-return": _typescript_eslint_utils_ts_eslint.RuleModule<"noPositionalTupleReturn", readonly [], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
|
|
317
125
|
name: string;
|
|
318
126
|
};
|
|
319
|
-
"
|
|
127
|
+
"no-raw-env": _typescript_eslint_utils_ts_eslint.RuleModule<"noRawEnv", readonly [], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
|
|
320
128
|
name: string;
|
|
321
129
|
};
|
|
322
|
-
"
|
|
130
|
+
"no-raw-fetch-outside-clients": _typescript_eslint_utils_ts_eslint.RuleModule<"rawFetch", readonly [RuleOptions$1?], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
|
|
323
131
|
name: string;
|
|
324
132
|
};
|
|
325
|
-
"
|
|
326
|
-
convention?: "prefix" | "suffix" | "either";
|
|
327
|
-
}?], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
|
|
133
|
+
"no-repeated-string-literal": _typescript_eslint_utils_ts_eslint.RuleModule<"noRepeatedStringLiteral", readonly [], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
|
|
328
134
|
name: string;
|
|
329
135
|
};
|
|
330
|
-
"no-
|
|
136
|
+
"no-restated-comment": _typescript_eslint_utils_ts_eslint.RuleModule<"restatesLineBelow", readonly [], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
|
|
331
137
|
name: string;
|
|
332
138
|
};
|
|
333
|
-
"no-
|
|
139
|
+
"no-restated-jsdoc": _typescript_eslint_utils_ts_eslint.RuleModule<"restatesSignature" | "deleteBlock", readonly [], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
|
|
334
140
|
name: string;
|
|
335
141
|
};
|
|
336
142
|
"no-secret-in-log": _typescript_eslint_utils_ts_eslint.RuleModule<"noSecretInLog" | "noRawBodyInLog", readonly [LoggingOptions?], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
|
|
337
143
|
name: string;
|
|
338
144
|
};
|
|
339
|
-
"no-
|
|
145
|
+
"no-select-star": _typescript_eslint_utils_ts_eslint.RuleModule<"noSelectStar", readonly [], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
|
|
340
146
|
name: string;
|
|
341
147
|
};
|
|
342
|
-
"
|
|
343
|
-
ignoreFields?: readonly string[];
|
|
344
|
-
}?], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
|
|
148
|
+
"no-sentinel-return-on-catch": _typescript_eslint_utils_ts_eslint.RuleModule<"noSentinelReturn", readonly [LoggingOptions?], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
|
|
345
149
|
name: string;
|
|
346
150
|
};
|
|
347
|
-
"
|
|
151
|
+
"no-silent-promise-catch": _typescript_eslint_utils_ts_eslint.RuleModule<"silentCatch", readonly [], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
|
|
348
152
|
name: string;
|
|
349
153
|
};
|
|
350
|
-
"
|
|
351
|
-
ignoreTypeNames?: readonly string[];
|
|
352
|
-
requireIdenticalShape?: boolean;
|
|
353
|
-
}?], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
|
|
154
|
+
"no-sleep-in-test-body": _typescript_eslint_utils_ts_eslint.RuleModule<"noSleepInTestBody", readonly [], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
|
|
354
155
|
name: string;
|
|
355
156
|
};
|
|
356
|
-
"no-
|
|
157
|
+
"no-storage-in-stateless-modules": _typescript_eslint_utils_ts_eslint.RuleModule<"storageInStatelessModule", readonly [RuleOptions$2?], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
|
|
357
158
|
name: string;
|
|
358
159
|
};
|
|
359
|
-
"
|
|
360
|
-
allowIn?: readonly string[];
|
|
361
|
-
}?], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
|
|
160
|
+
"no-string-concat-in-loop": _typescript_eslint_utils_ts_eslint.RuleModule<"noStringConcatInLoop", readonly [], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
|
|
362
161
|
name: string;
|
|
363
162
|
};
|
|
364
|
-
"no-
|
|
163
|
+
"no-tautological-expect": _typescript_eslint_utils_ts_eslint.RuleModule<"tautologicalComparison" | "tautologicalMatcher", readonly [], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
|
|
365
164
|
name: string;
|
|
366
165
|
};
|
|
367
|
-
"no-
|
|
166
|
+
"no-trailing-value-narration": _typescript_eslint_utils_ts_eslint.RuleModule<"narratesValue", readonly [], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
|
|
368
167
|
name: string;
|
|
369
168
|
};
|
|
370
|
-
"no-
|
|
169
|
+
"no-declaration-comment-wall": _typescript_eslint_utils_ts_eslint.RuleModule<"commentWall", readonly [Partial<WallOptions>?], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
|
|
371
170
|
name: string;
|
|
372
171
|
};
|
|
373
|
-
"no-
|
|
172
|
+
"no-type-member-comment-wall": _typescript_eslint_utils_ts_eslint.RuleModule<"commentWall", readonly [Partial<WallOptions>?], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
|
|
374
173
|
name: string;
|
|
375
174
|
};
|
|
376
|
-
"no-
|
|
175
|
+
"no-unnecessary-use-client": _typescript_eslint_utils_ts_eslint.RuleModule<"unnecessaryUseClient", readonly [], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
|
|
377
176
|
name: string;
|
|
378
177
|
};
|
|
379
|
-
"no-
|
|
380
|
-
allowIn?: readonly string[];
|
|
381
|
-
checkClientModules?: boolean;
|
|
382
|
-
}?], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
|
|
178
|
+
"no-unsafe-mock-casting": _typescript_eslint_utils_ts_eslint.RuleModule<"unsafeMockCast", [], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
|
|
383
179
|
name: string;
|
|
384
180
|
};
|
|
385
|
-
"no-
|
|
181
|
+
"no-zod-native-enum": _typescript_eslint_utils_ts_eslint.RuleModule<"nativeEnum" | "enumOfTsEnum", readonly [], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
|
|
386
182
|
name: string;
|
|
387
183
|
};
|
|
388
184
|
"prefer-constant-time-secret-compare": _typescript_eslint_utils_ts_eslint.RuleModule<"preferConstantTimeSecretCompare", readonly [], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
|
|
389
185
|
name: string;
|
|
390
186
|
};
|
|
391
|
-
"
|
|
187
|
+
"prefer-discriminated-union": _typescript_eslint_utils_ts_eslint.RuleModule<"preferDiscriminatedUnion", readonly [], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
|
|
392
188
|
name: string;
|
|
393
189
|
};
|
|
394
|
-
"
|
|
190
|
+
"prefer-module-level-constant": _typescript_eslint_utils_ts_eslint.RuleModule<"hoistCollection" | "hoistRegex", readonly [{
|
|
191
|
+
minElements?: number;
|
|
192
|
+
checkRegex?: boolean;
|
|
193
|
+
ignoreTestFiles?: boolean;
|
|
194
|
+
}?], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
|
|
395
195
|
name: string;
|
|
396
196
|
};
|
|
397
|
-
"
|
|
197
|
+
"prefer-module-level-schema": _typescript_eslint_utils_ts_eslint.RuleModule<"hoistSchema", readonly [{
|
|
198
|
+
factories?: readonly string[];
|
|
199
|
+
ignoreTestFiles?: boolean;
|
|
200
|
+
minProperties?: number;
|
|
201
|
+
}?], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
|
|
398
202
|
name: string;
|
|
399
203
|
};
|
|
400
|
-
"
|
|
204
|
+
"prefer-non-nullable-collection": _typescript_eslint_utils_ts_eslint.RuleModule<"preferNonNullableCollection", readonly [], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
|
|
401
205
|
name: string;
|
|
402
206
|
};
|
|
403
|
-
"
|
|
207
|
+
"prefer-schema-for-api-payload": _typescript_eslint_utils_ts_eslint.RuleModule<"unparsedJsonAccess", readonly [], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
|
|
404
208
|
name: string;
|
|
405
209
|
};
|
|
406
|
-
"prefer-
|
|
407
|
-
|
|
408
|
-
checkRegex?: boolean;
|
|
409
|
-
ignoreTestFiles?: boolean;
|
|
210
|
+
"prefer-semantic-colors": _typescript_eslint_utils_ts_eslint.RuleModule<"rawPalette" | "arbitraryColor" | "inlineColor", readonly [{
|
|
211
|
+
requireSemanticTokens?: boolean;
|
|
410
212
|
}?], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
|
|
411
213
|
name: string;
|
|
412
214
|
};
|
|
413
|
-
"
|
|
215
|
+
"prefer-server-actions": _typescript_eslint_utils_ts_eslint.RuleModule<"preferServerAction", readonly [], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
|
|
414
216
|
name: string;
|
|
415
217
|
};
|
|
416
|
-
"
|
|
218
|
+
"prefer-string-literal-union": _typescript_eslint_utils_ts_eslint.RuleModule<"bareChoiceField" | "comparisonCluster", readonly [{
|
|
219
|
+
ignoreFields?: readonly string[];
|
|
220
|
+
}?], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
|
|
417
221
|
name: string;
|
|
418
222
|
};
|
|
419
|
-
"
|
|
223
|
+
"prefer-whole-object-assertion": _typescript_eslint_utils_ts_eslint.RuleModule<"combineAssertions" | "assertArrayOnce", readonly [], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
|
|
420
224
|
name: string;
|
|
421
225
|
};
|
|
422
|
-
"
|
|
226
|
+
"prefer-zod-enum": _typescript_eslint_utils_ts_eslint.RuleModule<"preferEnum", readonly [], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
|
|
423
227
|
name: string;
|
|
424
228
|
};
|
|
425
|
-
"
|
|
229
|
+
"prefer-zod-infer": _typescript_eslint_utils_ts_eslint.RuleModule<"handWrittenTwin", readonly [{
|
|
230
|
+
ignoreTypeNames?: readonly string[];
|
|
231
|
+
requireIdenticalShape?: boolean;
|
|
232
|
+
}?], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
|
|
426
233
|
name: string;
|
|
427
234
|
};
|
|
428
|
-
"require-
|
|
235
|
+
"require-assert-never": _typescript_eslint_utils_ts_eslint.RuleModule<"missingAssertNever", readonly [], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
|
|
429
236
|
name: string;
|
|
430
237
|
};
|
|
431
|
-
"
|
|
238
|
+
"require-fetch-timeout": _typescript_eslint_utils_ts_eslint.RuleModule<"missingSignal", readonly [{
|
|
239
|
+
allowIn?: readonly string[];
|
|
240
|
+
}?], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
|
|
432
241
|
name: string;
|
|
433
242
|
};
|
|
434
|
-
"
|
|
243
|
+
"require-interface-for-injected-service": _typescript_eslint_utils_ts_eslint.RuleModule<"requireInterface", readonly [], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
|
|
435
244
|
name: string;
|
|
436
245
|
};
|
|
437
|
-
"
|
|
246
|
+
"require-zod-form-validation": _typescript_eslint_utils_ts_eslint.RuleModule<"missingZodValidation", readonly [], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
|
|
438
247
|
name: string;
|
|
439
248
|
};
|
|
440
|
-
"
|
|
441
|
-
|
|
442
|
-
|
|
443
|
-
|
|
249
|
+
"store-insert-requires-on-conflict": _typescript_eslint_utils_ts_eslint.RuleModule<"storeInsertRequiresOnConflict", readonly [], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
|
|
250
|
+
name: string;
|
|
251
|
+
};
|
|
252
|
+
"zod-naming-convention": _typescript_eslint_utils_ts_eslint.RuleModule<"zPrefix" | "schemaSuffix" | "zodSchemaName", readonly [{
|
|
253
|
+
convention?: "prefix" | "suffix" | "either";
|
|
444
254
|
}?], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
|
|
445
255
|
name: string;
|
|
446
256
|
};
|
|
447
257
|
};
|
|
258
|
+
type RuleModule = (typeof rules)[keyof typeof rules];
|
|
448
259
|
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
260
|
readonly "@sarj/enforce-file-structure": "warn";
|
|
261
|
+
readonly "@sarj/no-async-callback-in-wait-for": "warn";
|
|
453
262
|
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-
|
|
263
|
+
readonly "@sarj/no-comment-cruft": "warn";
|
|
264
|
+
readonly "@sarj/no-conditional-in-test": "warn";
|
|
265
|
+
readonly "@sarj/no-cors-wildcard-with-credentials": "warn";
|
|
266
|
+
readonly "@sarj/no-dynamic-sql": "warn";
|
|
267
|
+
readonly "@sarj/no-fat-try-blocks": "warn";
|
|
268
|
+
readonly "@sarj/no-hand-rolled-sleep": "warn";
|
|
459
269
|
readonly "@sarj/no-insecure-random-id": "warn";
|
|
460
270
|
readonly "@sarj/no-json-stringify-error": "warn";
|
|
271
|
+
readonly "@sarj/no-log-only-catch": "warn";
|
|
272
|
+
readonly "@sarj/no-offset-pagination": "warn";
|
|
273
|
+
readonly "@sarj/no-positional-tuple-return": "warn";
|
|
274
|
+
readonly "@sarj/no-repeated-string-literal": "warn";
|
|
275
|
+
readonly "@sarj/no-restated-comment": "warn";
|
|
276
|
+
readonly "@sarj/no-restated-jsdoc": "warn";
|
|
277
|
+
readonly "@sarj/no-secret-in-log": "warn";
|
|
278
|
+
readonly "@sarj/no-select-star": "warn";
|
|
279
|
+
readonly "@sarj/no-sentinel-return-on-catch": "warn";
|
|
280
|
+
readonly "@sarj/no-silent-promise-catch": "warn";
|
|
281
|
+
readonly "@sarj/no-sleep-in-test-body": "warn";
|
|
461
282
|
readonly "@sarj/no-string-concat-in-loop": "warn";
|
|
283
|
+
readonly "@sarj/no-tautological-expect": "warn";
|
|
284
|
+
readonly "@sarj/no-trailing-value-narration": "warn";
|
|
285
|
+
readonly "@sarj/no-declaration-comment-wall": "warn";
|
|
286
|
+
readonly "@sarj/no-type-member-comment-wall": "warn";
|
|
287
|
+
readonly "@sarj/no-unnecessary-use-client": "warn";
|
|
288
|
+
readonly "@sarj/no-unsafe-mock-casting": "warn";
|
|
289
|
+
readonly "@sarj/no-zod-native-enum": "warn";
|
|
290
|
+
readonly "@sarj/prefer-constant-time-secret-compare": "error";
|
|
462
291
|
readonly "@sarj/prefer-discriminated-union": "warn";
|
|
463
|
-
readonly "@sarj/
|
|
292
|
+
readonly "@sarj/prefer-module-level-constant": "warn";
|
|
293
|
+
readonly "@sarj/prefer-module-level-schema": "warn";
|
|
294
|
+
readonly "@sarj/prefer-non-nullable-collection": "warn";
|
|
295
|
+
readonly "@sarj/prefer-schema-for-api-payload": "warn";
|
|
464
296
|
readonly "@sarj/prefer-semantic-colors": readonly ["warn", {
|
|
465
297
|
readonly requireSemanticTokens: true;
|
|
466
298
|
}];
|
|
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";
|
|
299
|
+
readonly "@sarj/prefer-server-actions": "warn";
|
|
471
300
|
readonly "@sarj/prefer-string-literal-union": "warn";
|
|
301
|
+
readonly "@sarj/prefer-whole-object-assertion": "warn";
|
|
472
302
|
readonly "@sarj/prefer-zod-enum": "warn";
|
|
473
303
|
readonly "@sarj/prefer-zod-infer": "warn";
|
|
304
|
+
readonly "@sarj/require-assert-never": "error";
|
|
474
305
|
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
306
|
readonly "@sarj/require-interface-for-injected-service": "warn";
|
|
494
|
-
readonly "@sarj/
|
|
495
|
-
readonly "@sarj/
|
|
496
|
-
readonly "@sarj/
|
|
497
|
-
readonly "@sarj/strict-test-assertions": "warn";
|
|
307
|
+
readonly "@sarj/require-zod-form-validation": "error";
|
|
308
|
+
readonly "@sarj/store-insert-requires-on-conflict": "warn";
|
|
309
|
+
readonly "@sarj/zod-naming-convention": "warn";
|
|
498
310
|
};
|
|
499
311
|
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
312
|
readonly "@sarj/enforce-file-structure": "error";
|
|
504
|
-
readonly "@sarj/no-
|
|
505
|
-
readonly "@sarj/no-enum": "error";
|
|
313
|
+
readonly "@sarj/no-async-callback-in-wait-for": "error";
|
|
506
314
|
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-
|
|
315
|
+
readonly "@sarj/no-comment-cruft": "error";
|
|
316
|
+
readonly "@sarj/no-conditional-in-test": "error";
|
|
317
|
+
readonly "@sarj/no-cors-wildcard-with-credentials": "error";
|
|
318
|
+
readonly "@sarj/no-dynamic-sql": "error";
|
|
319
|
+
readonly "@sarj/no-enum": "error";
|
|
320
|
+
readonly "@sarj/no-fat-try-blocks": "error";
|
|
321
|
+
readonly "@sarj/no-hand-rolled-sleep": "error";
|
|
512
322
|
readonly "@sarj/no-insecure-random-id": "error";
|
|
513
323
|
readonly "@sarj/no-json-stringify-error": "error";
|
|
324
|
+
readonly "@sarj/no-log-only-catch": "error";
|
|
325
|
+
readonly "@sarj/no-offset-pagination": "error";
|
|
326
|
+
readonly "@sarj/no-positional-tuple-return": "error";
|
|
327
|
+
readonly "@sarj/no-raw-env": "error";
|
|
328
|
+
readonly "@sarj/no-raw-fetch-outside-clients": "error";
|
|
329
|
+
readonly "@sarj/no-repeated-string-literal": "error";
|
|
330
|
+
readonly "@sarj/no-restated-comment": "error";
|
|
331
|
+
readonly "@sarj/no-restated-jsdoc": "error";
|
|
332
|
+
readonly "@sarj/no-secret-in-log": "error";
|
|
333
|
+
readonly "@sarj/no-select-star": "error";
|
|
334
|
+
readonly "@sarj/no-sentinel-return-on-catch": "error";
|
|
335
|
+
readonly "@sarj/no-silent-promise-catch": "error";
|
|
336
|
+
readonly "@sarj/no-sleep-in-test-body": "error";
|
|
337
|
+
readonly "@sarj/no-storage-in-stateless-modules": "error";
|
|
514
338
|
readonly "@sarj/no-string-concat-in-loop": "error";
|
|
339
|
+
readonly "@sarj/no-tautological-expect": "error";
|
|
340
|
+
readonly "@sarj/no-trailing-value-narration": "error";
|
|
341
|
+
readonly "@sarj/no-declaration-comment-wall": "error";
|
|
342
|
+
readonly "@sarj/no-type-member-comment-wall": "error";
|
|
343
|
+
readonly "@sarj/no-unnecessary-use-client": "error";
|
|
344
|
+
readonly "@sarj/no-unsafe-mock-casting": "error";
|
|
345
|
+
readonly "@sarj/no-zod-native-enum": "error";
|
|
346
|
+
readonly "@sarj/prefer-constant-time-secret-compare": "error";
|
|
515
347
|
readonly "@sarj/prefer-discriminated-union": "error";
|
|
516
|
-
readonly "@sarj/
|
|
348
|
+
readonly "@sarj/prefer-module-level-constant": "error";
|
|
349
|
+
readonly "@sarj/prefer-module-level-schema": "error";
|
|
350
|
+
readonly "@sarj/prefer-non-nullable-collection": "error";
|
|
351
|
+
readonly "@sarj/prefer-schema-for-api-payload": "error";
|
|
517
352
|
readonly "@sarj/prefer-semantic-colors": readonly ["error", {
|
|
518
353
|
readonly requireSemanticTokens: true;
|
|
519
354
|
}];
|
|
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";
|
|
355
|
+
readonly "@sarj/prefer-server-actions": "error";
|
|
524
356
|
readonly "@sarj/prefer-string-literal-union": "error";
|
|
357
|
+
readonly "@sarj/prefer-whole-object-assertion": "error";
|
|
525
358
|
readonly "@sarj/prefer-zod-enum": "error";
|
|
526
359
|
readonly "@sarj/prefer-zod-infer": "error";
|
|
360
|
+
readonly "@sarj/require-assert-never": "error";
|
|
527
361
|
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
362
|
readonly "@sarj/require-interface-for-injected-service": "error";
|
|
549
|
-
readonly "@sarj/
|
|
550
|
-
readonly "@sarj/
|
|
551
|
-
readonly "@sarj/
|
|
552
|
-
readonly "@sarj/strict-test-assertions": "error";
|
|
363
|
+
readonly "@sarj/require-zod-form-validation": "error";
|
|
364
|
+
readonly "@sarj/store-insert-requires-on-conflict": "error";
|
|
365
|
+
readonly "@sarj/zod-naming-convention": "error";
|
|
553
366
|
};
|
|
554
367
|
type FlatPreset = {
|
|
555
368
|
readonly name: string;
|
|
@@ -557,207 +370,197 @@ type FlatPreset = {
|
|
|
557
370
|
readonly rules: Record<string, unknown>;
|
|
558
371
|
};
|
|
559
372
|
/**
|
|
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.
|
|
373
|
+
* The presets, as FLAT config objects — `plugins` is the object form, so both go
|
|
374
|
+
* straight into an `eslint.config.mjs` array with no spread. Neither sets
|
|
375
|
+
* `files` or a parser, so they compose with whatever a repo already has.
|
|
580
376
|
*/
|
|
581
377
|
declare const plugin: {
|
|
582
378
|
meta: {
|
|
583
379
|
readonly name: "@sarj/eslint-plugin";
|
|
584
|
-
readonly version: "
|
|
380
|
+
readonly version: "7.1.0";
|
|
585
381
|
};
|
|
586
382
|
rules: {
|
|
383
|
+
"jsdoc-restates-signature": RuleModule;
|
|
384
|
+
"no-async-callback-in-waitfor": RuleModule;
|
|
385
|
+
"strict-test-assertions": RuleModule;
|
|
386
|
+
"trailing-value-narration": RuleModule;
|
|
587
387
|
"enforce-file-structure": _typescript_eslint_utils_ts_eslint.RuleModule<"importsFirst" | "useServerDirective", readonly [], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
|
|
588
388
|
name: string;
|
|
589
389
|
};
|
|
590
|
-
"no-
|
|
390
|
+
"no-async-callback-in-wait-for": _typescript_eslint_utils_ts_eslint.RuleModule<"noAsyncCallbackInWaitFor", readonly [], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
|
|
591
391
|
name: string;
|
|
592
392
|
};
|
|
593
|
-
"no-
|
|
393
|
+
"no-client-side-data-fetching": _typescript_eslint_utils_ts_eslint.RuleModule<"noClientFetch", readonly [], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
|
|
594
394
|
name: string;
|
|
595
395
|
};
|
|
596
|
-
"no-
|
|
597
|
-
ignoreFiles?: readonly string[];
|
|
598
|
-
}?], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
|
|
396
|
+
"no-comment-cruft": _typescript_eslint_utils_ts_eslint.RuleModule<"commentedOutCode" | "sectionBanner" | "fileHeaderPreamble" | "redundantNarration" | "untrackedTodo", readonly [], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
|
|
599
397
|
name: string;
|
|
600
398
|
};
|
|
601
|
-
"no-
|
|
399
|
+
"no-conditional-in-test": _typescript_eslint_utils_ts_eslint.RuleModule<"noConditionalInTest", readonly [], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
|
|
602
400
|
name: string;
|
|
603
401
|
};
|
|
604
|
-
"no-
|
|
402
|
+
"no-cors-wildcard-with-credentials": _typescript_eslint_utils_ts_eslint.RuleModule<"corsWildcardWithCredentials", readonly [], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
|
|
605
403
|
name: string;
|
|
606
404
|
};
|
|
607
|
-
"no-
|
|
405
|
+
"no-dynamic-sql": _typescript_eslint_utils_ts_eslint.RuleModule<"dynamicSql", readonly [RuleOptions?], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
|
|
608
406
|
name: string;
|
|
609
407
|
};
|
|
610
|
-
"no-
|
|
408
|
+
"no-enum": _typescript_eslint_utils_ts_eslint.RuleModule<"noEnum", readonly [{
|
|
409
|
+
ignoreFiles?: readonly string[];
|
|
410
|
+
}?], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
|
|
611
411
|
name: string;
|
|
612
412
|
};
|
|
613
|
-
"no-
|
|
413
|
+
"no-fat-try-blocks": _typescript_eslint_utils_ts_eslint.RuleModule<"fatTryBlock", readonly [], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
|
|
614
414
|
name: string;
|
|
615
415
|
};
|
|
616
|
-
"no-
|
|
416
|
+
"no-hand-rolled-sleep": _typescript_eslint_utils_ts_eslint.RuleModule<"handRolledSleep" | "handRolledTimeoutRace", readonly [{
|
|
417
|
+
allowIn?: readonly string[];
|
|
418
|
+
checkClientModules?: boolean;
|
|
419
|
+
}?], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
|
|
617
420
|
name: string;
|
|
618
421
|
};
|
|
619
|
-
"no-
|
|
422
|
+
"no-insecure-random-id": _typescript_eslint_utils_ts_eslint.RuleModule<"insecureRandomId", readonly [], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
|
|
620
423
|
name: string;
|
|
621
424
|
};
|
|
622
|
-
"
|
|
425
|
+
"no-json-stringify-error": _typescript_eslint_utils_ts_eslint.RuleModule<"noJsonStringifyError", readonly [], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
|
|
623
426
|
name: string;
|
|
624
427
|
};
|
|
625
|
-
"
|
|
428
|
+
"no-log-only-catch": _typescript_eslint_utils_ts_eslint.RuleModule<"noLogOnlyCatch" | "emptyCatch", readonly [LoggingOptions?], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
|
|
626
429
|
name: string;
|
|
627
430
|
};
|
|
628
|
-
"
|
|
629
|
-
requireSemanticTokens?: boolean;
|
|
630
|
-
}?], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
|
|
431
|
+
"no-offset-pagination": _typescript_eslint_utils_ts_eslint.RuleModule<"noOffsetPagination", readonly [], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
|
|
631
432
|
name: string;
|
|
632
433
|
};
|
|
633
|
-
"
|
|
434
|
+
"no-positional-tuple-return": _typescript_eslint_utils_ts_eslint.RuleModule<"noPositionalTupleReturn", readonly [], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
|
|
634
435
|
name: string;
|
|
635
436
|
};
|
|
636
|
-
"
|
|
437
|
+
"no-raw-env": _typescript_eslint_utils_ts_eslint.RuleModule<"noRawEnv", readonly [], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
|
|
637
438
|
name: string;
|
|
638
439
|
};
|
|
639
|
-
"
|
|
440
|
+
"no-raw-fetch-outside-clients": _typescript_eslint_utils_ts_eslint.RuleModule<"rawFetch", readonly [RuleOptions$1?], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
|
|
640
441
|
name: string;
|
|
641
442
|
};
|
|
642
|
-
"
|
|
643
|
-
convention?: "prefix" | "suffix" | "either";
|
|
644
|
-
}?], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
|
|
443
|
+
"no-repeated-string-literal": _typescript_eslint_utils_ts_eslint.RuleModule<"noRepeatedStringLiteral", readonly [], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
|
|
645
444
|
name: string;
|
|
646
445
|
};
|
|
647
|
-
"no-
|
|
446
|
+
"no-restated-comment": _typescript_eslint_utils_ts_eslint.RuleModule<"restatesLineBelow", readonly [], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
|
|
648
447
|
name: string;
|
|
649
448
|
};
|
|
650
|
-
"no-
|
|
449
|
+
"no-restated-jsdoc": _typescript_eslint_utils_ts_eslint.RuleModule<"restatesSignature" | "deleteBlock", readonly [], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
|
|
651
450
|
name: string;
|
|
652
451
|
};
|
|
653
452
|
"no-secret-in-log": _typescript_eslint_utils_ts_eslint.RuleModule<"noSecretInLog" | "noRawBodyInLog", readonly [LoggingOptions?], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
|
|
654
453
|
name: string;
|
|
655
454
|
};
|
|
656
|
-
"no-
|
|
455
|
+
"no-select-star": _typescript_eslint_utils_ts_eslint.RuleModule<"noSelectStar", readonly [], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
|
|
657
456
|
name: string;
|
|
658
457
|
};
|
|
659
|
-
"
|
|
660
|
-
ignoreFields?: readonly string[];
|
|
661
|
-
}?], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
|
|
458
|
+
"no-sentinel-return-on-catch": _typescript_eslint_utils_ts_eslint.RuleModule<"noSentinelReturn", readonly [LoggingOptions?], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
|
|
662
459
|
name: string;
|
|
663
460
|
};
|
|
664
|
-
"
|
|
461
|
+
"no-silent-promise-catch": _typescript_eslint_utils_ts_eslint.RuleModule<"silentCatch", readonly [], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
|
|
665
462
|
name: string;
|
|
666
463
|
};
|
|
667
|
-
"
|
|
668
|
-
ignoreTypeNames?: readonly string[];
|
|
669
|
-
requireIdenticalShape?: boolean;
|
|
670
|
-
}?], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
|
|
464
|
+
"no-sleep-in-test-body": _typescript_eslint_utils_ts_eslint.RuleModule<"noSleepInTestBody", readonly [], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
|
|
671
465
|
name: string;
|
|
672
466
|
};
|
|
673
|
-
"no-
|
|
467
|
+
"no-storage-in-stateless-modules": _typescript_eslint_utils_ts_eslint.RuleModule<"storageInStatelessModule", readonly [RuleOptions$2?], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
|
|
674
468
|
name: string;
|
|
675
469
|
};
|
|
676
|
-
"
|
|
677
|
-
allowIn?: readonly string[];
|
|
678
|
-
}?], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
|
|
470
|
+
"no-string-concat-in-loop": _typescript_eslint_utils_ts_eslint.RuleModule<"noStringConcatInLoop", readonly [], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
|
|
679
471
|
name: string;
|
|
680
472
|
};
|
|
681
|
-
"no-
|
|
473
|
+
"no-tautological-expect": _typescript_eslint_utils_ts_eslint.RuleModule<"tautologicalComparison" | "tautologicalMatcher", readonly [], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
|
|
682
474
|
name: string;
|
|
683
475
|
};
|
|
684
|
-
"no-
|
|
476
|
+
"no-trailing-value-narration": _typescript_eslint_utils_ts_eslint.RuleModule<"narratesValue", readonly [], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
|
|
685
477
|
name: string;
|
|
686
478
|
};
|
|
687
|
-
"no-
|
|
479
|
+
"no-declaration-comment-wall": _typescript_eslint_utils_ts_eslint.RuleModule<"commentWall", readonly [Partial<WallOptions>?], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
|
|
688
480
|
name: string;
|
|
689
481
|
};
|
|
690
|
-
"no-
|
|
482
|
+
"no-type-member-comment-wall": _typescript_eslint_utils_ts_eslint.RuleModule<"commentWall", readonly [Partial<WallOptions>?], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
|
|
691
483
|
name: string;
|
|
692
484
|
};
|
|
693
|
-
"no-
|
|
485
|
+
"no-unnecessary-use-client": _typescript_eslint_utils_ts_eslint.RuleModule<"unnecessaryUseClient", readonly [], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
|
|
694
486
|
name: string;
|
|
695
487
|
};
|
|
696
|
-
"no-
|
|
697
|
-
allowIn?: readonly string[];
|
|
698
|
-
checkClientModules?: boolean;
|
|
699
|
-
}?], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
|
|
488
|
+
"no-unsafe-mock-casting": _typescript_eslint_utils_ts_eslint.RuleModule<"unsafeMockCast", [], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
|
|
700
489
|
name: string;
|
|
701
490
|
};
|
|
702
|
-
"no-
|
|
491
|
+
"no-zod-native-enum": _typescript_eslint_utils_ts_eslint.RuleModule<"nativeEnum" | "enumOfTsEnum", readonly [], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
|
|
703
492
|
name: string;
|
|
704
493
|
};
|
|
705
494
|
"prefer-constant-time-secret-compare": _typescript_eslint_utils_ts_eslint.RuleModule<"preferConstantTimeSecretCompare", readonly [], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
|
|
706
495
|
name: string;
|
|
707
496
|
};
|
|
708
|
-
"
|
|
497
|
+
"prefer-discriminated-union": _typescript_eslint_utils_ts_eslint.RuleModule<"preferDiscriminatedUnion", readonly [], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
|
|
709
498
|
name: string;
|
|
710
499
|
};
|
|
711
|
-
"
|
|
500
|
+
"prefer-module-level-constant": _typescript_eslint_utils_ts_eslint.RuleModule<"hoistCollection" | "hoistRegex", readonly [{
|
|
501
|
+
minElements?: number;
|
|
502
|
+
checkRegex?: boolean;
|
|
503
|
+
ignoreTestFiles?: boolean;
|
|
504
|
+
}?], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
|
|
712
505
|
name: string;
|
|
713
506
|
};
|
|
714
|
-
"
|
|
507
|
+
"prefer-module-level-schema": _typescript_eslint_utils_ts_eslint.RuleModule<"hoistSchema", readonly [{
|
|
508
|
+
factories?: readonly string[];
|
|
509
|
+
ignoreTestFiles?: boolean;
|
|
510
|
+
minProperties?: number;
|
|
511
|
+
}?], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
|
|
715
512
|
name: string;
|
|
716
513
|
};
|
|
717
|
-
"
|
|
514
|
+
"prefer-non-nullable-collection": _typescript_eslint_utils_ts_eslint.RuleModule<"preferNonNullableCollection", readonly [], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
|
|
718
515
|
name: string;
|
|
719
516
|
};
|
|
720
|
-
"
|
|
517
|
+
"prefer-schema-for-api-payload": _typescript_eslint_utils_ts_eslint.RuleModule<"unparsedJsonAccess", 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-semantic-colors": _typescript_eslint_utils_ts_eslint.RuleModule<"rawPalette" | "arbitraryColor" | "inlineColor", readonly [{
|
|
521
|
+
requireSemanticTokens?: boolean;
|
|
727
522
|
}?], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
|
|
728
523
|
name: string;
|
|
729
524
|
};
|
|
730
|
-
"
|
|
525
|
+
"prefer-server-actions": _typescript_eslint_utils_ts_eslint.RuleModule<"preferServerAction", readonly [], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
|
|
731
526
|
name: string;
|
|
732
527
|
};
|
|
733
|
-
"
|
|
528
|
+
"prefer-string-literal-union": _typescript_eslint_utils_ts_eslint.RuleModule<"bareChoiceField" | "comparisonCluster", readonly [{
|
|
529
|
+
ignoreFields?: readonly string[];
|
|
530
|
+
}?], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
|
|
734
531
|
name: string;
|
|
735
532
|
};
|
|
736
|
-
"
|
|
533
|
+
"prefer-whole-object-assertion": _typescript_eslint_utils_ts_eslint.RuleModule<"combineAssertions" | "assertArrayOnce", readonly [], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
|
|
737
534
|
name: string;
|
|
738
535
|
};
|
|
739
|
-
"
|
|
536
|
+
"prefer-zod-enum": _typescript_eslint_utils_ts_eslint.RuleModule<"preferEnum", readonly [], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
|
|
740
537
|
name: string;
|
|
741
538
|
};
|
|
742
|
-
"
|
|
539
|
+
"prefer-zod-infer": _typescript_eslint_utils_ts_eslint.RuleModule<"handWrittenTwin", readonly [{
|
|
540
|
+
ignoreTypeNames?: readonly string[];
|
|
541
|
+
requireIdenticalShape?: boolean;
|
|
542
|
+
}?], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
|
|
743
543
|
name: string;
|
|
744
544
|
};
|
|
745
|
-
"require-
|
|
545
|
+
"require-assert-never": _typescript_eslint_utils_ts_eslint.RuleModule<"missingAssertNever", readonly [], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
|
|
746
546
|
name: string;
|
|
747
547
|
};
|
|
748
|
-
"
|
|
548
|
+
"require-fetch-timeout": _typescript_eslint_utils_ts_eslint.RuleModule<"missingSignal", readonly [{
|
|
549
|
+
allowIn?: readonly string[];
|
|
550
|
+
}?], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
|
|
749
551
|
name: string;
|
|
750
552
|
};
|
|
751
|
-
"
|
|
553
|
+
"require-interface-for-injected-service": _typescript_eslint_utils_ts_eslint.RuleModule<"requireInterface", readonly [], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
|
|
752
554
|
name: string;
|
|
753
555
|
};
|
|
754
|
-
"
|
|
556
|
+
"require-zod-form-validation": _typescript_eslint_utils_ts_eslint.RuleModule<"missingZodValidation", readonly [], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
|
|
755
557
|
name: string;
|
|
756
558
|
};
|
|
757
|
-
"
|
|
758
|
-
|
|
759
|
-
|
|
760
|
-
|
|
559
|
+
"store-insert-requires-on-conflict": _typescript_eslint_utils_ts_eslint.RuleModule<"storeInsertRequiresOnConflict", readonly [], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
|
|
560
|
+
name: string;
|
|
561
|
+
};
|
|
562
|
+
"zod-naming-convention": _typescript_eslint_utils_ts_eslint.RuleModule<"zPrefix" | "schemaSuffix" | "zodSchemaName", readonly [{
|
|
563
|
+
convention?: "prefix" | "suffix" | "either";
|
|
761
564
|
}?], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
|
|
762
565
|
name: string;
|
|
763
566
|
};
|
|
@@ -768,4 +571,4 @@ declare const plugin: {
|
|
|
768
571
|
};
|
|
769
572
|
};
|
|
770
573
|
|
|
771
|
-
export { plugin as default, recommendedRules, rules, strictRules };
|
|
574
|
+
export { plugin as default, recommendedRules, renamedRules, rules, strictRules };
|