@venizia/dev-configs 0.3.1-2 → 0.3.1-4

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.
Files changed (51) hide show
  1. package/README.md +44 -3
  2. package/dist/linters/browser.d.ts.map +1 -1
  3. package/dist/linters/browser.js +11 -7
  4. package/dist/linters/browser.js.map +1 -1
  5. package/dist/linters/house/common.d.ts +1 -0
  6. package/dist/linters/house/common.d.ts.map +1 -1
  7. package/dist/linters/house/common.js +1 -0
  8. package/dist/linters/house/common.js.map +1 -1
  9. package/dist/linters/house/configs.d.ts +1 -1
  10. package/dist/linters/house/configs.d.ts.map +1 -1
  11. package/dist/linters/house/configs.js +15 -1
  12. package/dist/linters/house/configs.js.map +1 -1
  13. package/dist/linters/house/const-class-values.rule.d.ts +18 -0
  14. package/dist/linters/house/const-class-values.rule.d.ts.map +1 -0
  15. package/dist/linters/house/const-class-values.rule.js +52 -0
  16. package/dist/linters/house/const-class-values.rule.js.map +1 -0
  17. package/dist/linters/house/index.d.ts +2 -0
  18. package/dist/linters/house/index.d.ts.map +1 -1
  19. package/dist/linters/house/index.js +2 -0
  20. package/dist/linters/house/index.js.map +1 -1
  21. package/dist/linters/house/no-leaked-render.rule.d.ts +15 -0
  22. package/dist/linters/house/no-leaked-render.rule.d.ts.map +1 -0
  23. package/dist/linters/house/no-leaked-render.rule.js +49 -0
  24. package/dist/linters/house/no-leaked-render.rule.js.map +1 -0
  25. package/dist/linters/house/plugin.d.ts.map +1 -1
  26. package/dist/linters/house/plugin.js +4 -0
  27. package/dist/linters/house/plugin.js.map +1 -1
  28. package/dist/linters/ignore.d.ts +30 -0
  29. package/dist/linters/ignore.d.ts.map +1 -0
  30. package/dist/linters/ignore.js +49 -0
  31. package/dist/linters/ignore.js.map +1 -0
  32. package/dist/linters/index.d.ts +1 -0
  33. package/dist/linters/index.d.ts.map +1 -1
  34. package/dist/linters/index.js +1 -0
  35. package/dist/linters/index.js.map +1 -1
  36. package/dist/linters/oxlint.d.ts +6 -0
  37. package/dist/linters/oxlint.d.ts.map +1 -1
  38. package/dist/linters/oxlint.js +13 -12
  39. package/dist/linters/oxlint.js.map +1 -1
  40. package/dist/linters/react.d.ts.map +1 -1
  41. package/dist/linters/react.js +16 -2
  42. package/dist/linters/react.js.map +1 -1
  43. package/dist/linters/rules/naming-convention.rule.d.ts.map +1 -1
  44. package/dist/linters/rules/naming-convention.rule.js +7 -0
  45. package/dist/linters/rules/naming-convention.rule.js.map +1 -1
  46. package/dist/linters/rules/no-unused-vars.rule.d.ts +1 -1
  47. package/dist/linters/rules/no-unused-vars.rule.d.ts.map +1 -1
  48. package/dist/linters/rules/no-unused-vars.rule.js +3 -3
  49. package/dist/linters/rules/no-unused-vars.rule.js.map +1 -1
  50. package/package.json +1 -1
  51. package/src/tsconfig/tsconfig.base.json +2 -2
package/README.md CHANGED
@@ -115,8 +115,8 @@ Every IGNIS package and example does.
115
115
  | `@venizia/dev-configs/compilers` | `BunCompiler` |
116
116
  | `@venizia/dev-configs/formatters` | `oxfmtConfigs`, `browserOxfmtConfigs`, `prettierConfigs` |
117
117
  | `@venizia/dev-configs/testing` | `rejectionOf`, `expectRejection` - test helpers for a promise that must reject (imports `bun:test`; tests only) |
118
- | `@venizia/dev-configs/linters` | `oxlintConfigs`, `OxlintConfigs`, `BrowserOxlintConfigs`, `ReactOxlintConfigs`, `namingConventionConfigs`, `reactNamingConventionConfigs`, `eslintConfigs`, `ReactEslintConfigs`, the rule classes and their types |
119
- | `@venizia/dev-configs/tsconfig.base.json` | Target and lib ES2025, `module` Node16, strict mode with `noImplicitAny`, `strictPropertyInitialization` and `useUnknownInCatchVariables` off, `noEmitOnError`, tests excluded |
118
+ | `@venizia/dev-configs/linters` | `oxlintConfigs`, `OxlintConfigs`, `BrowserOxlintConfigs`, `ReactOxlintConfigs`, `LintIgnore`, `namingConventionConfigs`, `reactNamingConventionConfigs`, `houseConfigs`, `reactHouseConfigs`, `eslintConfigs`, `ReactEslintConfigs`, the rule classes and their types |
119
+ | `@venizia/dev-configs/tsconfig.base.json` | Target and lib ES2025, `module` Node16, strict mode (`noImplicitAny` and `useUnknownInCatchVariables` on) with `strictPropertyInitialization` off (DI-injected properties have no initializer), `noEmitOnError`, tests excluded |
120
120
  | `@venizia/dev-configs/tsconfig.common.json` | Extends the base and switches `module` and `moduleResolution` to `nodenext` |
121
121
  | `@venizia/dev-configs/tsconfig.browser.json` | Extends the base for a browser library built with a bundler: `module` ESNext, `moduleResolution` bundler, lib ES2025 + `DOM` + `DOM.Iterable`, `types: []` so no Bun types reach `dist` |
122
122
  | `@venizia/dev-configs/tsconfig.react.json` | Extends `tsconfig.browser.json` and sets `jsx: react-jsx` |
@@ -132,6 +132,14 @@ Every IGNIS package and example does.
132
132
  becomes a runtime import when Bun runs a decorated class's source, and loading fails with
133
133
  `Export named 'X' not found`. `oxlint --fix` rewrites them.
134
134
 
135
+ oxlint (1.88) does not read decorator metadata, so it also rewrites the import of a decorated
136
+ constructor parameter's class to `import { type X }`. tsc then emits `Function` (or `Object` under Bun)
137
+ as that parameter's `design:paramtypes` entry. IGNIS never injects by that entry - `@inject` names its
138
+ key, and `@repository` skips `Object` and `Function` - so nothing breaks. Code that does read
139
+ `design:paramtypes` must not take this rule's fix there; typescript-eslint's
140
+ `consistent-type-imports` leaves decorated classes alone when `emitDecoratorMetadata` and
141
+ `experimentalDecorators` are in its `parserOptions`.
142
+
135
143
  Not ported:
136
144
 
137
145
  | Rule | Why |
@@ -169,6 +177,11 @@ booleans. `BrowserOxlintConfigs.create()` and `ReactOxlintConfigs.create()` take
169
177
  | :--- | :--- | :--- | :--- |
170
178
  | `MaxParamsOwnRule` | `venizia/max-params-own` | `build({ max: 5 })` | A function we write takes at most `max` positional parameters. Not counted: an inline callback passed to a call or a JSX prop, a signature a declared type fixes, a constructor whose parameters are all `@inject`. A hook callback counts. |
171
179
  | `NoNewErrorRule` | `venizia/no-new-error` | `error` | Throw through `getError` (or an `ApplicationError`), never `new Error(...)` / `Error(...)`. Off in tests. |
180
+ | `NoLeakedRenderRule` | `venizia/no-leaked-render` | `error`, in `reactHouseConfigs` only | A JSX child is drawn with `cond ? <X /> : null`, never `cond && <X />`, which draws `0` when `cond` is `0`. `--fix` rewrites it. `disabled={a && b}` is a value, not a child, and passes. |
181
+ | `ConstClassValuesRule` | `venizia/const-class-values` | off; `build({ namePattern })` | An exported type named like a logic value (`State`, `Status`, `Stage`, `Mode`, `Kind`, `Type` by default) is a const class plus `TConstValue<typeof X>`, not a union of string literals. |
182
+
183
+ `const-class-values` is registered in the plugin but no preset turns it on: a few IGNIS types still
184
+ break it. Enable it with `[ConstClassValuesRule.NAME]: ConstClassValuesRule.build()`.
172
185
 
173
186
  ### namingConventionConfigs
174
187
 
