cloudflare-expression-lint 0.3.4 → 0.4.1

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/CLAUDE.md CHANGED
@@ -1,41 +1,35 @@
1
1
  # cloudflare-expression-lint
2
2
 
3
3
  ## What This Is
4
- A TypeScript parser, validator, and linter for Cloudflare Rules Language expressions. It catches errors in Cloudflare expressions before they reach `terraform apply`. Published on npm as `cloudflare-expression-lint`.
4
+ A TypeScript parser, validator, linter, formatter, and auto-fixer for Cloudflare Rules Language expressions. It catches errors in Cloudflare expressions before they reach `terraform apply`. Published on npm as `cloudflare-expression-lint`.
5
5
 
6
6
  ## Project Structure
7
7
  - `src/lexer.ts` — Tokenizer (string → Token[]), supports raw strings (r"...")
8
- - `src/parser.ts` — Recursive-descent parser (Token[] → AST) with correct operator precedence
9
- - `src/validator.ts` — Semantic validator (AST → Diagnostic[]) with:
10
- - Operator type checking (e.g., `contains` only on String)
11
- - Deprecated field detection with replacement suggestions
12
- - Phase-specific field availability
13
- - Function context and usage limit validation
14
- - Account-level zone plan filter checking
15
- - Expression Builder compatibility checking
16
- - Ambiguous operator precedence detection
17
- - Operator style checking (C-like vs English notation)
18
- - Expression whitespace detection
19
- - Boolean comparison style hints
20
- - Regex count limits, CIDR validation, wildcard pattern checks
21
- - Named list name validation, header key casing warnings
22
- - Template placeholder detection
8
+ - `src/parser.ts` — Recursive-descent parser (Token[] → AST), tracks raw string flag
9
+ - `src/validator.ts` — Semantic validator (AST → Diagnostic[]) with Builder compatibility checking, operator style, ambiguous precedence, deprecated fields, phase validation, function context/limits
10
+ - `src/fixer.ts` Auto-fixer (AST AST) for Builder compatibility: wraps bare expressions, merges and-groups, De Morgan's rewrites, operator style normalization
11
+ - `src/formatter.ts` Prettifier (AST multi-line string) that breaks on and/or boundaries, never mid-condition. Preserves raw strings.
12
+ - `src/rewriter.ts` — YAML file rewriter that replaces expressions in-place using >- block scalars. Supports converting | and |- to >-
23
13
  - `src/yaml-scanner.ts` — YAML file scanner with configurable expression key and phase mappings, account-level path detection
24
14
  - `src/eslint-plugin.ts` — ESLint plugin adapter (optional, uses yaml-eslint-parser)
25
- - `src/cli.ts` — CLI entry point with --config, --expr-key, --phase-map, --warn-exit-code, --ignore-code flags
26
- - `src/types.ts` — All type definitions
27
- - `src/schemas/fields.ts` — Field registry (211+ fields with types, deprecation, phase availability, load balancing and DNS fields)
28
- - `src/schemas/functions.ts` — Function registry (25+ functions with context restrictions, including hash_in_range)
15
+ - `src/cli.ts` — CLI with --fix, --prettify, --check, --convert-block-scalars, --config, --operator-style, --warn-exit-code flags
16
+ - `src/types.ts` — All type definitions (StringLiteralNode has `raw` flag)
17
+ - `src/schemas/fields.ts` — Field registry (211+ fields)
18
+ - `src/schemas/functions.ts` — Function registry (25+ functions)
29
19
  - `src/schemas/operators.ts` — Operator definitions with type constraints
30
- - `src/__tests__/` — Test suite (418 tests across 13 files)
31
- - `scripts/sync-cloudflare-docs.ts` — Automated sync from cloudflare-docs repo (fields + functions)
20
+ - `src/__tests__/` — Test suite (546 tests across 16 files)
21
+ - `scripts/sync-cloudflare-docs.ts` — Automated sync from cloudflare-docs repo
32
22
 
33
23
  ## Commands
34
24
  - `npm test` — Run tests (vitest)
35
25
  - `npm run build` — Build TypeScript to dist/
36
26
  - `node dist/cli.js -e 'EXPRESSION'` — Validate a single expression
37
- - `node dist/cli.js config/**/*.yaml` — Scan YAML files
38
- - `node dist/cli.js --config .cf-expr-lint.json config/**/*.yaml` — Scan with custom mappings
27
+ - `node dist/cli.js --fix -e 'EXPRESSION'` — Auto-fix a single expression
28
+ - `node dist/cli.js --prettify -e 'EXPRESSION'` — Format a single expression
29
+ - `node dist/cli.js --fix config/**/*.yaml` — Fix all YAML files
30
+ - `node dist/cli.js --fix --check config/**/*.yaml` — Dry-run fix check
31
+ - `node dist/cli.js --prettify --convert-block-scalars config/**/*.yaml` — Prettify and convert block scalars
32
+ - `node dist/cli.js --prettify --check config/**/*.yaml` — Dry-run prettify check
39
33
  - `npm run sync-docs` — Check for Cloudflare field/function updates (dry run)
40
34
  - `npm run sync-docs:apply` — Apply field/function updates from Cloudflare docs
