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 +40 -91
- package/README.md +155 -249
- package/dist/cli.js +30 -3
- package/dist/cli.js.map +1 -1
- package/package.json +1 -1
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
|
|
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)
|
|
9
|
-
- `src/validator.ts` — Semantic validator (AST → Diagnostic[]) with
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
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
|
|
26
|
-
- `src/types.ts` — All type definitions
|
|
27
|
-
- `src/schemas/fields.ts` — Field registry (211+ fields
|
|
28
|
-
- `src/schemas/functions.ts` — Function registry (25+ functions
|
|
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 (
|
|
31
|
-
- `scripts/sync-cloudflare-docs.ts` — Automated sync from cloudflare-docs repo
|
|
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
|
|
38
|
-
- `node dist/cli.js --
|
|
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
|
|
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
|
|
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
|
|
109
|
-
- Functions/array unpacks are silently skipped (no Builder fix possible)
|
|
57
|
+
- `((A) and (B))` → unwrap: `(A and B)`
|
|
110
58
|
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
-
|
|
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
|
|
119
|
-
-
|
|
120
|
-
-
|
|
121
|
-
-
|
|
122
|
-
- The
|
|
123
|
-
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
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
|
|
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
|
|
13
|
-
- **Function context validation** — `regex_replace()` is only valid in rewrite/redirect contexts
|
|
14
|
-
- **
|
|
15
|
-
- **
|
|
16
|
-
- **
|
|
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
|
-
"
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
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
|
-
##
|
|
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
|
|
185
|
+
The Cloudflare Expression Builder UI requires expressions in a specific format:
|
|
249
186
|
|
|
250
|
-
|
|
251
|
-
|
|
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
|
-
|
|
254
|
-
|
|
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
|
-
|
|
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
|
-
-
|
|
334
|
-
|
|
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:
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
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
|
-
##
|
|
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
|
-
|
|
233
|
+
```typescript
|
|
234
|
+
import { validate, parse, fixExpression, formatExpression } from 'cloudflare-expression-lint';
|
|
360
235
|
|
|
361
|
-
|
|
236
|
+
// Validate
|
|
237
|
+
const result = validate('(http.host eq "example.com")', {
|
|
238
|
+
expressionType: 'filter',
|
|
239
|
+
phase: 'http_request_firewall_custom',
|
|
240
|
+
});
|
|
362
241
|
|
|
363
|
-
|
|
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
|
-
|
|
366
|
-
|
|
367
|
-
git push && git push --tags
|
|
246
|
+
// Prettify
|
|
247
|
+
const pretty = formatExpression('(A and B and C)', { maxWidth: 40 });
|
|
368
248
|
```
|
|
369
249
|
|
|
370
|
-
|
|
371
|
-
|
|
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
|
|
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
|
|
387
|
-
├── functions.ts # 25+ function definitions
|
|
388
|
-
└── operators.ts # Operator
|
|
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
|
-
|
|
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
|
-
|
|
470
|
+
if (!opts.check) {
|
|
471
|
+
writeFileSync(absPath, result.content, 'utf-8');
|
|
472
|
+
}
|
|
455
473
|
totalFiles++;
|
|
456
474
|
totalFormatted += result.count;
|
|
457
|
-
|
|
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":";AAEA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAClE,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAClD,OAAO,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AACnD,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAC3C,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAyB7C,SAAS,SAAS,CAAC,IAAc;IAC/B,MAAM,IAAI,GAAe;QACvB,KAAK,EAAE,EAAE;QACT,KAAK,EAAE,KAAK;QACZ,IAAI,EAAE,QAAQ;QACd,QAAQ,EAAE,EAAE;QACZ,SAAS,EAAE,EAAE;QACb,MAAM,EAAE,MAAM;QACd,KAAK,EAAE,KAAK;QACZ,YAAY,EAAE,CAAC;QACf,WAAW,EAAE,EAAE;QACf,aAAa,EAAE,SAAS;QACxB,QAAQ,EAAE,KAAK;QACf,GAAG,EAAE,KAAK;QACV,mBAAmB,EAAE,KAAK;QAC1B,QAAQ,EAAE,GAAG;QACb,IAAI,EAAE,KAAK;KACZ,CAAC;IAEF,IAAI,CAAC,GAAG,CAAC,CAAC;IACV,OAAO,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;QACvB,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;QACpB,QAAQ,GAAG,EAAE,CAAC;YACZ,KAAK,QAAQ,CAAC;YACd,KAAK,IAAI;gBACP,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;gBACjB,MAAM;YACR,KAAK,cAAc,CAAC;YACpB,KAAK,IAAI;gBACP,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;gBAC5B,MAAM;YACR,KAAK,SAAS;gBACZ,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;gBAClB,MAAM;YACR,KAAK,QAAQ,CAAC;YACd,KAAK,IAAI;gBACP,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC,CAAmB,CAAC;gBACxC,MAAM;YACR,KAAK,SAAS,CAAC;YACf,KAAK,IAAI;gBACP,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;gBACvB,MAAM;YACR,KAAK,UAAU,CAAC;YAChB,KAAK,IAAI;gBACP,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;gBAC5B,MAAM;YACR,KAAK,YAAY,CAAC,CAAC,CAAC;gBAClB,2BAA2B;gBAC3B,MAAM,GAAG,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;gBACtB,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;gBAC7B,IAAI,KAAK,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC;oBACtB,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;wBACjB,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC;wBACb,IAAI,EAAE,KAAK,CAAC,CAAC,CAAmB;wBAChC,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC;qBAChB,CAAC,CAAC;gBACL,CAAC;gBACD,MAAM;YACR,CAAC;YACD,KAAK,aAAa,CAAC,CAAC,CAAC;gBACnB,8BAA8B;gBAC9B,MAAM,GAAG,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;gBACtB,MAAM,QAAQ,GAAG,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;gBAClC,IAAI,QAAQ,GAAG,CAAC,EAAE,CAAC;oBACjB,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;wBAClB,OAAO,EAAE,GAAG,CAAC,SAAS,CAAC,CAAC,EAAE,QAAQ,CAAC;wBACnC,KAAK,EAAE,GAAG,CAAC,SAAS,CAAC,QAAQ,GAAG,CAAC,CAAC;qBACnC,CAAC,CAAC;gBACL,CAAC;gBACD,MAAM;YACR,CAAC;YACD,KAAK,UAAU,CAAC;YAChB,KAAK,IAAI;gBACP,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,EAAE,CAAC,CAAoB,CAAC;gBAC3C,MAAM;YACR,KAAK,SAAS,CAAC;YACf,KAAK,IAAI;gBACP,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;gBAClB,MAAM;YACR,KAAK,kBAAkB;gBACrB,IAAI,CAAC,YAAY,GAAG,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;gBAC5C,MAAM;YACR,KAAK,eAAe;gBAClB,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;gBACjC,MAAM;YACR,KAAK,kBAAkB;gBACrB,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,EAAE,CAAC,CAAkB,CAAC;gBAChD,MAAM;YACR,KAAK,YAAY;gBACf,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;gBACrB,MAAM;YACR,KAAK,OAAO;gBACV,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC;gBAChB,MAAM;YACR,KAAK,yBAAyB;gBAC5B,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC;gBAChC,MAAM;YACR,KAAK,aAAa;gBAChB,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;gBACxC,MAAM;YACR;gBACE,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;oBACzB,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;gBACvB,CAAC;gBACD,MAAM;QACV,CAAC;QACD,CAAC,EAAE,CAAC;IACN,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;GAEG;AACH,SAAS,mBAAmB,CAAC,IAAgB;IAC3C,MAAM,WAAW,GAAmB,EAAE,CAAC;IACvC,IAAI,UAAU,GAAG,KAAK,CAAC;IAEvB,iDAAiD;IACjD,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,IAAI,cAAc,EAAE,CAAC;IACvD,IAAI,UAAU,EAAE,CAAC;QACf,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,YAAY,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,OAAO,CAAC,CAAC;YACvD,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAM5B,CAAC;YACF,IAAI,MAAM,CAAC,cAAc,EAAE,CAAC;gBAC1B,WAAW,CAAC,cAAc,GAAG,MAAM,CAAC,cAAc,CAAC;gBACnD,UAAU,GAAG,IAAI,CAAC;YACpB,CAAC;YACD,IAAI,MAAM,CAAC,aAAa,EAAE,CAAC;gBACzB,WAAW,CAAC,aAAa,GAAG,MAAM,CAAC,aAAa,CAAC;gBACjD,UAAU,GAAG,IAAI,CAAC;YACpB,CAAC;YACD,IAAI,MAAM,CAAC,WAAW,EAAE,CAAC;gBACvB,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,WAAW,CAAC,CAAC;YAC/C,CAAC;YACD,IAAI,MAAM,CAAC,iBAAiB,EAAE,CAAC;gBAC7B,WAAW,CAAC,iBAAiB,GAAG,MAAM,CAAC,iBAAiB,CAAC;gBACzD,UAAU,GAAG,IAAI,CAAC;YACpB,CAAC;YACD,IAAI,MAAM,CAAC,aAAa,EAAE,CAAC;gBACzB,IAAI,CAAC,aAAa,GAAG,MAAM,CAAC,aAAa,CAAC;YAC5C,CAAC;QACH,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,CAAC,KAAK,CAAC,6BAA6B,UAAU,KAAK,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;YACtG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC;IAED,kDAAkD;IAClD,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC7B,WAAW,CAAC,cAAc,GAAG,WAAW,CAAC,cAAc,IAAI,EAAE,CAAC;QAC9D,KAAK,MAAM,EAAE,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YAC/B,WAAW,CAAC,cAAc,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG;gBACnC,IAAI,EAAE,EAAE,CAAC,IAAI;gBACb,SAAS,EAAE,EAAE,CAAC,KAAK;aACpB,CAAC;QACJ,CAAC;QACD,UAAU,GAAG,IAAI,CAAC;IACpB,CAAC;IAED,mDAAmD;IACnD,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC9B,WAAW,CAAC,aAAa,GAAG,WAAW,CAAC,aAAa,IAAI,EAAE,CAAC;QAC5D,KAAK,MAAM,EAAE,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YAChC,WAAW,CAAC,aAAa,CAAC,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC;QACnD,CAAC;QACD,UAAU,GAAG,IAAI,CAAC;IACpB,CAAC;IAED,iCAAiC;IACjC,IAAI,IAAI,CAAC,aAAa,KAAK,SAAS,EAAE,CAAC;QACrC,WAAW,CAAC,aAAa,GAAG,IAAI,CAAC,aAAa,CAAC;QAC/C,UAAU,GAAG,IAAI,CAAC;IACpB,CAAC;IAED,OAAO,UAAU,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS,CAAC;AAC9C,CAAC;AAED;;GAEG;AACH,SAAS,cAAc;IACrB,MAAM,UAAU,GAAG;QACjB,oBAAoB;QACpB,oBAAoB;QACpB,0BAA0B;KAC3B,CAAC;IACF,KAAK,MAAM,IAAI,IAAI,UAAU,EAAE,CAAC;QAC9B,IAAI,UAAU,CAAC,IAAI,CAAC;YAAE,OAAO,IAAI,CAAC;IACpC,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,SAAS,SAAS;IAChB,OAAO,CAAC,GAAG,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAgFb,CAAC,CAAC;AACH,CAAC;AAED,SAAS,iBAAiB,CAAC,WAAyB,EAAE,WAAqB;IACzE,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,WAAW,CAAC;IACjD,MAAM,SAAS,GAAG,IAAI,GAAG,CAAC,WAAW,CAAC,CAAC;IACvC,OAAO,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;AACzD,CAAC;AAED,SAAS,gBAAgB,CAAC,CAAa;IACrC,MAAM,MAAM,GAAG,CAAC,CAAC,QAAQ,KAAK,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC;IACnF,MAAM,GAAG,GAAG,CAAC,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;IACnE,OAAO,KAAK,MAAM,KAAK,CAAC,CAAC,IAAI,IAAI,GAAG,KAAK,CAAC,CAAC,OAAO,EAAE,CAAC;AACvD,CAAC;AAED,KAAK,UAAU,IAAI;IACjB,MAAM,IAAI,GAAG,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IAE9C,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;QACd,SAAS,EAAE,CAAC;QACZ,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,IAAI,SAAS,GAAG,KAAK,CAAC;IACtB,IAAI,WAAW,GAAG,KAAK,CAAC;IACxB,MAAM,WAAW,GAAc,EAAE,CAAC;IAElC,qEAAqE;IACrE,IAAI,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;QAClC,IAAI,IAAY,CAAC;QACjB,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YACf,IAAI,GAAG,YAAY,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC;QACzC,CAAC;aAAM,CAAC;YACN,IAAI,GAAG,IAAI,CAAC,UAAW,CAAC;QAC1B,CAAC;QAED,IAAI,IAAI,CAAC,GAAG,EAAE,CAAC;YACb,MAAM,MAAM,GAAG,aAAa,CAAC,IAAI,EAAE,EAAE,aAAa,EAAE,IAAI,CAAC,aAAa,EAAE,CAAC,CAAC;YAC1E,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;YAC/B,IAAI,MAAM,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC5B,OAAO,CAAC,KAAK,CAAC,UAAU,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACrD,CAAC;YACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YAClB,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,IAAI,EAAE,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;YACjE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,MAAM,GAAG,GAAsB;YAC7B,cAAc,EAAE,IAAI,CAAC,IAAI;YACzB,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,aAAa,EAAE,IAAI,CAAC,aAAa;SAClC,CAAC;QAEF,MAAM,MAAM,GAAG,QAAQ,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;QACnC,MAAM,KAAK,GAAG,iBAAiB,CAAC,MAAM,CAAC,WAAW,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;QAEtE,IAAI,IAAI,CAAC,MAAM,KAAK,MAAM,EAAE,CAAC;YAC3B,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,GAAG,MAAM,EAAE,WAAW,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;QAC1E,CAAC;aAAM,CAAC;YACN,MAAM,aAAa,GAAG,IAAI,CAAC,KAAK;gBAC9B,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,OAAO,CAAC;gBAC3C,CAAC,CAAC,KAAK,CAAC;YAEV,IAAI,aAAa,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBAC/B,OAAO,CAAC,GAAG,CAAC,uBAAuB,CAAC,CAAC;YACvC,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,GAAG,CAAC,eAAe,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG,IAAI,CAAC,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;gBACtF,KAAK,MAAM,CAAC,IAAI,aAAa,EAAE,CAAC;oBAC9B,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,CAAC;gBACnC,CAAC;YACH,CAAC;YAED,IAAI,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,OAAO,CAAC;gBAAE,SAAS,GAAG,IAAI,CAAC;YAC9D,IAAI,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,SAAS,CAAC;gBAAE,WAAW,GAAG,IAAI,CAAC;QACpE,CAAC;QAED,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACpE,CAAC;IAED,qEAAqE;IACrE,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC5B,SAAS,EAAE,CAAC;QACZ,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,MAAM,WAAW,GAAG,mBAAmB,CAAC,IAAI,CAAC,CAAC;IAE9C,eAAe;IACf,MAAM,aAAa,GAAa,EAAE,CAAC;IACnC,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;QACjC,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,CAAC;QACpC,aAAa,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,CAAC;IACjC,CAAC;IAED,IAAI,aAAa,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC/B,OAAO,CAAC,KAAK,CAAC,qCAAqC,CAAC,CAAC;QACrD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,mEAAmE;IACnE,IAAI,IAAI,CAAC,GAAG,EAAE,CAAC;QACb,IAAI,UAAU,GAAG,CAAC,CAAC;QACnB,IAAI,UAAU,GAAG,CAAC,CAAC;QAEnB,KAAK,MAAM,IAAI,IAAI,aAAa,EAAE,CAAC;YACjC,MAAM,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;YAC9B,IAAI,OAAe,CAAC;YACpB,IAAI,CAAC;gBACH,OAAO,GAAG,YAAY,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;YAC3C,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,OAAO,CAAC,KAAK,CAAC,iBAAiB,IAAI,KAAK,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;gBACpF,SAAS;YACX,CAAC;YAED,MAAM,UAAU,GAAG,QAAQ,CAAC,OAAO,EAAE,IAAI,EAAE,WAAW,CAAC,CAAC;YACxD,IAAI,UAAU,CAAC,UAAU,IAAI,UAAU,CAAC,WAAW,CAAC,MAAM,KAAK,CAAC;gBAAE,SAAS;YAE3E,IAAI,QAAQ,GAAG,OAAO,CAAC;YACvB,IAAI,WAAW,GAAG,KAAK,CAAC;YAExB,KAAK,MAAM,IAAI,IAAI,UAAU,CAAC,WAAW,EAAE,CAAC;gBAC1C,MAAM,MAAM,GAAG,aAAa,CAAC,IAAI,CAAC,UAAU,EAAE,EAAE,aAAa,EAAE,IAAI,CAAC,aAAa,EAAE,CAAC,CAAC;gBACrF,IAAI,CAAC,MAAM,CAAC,OAAO;oBAAE,SAAS;gBAE9B,oEAAoE;gBACpE,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,qBAAqB,EAAE,MAAM,CAAC,CAAC;gBACvE,MAAM,EAAE,GAAG,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;gBACvD,MAAM,UAAU,GAAG,QAAQ,CAAC,OAAO,CAAC,EAAE,EAAE,MAAM,CAAC,UAAU,CAAC,CAAC;gBAC3D,IAAI,UAAU,KAAK,QAAQ,EAAE,CAAC;oBAC5B,QAAQ,GAAG,UAAU,CAAC;oBACtB,WAAW,GAAG,IAAI,CAAC;oBACnB,UAAU,EAAE,CAAC;oBACb,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;wBAChB,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;4BAC/B,OAAO,CAAC,GAAG,CAAC,KAAK,IAAI,KAAK,GAAG,EAAE,CAAC,CAAC;wBACnC,CAAC;oBACH,CAAC;gBACH,CAAC;YACH,CAAC;YAED,IAAI,WAAW,EAAE,CAAC;gBAChB,aAAa,CAAC,OAAO,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC;gBAC1C,UAAU,EAAE,CAAC;YACf,CAAC;QACH,CAAC;QAED,OAAO,CAAC,GAAG,CAAC,WAAW,UAAU,mBAAmB,UAAU,QAAQ,CAAC,CAAC;QACxE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,oEAAoE;IACpE,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;QAClB,IAAI,cAAc,GAAG,CAAC,CAAC;QACvB,IAAI,UAAU,GAAG,CAAC,CAAC;QAEnB,KAAK,MAAM,IAAI,IAAI,aAAa,EAAE,CAAC;YACjC,MAAM,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;YAC9B,IAAI,OAAe,CAAC;YACpB,IAAI,CAAC;gBACH,OAAO,GAAG,YAAY,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;YAC3C,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,OAAO,CAAC,KAAK,CAAC,iBAAiB,IAAI,KAAK,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;gBACpF,SAAS;YACX,CAAC;YAED,MAAM,UAAU,GAAG,QAAQ,CAAC,OAAO,EAAE,IAAI,EAAE,WAAW,CAAC,CAAC;YACxD,IAAI,UAAU,CAAC,UAAU,IAAI,UAAU,CAAC,WAAW,CAAC,MAAM,KAAK,CAAC;gBAAE,SAAS;YAE3E,MAAM,MAAM,GAAG,kBAAkB,CAAC,OAAO,EAAE,UAAU,CAAC,WAAW,EAAE;gBACjE,QAAQ,EAAE,IAAI,CAAC,QAAQ;gBACvB,mBAAmB,EAAE,IAAI,CAAC,mBAAmB;aAC9C,CAAC,CAAC;YAEH,IAAI,MAAM,CAAC,KAAK,GAAG,CAAC,EAAE,CAAC;gBACrB,aAAa,CAAC,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;gBAChD,UAAU,EAAE,CAAC;gBACb,cAAc,IAAI,MAAM,CAAC,KAAK,CAAC;gBAC/B,OAAO,CAAC,GAAG,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC;YAC7B,CAAC;QACH,CAAC;QAED,OAAO,CAAC,GAAG,CAAC,eAAe,cAAc,mBAAmB,UAAU,QAAQ,CAAC,CAAC;QAChF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,IAAI,gBAAgB,GAAG,CAAC,CAAC;IACzB,IAAI,WAAW,GAAG,CAAC,CAAC;IACpB,IAAI,aAAa,GAAG,CAAC,CAAC;IAEtB,KAAK,MAAM,IAAI,IAAI,aAAa,EAAE,CAAC;QACjC,MAAM,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;QAC9B,IAAI,OAAe,CAAC;QACpB,IAAI,CAAC;YACH,OAAO,GAAG,YAAY,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QAC3C,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,CAAC,KAAK,CAAC,iBAAiB,IAAI,KAAK,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;YACpF,SAAS,GAAG,IAAI,CAAC;YACjB,SAAS;QACX,CAAC;QAED,MAAM,UAAU,GAAG,QAAQ,CAAC,OAAO,EAAE,IAAI,EAAE,WAAW,CAAC,CAAC;QAExD,IAAI,UAAU,CAAC,UAAU,EAAE,CAAC;YAC1B,OAAO,CAAC,KAAK,CAAC,iBAAiB,IAAI,KAAK,UAAU,CAAC,UAAU,EAAE,CAAC,CAAC;YACjE,SAAS,GAAG,IAAI,CAAC;YACjB,SAAS;QACX,CAAC;QAED,IAAI,IAAI,CAAC,MAAM,KAAK,MAAM,EAAE,CAAC;YAC3B,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;YAC7B,SAAS;QACX,CAAC;QAED,KAAK,MAAM,IAAI,IAAI,UAAU,CAAC,WAAW,EAAE,CAAC;YAC1C,gBAAgB,EAAE,CAAC;YACnB,MAAM,KAAK,GAAG,iBAAiB,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;YAC3E,MAAM,YAAY,GAAG,IAAI,CAAC,KAAK;gBAC7B,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,OAAO,CAAC;gBAC3C,CAAC,CAAC,KAAK,CAAC;YAEV,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,OAAO,CAAC,CAAC,MAAM,CAAC;YAChE,MAAM,QAAQ,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,MAAM,CAAC;YACpE,WAAW,IAAI,MAAM,CAAC;YACtB,aAAa,IAAI,QAAQ,CAAC;YAE1B,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC5B,OAAO,CAAC,GAAG,CAAC,KAAK,IAAI,MAAM,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;gBAC5C,OAAO,CAAC,GAAG,CAAC,iBAAiB,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;gBAC9G,KAAK,MAAM,CAAC,IAAI,YAAY,EAAE,CAAC;oBAC7B,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,CAAC;gBACnC,CAAC;YACH,CAAC;YAED,IAAI,MAAM,GAAG,CAAC;gBAAE,SAAS,GAAG,IAAI,CAAC;YACjC,IAAI,QAAQ,GAAG,CAAC;gBAAE,WAAW,GAAG,IAAI,CAAC;QACvC,CAAC;IACH,CAAC;IAED,IAAI,IAAI,CAAC,MAAM,KAAK,MAAM,EAAE,CAAC;QAC3B,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,WAAW,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;IACpD,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,GAAG,CAAC,iDAAiD,CAAC,CAAC;QAC/D,OAAO,CAAC,GAAG,CAAC,WAAW,aAAa,CAAC,MAAM,WAAW,gBAAgB,cAAc,CAAC,CAAC;QACtF,OAAO,CAAC,GAAG,CAAC,KAAK,WAAW,YAAY,aAAa,WAAW,CAAC,CAAC;QAClE,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,OAAO,CAAC,GAAG,CAAC,2BAA2B,CAAC,CAAC;QAC3C,CAAC;IACH,CAAC;IAED,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACpE,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE;IACjB,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACnB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
|
|
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
|
+
"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",
|