@open-rap/runtime 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.
Files changed (144) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +14 -2
  3. package/dist/abap/background.d.ts +14 -0
  4. package/dist/abap/background.js +130 -0
  5. package/dist/abap/background.js.map +1 -0
  6. package/dist/abap/bridge.d.ts +62 -0
  7. package/dist/abap/bridge.js +402 -0
  8. package/dist/abap/bridge.js.map +1 -0
  9. package/dist/abap/convert.d.ts +26 -0
  10. package/dist/abap/convert.js +197 -0
  11. package/dist/abap/convert.js.map +1 -0
  12. package/dist/abap/http.d.ts +34 -0
  13. package/dist/abap/http.js +133 -0
  14. package/dist/abap/http.js.map +1 -0
  15. package/dist/abap/mail.d.ts +10 -0
  16. package/dist/abap/mail.js +83 -0
  17. package/dist/abap/mail.js.map +1 -0
  18. package/dist/abap/odata-client.d.ts +33 -0
  19. package/dist/abap/odata-client.js +576 -0
  20. package/dist/abap/odata-client.js.map +1 -0
  21. package/dist/abap/sql.d.ts +92 -0
  22. package/dist/abap/sql.js +261 -0
  23. package/dist/abap/sql.js.map +1 -0
  24. package/dist/abap/utils.d.ts +41 -0
  25. package/dist/abap/utils.js +976 -0
  26. package/dist/abap/utils.js.map +1 -0
  27. package/dist/app.d.ts +53 -0
  28. package/dist/app.js +169 -0
  29. package/dist/app.js.map +1 -0
  30. package/dist/auth/auth.d.ts +68 -0
  31. package/dist/auth/auth.js +140 -0
  32. package/dist/auth/auth.js.map +1 -0
  33. package/dist/auth/authorizations.d.ts +39 -0
  34. package/dist/auth/authorizations.js +103 -0
  35. package/dist/auth/authorizations.js.map +1 -0
  36. package/dist/auth/business-users.d.ts +15 -0
  37. package/dist/auth/business-users.js +36 -0
  38. package/dist/auth/business-users.js.map +1 -0
  39. package/dist/auth/dev-oauth.d.ts +38 -0
  40. package/dist/auth/dev-oauth.js +156 -0
  41. package/dist/auth/dev-oauth.js.map +1 -0
  42. package/dist/auth/environment.d.ts +7 -0
  43. package/dist/auth/environment.js +57 -0
  44. package/dist/auth/environment.js.map +1 -0
  45. package/dist/auth/session.d.ts +45 -0
  46. package/dist/auth/session.js +257 -0
  47. package/dist/auth/session.js.map +1 -0
  48. package/dist/auth/user.d.ts +21 -0
  49. package/dist/auth/user.js +12 -0
  50. package/dist/auth/user.js.map +1 -0
  51. package/dist/db/database.d.ts +30 -0
  52. package/dist/db/database.js +131 -0
  53. package/dist/db/database.js.map +1 -0
  54. package/dist/db/seed.d.ts +9 -0
  55. package/dist/db/seed.js +63 -0
  56. package/dist/db/seed.js.map +1 -0
  57. package/dist/index.d.ts +20 -0
  58. package/dist/index.js +21 -0
  59. package/dist/index.js.map +1 -0
  60. package/dist/launchpad/dev.d.ts +14 -0
  61. package/dist/launchpad/dev.js +48 -0
  62. package/dist/launchpad/dev.js.map +1 -0
  63. package/dist/launchpad/proxy.d.ts +30 -0
  64. package/dist/launchpad/proxy.js +98 -0
  65. package/dist/launchpad/proxy.js.map +1 -0
  66. package/dist/launchpad/server.d.ts +77 -0
  67. package/dist/launchpad/server.js +177 -0
  68. package/dist/launchpad/server.js.map +1 -0
  69. package/dist/mcp/server.d.ts +22 -0
  70. package/dist/mcp/server.js +222 -0
  71. package/dist/mcp/server.js.map +1 -0
  72. package/dist/odata/access.d.ts +31 -0
  73. package/dist/odata/access.js +142 -0
  74. package/dist/odata/access.js.map +1 -0
  75. package/dist/odata/batch.d.ts +36 -0
  76. package/dist/odata/batch.js +147 -0
  77. package/dist/odata/batch.js.map +1 -0
  78. package/dist/odata/csrf.d.ts +13 -0
  79. package/dist/odata/csrf.js +27 -0
  80. package/dist/odata/csrf.js.map +1 -0
  81. package/dist/odata/custom.d.ts +90 -0
  82. package/dist/odata/custom.js +373 -0
  83. package/dist/odata/custom.js.map +1 -0
  84. package/dist/odata/draft.d.ts +78 -0
  85. package/dist/odata/draft.js +590 -0
  86. package/dist/odata/draft.js.map +1 -0
  87. package/dist/odata/errors.d.ts +27 -0
  88. package/dist/odata/errors.js +41 -0
  89. package/dist/odata/errors.js.map +1 -0
  90. package/dist/odata/handler.d.ts +90 -0
  91. package/dist/odata/handler.js +312 -0
  92. package/dist/odata/handler.js.map +1 -0
  93. package/dist/odata/json.d.ts +23 -0
  94. package/dist/odata/json.js +85 -0
  95. package/dist/odata/json.js.map +1 -0
  96. package/dist/odata/read.d.ts +90 -0
  97. package/dist/odata/read.js +686 -0
  98. package/dist/odata/read.js.map +1 -0
  99. package/dist/odata/service.d.ts +45 -0
  100. package/dist/odata/service.js +145 -0
  101. package/dist/odata/service.js.map +1 -0
  102. package/dist/odata/uri/ast.d.ts +103 -0
  103. package/dist/odata/uri/ast.js +3 -0
  104. package/dist/odata/uri/ast.js.map +1 -0
  105. package/dist/odata/uri/parser.d.ts +26 -0
  106. package/dist/odata/uri/parser.js +697 -0
  107. package/dist/odata/uri/parser.js.map +1 -0
  108. package/dist/odata/write.d.ts +127 -0
  109. package/dist/odata/write.js +799 -0
  110. package/dist/odata/write.js.map +1 -0
  111. package/dist/platform.d.ts +14 -0
  112. package/dist/platform.js +66 -0
  113. package/dist/platform.js.map +1 -0
  114. package/dist/rap/bo.d.ts +76 -0
  115. package/dist/rap/bo.js +184 -0
  116. package/dist/rap/bo.js.map +1 -0
  117. package/dist/rap/kernel.d.ts +7 -0
  118. package/dist/rap/kernel.js +287 -0
  119. package/dist/rap/kernel.js.map +1 -0
  120. package/dist/rap/runtime.d.ts +84 -0
  121. package/dist/rap/runtime.js +128 -0
  122. package/dist/rap/runtime.js.map +1 -0
  123. package/dist/rap/transaction.d.ts +227 -0
  124. package/dist/rap/transaction.js +1385 -0
  125. package/dist/rap/transaction.js.map +1 -0
  126. package/dist/rap/types.d.ts +74 -0
  127. package/dist/rap/types.js +25 -0
  128. package/dist/rap/types.js.map +1 -0
  129. package/dist/server.d.ts +34 -0
  130. package/dist/server.js +114 -0
  131. package/dist/server.js.map +1 -0
  132. package/dist/ui/plugin.d.ts +14 -0
  133. package/dist/ui/plugin.js +47 -0
  134. package/dist/ui/plugin.js.map +1 -0
  135. package/dist/ui/resources.d.ts +22 -0
  136. package/dist/ui/resources.js +88 -0
  137. package/dist/ui/resources.js.map +1 -0
  138. package/dist/ui/variants.d.ts +25 -0
  139. package/dist/ui/variants.js +68 -0
  140. package/dist/ui/variants.js.map +1 -0
  141. package/dist/values.d.ts +43 -0
  142. package/dist/values.js +367 -0
  143. package/dist/values.js.map +1 -0
  144. package/package.json +60 -3