@@ -273,7 +286,7 @@ export default [
273
286
  | Adds | Setting |
274
287
  | :--- | :--- |
275
288
  | React correctness (`jsx-key`, `no-children-prop`, `no-deprecated`, ... - 14 rules) | `error`, `.jsx`/`.tsx` |
276
- | `jsx-a11y` basics (`alt-text`, `aria-props`, `aria-role`, ... - 9 rules) | `error`, `.jsx`/`.tsx` |
289
+ | `jsx-a11y` (`alt-text`, `aria-props`, `aria-role`, `click-events-have-key-events`, `label-has-associated-control`, ... - 15 rules) | `error`, `.jsx`/`.tsx` |
277
290
  | `react-hooks/rules-of-hooks` / `exhaustive-deps` | `error`, every source file |
278
291
  | `@typescript-eslint/consistent-type-imports` | `['error', { prefer: 'type-imports', fixStyle: 'inline-type-imports', disallowTypeAnnotations: false }]` |
279
292
  | `naming-convention` | the base rule, plus PascalCase functions (`function App()`), `.jsx`/`.tsx` |
@@ -326,6 +339,11 @@ export default reactNamingConventionConfigs;
326
339
  `ReactOxlintConfigs.create()` is `BrowserOxlintConfigs.create()` plus the same rules as the ESLint
327
340
  table above, as strict as the base. `react/no-deprecated` is left out: oxlint has no port of it.
328
341
 
342
+ Both React presets run the same fifteen `jsx-a11y` rules, including the six that need a human
343
+ decision (`click-events-have-key-events`, `no-static-element-interactions`,
344
+ `no-noninteractive-element-interactions`, `label-has-associated-control`, `heading-has-content`,
345
+ `anchor-is-valid`). `reactHouseConfigs` adds `venizia/no-leaked-render`, which oxlint has no port of.
346
+
329
347
  The presets start strict. An application that wants less overrides the rule after the preset:
330
348
 
331
349
  ```ts
@@ -340,6 +358,29 @@ export default defineConfig({
340
358
  `reactNamingConventionConfigs` is `namingConventionConfigs` plus PascalCase functions in `.jsx` and
341
359
  `.tsx` files.
342
360
 
361
+ ### Ignoring generated or vendored paths
362
+
363
+ A project that lints generated files or vendored code lists them once and gives the list to both tools.
364
+ oxlint cannot do it alone: its `ignorePatterns` resolve against the folder of the config file, so one
365
+ in `.configs/` never reaches a project path. The `ignore` option of any oxlint preset turns every rule
366
+ off for the paths instead, and `LintIgnore.eslint` is the ESLint `ignores` entry. A package with a
367
+ Makefile can set `LINT_IGNORE` instead (`make/project.mk` passes it as `--ignore-pattern`).
368
+
369
+ ```ts
370
+ // .configs/lint-ignore.mjs
371
+ export const LINT_IGNORE = ['src/components/shadcn/**', 'dev-dist/**'];
372
+
373
+ // .configs/oxlint.config.mts
374
+ export default defineConfig(ReactOxlintConfigs.create({ ignore: LINT_IGNORE }));
375
+
376
+ // .configs/eslint.config.mjs
377
+ export default [LintIgnore.eslint({ patterns: LINT_IGNORE }), ...reactHouseConfigs];
378
+ ```
379
+
380
+ A pattern is a project path, as in `--ignore-pattern`. The off-override comes after the preset's own
381
+ overrides, so a rule you add after the preset is on again in an ignored path. Wrap the finished config
382
+ instead: `LintIgnore.oxlint({ config, patterns: LINT_IGNORE })`.
383
+
343
384
  ### BunCompiler
344
385
 
345
386
  `BunCompiler.compile()` builds one Bun executable: minified, with a linked source map. The
@@ -1 +1 @@
1
- {"version":3,"file":"browser.d.ts","sourceRoot":"","sources":["../../src/linters/browser.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AAC3C,OAAO,EAAE,KAAK,oBAAoB,EAAiB,MAAM,UAAU,CAAC;AAGpE;;;;;;;;;;;;GAYG;AACH,qBAAa,oBAAoB;IAC/B,MAAM,CAAC,MAAM,CAAC,IAAI,GAAE,oBAAyB,GAAG,YAAY;CAW7D"}
1
+ {"version":3,"file":"browser.d.ts","sourceRoot":"","sources":["../../src/linters/browser.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AAE3C,OAAO,EAAE,KAAK,oBAAoB,EAAiB,MAAM,UAAU,CAAC;AAGpE;;;;;;;;;;;;GAYG;AACH,qBAAa,oBAAoB;IAC/B,MAAM,CAAC,MAAM,CAAC,IAAI,GAAE,oBAAyB,GAAG,YAAY;CAc7D"}
@@ -1,6 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.BrowserOxlintConfigs = void 0;
4
+ const ignore_1 = require("./ignore");
4
5
  const oxlint_1 = require("./oxlint");
5
6
  const rules_1 = require("./rules");
6
7
  /**
@@ -18,14 +19,17 @@ const rules_1 = require("./rules");
18
19
  */
19
20
  class BrowserOxlintConfigs {
20
21
  static create(opts = {}) {
21
- const baseConfigs = oxlint_1.OxlintConfigs.create(opts);
22
- return {
23
- ...baseConfigs,
24
- rules: {
25
- ...baseConfigs.rules,
26
- [rules_1.NoRestrictedPropertiesRule.NAME]: rules_1.NoRestrictedPropertiesRule.build(),
22
+ const baseConfigs = oxlint_1.OxlintConfigs.create({ lenientFallback: opts.lenientFallback });
23
+ return ignore_1.LintIgnore.oxlint({
24
+ config: {
25
+ ...baseConfigs,
26
+ rules: {
27
+ ...baseConfigs.rules,
28
+ [rules_1.NoRestrictedPropertiesRule.NAME]: rules_1.NoRestrictedPropertiesRule.build(),
29
+ },
27
30
  },
28
- };
31
+ patterns: opts.ignore ?? [],
32
+ });
29
33
  }
30
34
  }
31
35
  exports.BrowserOxlintConfigs = BrowserOxlintConfigs;
@@ -1 +1 @@
1
- {"version":3,"file":"browser.js","sourceRoot":"","sources":["../../src/linters/browser.ts"],"names":[],"mappings":";;;AACA,qCAAoE;AACpE,mCAAqD;AAErD;;;;;;;;;;;;GAYG;AACH,MAAa,oBAAoB;IAC/B,MAAM,CAAC,MAAM,CAAC,OAA6B,EAAE;QAC3C,MAAM,WAAW,GAAG,sBAAa,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QAE/C,OAAO;YACL,GAAG,WAAW;YACd,KAAK,EAAE;gBACL,GAAG,WAAW,CAAC,KAAK;gBACpB,CAAC,kCAA0B,CAAC,IAAI,CAAC,EAAE,kCAA0B,CAAC,KAAK,EAAE;aACtE;SACF,CAAC;IACJ,CAAC;CACF;AAZD,oDAYC"}
1
+ {"version":3,"file":"browser.js","sourceRoot":"","sources":["../../src/linters/browser.ts"],"names":[],"mappings":";;;AACA,qCAAsC;AACtC,qCAAoE;AACpE,mCAAqD;AAErD;;;;;;;;;;;;GAYG;AACH,MAAa,oBAAoB;IAC/B,MAAM,CAAC,MAAM,CAAC,OAA6B,EAAE;QAC3C,MAAM,WAAW,GAAG,sBAAa,CAAC,MAAM,CAAC,EAAE,eAAe,EAAE,IAAI,CAAC,eAAe,EAAE,CAAC,CAAC;QAEpF,OAAO,mBAAU,CAAC,MAAM,CAAC;YACvB,MAAM,EAAE;gBACN,GAAG,WAAW;gBACd,KAAK,EAAE;oBACL,GAAG,WAAW,CAAC,KAAK;oBACpB,CAAC,kCAA0B,CAAC,IAAI,CAAC,EAAE,kCAA0B,CAAC,KAAK,EAAE;iBACtE;aACF;YACD,QAAQ,EAAE,IAAI,CAAC,MAAM,IAAI,EAAE;SAC5B,CAAC,CAAC;IACL,CAAC;CACF;AAfD,oDAeC"}
@@ -5,6 +5,7 @@ export declare class AstNodeTypes {
5
5
  static readonly FUNCTION_DECLARATION = "FunctionDeclaration";
6
6
  static readonly FUNCTION_EXPRESSION = "FunctionExpression";
7
7
  static readonly ARROW_FUNCTION_EXPRESSION = "ArrowFunctionExpression";
8
+ static readonly EXPORT_NAMED_DECLARATION = "ExportNamedDeclaration";
8
9
  }
9
10
  /** The ESLint namespace the house rules live under: `venizia/<rule>`. */
10
11
  export declare const HOUSE_PLUGIN_NAMESPACE = "venizia";
@@ -1 +1 @@
1
- {"version":3,"file":"common.d.ts","sourceRoot":"","sources":["../../../src/linters/house/common.ts"],"names":[],"mappings":"AAAA,8HAA8H;AAC9H,qBAAa,YAAY;IACvB,MAAM,CAAC,QAAQ,CAAC,cAAc,mBAAmB;IACjD,MAAM,CAAC,QAAQ,CAAC,eAAe,oBAAoB;IACnD,MAAM,CAAC,QAAQ,CAAC,oBAAoB,yBAAyB;IAC7D,MAAM,CAAC,QAAQ,CAAC,mBAAmB,wBAAwB;IAC3D,MAAM,CAAC,QAAQ,CAAC,yBAAyB,6BAA6B;CACvE;AAED,yEAAyE;AACzE,eAAO,MAAM,sBAAsB,YAAY,CAAC;AAEhD,qHAAqH;AACrH,eAAO,MAAM,SAAS,GAAI,MAAM;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,KAAG,OAKhE,CAAC;AAEF,8EAA8E;AAC9E,eAAO,MAAM,QAAQ,GAAI,MAAM;IAAE,IAAI,EAAE,OAAO,CAAA;CAAE,KAAG,MAAM,GAAG,SAG3D,CAAC"}
1
+ {"version":3,"file":"common.d.ts","sourceRoot":"","sources":["../../../src/linters/house/common.ts"],"names":[],"mappings":"AAAA,8HAA8H;AAC9H,qBAAa,YAAY;IACvB,MAAM,CAAC,QAAQ,CAAC,cAAc,mBAAmB;IACjD,MAAM,CAAC,QAAQ,CAAC,eAAe,oBAAoB;IACnD,MAAM,CAAC,QAAQ,CAAC,oBAAoB,yBAAyB;IAC7D,MAAM,CAAC,QAAQ,CAAC,mBAAmB,wBAAwB;IAC3D,MAAM,CAAC,QAAQ,CAAC,yBAAyB,6BAA6B;IACtE,MAAM,CAAC,QAAQ,CAAC,wBAAwB,4BAA4B;CACrE;AAED,yEAAyE;AACzE,eAAO,MAAM,sBAAsB,YAAY,CAAC;AAEhD,qHAAqH;AACrH,eAAO,MAAM,SAAS,GAAI,MAAM;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,KAAG,OAKhE,CAAC;AAEF,8EAA8E;AAC9E,eAAO,MAAM,QAAQ,GAAI,MAAM;IAAE,IAAI,EAAE,OAAO,CAAA;CAAE,KAAG,MAAM,GAAG,SAG3D,CAAC"}
@@ -8,6 +8,7 @@ class AstNodeTypes {
8
8
  static { this.FUNCTION_DECLARATION = 'FunctionDeclaration'; }
9
9
  static { this.FUNCTION_EXPRESSION = 'FunctionExpression'; }
10
10
  static { this.ARROW_FUNCTION_EXPRESSION = 'ArrowFunctionExpression'; }
11
+ static { this.EXPORT_NAMED_DECLARATION = 'ExportNamedDeclaration'; }
11
12
  }
12
13
  exports.AstNodeTypes = AstNodeTypes;
13
14
  /** The ESLint namespace the house rules live under: `venizia/<rule>`. */
@@ -1 +1 @@
1
- {"version":3,"file":"common.js","sourceRoot":"","sources":["../../../src/linters/house/common.ts"],"names":[],"mappings":";;;AAAA,8HAA8H;AAC9H,MAAa,YAAY;aACP,mBAAc,GAAG,eAAe,CAAC;aACjC,oBAAe,GAAG,gBAAgB,CAAC;aACnC,yBAAoB,GAAG,qBAAqB,CAAC;aAC7C,wBAAmB,GAAG,oBAAoB,CAAC;aAC3C,8BAAyB,GAAG,yBAAyB,CAAC;;AALxE,oCAMC;AAED,yEAAyE;AAC5D,QAAA,sBAAsB,GAAG,SAAS,CAAC;AAEhD,qHAAqH;AAC9G,MAAM,SAAS,GAAG,CAAC,IAAoC,EAAW,EAAE;IACzE,MAAM,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;IAC3B,OAAO,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,IAAI,IAAI,GAAG,IAAI,IAAI;QAC7D,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC;QACxB,CAAC,CAAC,SAAS,CAAC;AAChB,CAAC,CAAC;AALW,QAAA,SAAS,aAKpB;AAEF,8EAA8E;AACvE,MAAM,QAAQ,GAAG,CAAC,IAAuB,EAAsB,EAAE;IACtE,MAAM,IAAI,GAAG,IAAA,iBAAS,EAAC,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,GAAG,EAAE,MAAM,EAAE,CAAC,CAAC;IACzD,OAAO,OAAO,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC;AACrD,CAAC,CAAC;AAHW,QAAA,QAAQ,YAGnB"}
1
+ {"version":3,"file":"common.js","sourceRoot":"","sources":["../../../src/linters/house/common.ts"],"names":[],"mappings":";;;AAAA,8HAA8H;AAC9H,MAAa,YAAY;aACP,mBAAc,GAAG,eAAe,CAAC;aACjC,oBAAe,GAAG,gBAAgB,CAAC;aACnC,yBAAoB,GAAG,qBAAqB,CAAC;aAC7C,wBAAmB,GAAG,oBAAoB,CAAC;aAC3C,8BAAyB,GAAG,yBAAyB,CAAC;aACtD,6BAAwB,GAAG,wBAAwB,CAAC;;AANtE,oCAOC;AAED,yEAAyE;AAC5D,QAAA,sBAAsB,GAAG,SAAS,CAAC;AAEhD,qHAAqH;AAC9G,MAAM,SAAS,GAAG,CAAC,IAAoC,EAAW,EAAE;IACzE,MAAM,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;IAC3B,OAAO,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,IAAI,IAAI,GAAG,IAAI,IAAI;QAC7D,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC;QACxB,CAAC,CAAC,SAAS,CAAC;AAChB,CAAC,CAAC;AALW,QAAA,SAAS,aAKpB;AAEF,8EAA8E;AACvE,MAAM,QAAQ,GAAG,CAAC,IAAuB,EAAsB,EAAE;IACtE,MAAM,IAAI,GAAG,IAAA,iBAAS,EAAC,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,GAAG,EAAE,MAAM,EAAE,CAAC,CAAC;IACzD,OAAO,OAAO,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC;AACrD,CAAC,CAAC;AAHW,QAAA,QAAQ,YAGnB"}
@@ -11,6 +11,6 @@ import type { Linter } from 'eslint';
11
11
  * ```
12
12
  */
13
13
  export declare const houseConfigs: Linter.Config[];
14
- /** `houseConfigs` for a React project: `reactNamingConventionConfigs` plus the house rules. */
14
+ /** `houseConfigs` for a React project: `reactNamingConventionConfigs`, the house rules and `no-leaked-render`. */
15
15
  export declare const reactHouseConfigs: Linter.Config[];
16
16
  //# sourceMappingURL=configs.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"configs.d.ts","sourceRoot":"","sources":["../../../src/linters/house/configs.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AA4BrC;;;;;;;;;;GAUG;AACH,eAAO,MAAM,YAAY,EAAE,MAAM,CAAC,MAAM,EAAsD,CAAC;AAE/F,+FAA+F;AAC/F,eAAO,MAAM,iBAAiB,EAAE,MAAM,CAAC,MAAM,EAG5C,CAAC"}
1
+ {"version":3,"file":"configs.d.ts","sourceRoot":"","sources":["../../../src/linters/house/configs.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AA8BrC;;;;;;;;;;GAUG;AACH,eAAO,MAAM,YAAY,EAAE,MAAM,CAAC,MAAM,EAAsD,CAAC;AAc/F,kHAAkH;AAClH,eAAO,MAAM,iBAAiB,EAAE,MAAM,CAAC,MAAM,EAI5C,CAAC"}
@@ -5,9 +5,11 @@ const eslint_1 = require("../eslint");
5
5
  const react_1 = require("../react");
6
6
  const common_1 = require("./common");
7
7
  const max_params_own_rule_1 = require("./max-params-own.rule");
8
+ const no_leaked_render_rule_1 = require("./no-leaked-render.rule");
8
9
  const no_new_error_rule_1 = require("./no-new-error.rule");
9
10
  const plugin_1 = require("./plugin");
10
11
  const SOURCE_FILES = ['**/*.{ts,tsx,mts,cts}'];
12
+ const JSX_FILES = ['**/*.{jsx,tsx}'];
11
13
  const TEST_FILES = ['**/__tests__/**', '**/*.test.{ts,tsx}', '**/*.spec.{ts,tsx}'];
12
14
  /**
13
15
  * The house rules: at most 5 positional parameters on a function we write, and errors thrown through
@@ -37,9 +39,21 @@ const houseRuleConfigs = [
37
39
  * ```
38
40
  */
39
41
  exports.houseConfigs = [...eslint_1.namingConventionConfigs, ...houseRuleConfigs];
40
- /** `houseConfigs` for a React project: `reactNamingConventionConfigs` plus the house rules. */
42
+ /**
43
+ * The React house rule: a JSX child is drawn with `cond ? <X /> : null`, never `cond && <X />`, which
44
+ * draws `0` when `cond` is `0`.
45
+ */
46
+ const reactRuleConfigs = [
47
+ {
48
+ files: JSX_FILES,
49
+ plugins: { [common_1.HOUSE_PLUGIN_NAMESPACE]: plugin_1.houseEslintPlugin },
50
+ rules: { [no_leaked_render_rule_1.NoLeakedRenderRule.NAME]: no_leaked_render_rule_1.NoLeakedRenderRule.build() },
51
+ },
52
+ ];
53
+ /** `houseConfigs` for a React project: `reactNamingConventionConfigs`, the house rules and `no-leaked-render`. */
41
54
  exports.reactHouseConfigs = [
42
55
  ...react_1.reactNamingConventionConfigs,
43
56
  ...houseRuleConfigs,
57
+ ...reactRuleConfigs,
44
58
  ];
45
59
  //# sourceMappingURL=configs.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"configs.js","sourceRoot":"","sources":["../../../src/linters/house/configs.ts"],"names":[],"mappings":";;;AACA,sCAAoD;AACpD,oCAAwD;AACxD,qCAAkD;AAClD,+DAAyD;AACzD,2DAAqD;AACrD,qCAA6C;AAE7C,MAAM,YAAY,GAAG,CAAC,uBAAuB,CAAC,CAAC;AAC/C,MAAM,UAAU,GAAG,CAAC,iBAAiB,EAAE,oBAAoB,EAAE,oBAAoB,CAAC,CAAC;AAEnF;;;;GAIG;AACH,MAAM,gBAAgB,GAAoB;IACxC;QACE,KAAK,EAAE,YAAY;QACnB,OAAO,EAAE,EAAE,CAAC,+BAAsB,CAAC,EAAE,0BAAiB,EAAE;QACxD,KAAK,EAAE;YACL,CAAC,sCAAgB,CAAC,IAAI,CAAC,EAAE,sCAAgB,CAAC,KAAK,EAAE;YACjD,CAAC,kCAAc,CAAC,IAAI,CAAC,EAAE,kCAAc,CAAC,KAAK,EAAE;SAC9C;KACF;IACD,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,EAAE,CAAC,kCAAc,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,EAAE;CAC/D,CAAC;AAEF;;;;;;;;;;GAUG;AACU,QAAA,YAAY,GAAoB,CAAC,GAAG,gCAAuB,EAAE,GAAG,gBAAgB,CAAC,CAAC;AAE/F,+FAA+F;AAClF,QAAA,iBAAiB,GAAoB;IAChD,GAAG,oCAA4B;IAC/B,GAAG,gBAAgB;CACpB,CAAC"}
1
+ {"version":3,"file":"configs.js","sourceRoot":"","sources":["../../../src/linters/house/configs.ts"],"names":[],"mappings":";;;AACA,sCAAoD;AACpD,oCAAwD;AACxD,qCAAkD;AAClD,+DAAyD;AACzD,mEAA6D;AAC7D,2DAAqD;AACrD,qCAA6C;AAE7C,MAAM,YAAY,GAAG,CAAC,uBAAuB,CAAC,CAAC;AAC/C,MAAM,SAAS,GAAG,CAAC,gBAAgB,CAAC,CAAC;AACrC,MAAM,UAAU,GAAG,CAAC,iBAAiB,EAAE,oBAAoB,EAAE,oBAAoB,CAAC,CAAC;AAEnF;;;;GAIG;AACH,MAAM,gBAAgB,GAAoB;IACxC;QACE,KAAK,EAAE,YAAY;QACnB,OAAO,EAAE,EAAE,CAAC,+BAAsB,CAAC,EAAE,0BAAiB,EAAE;QACxD,KAAK,EAAE;YACL,CAAC,sCAAgB,CAAC,IAAI,CAAC,EAAE,sCAAgB,CAAC,KAAK,EAAE;YACjD,CAAC,kCAAc,CAAC,IAAI,CAAC,EAAE,kCAAc,CAAC,KAAK,EAAE;SAC9C;KACF;IACD,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,EAAE,CAAC,kCAAc,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,EAAE;CAC/D,CAAC;AAEF;;;;;;;;;;GAUG;AACU,QAAA,YAAY,GAAoB,CAAC,GAAG,gCAAuB,EAAE,GAAG,gBAAgB,CAAC,CAAC;AAE/F;;;GAGG;AACH,MAAM,gBAAgB,GAAoB;IACxC;QACE,KAAK,EAAE,SAAS;QAChB,OAAO,EAAE,EAAE,CAAC,+BAAsB,CAAC,EAAE,0BAAiB,EAAE;QACxD,KAAK,EAAE,EAAE,CAAC,0CAAkB,CAAC,IAAI,CAAC,EAAE,0CAAkB,CAAC,KAAK,EAAE,EAAE;KACjE;CACF,CAAC;AAEF,kHAAkH;AACrG,QAAA,iBAAiB,GAAoB;IAChD,GAAG,oCAA4B;IAC/B,GAAG,gBAAgB;IACnB,GAAG,gBAAgB;CACpB,CAAC"}
@@ -0,0 +1,18 @@
1
+ import type { Linter, Rule } from 'eslint';
2
+ import type { TRuleSeverity } from '../rules/common';
3
+ /**
4
+ * `venizia/const-class-values`. An enumerable string is a const class plus `TConstValue<typeof X>`,
5
+ * never an exported union of string literals. Only a type whose name ends like a logic value is
6
+ * checked (`State`, `Status`, `Stage`, `Mode`, `Kind`, `Type` by default): any other string union may
7
+ * be a plain parameter type.
8
+ */
9
+ export declare class ConstClassValuesRule {
10
+ static readonly NAME = "venizia/const-class-values";
11
+ static readonly DEFAULT_NAME_PATTERN = "(State|Status|Stage|Mode|Kind|Type)$";
12
+ static readonly RULE: Rule.RuleModule;
13
+ static build(opts?: {
14
+ severity?: TRuleSeverity;
15
+ namePattern?: string;
16
+ }): Linter.RuleEntry;
17
+ }
18
+ //# sourceMappingURL=const-class-values.rule.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"const-class-values.rule.d.ts","sourceRoot":"","sources":["../../../src/linters/house/const-class-values.rule.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAC3C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAGrD;;;;;GAKG;AACH,qBAAa,oBAAoB;IAC/B,MAAM,CAAC,QAAQ,CAAC,IAAI,gCAAkD;IAEtE,MAAM,CAAC,QAAQ,CAAC,oBAAoB,0CAA0C;IAE9E,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC,UAAU,CA0CnC;IAEF,MAAM,CAAC,KAAK,CAAC,IAAI,GAAE;QAAE,QAAQ,CAAC,EAAE,aAAa,CAAC;QAAC,WAAW,CAAC,EAAE,MAAM,CAAA;KAAO,GAAG,MAAM,CAAC,SAAS;CAI9F"}
@@ -0,0 +1,52 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ConstClassValuesRule = void 0;
4
+ const common_1 = require("./common");
5
+ /**
6
+ * `venizia/const-class-values`. An enumerable string is a const class plus `TConstValue<typeof X>`,
7
+ * never an exported union of string literals. Only a type whose name ends like a logic value is
8
+ * checked (`State`, `Status`, `Stage`, `Mode`, `Kind`, `Type` by default): any other string union may
9
+ * be a plain parameter type.
10
+ */
11
+ class ConstClassValuesRule {
12
+ static { this.NAME = `${common_1.HOUSE_PLUGIN_NAMESPACE}/const-class-values`; }
13
+ static { this.DEFAULT_NAME_PATTERN = '(State|Status|Stage|Mode|Kind|Type)$'; }
14
+ static { this.RULE = {
15
+ meta: {
16
+ type: 'suggestion',
17
+ schema: [{ type: 'object', properties: { namePattern: { type: 'string' } } }],
18
+ messages: {
19
+ constClass: 'An enumerable string is a const class plus TConstValue<typeof X>, not a union of string literals.',
20
+ },
21
+ },
22
+ create: context => {
23
+ const options = context.options[0];
24
+ const configured = (0, common_1.readField)({ node: options, key: 'namePattern' });
25
+ const namePattern = new RegExp(typeof configured === 'string' ? configured : ConstClassValuesRule.DEFAULT_NAME_PATTERN);
26
+ const isStringLiteral = (member) => (0, common_1.nodeType)({ node: member }) === 'TSLiteralType' &&
27
+ typeof (0, common_1.readField)({ node: (0, common_1.readField)({ node: member, key: 'literal' }), key: 'value' }) ===
28
+ 'string';
29
+ return {
30
+ [`${common_1.AstNodeTypes.EXPORT_NAMED_DECLARATION} > TSTypeAliasDeclaration`]: (node) => {
31
+ const id = (0, common_1.readField)({ node, key: 'id' });
32
+ const name = (0, common_1.readField)({ node: id, key: 'name' });
33
+ const typeAnnotation = (0, common_1.readField)({ node, key: 'typeAnnotation' });
34
+ const members = (0, common_1.readField)({ node: typeAnnotation, key: 'types' });
35
+ if (typeof name === 'string' &&
36
+ namePattern.test(name) &&
37
+ (0, common_1.nodeType)({ node: typeAnnotation }) === 'TSUnionType' &&
38
+ Array.isArray(members) &&
39
+ members.every(isStringLiteral)) {
40
+ context.report({ node, messageId: 'constClass' });
41
+ }
42
+ },
43
+ };
44
+ },
45
+ }; }
46
+ static build(opts = {}) {
47
+ const { severity = 'error', namePattern = ConstClassValuesRule.DEFAULT_NAME_PATTERN } = opts;
48
+ return [severity, { namePattern }];
49
+ }
50
+ }
51
+ exports.ConstClassValuesRule = ConstClassValuesRule;
52
+ //# sourceMappingURL=const-class-values.rule.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"const-class-values.rule.js","sourceRoot":"","sources":["../../../src/linters/house/const-class-values.rule.ts"],"names":[],"mappings":";;;AAEA,qCAAqF;AAErF;;;;;GAKG;AACH,MAAa,oBAAoB;aACf,SAAI,GAAG,GAAG,+BAAsB,qBAAqB,CAAC;aAEtD,yBAAoB,GAAG,sCAAsC,CAAC;aAE9D,SAAI,GAAoB;QACtC,IAAI,EAAE;YACJ,IAAI,EAAE,YAAY;YAClB,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,UAAU,EAAE,EAAE,WAAW,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC;YAC7E,QAAQ,EAAE;gBACR,UAAU,EACR,mGAAmG;aACtG;SACF;QACD,MAAM,EAAE,OAAO,CAAC,EAAE;YAChB,MAAM,OAAO,GAAY,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;YAC5C,MAAM,UAAU,GAAG,IAAA,kBAAS,EAAC,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,EAAE,aAAa,EAAE,CAAC,CAAC;YACpE,MAAM,WAAW,GAAG,IAAI,MAAM,CAC5B,OAAO,UAAU,KAAK,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,oBAAoB,CAAC,oBAAoB,CACxF,CAAC;YAEF,MAAM,eAAe,GAAG,CAAC,MAAe,EAAE,EAAE,CAC1C,IAAA,iBAAQ,EAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,KAAK,eAAe;gBAC9C,OAAO,IAAA,kBAAS,EAAC,EAAE,IAAI,EAAE,IAAA,kBAAS,EAAC,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,SAAS,EAAE,CAAC,EAAE,GAAG,EAAE,OAAO,EAAE,CAAC;oBACnF,QAAQ,CAAC;YAEb,OAAO;gBACL,CAAC,GAAG,qBAAY,CAAC,wBAAwB,2BAA2B,CAAC,EAAE,CACrE,IAAe,EACf,EAAE;oBACF,MAAM,EAAE,GAAG,IAAA,kBAAS,EAAC,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC;oBAC1C,MAAM,IAAI,GAAG,IAAA,kBAAS,EAAC,EAAE,IAAI,EAAE,EAAE,EAAE,GAAG,EAAE,MAAM,EAAE,CAAC,CAAC;oBAClD,MAAM,cAAc,GAAG,IAAA,kBAAS,EAAC,EAAE,IAAI,EAAE,GAAG,EAAE,gBAAgB,EAAE,CAAC,CAAC;oBAClE,MAAM,OAAO,GAAG,IAAA,kBAAS,EAAC,EAAE,IAAI,EAAE,cAAc,EAAE,GAAG,EAAE,OAAO,EAAE,CAAC,CAAC;oBAElE,IACE,OAAO,IAAI,KAAK,QAAQ;wBACxB,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC;wBACtB,IAAA,iBAAQ,EAAC,EAAE,IAAI,EAAE,cAAc,EAAE,CAAC,KAAK,aAAa;wBACpD,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC;wBACtB,OAAO,CAAC,KAAK,CAAC,eAAe,CAAC,EAC9B,CAAC;wBACD,OAAO,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,YAAY,EAAE,CAAC,CAAC;oBACpD,CAAC;gBACH,CAAC;aACF,CAAC;QACJ,CAAC;KACF,CAAC;IAEF,MAAM,CAAC,KAAK,CAAC,OAA2D,EAAE;QACxE,MAAM,EAAE,QAAQ,GAAG,OAAO,EAAE,WAAW,GAAG,oBAAoB,CAAC,oBAAoB,EAAE,GAAG,IAAI,CAAC;QAC7F,OAAO,CAAC,QAAQ,EAAE,EAAE,WAAW,EAAE,CAAC,CAAC;IACrC,CAAC;;AApDH,oDAqDC"}
@@ -1,5 +1,7 @@
1
1
  export * from './common';
2
+ export * from './const-class-values.rule';
2
3
  export * from './max-params-own.rule';
4
+ export * from './no-leaked-render.rule';
3
5
  export * from './no-new-error.rule';
4
6
  export * from './plugin';
5
7
  export * from './configs';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/linters/house/index.ts"],"names":[],"mappings":"AAAA,cAAc,UAAU,CAAC;AACzB,cAAc,uBAAuB,CAAC;AACtC,cAAc,qBAAqB,CAAC;AACpC,cAAc,UAAU,CAAC;AACzB,cAAc,WAAW,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/linters/house/index.ts"],"names":[],"mappings":"AAAA,cAAc,UAAU,CAAC;AACzB,cAAc,2BAA2B,CAAC;AAC1C,cAAc,uBAAuB,CAAC;AACtC,cAAc,yBAAyB,CAAC;AACxC,cAAc,qBAAqB,CAAC;AACpC,cAAc,UAAU,CAAC;AACzB,cAAc,WAAW,CAAC"}
@@ -15,7 +15,9 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
15
15
  };
16
16
  Object.defineProperty(exports, "__esModule", { value: true });
17
17
  __exportStar(require("./common"), exports);
18
+ __exportStar(require("./const-class-values.rule"), exports);
18
19
  __exportStar(require("./max-params-own.rule"), exports);
20
+ __exportStar(require("./no-leaked-render.rule"), exports);
19
21
  __exportStar(require("./no-new-error.rule"), exports);
20
22
  __exportStar(require("./plugin"), exports);
21
23
  __exportStar(require("./configs"), exports);
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/linters/house/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,2CAAyB;AACzB,wDAAsC;AACtC,sDAAoC;AACpC,2CAAyB;AACzB,4CAA0B"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/linters/house/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,2CAAyB;AACzB,4DAA0C;AAC1C,wDAAsC;AACtC,0DAAwC;AACxC,sDAAoC;AACpC,2CAAyB;AACzB,4CAA0B"}
@@ -0,0 +1,15 @@
1
+ import type { Rule } from 'eslint';
2
+ import type { TRuleSeverity } from '../rules/common';
3
+ /**
4
+ * `venizia/no-leaked-render`. `{count && <X />}` draws `0` when `count` is `0`; draw nothing with
5
+ * `cond ? <X /> : null`. Only a child of JSX is checked. The fix rewrites it to the ternary and keeps
6
+ * any comment between `&&` and the drawn part.
7
+ */
8
+ export declare class NoLeakedRenderRule {
9
+ static readonly NAME = "venizia/no-leaked-render";
10
+ static readonly RULE: Rule.RuleModule;
11
+ static build(opts?: {
12
+ severity?: TRuleSeverity;
13
+ }): TRuleSeverity;
14
+ }
15
+ //# sourceMappingURL=no-leaked-render.rule.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"no-leaked-render.rule.d.ts","sourceRoot":"","sources":["../../../src/linters/house/no-leaked-render.rule.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AACnC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAQrD;;;;GAIG;AACH,qBAAa,kBAAkB;IAC7B,MAAM,CAAC,QAAQ,CAAC,IAAI,8BAAgD;IAEpE,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC,UAAU,CA6BnC;IAEF,MAAM,CAAC,KAAK,CAAC,IAAI,GAAE;QAAE,QAAQ,CAAC,EAAE,aAAa,CAAA;KAAO,GAAG,aAAa;CAGrE"}
@@ -0,0 +1,49 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.NoLeakedRenderRule = void 0;
4
+ const common_1 = require("./common");
5
+ /** `&&` directly under a JSX child: `disabled={a && b}` is a value, not something drawn. */
6
+ const LEAKED_RENDER_SELECTOR = ['JSXElement', 'JSXFragment']
7
+ .map(parent => `${parent} > JSXExpressionContainer > LogicalExpression[operator='&&']`)
8
+ .join(', ');
9
+ /**
10
+ * `venizia/no-leaked-render`. `{count && <X />}` draws `0` when `count` is `0`; draw nothing with
11
+ * `cond ? <X /> : null`. Only a child of JSX is checked. The fix rewrites it to the ternary and keeps
12
+ * any comment between `&&` and the drawn part.
13
+ */
14
+ class NoLeakedRenderRule {
15
+ static { this.NAME = `${common_1.HOUSE_PLUGIN_NAMESPACE}/no-leaked-render`; }
16
+ static { this.RULE = {
17
+ meta: {
18
+ type: 'problem',
19
+ fixable: 'code',
20
+ schema: [],
21
+ messages: {
22
+ leaked: 'Draw nothing with `cond ? <X /> : null`; `&&` draws 0 when cond is 0.',
23
+ },
24
+ },
25
+ create: context => ({
26
+ [LEAKED_RENDER_SELECTOR]: (node) => {
27
+ if (node.type !== 'LogicalExpression') {
28
+ return;
29
+ }
30
+ const source = context.sourceCode;
31
+ const operator = source.getTokenAfter(node.left, token => token.value === '&&');
32
+ if (!operator) {
33
+ return;
34
+ }
35
+ const drawn = source.text.slice(operator.range[1], node.range?.[1]).trim();
36
+ context.report({
37
+ node,
38
+ messageId: 'leaked',
39
+ fix: fixer => fixer.replaceText(node, `${source.getText(node.left)} ? ${drawn} : null`),
40
+ });
41
+ },
42
+ }),
43
+ }; }
44
+ static build(opts = {}) {
45
+ return opts.severity ?? 'error';
46
+ }
47
+ }
48
+ exports.NoLeakedRenderRule = NoLeakedRenderRule;
49
+ //# sourceMappingURL=no-leaked-render.rule.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"no-leaked-render.rule.js","sourceRoot":"","sources":["../../../src/linters/house/no-leaked-render.rule.ts"],"names":[],"mappings":";;;AAEA,qCAAkD;AAElD,4FAA4F;AAC5F,MAAM,sBAAsB,GAAG,CAAC,YAAY,EAAE,aAAa,CAAC;KACzD,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,GAAG,MAAM,8DAA8D,CAAC;KACtF,IAAI,CAAC,IAAI,CAAC,CAAC;AAEd;;;;GAIG;AACH,MAAa,kBAAkB;aACb,SAAI,GAAG,GAAG,+BAAsB,mBAAmB,CAAC;aAEpD,SAAI,GAAoB;QACtC,IAAI,EAAE;YACJ,IAAI,EAAE,SAAS;YACf,OAAO,EAAE,MAAM;YACf,MAAM,EAAE,EAAE;YACV,QAAQ,EAAE;gBACR,MAAM,EAAE,uEAAuE;aAChF;SACF;QACD,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC,CAAC;YAClB,CAAC,sBAAsB,CAAC,EAAE,CAAC,IAAe,EAAE,EAAE;gBAC5C,IAAI,IAAI,CAAC,IAAI,KAAK,mBAAmB,EAAE,CAAC;oBACtC,OAAO;gBACT,CAAC;gBAED,MAAM,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC;gBAClC,MAAM,QAAQ,GAAG,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,KAAK,KAAK,IAAI,CAAC,CAAC;gBAChF,IAAI,CAAC,QAAQ,EAAE,CAAC;oBACd,OAAO;gBACT,CAAC;gBAED,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;gBAC3E,OAAO,CAAC,MAAM,CAAC;oBACb,IAAI;oBACJ,SAAS,EAAE,QAAQ;oBACnB,GAAG,EAAE,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,WAAW,CAAC,IAAI,EAAE,GAAG,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,KAAK,SAAS,CAAC;iBACxF,CAAC,CAAC;YACL,CAAC;SACF,CAAC;KACH,CAAC;IAEF,MAAM,CAAC,KAAK,CAAC,OAAqC,EAAE;QAClD,OAAO,IAAI,CAAC,QAAQ,IAAI,OAAO,CAAC;IAClC,CAAC;;AApCH,gDAqCC"}
@@ -1 +1 @@
1
- {"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../../../src/linters/house/plugin.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAKrC,qGAAqG;AACrG,eAAO,MAAM,iBAAiB,EAAE,MAAM,CAAC,MAMtC,CAAC"}
1
+ {"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../../../src/linters/house/plugin.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAOrC,qGAAqG;AACrG,eAAO,MAAM,iBAAiB,EAAE,MAAM,CAAC,MAQtC,CAAC"}
@@ -2,13 +2,17 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.houseEslintPlugin = void 0;
4
4
  const common_1 = require("./common");
