@cleaver/breakcheck-core 0.2.2 → 0.2.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -98,6 +98,8 @@ The core of the tool is comparing two snapshots. The `runComparison` function co
98
98
 
99
99
  String `ruleset` values are directories containing `rules.breakcheck`. Relative paths resolve from `process.cwd()`, the directory where the consuming project invokes Breakcheck. In a monorepo, invoke it from the package that owns the rules or use an absolute path.
100
100
 
101
+ Rules may also be supplied inline as a typed `Ruleset`. `RulesEngine.create()` eagerly validates non-empty selectors and actions, Cheerio selector syntax, region names and uniqueness, supported modifier combinations, and JavaScript regular expressions. It compiles and clones the rules so later caller mutation cannot change processing. The DSL accepts full Cheerio-compatible CSS selectors on a single rule-header line; modifier values are double-quoted, with `\"` and `\\` decoded while regex escapes remain intact. `include` is an intentional compatibility no-op, and `rewrite_content` preserves nested markup by rewriting each descendant text node independently.
102
+
101
103
  ```javascript
102
104
  import { runComparison } from "@cleaver/breakcheck-core";
103
105
 
@@ -1,248 +1,200 @@
1
- import { createToken, CstParser, Lexer } from "chevrotain";
2
- import { readFileSync } from "fs";
3
- import { resolve } from "path";
1
+ import { createToken, CstParser, EOF, Lexer } from "chevrotain";
2
+ import { readFile } from "node:fs/promises";
3
+ import { resolve } from "node:path";
4
4
  import { logger } from "../../lib/logger.js";
5
- // --- LEXER ---
6
- const Css = createToken({ name: "Css", pattern: /css:/i });
7
- const Do = createToken({ name: "Do", pattern: /do:/i });
8
- const DoBlock = createToken({ name: "DoBlock", pattern: /do/i });
9
- const End = createToken({ name: "End", pattern: /end/i });
10
- const Include = createToken({ name: "Include", pattern: /include/i });
11
- const Exclude = createToken({ name: "Exclude", pattern: /exclude/i });
12
- const RemoveAttr = createToken({ name: "RemoveAttr", pattern: /remove_attr/i });
13
- const RewriteAttr = createToken({
14
- name: "RewriteAttr",
15
- pattern: /rewrite_attr/i,
16
- });
17
- const RewriteContent = createToken({
18
- name: "RewriteContent",
19
- pattern: /rewrite_content/i,
20
- });
5
+ function isRegion(value) {
6
+ return typeof value === "object" && value !== null && "kind" in value && value.kind === "region" && "name" in value && typeof value.name === "string";
7
+ }
8
+ function isAction(value) {
9
+ return typeof value === "object" && value !== null && "action" in value && typeof value.action === "string";
10
+ }
11
+ function isRule(value) {
12
+ return typeof value === "object" && value !== null && "selector" in value && typeof value.selector === "string" && "actions" in value && Array.isArray(value.actions);
13
+ }
14
+ function isNamedRegion(value) {
15
+ return typeof value === "object" && value !== null && "selector" in value && typeof value.selector === "string" && "name" in value && typeof value.name === "string";
16
+ }
17
+ function isRuleset(value) {
18
+ return typeof value === "object" && value !== null && "name" in value && typeof value.name === "string" && "rules" in value && Array.isArray(value.rules) && (!("regions" in value) || value.regions === undefined || Array.isArray(value.regions));
19
+ }
20
+ const Css = createToken({ name: "Css", pattern: /css:/i, push_mode: "selector" });
21
+ function matchSelector(text, offset) {
22
+ let quote;
23
+ let escaped = false;
24
+ let brackets = 0;
25
+ let parentheses = 0;
26
+ const endings = [text.indexOf("\n", offset), text.indexOf("\r", offset)].filter((value) => value >= 0);
27
+ const lineEnd = endings.length === 0 ? text.length : Math.min(...endings);
28
+ for (let index = offset; index < lineEnd; index += 1) {
29
+ const character = text[index];
30
+ if (escaped) {
31
+ escaped = false;
32
+ continue;
33
+ }
34
+ if (character === "\\") {
35
+ escaped = true;
36
+ continue;
37
+ }
38
+ if (quote) {
39
+ if (character === quote)
40
+ quote = undefined;
41
+ continue;
42
+ }
43
+ if (character === "\"" || character === "'") {
44
+ quote = character;
45
+ continue;
46
+ }
47
+ if (character === "[")
48
+ brackets += 1;
49
+ else if (character === "]" && brackets > 0)
50
+ brackets -= 1;
51
+ else if (character === "(")
52
+ parentheses += 1;
53
+ else if (character === ")" && parentheses > 0)
54
+ parentheses -= 1;
55
+ if (brackets || parentheses || index === offset || !/\s/.test(text[index - 1] ?? ""))
56
+ continue;
57
+ const remainder = text.slice(index, lineEnd);
58
+ if (/^do:/i.test(remainder) || /^do(?=[ \t]*(?:--[^\r\n]*)?(?![\s\S]))/i.test(remainder)) {
59
+ const image = text.slice(offset, index).trimEnd();
60
+ if (!image)
61
+ return null;
62
+ const match = [image];
63
+ match.index = offset;
64
+ match.input = text;
65
+ return match;
66
+ }
67
+ }
68
+ return null;
69
+ }
70
+ const Selector = createToken({ name: "Selector", pattern: matchSelector, line_breaks: false });
71
+ const SelectorWhitespace = createToken({ name: "SelectorWhitespace", pattern: /[ \t]+/, group: Lexer.SKIPPED });
72
+ const Do = createToken({ name: "Do", pattern: /do:/i, pop_mode: true });
73
+ const DoBlock = createToken({ name: "DoBlock", pattern: /do(?=[ \t]*(?:--[^\r\n]*)?(?:\r?\n|(?![\s\S])))/i, pop_mode: true });
74
+ const End = createToken({ name: "End", pattern: /end\b/i });
75
+ const Include = createToken({ name: "Include", pattern: /include\b/i });
76
+ const Exclude = createToken({ name: "Exclude", pattern: /exclude\b/i });
77
+ const RemoveAttr = createToken({ name: "RemoveAttr", pattern: /remove_attr\b/i });
78
+ const RewriteAttr = createToken({ name: "RewriteAttr", pattern: /rewrite_attr\b/i });
79
+ const RewriteContent = createToken({ name: "RewriteContent", pattern: /rewrite_content\b/i });
80
+ const RegionKeyword = createToken({ name: "Region", pattern: /region\b/i });
81
+ const ContentRegex = createToken({ name: "ContentRegex", pattern: /content_regex:/i });
21
82
  const Attr = createToken({ name: "Attr", pattern: /attr:/i });
83
+ const RegionName = createToken({ name: "RegionName", pattern: /name:/i });
22
84
  const Regex = createToken({ name: "Regex", pattern: /regex:/i });
23
85
  const Replace = createToken({ name: "Replace", pattern: /replace:/i });
24
- const ContentRegex = createToken({
25
- name: "ContentRegex",
26
- pattern: /content_regex:/i,
27
- });
28
- const StringLiteral = createToken({
29
- name: "StringLiteral",
30
- pattern: /"[^"]*"/,
31
- });
32
- const Selector = createToken({
33
- name: "Selector",
34
- pattern: /[\w.#\[\]*='"-]+/,
35
- });
36
- const Comment = createToken({
37
- name: "Comment",
38
- pattern: /--[^\n\r]*/,
39
- group: Lexer.SKIPPED,
40
- });
41
- const WhiteSpace = createToken({
42
- name: "WhiteSpace",
43
- pattern: /\s+/,
44
- group: Lexer.SKIPPED,
45
- });
46
- const allTokens = [
47
- WhiteSpace,
48
- Comment,
49
- Css,
50
- Do,
51
- DoBlock,
52
- End,
53
- Include,
54
- Exclude,
55
- RemoveAttr,
56
- RewriteAttr,
57
- RewriteContent,
58
- Attr,
59
- Regex,
60
- Replace,
61
- ContentRegex,
62
- StringLiteral,
63
- Selector,
64
- ];
65
- const RulesLexer = new Lexer(allTokens, {
66
- // Longer matches should be preferred over shorter ones
67
- ensureOptimizations: true,
68
- });
69
- // --- PARSER ---
86
+ const StringLiteral = createToken({ name: "StringLiteral", pattern: /"(?:\\.|[^"\\\r\n])*"/ });
87
+ const Comment = createToken({ name: "Comment", pattern: /--[^\n\r]*/, group: Lexer.SKIPPED });
88
+ const WhiteSpace = createToken({ name: "WhiteSpace", pattern: /\s+/, group: Lexer.SKIPPED });
89
+ const normalTokens = [WhiteSpace, Comment, Css, ContentRegex, RemoveAttr, RewriteAttr, RewriteContent, Include, Exclude, RegionKeyword, End, Attr, RegionName, Regex, Replace, StringLiteral];
90
+ const selectorTokens = [SelectorWhitespace, Selector, Do, DoBlock];
91
+ const allTokens = [...normalTokens, ...selectorTokens];
92
+ const RulesLexer = new Lexer({ defaultMode: "normal", modes: { normal: normalTokens, selector: selectorTokens } });
70
93
  class RulesParser extends CstParser {
71
- constructor() {
72
- super(allTokens);
73
- this.performSelfAnalysis();
74
- }
75
- ruleset = this.RULE("ruleset", () => {
76
- this.MANY(() => {
77
- this.SUBRULE(this.rule);
78
- });
79
- });
80
- rule = this.RULE("rule", () => {
81
- this.CONSUME(Css);
82
- this.CONSUME(Selector);
83
- this.OR([
84
- { ALT: () => this.SUBRULE(this.singleAction) },
85
- { ALT: () => this.SUBRULE(this.actionBlock) },
86
- ]);
87
- });
88
- singleAction = this.RULE("singleAction", () => {
89
- this.CONSUME(Do);
90
- this.SUBRULE(this.action);
91
- });
92
- actionBlock = this.RULE("actionBlock", () => {
93
- this.CONSUME(DoBlock);
94
- this.MANY(() => {
95
- this.SUBRULE(this.action);
96
- });
97
- this.CONSUME(End);
98
- });
99
- action = this.RULE("action", () => {
100
- this.OR([
101
- { ALT: () => this.SUBRULE(this.includeAction) },
102
- { ALT: () => this.SUBRULE(this.excludeAction) },
103
- { ALT: () => this.SUBRULE(this.removeAttrAction) },
104
- { ALT: () => this.SUBRULE(this.rewriteAttrAction) },
105
- { ALT: () => this.SUBRULE(this.rewriteContentAction) },
106
- ]);
107
- });
108
- includeAction = this.RULE("includeAction", () => {
109
- this.CONSUME(Include);
110
- this.OPTION(() => this.SUBRULE(this.contentRegexModifier));
111
- });
112
- excludeAction = this.RULE("excludeAction", () => {
113
- this.CONSUME(Exclude);
114
- this.OPTION(() => this.SUBRULE(this.contentRegexModifier));
115
- });
116
- removeAttrAction = this.RULE("removeAttrAction", () => {
117
- this.CONSUME(RemoveAttr);
118
- this.CONSUME(Attr);
119
- this.CONSUME(StringLiteral);
120
- });
121
- rewriteAttrAction = this.RULE("rewriteAttrAction", () => {
122
- this.CONSUME(RewriteAttr);
123
- this.CONSUME(Attr);
124
- this.CONSUME1(StringLiteral, { LABEL: "attr" });
125
- this.CONSUME(Regex);
126
- this.CONSUME2(StringLiteral, { LABEL: "regex" });
127
- this.CONSUME(Replace);
128
- this.CONSUME3(StringLiteral, { LABEL: "replace" });
129
- });
130
- rewriteContentAction = this.RULE("rewriteContentAction", () => {
131
- this.CONSUME(RewriteContent);
132
- this.CONSUME(Regex);
133
- this.CONSUME1(StringLiteral, { LABEL: "regex" });
134
- this.CONSUME(Replace);
135
- this.CONSUME2(StringLiteral, { LABEL: "replace" });
136
- });
137
- contentRegexModifier = this.RULE("contentRegexModifier", () => {
138
- this.CONSUME(ContentRegex);
139
- this.CONSUME(StringLiteral);
140
- });
94
+ constructor() { super(allTokens, { recoveryEnabled: false }); this.performSelfAnalysis(); }
95
+ ruleset = this.RULE("ruleset", () => { this.MANY(() => this.SUBRULE(this.rule)); this.CONSUME(EOF); });
96
+ rule = this.RULE("rule", () => { this.CONSUME(Css); this.CONSUME(Selector); this.OR([{ ALT: () => this.SUBRULE(this.singleAction) }, { ALT: () => this.SUBRULE(this.actionBlock) }]); });
97
+ singleAction = this.RULE("singleAction", () => { this.CONSUME(Do); this.OR([{ ALT: () => this.SUBRULE(this.action) }, { ALT: () => this.SUBRULE(this.regionAction) }]); });
98
+ actionBlock = this.RULE("actionBlock", () => { this.CONSUME(DoBlock); this.AT_LEAST_ONE(() => this.SUBRULE(this.action)); this.CONSUME(End); });
99
+ action = this.RULE("action", () => { this.OR([{ ALT: () => this.SUBRULE(this.includeAction) }, { ALT: () => this.SUBRULE(this.excludeAction) }, { ALT: () => this.SUBRULE(this.removeAttrAction) }, { ALT: () => this.SUBRULE(this.rewriteAttrAction) }, { ALT: () => this.SUBRULE(this.rewriteContentAction) }]); });
100
+ regionAction = this.RULE("regionAction", () => { this.CONSUME(RegionKeyword); this.CONSUME(RegionName); this.CONSUME(StringLiteral); });
101
+ includeAction = this.RULE("includeAction", () => { this.CONSUME(Include); this.OPTION(() => this.SUBRULE(this.contentRegexModifier)); });
102
+ excludeAction = this.RULE("excludeAction", () => { this.CONSUME(Exclude); this.OPTION(() => this.SUBRULE(this.contentRegexModifier)); });
103
+ removeAttrAction = this.RULE("removeAttrAction", () => { this.CONSUME(RemoveAttr); this.CONSUME(Attr); this.CONSUME(StringLiteral); });
104
+ rewriteAttrAction = this.RULE("rewriteAttrAction", () => { this.CONSUME(RewriteAttr); this.CONSUME(Attr); this.CONSUME1(StringLiteral, { LABEL: "attr" }); this.CONSUME(Regex); this.CONSUME2(StringLiteral, { LABEL: "regex" }); this.CONSUME(Replace); this.CONSUME3(StringLiteral, { LABEL: "replace" }); });
105
+ rewriteContentAction = this.RULE("rewriteContentAction", () => { this.CONSUME(RewriteContent); this.CONSUME(Regex); this.CONSUME1(StringLiteral, { LABEL: "regex" }); this.CONSUME(Replace); this.CONSUME2(StringLiteral, { LABEL: "replace" }); });
106
+ contentRegexModifier = this.RULE("contentRegexModifier", () => { this.CONSUME(ContentRegex); this.CONSUME(StringLiteral); });
141
107
  }
142
108
  const parser = new RulesParser();
143
- // --- VISITOR ---
109
+ function decodeString(token) {
110
+ const value = token.image.slice(1, -1);
111
+ return value.replace(/\\([\\"])/g, "$1");
112
+ }
113
+ function parsedAction(value) {
114
+ if (isAction(value) || isRegion(value))
115
+ return value;
116
+ throw new Error("Invalid action visitor result.");
117
+ }
144
118
  class CstToAstVisitor extends parser.getBaseCstVisitorConstructor() {
145
- constructor() {
146
- super();
147
- this.validateVisitor();
148
- }
119
+ constructor() { super(); this.validateVisitor(); }
149
120
  ruleset(ctx) {
150
- const rules = ctx.rule?.map((r) => this.visit(r)) || [];
151
- return { name: "ruleset", rules };
152
- }
153
- rule(ctx) {
154
- const selector = ctx.Selector[0].image.trim();
155
- const actionNode = ctx.singleAction || ctx.actionBlock;
156
- if (!actionNode) {
157
- throw new Error("Invalid 'rule' node in CST: No action node found.");
158
- }
159
- const actions = this.visit(actionNode[0]);
160
- return { selector, actions };
161
- }
162
- singleAction(ctx) {
163
- return [this.visit(ctx.action[0])];
164
- }
165
- actionBlock(ctx) {
166
- return ctx.action?.map((a) => this.visit(a)) || [];
167
- }
168
- action(ctx) {
169
- // Find which specific action was parsed (e.g., includeAction, excludeAction)
170
- const actionAlternative = ctx.includeAction ||
171
- ctx.excludeAction ||
172
- ctx.removeAttrAction ||
173
- ctx.rewriteAttrAction ||
174
- ctx.rewriteContentAction;
175
- if (!actionAlternative) {
176
- logger.error({ context: ctx }, "Invalid 'action' node in CST: No action alternative found");
177
- throw new Error("Invalid 'action' node in CST: No action alternative found.");
121
+ const rules = [];
122
+ const regions = [];
123
+ for (const node of ctx.rule ?? []) {
124
+ const value = this.visit(node);
125
+ if (isRule(value))
126
+ rules.push(value);
127
+ else if (isNamedRegion(value))
128
+ regions.push(value);
129
+ else
130
+ throw new Error("Invalid rule visitor result.");
178
131
  }
179
- const actionNode = actionAlternative[0];
180
- // Visit that specific action's node
181
- return this.visit(actionNode);
182
- }
183
- includeAction(ctx) {
184
- const modifiers = ctx.contentRegexModifier
185
- ? this.visit(ctx.contentRegexModifier[0])
186
- : {};
187
- return { action: "include", modifiers };
188
- }
189
- excludeAction(ctx) {
190
- const modifiers = ctx.contentRegexModifier
191
- ? this.visit(ctx.contentRegexModifier[0])
192
- : {};
193
- return { action: "exclude", modifiers };
132
+ return { name: "ruleset", rules, regions };
194
133
  }
195
- removeAttrAction(ctx) {
196
- const attr = ctx.StringLiteral[0].image.slice(1, -1);
197
- return { action: "remove_attr", modifiers: { attr } };
198
- }
199
- rewriteAttrAction(ctx) {
200
- const attr = ctx.attr[0].image.slice(1, -1);
201
- const regex = ctx.regex[0].image.slice(1, -1);
202
- const replace = ctx.replace[0].image.slice(1, -1);
203
- return { action: "rewrite_attr", modifiers: { attr, regex, replace } };
204
- }
205
- rewriteContentAction(ctx) {
206
- const regex = ctx.regex[0].image.slice(1, -1);
207
- const replace = ctx.replace[0].image.slice(1, -1);
208
- return { action: "rewrite_content", modifiers: { regex, replace } };
209
- }
210
- contentRegexModifier(ctx) {
211
- const content_regex = ctx.StringLiteral[0].image.slice(1, -1);
212
- return { content_regex };
134
+ rule(ctx) {
135
+ const node = ctx.singleAction?.[0] ?? ctx.actionBlock?.[0];
136
+ if (!node)
137
+ throw new Error("Invalid rule action.");
138
+ const value = this.visit(node);
139
+ if (!Array.isArray(value))
140
+ throw new Error("Invalid rule action result.");
141
+ const actions = value.map(parsedAction);
142
+ const region = actions.find(isRegion);
143
+ if (region && actions.length === 1)
144
+ return { selector: ctx.Selector[0].image.trim(), name: region.name };
145
+ if (region)
146
+ throw new Error("A named region must be declared as the only action for a selector.");
147
+ return { selector: ctx.Selector[0].image.trim(), actions: actions.filter(isAction) };
148
+ }
149
+ singleAction(ctx) { const node = ctx.action?.[0] ?? ctx.regionAction?.[0]; if (!node)
150
+ throw new Error("Invalid single action."); return [parsedAction(this.visit(node))]; }
151
+ actionBlock(ctx) { return ctx.action.map((node) => { const value = parsedAction(this.visit(node)); if (!isAction(value))
152
+ throw new Error("Invalid block action."); return value; }); }
153
+ action(ctx) { const nodes = ctx.includeAction ?? ctx.excludeAction ?? ctx.removeAttrAction ?? ctx.rewriteAttrAction ?? ctx.rewriteContentAction; if (!nodes?.[0])
154
+ throw new Error("Invalid action."); const value = parsedAction(this.visit(nodes[0])); if (!isAction(value))
155
+ throw new Error("Invalid action."); return value; }
156
+ regionAction(ctx) { return { kind: "region", name: decodeString(ctx.StringLiteral[0]) }; }
157
+ includeAction(ctx) { return { action: "include", modifiers: this.optionalContentRegex(ctx) }; }
158
+ excludeAction(ctx) { return { action: "exclude", modifiers: this.optionalContentRegex(ctx) }; }
159
+ removeAttrAction(ctx) { return { action: "remove_attr", modifiers: { attr: decodeString(ctx.StringLiteral[0]) } }; }
160
+ rewriteAttrAction(ctx) { return { action: "rewrite_attr", modifiers: { attr: decodeString(ctx.attr[0]), regex: decodeString(ctx.regex[0]), replace: decodeString(ctx.replace[0]) } }; }
161
+ rewriteContentAction(ctx) { return { action: "rewrite_content", modifiers: { regex: decodeString(ctx.regex[0]), replace: decodeString(ctx.replace[0]) } }; }
162
+ contentRegexModifier(ctx) { return { content_regex: decodeString(ctx.StringLiteral[0]) }; }
163
+ optionalContentRegex(ctx) {
164
+ if (!ctx.contentRegexModifier)
165
+ return {};
166
+ const value = this.visit(ctx.contentRegexModifier[0]);
167
+ if (typeof value !== "object" || value === null || !("content_regex" in value) || typeof value.content_regex !== "string")
168
+ throw new Error("Invalid content regex result.");
169
+ return { content_regex: value.content_regex };
213
170
  }
214
171
  }
215
172
  const visitor = new CstToAstVisitor();
216
- // --- Main processing function ---
173
+ function isFileError(error) { return error instanceof Error && "code" in error; }
217
174
  export async function processRulesDsl(rulesDirectory) {
218
175
  const rulesPath = resolve(process.cwd(), rulesDirectory, "rules.breakcheck");
219
- let rulesContent;
176
+ let content;
220
177
  try {
221
- rulesContent = readFileSync(rulesPath, "utf-8");
178
+ content = await readFile(rulesPath, "utf8");
222
179
  }
223
180
  catch (error) {
224
- logger.error({ error, rulesPath }, "Rules file not found");
225
- throw new Error(`Rules file not found: ${rulesPath}`);
226
- }
227
- const lexResult = RulesLexer.tokenize(rulesContent);
228
- if (lexResult.errors.length > 0) {
229
- const errors = lexResult.errors
230
- .map((err) => `Lexical error at line ${err.line}, column ${err.column}: ${err.message}`)
231
- .join("\n");
232
- logger.error({ errors: lexResult.errors, rulesDirectory }, "Lexical errors in rules file");
233
- throw new Error(`Lexical errors in rules file:\n${errors}`);
181
+ if (isFileError(error) && error.code === "ENOENT") {
182
+ logger.error({ error, rulesPath }, "Rules file not found");
183
+ throw new Error(`Rules file not found: ${rulesPath}`, { cause: error });
184
+ }
185
+ logger.error({ error, rulesPath }, "Failed to read rules file");
186
+ throw new Error(`Failed to read rules file: ${rulesPath}`, { cause: error });
234
187
  }
235
- parser.input = lexResult.tokens;
188
+ const lexed = RulesLexer.tokenize(content);
189
+ if (lexed.errors.length)
190
+ throw new Error(`Lexical errors in rules file:\n${lexed.errors.map((error) => `Lexical error at line ${error.line}, column ${error.column}: ${error.message}`).join("\n")}`);
191
+ parser.input = lexed.tokens;
236
192
  const cst = parser.ruleset();
237
- if (parser.errors.length > 0) {
238
- const errors = parser.errors
239
- .map((err) => `Syntax error at line ${err.token.startLine}, column ${err.token.startColumn}: ${err.message}`)
240
- .join("\n");
241
- logger.error({ errors: parser.errors, rulesDirectory }, "Syntax errors in rules file");
242
- throw new Error(`Syntax errors in rules file:\n${errors}`);
243
- }
244
- // Use the visitor to transform the CST to the final AST
193
+ if (parser.errors.length)
194
+ throw new Error(`Syntax errors in rules file:\n${parser.errors.map((error) => `Syntax error at line ${error.token.startLine}, column ${error.token.startColumn}: ${error.message}`).join("\n")}`);
245
195
  const result = visitor.visit(cst);
196
+ if (!isRuleset(result))
197
+ throw new Error("Invalid ruleset visitor result.");
246
198
  return { ...result, name: rulesDirectory };
247
199
  }
248
200
  //# sourceMappingURL=RulesDsl.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"RulesDsl.js","sourceRoot":"","sources":["../../../src/core/rules/RulesDsl.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"RulesDsl.js","sourceRoot":"","sources":["../../../src/core/rules/RulesDsl.ts"],"names":[],"mappings":"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"}
@@ -1,8 +1,10 @@
1
1
  import { Ruleset } from "../../types/rules.js";
2
2
  export declare class RulesEngine {
3
- private ruleset;
3
+ private readonly ruleset;
4
4
  private constructor();
5
5
  static create(rulesDirectoryOrRuleset?: string | Ruleset): Promise<RulesEngine>;
6
6
  process(html: string): string;
7
+ private serializeRegions;
7
8
  private applyAction;
9
+ private rewriteTextNodes;
8
10
  }
@@ -1,77 +1,163 @@
1
1
  import * as cheerio from "cheerio";
2
+ import { REGION_NAME_PATTERN } from "../../types/rules.js";
2
3
  import { processRulesDsl } from "./RulesDsl.js";
4
+ function objectValue(value, context) {
5
+ if (typeof value !== "object" || value === null || Array.isArray(value))
6
+ throw new Error(`${context} must be an object.`);
7
+ return value;
8
+ }
9
+ function keysAre(modifiers, allowed, context) {
10
+ const extra = Object.keys(modifiers).find((key) => !allowed.includes(key));
11
+ if (extra)
12
+ throw new Error(`${context} has unsupported modifier "${extra}".`);
13
+ }
14
+ function requiredString(modifiers, key, context, nonEmpty = false) {
15
+ const value = modifiers[key];
16
+ if (typeof value !== "string" || (nonEmpty && value.length === 0))
17
+ throw new Error(`${context} requires ${nonEmpty ? "a non-empty" : "a string"} "${key}" modifier.`);
18
+ return value;
19
+ }
20
+ function compileRegex(pattern, context, modifier) {
21
+ try {
22
+ return new RegExp(pattern);
23
+ }
24
+ catch (error) {
25
+ throw new Error(`${context} has invalid ${modifier} regex: ${error instanceof Error ? error.message : String(error)}`, { cause: error });
26
+ }
27
+ }
28
+ function compileAction(value, selector, ruleIndex, actionIndex) {
29
+ const action = objectValue(value, `Rule ${ruleIndex} action ${actionIndex}`);
30
+ const actionName = action.action;
31
+ const context = `Rule ${ruleIndex} selector "${selector}" action ${actionIndex}`;
32
+ const modifiers = action.modifiers === undefined ? {} : objectValue(action.modifiers, `${context} modifiers`);
33
+ switch (actionName) {
34
+ case "include":
35
+ case "exclude": {
36
+ keysAre(modifiers, ["content_regex"], context);
37
+ const contentPattern = modifiers.content_regex;
38
+ if (contentPattern !== undefined && typeof contentPattern !== "string")
39
+ throw new Error(`${context} modifier "content_regex" must be a string.`);
40
+ return { action: actionName, ...(typeof contentPattern === "string" ? { contentRegex: compileRegex(contentPattern, context, "content_regex") } : {}) };
41
+ }
42
+ case "remove_attr":
43
+ keysAre(modifiers, ["attr"], context);
44
+ return { action: "remove_attr", attr: requiredString(modifiers, "attr", context, true) };
45
+ case "rewrite_attr": {
46
+ keysAre(modifiers, ["attr", "regex", "replace"], context);
47
+ const attr = requiredString(modifiers, "attr", context, true);
48
+ const pattern = requiredString(modifiers, "regex", context);
49
+ return { action: "rewrite_attr", attr, regex: compileRegex(pattern, context, "regex"), replace: requiredString(modifiers, "replace", context) };
50
+ }
51
+ case "rewrite_content": {
52
+ keysAre(modifiers, ["regex", "replace"], context);
53
+ const pattern = requiredString(modifiers, "regex", context);
54
+ return { action: "rewrite_content", regex: compileRegex(pattern, context, "regex"), replace: requiredString(modifiers, "replace", context) };
55
+ }
56
+ default:
57
+ throw new Error(`${context} has unsupported action "${String(actionName)}".`);
58
+ }
59
+ }
60
+ function validateSelector(selector, context) {
61
+ if (typeof selector !== "string" || selector.trim().length === 0)
62
+ throw new Error(`${context} requires a non-empty selector.`);
63
+ const cloned = selector.slice();
64
+ try {
65
+ cheerio.load("", {}, false)(cloned);
66
+ }
67
+ catch (error) {
68
+ throw new Error(`${context} has invalid selector "${cloned}": ${error instanceof Error ? error.message : String(error)}`, { cause: error });
69
+ }
70
+ return cloned;
71
+ }
72
+ function compileRuleset(value) {
73
+ const input = objectValue(value, "Ruleset");
74
+ if (!Array.isArray(input.rules))
75
+ throw new Error("Ruleset rules must be an array.");
76
+ const rules = input.rules.map((candidate, ruleIndex) => {
77
+ const rule = objectValue(candidate, `Rule ${ruleIndex}`);
78
+ const selector = validateSelector(rule.selector, `Rule ${ruleIndex}`);
79
+ if (!Array.isArray(rule.actions) || rule.actions.length === 0)
80
+ throw new Error(`Rule ${ruleIndex} selector "${selector}" requires at least one action.`);
81
+ return { selector, actions: rule.actions.map((action, actionIndex) => compileAction(action, selector, ruleIndex, actionIndex)) };
82
+ });
83
+ const regionsValue = input.regions ?? [];
84
+ if (!Array.isArray(regionsValue))
85
+ throw new Error("Ruleset regions must be an array.");
86
+ const names = new Set();
87
+ const regions = regionsValue.map((candidate, regionIndex) => {
88
+ const region = objectValue(candidate, `Region ${regionIndex}`);
89
+ const selector = validateSelector(region.selector, `Region ${regionIndex}`);
90
+ if (typeof region.name !== "string" || !REGION_NAME_PATTERN.test(region.name))
91
+ throw new Error(`Invalid region name "${String(region.name)}". Region names must match [A-Za-z_][A-Za-z0-9_]*.`);
92
+ if (names.has(region.name))
93
+ throw new Error(`Duplicate region name: ${region.name}`);
94
+ names.add(region.name);
95
+ return { selector, name: region.name.slice() };
96
+ });
97
+ return { rules, regions };
98
+ }
3
99
  export class RulesEngine {
4
100
  ruleset;
5
101
  constructor(ruleset) {
6
102
  this.ruleset = ruleset;
7
103
  }
8
104
  static async create(rulesDirectoryOrRuleset) {
9
- const ruleset = typeof rulesDirectoryOrRuleset === "string"
10
- ? await processRulesDsl(rulesDirectoryOrRuleset)
11
- : rulesDirectoryOrRuleset ?? { name: "none", rules: [] };
12
- return new RulesEngine(ruleset);
105
+ const ruleset = typeof rulesDirectoryOrRuleset === "string" ? await processRulesDsl(rulesDirectoryOrRuleset) : rulesDirectoryOrRuleset ?? { name: "none", rules: [] };
106
+ return new RulesEngine(compileRuleset(ruleset));
13
107
  }
14
108
  process(html) {
15
109
  const $ = cheerio.load(html);
16
- // Apply each rule in sequence
17
110
  for (const rule of this.ruleset.rules) {
18
- const elements = $(rule.selector);
19
- elements.each((_, element) => {
20
- if (element.type === "tag") {
21
- for (const action of rule.actions) {
111
+ $(rule.selector).each((_, element) => {
112
+ if (element.type === "tag")
113
+ for (const action of rule.actions)
22
114
  this.applyAction($, element, action);
23
- }
24
- }
25
115
  });
26
116
  }
27
- return $.html();
117
+ return this.ruleset.regions.length ? this.serializeRegions($) : $.html();
28
118
  }
29
- applyAction($, element, action) {
30
- const $element = $(element);
31
- // Check content regex if specified
32
- if (action.modifiers?.content_regex) {
33
- const content = $element.text();
34
- const regex = new RegExp(action.modifiers.content_regex);
35
- if (!regex.test(content)) {
36
- return;
37
- }
119
+ serializeRegions($) {
120
+ const output = cheerio.load("<breakcheck-regions></breakcheck-regions>", {}, false);
121
+ const root = output("breakcheck-regions");
122
+ const regions = [...this.ruleset.regions].sort((left, right) => left.name.localeCompare(right.name));
123
+ for (const region of regions) {
124
+ const fragments = [];
125
+ $(region.selector).each((_, element) => { if (element.type === "tag")
126
+ fragments.push($.html(element)); });
127
+ if (fragments.length)
128
+ root.append(output("<region></region>").attr("name", region.name).append(fragments.join("")));
38
129
  }
130
+ return output.html();
131
+ }
132
+ applyAction($, element, action) {
133
+ const selected = $(element);
134
+ if ("contentRegex" in action && action.contentRegex && !action.contentRegex.test(selected.text()))
135
+ return;
39
136
  switch (action.action) {
137
+ case "include": return;
40
138
  case "exclude":
41
- $element.remove();
42
- break;
43
- case "include":
44
- // No action needed for include
45
- break;
139
+ selected.remove();
140
+ return;
46
141
  case "remove_attr":
47
- if (action.modifiers && "attr" in action.modifiers) {
48
- $element.removeAttr(action.modifiers.attr);
49
- }
50
- break;
51
- case "rewrite_attr":
52
- if (action.modifiers &&
53
- "attr" in action.modifiers &&
54
- "regex" in action.modifiers &&
55
- "replace" in action.modifiers) {
56
- const currentValue = $element.attr(action.modifiers.attr);
57
- if (currentValue) {
58
- const regex = new RegExp(action.modifiers.regex);
59
- const newValue = currentValue.replace(regex, action.modifiers.replace);
60
- $element.attr(action.modifiers.attr, newValue);
61
- }
62
- }
63
- break;
142
+ selected.removeAttr(action.attr);
143
+ return;
144
+ case "rewrite_attr": {
145
+ const current = selected.attr(action.attr);
146
+ if (current !== undefined)
147
+ selected.attr(action.attr, current.replace(action.regex, action.replace));
148
+ return;
149
+ }
64
150
  case "rewrite_content":
65
- if (action.modifiers &&
66
- "regex" in action.modifiers &&
67
- "replace" in action.modifiers) {
68
- const content = $element.text();
69
- const regex = new RegExp(action.modifiers.regex);
70
- const newContent = content.replace(regex, action.modifiers.replace);
71
- $element.text(newContent);
72
- }
73
- break;
151
+ this.rewriteTextNodes($, element, action.regex, action.replace);
74
152
  }
75
153
  }
154
+ rewriteTextNodes($, element, regex, replace) {
155
+ $(element).contents().each((_, child) => {
156
+ if (child.type === "text")
157
+ child.data = child.data.replace(regex, replace);
158
+ else if (child.type === "tag")
159
+ this.rewriteTextNodes($, child, regex, replace);
160
+ });
161
+ }
76
162
  }
77
163
  //# sourceMappingURL=RulesEngine.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"RulesEngine.js","sourceRoot":"","sources":["../../../src/core/rules/RulesEngine.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"RulesEngine.js","sourceRoot":"","sources":["../../../src/core/rules/RulesEngine.ts"],"names":[],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- import http from "http";
1
+ import http from "node:http";
2
2
  export declare function startViewServer(comparisonName: string, port?: number): Promise<http.Server>;
@@ -1,6 +1,7 @@
1
1
  import express from "express";
2
- import path from "path";
3
- import { fileURLToPath } from "url";
2
+ import http from "node:http";
3
+ import path from "node:path";
4
+ import { fileURLToPath } from "node:url";
4
5
  import { logger } from "../../lib/logger.js";
5
6
  import { findRootDir } from "../../lib/root.js";
6
7
  import { createDiffHandler, createIndexHandler } from "./index.handlers.js";
@@ -16,22 +17,25 @@ export async function startViewServer(comparisonName, port = 8080) {
16
17
  app.get("/diff", createDiffHandler(comparisonDir));
17
18
  app.use(express.static(path.join(__dirname, "..", "..", "public")));
18
19
  return new Promise((resolve, reject) => {
19
- const server = app.listen(port, () => {
20
- // Once listening, we no longer need the startup error handler
21
- server.removeListener('error', startupErrorHandler);
22
- logger.info(`🌐 View server started at http://localhost:${port}`);
23
- resolve(server);
24
- });
25
- // Define a specific error handler for startup
26
- const startupErrorHandler = (err) => {
27
- if (err.code === 'EADDRINUSE') {
20
+ const server = http.createServer(app);
21
+ const startupErrorHandler = (error) => {
22
+ server.removeListener("listening", startupListeningHandler);
23
+ server.removeListener("error", startupErrorHandler);
24
+ if (error.code === "EADDRINUSE") {
28
25
  reject(new Error(`Port ${port} is already in use.`));
29
26
  }
30
27
  else {
31
- reject(err);
28
+ reject(error);
32
29
  }
33
30
  };
34
- server.on('error', startupErrorHandler);
31
+ const startupListeningHandler = () => {
32
+ server.removeListener("error", startupErrorHandler);
33
+ logger.info(`🌐 View server started at http://localhost:${port}`);
34
+ resolve(server);
35
+ };
36
+ server.once("error", startupErrorHandler);
37
+ server.once("listening", startupListeningHandler);
38
+ server.listen(port);
35
39
  });
