@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,201 @@
1
+ /** Readers of the abapGit XML serializations: TABL, DTEL, DOMA, MSAG, SRVB. */
2
+ import { XMLParser } from "fast-xml-parser";
3
+ const parser = new XMLParser({
4
+ ignoreAttributes: true,
5
+ parseTagValue: false,
6
+ trimValues: true,
7
+ isArray: (name) => ["DD03P", "item", "T100", "DD07V"].includes(name),
8
+ });
9
+ function values(xml) {
10
+ const doc = parser.parse(xml);
11
+ const root = (doc["abapGit"] ?? doc);
12
+ const abap = root["asx:abap"];
13
+ return abap?.["asx:values"];
14
+ }
15
+ const str = (v) => (typeof v === "string" ? v : typeof v === "number" ? String(v) : undefined);
16
+ const int = (v) => {
17
+ const s = str(v);
18
+ return s === undefined || s === "" ? undefined : Number.parseInt(s, 10);
19
+ };
20
+ export function readTablXml(xml) {
21
+ const v = values(xml);
22
+ const dd02v = v?.["DD02V"];
23
+ if (dd02v === undefined) {
24
+ return undefined;
25
+ }
26
+ const lines = v?.["DD03P_TABLE"]?.["DD03P"] ?? [];
27
+ const fields = lines.map((line) => {
28
+ const fieldName = str(line["FIELDNAME"]) ?? "";
29
+ const field = { fieldName, key: str(line["KEYFLAG"]) === "X", notNull: str(line["NOTNULL"]) === "X" };
30
+ const set = (k, value) => {
31
+ if (value !== undefined) {
32
+ field[k] = value;
33
+ }
34
+ };
35
+ set("rollName", str(line["ROLLNAME"]));
36
+ set("dataType", str(line["DATATYPE"]));
37
+ set("length", int(line["LENG"]));
38
+ set("decimals", int(line["DECIMALS"]));
39
+ set("refTable", str(line["REFTABLE"]));
40
+ set("refField", str(line["REFFIELD"]));
41
+ set("compType", str(line["COMPTYPE"]));
42
+ if (fieldName.startsWith(".INCLU")) {
43
+ set("include", str(line["PRECFIELD"]) ?? str(line["ROLLNAME"]));
44
+ }
45
+ return field;
46
+ });
47
+ const result = { name: str(dd02v["TABNAME"]) ?? "", tableClass: str(dd02v["TABCLASS"]) ?? "TRANSP", fields };
48
+ const description = str(dd02v["DDTEXT"]);
49
+ if (description !== undefined) {
50
+ result.description = description;
51
+ }
52
+ return result;
53
+ }
54
+ export function readDtelXml(xml) {
55
+ const dd04v = values(xml)?.["DD04V"];
56
+ if (dd04v === undefined) {
57
+ return undefined;
58
+ }
59
+ const result = { name: str(dd04v["ROLLNAME"]) ?? "", labels: {} };
60
+ const domain = str(dd04v["DOMNAME"]);
61
+ if (domain !== undefined && domain !== "") {
62
+ result.domain = domain;
63
+ }
64
+ const dataType = str(dd04v["DATATYPE"]);
65
+ if (dataType !== undefined) {
66
+ result.dataType = dataType;
67
+ }
68
+ const length = int(dd04v["LENG"]);
69
+ if (length !== undefined) {
70
+ result.length = length;
71
+ }
72
+ const decimals = int(dd04v["DECIMALS"]);
73
+ if (decimals !== undefined) {
74
+ result.decimals = decimals;
75
+ }
76
+ const label = (k) => str(dd04v[k]);
77
+ const labels = {};
78
+ const short = label("SCRTEXT_S");
79
+ const medium = label("SCRTEXT_M");
80
+ const long = label("SCRTEXT_L");
81
+ const heading = label("REPTEXT");
82
+ const description = label("DDTEXT");
83
+ if (short !== undefined)
84
+ labels.short = short;
85
+ if (medium !== undefined)
86
+ labels.medium = medium;
87
+ if (long !== undefined)
88
+ labels.long = long;
89
+ if (heading !== undefined)
90
+ labels.heading = heading;
91
+ if (description !== undefined)
92
+ labels.description = description;
93
+ result.labels = labels;
94
+ return result;
95
+ }
96
+ export function readDomaXml(xml) {
97
+ const v = values(xml);
98
+ const dd01v = v?.["DD01V"];
99
+ if (dd01v === undefined) {
100
+ return undefined;
101
+ }
102
+ const result = { name: str(dd01v["DOMNAME"]) ?? "", dataType: str(dd01v["DATATYPE"]) ?? "CHAR", fixedValues: [] };
103
+ const length = int(dd01v["LENG"]);
104
+ if (length !== undefined) {
105
+ result.length = length;
106
+ }
107
+ const decimals = int(dd01v["DECIMALS"]);
108
+ if (decimals !== undefined) {
109
+ result.decimals = decimals;
110
+ }
111
+ const exit = str(dd01v["CONVEXIT"]);
112
+ if (exit !== undefined && exit !== "") {
113
+ result.conversionExit = exit;
114
+ }
115
+ const fixed = v?.["DD07V_TAB"]?.["DD07V"] ?? [];
116
+ for (const f of fixed) {
117
+ const low = str(f["DOMVALUE_L"]);
118
+ if (low !== undefined) {
119
+ const entry = { low };
120
+ const text = str(f["DDTEXT"]);
121
+ if (text !== undefined) {
122
+ entry.text = text;
123
+ }
124
+ result.fixedValues.push(entry);
125
+ }
126
+ }
127
+ return result;
128
+ }
129
+ /** Message class texts: number → text (`&1`…`&4` placeholders kept). */
130
+ export function readMsagXml(xml) {
131
+ const v = values(xml);
132
+ const header = v?.["T100A"];
133
+ const lines = v?.["T100"]?.[0]?.["T100"] ?? [];
134
+ if (header === undefined) {
135
+ return undefined;
136
+ }
137
+ const texts = {};
138
+ const master = str(header["MASTERLANG"]) ?? "E";
139
+ for (const line of lines) {
140
+ const language = str(line["SPRSL"]) ?? master;
141
+ const number = str(line["MSGNR"]);
142
+ const text = str(line["TEXT"]);
143
+ if (number !== undefined && text !== undefined && (language === master || texts[number] === undefined)) {
144
+ texts[number] = text;
145
+ }
146
+ }
147
+ return { name: str(header["ARBGB"]) ?? "", texts };
148
+ }
149
+ /** Tolerant reader: looks for the binding facts wherever the serialization puts them. */
150
+ export function readSrvbXml(xml) {
151
+ const result = {};
152
+ const find = (o, key) => {
153
+ if (o === null || typeof o !== "object") {
154
+ return undefined;
155
+ }
156
+ for (const [k, value] of Object.entries(o)) {
157
+ if (k === key && str(value) !== undefined) {
158
+ return str(value);
159
+ }
160
+ }
161
+ for (const value of Object.values(o)) {
162
+ const found = find(value, key);
163
+ if (found !== undefined) {
164
+ return found;
165
+ }
166
+ }
167
+ return undefined;
168
+ };
169
+ const doc = parser.parse(xml);
170
+ const name = find(doc, "NAME");
171
+ if (name !== undefined)
172
+ result.name = name;
173
+ const srvd = find(doc, "SERVICE_DEFINITION");
174
+ if (srvd !== undefined)
175
+ result.serviceDefinition = srvd;
176
+ const version = find(doc, "SERVICE_VERSION");
177
+ if (version !== undefined)
178
+ result.version = version.padStart(4, "0");
179
+ const bindingType = find(doc, "BINDING_TYPE");
180
+ if (bindingType !== undefined)
181
+ result.bindingType = bindingType;
182
+ const bindingVersion = find(doc, "BINDING_TYPE_VERSION");
183
+ if (bindingVersion !== undefined)
184
+ result.bindingVersion = bindingVersion;
185
+ const bindingCategory = find(doc, "BINDING_TYPE_CATEGORY");
186
+ if (bindingCategory !== undefined)
187
+ result.bindingCategory = bindingCategory;
188
+ // ADT serializations: srvb:version="0001", adtcore:name="ZUI_X" in the service definition reference
189
+ if (result.version === undefined) {
190
+ const m = /srvb:version="(\d{1,4})"/.exec(xml);
191
+ if (m?.[1] !== undefined)
192
+ result.version = m[1].padStart(4, "0");
193
+ }
194
+ if (result.serviceDefinition === undefined) {
195
+ const m = /<srvb:serviceDefinition[^>]*adtcore:name="([^"]+)"/.exec(xml);
196
+ if (m?.[1] !== undefined)
197
+ result.serviceDefinition = m[1];
198
+ }
199
+ return result;
200
+ }
201
+ //# sourceMappingURL=xml.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"xml.js","sourceRoot":"","sources":["../../src/ddic/xml.ts"],"names":[],"mappings":"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"}
package/dist/dev.d.ts ADDED
@@ -0,0 +1,128 @@
1
+ /**
2
+ * `rapt dev`: development loop (decision D38). Builds the application from the sources, starts it
3
+ * with an embedded PGlite database, then rebuilds and restarts it on every change of the sources.
4
+ *
5
+ * The application is written without its scaffold (no vendor/, no npm install): its node_modules
6
+ * is a link to the node_modules of the @open-rap/runtime package, which holds the transpiler
7
+ * runtime, PGlite and OpenUI5. The server runs in a child process, because the transpiled ABAP
8
+ * sets global state (the `abap` object) and ES modules cannot be unloaded.
9
+ */
10
+ import { type GenerateOptions } from "./build.js";
11
+ import { type Diagnostic, type Diagnostics } from "./diagnostics.js";
12
+ import type { LaunchpadModel, Model } from "@open-rap/model";
13
+ export interface DevOptions extends Omit<GenerateOptions, "scaffold" | "transpile"> {
14
+ /** Folder of the development build (default: `<src>/.rapt/dev`). */
15
+ outDir?: string;
16
+ /** Port of the application (default: PORT of the environment, else 8080). */
17
+ port?: number;
18
+ /** Interface the server listens on (default: HOST of the environment, else 127.0.0.1; 0.0.0.0: the network). */
19
+ host?: string;
20
+ /** Environment of the application (default: process.env). */
21
+ env?: Record<string, string | undefined>;
22
+ /** Output of the session (default: stdout and stderr). */
23
+ out?: (line: string) => void;
24
+ err?: (line: string) => void;
25
+ /** Events of the session (`rapt dev --json`); replaces the text output. */
26
+ events?: (event: DevEvent) => void;
27
+ }
28
+ export type DiagnosticCounts = Record<Diagnostic["severity"], number>;
29
+ /** What happens in a session, for tools (`rapt dev --json`, the VS Code extension). */
30
+ export type DevEvent = {
31
+ type: "building";
32
+ root: string;
33
+ } | {
34
+ type: "changed";
35
+ file: string;
36
+ } | {
37
+ type: "diagnostics";
38
+ diagnostics: Diagnostic[];
39
+ counts: DiagnosticCounts;
40
+ } | {
41
+ type: "error";
42
+ message: string;
43
+ } | {
44
+ type: "failed";
45
+ running: boolean;
46
+ } | {
47
+ type: "database-reset";
48
+ } | {
49
+ type: "ready";
50
+ url: string;
51
+ } | {
52
+ type: "server-failed";
53
+ } | {
54
+ type: "server-stopped";
55
+ code: number;
56
+ } | {
57
+ type: "log";
58
+ stream: "stdout" | "stderr";
59
+ line: string;
60
+ };
61
+ /** The text of an event (`rapt dev` without --json); undefined for no output. */
62
+ export declare function formatDevEvent(event: DevEvent): {
63
+ line: string;
64
+ error: boolean;
65
+ } | undefined;
66
+ export interface RebuildResult {
67
+ ok: boolean;
68
+ diagnostics?: Diagnostics;
69
+ }
70
+ export declare class DevSession {
71
+ private readonly options;
72
+ readonly root: string;
73
+ readonly outDir: string;
74
+ readonly port: number;
75
+ private readonly env;
76
+ private readonly out;
77
+ private readonly err;
78
+ private readonly runtimeDir;
79
+ private server;
80
+ /** One watcher per folder: the recursive fs.watch of Linux loses files replaced by a rename. */
81
+ private readonly watchers;
82
+ private timer;
83
+ private running;
84
+ private pending;
85
+ private closed;
86
+ constructor(source: string, options?: DevOptions);
87
+ /** The URL of the development launchpad (the application, the documentation). */
88
+ get uiUrl(): string;
89
+ /** Builds the application; on success, (re)starts the server. A failed build keeps the running server. */
90
+ rebuild(): Promise<RebuildResult>;
91
+ /** Rebuilds once, then on every change of the sources until close(). */
92
+ watch(): Promise<void>;
93
+ /** Stops watching and the server. */
94
+ close(): Promise<void>;
95
+ private emit;
96
+ /** Watches the folders of the project; called again on each change for new or removed folders. */
97
+ private watchFolders;
98
+ private changed;
99
+ /** Runs one rebuild at a time; changes during a rebuild give one more rebuild after it. */
100
+ private schedule;
101
+ /** A file of the project (not the build folder, dot folders or node_modules). */
102
+ private isSource;
103
+ private failed;
104
+ /** node_modules of the build: a link (a junction on Windows) to the runtime's. */
105
+ private linkNodeModules;
106
+ private get pgliteDir();
107
+ /** The PGlite database is dropped when the schema changed (development data). */
108
+ private resetDatabaseOnSchemaChange;
109
+ private startServer;
110
+ private stopServer;
111
+ }
112
+ /**
113
+ * The development launchpad (D49): the application (with the number of instances of its list),
114
+ * the documentation of Open RAP Runtime, the $metadata of the service and, with rapt/mcp.json, the
115
+ * MCP server.
116
+ */
117
+ export declare function devLaunchpadModel(model: Model, mcp: boolean): LaunchpadModel;
118
+ /**
119
+ * The node_modules folder that holds the dependencies of the runtime (@abaplint/runtime, OpenUI5,
120
+ * PGlite), searched like Node.js does: its own (pnpm workspace), then those of the parent folders
121
+ * (npm installation, flat, as in the VS Code extension).
122
+ */
123
+ export declare function runtimeDependencies(runtimeDir: string): string | undefined;
124
+ /**
125
+ * Links `link` to the folder `target` (a junction on Windows), replacing a link to another folder.
126
+ * A real folder at `link` (installed by the user) is kept.
127
+ */
128
+ export declare function linkFolder(link: string, target: string): void;