@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.
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 +1554 -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
package/dist/cli.js ADDED
@@ -0,0 +1,485 @@
1
+ #!/usr/bin/env node
2
+ /** rapt: command line of the RAP → Node.js compiler. */
3
+ import { mkdirSync, realpathSync, writeFileSync } from "node:fs";
4
+ import path from "node:path";
5
+ import { fileURLToPath } from "node:url";
6
+ import { generateAbapGitFiles } from "./authoring/abapgit.js";
7
+ import { generateObject, OBJECT_KINDS } from "./authoring/generate.js";
8
+ import { FLOORPLAN_CATALOG, OBJECT_CATALOG } from "./authoring/catalog.js";
9
+ import { floorplans } from "./authoring/floorplan.js";
10
+ import { serveAgent } from "./agent/server.js";
11
+ import { writeMcpFile } from "./authoring/mcp.js";
12
+ import { newBusinessObject } from "./authoring/new.js";
13
+ import { generateApplication, writeFiles } from "./build.js";
14
+ import { parseArgs } from "node:util";
15
+ import { DevSession } from "./dev.js";
16
+ import { countDiagnostics, formatDiagnostic } from "./diagnostics.js";
17
+ import { buildLaunchpad } from "./gen/launchpad/index.js";
18
+ import { loadProject } from "./input/project.js";
19
+ import { buildModel } from "./ir/builder.js";
20
+ import { registerApp } from "./launchpad/workspace.js";
21
+ import { COMPILER_VERSION } from "./version.js";
22
+ const USAGE = `rapt ${COMPILER_VERSION}: compiles RAP sources (abapGit format) into a Node.js OData V4 application
23
+
24
+ Usage:
25
+ rapt check <src> [--service <SRVD>] report the diagnostics of the sources
26
+ rapt ir <src> [--service <SRVD>] [--out f] print (or write) the intermediate representation
27
+ rapt build <src> --out <dir> [--service <SRVD>] generate the application into <dir>
28
+ rapt launchpad <launchpad.json> --out <dir> generate the launchpad into <dir>, with its applications built
29
+ from their sources into <dir>/apps/<id>
30
+ rapt launchpad add <src> [--launchpad <file>] add the application of <src> to the launchpad of the workspace
31
+ (created, titled "Launchpad", when there is none)
32
+ rapt dev <src> [--port <n>] [--out <dir>] build, run with an embedded database, rebuild on change
33
+ rapt new <src> <Entity> [--prefix Z…] write the sources of a new business object (and their XML),
34
+ and add the application to the launchpad of the workspace
35
+ rapt abapgit <src> [--check] write the abapGit XML files the sources lack
36
+ rapt mcp <src> write rapt/mcp.json: the MCP tools of the service, to describe;
37
+ the application then serves them at /mcp
38
+ rapt generate <src> <kind> <name> [--from X] write one new object (table, view, projection, behavior,
39
+ pool, metadata, access, service, binding…; no kind: the list)
40
+ rapt floorplan <src> [<EntitySet> <fp>] the floorplan of the UI of each root entity set: listReport,
41
+ worklist, analyticalListPage or formEntry (rapt/config.json);
42
+ choosing one adds the application to the launchpad
43
+ rapt agent [<workspace>] MCP server (stdio) of rapt for AI coding agents: check,
44
+ create objects, floorplans, abapGit, documentation
45
+
46
+ Options:
47
+ --service <name> service definition to build (required when the sources have several)
48
+ --mode <mode> standard (as on SAP, the default) or enhanced (Open RAP Runtime extensions);
49
+ overrides "mode" of rapt/config.json
50
+ --binding <name> service binding name (default: the SRVB of the service, else <SRVD>_O4)
51
+ --binding-type <t> ui or webapi (OData V4 - Web API: no UI information, no draft; default: the SRVB)
52
+ --path <path> service root path (default: /sap/opu/odata4/sap/<binding>/srvd/sap/<srvd>/0001/)
53
+ --runtime <dir> @open-rap/runtime package to embed in the application (default: next to rapt)
54
+ --out <path> output file (rapt ir) or folder (rapt build, rapt launchpad, rapt dev: <src>/.rapt/dev)
55
+ --port <n> port of the application (rapt dev, default: PORT, else 8080)
56
+ --host <address> interface of rapt dev (default 127.0.0.1; 0.0.0.0 to open it to the network)
57
+ --json machine-readable output (rapt check, rapt build, rapt launchpad, rapt new…: one JSON
58
+ object; rapt dev: one JSON event per line)
59
+ --prefix <Z…> prefix of the object names (rapt new, default Z): ZRT → zrt_travel, ZRT_R_Travel…
60
+ --description <t> description of the business object (rapt new)
61
+ --from <name> rapt generate: the object the new one derives from (view ← table, projection ← view,
62
+ behavior/metadata/access ← entity)
63
+ --for <name> rapt generate: the BDEF of a pool, the service definition of a binding
64
+ --expose <A,B> rapt generate service: the exposed entities
65
+ --root rapt generate view: a root view entity
66
+ --type <t> rapt generate dataelement, domain: the built-in type (abap.char(10))
67
+ --check report the missing XML files without writing them, exit code 1 if any (rapt abapgit)
68
+ --launchpad <file> the launchpad.json of rapt new, rapt floorplan, rapt launchpad add (default: the nearest
69
+ in the folder of the project or above, else <parent of the project>/launchpad.json)
70
+ --no-launchpad rapt new, rapt floorplan: do not add the application to a launchpad
71
+ --warnings-as-errors
72
+ -h, --help
73
+
74
+ Documentation: https://clementringot.github.io/Open-Rap-Runtime/docs/
75
+ Report a bug or request a feature: https://clementringot.github.io/Open-Rap-Runtime/feedback.html
76
+ `;
77
+ function report(diagnostics) {
78
+ for (const d of diagnostics.sorted()) {
79
+ const line = formatDiagnostic(d);
80
+ if (d.severity === "error") {
81
+ process.stderr.write(`${line}\n`);
82
+ }
83
+ else {
84
+ process.stdout.write(`${line}\n`);
85
+ }
86
+ }
87
+ }
88
+ export async function main(argv) {
89
+ let parsed;
90
+ try {
91
+ parsed = parseArgs({
92
+ args: argv,
93
+ allowPositionals: true,
94
+ options: {
95
+ service: { type: "string" },
96
+ mode: { type: "string" },
97
+ binding: { type: "string" },
98
+ "binding-type": { type: "string" },
99
+ path: { type: "string" },
100
+ out: { type: "string" },
101
+ runtime: { type: "string" },
102
+ port: { type: "string" },
103
+ host: { type: "string" },
104
+ json: { type: "boolean" },
105
+ prefix: { type: "string" },
106
+ description: { type: "string" },
107
+ check: { type: "boolean" },
108
+ from: { type: "string" },
109
+ for: { type: "string" },
110
+ expose: { type: "string" },
111
+ root: { type: "boolean" },
112
+ type: { type: "string" },
113
+ launchpad: { type: "string" },
114
+ "no-launchpad": { type: "boolean" },
115
+ "warnings-as-errors": { type: "boolean" },
116
+ help: { type: "boolean", short: "h" },
117
+ },
118
+ });
119
+ }
120
+ catch (e) {
121
+ process.stderr.write(`${e.message}\n\n${USAGE}`);
122
+ return 2;
123
+ }
124
+ const [command, source] = parsed.positionals;
125
+ if (parsed.values["help"] === true || command === undefined) {
126
+ process.stdout.write(USAGE);
127
+ return command === undefined && parsed.values["help"] !== true ? 2 : 0;
128
+ }
129
+ if (command === "agent") {
130
+ return serveAgent(source ?? ".");
131
+ }
132
+ if (source === undefined) {
133
+ process.stderr.write(`missing <src>\n\n${USAGE}`);
134
+ return 2;
135
+ }
136
+ if (command === "new") {
137
+ return newCommand(source, parsed.positionals[2], parsed.values, parsed.values["json"] === true);
138
+ }
139
+ if (command === "mcp") {
140
+ const result = writeMcpFile(source, {
141
+ ...(typeof parsed.values["service"] === "string" ? { service: parsed.values["service"] } : {}),
142
+ ...(typeof parsed.values["mode"] === "string" ? { mode: parsed.values["mode"] } : {}),
143
+ });
144
+ if (parsed.values["json"] === true) {
145
+ process.stdout.write(`${JSON.stringify({ command: "mcp", ok: result.error === undefined, root: path.resolve(source), ...result })}\n`);
146
+ return result.error === undefined ? 0 : 1;
147
+ }
148
+ if (result.error !== undefined) {
149
+ process.stderr.write(`${result.error}\n`);
150
+ return 1;
151
+ }
152
+ process.stdout.write(`${result.file}: ${result.tools} tools (${result.added.length} new${result.removed.length === 0 ? "" : `, removed: ${result.removed.join(", ")}`})\n`);
153
+ process.stdout.write("describe each tool in that file; the application serves them at /mcp (rapt dev, rapt build)\n");
154
+ return 0;
155
+ }
156
+ if (command === "floorplan") {
157
+ return floorplanCommand(source, parsed.positionals[2], parsed.positionals[3], parsed.values, parsed.values["json"] === true);
158
+ }
159
+ if (command === "generate") {
160
+ return generateCommand(source, parsed.positionals[2], parsed.positionals[3], parsed.values, parsed.values["json"] === true);
161
+ }
162
+ if (command === "abapgit") {
163
+ return abapGitCommand(source, parsed.values["check"] === true, parsed.values["json"] === true);
164
+ }
165
+ if (command === "launchpad") {
166
+ if (source === "add") {
167
+ return launchpadAddCommand(parsed.positionals[2], parsed.values, parsed.values["json"] === true);
168
+ }
169
+ return launchpadCommand(source, parsed.values, parsed.values["json"] === true);
170
+ }
171
+ const options = {};
172
+ if (typeof parsed.values["service"] === "string")
173
+ options.service = parsed.values["service"];
174
+ if (typeof parsed.values["binding"] === "string")
175
+ options.binding = parsed.values["binding"];
176
+ if (typeof parsed.values["binding-type"] === "string")
177
+ options.bindingType = parsed.values["binding-type"];
178
+ if (typeof parsed.values["mode"] === "string")
179
+ options.mode = parsed.values["mode"];
180
+ if (typeof parsed.values["path"] === "string")
181
+ options.path = parsed.values["path"];
182
+ if (typeof parsed.values["runtime"] === "string")
183
+ options.runtimeDir = parsed.values["runtime"];
184
+ if (command === "dev") {
185
+ return dev(source, options, parsed.values["out"], parsed.values["port"], parsed.values["json"] === true, parsed.values["host"]);
186
+ }
187
+ const json = parsed.values["json"] === true;
188
+ const project = loadProject(source);
189
+ if (command === "build") {
190
+ const out = parsed.values["out"];
191
+ if (typeof out !== "string") {
192
+ process.stderr.write(`rapt build needs --out <dir>\n\n${USAGE}`);
193
+ return 2;
194
+ }
195
+ const result = await generateApplication(project, options);
196
+ const buildFailed = result.files.length === 0 || (parsed.values["warnings-as-errors"] === true && result.diagnostics.items.some((d) => d.severity === "warning"));
197
+ if (!buildFailed) {
198
+ writeFiles(out, result.files);
199
+ }
200
+ if (json) {
201
+ writeJson("build", project.root, result.diagnostics, !buildFailed, buildFailed ? {} : { out: path.resolve(out), files: result.files.length });
202
+ return buildFailed ? 1 : 0;
203
+ }
204
+ report(result.diagnostics);
205
+ if (buildFailed) {
206
+ return 1;
207
+ }
208
+ process.stdout.write(`${result.files.length} files written to ${path.resolve(out)}\n`);
209
+ return 0;
210
+ }
211
+ // check: the whole generation (ABAP rewrite, check and transpilation), without writing
212
+ const { model, diagnostics } = command === "check" ? await generateApplication(project, { ...options, scaffold: false }) : buildModel(project, options);
213
+ const failed = diagnostics.hasErrors() || (parsed.values["warnings-as-errors"] === true && diagnostics.items.some((d) => d.severity === "warning"));
214
+ switch (command) {
215
+ case "check": {
216
+ if (json) {
217
+ writeJson("check", project.root, diagnostics, !failed);
218
+ return failed ? 1 : 0;
219
+ }
220
+ report(diagnostics);
221
+ const counts = { error: 0, warning: 0, info: 0 };
222
+ for (const d of diagnostics.items) {
223
+ counts[d.severity]++;
224
+ }
225
+ process.stdout.write(`${counts.error} error(s), ${counts.warning} warning(s), ${counts.info} info\n`);
226
+ return failed ? 1 : 0;
227
+ }
228
+ case "ir": {
229
+ report(diagnostics);
230
+ if (model === undefined || failed) {
231
+ return 1;
232
+ }
233
+ const json = `${JSON.stringify(model, null, 2)}\n`;
234
+ if (typeof parsed.values["out"] === "string") {
235
+ mkdirSync(path.dirname(path.resolve(parsed.values["out"])), { recursive: true });
236
+ writeFileSync(parsed.values["out"], json);
237
+ }
238
+ else {
239
+ process.stdout.write(json);
240
+ }
241
+ return 0;
242
+ }
243
+ default:
244
+ process.stderr.write(`unknown command ${command}\n\n${USAGE}`);
245
+ return 2;
246
+ }
247
+ }
248
+ function abapGitCommand(source, check, json) {
249
+ let result;
250
+ try {
251
+ result = generateAbapGitFiles(source, { check });
252
+ }
253
+ catch (error) {
254
+ process.stderr.write(`${error.message}\n`);
255
+ return 2;
256
+ }
257
+ const errors = result.issues.filter((i) => i.severity === "error");
258
+ const failed = errors.length > 0 || (check && result.written.length > 0);
259
+ if (json) {
260
+ process.stdout.write(`${JSON.stringify({ command: "abapgit", ok: !failed, root: path.resolve(source), check, ...result })}\n`);
261
+ return failed ? 1 : 0;
262
+ }
263
+ for (const issue of result.issues) {
264
+ const line = `${issue.file}:${issue.line}:${issue.column}: ${issue.severity} ${issue.code} ${issue.message}`;
265
+ (issue.severity === "error" ? process.stderr : process.stdout).write(`${line}\n`);
266
+ }
267
+ for (const skipped of result.skipped) {
268
+ process.stdout.write(`${skipped.file}: skipped, ${skipped.reason}\n`);
269
+ }
270
+ for (const file of result.written) {
271
+ process.stdout.write(`${check ? "missing or outdated" : "written"}: ${file}\n`);
272
+ }
273
+ process.stdout.write(result.written.length === 0 ? "abapGit files up to date\n" : `${result.written.length} file(s) ${check ? "to write (run rapt abapgit)" : "written"}\n`);
274
+ return failed ? 1 : 0;
275
+ }
276
+ /**
277
+ * `rapt floorplan <src>`: the root entity sets and their floorplan; `rapt floorplan <src> <Set>
278
+ * <floorplan>` sets it in rapt/config.json (D61).
279
+ */
280
+ function floorplanCommand(source, set, floorplan, values, json) {
281
+ const result = floorplans(source, set, floorplan);
282
+ // the application is created once its floorplan is chosen: it joins the launchpad (D69)
283
+ const launchpad = result.ok && "file" in result ? register(result.root, values) : undefined;
284
+ if (json) {
285
+ process.stdout.write(`${JSON.stringify({ command: "floorplan", ...result, ...(launchpad === undefined ? {} : { launchpad }) })}\n`);
286
+ return result.ok ? 0 : 1;
287
+ }
288
+ if (!result.ok) {
289
+ process.stderr.write(`${result.error}\n`);
290
+ return 1;
291
+ }
292
+ if ("file" in result) {
293
+ process.stdout.write(`${result.set}: ${result.label} (${result.file})\n${launchpadLine(launchpad)}`);
294
+ return 0;
295
+ }
296
+ for (const s of result.sets)
297
+ process.stdout.write(`${s.set.padEnd(24)}${s.floorplan}${s.chosen ? "" : " (default, not chosen)"}\n`);
298
+ process.stdout.write(`\nFloorplans:\n${FLOORPLAN_CATALOG.map((f) => ` ${f.floorplan.padEnd(20)}${f.label}: ${f.description}`).join("\n")}\n`);
299
+ return 0;
300
+ }
301
+ function generateCommand(source, kind, name, values, json) {
302
+ if (kind === undefined && json) {
303
+ // the catalog of the objects, for the creation wizard of the VS Code extension (D61)
304
+ process.stdout.write(`${JSON.stringify({ command: "generate", ok: true, root: path.resolve(source), kinds: OBJECT_CATALOG })}\n`);
305
+ return 0;
306
+ }
307
+ if (kind === undefined || name === undefined) {
308
+ process.stderr.write(`rapt generate needs a kind and a name, e.g. rapt generate . behavior ZR_Travel\n\nKinds:\n${Object.entries(OBJECT_KINDS)
309
+ .map(([k, d]) => ` ${k.padEnd(11)}${d}`)
310
+ .join("\n")}\n`);
311
+ return 2;
312
+ }
313
+ const str = (key) => (typeof values[key] === "string" ? values[key] : undefined);
314
+ const expose = str("expose");
315
+ const result = generateObject(source, kind, name, {
316
+ ...(str("from") === undefined ? {} : { from: str("from") }),
317
+ ...(str("for") === undefined ? {} : { for: str("for") }),
318
+ ...(expose === undefined ? {} : { expose: expose.split(",").map((e) => e.trim()).filter((e) => e !== "") }),
319
+ ...(values["root"] === true ? { root: true } : {}),
320
+ ...(str("binding-type") === undefined ? {} : { bindingType: str("binding-type") }),
321
+ ...(str("type") === undefined ? {} : { type: str("type") }),
322
+ ...(str("description") === undefined ? {} : { description: str("description") }),
323
+ });
324
+ if (json) {
325
+ process.stdout.write(`${JSON.stringify({ command: "generate", ok: result.error === undefined, root: path.resolve(source), kind, name, ...result })}\n`);
326
+ return result.error === undefined ? 0 : 1;
327
+ }
328
+ if (result.error !== undefined) {
329
+ process.stderr.write(`${result.error}\n`);
330
+ return 1;
331
+ }
332
+ for (const file of result.written) {
333
+ process.stdout.write(`written: ${file}\n`);
334
+ }
335
+ return 0;
336
+ }
337
+ function newCommand(source, entity, values, json) {
338
+ if (entity === undefined) {
339
+ process.stderr.write(`rapt new needs the name of the entity, e.g. rapt new . Travel --prefix ZRT\n`);
340
+ return 2;
341
+ }
342
+ const result = newBusinessObject(source, entity, {
343
+ ...(typeof values["prefix"] === "string" ? { prefix: values["prefix"] } : {}),
344
+ ...(typeof values["description"] === "string" ? { description: values["description"] } : {}),
345
+ });
346
+ if (json) {
347
+ const launchpad = result.error === undefined ? register(source, values) : undefined;
348
+ process.stdout.write(`${JSON.stringify({ command: "new", ok: result.error === undefined, root: path.resolve(source), ...result, ...(launchpad === undefined ? {} : { launchpad }) })}\n`);
349
+ return result.error === undefined ? 0 : 1;
350
+ }
351
+ if (result.error !== undefined) {
352
+ process.stderr.write(`${result.error}\n`);
353
+ return 1;
354
+ }
355
+ for (const file of result.written) {
356
+ process.stdout.write(`written: ${file}\n`);
357
+ }
358
+ process.stdout.write(launchpadLine(register(source, values)));
359
+ process.stdout.write(`next: rapt dev ${source}\n`);
360
+ return 0;
361
+ }
362
+ /** Adds the application of a project to the launchpad of the workspace, unless --no-launchpad (D69). */
363
+ function register(root, values) {
364
+ if (values["no-launchpad"] === true) {
365
+ return undefined;
366
+ }
367
+ return registerApp(root, {
368
+ ...(typeof values["launchpad"] === "string" ? { launchpad: values["launchpad"] } : {}),
369
+ ...(typeof values["service"] === "string" ? { service: values["service"] } : {}),
370
+ });
371
+ }
372
+ function launchpadLine(result) {
373
+ if (result === undefined)
374
+ return "";
375
+ if (result.error !== undefined)
376
+ return `launchpad: not added (${result.error})\n`;
377
+ if (!result.added)
378
+ return `launchpad: ${result.app?.id ?? "the application"} already in ${result.file}\n`;
379
+ return `launchpad: ${result.app?.id ?? ""} added to ${result.file}${result.created ? " (created)" : ""}\n`;
380
+ }
381
+ /** `rapt launchpad add <src>`: the application of <src> in the launchpad of the workspace (D69). */
382
+ function launchpadAddCommand(source, values, json) {
383
+ if (source === undefined) {
384
+ process.stderr.write(`rapt launchpad add needs the folder of the project, e.g. rapt launchpad add .\n`);
385
+ return 2;
386
+ }
387
+ const result = registerApp(source, {
388
+ ...(typeof values["launchpad"] === "string" ? { launchpad: values["launchpad"] } : {}),
389
+ ...(typeof values["service"] === "string" ? { service: values["service"] } : {}),
390
+ });
391
+ if (json) {
392
+ process.stdout.write(`${JSON.stringify({ command: "launchpad add", ok: result.error === undefined, root: path.resolve(source), ...result })}\n`);
393
+ }
394
+ else if (result.error !== undefined) {
395
+ process.stderr.write(`${result.error}\n`);
396
+ }
397
+ else {
398
+ process.stdout.write(launchpadLine(result));
399
+ }
400
+ return result.error === undefined ? 0 : 1;
401
+ }
402
+ /** `rapt launchpad <launchpad.json> --out <dir>`: the launchpad and the applications of its sources (D37, D69). */
403
+ async function launchpadCommand(file, values, json) {
404
+ const out = values["out"];
405
+ if (typeof out !== "string") {
406
+ process.stderr.write(`rapt launchpad needs --out <dir>\n\n${USAGE}`);
407
+ return 2;
408
+ }
409
+ const runtimeDir = values["runtime"];
410
+ const result = await buildLaunchpad(file, { outDir: out, ...(typeof runtimeDir === "string" ? { runtimeDir } : {}) });
411
+ const failed = result.files.length === 0 || (values["warnings-as-errors"] === true && result.diagnostics.items.some((d) => d.severity === "warning"));
412
+ if (!failed) {
413
+ writeFiles(out, result.files);
414
+ }
415
+ if (json) {
416
+ const diagnostics = result.diagnostics.sorted().map((d) => (d.file === undefined ? d : { ...d, path: path.resolve(path.dirname(path.resolve(file)), d.file) }));
417
+ const apps = result.apps.map((a) => ({ id: a.id, source: a.source, out: a.out }));
418
+ process.stdout.write(`${JSON.stringify({ command: "launchpad", ok: !failed, root: path.dirname(path.resolve(file)), file: path.resolve(file), ...(failed ? {} : { out: path.resolve(out), files: result.files.length }), apps, counts: countDiagnostics(diagnostics), diagnostics })}\n`);
419
+ return failed ? 1 : 0;
420
+ }
421
+ report(result.diagnostics);
422
+ if (failed) {
423
+ return 1;
424
+ }
425
+ for (const app of result.apps) {
426
+ process.stdout.write(`${app.id}: built from ${app.source} into ${app.out}\n`);
427
+ }
428
+ process.stdout.write(`${result.files.length} files written to ${path.resolve(out)}\n`);
429
+ return 0;
430
+ }
431
+ /** `rapt check --json`, `rapt build --json`: diagnostics with absolute paths, for tools. */
432
+ function writeJson(command, root, diagnostics, ok, extra = {}) {
433
+ const sorted = diagnostics.sorted().map((d) => (d.file === undefined ? d : { ...d, path: path.join(root, ...d.file.split("/")) }));
434
+ process.stdout.write(`${JSON.stringify({ command, ok, root, ...extra, counts: countDiagnostics(sorted), diagnostics: sorted })}\n`);
435
+ }
436
+ /** rapt dev: runs until SIGINT or SIGTERM. */
437
+ async function dev(source, generate, out, port, json, host) {
438
+ const options = { ...generate };
439
+ if (typeof host === "string")
440
+ options.host = host;
441
+ if (json)
442
+ options.events = (event) => process.stdout.write(`${JSON.stringify(event)}\n`);
443
+ if (typeof out === "string")
444
+ options.outDir = out;
445
+ if (typeof port === "string") {
446
+ const value = Number(port);
447
+ if (!Number.isInteger(value) || value <= 0 || value > 65535) {
448
+ process.stderr.write(`invalid --port ${port}\n`);
449
+ return 2;
450
+ }
451
+ options.port = value;
452
+ }
453
+ const session = new DevSession(source, options);
454
+ const stopped = new Promise((resolve) => {
455
+ for (const signal of ["SIGINT", "SIGTERM"]) {
456
+ process.once(signal, () => void session.close().then(resolve));
457
+ }
458
+ });
459
+ await session.watch();
460
+ await stopped;
461
+ return 0;
462
+ }
463
+ /**
464
+ * Whether `script` (process.argv[1]) is the module at `moduleUrl`: compares the real paths, so
465
+ * that relative paths, symbolic links (npm bin) and Windows paths (backslashes, drive letter case,
466
+ * 8.3 short names) are recognized.
467
+ */
468
+ export function isEntryPoint(moduleUrl, script, realpath = realpathSync.native) {
469
+ if (script === undefined) {
470
+ return false;
471
+ }
472
+ try {
473
+ const self = realpath(fileURLToPath(moduleUrl));
474
+ const invoked = realpath(path.resolve(script));
475
+ return process.platform === "win32" ? self.toLowerCase() === invoked.toLowerCase() : self === invoked;
476
+ }
477
+ catch {
478
+ return false;
479
+ }
480
+ }
481
+ // not when imported (the rapt of the npm package open-rap-runtime imports main, D65)
482
+ if (isEntryPoint(import.meta.url, process.argv[1])) {
483
+ process.exitCode = await main(process.argv.slice(2));
484
+ }
485
+ //# sourceMappingURL=cli.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,59 @@
1
+ /**
2
+ * Parser of the CDS access controls (DCL, decision D35): `define role R { grant select on E
3
+ * where … ; }` with the conditions RAP business objects use — `aspect pfcg_auth`, `aspect user`,
4
+ * comparisons with literals, `is [not] null`, `and`/`or`/`not`, parentheses and
5
+ * `inheriting conditions from entity B` (a projection reuses the role of its base view).
6
+ */
7
+ export type DclCondition = {
8
+ kind: "and" | "or";
9
+ operands: DclCondition[];
10
+ } | {
11
+ kind: "not";
12
+ operand: DclCondition;
13
+ } | {
14
+ kind: "compare";
15
+ element: string;
16
+ operator: "=" | "<>" | "<" | "<=" | ">" | ">=" | "like";
17
+ value: string;
18
+ } | {
19
+ kind: "null";
20
+ element: string;
21
+ negated: boolean;
22
+ } | {
23
+ kind: "pfcg";
24
+ elements: string[];
25
+ object: string;
26
+ fields: string[];
27
+ filters: Record<string, string>;
28
+ orInitial: boolean;
29
+ } | {
30
+ kind: "user";
31
+ element: string;
32
+ orInitial: boolean;
33
+ } | {
34
+ kind: "inherit";
35
+ entity: string;
36
+ }
37
+ /** A construct the application cannot evaluate: no row is granted by it (fail closed). */
38
+ | {
39
+ kind: "unsupported";
40
+ text: string;
41
+ };
42
+ export interface DclGrant {
43
+ entity: string;
44
+ /** Undefined: `grant select on E;` — every row. */
45
+ condition?: DclCondition;
46
+ line: number;
47
+ }
48
+ export interface DclRole {
49
+ name: string;
50
+ grants: DclGrant[];
51
+ }
52
+ export interface DclResult {
53
+ role?: DclRole;
54
+ errors: Array<{
55
+ message: string;
56
+ line: number;
57
+ }>;
58
+ }
59
+ export declare function parseDcl(source: string): DclResult;