@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.
- package/LICENSE +21 -0
- package/README.md +21 -2
- package/dist/agent/server.d.ts +35 -0
- package/dist/agent/server.js +408 -0
- package/dist/agent/server.js.map +1 -0
- package/dist/authoring/abapgit.d.ts +38 -0
- package/dist/authoring/abapgit.js +242 -0
- package/dist/authoring/abapgit.js.map +1 -0
- package/dist/authoring/catalog.d.ts +48 -0
- package/dist/authoring/catalog.js +117 -0
- package/dist/authoring/catalog.js.map +1 -0
- package/dist/authoring/floorplan.d.ts +28 -0
- package/dist/authoring/floorplan.js +31 -0
- package/dist/authoring/floorplan.js.map +1 -0
- package/dist/authoring/generate.d.ts +57 -0
- package/dist/authoring/generate.js +630 -0
- package/dist/authoring/generate.js.map +1 -0
- package/dist/authoring/mcp.d.ts +15 -0
- package/dist/authoring/mcp.js +52 -0
- package/dist/authoring/mcp.js.map +1 -0
- package/dist/authoring/new.d.ts +35 -0
- package/dist/authoring/new.js +389 -0
- package/dist/authoring/new.js.map +1 -0
- package/dist/bdef/ast.d.ts +249 -0
- package/dist/bdef/ast.js +3 -0
- package/dist/bdef/ast.js.map +1 -0
- package/dist/bdef/lexer.d.ts +105 -0
- package/dist/bdef/lexer.js +148 -0
- package/dist/bdef/lexer.js.map +1 -0
- package/dist/bdef/parser.d.ts +22 -0
- package/dist/bdef/parser.js +1012 -0
- package/dist/bdef/parser.js.map +1 -0
- package/dist/build.d.ts +26 -0
- package/dist/build.js +62 -0
- package/dist/build.js.map +1 -0
- package/dist/cds/adapter.d.ts +91 -0
- package/dist/cds/adapter.js +381 -0
- package/dist/cds/adapter.js.map +1 -0
- package/dist/cds/expression-ast.d.ts +65 -0
- package/dist/cds/expression-ast.js +330 -0
- package/dist/cds/expression-ast.js.map +1 -0
- package/dist/cli.d.ts +9 -0
- package/dist/cli.js +485 -0
- package/dist/cli.js.map +1 -0
- package/dist/dcl/parser.d.ts +59 -0
- package/dist/dcl/parser.js +338 -0
- package/dist/dcl/parser.js.map +1 -0
- package/dist/ddic/catalog.d.ts +17 -0
- package/dist/ddic/catalog.js +211 -0
- package/dist/ddic/catalog.js.map +1 -0
- package/dist/ddic/cds-types.d.ts +47 -0
- package/dist/ddic/cds-types.js +131 -0
- package/dist/ddic/cds-types.js.map +1 -0
- package/dist/ddic/table-source.d.ts +70 -0
- package/dist/ddic/table-source.js +500 -0
- package/dist/ddic/table-source.js.map +1 -0
- package/dist/ddic/xml.d.ts +65 -0
- package/dist/ddic/xml.js +201 -0
- package/dist/ddic/xml.js.map +1 -0
- package/dist/dev.d.ts +128 -0
- package/dist/dev.js +434 -0
- package/dist/dev.js.map +1 -0
- package/dist/diagnostics.d.ts +33 -0
- package/dist/diagnostics.js +53 -0
- package/dist/diagnostics.js.map +1 -0
- package/dist/gen/abap/derived-types.d.ts +26 -0
- package/dist/gen/abap/derived-types.js +323 -0
- package/dist/gen/abap/derived-types.js.map +1 -0
- package/dist/gen/abap/eml.d.ts +118 -0
- package/dist/gen/abap/eml.js +362 -0
- package/dist/gen/abap/eml.js.map +1 -0
- package/dist/gen/abap/enums.d.ts +13 -0
- package/dist/gen/abap/enums.js +74 -0
- package/dist/gen/abap/enums.js.map +1 -0
- package/dist/gen/abap/framework-http.d.ts +14 -0
- package/dist/gen/abap/framework-http.js +1049 -0
- package/dist/gen/abap/framework-http.js.map +1 -0
- package/dist/gen/abap/framework-query.d.ts +14 -0
- package/dist/gen/abap/framework-query.js +225 -0
- package/dist/gen/abap/framework-query.js.map +1 -0
- package/dist/gen/abap/framework-utils.d.ts +29 -0
- package/dist/gen/abap/framework-utils.js +3707 -0
- package/dist/gen/abap/framework-utils.js.map +1 -0
- package/dist/gen/abap/framework.d.ts +12 -0
- package/dist/gen/abap/framework.js +480 -0
- package/dist/gen/abap/framework.js.map +1 -0
- package/dist/gen/abap/generate.d.ts +40 -0
- package/dist/gen/abap/generate.js +238 -0
- package/dist/gen/abap/generate.js.map +1 -0
- package/dist/gen/abap/rewrite.d.ts +82 -0
- package/dist/gen/abap/rewrite.js +957 -0
- package/dist/gen/abap/rewrite.js.map +1 -0
- package/dist/gen/abap/shadow.d.ts +25 -0
- package/dist/gen/abap/shadow.js +175 -0
- package/dist/gen/abap/shadow.js.map +1 -0
- package/dist/gen/abap/tokens.d.ts +33 -0
- package/dist/gen/abap/tokens.js +87 -0
- package/dist/gen/abap/tokens.js.map +1 -0
- package/dist/gen/app/index.d.ts +25 -0
- package/dist/gen/app/index.js +322 -0
- package/dist/gen/app/index.js.map +1 -0
- package/dist/gen/csdl.d.ts +11 -0
- package/dist/gen/csdl.js +562 -0
- package/dist/gen/csdl.js.map +1 -0
- package/dist/gen/deploy.d.ts +12 -0
- package/dist/gen/deploy.js +53 -0
- package/dist/gen/deploy.js.map +1 -0
- package/dist/gen/docs/index.d.ts +35 -0
- package/dist/gen/docs/index.js +267 -0
- package/dist/gen/docs/index.js.map +1 -0
- package/dist/gen/docs/markdown.d.ts +23 -0
- package/dist/gen/docs/markdown.js +187 -0
- package/dist/gen/docs/markdown.js.map +1 -0
- package/dist/gen/docs/site.d.ts +17 -0
- package/dist/gen/docs/site.js +106 -0
- package/dist/gen/docs/site.js.map +1 -0
- package/dist/gen/keycloak.d.ts +21 -0
- package/dist/gen/keycloak.js +90 -0
- package/dist/gen/keycloak.js.map +1 -0
- package/dist/gen/launchpad/index.d.ts +48 -0
- package/dist/gen/launchpad/index.js +302 -0
- package/dist/gen/launchpad/index.js.map +1 -0
- package/dist/gen/launchpad/ui.d.ts +14 -0
- package/dist/gen/launchpad/ui.js +350 -0
- package/dist/gen/launchpad/ui.js.map +1 -0
- package/dist/gen/mcp.d.ts +23 -0
- package/dist/gen/mcp.js +244 -0
- package/dist/gen/mcp.js.map +1 -0
- package/dist/gen/sql-expressions.d.ts +12 -0
- package/dist/gen/sql-expressions.js +136 -0
- package/dist/gen/sql-expressions.js.map +1 -0
- package/dist/gen/sql.d.ts +38 -0
- package/dist/gen/sql.js +612 -0
- package/dist/gen/sql.js.map +1 -0
- package/dist/gen/ui/index.d.ts +7 -0
- package/dist/gen/ui/index.js +27 -0
- package/dist/gen/ui/index.js.map +1 -0
- package/dist/gen/ui/layout.d.ts +230 -0
- package/dist/gen/ui/layout.js +511 -0
- package/dist/gen/ui/layout.js.map +1 -0
- package/dist/gen/ui/static.d.ts +55 -0
- package/dist/gen/ui/static.js +2901 -0
- package/dist/gen/ui/static.js.map +1 -0
- package/dist/gen/ui/views.d.ts +10 -0
- package/dist/gen/ui/views.js +511 -0
- package/dist/gen/ui/views.js.map +1 -0
- package/dist/gen/vendor.d.ts +23 -0
- package/dist/gen/vendor.js +68 -0
- package/dist/gen/vendor.js.map +1 -0
- package/dist/gen/xml.d.ts +9 -0
- package/dist/gen/xml.js +42 -0
- package/dist/gen/xml.js.map +1 -0
- package/dist/index.d.ts +20 -0
- package/dist/index.js +20 -0
- package/dist/index.js.map +1 -0
- package/dist/input/project.d.ts +50 -0
- package/dist/input/project.js +128 -0
- package/dist/input/project.js.map +1 -0
- package/dist/ir/access-controls.d.ts +11 -0
- package/dist/ir/access-controls.js +148 -0
- package/dist/ir/access-controls.js.map +1 -0
- package/dist/ir/authorizations.d.ts +25 -0
- package/dist/ir/authorizations.js +178 -0
- package/dist/ir/authorizations.js.map +1 -0
- package/dist/ir/behaviors.d.ts +16 -0
- package/dist/ir/behaviors.js +548 -0
- package/dist/ir/behaviors.js.map +1 -0
- package/dist/ir/builder.d.ts +20 -0
- package/dist/ir/builder.js +505 -0
- package/dist/ir/builder.js.map +1 -0
- package/dist/ir/config.d.ts +25 -0
- package/dist/ir/config.js +130 -0
- package/dist/ir/config.js.map +1 -0
- package/dist/ir/dictionary.d.ts +54 -0
- package/dist/ir/dictionary.js +328 -0
- package/dist/ir/dictionary.js.map +1 -0
- package/dist/ir/entities.d.ts +58 -0
- package/dist/ir/entities.js +676 -0
- package/dist/ir/entities.js.map +1 -0
- package/dist/ir/expressions.d.ts +33 -0
- package/dist/ir/expressions.js +327 -0
- package/dist/ir/expressions.js.map +1 -0
- package/dist/ir/handlers.d.ts +63 -0
- package/dist/ir/handlers.js +398 -0
- package/dist/ir/handlers.js.map +1 -0
- package/dist/ir/number-ranges.d.ts +24 -0
- package/dist/ir/number-ranges.js +74 -0
- package/dist/ir/number-ranges.js.map +1 -0
- package/dist/ir/seed.d.ts +23 -0
- package/dist/ir/seed.js +78 -0
- package/dist/ir/seed.js.map +1 -0
- package/dist/ir/service.d.ts +21 -0
- package/dist/ir/service.js +96 -0
- package/dist/ir/service.js.map +1 -0
- package/dist/launchpad/config.d.ts +47 -0
- package/dist/launchpad/config.js +321 -0
- package/dist/launchpad/config.js.map +1 -0
- package/dist/launchpad/workspace.d.ts +48 -0
- package/dist/launchpad/workspace.js +166 -0
- package/dist/launchpad/workspace.js.map +1 -0
- package/dist/srvd/parser.d.ts +36 -0
- package/dist/srvd/parser.js +193 -0
- package/dist/srvd/parser.js.map +1 -0
- package/dist/standard/data.d.ts +18 -0
- package/dist/standard/data.js +534 -0
- package/dist/standard/data.js.map +1 -0
- package/dist/standard/index.d.ts +36 -0
- package/dist/standard/index.js +507 -0
- package/dist/standard/index.js.map +1 -0
- package/dist/version.d.ts +2 -0
- package/dist/version.js +4 -0
- package/dist/version.js.map +1 -0
- package/docs/AGENTS.md +79 -0
- package/docs/ANNOTATIONS.md +76 -0
- package/docs/DECISIONS.md +1526 -0
- package/docs/DEPLOYMENT.md +113 -0
- package/docs/DIAGNOSTICS.md +116 -0
- package/docs/FEATURES.md +287 -0
- package/docs/GUIDE.md +560 -0
- package/docs/KNOWN_GAPS.md +216 -0
- package/docs/MCP.md +84 -0
- package/docs/PLAN.md +690 -0
- package/docs/README.md +148 -0
- package/docs/REMOTE_APIS.md +121 -0
- package/docs/ROADMAP.md +35 -0
- package/docs/UTILITIES.md +95 -0
- package/package.json +49 -3
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The configuration of a project (decision D45): `rapt/config.json` next to the abapGit sources.
|
|
3
|
+
*
|
|
4
|
+
* ```json
|
|
5
|
+
* { "mode": "enhanced" }
|
|
6
|
+
* ```
|
|
7
|
+
*
|
|
8
|
+
* - `standard` (default): the sources behave as on SAP; what SAP refuses, Open RAP Runtime refuses.
|
|
9
|
+
* A project that builds in this mode can be imported and activated on SAP.
|
|
10
|
+
* - `enhanced`: Open RAP Runtime extensions that SAP does not have: a managed BO with unmanaged save
|
|
11
|
+
* on a custom entity (D43), `field ( mandatory )` checked when saving without a validation.
|
|
12
|
+
*
|
|
13
|
+
* `rapt … --mode standard|enhanced` overrides the file.
|
|
14
|
+
*/
|
|
15
|
+
import { existsSync, readFileSync } from "node:fs";
|
|
16
|
+
import path from "node:path";
|
|
17
|
+
export const CONFIG_FILE = "rapt/config.json";
|
|
18
|
+
export const MODES = ["standard", "enhanced"];
|
|
19
|
+
const FLOORPLANS = ["listReport", "worklist", "analyticalListPage", "formEntry"];
|
|
20
|
+
const CARD_TYPES = ["list", "table", "chart", "kpi"];
|
|
21
|
+
const AGGREGATIONS = ["sum", "min", "max", "average", "count"];
|
|
22
|
+
/** `ui`: { floorplans: { Set: floorplan }, overview: { title, cards: [...] } }. */
|
|
23
|
+
function readUi(value, diagnostics, at) {
|
|
24
|
+
const error = (message) => {
|
|
25
|
+
diagnostics.error("CFG003", `${CONFIG_FILE}: ui${message}`, at);
|
|
26
|
+
return undefined;
|
|
27
|
+
};
|
|
28
|
+
if (typeof value !== "object" || value === null || Array.isArray(value)) {
|
|
29
|
+
return error(" must be an object { floorplans, overview }");
|
|
30
|
+
}
|
|
31
|
+
const ui = {};
|
|
32
|
+
for (const [name, item] of Object.entries(value)) {
|
|
33
|
+
if (name === "floorplans") {
|
|
34
|
+
if (typeof item !== "object" || item === null || Array.isArray(item)) {
|
|
35
|
+
return error(".floorplans must be an object: entity set → floorplan");
|
|
36
|
+
}
|
|
37
|
+
const floorplans = {};
|
|
38
|
+
for (const [set, floorplan] of Object.entries(item)) {
|
|
39
|
+
if (typeof floorplan !== "string" || !FLOORPLANS.includes(floorplan)) {
|
|
40
|
+
return error(`.floorplans.${set} must be ${FLOORPLANS.join(", ")}`);
|
|
41
|
+
}
|
|
42
|
+
floorplans[set] = floorplan;
|
|
43
|
+
}
|
|
44
|
+
ui.floorplans = floorplans;
|
|
45
|
+
}
|
|
46
|
+
else if (name === "overview") {
|
|
47
|
+
const overview = item;
|
|
48
|
+
if (typeof overview !== "object" || overview === null || !Array.isArray(overview.cards)) {
|
|
49
|
+
return error(".overview must be { title, cards: [...] }");
|
|
50
|
+
}
|
|
51
|
+
const cards = [];
|
|
52
|
+
for (const [i, raw] of overview.cards.entries()) {
|
|
53
|
+
const card = raw;
|
|
54
|
+
if (typeof card !== "object" || card === null || typeof card["type"] !== "string" || !CARD_TYPES.includes(card["type"]) || typeof card["entitySet"] !== "string") {
|
|
55
|
+
return error(`.overview.cards[${i}] needs type (${CARD_TYPES.join(", ")}) and entitySet`);
|
|
56
|
+
}
|
|
57
|
+
const result = { type: card["type"], entitySet: card["entitySet"], title: typeof card["title"] === "string" ? card["title"] : card["entitySet"] };
|
|
58
|
+
for (const key of ["subtitle", "filter", "orderby", "chart", "measure"]) {
|
|
59
|
+
if (typeof card[key] === "string")
|
|
60
|
+
result[key] = card[key];
|
|
61
|
+
}
|
|
62
|
+
if (typeof card["top"] === "number")
|
|
63
|
+
result.top = card["top"];
|
|
64
|
+
if (card["aggregation"] !== undefined) {
|
|
65
|
+
if (typeof card["aggregation"] !== "string" || !AGGREGATIONS.includes(card["aggregation"])) {
|
|
66
|
+
return error(`.overview.cards[${i}].aggregation must be ${AGGREGATIONS.join(", ")}`);
|
|
67
|
+
}
|
|
68
|
+
result.aggregation = card["aggregation"];
|
|
69
|
+
}
|
|
70
|
+
if (result.type === "kpi" && result.measure === undefined && result.aggregation !== "count") {
|
|
71
|
+
return error(`.overview.cards[${i}]: a kpi card needs a measure (or aggregation "count")`);
|
|
72
|
+
}
|
|
73
|
+
cards.push(result);
|
|
74
|
+
}
|
|
75
|
+
ui.overview = { title: typeof overview.title === "string" ? overview.title : "Overview", cards };
|
|
76
|
+
}
|
|
77
|
+
else {
|
|
78
|
+
diagnostics.warning("CFG002", `${CONFIG_FILE}: unknown setting ui.${name} ignored`, at);
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
return ui;
|
|
82
|
+
}
|
|
83
|
+
export function loadConfig(project, diagnostics, override) {
|
|
84
|
+
const config = { mode: "standard" };
|
|
85
|
+
const file = path.join(project.root, CONFIG_FILE);
|
|
86
|
+
const at = { file: CONFIG_FILE, line: 1 };
|
|
87
|
+
if (existsSync(file)) {
|
|
88
|
+
let json;
|
|
89
|
+
try {
|
|
90
|
+
json = JSON.parse(readFileSync(file, "utf8"));
|
|
91
|
+
}
|
|
92
|
+
catch (error) {
|
|
93
|
+
diagnostics.error("CFG001", `${CONFIG_FILE} is not valid JSON: ${error.message}`, at);
|
|
94
|
+
json = {};
|
|
95
|
+
}
|
|
96
|
+
if (typeof json !== "object" || json === null || Array.isArray(json)) {
|
|
97
|
+
diagnostics.error("CFG001", `${CONFIG_FILE} must be an object, for example { "mode": "enhanced" }`, at);
|
|
98
|
+
}
|
|
99
|
+
else {
|
|
100
|
+
for (const [name, value] of Object.entries(json)) {
|
|
101
|
+
if (name === "mode") {
|
|
102
|
+
if (typeof value === "string" && MODES.includes(value)) {
|
|
103
|
+
config.mode = value;
|
|
104
|
+
}
|
|
105
|
+
else {
|
|
106
|
+
diagnostics.error("CFG001", `${CONFIG_FILE}: mode must be ${MODES.map((m) => `"${m}"`).join(" or ")}`, at);
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
else if (name === "ui") {
|
|
110
|
+
const ui = readUi(value, diagnostics, at);
|
|
111
|
+
if (ui !== undefined)
|
|
112
|
+
config.ui = ui;
|
|
113
|
+
}
|
|
114
|
+
else if (name !== "$schema") {
|
|
115
|
+
diagnostics.warning("CFG002", `${CONFIG_FILE}: unknown setting ${name} ignored`, at);
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
if (override !== undefined) {
|
|
121
|
+
if (MODES.includes(override)) {
|
|
122
|
+
config.mode = override;
|
|
123
|
+
}
|
|
124
|
+
else {
|
|
125
|
+
diagnostics.error("CFG001", `--mode must be ${MODES.join(" or ")}, not ${override}`);
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
return config;
|
|
129
|
+
}
|
|
130
|
+
//# sourceMappingURL=config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/ir/config.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
/** ABAP dictionary of the project: tables, data elements and domains, with type resolution. */
|
|
2
|
+
import { type AbapType, type EnumTypeModel, type TableModel } from "@open-rap/model";
|
|
3
|
+
import type { Diagnostics } from "../diagnostics.js";
|
|
4
|
+
import { type Project, type SourceFile } from "../input/project.js";
|
|
5
|
+
export interface DataElementInfo {
|
|
6
|
+
type: AbapType;
|
|
7
|
+
/** Field labels of a data element defined in the sources. */
|
|
8
|
+
label?: string;
|
|
9
|
+
/** A CDS enumerated type (D55). */
|
|
10
|
+
enum?: EnumTypeModel;
|
|
11
|
+
}
|
|
12
|
+
export declare class Dictionary {
|
|
13
|
+
private readonly diagnostics;
|
|
14
|
+
private readonly tables;
|
|
15
|
+
/** CDS simple and enumerated types (D55), and their resolution (undefined: not resolvable). */
|
|
16
|
+
private readonly cdsTypes;
|
|
17
|
+
private readonly resolvedTypes;
|
|
18
|
+
/** Tables of the CDS table entities (D55). */
|
|
19
|
+
private readonly entityTables;
|
|
20
|
+
private readonly dataElements;
|
|
21
|
+
private readonly domains;
|
|
22
|
+
private readonly built;
|
|
23
|
+
constructor(project: Project, diagnostics: Diagnostics);
|
|
24
|
+
hasTable(name: string): boolean;
|
|
25
|
+
/** The table of a CDS table entity (D55), known from then on like a dictionary table. */
|
|
26
|
+
registerEntityTable(table: TableModel): void;
|
|
27
|
+
isEntityTable(name: string): boolean;
|
|
28
|
+
/** Whether the name is a CDS simple or enumerated type of the sources (D55). */
|
|
29
|
+
isCdsType(name: string): boolean;
|
|
30
|
+
/** The CDS types of the sources (D55): name, file and the resolved type, for the ABAP shadow types. */
|
|
31
|
+
cdsTypeEntries(): Array<{
|
|
32
|
+
name: string;
|
|
33
|
+
info: DataElementInfo;
|
|
34
|
+
}>;
|
|
35
|
+
/** The CDS enumerated types resolved so far (D55). */
|
|
36
|
+
enumTypes(): EnumTypeModel[];
|
|
37
|
+
/**
|
|
38
|
+
* A CDS simple or enumerated type (D55): its base type, resolved through built-in types, data
|
|
39
|
+
* elements and other CDS types; the constants of an enumerated type are checked here.
|
|
40
|
+
*/
|
|
41
|
+
private cdsType;
|
|
42
|
+
private enumOf;
|
|
43
|
+
tableFile(name: string): SourceFile | undefined;
|
|
44
|
+
builtTables(): TableModel[];
|
|
45
|
+
/** The type of a data element: from the sources, else from the catalog of standard ones. */
|
|
46
|
+
dataElement(name: string): DataElementInfo | undefined;
|
|
47
|
+
/** Names of the transparent tables of the project (not the structures). */
|
|
48
|
+
transparentTableNames(): string[];
|
|
49
|
+
/**
|
|
50
|
+
* The table model of a dictionary table, with diagnostics on the TABL file (or on `sink`);
|
|
51
|
+
* cached.
|
|
52
|
+
*/
|
|
53
|
+
table(name: string, sink?: Diagnostics): TableModel | undefined;
|
|
54
|
+
}
|
|
@@ -0,0 +1,328 @@
|
|
|
1
|
+
/** ABAP dictionary of the project: tables, data elements and domains, with type resolution. */
|
|
2
|
+
import { sqlName } from "@open-rap/model";
|
|
3
|
+
import { catalogDataElement, ddicTypeKind, parseBuiltInType } from "../ddic/catalog.js";
|
|
4
|
+
import { parseCdsTypeSource } from "../ddic/cds-types.js";
|
|
5
|
+
import { readDomaXml, readDtelXml, readTablXml } from "../ddic/xml.js";
|
|
6
|
+
import { filesOfType } from "../input/project.js";
|
|
7
|
+
/** Base types of the CDS enumerated types (D55): INT1, INT2, INT4, CHAR(1..8), NUMC(1..8). */
|
|
8
|
+
const ENUM_BASES = new Set(["int1", "int2", "int4", "char", "numc"]);
|
|
9
|
+
export class Dictionary {
|
|
10
|
+
diagnostics;
|
|
11
|
+
tables = new Map();
|
|
12
|
+
/** CDS simple and enumerated types (D55), and their resolution (undefined: not resolvable). */
|
|
13
|
+
cdsTypes = new Map();
|
|
14
|
+
resolvedTypes = new Map();
|
|
15
|
+
/** Tables of the CDS table entities (D55). */
|
|
16
|
+
entityTables = new Set();
|
|
17
|
+
dataElements = new Map();
|
|
18
|
+
domains = new Map();
|
|
19
|
+
built = new Map();
|
|
20
|
+
constructor(project, diagnostics) {
|
|
21
|
+
this.diagnostics = diagnostics;
|
|
22
|
+
for (const file of filesOfType(project, "TABL").filter((f) => f.extension === "xml")) {
|
|
23
|
+
const xml = readTablXml(file.content);
|
|
24
|
+
if (xml === undefined) {
|
|
25
|
+
diagnostics.error("DDIC010", "the table definition (DD02V) could not be read", { file: file.path, line: 1 });
|
|
26
|
+
}
|
|
27
|
+
else {
|
|
28
|
+
this.tables.set(xml.name.toUpperCase(), { xml, file });
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
for (const file of filesOfType(project, "DTEL").filter((f) => f.extension === "xml")) {
|
|
32
|
+
const xml = readDtelXml(file.content);
|
|
33
|
+
if (xml !== undefined) {
|
|
34
|
+
this.dataElements.set(xml.name.toUpperCase(), { xml, file });
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
for (const file of filesOfType(project, "DOMA").filter((f) => f.extension === "xml")) {
|
|
38
|
+
const xml = readDomaXml(file.content);
|
|
39
|
+
if (xml !== undefined) {
|
|
40
|
+
this.domains.set(xml.name.toUpperCase(), { xml, file });
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
for (const file of filesOfType(project, "DRTY").filter((f) => f.extension === "acds" || f.extension === "asdrty")) {
|
|
44
|
+
const parsed = parseCdsTypeSource(file.content);
|
|
45
|
+
for (const issue of parsed.issues) {
|
|
46
|
+
diagnostics.add(issue.severity, issue.code, issue.message, { file: file.path, line: issue.line, column: issue.column });
|
|
47
|
+
}
|
|
48
|
+
if (parsed.type === undefined) {
|
|
49
|
+
continue;
|
|
50
|
+
}
|
|
51
|
+
if (parsed.type.name.toUpperCase() !== file.name) {
|
|
52
|
+
diagnostics.error("TYPE001", `the file defines ${parsed.type.name}, its name says ${file.name}`, { file: file.path, line: parsed.type.line, column: parsed.type.column });
|
|
53
|
+
}
|
|
54
|
+
this.cdsTypes.set(file.name, { source: parsed.type, file });
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
hasTable(name) {
|
|
58
|
+
return this.tables.has(name.toUpperCase()) || this.entityTables.has(name.toUpperCase());
|
|
59
|
+
}
|
|
60
|
+
/** The table of a CDS table entity (D55), known from then on like a dictionary table. */
|
|
61
|
+
registerEntityTable(table) {
|
|
62
|
+
this.entityTables.add(table.name.toUpperCase());
|
|
63
|
+
this.built.set(table.name.toUpperCase(), table);
|
|
64
|
+
}
|
|
65
|
+
isEntityTable(name) {
|
|
66
|
+
return this.entityTables.has(name.toUpperCase());
|
|
67
|
+
}
|
|
68
|
+
/** Whether the name is a CDS simple or enumerated type of the sources (D55). */
|
|
69
|
+
isCdsType(name) {
|
|
70
|
+
return this.cdsTypes.has(name.toUpperCase());
|
|
71
|
+
}
|
|
72
|
+
/** The CDS types of the sources (D55): name, file and the resolved type, for the ABAP shadow types. */
|
|
73
|
+
cdsTypeEntries() {
|
|
74
|
+
const result = [];
|
|
75
|
+
for (const [name, entry] of this.cdsTypes) {
|
|
76
|
+
const info = this.dataElement(name);
|
|
77
|
+
if (info !== undefined) {
|
|
78
|
+
result.push({ name: entry.source.name, info });
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
return result;
|
|
82
|
+
}
|
|
83
|
+
/** The CDS enumerated types resolved so far (D55). */
|
|
84
|
+
enumTypes() {
|
|
85
|
+
return [...this.resolvedTypes.values()].flatMap((i) => (i?.enum === undefined ? [] : [i.enum])).filter((e, i, all) => all.findIndex((x) => x.name === e.name) === i);
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* A CDS simple or enumerated type (D55): its base type, resolved through built-in types, data
|
|
89
|
+
* elements and other CDS types; the constants of an enumerated type are checked here.
|
|
90
|
+
*/
|
|
91
|
+
cdsType(upper) {
|
|
92
|
+
if (this.resolvedTypes.has(upper)) {
|
|
93
|
+
return this.resolvedTypes.get(upper);
|
|
94
|
+
}
|
|
95
|
+
const entry = this.cdsTypes.get(upper);
|
|
96
|
+
if (entry === undefined) {
|
|
97
|
+
return undefined;
|
|
98
|
+
}
|
|
99
|
+
this.resolvedTypes.set(upper, undefined); // cycles
|
|
100
|
+
const { source, file } = entry;
|
|
101
|
+
const at = { file: file.path, line: source.line, column: source.column };
|
|
102
|
+
const baseUpper = source.base.toUpperCase();
|
|
103
|
+
const base = parseBuiltInType(source.base) ?? (baseUpper === upper ? undefined : this.dataElement(baseUpper));
|
|
104
|
+
if (base === undefined) {
|
|
105
|
+
this.diagnostics.error("TYPE002", `${source.name}: unknown type ${source.base}`, at);
|
|
106
|
+
return undefined;
|
|
107
|
+
}
|
|
108
|
+
const baseType = "type" in base ? base.type : base;
|
|
109
|
+
const type = { ...baseType, dataElement: upper };
|
|
110
|
+
delete type.enumType;
|
|
111
|
+
const info = { type };
|
|
112
|
+
const label = source.label ?? ("label" in base ? base.label : undefined);
|
|
113
|
+
if (label !== undefined) {
|
|
114
|
+
info.label = label;
|
|
115
|
+
}
|
|
116
|
+
const stacked = "enum" in base ? base.enum : undefined;
|
|
117
|
+
if (source.enum !== undefined) {
|
|
118
|
+
const enumType = this.enumOf(source, at);
|
|
119
|
+
if (enumType === undefined) {
|
|
120
|
+
return undefined;
|
|
121
|
+
}
|
|
122
|
+
info.enum = enumType;
|
|
123
|
+
}
|
|
124
|
+
else if (stacked !== undefined) {
|
|
125
|
+
// a type typed with an enumerated type is an enumerated type with the same constants
|
|
126
|
+
info.enum = { ...stacked, name: source.name, ...(source.label === undefined ? {} : { label: source.label }), src: { ...at } };
|
|
127
|
+
}
|
|
128
|
+
if (info.enum !== undefined) {
|
|
129
|
+
type.enumType = info.enum.name.toUpperCase();
|
|
130
|
+
}
|
|
131
|
+
this.resolvedTypes.set(upper, info);
|
|
132
|
+
return info;
|
|
133
|
+
}
|
|
134
|
+
enumOf(source, at) {
|
|
135
|
+
const constants = source.enum ?? [];
|
|
136
|
+
const builtIn = parseBuiltInType(source.base);
|
|
137
|
+
const length = builtIn?.length ?? 1;
|
|
138
|
+
if (builtIn === undefined || !ENUM_BASES.has(builtIn.kind) || ((builtIn.kind === "char" || builtIn.kind === "numc") && (length < 1 || length > 8))) {
|
|
139
|
+
this.diagnostics.error("TYPE003", `${source.name}: the base type of an enumerated type is abap.int1, abap.int2, abap.int4, abap.char(1..8) or abap.numc(1..8), not ${source.base}`, at);
|
|
140
|
+
return undefined;
|
|
141
|
+
}
|
|
142
|
+
let ok = true;
|
|
143
|
+
const initials = constants.filter((c) => c.value === "initial");
|
|
144
|
+
if (initials.length !== 1) {
|
|
145
|
+
this.diagnostics.error("TYPE003", `${source.name}: exactly one constant has the value initial (${initials.length} found)`, at);
|
|
146
|
+
ok = false;
|
|
147
|
+
}
|
|
148
|
+
const enumType = { name: source.name, base: { ...builtIn }, values: [], src: { ...at } };
|
|
149
|
+
if (source.label !== undefined) {
|
|
150
|
+
enumType.label = source.label;
|
|
151
|
+
}
|
|
152
|
+
const names = new Set();
|
|
153
|
+
const values = new Set();
|
|
154
|
+
const range = { int1: [0, 255], int2: [-32768, 32767], int4: [-2147483648, 2147483647] };
|
|
155
|
+
for (const constant of constants) {
|
|
156
|
+
const where = { file: at.file, line: constant.line, column: constant.column };
|
|
157
|
+
let value;
|
|
158
|
+
if (constant.value === "initial") {
|
|
159
|
+
value = builtIn.kind === "char" ? "" : builtIn.kind === "numc" ? "0".repeat(length) : 0;
|
|
160
|
+
}
|
|
161
|
+
else if (builtIn.kind === "char" || builtIn.kind === "numc") {
|
|
162
|
+
const text = String(constant.value);
|
|
163
|
+
if (typeof constant.value !== "string" || text.length > length || (builtIn.kind === "numc" && !/^\d+$/.test(text))) {
|
|
164
|
+
this.diagnostics.error("TYPE003", `${source.name}-${constant.name}: ${constant.literal} does not fit the base type ${source.base}`, where);
|
|
165
|
+
ok = false;
|
|
166
|
+
continue;
|
|
167
|
+
}
|
|
168
|
+
value = builtIn.kind === "numc" ? text.padStart(length, "0") : text.replace(/\s+$/, "");
|
|
169
|
+
}
|
|
170
|
+
else {
|
|
171
|
+
const limits = range[builtIn.kind] ?? [0, 0];
|
|
172
|
+
if (typeof constant.value !== "number" || !Number.isInteger(constant.value) || constant.value < limits[0] || constant.value > limits[1]) {
|
|
173
|
+
this.diagnostics.error("TYPE003", `${source.name}-${constant.name}: ${constant.literal} does not fit the base type ${source.base}`, where);
|
|
174
|
+
ok = false;
|
|
175
|
+
continue;
|
|
176
|
+
}
|
|
177
|
+
value = constant.value;
|
|
178
|
+
}
|
|
179
|
+
if (names.has(constant.name.toUpperCase()) || values.has(String(value))) {
|
|
180
|
+
this.diagnostics.error("TYPE003", `${source.name}-${constant.name}: constants and values are unique in an enumerated type`, where);
|
|
181
|
+
ok = false;
|
|
182
|
+
continue;
|
|
183
|
+
}
|
|
184
|
+
names.add(constant.name.toUpperCase());
|
|
185
|
+
values.add(String(value));
|
|
186
|
+
enumType.values.push({ name: constant.name, value, ...(constant.label === undefined ? {} : { label: constant.label }), ...(constant.value === "initial" ? { initial: true } : {}) });
|
|
187
|
+
}
|
|
188
|
+
return ok ? enumType : undefined;
|
|
189
|
+
}
|
|
190
|
+
tableFile(name) {
|
|
191
|
+
return this.tables.get(name.toUpperCase())?.file;
|
|
192
|
+
}
|
|
193
|
+
builtTables() {
|
|
194
|
+
return [...this.built.values()].filter((t) => t !== undefined);
|
|
195
|
+
}
|
|
196
|
+
/** The type of a data element: from the sources, else from the catalog of standard ones. */
|
|
197
|
+
dataElement(name) {
|
|
198
|
+
const upper = name.toUpperCase();
|
|
199
|
+
if (this.cdsTypes.has(upper)) {
|
|
200
|
+
return this.cdsType(upper);
|
|
201
|
+
}
|
|
202
|
+
const local = this.dataElements.get(upper);
|
|
203
|
+
if (local !== undefined) {
|
|
204
|
+
const { xml } = local;
|
|
205
|
+
let kindSource = xml.dataType;
|
|
206
|
+
let length = xml.length;
|
|
207
|
+
let decimals = xml.decimals;
|
|
208
|
+
if (xml.domain !== undefined) {
|
|
209
|
+
const domain = this.domains.get(xml.domain.toUpperCase());
|
|
210
|
+
const standard = catalogDataElement(xml.domain);
|
|
211
|
+
if (domain !== undefined) {
|
|
212
|
+
kindSource = domain.xml.dataType;
|
|
213
|
+
length = domain.xml.length;
|
|
214
|
+
decimals = domain.xml.decimals;
|
|
215
|
+
}
|
|
216
|
+
else if (standard !== undefined) {
|
|
217
|
+
return withLabel({ ...standard, dataElement: upper }, xml);
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
const kind = kindSource === undefined ? undefined : ddicTypeKind(kindSource);
|
|
221
|
+
if (kind === undefined) {
|
|
222
|
+
return undefined;
|
|
223
|
+
}
|
|
224
|
+
const type = { kind, dataElement: upper };
|
|
225
|
+
if (length !== undefined && length > 0) {
|
|
226
|
+
type.length = length;
|
|
227
|
+
}
|
|
228
|
+
if (decimals !== undefined && decimals > 0) {
|
|
229
|
+
type.decimals = decimals;
|
|
230
|
+
}
|
|
231
|
+
// a local data element on a standard time stamp or boolean domain keeps its semantics
|
|
232
|
+
const semantic = xml.domain === undefined ? undefined : catalogDataElement(xml.domain);
|
|
233
|
+
if (semantic !== undefined && ["timestamp", "timestampl", "bool", "utclong"].includes(semantic.kind)) {
|
|
234
|
+
type.kind = semantic.kind;
|
|
235
|
+
}
|
|
236
|
+
return withLabel(type, xml);
|
|
237
|
+
}
|
|
238
|
+
const standard = catalogDataElement(upper);
|
|
239
|
+
return standard === undefined ? undefined : { type: standard };
|
|
240
|
+
}
|
|
241
|
+
/** Names of the transparent tables of the project (not the structures). */
|
|
242
|
+
transparentTableNames() {
|
|
243
|
+
return [...this.tables.values()].filter((t) => t.xml.tableClass === "TRANSP").map((t) => t.xml.name);
|
|
244
|
+
}
|
|
245
|
+
/**
|
|
246
|
+
* The table model of a dictionary table, with diagnostics on the TABL file (or on `sink`);
|
|
247
|
+
* cached.
|
|
248
|
+
*/
|
|
249
|
+
table(name, sink = this.diagnostics) {
|
|
250
|
+
const upper = name.toUpperCase();
|
|
251
|
+
if (this.built.has(upper)) {
|
|
252
|
+
return this.built.get(upper);
|
|
253
|
+
}
|
|
254
|
+
const entry = this.tables.get(upper);
|
|
255
|
+
if (entry === undefined) {
|
|
256
|
+
this.built.set(upper, undefined);
|
|
257
|
+
return undefined;
|
|
258
|
+
}
|
|
259
|
+
const { xml, file } = entry;
|
|
260
|
+
const columns = [];
|
|
261
|
+
xml.fields.forEach((field, index) => {
|
|
262
|
+
const location = { file: file.path, line: file.fieldLines?.[field.fieldName] ?? lineOf(file.content, field.fieldName, index) };
|
|
263
|
+
if (field.include !== undefined || field.fieldName.startsWith(".")) {
|
|
264
|
+
sink.error("DDIC003", `${xml.name}: include structures (${field.fieldName} ${field.include ?? ""}) are not supported`, location);
|
|
265
|
+
return;
|
|
266
|
+
}
|
|
267
|
+
let type;
|
|
268
|
+
if (field.rollName !== undefined && field.rollName !== "") {
|
|
269
|
+
type = this.dataElement(field.rollName)?.type;
|
|
270
|
+
if (type === undefined) {
|
|
271
|
+
sink.error("DDIC001", `${xml.name}-${field.fieldName}: unknown data element ${field.rollName} (add its DTEL to the sources)`, location);
|
|
272
|
+
return;
|
|
273
|
+
}
|
|
274
|
+
}
|
|
275
|
+
else if (field.dataType !== undefined) {
|
|
276
|
+
const kind = ddicTypeKind(field.dataType);
|
|
277
|
+
if (kind === undefined) {
|
|
278
|
+
sink.error("DDIC002", `${xml.name}-${field.fieldName}: unsupported data type ${field.dataType}`, location);
|
|
279
|
+
return;
|
|
280
|
+
}
|
|
281
|
+
type = { kind };
|
|
282
|
+
if (field.length !== undefined && field.length > 0) {
|
|
283
|
+
type.length = field.length;
|
|
284
|
+
}
|
|
285
|
+
if (field.decimals !== undefined && field.decimals > 0) {
|
|
286
|
+
type.decimals = field.decimals;
|
|
287
|
+
}
|
|
288
|
+
}
|
|
289
|
+
else {
|
|
290
|
+
sink.error("DDIC002", `${xml.name}-${field.fieldName}: no type`, location);
|
|
291
|
+
return;
|
|
292
|
+
}
|
|
293
|
+
const column = {
|
|
294
|
+
name: field.fieldName.toLowerCase(),
|
|
295
|
+
type,
|
|
296
|
+
key: field.key,
|
|
297
|
+
notNull: field.notNull || field.key,
|
|
298
|
+
client: type.kind === "clnt",
|
|
299
|
+
};
|
|
300
|
+
if (field.refTable !== undefined && field.refField !== undefined) {
|
|
301
|
+
column.reference = { table: field.refTable.toLowerCase(), field: field.refField.toLowerCase() };
|
|
302
|
+
}
|
|
303
|
+
columns.push(column);
|
|
304
|
+
});
|
|
305
|
+
if (xml.tableClass !== "TRANSP") {
|
|
306
|
+
sink.warning("DDIC004", `${xml.name}: table class ${xml.tableClass} handled as a transparent table`, { file: file.path, line: 1 });
|
|
307
|
+
}
|
|
308
|
+
const table = { name: sqlName(xml.name), columns, src: { file: file.path, line: 1, column: 1 } };
|
|
309
|
+
if (file.standard === true) {
|
|
310
|
+
table.standard = true;
|
|
311
|
+
}
|
|
312
|
+
if (xml.description !== undefined) {
|
|
313
|
+
table.description = xml.description;
|
|
314
|
+
}
|
|
315
|
+
this.built.set(upper, table);
|
|
316
|
+
return table;
|
|
317
|
+
}
|
|
318
|
+
}
|
|
319
|
+
function withLabel(type, xml) {
|
|
320
|
+
const label = xml.labels.medium ?? xml.labels.long ?? xml.labels.short ?? xml.labels.description;
|
|
321
|
+
return label === undefined ? { type } : { type, label };
|
|
322
|
+
}
|
|
323
|
+
function lineOf(content, fieldName, fallbackIndex) {
|
|
324
|
+
const lines = content.split("\n");
|
|
325
|
+
const index = lines.findIndex((l) => l.includes(`<FIELDNAME>${fieldName}</FIELDNAME>`));
|
|
326
|
+
return index >= 0 ? index + 1 : fallbackIndex + 1;
|
|
327
|
+
}
|
|
328
|
+
//# sourceMappingURL=dictionary.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dictionary.js","sourceRoot":"","sources":["../../src/ir/dictionary.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
/** CDS view entities, projections and abstract entities → IR entities. */
|
|
2
|
+
import { type EntityModel } from "@open-rap/model";
|
|
3
|
+
import { type CdsEntityAst } from "../cds/adapter.js";
|
|
4
|
+
import type { Diagnostics } from "../diagnostics.js";
|
|
5
|
+
import { type Project, type SourceFile } from "../input/project.js";
|
|
6
|
+
import type { Dictionary } from "./dictionary.js";
|
|
7
|
+
interface ParsedEntity {
|
|
8
|
+
ast: CdsEntityAst;
|
|
9
|
+
file: SourceFile;
|
|
10
|
+
}
|
|
11
|
+
export declare class EntityResolver {
|
|
12
|
+
private readonly dictionary;
|
|
13
|
+
private diagnostics;
|
|
14
|
+
private readonly parsed;
|
|
15
|
+
private readonly extensions;
|
|
16
|
+
private readonly resolved;
|
|
17
|
+
private readonly inProgress;
|
|
18
|
+
constructor(project: Project, dictionary: Dictionary, diagnostics: Diagnostics);
|
|
19
|
+
has(name: string): boolean;
|
|
20
|
+
/** Names of the abstract entities of the project. */
|
|
21
|
+
abstractNames(): string[];
|
|
22
|
+
/** Names of the table entities of the project (D55). */
|
|
23
|
+
tableEntityNames(): string[];
|
|
24
|
+
/** Resolves an entity with its diagnostics in `sink` (an entity the BO may not need). */
|
|
25
|
+
resolveInto(name: string, sink: Diagnostics): EntityModel | undefined;
|
|
26
|
+
ast(name: string): ParsedEntity | undefined;
|
|
27
|
+
all(): EntityModel[];
|
|
28
|
+
/** Resolves an entity (and the entities it depends on); undefined when it cannot be built. */
|
|
29
|
+
resolve(name: string): EntityModel | undefined;
|
|
30
|
+
private loc;
|
|
31
|
+
private entityAnnotations;
|
|
32
|
+
private applicableExtensions;
|
|
33
|
+
private elementExtensionAnnotations;
|
|
34
|
+
private checkExtensionElements;
|
|
35
|
+
private fieldFromElement;
|
|
36
|
+
/** The fields in the order of the select list: the plain ones, and the calculated elements resolved. */
|
|
37
|
+
private withCalculatedFields;
|
|
38
|
+
private calculatedField;
|
|
39
|
+
private view;
|
|
40
|
+
/** The associations of a view or custom entity, ON conditions resolved. */
|
|
41
|
+
private associationsOf;
|
|
42
|
+
private addDataElementLabels;
|
|
43
|
+
/** `$projection.A = _X.B`, `source.col = _X.B`, `A = _X.B` (both orders). */
|
|
44
|
+
private resolveOnPair;
|
|
45
|
+
private projection;
|
|
46
|
+
/** Resolves an entity unless it is being resolved (cycles through associations). */
|
|
47
|
+
private resolveLazy;
|
|
48
|
+
/**
|
|
49
|
+
* A table entity: a table of the same name, whose columns are the elements in lower case, and
|
|
50
|
+
* a view entity on it. Its elements are typed with built-in types, data elements, CDS simple
|
|
51
|
+
* types or CDS enumerated types.
|
|
52
|
+
*/
|
|
53
|
+
private tableEntity;
|
|
54
|
+
/** A custom entity: typed elements, read by the class of `@ObjectModel.query.implementedBy` (D43). */
|
|
55
|
+
private custom;
|
|
56
|
+
private abstract;
|
|
57
|
+
}
|
|
58
|
+
export {};
|