@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.
Files changed (54) hide show
  1. package/CHANGELOG.md +53 -0
  2. package/LICENSE +21 -0
  3. package/README.md +89 -64
  4. package/dist/ast.d.ts +511 -145
  5. package/dist/ast.d.ts.map +1 -1
  6. package/dist/diagnostics.d.ts +8 -2
  7. package/dist/diagnostics.d.ts.map +1 -1
  8. package/dist/diagnostics.js +32 -3
  9. package/dist/diagnostics.js.map +1 -1
  10. package/dist/exec-ast.d.ts +514 -149
  11. package/dist/exec-ast.d.ts.map +1 -1
  12. package/dist/exec-ast.js +8 -7
  13. package/dist/exec-ast.js.map +1 -1
  14. package/dist/formatter.d.ts.map +1 -1
  15. package/dist/formatter.js +870 -479
  16. package/dist/formatter.js.map +1 -1
  17. package/dist/index.d.ts +4 -4
  18. package/dist/index.d.ts.map +1 -1
  19. package/dist/index.js +2 -2
  20. package/dist/index.js.map +1 -1
  21. package/dist/lexer.d.ts.map +1 -1
  22. package/dist/lexer.js +12 -30
  23. package/dist/lexer.js.map +1 -1
  24. package/dist/lower.d.ts +1 -2
  25. package/dist/lower.d.ts.map +1 -1
  26. package/dist/lower.js +1355 -594
  27. package/dist/lower.js.map +1 -1
  28. package/dist/parser.d.ts.map +1 -1
  29. package/dist/parser.js +2410 -1300
  30. package/dist/parser.js.map +1 -1
  31. package/dist/semantics.d.ts +11 -7
  32. package/dist/semantics.d.ts.map +1 -1
  33. package/dist/semantics.js +295 -180
  34. package/dist/semantics.js.map +1 -1
  35. package/dist/token.d.ts +130 -40
  36. package/dist/token.d.ts.map +1 -1
  37. package/dist/token.js +264 -83
  38. package/dist/token.js.map +1 -1
  39. package/dist/version.d.ts +2 -2
  40. package/dist/version.js +2 -2
  41. package/package.json +35 -5
  42. package/src/ast.ts +914 -0
  43. package/src/budget.ts +108 -0
  44. package/src/diagnostics.ts +182 -0
  45. package/src/errors.ts +42 -0
  46. package/src/exec-ast.ts +614 -0
  47. package/src/formatter.ts +1339 -0
  48. package/src/index.ts +226 -0
  49. package/src/lexer.ts +459 -0
  50. package/src/lower.ts +2094 -0
  51. package/src/parser.ts +3506 -0
  52. package/src/semantics.ts +392 -0
  53. package/src/token.ts +408 -0
  54. 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