5
+ const const_class_values_rule_1 = require("./const-class-values.rule");
5
6
  const max_params_own_rule_1 = require("./max-params-own.rule");
7
+ const no_leaked_render_rule_1 = require("./no-leaked-render.rule");
6
8
  const no_new_error_rule_1 = require("./no-new-error.rule");
7
9
  /** The ESLint plugin that carries the house rules oxlint cannot express, registered as `venizia`. */
8
10
  exports.houseEslintPlugin = {
9
11
  meta: { name: `eslint-plugin-${common_1.HOUSE_PLUGIN_NAMESPACE}` },
10
12
  rules: {
13
+ 'const-class-values': const_class_values_rule_1.ConstClassValuesRule.RULE,
11
14
  'max-params-own': max_params_own_rule_1.MaxParamsOwnRule.RULE,
15
+ 'no-leaked-render': no_leaked_render_rule_1.NoLeakedRenderRule.RULE,
12
16
  'no-new-error': no_new_error_rule_1.NoNewErrorRule.RULE,
13
17
  },
14
18
  };
@@ -1 +1 @@
1
- {"version":3,"file":"plugin.js","sourceRoot":"","sources":["../../../src/linters/house/plugin.ts"],"names":[],"mappings":";;;AACA,qCAAkD;AAClD,+DAAyD;AACzD,2DAAqD;AAErD,qGAAqG;AACxF,QAAA,iBAAiB,GAAkB;IAC9C,IAAI,EAAE,EAAE,IAAI,EAAE,iBAAiB,+BAAsB,EAAE,EAAE;IACzD,KAAK,EAAE;QACL,gBAAgB,EAAE,sCAAgB,CAAC,IAAI;QACvC,cAAc,EAAE,kCAAc,CAAC,IAAI;KACpC;CACF,CAAC"}
1
+ {"version":3,"file":"plugin.js","sourceRoot":"","sources":["../../../src/linters/house/plugin.ts"],"names":[],"mappings":";;;AACA,qCAAkD;AAClD,uEAAiE;AACjE,+DAAyD;AACzD,mEAA6D;AAC7D,2DAAqD;AAErD,qGAAqG;AACxF,QAAA,iBAAiB,GAAkB;IAC9C,IAAI,EAAE,EAAE,IAAI,EAAE,iBAAiB,+BAAsB,EAAE,EAAE;IACzD,KAAK,EAAE;QACL,oBAAoB,EAAE,8CAAoB,CAAC,IAAI;QAC/C,gBAAgB,EAAE,sCAAgB,CAAC,IAAI;QACvC,kBAAkB,EAAE,0CAAkB,CAAC,IAAI;QAC3C,cAAc,EAAE,kCAAc,CAAC,IAAI;KACpC;CACF,CAAC"}
@@ -0,0 +1,30 @@
1
+ import type { Linter } from 'eslint';
2
+ import type { OxlintConfig } from 'oxlint';
3
+ /**
4
+ * Project paths a lint run skips: generated files, vendored code, bundles. The same list feeds both
5
+ * tools, because each reads it differently.
6
+ *
7
+ * - oxlint: `ignorePatterns` resolve against the folder of the config file, so one in `.configs/` can
8
+ * never name a project path. `LintIgnore.oxlint` turns every rule off for the paths instead.
9
+ * - ESLint: `LintIgnore.eslint` is a flat-config `ignores` entry, relative to where eslint runs.
10
+ *
11
+ * ```ts
12
+ * const LINT_IGNORE = ['src/components/shadcn/**', 'dev-dist/**'];
13
+ * defineConfig(ReactOxlintConfigs.create({ ignore: LINT_IGNORE })); // oxlint.config.mts
14
+ * export default [LintIgnore.eslint({ patterns: LINT_IGNORE }), ...reactHouseConfigs]; // eslint.config.mjs
15
+ * ```
16
+ */
17
+ export declare class LintIgnore {
18
+ /** A project path such as `src/gen/**`, as an override glob: it is matched from anywhere under the project. */
19
+ static toGlob(opts: {
20
+ pattern: string;
21
+ }): string;
22
+ static eslint(opts: {
23
+ patterns: string[];
24
+ }): Linter.Config;
25
+ static oxlint(opts: {
26
+ config: OxlintConfig;
27
+ patterns: string[];
28
+ }): OxlintConfig;
29
+ }
30
+ //# sourceMappingURL=ignore.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ignore.d.ts","sourceRoot":"","sources":["../../src/linters/ignore.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AACrC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AAE3C;;;;;;;;;;;;;GAaG;AACH,qBAAa,UAAU;IACrB,+GAA+G;IAC/G,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE;QAAE,OAAO,EAAE,MAAM,CAAA;KAAE,GAAG,MAAM;IAKhD,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE;QAAE,QAAQ,EAAE,MAAM,EAAE,CAAA;KAAE,GAAG,MAAM,CAAC,MAAM;IAI1D,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE;QAAE,MAAM,EAAE,YAAY,CAAC;QAAC,QAAQ,EAAE,MAAM,EAAE,CAAA;KAAE,GAAG,YAAY;CAsBhF"}
@@ -0,0 +1,49 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.LintIgnore = void 0;
4
+ /**
5
+ * Project paths a lint run skips: generated files, vendored code, bundles. The same list feeds both
6
+ * tools, because each reads it differently.
7
+ *
8
+ * - oxlint: `ignorePatterns` resolve against the folder of the config file, so one in `.configs/` can
9
+ * never name a project path. `LintIgnore.oxlint` turns every rule off for the paths instead.
10
+ * - ESLint: `LintIgnore.eslint` is a flat-config `ignores` entry, relative to where eslint runs.
11
+ *
12
+ * ```ts
13
+ * const LINT_IGNORE = ['src/components/shadcn/**', 'dev-dist/**'];
14
+ * defineConfig(ReactOxlintConfigs.create({ ignore: LINT_IGNORE })); // oxlint.config.mts
15
+ * export default [LintIgnore.eslint({ patterns: LINT_IGNORE }), ...reactHouseConfigs]; // eslint.config.mjs
16
+ * ```
17
+ */
18
+ class LintIgnore {
19
+ /** A project path such as `src/gen/**`, as an override glob: it is matched from anywhere under the project. */
20
+ static toGlob(opts) {
21
+ const pattern = opts.pattern.replace(/^\.?\//, '');
22
+ return pattern.startsWith('**/') ? pattern : `**/${pattern}`;
23
+ }
24
+ static eslint(opts) {
25
+ return { ignores: opts.patterns };
26
+ }
27
+ static oxlint(opts) {
28
+ const { config, patterns } = opts;
29
+ if (patterns.length === 0) {
30
+ return config;
31
+ }
32
+ const rules = new Set([
33
+ ...Object.keys(config.rules ?? {}),
34
+ ...(config.overrides ?? []).flatMap(override => Object.keys(override.rules ?? {})),
35
+ ]);
36
+ return {
37
+ ...config,
38
+ overrides: [
39
+ ...(config.overrides ?? []),
40
+ {
41
+ files: patterns.map(pattern => LintIgnore.toGlob({ pattern })),
42
+ rules: Object.fromEntries([...rules].map(name => [name, 'off'])),
43
+ },
44
+ ],
45
+ };
46
+ }
47
+ }
48
+ exports.LintIgnore = LintIgnore;
49
+ //# sourceMappingURL=ignore.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ignore.js","sourceRoot":"","sources":["../../src/linters/ignore.ts"],"names":[],"mappings":";;;AAGA;;;;;;;;;;;;;GAaG;AACH,MAAa,UAAU;IACrB,+GAA+G;IAC/G,MAAM,CAAC,MAAM,CAAC,IAAyB;QACrC,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;QACnD,OAAO,OAAO,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,OAAO,EAAE,CAAC;IAC/D,CAAC;IAED,MAAM,CAAC,MAAM,CAAC,IAA4B;QACxC,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC;IACpC,CAAC;IAED,MAAM,CAAC,MAAM,CAAC,IAAkD;QAC9D,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,IAAI,CAAC;QAClC,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC1B,OAAO,MAAM,CAAC;QAChB,CAAC;QAED,MAAM,KAAK,GAAG,IAAI,GAAG,CAAC;YACpB,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,IAAI,EAAE,CAAC;YAClC,GAAG,CAAC,MAAM,CAAC,SAAS,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC;SACnF,CAAC,CAAC;QAEH,OAAO;YACL,GAAG,MAAM;YACT,SAAS,EAAE;gBACT,GAAG,CAAC,MAAM,CAAC,SAAS,IAAI,EAAE,CAAC;gBAC3B;oBACE,KAAK,EAAE,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC;oBAC9D,KAAK,EAAE,MAAM,CAAC,WAAW,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC;iBACjE;aACF;SACF,CAAC;IACJ,CAAC;CACF;AAjCD,gCAiCC"}
@@ -1,6 +1,7 @@
1
1
  export * from './browser';
2
2
  export * from './eslint';
3
3
  export * from './house';
4
+ export * from './ignore';
4
5
  export * from './oxlint';
5
6
  export * from './react';
6
7
  export * from './rules';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/linters/index.ts"],"names":[],"mappings":"AAAA,cAAc,WAAW,CAAC;AAC1B,cAAc,UAAU,CAAC;AACzB,cAAc,SAAS,CAAC;AACxB,cAAc,UAAU,CAAC;AACzB,cAAc,SAAS,CAAC;AACxB,cAAc,SAAS,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/linters/index.ts"],"names":[],"mappings":"AAAA,cAAc,WAAW,CAAC;AAC1B,cAAc,UAAU,CAAC;AACzB,cAAc,SAAS,CAAC;AACxB,cAAc,UAAU,CAAC;AACzB,cAAc,UAAU,CAAC;AACzB,cAAc,SAAS,CAAC;AACxB,cAAc,SAAS,CAAC"}
@@ -17,6 +17,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
17
17
  __exportStar(require("./browser"), exports);
18
18
  __exportStar(require("./eslint"), exports);
19
19
  __exportStar(require("./house"), exports);
20
+ __exportStar(require("./ignore"), exports);
20
21
  __exportStar(require("./oxlint"), exports);
21
22
  __exportStar(require("./react"), exports);
22
23
  __exportStar(require("./rules"), exports);
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/linters/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,4CAA0B;AAC1B,2CAAyB;AACzB,0CAAwB;AACxB,2CAAyB;AACzB,0CAAwB;AACxB,0CAAwB"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/linters/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,4CAA0B;AAC1B,2CAAyB;AACzB,0CAAwB;AACxB,2CAAyB;AACzB,2CAAyB;AACzB,0CAAwB;AACxB,0CAAwB"}
@@ -26,6 +26,12 @@ export interface IOxlintPresetOptions {
26
26
  * `''` or `0` swallowed by `||`.
27
27
  */
28
28
  lenientFallback?: boolean;
29
+ /**
30
+ * Project paths to skip - generated files, vendored code - as in `--ignore-pattern`: `src/gen/**`.
31
+ * Every rule is turned off for them (oxlint cannot ignore a project path from `.configs/`).
32
+ * Share the list with ESLint through `LintIgnore`.
33
+ */
34
+ ignore?: string[];
29
35
  }
