@sarj/eslint-plugin 9.7.1 → 9.9.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.d.cts CHANGED
@@ -35,6 +35,18 @@ interface RuleOptions$2 {
35
35
  readonly methods?: readonly string[];
36
36
  }
37
37
 
38
+ /**
39
+ * @fileoverview no-restricted-library-load — literal runtime module loads must obey the same library policy as static imports.
40
+ *
41
+ * Examples: https://github.com/sarj-ai/standards/blob/main/packages/typescript/tests/rules/no-restricted-library-load.test.ts
42
+ */
43
+ interface RestrictedLibrary {
44
+ readonly id: string;
45
+ readonly module: string;
46
+ readonly replacement: string;
47
+ readonly note?: string;
48
+ }
49
+
38
50
  /**
39
51
  * @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.
40
52
  *
@@ -114,6 +126,9 @@ declare const rules: {
114
126
  }?], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
115
127
  name: string;
116
128
  };
129
+ "no-hand-rolled-spinner": _typescript_eslint_utils_ts_eslint.RuleModule<"handRolledSpinner", readonly [], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
130
+ name: string;
131
+ };
117
132
  "no-insecure-random-id": _typescript_eslint_utils_ts_eslint.RuleModule<"insecureRandomId", readonly [], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
118
133
  name: string;
119
134
  };
@@ -138,6 +153,11 @@ declare const rules: {
138
153
  "no-raw-fetch-outside-clients": _typescript_eslint_utils_ts_eslint.RuleModule<"rawFetch", readonly [RuleOptions$1?], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
139
154
  name: string;
140
155
  };
156
+ "no-restricted-library-load": _typescript_eslint_utils_ts_eslint.RuleModule<"restrictedLibraryLoad", readonly [{
157
+ libraries: readonly RestrictedLibrary[];
158
+ }], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
159
+ name: string;
160
+ };
141
161
  "no-repeated-string-literal": _typescript_eslint_utils_ts_eslint.RuleModule<"noRepeatedStringLiteral", readonly [], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
142
162
  name: string;
143
163
  };
@@ -218,6 +238,9 @@ declare const rules: {
218
238
  "prefer-non-nullable-collection": _typescript_eslint_utils_ts_eslint.RuleModule<"preferNonNullableCollection", readonly [], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
219
239
  name: string;
220
240
  };
241
+ "prefer-native-random-uuid": _typescript_eslint_utils_ts_eslint.RuleModule<"preferNative" | "replaceWithNative", readonly [], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
242
+ name: string;
243
+ };
221
244
  "prefer-schema-for-api-payload": _typescript_eslint_utils_ts_eslint.RuleModule<"unparsedJsonAccess", readonly [], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
222
245
  name: string;
223
246
  };
@@ -260,6 +283,9 @@ declare const rules: {
260
283
  "require-interface-for-injected-service": _typescript_eslint_utils_ts_eslint.RuleModule<"requireInterface", readonly [], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
261
284
  name: string;
262
285
  };
286
+ "require-static-next-matcher": _typescript_eslint_utils_ts_eslint.RuleModule<"dynamicMatcher", readonly [], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
287
+ name: string;
288
+ };
263
289
  "require-zod-form-validation": _typescript_eslint_utils_ts_eslint.RuleModule<"missingZodValidation", readonly [], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
264
290
  name: string;
265
291
  };
@@ -272,6 +298,8 @@ declare const rules: {
272
298
  name: string;
273
299
  };
274
300
  };
301
+ /** Rules registered for application-profile configs but intentionally absent from general presets. */
302
+ declare const applicationOnlyRules: readonly ["no-restricted-library-load", "prefer-native-random-uuid"];
275
303
  declare const recommendedRules: {
276
304
  readonly "@sarj/enforce-file-structure": "warn";
277
305
  readonly "@sarj/no-async-callback-in-wait-for": "warn";
@@ -282,6 +310,7 @@ declare const recommendedRules: {
282
310
  readonly "@sarj/no-dynamic-sql": "warn";
283
311
  readonly "@sarj/no-fat-try-blocks": "warn";
284
312
  readonly "@sarj/no-hand-rolled-sleep": "warn";
313
+ readonly "@sarj/no-hand-rolled-spinner": "error";
285
314
  readonly "@sarj/no-insecure-random-id": "warn";
286
315
  readonly "@sarj/no-json-stringify-error": "warn";
287
316
  readonly "@sarj/no-log-only-catch": "warn";
@@ -324,6 +353,7 @@ declare const recommendedRules: {
324
353
  readonly "@sarj/require-assert-never": "error";
325
354
  readonly "@sarj/require-fetch-timeout": "warn";
326
355
  readonly "@sarj/require-interface-for-injected-service": "warn";
356
+ readonly "@sarj/require-static-next-matcher": "error";
327
357
  readonly "@sarj/require-zod-form-validation": "error";
328
358
  readonly "@sarj/store-insert-requires-on-conflict": "warn";
329
359
  readonly "@sarj/zod-naming-convention": "warn";
@@ -339,6 +369,7 @@ declare const strictRules: {
339
369
  readonly "@sarj/no-enum": "error";
340
370
  readonly "@sarj/no-fat-try-blocks": "error";
341
371
  readonly "@sarj/no-hand-rolled-sleep": "error";
372
+ readonly "@sarj/no-hand-rolled-spinner": "error";
342
373
  readonly "@sarj/no-insecure-random-id": "error";
343
374
  readonly "@sarj/no-json-stringify-error": "error";
344
375
  readonly "@sarj/no-log-only-catch": "error";
@@ -384,6 +415,7 @@ declare const strictRules: {
384
415
  readonly "@sarj/require-assert-never": "error";
385
416
  readonly "@sarj/require-fetch-timeout": "error";
386
417
  readonly "@sarj/require-interface-for-injected-service": "error";
418
+ readonly "@sarj/require-static-next-matcher": "error";
387
419
  readonly "@sarj/require-zod-form-validation": "error";
388
420
  readonly "@sarj/store-insert-requires-on-conflict": "error";
389
421
  readonly "@sarj/zod-naming-convention": "error";
@@ -401,7 +433,7 @@ type FlatPreset = {
401
433
  declare const plugin: {
402
434
  meta: {
403
435
  readonly name: "@sarj/eslint-plugin";
404
- readonly version: "9.7.1";
436
+ readonly version: "9.9.0";
405
437
  };
406
438
  rules: {
407
439
  "enforce-file-structure": _typescript_eslint_utils_ts_eslint.RuleModule<"importsFirst" | "useServerDirective", readonly [], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
@@ -439,6 +471,9 @@ declare const plugin: {
439
471
  }?], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
440
472
  name: string;
441
473
  };
474
+ "no-hand-rolled-spinner": _typescript_eslint_utils_ts_eslint.RuleModule<"handRolledSpinner", readonly [], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
475
+ name: string;
476
+ };
442
477
  "no-insecure-random-id": _typescript_eslint_utils_ts_eslint.RuleModule<"insecureRandomId", readonly [], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
443
478
  name: string;
444
479
  };
@@ -463,6 +498,11 @@ declare const plugin: {
463
498
  "no-raw-fetch-outside-clients": _typescript_eslint_utils_ts_eslint.RuleModule<"rawFetch", readonly [RuleOptions$1?], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
464
499
  name: string;
465
500
  };
501
+ "no-restricted-library-load": _typescript_eslint_utils_ts_eslint.RuleModule<"restrictedLibraryLoad", readonly [{
502
+ libraries: readonly RestrictedLibrary[];
503
+ }], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
504
+ name: string;
505
+ };
466
506
  "no-repeated-string-literal": _typescript_eslint_utils_ts_eslint.RuleModule<"noRepeatedStringLiteral", readonly [], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
467
507
  name: string;
468
508
  };
@@ -543,6 +583,9 @@ declare const plugin: {
543
583
  "prefer-non-nullable-collection": _typescript_eslint_utils_ts_eslint.RuleModule<"preferNonNullableCollection", readonly [], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
544
584
  name: string;
545
585
  };
586
+ "prefer-native-random-uuid": _typescript_eslint_utils_ts_eslint.RuleModule<"preferNative" | "replaceWithNative", readonly [], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
587
+ name: string;
588
+ };
546
589
  "prefer-schema-for-api-payload": _typescript_eslint_utils_ts_eslint.RuleModule<"unparsedJsonAccess", readonly [], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
547
590
  name: string;
548
591
  };