36
40
  }
37
41
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/core/view/index.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,MAAM,SAAS,CAAC;AAE9B,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;AACpC,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAC7C,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAE5E,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAClD,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;AAE3C,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,cAAsB,EACtB,OAAe,IAAI;IAEnB,MAAM,GAAG,GAAG,OAAO,EAAE,CAAC;IAEtB,MAAM,OAAO,GAAG,MAAM,WAAW,EAAE,CAAC;IACpC,MAAM,aAAa,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,aAAa,EAAE,cAAc,CAAC,CAAC;IAExE,GAAG,CAAC,GAAG,CAAC,aAAa,EAAE,KAAK,CAAC,CAAC;IAC9B,GAAG,CAAC,GAAG,CAAC,OAAO,EAAE,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC;IAE5D,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,kBAAkB,CAAC,aAAa,CAAC,CAAC,CAAC;IAChD,GAAG,CAAC,GAAG,CAAC,OAAO,EAAE,iBAAiB,CAAC,aAAa,CAAC,CAAC,CAAC;IAEnD,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC;IAEpE,OAAO,IAAI,OAAO,CAAc,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QAClD,MAAM,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,GAAG,EAAE;YACnC,8DAA8D;YAC9D,MAAM,CAAC,cAAc,CAAC,OAAO,EAAE,mBAAmB,CAAC,CAAC;YACpD,MAAM,CAAC,IAAI,CAAC,8CAA8C,IAAI,EAAE,CAAC,CAAC;YAClE,OAAO,CAAC,MAAM,CAAC,CAAC;QAClB,CAAC,CAAC,CAAC;QAEH,8CAA8C;QAC9C,MAAM,mBAAmB,GAAG,CAAC,GAA0B,EAAE,EAAE;YACzD,IAAI,GAAG,CAAC,IAAI,KAAK,YAAY,EAAE,CAAC;gBAC9B,MAAM,CAAC,IAAI,KAAK,CAAC,QAAQ,IAAI,qBAAqB,CAAC,CAAC,CAAC;YACvD,CAAC;iBAAM,CAAC;gBACN,MAAM,CAAC,GAAG,CAAC,CAAC;YACd,CAAC;QACH,CAAC,CAAC;QAEF,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,mBAAmB,CAAC,CAAC;IAC1C,CAAC,CAAC,CAAC;AACL,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/core/view/index.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,MAAM,SAAS,CAAC;AAC9B,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAC7C,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAE5E,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAClD,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;AAE3C,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,cAAsB,EACtB,OAAe,IAAI;IAEnB,MAAM,GAAG,GAAG,OAAO,EAAE,CAAC;IAEtB,MAAM,OAAO,GAAG,MAAM,WAAW,EAAE,CAAC;IACpC,MAAM,aAAa,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,aAAa,EAAE,cAAc,CAAC,CAAC;IAExE,GAAG,CAAC,GAAG,CAAC,aAAa,EAAE,KAAK,CAAC,CAAC;IAC9B,GAAG,CAAC,GAAG,CAAC,OAAO,EAAE,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC;IAE5D,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,kBAAkB,CAAC,aAAa,CAAC,CAAC,CAAC;IAChD,GAAG,CAAC,GAAG,CAAC,OAAO,EAAE,iBAAiB,CAAC,aAAa,CAAC,CAAC,CAAC;IAEnD,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC;IAEpE,OAAO,IAAI,OAAO,CAAc,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QAClD,MAAM,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC;QAEtC,MAAM,mBAAmB,GAAG,CAAC,KAA4B,EAAE,EAAE;YAC3D,MAAM,CAAC,cAAc,CAAC,WAAW,EAAE,uBAAuB,CAAC,CAAC;YAC5D,MAAM,CAAC,cAAc,CAAC,OAAO,EAAE,mBAAmB,CAAC,CAAC;YAEpD,IAAI,KAAK,CAAC,IAAI,KAAK,YAAY,EAAE,CAAC;gBAChC,MAAM,CAAC,IAAI,KAAK,CAAC,QAAQ,IAAI,qBAAqB,CAAC,CAAC,CAAC;YACvD,CAAC;iBAAM,CAAC;gBACN,MAAM,CAAC,KAAK,CAAC,CAAC;YAChB,CAAC;QACH,CAAC,CAAC;QAEF,MAAM,uBAAuB,GAAG,GAAG,EAAE;YACnC,MAAM,CAAC,cAAc,CAAC,OAAO,EAAE,mBAAmB,CAAC,CAAC;YACpD,MAAM,CAAC,IAAI,CAAC,8CAA8C,IAAI,EAAE,CAAC,CAAC;YAClE,OAAO,CAAC,MAAM,CAAC,CAAC;QAClB,CAAC,CAAC;QAEF,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,mBAAmB,CAAC,CAAC;QAC1C,MAAM,CAAC,IAAI,CAAC,WAAW,EAAE,uBAAuB,CAAC,CAAC;QAClD,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IACtB,CAAC,CAAC,CAAC;AACL,CAAC"}
@@ -6,22 +6,26 @@
6
6
  * The type of action to perform