- Upsert = "UPSERT",
25
- Update = "UPDATE",
26
- Merge = "MERGE",
27
- Delete = "DELETE",
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
- Attributes = "ATTRIBUTES",
32
- Propositions = "PROPOSITIONS",
33
- With = "WITH",
34
- Metadata = "METADATA",
35
- Detach = "DETACH",
36
- From = "FROM",
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
- Order = "ORDER",
50
- By = "BY",
51
- Count = "COUNT",
52
- Sum = "SUM",
53
- Avg = "AVG",
54
- Min = "MIN",
55
- Max = "MAX",
56
- Contains = "CONTAINS",
57
- StartsWith = "STARTS_WITH",
58
- EndsWith = "ENDS_WITH",
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
- /** Set of all KIP keywords (uppercase) mapped to their TokenType */
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
- /** Set of built-in function names mapped to their TokenType */
111
- export declare const FUNCTIONS: ReadonlyMap<string, TokenType>;
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(type: TokenType): boolean;
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
@@ -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;IAChC,WAAW,gBAAgB,CAAE,OAAO;IAGpC,IAAI,SAAS;IACb,KAAK,UAAU;IACf,OAAO,aAAa,CAAE,oCAAoC;IAC1D,KAAK,UAAU;IACf,MAAM,WAAW;IACjB,MAAM,WAAW;IACjB,GAAG,QAAQ;IACX,QAAQ,aAAa;IACrB,KAAK,UAAU;IACf,GAAG,QAAQ;IACX,IAAI,SAAS;IAGb,MAAM,WAAW;IACjB,MAAM,WAAW;IACjB,KAAK,UAAU;IACf,MAAM,WAAW;IACjB,OAAO,YAAY;IACnB,WAAW,gBAAgB;IAC3B,GAAG,QAAQ;IACX,UAAU,eAAe;IACzB,YAAY,iBAAiB;IAC7B,IAAI,SAAS;IACb,QAAQ,aAAa;IACrB,MAAM,WAAW;IACjB,IAAI,SAAS;IACb,IAAI,SAAS;IACb,MAAM,WAAW;IACjB,OAAO,YAAY;IAGnB,QAAQ,aAAa;IACrB,MAAM,WAAW;IACjB,MAAM,WAAW;IACjB,MAAM,WAAW;IACjB,OAAO,YAAY;IACnB,IAAI,SAAS;IACb,KAAK,UAAU;IACf,IAAI,SAAS;IACb,SAAS,cAAc;IAGvB,KAAK,UAAU;IACf,EAAE,OAAO;IAGT,KAAK,UAAU;IACf,GAAG,QAAQ;IACX,GAAG,QAAQ;IACX,GAAG,QAAQ;IACX,GAAG,QAAQ;IACX,QAAQ,aAAa;IACrB,UAAU,gBAAgB;IAC1B,QAAQ,cAAc;IACtB,KAAK,UAAU;IACf,EAAE,OAAO;IACT,MAAM,YAAY;IAClB,SAAS,gBAAgB;IACzB,QAAQ,aAAa;IACrB,GAAG,QAAQ;IACX,GAAG,QAAQ;IACX,KAAK,UAAU;IACf,QAAQ,aAAa;IAGrB,EAAE,OAAO;IACT,KAAK,OAAO;IACZ,EAAE,MAAM;IACR,EAAE,MAAM;IACR,IAAI,OAAO;IACX,IAAI,OAAO;IACX,GAAG,OAAO;IACV,EAAE,OAAO;IACT,IAAI,MAAM;IAGV,MAAM,MAAM;IACZ,MAAM,MAAM;IACZ,MAAM,MAAM;IACZ,MAAM,MAAM;IACZ,QAAQ,MAAM;IACd,QAAQ,MAAM;IACd,KAAK,MAAM;IACX,KAAK,MAAM;IACX,GAAG,MAAM;IACT,IAAI,MAAM;IAGV,GAAG,QAAQ;IACX,OAAO,YAAY;CACpB;AAED,MAAM,WAAW,QAAQ;IACvB,0BAA0B;IAC1B,IAAI,EAAE,MAAM,CAAA;IACZ,oDAAoD;IACpD,MAAM,EAAE,MAAM,CAAA;CACf;AAED,MAAM,WAAW,KAAK;IACpB,KAAK,EAAE,QAAQ,CAAA;IACf,GAAG,EAAE,QAAQ,CAAA;CACd;AAED,MAAM,WAAW,KAAK;IACpB,IAAI,EAAE,SAAS,CAAA;IACf,KAAK,EAAE,MAAM,CAAA;IACb,4BAA4B;IAC5B,MAAM,EAAE,MAAM,CAAA;IACd,IAAI,EAAE,MAAM,CAAA;IACZ,MAAM,EAAE,MAAM,CAAA;CACf;AAED,oEAAoE;AACpE,eAAO,MAAM,QAAQ,EAAE,WAAW,CAAC,MAAM,EAAE,SAAS,CAsClD,CAAA;AAEF,+DAA+D;AAC/D,eAAO,MAAM,SAAS,EAAE,WAAW,CAAC,MAAM,EAAE,SAAS,CAkBnD,CAAA;AAMF,wBAAgB,SAAS,CAAC,IAAI,EAAE,SAAS,GAAG,OAAO,CAElD;AAED,wBAAgB,UAAU,CAAC,IAAI,EAAE,SAAS,GAAG,OAAO,CAEnD;AAED,wBAAgB,SAAS,CAAC,IAAI,EAAE,SAAS,GAAG,OAAO,CAOlD;AAED,wBAAgB,QAAQ,CAAC,IAAI,EAAE,SAAS,GAAG,OAAO,CAMjD"}
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
- TokenType["SystemIdent"] = "SystemIdent";
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
- // Keywords - KML
30
- TokenType["Upsert"] = "UPSERT";
31
- TokenType["Update"] = "UPDATE";
32
- TokenType["Merge"] = "MERGE";
33
- TokenType["Delete"] = "DELETE";
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["Attributes"] = "ATTRIBUTES";
38
- TokenType["Propositions"] = "PROPOSITIONS";
39
- TokenType["With"] = "WITH";
40
- TokenType["Metadata"] = "METADATA";
41
- TokenType["Detach"] = "DETACH";
42
- TokenType["From"] = "FROM";
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
- // Keywords - META
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
- // Keywords - common
57
- TokenType["Order"] = "ORDER";
58
- TokenType["By"] = "BY";
59
- // Built-in functions
60
- TokenType["Count"] = "COUNT";
61
- TokenType["Sum"] = "SUM";
62
- TokenType["Avg"] = "AVG";
63
- TokenType["Min"] = "MIN";
64
- TokenType["Max"] = "MAX";
65
- TokenType["Contains"] = "CONTAINS";
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
- /** Set of all KIP keywords (uppercase) mapped to their TokenType */
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
- ['UPSERT', TokenType.Upsert],
117
- ['UPDATE', TokenType.Update],
118
- ['MERGE', TokenType.Merge],
119
- ['DELETE', TokenType.Delete],
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
- ['ATTRIBUTES', TokenType.Attributes],
124
- ['PROPOSITIONS', TokenType.Propositions],
125
- ['WITH', TokenType.With],
126
- ['METADATA', TokenType.Metadata],
127
- ['DETACH', TokenType.Detach],
128
- ['FROM', TokenType.From],
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
- ['THRESHOLD', TokenType.Threshold]
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
- /** Set of built-in function names mapped to their TokenType */
143
- export const FUNCTIONS = new Map([
144
- ['COUNT', TokenType.Count],
145
- ['SUM', TokenType.Sum],
146
- ['AVG', TokenType.Avg],
147
- ['MIN', TokenType.Min],
148
- ['MAX', TokenType.Max],
149
- ['CONTAINS', TokenType.Contains],
150
- ['STARTS_WITH', TokenType.StartsWith],
151
- ['ENDS_WITH', TokenType.EndsWith],
152
- ['REGEX', TokenType.Regex],
153
- ['IN', TokenType.In],
154
- ['IS_NULL', TokenType.IsNull],
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
- /** Reverse lookup sets, built once, so membership tests are O(1). */
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(type) {
169
- return FUNCTION_TYPES.has(type);
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