@sarj/eslint-plugin 16.35.0 → 16.36.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.ts CHANGED
@@ -1,5 +1,5 @@
1
- import { D as DocumentedRule } from './_docs-Bq5OCcWF.js';
2
- export { p as publicDocumentation } from './_docs-Bq5OCcWF.js';
1
+ import { D as DocumentedRule } from './_docs-IZjowAEc.js';
2
+ export { p as publicDocumentation } from './_docs-IZjowAEc.js';
3
3
  import '@typescript-eslint/utils';
4
4
 
5
5
  /** @fileoverview _retired-rules — burned rule names and their migration action. */
@@ -320,40 +320,39 @@ declare const RULES: {
320
320
  };
321
321
  /** @deprecated All repositories use one policy; retained for import compatibility. */
322
322
  declare const APPLICATION_ONLY_RULES: readonly [];
323
- /** Rules staged as non-blocking warnings while corpus adoption evidence accumulates. */
324
- declare const ADVISORY_RULES: readonly ["@sarj/excessive-commentary", "@sarj/no-bespoke-api-case-conversion", "@sarj/no-boolean-selector-parameter", "@sarj/no-cors-wildcard-with-credentials", "@sarj/no-credential-in-browser-storage", "@sarj/no-discarded-validation-result", "@sarj/no-exception-text-in-5xx-response", "@sarj/no-excess-jsx-props", "@sarj/no-generic-json-parser", "@sarj/no-mutating-container-transform", "@sarj/no-mutating-input-with-result", "@sarj/no-negative-only-http-status-assertion", "@sarj/no-numeric-search-param-coercion", "@sarj/no-redundant-consumer-union", "@sarj/no-redundant-local-alias", "@sarj/no-restated-comment", "@sarj/no-restated-jsdoc", "@sarj/no-return-disposed-resource", "@sarj/no-test-comments", "@sarj/prefer-dependency-interface", "@sarj/prefer-discriminated-union", "@sarj/prefer-millisecond-control-duration-schema", "@sarj/prefer-minimal-parameter-contract", "@sarj/prefer-module-level-refined-schema", "@sarj/prefer-native-fetch-in-server-actions", "@sarj/prefer-node-crypto-hash", "@sarj/prefer-node-fs-promises", "@sarj/prefer-shared-zod-enum", "@sarj/prefer-test-fixture-reuse", "@sarj/prefer-whole-object-assertion", "@sarj/prefer-zod-parse-output-type", "@sarj/production-derived-test-cases", "@sarj/require-constrained-schema-integer", "@sarj/require-jwt-lifetime", "@sarj/require-sql-access-class"];
325
- declare const RECOMMENDED_RULES: {
326
- readonly "@sarj/no-excess-jsx-props": "warn";
327
- readonly "@sarj/no-redundant-consumer-union": "warn";
328
- readonly "@sarj/prefer-minimal-parameter-contract": "warn";
329
- readonly "@sarj/named-child-schema-type": "error";
330
- readonly "@sarj/no-conditional-empty-object-spread": "error";
331
- readonly "@sarj/prefer-typed-reflection": "error";
332
- readonly "@sarj/no-broad-return-type": "error";
333
- readonly "@sarj/no-reduce-accumulator-copy": "error";
334
- readonly "@sarj/no-known-value-widening": "error";
335
- readonly "@sarj/no-invalid-typed-mutation": "error";
336
- readonly "@sarj/no-contradictory-type-predicate": "error";
337
- readonly "@sarj/no-partial-type-predicate": "error";
338
- readonly "@sarj/no-boolean-selector-parameter": "warn";
339
- readonly "@sarj/no-invalid-zod-custom-parse": "error";
340
- readonly "@sarj/no-contradictory-overload-return": "error";
341
- readonly "@sarj/require-button-accessible-name": "error";
342
- readonly "@sarj/require-camelcase-properties": "error";
343
- readonly "@sarj/require-svg-accessible-name": "error";
344
- readonly "@sarj/prefer-logical-tailwind-utilities": readonly ["error", {
323
+ type PresetMembership = "both" | "strict";
324
+ declare const RULE_POLICY: {
325
+ readonly "@sarj/no-excess-jsx-props": readonly ["warn", "both"];
326
+ readonly "@sarj/no-redundant-consumer-union": readonly ["warn", "both"];
327
+ readonly "@sarj/prefer-minimal-parameter-contract": readonly ["warn", "both"];
328
+ readonly "@sarj/named-child-schema-type": readonly ["error", "both"];
329
+ readonly "@sarj/no-conditional-empty-object-spread": readonly ["error", "both"];
330
+ readonly "@sarj/prefer-typed-reflection": readonly ["error", "both"];
331
+ readonly "@sarj/no-broad-return-type": readonly ["error", "both"];
332
+ readonly "@sarj/no-reduce-accumulator-copy": readonly ["error", "both"];
333
+ readonly "@sarj/no-known-value-widening": readonly ["error", "both"];
334
+ readonly "@sarj/no-invalid-typed-mutation": readonly ["error", "both"];
335
+ readonly "@sarj/no-contradictory-type-predicate": readonly ["error", "both"];
336
+ readonly "@sarj/no-partial-type-predicate": readonly ["error", "both"];
337
+ readonly "@sarj/no-boolean-selector-parameter": readonly ["warn", "both"];
338
+ readonly "@sarj/no-invalid-zod-custom-parse": readonly ["error", "both"];
339
+ readonly "@sarj/no-contradictory-overload-return": readonly ["error", "both"];
340
+ readonly "@sarj/require-button-accessible-name": readonly ["error", "both"];
341
+ readonly "@sarj/require-camelcase-properties": readonly ["error", "both"];
342
+ readonly "@sarj/require-svg-accessible-name": readonly ["error", "both"];
343
+ readonly "@sarj/prefer-logical-tailwind-utilities": readonly ["error", "both", () => readonly [{
345
344
  readonly enabled: false;
346
- }];
347
- readonly "@sarj/no-unlocalized-toast": readonly ["error", {
345
+ }]];
346
+ readonly "@sarj/no-unlocalized-toast": readonly ["error", "both", () => readonly [{
348
347
  readonly enabled: false;
349
- }];
350
- readonly "@sarj/no-unlocalized-jsx-attributes": readonly ["error", {
348
+ }]];
349
+ readonly "@sarj/no-unlocalized-jsx-attributes": readonly ["error", "both", () => readonly [{
351
350
  readonly enabled: false;
352
- }];
353
- readonly "@sarj/no-unlocalized-jsx-text": readonly ["error", {
351
+ }]];
352
+ readonly "@sarj/no-unlocalized-jsx-text": readonly ["error", "both", () => readonly [{
354
353
  readonly enabled: false;
355
- }];
356
- readonly "no-restricted-imports": readonly ["error", {
354
+ }]];
355
+ readonly "no-restricted-imports": readonly ["shared", "both", readonly ["error", {
357
356
  readonly paths: {
358
357
  name: "axios" | "request" | "node-fetch" | "cross-fetch" | "isomorphic-fetch" | "moment" | "dayjs" | "lodash" | "lodash-es" | "underscore" | "classnames" | "joi" | "yup" | "superstruct" | "io-ts" | "runtypes" | "jsonwebtoken" | "express" | "koa" | "jest" | "mocha" | "sinon" | "commander" | "yargs" | "bluebird" | "rimraf" | "fs-extra" | "abort-controller" | "querystring" | "dotenv" | "chalk" | "faker" | "node-sass" | "tslint";
359
358
  message: "Use the platform-native fetch API; review errors, timeouts, retries, and response parsing during migration." | "Standards standardizes date utilities on date-fns; migration is not API-compatible." | "Standards standardizes collection utilities on Remeda and native APIs." | "Use clsx for conditional class-name composition." | "Standards standardizes runtime validation on Zod; schemas are not drop-in compatible." | "Use jose; review key formats and async signing and verification APIs." | "Standards standardizes servers on Hono; Node deployments also need @hono/node-server." | "Standards standardizes tests on Vitest; review globals, timers, mocks, and environment setup." | "Use Vitest spies, mocks, and fake timers instead of Sinon." | "Standards standardizes command-line interfaces on citty." | "Use native Promise, adding p-limit or p-map only for the extensions actually needed." | "Prefer node:fs/promises; verify recursive removal, copy, path, and error semantics." | "Node 22 provides global AbortController." | "Use URLSearchParams and explicitly review repeated keys, escaping, arrays, and object coercion." | "Standards standardizes environment loading on @dotenvx/dotenvx." | "Use picocolors for terminal colors." | "The original faker package is abandoned; use @faker-js/faker." | "node-sass is end-of-life; use Dart Sass." | "TSLint is deprecated; use ESLint with typescript-eslint.";
@@ -362,8 +361,8 @@ declare const RECOMMENDED_RULES: {
362
361
  group: string[];
363
362
  message: "Use the platform-native fetch API; review errors, timeouts, retries, and response parsing during migration." | "Standards standardizes date utilities on date-fns; migration is not API-compatible." | "Standards standardizes collection utilities on Remeda and native APIs." | "Use clsx for conditional class-name composition." | "Standards standardizes runtime validation on Zod; schemas are not drop-in compatible." | "Use jose; review key formats and async signing and verification APIs." | "Standards standardizes servers on Hono; Node deployments also need @hono/node-server." | "Standards standardizes tests on Vitest; review globals, timers, mocks, and environment setup." | "Use Vitest spies, mocks, and fake timers instead of Sinon." | "Standards standardizes command-line interfaces on citty." | "Use native Promise, adding p-limit or p-map only for the extensions actually needed." | "Prefer node:fs/promises; verify recursive removal, copy, path, and error semantics." | "Node 22 provides global AbortController." | "Use URLSearchParams and explicitly review repeated keys, escaping, arrays, and object coercion." | "Standards standardizes environment loading on @dotenvx/dotenvx." | "Use picocolors for terminal colors." | "The original faker package is abandoned; use @faker-js/faker." | "node-sass is end-of-life; use Dart Sass." | "TSLint is deprecated; use ESLint with typescript-eslint.";
364
363
  }[];
365
- }];
366
- readonly "@sarj/no-restricted-library-load": readonly ["error", {
364
+ }]];
365
+ readonly "@sarj/no-restricted-library-load": readonly ["error", "both", () => readonly [{
367
366
  readonly libraries: readonly [{
368
367
  readonly id: "LIB101";
369
368
  readonly module: "request";
@@ -535,479 +534,153 @@ declare const RECOMMENDED_RULES: {
535
534
  readonly note: "TSLint is deprecated; use ESLint with typescript-eslint.";
536
535
  readonly replacement: "eslint";
537
536
  }];
538
- }];
539
- readonly "@sarj/no-redundant-local-alias": "warn";
540
- readonly "@sarj/prefer-test-fixture-reuse": "warn";
541
- readonly "@sarj/no-negative-only-http-status-assertion": "warn";
542
- readonly "@sarj/no-mutating-input-with-result": "warn";
543
- readonly "@sarj/no-return-disposed-resource": "warn";
544
- readonly "@sarj/no-discarded-validation-result": "warn";
545
- readonly "@sarj/require-jwt-lifetime": "warn";
546
- readonly "@sarj/prefer-dependency-interface": "warn";
547
- readonly "@sarj/no-generic-json-parser": "warn";
548
- readonly "@sarj/require-constrained-schema-integer": "warn";
549
- readonly "@sarj/production-derived-test-cases": "warn";
550
- readonly "@sarj/no-test-comments": "warn";
551
- readonly "@sarj/no-mutating-container-transform": "warn";
552
- readonly "@sarj/prefer-native-random-uuid": "error";
553
- readonly "@sarj/prefer-shadcn-primitives": "error";
554
- readonly "@sarj/excessive-commentary": "warn";
555
- readonly "@sarj/no-excessive-cognitive-complexity": "error";
556
- readonly "@sarj/interface-contract-members-private": "error";
557
- readonly "@sarj/iac-source-coupled-test": "error";
558
- readonly "@sarj/duplicate-test-body": "error";
559
- readonly "@sarj/enforce-file-structure": "error";
560
- readonly "@sarj/no-client-side-data-fetching": "error";
561
- readonly "@sarj/no-comment-cruft": "error";
562
- readonly "@sarj/no-cors-wildcard-with-credentials": "warn";
563
- readonly "@sarj/no-dynamic-sql": "error";
564
- readonly "@sarj/no-fat-try-blocks": readonly ["error", {
537
+ }]];
538
+ readonly "@sarj/no-redundant-local-alias": readonly ["warn", "both", "strict-order", 5];
539
+ readonly "@sarj/prefer-test-fixture-reuse": readonly ["warn", "both", "strict-order", 9];
540
+ readonly "@sarj/no-negative-only-http-status-assertion": readonly ["warn", "both", "strict-order", 4];
541
+ readonly "@sarj/no-mutating-input-with-result": readonly ["warn", "both", "strict-order", 3];
542
+ readonly "@sarj/no-return-disposed-resource": readonly ["warn", "both", "strict-order", 6];
543
+ readonly "@sarj/no-discarded-validation-result": readonly ["warn", "both", "strict-order", 0];
544
+ readonly "@sarj/require-jwt-lifetime": readonly ["warn", "both", "strict-order", 12];
545
+ readonly "@sarj/prefer-dependency-interface": readonly ["warn", "both", "strict-order", 8];
546
+ readonly "@sarj/no-generic-json-parser": readonly ["warn", "both", "strict-order", 1];
547
+ readonly "@sarj/require-constrained-schema-integer": readonly ["warn", "both", "strict-order", 11];
548
+ readonly "@sarj/production-derived-test-cases": readonly ["warn", "both", "strict-order", 10];
549
+ readonly "@sarj/no-test-comments": readonly ["warn", "both", "strict-order", 7];
550
+ readonly "@sarj/no-mutating-container-transform": readonly ["warn", "both", "strict-order", 2];
551
+ readonly "@sarj/prefer-native-random-uuid": readonly ["error", "both"];
552
+ readonly "@sarj/prefer-shadcn-primitives": readonly ["error", "both"];
553
+ readonly "@sarj/excessive-commentary": readonly ["warn", "both"];
554
+ readonly "@sarj/no-excessive-cognitive-complexity": readonly ["error", "both"];
555
+ readonly "@sarj/interface-contract-members-private": readonly ["error", "both"];
556
+ readonly "@sarj/iac-source-coupled-test": readonly ["error", "both"];
557
+ readonly "@sarj/duplicate-test-body": readonly ["error", "both"];
558
+ readonly "@sarj/enforce-file-structure": readonly ["error", "both"];
559
+ readonly "@sarj/no-client-side-data-fetching": readonly ["error", "both"];
560
+ readonly "@sarj/no-comment-cruft": readonly ["error", "both"];
561
+ readonly "@sarj/no-cors-wildcard-with-credentials": readonly ["warn", "both"];
562
+ readonly "@sarj/no-dynamic-sql": readonly ["error", "both"];
563
+ readonly "@sarj/no-enum": readonly ["error", "strict"];
564
+ readonly "@sarj/no-fat-try-blocks": readonly ["error", "both", () => readonly [{
565
565
  readonly max: 5;
566
- }];
567
- readonly "@sarj/no-hand-rolled-sleep": "error";
568
- readonly "@sarj/no-hand-rolled-spinner": "error";
569
- readonly "@sarj/no-insecure-random-id": "error";
570
- readonly "@sarj/no-exception-text-in-5xx-response": "warn";
571
- readonly "@sarj/no-json-stringify-error": "error";
572
- readonly "@sarj/no-impossible-zod-literal-bounds": "error";
573
- readonly "@sarj/no-in-operator-on-built-in-collections": "error";
574
- readonly "@sarj/no-log-only-catch": "error";
575
- readonly "@sarj/no-bare-return-from-test-catch": "error";
576
- readonly "@sarj/no-bespoke-api-case-conversion": "warn";
577
- readonly "@sarj/no-detached-global-fetch": "error";
578
- readonly "@sarj/no-json-stringify-object-equality": "error";
579
- readonly "@sarj/no-dangerously-allow-svg": "error";
580
- readonly "@sarj/no-credential-in-browser-storage": "warn";
581
- readonly "@sarj/no-numeric-search-param-coercion": "warn";
582
- readonly "@sarj/prefer-native-fetch-in-server-actions": "warn";
583
- readonly "@sarj/no-duplicate-lifecycle-refresh-listeners": "error";
584
- readonly "@sarj/no-long-comment": "error";
585
- readonly "@sarj/no-vague-suppression-description": "error";
586
- readonly "@sarj/no-generic-single-export-module": "error";
587
- readonly "@sarj/no-offset-pagination": "error";
588
- readonly "@sarj/no-positional-tuple-return": "error";
589
- readonly "@sarj/no-production-browser-source-maps": "error";
590
- readonly "@sarj/no-repeated-string-literal": "error";
591
- readonly "@sarj/no-redundant-optional-array-default": "error";
592
- readonly "@sarj/no-router-refresh-polling": "error";
593
- readonly "@sarj/no-restated-comment": "warn";
594
- readonly "@sarj/no-restated-jsdoc": "warn";
595
- readonly "@sarj/no-secret-in-log": "error";
596
- readonly "@sarj/no-server-env-in-client-component": "error";
597
- readonly "@sarj/no-select-star": "error";
598
- readonly "@sarj/no-sentinel-return-on-catch": "error";
599
- readonly "@sarj/no-silent-promise-catch": "error";
600
- readonly "@sarj/no-sleep-in-test-body": "error";
601
- readonly "@sarj/no-string-concat-in-loop": "error";
602
- readonly "@sarj/no-tautological-expect": "error";
603
- readonly "@sarj/no-duplicate-test-case": "error";
604
- readonly "@sarj/no-typed-doc-sections": "error";
605
- readonly "@sarj/no-trailing-value-narration": "error";
606
- readonly "@sarj/no-declaration-comment-wall": "error";
607
- readonly "@sarj/no-union-in-comment": "error";
608
- readonly "@sarj/no-type-member-comment-wall": "error";
609
- readonly "@sarj/no-unnecessary-use-client": "error";
610
- readonly "@sarj/no-unsafe-mock-casting": "error";
611
- readonly "@sarj/no-unsafe-test-double-cast": "error";
612
- readonly "@sarj/no-first-party-module-mock": "error";
613
- readonly "@sarj/no-zod-native-enum": "error";
614
- readonly "@sarj/test-loops-over-literal-cases": "error";
615
- readonly "@sarj/prefer-constant-time-secret-compare": "error";
616
- readonly "@sarj/prefer-ecmascript-private-members": "error";
617
- readonly "@sarj/prefer-discriminated-union": "warn";
618
- readonly "@sarj/prefer-input-group-search": "error";
619
- readonly "@sarj/prefer-millisecond-control-duration-schema": "warn";
620
- readonly "@sarj/prefer-immutable-module-constant": "error";
621
- readonly "@sarj/prefer-module-level-constant": "error";
622
- readonly "@sarj/prefer-module-level-schema": "error";
623
- readonly "@sarj/prefer-module-level-refined-schema": "warn";
624
- readonly "@sarj/prefer-multi-value-zod-literal": readonly ["error", {
566
+ }]];
567
+ readonly "@sarj/no-hand-rolled-sleep": readonly ["error", "both"];
568
+ readonly "@sarj/no-hand-rolled-spinner": readonly ["error", "both"];
569
+ readonly "@sarj/no-insecure-random-id": readonly ["error", "both"];
570
+ readonly "@sarj/no-exception-text-in-5xx-response": readonly ["warn", "both"];
571
+ readonly "@sarj/no-json-stringify-error": readonly ["error", "both"];
572
+ readonly "@sarj/no-impossible-zod-literal-bounds": readonly ["error", "both"];
573
+ readonly "@sarj/no-in-operator-on-built-in-collections": readonly ["error", "both"];
574
+ readonly "@sarj/no-log-only-catch": readonly ["error", "both"];
575
+ readonly "@sarj/no-bare-return-from-test-catch": readonly ["error", "both"];
576
+ readonly "@sarj/no-bespoke-api-case-conversion": readonly ["warn", "both"];
577
+ readonly "@sarj/no-detached-global-fetch": readonly ["error", "both"];
578
+ readonly "@sarj/no-json-stringify-object-equality": readonly ["error", "both"];
579
+ readonly "@sarj/no-dangerously-allow-svg": readonly ["error", "both"];
580
+ readonly "@sarj/no-credential-in-browser-storage": readonly ["warn", "both"];
581
+ readonly "@sarj/no-numeric-search-param-coercion": readonly ["warn", "both"];
582
+ readonly "@sarj/prefer-native-fetch-in-server-actions": readonly ["warn", "both"];
583
+ readonly "@sarj/no-duplicate-lifecycle-refresh-listeners": readonly ["error", "both"];
584
+ readonly "@sarj/no-long-comment": readonly ["error", "both"];
585
+ readonly "@sarj/no-vague-suppression-description": readonly ["error", "both"];
586
+ readonly "@sarj/no-generic-single-export-module": readonly ["error", "both"];
587
+ readonly "@sarj/no-offset-pagination": readonly ["error", "both"];
588
+ readonly "@sarj/no-positional-tuple-return": readonly ["error", "both"];
589
+ readonly "@sarj/no-production-browser-source-maps": readonly ["error", "both"];
590
+ readonly "@sarj/no-raw-env": readonly ["error", "strict"];
591
+ readonly "@sarj/no-raw-fetch-outside-clients": readonly ["error", "strict"];
592
+ readonly "@sarj/no-repeated-string-literal": readonly ["error", "both"];
593
+ readonly "@sarj/no-redundant-optional-array-default": readonly ["error", "both"];
594
+ readonly "@sarj/no-router-refresh-polling": readonly ["error", "both"];
595
+ readonly "@sarj/no-restated-comment": readonly ["warn", "both"];
596
+ readonly "@sarj/no-restated-jsdoc": readonly ["warn", "both"];
597
+ readonly "@sarj/no-secret-in-log": readonly ["error", "both"];
598
+ readonly "@sarj/no-server-env-in-client-component": readonly ["error", "both"];
599
+ readonly "@sarj/no-select-star": readonly ["error", "both"];
600
+ readonly "@sarj/no-sentinel-return-on-catch": readonly ["error", "both"];
601
+ readonly "@sarj/no-silent-promise-catch": readonly ["error", "both"];
602
+ readonly "@sarj/no-sleep-in-test-body": readonly ["error", "both"];
603
+ readonly "@sarj/no-storage-in-stateless-modules": readonly ["error", "strict"];
604
+ readonly "@sarj/no-string-concat-in-loop": readonly ["error", "both"];
605
+ readonly "@sarj/no-tautological-expect": readonly ["error", "both"];
606
+ readonly "@sarj/no-duplicate-test-case": readonly ["error", "both"];
607
+ readonly "@sarj/no-typed-doc-sections": readonly ["error", "both"];
608
+ readonly "@sarj/no-trailing-value-narration": readonly ["error", "both"];
609
+ readonly "@sarj/no-declaration-comment-wall": readonly ["error", "both"];
610
+ readonly "@sarj/no-union-in-comment": readonly ["error", "both"];
611
+ readonly "@sarj/no-type-member-comment-wall": readonly ["error", "both"];
612
+ readonly "@sarj/no-unnecessary-use-client": readonly ["error", "both"];
613
+ readonly "@sarj/no-unsafe-mock-casting": readonly ["error", "both"];
614
+ readonly "@sarj/no-unsafe-test-double-cast": readonly ["error", "both"];
615
+ readonly "@sarj/no-first-party-module-mock": readonly ["error", "both"];
616
+ readonly "@sarj/no-zod-native-enum": readonly ["error", "both"];
617
+ readonly "@sarj/test-loops-over-literal-cases": readonly ["error", "both"];
618
+ readonly "@sarj/prefer-constant-time-secret-compare": readonly ["error", "both"];
619
+ readonly "@sarj/prefer-ecmascript-private-members": readonly ["error", "both"];
620
+ readonly "@sarj/prefer-discriminated-union": readonly ["warn", "both"];
621
+ readonly "@sarj/prefer-input-group-search": readonly ["error", "both"];
622
+ readonly "@sarj/prefer-millisecond-control-duration-schema": readonly ["warn", "both"];
623
+ readonly "@sarj/prefer-immutable-module-constant": readonly ["error", "both"];
624
+ readonly "@sarj/prefer-module-level-constant": readonly ["error", "both"];
625
+ readonly "@sarj/prefer-module-level-schema": readonly ["error", "both"];
626
+ readonly "@sarj/prefer-module-level-refined-schema": readonly ["warn", "both"];
627
+ readonly "@sarj/prefer-multi-value-zod-literal": readonly ["error", "both", () => readonly [{
625
628
  readonly zodMajorVersion: 4;
626
- }];
627
- readonly "@sarj/prefer-named-callback-domain": "error";
628
- readonly "@sarj/prefer-nominal-id-types": "error";
629
- readonly "@sarj/prefer-named-complex-return-type": "error";
630
- readonly "@sarj/prefer-node-crypto-hash": "warn";
631
- readonly "@sarj/prefer-node-fs-promises": "warn";
632
- readonly "@sarj/prefer-non-nullable-collection": "error";
633
- readonly "@sarj/prefer-nullish-filter-predicate": "error";
634
- readonly "@sarj/prefer-await-in-async-return": "error";
635
- readonly "@sarj/prefer-schema-for-api-payload": "error";
636
- readonly "@sarj/prefer-shared-zod-enum": "warn";
637
- readonly "@sarj/prefer-switch-for-repeated-equality": "error";
638
- readonly "@sarj/prefer-semantic-colors": readonly ["error", {
629
+ }]];
630
+ readonly "@sarj/prefer-named-callback-domain": readonly ["error", "both"];
631
+ readonly "@sarj/prefer-nominal-id-types": readonly ["error", "both"];
632
+ readonly "@sarj/prefer-named-complex-return-type": readonly ["error", "both"];
633
+ readonly "@sarj/prefer-node-crypto-hash": readonly ["warn", "both"];
634
+ readonly "@sarj/prefer-node-fs-promises": readonly ["warn", "both"];
635
+ readonly "@sarj/prefer-non-nullable-collection": readonly ["error", "both"];
636
+ readonly "@sarj/prefer-nullish-filter-predicate": readonly ["error", "both"];
637
+ readonly "@sarj/prefer-await-in-async-return": readonly ["error", "both"];
638
+ readonly "@sarj/prefer-schema-for-api-payload": readonly ["error", "both"];
639
+ readonly "@sarj/prefer-shared-zod-enum": readonly ["warn", "both"];
640
+ readonly "@sarj/prefer-switch-for-repeated-equality": readonly ["error", "both"];
641
+ readonly "@sarj/prefer-semantic-colors": readonly ["error", "both", () => readonly [{
639
642
  readonly requireSemanticTokens: true;
640
- }];
641
- readonly "@sarj/prefer-server-actions": "error";
642
- readonly "@sarj/prefer-whole-object-assertion": "warn";
643
- readonly "@sarj/repeated-static-call-cases": "error";
644
- readonly "@sarj/prefer-zod-infer": "error";
645
- readonly "@sarj/prefer-zod-parse-output-type": "warn";
646
- readonly "@sarj/require-assert-never": "error";
647
- readonly "@sarj/require-fetch-timeout": "error";
648
- readonly "@sarj/require-explicit-contract-implementation": "error";
649
- readonly "@sarj/require-explicit-service-contract": "error";
650
- readonly "@sarj/require-interface-for-exported-class": "error";
651
- readonly "@sarj/require-port-for-service": "error";
652
- readonly "@sarj/require-sql-access-class": "warn";
653
- readonly "@sarj/require-static-next-matcher": "error";
654
- readonly "@sarj/require-use-form-default-values": "error";
655
- readonly "@sarj/require-use-server-in-actions-file": "error";
656
- readonly "@sarj/require-zod-form-validation": "error";
657
- readonly "@sarj/store-insert-requires-on-conflict": "error";
658
- readonly "@sarj/stepdown": "error";
659
- readonly "@sarj/source-coupled-test": "error";
660
- readonly "@sarj/sole-export-matches-filename": "error";
661
- readonly "@sarj/test-phase-label-comment": "error";
662
- readonly "@sarj/require-pascal-case-zod-schema-name": "error";
643
+ }]];
644
+ readonly "@sarj/prefer-server-actions": readonly ["error", "both"];
645
+ readonly "@sarj/prefer-whole-object-assertion": readonly ["warn", "both"];
646
+ readonly "@sarj/repeated-static-call-cases": readonly ["error", "both"];
647
+ readonly "@sarj/prefer-zod-infer": readonly ["error", "both"];
648
+ readonly "@sarj/prefer-zod-parse-output-type": readonly ["warn", "both"];
649
+ readonly "@sarj/require-assert-never": readonly ["error", "both"];
650
+ readonly "@sarj/require-fetch-timeout": readonly ["error", "both"];
651
+ readonly "@sarj/require-explicit-contract-implementation": readonly ["error", "both"];
652
+ readonly "@sarj/require-explicit-service-contract": readonly ["error", "both"];
653
+ readonly "@sarj/require-interface-for-exported-class": readonly ["error", "both"];
654
+ readonly "@sarj/require-port-for-service": readonly ["error", "both"];
655
+ readonly "@sarj/require-sql-access-class": readonly ["warn", "both"];
656
+ readonly "@sarj/require-static-next-matcher": readonly ["error", "both"];
657
+ readonly "@sarj/require-use-form-default-values": readonly ["error", "both"];
658
+ readonly "@sarj/require-use-server-in-actions-file": readonly ["error", "both"];
659
+ readonly "@sarj/require-zod-form-validation": readonly ["error", "both"];
660
+ readonly "@sarj/store-insert-requires-on-conflict": readonly ["error", "both"];
661
+ readonly "@sarj/stepdown": readonly ["error", "both"];
662
+ readonly "@sarj/source-coupled-test": readonly ["error", "both"];
663
+ readonly "@sarj/sole-export-matches-filename": readonly ["error", "both"];
664
+ readonly "@sarj/test-phase-label-comment": readonly ["error", "both"];
665
+ readonly "@sarj/require-pascal-case-zod-schema-name": readonly ["error", "both"];
663
666
  };
664
- declare const STRICT_RULES: {
665
- readonly "@sarj/no-discarded-validation-result": "warn";
666
- readonly "@sarj/no-generic-json-parser": "warn";
667
- readonly "@sarj/no-mutating-container-transform": "warn";
668
- readonly "@sarj/no-mutating-input-with-result": "warn";
669
- readonly "@sarj/no-negative-only-http-status-assertion": "warn";
670
- readonly "@sarj/no-redundant-local-alias": "warn";
671
- readonly "@sarj/no-return-disposed-resource": "warn";
672
- readonly "@sarj/no-test-comments": "warn";
673
- readonly "@sarj/prefer-dependency-interface": "warn";
674
- readonly "@sarj/prefer-test-fixture-reuse": "warn";
675
- readonly "@sarj/production-derived-test-cases": "warn";
676
- readonly "@sarj/require-constrained-schema-integer": "warn";
677
- readonly "@sarj/require-jwt-lifetime": "warn";
678
- readonly "@sarj/no-excess-jsx-props": "warn";
679
- readonly "@sarj/no-redundant-consumer-union": "warn";
680
- readonly "@sarj/prefer-minimal-parameter-contract": "warn";
681
- readonly "@sarj/named-child-schema-type": "error";
682
- readonly "@sarj/no-conditional-empty-object-spread": "error";
683
- readonly "@sarj/prefer-typed-reflection": "error";
684
- readonly "@sarj/no-broad-return-type": "error";
685
- readonly "@sarj/no-reduce-accumulator-copy": "error";
686
- readonly "@sarj/no-known-value-widening": "error";
687
- readonly "@sarj/no-invalid-typed-mutation": "error";
688
- readonly "@sarj/no-contradictory-type-predicate": "error";
689
- readonly "@sarj/no-partial-type-predicate": "error";
690
- readonly "@sarj/no-boolean-selector-parameter": "warn";
691
- readonly "@sarj/no-invalid-zod-custom-parse": "error";
692
- readonly "@sarj/no-contradictory-overload-return": "error";
693
- readonly "@sarj/require-button-accessible-name": "error";
694
- readonly "@sarj/require-camelcase-properties": "error";
695
- readonly "@sarj/require-svg-accessible-name": "error";
696
- readonly "@sarj/prefer-logical-tailwind-utilities": readonly ["error", {
697
- readonly enabled: false;
698
- }];
699
- readonly "@sarj/no-unlocalized-toast": readonly ["error", {
700
- readonly enabled: false;
701
- }];
702
- readonly "@sarj/no-unlocalized-jsx-attributes": readonly ["error", {
703
- readonly enabled: false;
704
- }];
705
- readonly "@sarj/no-unlocalized-jsx-text": readonly ["error", {
706
- readonly enabled: false;
707
- }];
708
- readonly "no-restricted-imports": readonly ["error", {
709
- readonly paths: {
710
- name: "axios" | "request" | "node-fetch" | "cross-fetch" | "isomorphic-fetch" | "moment" | "dayjs" | "lodash" | "lodash-es" | "underscore" | "classnames" | "joi" | "yup" | "superstruct" | "io-ts" | "runtypes" | "jsonwebtoken" | "express" | "koa" | "jest" | "mocha" | "sinon" | "commander" | "yargs" | "bluebird" | "rimraf" | "fs-extra" | "abort-controller" | "querystring" | "dotenv" | "chalk" | "faker" | "node-sass" | "tslint";
711
- message: "Use the platform-native fetch API; review errors, timeouts, retries, and response parsing during migration." | "Standards standardizes date utilities on date-fns; migration is not API-compatible." | "Standards standardizes collection utilities on Remeda and native APIs." | "Use clsx for conditional class-name composition." | "Standards standardizes runtime validation on Zod; schemas are not drop-in compatible." | "Use jose; review key formats and async signing and verification APIs." | "Standards standardizes servers on Hono; Node deployments also need @hono/node-server." | "Standards standardizes tests on Vitest; review globals, timers, mocks, and environment setup." | "Use Vitest spies, mocks, and fake timers instead of Sinon." | "Standards standardizes command-line interfaces on citty." | "Use native Promise, adding p-limit or p-map only for the extensions actually needed." | "Prefer node:fs/promises; verify recursive removal, copy, path, and error semantics." | "Node 22 provides global AbortController." | "Use URLSearchParams and explicitly review repeated keys, escaping, arrays, and object coercion." | "Standards standardizes environment loading on @dotenvx/dotenvx." | "Use picocolors for terminal colors." | "The original faker package is abandoned; use @faker-js/faker." | "node-sass is end-of-life; use Dart Sass." | "TSLint is deprecated; use ESLint with typescript-eslint.";
712
- }[];
713
- readonly patterns: {
714
- group: string[];
715
- message: "Use the platform-native fetch API; review errors, timeouts, retries, and response parsing during migration." | "Standards standardizes date utilities on date-fns; migration is not API-compatible." | "Standards standardizes collection utilities on Remeda and native APIs." | "Use clsx for conditional class-name composition." | "Standards standardizes runtime validation on Zod; schemas are not drop-in compatible." | "Use jose; review key formats and async signing and verification APIs." | "Standards standardizes servers on Hono; Node deployments also need @hono/node-server." | "Standards standardizes tests on Vitest; review globals, timers, mocks, and environment setup." | "Use Vitest spies, mocks, and fake timers instead of Sinon." | "Standards standardizes command-line interfaces on citty." | "Use native Promise, adding p-limit or p-map only for the extensions actually needed." | "Prefer node:fs/promises; verify recursive removal, copy, path, and error semantics." | "Node 22 provides global AbortController." | "Use URLSearchParams and explicitly review repeated keys, escaping, arrays, and object coercion." | "Standards standardizes environment loading on @dotenvx/dotenvx." | "Use picocolors for terminal colors." | "The original faker package is abandoned; use @faker-js/faker." | "node-sass is end-of-life; use Dart Sass." | "TSLint is deprecated; use ESLint with typescript-eslint.";
716
- }[];
717
- }];
718
- readonly "@sarj/no-restricted-library-load": readonly ["error", {
719
- readonly libraries: readonly [{
720
- readonly id: "LIB101";
721
- readonly module: "request";
722
- readonly note: "Use the platform-native fetch API; review errors, timeouts, retries, and response parsing during migration.";
723
- readonly replacement: "native fetch";
724
- }, {
725
- readonly id: "LIB101";
726
- readonly module: "node-fetch";
727
- readonly note: "Use the platform-native fetch API; review errors, timeouts, retries, and response parsing during migration.";
728
- readonly replacement: "native fetch";
729
- }, {
730
- readonly id: "LIB101";
731
- readonly module: "cross-fetch";
732
- readonly note: "Use the platform-native fetch API; review errors, timeouts, retries, and response parsing during migration.";
733
- readonly replacement: "native fetch";
734
- }, {
735
- readonly id: "LIB101";
736
- readonly module: "isomorphic-fetch";
737
- readonly note: "Use the platform-native fetch API; review errors, timeouts, retries, and response parsing during migration.";
738
- readonly replacement: "native fetch";
739
- }, {
740
- readonly id: "LIB101";
741
- readonly module: "axios";
742
- readonly note: "Use the platform-native fetch API; review errors, timeouts, retries, and response parsing during migration.";
743
- readonly replacement: "native fetch";
744
- }, {
745
- readonly id: "LIB102";
746
- readonly module: "moment";
747
- readonly note: "Standards standardizes date utilities on date-fns; migration is not API-compatible.";
748
- readonly replacement: "date-fns";
749
- }, {
750
- readonly id: "LIB102";
751
- readonly module: "dayjs";
752
- readonly note: "Standards standardizes date utilities on date-fns; migration is not API-compatible.";
753
- readonly replacement: "date-fns";
754
- }, {
755
- readonly id: "LIB103";
756
- readonly module: "lodash";
757
- readonly note: "Standards standardizes collection utilities on Remeda and native APIs.";
758
- readonly replacement: "remeda";
759
- }, {
760
- readonly id: "LIB103";
761
- readonly module: "lodash-es";
762
- readonly note: "Standards standardizes collection utilities on Remeda and native APIs.";
763
- readonly replacement: "remeda";
764
- }, {
765
- readonly id: "LIB103";
766
- readonly module: "underscore";
767
- readonly note: "Standards standardizes collection utilities on Remeda and native APIs.";
768
- readonly replacement: "remeda";
769
- }, {
770
- readonly id: "LIB104";
771
- readonly module: "classnames";
772
- readonly note: "Use clsx for conditional class-name composition.";
773
- readonly replacement: "clsx";
774
- }, {
775
- readonly id: "LIB105";
776
- readonly module: "joi";
777
- readonly note: "Standards standardizes runtime validation on Zod; schemas are not drop-in compatible.";
778
- readonly replacement: "zod";
779
- }, {
780
- readonly id: "LIB105";
781
- readonly module: "yup";
782
- readonly note: "Standards standardizes runtime validation on Zod; schemas are not drop-in compatible.";
783
- readonly replacement: "zod";
784
- }, {
785
- readonly id: "LIB105";
786
- readonly module: "superstruct";
787
- readonly note: "Standards standardizes runtime validation on Zod; schemas are not drop-in compatible.";
788
- readonly replacement: "zod";
789
- }, {
790
- readonly id: "LIB105";
791
- readonly module: "io-ts";
792
- readonly note: "Standards standardizes runtime validation on Zod; schemas are not drop-in compatible.";
793
- readonly replacement: "zod";
794
- }, {
795
- readonly id: "LIB105";
796
- readonly module: "runtypes";
797
- readonly note: "Standards standardizes runtime validation on Zod; schemas are not drop-in compatible.";
798
- readonly replacement: "zod";
799
- }, {
800
- readonly id: "LIB106";
801
- readonly module: "jsonwebtoken";
802
- readonly note: "Use jose; review key formats and async signing and verification APIs.";
803
- readonly replacement: "jose";
804
- }, {
805
- readonly id: "LIB107";
806
- readonly module: "express";
807
- readonly note: "Standards standardizes servers on Hono; Node deployments also need @hono/node-server.";
808
- readonly replacement: "hono";
809
- }, {
810
- readonly id: "LIB107";
811
- readonly module: "koa";
812
- readonly note: "Standards standardizes servers on Hono; Node deployments also need @hono/node-server.";
813
- readonly replacement: "hono";
814
- }, {
815
- readonly id: "LIB108";
816
- readonly module: "jest";
817
- readonly note: "Standards standardizes tests on Vitest; review globals, timers, mocks, and environment setup.";
818
- readonly replacement: "vitest";
819
- }, {
820
- readonly id: "LIB108";
821
- readonly module: "mocha";
822
- readonly note: "Standards standardizes tests on Vitest; review globals, timers, mocks, and environment setup.";
823
- readonly replacement: "vitest";
824
- }, {
825
- readonly id: "LIB109";
826
- readonly module: "sinon";
827
- readonly note: "Use Vitest spies, mocks, and fake timers instead of Sinon.";
828
- readonly replacement: "Vitest mocks";
829
- }, {
830
- readonly id: "LIB110";
831
- readonly module: "commander";
832
- readonly note: "Standards standardizes command-line interfaces on citty.";
833
- readonly replacement: "citty";
834
- }, {
835
- readonly id: "LIB110";
836
- readonly module: "yargs";
837
- readonly note: "Standards standardizes command-line interfaces on citty.";
838
- readonly replacement: "citty";
839
- }, {
840
- readonly id: "LIB111";
841
- readonly module: "bluebird";
842
- readonly note: "Use native Promise, adding p-limit or p-map only for the extensions actually needed.";
843
- readonly replacement: "native Promise";
844
- }, {
845
- readonly id: "LIB112";
846
- readonly module: "rimraf";
847
- readonly note: "Prefer node:fs/promises; verify recursive removal, copy, path, and error semantics.";
848
- readonly replacement: "node:fs/promises";
849
- }, {
850
- readonly id: "LIB112";
851
- readonly module: "fs-extra";
852
- readonly note: "Prefer node:fs/promises; verify recursive removal, copy, path, and error semantics.";
853
- readonly replacement: "node:fs/promises";
854
- }, {
855
- readonly id: "LIB113";
856
- readonly module: "abort-controller";
857
- readonly note: "Node 22 provides global AbortController.";
858
- readonly replacement: "AbortController";
859
- }, {
860
- readonly id: "LIB114";
861
- readonly module: "querystring";
862
- readonly note: "Use URLSearchParams and explicitly review repeated keys, escaping, arrays, and object coercion.";
863
- readonly replacement: "URLSearchParams";
864
- }, {
865
- readonly id: "LIB115";
866
- readonly module: "dotenv";
867
- readonly note: "Standards standardizes environment loading on @dotenvx/dotenvx.";
868
- readonly replacement: "@dotenvx/dotenvx";
869
- }, {
870
- readonly id: "LIB116";
871
- readonly module: "chalk";
872
- readonly note: "Use picocolors for terminal colors.";
873
- readonly replacement: "picocolors";
874
- }, {
875
- readonly id: "LIB117";
876
- readonly module: "faker";
877
- readonly note: "The original faker package is abandoned; use @faker-js/faker.";
878
- readonly replacement: "@faker-js/faker";
879
- }, {
880
- readonly id: "LIB118";
881
- readonly module: "node-sass";
882
- readonly note: "node-sass is end-of-life; use Dart Sass.";
883
- readonly replacement: "sass";
884
- }, {
885
- readonly id: "LIB119";
886
- readonly module: "tslint";
887
- readonly note: "TSLint is deprecated; use ESLint with typescript-eslint.";
888
- readonly replacement: "eslint";
889
- }];
890
- }];
891
- readonly "@sarj/prefer-native-random-uuid": "error";
892
- readonly "@sarj/prefer-shadcn-primitives": "error";
893
- readonly "@sarj/excessive-commentary": "warn";
894
- readonly "@sarj/no-excessive-cognitive-complexity": "error";
895
- readonly "@sarj/interface-contract-members-private": "error";
896
- readonly "@sarj/iac-source-coupled-test": "error";
897
- readonly "@sarj/duplicate-test-body": "error";
898
- readonly "@sarj/enforce-file-structure": "error";
899
- readonly "@sarj/no-client-side-data-fetching": "error";
900
- readonly "@sarj/no-comment-cruft": "error";
901
- readonly "@sarj/no-cors-wildcard-with-credentials": "warn";
902
- readonly "@sarj/no-dynamic-sql": "error";
903
- readonly "@sarj/no-enum": "error";
904
- readonly "@sarj/no-fat-try-blocks": readonly ["error", {
905
- readonly max: 5;
906
- }];
907
- readonly "@sarj/no-hand-rolled-sleep": "error";
908
- readonly "@sarj/no-hand-rolled-spinner": "error";
909
- readonly "@sarj/no-insecure-random-id": "error";
910
- readonly "@sarj/no-exception-text-in-5xx-response": "warn";
911
- readonly "@sarj/no-json-stringify-error": "error";
912
- readonly "@sarj/no-impossible-zod-literal-bounds": "error";
913
- readonly "@sarj/no-in-operator-on-built-in-collections": "error";
914
- readonly "@sarj/no-log-only-catch": "error";
915
- readonly "@sarj/no-bare-return-from-test-catch": "error";
916
- readonly "@sarj/no-bespoke-api-case-conversion": "warn";
917
- readonly "@sarj/no-detached-global-fetch": "error";
918
- readonly "@sarj/no-json-stringify-object-equality": "error";
919
- readonly "@sarj/no-dangerously-allow-svg": "error";
920
- readonly "@sarj/no-credential-in-browser-storage": "warn";
921
- readonly "@sarj/no-numeric-search-param-coercion": "warn";
922
- readonly "@sarj/prefer-native-fetch-in-server-actions": "warn";
923
- readonly "@sarj/no-duplicate-lifecycle-refresh-listeners": "error";
924
- readonly "@sarj/no-long-comment": "error";
925
- readonly "@sarj/no-vague-suppression-description": "error";
926
- readonly "@sarj/no-generic-single-export-module": "error";
927
- readonly "@sarj/no-offset-pagination": "error";
928
- readonly "@sarj/no-positional-tuple-return": "error";
929
- readonly "@sarj/no-production-browser-source-maps": "error";
930
- readonly "@sarj/no-raw-env": "error";
931
- readonly "@sarj/no-raw-fetch-outside-clients": "error";
932
- readonly "@sarj/no-repeated-string-literal": "error";
933
- readonly "@sarj/no-redundant-optional-array-default": "error";
934
- readonly "@sarj/no-router-refresh-polling": "error";
935
- readonly "@sarj/no-restated-comment": "warn";
936
- readonly "@sarj/no-restated-jsdoc": "warn";
937
- readonly "@sarj/no-secret-in-log": "error";
938
- readonly "@sarj/no-server-env-in-client-component": "error";
939
- readonly "@sarj/no-select-star": "error";
940
- readonly "@sarj/no-sentinel-return-on-catch": "error";
941
- readonly "@sarj/no-silent-promise-catch": "error";
942
- readonly "@sarj/no-sleep-in-test-body": "error";
943
- readonly "@sarj/no-storage-in-stateless-modules": "error";
944
- readonly "@sarj/no-string-concat-in-loop": "error";
945
- readonly "@sarj/no-tautological-expect": "error";
946
- readonly "@sarj/no-duplicate-test-case": "error";
947
- readonly "@sarj/no-typed-doc-sections": "error";
948
- readonly "@sarj/no-trailing-value-narration": "error";
949
- readonly "@sarj/no-declaration-comment-wall": "error";
950
- readonly "@sarj/no-union-in-comment": "error";
951
- readonly "@sarj/no-type-member-comment-wall": "error";
952
- readonly "@sarj/no-unnecessary-use-client": "error";
953
- readonly "@sarj/no-unsafe-mock-casting": "error";
954
- readonly "@sarj/no-unsafe-test-double-cast": "error";
955
- readonly "@sarj/no-first-party-module-mock": "error";
956
- readonly "@sarj/no-zod-native-enum": "error";
957
- readonly "@sarj/test-loops-over-literal-cases": "error";
958
- readonly "@sarj/prefer-constant-time-secret-compare": "error";
959
- readonly "@sarj/prefer-ecmascript-private-members": "error";
960
- readonly "@sarj/prefer-discriminated-union": "warn";
961
- readonly "@sarj/prefer-input-group-search": "error";
962
- readonly "@sarj/prefer-millisecond-control-duration-schema": "warn";
963
- readonly "@sarj/prefer-immutable-module-constant": "error";
964
- readonly "@sarj/prefer-module-level-constant": "error";
965
- readonly "@sarj/prefer-module-level-schema": "error";
966
- readonly "@sarj/prefer-module-level-refined-schema": "warn";
967
- readonly "@sarj/prefer-multi-value-zod-literal": readonly ["error", {
968
- readonly zodMajorVersion: 4;
969
- }];
970
- readonly "@sarj/prefer-named-callback-domain": "error";
971
- readonly "@sarj/prefer-nominal-id-types": "error";
972
- readonly "@sarj/prefer-named-complex-return-type": "error";
973
- readonly "@sarj/prefer-node-crypto-hash": "warn";
974
- readonly "@sarj/prefer-node-fs-promises": "warn";
975
- readonly "@sarj/prefer-non-nullable-collection": "error";
976
- readonly "@sarj/prefer-nullish-filter-predicate": "error";
977
- readonly "@sarj/prefer-await-in-async-return": "error";
978
- readonly "@sarj/prefer-schema-for-api-payload": "error";
979
- readonly "@sarj/prefer-shared-zod-enum": "warn";
980
- readonly "@sarj/prefer-switch-for-repeated-equality": "error";
981
- readonly "@sarj/prefer-semantic-colors": readonly ["error", {
982
- readonly requireSemanticTokens: true;
983
- }];
984
- readonly "@sarj/prefer-server-actions": "error";
985
- readonly "@sarj/prefer-whole-object-assertion": "warn";
986
- readonly "@sarj/repeated-static-call-cases": "error";
987
- readonly "@sarj/prefer-zod-infer": "error";
988
- readonly "@sarj/prefer-zod-parse-output-type": "warn";
989
- readonly "@sarj/require-assert-never": "error";
990
- readonly "@sarj/require-fetch-timeout": "error";
991
- readonly "@sarj/require-explicit-contract-implementation": "error";
992
- readonly "@sarj/require-explicit-service-contract": "error";
993
- readonly "@sarj/require-interface-for-exported-class": "error";
994
- readonly "@sarj/require-port-for-service": "error";
995
- readonly "@sarj/require-sql-access-class": "warn";
996
- readonly "@sarj/require-static-next-matcher": "error";
997
- readonly "@sarj/require-use-form-default-values": "error";
998
- readonly "@sarj/require-use-server-in-actions-file": "error";
999
- readonly "@sarj/require-zod-form-validation": "error";
1000
- readonly "@sarj/store-insert-requires-on-conflict": "error";
1001
- readonly "@sarj/stepdown": "error";
1002
- readonly "@sarj/source-coupled-test": "error";
1003
- readonly "@sarj/sole-export-matches-filename": "error";
1004
- readonly "@sarj/test-phase-label-comment": "error";
1005
- readonly "@sarj/require-pascal-case-zod-schema-name": "error";
667
+ type PolicyName = keyof typeof RULE_POLICY;
668
+ type PolicyRow = (typeof RULE_POLICY)[PolicyName];
669
+ type RuleSetting<Row extends PolicyRow> = Row extends readonly ["shared", "both", infer Shared] ? Shared : Row extends readonly [infer Level, PresetMembership, infer Options extends () => readonly unknown[]] ? readonly [Level, ...ReturnType<Options>] : Row extends readonly [infer Level, PresetMembership, "strict-order", number] ? Level : Row extends readonly [infer Level, PresetMembership] ? Level : never;
670
+ type PresetRules<Preset extends "recommended" | "strict"> = {
671
+ readonly [Name in PolicyName as Preset extends "recommended" ? (typeof RULE_POLICY)[Name][1] extends "both" ? Name : never : Name]: RuleSetting<(typeof RULE_POLICY)[Name]>;
1006
672
  };
1007
- type FlatPreset = {
673
+ type AdvisoryRuleName = {
674
+ [Name in PolicyName]: (typeof RULE_POLICY)[Name][0] extends "warn" ? Name : never;
675
+ }[PolicyName];
676
+ /** Rules staged as non-blocking warnings while corpus adoption evidence accumulates. */
677
+ declare const ADVISORY_RULES: readonly AdvisoryRuleName[];
678
+ declare const RECOMMENDED_RULES: PresetRules<"recommended">;
679
+ declare const STRICT_RULES: PresetRules<"strict">;
680
+ type FlatPreset<Settings> = {
1008
681
  readonly name: string;
1009
682
  readonly plugins: Record<string, unknown>;
1010
- readonly rules: Record<string, unknown>;
683
+ readonly rules: Settings;
1011
684
  };
1012
685
  declare const PLUGIN: {
1013
686
  readonly meta: {
@@ -1209,8 +882,8 @@ declare const PLUGIN: {
1209
882
  };
1210
883
  readonly retiredRules: Readonly<Record<string, RetiredRule>>;
1211
884
  readonly configs: {
1212
- readonly recommended: FlatPreset;
1213
- readonly strict: FlatPreset;
885
+ readonly recommended: FlatPreset<typeof RECOMMENDED_RULES>;
886
+ readonly strict: FlatPreset<typeof STRICT_RULES>;
1214
887
  };
1215
888
  };
1216
889