@aicqtools/guardrail 1.0.0-alpha.12 → 1.0.0-alpha.16

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 (47) hide show
  1. package/dist/docs/render-rule-md.d.ts.map +1 -1
  2. package/dist/docs/render-rule-md.js +80 -0
  3. package/dist/docs/render-rule-md.js.map +1 -1
  4. package/dist/rules-default/camelcase-migration-column.d.ts.map +1 -1
  5. package/dist/rules-default/camelcase-migration-column.js +26 -2
  6. package/dist/rules-default/camelcase-migration-column.js.map +1 -1
  7. package/dist/rules-default/mask-pii-in-ai-prompt.d.ts.map +1 -1
  8. package/dist/rules-default/mask-pii-in-ai-prompt.js +44 -7
  9. package/dist/rules-default/mask-pii-in-ai-prompt.js.map +1 -1
  10. package/dist/rules-default/no-console-log.d.ts.map +1 -1
  11. package/dist/rules-default/no-console-log.js +22 -2
  12. package/dist/rules-default/no-console-log.js.map +1 -1
  13. package/dist/rules-default/no-empty-catch.d.ts +6 -0
  14. package/dist/rules-default/no-empty-catch.d.ts.map +1 -1
  15. package/dist/rules-default/no-empty-catch.js +42 -2
  16. package/dist/rules-default/no-empty-catch.js.map +1 -1
  17. package/dist/rules-default/no-fstring-sql.d.ts.map +1 -1
  18. package/dist/rules-default/no-fstring-sql.js +51 -2
  19. package/dist/rules-default/no-fstring-sql.js.map +1 -1
  20. package/dist/rules-default/no-magic-number.d.ts.map +1 -1
  21. package/dist/rules-default/no-magic-number.js +24 -4
  22. package/dist/rules-default/no-magic-number.js.map +1 -1
  23. package/dist/runner/apply-rule-config.d.ts +43 -12
  24. package/dist/runner/apply-rule-config.d.ts.map +1 -1
  25. package/dist/runner/apply-rule-config.js +115 -41
  26. package/dist/runner/apply-rule-config.js.map +1 -1
  27. package/dist/runner/context.d.ts +7 -0
  28. package/dist/runner/context.d.ts.map +1 -1
  29. package/dist/runner/context.js +2 -0
  30. package/dist/runner/context.js.map +1 -1
  31. package/dist/runner/index.d.ts +4 -2
  32. package/dist/runner/index.d.ts.map +1 -1
  33. package/dist/runner/index.js +2 -1
  34. package/dist/runner/index.js.map +1 -1
  35. package/dist/runner/resolve-rule-options.d.ts +28 -0
  36. package/dist/runner/resolve-rule-options.d.ts.map +1 -0
  37. package/dist/runner/resolve-rule-options.js +27 -0
  38. package/dist/runner/resolve-rule-options.js.map +1 -0
  39. package/dist/runner/run-file.d.ts +10 -2
  40. package/dist/runner/run-file.d.ts.map +1 -1
  41. package/dist/runner/run-file.js +14 -4
  42. package/dist/runner/run-file.js.map +1 -1
  43. package/dist/runner/run-project.d.ts +14 -0
  44. package/dist/runner/run-project.d.ts.map +1 -1
  45. package/dist/runner/run-project.js +22 -5
  46. package/dist/runner/run-project.js.map +1 -1
  47. package/package.json +3 -3
@@ -1,28 +1,37 @@
1
- import type { RuleOverride } from '@aicqtools/core';
1
+ import type { RuleEntry, RuleOverride } from '@aicqtools/core';
2
2
  import type { Rule } from '@aicqtools/rule-sdk';
3
+ import { type UnknownRuleOption } from './resolve-rule-options.js';
3
4
  /**
4
- * Resolution of `config.modules.guardrail.rules` (the `{ ruleId: 'off' | 'warn' | 'error' }` map)
5
- * against the loaded rule set. Filters out `off`'d rules, overrides severity for `warn`/`error`
6
- * entries, and reports unknown rule ids back to the caller so the CLI can warn the user once.
5
+ * Resolution of `config.modules.guardrail.rules` (the `{ ruleId: RuleEntry }` map) against the
6
+ * loaded rule set. Filters out `off`'d rules, overrides severity for `warn`/`error` entries,
7
+ * resolves alpha.14 per-rule options, and reports unknown rule ids + unknown option keys back
8
+ * to the caller so the CLI can warn the user once.
7
9
  */
8
10
  export interface ApplyRuleConfigResult {
9
11
  readonly rules: readonly Rule[];
10
- /** rule ids that appeared in the config map but matched no loaded rule */
12
+ /** Rule ids that appeared in the config map but matched no loaded rule. */
11
13
  readonly unknownIds: readonly string[];
14
+ /** Alpha.14 — resolved per-rule options keyed by ruleId. Absent entries = no options. */
15
+ readonly ruleOptions: ReadonlyMap<string, Readonly<Record<string, unknown>>>;
16
+ /** Alpha.14 — unknown option keys per rule (typo surface). One entry per rule with typos. */
17
+ readonly unknownOptions: readonly UnknownRuleOption[];
18
+ /** Alpha.14 — zod schema parse failures keyed by ruleId (caller surfaces via stderr). */
19
+ readonly optionParseErrors: ReadonlyMap<string, string>;
12
20
  }
13
- type RuleLevel = 'off' | 'warn' | 'error';
14
21
  /**
15
22
  * Apply the user-supplied `rules:` map to a loaded rule list.
16
23
  *
17
24
  * - `off` → drop the rule from the returned list
18
25
  * - `warn`/`error` → return a copy of the rule with `severity` overridden
26
+ * - object shape (alpha.14) → optional `severity` override + optional `options` validated
27
+ * against the rule's own zod schema; resolved options attached via `ruleOptions` map.
19
28
  * - missing entry → rule passes through unchanged
20
29
  *
21
- * Map keys that don't correspond to any loaded rule are collected in `unknownIds`. The function
22
- * never throws; an invalid level value (should already be rejected by zod) is treated as "no
23
- * override" rather than crashing the run.
30
+ * Map keys that don't correspond to any loaded rule are collected in `unknownIds`. Unknown
31
+ * option keys (typos inside `options`) land in `unknownOptions`. Zod parse failures land in
32
+ * `optionParseErrors` the rule still runs with its `defaults`, never crashing the scan.
24
33
  */
