@open-rap/compiler 0.0.0-stage → 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (227) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +21 -2
  3. package/dist/agent/server.d.ts +35 -0
  4. package/dist/agent/server.js +408 -0
  5. package/dist/agent/server.js.map +1 -0
  6. package/dist/authoring/abapgit.d.ts +38 -0
  7. package/dist/authoring/abapgit.js +242 -0
  8. package/dist/authoring/abapgit.js.map +1 -0
  9. package/dist/authoring/catalog.d.ts +48 -0
  10. package/dist/authoring/catalog.js +117 -0
  11. package/dist/authoring/catalog.js.map +1 -0
  12. package/dist/authoring/floorplan.d.ts +28 -0
  13. package/dist/authoring/floorplan.js +31 -0
  14. package/dist/authoring/floorplan.js.map +1 -0
  15. package/dist/authoring/generate.d.ts +57 -0
  16. package/dist/authoring/generate.js +630 -0
  17. package/dist/authoring/generate.js.map +1 -0
  18. package/dist/authoring/mcp.d.ts +15 -0
  19. package/dist/authoring/mcp.js +52 -0
  20. package/dist/authoring/mcp.js.map +1 -0
  21. package/dist/authoring/new.d.ts +35 -0
  22. package/dist/authoring/new.js +389 -0
  23. package/dist/authoring/new.js.map +1 -0
  24. package/dist/bdef/ast.d.ts +249 -0
  25. package/dist/bdef/ast.js +3 -0
  26. package/dist/bdef/ast.js.map +1 -0
  27. package/dist/bdef/lexer.d.ts +105 -0
  28. package/dist/bdef/lexer.js +148 -0
  29. package/dist/bdef/lexer.js.map +1 -0
  30. package/dist/bdef/parser.d.ts +22 -0
  31. package/dist/bdef/parser.js +1012 -0
  32. package/dist/bdef/parser.js.map +1 -0
  33. package/dist/build.d.ts +26 -0
  34. package/dist/build.js +62 -0
  35. package/dist/build.js.map +1 -0
  36. package/dist/cds/adapter.d.ts +91 -0
  37. package/dist/cds/adapter.js +381 -0
  38. package/dist/cds/adapter.js.map +1 -0
  39. package/dist/cds/expression-ast.d.ts +65 -0
  40. package/dist/cds/expression-ast.js +330 -0
  41. package/dist/cds/expression-ast.js.map +1 -0
  42. package/dist/cli.d.ts +9 -0
  43. package/dist/cli.js +485 -0
  44. package/dist/cli.js.map +1 -0
  45. package/dist/dcl/parser.d.ts +59 -0
  46. package/dist/dcl/parser.js +338 -0
  47. package/dist/dcl/parser.js.map +1 -0
  48. package/dist/ddic/catalog.d.ts +17 -0
  49. package/dist/ddic/catalog.js +211 -0
  50. package/dist/ddic/catalog.js.map +1 -0
  51. package/dist/ddic/cds-types.d.ts +47 -0
  52. package/dist/ddic/cds-types.js +131 -0
  53. package/dist/ddic/cds-types.js.map +1 -0
  54. package/dist/ddic/table-source.d.ts +70 -0
  55. package/dist/ddic/table-source.js +500 -0
  56. package/dist/ddic/table-source.js.map +1 -0
  57. package/dist/ddic/xml.d.ts +65 -0
  58. package/dist/ddic/xml.js +201 -0
  59. package/dist/ddic/xml.js.map +1 -0
  60. package/dist/dev.d.ts +128 -0
  61. package/dist/dev.js +434 -0
  62. package/dist/dev.js.map +1 -0
  63. package/dist/diagnostics.d.ts +33 -0
  64. package/dist/diagnostics.js +53 -0
  65. package/dist/diagnostics.js.map +1 -0
  66. package/dist/gen/abap/derived-types.d.ts +26 -0
  67. package/dist/gen/abap/derived-types.js +323 -0
  68. package/dist/gen/abap/derived-types.js.map +1 -0
  69. package/dist/gen/abap/eml.d.ts +118 -0
  70. package/dist/gen/abap/eml.js +362 -0
  71. package/dist/gen/abap/eml.js.map +1 -0
  72. package/dist/gen/abap/enums.d.ts +13 -0
  73. package/dist/gen/abap/enums.js +74 -0
  74. package/dist/gen/abap/enums.js.map +1 -0
  75. package/dist/gen/abap/framework-http.d.ts +14 -0
  76. package/dist/gen/abap/framework-http.js +1049 -0
  77. package/dist/gen/abap/framework-http.js.map +1 -0
  78. package/dist/gen/abap/framework-query.d.ts +14 -0
  79. package/dist/gen/abap/framework-query.js +225 -0
  80. package/dist/gen/abap/framework-query.js.map +1 -0
  81. package/dist/gen/abap/framework-utils.d.ts +29 -0
  82. package/dist/gen/abap/framework-utils.js +3707 -0
  83. package/dist/gen/abap/framework-utils.js.map +1 -0
  84. package/dist/gen/abap/framework.d.ts +12 -0
  85. package/dist/gen/abap/framework.js +480 -0
  86. package/dist/gen/abap/framework.js.map +1 -0
  87. package/dist/gen/abap/generate.d.ts +40 -0
  88. package/dist/gen/abap/generate.js +238 -0
  89. package/dist/gen/abap/generate.js.map +1 -0
  90. package/dist/gen/abap/rewrite.d.ts +82 -0
  91. package/dist/gen/abap/rewrite.js +957 -0
  92. package/dist/gen/abap/rewrite.js.map +1 -0
  93. package/dist/gen/abap/shadow.d.ts +25 -0
  94. package/dist/gen/abap/shadow.js +175 -0
  95. package/dist/gen/abap/shadow.js.map +1 -0
  96. package/dist/gen/abap/tokens.d.ts +33 -0
  97. package/dist/gen/abap/tokens.js +87 -0
  98. package/dist/gen/abap/tokens.js.map +1 -0
  99. package/dist/gen/app/index.d.ts +25 -0
  100. package/dist/gen/app/index.js +322 -0
  101. package/dist/gen/app/index.js.map +1 -0
  102. package/dist/gen/csdl.d.ts +11 -0
  103. package/dist/gen/csdl.js +562 -0
  104. package/dist/gen/csdl.js.map +1 -0
  105. package/dist/gen/deploy.d.ts +12 -0
  106. package/dist/gen/deploy.js +53 -0
  107. package/dist/gen/deploy.js.map +1 -0
  108. package/dist/gen/docs/index.d.ts +35 -0
  109. package/dist/gen/docs/index.js +267 -0
  110. package/dist/gen/docs/index.js.map +1 -0
  111. package/dist/gen/docs/markdown.d.ts +23 -0
  112. package/dist/gen/docs/markdown.js +187 -0
  113. package/dist/gen/docs/markdown.js.map +1 -0
  114. package/dist/gen/docs/site.d.ts +17 -0
  115. package/dist/gen/docs/site.js +106 -0
  116. package/dist/gen/docs/site.js.map +1 -0
  117. package/dist/gen/keycloak.d.ts +21 -0
  118. package/dist/gen/keycloak.js +90 -0
  119. package/dist/gen/keycloak.js.map +1 -0
  120. package/dist/gen/launchpad/index.d.ts +48 -0
  121. package/dist/gen/launchpad/index.js +302 -0
  122. package/dist/gen/launchpad/index.js.map +1 -0
  123. package/dist/gen/launchpad/ui.d.ts +14 -0
  124. package/dist/gen/launchpad/ui.js +350 -0
  125. package/dist/gen/launchpad/ui.js.map +1 -0
  126. package/dist/gen/mcp.d.ts +23 -0
  127. package/dist/gen/mcp.js +244 -0
  128. package/dist/gen/mcp.js.map +1 -0
  129. package/dist/gen/sql-expressions.d.ts +12 -0
  130. package/dist/gen/sql-expressions.js +136 -0
  131. package/dist/gen/sql-expressions.js.map +1 -0
  132. package/dist/gen/sql.d.ts +38 -0
  133. package/dist/gen/sql.js +612 -0
  134. package/dist/gen/sql.js.map +1 -0
  135. package/dist/gen/ui/index.d.ts +7 -0
  136. package/dist/gen/ui/index.js +27 -0
  137. package/dist/gen/ui/index.js.map +1 -0
  138. package/dist/gen/ui/layout.d.ts +230 -0
  139. package/dist/gen/ui/layout.js +511 -0
  140. package/dist/gen/ui/layout.js.map +1 -0
  141. package/dist/gen/ui/static.d.ts +55 -0
  142. package/dist/gen/ui/static.js +2901 -0
  143. package/dist/gen/ui/static.js.map +1 -0
  144. package/dist/gen/ui/views.d.ts +10 -0
  145. package/dist/gen/ui/views.js +511 -0
  146. package/dist/gen/ui/views.js.map +1 -0
  147. package/dist/gen/vendor.d.ts +23 -0
  148. package/dist/gen/vendor.js +68 -0
  149. package/dist/gen/vendor.js.map +1 -0
  150. package/dist/gen/xml.d.ts +9 -0
  151. package/dist/gen/xml.js +42 -0
  152. package/dist/gen/xml.js.map +1 -0
  153. package/dist/index.d.ts +20 -0
  154. package/dist/index.js +20 -0
  155. package/dist/index.js.map +1 -0
  156. package/dist/input/project.d.ts +50 -0
  157. package/dist/input/project.js +128 -0
  158. package/dist/input/project.js.map +1 -0
  159. package/dist/ir/access-controls.d.ts +11 -0
  160. package/dist/ir/access-controls.js +148 -0
  161. package/dist/ir/access-controls.js.map +1 -0
  162. package/dist/ir/authorizations.d.ts +25 -0
  163. package/dist/ir/authorizations.js +178 -0
  164. package/dist/ir/authorizations.js.map +1 -0
  165. package/dist/ir/behaviors.d.ts +16 -0
  166. package/dist/ir/behaviors.js +548 -0
  167. package/dist/ir/behaviors.js.map +1 -0
  168. package/dist/ir/builder.d.ts +20 -0
  169. package/dist/ir/builder.js +505 -0
  170. package/dist/ir/builder.js.map +1 -0
  171. package/dist/ir/config.d.ts +25 -0
  172. package/dist/ir/config.js +130 -0
  173. package/dist/ir/config.js.map +1 -0
  174. package/dist/ir/dictionary.d.ts +54 -0
  175. package/dist/ir/dictionary.js +328 -0
  176. package/dist/ir/dictionary.js.map +1 -0
  177. package/dist/ir/entities.d.ts +58 -0
  178. package/dist/ir/entities.js +676 -0
  179. package/dist/ir/entities.js.map +1 -0
  180. package/dist/ir/expressions.d.ts +33 -0
  181. package/dist/ir/expressions.js +327 -0
  182. package/dist/ir/expressions.js.map +1 -0
  183. package/dist/ir/handlers.d.ts +63 -0
  184. package/dist/ir/handlers.js +398 -0
  185. package/dist/ir/handlers.js.map +1 -0
  186. package/dist/ir/number-ranges.d.ts +24 -0
  187. package/dist/ir/number-ranges.js +74 -0
  188. package/dist/ir/number-ranges.js.map +1 -0
  189. package/dist/ir/seed.d.ts +23 -0
  190. package/dist/ir/seed.js +78 -0
  191. package/dist/ir/seed.js.map +1 -0
  192. package/dist/ir/service.d.ts +21 -0
  193. package/dist/ir/service.js +96 -0
  194. package/dist/ir/service.js.map +1 -0
  195. package/dist/launchpad/config.d.ts +47 -0
  196. package/dist/launchpad/config.js +321 -0
  197. package/dist/launchpad/config.js.map +1 -0
  198. package/dist/launchpad/workspace.d.ts +48 -0
  199. package/dist/launchpad/workspace.js +166 -0
  200. package/dist/launchpad/workspace.js.map +1 -0
  201. package/dist/srvd/parser.d.ts +36 -0
  202. package/dist/srvd/parser.js +193 -0
  203. package/dist/srvd/parser.js.map +1 -0
  204. package/dist/standard/data.d.ts +18 -0
  205. package/dist/standard/data.js +534 -0
  206. package/dist/standard/data.js.map +1 -0
  207. package/dist/standard/index.d.ts +36 -0
  208. package/dist/standard/index.js +507 -0
  209. package/dist/standard/index.js.map +1 -0
  210. package/dist/version.d.ts +2 -0
  211. package/dist/version.js +4 -0
  212. package/dist/version.js.map +1 -0
  213. package/docs/AGENTS.md +79 -0
  214. package/docs/ANNOTATIONS.md +76 -0
  215. package/docs/DECISIONS.md +1526 -0
  216. package/docs/DEPLOYMENT.md +113 -0
  217. package/docs/DIAGNOSTICS.md +116 -0
  218. package/docs/FEATURES.md +287 -0
  219. package/docs/GUIDE.md +560 -0
  220. package/docs/KNOWN_GAPS.md +216 -0
  221. package/docs/MCP.md +84 -0
  222. package/docs/PLAN.md +690 -0
  223. package/docs/README.md +148 -0
  224. package/docs/REMOTE_APIS.md +121 -0
  225. package/docs/ROADMAP.md +35 -0
  226. package/docs/UTILITIES.md +95 -0
  227. package/package.json +49 -3
