@sarj/eslint-plugin 16.8.0 → 16.10.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.cjs CHANGED
@@ -52,8 +52,8 @@ module.exports = __toCommonJS(src_exports);
52
52
  // package.json
53
53
  var package_default = {
54
54
  name: "@sarj/eslint-plugin",
55
- version: "16.8.0",
56
- packageManager: "npm@12.1.0",
55
+ version: "16.10.0",
56
+ packageManager: "npm@12.2.0",
57
57
  description: "Custom ESLint rules for hypermodern TypeScript / React / Next.js projects",
58
58
  type: "module",
59
59
  main: "./dist/index.cjs",
@@ -106,48 +106,49 @@ var package_default = {
106
106
  author: "sarj-ai",
107
107
  license: "MIT",
108
108
  dependencies: {
109
- "@typescript-eslint/typescript-estree": "^8.70.1",
110
- "@typescript-eslint/utils": "^8.70.1",
109
+ "@typescript-eslint/typescript-estree": "^8.71.2",
110
+ "@typescript-eslint/utils": "^8.71.2",
111
111
  "jsonc-parser": "^3.3.1"
112
112
  },
113
113
  devDependencies: {
114
114
  "@eslint-community/eslint-plugin-eslint-comments": "^4.8.1",
115
115
  "@eslint/compat": "^2.1.1",
116
116
  "@eslint/js": "10.0.1",
117
- "@shadcn/lint": "0.2.0",
118
- "@types/node": "26.6.2",
119
- "@typescript-eslint/parser": "8.70.1",
120
- "@typescript-eslint/rule-tester": "8.70.1",
121
- "@typescript-eslint/utils": "8.70.1",
117
+ "@shadcn/lint": "0.2.1",
118
+ "@types/node": "26.6.5",
119
+ "@typescript-eslint/parser": "8.71.2",
120
+ "@typescript-eslint/rule-tester": "8.71.2",
121
+ "@typescript-eslint/utils": "8.71.2",
122
122
  "@typescript/native": "npm:typescript@7.0.2",
123
123
  "@vitest/eslint-plugin": "1.6.27",
124
- eslint: "10.11.0",
125
- "eslint-node-test": "0.4.0",
126
- "eslint-plugin-better-tailwindcss": "^4.7.0",
127
- "eslint-plugin-jest": "29.16.6",
128
- "eslint-plugin-jsdoc": "64.5.4",
129
- "eslint-plugin-n": "^18.3.0",
124
+ eslint: "10.12.0",
125
+ "eslint-node-test": "1.0.1",
126
+ "eslint-plugin-better-tailwindcss": "^4.9.0",
127
+ "eslint-plugin-jest": "29.17.0",
128
+ "eslint-plugin-jsdoc": "65.3.1",
129
+ "eslint-plugin-n": "^18.4.1",
130
130
  "eslint-plugin-perfectionist": "5.12.1",
131
- "eslint-plugin-playwright": "2.12.0",
131
+ "eslint-plugin-playwright": "2.12.1",
132
132
  "eslint-plugin-promise": "^7.3.0",
133
133
  "eslint-plugin-react": "^7.37.5",
134
134
  "eslint-plugin-react-hooks": "^7.1.1",
135
135
  "eslint-plugin-simple-import-sort": "^14.0.0",
136
136
  "eslint-plugin-testing-library": "7.16.2",
137
- "eslint-plugin-unicorn": "^76.0.0",
138
- "eslint-plugin-zod": "^4.14.2",
139
- globals: "15.15.0",
140
- tsup: "latest",
137
+ "eslint-plugin-unicorn": "^78.0.0",
138
+ "eslint-plugin-zod": "^5.0.1",
139
+ globals: "17.13.0",
140
+ tsup: "8.5.1",
141
141
  typescript: "npm:@typescript/typescript6@6.0.2",
142
- "typescript-eslint": "^8.70.1",
143
- vitest: "5.0.1"
142
+ "typescript-eslint": "^8.71.2",
143
+ vitest: "5.0.4",
144
+ zod: "4.6.7"
144
145
  },
145
146
  peerDependencies: {
146
147
  eslint: ">=9.39.4",
147
148
  typescript: ">=5.0.0"
148
149
  },
149
150
  engines: {
150
- node: ">=22.22.2"
151
+ node: "^22.22.2 || >=24.15.0"
151
152
  },
152
153
  allowScripts: {
153
154
  "esbuild@0.28.2": true,
@@ -159,12 +160,12 @@ var package_default = {
159
160
  }
160
161
  },
161
162
  overrides: {
162
- "brace-expansion@^5.0.0": "5.0.9",
163
+ "brace-expansion@^5.0.0": "5.0.12",
163
164
  esbuild: "0.28.2",
164
- "nanoid@<3.3.18": "3.3.18",
165
165
  "eslint-plugin-react": {
166
166
  eslint: "$eslint"
167
- }
167
+ },
168
+ "nanoid@<3.3.20": "3.3.20"
168
169
  }
169
170
  };
