@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,92 @@
1
+ /**
2
+ * The database of the ABAP SQL of the behavior pools (decision D26): a database client of
3
+ * @abaplint/runtime over the transaction of the running LUW. It reads anywhere and writes in the
4
+ * saver only (save_modified of a BO with additional or unmanaged save).
5
+ *
6
+ * @abaplint/transpiler turns a SELECT into SQL text with its values in ABAP form (dates
7
+ * `YYYYMMDD`, UUIDs as hexadecimal digits) and a few ABAP keywords (`UP TO n ROWS`, `EQ`,
8
+ * `ORDER BY PRIMARY KEY`). The tables and CDS entities are read through the views of the ABAP SQL
9
+ * schema, whose columns hold the ABAP form (generated with the database schema); the text is
10
+ * translated to PostgreSQL here. Each statement runs in a savepoint: a failing SELECT leaves the
11
+ * LUW's transaction usable.
12
+ */
13
+ import { type Kysely } from "kysely";
14
+ export type AbapSqlValue = number | string | null;
15
+ export type AbapSqlRow = Record<string, AbapSqlValue>;
16
+ export interface AbapSelectOptions {
17
+ /** The SELECT, as generated by the transpiler. */
18
+ select: string;
19
+ /** Key columns (lower case) of the table, for `ORDER BY PRIMARY KEY`. */
20
+ primaryKey?: string[];
21
+ }
22
+ export declare class AbapSqlError extends Error {
23
+ }
24
+ /**
25
+ * Translates the SQL of the transpiler to PostgreSQL: `UP TO n ROWS` → `LIMIT n` (none for 0),
26
+ * `ORDER BY PRIMARY KEY` → the key columns, `ASCENDING`/`DESCENDING`, the comparison keywords,
27
+ * `alias~field`, identifiers in lower case (ABAP is case-insensitive, the views use lower case).
28
+ * Only the views of the ABAP SQL schema can be read.
29
+ */
30
+ export declare function translateSelect(text: string, primaryKey?: string[]): string;
31
+ /** A condition or SET list of the transpiler's ABAP SQL as PostgreSQL (identifiers, `~`, EQ…). */
32
+ export declare function translateFragment(text: string): string;
33
+ /** The transaction of the running LUW, and whether its saver runs (writes allowed). */
34
+ export interface AbapSqlLuw {
35
+ db: Kysely<unknown>;
36
+ writable: boolean;
37
+ }
38
+ /**
39
+ * The DEFAULT database connection of the transpiled code (`DatabaseClient` of @abaplint/runtime).
40
+ * `luw` gives the transaction of the running LUW. The writes go to the views of the ABAP SQL
41
+ * schema, whose triggers write the tables (values converted back from their ABAP form).
42
+ */
43
+ export declare class AbapSqlClient {
44
+ private readonly luw;
45
+ readonly name = "postgres";
46
+ constructor(luw: () => AbapSqlLuw);
47
+ private connection;
48
+ /** A write of the saver: sy-subrc 4 when no row is affected or the key exists (INSERT). */
49
+ private write;
50
+ connect(): Promise<void>;
51
+ disconnect(): Promise<void>;
52
+ /** The LUW owns the transaction: nothing to begin. */
53
+ beginTransaction(): Promise<void>;
54
+ /** COMMIT WORK: the RAP runtime ends the LUW, a handler cannot (a runtime error in RAP too). */
55
+ commit(): Promise<void>;
56
+ rollback(): Promise<void>;
57
+ /** Native SQL (EXEC SQL, ADBC): not available. */
58
+ execute(): Promise<void>;
59
+ insert(options: {
60
+ table: string;
61
+ columns: string[];
62
+ values: Array<string | number>;
63
+ }): Promise<{
64
+ subrc: number;
65
+ dbcnt: number;
66
+ }>;
67
+ update(options: {
68
+ table: string;
69
+ where: string;
70
+ set: string[];
71
+ }): Promise<{
72
+ subrc: number;
73
+ dbcnt: number;
74
+ }>;
75
+ delete(options: {
76
+ table: string;
77
+ where: string;
78
+ }): Promise<{
79
+ subrc: number;
80
+ dbcnt: number;
81
+ }>;
82
+ select(options: AbapSelectOptions): Promise<{
83
+ rows: AbapSqlRow[];
84
+ }>;
85
+ /** OPEN CURSOR: the result is read at once, FETCH hands it out package by package. */
86
+ openCursor(options: AbapSelectOptions): Promise<{
87
+ fetchNextCursor(size: number): Promise<{
88
+ rows: AbapSqlRow[];
89
+ }>;
90
+ closeCursor(): Promise<void>;
91
+ }>;
92
+ }
@@ -0,0 +1,261 @@
1
+ /**
2
+ * The database of the ABAP SQL of the behavior pools (decision D26): a database client of
3
+ * @abaplint/runtime over the transaction of the running LUW. It reads anywhere and writes in the
4
+ * saver only (save_modified of a BO with additional or unmanaged save).
5
+ *
6
+ * @abaplint/transpiler turns a SELECT into SQL text with its values in ABAP form (dates
7
+ * `YYYYMMDD`, UUIDs as hexadecimal digits) and a few ABAP keywords (`UP TO n ROWS`, `EQ`,
8
+ * `ORDER BY PRIMARY KEY`). The tables and CDS entities are read through the views of the ABAP SQL
9
+ * schema, whose columns hold the ABAP form (generated with the database schema); the text is
10
+ * translated to PostgreSQL here. Each statement runs in a savepoint: a failing SELECT leaves the
11
+ * LUW's transaction usable.
12
+ */
13
+ import { sql } from "kysely";
14
+ import { ABAP_SQL_SCHEMA } from "@open-rap/model";
15
+ import { withSavepoint } from "../db/database.js";
16
+ export class AbapSqlError extends Error {
17
+ }
18
+ const WORD = /[A-Za-z0-9_$#]/;
19
+ function tokenize(text) {
20
+ const tokens = [];
21
+ let i = 0;
22
+ while (i < text.length) {
23
+ const c = text[i];
24
+ if (c === "'" || c === '"') {
25
+ let j = i + 1;
26
+ while (j < text.length && !(text[j] === c && text[j + 1] !== c)) {
27
+ j += text[j] === c ? 2 : 1;
28
+ }
29
+ if (j >= text.length) {
30
+ throw new AbapSqlError(`unterminated ${c === "'" ? "literal" : "identifier"} in ${text}`);
31
+ }
32
+ const value = text.slice(i, j + 1);
33
+ tokens.push(c === "'" ? { kind: "literal", text: value } : { kind: "identifier", text: value.toLowerCase() });
34
+ i = j + 1;
35
+ }
36
+ else if (/\s/.test(c)) {
37
+ let j = i;
38
+ while (j < text.length && /\s/.test(text[j])) {
39
+ j++;
40
+ }
41
+ tokens.push({ kind: "space", text: " " });
42
+ i = j;
43
+ }
44
+ else if (WORD.test(c)) {
45
+ let j = i;
46
+ while (j < text.length && (WORD.test(text[j]) || (text[j] === "." && /\d/.test(c) && /\d/.test(text[j + 1] ?? "")))) {
47
+ j++;
48
+ }
49
+ tokens.push({ kind: "word", text: text.slice(i, j) });
50
+ i = j;
51
+ }
52
+ else {
53
+ tokens.push({ kind: "symbol", text: c });
54
+ i++;
55
+ }
56
+ }
57
+ return tokens;
58
+ }
59
+ const COMPARISONS = { EQ: "=", NE: "<>", LT: "<", LE: "<=", GT: ">", GE: ">=" };
60
+ const ORDER = { ASCENDING: "ASC", DESCENDING: "DESC" };
61
+ const SCHEMA = `"${ABAP_SQL_SCHEMA}"`;
62
+ /**
63
+ * Translates the SQL of the transpiler to PostgreSQL: `UP TO n ROWS` → `LIMIT n` (none for 0),
64
+ * `ORDER BY PRIMARY KEY` → the key columns, `ASCENDING`/`DESCENDING`, the comparison keywords,
65
+ * `alias~field`, identifiers in lower case (ABAP is case-insensitive, the views use lower case).
66
+ * Only the views of the ABAP SQL schema can be read.
67
+ */
68
+ export function translateSelect(text, primaryKey = []) {
69
+ const tokens = tokenize(text);
70
+ const word = (t, value) => t?.kind === "word" && t.text.toUpperCase() === value;
71
+ const significant = (from) => {
72
+ let j = from;
73
+ while (tokens[j]?.kind === "space") {
74
+ j++;
75
+ }
76
+ return j;
77
+ };
78
+ let limit = 0;
79
+ const out = [];
80
+ for (let i = 0; i < tokens.length; i++) {
81
+ const t = tokens[i];
82
+ if (t.kind === "symbol" && t.text === "~") {
83
+ out.push({ kind: "symbol", text: "." });
84
+ continue;
85
+ }
86
+ if (t.kind !== "word") {
87
+ out.push(t);
88
+ continue;
89
+ }
90
+ const upper = t.text.toUpperCase();
91
+ if (upper === "UP") {
92
+ const to = significant(i + 1);
93
+ const n = significant(to + 1);
94
+ const rows = significant(n + 1);
95
+ if (word(tokens[to], "TO") && /^\d+$/.test(tokens[n]?.text ?? "") && word(tokens[rows], "ROWS")) {
96
+ limit = Number(tokens[n]?.text);
97
+ i = rows;
98
+ continue;
99
+ }
100
+ }
101
+ if (upper === "ORDER") {
102
+ const by = significant(i + 1);
103
+ const next = significant(by + 1);
104
+ if (word(tokens[by], "BY") && word(tokens[next], "ORDER")) {
105
+ // OPEN CURSOR … ORDER BY: the transpiler writes the keywords twice
106
+ i = by;
107
+ continue;
108
+ }
109
+ const key = significant(next + 1);
110
+ if (word(tokens[by], "BY") && word(tokens[next], "PRIMARY") && word(tokens[key], "KEY")) {
111
+ if (primaryKey.length > 0) {
112
+ out.push({ kind: "word", text: `ORDER BY ${primaryKey.map((k) => `"${k.toLowerCase().replace(/"/g, '""')}"`).join(", ")}` });
113
+ }
114
+ i = key;
115
+ continue;
116
+ }
117
+ }
118
+ if (upper === "FROM" || upper === "JOIN") {
119
+ const source = significant(i + 1);
120
+ const dot = tokens[source + 1];
121
+ if (tokens[source]?.text !== SCHEMA || dot?.text !== ".") {
122
+ const name = tokens.slice(source, source + 3).map((x) => x.text).join("");
123
+ throw new AbapSqlError(`ABAP SQL: ${name} is not a table or a CDS entity of the application`);
124
+ }
125
+ }
126
+ const replaced = COMPARISONS[upper] ?? ORDER[upper];
127
+ out.push(replaced === undefined ? t : { kind: "word", text: replaced });
128
+ }
129
+ const translated = out
130
+ .filter((t, n) => t.kind !== "space" || out[n - 1]?.kind !== "space")
131
+ .map((t) => t.text)
132
+ .join("")
133
+ .trim();
134
+ return limit > 0 ? `${translated} LIMIT ${limit}` : translated;
135
+ }
136
+ /** A condition or SET list of the transpiler's ABAP SQL as PostgreSQL (identifiers, `~`, EQ…). */
137
+ export function translateFragment(text) {
138
+ return tokenize(text)
139
+ .map((t) => {
140
+ if (t.kind === "symbol" && t.text === "~") {
141
+ return ".";
142
+ }
143
+ return t.kind === "word" ? (COMPARISONS[t.text.toUpperCase()] ?? t.text) : t.text;
144
+ })
145
+ .join("")
146
+ .trim();
147
+ }
148
+ /** The view of a table in the ABAP SQL schema, as `abap.buildDbTableName` gives it. */
149
+ function viewOf(table) {
150
+ const prefix = `${SCHEMA}.`;
151
+ if (!table.toLowerCase().startsWith(prefix)) {
152
+ throw new AbapSqlError(`ABAP SQL: ${table} is not a table of the application`);
153
+ }
154
+ return `${prefix}${table.slice(prefix.length).toLowerCase()}`;
155
+ }
156
+ /** A value of a result row as @abaplint/runtime sets it into ABAP data objects. */
157
+ function abapValue(value) {
158
+ if (value === null || value === undefined) {
159
+ return null;
160
+ }
161
+ if (typeof value === "number" || typeof value === "string") {
162
+ return value;
163
+ }
164
+ if (typeof value === "boolean") {
165
+ return value ? "X" : "";
166
+ }
167
+ if (typeof value === "bigint") {
168
+ return value.toString();
169
+ }
170
+ if (value instanceof Uint8Array) {
171
+ return Buffer.from(value).toString("hex").toUpperCase();
172
+ }
173
+ return String(value);
174
+ }
175
+ const READ_ONLY = "ABAP SQL writes are only possible in save_modified (with additional or unmanaged save): the RAP runtime writes the business objects, the handlers change them with EML";
176
+ /**
177
+ * The DEFAULT database connection of the transpiled code (`DatabaseClient` of @abaplint/runtime).
178
+ * `luw` gives the transaction of the running LUW. The writes go to the views of the ABAP SQL
179
+ * schema, whose triggers write the tables (values converted back from their ABAP form).
180
+ */
181
+ export class AbapSqlClient {
182
+ luw;
183
+ name = "postgres";
184
+ constructor(luw) {
185
+ this.luw = luw;
186
+ }
187
+ connection() {
188
+ return this.luw().db;
189
+ }
190
+ /** A write of the saver: sy-subrc 4 when no row is affected or the key exists (INSERT). */
191
+ async write(text) {
192
+ const { db, writable } = this.luw();
193
+ if (!writable) {
194
+ throw new AbapSqlError(READ_ONLY);
195
+ }
196
+ try {
197
+ const result = await withSavepoint(db, () => sql.raw(text).execute(db));
198
+ const dbcnt = Number(result.numAffectedRows ?? 0n);
199
+ return { subrc: dbcnt > 0 ? 0 : 4, dbcnt };
200
+ }
201
+ catch (error) {
202
+ if (error.code === "23505") {
203
+ return { subrc: 4, dbcnt: 0 };
204
+ }
205
+ throw error;
206
+ }
207
+ }
208
+ async connect() { }
209
+ async disconnect() { }
210
+ /** The LUW owns the transaction: nothing to begin. */
211
+ async beginTransaction() { }
212
+ /** COMMIT WORK: the RAP runtime ends the LUW, a handler cannot (a runtime error in RAP too). */
213
+ async commit() {
214
+ throw new AbapSqlError("COMMIT WORK is not allowed in a behavior pool: the RAP runtime ends the LUW");
215
+ }
216
+ async rollback() {
217
+ throw new AbapSqlError("ROLLBACK WORK is not allowed in a behavior pool: the RAP runtime ends the LUW");
218
+ }
219
+ /** Native SQL (EXEC SQL, ADBC): not available. */
220
+ async execute() {
221
+ throw new AbapSqlError("native SQL is not available in a behavior pool");
222
+ }
223
+ async insert(options) {
224
+ const columns = options.columns.map((c) => `"${c.toLowerCase().replace(/"/g, '""')}"`).join(", ");
225
+ return this.write(`INSERT INTO ${viewOf(options.table)} (${columns}) VALUES (${options.values.join(", ")})`);
226
+ }
227
+ async update(options) {
228
+ const where = options.where.trim() === "" ? "" : ` WHERE ${translateFragment(options.where)}`;
229
+ return this.write(`UPDATE ${viewOf(options.table)} SET ${options.set.map(translateFragment).join(", ")}${where}`);
230
+ }
231
+ async delete(options) {
232
+ if (options.where.trim() === "") {
233
+ // DELETE dbtab FROM @wa reaches the database without its row (a transpiler defect): refused
234
+ throw new AbapSqlError(`ABAP SQL: DELETE on ${options.table} without a condition is not supported`);
235
+ }
236
+ return this.write(`DELETE FROM ${viewOf(options.table)} WHERE ${translateFragment(options.where)}`);
237
+ }
238
+ async select(options) {
239
+ const text = translateSelect(options.select, options.primaryKey);
240
+ const db = this.connection();
241
+ const result = await withSavepoint(db, () => sql.raw(text).execute(db));
242
+ return { rows: result.rows.map((row) => Object.fromEntries(Object.entries(row).map(([name, value]) => [name, abapValue(value)]))) };
243
+ }
244
+ /** OPEN CURSOR: the result is read at once, FETCH hands it out package by package. */
245
+ async openCursor(options) {
246
+ const { rows } = await this.select(options);
247
+ let position = 0;
248
+ return {
249
+ fetchNextCursor: async (size) => {
250
+ const count = size > 0 ? size : rows.length - position;
251
+ const part = rows.slice(position, position + count);
252
+ position += part.length;
253
+ return { rows: part };
254
+ },
255
+ closeCursor: async () => {
256
+ position = rows.length;
257
+ },
258
+ };
259
+ }
260
+ }
261
+ //# sourceMappingURL=sql.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sql.js","sourceRoot":"","sources":["../../src/abap/sql.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,41 @@
1
+ /**
2
+ * The kernel side of the clean-room utilities of ABAP Cloud (decision D40): JSON (/ui2/cl_json,
3
+ * xco_cp_json), code pages and encodings, gzip, hashes, random seeds, regular expressions, date
4
+ * and time stamp arithmetic, number ranges and the application log (in the database of the
5
+ * application, in the LUW of the request), and the description of data objects for the RTTS.
6
+ */
7
+ import { type Kysely } from "kysely";
8
+ import { type AbapData } from "./convert.js";
9
+ export interface UtilityServices {
10
+ /** The database of the LUW of the running ABAP code. */
11
+ db(): Kysely<unknown>;
12
+ /** The ABAP name of the user of the LUW. */
13
+ user(): string;
14
+ }
15
+ type JsonNode = {
16
+ t: "o";
17
+ m: Array<[string, JsonNode]>;
18
+ } | {
19
+ t: "a";
20
+ v: JsonNode[];
21
+ } | {
22
+ t: "s";
23
+ v: string;
24
+ } | {
25
+ t: "n";
26
+ v: string;
27
+ } | {
28
+ t: "b";
29
+ v: boolean;
30
+ } | {
31
+ t: "z";
32
+ };
33
+ /** A JSON parser that keeps the numbers as written (no rounding through doubles). */
34
+ export declare function parseJson(text: string): JsonNode;
35
+ export declare function writeJson(node: JsonNode, indent?: boolean, level?: number): string;
36
+ /** ABAP component name → JSON member name, for a pretty mode of /ui2/cl_json (or xco). */
37
+ export declare function jsonName(abap: string, mode: string, mappings: Map<string, string>): string;
38
+ type CodePage = "utf8" | "utf16le" | "utf16be" | "latin1" | "ascii" | "windows-1252";
39
+ export declare function codePage(name: string): CodePage | undefined;
40
+ export declare function installUtilities(kernel: AbapData, services: UtilityServices): void;
41
+ export {};