7
7
  */
8
8
  export type ActionType = "include" | "exclude" | "remove_attr" | "rewrite_attr" | "rewrite_content";
9
+ /**
10
+ * Valid names for named regions in a ruleset.
11
+ */
12
+ export declare const REGION_NAME_PATTERN: RegExp;
9
13
  /**
10
14
  * Base interface for action modifiers
11
15
  */
12
- interface BaseActionModifiers {
16
+ export interface ContentFilterModifiers {
13
17
  content_regex?: string;
14
18
  }
15
19
  /**
16
20
  * Modifiers for remove_attr action
17
21
  */
18
- interface RemoveAttrModifiers extends BaseActionModifiers {
22
+ export interface RemoveAttrModifiers {
19
23
  attr: string;
20
24
  }
21
25
  /**
22
26
  * Modifiers for rewrite_attr action
23
27
  */
24
- interface RewriteAttrModifiers extends BaseActionModifiers {
28
+ export interface RewriteAttrModifiers {
25
29
  attr: string;
26
30
  regex: string;
27
31
  replace: string;
@@ -29,21 +33,30 @@ interface RewriteAttrModifiers extends BaseActionModifiers {
29
33
  /**
30
34
  * Modifiers for rewrite_content action
31
35
  */
32
- interface RewriteContentModifiers extends BaseActionModifiers {
36
+ export interface RewriteContentModifiers {
33
37
  regex: string;
34
38
  replace: string;
35
39
  }
36
40
  /**
37
41
  * Union type for all possible action modifiers
38
42
  */
39
- export type ActionModifiers = RemoveAttrModifiers | RewriteAttrModifiers | RewriteContentModifiers | BaseActionModifiers;
43
+ export type ActionModifiers = RemoveAttrModifiers | RewriteAttrModifiers | RewriteContentModifiers | ContentFilterModifiers;
40
44
  /**
41
45
  * Represents a single action to be performed
42
46
  */
43
- export interface Action {
44
- action: ActionType;
45
- modifiers?: ActionModifiers;
46
- }
47
+ export type Action = {
48
+ action: "include" | "exclude";
49
+ modifiers?: ContentFilterModifiers;
50
+ } | {
51
+ action: "remove_attr";
52
+ modifiers: RemoveAttrModifiers;
53
+ } | {
54
+ action: "rewrite_attr";
55
+ modifiers: RewriteAttrModifiers;
56
+ } | {
57
+ action: "rewrite_content";
58
+ modifiers: RewriteContentModifiers;
59
+ };
47
60
  /**
48
61
  * Represents a single rule with a selector and its actions
49
62
  */
@@ -51,11 +64,19 @@ export interface Rule {
51
64
  selector: string;
52
65
  actions: Action[];
53
66
  }
67
+ /**
68
+ * A named section of the processed document to include in a comparison.
69
+ */
70
+ export interface Region {
71
+ selector: string;
72
+ name: string;
73
+ }
54
74
  /**
55
75
  * The root structure of the JSON rules document
56
76
  */
57
77
  export interface Ruleset {
58
78
  name: string;
59
79
  rules: Rule[];
80
+ /** Named regions are optional for backwards-compatible inline rulesets. */
81
+ regions?: Region[];
60
82
  }
61
- export {};
@@ -2,5 +2,8 @@
2
2
  * Type definitions for Breakcheck JSON Rules
3
3
  * Based on the JSON Rules Specification
4
4
  */
5
- export {};
5
+ /**
6
+ * Valid names for named regions in a ruleset.
7
+ */
8
+ export const REGION_NAME_PATTERN = /^[A-Za-z_][A-Za-z0-9_]*$/;
6
9
  //# sourceMappingURL=rules.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"rules.js","sourceRoot":"","sources":["../../src/types/rules.ts"],"names":[],"mappings":"AAAA;;;GAGG"}
1
+ {"version":3,"file":"rules.js","sourceRoot":"","sources":["../../src/types/rules.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAYH;;GAEG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAG,0BAA0B,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cleaver/breakcheck-core",
3
- "version": "0.2.2",
3
+ "version": "0.2.4",
4
4
  "type": "module",
5
5
  "engines": {
6
6
  "node": ">=22"