@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,500 @@
1
+ /**
2
+ * Tables and structures written as source code (`name.tabl.astabl`), with the syntax of the
3
+ * ABAP Development Tools editor:
4
+ *
5
+ * @EndUserText.label : 'Travel'
6
+ * @AbapCatalog.enhancement.category : #NOT_EXTENSIBLE
7
+ * @AbapCatalog.tableCategory : #TRANSPARENT
8
+ * @AbapCatalog.deliveryClass : #A
9
+ * @AbapCatalog.dataMaintenance : #RESTRICTED
10
+ * define table zrt_travel {
11
+ * key client : abap.clnt not null;
12
+ * key travel_uuid : sysuuid_x16 not null;
13
+ * description : abap.char(256);
14
+ * @Semantics.amount.currencyCode : 'zrt_travel.currency_code'
15
+ * total_price : abap.curr(16,2);
16
+ * currency_code : abap.cuky;
17
+ * }
18
+ *
19
+ * abapGit only knows the XML serialization of tables (DD02V, DD09L, DD03P): the source is turned
20
+ * into that XML, both when the project is read and by `rapt abapgit`, which writes it next to
21
+ * the source so the repository can be pulled into an SAP system.
22
+ */
23
+ const same = (n) => n;
24
+ const fixed = (n) => () => n;
25
+ const packed = (n) => Math.floor(n / 2) + 1;
26
+ const BUILTINS = {
27
+ char: { datatype: "CHAR", inttype: "C", args: true, intlen: (n) => 2 * n },
28
+ numc: { datatype: "NUMC", inttype: "N", args: true, intlen: (n) => 2 * n },
29
+ clnt: { datatype: "CLNT", inttype: "C", length: 3, args: false, intlen: fixed(6) },
30
+ lang: { datatype: "LANG", inttype: "C", length: 1, args: false, intlen: fixed(2) },
31
+ cuky: { datatype: "CUKY", inttype: "C", length: 5, args: "optional", intlen: (n) => 2 * n },
32
+ unit: { datatype: "UNIT", inttype: "C", length: 3, args: "optional", intlen: (n) => 2 * n },
33
+ dats: { datatype: "DATS", inttype: "D", length: 8, args: false, intlen: fixed(16) },
34
+ tims: { datatype: "TIMS", inttype: "T", length: 6, args: false, intlen: fixed(12) },
35
+ datn: { datatype: "DATN", inttype: "D", length: 8, args: false, intlen: fixed(16) },
36
+ timn: { datatype: "TIMN", inttype: "T", length: 6, args: false, intlen: fixed(12) },
37
+ dec: { datatype: "DEC", inttype: "P", args: "decimals", intlen: packed },
38
+ curr: { datatype: "CURR", inttype: "P", args: "decimals", intlen: packed },
39
+ quan: { datatype: "QUAN", inttype: "P", args: "decimals", intlen: packed },
40
+ int1: { datatype: "INT1", inttype: "b", length: 3, args: false, intlen: fixed(1) },
41
+ int2: { datatype: "INT2", inttype: "s", length: 5, args: false, intlen: fixed(2) },
42
+ int4: { datatype: "INT4", inttype: "I", length: 10, args: false, intlen: fixed(4) },
43
+ int8: { datatype: "INT8", inttype: "8", length: 19, args: false, intlen: fixed(8) },
44
+ fltp: { datatype: "FLTP", inttype: "F", length: 16, args: false, intlen: fixed(8), fixedDecimals: 16 },
45
+ d16n: { datatype: "D16N", inttype: "a", length: 16, args: false, intlen: fixed(8) },
46
+ d34n: { datatype: "D34N", inttype: "e", length: 34, args: false, intlen: fixed(16) },
47
+ string: { datatype: "STRG", inttype: "g", length: 0, args: "optional", intlen: fixed(8) },
48
+ sstring: { datatype: "SSTR", inttype: "g", args: true, intlen: fixed(8) },
49
+ raw: { datatype: "RAW", inttype: "X", args: true, intlen: same },
50
+ rawstring: { datatype: "RSTR", inttype: "y", length: 0, args: "optional", intlen: fixed(8) },
51
+ utclong: { datatype: "UTCL", inttype: "p", length: 27, args: false, intlen: fixed(8) },
52
+ accp: { datatype: "ACCP", inttype: "N", length: 6, args: false, intlen: fixed(12) },
53
+ prec: { datatype: "PREC", inttype: "s", length: 2, args: false, intlen: fixed(2) },
54
+ };
55
+ function tokenize(source, issues) {
56
+ const tokens = [];
57
+ let line = 1;
58
+ let lineStart = 0;
59
+ let i = 0;
60
+ const at = (start) => ({ line, column: start - lineStart + 1 });
61
+ while (i < source.length) {
62
+ const c = source[i] ?? "";
63
+ if (c === "\n") {
64
+ line++;
65
+ i++;
66
+ lineStart = i;
67
+ continue;
68
+ }
69
+ if (/\s/.test(c)) {
70
+ i++;
71
+ continue;
72
+ }
73
+ if (c === "/" && source[i + 1] === "/") {
74
+ while (i < source.length && source[i] !== "\n")
75
+ i++;
76
+ continue;
77
+ }
78
+ if (c === "/" && source[i + 1] === "*") {
79
+ const end = source.indexOf("*/", i + 2);
80
+ const stop = end < 0 ? source.length : end + 2;
81
+ for (let j = i; j < stop; j++) {
82
+ if (source[j] === "\n") {
83
+ line++;
84
+ lineStart = j + 1;
85
+ }
86
+ }
87
+ i = stop;
88
+ continue;
89
+ }
90
+ if (c === "'") {
91
+ const start = i;
92
+ let text = "";
93
+ i++;
94
+ while (i < source.length && source[i] !== "\n") {
95
+ if (source[i] === "'" && source[i + 1] === "'") {
96
+ text += "'";
97
+ i += 2;
98
+ continue;
99
+ }
100
+ if (source[i] === "'")
101
+ break;
102
+ text += source[i];
103
+ i++;
104
+ }
105
+ if (source[i] !== "'") {
106
+ issues.push({ severity: "error", message: "unterminated string", ...at(start) });
107
+ }
108
+ else {
109
+ i++;
110
+ }
111
+ tokens.push({ text, kind: "string", ...at(start) });
112
+ continue;
113
+ }
114
+ const word = /^[A-Za-z_/$][A-Za-z0-9_/$.]*/.exec(source.slice(i, i + 200));
115
+ if (word !== null) {
116
+ tokens.push({ text: word[0], kind: "word", ...at(i) });
117
+ i += word[0].length;
118
+ continue;
119
+ }
120
+ const number = /^[0-9]+/.exec(source.slice(i, i + 40));
121
+ if (number !== null) {
122
+ tokens.push({ text: number[0], kind: "number", ...at(i) });
123
+ i += number[0].length;
124
+ continue;
125
+ }
126
+ tokens.push({ text: c, kind: "punct", ...at(i) });
127
+ i++;
128
+ }
129
+ return tokens;
130
+ }
131
+ // ---------------------------------------------------------------------------------------------
132
+ // Parser
133
+ class Parser {
134
+ tokens;
135
+ issues;
136
+ index = 0;
137
+ constructor(tokens, issues) {
138
+ this.tokens = tokens;
139
+ this.issues = issues;
140
+ }
141
+ peek(offset = 0) {
142
+ return this.tokens[this.index + offset];
143
+ }
144
+ next() {
145
+ return this.tokens[this.index++];
146
+ }
147
+ is(text, offset = 0) {
148
+ return this.peek(offset)?.text.toLowerCase() === text;
149
+ }
150
+ accept(text) {
151
+ if (this.is(text)) {
152
+ this.index++;
153
+ return true;
154
+ }
155
+ return false;
156
+ }
157
+ expect(text, what = `"${text}"`) {
158
+ if (this.accept(text)) {
159
+ return true;
160
+ }
161
+ this.error(`${what} expected`);
162
+ return false;
163
+ }
164
+ error(message, token = this.peek() ?? this.tokens[this.tokens.length - 1]) {
165
+ this.issues.push({ severity: "error", message: token === undefined || message.includes(token.text) ? message : `${message}, found "${token.text}"`, line: token?.line ?? 1, column: token?.column ?? 1 });
166
+ }
167
+ warning(message, token) {
168
+ this.issues.push({ severity: "warning", message, line: token?.line ?? 1, column: token?.column ?? 1 });
169
+ }
170
+ get done() {
171
+ return this.index >= this.tokens.length;
172
+ }
173
+ /** Skips to the token after the next `;` (or before the closing `}`). */
174
+ skipStatement() {
175
+ let depth = 0;
176
+ while (!this.done) {
177
+ const t = this.peek()?.text;
178
+ if (t === "[" || t === "(" || t === "{")
179
+ depth++;
180
+ if (t === "]" || t === ")")
181
+ depth--;
182
+ if (t === "}" && depth <= 0)
183
+ return;
184
+ if (t === "}")
185
+ depth--;
186
+ this.index++;
187
+ if (t === ";" && depth <= 0)
188
+ return;
189
+ }
190
+ }
191
+ /** `@a.b.c : value` → [key, value]. */
192
+ annotation() {
193
+ this.expect("@");
194
+ const name = this.next();
195
+ if (name?.kind !== "word") {
196
+ this.error("annotation name expected", name);
197
+ return undefined;
198
+ }
199
+ if (!this.accept(":")) {
200
+ return [name.text.toLowerCase(), "true"];
201
+ }
202
+ const value = this.peek();
203
+ if (value === undefined) {
204
+ this.error("annotation value expected");
205
+ return undefined;
206
+ }
207
+ if (value.text === "#") {
208
+ this.next();
209
+ const symbol = this.next();
210
+ return [name.text.toLowerCase(), `#${symbol?.text.toUpperCase() ?? ""}`];
211
+ }
212
+ if (value.text === "[" || value.text === "{") {
213
+ const close = value.text === "[" ? "]" : "}";
214
+ let depth = 0;
215
+ while (!this.done) {
216
+ const t = this.next()?.text;
217
+ if (t === value.text)
218
+ depth++;
219
+ if (t === close && --depth === 0)
220
+ break;
221
+ }
222
+ return [name.text.toLowerCase(), ""];
223
+ }
224
+ this.next();
225
+ return [name.text.toLowerCase(), value.text];
226
+ }
227
+ }
228
+ /** Reads the type of a field; false after an error (reported). */
229
+ function fieldType(parser, field) {
230
+ const type = parser.next();
231
+ if (type?.kind !== "word") {
232
+ parser.error("type expected", type);
233
+ return false;
234
+ }
235
+ const lower = type.text.toLowerCase();
236
+ if (!lower.startsWith("abap.")) {
237
+ field.dataElement = type.text.toUpperCase();
238
+ return true;
239
+ }
240
+ const builtin = BUILTINS[lower.slice(5)];
241
+ if (builtin === undefined) {
242
+ parser.error(`unknown built-in type ${type.text}`, type);
243
+ return false;
244
+ }
245
+ let length = builtin.length;
246
+ let decimals = builtin.fixedDecimals;
247
+ if (parser.accept("(")) {
248
+ if (builtin.args === false) {
249
+ parser.error(`${type.text} takes no length`, type);
250
+ return false;
251
+ }
252
+ length = Number.parseInt(parser.next()?.text ?? "", 10);
253
+ if (parser.accept(",")) {
254
+ decimals = Number.parseInt(parser.next()?.text ?? "", 10);
255
+ }
256
+ if (!parser.expect(")")) {
257
+ return false;
258
+ }
259
+ }
260
+ else if (builtin.args === true || builtin.args === "decimals") {
261
+ parser.error(`${type.text} needs a length`, parser.peek());
262
+ return false;
263
+ }
264
+ if (length === undefined || Number.isNaN(length) || (decimals !== undefined && Number.isNaN(decimals))) {
265
+ parser.error(`invalid length for ${type.text}`, type);
266
+ return false;
267
+ }
268
+ if (builtin.args === "decimals" && decimals === undefined) {
269
+ decimals = 0;
270
+ }
271
+ field.builtin = { datatype: builtin.datatype, length };
272
+ if (decimals !== undefined && (decimals > 0 || builtin.args === "decimals")) {
273
+ field.builtin.decimals = decimals;
274
+ }
275
+ return true;
276
+ }
277
+ function referenceOf(annotations) {
278
+ const value = annotations.get("semantics.amount.currencycode") ?? annotations.get("semantics.quantity.unitofmeasure");
279
+ if (value === undefined) {
280
+ return undefined;
281
+ }
282
+ const dot = value.lastIndexOf(".");
283
+ return dot < 0 ? undefined : { table: value.slice(0, dot).toUpperCase(), field: value.slice(dot + 1).toUpperCase() };
284
+ }
285
+ export function parseTableSource(source) {
286
+ const issues = [];
287
+ const parser = new Parser(tokenize(source, issues), issues);
288
+ const annotations = new Map();
289
+ while (parser.is("@")) {
290
+ const annotation = parser.annotation();
291
+ if (annotation !== undefined) {
292
+ annotations.set(annotation[0], annotation[1]);
293
+ }
294
+ }
295
+ if (!parser.expect("define")) {
296
+ return { issues };
297
+ }
298
+ const kindToken = parser.next();
299
+ const kind = kindToken?.text.toLowerCase();
300
+ if (kind !== "table" && kind !== "structure") {
301
+ parser.error('"table" or "structure" expected', kindToken);
302
+ return { issues };
303
+ }
304
+ const nameToken = parser.next();
305
+ if (nameToken?.kind !== "word") {
306
+ parser.error("table name expected", nameToken);
307
+ return { issues };
308
+ }
309
+ const table = { kind, name: nameToken.text.toUpperCase(), annotations, fields: [] };
310
+ const label = annotations.get("endusertext.label");
311
+ if (label !== undefined) {
312
+ table.description = label;
313
+ }
314
+ if (!parser.expect("{")) {
315
+ return { table, issues };
316
+ }
317
+ while (!parser.done && !parser.is("}")) {
318
+ const fieldAnnotations = new Map();
319
+ while (parser.is("@")) {
320
+ const annotation = parser.annotation();
321
+ if (annotation !== undefined) {
322
+ fieldAnnotations.set(annotation[0], annotation[1]);
323
+ }
324
+ }
325
+ const start = parser.peek();
326
+ const key = parser.accept("key");
327
+ if (parser.is("include") && !parser.is(":", 1)) {
328
+ parser.next();
329
+ const include = parser.next();
330
+ if (include?.kind !== "word") {
331
+ parser.error("structure name expected", include);
332
+ parser.skipStatement();
333
+ continue;
334
+ }
335
+ const field = { name: ".INCLUDE", key, notNull: false, include: { name: include.text.toUpperCase() }, line: start?.line ?? 1 };
336
+ if (parser.accept("with")) {
337
+ parser.expect("suffix");
338
+ const suffix = parser.next()?.text.toUpperCase() ?? "";
339
+ field.include = { name: include.text.toUpperCase(), suffix };
340
+ field.name = `.INCLU-${suffix}`;
341
+ }
342
+ if (parser.accept("not")) {
343
+ parser.expect("null");
344
+ field.notNull = true;
345
+ }
346
+ table.fields.push(field);
347
+ parser.expect(";");
348
+ continue;
349
+ }
350
+ const name = parser.next();
351
+ if (name?.kind !== "word") {
352
+ parser.error("field name expected", name);
353
+ parser.skipStatement();
354
+ continue;
355
+ }
356
+ if (!parser.expect(":")) {
357
+ parser.skipStatement();
358
+ continue;
359
+ }
360
+ const field = { name: name.text.toUpperCase(), key, notNull: false, line: name.line };
361
+ if (parser.is("include")) {
362
+ parser.error("named includes are not supported, use \"include <structure>;\"");
363
+ parser.skipStatement();
364
+ continue;
365
+ }
366
+ if (!fieldType(parser, field)) {
367
+ parser.skipStatement();
368
+ continue;
369
+ }
370
+ if (parser.accept("not")) {
371
+ parser.expect("null");
372
+ field.notNull = true;
373
+ }
374
+ const reference = referenceOf(fieldAnnotations);
375
+ if (reference !== undefined) {
376
+ field.reference = reference;
377
+ }
378
+ if (parser.is("with")) {
379
+ parser.warning(`${field.name}: foreign keys are not transferred to the abapGit XML, define them in the ABAP Development Tools`, parser.peek());
380
+ parser.skipStatement();
381
+ }
382
+ else {
383
+ parser.expect(";");
384
+ }
385
+ if (table.fields.some((f) => f.name === field.name)) {
386
+ parser.error(`field ${field.name} defined twice`, name);
387
+ }
388
+ table.fields.push(field);
389
+ }
390
+ parser.expect("}");
391
+ if (!parser.done) {
392
+ parser.error("unexpected text after the definition");
393
+ }
394
+ if (kind === "table" && !table.fields.some((f) => f.key) && !issues.some((i) => i.severity === "error")) {
395
+ issues.push({ severity: "error", message: `table ${table.name} has no key field`, line: nameToken.line, column: nameToken.column });
396
+ }
397
+ return { table, issues };
398
+ }
399
+ // ---------------------------------------------------------------------------------------------
400
+ // abapGit XML
401
+ const escape = (s) => s.replace(/&/g, "&amp;").replace(/</g, "&lt;").replace(/>/g, "&gt;");
402
+ const pad6 = (n) => String(n).padStart(6, "0");
403
+ /** Wraps `asx:values` content in the abapGit envelope. */
404
+ export function abapGitXml(serializer, values) {
405
+ return [
406
+ '<?xml version="1.0" encoding="utf-8"?>',
407
+ `<abapGit version="v1.0.0" serializer="LCL_OBJECT_${serializer}" serializer_version="v1.0.0">`,
408
+ ' <asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0">',
409
+ " <asx:values>",
410
+ values.replace(/\n$/, ""),
411
+ " </asx:values>",
412
+ " </asx:abap>",
413
+ "</abapGit>",
414
+ "",
415
+ ].join("\n");
416
+ }
417
+ /** `<TAG>` blocks with their children, skipping undefined values. */
418
+ export function xmlElement(tag, children, indent) {
419
+ const pad = " ".repeat(indent);
420
+ const lines = children.filter((c) => c[1] !== undefined).map(([k, v]) => `${pad} <${k}>${escape(v)}</${k}>`);
421
+ return `${pad}<${tag}>\n${lines.join("\n")}\n${pad}</${tag}>`;
422
+ }
423
+ const ENHANCEMENT = {
424
+ "#NOT_CLASSIFIED": "0",
425
+ "#NOT_EXTENSIBLE": "1",
426
+ "#EXTENSIBLE_CHARACTER": "2",
427
+ "#EXTENSIBLE_CHARACTER_NUMERIC": "3",
428
+ "#EXTENSIBLE_ANY": "4",
429
+ };
430
+ const MAINTENANCE = { "#RESTRICTED": undefined, "#ALLOWED": "X", "#NOT_ALLOWED": "N" };
431
+ function dd03p(field) {
432
+ const notNull = field.notNull ? "X" : undefined;
433
+ if (field.include !== undefined) {
434
+ return xmlElement("DD03P", [
435
+ ["FIELDNAME", field.name],
436
+ ["KEYFLAG", field.key ? "X" : undefined],
437
+ ["ADMINFIELD", "0"],
438
+ ["PRECFIELD", field.include.name],
439
+ ["NOTNULL", notNull],
440
+ ["MASK", " S"],
441
+ ["COMPTYPE", "S"],
442
+ ], 4);
443
+ }
444
+ const reference = [
445
+ ["REFTABLE", field.reference?.table],
446
+ ["REFFIELD", field.reference?.field],
447
+ ];
448
+ if (field.dataElement !== undefined) {
449
+ return xmlElement("DD03P", [["FIELDNAME", field.name], ["KEYFLAG", field.key ? "X" : undefined], ["ROLLNAME", field.dataElement], ["ADMINFIELD", "0"], ...reference, ["NOTNULL", notNull], ["COMPTYPE", "E"]], 4);
450
+ }
451
+ const type = field.builtin ?? { datatype: "CHAR", length: 1 };
452
+ const builtin = Object.values(BUILTINS).find((b) => b.datatype === type.datatype);
453
+ const intlen = builtin?.intlen(type.length, type.decimals ?? 0) ?? type.length;
454
+ return xmlElement("DD03P", [
455
+ ["FIELDNAME", field.name],
456
+ ["KEYFLAG", field.key ? "X" : undefined],
457
+ ["ADMINFIELD", "0"],
458
+ ["INTTYPE", builtin?.inttype],
459
+ ["INTLEN", pad6(intlen)],
460
+ ...reference,
461
+ ["NOTNULL", notNull],
462
+ ["DATATYPE", type.datatype],
463
+ ["LENG", pad6(type.length)],
464
+ ["DECIMALS", type.decimals === undefined ? undefined : pad6(type.decimals)],
465
+ ["MASK", ` ${type.datatype}`],
466
+ ], 4);
467
+ }
468
+ /** The abapGit serialization of a table or structure source. */
469
+ export function tableSourceToXml(table, language = "E") {
470
+ const a = table.annotations;
471
+ const first = table.fields[0];
472
+ const clientDependent = table.kind === "table" && first !== undefined && first.key && (first.builtin?.datatype === "CLNT" || first.dataElement === "MANDT");
473
+ const parts = [];
474
+ const header = [
475
+ ["TABNAME", table.name],
476
+ ["DDLANGUAGE", language],
477
+ ["TABCLASS", table.kind === "table" ? "TRANSP" : "INTTAB"],
478
+ ["CLIDEP", clientDependent ? "X" : undefined],
479
+ ["DDTEXT", table.description],
480
+ ["MASTERLANG", language],
481
+ ];
482
+ if (table.kind === "table") {
483
+ header.push(["MAINFLAG", MAINTENANCE[a.get("abapcatalog.datamaintenance") ?? "#RESTRICTED"]]);
484
+ header.push(["CONTFLAG", (a.get("abapcatalog.deliveryclass") ?? "#A").replace("#", "")]);
485
+ }
486
+ header.push(["EXCLASS", ENHANCEMENT[a.get("abapcatalog.enhancement.category") ?? "#NOT_EXTENSIBLE"] ?? "1"]);
487
+ parts.push(xmlElement("DD02V", header, 3));
488
+ if (table.kind === "table") {
489
+ parts.push(xmlElement("DD09L", [
490
+ ["TABNAME", table.name],
491
+ ["AS4LOCAL", "A"],
492
+ ["TABKAT", "0"],
493
+ ["TABART", "APPL0"],
494
+ ["BUFALLOW", "N"],
495
+ ], 3));
496
+ }
497
+ parts.push(` <DD03P_TABLE>\n${table.fields.map((f) => dd03p(f)).join("\n")}\n </DD03P_TABLE>`);
498
+ return abapGitXml("TABL", parts.join("\n"));
499
+ }
500
+ //# sourceMappingURL=table-source.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"table-source.js","sourceRoot":"","sources":["../../src/ddic/table-source.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,65 @@
1
+ /** Readers of the abapGit XML serializations: TABL, DTEL, DOMA, MSAG, SRVB. */
2
+ export interface Dd03pField {
3
+ fieldName: string;
4
+ key: boolean;
5
+ notNull: boolean;
6
+ rollName?: string;
7
+ dataType?: string;
8
+ length?: number;
9
+ decimals?: number;
10
+ refTable?: string;
11
+ refField?: string;
12
+ compType?: string;
13
+ /** The line is an `.INCLUDE` of a structure. */
14
+ include?: string;
15
+ }
16
+ export interface TablXml {
17
+ name: string;
18
+ description?: string;
19
+ tableClass: string;
20
+ fields: Dd03pField[];
21
+ }
22
+ export declare function readTablXml(xml: string): TablXml | undefined;
23
+ export interface DtelXml {
24
+ name: string;
25
+ domain?: string;
26
+ dataType?: string;
27
+ length?: number;
28
+ decimals?: number;
29
+ labels: {
30
+ short?: string;
31
+ medium?: string;
32
+ long?: string;
33
+ heading?: string;
34
+ description?: string;
35
+ };
36
+ }
37
+ export declare function readDtelXml(xml: string): DtelXml | undefined;
38
+ export interface DomaXml {
39
+ name: string;
40
+ dataType: string;
41
+ length?: number;
42
+ decimals?: number;
43
+ conversionExit?: string;
44
+ fixedValues: Array<{
45
+ low: string;
46
+ text?: string;
47
+ }>;
48
+ }
49
+ export declare function readDomaXml(xml: string): DomaXml | undefined;
50
+ /** Message class texts: number → text (`&1`…`&4` placeholders kept). */
51
+ export declare function readMsagXml(xml: string): {
52
+ name: string;
53
+ texts: Record<string, string>;
54
+ } | undefined;
55
+ export interface SrvbXml {
56
+ name?: string;
57
+ serviceDefinition?: string;
58
+ version?: string;
59
+ bindingType?: string;
60
+ bindingVersion?: string;
61
+ /** BINDING_TYPE_CATEGORY: 0 UI, 1 Web API (D60). */
62
+ bindingCategory?: string;
63
+ }
64
+ /** Tolerant reader: looks for the binding facts wherever the serialization puts them. */
65
+ export declare function readSrvbXml(xml: string): SrvbXml;