30
36
  /**
31
37
  * Builds `oxlintConfigs` with options. Without any it returns the base preset unchanged.
@@ -1 +1 @@
1
- {"version":3,"file":"oxlint.d.ts","sourceRoot":"","sources":["../../src/linters/oxlint.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AAa3C;;;;;;;;;;;;;;;;;;GAkBG;AACH,eAAO,MAAM,aAAa,EAAE,YA2J3B,CAAC;AAEF,MAAM,WAAW,oBAAoB;IACnC;;;;OAIG;IACH,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B;AAED;;;;;;;;;;GAUG;AACH,qBAAa,aAAa;IACxB,MAAM,CAAC,MAAM,CAAC,IAAI,GAAE,oBAAyB,GAAG,YAAY;CAe7D"}
1
+ {"version":3,"file":"oxlint.d.ts","sourceRoot":"","sources":["../../src/linters/oxlint.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AAc3C;;;;;;;;;;;;;;;;;;GAkBG;AACH,eAAO,MAAM,aAAa,EAAE,YA2J3B,CAAC;AAEF,MAAM,WAAW,oBAAoB;IACnC;;;;OAIG;IACH,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B;;;;OAIG;IACH,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;CACnB;AAED;;;;;;;;;;GAUG;AACH,qBAAa,aAAa;IACxB,MAAM,CAAC,MAAM,CAAC,IAAI,GAAE,oBAAyB,GAAG,YAAY;CAe7D"}
@@ -1,6 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.OxlintConfigs = exports.oxlintConfigs = void 0;
4
+ const ignore_1 = require("./ignore");
4
5
  const rules_1 = require("./rules");
5
6
  /** File globs the rules are scoped to. */