25
- export declare function applyRuleConfig(rules: readonly Rule[], cfgMap: Readonly<Record<string, RuleLevel>> | undefined): ApplyRuleConfigResult;
34
+ export declare function applyRuleConfig(rules: readonly Rule[], cfgMap: Readonly<Record<string, RuleEntry>> | undefined): ApplyRuleConfigResult;
26
35
  /**
27
36
  * Auto-anchor a single `overrides.paths` glob (alpha.10).
28
37
  *
@@ -42,9 +51,14 @@ export declare function normalizeOverridePath(glob: string): string;
42
51
  * Apply per-path `overrides` (alpha.8) on top of an already-globally-resolved rule list.
43
52
  *
44
53
  * For each override entry whose `paths` globs match `filePath`, merge its `rules` map into a
45
- * per-file effective level map. Later matching entries win for the same rule id (ESLint semantics).
54
+ * per-file effective entry map. Later matching entries win for the same rule id (ESLint semantics).
46
55
  * `off` drops the rule for this file; `warn`/`error` copies the rule with overridden severity.
47
56
  *
57
+ * Alpha.14: override entries can also carry the object shape `{ severity?, options? }`. The
58
+ * resolved options override the global ones for the matched files. The function returns an
59
+ * augmented baseline-options map (cloned, never mutates the caller's map) so the runner can
60
+ * thread the per-file options into `RuleContext.options`.
61
+ *
48
62
  * Fast path: if no overrides are configured, returns the input list unchanged so the file loop
49
63
  * stays cheap when this feature is unused.
50
64
  *
@@ -53,7 +67,25 @@ export declare function normalizeOverridePath(glob: string): string;
53
67
  * optional `matchCounts` array is provided, each matched override entry's slot is incremented;
54
68
  * the caller (CLI) reads zero-valued slots to emit "matched no files — ignored." warnings.
55
69
  */
70
+ /**
71
+ * Alpha.8/10 signature — returns `readonly Rule[]`. Preserved verbatim for back-compat with
72
+ * tests and external callers that don't need per-rule options. For runner usage (which threads
73
+ * options into RuleContext), call `applyOverridesForFileResolved` instead.
74
+ */
56
75
  export declare function applyOverridesForFile(baselineRules: readonly Rule[], overrides: readonly RuleOverride[], filePath: string, matchCounts?: number[]): readonly Rule[];
76
+ /**
77
+ * Alpha.14 — extended return shape with per-rule resolved options. The runner calls this so
78
+ * `RuleContext.options` reflects per-file overrides on top of the global baseline.
79
+ */
80
+ export interface ApplyOverridesResult {
81
+ readonly rules: readonly Rule[];
82
+ /**
83
+ * Per-rule resolved options for this file. Always returned (cloned from `baselineRuleOptions`
84
+ * when no override matched, so callers can read it unconditionally).
85
+ */
86
+ readonly ruleOptions: ReadonlyMap<string, Readonly<Record<string, unknown>>>;
87
+ }
88
+ export declare function applyOverridesForFileResolved(baselineRules: readonly Rule[], overrides: readonly RuleOverride[], filePath: string, matchCounts?: number[], baselineRuleOptions?: ReadonlyMap<string, Readonly<Record<string, unknown>>>): ApplyOverridesResult;
57
89
  /**
58
90
  * Collect rule ids referenced by `overrides` entries that don't match any loaded rule, paired
59
91
  * with the index of the offending override entry. The caller (CLI) uses these to emit one
@@ -80,5 +112,4 @@ export interface NegationOverridePath {
80
112
  readonly paths: readonly string[];
81
113
  }
82
114
  export declare function collectNegationPaths(overrides: readonly RuleOverride[]): readonly NegationOverridePath[];
83
- export {};
84
115
  //# sourceMappingURL=apply-rule-config.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"apply-rule-config.d.ts","sourceRoot":"","sources":["../../src/runner/apply-rule-config.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAY,MAAM,iBAAiB,CAAC;AAC9D,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,qBAAqB,CAAC;AAEhD;;;;GAIG;AACH,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,KAAK,EAAE,SAAS,IAAI,EAAE,CAAC;IAChC,0EAA0E;IAC1E,QAAQ,CAAC,UAAU,EAAE,SAAS,MAAM,EAAE,CAAC;CACxC;AAED,KAAK,SAAS,GAAG,KAAK,GAAG,MAAM,GAAG,OAAO,CAAC;AAM1C;;;;;;;;;;GAUG;AACH,wBAAgB,eAAe,CAC7B,KAAK,EAAE,SAAS,IAAI,EAAE,EACtB,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC,GAAG,SAAS,GACtD,qBAAqB,CAgCvB;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAa1D;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,qBAAqB,CACnC,aAAa,EAAE,SAAS,IAAI,EAAE,EAC9B,SAAS,EAAE,SAAS,YAAY,EAAE,EAClC,QAAQ,EAAE,MAAM,EAChB,WAAW,CAAC,EAAE,MAAM,EAAE,GACrB,SAAS,IAAI,EAAE,CAwCjB;AAED;;;;GAIG;AACH,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,KAAK,EAAE,SAAS,MAAM,EAAE,CAAC;CACnC;AAED,wBAAgB,yBAAyB,CACvC,aAAa,EAAE,SAAS,IAAI,EAAE,EAC9B,SAAS,EAAE,SAAS,YAAY,EAAE,GACjC,SAAS,iBAAiB,EAAE,CAY9B;AAED;;;;;;;;GAQG;AACH,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,sEAAsE;IACtE,QAAQ,CAAC,KAAK,EAAE,SAAS,MAAM,EAAE,CAAC;CACnC;AAED,wBAAgB,oBAAoB,CAClC,SAAS,EAAE,SAAS,YAAY,EAAE,GACjC,SAAS,oBAAoB,EAAE,CAUjC"}
1
+ {"version":3,"file":"apply-rule-config.d.ts","sourceRoot":"","sources":["../../src/runner/apply-rule-config.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAa,YAAY,EAAY,MAAM,iBAAiB,CAAC;AACpF,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,qBAAqB,CAAC;AAChD,OAAO,EAAsB,KAAK,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAEvF;;;;;GAKG;AACH,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,KAAK,EAAE,SAAS,IAAI,EAAE,CAAC;IAChC,2EAA2E;IAC3E,QAAQ,CAAC,UAAU,EAAE,SAAS,MAAM,EAAE,CAAC;IACvC,yFAAyF;IACzF,QAAQ,CAAC,WAAW,EAAE,WAAW,CAAC,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC;IAC7E,6FAA6F;IAC7F,QAAQ,CAAC,cAAc,EAAE,SAAS,iBAAiB,EAAE,CAAC;IACtD,yFAAyF;IACzF,QAAQ,CAAC,iBAAiB,EAAE,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACzD;AAiBD;;;;;;;;;;;;GAYG;AACH,wBAAgB,eAAe,CAC7B,KAAK,EAAE,SAAS,IAAI,EAAE,EACtB,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC,GAAG,SAAS,GACtD,qBAAqB,CAyDvB;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAa1D;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH;;;;GAIG;AACH,wBAAgB,qBAAqB,CACnC,aAAa,EAAE,SAAS,IAAI,EAAE,EAC9B,SAAS,EAAE,SAAS,YAAY,EAAE,EAClC,QAAQ,EAAE,MAAM,EAChB,WAAW,CAAC,EAAE,MAAM,EAAE,GACrB,SAAS,IAAI,EAAE,CAEjB;AAED;;;GAGG;AACH,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,KAAK,EAAE,SAAS,IAAI,EAAE,CAAC;IAChC;;;OAGG;IACH,QAAQ,CAAC,WAAW,EAAE,WAAW,CAAC,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC;CAC9E;AAED,wBAAgB,6BAA6B,CAC3C,aAAa,EAAE,SAAS,IAAI,EAAE,EAC9B,SAAS,EAAE,SAAS,YAAY,EAAE,EAClC,QAAQ,EAAE,MAAM,EAChB,WAAW,CAAC,EAAE,MAAM,EAAE,EACtB,mBAAmB,CAAC,EAAE,WAAW,CAAC,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,GAC3E,oBAAoB,CAgEtB;AAED;;;;GAIG;AACH,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,KAAK,EAAE,SAAS,MAAM,EAAE,CAAC;CACnC;AAED,wBAAgB,yBAAyB,CACvC,aAAa,EAAE,SAAS,IAAI,EAAE,EAC9B,SAAS,EAAE,SAAS,YAAY,EAAE,GACjC,SAAS,iBAAiB,EAAE,CAY9B;AAED;;;;;;;;GAQG;AACH,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,sEAAsE;IACtE,QAAQ,CAAC,KAAK,EAAE,SAAS,MAAM,EAAE,CAAC;CACnC;AAED,wBAAgB,oBAAoB,CAClC,SAAS,EAAE,SAAS,YAAY,EAAE,GACjC,SAAS,oBAAoB,EAAE,CAUjC"}
@@ -1,22 +1,41 @@
1
1
  import micromatch from 'micromatch';
2
+ import { resolveRuleOptions } from './resolve-rule-options.js';
2
3
  const LEVEL_TO_SEVERITY = {
3
4
  warn: 'warning',
4
5
  error: 'error',
5
6
  };
7
+ function extractLevel(entry) {
8
+ if (typeof entry === 'string')
9
+ return entry;
10
+ return entry.severity;
11
+ }
12
+ function extractOptions(entry) {
13
+ if (typeof entry === 'string')
14
+ return undefined;
15
+ return entry.options;
16
+ }
6
17
  /**
7
18
  * Apply the user-supplied `rules:` map to a loaded rule list.
8
19
  *
9
20
  * - `off` → drop the rule from the returned list
10
21
  * - `warn`/`error` → return a copy of the rule with `severity` overridden
22
+ * - object shape (alpha.14) → optional `severity` override + optional `options` validated
23
+ * against the rule's own zod schema; resolved options attached via `ruleOptions` map.
11
24
  * - missing entry → rule passes through unchanged
12
25
  *
13
- * Map keys that don't correspond to any loaded rule are collected in `unknownIds`. The function
14
- * never throws; an invalid level value (should already be rejected by zod) is treated as "no
15
- * override" rather than crashing the run.
26
+ * Map keys that don't correspond to any loaded rule are collected in `unknownIds`. Unknown
27
+ * option keys (typos inside `options`) land in `unknownOptions`. Zod parse failures land in
28
+ * `optionParseErrors` the rule still runs with its `defaults`, never crashing the scan.
16
29
  */