41
35
 
@@ -45,83 +39,38 @@ npm version patch # bumps version, creates commit + tag
45
39
  git push && git push --tags # triggers auto-publish via OIDC Trusted Publishing
46
40
  ```
47
41
 
48
- ## How to Add a New Field
49
- Add an entry to the `FIELDS` array in `src/schemas/fields.ts`:
50
- ```typescript
51
- { name: 'cf.new_field', type: 'String' },
52
- // With deprecation:
53
- { name: 'old.field', type: 'String', deprecated: true, replacement: 'new.field' },
54
- // With phase restriction:
55
- { name: 'http.response.new', type: 'String', phases: ['http_response_headers_transform'] },
56
- ```
57
-
58
- ## How to Add a New Function
59
- Add an entry to the `FUNCTIONS` array in `src/schemas/functions.ts`:
60
- ```typescript
61
- {
62
- name: 'new_function',
63
- params: [{ name: 'input', type: 'String' }],
64
- returnType: 'String',
65
- contexts: ['all'], // or ['filter'], ['rewrite_url', 'rewrite_header'], etc.
66
- maxPerExpression: 1, // optional usage limit
67
- },
68
- ```
69
-
70
- ## How to Customize YAML Scanning
71
- The scanner only detects the `expression` key by default. Custom expression keys and phase mappings can be added via:
72
- - CLI: `--expr-key key:type[:phase]` and `--phase-map yaml_key:phase`
73
- - Config file: `.cf-expr-lint.json` with `expressionKeys`, `phaseMappings`, `ignoreCodes`, `accountLevelPaths`
74
- - Programmatic API: `scanYaml(content, file, { expressionKeys: {...}, phaseMappings: {...} })`
75
-
76
- Custom mappings always merge with built-in defaults.
77
-
78
- ## Config File Options
79
- ```json
80
- {
81
- "expressionKeys": { "my_key": { "type": "filter", "phaseHint": "http_request_firewall_custom" } },
82
- "phaseMappings": { "my_waf_rules": "http_request_firewall_custom" },
83
- "ignoreCodes": ["contains-placeholders", "parse-error-placeholder"],
84
- "accountLevelPaths": ["config/account/"],
85
- "operatorStyle": "off"
86
- }
87
- ```
88
-
89
- ## Expression Types
90
- - `filter` — Boolean expressions (the "when" condition in rules)
91
- - `rewrite_url` — URL rewrite value expressions (e.g., regex_replace result)
92
- - `rewrite_header` — Header value expressions
93
- - `redirect_target` — Redirect target URL expressions
94
-
95
42
  ## Cloudflare Expression Builder Format
96
43
  The Builder requires:
97
44
  - Single group: `(cond [and cond ...])` — conditions joined by `and` inside one `()`
98
45
  - Or-chain: `(group) or (group) or ...` — groups joined by `or` at top level
99
46
  - `not` is a toggle on individual conditions INSIDE groups: `(not A and not B)`
100
- - Each condition: comparison, in-expression, or boolean field
47
+ - Each condition: bare comparison, in-expression, boolean field, or function (starts_with, ends_with)
48
+ - Conditions inside and-groups must NOT be individually wrapped: `(A and B)` not `((A) and (B))`
101
49
 
102
- NOT Builder-compatible (with suggested rewrites):
50
+ NOT Builder-compatible (with `--fix` auto-rewrites):
103
51
  - `(A) and (B)` → merge: `(A and B)`
104
52
  - `(A or B)` → split: `(A) or (B)`
105
53
  - `not (A)` → move not inside: `(not A)`
106
54
  - `not (A or B)` → De Morgan's: `(not A and not B)`
55
+ - `not (A and B)` → De Morgan's: `(not A) or (not B)`
107
56
  - `((A) or (B))` → remove outer parens: `(A) or (B)`
108
- - `((A or B) and C)` → distribute: `(A and C) or (B and C)`
109
- - Functions/array unpacks are silently skipped (no Builder fix possible)
57
+ - `((A) and (B))` → unwrap: `(A and B)`
110
58
 
111
- ## CI Integration
112
- The CLI supports exit codes for CI pipelines:
113
- - `--warn-exit-code 2` exit 2 on warnings (use with GitLab `allow_failure: exit_codes: [2]`)
114
- - `--quiet` — only show errors
115
- - `--ignore-code <code>` — suppress specific diagnostic codes
116
- - `--operator-style <english|clike|off>` — operator style preference (default: english)
59
+ NOT auto-fixable (flagged as info only):
60
+ - `((A or B) and C)` would require distribution, too risky to auto-apply
61
+ - Expressions with `lower()`, `len()` as comparison LHS not representable in Builder
117
62
 
118
- ## Key Design Decisions
119
- - Schemas are data, not code field/function definitions are in simple arrays
120
- - Parser is custom (not using wirefilter WASM) for better error messages
121
- - ESLint is an optional peer dependency the core tool is standalone
122
- - The validator produces errors for invalid expressions, warnings for likely issues, info for style suggestions
123
- - YAML scanner phase mappings are configurable built-in defaults only include Cloudflare phase names and common shorthands
124
- - Account-level expressions are detected by file path pattern, not YAML key name
125
- - Template placeholder expressions (UPPER_CASE_VARS) are demoted from errors to warnings
126
- - Published via OIDC Trusted Publishing — no npm tokens needed
127
- - Weekly automated sync from cloudflare-docs repo for field/function updates
63
+ ## Key Constraints
64
+ - NEVER add Indeed, Glassdoor, or any proprietary references to the GitHub repo (tests, docs, comments, git history)
65
+ - Raw strings (r"...") must be preserved through all transformations (fix, prettify, rewrite)
66
+ - The prettifier only breaks on and/or boundaries, never within a condition
67
+ - The >- (folded, strip) block scalar is the correct YAML choice for expressions
68
+ - `--check` mode must exit 1 if changes would be made, 0 if clean
69
+
70
+ ## CI Integration
71
+ ```yaml
72
+ # GitLab CI example
73
+ - cf-expr-lint --warn-exit-code 2 --config .cf-expr-lint.json $(find config -name "*.yaml")
74
+ - cf-expr-lint --fix --check --config .cf-expr-lint.json $(find config -name "*.yaml")
75
+ - cf-expr-lint --prettify --check --config .cf-expr-lint.json $(find config -name "*.yaml")
76
+ ```
package/README.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # cloudflare-expression-lint
2
2
 
3
- A parser, validator, and linter for [Cloudflare Rules Language](https://developers.cloudflare.com/ruleset-engine/rules-language/) expressions with phase-aware field and function checking.
3
+ A parser, validator, linter, formatter, and auto-fixer for [Cloudflare Rules Language](https://developers.cloudflare.com/ruleset-engine/rules-language/) expressions with phase-aware field and function checking.
4
4
 
5
5
  Catches errors **before** `terraform apply` — no API calls required.
6
6
 
@@ -9,11 +9,15 @@ Catches errors **before** `terraform apply` — no API calls required.
9
9
  - **Full expression parser** — lexer + recursive-descent parser for the Cloudflare wirefilter expression syntax
10
10
  - **211+ known fields** with type information
11
11
  - **Deprecated field detection** — warns on legacy fields like `ip.geoip.country` with replacement suggestions
12
- - **Phase-aware validation** — knows which fields are available in which Cloudflare phase (e.g., response fields only in response phases)
13
- - **Function context validation** — `regex_replace()` is only valid in rewrite/redirect contexts, not filter expressions
14
- - **Function usage limits** — enforces max 1 `regex_replace()` / `wildcard_replace()` per expression
15
- - **YAML scanner** — auto-detects expressions in YAML config files and infers the Cloudflare phase from context
16
- - **CLI tool** — validate expressions from the command line or CI/CD pipelines
12
+ - **Phase-aware validation** — knows which fields are available in which Cloudflare phase
13
+ - **Function context validation** — `regex_replace()` is only valid in rewrite/redirect contexts
14
+ - **Expression Builder compatibility** — flags expressions that can't be loaded in the Cloudflare UI
15
+ - **Auto-fixer** — `--fix` rewrites expressions for Builder compatibility (wraps bare expressions, merges and-groups, applies De Morgan's law, normalizes operators)
16
+ - **Prettifier** — `--prettify` reformats long expressions across multiple lines using `>-` block scalars
17
+ - **Operator style** — configurable preference for English (`eq`, `and`) vs C-like (`==`, `&&`)
18
+ - **YAML scanner** — auto-detects expressions in YAML files and infers Cloudflare phase from context
19
+ - **Raw string preservation** — `r"..."` prefixes survive formatting and fixing
20
+ - **CLI tool** — validate, fix, and format expressions from the command line or CI/CD pipelines
17
21
  - **Programmatic API** — use as a library in your own tools
18
22
 
19
23
  ## Installation
@@ -60,6 +64,64 @@ cf-expr-lint -e 'http.response.code eq 200' -p http_request_firewall_custom
60
64
  echo '(ip.src.country in {"US" "JP"})' | cf-expr-lint --stdin
61
65
  ```
