@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 +2 -0
- package/dist/core/rules/RulesDsl.js +175 -223
- package/dist/core/rules/RulesDsl.js.map +1 -1
- package/dist/core/rules/RulesEngine.d.ts +3 -1
- package/dist/core/rules/RulesEngine.js +138 -52
- package/dist/core/rules/RulesEngine.js.map +1 -1
- package/dist/core/view/index.d.ts +1 -1
- package/dist/core/view/index.js +17 -13
- package/dist/core/view/index.js.map +1 -1
- package/dist/types/rules.d.ts +31 -10
- package/dist/types/rules.js +4 -1
- package/dist/types/rules.js.map +1 -1
- package/package.json +1 -1
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 {
|
|
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
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
}
|
|
17
|
-
|
|
18
|
-
name
|
|
19
|
-
|
|
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
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
const
|
|
29
|
-
|
|
30
|
-
|
|
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
|
-
|
|
73
|
-
|
|
74
|
-
}
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
});
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
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
|
-
|
|
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 =
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
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
|
-
|
|
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
|
-
|
|
196
|
-
const
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
const
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
return {
|
|
209
|
-
}
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
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
|
-
|
|
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
|
|
176
|
+
let content;
|
|
220
177
|
try {
|
|
221
|
-
|
|
178
|
+
content = await readFile(rulesPath, "utf8");
|
|
222
179
|
}
|
|
223
180
|
catch (error) {
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
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
|
-
|
|
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
|
|
238
|
-
|
|
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
|
-
|
|
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
|
-
|
|
19
|
-
|
|
20
|
-
|
|
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
|
-
|
|
30
|
-
const
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
const
|
|
35
|
-
|
|
36
|
-
|
|
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
|
-
|
|
42
|
-
|
|
43
|
-
case "include":
|
|
44
|
-
// No action needed for include
|
|
45
|
-
break;
|
|
139
|
+
selected.remove();
|
|
140
|
+
return;
|
|
46
141
|
case "remove_attr":
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
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
|
-
|
|
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":"AAAA,OAAO,KAAK,OAAO,MAAM,SAAS,CAAC;
|
|
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>;
|
package/dist/core/view/index.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import express from "express";
|
|
2
|
-
import
|
|
3
|
-
import
|
|
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 =
|
|
20
|
-
|
|
21
|
-
server.removeListener(
|
|
22
|
-
|
|
23
|
-
|
|
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(
|
|
28
|
+
reject(error);
|
|
32
29
|
}
|
|
33
30
|
};
|
|
34
|
-
|
|
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;
|
|
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"}
|
package/dist/types/rules.d.ts
CHANGED
|
@@ -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
|
|
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
|
|
22
|
+
export interface RemoveAttrModifiers {
|
|
19
23
|
attr: string;
|
|
20
24
|
}
|
|
21
25
|
/**
|
|
22
26
|
* Modifiers for rewrite_attr action
|
|
23
27
|
*/
|
|
24
|
-
interface RewriteAttrModifiers
|
|
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
|
|
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 |
|
|
43
|
+
export type ActionModifiers = RemoveAttrModifiers | RewriteAttrModifiers | RewriteContentModifiers | ContentFilterModifiers;
|
|
40
44
|
/**
|
|
41
45
|
* Represents a single action to be performed
|
|
42
46
|
*/
|
|
43
|
-
export
|
|
44
|
-
action:
|
|
45
|
-
modifiers?:
|
|
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 {};
|
package/dist/types/rules.js
CHANGED
|
@@ -2,5 +2,8 @@
|
|
|
2
2
|
* Type definitions for Breakcheck JSON Rules
|
|
3
3
|
* Based on the JSON Rules Specification
|
|
4
4
|
*/
|
|
5
|
-
|
|
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
|
package/dist/types/rules.js.map
CHANGED
|
@@ -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"}
|