@@ -585,6 +628,9 @@ declare const plugin: {
585
628
  "require-interface-for-injected-service": _typescript_eslint_utils_ts_eslint.RuleModule<"requireInterface", readonly [], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
586
629
  name: string;
587
630
  };
631
+ "require-static-next-matcher": _typescript_eslint_utils_ts_eslint.RuleModule<"dynamicMatcher", readonly [], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
632
+ name: string;
633
+ };
588
634
  "require-zod-form-validation": _typescript_eslint_utils_ts_eslint.RuleModule<"missingZodValidation", readonly [], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
589
635
  name: string;
590
636
  };
@@ -604,4 +650,4 @@ declare const plugin: {
604
650
  };
605
651
  };
606
652
 
607
- export { type RetiredRule, plugin as default, recommendedRules, renamedRules, retiredRules, rules, strictRules };
653
+ export { type RetiredRule, applicationOnlyRules, plugin as default, recommendedRules, renamedRules, retiredRules, rules, strictRules };
package/dist/index.d.ts CHANGED
@@ -35,6 +35,18 @@ interface RuleOptions$2 {
35
35
  readonly methods?: readonly string[];
36
36
  }
37
37
 
38
+ /**
39
+ * @fileoverview no-restricted-library-load — literal runtime module loads must obey the same library policy as static imports.
40
+ *
41
+ * Examples: https://github.com/sarj-ai/standards/blob/main/packages/typescript/tests/rules/no-restricted-library-load.test.ts
42
+ */
43
+ interface RestrictedLibrary {
44
+ readonly id: string;
45
+ readonly module: string;
46
+ readonly replacement: string;
47
+ readonly note?: string;
48
+ }
49
+
38
50
  /**
39
51
  * @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.
40
52
  *
@@ -114,6 +126,9 @@ declare const rules: {
114
126
  }?], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
115
127
  name: string;
116
128
  };
129
+ "no-hand-rolled-spinner": _typescript_eslint_utils_ts_eslint.RuleModule<"handRolledSpinner", readonly [], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
130
+ name: string;
131
+ };
117
132
  "no-insecure-random-id": _typescript_eslint_utils_ts_eslint.RuleModule<"insecureRandomId", readonly [], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
118
133
  name: string;
119
134
  };
@@ -138,6 +153,11 @@ declare const rules: {
138
153
  "no-raw-fetch-outside-clients": _typescript_eslint_utils_ts_eslint.RuleModule<"rawFetch", readonly [RuleOptions$1?], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
139
154
  name: string;
140
155
  };
156
+ "no-restricted-library-load": _typescript_eslint_utils_ts_eslint.RuleModule<"restrictedLibraryLoad", readonly [{
157
+ libraries: readonly RestrictedLibrary[];
158
+ }], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
159
+ name: string;
160
+ };
141
161
  "no-repeated-string-literal": _typescript_eslint_utils_ts_eslint.RuleModule<"noRepeatedStringLiteral", readonly [], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
142
162
  name: string;
143
163
  };
@@ -218,6 +238,9 @@ declare const rules: {
218
238
  "prefer-non-nullable-collection": _typescript_eslint_utils_ts_eslint.RuleModule<"preferNonNullableCollection", readonly [], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
219
239
  name: string;
220
240
  };
241
+ "prefer-native-random-uuid": _typescript_eslint_utils_ts_eslint.RuleModule<"preferNative" | "replaceWithNative", readonly [], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
242
+ name: string;
243
+ };
221
244
  "prefer-schema-for-api-payload": _typescript_eslint_utils_ts_eslint.RuleModule<"unparsedJsonAccess", readonly [], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
222
245
  name: string;
223
246
  };
@@ -260,6 +283,9 @@ declare const rules: {
260
283
  "require-interface-for-injected-service": _typescript_eslint_utils_ts_eslint.RuleModule<"requireInterface", readonly [], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
261
284
  name: string;
262
285
  };
286
+ "require-static-next-matcher": _typescript_eslint_utils_ts_eslint.RuleModule<"dynamicMatcher", readonly [], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
287
+ name: string;
288
+ };
263
289
  "require-zod-form-validation": _typescript_eslint_utils_ts_eslint.RuleModule<"missingZodValidation", readonly [], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
264
290
  name: string;
265
291
  };
@@ -272,6 +298,8 @@ declare const rules: {
272
298
  name: string;
273
299
  };
274
300
  };
301
+ /** Rules registered for application-profile configs but intentionally absent from general presets. */
302
+ declare const applicationOnlyRules: readonly ["no-restricted-library-load", "prefer-native-random-uuid"];
275
303
  declare const recommendedRules: {
276
304
  readonly "@sarj/enforce-file-structure": "warn";
277
305
  readonly "@sarj/no-async-callback-in-wait-for": "warn";
@@ -282,6 +310,7 @@ declare const recommendedRules: {
282
310
  readonly "@sarj/no-dynamic-sql": "warn";
283
311
  readonly "@sarj/no-fat-try-blocks": "warn";
284
312
  readonly "@sarj/no-hand-rolled-sleep": "warn";
313
+ readonly "@sarj/no-hand-rolled-spinner": "error";
285
314
  readonly "@sarj/no-insecure-random-id": "warn";
286
315
  readonly "@sarj/no-json-stringify-error": "warn";
287
316
  readonly "@sarj/no-log-only-catch": "warn";
@@ -324,6 +353,7 @@ declare const recommendedRules: {
324
353
  readonly "@sarj/require-assert-never": "error";
325
354
  readonly "@sarj/require-fetch-timeout": "warn";
326
355
  readonly "@sarj/require-interface-for-injected-service": "warn";
356
+ readonly "@sarj/require-static-next-matcher": "error";
327
357
  readonly "@sarj/require-zod-form-validation": "error";
328
358
  readonly "@sarj/store-insert-requires-on-conflict": "warn";
329
359
  readonly "@sarj/zod-naming-convention": "warn";
@@ -339,6 +369,7 @@ declare const strictRules: {
339
369
  readonly "@sarj/no-enum": "error";
340
370
  readonly "@sarj/no-fat-try-blocks": "error";
341
371
  readonly "@sarj/no-hand-rolled-sleep": "error";
372
+ readonly "@sarj/no-hand-rolled-spinner": "error";
342
373
  readonly "@sarj/no-insecure-random-id": "error";
343
374
  readonly "@sarj/no-json-stringify-error": "error";
344
375
  readonly "@sarj/no-log-only-catch": "error";
@@ -384,6 +415,7 @@ declare const strictRules: {
384
415
  readonly "@sarj/require-assert-never": "error";
385
416
  readonly "@sarj/require-fetch-timeout": "error";
386
417
  readonly "@sarj/require-interface-for-injected-service": "error";
418
+ readonly "@sarj/require-static-next-matcher": "error";
387
419
  readonly "@sarj/require-zod-form-validation": "error";
388
420
  readonly "@sarj/store-insert-requires-on-conflict": "error";
389
421
  readonly "@sarj/zod-naming-convention": "error";
@@ -401,7 +433,7 @@ type FlatPreset = {
401
433
  declare const plugin: {
402
434
  meta: {
403
435
  readonly name: "@sarj/eslint-plugin";
404
- readonly version: "9.7.1";
436
+ readonly version: "9.9.0";
405
437
  };
406
438
  rules: {
407
439
  "enforce-file-structure": _typescript_eslint_utils_ts_eslint.RuleModule<"importsFirst" | "useServerDirective", readonly [], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
@@ -439,6 +471,9 @@ declare const plugin: {
439
471
  }?], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
440
472
  name: string;
441
473
  };
474
+ "no-hand-rolled-spinner": _typescript_eslint_utils_ts_eslint.RuleModule<"handRolledSpinner", readonly [], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
475
+ name: string;
476
+ };
442
477
  "no-insecure-random-id": _typescript_eslint_utils_ts_eslint.RuleModule<"insecureRandomId", readonly [], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
443
478
  name: string;
444
479
  };
@@ -463,6 +498,11 @@ declare const plugin: {
463
498
  "no-raw-fetch-outside-clients": _typescript_eslint_utils_ts_eslint.RuleModule<"rawFetch", readonly [RuleOptions$1?], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
464
499
  name: string;
465
500
  };
501
+ "no-restricted-library-load": _typescript_eslint_utils_ts_eslint.RuleModule<"restrictedLibraryLoad", readonly [{
502
+ libraries: readonly RestrictedLibrary[];
503
+ }], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
504
+ name: string;
505
+ };
466
506
  "no-repeated-string-literal": _typescript_eslint_utils_ts_eslint.RuleModule<"noRepeatedStringLiteral", readonly [], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
467
507
  name: string;
468
508
  };
@@ -543,6 +583,9 @@ declare const plugin: {
543
583
  "prefer-non-nullable-collection": _typescript_eslint_utils_ts_eslint.RuleModule<"preferNonNullableCollection", readonly [], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
544
584
  name: string;
545
585
  };
586
+ "prefer-native-random-uuid": _typescript_eslint_utils_ts_eslint.RuleModule<"preferNative" | "replaceWithNative", readonly [], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
587
+ name: string;
588
+ };
546
589
  "prefer-schema-for-api-payload": _typescript_eslint_utils_ts_eslint.RuleModule<"unparsedJsonAccess", readonly [], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
547
590
  name: string;
548
591
  };
@@ -585,6 +628,9 @@ declare const plugin: {
585
628
  "require-interface-for-injected-service": _typescript_eslint_utils_ts_eslint.RuleModule<"requireInterface", readonly [], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
586
629
  name: string;
587
630
  };
631
+ "require-static-next-matcher": _typescript_eslint_utils_ts_eslint.RuleModule<"dynamicMatcher", readonly [], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
632
+ name: string;
633
+ };
588
634
  "require-zod-form-validation": _typescript_eslint_utils_ts_eslint.RuleModule<"missingZodValidation", readonly [], unknown, _typescript_eslint_utils_ts_eslint.RuleListener> & {
589
635
  name: string;
590
636
  };
@@ -604,4 +650,4 @@ declare const plugin: {
604
650
  };
605
651
  };
606
652
 
607
- export { type RetiredRule, plugin as default, recommendedRules, renamedRules, retiredRules, rules, strictRules };
653
+ export { type RetiredRule, applicationOnlyRules, plugin as default, recommendedRules, renamedRules, retiredRules, rules, strictRules };