62
66
 
67
+ ### Auto-fix expressions
68
+
69
+ ```bash
70
+ # Fix a single expression
71
+ cf-expr-lint --fix -e 'not (http.cookie eq "a" or http.cookie eq "b")'
72
+ # Output: (not http.cookie eq "a" and not http.cookie eq "b")
73
+
74
+ # Fix all expressions in YAML files
75
+ cf-expr-lint --fix --config .cf-expr-lint.json config/**/*.yaml
76
+
77
+ # Dry-run — check if fixes are needed (exits non-zero if so)
78
+ cf-expr-lint --fix --check config/**/*.yaml
79
+ ```
80
+
81
+ The fixer applies these transformations:
82
+ - Wrap bare expressions: `A eq B` → `(A eq B)`
83
+ - Merge and-groups: `(A) and (B)` → `(A and B)`
84
+ - Remove outer parens from or-chains: `((A) or (B))` → `(A) or (B)`
85
+ - Wrap or-branches: `A or B` → `(A) or (B)`
86
+ - Unwrap individually-wrapped and-conditions: `((A) and (B))` → `(A and B)`
87
+ - De Morgan's law: `not (A or B)` → `(not A and not B)`
88
+ - Operator style: `==` → `eq`, `<=` → `le`, `&&` → `and`, etc.
89
+
90
+ ### Prettify expressions
91
+
92
+ ```bash
93
+ # Format a single expression
94
+ cf-expr-lint --prettify -e '(http.host eq "test.com" and http.request.method eq "POST" and not ip.src in $blocklist)'
95
+
96
+ # Prettify all YAML files (rewrites in-place with >- block scalars)
97
+ cf-expr-lint --prettify --config .cf-expr-lint.json config/**/*.yaml
98
+
99
+ # Also convert existing | and |- block scalars to >-
100
+ cf-expr-lint --prettify --convert-block-scalars config/**/*.yaml
101
+
102
+ # Custom max line width (default: 120)
103
+ cf-expr-lint --prettify --max-width 100 config/**/*.yaml
104
+
105
+ # Dry-run — check if formatting is needed
106
+ cf-expr-lint --prettify --check config/**/*.yaml
107
+ ```
108
+
109
+ Before:
110
+ ```yaml
111
+ expression: (http.host eq "example.com" and http.request.method eq "POST" and not ip.src in $blocklist and http.request.uri.path eq "/api/webhook")
112
+ ```
113
+
114
+ After:
115
+ ```yaml
116
+ expression: >-
117
+ (
118
+ http.host eq "example.com"
119
+ and http.request.method eq "POST"
120
+ and not ip.src in $blocklist
121
+ and http.request.uri.path eq "/api/webhook"
122
+ )
123
+ ```
124
+
63
125
  ### Custom YAML key mappings (CLI)
