@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,511 @@
1
+ /**
2
+ * The layout of the generated UI (List Report and Object Page, decision D10), derived from the
3
+ * UI annotations of the IR the same way as the CSDL ($metadata): line items, selection fields,
4
+ * header info, facets, identification, field groups, actions and presentation variant.
5
+ *
6
+ * The layout is written as `ui/model/layout.json`; the generic controllers read it.
7
+ */
8
+ import { buildODataService, findEntity, getAnnotation, getArray, isUuid, valueHelpOf, same, } from "@open-rap/model";
9
+ import { allowedFilterExpressions } from "../csdl.js";
10
+ function optionsOf(edm) {
11
+ return edm.enum?.members.map((m) => ({ key: m.name, text: m.label ?? m.name }));
12
+ }
13
+ const isObject = (v) => typeof v === "object" && v !== null && !Array.isArray(v);
14
+ const str = (v) => (typeof v === "string" ? v : typeof v === "number" ? String(v) : undefined);
15
+ const num = (v) => (typeof v === "number" ? v : Number.POSITIVE_INFINITY);
16
+ function entriesOf(entity, path) {
17
+ const result = [];
18
+ for (const field of entity.fields) {
19
+ for (const entry of getArray(field.annotations, path) ?? []) {
20
+ if (isObject(entry)) {
21
+ result.push({ field: field.name, entry });
22
+ }
23
+ }
24
+ }
25
+ return result.sort((a, b) => num(a.entry["position"]) - num(b.entry["position"]));
26
+ }
27
+ function kindOf(edm, key, uuid, currency) {
28
+ if (uuid)
29
+ return "uuid";
30
+ if (edm.enum !== undefined)
31
+ return "enum";
32
+ switch (edm.type) {
33
+ case "Edm.Boolean":
34
+ return "boolean";
35
+ case "Edm.Date":
36
+ return "date";
37
+ case "Edm.TimeOfDay":
38
+ return "time";
39
+ case "Edm.DateTimeOffset":
40
+ return "datetime";
41
+ case "Edm.Byte":
42
+ case "Edm.Int16":
43
+ case "Edm.Int32":
44
+ case "Edm.Int64":
45
+ return "integer";
46
+ case "Edm.Decimal":
47
+ case "Edm.Double":
48
+ return currency ? "amount" : "decimal";
49
+ case "Edm.String":
50
+ return edm.digitSequence === true ? "digits" : "text";
51
+ default:
52
+ void key;
53
+ return "text";
54
+ }
55
+ }
56
+ class LayoutBuilder {
57
+ model;
58
+ service;
59
+ constructor(model) {
60
+ this.model = model;
61
+ this.service = buildODataService(model);
62
+ }
63
+ build() {
64
+ const pages = this.service.entitySets.filter((s) => s.draftAdministrativeData !== true).filter((s) => s.valueHelp !== true || this.model.ui?.overview?.cards.some((c) => c.entitySet === s.name) === true).map((set) => this.page(set.name)).filter((p) => p !== undefined);
65
+ const start = pages.find((p) => p.list !== undefined)?.set ?? pages[0]?.set ?? "";
66
+ const root = pages.find((p) => p.set === start);
67
+ const layout = {
68
+ title: root?.typeNamePlural ?? this.model.service.name,
69
+ servicePath: this.model.service.path,
70
+ namespace: this.service.namespace,
71
+ start,
72
+ pages,
73
+ };
74
+ const overview = this.model.ui?.overview;
75
+ if (overview !== undefined) {
76
+ layout.title = overview.title;
77
+ layout.overview = { title: overview.title, cards: overview.cards.map((c, i) => this.card(c, i, pages)).filter((c) => c !== undefined) };
78
+ }
79
+ return layout;
80
+ }
81
+ typeOf(set) {
82
+ const entitySet = this.service.entitySets.find((s) => s.name === set);
83
+ const type = this.service.entityTypes.find((t) => t.name === entitySet?.entityType);
84
+ const entity = entitySet === undefined ? undefined : findEntity(this.model, entitySet.entity);
85
+ return type === undefined || entity === undefined ? undefined : { type, entity };
86
+ }
87
+ field(type, entity, name, label, importance, entry) {
88
+ const property = type.properties.find((p) => p.name === name);
89
+ const field = entity.fields.find((f) => f.name === name);
90
+ if (property === undefined || field === undefined) {
91
+ return undefined;
92
+ }
93
+ const unit = field.currencyCode ?? field.unitOfMeasure;
94
+ const result = {
95
+ property: name,
96
+ label: label ?? str(getAnnotation(field.annotations, "EndUserText.label")) ?? name,
97
+ kind: kindOf(property.edm, property.key, isUuid(field.type), field.currencyCode !== undefined),
98
+ edm: property.edm.type,
99
+ key: property.key,
100
+ computed: property.computed || field.semantics !== undefined,
101
+ immutable: property.immutable || (property.key && !property.computed),
102
+ mandatory: property.mandatory,
103
+ dynamic: property.dynamic,
104
+ };
105
+ if (property.edm.maxLength !== undefined && property.edm.enum === undefined)
106
+ result.maxLength = property.edm.maxLength;
107
+ const options = optionsOf(property.edm);
108
+ if (options !== undefined)
109
+ result.options = options;
110
+ const help = valueHelpOf(this.model, field);
111
+ if (help !== undefined)
112
+ result.valueHelp = help;
113
+ if (unit !== undefined && type.properties.some((p) => p.name === unit))
114
+ result.unit = unit;
115
+ this.decorate(result, type, field.annotations, entry);
116
+ const level = importance?.replace(/^#/, "").toLowerCase();
117
+ if (level === "high" || level === "medium" || level === "low")
118
+ result.importance = level === "high" ? "High" : level === "medium" ? "Medium" : "Low";
119
+ return result;
120
+ }
121
+ /** Criticality, text, multi-line, links and filter settings of a field (D57). */
122
+ decorate(result, type, annotations, entry) {
123
+ const has = (property) => property !== undefined && type.properties.some((p) => p.name === property);
124
+ const dataPoint = getAnnotation(annotations, "UI.dataPoint");
125
+ const criticality = str(entry?.["criticality"]) ?? (isObject(dataPoint) ? str(dataPoint["criticality"]) : undefined);
126
+ if (has(criticality))
127
+ result.criticality = criticality;
128
+ const textElement = getAnnotation(annotations, "ObjectModel.text.element");
129
+ const textProperty = Array.isArray(textElement) ? str(textElement[0]) : str(textElement);
130
+ if (has(textProperty) && textProperty !== result.property) {
131
+ const arrangement = str(getAnnotation(annotations, "UI.textArrangement"))?.replace(/^#/, "").toUpperCase();
132
+ result.text = {
133
+ property: textProperty,
134
+ arrangement: arrangement === "TEXT_LAST" ? "TextLast" : arrangement === "TEXT_ONLY" ? "TextOnly" : arrangement === "TEXT_SEPARATE" ? "TextSeparate" : "TextFirst",
135
+ };
136
+ }
137
+ if (getAnnotation(annotations, "UI.multiLineText") === true)
138
+ result.multiLine = true;
139
+ const url = str(entry?.["url"]);
140
+ if (str(entry?.["type"]) === "#WITH_URL" && has(url)) {
141
+ result.link = { kind: "url", url };
142
+ }
143
+ else if (getAnnotation(annotations, "Semantics.email.address") === true) {
144
+ result.link = { kind: "email" };
145
+ }
146
+ else if (getAnnotation(annotations, "Semantics.telephone.type") !== undefined) {
147
+ result.link = { kind: "phone" };
148
+ }
149
+ const filter = {};
150
+ const defaultValue = getAnnotation(annotations, "Consumption.filter.defaultValue");
151
+ if (typeof defaultValue === "string" || typeof defaultValue === "number")
152
+ filter.defaultValue = String(defaultValue);
153
+ if (getAnnotation(annotations, "Consumption.filter.mandatory") === true)
154
+ filter.mandatory = true;
155
+ if (getAnnotation(annotations, "Consumption.filter.selectionType") === "#SINGLE" || getAnnotation(annotations, "Consumption.filter.multipleSelections") === false)
156
+ filter.single = true;
157
+ const expressions = allowedFilterExpressions(annotations);
158
+ if (expressions !== undefined) {
159
+ filter.expressions = expressions;
160
+ if (expressions !== "MultiRange")
161
+ filter.single = true;
162
+ }
163
+ if (Object.keys(filter).length > 0)
164
+ result.filter = filter;
165
+ }
166
+ /** Header facets of the object page: `@UI.facet` purpose #HEADER, data points and field groups (D57). */
167
+ headerFacets(type, entity) {
168
+ const facets = entity.fields.flatMap((f) => (getArray(f.annotations, "UI.facet") ?? []).filter(isObject));
169
+ const header = facets
170
+ .filter((f) => str(f["purpose"]) === "#HEADER" && f["hidden"] !== true)
171
+ .sort((a, b) => (typeof a["position"] === "number" ? a["position"] : 1e9) - (typeof b["position"] === "number" ? b["position"] : 1e9));
172
+ const result = [];
173
+ header.forEach((facet, index) => {
174
+ const id = str(facet["id"]) ?? `header${index}`;
175
+ const kind = str(facet["type"]);
176
+ const qualifier = str(facet["targetqualifier"]);
177
+ if (kind === "#DATAPOINT_REFERENCE") {
178
+ // the data point of the element whose qualifier (or name) is the target qualifier
179
+ const element = entity.fields.find((f) => {
180
+ const point = getAnnotation(f.annotations, "UI.dataPoint");
181
+ return isObject(point) && (str(point["qualifier"]) ?? f.name) === qualifier;
182
+ });
183
+ const point = element === undefined ? undefined : getAnnotation(element.annotations, "UI.dataPoint");
184
+ const field = element === undefined ? undefined : this.field(type, entity, element.name);
185
+ if (field === undefined || !isObject(point))
186
+ return;
187
+ const visualization = str(point["visualization"])?.replace(/^#/, "").toLowerCase();
188
+ const target = point["targetvalue"];
189
+ result.push({
190
+ kind: "dataPoint",
191
+ id,
192
+ title: str(facet["label"]) ?? str(point["title"]) ?? field.label,
193
+ field,
194
+ ...(visualization === "progress" || visualization === "rating" ? { visualization } : {}),
195
+ ...(typeof target === "number" ? { target } : {}),
196
+ });
197
+ }
198
+ else if (kind === "#FIELDGROUP_REFERENCE" || kind === "#IDENTIFICATION_REFERENCE") {
199
+ const path = kind === "#FIELDGROUP_REFERENCE" ? "UI.fieldGroup" : "UI.identification";
200
+ const fields = this.dataFields(type, entity, path, qualifier).fields;
201
+ if (fields.length > 0)
202
+ result.push({ kind: "fields", id, title: str(facet["label"]) ?? "", fields });
203
+ }
204
+ });
205
+ return result;
206
+ }
207
+ action(type, name, label) {
208
+ const operation = this.service.operations.find((o) => o.boundType === type.name && same(o.name, name));
209
+ if (operation === undefined) {
210
+ return undefined;
211
+ }
212
+ const parameterEntity = this.model.behaviors
213
+ .flatMap((b) => b.entities)
214
+ .find((e) => same(e.entity, operation.behaviorEntity))
215
+ ?.actions.find((a) => same(a.name, operation.action))?.parameter;
216
+ const abstract = parameterEntity === undefined ? undefined : findEntity(this.model, parameterEntity);
217
+ return {
218
+ name: operation.name,
219
+ qualified: `${this.service.namespace}.${operation.name}`,
220
+ label: label ?? operation.name,
221
+ static: operation.collectionBound,
222
+ factory: operation.factory,
223
+ kind: operation.kind,
224
+ parameters: operation.parameters.map((p) => {
225
+ const field = abstract?.fields.find((f) => f.name === p.name);
226
+ return {
227
+ name: p.name,
228
+ label: str(getAnnotation(field?.annotations, "EndUserText.label")) ?? p.name,
229
+ kind: kindOf(p.edm, false, field !== undefined && isUuid(field.type), false),
230
+ edm: p.edm.type,
231
+ ...(p.edm.enum === undefined ? {} : { options: optionsOf(p.edm) ?? [] }),
232
+ // a value help of a parameter: its entity must be exposed by the service, as in RAP
233
+ ...(field === undefined || valueHelpOf(this.model, field) === undefined ? {} : { valueHelp: valueHelpOf(this.model, field) }),
234
+ };
235
+ }),
236
+ dynamic: operation.dynamic,
237
+ returnsEntity: operation.returnType?.entityType === true && operation.returnType.type === type.name,
238
+ };
239
+ }
240
+ /** Data fields and actions of an element-level annotation (`UI.lineItem`, `UI.identification`…). */
241
+ dataFields(type, entity, path, qualifier) {
242
+ const fields = [];
243
+ const actions = [];
244
+ for (const { field, entry } of entriesOf(entity, path)) {
245
+ if (str(entry["qualifier"]) !== qualifier || entry["hidden"] === true) {
246
+ continue;
247
+ }
248
+ const kind = str(entry["type"]) ?? "#STANDARD";
249
+ if (kind === "#FOR_ACTION") {
250
+ const action = this.action(type, str(entry["dataaction"]) ?? "", str(entry["label"]));
251
+ if (action !== undefined && !actions.some((a) => a.name === action.name)) {
252
+ actions.push(action);
253
+ }
254
+ continue;
255
+ }
256
+ if (kind !== "#STANDARD" && kind !== "#WITH_URL" && kind !== "#AS_DATAPOINT") {
257
+ continue;
258
+ }
259
+ const uiField = this.field(type, entity, field, str(entry["label"]), str(entry["importance"]), entry);
260
+ if (uiField !== undefined && !fields.some((f) => f.property === uiField.property)) {
261
+ fields.push(uiField);
262
+ }
263
+ }
264
+ return { fields, actions };
265
+ }
266
+ table(set, navigation) {
267
+ const typed = this.typeOf(set);
268
+ if (typed === undefined) {
269
+ return undefined;
270
+ }
271
+ const { type, entity } = typed;
272
+ const { fields, actions } = this.dataFields(type, entity, "UI.lineItem");
273
+ const columns = fields.length > 0 ? fields : type.keys.map((k) => this.field(type, entity, k)).filter((f) => f !== undefined);
274
+ const entitySet = this.service.entitySets.find((s) => s.name === set);
275
+ const table = {
276
+ set,
277
+ columns,
278
+ actions,
279
+ insertable: navigation === undefined ? entitySet?.insertable === true : false,
280
+ deletable: entitySet?.deletable === true,
281
+ navigable: true,
282
+ ...(entitySet?.draft === undefined ? {} : { draft: true }),
283
+ };
284
+ if (navigation !== undefined) {
285
+ table.navigation = navigation;
286
+ }
287
+ const order = this.orderby(entity);
288
+ if (order !== undefined) {
289
+ table.orderby = order;
290
+ }
291
+ return table;
292
+ }
293
+ orderby(entity) {
294
+ const variants = getArray(entity.annotations, "UI.presentationVariant") ?? [];
295
+ const variant = variants.find(isObject);
296
+ const sort = Array.isArray(variant?.["sortorder"]) ? variant?.["sortorder"] : [];
297
+ const items = sort.filter(isObject).map((s) => `${str(s["by"]) ?? ""}${str(s["direction"]) === "#DESC" ? " desc" : ""}`);
298
+ return items.length === 0 ? undefined : items.join(",");
299
+ }
300
+ page(set) {
301
+ const typed = this.typeOf(set);
302
+ if (typed === undefined) {
303
+ return undefined;
304
+ }
305
+ const { type, entity } = typed;
306
+ const entitySet = this.service.entitySets.find((s) => s.name === set);
307
+ const header = getAnnotation(entity.annotations, "UI.headerInfo");
308
+ const value = (v) => (isObject(v) ? str(v["value"]) : undefined);
309
+ const typeName = isObject(header) ? (str(header["typename"]) ?? set) : set;
310
+ const page = {
311
+ set,
312
+ entityType: type.name,
313
+ typeName,
314
+ typeNamePlural: isObject(header) ? (str(header["typenameplural"]) ?? typeName) : typeName,
315
+ keys: type.keys,
316
+ sections: this.sections(type, entity),
317
+ actions: this.dataFields(type, entity, "UI.identification").actions,
318
+ updatable: entitySet?.updatable === true,
319
+ deletable: entitySet?.deletable === true,
320
+ insertable: entitySet?.insertable === true,
321
+ updatableDynamic: type.entityControl?.updatable === true,
322
+ deletableDynamic: type.entityControl?.deletable === true,
323
+ fields: Object.fromEntries(type.properties.map((p) => [p.name, this.field(type, entity, p.name)])),
324
+ floorplan: this.model.ui?.floorplans?.[set] ?? "listReport",
325
+ ...(entitySet?.draft === undefined ? {} : { draft: entitySet.draft }),
326
+ charts: this.charts(type, entity),
327
+ selectionVariants: this.selectionVariants(entity),
328
+ };
329
+ const title = isObject(header) ? value(header["title"]) : undefined;
330
+ const description = isObject(header) ? value(header["description"]) : undefined;
331
+ if (title !== undefined)
332
+ page.title = title;
333
+ if (description !== undefined)
334
+ page.description = description;
335
+ const headerFacets = this.headerFacets(type, entity);
336
+ if (headerFacets.length > 0)
337
+ page.headerFacets = headerFacets;
338
+ if (entity.root) {
339
+ const table = this.table(set);
340
+ if (table !== undefined) {
341
+ const selectionFields = this.dataFields(type, entity, "UI.selectionField").fields;
342
+ const filterFields = [...selectionFields];
343
+ for (const column of table.columns) {
344
+ if (!filterFields.some((f) => f.property === column.property)) {
345
+ filterFields.push(column);
346
+ }
347
+ }
348
+ page.list = {
349
+ table,
350
+ selectionFields,
351
+ filterFields,
352
+ searchable: entitySet?.searchable === true,
353
+ };
354
+ }
355
+ }
356
+ return page;
357
+ }
358
+ /** `@UI.chart`: the first dimension and the measures, aggregated as `@Aggregation.default` says (sum). */
359
+ charts(type, entity) {
360
+ const result = [];
361
+ for (const raw of getArray(entity.annotations, "UI.chart") ?? []) {
362
+ if (!isObject(raw))
363
+ continue;
364
+ const list = (v) => (Array.isArray(v) ? v.map(str).filter((x) => x !== undefined) : str(v) === undefined ? [] : [str(v)]);
365
+ const dimension = list(raw["dimensions"])[0];
366
+ const dimensionField = dimension === undefined ? undefined : this.field(type, entity, dimension);
367
+ if (dimensionField === undefined)
368
+ continue;
369
+ const measures = list(raw["measures"])
370
+ .map((m) => this.field(type, entity, m))
371
+ .filter((f) => f !== undefined)
372
+ .map((f) => {
373
+ const declared = str(getAnnotation(entity.fields.find((x) => x.name === f.property)?.annotations, "Aggregation.default"))?.replace(/^#/, "").toLowerCase();
374
+ const aggregation = declared === "min" || declared === "max" || declared === "average" || declared === "avg" ? (declared === "avg" ? "average" : declared) : "sum";
375
+ return { property: f.property, label: f.label, aggregation: aggregation };
376
+ });
377
+ if (measures.length === 0)
378
+ continue;
379
+ const kind = str(raw["charttype"])?.replace(/^#/, "").toLowerCase() ?? "column";
380
+ const chart = {
381
+ title: str(raw["title"]) ?? measures.map((m) => m.label).join(", "),
382
+ type: kind === "bar" || kind === "line" || kind === "pie" || kind === "donut" ? kind : "column",
383
+ dimension: { property: dimensionField.property, label: dimensionField.label, kind: dimensionField.kind },
384
+ measures,
385
+ };
386
+ const qualifier = str(raw["qualifier"]);
387
+ if (qualifier !== undefined)
388
+ chart.qualifier = qualifier;
389
+ result.push(chart);
390
+ }
391
+ return result;
392
+ }
393
+ /** `@UI.selectionVariant`: `filter: 'Status EQ ''O'' AND …'` becomes an OData $filter. */
394
+ selectionVariants(entity) {
395
+ return (getArray(entity.annotations, "UI.selectionVariant") ?? []).filter(isObject).map((raw, i) => {
396
+ const key = (str(raw["qualifier"]) ?? `variant${i}`).replace(/[^A-Za-z0-9_]/g, "_");
397
+ const variant = { key, text: str(raw["text"]) ?? key };
398
+ const filter = str(raw["filter"]);
399
+ if (filter !== undefined) {
400
+ variant.filter = filter.replace(/\s+(EQ|NE|GT|GE|LT|LE|AND|OR)\s+/gi, (_m, op) => ` ${op.toLowerCase()} `);
401
+ }
402
+ return variant;
403
+ });
404
+ }
405
+ card(card, index, pages) {
406
+ const typed = this.typeOf(card.entitySet);
407
+ if (typed === undefined)
408
+ return undefined;
409
+ const { type, entity } = typed;
410
+ const page = pages.find((p) => p.set === card.entitySet);
411
+ const lineItem = this.dataFields(type, entity, "UI.lineItem").fields;
412
+ const title = page?.title === undefined ? undefined : this.field(type, entity, page.title);
413
+ const fields = [...(title === undefined ? [] : [title]), ...lineItem.filter((f) => f.property !== title?.property)].slice(0, card.type === "table" ? 4 : 3);
414
+ const result = {
415
+ id: `card${index}`,
416
+ type: card.type,
417
+ set: card.entitySet,
418
+ title: card.title,
419
+ top: card.top ?? 5,
420
+ fields: fields.length > 0 ? fields : type.keys.map((k) => this.field(type, entity, k)).filter((f) => f !== undefined),
421
+ navigable: page?.list !== undefined,
422
+ };
423
+ if (card.subtitle !== undefined)
424
+ result.subtitle = card.subtitle;
425
+ if (card.filter !== undefined)
426
+ result.filter = card.filter;
427
+ if (card.orderby !== undefined)
428
+ result.orderby = card.orderby;
429
+ if (card.type === "chart") {
430
+ const charts = this.charts(type, entity);
431
+ const chart = charts.find((c) => c.qualifier === card.chart) ?? (card.chart === undefined ? charts[0] : undefined);
432
+ if (chart === undefined)
433
+ return undefined;
434
+ result.chart = chart;
435
+ }
436
+ if (card.type === "kpi") {
437
+ const measure = card.measure === undefined ? undefined : this.field(type, entity, card.measure);
438
+ result.kpi = {
439
+ label: measure?.label ?? "Count",
440
+ aggregation: card.aggregation ?? (measure === undefined ? "count" : "sum"),
441
+ ...(measure === undefined ? {} : { property: measure.property }),
442
+ ...(measure?.unit === undefined ? {} : { unit: measure.unit }),
443
+ };
444
+ }
445
+ return result;
446
+ }
447
+ sections(type, entity) {
448
+ const all = [];
449
+ for (const field of entity.fields) {
450
+ for (const facet of getArray(field.annotations, "UI.facet") ?? []) {
451
+ if (isObject(facet) && facet["hidden"] !== true && (str(facet["purpose"]) ?? "#STANDARD") === "#STANDARD") {
452
+ all.push(facet);
453
+ }
454
+ }
455
+ }
456
+ const byPosition = (x, y) => num(x["position"]) - num(y["position"]);
457
+ const render = (facet, index) => {
458
+ const kind = str(facet["type"]) ?? "#COLLECTION";
459
+ const id = (str(facet["id"]) ?? `section${index}`).replace(/[^A-Za-z0-9_]/g, "_");
460
+ const label = str(facet["label"]) ?? id;
461
+ const qualifier = str(facet["targetqualifier"]);
462
+ switch (kind) {
463
+ case "#COLLECTION": {
464
+ const sections = all
465
+ .filter((f) => str(f["parentid"]) === str(facet["id"]))
466
+ .sort(byPosition)
467
+ .map(render)
468
+ .filter((s) => s !== undefined);
469
+ return { id, label, kind: "collection", sections };
470
+ }
471
+ case "#IDENTIFICATION_REFERENCE":
472
+ return { id, label, kind: "form", fields: this.dataFields(type, entity, "UI.identification", qualifier).fields };
473
+ case "#FIELDGROUP_REFERENCE":
474
+ return { id, label, kind: "form", fields: this.dataFields(type, entity, "UI.fieldGroup", qualifier).fields };
475
+ case "#LINEITEM_REFERENCE": {
476
+ const element = str(facet["targetelement"]);
477
+ const navigation = element === undefined ? undefined : type.navigations.find((n) => same(n.name, element));
478
+ if (navigation === undefined) {
479
+ return undefined;
480
+ }
481
+ const table = this.table(navigation.targetSet, navigation.name);
482
+ if (table === undefined) {
483
+ return undefined;
484
+ }
485
+ table.insertable = navigation.insertable;
486
+ return { id, label, kind: "table", table };
487
+ }
488
+ default:
489
+ return undefined;
490
+ }
491
+ };
492
+ const top = all
493
+ .filter((f) => str(f["parentid"]) === undefined)
494
+ .sort(byPosition)
495
+ .map(render)
496
+ .filter((s) => s !== undefined);
497
+ if (top.length > 0) {
498
+ return top;
499
+ }
500
+ // no facets: one form with every property that is not hidden
501
+ const fields = type.properties
502
+ .filter((p) => getAnnotation(entity.fields.find((f) => f.name === p.name)?.annotations, "UI.hidden") !== true)
503
+ .map((p) => this.field(type, entity, p.name))
504
+ .filter((f) => f !== undefined);
505
+ return [{ id: "General", label: "General Information", kind: "form", fields }];
506
+ }
507
+ }
508
+ export function buildUiLayout(model) {
509
+ return new LayoutBuilder(model).build();
510
+ }
511
+ //# sourceMappingURL=layout.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"layout.js","sourceRoot":"","sources":["../../../src/gen/ui/layout.ts"],"names":[],"mappings":"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"}