6
7
  const TS_FILES = ['**/*.ts', '**/*.tsx', '**/*.mts', '**/*.cts'];
@@ -190,18 +191,18 @@ exports.oxlintConfigs = {
190
191
  */
191
192
  class OxlintConfigs {
192
193
  static create(opts = {}) {
193
- if (!opts.lenientFallback) {
194
- return exports.oxlintConfigs;
195
- }
196
- return {
197
- ...exports.oxlintConfigs,
198
- rules: {
199
- ...exports.oxlintConfigs.rules,
200
- [rules_1.PreferNullishCoalescingRule.NAME]: rules_1.PreferNullishCoalescingRule.build({
201
- ignorePrimitives: { string: true, number: true },
202
- }),
203
- },
204
- };
194
+ const config = opts.lenientFallback
195
+ ? {
196
+ ...exports.oxlintConfigs,
197
+ rules: {
198
+ ...exports.oxlintConfigs.rules,
199
+ [rules_1.PreferNullishCoalescingRule.NAME]: rules_1.PreferNullishCoalescingRule.build({
200
+ ignorePrimitives: { string: true, number: true },
201
+ }),
202
+ },
203
+ }
204
+ : exports.oxlintConfigs;
205
+ return ignore_1.LintIgnore.oxlint({ config, patterns: opts.ignore ?? [] });
205
206
  }
206
207
  }
207
208
  exports.OxlintConfigs = OxlintConfigs;
@@ -1 +1 @@
1
- {"version":3,"file":"oxlint.js","sourceRoot":"","sources":["../../src/linters/oxlint.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"oxlint.js","sourceRoot":"","sources":["../../src/linters/oxlint.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"react.d.ts","sourceRoot":"","sources":["../../src/linters/react.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAC7C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AAG3C,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,UAAU,CAAC;AAIrD,sGAAsG;AACtG,KAAK,YAAY,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;AAEnD,MAAM,WAAW,mBAAmB;IAClC,KAAK,EAAE,YAAY,CAAC;IACpB,UAAU,EAAE,YAAY,CAAC;IACzB,OAAO,EAAE,YAAY,CAAC;CACvB;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,qBAAa,kBAAkB;IAC7B,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE;QAAE,OAAO,EAAE,mBAAmB,CAAC;QAAC,YAAY,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,MAAM,CAAC,MAAM,EAAE;CAqE9F;AAQD;;;;;;;;;;;;;;;;GAgBG;AACH,qBAAa,kBAAkB;IAC7B,MAAM,CAAC,MAAM,CAAC,IAAI,GAAE,oBAAyB,GAAG,YAAY;CAwD7D;AAED;;;GAGG;AACH,eAAO,MAAM,4BAA4B,EAAE,MAAM,CAAC,MAAM,EAYvD,CAAC"}
1
+ {"version":3,"file":"react.d.ts","sourceRoot":"","sources":["../../src/linters/react.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAC7C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AAI3C,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,UAAU,CAAC;AAIrD,sGAAsG;AACtG,KAAK,YAAY,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;AAEnD,MAAM,WAAW,mBAAmB;IAClC,KAAK,EAAE,YAAY,CAAC;IACpB,UAAU,EAAE,YAAY,CAAC;IACzB,OAAO,EAAE,YAAY,CAAC;CACvB;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,qBAAa,kBAAkB;IAC7B,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE;QAAE,OAAO,EAAE,mBAAmB,CAAC;QAAC,YAAY,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,MAAM,CAAC,MAAM,EAAE;CA2E9F;AAQD;;;;;;;;;;;;;;;;GAgBG;AACH,qBAAa,kBAAkB;IAC7B,MAAM,CAAC,MAAM,CAAC,IAAI,GAAE,oBAAyB,GAAG,YAAY;CAgE7D;AAED;;;GAGG;AACH,eAAO,MAAM,4BAA4B,EAAE,MAAM,CAAC,MAAM,EAYvD,CAAC"}
@@ -6,6 +6,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.reactNamingConventionConfigs = exports.ReactOxlintConfigs = exports.ReactEslintConfigs = void 0;
7
7
  const typescript_eslint_1 = __importDefault(require("typescript-eslint"));
8
8
  const browser_1 = require("./browser");
9
+ const ignore_1 = require("./ignore");
9
10
  const eslint_1 = require("./eslint");
10
11
  const rules_1 = require("./rules");
11
12
  /**
@@ -66,6 +67,12 @@ class ReactEslintConfigs {
66
67
  'jsx-a11y/role-has-required-aria-props': 'error',
67
68
  'jsx-a11y/role-supports-aria-props': 'error',
68
69
  'jsx-a11y/tabindex-no-positive': 'error',
70
+ 'jsx-a11y/anchor-is-valid': 'error',
71
+ 'jsx-a11y/click-events-have-key-events': 'error',
72
+ 'jsx-a11y/heading-has-content': 'error',
73
+ 'jsx-a11y/label-has-associated-control': 'error',
74
+ 'jsx-a11y/no-noninteractive-element-interactions': 'error',
75
+ 'jsx-a11y/no-static-element-interactions': 'error',
69
76
  },
70
77
  },
71
78
  {
@@ -117,8 +124,8 @@ const COMPONENT_FUNCTION_SELECTOR = { selector: 'function', format: ['camelCase'
117
124
  */
118
125
  class ReactOxlintConfigs {
119
126
  static create(opts = {}) {
120
- const browserConfigs = browser_1.BrowserOxlintConfigs.create(opts);
121
- return {
127
+ const browserConfigs = browser_1.BrowserOxlintConfigs.create({ lenientFallback: opts.lenientFallback });
128
+ const config = {
122
129
  ...browserConfigs,
123
130
  plugins: [...new Set([...(browserConfigs.plugins ?? []), 'react', 'jsx-a11y'])],
124
131
  overrides: [
@@ -149,6 +156,12 @@ class ReactOxlintConfigs {
149
156
  'jsx-a11y/role-has-required-aria-props': 'error',
150
157
  'jsx-a11y/role-supports-aria-props': 'error',
151
158
  'jsx-a11y/tabindex-no-positive': 'error',
159
+ 'jsx-a11y/anchor-is-valid': 'error',
160
+ 'jsx-a11y/click-events-have-key-events': 'error',
161
+ 'jsx-a11y/heading-has-content': 'error',
162
+ 'jsx-a11y/label-has-associated-control': 'error',
163
+ 'jsx-a11y/no-noninteractive-element-interactions': 'error',
164
+ 'jsx-a11y/no-static-element-interactions': 'error',
152
165
  },
153
166
  },
154
167
  {
@@ -169,6 +182,7 @@ class ReactOxlintConfigs {
169
182
  },
170
183
  ],
171
184
  };
185
+ return ignore_1.LintIgnore.oxlint({ config, patterns: opts.ignore ?? [] });
172
186
  }
173
187
  }
174
188
  exports.ReactOxlintConfigs = ReactOxlintConfigs;
@@ -1 +1 @@
1
- {"version":3,"file":"react.js","sourceRoot":"","sources":["../../src/linters/react.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"react.js","sourceRoot":"","sources":["../../src/linters/react.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"naming-convention.rule.d.ts","sourceRoot":"","sources":["../../../src/linters/rules/naming-convention.rule.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AACrC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAE9C,6FAA6F;AAC7F,MAAM,MAAM,eAAe,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG;IAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,EAAE,CAAA;CAAE,CAAC;AAExF;;;GAGG;AACH,qBAAa,oBAAoB;IAC/B,MAAM,CAAC,QAAQ,CAAC,IAAI,0CAA0C;IAE9D,MAAM,CAAC,QAAQ,CAAC,SAAS,EAAE,SAAS,eAAe,EAAE,CA8CnD;IAEF,+EAA+E;IAC/E,MAAM,CAAC,KAAK,CACV,IAAI,GAAE;QAAE,QAAQ,CAAC,EAAE,aAAa,CAAC;QAAC,cAAc,CAAC,EAAE,eAAe,EAAE,CAAA;KAAO,GAC1E,MAAM,CAAC,SAAS;CAIpB"}
1
+ {"version":3,"file":"naming-convention.rule.d.ts","sourceRoot":"","sources":["../../../src/linters/rules/naming-convention.rule.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AACrC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAE9C,6FAA6F;AAC7F,MAAM,MAAM,eAAe,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG;IAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,EAAE,CAAA;CAAE,CAAC;AAExF;;;GAGG;AACH,qBAAa,oBAAoB;IAC/B,MAAM,CAAC,QAAQ,CAAC,IAAI,0CAA0C;IAE9D,MAAM,CAAC,QAAQ,CAAC,SAAS,EAAE,SAAS,eAAe,EAAE,CAqDnD;IAEF,+EAA+E;IAC/E,MAAM,CAAC,KAAK,CACV,IAAI,GAAE;QAAE,QAAQ,CAAC,EAAE,aAAa,CAAC;QAAC,cAAc,CAAC,EAAE,eAAe,EAAE,CAAA;KAAO,GAC1E,MAAM,CAAC,SAAS;CAIpB"}
@@ -11,6 +11,13 @@ class NamingConventionRule {
11
11
  { selector: 'default', format: ['camelCase'] },
12
12
  { selector: 'variable', format: ['camelCase', 'UPPER_CASE', 'PascalCase'] },
13
13
  { selector: 'variable', format: null, filter: '^_$' },
14
+ // A `_name` variable names an omitted value (`{ page: _page, ...rest }`); its case is still checked.
15
+ {
16
+ selector: 'variable',
17
+ filter: { regex: '^_.', match: true },
18
+ format: ['camelCase', 'UPPER_CASE', 'PascalCase'],
19
+ leadingUnderscore: 'allow',
20
+ },
14
21
  { selector: 'function', format: ['PascalCase'], filter: 'Mixin$' },
15
22
  { selector: 'parameter', format: ['camelCase'], leadingUnderscore: 'allow' },
16
23
  {
@@ -1 +1 @@
1
- {"version":3,"file":"naming-convention.rule.js","sourceRoot":"","sources":["../../../src/linters/rules/naming-convention.rule.ts"],"names":[],"mappings":";;;AAMA;;;GAGG;AACH,MAAa,oBAAoB;aACf,SAAI,GAAG,sCAAsC,CAAC;aAE9C,cAAS,GAA+B;QACtD,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC,WAAW,CAAC,EAAE;QAC9C,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,EAAE,CAAC,WAAW,EAAE,YAAY,EAAE,YAAY,CAAC,EAAE;QAC3E,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE;QACrD,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,EAAE,CAAC,YAAY,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE;QAClE,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,EAAE,CAAC,WAAW,CAAC,EAAE,iBAAiB,EAAE,OAAO,EAAE;QAC5E;YACE,QAAQ,EAAE,YAAY;YACtB,MAAM,EAAE,CAAC,WAAW,EAAE,YAAY,EAAE,YAAY,CAAC;YACjD,iBAAiB,EAAE,OAAO;SAC3B;QACD;YACE,QAAQ,EAAE,UAAU;YACpB,MAAM,EAAE,CAAC,WAAW,EAAE,YAAY,EAAE,YAAY,CAAC;YACjD,iBAAiB,EAAE,OAAO;SAC3B;QACD,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,WAAW,CAAC,EAAE,iBAAiB,EAAE,OAAO,EAAE;QACzE,EAAE,QAAQ,EAAE,YAAY,EAAE,SAAS,EAAE,CAAC,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC,WAAW,EAAE,YAAY,CAAC,EAAE;QACtF;YACE,QAAQ,EAAE,YAAY;YACtB,SAAS,EAAE,CAAC,SAAS,CAAC;YACtB,MAAM,EAAE,CAAC,WAAW,CAAC;YACrB,iBAAiB,EAAE,OAAO;SAC3B;QACD;YACE,QAAQ,EAAE,YAAY;YACtB,SAAS,EAAE,CAAC,WAAW,CAAC;YACxB,MAAM,EAAE,CAAC,WAAW,CAAC;YACrB,iBAAiB,EAAE,OAAO;SAC3B;QACD,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,EAAE,CAAC,YAAY,CAAC,EAAE;QAChD;YACE,QAAQ,EAAE;gBACR,uBAAuB;gBACvB,qBAAqB;gBACrB,cAAc;gBACd,YAAY;gBACZ,eAAe;gBACf,aAAa;gBACb,YAAY;aACb;YACD,MAAM,EAAE,IAAI;YACZ,SAAS,EAAE,CAAC,gBAAgB,CAAC;SAC9B;QACD,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,WAAW,EAAE,YAAY,CAAC,EAAE;QAC3D,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE;KACpD,CAAC;IAEF,+EAA+E;IAC/E,MAAM,CAAC,KAAK,CACV,OAAyE,EAAE;QAE3E,MAAM,EAAE,QAAQ,GAAG,OAAO,EAAE,cAAc,GAAG,EAAE,EAAE,GAAG,IAAI,CAAC;QACzD,OAAO,CAAC,QAAQ,EAAE,GAAG,oBAAoB,CAAC,SAAS,EAAE,GAAG,cAAc,CAAC,CAAC;IAC1E,CAAC;;AAzDH,oDA0DC"}
1
+ {"version":3,"file":"naming-convention.rule.js","sourceRoot":"","sources":["../../../src/linters/rules/naming-convention.rule.ts"],"names":[],"mappings":";;;AAMA;;;GAGG;AACH,MAAa,oBAAoB;aACf,SAAI,GAAG,sCAAsC,CAAC;aAE9C,cAAS,GAA+B;QACtD,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC,WAAW,CAAC,EAAE;QAC9C,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,EAAE,CAAC,WAAW,EAAE,YAAY,EAAE,YAAY,CAAC,EAAE;QAC3E,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE;QACrD,qGAAqG;QACrG;YACE,QAAQ,EAAE,UAAU;YACpB,MAAM,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE;YACrC,MAAM,EAAE,CAAC,WAAW,EAAE,YAAY,EAAE,YAAY,CAAC;YACjD,iBAAiB,EAAE,OAAO;SAC3B;QACD,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,EAAE,CAAC,YAAY,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE;QAClE,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,EAAE,CAAC,WAAW,CAAC,EAAE,iBAAiB,EAAE,OAAO,EAAE;QAC5E;YACE,QAAQ,EAAE,YAAY;YACtB,MAAM,EAAE,CAAC,WAAW,EAAE,YAAY,EAAE,YAAY,CAAC;YACjD,iBAAiB,EAAE,OAAO;SAC3B;QACD;YACE,QAAQ,EAAE,UAAU;YACpB,MAAM,EAAE,CAAC,WAAW,EAAE,YAAY,EAAE,YAAY,CAAC;YACjD,iBAAiB,EAAE,OAAO;SAC3B;QACD,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,WAAW,CAAC,EAAE,iBAAiB,EAAE,OAAO,EAAE;QACzE,EAAE,QAAQ,EAAE,YAAY,EAAE,SAAS,EAAE,CAAC,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC,WAAW,EAAE,YAAY,CAAC,EAAE;QACtF;YACE,QAAQ,EAAE,YAAY;YACtB,SAAS,EAAE,CAAC,SAAS,CAAC;YACtB,MAAM,EAAE,CAAC,WAAW,CAAC;YACrB,iBAAiB,EAAE,OAAO;SAC3B;QACD;YACE,QAAQ,EAAE,YAAY;YACtB,SAAS,EAAE,CAAC,WAAW,CAAC;YACxB,MAAM,EAAE,CAAC,WAAW,CAAC;YACrB,iBAAiB,EAAE,OAAO;SAC3B;QACD,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,EAAE,CAAC,YAAY,CAAC,EAAE;QAChD;YACE,QAAQ,EAAE;gBACR,uBAAuB;gBACvB,qBAAqB;gBACrB,cAAc;gBACd,YAAY;gBACZ,eAAe;gBACf,aAAa;gBACb,YAAY;aACb;YACD,MAAM,EAAE,IAAI;YACZ,SAAS,EAAE,CAAC,gBAAgB,CAAC;SAC9B;QACD,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,WAAW,EAAE,YAAY,CAAC,EAAE;QAC3D,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE;KACpD,CAAC;IAEF,+EAA+E;IAC/E,MAAM,CAAC,KAAK,CACV,OAAyE,EAAE;QAE3E,MAAM,EAAE,QAAQ,GAAG,OAAO,EAAE,cAAc,GAAG,EAAE,EAAE,GAAG,IAAI,CAAC;QACzD,OAAO,CAAC,QAAQ,EAAE,GAAG,oBAAoB,CAAC,SAAS,EAAE,GAAG,cAAc,CAAC,CAAC;IAC1E,CAAC;;AAhEH,oDAiEC"}
@@ -1,5 +1,5 @@
1
1
  import type { TOxlintRuleEntry, TRuleSeverity } from './common';
2
- /** `no-unused-vars`. Unused arguments pass by default: an override keeps its signature. */
2
+ /** `no-unused-vars`. Unused arguments pass by default: an override keeps its signature. A `_name` variable is an omitted value (`{ page: _page, ...rest }`) and passes too. */
3
3
  export declare class NoUnusedVarsRule {
4
4
  static readonly NAME = "no-unused-vars";
5
5
  static build(opts?: {
@@ -1 +1 @@
1
- {"version":3,"file":"no-unused-vars.rule.d.ts","sourceRoot":"","sources":["../../../src/linters/rules/no-unused-vars.rule.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEhE,2FAA2F;AAC3F,qBAAa,gBAAgB;IAC3B,MAAM,CAAC,QAAQ,CAAC,IAAI,oBAAoB;IAExC,MAAM,CAAC,KAAK,CACV,IAAI,GAAE;QACJ,QAAQ,CAAC,EAAE,aAAa,CAAC;QACzB,IAAI,CAAC,EAAE,KAAK,GAAG,OAAO,CAAC;QACvB,IAAI,CAAC,EAAE,KAAK,GAAG,YAAY,GAAG,MAAM,CAAC;QACrC,kBAAkB,CAAC,EAAE,OAAO,CAAC;QAC7B,+EAA+E;QAC/E,iBAAiB,CAAC,EAAE,MAAM,CAAC;QAC3B,iBAAiB,CAAC,EAAE,MAAM,CAAC;QAC3B,yBAAyB,CAAC,EAAE,MAAM,CAAC;QACnC,8BAA8B,CAAC,EAAE,MAAM,CAAC;KACpC,GACL,gBAAgB,CAAC,gBAAgB,CAAC;CAUtC"}
1
+ {"version":3,"file":"no-unused-vars.rule.d.ts","sourceRoot":"","sources":["../../../src/linters/rules/no-unused-vars.rule.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEhE,+KAA+K;AAC/K,qBAAa,gBAAgB;IAC3B,MAAM,CAAC,QAAQ,CAAC,IAAI,oBAAoB;IAExC,MAAM,CAAC,KAAK,CACV,IAAI,GAAE;QACJ,QAAQ,CAAC,EAAE,aAAa,CAAC;QACzB,IAAI,CAAC,EAAE,KAAK,GAAG,OAAO,CAAC;QACvB,IAAI,CAAC,EAAE,KAAK,GAAG,YAAY,GAAG,MAAM,CAAC;QACrC,kBAAkB,CAAC,EAAE,OAAO,CAAC;QAC7B,+EAA+E;QAC/E,iBAAiB,CAAC,EAAE,MAAM,CAAC;QAC3B,iBAAiB,CAAC,EAAE,MAAM,CAAC;QAC3B,yBAAyB,CAAC,EAAE,MAAM,CAAC;QACnC,8BAA8B,CAAC,EAAE,MAAM,CAAC;KACpC,GACL,gBAAgB,CAAC,gBAAgB,CAAC;CAWtC"}
@@ -1,12 +1,12 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.NoUnusedVarsRule = void 0;
4
- /** `no-unused-vars`. Unused arguments pass by default: an override keeps its signature. */
4
+ /** `no-unused-vars`. Unused arguments pass by default: an override keeps its signature. A `_name` variable is an omitted value (`{ page: _page, ...rest }`) and passes too. */
5
5
  class NoUnusedVarsRule {
6
6
  static { this.NAME = 'no-unused-vars'; }
7
7
  static build(opts = {}) {
8
- const { severity = 'error', vars = 'all', args = 'none', ignoreRestSiblings = false, ...patterns } = opts;
9
- return [severity, { vars, args, ignoreRestSiblings, ...patterns }];
8
+ const { severity = 'error', vars = 'all', args = 'none', ignoreRestSiblings = false, varsIgnorePattern = '^_', ...patterns } = opts;
9
+ return [severity, { vars, args, ignoreRestSiblings, varsIgnorePattern, ...patterns }];
10
10
  }
11
11
  }
12
12
  exports.NoUnusedVarsRule = NoUnusedVarsRule;
@@ -1 +1 @@
1
- {"version":3,"file":"no-unused-vars.rule.js","sourceRoot":"","sources":["../../../src/linters/rules/no-unused-vars.rule.ts"],"names":[],"mappings":";;;AAEA,2FAA2F;AAC3F,MAAa,gBAAgB;aACX,SAAI,GAAG,gBAAgB,CAAC;IAExC,MAAM,CAAC,KAAK,CACV,OAUI,EAAE;QAEN,MAAM,EACJ,QAAQ,GAAG,OAAO,EAClB,IAAI,GAAG,KAAK,EACZ,IAAI,GAAG,MAAM,EACb,kBAAkB,GAAG,KAAK,EAC1B,GAAG,QAAQ,EACZ,GAAG,IAAI,CAAC;QACT,OAAO,CAAC,QAAQ,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,kBAAkB,EAAE,GAAG,QAAQ,EAAE,CAAC,CAAC;IACrE,CAAC;;AAxBH,4CAyBC"}
1
+ {"version":3,"file":"no-unused-vars.rule.js","sourceRoot":"","sources":["../../../src/linters/rules/no-unused-vars.rule.ts"],"names":[],"mappings":";;;AAEA,+KAA+K;AAC/K,MAAa,gBAAgB;aACX,SAAI,GAAG,gBAAgB,CAAC;IAExC,MAAM,CAAC,KAAK,CACV,OAUI,EAAE;QAEN,MAAM,EACJ,QAAQ,GAAG,OAAO,EAClB,IAAI,GAAG,KAAK,EACZ,IAAI,GAAG,MAAM,EACb,kBAAkB,GAAG,KAAK,EAC1B,iBAAiB,GAAG,IAAI,EACxB,GAAG,QAAQ,EACZ,GAAG,IAAI,CAAC;QACT,OAAO,CAAC,QAAQ,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,GAAG,QAAQ,EAAE,CAAC,CAAC;IACxF,CAAC;;AAzBH,4CA0BC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@venizia/dev-configs",
3
- "version": "0.3.1-2",
3
+ "version": "0.3.1-4",
4
4
  "description": "Shareable development configurations for TypeScript projects: oxlint and oxfmt presets with per-rule builders, the ESLint naming-convention rule, the legacy ESLint flat config and Prettier presets, and TypeScript compiler options with critical decorator support (experimentalDecorators, emitDecoratorMetadata, useDefineForClassFields). Single source of truth for consistent code style, type checking, and build settings across monorepo packages.",
5
5
  "keywords": [
6
6
  "build-tools",
@@ -29,13 +29,13 @@
29
29
 
30
30
  /* Type Checking - Strict Mode (Balanced for Production) */
31
31
  "strict": true,
32
- "noImplicitAny": false,
32
+ "noImplicitAny": true,
33
33
  "strictNullChecks": true,
34
34
  "strictFunctionTypes": true,
35
35
  "strictBindCallApply": true,
36
36
  "strictPropertyInitialization": false,
37
37
  "noImplicitThis": true,
38
- "useUnknownInCatchVariables": false,
38
+ "useUnknownInCatchVariables": true,
39
39
  "alwaysStrict": true,
40
40
 
41
41
  /* Additional Checks */