64
126
 
65
127
  By default, the scanner only looks for the `expression` key (the standard
@@ -67,46 +129,34 @@ Cloudflare Terraform provider attribute). If your YAML uses other key
67
129
  names for expressions, tell the scanner about them:
68
130
 
69
131
  ```bash
70
- # Add custom expression keys and phase mappings via flags
71
132
  cf-expr-lint \
72
133
  --expr-key rewrite_expression:rewrite_url:http_request_transform \
73
134
  --expr-key source_url_expression:filter:http_request_dynamic_redirect \
74
135
  --phase-map waf_rules:http_request_firewall_custom \
75
- --phase-map transform_rules:http_request_late_transform \
76
136
  config/**/*.yaml
77
137
  ```
78
138
 
79
- The `--expr-key` format is `key_name:expression_type[:phase]`.
80
- The `--phase-map` format is `yaml_parent_key:cloudflare_phase`.
81
-
82
- Both merge with the built-in defaults — your custom mappings extend them,
83
- they don't replace them.
84
-
85
139
  ### Config file
86
140
 
87
- For projects with many custom mappings, use a `.cf-expr-lint.json` config
88
- file in your project root (auto-detected) or specified with `--config`:
141
+ For projects with many custom mappings, use a `.cf-expr-lint.json` config file:
89
142
 
90
143
  ```json
91
144
  {
92
145
  "expressionKeys": {
93
146
  "rewrite_expression": { "type": "rewrite_url", "phaseHint": "http_request_transform" },
94
- "source_url_expression": { "type": "filter", "phaseHint": "http_request_dynamic_redirect" },
95
- "target_url_expression": { "type": "redirect_target", "phaseHint": "http_request_dynamic_redirect" }
147
+ "source_url_expression": { "type": "filter", "phaseHint": "http_request_dynamic_redirect" }
96
148
  },
97
149
  "phaseMappings": {
98
150
  "waf_rules": "http_request_firewall_custom",
99
151
  "custom_rules": "http_request_firewall_custom",
100
- "configuration_rules": "http_config_settings",
101
- "transform_request_header_rules": "http_request_late_transform",
102
- "transform_response_header_rules": "http_response_headers_transform",
103
- "transform_url_rewrite_rules": "http_request_transform"
104
- }
152
+ "ratelimit_rules": "http_ratelimit"
153
+ },
154
+ "accountLevelPaths": ["config/account/"],
155
+ "ignoreCodes": ["contains-placeholders"],
156
+ "operatorStyle": "english"
105
157
  }
106
158
  ```
107
159
 
108
- Then just run: `cf-expr-lint config/**/*.yaml`
109
-
110
160
  ### CLI Options
111
161
 
112
162
  | Option | Short | Description |
@@ -120,207 +170,35 @@ Then just run: `cf-expr-lint config/**/*.yaml`
120
170
  | `--phase-map` | | Add phase mapping: `yaml_key:phase` (repeatable) |
121
171
  | `--format` | `-f` | Output format: `text` (default), `json` |
122
172
  | `--quiet` | `-q` | Only show errors (suppress warnings) |
173
+ | `--warn-exit-code` | | Exit code when warnings found (default: 0, use 2 for CI) |
174
+ | `--ignore-code` | | Suppress a diagnostic code (repeatable) |
175
+ | `--operator-style` | | Operator style: `english` (default), `clike`, `off` |
176
+ | `--fix` | | Auto-fix expressions for Builder compatibility |
177
+ | `--prettify` | | Reformat long expressions as multi-line `>-` block scalars |
178
+ | `--convert-block-scalars` | | Convert `\|` and `\|-` to `>-` (use with `--prettify`) |
179
+ | `--max-width` | | Max line width for `--prettify` (default: 120) |
180
+ | `--check` | | Dry-run for `--fix` or `--prettify` (exits 1 if changes needed) |
123
181
  | `--help` | `-h` | Show help |
