@aicqtools/guardrail 1.0.0-alpha.12 → 1.0.0-alpha.18
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/docs/render-rule-md.d.ts.map +1 -1
- package/dist/docs/render-rule-md.js +80 -0
- package/dist/docs/render-rule-md.js.map +1 -1
- package/dist/matcher/yaml-rule.d.ts +13 -0
- package/dist/matcher/yaml-rule.d.ts.map +1 -1
- package/dist/matcher/yaml-rule.js +32 -0
- package/dist/matcher/yaml-rule.js.map +1 -1
- package/dist/rules-default/camelcase-migration-column.d.ts.map +1 -1
- package/dist/rules-default/camelcase-migration-column.js +26 -2
- package/dist/rules-default/camelcase-migration-column.js.map +1 -1
- package/dist/rules-default/mask-pii-in-ai-prompt.d.ts.map +1 -1
- package/dist/rules-default/mask-pii-in-ai-prompt.js +44 -7
- package/dist/rules-default/mask-pii-in-ai-prompt.js.map +1 -1
- package/dist/rules-default/no-console-log.d.ts.map +1 -1
- package/dist/rules-default/no-console-log.js +22 -2
- package/dist/rules-default/no-console-log.js.map +1 -1
- package/dist/rules-default/no-empty-catch.d.ts +6 -0
- package/dist/rules-default/no-empty-catch.d.ts.map +1 -1
- package/dist/rules-default/no-empty-catch.js +42 -2
- package/dist/rules-default/no-empty-catch.js.map +1 -1
- package/dist/rules-default/no-fstring-sql.d.ts.map +1 -1
- package/dist/rules-default/no-fstring-sql.js +51 -2
- package/dist/rules-default/no-fstring-sql.js.map +1 -1
- package/dist/rules-default/no-magic-number.d.ts.map +1 -1
- package/dist/rules-default/no-magic-number.js +24 -4
- package/dist/rules-default/no-magic-number.js.map +1 -1
- package/dist/rules-default/no-print-in-prod.yaml +8 -0
- package/dist/runner/apply-rule-config.d.ts +43 -12
- package/dist/runner/apply-rule-config.d.ts.map +1 -1
- package/dist/runner/apply-rule-config.js +115 -41
- package/dist/runner/apply-rule-config.js.map +1 -1
- package/dist/runner/context.d.ts +7 -0
- package/dist/runner/context.d.ts.map +1 -1
- package/dist/runner/context.js +2 -0
- package/dist/runner/context.js.map +1 -1
- package/dist/runner/index.d.ts +4 -2
- package/dist/runner/index.d.ts.map +1 -1
- package/dist/runner/index.js +2 -1
- package/dist/runner/index.js.map +1 -1
- package/dist/runner/resolve-rule-options.d.ts +28 -0
- package/dist/runner/resolve-rule-options.d.ts.map +1 -0
- package/dist/runner/resolve-rule-options.js +27 -0
- package/dist/runner/resolve-rule-options.js.map +1 -0
- package/dist/runner/run-file.d.ts +16 -2
- package/dist/runner/run-file.d.ts.map +1 -1
- package/dist/runner/run-file.js +49 -7
- package/dist/runner/run-file.js.map +1 -1
- package/dist/runner/run-project.d.ts +20 -0
- package/dist/runner/run-project.d.ts.map +1 -1
- package/dist/runner/run-project.js +28 -5
- package/dist/runner/run-project.js.map +1 -1
- package/dist/runner/suppressions.d.ts +46 -1
- package/dist/runner/suppressions.d.ts.map +1 -1
- package/dist/runner/suppressions.js +101 -15
- package/dist/runner/suppressions.js.map +1 -1
- package/package.json +3 -3
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"no-fstring-sql.js","sourceRoot":"","sources":["../../src/rules-default/no-fstring-sql.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAEjD,MAAM,
|
|
1
|
+
{"version":3,"file":"no-fstring-sql.js","sourceRoot":"","sources":["../../src/rules-default/no-fstring-sql.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAEjD;;;;;;;;GAQG;AACH,MAAM,oBAAoB,GAAsB;IAC9C,QAAQ;IACR,QAAQ;IACR,QAAQ;IACR,QAAQ;IACR,MAAM;IACN,OAAO;IACP,MAAM;IACN,QAAQ;CACA,CAAC;AAEX,MAAM,aAAa,GAAG,CAAC;KACpB,MAAM,CAAC;IACN,WAAW,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,GAAG,oBAAoB,CAAC,CAAC;CACpE,CAAC;KACD,MAAM,EAAE,CAAC;AAMZ,SAAS,WAAW,CAAC,CAAS;IAC5B,OAAO,CAAC,CAAC,OAAO,CAAC,qBAAqB,EAAE,MAAM,CAAC,CAAC;AAClD,CAAC;AAED,2FAA2F;AAC3F,kDAAkD;AAClD,IAAI,YAAY,GAA6B,IAAI,CAAC;AAClD,IAAI,aAAa,GAAkB,IAAI,CAAC;AAExC,SAAS,wBAAwB,CAAC,MAAyB;IACzD,IAAI,YAAY,KAAK,MAAM,IAAI,aAAa,KAAK,IAAI;QAAE,OAAO,aAAa,CAAC;IAC5E,MAAM,OAAO,GAAG,IAAI,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,MAAM,EAAE,GAAG,CAAC,CAAC;IACrF,YAAY,GAAG,MAAM,CAAC;IACtB,aAAa,GAAG,OAAO,CAAC;IACxB,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,eAAe,UAAU,CAAC;IACxB,EAAE,EAAE,gBAAgB;IACpB,QAAQ,EAAE,QAAQ;IAClB,QAAQ,EAAE,OAAO;IACjB,OAAO,EAAE,4EAA4E;IACrF,SAAS,EAAE,iDAAiD;IAC5D,OAAO,EAAE;QACP,MAAM,EAAE,aAAa;QACrB,QAAQ,EAAE,EAAE,WAAW,EAAE,CAAC,GAAG,oBAAoB,CAAC,EAAE;KACrD;IACD,QAAQ,EAAE;QACR,MAAM,CAAC,IAAI,EAAE,GAAG;YACd,MAAM,IAAI,GAAG,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;YAC9B,2DAA2D;YAC3D,IAAI,CAAC,6BAA6B,CAAC,IAAI,CAAC,IAAI,CAAC;gBAAE,OAAO;YACtD,MAAM,IAAI,GAAI,GAAG,CAAC,OAA2C,IAAI;gBAC/D,WAAW,EAAE,oBAAoB;aAClC,CAAC;YACF,IAAI,IAAI,CAAC,WAAW,CAAC,MAAM,KAAK,CAAC;gBAAE,OAAO;YAC1C,MAAM,OAAO,GAAG,wBAAwB,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;YAC3D,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC;gBAAE,OAAO;YAChC,6BAA6B;YAC7B,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC;gBAAE,OAAO;YACrC,GAAG,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC;QACvB,CAAC;KACF;CACF,CAAC,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"no-magic-number.d.ts","sourceRoot":"","sources":["../../src/rules-default/no-magic-number.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"no-magic-number.d.ts","sourceRoot":"","sources":["../../src/rules-default/no-magic-number.ts"],"names":[],"mappings":"AAiDA,eAAO,MAAM,YAAY,QAA0M,CAAC;;AA6FpO,wBA0BG"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
1
2
|
import { defineRule } from '@aicqtools/rule-sdk';
|
|
2
3
|
/**
|
|
3
4
|
* `no-magic-number` — info-severity rule that flags numeric literals appearing inline in
|
|
@@ -24,9 +25,20 @@ import { defineRule } from '@aicqtools/rule-sdk';
|
|
|
24
25
|
* Allowed-numbers default extended to common-sense values: powers of two, common bases,
|
|
25
26
|
* time/clock constants, etc.
|
|
26
27
|
*/
|
|
27
|
-
|
|
28
|
+
/**
|
|
29
|
+
* Default allowed-number literals. Common-sense values: -2..2, base-10 / base-16 / base-2,
|
|
30
|
+
* time/clock constants. Alpha.14 exposes this list as `options.allowedNumbers` so users can
|
|
31
|
+
* extend (`['0', '1', '-1', '2', '60', '3600', '86400']` for time-heavy projects) or shrink
|
|
32
|
+
* the allow-list per project.
|
|
33
|
+
*/
|
|
34
|
+
const DEFAULT_ALLOWED_NUMBERS = [
|
|
28
35
|
'0', '1', '-1', '2', '-2', '10', '16', '24', '60', '100', '1000', '1024',
|
|
29
|
-
]
|
|
36
|
+
];
|
|
37
|
+
const optionsSchema = z
|
|
38
|
+
.object({
|
|
39
|
+
allowedNumbers: z.array(z.string()).default([...DEFAULT_ALLOWED_NUMBERS]),
|
|
40
|
+
})
|
|
41
|
+
.strict();
|
|
30
42
|
export const SKIP_FILE_RE = /(\.test\.|\.spec\.|__tests__|fixtures|\.config\.|\.polyfill\.|[/\\]polyfills[/\\]|[/\\]seeders[/\\]|[/\\]migrations[/\\]|[/\\](scripts|tools|bin)[/\\]|[/\\](native-bridge|service-worker)\.[jt]sx?$)/;
|
|
31
43
|
// Callee names whose numeric args are almost always intentional, not magic numbers.
|
|
32
44
|
// Matched on the leaf identifier (last name segment) — covers both `parseInt(...)` and
|
|
@@ -126,12 +138,20 @@ export default defineRule({
|
|
|
126
138
|
message: 'Magic number — extract to a named constant for clarity.',
|
|
127
139
|
messageKo: '매직 넘버 — 명명된 상수로 추출해 의미를 명확히 하세요.',
|
|
128
140
|
skipPatterns: [SKIP_FILE_RE],
|
|
141
|
+
options: {
|
|
142
|
+
schema: optionsSchema,
|
|
143
|
+
defaults: { allowedNumbers: [...DEFAULT_ALLOWED_NUMBERS] },
|
|
144
|
+
},
|
|
129
145
|
visitors: {
|
|
130
146
|
number(node, ctx) {
|
|
131
|
-
if (isInSkippedFile(ctx.filePath))
|
|
147
|
+
if (!ctx.skipBuiltinSkips && isInSkippedFile(ctx.filePath))
|
|
132
148
|
return;
|
|
149
|
+
const opts = ctx.options ?? {
|
|
150
|
+
allowedNumbers: DEFAULT_ALLOWED_NUMBERS,
|
|
151
|
+
};
|
|
152
|
+
const allowed = new Set(opts.allowedNumbers);
|
|
133
153
|
const text = ctx.textOf(node);
|
|
134
|
-
if (
|
|
154
|
+
if (allowed.has(text))
|
|
135
155
|
return;
|
|
136
156
|
if (hasSkippableAncestor(node))
|
|
137
157
|
return;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"no-magic-number.js","sourceRoot":"","sources":["../../src/rules-default/no-magic-number.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAEjD;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,MAAM,
|
|
1
|
+
{"version":3,"file":"no-magic-number.js","sourceRoot":"","sources":["../../src/rules-default/no-magic-number.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,6 +3,14 @@ language: python
|
|
|
3
3
|
severity: warning
|
|
4
4
|
message: Avoid bare print() in production code; use the standard `logging` module.
|
|
5
5
|
messageKo: 운영 코드에서 print() 사용 지양 — 표준 `logging` 모듈을 사용하세요.
|
|
6
|
+
options:
|
|
7
|
+
# Alpha.18 — YAML PatternRule framework consistency demo. The `query` below is static
|
|
8
|
+
# (`print` literal), so `disallowedFunctions` doesn't drive matching today; it's exposed
|
|
9
|
+
# purely so users can see the option via `aicq rules suggest` and override it in their
|
|
10
|
+
# config. Dynamic query substitution is deferred to a v1.0+ release.
|
|
11
|
+
defaults:
|
|
12
|
+
disallowedFunctions:
|
|
13
|
+
- print
|
|
6
14
|
query: |
|
|
7
15
|
(call
|
|
8
16
|
function: (identifier) @fn
|
|
@@ -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:
|
|
5
|
-
*
|
|
6
|
-
*
|
|
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
|
-
/**
|
|
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`.
|
|
22
|
-
*
|
|
23
|
-
*
|
|
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,
|
|
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
|
|
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;
|
|
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`.
|
|
14
|
-
*
|
|
15
|
-
*
|
|
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 {
|
|
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
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
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
|
-
|
|
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
|
|
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
|
-
|
|
103
|
-
|
|
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,
|
|
120
|
-
effective.set(id,
|
|
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
|
|
128
|
-
if (
|
|
183
|
+
const entry = effective.get(rule.id);
|
|
184
|
+
if (entry === undefined) {
|
|
129
185
|
out.push(rule);
|
|
130
186
|
continue;
|
|
131
187
|
}
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
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
|
-
|
|
140
|
-
|
|
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
|
-
|
|
143
|
-
|
|
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
|
-
|
|
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":"AAAA,OAAO,UAAU,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"apply-rule-config.js","sourceRoot":"","sources":["../../src/runner/apply-rule-config.ts"],"names":[],"mappings":"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"}
|
package/dist/runner/context.d.ts
CHANGED
|
@@ -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;
|
|
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"}
|
package/dist/runner/context.js
CHANGED
|
@@ -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;
|
|
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"}
|
package/dist/runner/index.d.ts
CHANGED
|
@@ -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;
|
|
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"}
|
package/dist/runner/index.js
CHANGED
|
@@ -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
|
package/dist/runner/index.js.map
CHANGED
|
@@ -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"}
|