cloudflare-expression-lint 0.4.7 → 0.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/rewriter.js +33 -7
- package/dist/rewriter.js.map +1 -1
- package/package.json +1 -1
package/dist/rewriter.js
CHANGED
|
@@ -24,8 +24,11 @@ export function rewriteExpressions(content, expressions, options) {
|
|
|
24
24
|
for (const expr of uniqueExprs) {
|
|
25
25
|
const formatted = formatExpression(expr.expression, options);
|
|
26
26
|
const isMultiLine = formatted.includes('\n');
|
|
27
|
+
// Compare against the canonical (parsed and re-printed) form of the original
|
|
28
|
+
// to handle whitespace differences from >- block scalars
|
|
29
|
+
const canonicalExpr = canonicalize(expr.expression);
|
|
27
30
|
// Skip if no change needed and not converting block scalars
|
|
28
|
-
if (formatted ===
|
|
31
|
+
if (formatted === canonicalExpr && !options?.convertBlockScalars)
|
|
29
32
|
continue;
|
|
30
33
|
if (!isMultiLine && !options?.convertBlockScalars)
|
|
31
34
|
continue;
|
|
@@ -37,14 +40,24 @@ export function rewriteExpressions(content, expressions, options) {
|
|
|
37
40
|
break;
|
|
38
41
|
const { lineStart, lineEnd, indent, key, isBlockScalar } = location;
|
|
39
42
|
searchFrom = lineStart; // next search ends before this match
|
|
40
|
-
// Skip if already >- and
|
|
41
|
-
|
|
43
|
+
// Skip if already >- and the formatted output matches the existing block content.
|
|
44
|
+
// Compare by reading the existing block lines and checking if they'd produce
|
|
45
|
+
// the same >- block as the formatter would write.
|
|
46
|
+
if (isBlockScalar === '>-' && isMultiLine) {
|
|
47
|
+
const existingBlock = content.substring(lineStart, lineEnd);
|
|
48
|
+
const exprIndent = indent + ' ';
|
|
49
|
+
const formattedLines = formatted.split('\n').map(l => exprIndent + l).join('\n');
|
|
50
|
+
const wouldWrite = `${indent}${key} >-\n${formattedLines}\n`;
|
|
51
|
+
if (existingBlock === wouldWrite)
|
|
52
|
+
continue;
|
|
53
|
+
}
|
|
54
|
+
if (isBlockScalar === '>-' && !isMultiLine && formatted === canonicalExpr)
|
|
42
55
|
continue;
|
|
43
56
|
// Skip if inline, not multi-line, and content hasn't changed
|
|
44
|
-
if (!isBlockScalar && !isMultiLine && formatted ===
|
|
57
|
+
if (!isBlockScalar && !isMultiLine && formatted === canonicalExpr)
|
|
45
58
|
continue;
|
|
46
59
|
// When converting block scalars, always rewrite |/|- to >-
|
|
47
|
-
if (isBlockScalar && isBlockScalar !== '>-' && !isMultiLine && formatted ===
|
|
60
|
+
if (isBlockScalar && isBlockScalar !== '>-' && !isMultiLine && formatted === canonicalExpr) {
|
|
48
61
|
// Short expression in |/|- — convert to inline
|
|
49
62
|
const replacement = `${indent}${key} ${formatted}\n`;
|
|
50
63
|
modified = modified.substring(0, lineStart) + replacement + modified.substring(lineEnd);
|
|
@@ -61,11 +74,22 @@ export function rewriteExpressions(content, expressions, options) {
|
|
|
61
74
|
}
|
|
62
75
|
return { content: modified, count };
|
|
63
76
|
}
|
|
77
|
+
/** Canonicalize an expression by parsing and re-formatting as single line.
|
|
78
|
+
* This normalizes whitespace differences from >- block scalar joining. */
|
|
79
|
+
function canonicalize(expression) {
|
|
80
|
+
try {
|
|
81
|
+
// formatExpression parses and re-prints, normalizing whitespace
|
|
82
|
+
return formatExpression(expression, { maxWidth: Infinity });
|
|
83
|
+
}
|
|
84
|
+
catch {
|
|
85
|
+
return expression.split('\n').map(l => l.trim()).filter(l => l !== '').join(' ').trim();
|
|
86
|
+
}
|
|
87
|
+
}
|
|
64
88
|
/** Deduplicate expressions by their trimmed value */
|
|
65
89
|
function deduplicateExpressions(expressions) {
|
|
66
90
|
const seen = new Set();
|
|
67
91
|
return expressions.filter(e => {
|
|
68
|
-
const key = e.expression
|
|
92
|
+
const key = canonicalize(e.expression);
|
|
69
93
|
if (seen.has(key))
|
|
70
94
|
return false;
|
|
71
95
|
seen.add(key);
|
|
@@ -77,7 +101,9 @@ function deduplicateExpressions(expressions) {
|
|
|
77
101
|
* searching backwards from `beforeOffset`.
|
|
78
102
|
*/
|
|
79
103
|
export function findExpressionLocation(content, expression, beforeOffset) {
|
|
80
|
-
|
|
104
|
+
// Normalize the search expression: collapse whitespace so multi-line
|
|
105
|
+
// scanner output matches against joined block scalar content
|
|
106
|
+
const trimmed = expression.split('\n').map(l => l.trim()).filter(l => l !== '').join(' ').trim();
|
|
81
107
|
const lines = content.split('\n');
|
|
82
108
|
let offset = 0;
|
|
83
109
|
const offsets = [];
|
package/dist/rewriter.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rewriter.js","sourceRoot":"","sources":["../src/rewriter.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,gBAAgB,EAAsB,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"rewriter.js","sourceRoot":"","sources":["../src/rewriter.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "cloudflare-expression-lint",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.5.0",
|
|
4
4
|
"description": "A parser, validator, and linter for Cloudflare Rules Language expressions with phase-aware field and function checking",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.js",
|