124
182
 
125
- ## Programmatic API
126
-
127
- ```typescript
128
- import { validate, parse, tokenize } from 'cloudflare-expression-lint';
129
-
130
- // Validate an expression
131
- const result = validate('(http.host eq "example.com")', {
132
- expressionType: 'filter',
133
- phase: 'http_request_firewall_custom',
134
- });
135
-
136
- console.log(result.valid); // true
137
- console.log(result.diagnostics); // []
138
-
139
- // Validate with warnings
140
- const result2 = validate('(ip.geoip.country eq "US")', {
141
- expressionType: 'filter',
142
- });
143
- // result2.valid === true (warnings don't make it invalid)
144
- // result2.diagnostics[0].code === 'deprecated-field'
145
- // result2.diagnostics[0].message === 'Field "ip.geoip.country" is deprecated. Use "ip.src.country" instead'
146
-
147
- // Parse to AST
148
- const ast = parse('http.host eq "example.com"');
149
- console.log(ast.kind); // 'Comparison'
150
-
151
- // Tokenize
152
- const tokens = tokenize('http.host eq "example.com"');
153
- ```
154
-
155
- ### YAML Scanner
156
-
157
- ```typescript
158
- import { scanYaml } from 'cloudflare-expression-lint/yaml-scanner';
159
- import { readFileSync } from 'fs';
160
-
161
- const content = readFileSync('config/zones/example.yaml', 'utf-8');
162
- const result = scanYaml(content, 'example.yaml');
163
-
164
- for (const expr of result.expressions) {
165
- if (!expr.result.valid) {
166
- console.error(`${expr.file} → ${expr.yamlPath}: ${expr.result.diagnostics[0].message}`);
167
- }
168
- }
169
- ```
170
-
171
- ## Supported Expression Syntax
172
-
173
- This tool supports the full Cloudflare Rules Language syntax:
174
-
175
- ### Operators
176
-
177
- | Type | English | C-like |
178
- |------|---------|--------|
179
- | Equal | `eq` | `==` |
180
- | Not equal | `ne` | `!=` |
181
- | Less than | `lt` | `<` |
182
- | Less/equal | `le` | `<=` |
183
- | Greater than | `gt` | `>` |
184
- | Greater/equal | `ge` | `>=` |
185
- | Contains | `contains` | |
186
- | Wildcard | `wildcard` | |
187
- | Strict wildcard | `strict wildcard` | |
188
- | Regex match | `matches` | `~` |
189
- | Set membership | `in` | |
190
- | AND | `and` | `&&` |
191
- | OR | `or` | `\|\|` |
192
- | NOT | `not` | `!` |
193
- | XOR | `xor` | `^^` |
194
-
195
- ### Value Types
196
-
197
- - **Strings**: `"value"` with `\"` and `\\` escaping
198
- - **Raw Strings**: `r"value"`, `r#"value"#` — no escape processing, useful for regex
199
- - **Integers**: `42`, `0`, `396507`
200
- - **Booleans**: `true`, `false`
201
- - **IP Addresses**: `1.2.3.4`, with CIDR (`1.2.3.0/24`) in `in` lists
202
- - **Named Lists**: `$list_name`, `$cf.malware`
203
- - **In-lists**: `{"US" "JP"}`, `{8000..8009}`, `{1.2.3.0/24}`
204
-
205
- ### Functions
206
-
207
- All standard Cloudflare functions are supported, with context-aware validation:
208
-
209
- | Function | Available In |
210
- |----------|-------------|
211
- | `lower()`, `upper()`, `len()`, `starts_with()`, `ends_with()`, `contains()` | All contexts |
212
- | `concat()`, `substring()`, `url_decode()` | All contexts |
213
- | `any()`, `all()`, `has_key()`, `has_value()` | All contexts |
214
- | `lookup_json_string()`, `lookup_json_integer()` | All contexts |
215
- | `regex_replace()` | Rewrite, redirect (max 1 per expression) |
216
- | `wildcard_replace()` | Rewrite, redirect (max 1 per expression) |
217
- | `to_string()`, `encode_base64()`, `uuidv4()`, `sha256()` | Rewrite/transform only |
218
- | `cidr()`, `cidr6()` | Filter only |
219
-
220
- ## Diagnostic Codes
221
-
222
- | Code | Severity | Description |
223
- |------|----------|-------------|
224
- | `parse-error` | error | Syntax error in expression |
225
- | `unknown-field` | error | Field name not recognized |
226
- | `unknown-function` | error | Function name not recognized |
227
- | `field-not-in-phase` | error | Field not available in the specified Cloudflare phase |
228
- | `function-not-in-context` | error | Function not available in the expression context (filter vs rewrite) |
229
- | `function-max-exceeded` | error | Function used more times than allowed |
230
- | `operator-type-mismatch` | error | Operator not compatible with field type (e.g., `contains` on IP) |
231
- | `deprecated-field` | warning | Field is deprecated; replacement suggested |
232
- | `expression-too-long` | warning | Expression exceeds 4096 character limit |
233
- | `header-key-not-lowercase` | warning | Header map key should be lowercase |
234
- | `invalid-list-name` | warning | Named list name doesn't match Cloudflare naming rules |
235
- | `invalid-cidr-mask` | error | CIDR mask out of valid range |
236
- | `invalid-wildcard-pattern` | warning | Wildcard contains `**` (prohibited) |
237
- | `empty-in-list` | warning | Empty `in {}` list will never match |
238
- | `too-many-regex` | warning | More than 64 regex patterns per expression |
239
- | `ambiguous-precedence` | warning | Mixed `and`/`or` without explicit grouping |
240
- | `expression-whitespace` | warning | Leading or trailing whitespace in expression |
241
- | `missing-zone-plan-filter` | warning | Account-level expression missing `and (cf.zone.plan eq "ENT")` |
242
- | `builder-incompatible` | info | Expression not in Cloudflare Expression Builder format |
243
- | `prefer-english-operator` | info | Suggests `eq` instead of `==`, `and` instead of `&&`, etc. |
244
- | `prefer-bare-boolean` | info | Prefer `ssl` over `ssl == true` |
245
-
246
- ## How Mappings Work
183
+ ## Expression Builder Compatibility
247
184
 
