oxlint-plugin-arch 0.8.0 → 0.9.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,9 @@
1
1
  # Changelog
2
2
 
3
+ ## 0.9.0
4
+
5
+ - Add `limits.maxTypeFileLines` (default `1000`): the preset applies this `max-lines` limit to `*.types.ts` files in app roots instead of `limits.maxFileLines`. Other files keep `maxFileLines`.
6
+
3
7
  ## 0.8.0
4
8
 
5
9
  - Add `tests.mocking` to choose which test-double APIs the preset bans in test files: `'modules'` (default, unchanged) or `'strict'`, which also bans `spyOn`, `stubGlobal` and `stubEnv` outside `*.driver.test.ts` and asks for a fake driver. The object form adds `deny` API patterns and per-file `allow` exceptions.
@@ -1539,9 +1539,10 @@ function presetResolveContext(options) {
1539
1539
 
1540
1540
  // src/services/preset-compose.ts
1541
1541
  function presetCompose(context, policies, plugins) {
1542
- const { options, level, safetyFiles, ui, generated } = context;
1542
+ const { options, level, app, safetyFiles, ui, generated } = context;
1543
1543
  const severities = options.ruleSeverities ?? {};
1544
1544
  const levels = (rules) => presetRuleSeverities(presetSeverity(rules, level), severities);
1545
+ const maxLines = (max) => levels({ "max-lines": ["error", { max, skipBlankLines: true, skipComments: true }] });
1545
1546
  const overrideList = [];
1546
1547
  for (const name of presetPolicyOrder) {
1547
1548
  const setting = options.policies?.[name];
@@ -1558,9 +1559,9 @@ function presetCompose(context, policies, plugins) {
1558
1559
  }
1559
1560
  }
1560
1561
  overrideList.push(presetOverride(safetyFiles, levels({
1561
- "max-lines": ["error", { max: options.limits?.maxFileLines ?? 400, skipBlankLines: true, skipComments: true }],
1562
+ ...maxLines(options.limits?.maxFileLines ?? 400),
1562
1563
  complexity: ["error", { max: options.limits?.maxFunctionComplexity ?? 32 }]
1563
- }), ui));
1564
+ }), ui), presetOverride(presetScopes(app, "**/*.types.ts"), maxLines(options.limits?.maxTypeFileLines ?? 1000), ui));
1564
1565
  const named = new Set([...Object.keys(presetCommonRules), ...overrideList.flatMap((entry) => Object.keys(entry.rules ?? {}))]);
1565
1566
  const unnamedLevels = Object.fromEntries(Object.entries(severities).filter(([rule]) => !named.has(rule)));
1566
1567
  for (const [rule, files] of Object.entries(options.ruleExclusions ?? {})) {
@@ -1539,9 +1539,10 @@ function presetResolveContext(options) {
1539
1539
 
1540
1540
  // src/services/preset-compose.ts
1541
1541
  function presetCompose(context, policies, plugins) {
1542
- const { options, level, safetyFiles, ui, generated } = context;
1542
+ const { options, level, app, safetyFiles, ui, generated } = context;
1543
1543
  const severities = options.ruleSeverities ?? {};
1544
1544
  const levels = (rules) => presetRuleSeverities(presetSeverity(rules, level), severities);
1545
+ const maxLines = (max) => levels({ "max-lines": ["error", { max, skipBlankLines: true, skipComments: true }] });
1545
1546
  const overrideList = [];
1546
1547
  for (const name of presetPolicyOrder) {
1547
1548
  const setting = options.policies?.[name];
@@ -1558,9 +1559,9 @@ function presetCompose(context, policies, plugins) {
1558
1559
  }
1559
1560
  }
1560
1561
  overrideList.push(presetOverride(safetyFiles, levels({
1561
- "max-lines": ["error", { max: options.limits?.maxFileLines ?? 400, skipBlankLines: true, skipComments: true }],
1562
+ ...maxLines(options.limits?.maxFileLines ?? 400),
1562
1563
  complexity: ["error", { max: options.limits?.maxFunctionComplexity ?? 32 }]
1563
- }), ui));
1564
+ }), ui), presetOverride(presetScopes(app, "**/*.types.ts"), maxLines(options.limits?.maxTypeFileLines ?? 1000), ui));
1564
1565
  const named = new Set([...Object.keys(presetCommonRules), ...overrideList.flatMap((entry) => Object.keys(entry.rules ?? {}))]);
1565
1566
  const unnamedLevels = Object.fromEntries(Object.entries(severities).filter(([rule]) => !named.has(rule)));
