@sarj/eslint-plugin 2.6.0 → 2.8.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 +126 -1
- package/dist/index.cjs +1884 -272
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +288 -10
- package/dist/index.d.ts +288 -10
- package/dist/index.js +1892 -276
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dist/index.d.ts
CHANGED
|
@@ -1,5 +1,169 @@
|
|
|
1
1
|
import * as _typescript_eslint_utils_ts_eslint from '@typescript-eslint/utils/ts-eslint';
|
|
2
2
|
|
|
3
|
+
/**
|
|
4
|
+
* @fileoverview Keep modules that are stateless by design free of private
|
|
5
|
+
* storage.
|
|
6
|
+
*
|
|
7
|
+
* Some features are stateless deliberately: they derive everything they need
|
|
8
|
+
* from reads against the systems of record (Slack, Linear, GitHub, a CRM) plus
|
|
9
|
+
* markers in the artefacts they themselves produced. The reason is operational
|
|
10
|
+
* — such a feature can be re-run and back-filled freely, whereas a private
|
|
11
|
+
* table or key/value namespace immediately diverges from what a human can
|
|
12
|
+
* actually see and audit in the system of record. Adding a store to one of
|
|
13
|
+
* these modules silently deletes that property, and nothing else in the
|
|
14
|
+
* toolchain notices.
|
|
15
|
+
*
|
|
16
|
+
* WHAT IT CATCHES, inside the configured modules only
|
|
17
|
+
* db.prepare(sql) // a SQL statement
|
|
18
|
+
* kv.put(key, value) // a key/value write
|
|
19
|
+
* kv.getWithMetadata(key) // a key/value read
|
|
20
|
+
*
|
|
21
|
+
* OPT-IN BY DESIGN
|
|
22
|
+
* `modules` defaults to an EMPTY list, which makes the rule a no-op. That is
|
|
23
|
+
* deliberate: the method names alone (`put`, `prepare`) carry no type
|
|
24
|
+
* information, so the rule is only meaningful — and only quiet enough to live
|
|
25
|
+
* in a shared preset — when it is pointed at the specific directories a team
|
|
26
|
+
* has declared stateless.
|
|
27
|
+
*
|
|
28
|
+
* "@sarj/no-storage-in-stateless-modules": ["error", {
|
|
29
|
+
* "modules": ["[\\\\/]engineer-digest[\\\\/]", "[\\\\/]digest[\\\\/]"]
|
|
30
|
+
* }]
|
|
31
|
+
*
|
|
32
|
+
* `modules` entries are regular-expression sources matched against the absolute
|
|
33
|
+
* filename. `methods` overrides the storage method names if a driver names
|
|
34
|
+
* things differently.
|
|
35
|
+
*
|
|
36
|
+
* NOT FLAGGED
|
|
37
|
+
* - Anything outside the configured modules.
|
|
38
|
+
* - `.put()` with fewer than two arguments — a one-argument `put` is more
|
|
39
|
+
* often a builder or queue helper than a key/value write.
|
|
40
|
+
*
|
|
41
|
+
* If a feature genuinely cannot be expressed statelessly, that is a design
|
|
42
|
+
* conversation, not a disable comment.
|
|
43
|
+
*/
|
|
44
|
+
|
|
45
|
+
interface RuleOptions$2 {
|
|
46
|
+
/** Regex sources matched against the filename. Empty means the rule is off. */
|
|
47
|
+
readonly modules?: readonly string[];
|
|
48
|
+
/** Storage method names to flag. Replaces the defaults. */
|
|
49
|
+
readonly methods?: readonly string[];
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
/**
|
|
53
|
+
* @fileoverview Keep outbound HTTP behind a client module.
|
|
54
|
+
*
|
|
55
|
+
* A bare `fetch()` in a route handler, server action or component opts out of
|
|
56
|
+
* whatever the codebase's client layer provides — retry/backoff, timeouts,
|
|
57
|
+
* status handling, auth headers, structured log breadcrumbs. It is also the
|
|
58
|
+
* shape that cannot be stubbed in a test without monkey-patching global
|
|
59
|
+
* `fetch`, so the call site quietly becomes untestable.
|
|
60
|
+
*
|
|
61
|
+
* WHAT IT CATCHES
|
|
62
|
+
* fetch(url) // bare global
|
|
63
|
+
* globalThis.fetch(url) // explicit global receiver
|
|
64
|
+
* window.fetch(url)
|
|
65
|
+
*
|
|
66
|
+
* NOT FLAGGED
|
|
67
|
+
* - Files whose path matches one of the `allow` patterns. The defaults cover
|
|
68
|
+
* the conventions we have seen in practice — a `clients/` directory, a
|
|
69
|
+
* `*-client.ts` module, an `http-client.*` wrapper — plus test files.
|
|
70
|
+
* - A method named `fetch` on some other receiver (`cache.fetch(k)`,
|
|
71
|
+
* `queryClient.fetch()`): only the global is HTTP.
|
|
72
|
+
* - `new Request(...)` / `axios(...)` and friends. This rule is about the
|
|
73
|
+
* global `fetch`, not about every HTTP library.
|
|
74
|
+
*
|
|
75
|
+
* CONFIGURATION
|
|
76
|
+
* `allow` is a list of regular-expression sources matched against the absolute
|
|
77
|
+
* filename, so a repo that keeps its client layer somewhere else can say so
|
|
78
|
+
* rather than sprinkling disable comments:
|
|
79
|
+
*
|
|
80
|
+
* "@sarj/no-raw-fetch-outside-clients": ["error", {
|
|
81
|
+
* "allow": ["[\\\\/]lib[\\\\/]api[\\\\/]", "-gateway\\\\.ts$"]
|
|
82
|
+
* }]
|
|
83
|
+
*
|
|
84
|
+
* Supplying `allow` REPLACES the defaults, so include the test patterns if you
|
|
85
|
+
* still want test files exempt.
|
|
86
|
+
*/
|
|
87
|
+
|
|
88
|
+
interface RuleOptions$1 {
|
|
89
|
+
/** Regular-expression sources matched against the filename. */
|
|
90
|
+
readonly allow?: readonly string[];
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
/**
|
|
94
|
+
* @fileoverview Disallow building a SQL statement out of runtime values.
|
|
95
|
+
*
|
|
96
|
+
* `db.prepare(sql)` takes a STATIC statement plus `?` / `$1` placeholders bound
|
|
97
|
+
* through `.bind(...)`. Interpolating a value into the statement text bypasses
|
|
98
|
+
* the binding layer completely: that is SQL injection, and it also defeats the
|
|
99
|
+
* driver's prepared-statement cache, because every distinct value produces a
|
|
100
|
+
* distinct statement to compile. The shape is identical across Cloudflare D1,
|
|
101
|
+
* better-sqlite3 and node-postgres, so the rule is driver-agnostic.
|
|
102
|
+
*
|
|
103
|
+
* WHAT IT CATCHES
|
|
104
|
+
* db.prepare(`select * from users where id = '${userId}'`)
|
|
105
|
+
* db.prepare("select * from users where id = '" + userId + "'")
|
|
106
|
+
* db.exec(`delete from sessions where token = '${token}'`)
|
|
107
|
+
*
|
|
108
|
+
* NOT FLAGGED
|
|
109
|
+
* - `${CONSTANT_CASE}` fragments. A module-level constant — the column-list
|
|
110
|
+
* constants several repos keep (`${CANDIDATE_COLS}`, `${TABLES.USERS}`) —
|
|
111
|
+
* is a compile-time value, not user input. Anything starting lowercase is
|
|
112
|
+
* treated as runtime data.
|
|
113
|
+
* - A template literal with no interpolations at all.
|
|
114
|
+
* - Tagged templates (`` sql`select ... ${id}` ``). A tag function receives the
|
|
115
|
+
* static strings and the values separately and is the parameterising
|
|
116
|
+
* mechanism, not a bypass of it.
|
|
117
|
+
* - `.prepare()` on something that is not a database. Requiring an
|
|
118
|
+
* interpolated runtime value keeps this rare in practice.
|
|
119
|
+
*
|
|
120
|
+
* CONFIGURATION
|
|
121
|
+
* `methods` is the list of statement-taking method names to inspect. Extend it
|
|
122
|
+
* for a driver that names things differently:
|
|
123
|
+
*
|
|
124
|
+
* "@sarj/no-dynamic-sql": ["error", { "methods": ["prepare", "exec", "raw"] }]
|
|
125
|
+
*
|
|
126
|
+
* Supplying `methods` REPLACES the defaults.
|
|
127
|
+
*/
|
|
128
|
+
|
|
129
|
+
interface RuleOptions {
|
|
130
|
+
/** Statement-taking method names to inspect. Replaces the defaults. */
|
|
131
|
+
readonly methods?: readonly string[];
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
/**
|
|
135
|
+
* @fileoverview Shared helpers for recognising logging / error-reporting calls.
|
|
136
|
+
* Used by `no-log-only-catch`, `no-sentinel-return-on-catch` and
|
|
137
|
+
* `no-secret-in-log` so all three rules agree on what counts as "this call
|
|
138
|
+
* writes to a log sink" before deciding a catch silently swallows an error or a
|
|
139
|
+
* secret leaks.
|
|
140
|
+
*
|
|
141
|
+
* Two shapes are recognised:
|
|
142
|
+
*
|
|
143
|
+
* - **Receiver-shaped** — a log METHOD (`debug`/`info`/`warn`/`error`/…) on a
|
|
144
|
+
* logger RECEIVER: `console.error(...)`, `logger.warn(...)`,
|
|
145
|
+
* `this.logger.info(...)`, and builder/factory chains
|
|
146
|
+
* (`logger.bind({...}).info(...)`, `logging.getLogger(n).info(...)`).
|
|
147
|
+
* - **Free-function-shaped** — a project-declared logging function, e.g.
|
|
148
|
+
* `logEvent("pr_scan.failed", { repo, error })`. Structured loggers that are
|
|
149
|
+
* plain functions taking a meta object are the dominant real-world shape and
|
|
150
|
+
* have no logger receiver at all, so they are invisible to the receiver
|
|
151
|
+
* heuristic. Projects declare theirs via the shared `logFunctions` rule
|
|
152
|
+
* option; `loggerNames` extends the receiver set the same way.
|
|
153
|
+
*
|
|
154
|
+
* Both options are OFF by default (empty), so default behaviour is unchanged.
|
|
155
|
+
* Declaring them makes the catch rules stop reporting a correctly-logged
|
|
156
|
+
* degraded return AND makes `no-secret-in-log` start inspecting those calls —
|
|
157
|
+
* the second effect closes a real hole, since `logEvent("auth", { botToken })`
|
|
158
|
+
* was previously never examined.
|
|
159
|
+
*/
|
|
160
|
+
|
|
161
|
+
/** Shared `loggerNames` / `logFunctions` option shape. */
|
|
162
|
+
interface LoggingOptions {
|
|
163
|
+
readonly loggerNames?: readonly string[];
|
|
164
|
+
readonly logFunctions?: readonly string[];
|
|
165
|
+
}
|
|
166
|
+
|
|
3
167
|
declare const rules: {
|
|
4
168
|
"enforce-file-structure": _typescript_eslint_utils_ts_eslint.RuleModule<"importsFirst" | "useServerDirective", readonly [], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
|
|
5
169
|
name: string;
|
|
@@ -21,13 +185,13 @@ declare const rules: {
|
|
|
21
185
|
"no-json-stringify-error": _typescript_eslint_utils_ts_eslint.RuleModule<"noJsonStringifyError", readonly [], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
|
|
22
186
|
name: string;
|
|
23
187
|
};
|
|
24
|
-
"no-log-only-catch": _typescript_eslint_utils_ts_eslint.RuleModule<"noLogOnlyCatch" | "emptyCatch", readonly [], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
|
|
188
|
+
"no-log-only-catch": _typescript_eslint_utils_ts_eslint.RuleModule<"noLogOnlyCatch" | "emptyCatch", readonly [LoggingOptions?], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
|
|
25
189
|
name: string;
|
|
26
190
|
};
|
|
27
191
|
"no-raw-env": _typescript_eslint_utils_ts_eslint.RuleModule<"noRawEnv", readonly [], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
|
|
28
192
|
name: string;
|
|
29
193
|
};
|
|
30
|
-
"no-sentinel-return-on-catch": _typescript_eslint_utils_ts_eslint.RuleModule<"noSentinelReturn", readonly [], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
|
|
194
|
+
"no-sentinel-return-on-catch": _typescript_eslint_utils_ts_eslint.RuleModule<"noSentinelReturn", readonly [LoggingOptions?], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
|
|
31
195
|
name: string;
|
|
32
196
|
};
|
|
33
197
|
"no-sequential-await": _typescript_eslint_utils_ts_eslint.RuleModule<"noSequentialAwait", readonly [], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
|
|
@@ -60,7 +224,9 @@ declare const rules: {
|
|
|
60
224
|
"require-zod-form-validation": _typescript_eslint_utils_ts_eslint.RuleModule<"missingZodValidation", readonly [], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
|
|
61
225
|
name: string;
|
|
62
226
|
};
|
|
63
|
-
"zod-naming-convention": _typescript_eslint_utils_ts_eslint.RuleModule<"zPrefix"
|
|
227
|
+
"zod-naming-convention": _typescript_eslint_utils_ts_eslint.RuleModule<"zPrefix" | "schemaSuffix" | "zodSchemaName", readonly [{
|
|
228
|
+
convention?: "prefix" | "suffix" | "either";
|
|
229
|
+
}?], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
|
|
64
230
|
name: string;
|
|
65
231
|
};
|
|
66
232
|
"no-cors-wildcard-with-credentials": _typescript_eslint_utils_ts_eslint.RuleModule<"corsWildcardWithCredentials", readonly [], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
|
|
@@ -69,18 +235,61 @@ declare const rules: {
|
|
|
69
235
|
"no-fat-try-blocks": _typescript_eslint_utils_ts_eslint.RuleModule<"fatTryBlock", readonly [], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
|
|
70
236
|
name: string;
|
|
71
237
|
};
|
|
72
|
-
"no-secret-in-log": _typescript_eslint_utils_ts_eslint.RuleModule<"noSecretInLog", readonly [], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
|
|
238
|
+
"no-secret-in-log": _typescript_eslint_utils_ts_eslint.RuleModule<"noSecretInLog", readonly [LoggingOptions?], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
|
|
73
239
|
name: string;
|
|
74
240
|
};
|
|
75
241
|
"no-unsafe-cast": _typescript_eslint_utils_ts_eslint.RuleModule<"asAny" | "doubleCast", [], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
|
|
76
242
|
name: string;
|
|
77
243
|
};
|
|
78
|
-
"prefer-string-literal-union": _typescript_eslint_utils_ts_eslint.RuleModule<"bareChoiceField" | "comparisonCluster", readonly [
|
|
244
|
+
"prefer-string-literal-union": _typescript_eslint_utils_ts_eslint.RuleModule<"bareChoiceField" | "comparisonCluster", readonly [{
|
|
245
|
+
ignoreFields?: readonly string[];
|
|
246
|
+
}?], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
|
|
79
247
|
name: string;
|
|
80
248
|
};
|
|
81
249
|
"single-public-export": _typescript_eslint_utils_ts_eslint.RuleModule<"renameJunkDrawer", readonly [], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
|
|
82
250
|
name: string;
|
|
83
251
|
};
|
|
252
|
+
"no-silent-promise-catch": _typescript_eslint_utils_ts_eslint.RuleModule<"silentCatch", readonly [], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
|
|
253
|
+
name: string;
|
|
254
|
+
};
|
|
255
|
+
"require-fetch-timeout": _typescript_eslint_utils_ts_eslint.RuleModule<"missingSignal", readonly [{
|
|
256
|
+
allowIn?: readonly string[];
|
|
257
|
+
}?], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
|
|
258
|
+
name: string;
|
|
259
|
+
};
|
|
260
|
+
"require-schema-validate-search": _typescript_eslint_utils_ts_eslint.RuleModule<"castInValidateSearch", readonly [], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
|
|
261
|
+
name: string;
|
|
262
|
+
};
|
|
263
|
+
"no-offset-pagination": _typescript_eslint_utils_ts_eslint.RuleModule<"noOffsetPagination", readonly [], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
|
|
264
|
+
name: string;
|
|
265
|
+
};
|
|
266
|
+
"no-positional-tuple-return": _typescript_eslint_utils_ts_eslint.RuleModule<"noPositionalTupleReturn", readonly [], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
|
|
267
|
+
name: string;
|
|
268
|
+
};
|
|
269
|
+
"no-repeated-string-literal": _typescript_eslint_utils_ts_eslint.RuleModule<"noRepeatedStringLiteral", readonly [], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
|
|
270
|
+
name: string;
|
|
271
|
+
};
|
|
272
|
+
"no-select-star": _typescript_eslint_utils_ts_eslint.RuleModule<"noSelectStar", readonly [], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
|
|
273
|
+
name: string;
|
|
274
|
+
};
|
|
275
|
+
"no-sleep-in-test-body": _typescript_eslint_utils_ts_eslint.RuleModule<"noSleepInTestBody", readonly [], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
|
|
276
|
+
name: string;
|
|
277
|
+
};
|
|
278
|
+
"prefer-constant-time-secret-compare": _typescript_eslint_utils_ts_eslint.RuleModule<"preferConstantTimeSecretCompare", readonly [], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
|
|
279
|
+
name: string;
|
|
280
|
+
};
|
|
281
|
+
"store-insert-requires-on-conflict": _typescript_eslint_utils_ts_eslint.RuleModule<"storeInsertRequiresOnConflict", readonly [], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
|
|
282
|
+
name: string;
|
|
283
|
+
};
|
|
284
|
+
"no-dynamic-sql": _typescript_eslint_utils_ts_eslint.RuleModule<"dynamicSql", readonly [RuleOptions?], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
|
|
285
|
+
name: string;
|
|
286
|
+
};
|
|
287
|
+
"no-raw-fetch-outside-clients": _typescript_eslint_utils_ts_eslint.RuleModule<"rawFetch", readonly [RuleOptions$1?], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
|
|
288
|
+
name: string;
|
|
289
|
+
};
|
|
290
|
+
"no-storage-in-stateless-modules": _typescript_eslint_utils_ts_eslint.RuleModule<"storageInStatelessModule", readonly [RuleOptions$2?], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
|
|
291
|
+
name: string;
|
|
292
|
+
};
|
|
84
293
|
};
|
|
85
294
|
declare const plugin: {
|
|
86
295
|
meta: {
|
|
@@ -108,13 +317,13 @@ declare const plugin: {
|
|
|
108
317
|
"no-json-stringify-error": _typescript_eslint_utils_ts_eslint.RuleModule<"noJsonStringifyError", readonly [], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
|
|
109
318
|
name: string;
|
|
110
319
|
};
|
|
111
|
-
"no-log-only-catch": _typescript_eslint_utils_ts_eslint.RuleModule<"noLogOnlyCatch" | "emptyCatch", readonly [], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
|
|
320
|
+
"no-log-only-catch": _typescript_eslint_utils_ts_eslint.RuleModule<"noLogOnlyCatch" | "emptyCatch", readonly [LoggingOptions?], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
|
|
112
321
|
name: string;
|
|
113
322
|
};
|
|
114
323
|
"no-raw-env": _typescript_eslint_utils_ts_eslint.RuleModule<"noRawEnv", readonly [], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
|
|
115
324
|
name: string;
|
|
116
325
|
};
|
|
117
|
-
"no-sentinel-return-on-catch": _typescript_eslint_utils_ts_eslint.RuleModule<"noSentinelReturn", readonly [], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
|
|
326
|
+
"no-sentinel-return-on-catch": _typescript_eslint_utils_ts_eslint.RuleModule<"noSentinelReturn", readonly [LoggingOptions?], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
|
|
118
327
|
name: string;
|
|
119
328
|
};
|
|
120
329
|
"no-sequential-await": _typescript_eslint_utils_ts_eslint.RuleModule<"noSequentialAwait", readonly [], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
|
|
@@ -147,7 +356,9 @@ declare const plugin: {
|
|
|
147
356
|
"require-zod-form-validation": _typescript_eslint_utils_ts_eslint.RuleModule<"missingZodValidation", readonly [], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
|
|
148
357
|
name: string;
|
|
149
358
|
};
|
|
150
|
-
"zod-naming-convention": _typescript_eslint_utils_ts_eslint.RuleModule<"zPrefix"
|
|
359
|
+
"zod-naming-convention": _typescript_eslint_utils_ts_eslint.RuleModule<"zPrefix" | "schemaSuffix" | "zodSchemaName", readonly [{
|
|
360
|
+
convention?: "prefix" | "suffix" | "either";
|
|
361
|
+
}?], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
|
|
151
362
|
name: string;
|
|
152
363
|
};
|
|
153
364
|
"no-cors-wildcard-with-credentials": _typescript_eslint_utils_ts_eslint.RuleModule<"corsWildcardWithCredentials", readonly [], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
|
|
@@ -156,18 +367,61 @@ declare const plugin: {
|
|
|
156
367
|
"no-fat-try-blocks": _typescript_eslint_utils_ts_eslint.RuleModule<"fatTryBlock", readonly [], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
|
|
157
368
|
name: string;
|
|
158
369
|
};
|
|
159
|
-
"no-secret-in-log": _typescript_eslint_utils_ts_eslint.RuleModule<"noSecretInLog", readonly [], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
|
|
370
|
+
"no-secret-in-log": _typescript_eslint_utils_ts_eslint.RuleModule<"noSecretInLog", readonly [LoggingOptions?], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
|
|
160
371
|
name: string;
|
|
161
372
|
};
|
|
162
373
|
"no-unsafe-cast": _typescript_eslint_utils_ts_eslint.RuleModule<"asAny" | "doubleCast", [], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
|
|
163
374
|
name: string;
|
|
164
375
|
};
|
|
165
|
-
"prefer-string-literal-union": _typescript_eslint_utils_ts_eslint.RuleModule<"bareChoiceField" | "comparisonCluster", readonly [
|
|
376
|
+
"prefer-string-literal-union": _typescript_eslint_utils_ts_eslint.RuleModule<"bareChoiceField" | "comparisonCluster", readonly [{
|
|
377
|
+
ignoreFields?: readonly string[];
|
|
378
|
+
}?], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
|
|
166
379
|
name: string;
|
|
167
380
|
};
|
|
168
381
|
"single-public-export": _typescript_eslint_utils_ts_eslint.RuleModule<"renameJunkDrawer", readonly [], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
|
|
169
382
|
name: string;
|
|
170
383
|
};
|
|
384
|
+
"no-silent-promise-catch": _typescript_eslint_utils_ts_eslint.RuleModule<"silentCatch", readonly [], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
|
|
385
|
+
name: string;
|
|
386
|
+
};
|
|
387
|
+
"require-fetch-timeout": _typescript_eslint_utils_ts_eslint.RuleModule<"missingSignal", readonly [{
|
|
388
|
+
allowIn?: readonly string[];
|
|
389
|
+
}?], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
|
|
390
|
+
name: string;
|
|
391
|
+
};
|
|
392
|
+
"require-schema-validate-search": _typescript_eslint_utils_ts_eslint.RuleModule<"castInValidateSearch", readonly [], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
|
|
393
|
+
name: string;
|
|
394
|
+
};
|
|
395
|
+
"no-offset-pagination": _typescript_eslint_utils_ts_eslint.RuleModule<"noOffsetPagination", readonly [], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
|
|
396
|
+
name: string;
|
|
397
|
+
};
|
|
398
|
+
"no-positional-tuple-return": _typescript_eslint_utils_ts_eslint.RuleModule<"noPositionalTupleReturn", readonly [], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
|
|
399
|
+
name: string;
|
|
400
|
+
};
|
|
401
|
+
"no-repeated-string-literal": _typescript_eslint_utils_ts_eslint.RuleModule<"noRepeatedStringLiteral", readonly [], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
|
|
402
|
+
name: string;
|
|
403
|
+
};
|
|
404
|
+
"no-select-star": _typescript_eslint_utils_ts_eslint.RuleModule<"noSelectStar", readonly [], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
|
|
405
|
+
name: string;
|
|
406
|
+
};
|
|
407
|
+
"no-sleep-in-test-body": _typescript_eslint_utils_ts_eslint.RuleModule<"noSleepInTestBody", readonly [], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
|
|
408
|
+
name: string;
|
|
409
|
+
};
|
|
410
|
+
"prefer-constant-time-secret-compare": _typescript_eslint_utils_ts_eslint.RuleModule<"preferConstantTimeSecretCompare", readonly [], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
|
|
411
|
+
name: string;
|
|
412
|
+
};
|
|
413
|
+
"store-insert-requires-on-conflict": _typescript_eslint_utils_ts_eslint.RuleModule<"storeInsertRequiresOnConflict", readonly [], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
|
|
414
|
+
name: string;
|
|
415
|
+
};
|
|
416
|
+
"no-dynamic-sql": _typescript_eslint_utils_ts_eslint.RuleModule<"dynamicSql", readonly [RuleOptions?], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
|
|
417
|
+
name: string;
|
|
418
|
+
};
|
|
419
|
+
"no-raw-fetch-outside-clients": _typescript_eslint_utils_ts_eslint.RuleModule<"rawFetch", readonly [RuleOptions$1?], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
|
|
420
|
+
name: string;
|
|
421
|
+
};
|
|
422
|
+
"no-storage-in-stateless-modules": _typescript_eslint_utils_ts_eslint.RuleModule<"storageInStatelessModule", readonly [RuleOptions$2?], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
|
|
423
|
+
name: string;
|
|
424
|
+
};
|
|
171
425
|
};
|
|
172
426
|
configs: {
|
|
173
427
|
recommended: {
|
|
@@ -196,6 +450,17 @@ declare const plugin: {
|
|
|
196
450
|
"@sarj/no-unsafe-cast": string;
|
|
197
451
|
"@sarj/single-public-export": string;
|
|
198
452
|
"@sarj/prefer-string-literal-union": string;
|
|
453
|
+
"@sarj/require-fetch-timeout": string;
|
|
454
|
+
"@sarj/no-silent-promise-catch": string;
|
|
455
|
+
"@sarj/require-schema-validate-search": string;
|
|
456
|
+
"@sarj/prefer-constant-time-secret-compare": string;
|
|
457
|
+
"@sarj/store-insert-requires-on-conflict": string;
|
|
458
|
+
"@sarj/no-offset-pagination": string;
|
|
459
|
+
"@sarj/no-select-star": string;
|
|
460
|
+
"@sarj/no-sleep-in-test-body": string;
|
|
461
|
+
"@sarj/no-repeated-string-literal": string;
|
|
462
|
+
"@sarj/no-positional-tuple-return": string;
|
|
463
|
+
"@sarj/no-dynamic-sql": string;
|
|
199
464
|
};
|
|
200
465
|
};
|
|
201
466
|
strict: {
|
|
@@ -227,6 +492,19 @@ declare const plugin: {
|
|
|
227
492
|
"@sarj/no-unsafe-cast": string;
|
|
228
493
|
"@sarj/single-public-export": string;
|
|
229
494
|
"@sarj/prefer-string-literal-union": string;
|
|
495
|
+
"@sarj/require-fetch-timeout": string;
|
|
496
|
+
"@sarj/no-silent-promise-catch": string;
|
|
497
|
+
"@sarj/require-schema-validate-search": string;
|
|
498
|
+
"@sarj/prefer-constant-time-secret-compare": string;
|
|
499
|
+
"@sarj/store-insert-requires-on-conflict": string;
|
|
500
|
+
"@sarj/no-offset-pagination": string;
|
|
501
|
+
"@sarj/no-select-star": string;
|
|
502
|
+
"@sarj/no-sleep-in-test-body": string;
|
|
503
|
+
"@sarj/no-repeated-string-literal": string;
|
|
504
|
+
"@sarj/no-positional-tuple-return": string;
|
|
505
|
+
"@sarj/no-dynamic-sql": string;
|
|
506
|
+
"@sarj/no-raw-fetch-outside-clients": string;
|
|
507
|
+
"@sarj/no-storage-in-stateless-modules": string;
|
|
230
508
|
};
|
|
231
509
|
};
|
|
232
510
|
};
|