248
- The scanner needs to know two things about each YAML file:
185
+ The Cloudflare Expression Builder UI requires expressions in a specific format:
249
186
 
250
- 1. **Which keys contain expressions?** — By default, only `expression` (the Terraform attribute name).
251
- 2. **What Cloudflare phase does an expression belong to?** — Inferred from YAML parent keys.
187
+ **Compatible:**
188
+ - Single group: `(A and B and C)`
189
+ - Or-chain: `(A) or (B and C) or (D)`
190
+ - Not toggle: `(not A and not B)`
191
+ - Functions: `(starts_with(field, "val"))`, `(ends_with(field, "val"))`
252
192
 
253
- Both are **extensible** your custom mappings always merge with the built-in
254
- defaults. You never lose the defaults unless you explicitly opt out.
193
+ **Not compatible (with suggested rewrites):**
194
+ - `(A) and (B)` merge: `(A and B)`
195
+ - `(A or B)` → split: `(A) or (B)`
196
+ - `not (A)` → move inside: `(not A)`
197
+ - `not (A or B)` → De Morgan's: `(not A and not B)`
198
+ - `((A) or (B))` → remove outer: `(A) or (B)`
199
+ - `((A) and (B))` → unwrap: `(A and B)`
255
200
 
256
- ### Programmatic API
257
-
258
- ```typescript
259
- import { scanYaml } from 'cloudflare-expression-lint';
260
-
261
- const result = scanYaml(yamlContent, 'config.yaml', {
262
- // These MERGE with the built-in defaults
263
- expressionKeys: {
264
- 'rewrite_expression': { type: 'rewrite_url', phaseHint: 'http_request_transform' },
265
- 'source_url_expression': { type: 'filter', phaseHint: 'http_request_dynamic_redirect' },
266
- },
267
- phaseMappings: {
268
- 'waf_rules': 'http_request_firewall_custom',
269
- 'my_transform_rules': 'http_request_transform',
270
- },
271
- });
272
-
273
- // Inspect defaults
274
- import { getDefaultExpressionKeys, getDefaultPhaseMappings } from 'cloudflare-expression-lint';
275
- console.log(getDefaultExpressionKeys()); // { expression: { type: 'filter' } }
276
- console.log(getDefaultPhaseMappings()); // { cache_rules: '...', http_request_firewall_custom: '...', ... }
277
- ```
278
-
279
- ### Built-in Phase Mappings
280
-
281
- The defaults include all Cloudflare phase names as self-mappings plus common shorthands:
282
-
283
- | YAML Key | Phase |
284
- |----------|-------|
285
- | `http_request_firewall_custom` | `http_request_firewall_custom` |
286
- | `http_ratelimit` | `http_ratelimit` |
287
- | `http_request_cache_settings` | `http_request_cache_settings` |
288
- | `http_request_transform` | `http_request_transform` |
289
- | `http_request_late_transform` | `http_request_late_transform` |
290
- | `http_response_headers_transform` | `http_response_headers_transform` |
291
- | `cache_rules` | `http_request_cache_settings` |
292
- | `rate_limit_rules` | `http_ratelimit` |
293
- | `single_redirects` | `http_request_dynamic_redirect` |
294
- | `origin_rules` | `http_request_origin` |
295
-
296
- If you need to **replace** all defaults instead of merging, pass
297
- `replaceExpressionKeys: true` or `replacePhaseMappings: true`.
298
-
299
- ### ESLint Plugin
300
-
301
- ```javascript
302
- // eslint.config.js (flat config)
303
- import cfExprLint from 'cloudflare-expression-lint/eslint-plugin';
304
-
305
- export default [
306
- {
307
- files: ['config/**/*.yaml'],
308
- plugins: { 'cf-expr': cfExprLint },
309
- rules: {
310
- 'cf-expr/validate-expression': ['error', {
311
- // Custom mappings (merged with defaults)
312
- customKeyMappings: {
313
- 'rewrite_expression': 'rewrite_url',
314
- 'source_url_expression': 'filter',
315
- },
316
- customPhaseMappings: {
317
- 'waf_rules': 'http_request_firewall_custom',
318
- },
319
- }],
320
- },
321
- },
322
- ];
323
- ```
201
+ Use `--fix` to apply these automatically.
324
202
 
