@open-rap/compiler 0.0.0-stage → 0.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +21 -2
- package/dist/agent/server.d.ts +35 -0
- package/dist/agent/server.js +408 -0
- package/dist/agent/server.js.map +1 -0
- package/dist/authoring/abapgit.d.ts +38 -0
- package/dist/authoring/abapgit.js +242 -0
- package/dist/authoring/abapgit.js.map +1 -0
- package/dist/authoring/catalog.d.ts +48 -0
- package/dist/authoring/catalog.js +117 -0
- package/dist/authoring/catalog.js.map +1 -0
- package/dist/authoring/floorplan.d.ts +28 -0
- package/dist/authoring/floorplan.js +31 -0
- package/dist/authoring/floorplan.js.map +1 -0
- package/dist/authoring/generate.d.ts +57 -0
- package/dist/authoring/generate.js +630 -0
- package/dist/authoring/generate.js.map +1 -0
- package/dist/authoring/mcp.d.ts +15 -0
- package/dist/authoring/mcp.js +52 -0
- package/dist/authoring/mcp.js.map +1 -0
- package/dist/authoring/new.d.ts +35 -0
- package/dist/authoring/new.js +389 -0
- package/dist/authoring/new.js.map +1 -0
- package/dist/bdef/ast.d.ts +249 -0
- package/dist/bdef/ast.js +3 -0
- package/dist/bdef/ast.js.map +1 -0
- package/dist/bdef/lexer.d.ts +105 -0
- package/dist/bdef/lexer.js +148 -0
- package/dist/bdef/lexer.js.map +1 -0
- package/dist/bdef/parser.d.ts +22 -0
- package/dist/bdef/parser.js +1012 -0
- package/dist/bdef/parser.js.map +1 -0
- package/dist/build.d.ts +26 -0
- package/dist/build.js +62 -0
- package/dist/build.js.map +1 -0
- package/dist/cds/adapter.d.ts +91 -0
- package/dist/cds/adapter.js +381 -0
- package/dist/cds/adapter.js.map +1 -0
- package/dist/cds/expression-ast.d.ts +65 -0
- package/dist/cds/expression-ast.js +330 -0
- package/dist/cds/expression-ast.js.map +1 -0
- package/dist/cli.d.ts +9 -0
- package/dist/cli.js +485 -0
- package/dist/cli.js.map +1 -0
- package/dist/dcl/parser.d.ts +59 -0
- package/dist/dcl/parser.js +338 -0
- package/dist/dcl/parser.js.map +1 -0
- package/dist/ddic/catalog.d.ts +17 -0
- package/dist/ddic/catalog.js +211 -0
- package/dist/ddic/catalog.js.map +1 -0
- package/dist/ddic/cds-types.d.ts +47 -0
- package/dist/ddic/cds-types.js +131 -0
- package/dist/ddic/cds-types.js.map +1 -0
- package/dist/ddic/table-source.d.ts +70 -0
- package/dist/ddic/table-source.js +500 -0
- package/dist/ddic/table-source.js.map +1 -0
- package/dist/ddic/xml.d.ts +65 -0
- package/dist/ddic/xml.js +201 -0
- package/dist/ddic/xml.js.map +1 -0
- package/dist/dev.d.ts +128 -0
- package/dist/dev.js +434 -0
- package/dist/dev.js.map +1 -0
- package/dist/diagnostics.d.ts +33 -0
- package/dist/diagnostics.js +53 -0
- package/dist/diagnostics.js.map +1 -0
- package/dist/gen/abap/derived-types.d.ts +26 -0
- package/dist/gen/abap/derived-types.js +323 -0
- package/dist/gen/abap/derived-types.js.map +1 -0
- package/dist/gen/abap/eml.d.ts +118 -0
- package/dist/gen/abap/eml.js +362 -0
- package/dist/gen/abap/eml.js.map +1 -0
- package/dist/gen/abap/enums.d.ts +13 -0
- package/dist/gen/abap/enums.js +74 -0
- package/dist/gen/abap/enums.js.map +1 -0
- package/dist/gen/abap/framework-http.d.ts +14 -0
- package/dist/gen/abap/framework-http.js +1049 -0
- package/dist/gen/abap/framework-http.js.map +1 -0
- package/dist/gen/abap/framework-query.d.ts +14 -0
- package/dist/gen/abap/framework-query.js +225 -0
- package/dist/gen/abap/framework-query.js.map +1 -0
- package/dist/gen/abap/framework-utils.d.ts +29 -0
- package/dist/gen/abap/framework-utils.js +3707 -0
- package/dist/gen/abap/framework-utils.js.map +1 -0
- package/dist/gen/abap/framework.d.ts +12 -0
- package/dist/gen/abap/framework.js +480 -0
- package/dist/gen/abap/framework.js.map +1 -0
- package/dist/gen/abap/generate.d.ts +40 -0
- package/dist/gen/abap/generate.js +238 -0
- package/dist/gen/abap/generate.js.map +1 -0
- package/dist/gen/abap/rewrite.d.ts +82 -0
- package/dist/gen/abap/rewrite.js +957 -0
- package/dist/gen/abap/rewrite.js.map +1 -0
- package/dist/gen/abap/shadow.d.ts +25 -0
- package/dist/gen/abap/shadow.js +175 -0
- package/dist/gen/abap/shadow.js.map +1 -0
- package/dist/gen/abap/tokens.d.ts +33 -0
- package/dist/gen/abap/tokens.js +87 -0
- package/dist/gen/abap/tokens.js.map +1 -0
- package/dist/gen/app/index.d.ts +25 -0
- package/dist/gen/app/index.js +322 -0
- package/dist/gen/app/index.js.map +1 -0
- package/dist/gen/csdl.d.ts +11 -0
- package/dist/gen/csdl.js +562 -0
- package/dist/gen/csdl.js.map +1 -0
- package/dist/gen/deploy.d.ts +12 -0
- package/dist/gen/deploy.js +53 -0
- package/dist/gen/deploy.js.map +1 -0
- package/dist/gen/docs/index.d.ts +35 -0
- package/dist/gen/docs/index.js +267 -0
- package/dist/gen/docs/index.js.map +1 -0
- package/dist/gen/docs/markdown.d.ts +23 -0
- package/dist/gen/docs/markdown.js +187 -0
- package/dist/gen/docs/markdown.js.map +1 -0
- package/dist/gen/docs/site.d.ts +17 -0
- package/dist/gen/docs/site.js +106 -0
- package/dist/gen/docs/site.js.map +1 -0
- package/dist/gen/keycloak.d.ts +21 -0
- package/dist/gen/keycloak.js +90 -0
- package/dist/gen/keycloak.js.map +1 -0
- package/dist/gen/launchpad/index.d.ts +48 -0
- package/dist/gen/launchpad/index.js +302 -0
- package/dist/gen/launchpad/index.js.map +1 -0
- package/dist/gen/launchpad/ui.d.ts +14 -0
- package/dist/gen/launchpad/ui.js +350 -0
- package/dist/gen/launchpad/ui.js.map +1 -0
- package/dist/gen/mcp.d.ts +23 -0
- package/dist/gen/mcp.js +244 -0
- package/dist/gen/mcp.js.map +1 -0
- package/dist/gen/sql-expressions.d.ts +12 -0
- package/dist/gen/sql-expressions.js +136 -0
- package/dist/gen/sql-expressions.js.map +1 -0
- package/dist/gen/sql.d.ts +38 -0
- package/dist/gen/sql.js +612 -0
- package/dist/gen/sql.js.map +1 -0
- package/dist/gen/ui/index.d.ts +7 -0
- package/dist/gen/ui/index.js +27 -0
- package/dist/gen/ui/index.js.map +1 -0
- package/dist/gen/ui/layout.d.ts +230 -0
- package/dist/gen/ui/layout.js +511 -0
- package/dist/gen/ui/layout.js.map +1 -0
- package/dist/gen/ui/static.d.ts +55 -0
- package/dist/gen/ui/static.js +2901 -0
- package/dist/gen/ui/static.js.map +1 -0
- package/dist/gen/ui/views.d.ts +10 -0
- package/dist/gen/ui/views.js +511 -0
- package/dist/gen/ui/views.js.map +1 -0
- package/dist/gen/vendor.d.ts +23 -0
- package/dist/gen/vendor.js +68 -0
- package/dist/gen/vendor.js.map +1 -0
- package/dist/gen/xml.d.ts +9 -0
- package/dist/gen/xml.js +42 -0
- package/dist/gen/xml.js.map +1 -0
- package/dist/index.d.ts +20 -0
- package/dist/index.js +20 -0
- package/dist/index.js.map +1 -0
- package/dist/input/project.d.ts +50 -0
- package/dist/input/project.js +128 -0
- package/dist/input/project.js.map +1 -0
- package/dist/ir/access-controls.d.ts +11 -0
- package/dist/ir/access-controls.js +148 -0
- package/dist/ir/access-controls.js.map +1 -0
- package/dist/ir/authorizations.d.ts +25 -0
- package/dist/ir/authorizations.js +178 -0
- package/dist/ir/authorizations.js.map +1 -0
- package/dist/ir/behaviors.d.ts +16 -0
- package/dist/ir/behaviors.js +548 -0
- package/dist/ir/behaviors.js.map +1 -0
- package/dist/ir/builder.d.ts +20 -0
- package/dist/ir/builder.js +505 -0
- package/dist/ir/builder.js.map +1 -0
- package/dist/ir/config.d.ts +25 -0
- package/dist/ir/config.js +130 -0
- package/dist/ir/config.js.map +1 -0
- package/dist/ir/dictionary.d.ts +54 -0
- package/dist/ir/dictionary.js +328 -0
- package/dist/ir/dictionary.js.map +1 -0
- package/dist/ir/entities.d.ts +58 -0
- package/dist/ir/entities.js +676 -0
- package/dist/ir/entities.js.map +1 -0
- package/dist/ir/expressions.d.ts +33 -0
- package/dist/ir/expressions.js +327 -0
- package/dist/ir/expressions.js.map +1 -0
- package/dist/ir/handlers.d.ts +63 -0
- package/dist/ir/handlers.js +398 -0
- package/dist/ir/handlers.js.map +1 -0
- package/dist/ir/number-ranges.d.ts +24 -0
- package/dist/ir/number-ranges.js +74 -0
- package/dist/ir/number-ranges.js.map +1 -0
- package/dist/ir/seed.d.ts +23 -0
- package/dist/ir/seed.js +78 -0
- package/dist/ir/seed.js.map +1 -0
- package/dist/ir/service.d.ts +21 -0
- package/dist/ir/service.js +96 -0
- package/dist/ir/service.js.map +1 -0
- package/dist/launchpad/config.d.ts +47 -0
- package/dist/launchpad/config.js +321 -0
- package/dist/launchpad/config.js.map +1 -0
- package/dist/launchpad/workspace.d.ts +48 -0
- package/dist/launchpad/workspace.js +166 -0
- package/dist/launchpad/workspace.js.map +1 -0
- package/dist/srvd/parser.d.ts +36 -0
- package/dist/srvd/parser.js +193 -0
- package/dist/srvd/parser.js.map +1 -0
- package/dist/standard/data.d.ts +18 -0
- package/dist/standard/data.js +534 -0
- package/dist/standard/data.js.map +1 -0
- package/dist/standard/index.d.ts +36 -0
- package/dist/standard/index.js +507 -0
- package/dist/standard/index.js.map +1 -0
- package/dist/version.d.ts +2 -0
- package/dist/version.js +4 -0
- package/dist/version.js.map +1 -0
- package/docs/AGENTS.md +79 -0
- package/docs/ANNOTATIONS.md +76 -0
- package/docs/DECISIONS.md +1554 -0
- package/docs/DEPLOYMENT.md +113 -0
- package/docs/DIAGNOSTICS.md +116 -0
- package/docs/FEATURES.md +287 -0
- package/docs/GUIDE.md +560 -0
- package/docs/KNOWN_GAPS.md +216 -0
- package/docs/MCP.md +84 -0
- package/docs/PLAN.md +690 -0
- package/docs/README.md +148 -0
- package/docs/REMOTE_APIS.md +121 -0
- package/docs/ROADMAP.md +35 -0
- package/docs/UTILITIES.md +95 -0
- 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;
|