@@ -0,0 +1,287 @@
1
+ /**
2
+ * The EML kernel: JavaScript implementation of the static methods of the clean-room class
3
+ * ZRAP_EML, which the rewrite pass calls for every EML statement of the behavior pools
4
+ * (decision D2). The methods run in the LUW of the handler that executes the statement.
5
+ */
6
+ import { randomUUID } from "node:crypto";
7
+ import { same } from "@open-rap/model";
8
+ import { setSubrc } from "../abap/bridge.js";
9
+ import { installHttp } from "../abap/http.js";
10
+ import { installODataClient } from "../abap/odata-client.js";
11
+ import { installUtilities } from "../abap/utils.js";
12
+ import { installBackground } from "../abap/background.js";
13
+ import { installMail } from "../abap/mail.js";
14
+ import { abapGlobal, abapString, appendRow, component, rowsOf } from "../abap/convert.js";
15
+ import { isInitial } from "../values.js";
16
+ import { entityOfTable } from "./bo.js";
17
+ import { RapRuntimeError, Responses } from "./types.js";
18
+ const isTrue = (value) => value !== undefined && String(value.get?.() ?? value).trim() !== "";
19
+ export function installKernel(runtime) {
20
+ const abap = abapGlobal();
21
+ const kernel = abap.Classes["ZRAP_EML"];
22
+ if (kernel === undefined) {
23
+ throw new Error("the kernel class ZRAP_EML is not loaded");
24
+ }
25
+ const { bo: model, bridge } = runtime;
26
+ const statement = () => {
27
+ const statements = runtime.context().statements;
28
+ const current = statements[statements.length - 1];
29
+ if (current === undefined) {
30
+ throw new RapRuntimeError("EML operation outside of an EML statement");
31
+ }
32
+ return current;
33
+ };
34
+ const entityOf = (input) => {
35
+ const name = abapString(input?.["entity"]);
36
+ const bo = model.find(name);
37
+ if (bo === undefined) {
38
+ throw new RapRuntimeError(`EML: unknown entity ${name}`);
39
+ }
40
+ return bo;
41
+ };
42
+ /** Fields requested by `FIELDS ( … )`, `ALL FIELDS` or the `%control` of a row (`FROM`). */
43
+ const fieldsOf = (input, bo, row, values) => {
44
+ const spec = abapString(input?.["fields"]);
45
+ if (spec === "*") {
46
+ return new Set(bo.fields.map((f) => f.name));
47
+ }
48
+ if (spec !== "") {
49
+ return new Set(spec.split(/\s+/).map((n) => bo.fields.find((f) => same(f.name, n))?.name ?? n));
50
+ }
51
+ if (isTrue(input?.["set_fields"]) && values !== undefined) {
52
+ return new Set(bo.fields.filter((f) => !isInitial(f.type, values[f.name])).map((f) => f.name));
53
+ }
54
+ return bridge.readControl(row, bo) ?? new Set();
55
+ };
56
+ const cidOf = (input, row, name) => {
57
+ const cid = bridge.readText(row, name);
58
+ if (cid !== "") {
59
+ return cid;
60
+ }
61
+ return name === "%cid" && isTrue(input?.["auto_fill_cid"]) ? `%AUTO-${randomUUID()}` : undefined;
62
+ };
63
+ const createRequest = (input, bo, row) => {
64
+ const values = bridge.readRow(row, bo);
65
+ const request = { values, fields: fieldsOf(input, bo, row, values) };
66
+ const cid = cidOf(input, row, "%cid");
67
+ if (cid !== undefined) {
68
+ request.cid = cid;
69
+ }
70
+ return request;
71
+ };
72
+ const actionOf = (bo, input) => {
73
+ const name = abapString(input?.["action"]);
74
+ const action = bo.behavior.actions.find((a) => same(a.name, name));
75
+ if (action === undefined) {
76
+ throw new RapRuntimeError(`EML: ${bo.behavior.alias} has no action ${name}`);
77
+ }
78
+ return action;
79
+ };
80
+ kernel.begin = async (input) => {
81
+ runtime.context().statements.push({
82
+ bdef: abapString(input?.["bdef"]),
83
+ mode: { local: isTrue(input?.["local"]), privileged: isTrue(input?.["privileged"]), external: false },
84
+ responses: new Responses(),
85
+ });
86
+ };
87
+ kernel.end = async (input) => {
88
+ const current = runtime.context().statements.pop();
89
+ if (current === undefined) {
90
+ throw new RapRuntimeError("EML: end without begin");
91
+ }
92
+ const any = model.entities.find((e) => same(e.bdef.name, current.bdef));
93
+ if (any !== undefined) {
94
+ await bridge.writeResponses(any, current.responses, input?.["failed"], input?.["reported"], input?.["mapped"]);
95
+ }
96
+ setSubrc(current.responses.failed.length > 0 ? 4 : 0);
97
+ };
98
+ kernel.read = async (input) => {
99
+ const st = statement();
100
+ const bo = entityOf(input);
101
+ const rows = rowsOf(input?.["keys"]);
102
+ const { rows: found, responses } = await runtime.context().tx.read(bo, rows.map((row) => ({ key: bridge.readKey(row, bo) })));
103
+ st.responses.add(responses);
104
+ const result = input?.["result"];
105
+ if (result === undefined) {
106
+ return;
107
+ }
108
+ result.clear();
109
+ found.forEach((values, i) => {
110
+ if (values !== undefined) {
111
+ const fields = fieldsOf(input, bo, rows[i]);
112
+ appendRow(result, (r) => bridge.fillRow(r, bo, values, [...bo.keys.map((k) => k.name), ...fields]));
113
+ }
114
+ });
115
+ };
116
+ kernel.read_by_association = async (input) => {
117
+ const st = statement();
118
+ const bo = entityOf(input);
119
+ const association = model.association(bo, abapString(input?.["association"]));
120
+ if (association === undefined) {
121
+ throw new RapRuntimeError(`EML: ${bo.behavior.alias} has no association ${abapString(input?.["association"])}`);
122
+ }
123
+ const rows = rowsOf(input?.["keys"]);
124
+ const { results, responses } = await runtime.context().tx.readByAssociation(bo, association, rows.map((row) => bridge.readKey(row, bo)));
125
+ st.responses.add(responses);
126
+ const fields = rows[0] === undefined ? new Set() : fieldsOf(input, association.target, rows[0]);
127
+ const result = input?.["result"];
128
+ const link = input?.["link"];
129
+ result?.clear();
130
+ link?.clear();
131
+ const seen = new Set();
132
+ for (const { source, target } of results) {
133
+ const id = JSON.stringify(association.target.keys.map((k) => target[k.name]));
134
+ if (result !== undefined && !seen.has(id)) {
135
+ seen.add(id);
136
+ appendRow(result, (r) => bridge.fillRow(r, association.target, target, [...association.target.keys.map((k) => k.name), ...fields]));
137
+ }
138
+ if (link !== undefined) {
139
+ appendRow(link, (r) => {
140
+ bridge.fillKey(component(r, "source"), bo, source);
141
+ bridge.fillKey(component(r, "target"), association.target, target);
142
+ });
143
+ }
144
+ }
145
+ };
146
+ kernel.modify = async (input) => {
147
+ const st = statement();
148
+ const bo = entityOf(input);
149
+ const tx = runtime.context().tx;
150
+ const operation = abapString(input?.["operation"]).toUpperCase();
151
+ const rows = rowsOf(input?.["rows"]);
152
+ if (operation === "CREATE") {
153
+ st.responses.add(await tx.create(bo, rows.map((row) => createRequest(input, bo, row)), st.mode));
154
+ }
155
+ else if (operation === "UPDATE") {
156
+ st.responses.add(await tx.update(bo, rows.map((row) => {
157
+ const values = bridge.readRow(row, bo);
158
+ const fields = fieldsOf(input, bo, row, values);
159
+ for (const k of bo.keys) {
160
+ fields.delete(k.name);
161
+ }
162
+ const cidRef = cidOf(input, row, "%cid_ref");
163
+ return { key: bridge.readKey(row, bo), values, fields, ...(cidRef === undefined ? {} : { cidRef }) };
164
+ }), st.mode));
165
+ }
166
+ else if (operation === "DELETE") {
167
+ st.responses.add(await tx.delete(bo, rows.map((row) => {
168
+ const cidRef = cidOf(input, row, "%cid_ref");
169
+ return { key: bridge.readKey(row, bo), ...(cidRef === undefined ? {} : { cidRef }) };
170
+ }), st.mode));
171
+ }
172
+ else {
173
+ throw new RapRuntimeError(`EML: unknown operation ${operation}`);
174
+ }
175
+ };
176
+ kernel.create_by_association = async (input) => {
177
+ const st = statement();
178
+ const bo = entityOf(input);
179
+ const association = model.association(bo, abapString(input?.["association"]));
180
+ if (association === undefined) {
181
+ throw new RapRuntimeError(`EML: ${bo.behavior.alias} has no association ${abapString(input?.["association"])}`);
182
+ }
183
+ const requests = rowsOf(input?.["rows"]).map((row) => {
184
+ const cidRef = cidOf(input, row, "%cid_ref");
185
+ return {
186
+ key: bridge.readKey(row, bo),
187
+ ...(cidRef === undefined ? {} : { cidRef }),
188
+ targets: rowsOf(component(row, "%target")).map((target) => createRequest(input, association.target, target)),
189
+ };
190
+ });
191
+ st.responses.add(await runtime.context().tx.createByAssociation(bo, association, requests, st.mode));
192
+ };
193
+ kernel.execute = async (input) => {
194
+ const st = statement();
195
+ const bo = entityOf(input);
196
+ const action = actionOf(bo, input);
197
+ const parameter = action.parameter === undefined || action.parameter === "$self" ? undefined : model.model.entities.find((e) => same(e.name, action.parameter ?? ""));
198
+ const requests = rowsOf(input?.["rows"]).map((row) => {
199
+ const cid = action.static || action.factory ? cidOf(input, row, "%cid") : undefined;
200
+ const cidRef = action.static ? undefined : cidOf(input, row, "%cid_ref");
201
+ return {
202
+ ...(action.static ? {} : { key: bridge.readKey(row, bo) }),
203
+ ...(cid === undefined ? {} : { cid }),
204
+ ...(cidRef === undefined ? {} : { cidRef }),
205
+ param: parameter === undefined ? {} : bridge.readParameter(row, parameter.fields),
206
+ };
207
+ });
208
+ const { results, responses } = await runtime.context().tx.execute(bo, action, requests, st.mode);
209
+ st.responses.add(responses);
210
+ const result = input?.["result"];
211
+ if (result === undefined) {
212
+ return;
213
+ }
214
+ result.clear();
215
+ const resultBo = action.result === undefined || action.result.entity === "$self" ? bo : model.find(action.result.entity);
216
+ const abstract = action.result !== undefined && resultBo === undefined ? model.model.entities.find((e) => same(e.name, action.result?.entity ?? "")) : undefined;
217
+ for (const entry of results) {
218
+ appendRow(result, (r) => {
219
+ if (entry.key !== undefined) {
220
+ bridge.fillKey(r, bo, entry.key);
221
+ }
222
+ component(r, action.static ? "%cid" : "%cid_ref")?.set((action.static ? entry.cid : entry.cidRef) ?? "");
223
+ const param = component(r, "%param");
224
+ if (param !== undefined && entry.value !== undefined) {
225
+ if (resultBo !== undefined) {
226
+ bridge.fillRow(param, resultBo, entry.value);
227
+ }
228
+ else if (abstract !== undefined) {
229
+ bridge.fillParameter(r, abstract.fields, entry.value);
230
+ }
231
+ }
232
+ });
233
+ }
234
+ };
235
+ // COMMIT ENTITIES and ROLLBACK ENTITIES: only in a background operation (installBackground)
236
+ kernel.message_text = async (input) => {
237
+ const vars = ["v1", "v2", "v3", "v4"].map((v) => abapString(input?.[v]));
238
+ return new abap.types.String().set(bridge.t100(abapString(input?.["id"]), abapString(input?.["number"]), vars));
239
+ };
240
+ // the T100 text of an exception object (if_t100_message), its attributes resolved by name
241
+ kernel.exception_text = async (input) => {
242
+ const object = input?.["exception"]?.get?.();
243
+ return new abap.types.String().set(object === undefined ? "" : bridge.exceptionText(object));
244
+ };
245
+ kernel.uuid = async () => new abap.types.Hex({ length: 16 }).set(randomUUID().replace(/-/g, "").toUpperCase());
246
+ // consumption of remote APIs: HTTP client and OData client proxy (D31)
247
+ installHttp(kernel);
248
+ installODataClient(kernel);
249
+ // utilities of ABAP Cloud: JSON, encodings, number ranges, application log, RTTS… (D40)
250
+ installUtilities(kernel, { db: () => runtime.context().tx.db, user: () => runtime.context().user.abapName });
251
+ // background processing (bgPF) and e-mails, after the commit of the LUW (D41)
252
+ installBackground(kernel, runtime);
253
+ installMail(kernel, runtime);
254
+ // AUTHORITY-CHECK: the transpiler calls the kernel class KERNEL_AUTHORITY_CHECK (D34)
255
+ abap.Classes["KERNEL_AUTHORITY_CHECK"] = {
256
+ call: async (input) => {
257
+ const { user } = runtime.context();
258
+ const forUser = input.user === undefined ? undefined : abapString(input.user).trim().toUpperCase();
259
+ if (forUser !== undefined && forUser !== user.abapName) {
260
+ // FOR USER: only the user of the request is known (40: unknown user)
261
+ setSubrc(40);
262
+ return;
263
+ }
264
+ const fields = (input.fields ?? []).map((f) => {
265
+ const id = abapString(f.id).trim().toUpperCase();
266
+ return f.dummy === true ? { id } : { id, value: abapString(f.field).trimEnd() };
267
+ });
268
+ setSubrc(runtime.authorizations.check(user, abapString(input.object).trim().toUpperCase(), fields));
269
+ },
270
+ };
271
+ // INSERT|UPDATE|MODIFY|DELETE dbtab FROM [TABLE] @source … MAPPING FROM ENTITY (save_modified)
272
+ kernel.sql_write = async (input) => {
273
+ const operation = abapString(input?.["operation"]).toUpperCase();
274
+ const table = abapString(input?.["table"]);
275
+ const bo = entityOfTable(model, table);
276
+ if (bo === undefined) {
277
+ throw new RapRuntimeError(`${operation} ${table} … MAPPING FROM ENTITY: no entity of a BDEF is mapped to ${table}`);
278
+ }
279
+ const single = input?.["rows"] === undefined;
280
+ const source = single ? [input?.["row"]] : rowsOf(input?.["rows"]);
281
+ const rows = source.map((row) => ({ values: bridge.readRow(row, bo), control: bridge.readControl(row, bo) }));
282
+ const { subrc, dbcnt } = await runtime.context().tx.writeMapped(bo, operation, rows, single, isTrue(input?.["indicators"]));
283
+ setSubrc(subrc);
284
+ abap.builtin.sy.get().dbcnt.set(dbcnt);
285
+ };
286
+ }
287
+ //# sourceMappingURL=kernel.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"kernel.js","sourceRoot":"","sources":["../../src/rap/kernel.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,84 @@
1
+ /**
2
+ * The managed RAP runtime of a generated application: the transpiled behavior pools, the EML
3
+ * kernel and the LUWs.
4
+ *
5
+ * ABAP runs one LUW at a time (decision D11: the runtime of @abaplint/runtime has a global state,
6
+ * sy-* and static attributes); the calls made by a LUW's own handlers are re-entrant because they
7
+ * run inside it (AsyncLocalStorage carries the LUW).
8
+ */
9
+ import type { Kysely } from "kysely";
10
+ import { type Model } from "@open-rap/model";
11
+ import { AbapBridge } from "../abap/bridge.js";
12
+ import { Authorizations } from "../auth/authorizations.js";
13
+ import type { User } from "../auth/user.js";
14
+ import { BoModel } from "./bo.js";
15
+ import { Transaction, type TransactionServices } from "./transaction.js";
16
+ import { Responses, type AccessMode } from "./types.js";
17
+ /** An EML statement being executed (between ZRAP_EML=>begin and =>end). */
18
+ export interface Statement {
19
+ bdef: string;
20
+ mode: AccessMode;
21
+ responses: Responses;
22
+ }
23
+ /** Work to do once the LUW is committed (background processes, mails, D41). */
24
+ export type AfterCommit = (luw: {
25
+ db: Kysely<unknown>;
26
+ user: User;
27
+ language: string;
28
+ }) => Promise<void>;
29
+ /** A LUW of a background process (bgPF, D41): controlled (if_bgmc_op_single) or not. */
30
+ export interface BackgroundLuw {
31
+ controlled: boolean;
32
+ /** COMMIT ENTITIES ran (the save sequence). */
33
+ committed: boolean;
34
+ /** ROLLBACK ENTITIES ran: the LUW is rolled back at the end of the operation. */
35
+ rolledBack: boolean;
36
+ /** The responses of the last COMMIT ENTITIES, for RESPONSE OF. */
37
+ responses?: Responses;
38
+ }
39
+ export interface LuwContext {
40
+ tx: Transaction;
41
+ user: User;
42
+ language: string;
43
+ statements: Statement[];
44
+ afterCommit: AfterCommit[];
45
+ background?: BackgroundLuw;
46
+ }
47
+ export declare class RapRuntime {
48
+ readonly model: Model;
49
+ readonly bo: BoModel;
50
+ readonly bridge: AbapBridge;
51
+ /** The authorizations of the users: AUTHORITY-CHECK (D34); the roles of the model by default. */
52
+ authorizations: Authorizations;
53
+ private readonly storage;
54
+ private tail;
55
+ private lastMicros;
56
+ /** Reads the instances of custom entities (D43), set by the OData reads of the application. */
57
+ customRead?: TransactionServices["customRead"];
58
+ /** Work started after commits that has not ended yet (see idle). */
59
+ private readonly pending;
60
+ private constructor();
61
+ /**
62
+ * Loads the transpiled behavior pools of the model (`abap/` folder), installs the kernel and the
63
+ * database of the ABAP SQL (decision D26) and the texts of the message classes (MESSAGE … INTO).
64
+ */
65
+ static load(model: Model, abapDir: string): Promise<RapRuntime>;
66
+ /** Whether the caller runs in a LUW (ABAP code, the RAP runtime). */
67
+ inLuw(): boolean;
68
+ /** The LUW of the running ABAP code. */
69
+ context(): LuwContext;
70
+ /** Time stamps of the administrative fields: ISO UTC with microseconds, strictly increasing. */
71
+ now(): string;
72
+ /**
73
+ * Runs `fn` in a new LUW: one database transaction (committed when `fn` returns, rolled back when
74
+ * it throws), ABAP serialized with the other LUWs. After the commit, the work the LUW registered
75
+ * (background processes, mails) starts, each in its own LUW.
76
+ */
77
+ transaction<T>(db: Kysely<unknown>, user: User, language: string, fn: (tx: Transaction) => Promise<T>, options?: {
78
+ background?: BackgroundLuw;
79
+ }): Promise<T>;
80
+ /** Starts work after the current request (its failure is the work's own business). */
81
+ private start;
82
+ /** Resolves when the work started after commits has ended (tests, shutdown). */
83
+ idle(): Promise<void>;
84
+ }
@@ -0,0 +1,128 @@
1
+ /**
2
+ * The managed RAP runtime of a generated application: the transpiled behavior pools, the EML
3
+ * kernel and the LUWs.
4
+ *
5
+ * ABAP runs one LUW at a time (decision D11: the runtime of @abaplint/runtime has a global state,
6
+ * sy-* and static attributes); the calls made by a LUW's own handlers are re-entrant because they
7
+ * run inside it (AsyncLocalStorage carries the LUW).
8
+ */
9
+ import { AsyncLocalStorage } from "node:async_hooks";
10
+ import { ABAP_SQL_SCHEMA } from "@open-rap/model";
11
+ import { AbapBridge, loadAbap, setSystemFields } from "../abap/bridge.js";
12
+ import { abapGlobal } from "../abap/convert.js";
13
+ import { AbapSqlClient } from "../abap/sql.js";
14
+ import { Authorizations } from "../auth/authorizations.js";
15
+ import { BoModel } from "./bo.js";
16
+ import { installKernel } from "./kernel.js";
17
+ import { Transaction } from "./transaction.js";
18
+ import { Responses } from "./types.js";
19
+ export class RapRuntime {
20
+ model;
21
+ bo;
22
+ bridge;
23
+ /** The authorizations of the users: AUTHORITY-CHECK (D34); the roles of the model by default. */
24
+ authorizations;
25
+ storage = new AsyncLocalStorage();
26
+ tail = Promise.resolve();
27
+ lastMicros = 0n;
28
+ /** Reads the instances of custom entities (D43), set by the OData reads of the application. */
29
+ customRead;
30
+ /** Work started after commits that has not ended yet (see idle). */
31
+ pending = new Set();
32
+ constructor(model) {
33
+ this.model = model;
34
+ this.bo = new BoModel(model);
35
+ this.bridge = new AbapBridge(this.bo, model.messageClasses);
36
+ this.authorizations = new Authorizations(model.authorizations);
37
+ }
38
+ /**
39
+ * Loads the transpiled behavior pools of the model (`abap/` folder), installs the kernel and the
40
+ * database of the ABAP SQL (decision D26) and the texts of the message classes (MESSAGE … INTO).
41
+ */
42
+ static async load(model, abapDir) {
43
+ await loadAbap(abapDir, model.abap?.modules[0] ?? "init.mjs");
44
+ const runtime = new RapRuntime(model);
45
+ installKernel(runtime);
46
+ const abap = abapGlobal();
47
+ abap.dbo.schemaPrefix = ABAP_SQL_SCHEMA;
48
+ abap.context.databaseConnections["DEFAULT"] = new AbapSqlClient(() => {
49
+ const context = runtime.storage.getStore();
50
+ if (context === undefined) {
51
+ throw new Error("ABAP SQL outside of a RAP transaction");
52
+ }
53
+ return { db: context.tx.db, writable: context.tx.inSaver };
54
+ });
55
+ abap.MSAG = model.messageClasses;
56
+ return runtime;
57
+ }
58
+ /** Whether the caller runs in a LUW (ABAP code, the RAP runtime). */
59
+ inLuw() {
60
+ return this.storage.getStore() !== undefined;
61
+ }
62
+ /** The LUW of the running ABAP code. */
63
+ context() {
64
+ const context = this.storage.getStore();
65
+ if (context === undefined) {
66
+ throw new Error("EML outside of a RAP transaction");
67
+ }
68
+ return context;
69
+ }
70
+ /** Time stamps of the administrative fields: ISO UTC with microseconds, strictly increasing. */
71
+ now() {
72
+ let micros = BigInt(Date.now()) * 1000n;
73
+ if (micros <= this.lastMicros) {
74
+ micros = this.lastMicros + 1n;
75
+ }
76
+ this.lastMicros = micros;
77
+ const iso = new Date(Number(micros / 1000n)).toISOString();
78
+ return `${iso.slice(0, 23)}${String(micros % 1000n).padStart(3, "0")}Z`;
79
+ }
80
+ /**
81
+ * Runs `fn` in a new LUW: one database transaction (committed when `fn` returns, rolled back when
82
+ * it throws), ABAP serialized with the other LUWs. After the commit, the work the LUW registered
83
+ * (background processes, mails) starts, each in its own LUW.
84
+ */
85
+ async transaction(db, user, language, fn, options = {}) {
86
+ const afterCommit = [];
87
+ const run = async () => db.transaction().execute(async (trx) => {
88
+ const services = { bo: this.bo, bridge: this.bridge, now: () => this.now() };
89
+ if (this.customRead !== undefined) {
90
+ services.customRead = this.customRead;
91
+ }
92
+ const tx = new Transaction(services, trx, user);
93
+ if (options.background !== undefined && !options.background.controlled) {
94
+ // a transactionally uncontrolled operation may write the database at any time
95
+ tx.inSaver = true;
96
+ }
97
+ const context = { tx, user, language, statements: [], afterCommit, ...(options.background === undefined ? {} : { background: options.background }) };
98
+ return this.storage.run(context, async () => {
99
+ setSystemFields(user, language);
100
+ return fn(tx);
101
+ });
102
+ });
103
+ const result = this.tail.then(run, run);
104
+ this.tail = result.catch(() => undefined);
105
+ const value = await result;
106
+ for (const work of afterCommit) {
107
+ this.start(() => work({ db, user, language }));
108
+ }
109
+ return value;
110
+ }
111
+ /** Starts work after the current request (its failure is the work's own business). */
112
+ start(work) {
113
+ const promise = new Promise((resolve) => setImmediate(resolve))
114
+ .then(work)
115
+ .catch((error) => {
116
+ process.stderr.write(`open-rap-runtime: background work failed: ${error.stack ?? String(error)}\n`);
117
+ })
118
+ .finally(() => this.pending.delete(promise));
119
+ this.pending.add(promise);
120
+ }
121
+ /** Resolves when the work started after commits has ended (tests, shutdown). */
122
+ async idle() {
123
+ while (this.pending.size > 0) {
124
+ await Promise.all([...this.pending]);
125
+ }
126
+ }
127
+ }
128
+ //# sourceMappingURL=runtime.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runtime.js","sourceRoot":"","sources":["../../src/rap/runtime.ts"],"names":[],"mappings":"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"}