325
203
  ## CI/CD Integration
326
204
 
@@ -329,46 +207,71 @@ export default [
329
207
  ```yaml
330
208
  lint-expressions:
331
209
  stage: validate
210
+ image: node:20
332
211
  script:
333
- - npx cloudflare-expression-lint config/**/*.yaml
334
- allow_failure: false
212
+ - npm install -g cloudflare-expression-lint@latest
213
+ - cf-expr-lint --warn-exit-code 2 --config .cf-expr-lint.json $(find config -name "*.yaml" -o -name "*.yml")
214
+ - cf-expr-lint --fix --check --config .cf-expr-lint.json $(find config -name "*.yaml" -o -name "*.yml")
215
+ - cf-expr-lint --prettify --check --config .cf-expr-lint.json $(find config -name "*.yaml" -o -name "*.yml")
216
+ allow_failure:
217
+ exit_codes: [2]
335
218
  ```
336
219
 
337
220
  ### GitHub Actions
338
221
 
339
222
  ```yaml
340
223
  - name: Lint Cloudflare expressions
341
- run: npx cloudflare-expression-lint config/**/*.yaml
342
- ```
343
-
344
- ### Pre-commit Hook
345
-
346
- ```bash
347
- #!/bin/sh
348
- npx cloudflare-expression-lint $(git diff --cached --name-only --diff-filter=ACM -- '*.yaml' '*.yml')
224
+ run: |
225
+ npm install -g cloudflare-expression-lint@latest
226
+ cf-expr-lint --warn-exit-code 2 config/**/*.yaml
227
+ cf-expr-lint --fix --check config/**/*.yaml
228
+ cf-expr-lint --prettify --check config/**/*.yaml
349
229
  ```
350
230
 
351
- ## Extending the Schema
352
-
353
- The field and function registries are defined in TypeScript files under `src/schemas/`:
354
-
355
- - **`fields.ts`** — All known fields with types, deprecation status, and phase availability
356
- - **`functions.ts`** — All known functions with parameter types, return types, context restrictions, and usage limits
357
- - **`operators.ts`** — All comparison and logical operators with type constraints
231
+ ## Programmatic API
358
232
 
359
- To add a new field or function, edit the relevant schema file and add a new entry to the array. The tool will automatically pick it up.
233
+ ```typescript
234
+ import { validate, parse, fixExpression, formatExpression } from 'cloudflare-expression-lint';
360
235
 
361
- ## Publishing
236
+ // Validate
237
+ const result = validate('(http.host eq "example.com")', {
238
+ expressionType: 'filter',
239
+ phase: 'http_request_firewall_custom',
240
+ });
362
241
 
363
- Publish to npm automatically by bumping the version:
242
+ // Auto-fix
243
+ const fixed = fixExpression('not (http.cookie eq "a" or http.cookie eq "b")');
244
+ console.log(fixed.expression); // '(not http.cookie eq "a" and not http.cookie eq "b")'
364
245
 
365
- ```bash
366
- npm version patch # or minor / major
367
- git push && git push --tags
246
+ // Prettify
247
+ const pretty = formatExpression('(A and B and C)', { maxWidth: 40 });
368
248
  ```
369
249
 
370
- Pushing a `v*` tag triggers the GitHub Actions workflow which builds,
371
- tests, and publishes to npm via OIDC Trusted Publishing (no tokens needed).
250
+ ## Diagnostic Codes
251
+
252
+ | Code | Severity | Description |
253
+ |------|----------|-------------|
254
+ | `parse-error` | error | Syntax error in expression |
255
+ | `unknown-field` | error | Field name not recognized |
256
+ | `unknown-function` | error | Function name not recognized |
257
+ | `field-not-in-phase` | error | Field not available in the specified Cloudflare phase |
258
+ | `function-not-in-context` | error | Function not available in the expression context |
259
+ | `function-max-exceeded` | error | Function used more times than allowed |
260
+ | `operator-type-mismatch` | error | Operator not compatible with field type |
261
+ | `invalid-cidr-mask` | error | CIDR mask out of valid range |
262
+ | `deprecated-field` | warning | Field is deprecated; replacement suggested |
263
+ | `expression-too-long` | warning | Expression exceeds 4096 character limit |
264
+ | `ambiguous-precedence` | warning | Mixed `and`/`or` without explicit grouping |
265
+ | `expression-whitespace` | warning | Leading or trailing whitespace |
266
+ | `missing-zone-plan-filter` | warning | Account-level expression missing ENT suffix |
267
+ | `empty-in-list` | warning | Empty `in {}` will never match |
268
+ | `too-many-regex` | warning | More than 64 regex patterns |
269
+ | `header-key-not-lowercase` | warning | Header map key should be lowercase |
270
+ | `invalid-wildcard-pattern` | warning | Wildcard contains `**` |
271
+ | `builder-incompatible` | info | Not in Expression Builder format |
272
+ | `prefer-english-operator` | info | Suggests English notation (`eq`, `and`) |
273
+ | `prefer-clike-operator` | info | Suggests C-like notation (`==`, `&&`) |
274
+ | `prefer-bare-boolean` | info | Prefer `ssl` over `ssl == true` |
372
275
 
373
276
  ## Architecture
374
277
 
@@ -377,15 +280,18 @@ src/
377
280
  ├── lexer.ts # Tokenizer: string → Token[]
378
281
  ├── parser.ts # Parser: Token[] → AST (recursive descent)
379
282
  ├── validator.ts # Validator: AST → Diagnostic[] (semantic analysis)
283
+ ├── fixer.ts # Auto-fixer: AST → AST (Builder compatibility transforms)
284
+ ├── formatter.ts # Prettifier: AST → multi-line string
285
+ ├── rewriter.ts # YAML rewriter: replaces expressions in files
380
286
  ├── yaml-scanner.ts # YAML file scanner with configurable phase inference
381
287
  ├── eslint-plugin.ts # ESLint plugin adapter (optional)
382
- ├── cli.ts # CLI entry point with config file support
288
+ ├── cli.ts # CLI entry point
383
289
  ├── types.ts # Shared type definitions
384
290
  ├── index.ts # Public API exports
385
291
  └── schemas/
386
- ├── fields.ts # 211+ field definitions with deprecation tracking
387
- ├── functions.ts # 25+ function definitions with context restrictions
388
- └── operators.ts # Operator definitions with type constraints
292
+ ├── fields.ts # 211+ field definitions
293
+ ├── functions.ts # 25+ function definitions
294
+ └── operators.ts # Operator type constraints
389
295
  ```
390
296
 
391
297
  ## License
package/dist/cli.js CHANGED
@@ -41,6 +41,7 @@ function parseArgs(argv) {
41
41
  operatorStyle: 'english',
42
42
  prettify: false,
43
43
  fix: false,
44
+ check: false,
44
45
  convertBlockScalars: false,
45
46
  maxWidth: 120,
46
47
  help: false,
@@ -123,6 +124,9 @@ function parseArgs(argv) {
123
124
  case '--convert-block-scalars':
124
125
  opts.convertBlockScalars = true;
125
126
  break;
127
+ case '--check':
128
+ opts.check = true;
129
+ break;
126
130
  case '--max-width':
127
131
  opts.maxWidth = parseInt(argv[++i], 10);
128
132
  break;
@@ -251,6 +255,8 @@ Options:
251
255
  >- (folded block scalar) syntax.
252
256
  --convert-block-scalars Convert existing | and |- block scalars to >-.
253
257
  Use with --prettify. Short expressions become inline.
258
+ --check Dry-run for --fix or --prettify. Exits non-zero if
259
+ any changes would be made, without modifying files.
254
260
  --max-width <n> Max line width for --prettify (default: 120).
255
261
  --help, -h Show this help
256
262
 
@@ -422,10 +428,20 @@ async function main() {
422
428
  }
423
429
  }
424
430
  if (fileChanged) {
425
- writeFileSync(absPath, modified, 'utf-8');
431
+ if (!opts.check) {
432
+ writeFileSync(absPath, modified, 'utf-8');
433
+ }
426
434
  totalFiles++;
427
435
  }
428
436
  }
437
+ if (opts.check) {
438
+ if (totalFixed > 0) {
439
+ console.log(`\n${totalFixed} expressions in ${totalFiles} files need fixing`);
440
+ process.exit(1);
441
+ }
442
+ console.log('\nAll expressions are already fixed');
443
+ process.exit(0);
444
+ }
429
445
  console.log(`\nFixed ${totalFixed} expressions in ${totalFiles} files`);
430
446
  process.exit(0);
431
447
  }
@@ -451,11 +467,22 @@ async function main() {
451
467
  convertBlockScalars: opts.convertBlockScalars,
452
468
  });
453
469
  if (result.count > 0) {
454
- writeFileSync(absPath, result.content, 'utf-8');
470
+ if (!opts.check) {
471
+ writeFileSync(absPath, result.content, 'utf-8');
472
+ }
455
473
  totalFiles++;
456
474
  totalFormatted += result.count;
457
- console.log(` ✓ ${file}`);
475
+ if (!opts.check)
476
+ console.log(` ✓ ${file}`);
477
+ }
478
+ }
479
+ if (opts.check) {
480
+ if (totalFormatted > 0) {
481
+ console.log(`\n${totalFormatted} expressions in ${totalFiles} files need formatting`);
482
+ process.exit(1);
458
483
  }
484
+ console.log('\nAll expressions are already formatted');
485
+ process.exit(0);
459
486
  }
460
487
  console.log(`\nFormatted ${totalFormatted} expressions in ${totalFiles} files`);
461
488
  process.exit(0);
package/dist/cli.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.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.4",
3
+ "version": "0.4.1",
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",