@@ -0,0 +1,249 @@
1
+ /** Abstract syntax tree of a behavior definition (BDEF), as built by the Chevrotain parser. */
2
+ /** 1-based position in the BDEF source. */
3
+ export interface Loc {
4
+ line: number;
5
+ column: number;
6
+ }
7
+ export interface Name {
8
+ text: string;
9
+ loc: Loc;
10
+ }
11
+ export interface Cardinality {
12
+ min: number;
13
+ max: number | "*";
14
+ }
15
+ export type ImplementationKind = "managed" | "unmanaged" | "abstract" | "projection" | "interface";
16
+ export type HeaderItemAst = {
17
+ kind: "implementation";
18
+ type: ImplementationKind;
19
+ className?: Name;
20
+ unique: boolean;
21
+ saving?: {
22
+ variant: "additional" | "unmanaged";
23
+ fullData: boolean;
24
+ };
25
+ loc: Loc;
26
+ } | {
27
+ kind: "strict";
28
+ version: number;
29
+ loc: Loc;
30
+ } | {
31
+ kind: "withDraft";
32
+ collaborative?: true;
33
+ loc: Loc;
34
+ } | {
35
+ kind: "privilegedMode";
36
+ disabling?: Name;
37
+ loc: Loc;
38
+ } | {
39
+ kind: "use";
40
+ what: string;
41
+ loc: Loc;
42
+ } | {
43
+ kind: "foreignEntity";
44
+ name: Name;
45
+ loc: Loc;
46
+ } | {
47
+ kind: "unknown";
48
+ text: string;
49
+ loc: Loc;
50
+ };
51
+ export type EntityOptionAst = {
52
+ kind: "persistentTable";
53
+ table: Name;
54
+ loc: Loc;
55
+ } | {
56
+ kind: "draftTable";
57
+ table: Name;
58
+ loc: Loc;
59
+ } | {
60
+ kind: "lockMaster";
61
+ unmanaged: boolean;
62
+ loc: Loc;
63
+ } | {
64
+ kind: "lockDependent";
65
+ by?: Name;
66
+ loc: Loc;
67
+ } | {
68
+ kind: "authorizationMaster";
69
+ values: string[];
70
+ loc: Loc;
71
+ } | {
72
+ kind: "authorizationDependent";
73
+ by?: Name;
74
+ loc: Loc;
75
+ } | {
76
+ kind: "etagMaster";
77
+ field: Name;
78
+ loc: Loc;
79
+ } | {
80
+ kind: "etagDependent";
81
+ by?: Name;
82
+ loc: Loc;
83
+ } | {
84
+ kind: "totalEtag";
85
+ field: Name;
86
+ loc: Loc;
87
+ } | {
88
+ kind: "earlyNumbering";
89
+ loc: Loc;
90
+ } | {
91
+ kind: "lateNumbering";
92
+ inPlace: boolean;
93
+ loc: Loc;
94
+ } | {
95
+ kind: "implementationInClass";
96
+ className: Name;
97
+ unique: boolean;
98
+ loc: Loc;
99
+ } | {
100
+ kind: "withSave";
101
+ variant: "additional" | "unmanaged";
102
+ fullData: boolean;
103
+ loc: Loc;
104
+ } | {
105
+ kind: "useEtag";
106
+ loc: Loc;
107
+ } | {
108
+ kind: "unknown";
109
+ text: string;
110
+ loc: Loc;
111
+ };
112
+ export interface OperationOptionAst {
113
+ name: string;
114
+ value?: string;
115
+ loc: Loc;
116
+ }
117
+ export interface TriggerAst {
118
+ create: boolean;
119
+ update: boolean;
120
+ delete: boolean;
121
+ fields: Name[];
122
+ }
123
+ export interface ResultAst {
124
+ selective: boolean;
125
+ cardinality: Cardinality;
126
+ /** `$self`, or the name of an entity. */
127
+ entity: Name;
128
+ /** `result [1] entity X` (entity result) rather than a structure. */
129
+ entityKeyword: boolean;
130
+ }
131
+ export interface SideEffectAst {
132
+ trigger: {
133
+ kind: "field" | "action" | "determineAction";
134
+ name: Name;
135
+ };
136
+ targets: Array<{
137
+ kind: "field" | "entity" | "messages" | "permissions" | "unknown";
138
+ path: string;
139
+ }>;
140
+ loc: Loc;
141
+ }
142
+ export type BodyItemAst = {
143
+ kind: "operation";
144
+ op: "create" | "update" | "delete";
145
+ internal: boolean;
146
+ options: OperationOptionAst[];
147
+ loc: Loc;
148
+ } | {
149
+ kind: "useOperation";
150
+ op: "create" | "update" | "delete";
151
+ options: OperationOptionAst[];
152
+ loc: Loc;
153
+ } | {
154
+ kind: "association";
155
+ name: Name;
156
+ internal: boolean;
157
+ abbreviation?: Name;
158
+ create?: {
159
+ internal: boolean;
160
+ options: OperationOptionAst[];
161
+ };
162
+ withDraft: boolean;
163
+ loc: Loc;
164
+ } | {
165
+ kind: "useAssociation";
166
+ name: Name;
167
+ create: boolean;
168
+ withDraft: boolean;
169
+ loc: Loc;
170
+ } | {
171
+ kind: "field";
172
+ characteristics: Array<{
173
+ text: string;
174
+ loc: Loc;
175
+ }>;
176
+ fields: Name[];
177
+ loc: Loc;
178
+ } | {
179
+ kind: "determination";
180
+ name: Name;
181
+ on: "modify" | "save";
182
+ internal: boolean;
183
+ triggers: TriggerAst;
184
+ loc: Loc;
185
+ } | {
186
+ kind: "validation";
187
+ name: Name;
188
+ on: "save";
189
+ triggers: TriggerAst;
190
+ loc: Loc;
191
+ } | {
192
+ kind: "action";
193
+ actionKind: "action" | "function";
194
+ name: Name;
195
+ internal: boolean;
196
+ static: boolean;
197
+ factory: boolean;
198
+ options: OperationOptionAst[];
199
+ external?: string;
200
+ parameter?: Name;
201
+ result?: ResultAst;
202
+ factoryCardinality?: Cardinality;
203
+ loc: Loc;
204
+ } | {
205
+ kind: "useAction";
206
+ actionKind: "action" | "function";
207
+ name: Name;
208
+ alias?: Name;
209
+ loc: Loc;
210
+ } | {
211
+ kind: "mapping";
212
+ table: Name;
213
+ corresponding: boolean;
214
+ pairs: Array<{
215
+ field: Name;
216
+ column: Name;
217
+ }>;
218
+ loc: Loc;
219
+ } | {
220
+ kind: "sideEffects";
221
+ items: SideEffectAst[];
222
+ loc: Loc;
223
+ } | {
224
+ kind: "unsupported";
225
+ what: string;
226
+ text: string;
227
+ loc: Loc;
228
+ } | {
229
+ kind: "unknown";
230
+ text: string;
231
+ loc: Loc;
232
+ };
233
+ export interface BehaviorAst {
234
+ root: boolean;
235
+ entity: Name;
236
+ alias?: Name;
237
+ options: EntityOptionAst[];
238
+ items: BodyItemAst[];
239
+ loc: Loc;
240
+ }
241
+ export interface BdefAst {
242
+ headers: HeaderItemAst[];
243
+ behaviors: BehaviorAst[];
244
+ /** Top-level statements other than headers and `define behavior for` (e.g. authorization contexts). */
245
+ others: Array<{
246
+ text: string;
247
+ loc: Loc;
248
+ }>;
249
+ }
@@ -0,0 +1,3 @@
1
+ /** Abstract syntax tree of a behavior definition (BDEF), as built by the Chevrotain parser. */
2
+ export {};
3
+ //# sourceMappingURL=ast.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ast.js","sourceRoot":"","sources":["../../src/bdef/ast.ts"],"names":[],"mappings":"AAAA,+FAA+F"}
@@ -0,0 +1,105 @@
1
+ /**
2
+ * Lexer of behavior definitions (BDEF).
3
+ *
4
+ * BDEF keywords are case-insensitive and are not reserved: every keyword token also belongs to the
5
+ * `Name` category, so a keyword can be used wherever a name is expected (an entity alias called
6
+ * `Data`, a field called `Mode`…).
7
+ */
8
+ import { Lexer, type TokenType } from "chevrotain";
9
+ /** Every token except `;`, `{` and `}`: used to skip unknown statements. */
10
+ export declare const Any: TokenType;
11
+ export declare const Name: TokenType;
12
+ export declare const WhiteSpace: TokenType;
13
+ export declare const LineComment: TokenType;
14
+ export declare const BlockComment: TokenType;
15
+ export declare const Identifier: TokenType;
16
+ export declare const StringLiteral: TokenType;
17
+ export declare const Integer: TokenType;
18
+ export declare const LCurly: TokenType;
19
+ export declare const RCurly: TokenType;
20
+ export declare const Semicolon: TokenType;
21
+ export declare const LParen: TokenType;
22
+ export declare const RParen: TokenType;
23
+ export declare const LBracket: TokenType;
24
+ export declare const RBracket: TokenType;
25
+ export declare const Comma: TokenType;
26
+ export declare const Colon: TokenType;
27
+ export declare const Equals: TokenType;
28
+ export declare const DotDot: TokenType;
29
+ export declare const Dot: TokenType;
30
+ export declare const Star: TokenType;
31
+ export declare const Other: TokenType;
32
+ export declare const K: {
33
+ readonly abbreviation: TokenType;
34
+ readonly abstract: TokenType;
35
+ readonly action: TokenType;
36
+ readonly additional: TokenType;
37
+ readonly affects: TokenType;
38
+ readonly alias: TokenType;
39
+ readonly association: TokenType;
40
+ readonly authorization: TokenType;
41
+ readonly behavior: TokenType;
42
+ readonly by: TokenType;
43
+ readonly class: TokenType;
44
+ readonly control: TokenType;
45
+ readonly collaborative: TokenType;
46
+ readonly corresponding: TokenType;
47
+ readonly create: TokenType;
48
+ readonly define: TokenType;
49
+ readonly delete: TokenType;
50
+ readonly dependent: TokenType;
51
+ readonly determination: TokenType;
52
+ readonly determine: TokenType;
53
+ readonly disabling: TokenType;
54
+ readonly draft: TokenType;
55
+ readonly early: TokenType;
56
+ readonly effects: TokenType;
57
+ readonly entity: TokenType;
58
+ readonly etag: TokenType;
59
+ readonly event: TokenType;
60
+ readonly external: TokenType;
61
+ readonly extend: TokenType;
62
+ readonly factory: TokenType;
63
+ readonly field: TokenType;
64
+ readonly for: TokenType;
65
+ readonly foreign: TokenType;
66
+ readonly function: TokenType;
67
+ readonly implementation: TokenType;
68
+ readonly in: TokenType;
69
+ readonly interface: TokenType;
70
+ readonly internal: TokenType;
71
+ readonly late: TokenType;
72
+ readonly lock: TokenType;
73
+ readonly managed: TokenType;
74
+ readonly mapping: TokenType;
75
+ readonly master: TokenType;
76
+ readonly messages: TokenType;
77
+ readonly mode: TokenType;
78
+ readonly modify: TokenType;
79
+ readonly numbering: TokenType;
80
+ readonly on: TokenType;
81
+ readonly parameter: TokenType;
82
+ readonly permissions: TokenType;
83
+ readonly persistent: TokenType;
84
+ readonly place: TokenType;
85
+ readonly privileged: TokenType;
86
+ readonly projection: TokenType;
87
+ readonly result: TokenType;
88
+ readonly root: TokenType;
89
+ readonly save: TokenType;
90
+ readonly selective: TokenType;
91
+ readonly side: TokenType;
92
+ readonly static: TokenType;
93
+ readonly strict: TokenType;
94
+ readonly table: TokenType;
95
+ readonly total: TokenType;
96
+ readonly unique: TokenType;
97
+ readonly unmanaged: TokenType;
98
+ readonly update: TokenType;
99
+ readonly use: TokenType;
100
+ readonly validation: TokenType;
101
+ readonly with: TokenType;
102
+ };
103
+ /** Order matters: comments before `/`, keywords before identifiers, `..` before `.`. */
104
+ export declare const allTokens: TokenType[];
105
+ export declare const bdefLexer: Lexer;
@@ -0,0 +1,148 @@
1
+ /**
2
+ * Lexer of behavior definitions (BDEF).
3
+ *
4
+ * BDEF keywords are case-insensitive and are not reserved: every keyword token also belongs to the
5
+ * `Name` category, so a keyword can be used wherever a name is expected (an entity alias called
6
+ * `Data`, a field called `Mode`…).
7
+ */
8
+ import { createToken, Lexer } from "chevrotain";
9
+ /** Every token except `;`, `{` and `}`: used to skip unknown statements. */
10
+ export const Any = createToken({ name: "Any", pattern: Lexer.NA });
11
+ export const Name = createToken({ name: "Name", pattern: Lexer.NA, categories: [Any] });
12
+ export const WhiteSpace = createToken({ name: "WhiteSpace", pattern: /\s+/, group: Lexer.SKIPPED });
13
+ export const LineComment = createToken({ name: "LineComment", pattern: /\/\/[^\r\n]*/, group: Lexer.SKIPPED });
14
+ export const BlockComment = createToken({ name: "BlockComment", pattern: /\/\*[\s\S]*?\*\//, group: Lexer.SKIPPED });
15
+ export const Identifier = createToken({
16
+ name: "Identifier",
17
+ // optional namespace prefix (/DMO/), then a name; `$self` is an identifier too
18
+ pattern: /(?:\/[A-Za-z0-9_]+\/)?[A-Za-z_$%][A-Za-z0-9_$%]*/,
19
+ categories: [Name],
20
+ });
21
+ export const StringLiteral = createToken({ name: "StringLiteral", pattern: /'(?:[^'\r\n]|'')*'/, categories: [Any] });
22
+ export const Integer = createToken({ name: "Integer", pattern: /\d+/, categories: [Any] });
23
+ export const LCurly = createToken({ name: "LCurly", pattern: /\{/ });
24
+ export const RCurly = createToken({ name: "RCurly", pattern: /\}/ });
25
+ export const Semicolon = createToken({ name: "Semicolon", pattern: /;/ });
26
+ export const LParen = createToken({ name: "LParen", pattern: /\(/, categories: [Any] });
27
+ export const RParen = createToken({ name: "RParen", pattern: /\)/, categories: [Any] });
28
+ export const LBracket = createToken({ name: "LBracket", pattern: /\[/, categories: [Any] });
29
+ export const RBracket = createToken({ name: "RBracket", pattern: /\]/, categories: [Any] });
30
+ export const Comma = createToken({ name: "Comma", pattern: /,/, categories: [Any] });
31
+ export const Colon = createToken({ name: "Colon", pattern: /:/, categories: [Any] });
32
+ export const Equals = createToken({ name: "Equals", pattern: /=/, categories: [Any] });
33
+ export const DotDot = createToken({ name: "DotDot", pattern: /\.\./, categories: [Any] });
34
+ export const Dot = createToken({ name: "Dot", pattern: /\./, categories: [Any] });
35
+ export const Star = createToken({ name: "Star", pattern: /\*/, categories: [Any] });
36
+ export const Other = createToken({ name: "Other", pattern: /[~\\\-+<>!?&|^#@]/, categories: [Any] });
37
+ const keywordTokens = [];
38
+ function keyword(word) {
39
+ const token = createToken({
40
+ name: `K_${word}`,
41
+ pattern: new RegExp(word, "i"),
42
+ longer_alt: Identifier,
43
+ categories: [Name],
44
+ });
45
+ keywordTokens.push({ word, token });
46
+ return token;
47
+ }
48
+ export const K = {
49
+ abbreviation: keyword("abbreviation"),
50
+ abstract: keyword("abstract"),
51
+ action: keyword("action"),
52
+ additional: keyword("additional"),
53
+ affects: keyword("affects"),
54
+ alias: keyword("alias"),
55
+ association: keyword("association"),
56
+ authorization: keyword("authorization"),
57
+ behavior: keyword("behavior"),
58
+ by: keyword("by"),
59
+ class: keyword("class"),
60
+ control: keyword("control"),
61
+ collaborative: keyword("collaborative"),
62
+ corresponding: keyword("corresponding"),
63
+ create: keyword("create"),
64
+ define: keyword("define"),
65
+ delete: keyword("delete"),
66
+ dependent: keyword("dependent"),
67
+ determination: keyword("determination"),
68
+ determine: keyword("determine"),
69
+ disabling: keyword("disabling"),
70
+ draft: keyword("draft"),
71
+ early: keyword("early"),
72
+ effects: keyword("effects"),
73
+ entity: keyword("entity"),
74
+ etag: keyword("etag"),
75
+ event: keyword("event"),
76
+ external: keyword("external"),
77
+ extend: keyword("extend"),
78
+ factory: keyword("factory"),
79
+ field: keyword("field"),
80
+ for: keyword("for"),
81
+ foreign: keyword("foreign"),
82
+ function: keyword("function"),
83
+ implementation: keyword("implementation"),
84
+ in: keyword("in"),
85
+ interface: keyword("interface"),
86
+ internal: keyword("internal"),
87
+ late: keyword("late"),
88
+ lock: keyword("lock"),
89
+ managed: keyword("managed"),
90
+ mapping: keyword("mapping"),
91
+ master: keyword("master"),
92
+ messages: keyword("messages"),
93
+ mode: keyword("mode"),
94
+ modify: keyword("modify"),
95
+ numbering: keyword("numbering"),
96
+ on: keyword("on"),
97
+ parameter: keyword("parameter"),
98
+ permissions: keyword("permissions"),
99
+ persistent: keyword("persistent"),
100
+ place: keyword("place"),
101
+ privileged: keyword("privileged"),
102
+ projection: keyword("projection"),
103
+ result: keyword("result"),
104
+ root: keyword("root"),
105
+ save: keyword("save"),
106
+ selective: keyword("selective"),
107
+ side: keyword("side"),
108
+ static: keyword("static"),
109
+ strict: keyword("strict"),
110
+ table: keyword("table"),
111
+ total: keyword("total"),
112
+ unique: keyword("unique"),
113
+ unmanaged: keyword("unmanaged"),
114
+ update: keyword("update"),
115
+ use: keyword("use"),
116
+ validation: keyword("validation"),
117
+ with: keyword("with"),
118
+ };
119
+ /** Longer keywords first, so that `for` does not shadow `foreign`. */
120
+ const sortedKeywords = [...keywordTokens].sort((a, b) => b.word.length - a.word.length).map((k) => k.token);
121
+ /** Order matters: comments before `/`, keywords before identifiers, `..` before `.`. */
122
+ export const allTokens = [
123
+ WhiteSpace,
124
+ BlockComment,
125
+ LineComment,
126
+ StringLiteral,
127
+ Integer,
128
+ LCurly,
129
+ RCurly,
130
+ Semicolon,
131
+ LParen,
132
+ RParen,
133
+ LBracket,
134
+ RBracket,
135
+ Comma,
136
+ Colon,
137
+ Equals,
138
+ DotDot,
139
+ Dot,
140
+ Star,
141
+ ...sortedKeywords,
142
+ Identifier,
143
+ Other,
144
+ Name,
145
+ Any,
146
+ ];
147
+ export const bdefLexer = new Lexer(allTokens, { ensureOptimizations: false, positionTracking: "full" });
148
+ //# sourceMappingURL=lexer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lexer.js","sourceRoot":"","sources":["../../src/bdef/lexer.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,WAAW,EAAE,KAAK,EAAkB,MAAM,YAAY,CAAC;AAEhE,4EAA4E;AAC5E,MAAM,CAAC,MAAM,GAAG,GAAG,WAAW,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC;AACnE,MAAM,CAAC,MAAM,IAAI,GAAG,WAAW,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,CAAC,EAAE,EAAE,UAAU,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;AAExF,MAAM,CAAC,MAAM,UAAU,GAAG,WAAW,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;AACpG,MAAM,CAAC,MAAM,WAAW,GAAG,WAAW,CAAC,EAAE,IAAI,EAAE,aAAa,EAAE,OAAO,EAAE,cAAc,EAAE,KAAK,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;AAC/G,MAAM,CAAC,MAAM,YAAY,GAAG,WAAW,CAAC,EAAE,IAAI,EAAE,cAAc,EAAE,OAAO,EAAE,kBAAkB,EAAE,KAAK,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;AAErH,MAAM,CAAC,MAAM,UAAU,GAAG,WAAW,CAAC;IACpC,IAAI,EAAE,YAAY;IAClB,+EAA+E;IAC/E,OAAO,EAAE,kDAAkD;IAC3D,UAAU,EAAE,CAAC,IAAI,CAAC;CACnB,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,aAAa,GAAG,WAAW,CAAC,EAAE,IAAI,EAAE,eAAe,EAAE,OAAO,EAAE,oBAAoB,EAAE,UAAU,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;AACtH,MAAM,CAAC,MAAM,OAAO,GAAG,WAAW,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;AAE3F,MAAM,CAAC,MAAM,MAAM,GAAG,WAAW,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;AACrE,MAAM,CAAC,MAAM,MAAM,GAAG,WAAW,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;AACrE,MAAM,CAAC,MAAM,SAAS,GAAG,WAAW,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,CAAC;AAC1E,MAAM,CAAC,MAAM,MAAM,GAAG,WAAW,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;AACxF,MAAM,CAAC,MAAM,MAAM,GAAG,WAAW,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;AACxF,MAAM,CAAC,MAAM,QAAQ,GAAG,WAAW,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;AAC5F,MAAM,CAAC,MAAM,QAAQ,GAAG,WAAW,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;AAC5F,MAAM,CAAC,MAAM,KAAK,GAAG,WAAW,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,GAAG,EAAE,UAAU,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;AACrF,MAAM,CAAC,MAAM,KAAK,GAAG,WAAW,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,GAAG,EAAE,UAAU,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;AACrF,MAAM,CAAC,MAAM,MAAM,GAAG,WAAW,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,GAAG,EAAE,UAAU,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;AACvF,MAAM,CAAC,MAAM,MAAM,GAAG,WAAW,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;AAC1F,MAAM,CAAC,MAAM,GAAG,GAAG,WAAW,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;AAClF,MAAM,CAAC,MAAM,IAAI,GAAG,WAAW,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;AACpF,MAAM,CAAC,MAAM,KAAK,GAAG,WAAW,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,mBAAmB,EAAE,UAAU,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;AAErG,MAAM,aAAa,GAA8C,EAAE,CAAC;AAEpE,SAAS,OAAO,CAAC,IAAY;IAC3B,MAAM,KAAK,GAAG,WAAW,CAAC;QACxB,IAAI,EAAE,KAAK,IAAI,EAAE;QACjB,OAAO,EAAE,IAAI,MAAM,CAAC,IAAI,EAAE,GAAG,CAAC;QAC9B,UAAU,EAAE,UAAU;QACtB,UAAU,EAAE,CAAC,IAAI,CAAC;KACnB,CAAC,CAAC;IACH,aAAa,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;IACpC,OAAO,KAAK,CAAC;AACf,CAAC;AAED,MAAM,CAAC,MAAM,CAAC,GAAG;IACf,YAAY,EAAE,OAAO,CAAC,cAAc,CAAC;IACrC,QAAQ,EAAE,OAAO,CAAC,UAAU,CAAC;IAC7B,MAAM,EAAE,OAAO,CAAC,QAAQ,CAAC;IACzB,UAAU,EAAE,OAAO,CAAC,YAAY,CAAC;IACjC,OAAO,EAAE,OAAO,CAAC,SAAS,CAAC;IAC3B,KAAK,EAAE,OAAO,CAAC,OAAO,CAAC;IACvB,WAAW,EAAE,OAAO,CAAC,aAAa,CAAC;IACnC,aAAa,EAAE,OAAO,CAAC,eAAe,CAAC;IACvC,QAAQ,EAAE,OAAO,CAAC,UAAU,CAAC;IAC7B,EAAE,EAAE,OAAO,CAAC,IAAI,CAAC;IACjB,KAAK,EAAE,OAAO,CAAC,OAAO,CAAC;IACvB,OAAO,EAAE,OAAO,CAAC,SAAS,CAAC;IAC3B,aAAa,EAAE,OAAO,CAAC,eAAe,CAAC;IACvC,aAAa,EAAE,OAAO,CAAC,eAAe,CAAC;IACvC,MAAM,EAAE,OAAO,CAAC,QAAQ,CAAC;IACzB,MAAM,EAAE,OAAO,CAAC,QAAQ,CAAC;IACzB,MAAM,EAAE,OAAO,CAAC,QAAQ,CAAC;IACzB,SAAS,EAAE,OAAO,CAAC,WAAW,CAAC;IAC/B,aAAa,EAAE,OAAO,CAAC,eAAe,CAAC;IACvC,SAAS,EAAE,OAAO,CAAC,WAAW,CAAC;IAC/B,SAAS,EAAE,OAAO,CAAC,WAAW,CAAC;IAC/B,KAAK,EAAE,OAAO,CAAC,OAAO,CAAC;IACvB,KAAK,EAAE,OAAO,CAAC,OAAO,CAAC;IACvB,OAAO,EAAE,OAAO,CAAC,SAAS,CAAC;IAC3B,MAAM,EAAE,OAAO,CAAC,QAAQ,CAAC;IACzB,IAAI,EAAE,OAAO,CAAC,MAAM,CAAC;IACrB,KAAK,EAAE,OAAO,CAAC,OAAO,CAAC;IACvB,QAAQ,EAAE,OAAO,CAAC,UAAU,CAAC;IAC7B,MAAM,EAAE,OAAO,CAAC,QAAQ,CAAC;IACzB,OAAO,EAAE,OAAO,CAAC,SAAS,CAAC;IAC3B,KAAK,EAAE,OAAO,CAAC,OAAO,CAAC;IACvB,GAAG,EAAE,OAAO,CAAC,KAAK,CAAC;IACnB,OAAO,EAAE,OAAO,CAAC,SAAS,CAAC;IAC3B,QAAQ,EAAE,OAAO,CAAC,UAAU,CAAC;IAC7B,cAAc,EAAE,OAAO,CAAC,gBAAgB,CAAC;IACzC,EAAE,EAAE,OAAO,CAAC,IAAI,CAAC;IACjB,SAAS,EAAE,OAAO,CAAC,WAAW,CAAC;IAC/B,QAAQ,EAAE,OAAO,CAAC,UAAU,CAAC;IAC7B,IAAI,EAAE,OAAO,CAAC,MAAM,CAAC;IACrB,IAAI,EAAE,OAAO,CAAC,MAAM,CAAC;IACrB,OAAO,EAAE,OAAO,CAAC,SAAS,CAAC;IAC3B,OAAO,EAAE,OAAO,CAAC,SAAS,CAAC;IAC3B,MAAM,EAAE,OAAO,CAAC,QAAQ,CAAC;IACzB,QAAQ,EAAE,OAAO,CAAC,UAAU,CAAC;IAC7B,IAAI,EAAE,OAAO,CAAC,MAAM,CAAC;IACrB,MAAM,EAAE,OAAO,CAAC,QAAQ,CAAC;IACzB,SAAS,EAAE,OAAO,CAAC,WAAW,CAAC;IAC/B,EAAE,EAAE,OAAO,CAAC,IAAI,CAAC;IACjB,SAAS,EAAE,OAAO,CAAC,WAAW,CAAC;IAC/B,WAAW,EAAE,OAAO,CAAC,aAAa,CAAC;IACnC,UAAU,EAAE,OAAO,CAAC,YAAY,CAAC;IACjC,KAAK,EAAE,OAAO,CAAC,OAAO,CAAC;IACvB,UAAU,EAAE,OAAO,CAAC,YAAY,CAAC;IACjC,UAAU,EAAE,OAAO,CAAC,YAAY,CAAC;IACjC,MAAM,EAAE,OAAO,CAAC,QAAQ,CAAC;IACzB,IAAI,EAAE,OAAO,CAAC,MAAM,CAAC;IACrB,IAAI,EAAE,OAAO,CAAC,MAAM,CAAC;IACrB,SAAS,EAAE,OAAO,CAAC,WAAW,CAAC;IAC/B,IAAI,EAAE,OAAO,CAAC,MAAM,CAAC;IACrB,MAAM,EAAE,OAAO,CAAC,QAAQ,CAAC;IACzB,MAAM,EAAE,OAAO,CAAC,QAAQ,CAAC;IACzB,KAAK,EAAE,OAAO,CAAC,OAAO,CAAC;IACvB,KAAK,EAAE,OAAO,CAAC,OAAO,CAAC;IACvB,MAAM,EAAE,OAAO,CAAC,QAAQ,CAAC;IACzB,SAAS,EAAE,OAAO,CAAC,WAAW,CAAC;IAC/B,MAAM,EAAE,OAAO,CAAC,QAAQ,CAAC;IACzB,GAAG,EAAE,OAAO,CAAC,KAAK,CAAC;IACnB,UAAU,EAAE,OAAO,CAAC,YAAY,CAAC;IACjC,IAAI,EAAE,OAAO,CAAC,MAAM,CAAC;CACb,CAAC;AAEX,sEAAsE;AACtE,MAAM,cAAc,GAAG,CAAC,GAAG,aAAa,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;AAE5G,wFAAwF;AACxF,MAAM,CAAC,MAAM,SAAS,GAAgB;IACpC,UAAU;IACV,YAAY;IACZ,WAAW;IACX,aAAa;IACb,OAAO;IACP,MAAM;IACN,MAAM;IACN,SAAS;IACT,MAAM;IACN,MAAM;IACN,QAAQ;IACR,QAAQ;IACR,KAAK;IACL,KAAK;IACL,MAAM;IACN,MAAM;IACN,GAAG;IACH,IAAI;IACJ,GAAG,cAAc;IACjB,UAAU;IACV,KAAK;IACL,IAAI;IACJ,GAAG;CACJ,CAAC;AAEF,MAAM,CAAC,MAAM,SAAS,GAAG,IAAI,KAAK,CAAC,SAAS,EAAE,EAAE,mBAAmB,EAAE,KAAK,EAAE,gBAAgB,EAAE,MAAM,EAAE,CAAC,CAAC"}
@@ -0,0 +1,22 @@
1
+ /**
2
+ * Chevrotain grammar of behavior definitions (decision D1).
3
+ *
4
+ * The grammar covers managed and projection BDEFs without draft. Statements it does not know are
5
+ * still recognized as "unknown" (up to the next `;` or a balanced `{ … }` block), so that the IR
6
+ * builder can report them precisely instead of failing with an opaque syntax error.
7
+ */
8
+ import { type TokenType } from "chevrotain";
9
+ import type { BdefAst } from "./ast.js";
10
+ export interface BdefParseError {
11
+ message: string;
12
+ line: number;
13
+ column: number;
14
+ }
15
+ export interface BdefParseResult {
16
+ ast?: BdefAst;
17
+ errors: BdefParseError[];
18
+ }
19
+ /** Parses a BDEF source. Returns the AST, or the lexing/parsing errors with their positions. */
20
+ export declare function parseBdef(source: string): BdefParseResult;
21
+ /** Exposed for tests: the token types, to check the grammar is LL(k) without ambiguity reports. */
22
+ export declare const bdefTokenTypes: readonly TokenType[];