@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,12 @@
1
+ /** PostgreSQL of the calculated elements (D67). */
2
+ import { type AbapType, type CdsCondition, type CdsExpression } from "@open-rap/model";
3
+ export interface SqlRefs {
4
+ /** A column of the data source (`column` of the expression). */
5
+ column(name: string, type: AbapType): string;
6
+ /** Another element of the entity (`$projection.X`). */
7
+ element(name: string, type: AbapType): string;
8
+ }
9
+ /** The SQL of a calculated element, cast to the PostgreSQL type of the element. */
10
+ export declare function calculatedColumn(expression: CdsExpression, type: AbapType, sqlType: (t: AbapType) => string, refs: SqlRefs): string;
11
+ export declare function renderExpression(e: CdsExpression, sqlType: (t: AbapType) => string, refs: SqlRefs): string;
12
+ export declare function renderCondition(c: CdsCondition, sqlType: (t: AbapType) => string, refs: SqlRefs): string;
@@ -0,0 +1,136 @@
1
+ /** PostgreSQL of the calculated elements (D67). */
2
+ import { isCharacterLike, isNumeric } from "@open-rap/model";
3
+ const literal = (value) => `'${value.replace(/'/g, "''")}'`;
4
+ const text = (sql) => `(${sql})::text`;
5
+ /** The SQL of a calculated element, cast to the PostgreSQL type of the element. */
6
+ export function calculatedColumn(expression, type, sqlType, refs) {
7
+ return `CAST(${renderExpression(expression, sqlType, refs)} AS ${sqlType(type)})`;
8
+ }
9
+ export function renderExpression(e, sqlType, refs) {
10
+ const render = (x) => renderExpression(x, sqlType, refs);
11
+ switch (e.kind) {
12
+ case "literal":
13
+ if (e.value === null) {
14
+ return "NULL";
15
+ }
16
+ if (typeof e.value === "number") {
17
+ return e.value < 0 ? `(${e.value})` : String(e.value);
18
+ }
19
+ return e.type.kind === "char" ? literal(e.value) : `${literal(e.value)}::${sqlType(e.type)}`;
20
+ case "column":
21
+ return refs.column(e.name, e.type);
22
+ case "element":
23
+ return refs.element(e.name, e.type);
24
+ case "session":
25
+ return "current_date";
26
+ case "negate":
27
+ return `(-${render(e.operand)})`;
28
+ case "arithmetic":
29
+ if (e.operator === "/") {
30
+ return `((${render(e.left)})::${e.type.kind === "fltp" ? "double precision" : "numeric"} / ${render(e.right)})`;
31
+ }
32
+ return `(${render(e.left)} ${e.operator} ${render(e.right)})`;
33
+ case "case": {
34
+ const subject = e.operand;
35
+ const branches = e.branches.map((b) => {
36
+ const when = isCondition(b.when) ? renderCondition(b.when, sqlType, refs) : subject === undefined ? render(b.when) : operand(b.when, subject, render);
37
+ return `WHEN ${when} THEN ${render(b.then)}`;
38
+ });
39
+ const otherwise = e.else === undefined ? "" : ` ELSE ${render(e.else)}`;
40
+ return `(CASE${subject === undefined ? "" : ` ${render(subject)}`} ${branches.join(" ")}${otherwise} END)`;
41
+ }
42
+ case "cast":
43
+ return cast(render(e.operand), e.operand.type, e.type, sqlType);
44
+ case "function":
45
+ return functionCall(e, render);
46
+ }
47
+ }
48
+ const isCondition = (x) => x.kind === "compare" || x.kind === "isNull" || x.kind === "and" || x.kind === "or" || x.kind === "not";
49
+ function cast(sql, from, to, sqlType) {
50
+ if (to.kind === "bool") {
51
+ return from.kind === "bool" ? sql : `(coalesce(btrim(${text(sql)}), '') <> '')`;
52
+ }
53
+ if (from.kind === "bool" && isCharacterLike(to)) {
54
+ return `(CASE WHEN ${sql} THEN 'X' ELSE '' END)::${sqlType(to)}`;
55
+ }
56
+ if (from.kind === "dats" && isCharacterLike(to)) {
57
+ return `coalesce(to_char(${sql}, 'YYYYMMDD'), '00000000')::${sqlType(to)}`;
58
+ }
59
+ if (isCharacterLike(from) && to.kind === "dats") {
60
+ return `(CASE WHEN coalesce(btrim(${text(sql)}), '') IN ('', '00000000') THEN NULL ELSE to_date(${text(sql)}, 'YYYYMMDD') END)`;
61
+ }
62
+ if (isCharacterLike(from) && isNumeric(to)) {
63
+ // ABAP: an initial character value converts to 0
64
+ return `coalesce(nullif(btrim(${text(sql)}), ''), '0')::${sqlType(to)}`;
65
+ }
66
+ return `(${sql})::${sqlType(to)}`;
67
+ }
68
+ function functionCall(e, render) {
69
+ const [a, b, c] = e.args.map(render);
70
+ switch (e.name) {
71
+ case "concat":
72
+ return `concat(rtrim(${text(a)}), rtrim(${text(b ?? "''")}))`;
73
+ case "concat_with_space":
74
+ return `concat(rtrim(${text(a)}), repeat(' ', ${c ?? "1"}), rtrim(${text(b ?? "''")}))`;
75
+ case "substring":
76
+ return `substr(${text(a)}, ${b ?? "1"}, ${c ?? "0"})`;
77
+ case "upper":
78
+ case "lower":
79
+ return `${e.name}(${text(a)})`;
80
+ case "length":
81
+ return `length(rtrim(${text(a)}))`;
82
+ case "left":
83
+ return `left(${text(a)}, ${b ?? "0"})`;
84
+ case "right":
85
+ return `right(rtrim(${text(a)}), ${b ?? "0"})`;
86
+ case "ltrim":
87
+ case "rtrim":
88
+ return `${e.name}(${text(a)}, ${text(b ?? "' '")})`;
89
+ case "replace":
90
+ return `replace(${text(a)}, ${text(b ?? "''")}, ${text(c ?? "''")})`;
91
+ case "coalesce":
92
+ return `coalesce(${a}, ${b ?? "NULL"})`;
93
+ case "div":
94
+ return `div((${a})::numeric, ${b ?? "1"})`;
95
+ case "division":
96
+ return `round((${a})::numeric / ${b ?? "1"}, ${c ?? "0"})`;
97
+ case "mod":
98
+ return `mod(${a}, ${b ?? "1"})`;
99
+ case "abs":
100
+ case "ceil":
101
+ case "floor":
102
+ return `${e.name}(${a})`;
103
+ case "round":
104
+ return `round((${a})::numeric, ${b ?? "0"})`;
105
+ case "dats_days_between":
106
+ return `(${b ?? "NULL"} - ${a})`;
107
+ case "dats_add_days":
108
+ return `(${a} + (${b ?? "0"})::integer)`;
109
+ }
110
+ }
111
+ export function renderCondition(c, sqlType, refs) {
112
+ const render = (x) => renderExpression(x, sqlType, refs);
113
+ switch (c.kind) {
114
+ case "compare": {
115
+ if (c.operator === "like") {
116
+ return `(${text(render(c.left))} LIKE ${render(c.right)})`;
117
+ }
118
+ return `(${operand(c.left, c.right, render)} ${c.operator} ${operand(c.right, c.left, render)})`;
119
+ }
120
+ case "isNull":
121
+ return `(${render(c.operand)} IS ${c.negated ? "NOT " : ""}NULL)`;
122
+ case "and":
123
+ case "or":
124
+ return `(${renderCondition(c.left, sqlType, refs)} ${c.kind.toUpperCase()} ${renderCondition(c.right, sqlType, refs)})`;
125
+ case "not":
126
+ return `(NOT ${renderCondition(c.operand, sqlType, refs)})`;
127
+ }
128
+ }
129
+ /** A boolean column (ABAP_BOOLEAN) compared with 'X' or '': the literal becomes TRUE or FALSE. */
130
+ function operand(e, other, render) {
131
+ if (other.type.kind === "bool" && e.kind === "literal" && typeof e.value === "string") {
132
+ return e.value.trim() === "" ? "FALSE" : "TRUE";
133
+ }
134
+ return render(e);
135
+ }
136
+ //# sourceMappingURL=sql-expressions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sql-expressions.js","sourceRoot":"","sources":["../../src/gen/sql-expressions.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,38 @@
1
+ /**
2
+ * PostgreSQL DDL from the IR (decisions D4, D8, D9): the persistent tables, then one view per
3
+ * CDS entity (view entities first, projections on top of them). Reads of the OData service go
4
+ * through the views; the managed runtime writes the tables. Last, the schema of the ABAP SQL of
5
+ * the behavior pools (decision D26): the same tables and entities with their values in ABAP form.
6
+ */
7
+ import { type AbapType, type EntityModel, type Model } from "@open-rap/model";
8
+ export declare function quoteIdentifier(name: string): string;
9
+ /** PostgreSQL column type of an ABAP type. */
10
+ export declare function sqlType(t: AbapType): string;
11
+ /**
12
+ * ABAP has no NULL: character-like and numeric columns are NOT NULL with their initial value as
13
+ * default. Dates, times, time stamps, UUIDs and binaries store their initial value as NULL.
14
+ */
15
+ export declare function sqlDefault(t: AbapType): string | undefined;
16
+ /** Column of the persistent table an element of a managed entity is stored in. */
17
+ export declare function persistedColumn(model: Model, entity: EntityModel, field: string): string | undefined;
18
+ /**
19
+ * A column in ABAP form, as the ABAP SQL generated by @abaplint/transpiler expects it (the
20
+ * transpiler's own schemas store every value in its ABAP character or packed form). Fixed-length
21
+ * character types become `bpchar`, whose comparisons ignore trailing blanks like ABAP; the
22
+ * initial values that the tables store as NULL (dates, times, time stamps, UUIDs, binaries)
23
+ * become the ABAP initial values.
24
+ */
25
+ export declare function abapSqlColumn(expression: string, t: AbapType): string;
26
+ /** Name of the view of a table or CDS entity in the ABAP SQL schema (`abap.buildDbTableName`). */
27
+ export declare function abapSqlView(name: string): string;
28
+ /** A value in ABAP form (a column of the ABAP SQL views) as the value of the table column. */
29
+ export declare function nativeSqlValue(expression: string, t: AbapType): string;
30
+ export interface SqlOutput {
31
+ /** The whole idempotent script: tables, foreign keys, views, the ABAP SQL schema. */
32
+ schema: string;
33
+ tables: string[];
34
+ views: string[];
35
+ }
36
+ export declare function generateSql(model: Model): SqlOutput;
37
+ /** The view of the base (view) entity behind a projection: the one the RAP runtime reads. */
38
+ export declare function baseViewOf(model: Model, entity: EntityModel): string | undefined;