17
30
  export function applyRuleConfig(rules, cfgMap) {
18
31
  if (!cfgMap || Object.keys(cfgMap).length === 0) {
19
- return { rules, unknownIds: [] };
32
+ return {
33
+ rules,
34
+ unknownIds: [],
35
+ ruleOptions: new Map(),
36
+ unknownOptions: [],
37
+ optionParseErrors: new Map(),
38
+ };
20
39
  }
21
40
  const knownIds = new Set(rules.map((r) => r.id));
22
41
  const unknownIds = [];
@@ -25,30 +44,50 @@ export function applyRuleConfig(rules, cfgMap) {
25
44
  unknownIds.push(id);
26
45
  }
27
46
  const out = [];
47
+ const ruleOptions = new Map();
48
+ const unknownOptions = [];
49
+ const optionParseErrors = new Map();
28
50
  for (const rule of rules) {
29
- const level = cfgMap[rule.id];
30
- if (level === undefined) {
31
- out.push(rule);
32
- continue;
33
- }
34
- if (level === 'off')
35
- continue;
36
- const severity = LEVEL_TO_SEVERITY[level];
37
- if (!severity) {
38
- // Unrecognized level treat as no override, never crash.
39
- out.push(rule);
40
- continue;
41
- }
42
- // Copy with overridden severity. `Rule` is a discriminated union; preserve the union
43
- // by re-spreading per branch.
44
- if (rule.kind === 'function') {
45
- out.push({ ...rule, severity });
51
+ const entry = cfgMap[rule.id];
52
+ let nextRule = rule;
53
+ if (entry !== undefined) {
54
+ const level = extractLevel(entry);
55
+ if (level === 'off')
56
+ continue;
57
+ if (level !== undefined) {
58
+ const severity = LEVEL_TO_SEVERITY[level];
59
+ if (severity) {
60
+ // Discriminated union: re-spread per branch to preserve `kind` narrowing.
61
+ if (rule.kind === 'function') {
62
+ nextRule = { ...rule, severity };
63
+ }
64
+ else {
65
+ nextRule = { ...rule, severity };
66
+ }
67
+ }
68
+ }
69
+ const userOptions = extractOptions(entry);
70
+ const resolved = resolveRuleOptions(rule, userOptions);
71
+ if (resolved.options !== undefined) {
72
+ ruleOptions.set(rule.id, resolved.options);
73
+ }
74
+ if (resolved.unknownKeys.length > 0) {
75
+ unknownOptions.push({ ruleId: rule.id, unknownKeys: resolved.unknownKeys });
76
+ }
77
+ if (resolved.parseError) {
78
+ optionParseErrors.set(rule.id, resolved.parseError);
79
+ }
46
80
  }
47
81
  else {
48
- out.push({ ...rule, severity });
82
+ // No config entry but rule may declare defaults — attach them so `ctx.options` works.
83
+ const resolved = resolveRuleOptions(rule, undefined);
84
+ if (resolved.options !== undefined) {
85
+ ruleOptions.set(rule.id, resolved.options);
86
+ }
49
87
  }
88
+ out.push(nextRule);
50
89
  }
51
- return { rules: out, unknownIds };
90
+ return { rules: out, unknownIds, ruleOptions, unknownOptions, optionParseErrors };
52
91
  }
53
92
  /**
54
93
  * Auto-anchor a single `overrides.paths` glob (alpha.10).
@@ -87,9 +126,14 @@ export function normalizeOverridePath(glob) {
87
126
  * Apply per-path `overrides` (alpha.8) on top of an already-globally-resolved rule list.
88
127
  *
89
128
  * For each override entry whose `paths` globs match `filePath`, merge its `rules` map into a
90
- * per-file effective level map. Later matching entries win for the same rule id (ESLint semantics).
129
+ * per-file effective entry map. Later matching entries win for the same rule id (ESLint semantics).
91
130
  * `off` drops the rule for this file; `warn`/`error` copies the rule with overridden severity.
92
131
  *
132
+ * Alpha.14: override entries can also carry the object shape `{ severity?, options? }`. The
133
+ * resolved options override the global ones for the matched files. The function returns an
134
+ * augmented baseline-options map (cloned, never mutates the caller's map) so the runner can
135
+ * thread the per-file options into `RuleContext.options`.
136
+ *
93
137
  * Fast path: if no overrides are configured, returns the input list unchanged so the file loop
94
138
  * stays cheap when this feature is unused.
95
139
  *
@@ -98,9 +142,19 @@ export function normalizeOverridePath(glob) {
98
142
  * optional `matchCounts` array is provided, each matched override entry's slot is incremented;
99
143
  * the caller (CLI) reads zero-valued slots to emit "matched no files — ignored." warnings.
100
144
  */
145
+ /**
146
+ * Alpha.8/10 signature — returns `readonly Rule[]`. Preserved verbatim for back-compat with
147
+ * tests and external callers that don't need per-rule options. For runner usage (which threads
148
+ * options into RuleContext), call `applyOverridesForFileResolved` instead.
149
+ */
101
150
  export function applyOverridesForFile(baselineRules, overrides, filePath, matchCounts) {
102
- if (overrides.length === 0)
103
- return baselineRules;
151
+ return applyOverridesForFileResolved(baselineRules, overrides, filePath, matchCounts).rules;
152
+ }
153
+ export function applyOverridesForFileResolved(baselineRules, overrides, filePath, matchCounts, baselineRuleOptions) {
154
+ const baselineOpts = baselineRuleOptions ?? new Map();
155
+ if (overrides.length === 0) {
156
+ return { rules: baselineRules, ruleOptions: baselineOpts };
157
+ }
104
158
  const normalized = filePath.replace(/\\/g, '/');
105
159
  const effective = new Map();
106
160
  let anyMatch = false;
@@ -116,34 +170,54 @@ export function applyOverridesForFile(baselineRules, overrides, filePath, matchC
116
170
  anyMatch = true;
117
171
  if (matchCounts)
118
172
  matchCounts[i] = (matchCounts[i] ?? 0) + 1;
119
- for (const [id, level] of Object.entries(ov.rules)) {
120
- effective.set(id, level);
173
+ for (const [id, entry] of Object.entries(ov.rules)) {
174
+ effective.set(id, entry);
121
175
  }
122
176
  }
123
177
  if (!anyMatch)
124
- return baselineRules;
178
+ return { rules: baselineRules, ruleOptions: baselineOpts };
179
+ const ruleById = new Map(baselineRules.map((r) => [r.id, r]));
125
180
  const out = [];
181
+ const perFileOpts = new Map(baselineOpts);
126
182
  for (const rule of baselineRules) {
127
- const level = effective.get(rule.id);
128
- if (level === undefined) {
183
+ const entry = effective.get(rule.id);
184
+ if (entry === undefined) {
129
185
  out.push(rule);
130
186
  continue;
131
187
  }
132
- if (level === 'off')
133
- continue;
134
- const severity = LEVEL_TO_SEVERITY[level];
135
- if (!severity) {
136
- out.push(rule);
188
+ const level = extractLevel(entry);
189
+ if (level === 'off') {
190
+ perFileOpts.delete(rule.id);
137
191
  continue;
138
192
  }
139
- if (rule.kind === 'function') {
140
- out.push({ ...rule, severity });
193
+ let nextRule = rule;
194
+ if (level !== undefined) {
195
+ const severity = LEVEL_TO_SEVERITY[level];
196
+ if (severity) {
197
+ if (rule.kind === 'function') {
198
+ nextRule = { ...rule, severity };
199
+ }
200
+ else {
201
+ nextRule = { ...rule, severity };
202
+ }
203
+ }
141
204
  }
142
- else {
143
- out.push({ ...rule, severity });
205
+ const userOptions = extractOptions(entry);
206
+ if (userOptions !== undefined) {
207
+ const resolved = resolveRuleOptions(rule, userOptions);
208
+ if (resolved.options !== undefined) {
209
+ perFileOpts.set(rule.id, resolved.options);
210
+ }
144
211
  }
212
+ out.push(nextRule);
145
213
  }
146
- return out;
214
+ // Drop options for rules dropped from `out` (off'd by overrides).
215
+ const finalIds = new Set(out.map((r) => r.id));
216
+ for (const id of Array.from(perFileOpts.keys())) {
217
+ if (!finalIds.has(id) && !ruleById.has(id))
218
+ perFileOpts.delete(id);
219
+ }
220
+ return { rules: out, ruleOptions: perFileOpts };
147
221
  }
148
222
  export function collectUnknownOverrideIds(baselineRules, overrides) {
149
223
  if (overrides.length === 0)
@@ -1 +1 @@
1
- {"version":3,"file":"apply-rule-config.js","sourceRoot":"","sources":["../../src/runner/apply-rule-config.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"apply-rule-config.js","sourceRoot":"","sources":["../../src/runner/apply-rule-config.ts"],"names":[],"mappings":"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"}
@@ -7,6 +7,13 @@ export interface RunContext {
7
7
  readonly source: string;
8
8
  readonly language: Language;
9
9
  readonly diagnostics: Diagnostic[];
10
+ readonly skipBuiltinSkips?: boolean;
11
+ /**
12
+ * Alpha.14 — resolved options for the rule currently being run on this file. The caller
13
+ * (`run-file.ts`) builds one `RunContext` per rule and looks up `ruleOptions.get(rule.id)`.
14
+ * Undefined when the rule has no options declaration.
15
+ */
16
+ readonly options?: Readonly<Record<string, unknown>>;
10
17
  }
11
18
  export declare function makeRuleContext(run: RunContext, meta: RuleMeta): RuleContext;
12
19
  //# sourceMappingURL=context.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../src/runner/context.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,aAAa,CAAC;AACtC,OAAO,KAAK,EAAE,UAAU,EAAE,QAAQ,EAAE,KAAK,EAAY,MAAM,iBAAiB,CAAC;AAC7E,OAAO,KAAK,EAAE,WAAW,EAAE,QAAQ,EAAc,MAAM,qBAAqB,CAAC;AAE7E,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,CAAC,UAAU,GAAG,KAAK,CAK1D;AAED,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC;IAC5B,QAAQ,CAAC,WAAW,EAAE,UAAU,EAAE,CAAC;CACpC;AAED,wBAAgB,eAAe,CAAC,GAAG,EAAE,UAAU,EAAE,IAAI,EAAE,QAAQ,GAAG,WAAW,CA0B5E"}
1
+ {"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../src/runner/context.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,aAAa,CAAC;AACtC,OAAO,KAAK,EAAE,UAAU,EAAE,QAAQ,EAAE,KAAK,EAAY,MAAM,iBAAiB,CAAC;AAC7E,OAAO,KAAK,EAAE,WAAW,EAAE,QAAQ,EAAc,MAAM,qBAAqB,CAAC;AAE7E,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,CAAC,UAAU,GAAG,KAAK,CAK1D;AAED,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC;IAC5B,QAAQ,CAAC,WAAW,EAAE,UAAU,EAAE,CAAC;IACnC,QAAQ,CAAC,gBAAgB,CAAC,EAAE,OAAO,CAAC;IACpC;;;;OAIG;IACH,QAAQ,CAAC,OAAO,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;CACtD;AAED,wBAAgB,eAAe,CAAC,GAAG,EAAE,UAAU,EAAE,IAAI,EAAE,QAAQ,GAAG,WAAW,CA4B5E"}
@@ -9,6 +9,8 @@ export function makeRuleContext(run, meta) {
9
9
  filePath: run.filePath,
10
10
  source: run.source,
11
11
  language: run.language,
12
+ skipBuiltinSkips: run.skipBuiltinSkips ?? false,
13
+ ...(run.options !== undefined ? { options: run.options } : {}),
12
14
  textOf(node) {
13
15
  return run.source.slice(node.startIndex, node.endIndex);
14
16
  },
@@ -1 +1 @@
1
- {"version":3,"file":"context.js","sourceRoot":"","sources":["../../src/runner/context.ts"],"names":[],"mappings":"AAIA,MAAM,UAAU,WAAW,CAAC,IAAuB;IACjD,OAAO;QACL,KAAK,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,aAAa,CAAC,GAAG,GAAG,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE;QAClF,GAAG,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,WAAW,CAAC,GAAG,GAAG,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE;KAC7E,CAAC;AACJ,CAAC;AASD,MAAM,UAAU,eAAe,CAAC,GAAe,EAAE,IAAc;IAC7D,OAAO;QACL,QAAQ,EAAE,GAAG,CAAC,QAAQ;QACtB,MAAM,EAAE,GAAG,CAAC,MAAM;QAClB,QAAQ,EAAE,GAAG,CAAC,QAAQ;QACtB,MAAM,CAAC,IAAI;YACT,OAAO,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC1D,CAAC;QACD,OAAO,CAAC,IAAI;YACV,OAAO,WAAW,CAAC,IAAI,CAAC,CAAC;QAC3B,CAAC;QACD,MAAM,CAAC,IAAgB;YACrB,MAAM,UAAU,GAAe;gBAC7B,MAAM,EAAE,IAAI,CAAC,EAAE;gBACf,QAAQ,EAAE,IAAI,CAAC,QAAoB;gBACnC,OAAO,EAAE,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,OAAO;gBACrC,GAAG,CAAC,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,SAAS;oBAClC,CAAC,CAAC,EAAE,SAAS,EAAE,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,SAAS,EAAE;oBACjD,CAAC,CAAC,EAAE,CAAC;gBACP,IAAI,EAAE,GAAG,CAAC,QAAQ;gBAClB,KAAK,EAAE,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC;gBAC7B,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aAC5B,CAAC;YAChB,GAAG,CAAC,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QACnC,CAAC;KACF,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"context.js","sourceRoot":"","sources":["../../src/runner/context.ts"],"names":[],"mappings":"AAIA,MAAM,UAAU,WAAW,CAAC,IAAuB;IACjD,OAAO;QACL,KAAK,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,aAAa,CAAC,GAAG,GAAG,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE;QAClF,GAAG,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,WAAW,CAAC,GAAG,GAAG,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE;KAC7E,CAAC;AACJ,CAAC;AAgBD,MAAM,UAAU,eAAe,CAAC,GAAe,EAAE,IAAc;IAC7D,OAAO;QACL,QAAQ,EAAE,GAAG,CAAC,QAAQ;QACtB,MAAM,EAAE,GAAG,CAAC,MAAM;QAClB,QAAQ,EAAE,GAAG,CAAC,QAAQ;QACtB,gBAAgB,EAAE,GAAG,CAAC,gBAAgB,IAAI,KAAK;QAC/C,GAAG,CAAC,GAAG,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC9D,MAAM,CAAC,IAAI;YACT,OAAO,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC1D,CAAC;QACD,OAAO,CAAC,IAAI;YACV,OAAO,WAAW,CAAC,IAAI,CAAC,CAAC;QAC3B,CAAC;QACD,MAAM,CAAC,IAAgB;YACrB,MAAM,UAAU,GAAe;gBAC7B,MAAM,EAAE,IAAI,CAAC,EAAE;gBACf,QAAQ,EAAE,IAAI,CAAC,QAAoB;gBACnC,OAAO,EAAE,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,OAAO;gBACrC,GAAG,CAAC,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,SAAS;oBAClC,CAAC,CAAC,EAAE,SAAS,EAAE,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,SAAS,EAAE;oBACjD,CAAC,CAAC,EAAE,CAAC;gBACP,IAAI,EAAE,GAAG,CAAC,QAAQ;gBAClB,KAAK,EAAE,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC;gBAC7B,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aAC5B,CAAC;YAChB,GAAG,CAAC,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QACnC,CAAC;KACF,CAAC;AACJ,CAAC"}
@@ -2,8 +2,10 @@ export { runFile, runFileWithSource } from './run-file.js';
2
2
  export { runProject, resolveIgnores } from './run-project.js';
3
3
  export { runRule } from './run-rule.js';
4
4
  export { ruleSignature, rulesetSignature } from './ruleset-signature.js';
5
- export { applyRuleConfig, applyOverridesForFile, collectUnknownOverrideIds, collectNegationPaths, normalizeOverridePath } from './apply-rule-config.js';
6
- export type { ApplyRuleConfigResult, UnknownOverrideId, NegationOverridePath } from './apply-rule-config.js';
5
+ export { applyRuleConfig, applyOverridesForFile, applyOverridesForFileResolved, collectUnknownOverrideIds, collectNegationPaths, normalizeOverridePath } from './apply-rule-config.js';
6
+ export type { ApplyRuleConfigResult, ApplyOverridesResult, UnknownOverrideId, NegationOverridePath } from './apply-rule-config.js';
7
+ export { resolveRuleOptions } from './resolve-rule-options.js';
8
+ export type { UnknownRuleOption, ResolveRuleOptionsResult } from './resolve-rule-options.js';
7
9
  export type { RunFileResult } from './run-file.js';
8
10
  export type { RunProjectOptions } from './run-project.js';
9
11
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/runner/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAC3D,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAC9D,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AACxC,OAAO,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AACzE,OAAO,EAAE,eAAe,EAAE,qBAAqB,EAAE,yBAAyB,EAAE,oBAAoB,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAC;AACxJ,YAAY,EAAE,qBAAqB,EAAE,iBAAiB,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAC7G,YAAY,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AACnD,YAAY,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/runner/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAC3D,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAC9D,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AACxC,OAAO,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AACzE,OAAO,EAAE,eAAe,EAAE,qBAAqB,EAAE,6BAA6B,EAAE,yBAAyB,EAAE,oBAAoB,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAC;AACvL,YAAY,EAAE,qBAAqB,EAAE,oBAAoB,EAAE,iBAAiB,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AACnI,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAC/D,YAAY,EAAE,iBAAiB,EAAE,wBAAwB,EAAE,MAAM,2BAA2B,CAAC;AAC7F,YAAY,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AACnD,YAAY,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC"}
@@ -2,5 +2,6 @@ export { runFile, runFileWithSource } from './run-file.js';
2
2
  export { runProject, resolveIgnores } from './run-project.js';
3
3
  export { runRule } from './run-rule.js';
4
4
  export { ruleSignature, rulesetSignature } from './ruleset-signature.js';
5
- export { applyRuleConfig, applyOverridesForFile, collectUnknownOverrideIds, collectNegationPaths, normalizeOverridePath } from './apply-rule-config.js';
5
+ export { applyRuleConfig, applyOverridesForFile, applyOverridesForFileResolved, collectUnknownOverrideIds, collectNegationPaths, normalizeOverridePath } from './apply-rule-config.js';
6
+ export { resolveRuleOptions } from './resolve-rule-options.js';
6
7
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/runner/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAC3D,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAC9D,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AACxC,OAAO,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AACzE,OAAO,EAAE,eAAe,EAAE,qBAAqB,EAAE,yBAAyB,EAAE,oBAAoB,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/runner/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAC3D,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAC9D,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AACxC,OAAO,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AACzE,OAAO,EAAE,eAAe,EAAE,qBAAqB,EAAE,6BAA6B,EAAE,yBAAyB,EAAE,oBAAoB,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAC;AAEvL,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC"}
@@ -0,0 +1,28 @@
1
+ import type { Rule } from '@aicqtools/rule-sdk';
2
+ /**
3
+ * Alpha.14 — per-rule options framework.
4
+ *
5
+ * `resolveRuleOptions(rule, userOptions)`:
6
+ * 1. Rule with no `options` declaration → returns `{ options: undefined }`.
7
+ * 2. Rule has options but user supplied none → returns the rule's `defaults`.
8
+ * 3. Rule has options + user supplied some → merges `{ ...defaults, ...user }`, runs the
9
+ * rule's zod schema in `safeParse` mode, and:
10
+ * - on success: returns parsed data + any unknown keys the user supplied that are not
11
+ * in `defaults` (typo surface).
12
+ * - on failure: returns `defaults` as a safe fallback + the zod error message + any
13
+ * unknown keys. The caller surfaces the error via stderr; the rule keeps running.
14
+ *
15
+ * The runner never throws when option resolution fails — guardrail's job is to keep scanning
16
+ * even when one rule's config is broken (mirrors alpha.7's "unknown rule id ignored" pattern).
17
+ */
18
+ export interface UnknownRuleOption {
19
+ readonly ruleId: string;
20
+ readonly unknownKeys: readonly string[];
21
+ }
22
+ export interface ResolveRuleOptionsResult {
23
+ readonly options: Readonly<Record<string, unknown>> | undefined;
24
+ readonly unknownKeys: readonly string[];
25
+ readonly parseError?: string;
26
+ }
27
+ export declare function resolveRuleOptions(rule: Rule, userOptions: Readonly<Record<string, unknown>> | undefined): ResolveRuleOptionsResult;
28
+ //# sourceMappingURL=resolve-rule-options.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resolve-rule-options.d.ts","sourceRoot":"","sources":["../../src/runner/resolve-rule-options.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,qBAAqB,CAAC;AAEhD;;;;;;;;;;;;;;;GAeG;AAEH,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,WAAW,EAAE,SAAS,MAAM,EAAE,CAAC;CACzC;AAED,MAAM,WAAW,wBAAwB;IACvC,QAAQ,CAAC,OAAO,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,GAAG,SAAS,CAAC;IAChE,QAAQ,CAAC,WAAW,EAAE,SAAS,MAAM,EAAE,CAAC;IACxC,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;CAC9B;AAED,wBAAgB,kBAAkB,CAChC,IAAI,EAAE,IAAI,EACV,WAAW,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,GAAG,SAAS,GACzD,wBAAwB,CA4B1B"}
@@ -0,0 +1,27 @@
1
+ export function resolveRuleOptions(rule, userOptions) {
2
+ if (!rule.options) {
3
+ return { options: undefined, unknownKeys: [] };
4
+ }
5
+ if (!userOptions || Object.keys(userOptions).length === 0) {
6
+ return { options: rule.options.defaults, unknownKeys: [] };
7
+ }
8
+ const knownKeys = new Set(Object.keys(rule.options.defaults));
9
+ const unknownKeys = Object.keys(userOptions).filter((k) => !knownKeys.has(k));
10
+ const merged = { ...rule.options.defaults, ...userOptions };
11
+ const parsed = rule.options.schema.safeParse(merged);
12
+ if (parsed.success) {
13
+ return {
14
+ options: parsed.data,
15
+ unknownKeys,
16
+ };
17
+ }
18
+ const parseError = parsed.error.issues
19
+ .map((i) => `${i.path.join('.') || '(root)'}: ${i.message}`)
20
+ .join('; ');
21
+ return {
22
+ options: rule.options.defaults,
23
+ unknownKeys,
24
+ parseError,
25
+ };
26
+ }
27
+ //# sourceMappingURL=resolve-rule-options.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resolve-rule-options.js","sourceRoot":"","sources":["../../src/runner/resolve-rule-options.ts"],"names":[],"mappings":"AA8BA,MAAM,UAAU,kBAAkB,CAChC,IAAU,EACV,WAA0D;IAE1D,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;QAClB,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,EAAE,EAAE,CAAC;IACjD,CAAC;IACD,IAAI,CAAC,WAAW,IAAI,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC1D,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,WAAW,EAAE,EAAE,EAAE,CAAC;IAC7D,CAAC;IAED,MAAM,SAAS,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC;IAC9D,MAAM,WAAW,GAAG,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IAE9E,MAAM,MAAM,GAAG,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,GAAG,WAAW,EAAE,CAAC;IAC5D,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;IACrD,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;QACnB,OAAO;YACL,OAAO,EAAE,MAAM,CAAC,IAAyC;YACzD,WAAW;SACZ,CAAC;IACJ,CAAC;IAED,MAAM,UAAU,GAAG,MAAM,CAAC,KAAK,CAAC,MAAM;SACnC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,QAAQ,KAAK,CAAC,CAAC,OAAO,EAAE,CAAC;SAC3D,IAAI,CAAC,IAAI,CAAC,CAAC;IACd,OAAO;QACL,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,QAAQ;QAC9B,WAAW;QACX,UAAU;KACX,CAAC;AACJ,CAAC"}
@@ -5,6 +5,14 @@ export interface RunFileResult {
5
5
  readonly language: Language | null;
6
6
  readonly diagnostics: readonly Diagnostic[];
7
7
  }
8
- export declare function runFile(filePath: string, rules: readonly Rule[]): Promise<RunFileResult>;
9
- export declare function runFileWithSource(filePath: string, source: string, language: Language, rules: readonly Rule[]): RunFileResult;
8
+ export interface RunFileOptions {
9
+ readonly skipBuiltinSkips?: boolean;
10
+ /**
11
+ * Alpha.14 — per-rule resolved options for this file. Keyed by ruleId. The runner pulls the
12
+ * matching entry per rule and threads it into `RuleContext.options` via `makeRuleContext`.
13
+ */
14
+ readonly ruleOptions?: ReadonlyMap<string, Readonly<Record<string, unknown>>>;
15
+ }
16
+ export declare function runFile(filePath: string, rules: readonly Rule[], opts?: RunFileOptions): Promise<RunFileResult>;
17
+ export declare function runFileWithSource(filePath: string, source: string, language: Language, rules: readonly Rule[], opts?: RunFileOptions): RunFileResult;
10
18
  //# sourceMappingURL=run-file.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"run-file.d.ts","sourceRoot":"","sources":["../../src/runner/run-file.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAE5D,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,qBAAqB,CAAC;AAIhD,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,QAAQ,EAAE,QAAQ,GAAG,IAAI,CAAC;IACnC,QAAQ,CAAC,WAAW,EAAE,SAAS,UAAU,EAAE,CAAC;CAC7C;AAED,wBAAsB,OAAO,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,IAAI,EAAE,GAAG,OAAO,CAAC,aAAa,CAAC,CAM9F;AAED,wBAAgB,iBAAiB,CAC/B,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,QAAQ,EAClB,KAAK,EAAE,SAAS,IAAI,EAAE,GACrB,aAAa,CAsBf"}
1
+ {"version":3,"file":"run-file.d.ts","sourceRoot":"","sources":["../../src/runner/run-file.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAE5D,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,qBAAqB,CAAC;AAIhD,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,QAAQ,EAAE,QAAQ,GAAG,IAAI,CAAC;IACnC,QAAQ,CAAC,WAAW,EAAE,SAAS,UAAU,EAAE,CAAC;CAC7C;AAED,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,gBAAgB,CAAC,EAAE,OAAO,CAAC;IACpC;;;OAGG;IACH,QAAQ,CAAC,WAAW,CAAC,EAAE,WAAW,CAAC,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC;CAC/E;AAED,wBAAsB,OAAO,CAC3B,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,SAAS,IAAI,EAAE,EACtB,IAAI,CAAC,EAAE,cAAc,GACpB,OAAO,CAAC,aAAa,CAAC,CAMxB;AAED,wBAAgB,iBAAiB,CAC/B,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,QAAQ,EAClB,KAAK,EAAE,SAAS,IAAI,EAAE,EACtB,IAAI,CAAC,EAAE,cAAc,GACpB,aAAa,CAgCf"}
@@ -2,18 +2,28 @@ import { readFile } from 'node:fs/promises';
2
2
  import { detectLanguage, parseSource } from '@aicqtools/core';
3
3
  import { runRule } from './run-rule.js';
4
4
  import { applySuppressions, parseSuppressions } from './suppressions.js';
5
- export async function runFile(filePath, rules) {
5
+ export async function runFile(filePath, rules, opts) {
6
6
  const language = detectLanguage(filePath);
7
7
  if (!language)
8
8
  return { filePath, language: null, diagnostics: [] };
9
9
  const source = await readFile(filePath, 'utf-8');
10
- return runFileWithSource(filePath, source, language, rules);
10
+ return runFileWithSource(filePath, source, language, rules, opts);
11
11
  }
12
- export function runFileWithSource(filePath, source, language, rules) {
12
+ export function runFileWithSource(filePath, source, language, rules, opts) {
13
13
  const tree = parseSource(language, source);
14
14
  const diagnostics = [];
15
- const run = { filePath, source, language, diagnostics };
15
+ const ruleOptions = opts?.ruleOptions;
16
+ const skipBuiltinSkips = opts?.skipBuiltinSkips ?? false;
16
17
  for (const rule of rules) {
18
+ const resolvedOptions = ruleOptions?.get(rule.id);
19
+ const run = {
20
+ filePath,
21
+ source,
22
+ language,
23
+ diagnostics,
24
+ skipBuiltinSkips,
25
+ ...(resolvedOptions !== undefined ? { options: resolvedOptions } : {}),
26
+ };
17
27
  try {
18
28
  runRule(rule, run, tree);
19
29
  }
@@ -1 +1 @@
1
- {"version":3,"file":"run-file.js","sourceRoot":"","sources":["../../src/runner/run-file.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAE5C,OAAO,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAE9D,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AACxC,OAAO,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAQzE,MAAM,CAAC,KAAK,UAAU,OAAO,CAAC,QAAgB,EAAE,KAAsB;IACpE,MAAM,QAAQ,GAAG,cAAc,CAAC,QAAQ,CAAC,CAAC;IAC1C,IAAI,CAAC,QAAQ;QAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE,WAAW,EAAE,EAAE,EAAE,CAAC;IAEpE,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IACjD,OAAO,iBAAiB,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAC;AAC9D,CAAC;AAED,MAAM,UAAU,iBAAiB,CAC/B,QAAgB,EAChB,MAAc,EACd,QAAkB,EAClB,KAAsB;IAEtB,MAAM,IAAI,GAAG,WAAW,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;IAC3C,MAAM,WAAW,GAAiB,EAAE,CAAC;IACrC,MAAM,GAAG,GAAG,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,WAAW,EAAE,CAAC;IACxD,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,IAAI,CAAC;YACH,OAAO,CAAC,IAAI,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC;QAC3B,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,WAAW,CAAC,IAAI,CAAC,oBAAoB,CAAC,QAAQ,EAAE,IAAI,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC,CAAC;QACjE,CAAC;IACH,CAAC;IACD,qFAAqF;IACrF,wFAAwF;IACxF,IAAI,UAAU,GAA0B,WAAW,CAAC;IACpD,IAAI,CAAC;QACH,MAAM,YAAY,GAAG,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC;QAC/D,UAAU,GAAG,iBAAiB,CAAC,WAAW,EAAE,YAAY,CAAC,CAAC;IAC5D,CAAC;IAAC,MAAM,CAAC;QACP,8EAA8E;QAC9E,gDAAgD;IAClD,CAAC;IACD,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,WAAW,EAAE,UAAU,EAAE,CAAC;AACzD,CAAC;AAED,SAAS,oBAAoB,CAAC,QAAgB,EAAE,MAAc,EAAE,GAAY;IAC1E,MAAM,OAAO,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IACjE,OAAO;QACL,MAAM,EAAE,oBAAoB;QAC5B,QAAQ,EAAE,SAAS;QACnB,OAAO,EAAE,yBAAyB,MAAM,KAAK,OAAO,EAAE;QACtD,SAAS,EAAE,YAAY,MAAM,MAAM,OAAO,EAAE;QAC5C,IAAI,EAAE,QAAQ;QACd,KAAK,EAAE,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,EAAE,GAAG,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,EAAE;KACtE,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"run-file.js","sourceRoot":"","sources":["../../src/runner/run-file.ts"],"names":[],"mappings":"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"}
@@ -19,6 +19,20 @@ export interface RunProjectOptions {
19
19
  * (or omitted) is the fast path — runner falls back to the baseline list unchanged.
20
20
  */
21
21
  readonly overrides?: readonly RuleOverride[];
22
+ /**
23
+ * Alpha.13 escape hatch. When `true`, built-in `SKIP_FILE_RE` guards inside default rules
24
+ * (`no-console-log` / `no-empty-catch` / `no-magic-number`) are bypassed for the whole run.
25
+ * Default `false` preserves alpha.10~12 behavior. Forwarded into each `runFile` call so the
26
+ * rule body can read it from `ctx.skipBuiltinSkips`.
27
+ */
28
+ readonly skipBuiltinSkips?: boolean;
29
+ /**
30
+ * Alpha.14 — pre-resolved per-rule options from `applyRuleConfig`. The runner threads these
31
+ * into each `runFile` call so rule bodies can read `ctx.options`. Per-file overrides may
32
+ * further augment this map via `applyOverridesForFile`. Empty map / omitted = no options
33
+ * (every rule sees `ctx.options === undefined` or its own declared defaults).
34
+ */
35
+ readonly ruleOptions?: ReadonlyMap<string, Readonly<Record<string, unknown>>>;
22
36
  }
23
37
  export declare function runProject(opts: RunProjectOptions): Promise<CheckResult>;
24
38
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"run-project.d.ts","sourceRoot":"","sources":["../../src/runner/run-project.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,WAAW,EAAc,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC7E,OAAO,EAAE,SAAS,EAAwB,MAAM,iBAAiB,CAAC;AAClE,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,qBAAqB,CAAC;AAKhD,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,CAAC;IACpC,QAAQ,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,CAAC;IACpC,QAAQ,CAAC,KAAK,EAAE,SAAS,IAAI,EAAE,CAAC;IAChC,QAAQ,CAAC,KAAK,CAAC,EAAE,SAAS,CAAC;IAC3B;;;;OAIG;IACH,QAAQ,CAAC,gBAAgB,CAAC,EAAE,OAAO,CAAC;IACpC;;;;OAIG;IACH,QAAQ,CAAC,SAAS,CAAC,EAAE,SAAS,YAAY,EAAE,CAAC;CAC9C;AAED,wBAAsB,UAAU,CAAC,IAAI,EAAE,iBAAiB,GAAG,OAAO,CAAC,WAAW,CAAC,CAmE9E;AAED;;;;GAIG;AACH,wBAAsB,cAAc,CAClC,GAAG,EAAE,MAAM,EACX,OAAO,EAAE,SAAS,MAAM,EAAE,EAC1B,gBAAgB,EAAE,OAAO,GACxB,OAAO,CAAC,MAAM,EAAE,CAAC,CAyBnB"}
1
+ {"version":3,"file":"run-project.d.ts","sourceRoot":"","sources":["../../src/runner/run-project.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,WAAW,EAAc,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC7E,OAAO,EAAE,SAAS,EAAwB,MAAM,iBAAiB,CAAC;AAClE,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,qBAAqB,CAAC;AAKhD,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,CAAC;IACpC,QAAQ,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,CAAC;IACpC,QAAQ,CAAC,KAAK,EAAE,SAAS,IAAI,EAAE,CAAC;IAChC,QAAQ,CAAC,KAAK,CAAC,EAAE,SAAS,CAAC;IAC3B;;;;OAIG;IACH,QAAQ,CAAC,gBAAgB,CAAC,EAAE,OAAO,CAAC;IACpC;;;;OAIG;IACH,QAAQ,CAAC,SAAS,CAAC,EAAE,SAAS,YAAY,EAAE,CAAC;IAC7C;;;;;OAKG;IACH,QAAQ,CAAC,gBAAgB,CAAC,EAAE,OAAO,CAAC;IACpC;;;;;OAKG;IACH,QAAQ,CAAC,WAAW,CAAC,EAAE,WAAW,CAAC,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC;CAC/E;AAED,wBAAsB,UAAU,CAAC,IAAI,EAAE,iBAAiB,GAAG,OAAO,CAAC,WAAW,CAAC,CA+E9E;AAED;;;;GAIG;AACH,wBAAsB,cAAc,CAClC,GAAG,EAAE,MAAM,EACX,OAAO,EAAE,SAAS,MAAM,EAAE,EAC1B,gBAAgB,EAAE,OAAO,GACxB,OAAO,CAAC,MAAM,EAAE,CAAC,CAyBnB"}