170
171
 
@@ -2326,7 +2327,7 @@ var require_button_accessible_name_default = createRule({
2326
2327
  // src/rules/require-camelcase-properties.ts
2327
2328
  var import_utils13 = require("@typescript-eslint/utils");
2328
2329
  var REQUIRE_CAMELCASE_PROPERTIES_DOCUMENTATION = {
2329
- defaultLevel: "warning",
2330
+ defaultLevel: "error",
2330
2331
  summary: "Require unquoted lower snake_case TypeScript properties and dot access to use camelCase.",
2331
2332
  rationale: "Unquoted snake_case property syntax makes external wire naming indistinguishable from application-domain naming and lets inconsistent contracts spread through typed code.",
2332
2333
  remediation: "Rename application properties to camelCase. At an external wire boundary, make the exception explicit with a quoted key and bracket access.",
@@ -17481,10 +17482,10 @@ var prefer_module_level_refined_schema_default = createRule({
17481
17482
  // src/rules/prefer-multi-value-zod-literal.ts
17482
17483
  var import_utils98 = require("@typescript-eslint/utils");
17483
17484
  var PREFER_MULTI_VALUE_ZOD_LITERAL_DOCUMENTATION = {
17484
- defaultLevel: "warning",
17485
+ defaultLevel: "error",
17485
17486
  summary: "Use the Zod 4 multi-value literal API instead of a union of literal schemas.",
17486
17487
  rationale: "One multi-value literal expresses the same closed value domain without repeated schema wrappers.",
17487
- remediation: "Replace the union with z.literal([value1, value2, ...]).",
17488
+ remediation: "Use z.literal([value1, value2, ...]) for a modern Zod 4 value-domain contract. Preserve required union introspection or error-shape contracts with an explained local exception.",
17488
17489
  category: "maintainability",
17489
17490
  autofix: "none",
17490
17491
  limitations: [
@@ -21664,7 +21665,7 @@ var PREFER_ZOD_PARSE_OUTPUT_TYPE_DOCUMENTATION = {
21664
21665
  focusPath: "src/row.ts",
21665
21666
  expectedCount: 0,
21666
21667
  public: true,
21667
- installedDependencies: [{ module: "zod", version: "4.6.5" }]
21668
+ installedDependencies: [{ module: "zod", version: "4.6.7" }]
21668
21669
  },
21669
21670
  {
21670
21671
  id: "hand-written-parsed-return",
@@ -21683,7 +21684,7 @@ var PREFER_ZOD_PARSE_OUTPUT_TYPE_DOCUMENTATION = {
21683
21684
  focusPath: "src/row.ts",
21684
21685
  expectedCount: 1,
21685
21686
  public: true,
21686
- installedDependencies: [{ module: "zod", version: "4.6.5" }]
21687
+ installedDependencies: [{ module: "zod", version: "4.6.7" }]
21687
21688
  }
21688
21689
  ]
21689
21690
  };
@@ -24972,12 +24973,10 @@ var ADVISORY_RULES = [
24972
24973
  "@sarj/no-restated-jsdoc",
24973
24974
  "@sarj/prefer-millisecond-control-duration-schema",
24974
24975
  "@sarj/prefer-module-level-refined-schema",
24975
- "@sarj/prefer-multi-value-zod-literal",
24976
24976
  "@sarj/prefer-node-crypto-hash",
24977
24977
  "@sarj/prefer-node-fs-promises",
24978
24978
  "@sarj/prefer-shared-zod-enum",
24979
24979
  "@sarj/prefer-whole-object-assertion",
24980
- "@sarj/require-camelcase-properties",
24981
24980
  "@sarj/require-sql-access-class"
24982
24981
  ];
24983
24982
  var RECOMMENDED_RULES = {
@@ -24988,7 +24987,7 @@ var RECOMMENDED_RULES = {
24988
24987
  "@sarj/no-reduce-accumulator-copy": "error",
24989
24988
  "@sarj/no-known-value-widening": "error",
24990
24989
  "@sarj/require-button-accessible-name": "error",
24991
- "@sarj/require-camelcase-properties": "warn",
24990
+ "@sarj/require-camelcase-properties": "error",
24992
24991
  "@sarj/require-svg-accessible-name": "error",
24993
24992
  "@sarj/prefer-logical-tailwind-utilities": ["error", { enabled: false }],
24994
24993
  "@sarj/no-unlocalized-toast": ["error", { enabled: false }],
@@ -25062,7 +25061,7 @@ var RECOMMENDED_RULES = {
25062
25061
  "@sarj/prefer-module-level-constant": "error",
25063
25062
  "@sarj/prefer-module-level-schema": "error",
25064
25063
  "@sarj/prefer-module-level-refined-schema": "warn",
25065
- "@sarj/prefer-multi-value-zod-literal": ["warn", { zodMajorVersion: 4 }],
25064
+ "@sarj/prefer-multi-value-zod-literal": ["error", { zodMajorVersion: 4 }],
25066
25065
  "@sarj/prefer-named-callback-domain": "error",
25067
25066
  "@sarj/prefer-nominal-id-types": "error",
25068
25067
  "@sarj/prefer-named-complex-return-type": "error",
@@ -25106,7 +25105,7 @@ var STRICT_RULES = {
25106
25105
  "@sarj/no-reduce-accumulator-copy": "error",
25107
25106
  "@sarj/no-known-value-widening": "error",
25108
25107
  "@sarj/require-button-accessible-name": "error",
25109
- "@sarj/require-camelcase-properties": "warn",
25108
+ "@sarj/require-camelcase-properties": "error",
25110
25109
  "@sarj/require-svg-accessible-name": "error",
25111
25110
  "@sarj/prefer-logical-tailwind-utilities": ["error", { enabled: false }],
25112
25111
  "@sarj/no-unlocalized-toast": ["error", { enabled: false }],
@@ -25184,7 +25183,7 @@ var STRICT_RULES = {
25184
25183
  "@sarj/prefer-module-level-constant": "error",
25185
25184
  "@sarj/prefer-module-level-schema": "error",
25186
25185
  "@sarj/prefer-module-level-refined-schema": "warn",
25187
- "@sarj/prefer-multi-value-zod-literal": ["warn", { zodMajorVersion: 4 }],
25186
+ "@sarj/prefer-multi-value-zod-literal": ["error", { zodMajorVersion: 4 }],
25188
25187
  "@sarj/prefer-named-callback-domain": "error",
25189
25188
  "@sarj/prefer-nominal-id-types": "error",
25190
25189
  "@sarj/prefer-named-complex-return-type": "error",
package/dist/index.d.cts CHANGED
@@ -291,7 +291,7 @@ declare const RULES: {
291
291
  /** @deprecated All repositories use one policy; retained for import compatibility. */
292
292
  declare const APPLICATION_ONLY_RULES: readonly [];
293
293
  /** Rules staged as non-blocking warnings while corpus adoption evidence accumulates. */
294
- declare const ADVISORY_RULES: readonly ["@sarj/excessive-commentary", "@sarj/no-bespoke-api-case-conversion", "@sarj/no-restated-comment", "@sarj/no-restated-jsdoc", "@sarj/prefer-millisecond-control-duration-schema", "@sarj/prefer-module-level-refined-schema", "@sarj/prefer-multi-value-zod-literal", "@sarj/prefer-node-crypto-hash", "@sarj/prefer-node-fs-promises", "@sarj/prefer-shared-zod-enum", "@sarj/prefer-whole-object-assertion", "@sarj/require-camelcase-properties", "@sarj/require-sql-access-class"];
294
+ declare const ADVISORY_RULES: readonly ["@sarj/excessive-commentary", "@sarj/no-bespoke-api-case-conversion", "@sarj/no-restated-comment", "@sarj/no-restated-jsdoc", "@sarj/prefer-millisecond-control-duration-schema", "@sarj/prefer-module-level-refined-schema", "@sarj/prefer-node-crypto-hash", "@sarj/prefer-node-fs-promises", "@sarj/prefer-shared-zod-enum", "@sarj/prefer-whole-object-assertion", "@sarj/require-sql-access-class"];
295
295
  declare const RECOMMENDED_RULES: {
296
296
  readonly "@sarj/named-child-schema-type": "error";
297
297
  readonly "@sarj/no-conditional-empty-object-spread": "error";
@@ -300,7 +300,7 @@ declare const RECOMMENDED_RULES: {
300
300
  readonly "@sarj/no-reduce-accumulator-copy": "error";
301
301
  readonly "@sarj/no-known-value-widening": "error";
302
302
  readonly "@sarj/require-button-accessible-name": "error";
303
- readonly "@sarj/require-camelcase-properties": "warn";
303
+ readonly "@sarj/require-camelcase-properties": "error";
304
304
  readonly "@sarj/require-svg-accessible-name": "error";
305
305
  readonly "@sarj/prefer-logical-tailwind-utilities": readonly ["error", {
306
306
  readonly enabled: false;
@@ -565,7 +565,7 @@ declare const RECOMMENDED_RULES: {
565
565
  readonly "@sarj/prefer-module-level-constant": "error";
566
566
  readonly "@sarj/prefer-module-level-schema": "error";
567
567
  readonly "@sarj/prefer-module-level-refined-schema": "warn";
568
- readonly "@sarj/prefer-multi-value-zod-literal": readonly ["warn", {
568
+ readonly "@sarj/prefer-multi-value-zod-literal": readonly ["error", {
569
569
  readonly zodMajorVersion: 4;
570
570
  }];
571
571
  readonly "@sarj/prefer-named-callback-domain": "error";
@@ -613,7 +613,7 @@ declare const STRICT_RULES: {
613
613
  readonly "@sarj/no-reduce-accumulator-copy": "error";
614
614
  readonly "@sarj/no-known-value-widening": "error";
615
615
  readonly "@sarj/require-button-accessible-name": "error";
616
- readonly "@sarj/require-camelcase-properties": "warn";
616
+ readonly "@sarj/require-camelcase-properties": "error";
617
617
  readonly "@sarj/require-svg-accessible-name": "error";
618
618
  readonly "@sarj/prefer-logical-tailwind-utilities": readonly ["error", {
619
619
  readonly enabled: false;
@@ -882,7 +882,7 @@ declare const STRICT_RULES: {
882
882
  readonly "@sarj/prefer-module-level-constant": "error";
883
883
  readonly "@sarj/prefer-module-level-schema": "error";
884
884
  readonly "@sarj/prefer-module-level-refined-schema": "warn";
885
- readonly "@sarj/prefer-multi-value-zod-literal": readonly ["warn", {
885
+ readonly "@sarj/prefer-multi-value-zod-literal": readonly ["error", {
886
886
  readonly zodMajorVersion: 4;
887
887
  }];
888
888
  readonly "@sarj/prefer-named-callback-domain": "error";
package/dist/index.d.ts CHANGED
@@ -291,7 +291,7 @@ declare const RULES: {
291
291
  /** @deprecated All repositories use one policy; retained for import compatibility. */
292
292
  declare const APPLICATION_ONLY_RULES: readonly [];
293
293
  /** Rules staged as non-blocking warnings while corpus adoption evidence accumulates. */
294
- declare const ADVISORY_RULES: readonly ["@sarj/excessive-commentary", "@sarj/no-bespoke-api-case-conversion", "@sarj/no-restated-comment", "@sarj/no-restated-jsdoc", "@sarj/prefer-millisecond-control-duration-schema", "@sarj/prefer-module-level-refined-schema", "@sarj/prefer-multi-value-zod-literal", "@sarj/prefer-node-crypto-hash", "@sarj/prefer-node-fs-promises", "@sarj/prefer-shared-zod-enum", "@sarj/prefer-whole-object-assertion", "@sarj/require-camelcase-properties", "@sarj/require-sql-access-class"];
294
+ declare const ADVISORY_RULES: readonly ["@sarj/excessive-commentary", "@sarj/no-bespoke-api-case-conversion", "@sarj/no-restated-comment", "@sarj/no-restated-jsdoc", "@sarj/prefer-millisecond-control-duration-schema", "@sarj/prefer-module-level-refined-schema", "@sarj/prefer-node-crypto-hash", "@sarj/prefer-node-fs-promises", "@sarj/prefer-shared-zod-enum", "@sarj/prefer-whole-object-assertion", "@sarj/require-sql-access-class"];
295
295
  declare const RECOMMENDED_RULES: {
296
296
  readonly "@sarj/named-child-schema-type": "error";
297
297
  readonly "@sarj/no-conditional-empty-object-spread": "error";
@@ -300,7 +300,7 @@ declare const RECOMMENDED_RULES: {
300
300
  readonly "@sarj/no-reduce-accumulator-copy": "error";
301
301
  readonly "@sarj/no-known-value-widening": "error";
302
302
  readonly "@sarj/require-button-accessible-name": "error";
303
- readonly "@sarj/require-camelcase-properties": "warn";
303
+ readonly "@sarj/require-camelcase-properties": "error";
304
304
  readonly "@sarj/require-svg-accessible-name": "error";
305
305
  readonly "@sarj/prefer-logical-tailwind-utilities": readonly ["error", {
306
306
  readonly enabled: false;
@@ -565,7 +565,7 @@ declare const RECOMMENDED_RULES: {
565
565
  readonly "@sarj/prefer-module-level-constant": "error";
566
566
  readonly "@sarj/prefer-module-level-schema": "error";
567
567
  readonly "@sarj/prefer-module-level-refined-schema": "warn";
568
- readonly "@sarj/prefer-multi-value-zod-literal": readonly ["warn", {
568
+ readonly "@sarj/prefer-multi-value-zod-literal": readonly ["error", {
569
569
  readonly zodMajorVersion: 4;
570
570
  }];
571
571
  readonly "@sarj/prefer-named-callback-domain": "error";
@@ -613,7 +613,7 @@ declare const STRICT_RULES: {
613
613
  readonly "@sarj/no-reduce-accumulator-copy": "error";
614
614
  readonly "@sarj/no-known-value-widening": "error";
615
615
  readonly "@sarj/require-button-accessible-name": "error";
616
- readonly "@sarj/require-camelcase-properties": "warn";
616
+ readonly "@sarj/require-camelcase-properties": "error";
617
617
  readonly "@sarj/require-svg-accessible-name": "error";
618
618
  readonly "@sarj/prefer-logical-tailwind-utilities": readonly ["error", {
619
619
  readonly enabled: false;
@@ -882,7 +882,7 @@ declare const STRICT_RULES: {
882
882
  readonly "@sarj/prefer-module-level-constant": "error";
883
883
  readonly "@sarj/prefer-module-level-schema": "error";
884
884
  readonly "@sarj/prefer-module-level-refined-schema": "warn";
885
- readonly "@sarj/prefer-multi-value-zod-literal": readonly ["warn", {
885
+ readonly "@sarj/prefer-multi-value-zod-literal": readonly ["error", {
886
886
  readonly zodMajorVersion: 4;
887
887
  }];
888
888
  readonly "@sarj/prefer-named-callback-domain": "error";
package/dist/index.js CHANGED
@@ -1,8 +1,8 @@
1
1
  // package.json
2
2
  var package_default = {
3
3
  name: "@sarj/eslint-plugin",
4
- version: "16.8.0",
5
- packageManager: "npm@12.1.0",
4
+ version: "16.10.0",
5
+ packageManager: "npm@12.2.0",
6
6
  description: "Custom ESLint rules for hypermodern TypeScript / React / Next.js projects",
7
7
  type: "module",
8
8
  main: "./dist/index.cjs",
@@ -55,48 +55,49 @@ var package_default = {
55
55
  author: "sarj-ai",
56
56
  license: "MIT",
57
57
  dependencies: {
58
- "@typescript-eslint/typescript-estree": "^8.70.1",
59
- "@typescript-eslint/utils": "^8.70.1",
58
+ "@typescript-eslint/typescript-estree": "^8.71.2",
59
+ "@typescript-eslint/utils": "^8.71.2",
60
60
  "jsonc-parser": "^3.3.1"
61
61
  },
62
62
  devDependencies: {
63
63
  "@eslint-community/eslint-plugin-eslint-comments": "^4.8.1",
64
64
  "@eslint/compat": "^2.1.1",
65
65
  "@eslint/js": "10.0.1",
66
- "@shadcn/lint": "0.2.0",
67
- "@types/node": "26.6.2",
68
- "@typescript-eslint/parser": "8.70.1",
69
- "@typescript-eslint/rule-tester": "8.70.1",
70
- "@typescript-eslint/utils": "8.70.1",
66
+ "@shadcn/lint": "0.2.1",
67
+ "@types/node": "26.6.5",
68
+ "@typescript-eslint/parser": "8.71.2",
69
+ "@typescript-eslint/rule-tester": "8.71.2",
70
+ "@typescript-eslint/utils": "8.71.2",
71
71
  "@typescript/native": "npm:typescript@7.0.2",
72
72
  "@vitest/eslint-plugin": "1.6.27",
73
- eslint: "10.11.0",
74
- "eslint-node-test": "0.4.0",
75
- "eslint-plugin-better-tailwindcss": "^4.7.0",
76
- "eslint-plugin-jest": "29.16.6",
77
- "eslint-plugin-jsdoc": "64.5.4",
78
- "eslint-plugin-n": "^18.3.0",
73
+ eslint: "10.12.0",
74
+ "eslint-node-test": "1.0.1",
75
+ "eslint-plugin-better-tailwindcss": "^4.9.0",
76
+ "eslint-plugin-jest": "29.17.0",
77
+ "eslint-plugin-jsdoc": "65.3.1",
78
+ "eslint-plugin-n": "^18.4.1",
79
79
  "eslint-plugin-perfectionist": "5.12.1",
80
- "eslint-plugin-playwright": "2.12.0",
80
+ "eslint-plugin-playwright": "2.12.1",
81
81
  "eslint-plugin-promise": "^7.3.0",
82
82
  "eslint-plugin-react": "^7.37.5",
83
83
  "eslint-plugin-react-hooks": "^7.1.1",
84
84
  "eslint-plugin-simple-import-sort": "^14.0.0",
85
85
  "eslint-plugin-testing-library": "7.16.2",
86
- "eslint-plugin-unicorn": "^76.0.0",
87
- "eslint-plugin-zod": "^4.14.2",
88
- globals: "15.15.0",
89
- tsup: "latest",
86
+ "eslint-plugin-unicorn": "^78.0.0",
87
+ "eslint-plugin-zod": "^5.0.1",
88
+ globals: "17.13.0",
89
+ tsup: "8.5.1",
90
90
  typescript: "npm:@typescript/typescript6@6.0.2",
91
- "typescript-eslint": "^8.70.1",
92
- vitest: "5.0.1"
91
+ "typescript-eslint": "^8.71.2",
92
+ vitest: "5.0.4",
93
+ zod: "4.6.7"
93
94
  },
94
95
  peerDependencies: {
95
96
  eslint: ">=9.39.4",
96
97
  typescript: ">=5.0.0"
97
98
  },
98
99
  engines: {
99
- node: ">=22.22.2"
100
+ node: "^22.22.2 || >=24.15.0"
100
101
  },
101
102
  allowScripts: {
102
103
  "esbuild@0.28.2": true,
@@ -108,12 +109,12 @@ var package_default = {
108
109
  }
109
110
  },
110
111
  overrides: {
111
- "brace-expansion@^5.0.0": "5.0.9",
112
+ "brace-expansion@^5.0.0": "5.0.12",
112
113
  esbuild: "0.28.2",
113
- "nanoid@<3.3.18": "3.3.18",
114
114
  "eslint-plugin-react": {
115
115
  eslint: "$eslint"
116
- }
116
+ },
117
+ "nanoid@<3.3.20": "3.3.20"
117
118
  }
118
119
  };
119
120
 
@@ -2285,7 +2286,7 @@ var require_button_accessible_name_default = createRule({
2285
2286
  // src/rules/require-camelcase-properties.ts
2286
2287
  import { AST_NODE_TYPES as AST_NODE_TYPES11 } from "@typescript-eslint/utils";
2287
2288
  var REQUIRE_CAMELCASE_PROPERTIES_DOCUMENTATION = {
2288
- defaultLevel: "warning",
2289
+ defaultLevel: "error",
2289
2290
  summary: "Require unquoted lower snake_case TypeScript properties and dot access to use camelCase.",
2290
2291
  rationale: "Unquoted snake_case property syntax makes external wire naming indistinguishable from application-domain naming and lets inconsistent contracts spread through typed code.",
2291
2292
  remediation: "Rename application properties to camelCase. At an external wire boundary, make the exception explicit with a quoted key and bracket access.",
@@ -17484,10 +17485,10 @@ import {
17484
17485
  ASTUtils as ASTUtils47
17485
17486
  } from "@typescript-eslint/utils";
17486
17487
  var PREFER_MULTI_VALUE_ZOD_LITERAL_DOCUMENTATION = {
17487
- defaultLevel: "warning",
17488
+ defaultLevel: "error",
17488
17489
  summary: "Use the Zod 4 multi-value literal API instead of a union of literal schemas.",
17489
17490
  rationale: "One multi-value literal expresses the same closed value domain without repeated schema wrappers.",
17490
- remediation: "Replace the union with z.literal([value1, value2, ...]).",
17491
+ remediation: "Use z.literal([value1, value2, ...]) for a modern Zod 4 value-domain contract. Preserve required union introspection or error-shape contracts with an explained local exception.",
17491
17492
  category: "maintainability",
17492
17493
  autofix: "none",
17493
17494
  limitations: [
@@ -21679,7 +21680,7 @@ var PREFER_ZOD_PARSE_OUTPUT_TYPE_DOCUMENTATION = {
21679
21680
  focusPath: "src/row.ts",
21680
21681
  expectedCount: 0,
21681
21682
  public: true,
21682
- installedDependencies: [{ module: "zod", version: "4.6.5" }]
21683
+ installedDependencies: [{ module: "zod", version: "4.6.7" }]
21683
21684
  },
21684
21685
  {
21685
21686
  id: "hand-written-parsed-return",
@@ -21698,7 +21699,7 @@ var PREFER_ZOD_PARSE_OUTPUT_TYPE_DOCUMENTATION = {
21698
21699
  focusPath: "src/row.ts",
21699
21700
  expectedCount: 1,
21700
21701
  public: true,
21701
- installedDependencies: [{ module: "zod", version: "4.6.5" }]
21702
+ installedDependencies: [{ module: "zod", version: "4.6.7" }]
21702
21703
  }
21703
21704
  ]
21704
21705
  };
@@ -24996,12 +24997,10 @@ var ADVISORY_RULES = [
24996
24997
  "@sarj/no-restated-jsdoc",
24997
24998
  "@sarj/prefer-millisecond-control-duration-schema",
24998
24999
  "@sarj/prefer-module-level-refined-schema",
24999
- "@sarj/prefer-multi-value-zod-literal",
25000
25000
  "@sarj/prefer-node-crypto-hash",
25001
25001
  "@sarj/prefer-node-fs-promises",
25002
25002
  "@sarj/prefer-shared-zod-enum",
25003
25003
  "@sarj/prefer-whole-object-assertion",
25004
- "@sarj/require-camelcase-properties",
25005
25004
  "@sarj/require-sql-access-class"
25006
25005
  ];
25007
25006
  var RECOMMENDED_RULES = {
@@ -25012,7 +25011,7 @@ var RECOMMENDED_RULES = {
25012
25011
  "@sarj/no-reduce-accumulator-copy": "error",
25013
25012
  "@sarj/no-known-value-widening": "error",
25014
25013
  "@sarj/require-button-accessible-name": "error",
25015
- "@sarj/require-camelcase-properties": "warn",
25014
+ "@sarj/require-camelcase-properties": "error",
25016
25015
  "@sarj/require-svg-accessible-name": "error",
25017
25016
  "@sarj/prefer-logical-tailwind-utilities": ["error", { enabled: false }],
25018
25017
  "@sarj/no-unlocalized-toast": ["error", { enabled: false }],
@@ -25086,7 +25085,7 @@ var RECOMMENDED_RULES = {
25086
25085
  "@sarj/prefer-module-level-constant": "error",
25087
25086
  "@sarj/prefer-module-level-schema": "error",
25088
25087
  "@sarj/prefer-module-level-refined-schema": "warn",
25089
- "@sarj/prefer-multi-value-zod-literal": ["warn", { zodMajorVersion: 4 }],
25088
+ "@sarj/prefer-multi-value-zod-literal": ["error", { zodMajorVersion: 4 }],
25090
25089
  "@sarj/prefer-named-callback-domain": "error",
25091
25090
  "@sarj/prefer-nominal-id-types": "error",
25092
25091
  "@sarj/prefer-named-complex-return-type": "error",
@@ -25130,7 +25129,7 @@ var STRICT_RULES = {
25130
25129
  "@sarj/no-reduce-accumulator-copy": "error",
25131
25130
  "@sarj/no-known-value-widening": "error",
25132
25131
  "@sarj/require-button-accessible-name": "error",
25133
- "@sarj/require-camelcase-properties": "warn",
25132
+ "@sarj/require-camelcase-properties": "error",
25134
25133
  "@sarj/require-svg-accessible-name": "error",
25135
25134
  "@sarj/prefer-logical-tailwind-utilities": ["error", { enabled: false }],
25136
25135
  "@sarj/no-unlocalized-toast": ["error", { enabled: false }],
@@ -25208,7 +25207,7 @@ var STRICT_RULES = {
25208
25207
  "@sarj/prefer-module-level-constant": "error",
25209
25208
  "@sarj/prefer-module-level-schema": "error",
25210
25209
  "@sarj/prefer-module-level-refined-schema": "warn",
25211
- "@sarj/prefer-multi-value-zod-literal": ["warn", { zodMajorVersion: 4 }],
25210
+ "@sarj/prefer-multi-value-zod-literal": ["error", { zodMajorVersion: 4 }],
25212
25211
  "@sarj/prefer-named-callback-domain": "error",
25213
25212
  "@sarj/prefer-nominal-id-types": "error",
25214
25213
  "@sarj/prefer-named-complex-return-type": "error",
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@sarj/eslint-plugin",
3
- "version": "16.8.0",
4
- "packageManager": "npm@12.1.0",
3
+ "version": "16.10.0",
4
+ "packageManager": "npm@12.2.0",
5
5
  "description": "Custom ESLint rules for hypermodern TypeScript / React / Next.js projects",
6
6
  "type": "module",
7
7
  "main": "./dist/index.cjs",
@@ -54,48 +54,49 @@
54
54
  "author": "sarj-ai",
55
55
  "license": "MIT",
56
56
  "dependencies": {
57
- "@typescript-eslint/typescript-estree": "^8.70.1",
58
- "@typescript-eslint/utils": "^8.70.1",
57
+ "@typescript-eslint/typescript-estree": "^8.71.2",
58
+ "@typescript-eslint/utils": "^8.71.2",
59
59
  "jsonc-parser": "^3.3.1"
60
60
  },
61
61
  "devDependencies": {
62
62
  "@eslint-community/eslint-plugin-eslint-comments": "^4.8.1",
63
63
  "@eslint/compat": "^2.1.1",
64
64
  "@eslint/js": "10.0.1",
65
- "@shadcn/lint": "0.2.0",
66
- "@types/node": "26.6.2",
67
- "@typescript-eslint/parser": "8.70.1",
68
- "@typescript-eslint/rule-tester": "8.70.1",
69
- "@typescript-eslint/utils": "8.70.1",
65
+ "@shadcn/lint": "0.2.1",
66
+ "@types/node": "26.6.5",
67
+ "@typescript-eslint/parser": "8.71.2",
68
+ "@typescript-eslint/rule-tester": "8.71.2",
69
+ "@typescript-eslint/utils": "8.71.2",
70
70
  "@typescript/native": "npm:typescript@7.0.2",
71
71
  "@vitest/eslint-plugin": "1.6.27",
72
- "eslint": "10.11.0",
73
- "eslint-node-test": "0.4.0",
74
- "eslint-plugin-better-tailwindcss": "^4.7.0",
75
- "eslint-plugin-jest": "29.16.6",
76
- "eslint-plugin-jsdoc": "64.5.4",
77
- "eslint-plugin-n": "^18.3.0",
72
+ "eslint": "10.12.0",
73
+ "eslint-node-test": "1.0.1",
74
+ "eslint-plugin-better-tailwindcss": "^4.9.0",
75
+ "eslint-plugin-jest": "29.17.0",
76
+ "eslint-plugin-jsdoc": "65.3.1",
77
+ "eslint-plugin-n": "^18.4.1",
78
78
  "eslint-plugin-perfectionist": "5.12.1",
79
- "eslint-plugin-playwright": "2.12.0",
79
+ "eslint-plugin-playwright": "2.12.1",
80
80
  "eslint-plugin-promise": "^7.3.0",
81
81
  "eslint-plugin-react": "^7.37.5",
82
82
  "eslint-plugin-react-hooks": "^7.1.1",
83
83
  "eslint-plugin-simple-import-sort": "^14.0.0",
84
84
  "eslint-plugin-testing-library": "7.16.2",
85
- "eslint-plugin-unicorn": "^76.0.0",
86
- "eslint-plugin-zod": "^4.14.2",
87
- "globals": "15.15.0",
88
- "tsup": "latest",
85
+ "eslint-plugin-unicorn": "^78.0.0",
86
+ "eslint-plugin-zod": "^5.0.1",
87
+ "globals": "17.13.0",
88
+ "tsup": "8.5.1",
89
89
  "typescript": "npm:@typescript/typescript6@6.0.2",
90
- "typescript-eslint": "^8.70.1",
91
- "vitest": "5.0.1"
90
+ "typescript-eslint": "^8.71.2",
91
+ "vitest": "5.0.4",
92
+ "zod": "4.6.7"
92
93
  },
93
94
  "peerDependencies": {
94
95
  "eslint": ">=9.39.4",
95
96
  "typescript": ">=5.0.0"
96
97
  },
97
98
  "engines": {
98
- "node": ">=22.22.2"
99
+ "node": "^22.22.2 || >=24.15.0"
99
100
  },
100
101
  "allowScripts": {
101
102
  "esbuild@0.28.2": true,
@@ -107,11 +108,11 @@
107
108
  }
108
109
  },
109
110
  "overrides": {
110
- "brace-expansion@^5.0.0": "5.0.9",
111
+ "brace-expansion@^5.0.0": "5.0.12",
111
112
  "esbuild": "0.28.2",
112
- "nanoid@<3.3.18": "3.3.18",
113
113
  "eslint-plugin-react": {
114
114
  "eslint": "$eslint"
115
- }
115
+ },
116
+ "nanoid@<3.3.20": "3.3.20"
116
117
  }
117
118
  }