@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,323 @@
1
+ /**
2
+ * BDEF derived types (decision D2): for each managed BDEF, an ABAP interface with the types RAP
3
+ * derives from the behavior (`%tky`, `%control`, tables FOR CREATE/UPDATE/…, responses FAILED,
4
+ * REPORTED, MAPPED…), written with named includes so that `%tky-TravelUUID` and `TravelUUID`
5
+ * both work, as in ABAP.
6
+ */
7
+ import { abapName, derivedType, derivedTypesInterfaceName, findEntity, same, } from "@open-rap/model";
8
+ /** ABAP type of a dictionary type, with built-in types only. */
9
+ export function abapTypeText(t) {
10
+ switch (t.kind) {
11
+ case "char":
12
+ case "cuky":
13
+ case "unit":
14
+ case "lang":
15
+ case "clnt":
16
+ return `c LENGTH ${t.length ?? 1}`;
17
+ case "bool":
18
+ return "c LENGTH 1";
19
+ case "numc":
20
+ return `n LENGTH ${t.length ?? 1}`;
21
+ case "string":
22
+ case "sstring":
23
+ return "string";
24
+ case "dec":
25
+ case "curr":
26
+ case "quan":
27
+ return `p LENGTH ${Math.floor((t.length ?? 16) / 2) + 1} DECIMALS ${t.decimals ?? 0}`;
28
+ case "timestamp":
29
+ return "p LENGTH 8 DECIMALS 0";
30
+ case "timestampl":
31
+ return "p LENGTH 11 DECIMALS 7";
32
+ case "utclong":
33
+ return "utclong";
34
+ case "int1":
35
+ case "int2":
36
+ // ABAP has no built-in names for them (the DDIC types are INT1 and INT2): i holds their values
37
+ return "i";
38
+ case "int4":
39
+ return "i";
40
+ case "int8":
41
+ return "int8";
42
+ case "fltp":
43
+ return "f";
44
+ case "decfloat16":
45
+ return "decfloat16";
46
+ case "decfloat34":
47
+ return "decfloat34";
48
+ case "dats":
49
+ return "d";
50
+ case "tims":
51
+ return "t";
52
+ case "raw":
53
+ return `x LENGTH ${t.length ?? 1}`;
54
+ case "rawstring":
55
+ return "xstring";
56
+ }
57
+ }
58
+ /** Associations of an entity whose target is in the same BDEF, numbered from 1 (`\_assoc`). */
59
+ export function bdefAssociations(model, behavior, entity) {
60
+ const cds = findEntity(model, entity.entity);
61
+ const result = [];
62
+ for (const association of cds?.associations ?? []) {
63
+ const targetIndex = behavior.entities.findIndex((e) => same(e.entity, association.target));
64
+ const target = behavior.entities[targetIndex];
65
+ if (target !== undefined) {
66
+ result.push({ name: association.name, target, targetIndex: targetIndex + 1, index: result.length + 1 });
67
+ }
68
+ }
69
+ return result;
70
+ }
71
+ /** Actions and associations (`create`) of an entity under feature control of the given level. */
72
+ function featureControlled(entity, associations, level) {
73
+ return {
74
+ actions: entity.actions.filter((a) => a.features === level),
75
+ associations: associations.filter((a) => entity.associations.some((b) => same(b.name, a.name) && b.create && b.createFeatures === level)),
76
+ };
77
+ }
78
+ /** Ancestors of an entity, from its parent up to the root. */
79
+ export function ancestors(model, behavior, entity) {
80
+ const result = [];
81
+ let current = entity;
82
+ const seen = new Set();
83
+ while (current !== undefined && !seen.has(current.entity.toUpperCase())) {
84
+ seen.add(current.entity.toUpperCase());
85
+ const cds = findEntity(model, current.entity);
86
+ const parent = cds?.associations.find((a) => a.kind === "toParent");
87
+ const index = parent === undefined ? -1 : behavior.entities.findIndex((e) => same(e.entity, parent.target));
88
+ current = index < 0 ? undefined : behavior.entities[index];
89
+ if (current !== undefined) {
90
+ result.push({ entity: current, index: index + 1 });
91
+ }
92
+ }
93
+ return result;
94
+ }
95
+ class Writer {
96
+ lines = [];
97
+ line(text = "") {
98
+ this.lines.push(text === "" ? "" : ` ${text}`);
99
+ }
100
+ /**
101
+ * `TYPES: BEGIN OF name, …, END OF name[, table].` A named include ends the chained statement:
102
+ * the components after it start a new `TYPES:` chain, as ABAP requires.
103
+ */
104
+ structure(name, parts, tableName) {
105
+ const list = parts.length === 0 ? [{ component: "dummy", type: "c LENGTH 1" }] : parts;
106
+ let items = [`BEGIN OF ${name}`];
107
+ const chain = () => {
108
+ if (items.length > 0) {
109
+ this.line(`TYPES: ${items.join(",\n ")}.`);
110
+ }
111
+ items = [];
112
+ };
113
+ for (const part of list) {
114
+ if ("include" in part) {
115
+ chain();
116
+ this.line(` INCLUDE TYPE ${part.include}${part.as === undefined ? "" : ` AS ${part.as}`}.`);
117
+ }
118
+ else {
119
+ items.push(`${part.component} TYPE ${part.type}`);
120
+ }
121
+ }
122
+ items.push(`END OF ${name}`);
123
+ if (tableName !== undefined) {
124
+ items.push(`${tableName} TYPE STANDARD TABLE OF ${name} WITH DEFAULT KEY`);
125
+ }
126
+ chain();
127
+ }
128
+ alias(name, type) {
129
+ this.line(`TYPES ${name} TYPE ${type}.`);
130
+ }
131
+ table(name, row) {
132
+ this.line(`TYPES ${name} TYPE STANDARD TABLE OF ${row} WITH DEFAULT KEY.`);
133
+ }
134
+ text() {
135
+ return this.lines.join("\n");
136
+ }
137
+ }
138
+ export function generateDerivedTypes(model, behavior) {
139
+ const interfaceName = derivedTypesInterfaceName(behavior.name);
140
+ const w = new Writer();
141
+ w.line(`" Derived types of the behavior definition ${behavior.name}, generated by Open RAP Runtime.`);
142
+ w.alias("flag", "x LENGTH 1");
143
+ w.alias("cid", "c LENGTH 80");
144
+ w.alias("pid", "x LENGTH 16");
145
+ w.structure("ts_fail", [{ component: "cause", type: "if_abap_behv=>t_fail_cause" }]);
146
+ w.table("tt_other", "REF TO if_abap_behv_message");
147
+ const entities = behavior.entities.map((entity, i) => ({ entity, index: i + 1, cds: findEntity(model, entity.entity) }));
148
+ for (const { entity, index: e, cds } of entities) {
149
+ if (cds === undefined) {
150
+ continue;
151
+ }
152
+ const keys = cds.fields.filter((f) => f.key);
153
+ const data = cds.fields.filter((f) => !f.key);
154
+ const component = (name, type) => ({ component: abapName(name), type });
155
+ const actions = entity.actions;
156
+ const associations = bdefAssociations(model, behavior, entity);
157
+ const hasData = data.length > 0;
158
+ w.line();
159
+ w.line(`" ---- ${entity.alias} (${entity.entity}): entity ${e}`);
160
+ w.structure(derivedType.key(e), keys.map((f) => component(f.name, abapTypeText(f.type))));
161
+ w.structure(derivedType.pky(e), [{ component: "%pid", type: "pid" }, { include: derivedType.key(e), as: "%key" }]);
162
+ w.structure(derivedType.tky(e), [{ include: derivedType.pky(e), as: "%pky" }]);
163
+ if (hasData) {
164
+ w.structure(derivedType.data(e), data.map((f) => component(f.name, abapTypeText(f.type))));
165
+ }
166
+ w.structure(`ts_e${e}_full`, [{ include: derivedType.key(e), as: "%key" }, ...(hasData ? [{ include: derivedType.data(e) }] : [])]);
167
+ w.structure(derivedType.control(e), cds.fields.map((f) => component(f.name, "flag")));
168
+ w.structure(derivedType.element(e), [...cds.fields.map((f) => component(f.name, "flag")), ...cds.associations.map((a) => component(a.name, "flag"))]);
169
+ const featureFields = new Set(Object.entries(entity.fieldCharacteristics)
170
+ .filter(([, characteristics]) => characteristics.includes("featuresInstance"))
171
+ .map(([field]) => field.toUpperCase()));
172
+ if (actions.length > 0) {
173
+ w.structure(`ts_e${e}_act`, actions.map((a) => component(a.name, "flag")));
174
+ }
175
+ if (associations.length > 0) {
176
+ w.structure(`ts_e${e}_asc`, associations.map((a) => component(a.name, "flag")));
177
+ }
178
+ // feature control: only the operations, actions, associations and fields declared with features
179
+ for (const [suffix, level] of [["ifc", "instance"], ["gfc", "global"]]) {
180
+ const controlled = featureControlled(entity, associations, level);
181
+ if (controlled.actions.length > 0) {
182
+ w.structure(`ts_e${e}_${suffix}_act`, controlled.actions.map((a) => component(a.name, "flag")));
183
+ }
184
+ if (controlled.associations.length > 0) {
185
+ w.structure(`ts_e${e}_${suffix}_asc`, controlled.associations.map((a) => component(a.name, "flag")));
186
+ }
187
+ }
188
+ w.structure(derivedType.fieldControl(e), cds.fields.filter((f) => featureFields.has(f.name.toUpperCase())).map((f) => component(f.name, "flag")));
189
+ w.structure(`ts_e${e}_tkyw`, [{ include: derivedType.tky(e), as: "%tky" }]);
190
+ // operations
191
+ w.structure(derivedType.createRow(e), [{ component: "%cid", type: "cid" }, { include: `ts_e${e}_full`, as: "%data" }, { component: "%control", type: derivedType.control(e) }], derivedType.create(e));
192
+ w.structure(derivedType.updateRow(e), [
193
+ { component: "%cid_ref", type: "cid" },
194
+ { include: derivedType.tky(e), as: "%tky" },
195
+ ...(hasData ? [{ include: derivedType.data(e), as: "%data" }] : []),
196
+ { component: "%control", type: derivedType.control(e) },
197
+ ], derivedType.update(e));
198
+ w.structure(`ts_e${e}_del`, [{ component: "%cid_ref", type: "cid" }, { include: derivedType.tky(e), as: "%tky" }], derivedType.delete(e));
199
+ // save_modified of additional and unmanaged save: TYPE TABLE FOR CHANGE
200
+ w.structure(derivedType.changeRow(e), [{ include: derivedType.tky(e), as: "%tky" }, ...(hasData ? [{ include: derivedType.data(e), as: "%data" }] : []), { component: "%control", type: derivedType.control(e) }], derivedType.change(e));
201
+ w.structure(`ts_e${e}_rimp`, [{ include: derivedType.tky(e), as: "%tky" }, { component: "%control", type: derivedType.control(e) }], derivedType.readImport(e));
202
+ w.structure(derivedType.readResultRow(e), [{ include: derivedType.tky(e), as: "%tky" }, ...(hasData ? [{ include: derivedType.data(e), as: "%data" }] : [])], derivedType.readResult(e));
203
+ w.structure(`ts_e${e}_keys`, [{ include: derivedType.tky(e), as: "%tky" }], derivedType.keys(e));
204
+ w.structure(`ts_e${e}_lock`, [{ include: derivedType.tky(e), as: "%tky" }], derivedType.lock(e));
205
+ }
206
+ // the types below refer to the types of other entities: they come after all of them
207
+ for (const { entity, index: e, cds } of entities) {
208
+ if (cds === undefined) {
209
+ continue;
210
+ }
211
+ const actions = entity.actions;
212
+ const associations = bdefAssociations(model, behavior, entity);
213
+ const actionPart = actions.length > 0 ? [{ component: "%action", type: `ts_e${e}_act` }] : [];
214
+ const assocPart = associations.length > 0 ? [{ component: "%assoc", type: `ts_e${e}_asc` }] : [];
215
+ w.line();
216
+ w.line(`" ---- ${entity.alias}: actions, associations, authorizations, features, responses`);
217
+ // actions and functions
218
+ actions.forEach((action, i) => {
219
+ const a = i + 1;
220
+ writeAction(w, model, behavior, e, a, action);
221
+ });
222
+ // associations
223
+ for (const association of associations) {
224
+ const b = association.index;
225
+ const t = association.targetIndex;
226
+ w.structure(`ts_e${e}_b${b}_cre`, [{ component: "%cid_ref", type: "cid" }, { include: derivedType.tky(e), as: "%tky" }, { component: "%target", type: derivedType.create(t) }], derivedType.assocCreate(e, b));
227
+ w.structure(`ts_e${e}_b${b}_rimp`, [{ include: derivedType.tky(e), as: "%tky" }, { component: "%control", type: derivedType.control(t) }], derivedType.assocReadImport(e, b));
228
+ w.alias(derivedType.assocReadResult(e, b), derivedType.readResult(t));
229
+ w.structure(`ts_e${e}_b${b}_link`, [{ component: "source", type: `ts_e${e}_tkyw` }, { component: "target", type: `ts_e${t}_tkyw` }], derivedType.assocLink(e, b));
230
+ }
231
+ // authorization and feature control
232
+ const flags = (names) => names.map((n) => ({ component: n, type: "flag" }));
233
+ const featureParts = (suffix, level, operations) => {
234
+ const controlled = featureControlled(entity, associations, level);
235
+ return [
236
+ ...flags(operations.filter((kind) => entity.operations.some((o) => o.kind === kind && o.features === level)).map((kind) => `%${kind}`)),
237
+ ...(controlled.actions.length > 0 ? [{ component: "%action", type: `ts_e${e}_${suffix}_act` }] : []),
238
+ ...(controlled.associations.length > 0 ? [{ component: "%assoc", type: `ts_e${e}_${suffix}_asc` }] : []),
239
+ ];
240
+ };
241
+ w.structure(derivedType.globalAuthRequest(e), [...flags(["%create", "%update", "%delete"]), ...actionPart, ...assocPart]);
242
+ w.alias(derivedType.globalAuthResult(e), derivedType.globalAuthRequest(e));
243
+ w.structure(derivedType.instanceAuthRequest(e), [...flags(["%update", "%delete"]), ...actionPart, ...assocPart]);
244
+ w.structure(`ts_e${e}_iauth_r`, [{ include: derivedType.tky(e), as: "%tky" }, ...flags(["%update", "%delete"]), ...actionPart, ...assocPart], derivedType.instanceAuthResult(e));
245
+ w.structure(`ts_e${e}_feat`, [...featureParts("ifc", "instance", ["update", "delete"]), { component: "%field", type: derivedType.fieldControl(e) }]);
246
+ w.alias(derivedType.instanceFeaturesRequest(e), `ts_e${e}_feat`);
247
+ w.structure(`ts_e${e}_ifeat_r`, [{ include: derivedType.tky(e), as: "%tky" }, { include: `ts_e${e}_feat`, as: "%features" }], derivedType.instanceFeaturesResult(e));
248
+ w.structure(derivedType.globalFeaturesRequest(e), featureParts("gfc", "global", ["create", "update", "delete"]));
249
+ w.alias(derivedType.globalFeaturesResult(e), derivedType.globalFeaturesRequest(e));
250
+ // responses
251
+ const path = ancestors(model, behavior, entity);
252
+ if (path.length > 0) {
253
+ w.structure(derivedType.path(e), path.map((p) => ({ component: abapName(p.entity.alias), type: `ts_e${p.index}_tkyw` })));
254
+ }
255
+ w.structure(`ts_e${e}_failr`, [
256
+ { component: "%cid", type: "cid" },
257
+ { include: derivedType.tky(e), as: "%tky" },
258
+ { component: "%fail", type: "ts_fail" },
259
+ ...flags(["%create", "%update", "%delete"]),
260
+ ...actionPart,
261
+ ...assocPart,
262
+ ], derivedType.failedRows(e));
263
+ w.structure(`ts_e${e}_repr`, [
264
+ { component: "%cid", type: "cid" },
265
+ { include: derivedType.tky(e), as: "%tky" },
266
+ { component: "%msg", type: "REF TO if_abap_behv_message" },
267
+ { component: "%element", type: derivedType.element(e) },
268
+ { component: "%state_area", type: "string" },
269
+ { component: "%global", type: "flag" },
270
+ ...(path.length > 0 ? [{ component: "%path", type: derivedType.path(e) }] : []),
271
+ ], derivedType.reportedRows(e));
272
+ w.structure(`ts_e${e}_mapr`, [{ component: "%cid", type: "cid" }, { include: derivedType.tky(e), as: "%tky" }], derivedType.mappedRows(e));
273
+ }
274
+ // responses of the BO
275
+ w.line();
276
+ w.line(`" ---- responses of ${behavior.name}`);
277
+ const perEntity = (rows) => entities.map(({ entity, index }) => ({ component: abapName(entity.alias), type: rows(index) }));
278
+ w.structure(derivedType.failedEarly, perEntity(derivedType.failedRows));
279
+ w.alias(derivedType.failedLate, derivedType.failedEarly);
280
+ w.structure(derivedType.reportedEarly, [...perEntity(derivedType.reportedRows), { component: "%other", type: "tt_other" }]);
281
+ w.alias(derivedType.reportedLate, derivedType.reportedEarly);
282
+ w.structure(derivedType.mappedEarly, perEntity(derivedType.mappedRows));
283
+ w.alias(derivedType.mappedLate, derivedType.mappedEarly);
284
+ // the parameters of save_modified: TYPE REQUEST FOR CHANGE / FOR DELETE
285
+ w.structure(derivedType.requestChange, perEntity(derivedType.change));
286
+ w.structure(derivedType.requestDelete, perEntity(derivedType.delete));
287
+ const source = `INTERFACE ${interfaceName.toLowerCase()} PUBLIC.\n${w.text()}\nENDINTERFACE.\n`;
288
+ return { interfaceName, source };
289
+ }
290
+ function writeAction(w, model, behavior, e, a, action) {
291
+ const parameterEntity = action.parameter === undefined || action.parameter === "$self" ? undefined : findEntity(model, action.parameter);
292
+ const hasParameter = parameterEntity !== undefined && parameterEntity.fields.length > 0;
293
+ if (hasParameter) {
294
+ w.structure(derivedType.actionParam(e, a), parameterEntity.fields.map((f) => ({ component: abapName(f.name), type: abapTypeText(f.type) })));
295
+ }
296
+ const instance = !action.static;
297
+ const head = instance
298
+ ? [{ component: action.factory ? "%cid" : "%cid_ref", type: "cid" }, { include: derivedType.tky(e), as: "%tky" }]
299
+ : [{ component: "%cid", type: "cid" }];
300
+ w.structure(`ts_e${e}_a${a}_imp`, [...head, ...(hasParameter ? [{ component: "%param", type: derivedType.actionParam(e, a) }] : [])], derivedType.actionImport(e, a));
301
+ let resultParam;
302
+ if (action.result !== undefined) {
303
+ if (action.result.entity === "$self") {
304
+ resultParam = derivedType.readResultRow(e);
305
+ }
306
+ else {
307
+ const target = behavior.entities.findIndex((x) => same(x.entity, action.result?.entity ?? ""));
308
+ const resultEntity = findEntity(model, action.result.entity);
309
+ if (target >= 0) {
310
+ resultParam = derivedType.readResultRow(target + 1);
311
+ }
312
+ else if (resultEntity !== undefined && resultEntity.kind === "abstract" && resultEntity.fields.length > 0) {
313
+ resultParam = `ts_e${e}_a${a}_rpar`;
314
+ w.structure(resultParam, resultEntity.fields.map((f) => ({ component: abapName(f.name), type: abapTypeText(f.type) })));
315
+ }
316
+ }
317
+ }
318
+ const resultHead = instance
319
+ ? [{ component: "%cid_ref", type: "cid" }, { include: derivedType.tky(e), as: "%tky" }]
320
+ : [{ component: "%cid", type: "cid" }];
321
+ w.structure(`ts_e${e}_a${a}_res`, [...resultHead, ...(resultParam === undefined ? [] : [{ component: "%param", type: resultParam }])], derivedType.actionResult(e, a));
322
+ }
323
+ //# sourceMappingURL=derived-types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"derived-types.js","sourceRoot":"","sources":["../../../src/gen/abap/derived-types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,118 @@
1
+ /**
2
+ * Token-level parser of the EML statements (READ / MODIFY / COMMIT / ROLLBACK ENTITIES).
3
+ *
4
+ * It works on the tokens of the statement rather than on the abaplint statement tree: abaplint
5
+ * does not parse every EML form (`CREATE AUTO FILL CID SET FIELDS WITH` is an unknown
6
+ * statement for it), and the rewrite pass needs only the structure of the statement and the
7
+ * tokens of its operands.
8
+ */
9
+ import { type Tok } from "./tokens.js";
10
+ export type FieldSpec =
11
+ /** `FROM`: the `%control` of the rows says which fields are used. */
12
+ {
13
+ kind: "from";
14
+ }
15
+ /** `ALL FIELDS WITH` */
16
+ | {
17
+ kind: "all";
18
+ }
19
+ /** `FIELDS ( a b ) WITH` */
20
+ | {
21
+ kind: "list";
22
+ fields: Tok[];
23
+ }
24
+ /** `SET FIELDS WITH`: the fields that are not initial. */
25
+ | {
26
+ kind: "set";
27
+ };
28
+ export interface Operand {
29
+ tokens: Tok[];
30
+ }
31
+ export type ReadOperation = {
32
+ kind: "read";
33
+ fields: FieldSpec;
34
+ source: Operand;
35
+ result?: Operand;
36
+ } | {
37
+ kind: "readBy";
38
+ association: Tok;
39
+ fields: FieldSpec;
40
+ source: Operand;
41
+ result?: Operand;
42
+ link?: Operand;
43
+ } | {
44
+ kind: "function";
45
+ name: Tok;
46
+ source: Operand;
47
+ result?: Operand;
48
+ };
49
+ export type ModifyOperation = {
50
+ kind: "create";
51
+ autoFillCid: boolean;
52
+ fields: FieldSpec;
53
+ source: Operand;
54
+ } | {
55
+ kind: "createBy";
56
+ association: Tok;
57
+ autoFillCid: boolean;
58
+ fields: FieldSpec;
59
+ source: Operand;
60
+ } | {
61
+ kind: "update";
62
+ fields: FieldSpec;
63
+ source: Operand;
64
+ } | {
65
+ kind: "delete";
66
+ source: Operand;
67
+ } | {
68
+ kind: "execute";
69
+ name: Tok;
70
+ autoFillCid: boolean;
71
+ source: Operand;
72
+ result?: Operand;
73
+ };
74
+ export interface EntityGroup<Op> {
75
+ /** The entity as written: alias, entity name or `bdef\\alias`. */
76
+ entity: Tok;
77
+ operations: Op[];
78
+ }
79
+ export type Mode = "default" | "local" | "privileged";
80
+ export type EmlStatement = {
81
+ kind: "read";
82
+ /** The BDEF of the long form (`READ ENTITIES OF b`); the short form names the entity only. */
83
+ bdef?: Tok;
84
+ mode: Mode;
85
+ groups: Array<EntityGroup<ReadOperation>>;
86
+ failed?: Operand;
87
+ reported?: Operand;
88
+ } | {
89
+ kind: "modify";
90
+ bdef?: Tok;
91
+ mode: Mode;
92
+ groups: Array<EntityGroup<ModifyOperation>>;
93
+ mapped?: Operand;
94
+ failed?: Operand;
95
+ reported?: Operand;
96
+ } | {
97
+ kind: "commit";
98
+ simulation: boolean;
99
+ responses: Array<{
100
+ bdef: Tok;
101
+ failed?: Operand;
102
+ reported?: Operand;
103
+ }>;
104
+ } | {
105
+ kind: "rollback";
106
+ };
107
+ export declare class EmlSyntaxError extends Error {
108
+ readonly token: Tok | undefined;
109
+ constructor(message: string, token: Tok | undefined);
110
+ }
111
+ /** Is the statement (its first tokens) an EML statement this parser handles? */
112
+ export declare function isEmlStatement(tokens: readonly Tok[]): boolean;
113
+ /** Parses the tokens of an EML statement, without its final period. */
114
+ export declare function parseEml(tokens: Tok[]): EmlStatement;
115
+ /** `DATA(x)` or `FINAL(x)`: the name of an inline declaration, else undefined. */
116
+ export declare function inlineDeclaration(operand: Operand): string | undefined;
117
+ /** The `#` of a constructor expression operand (`VALUE #( … )`), to be given an explicit type. */
118
+ export declare function inferredTypeToken(operand: Operand): Tok | undefined;