@ldclabs/kip-lang 0.4.0 → 2.0.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/CHANGELOG.md +53 -0
- package/LICENSE +21 -0
- package/README.md +89 -64
- package/dist/ast.d.ts +511 -145
- package/dist/ast.d.ts.map +1 -1
- package/dist/diagnostics.d.ts +8 -2
- package/dist/diagnostics.d.ts.map +1 -1
- package/dist/diagnostics.js +32 -3
- package/dist/diagnostics.js.map +1 -1
- package/dist/exec-ast.d.ts +514 -149
- package/dist/exec-ast.d.ts.map +1 -1
- package/dist/exec-ast.js +8 -7
- package/dist/exec-ast.js.map +1 -1
- package/dist/formatter.d.ts.map +1 -1
- package/dist/formatter.js +870 -479
- package/dist/formatter.js.map +1 -1
- package/dist/index.d.ts +4 -4
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -2
- package/dist/index.js.map +1 -1
- package/dist/lexer.d.ts.map +1 -1
- package/dist/lexer.js +12 -30
- package/dist/lexer.js.map +1 -1
- package/dist/lower.d.ts +1 -2
- package/dist/lower.d.ts.map +1 -1
- package/dist/lower.js +1355 -594
- package/dist/lower.js.map +1 -1
- package/dist/parser.d.ts.map +1 -1
- package/dist/parser.js +2410 -1300
- package/dist/parser.js.map +1 -1
- package/dist/semantics.d.ts +11 -7
- package/dist/semantics.d.ts.map +1 -1
- package/dist/semantics.js +295 -180
- package/dist/semantics.js.map +1 -1
- package/dist/token.d.ts +130 -40
- package/dist/token.d.ts.map +1 -1
- package/dist/token.js +264 -83
- package/dist/token.js.map +1 -1
- package/dist/version.d.ts +2 -2
- package/dist/version.js +2 -2
- package/package.json +35 -5
- package/src/ast.ts +914 -0
- package/src/budget.ts +108 -0
- package/src/diagnostics.ts +182 -0
- package/src/errors.ts +42 -0
- package/src/exec-ast.ts +614 -0
- package/src/formatter.ts +1339 -0
- package/src/index.ts +226 -0
- package/src/lexer.ts +459 -0
- package/src/lower.ts +2094 -0
- package/src/parser.ts +3506 -0
- package/src/semantics.ts +392 -0
- package/src/token.ts +408 -0
- package/src/version.ts +13 -0
package/dist/token.d.ts
CHANGED
|
@@ -9,62 +9,120 @@ export declare enum TokenType {
|
|
|
9
9
|
Identifier = "Identifier",
|
|
10
10
|
Variable = "Variable",// ?foo
|
|
11
11
|
Parameter = "Parameter",// :foo
|
|
12
|
-
SystemIdent = "SystemIdent",// $foo
|
|
13
12
|
Find = "FIND",
|
|
14
13
|
Where = "WHERE",
|
|
15
|
-
OrderBy = "ORDER_BY",// matched as two tokens then merged
|
|
16
|
-
Limit = "LIMIT",
|
|
17
|
-
Cursor = "CURSOR",
|
|
18
14
|
Filter = "FILTER",
|
|
19
15
|
Not = "NOT",
|
|
20
16
|
Optional = "OPTIONAL",
|
|
21
17
|
Union = "UNION",
|
|
18
|
+
Belief = "BELIEF",
|
|
19
|
+
Slot = "SLOT",
|
|
20
|
+
Order = "ORDER",
|
|
21
|
+
By = "BY",
|
|
22
22
|
Asc = "ASC",
|
|
23
23
|
Desc = "DESC",
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
24
|
+
Limit = "LIMIT",
|
|
25
|
+
Cursor = "CURSOR",
|
|
26
|
+
Distinct = "DISTINCT",
|
|
27
|
+
As = "AS",
|
|
28
|
+
Of = "OF",
|
|
29
|
+
Seq = "SEQ",
|
|
30
|
+
Tx = "TX",
|
|
31
|
+
Time = "TIME",
|
|
32
|
+
For = "FOR",
|
|
33
|
+
Epistemic = "EPISTEMIC",
|
|
28
34
|
Concept = "CONCEPT",
|
|
29
35
|
Proposition = "PROPOSITION",
|
|
36
|
+
Assertion = "ASSERTION",
|
|
37
|
+
Evidence = "EVIDENCE",
|
|
38
|
+
Activity = "ACTIVITY",
|
|
39
|
+
Structural = "STRUCTURAL",
|
|
40
|
+
Mutate = "MUTATE",
|
|
41
|
+
Create = "CREATE",
|
|
42
|
+
Upsert = "UPSERT",
|
|
43
|
+
Ensure = "ENSURE",
|
|
44
|
+
Assert = "ASSERT",
|
|
45
|
+
Superseding = "SUPERSEDING",
|
|
46
|
+
Update = "UPDATE",
|
|
47
|
+
Retract = "RETRACT",
|
|
48
|
+
Supersede = "SUPERSEDE",
|
|
49
|
+
Correct = "CORRECT",
|
|
50
|
+
Transition = "TRANSITION",
|
|
30
51
|
Set = "SET",
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
52
|
+
Unset = "UNSET",
|
|
53
|
+
Retention = "RETENTION",
|
|
54
|
+
Archive = "ARCHIVE",
|
|
55
|
+
Tombstone = "TOMBSTONE",
|
|
56
|
+
Purge = "PURGE",
|
|
57
|
+
Confirm = "CONFIRM",
|
|
58
|
+
Reference = "REFERENCE",
|
|
59
|
+
Policy = "POLICY",
|
|
60
|
+
Merge = "MERGE",
|
|
37
61
|
Into = "INTO",
|
|
62
|
+
To = "TO",
|
|
63
|
+
Type = "TYPE",
|
|
64
|
+
Client = "CLIENT",
|
|
65
|
+
Key = "KEY",
|
|
66
|
+
Name = "NAME",
|
|
67
|
+
Match = "MATCH",
|
|
68
|
+
Fields = "FIELDS",
|
|
69
|
+
Attributes = "ATTRIBUTES",
|
|
70
|
+
Facet = "FACET",
|
|
38
71
|
Expect = "EXPECT",
|
|
39
72
|
Version = "VERSION",
|
|
73
|
+
State = "STATE",
|
|
40
74
|
Describe = "DESCRIBE",
|
|
75
|
+
List = "LIST",
|
|
41
76
|
Search = "SEARCH",
|
|
77
|
+
Verify = "VERIFY",
|
|
78
|
+
Validate = "VALIDATE",
|
|
79
|
+
Preview = "PREVIEW",
|
|
80
|
+
History = "HISTORY",
|
|
81
|
+
Changes = "CHANGES",
|
|
82
|
+
Snapshot = "SNAPSHOT",
|
|
42
83
|
Export = "EXPORT",
|
|
43
84
|
Primer = "PRIMER",
|
|
44
|
-
Domains = "DOMAINS",
|
|
45
|
-
Type = "TYPE",
|
|
46
|
-
Types = "TYPES",
|
|
47
85
|
Mode = "MODE",
|
|
86
|
+
Protocol = "PROTOCOL",
|
|
87
|
+
Execution = "EXECUTION",
|
|
88
|
+
Context = "CONTEXT",
|
|
89
|
+
Capabilities = "CAPABILITIES",
|
|
90
|
+
Capability = "CAPABILITY",
|
|
91
|
+
Space = "SPACE",
|
|
92
|
+
Spaces = "SPACES",
|
|
93
|
+
Schema = "SCHEMA",
|
|
94
|
+
Environment = "ENVIRONMENT",
|
|
95
|
+
Package = "PACKAGE",
|
|
96
|
+
Packages = "PACKAGES",
|
|
97
|
+
Predicate = "PREDICATE",
|
|
98
|
+
Predicates = "PREDICATES",
|
|
99
|
+
Field = "FIELD",
|
|
100
|
+
Facets = "FACETS",
|
|
101
|
+
Types = "TYPES",
|
|
102
|
+
Policies = "POLICIES",
|
|
103
|
+
Compatibility = "COMPATIBILITY",
|
|
104
|
+
From = "FROM",
|
|
105
|
+
Error = "ERROR",
|
|
106
|
+
Transaction = "TRANSACTION",
|
|
107
|
+
Idempotency = "IDEMPOTENCY",
|
|
108
|
+
Capsule = "CAPSULE",
|
|
109
|
+
Projection = "PROJECTION",
|
|
110
|
+
Trust = "TRUST",
|
|
111
|
+
Access = "ACCESS",
|
|
112
|
+
With = "WITH",
|
|
113
|
+
Status = "STATUS",
|
|
114
|
+
Cognition = "COGNITION",
|
|
48
115
|
Threshold = "THRESHOLD",
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
Regex = "REGEX",
|
|
60
|
-
In = "IN",
|
|
61
|
-
IsNull = "IS_NULL",
|
|
62
|
-
IsNotNull = "IS_NOT_NULL",
|
|
63
|
-
Distinct = "DISTINCT",
|
|
64
|
-
Add = "ADD",
|
|
65
|
-
Mul = "MUL",
|
|
66
|
-
Clamp = "CLAMP",
|
|
67
|
-
Coalesce = "COALESCE",
|
|
116
|
+
Receipt = "RECEIPT",
|
|
117
|
+
Blob = "BLOB",
|
|
118
|
+
Checkpoint = "CHECKPOINT",
|
|
119
|
+
Kql = "KQL",
|
|
120
|
+
Kml = "KML",
|
|
121
|
+
Import = "IMPORT",
|
|
122
|
+
Plan = "PLAN",
|
|
123
|
+
Element = "ELEMENT",
|
|
124
|
+
Since = "SINCE",
|
|
125
|
+
After = "AFTER",
|
|
68
126
|
Eq = "==",
|
|
69
127
|
NotEq = "!=",
|
|
70
128
|
Lt = "<",
|
|
@@ -74,6 +132,7 @@ export declare enum TokenType {
|
|
|
74
132
|
And = "&&",
|
|
75
133
|
Or = "||",
|
|
76
134
|
Bang = "!",
|
|
135
|
+
Minus = "-",
|
|
77
136
|
LBrace = "{",
|
|
78
137
|
RBrace = "}",
|
|
79
138
|
LParen = "(",
|
|
@@ -105,12 +164,43 @@ export interface Token {
|
|
|
105
164
|
line: number;
|
|
106
165
|
column: number;
|
|
107
166
|
}
|
|
108
|
-
/**
|
|
167
|
+
/**
|
|
168
|
+
* Every KIP 2.0 protocol keyword, keyed by its canonical uppercase spelling.
|
|
169
|
+
*
|
|
170
|
+
* KIP 2.0 keywords are ASCII case-insensitive (canonical rendering is
|
|
171
|
+
* uppercase), so the lexer looks names up here after upper-casing. Schema
|
|
172
|
+
* symbols and string values keep their own case-sensitive contracts.
|
|
173
|
+
*/
|
|
109
174
|
export declare const KEYWORDS: ReadonlyMap<string, TokenType>;
|
|
110
|
-
/**
|
|
111
|
-
|
|
175
|
+
/**
|
|
176
|
+
* Aggregate names legal in `aggregate_expression`.
|
|
177
|
+
*
|
|
178
|
+
* The grammar spells these as terminals, but `function_call` is an open
|
|
179
|
+
* `identifier, "(" ...`, so they stay lexical identifiers and the parser
|
|
180
|
+
* recognizes them by name. That keeps one rule for every call shape.
|
|
181
|
+
*/
|
|
182
|
+
export declare const AGGREGATES: ReadonlySet<string>;
|
|
183
|
+
/**
|
|
184
|
+
* Runtime functions KIP 2.0 registers by name.
|
|
185
|
+
*
|
|
186
|
+
* `function_call` is syntactically open so namespaced and future functions
|
|
187
|
+
* still parse; this set is what the semantic layer and editor tooling treat
|
|
188
|
+
* as known. Membership is not a parse-time gate.
|
|
189
|
+
*/
|
|
190
|
+
export declare const FUNCTIONS: ReadonlySet<string>;
|
|
112
191
|
export declare function isKeyword(type: TokenType): boolean;
|
|
113
|
-
export declare function isFunction(
|
|
192
|
+
export declare function isFunction(name: string): boolean;
|
|
193
|
+
export declare function isAggregate(name: string): boolean;
|
|
114
194
|
export declare function isLiteral(type: TokenType): boolean;
|
|
115
195
|
export declare function isTrivia(type: TokenType): boolean;
|
|
196
|
+
/**
|
|
197
|
+
* True when a token may stand where the grammar writes `identifier`.
|
|
198
|
+
*
|
|
199
|
+
* KIP 2.0 keywords are contextual, not reserved: the Spec's own examples use
|
|
200
|
+
* `by`, `mode`, `at`, `key`, `name`, `type` and `status` as object keys, and
|
|
201
|
+
* `?a.lifecycle.status` as a dot path. Rejecting a keyword in those positions
|
|
202
|
+
* would make the normative examples unparseable, so every keyword doubles as
|
|
203
|
+
* an identifier outside the position that gives it meaning.
|
|
204
|
+
*/
|
|
205
|
+
export declare function isIdentifierLike(type: TokenType): boolean;
|
|
116
206
|
//# sourceMappingURL=token.d.ts.map
|
package/dist/token.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"token.d.ts","sourceRoot":"","sources":["../src/token.ts"],"names":[],"mappings":"AAAA,oBAAY,SAAS;IAEnB,UAAU,eAAe;IACzB,OAAO,YAAY;IACnB,OAAO,YAAY;IAGnB,MAAM,WAAW;IACjB,MAAM,WAAW;IACjB,OAAO,YAAY;IACnB,IAAI,SAAS;IAGb,UAAU,eAAe;IACzB,QAAQ,aAAa,CAAE,OAAO;IAC9B,SAAS,cAAc,CAAE,OAAO;
|
|
1
|
+
{"version":3,"file":"token.d.ts","sourceRoot":"","sources":["../src/token.ts"],"names":[],"mappings":"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"}
|
package/dist/token.js
CHANGED
|
@@ -13,67 +13,124 @@ export var TokenType;
|
|
|
13
13
|
TokenType["Identifier"] = "Identifier";
|
|
14
14
|
TokenType["Variable"] = "Variable";
|
|
15
15
|
TokenType["Parameter"] = "Parameter";
|
|
16
|
-
|
|
17
|
-
// Keywords - KQL
|
|
16
|
+
// ── Keywords — KQL ────────────────────────────────────────────────
|
|
18
17
|
TokenType["Find"] = "FIND";
|
|
19
18
|
TokenType["Where"] = "WHERE";
|
|
20
|
-
TokenType["OrderBy"] = "ORDER_BY";
|
|
21
|
-
TokenType["Limit"] = "LIMIT";
|
|
22
|
-
TokenType["Cursor"] = "CURSOR";
|
|
23
19
|
TokenType["Filter"] = "FILTER";
|
|
24
20
|
TokenType["Not"] = "NOT";
|
|
25
21
|
TokenType["Optional"] = "OPTIONAL";
|
|
26
22
|
TokenType["Union"] = "UNION";
|
|
23
|
+
TokenType["Belief"] = "BELIEF";
|
|
24
|
+
TokenType["Slot"] = "SLOT";
|
|
25
|
+
TokenType["Order"] = "ORDER";
|
|
26
|
+
TokenType["By"] = "BY";
|
|
27
27
|
TokenType["Asc"] = "ASC";
|
|
28
28
|
TokenType["Desc"] = "DESC";
|
|
29
|
-
|
|
30
|
-
TokenType["
|
|
31
|
-
TokenType["
|
|
32
|
-
TokenType["
|
|
33
|
-
TokenType["
|
|
29
|
+
TokenType["Limit"] = "LIMIT";
|
|
30
|
+
TokenType["Cursor"] = "CURSOR";
|
|
31
|
+
TokenType["Distinct"] = "DISTINCT";
|
|
32
|
+
TokenType["As"] = "AS";
|
|
33
|
+
TokenType["Of"] = "OF";
|
|
34
|
+
TokenType["Seq"] = "SEQ";
|
|
35
|
+
TokenType["Tx"] = "TX";
|
|
36
|
+
TokenType["Time"] = "TIME";
|
|
37
|
+
TokenType["For"] = "FOR";
|
|
38
|
+
TokenType["Epistemic"] = "EPISTEMIC";
|
|
39
|
+
// ── Keywords — element kinds (shared KQL/KML/META) ────────────────
|
|
34
40
|
TokenType["Concept"] = "CONCEPT";
|
|
35
41
|
TokenType["Proposition"] = "PROPOSITION";
|
|
42
|
+
TokenType["Assertion"] = "ASSERTION";
|
|
43
|
+
TokenType["Evidence"] = "EVIDENCE";
|
|
44
|
+
TokenType["Activity"] = "ACTIVITY";
|
|
45
|
+
TokenType["Structural"] = "STRUCTURAL";
|
|
46
|
+
// ── Keywords — KML ────────────────────────────────────────────────
|
|
47
|
+
TokenType["Mutate"] = "MUTATE";
|
|
48
|
+
TokenType["Create"] = "CREATE";
|
|
49
|
+
TokenType["Upsert"] = "UPSERT";
|
|
50
|
+
TokenType["Ensure"] = "ENSURE";
|
|
51
|
+
TokenType["Assert"] = "ASSERT";
|
|
52
|
+
TokenType["Superseding"] = "SUPERSEDING";
|
|
53
|
+
TokenType["Update"] = "UPDATE";
|
|
54
|
+
TokenType["Retract"] = "RETRACT";
|
|
55
|
+
TokenType["Supersede"] = "SUPERSEDE";
|
|
56
|
+
TokenType["Correct"] = "CORRECT";
|
|
57
|
+
TokenType["Transition"] = "TRANSITION";
|
|
36
58
|
TokenType["Set"] = "SET";
|
|
37
|
-
TokenType["
|
|
38
|
-
TokenType["
|
|
39
|
-
TokenType["
|
|
40
|
-
TokenType["
|
|
41
|
-
TokenType["
|
|
42
|
-
TokenType["
|
|
59
|
+
TokenType["Unset"] = "UNSET";
|
|
60
|
+
TokenType["Retention"] = "RETENTION";
|
|
61
|
+
TokenType["Archive"] = "ARCHIVE";
|
|
62
|
+
TokenType["Tombstone"] = "TOMBSTONE";
|
|
63
|
+
TokenType["Purge"] = "PURGE";
|
|
64
|
+
TokenType["Confirm"] = "CONFIRM";
|
|
65
|
+
TokenType["Reference"] = "REFERENCE";
|
|
66
|
+
TokenType["Policy"] = "POLICY";
|
|
67
|
+
TokenType["Merge"] = "MERGE";
|
|
43
68
|
TokenType["Into"] = "INTO";
|
|
69
|
+
TokenType["To"] = "TO";
|
|
70
|
+
TokenType["Type"] = "TYPE";
|
|
71
|
+
TokenType["Client"] = "CLIENT";
|
|
72
|
+
TokenType["Key"] = "KEY";
|
|
73
|
+
TokenType["Name"] = "NAME";
|
|
74
|
+
TokenType["Match"] = "MATCH";
|
|
75
|
+
TokenType["Fields"] = "FIELDS";
|
|
76
|
+
TokenType["Attributes"] = "ATTRIBUTES";
|
|
77
|
+
TokenType["Facet"] = "FACET";
|
|
44
78
|
TokenType["Expect"] = "EXPECT";
|
|
45
79
|
TokenType["Version"] = "VERSION";
|
|
46
|
-
|
|
80
|
+
TokenType["State"] = "STATE";
|
|
81
|
+
// ── Keywords — META ───────────────────────────────────────────────
|
|
47
82
|
TokenType["Describe"] = "DESCRIBE";
|
|
83
|
+
TokenType["List"] = "LIST";
|
|
48
84
|
TokenType["Search"] = "SEARCH";
|
|
85
|
+
TokenType["Verify"] = "VERIFY";
|
|
86
|
+
TokenType["Validate"] = "VALIDATE";
|
|
87
|
+
TokenType["Preview"] = "PREVIEW";
|
|
88
|
+
TokenType["History"] = "HISTORY";
|
|
89
|
+
TokenType["Changes"] = "CHANGES";
|
|
90
|
+
TokenType["Snapshot"] = "SNAPSHOT";
|
|
49
91
|
TokenType["Export"] = "EXPORT";
|
|
50
92
|
TokenType["Primer"] = "PRIMER";
|
|
51
|
-
TokenType["Domains"] = "DOMAINS";
|
|
52
|
-
TokenType["Type"] = "TYPE";
|
|
53
|
-
TokenType["Types"] = "TYPES";
|
|
54
93
|
TokenType["Mode"] = "MODE";
|
|
94
|
+
TokenType["Protocol"] = "PROTOCOL";
|
|
95
|
+
TokenType["Execution"] = "EXECUTION";
|
|
96
|
+
TokenType["Context"] = "CONTEXT";
|
|
97
|
+
TokenType["Capabilities"] = "CAPABILITIES";
|
|
98
|
+
TokenType["Capability"] = "CAPABILITY";
|
|
99
|
+
TokenType["Space"] = "SPACE";
|
|
100
|
+
TokenType["Spaces"] = "SPACES";
|
|
101
|
+
TokenType["Schema"] = "SCHEMA";
|
|
102
|
+
TokenType["Environment"] = "ENVIRONMENT";
|
|
103
|
+
TokenType["Package"] = "PACKAGE";
|
|
104
|
+
TokenType["Packages"] = "PACKAGES";
|
|
105
|
+
TokenType["Predicate"] = "PREDICATE";
|
|
106
|
+
TokenType["Predicates"] = "PREDICATES";
|
|
107
|
+
TokenType["Field"] = "FIELD";
|
|
108
|
+
TokenType["Facets"] = "FACETS";
|
|
109
|
+
TokenType["Types"] = "TYPES";
|
|
110
|
+
TokenType["Policies"] = "POLICIES";
|
|
111
|
+
TokenType["Compatibility"] = "COMPATIBILITY";
|
|
112
|
+
TokenType["From"] = "FROM";
|
|
113
|
+
TokenType["Error"] = "ERROR";
|
|
114
|
+
TokenType["Transaction"] = "TRANSACTION";
|
|
115
|
+
TokenType["Idempotency"] = "IDEMPOTENCY";
|
|
116
|
+
TokenType["Capsule"] = "CAPSULE";
|
|
117
|
+
TokenType["Projection"] = "PROJECTION";
|
|
118
|
+
TokenType["Trust"] = "TRUST";
|
|
119
|
+
TokenType["Access"] = "ACCESS";
|
|
120
|
+
TokenType["With"] = "WITH";
|
|
121
|
+
TokenType["Status"] = "STATUS";
|
|
122
|
+
TokenType["Cognition"] = "COGNITION";
|
|
55
123
|
TokenType["Threshold"] = "THRESHOLD";
|
|
56
|
-
|
|
57
|
-
TokenType["
|
|
58
|
-
TokenType["
|
|
59
|
-
|
|
60
|
-
TokenType["
|
|
61
|
-
TokenType["
|
|
62
|
-
TokenType["
|
|
63
|
-
TokenType["
|
|
64
|
-
TokenType["
|
|
65
|
-
TokenType["
|
|
66
|
-
TokenType["StartsWith"] = "STARTS_WITH";
|
|
67
|
-
TokenType["EndsWith"] = "ENDS_WITH";
|
|
68
|
-
TokenType["Regex"] = "REGEX";
|
|
69
|
-
TokenType["In"] = "IN";
|
|
70
|
-
TokenType["IsNull"] = "IS_NULL";
|
|
71
|
-
TokenType["IsNotNull"] = "IS_NOT_NULL";
|
|
72
|
-
TokenType["Distinct"] = "DISTINCT";
|
|
73
|
-
TokenType["Add"] = "ADD";
|
|
74
|
-
TokenType["Mul"] = "MUL";
|
|
75
|
-
TokenType["Clamp"] = "CLAMP";
|
|
76
|
-
TokenType["Coalesce"] = "COALESCE";
|
|
124
|
+
TokenType["Receipt"] = "RECEIPT";
|
|
125
|
+
TokenType["Blob"] = "BLOB";
|
|
126
|
+
TokenType["Checkpoint"] = "CHECKPOINT";
|
|
127
|
+
TokenType["Kql"] = "KQL";
|
|
128
|
+
TokenType["Kml"] = "KML";
|
|
129
|
+
TokenType["Import"] = "IMPORT";
|
|
130
|
+
TokenType["Plan"] = "PLAN";
|
|
131
|
+
TokenType["Element"] = "ELEMENT";
|
|
132
|
+
TokenType["Since"] = "SINCE";
|
|
133
|
+
TokenType["After"] = "AFTER";
|
|
77
134
|
// Operators
|
|
78
135
|
TokenType["Eq"] = "==";
|
|
79
136
|
TokenType["NotEq"] = "!=";
|
|
@@ -84,6 +141,7 @@ export var TokenType;
|
|
|
84
141
|
TokenType["And"] = "&&";
|
|
85
142
|
TokenType["Or"] = "||";
|
|
86
143
|
TokenType["Bang"] = "!";
|
|
144
|
+
TokenType["Minus"] = "-";
|
|
87
145
|
// Punctuation
|
|
88
146
|
TokenType["LBrace"] = "{";
|
|
89
147
|
TokenType["RBrace"] = "}";
|
|
@@ -99,74 +157,185 @@ export var TokenType;
|
|
|
99
157
|
TokenType["EOF"] = "EOF";
|
|
100
158
|
TokenType["Unknown"] = "Unknown";
|
|
101
159
|
})(TokenType || (TokenType = {}));
|
|
102
|
-
/**
|
|
160
|
+
/**
|
|
161
|
+
* Every KIP 2.0 protocol keyword, keyed by its canonical uppercase spelling.
|
|
162
|
+
*
|
|
163
|
+
* KIP 2.0 keywords are ASCII case-insensitive (canonical rendering is
|
|
164
|
+
* uppercase), so the lexer looks names up here after upper-casing. Schema
|
|
165
|
+
* symbols and string values keep their own case-sensitive contracts.
|
|
166
|
+
*/
|
|
103
167
|
export const KEYWORDS = new Map([
|
|
168
|
+
// KQL
|
|
104
169
|
['FIND', TokenType.Find],
|
|
105
170
|
['WHERE', TokenType.Where],
|
|
106
|
-
['ORDER', TokenType.Order],
|
|
107
|
-
['BY', TokenType.By],
|
|
108
|
-
['LIMIT', TokenType.Limit],
|
|
109
|
-
['CURSOR', TokenType.Cursor],
|
|
110
171
|
['FILTER', TokenType.Filter],
|
|
111
172
|
['NOT', TokenType.Not],
|
|
112
173
|
['OPTIONAL', TokenType.Optional],
|
|
113
174
|
['UNION', TokenType.Union],
|
|
175
|
+
['BELIEF', TokenType.Belief],
|
|
176
|
+
['SLOT', TokenType.Slot],
|
|
177
|
+
['ORDER', TokenType.Order],
|
|
178
|
+
['BY', TokenType.By],
|
|
114
179
|
['ASC', TokenType.Asc],
|
|
115
180
|
['DESC', TokenType.Desc],
|
|
116
|
-
['
|
|
117
|
-
['
|
|
118
|
-
['
|
|
119
|
-
['
|
|
181
|
+
['LIMIT', TokenType.Limit],
|
|
182
|
+
['CURSOR', TokenType.Cursor],
|
|
183
|
+
['DISTINCT', TokenType.Distinct],
|
|
184
|
+
['AS', TokenType.As],
|
|
185
|
+
['OF', TokenType.Of],
|
|
186
|
+
['SEQ', TokenType.Seq],
|
|
187
|
+
['TX', TokenType.Tx],
|
|
188
|
+
['TIME', TokenType.Time],
|
|
189
|
+
['FOR', TokenType.For],
|
|
190
|
+
['EPISTEMIC', TokenType.Epistemic],
|
|
191
|
+
// Element kinds
|
|
120
192
|
['CONCEPT', TokenType.Concept],
|
|
121
193
|
['PROPOSITION', TokenType.Proposition],
|
|
194
|
+
['ASSERTION', TokenType.Assertion],
|
|
195
|
+
['EVIDENCE', TokenType.Evidence],
|
|
196
|
+
['ACTIVITY', TokenType.Activity],
|
|
197
|
+
['STRUCTURAL', TokenType.Structural],
|
|
198
|
+
// KML
|
|
199
|
+
['MUTATE', TokenType.Mutate],
|
|
200
|
+
['CREATE', TokenType.Create],
|
|
201
|
+
['UPSERT', TokenType.Upsert],
|
|
202
|
+
['ENSURE', TokenType.Ensure],
|
|
203
|
+
['ASSERT', TokenType.Assert],
|
|
204
|
+
['SUPERSEDING', TokenType.Superseding],
|
|
205
|
+
['UPDATE', TokenType.Update],
|
|
206
|
+
['RETRACT', TokenType.Retract],
|
|
207
|
+
['SUPERSEDE', TokenType.Supersede],
|
|
208
|
+
['CORRECT', TokenType.Correct],
|
|
209
|
+
['TRANSITION', TokenType.Transition],
|
|
122
210
|
['SET', TokenType.Set],
|
|
123
|
-
['
|
|
124
|
-
['
|
|
125
|
-
['
|
|
126
|
-
['
|
|
127
|
-
['
|
|
128
|
-
['
|
|
211
|
+
['UNSET', TokenType.Unset],
|
|
212
|
+
['RETENTION', TokenType.Retention],
|
|
213
|
+
['ARCHIVE', TokenType.Archive],
|
|
214
|
+
['TOMBSTONE', TokenType.Tombstone],
|
|
215
|
+
['PURGE', TokenType.Purge],
|
|
216
|
+
['CONFIRM', TokenType.Confirm],
|
|
217
|
+
['REFERENCE', TokenType.Reference],
|
|
218
|
+
['POLICY', TokenType.Policy],
|
|
219
|
+
['MERGE', TokenType.Merge],
|
|
129
220
|
['INTO', TokenType.Into],
|
|
221
|
+
['TO', TokenType.To],
|
|
222
|
+
['TYPE', TokenType.Type],
|
|
223
|
+
['CLIENT', TokenType.Client],
|
|
224
|
+
['KEY', TokenType.Key],
|
|
225
|
+
['NAME', TokenType.Name],
|
|
226
|
+
['MATCH', TokenType.Match],
|
|
227
|
+
['FIELDS', TokenType.Fields],
|
|
228
|
+
['ATTRIBUTES', TokenType.Attributes],
|
|
229
|
+
['FACET', TokenType.Facet],
|
|
130
230
|
['EXPECT', TokenType.Expect],
|
|
131
231
|
['VERSION', TokenType.Version],
|
|
232
|
+
['STATE', TokenType.State],
|
|
233
|
+
// META
|
|
132
234
|
['DESCRIBE', TokenType.Describe],
|
|
235
|
+
['LIST', TokenType.List],
|
|
133
236
|
['SEARCH', TokenType.Search],
|
|
237
|
+
['VERIFY', TokenType.Verify],
|
|
238
|
+
['VALIDATE', TokenType.Validate],
|
|
239
|
+
['PREVIEW', TokenType.Preview],
|
|
240
|
+
['HISTORY', TokenType.History],
|
|
241
|
+
['CHANGES', TokenType.Changes],
|
|
242
|
+
['SNAPSHOT', TokenType.Snapshot],
|
|
134
243
|
['EXPORT', TokenType.Export],
|
|
135
244
|
['PRIMER', TokenType.Primer],
|
|
136
|
-
['DOMAINS', TokenType.Domains],
|
|
137
|
-
['TYPE', TokenType.Type],
|
|
138
|
-
['TYPES', TokenType.Types],
|
|
139
245
|
['MODE', TokenType.Mode],
|
|
140
|
-
['
|
|
246
|
+
['PROTOCOL', TokenType.Protocol],
|
|
247
|
+
['EXECUTION', TokenType.Execution],
|
|
248
|
+
['CONTEXT', TokenType.Context],
|
|
249
|
+
['CAPABILITIES', TokenType.Capabilities],
|
|
250
|
+
['CAPABILITY', TokenType.Capability],
|
|
251
|
+
['SPACE', TokenType.Space],
|
|
252
|
+
['SPACES', TokenType.Spaces],
|
|
253
|
+
['SCHEMA', TokenType.Schema],
|
|
254
|
+
['ENVIRONMENT', TokenType.Environment],
|
|
255
|
+
['PACKAGE', TokenType.Package],
|
|
256
|
+
['PACKAGES', TokenType.Packages],
|
|
257
|
+
['PREDICATE', TokenType.Predicate],
|
|
258
|
+
['PREDICATES', TokenType.Predicates],
|
|
259
|
+
['FIELD', TokenType.Field],
|
|
260
|
+
['FACETS', TokenType.Facets],
|
|
261
|
+
['TYPES', TokenType.Types],
|
|
262
|
+
['POLICIES', TokenType.Policies],
|
|
263
|
+
['COMPATIBILITY', TokenType.Compatibility],
|
|
264
|
+
['FROM', TokenType.From],
|
|
265
|
+
['ERROR', TokenType.Error],
|
|
266
|
+
['TRANSACTION', TokenType.Transaction],
|
|
267
|
+
['IDEMPOTENCY', TokenType.Idempotency],
|
|
268
|
+
['CAPSULE', TokenType.Capsule],
|
|
269
|
+
['PROJECTION', TokenType.Projection],
|
|
270
|
+
['TRUST', TokenType.Trust],
|
|
271
|
+
['ACCESS', TokenType.Access],
|
|
272
|
+
['WITH', TokenType.With],
|
|
273
|
+
['STATUS', TokenType.Status],
|
|
274
|
+
['COGNITION', TokenType.Cognition],
|
|
275
|
+
['THRESHOLD', TokenType.Threshold],
|
|
276
|
+
['RECEIPT', TokenType.Receipt],
|
|
277
|
+
['BLOB', TokenType.Blob],
|
|
278
|
+
['CHECKPOINT', TokenType.Checkpoint],
|
|
279
|
+
['KQL', TokenType.Kql],
|
|
280
|
+
['KML', TokenType.Kml],
|
|
281
|
+
['IMPORT', TokenType.Import],
|
|
282
|
+
['PLAN', TokenType.Plan],
|
|
283
|
+
['ELEMENT', TokenType.Element],
|
|
284
|
+
['SINCE', TokenType.Since],
|
|
285
|
+
['AFTER', TokenType.After]
|
|
141
286
|
]);
|
|
142
|
-
/**
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
['IS_NOT_NULL', TokenType.IsNotNull],
|
|
156
|
-
['DISTINCT', TokenType.Distinct],
|
|
157
|
-
['ADD', TokenType.Add],
|
|
158
|
-
['MUL', TokenType.Mul],
|
|
159
|
-
['CLAMP', TokenType.Clamp],
|
|
160
|
-
['COALESCE', TokenType.Coalesce]
|
|
287
|
+
/**
|
|
288
|
+
* Aggregate names legal in `aggregate_expression`.
|
|
289
|
+
*
|
|
290
|
+
* The grammar spells these as terminals, but `function_call` is an open
|
|
291
|
+
* `identifier, "(" ...`, so they stay lexical identifiers and the parser
|
|
292
|
+
* recognizes them by name. That keeps one rule for every call shape.
|
|
293
|
+
*/
|
|
294
|
+
export const AGGREGATES = new Set([
|
|
295
|
+
'COUNT',
|
|
296
|
+
'SUM',
|
|
297
|
+
'AVG',
|
|
298
|
+
'MIN',
|
|
299
|
+
'MAX'
|
|
161
300
|
]);
|
|
162
|
-
/**
|
|
301
|
+
/**
|
|
302
|
+
* Runtime functions KIP 2.0 registers by name.
|
|
303
|
+
*
|
|
304
|
+
* `function_call` is syntactically open so namespaced and future functions
|
|
305
|
+
* still parse; this set is what the semantic layer and editor tooling treat
|
|
306
|
+
* as known. Membership is not a parse-time gate.
|
|
307
|
+
*/
|
|
308
|
+
export const FUNCTIONS = new Set([
|
|
309
|
+
// Filter predicates
|
|
310
|
+
'IN',
|
|
311
|
+
'CONTAINS',
|
|
312
|
+
'STARTS_WITH',
|
|
313
|
+
'ENDS_WITH',
|
|
314
|
+
'REGEX',
|
|
315
|
+
'IS_NULL',
|
|
316
|
+
'IS_NOT_NULL',
|
|
317
|
+
'IS_LITERAL',
|
|
318
|
+
'IS_ELEMENT',
|
|
319
|
+
'IS_KIND',
|
|
320
|
+
'LITERAL_TYPE',
|
|
321
|
+
// Deterministic update expressions
|
|
322
|
+
'ADD',
|
|
323
|
+
'MUL',
|
|
324
|
+
'CLAMP',
|
|
325
|
+
'COALESCE',
|
|
326
|
+
// Aggregates
|
|
327
|
+
...AGGREGATES
|
|
328
|
+
]);
|
|
329
|
+
/** Reverse lookup set, built once, so membership tests are O(1). */
|
|
163
330
|
const KEYWORD_TYPES = new Set(KEYWORDS.values());
|
|
164
|
-
const FUNCTION_TYPES = new Set(FUNCTIONS.values());
|
|
165
331
|
export function isKeyword(type) {
|
|
166
332
|
return KEYWORD_TYPES.has(type);
|
|
167
333
|
}
|
|
168
|
-
export function isFunction(
|
|
169
|
-
return
|
|
334
|
+
export function isFunction(name) {
|
|
335
|
+
return FUNCTIONS.has(name.toUpperCase());
|
|
336
|
+
}
|
|
337
|
+
export function isAggregate(name) {
|
|
338
|
+
return AGGREGATES.has(name.toUpperCase());
|
|
170
339
|
}
|
|
171
340
|
export function isLiteral(type) {
|
|
172
341
|
return (type === TokenType.String ||
|
|
@@ -179,4 +348,16 @@ export function isTrivia(type) {
|
|
|
179
348
|
type === TokenType.Newline ||
|
|
180
349
|
type === TokenType.Comment);
|
|
181
350
|
}
|
|
351
|
+
/**
|
|
352
|
+
* True when a token may stand where the grammar writes `identifier`.
|
|
353
|
+
*
|
|
354
|
+
* KIP 2.0 keywords are contextual, not reserved: the Spec's own examples use
|
|
355
|
+
* `by`, `mode`, `at`, `key`, `name`, `type` and `status` as object keys, and
|
|
356
|
+
* `?a.lifecycle.status` as a dot path. Rejecting a keyword in those positions
|
|
357
|
+
* would make the normative examples unparseable, so every keyword doubles as
|
|
358
|
+
* an identifier outside the position that gives it meaning.
|
|
359
|
+
*/
|
|
360
|
+
export function isIdentifierLike(type) {
|
|
361
|
+
return type === TokenType.Identifier || isKeyword(type);
|
|
362
|
+
}
|
|
182
363
|
//# sourceMappingURL=token.js.map
|