1566
1567
  for (const [rule, files] of Object.entries(options.ruleExclusions ?? {})) {
@@ -1539,9 +1539,10 @@ function presetResolveContext(options) {
1539
1539
 
1540
1540
  // src/services/preset-compose.ts
1541
1541
  function presetCompose(context, policies, plugins) {
1542
- const { options, level, safetyFiles, ui, generated } = context;
1542
+ const { options, level, app, safetyFiles, ui, generated } = context;
1543
1543
  const severities = options.ruleSeverities ?? {};
1544
1544
  const levels = (rules) => presetRuleSeverities(presetSeverity(rules, level), severities);
1545
+ const maxLines = (max) => levels({ "max-lines": ["error", { max, skipBlankLines: true, skipComments: true }] });
1545
1546
  const overrideList = [];
1546
1547
  for (const name of presetPolicyOrder) {
1547
1548
  const setting = options.policies?.[name];
@@ -1558,9 +1559,9 @@ function presetCompose(context, policies, plugins) {
1558
1559
  }
1559
1560
  }
1560
1561
  overrideList.push(presetOverride(safetyFiles, levels({
1561
- "max-lines": ["error", { max: options.limits?.maxFileLines ?? 400, skipBlankLines: true, skipComments: true }],
1562
+ ...maxLines(options.limits?.maxFileLines ?? 400),
1562
1563
  complexity: ["error", { max: options.limits?.maxFunctionComplexity ?? 32 }]
1563
- }), ui));
1564
+ }), ui), presetOverride(presetScopes(app, "**/*.types.ts"), maxLines(options.limits?.maxTypeFileLines ?? 1000), ui));
1564
1565
  const named = new Set([...Object.keys(presetCommonRules), ...overrideList.flatMap((entry) => Object.keys(entry.rules ?? {}))]);
1565
1566
  const unnamedLevels = Object.fromEntries(Object.entries(severities).filter(([rule]) => !named.has(rule)));
1566
1567
  for (const [rule, files] of Object.entries(options.ruleExclusions ?? {})) {
@@ -1539,9 +1539,10 @@ function presetResolveContext(options) {
1539
1539
 
1540
1540
  // src/services/preset-compose.ts
1541
1541
  function presetCompose(context, policies, plugins) {
1542
- const { options, level, safetyFiles, ui, generated } = context;
1542
+ const { options, level, app, safetyFiles, ui, generated } = context;
1543
1543
  const severities = options.ruleSeverities ?? {};
1544
1544
  const levels = (rules) => presetRuleSeverities(presetSeverity(rules, level), severities);
1545
+ const maxLines = (max) => levels({ "max-lines": ["error", { max, skipBlankLines: true, skipComments: true }] });
1545
1546
  const overrideList = [];
1546
1547
  for (const name of presetPolicyOrder) {
1547
1548
  const setting = options.policies?.[name];
@@ -1558,9 +1559,9 @@ function presetCompose(context, policies, plugins) {
1558
1559
  }
1559
1560
  }
1560
1561
  overrideList.push(presetOverride(safetyFiles, levels({
1561
- "max-lines": ["error", { max: options.limits?.maxFileLines ?? 400, skipBlankLines: true, skipComments: true }],
1562
+ ...maxLines(options.limits?.maxFileLines ?? 400),
1562
1563
  complexity: ["error", { max: options.limits?.maxFunctionComplexity ?? 32 }]
1563
- }), ui));
1564
+ }), ui), presetOverride(presetScopes(app, "**/*.types.ts"), maxLines(options.limits?.maxTypeFileLines ?? 1000), ui));
1564
1565
  const named = new Set([...Object.keys(presetCommonRules), ...overrideList.flatMap((entry) => Object.keys(entry.rules ?? {}))]);
1565
1566
  const unnamedLevels = Object.fromEntries(Object.entries(severities).filter(([rule]) => !named.has(rule)));
1566
1567
  for (const [rule, files] of Object.entries(options.ruleExclusions ?? {})) {
@@ -58,6 +58,8 @@ export interface PresetFormattingOptions {
58
58
  }
59
59
  export interface PresetLimitsOptions {
60
60
  maxFileLines?: number;
61
+ /** `max-lines` for `*.types.ts` files; defaults to 1000. */
62
+ maxTypeFileLines?: number;
61
63
  maxFunctionComplexity?: number;
62
64
  }
63
65
  export interface PresetModulesOptions {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "oxlint-plugin-arch",
3
- "version": "0.8.0",
3
+ "version": "0.9.0",
4
4
  "description": "Configurable architecture rules for Oxlint JavaScript plugins.",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",