@open-rap/compiler 0.0.0-stage → 0.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (227) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +21 -2
  3. package/dist/agent/server.d.ts +35 -0
  4. package/dist/agent/server.js +408 -0
  5. package/dist/agent/server.js.map +1 -0
  6. package/dist/authoring/abapgit.d.ts +38 -0
  7. package/dist/authoring/abapgit.js +242 -0
  8. package/dist/authoring/abapgit.js.map +1 -0
  9. package/dist/authoring/catalog.d.ts +48 -0
  10. package/dist/authoring/catalog.js +117 -0
  11. package/dist/authoring/catalog.js.map +1 -0
  12. package/dist/authoring/floorplan.d.ts +28 -0
  13. package/dist/authoring/floorplan.js +31 -0
  14. package/dist/authoring/floorplan.js.map +1 -0
  15. package/dist/authoring/generate.d.ts +57 -0
  16. package/dist/authoring/generate.js +630 -0
  17. package/dist/authoring/generate.js.map +1 -0
  18. package/dist/authoring/mcp.d.ts +15 -0
  19. package/dist/authoring/mcp.js +52 -0
  20. package/dist/authoring/mcp.js.map +1 -0
  21. package/dist/authoring/new.d.ts +35 -0
  22. package/dist/authoring/new.js +389 -0
  23. package/dist/authoring/new.js.map +1 -0
  24. package/dist/bdef/ast.d.ts +249 -0
  25. package/dist/bdef/ast.js +3 -0
  26. package/dist/bdef/ast.js.map +1 -0
  27. package/dist/bdef/lexer.d.ts +105 -0
  28. package/dist/bdef/lexer.js +148 -0
  29. package/dist/bdef/lexer.js.map +1 -0
  30. package/dist/bdef/parser.d.ts +22 -0
  31. package/dist/bdef/parser.js +1012 -0
  32. package/dist/bdef/parser.js.map +1 -0
  33. package/dist/build.d.ts +26 -0
  34. package/dist/build.js +62 -0
  35. package/dist/build.js.map +1 -0
  36. package/dist/cds/adapter.d.ts +91 -0
  37. package/dist/cds/adapter.js +381 -0
  38. package/dist/cds/adapter.js.map +1 -0
  39. package/dist/cds/expression-ast.d.ts +65 -0
  40. package/dist/cds/expression-ast.js +330 -0
  41. package/dist/cds/expression-ast.js.map +1 -0
  42. package/dist/cli.d.ts +9 -0
  43. package/dist/cli.js +485 -0
  44. package/dist/cli.js.map +1 -0
  45. package/dist/dcl/parser.d.ts +59 -0
  46. package/dist/dcl/parser.js +338 -0
  47. package/dist/dcl/parser.js.map +1 -0
  48. package/dist/ddic/catalog.d.ts +17 -0
  49. package/dist/ddic/catalog.js +211 -0
  50. package/dist/ddic/catalog.js.map +1 -0
  51. package/dist/ddic/cds-types.d.ts +47 -0
  52. package/dist/ddic/cds-types.js +131 -0
  53. package/dist/ddic/cds-types.js.map +1 -0
  54. package/dist/ddic/table-source.d.ts +70 -0
  55. package/dist/ddic/table-source.js +500 -0
  56. package/dist/ddic/table-source.js.map +1 -0
  57. package/dist/ddic/xml.d.ts +65 -0
  58. package/dist/ddic/xml.js +201 -0
  59. package/dist/ddic/xml.js.map +1 -0
  60. package/dist/dev.d.ts +128 -0
  61. package/dist/dev.js +434 -0
  62. package/dist/dev.js.map +1 -0
  63. package/dist/diagnostics.d.ts +33 -0
  64. package/dist/diagnostics.js +53 -0
  65. package/dist/diagnostics.js.map +1 -0
  66. package/dist/gen/abap/derived-types.d.ts +26 -0
  67. package/dist/gen/abap/derived-types.js +323 -0
  68. package/dist/gen/abap/derived-types.js.map +1 -0
  69. package/dist/gen/abap/eml.d.ts +118 -0
  70. package/dist/gen/abap/eml.js +362 -0
  71. package/dist/gen/abap/eml.js.map +1 -0
  72. package/dist/gen/abap/enums.d.ts +13 -0
  73. package/dist/gen/abap/enums.js +74 -0
  74. package/dist/gen/abap/enums.js.map +1 -0
  75. package/dist/gen/abap/framework-http.d.ts +14 -0
  76. package/dist/gen/abap/framework-http.js +1049 -0
  77. package/dist/gen/abap/framework-http.js.map +1 -0
  78. package/dist/gen/abap/framework-query.d.ts +14 -0
  79. package/dist/gen/abap/framework-query.js +225 -0
  80. package/dist/gen/abap/framework-query.js.map +1 -0
  81. package/dist/gen/abap/framework-utils.d.ts +29 -0
  82. package/dist/gen/abap/framework-utils.js +3707 -0
  83. package/dist/gen/abap/framework-utils.js.map +1 -0
  84. package/dist/gen/abap/framework.d.ts +12 -0
  85. package/dist/gen/abap/framework.js +480 -0
  86. package/dist/gen/abap/framework.js.map +1 -0
  87. package/dist/gen/abap/generate.d.ts +40 -0
  88. package/dist/gen/abap/generate.js +238 -0
  89. package/dist/gen/abap/generate.js.map +1 -0
  90. package/dist/gen/abap/rewrite.d.ts +82 -0
  91. package/dist/gen/abap/rewrite.js +957 -0
  92. package/dist/gen/abap/rewrite.js.map +1 -0
  93. package/dist/gen/abap/shadow.d.ts +25 -0
  94. package/dist/gen/abap/shadow.js +175 -0
  95. package/dist/gen/abap/shadow.js.map +1 -0
  96. package/dist/gen/abap/tokens.d.ts +33 -0
  97. package/dist/gen/abap/tokens.js +87 -0
  98. package/dist/gen/abap/tokens.js.map +1 -0
  99. package/dist/gen/app/index.d.ts +25 -0
  100. package/dist/gen/app/index.js +322 -0
  101. package/dist/gen/app/index.js.map +1 -0
  102. package/dist/gen/csdl.d.ts +11 -0
  103. package/dist/gen/csdl.js +562 -0
  104. package/dist/gen/csdl.js.map +1 -0
  105. package/dist/gen/deploy.d.ts +12 -0
  106. package/dist/gen/deploy.js +53 -0
  107. package/dist/gen/deploy.js.map +1 -0
  108. package/dist/gen/docs/index.d.ts +35 -0
  109. package/dist/gen/docs/index.js +267 -0
  110. package/dist/gen/docs/index.js.map +1 -0
  111. package/dist/gen/docs/markdown.d.ts +23 -0
  112. package/dist/gen/docs/markdown.js +187 -0
  113. package/dist/gen/docs/markdown.js.map +1 -0
  114. package/dist/gen/docs/site.d.ts +17 -0
  115. package/dist/gen/docs/site.js +106 -0
  116. package/dist/gen/docs/site.js.map +1 -0
  117. package/dist/gen/keycloak.d.ts +21 -0
  118. package/dist/gen/keycloak.js +90 -0
  119. package/dist/gen/keycloak.js.map +1 -0
  120. package/dist/gen/launchpad/index.d.ts +48 -0
  121. package/dist/gen/launchpad/index.js +302 -0
  122. package/dist/gen/launchpad/index.js.map +1 -0
  123. package/dist/gen/launchpad/ui.d.ts +14 -0
  124. package/dist/gen/launchpad/ui.js +350 -0
  125. package/dist/gen/launchpad/ui.js.map +1 -0
  126. package/dist/gen/mcp.d.ts +23 -0
  127. package/dist/gen/mcp.js +244 -0
  128. package/dist/gen/mcp.js.map +1 -0
  129. package/dist/gen/sql-expressions.d.ts +12 -0
  130. package/dist/gen/sql-expressions.js +136 -0
  131. package/dist/gen/sql-expressions.js.map +1 -0
  132. package/dist/gen/sql.d.ts +38 -0
  133. package/dist/gen/sql.js +612 -0
  134. package/dist/gen/sql.js.map +1 -0
  135. package/dist/gen/ui/index.d.ts +7 -0
  136. package/dist/gen/ui/index.js +27 -0
  137. package/dist/gen/ui/index.js.map +1 -0
  138. package/dist/gen/ui/layout.d.ts +230 -0
  139. package/dist/gen/ui/layout.js +511 -0
  140. package/dist/gen/ui/layout.js.map +1 -0
  141. package/dist/gen/ui/static.d.ts +55 -0
  142. package/dist/gen/ui/static.js +2901 -0
  143. package/dist/gen/ui/static.js.map +1 -0
  144. package/dist/gen/ui/views.d.ts +10 -0
  145. package/dist/gen/ui/views.js +511 -0
  146. package/dist/gen/ui/views.js.map +1 -0
  147. package/dist/gen/vendor.d.ts +23 -0
  148. package/dist/gen/vendor.js +68 -0
  149. package/dist/gen/vendor.js.map +1 -0
  150. package/dist/gen/xml.d.ts +9 -0
  151. package/dist/gen/xml.js +42 -0
  152. package/dist/gen/xml.js.map +1 -0
  153. package/dist/index.d.ts +20 -0
  154. package/dist/index.js +20 -0
  155. package/dist/index.js.map +1 -0
  156. package/dist/input/project.d.ts +50 -0
  157. package/dist/input/project.js +128 -0
  158. package/dist/input/project.js.map +1 -0
  159. package/dist/ir/access-controls.d.ts +11 -0
  160. package/dist/ir/access-controls.js +148 -0
  161. package/dist/ir/access-controls.js.map +1 -0
  162. package/dist/ir/authorizations.d.ts +25 -0
  163. package/dist/ir/authorizations.js +178 -0
  164. package/dist/ir/authorizations.js.map +1 -0
  165. package/dist/ir/behaviors.d.ts +16 -0
  166. package/dist/ir/behaviors.js +548 -0
  167. package/dist/ir/behaviors.js.map +1 -0
  168. package/dist/ir/builder.d.ts +20 -0
  169. package/dist/ir/builder.js +505 -0
  170. package/dist/ir/builder.js.map +1 -0
  171. package/dist/ir/config.d.ts +25 -0
  172. package/dist/ir/config.js +130 -0
  173. package/dist/ir/config.js.map +1 -0
  174. package/dist/ir/dictionary.d.ts +54 -0
  175. package/dist/ir/dictionary.js +328 -0
  176. package/dist/ir/dictionary.js.map +1 -0
  177. package/dist/ir/entities.d.ts +58 -0
  178. package/dist/ir/entities.js +676 -0
  179. package/dist/ir/entities.js.map +1 -0
  180. package/dist/ir/expressions.d.ts +33 -0
  181. package/dist/ir/expressions.js +327 -0
  182. package/dist/ir/expressions.js.map +1 -0
  183. package/dist/ir/handlers.d.ts +63 -0
  184. package/dist/ir/handlers.js +398 -0
  185. package/dist/ir/handlers.js.map +1 -0
  186. package/dist/ir/number-ranges.d.ts +24 -0
  187. package/dist/ir/number-ranges.js +74 -0
  188. package/dist/ir/number-ranges.js.map +1 -0
  189. package/dist/ir/seed.d.ts +23 -0
  190. package/dist/ir/seed.js +78 -0
  191. package/dist/ir/seed.js.map +1 -0
  192. package/dist/ir/service.d.ts +21 -0
  193. package/dist/ir/service.js +96 -0
  194. package/dist/ir/service.js.map +1 -0
  195. package/dist/launchpad/config.d.ts +47 -0
  196. package/dist/launchpad/config.js +321 -0
  197. package/dist/launchpad/config.js.map +1 -0
  198. package/dist/launchpad/workspace.d.ts +48 -0
  199. package/dist/launchpad/workspace.js +166 -0
  200. package/dist/launchpad/workspace.js.map +1 -0
  201. package/dist/srvd/parser.d.ts +36 -0
  202. package/dist/srvd/parser.js +193 -0
  203. package/dist/srvd/parser.js.map +1 -0
  204. package/dist/standard/data.d.ts +18 -0
  205. package/dist/standard/data.js +534 -0
  206. package/dist/standard/data.js.map +1 -0
  207. package/dist/standard/index.d.ts +36 -0
  208. package/dist/standard/index.js +507 -0
  209. package/dist/standard/index.js.map +1 -0
  210. package/dist/version.d.ts +2 -0
  211. package/dist/version.js +4 -0
  212. package/dist/version.js.map +1 -0
  213. package/docs/AGENTS.md +79 -0
  214. package/docs/ANNOTATIONS.md +76 -0
  215. package/docs/DECISIONS.md +1554 -0
  216. package/docs/DEPLOYMENT.md +113 -0
  217. package/docs/DIAGNOSTICS.md +116 -0
  218. package/docs/FEATURES.md +287 -0
  219. package/docs/GUIDE.md +560 -0
  220. package/docs/KNOWN_GAPS.md +216 -0
  221. package/docs/MCP.md +84 -0
  222. package/docs/PLAN.md +690 -0
  223. package/docs/README.md +148 -0
  224. package/docs/REMOTE_APIS.md +121 -0
  225. package/docs/ROADMAP.md +35 -0
  226. package/docs/UTILITIES.md +95 -0
  227. package/package.json +49 -3
@@ -0,0 +1,166 @@
1
+ /**
2
+ * The launchpad of a workspace (decision D69): one `launchpad.json` titled "Launchpad" next to
3
+ * the projects, to which each application is added when it is created (`rapt new`, `rapt
4
+ * floorplan`, `rapt launchpad add`). An application is referenced by its sources (`source`):
5
+ * `rapt launchpad` builds it with the launchpad.
6
+ */
7
+ import { existsSync, mkdirSync, readFileSync, writeFileSync } from "node:fs";
8
+ import { homedir, tmpdir } from "node:os";
9
+ import path from "node:path";
10
+ import { buildUiLayout } from "../gen/ui/layout.js";
11
+ import { loadProject } from "../input/project.js";
12
+ import { buildModel } from "../ir/builder.js";
13
+ export const LAUNCHPAD_FILE = "launchpad.json";
14
+ export const DEFAULT_LAUNCHPAD_TITLE = "Launchpad";
15
+ /** The group (or section of the first page) the tiles of the registered applications go to. */
16
+ export const DEFAULT_SECTION = "Applications";
17
+ /** How many folders above the project the existing launchpad is looked for. */
18
+ const SEARCH_DEPTH = 4;
19
+ const LAUNCHPAD_PORT = 8090;
20
+ const same = (a, b) => (process.platform === "win32" ? a.toLowerCase() === b.toLowerCase() : a === b);
21
+ /** Folders that are never a workspace: the file system root, the home and the temporary folders. */
22
+ function systemFolder(dir) {
23
+ return path.dirname(dir) === dir || same(dir, path.resolve(homedir())) || same(dir, path.resolve(tmpdir()));
24
+ }
25
+ /**
26
+ * The launchpad of a project: the nearest `launchpad.json` in its folder or above (up to a git
27
+ * repository root, never in the home or temporary folders); else where to create it, in the
28
+ * workspace: the parent folder of the project, or the project itself when it is a repository root
29
+ * or when its parent is a system folder.
30
+ */
31
+ export function findLaunchpad(projectDir) {
32
+ const root = path.resolve(projectDir);
33
+ let dir = root;
34
+ for (let depth = 0; depth <= SEARCH_DEPTH && !systemFolder(dir); depth++) {
35
+ const file = path.join(dir, LAUNCHPAD_FILE);
36
+ if (existsSync(file)) {
37
+ return { file, exists: true };
38
+ }
39
+ if (existsSync(path.join(dir, ".git"))) {
40
+ break;
41
+ }
42
+ dir = path.dirname(dir);
43
+ }
44
+ const parent = path.dirname(root);
45
+ const home = existsSync(path.join(root, ".git")) || systemFolder(parent) ? root : parent;
46
+ return { file: path.join(home, LAUNCHPAD_FILE), exists: false };
47
+ }
48
+ const ID = /^[a-z][a-z0-9-]*$/;
49
+ const slug = (value) => value.toLowerCase().replace(/[^a-z0-9]+/g, "-").replace(/^[^a-z]+|-+$/g, "");
50
+ const posix = (p) => p.split(path.sep).join("/");
51
+ const record = (value) => typeof value === "object" && value !== null && !Array.isArray(value);
52
+ /** listReport → manage, as the actions of the SAP Fiori apps. */
53
+ const ACTIONS = {
54
+ listReport: { action: "manage", icon: "sap-icon://list" },
55
+ worklist: { action: "process", icon: "sap-icon://activity-items" },
56
+ analyticalListPage: { action: "analyze", icon: "sap-icon://business-objects-experience" },
57
+ formEntry: { action: "create", icon: "sap-icon://create-form" },
58
+ };
59
+ /** Every tile of a launchpad.json, in groups or in the sections of its spaces. */
60
+ function tilesOf(source) {
61
+ const groups = Array.isArray(source.groups) ? source.groups : [];
62
+ const sections = Array.isArray(source.spaces)
63
+ ? source.spaces.flatMap((s) => (record(s) && Array.isArray(s["pages"]) ? s["pages"] : [])).flatMap((p) => (record(p) && Array.isArray(p["sections"]) ? p["sections"] : []))
64
+ : [];
65
+ return [...groups, ...sections].flatMap((g) => (record(g) && Array.isArray(g["tiles"]) ? g["tiles"].filter(record) : []));
66
+ }
67
+ /** The default group, or the default section of the first page of the first space. */
68
+ function defaultTiles(source) {
69
+ let groups;
70
+ if (Array.isArray(source.spaces) && source.spaces.length > 0 && record(source.spaces[0])) {
71
+ const space = source.spaces[0];
72
+ if (!Array.isArray(space["pages"]))
73
+ space["pages"] = [];
74
+ const pages = space["pages"];
75
+ if (!record(pages[0]))
76
+ pages.unshift({ title: typeof space["title"] === "string" ? space["title"] : DEFAULT_LAUNCHPAD_TITLE, sections: [] });
77
+ const page = pages[0];
78
+ if (!Array.isArray(page["sections"]))
79
+ page["sections"] = [];
80
+ groups = page["sections"];
81
+ }
82
+ else {
83
+ if (!Array.isArray(source.groups))
84
+ source.groups = [];
85
+ groups = source.groups;
86
+ }
87
+ let group = groups.find((g) => record(g) && g["title"] === DEFAULT_SECTION);
88
+ if (group === undefined) {
89
+ group = { title: DEFAULT_SECTION, tiles: [] };
90
+ groups.push(group);
91
+ }
92
+ if (!Array.isArray(group["tiles"]))
93
+ group["tiles"] = [];
94
+ return group["tiles"];
95
+ }
96
+ /**
97
+ * Adds an application (its sources) and its tile to the launchpad of the workspace, created with
98
+ * the title "Launchpad" when there is none. Idempotent: an application already there (same
99
+ * sources, or same id without sources) is left as it is, and nothing the user wrote is changed.
100
+ */
101
+ export function registerApp(projectDir, options = {}) {
102
+ const root = path.resolve(projectDir);
103
+ const location = options.launchpad === undefined ? findLaunchpad(root) : { file: path.resolve(options.launchpad), exists: existsSync(path.resolve(options.launchpad)) };
104
+ const { file } = location;
105
+ const base = path.dirname(file);
106
+ let source = { title: DEFAULT_LAUNCHPAD_TITLE, apps: [], groups: [] };
107
+ if (location.exists) {
108
+ try {
109
+ const parsed = JSON.parse(readFileSync(file, "utf8"));
110
+ if (!record(parsed))
111
+ throw new Error("not a JSON object");
112
+ source = parsed;
113
+ }
114
+ catch (error) {
115
+ return { file, created: false, added: false, error: `${file} cannot be read: ${error.message}` };
116
+ }
117
+ }
118
+ if (!Array.isArray(source.apps))
119
+ source.apps = [];
120
+ const apps = source.apps.filter(record);
121
+ const relative = posix(path.relative(base, root)) || ".";
122
+ const already = apps.find((a) => typeof a["source"] === "string" && same(path.resolve(base, a["source"]), root));
123
+ const { model } = buildModel(loadProject(root), options.service === undefined ? {} : { service: options.service });
124
+ if (model === undefined) {
125
+ return { file, created: false, added: false, error: `${root}: no application to add to the launchpad (a service definition is needed; rapt check ${root})` };
126
+ }
127
+ let id = slug(path.basename(root));
128
+ if (!ID.test(id))
129
+ id = slug(model.service.name);
130
+ if (!ID.test(id))
131
+ id = "app";
132
+ const sameId = apps.find((a) => a["id"] === id && a["source"] === undefined);
133
+ const existing = already ?? sameId;
134
+ if (existing !== undefined) {
135
+ const url = typeof existing["url"] === "string" ? existing["url"] : "";
136
+ return { file, created: false, added: false, app: { id: String(existing["id"]), source: typeof existing["source"] === "string" ? existing["source"] : relative, url } };
137
+ }
138
+ const ids = new Set(apps.map((a) => a["id"]));
139
+ const stem = id;
140
+ for (let n = 2; ids.has(id); n++)
141
+ id = `${stem}-${n}`;
142
+ // a port of its own for each application run locally (npm start), the launchpad has 8090
143
+ const ports = new Set(apps.map((a) => (typeof a["url"] === "string" ? /:(\d+)/.exec(a["url"])?.[1] : undefined)).filter((p) => p !== undefined).map(Number));
144
+ let port = 8081;
145
+ while (ports.has(port) || port === LAUNCHPAD_PORT)
146
+ port++;
147
+ const app = { id, source: relative, url: `http://localhost:${port}/`, ...(options.service === undefined ? {} : { service: options.service }) };
148
+ const layout = buildUiLayout(model);
149
+ const start = layout.pages.find((p) => p.set === layout.start);
150
+ const floorplan = layout.overview === undefined ? (start?.floorplan ?? "listReport") : "listReport";
151
+ const { action, icon } = ACTIONS[floorplan] ?? ACTIONS["listReport"];
152
+ const semantic = (start?.set ?? model.service.name).replace(/[^A-Za-z0-9_]/g, "_").replace(/^[^A-Za-z]+/, "") || "App";
153
+ const intents = new Set(tilesOf(source).map((t) => t["intent"]));
154
+ let intent = `${semantic}-${action}`;
155
+ for (let n = 2; intents.has(intent); n++)
156
+ intent = `${semantic}${n}-${action}`;
157
+ const tile = { title: layout.title, app: id, intent, icon };
158
+ if (start?.list !== undefined && floorplan !== "formEntry")
159
+ tile["count"] = start.set;
160
+ source.apps.push(app);
161
+ defaultTiles(source).push(tile);
162
+ mkdirSync(base, { recursive: true });
163
+ writeFileSync(file, `${JSON.stringify(source, null, 2)}\n`);
164
+ return { file, created: !location.exists, added: true, app, tile };
165
+ }
166
+ //# sourceMappingURL=workspace.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workspace.js","sourceRoot":"","sources":["../../src/launchpad/workspace.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,36 @@
1
+ /**
2
+ * Chevrotain grammar of service definitions (SRVD): abaplint recognizes the object but does not
3
+ * parse its source.
4
+ *
5
+ * @EndUserText.label: 'Travel service'
6
+ * define service ZRT_UI_TRAVEL {
7
+ * expose ZRT_C_Travel as Travel;
8
+ * }
9
+ */
10
+ import { type Annotations } from "@open-rap/model";
11
+ export interface ExposeAst {
12
+ entity: string;
13
+ wellFormed?: boolean;
14
+ alias?: string;
15
+ annotations: Annotations;
16
+ line: number;
17
+ column: number;
18
+ }
19
+ export interface SrvdAst {
20
+ name: string;
21
+ /** False when the statement does not read `define service … { expose …; }`. */
22
+ wellFormed: boolean;
23
+ annotations: Annotations;
24
+ exposes: ExposeAst[];
25
+ line: number;
26
+ column: number;
27
+ }
28
+ export interface SrvdParseResult {
29
+ ast?: SrvdAst;
30
+ errors: Array<{
31
+ message: string;
32
+ line: number;
33
+ column: number;
34
+ }>;
35
+ }
36
+ export declare function parseSrvd(source: string): SrvdParseResult;
@@ -0,0 +1,193 @@
1
+ /**
2
+ * Chevrotain grammar of service definitions (SRVD): abaplint recognizes the object but does not
3
+ * parse its source.
4
+ *
5
+ * @EndUserText.label: 'Travel service'
6
+ * define service ZRT_UI_TRAVEL {
7
+ * expose ZRT_C_Travel as Travel;
8
+ * }
9
+ */
10
+ import { createToken, EmbeddedActionsParser, Lexer } from "chevrotain";
11
+ import { setAnnotation } from "@open-rap/model";
12
+ const WhiteSpace = createToken({ name: "WhiteSpace", pattern: /\s+/, group: Lexer.SKIPPED });
13
+ const LineComment = createToken({ name: "LineComment", pattern: /\/\/[^\r\n]*/, group: Lexer.SKIPPED });
14
+ const BlockComment = createToken({ name: "BlockComment", pattern: /\/\*[\s\S]*?\*\//, group: Lexer.SKIPPED });
15
+ const StringLiteral = createToken({ name: "StringLiteral", pattern: /'(?:[^'\r\n]|'')*'/ });
16
+ const NumberLiteral = createToken({ name: "NumberLiteral", pattern: /-?\d+(?:\.\d+)?/ });
17
+ const Name = createToken({ name: "Name", pattern: /(?:\/[A-Za-z0-9_]+\/)?[A-Za-z_][A-Za-z0-9_]*/ });
18
+ const At = createToken({ name: "At", pattern: /@/ });
19
+ const Hash = createToken({ name: "Hash", pattern: /#/ });
20
+ const LCurly = createToken({ name: "LCurly", pattern: /\{/ });
21
+ const RCurly = createToken({ name: "RCurly", pattern: /\}/ });
22
+ const LBracket = createToken({ name: "LBracket", pattern: /\[/ });
23
+ const RBracket = createToken({ name: "RBracket", pattern: /\]/ });
24
+ const Semicolon = createToken({ name: "Semicolon", pattern: /;/ });
25
+ const Comma = createToken({ name: "Comma", pattern: /,/ });
26
+ const Colon = createToken({ name: "Colon", pattern: /:/ });
27
+ const Dot = createToken({ name: "Dot", pattern: /\./ });
28
+ const tokens = [
29
+ WhiteSpace,
30
+ BlockComment,
31
+ LineComment,
32
+ StringLiteral,
33
+ NumberLiteral,
34
+ Name,
35
+ At,
36
+ Hash,
37
+ LCurly,
38
+ RCurly,
39
+ LBracket,
40
+ RBracket,
41
+ Semicolon,
42
+ Comma,
43
+ Colon,
44
+ Dot,
45
+ ];
46
+ const srvdLexer = new Lexer(tokens, { ensureOptimizations: false, positionTracking: "full" });
47
+ const img = (token) => (typeof token?.image === "string" ? token.image : "");
48
+ const is = (token, word) => img(token).toLowerCase() === word;
49
+ class SrvdParser extends EmbeddedActionsParser {
50
+ constructor() {
51
+ super(tokens, { recoveryEnabled: false, maxLookahead: 2 });
52
+ this.performSelfAnalysis();
53
+ }
54
+ srvd = this.RULE("srvd", () => {
55
+ const annotations = {};
56
+ this.MANY(() => {
57
+ const annotation = this.SUBRULE(this.annotation);
58
+ this.ACTION(() => setAnnotation(annotations, annotation[0], annotation[1]));
59
+ });
60
+ const define = this.CONSUME(Name, { ERR_MSG: "'define service'" });
61
+ const service = this.CONSUME1(Name);
62
+ const name = this.CONSUME2(Name);
63
+ // "provider contracts odata_v4_ui" and similar additions
64
+ this.MANY1({ GATE: () => this.LA(1).tokenType !== LCurly, DEF: () => this.CONSUME3(Name) });
65
+ this.CONSUME(LCurly);
66
+ const exposes = [];
67
+ this.MANY2(() => {
68
+ const expose = this.SUBRULE(this.expose);
69
+ this.ACTION(() => exposes.push(expose));
70
+ });
71
+ this.CONSUME(RCurly);
72
+ this.OPTION(() => this.CONSUME(Semicolon));
73
+ const wellFormed = is(define, "define") && is(service, "service") && exposes.every((e) => e.wellFormed !== false);
74
+ return { name: img(name), wellFormed, annotations, exposes, line: define.startLine ?? 0, column: define.startColumn ?? 0 };
75
+ });
76
+ expose = this.RULE("expose", () => {
77
+ const annotations = {};
78
+ this.MANY(() => {
79
+ const annotation = this.SUBRULE(this.annotation);
80
+ this.ACTION(() => setAnnotation(annotations, annotation[0], annotation[1]));
81
+ });
82
+ const keyword = this.CONSUME(Name, { ERR_MSG: "'expose'" });
83
+ const entity = this.CONSUME1(Name);
84
+ let alias;
85
+ this.OPTION({
86
+ GATE: () => is(this.LA(1), "as"),
87
+ DEF: () => {
88
+ this.CONSUME2(Name);
89
+ alias = img(this.CONSUME3(Name));
90
+ },
91
+ });
92
+ this.CONSUME(Semicolon);
93
+ const result = { entity: img(entity), wellFormed: is(keyword, "expose"), annotations, line: keyword.startLine ?? 0, column: keyword.startColumn ?? 0 };
94
+ if (alias !== undefined) {
95
+ result.alias = alias;
96
+ }
97
+ return result;
98
+ });
99
+ annotation = this.RULE("annotation", () => {
100
+ this.CONSUME(At);
101
+ const path = this.SUBRULE(this.dottedName);
102
+ let value = true;
103
+ this.OPTION(() => {
104
+ this.CONSUME(Colon);
105
+ value = this.SUBRULE(this.annotationValue);
106
+ });
107
+ return [path, value];
108
+ });
109
+ dottedName = this.RULE("dottedName", () => {
110
+ let text = img(this.CONSUME(Name));
111
+ this.MANY(() => {
112
+ this.CONSUME(Dot);
113
+ text += `.${img(this.CONSUME1(Name))}`;
114
+ });
115
+ return text;
116
+ });
117
+ annotationValue = this.RULE("annotationValue", () => {
118
+ return this.OR([
119
+ { ALT: () => img(this.CONSUME(StringLiteral)).slice(1, -1).replace(/''/g, "'") },
120
+ { ALT: () => Number(img(this.CONSUME(NumberLiteral))) },
121
+ {
122
+ ALT: () => {
123
+ this.CONSUME(Hash);
124
+ return `#${img(this.CONSUME(Name))}`;
125
+ },
126
+ },
127
+ {
128
+ ALT: () => {
129
+ const word = img(this.CONSUME1(Name));
130
+ return word.toLowerCase() === "true" ? true : word.toLowerCase() === "false" ? false : word;
131
+ },
132
+ },
133
+ {
134
+ ALT: () => {
135
+ const values = [];
136
+ this.CONSUME(LBracket);
137
+ this.MANY_SEP({
138
+ SEP: Comma,
139
+ DEF: () => {
140
+ const v = this.SUBRULE(this.annotationValue);
141
+ this.ACTION(() => values.push(v));
142
+ },
143
+ });
144
+ this.CONSUME(RBracket);
145
+ return values;
146
+ },
147
+ },
148
+ {
149
+ ALT: () => {
150
+ const object = {};
151
+ this.CONSUME(LCurly);
152
+ this.MANY_SEP1({
153
+ SEP: Comma,
154
+ DEF: () => {
155
+ const key = this.SUBRULE1(this.dottedName);
156
+ this.CONSUME(Colon);
157
+ const v = this.SUBRULE1(this.annotationValue);
158
+ this.ACTION(() => setAnnotation(object, key, v));
159
+ },
160
+ });
161
+ this.CONSUME(RCurly);
162
+ return object;
163
+ },
164
+ },
165
+ ]);
166
+ });
167
+ }
168
+ let parser;
169
+ export function parseSrvd(source) {
170
+ const lexed = srvdLexer.tokenize(source);
171
+ const errors = lexed.errors.map((e) => ({ message: `unexpected character "${source.substr(e.offset, e.length)}"`, line: e.line ?? 0, column: e.column ?? 0 }));
172
+ if (errors.length > 0) {
173
+ return { errors };
174
+ }
175
+ parser ??= new SrvdParser();
176
+ parser.input = lexed.tokens;
177
+ const ast = parser.srvd();
178
+ for (const e of parser.errors) {
179
+ errors.push({
180
+ message: `syntax error at "${e.token.image}": ${e.message.replace(/\s+/g, " ")}`,
181
+ line: Number.isFinite(e.token.startLine) ? e.token.startLine : 0,
182
+ column: Number.isFinite(e.token.startColumn) ? e.token.startColumn : 0,
183
+ });
184
+ }
185
+ if (errors.length > 0) {
186
+ return { errors };
187
+ }
188
+ if (!ast.wellFormed) {
189
+ errors.push({ message: "expected 'define service <name> { expose <entity> [as <alias>]; … }'", line: ast.line, column: ast.column });
190
+ }
191
+ return errors.length > 0 ? { errors } : { ast, errors };
192
+ }
193
+ //# sourceMappingURL=parser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parser.js","sourceRoot":"","sources":["../../src/srvd/parser.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,WAAW,EAAE,qBAAqB,EAAE,KAAK,EAAe,MAAM,YAAY,CAAC;AACpF,OAAO,EAAE,aAAa,EAAiE,MAAM,iBAAiB,CAAC;AAE/G,MAAM,UAAU,GAAG,WAAW,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;AAC7F,MAAM,WAAW,GAAG,WAAW,CAAC,EAAE,IAAI,EAAE,aAAa,EAAE,OAAO,EAAE,cAAc,EAAE,KAAK,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;AACxG,MAAM,YAAY,GAAG,WAAW,CAAC,EAAE,IAAI,EAAE,cAAc,EAAE,OAAO,EAAE,kBAAkB,EAAE,KAAK,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;AAC9G,MAAM,aAAa,GAAG,WAAW,CAAC,EAAE,IAAI,EAAE,eAAe,EAAE,OAAO,EAAE,oBAAoB,EAAE,CAAC,CAAC;AAC5F,MAAM,aAAa,GAAG,WAAW,CAAC,EAAE,IAAI,EAAE,eAAe,EAAE,OAAO,EAAE,iBAAiB,EAAE,CAAC,CAAC;AACzF,MAAM,IAAI,GAAG,WAAW,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,8CAA8C,EAAE,CAAC,CAAC;AACpG,MAAM,EAAE,GAAG,WAAW,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,CAAC;AACrD,MAAM,IAAI,GAAG,WAAW,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,CAAC;AACzD,MAAM,MAAM,GAAG,WAAW,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;AAC9D,MAAM,MAAM,GAAG,WAAW,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;AAC9D,MAAM,QAAQ,GAAG,WAAW,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;AAClE,MAAM,QAAQ,GAAG,WAAW,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;AAClE,MAAM,SAAS,GAAG,WAAW,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,CAAC;AACnE,MAAM,KAAK,GAAG,WAAW,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,CAAC;AAC3D,MAAM,KAAK,GAAG,WAAW,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,CAAC;AAC3D,MAAM,GAAG,GAAG,WAAW,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;AAExD,MAAM,MAAM,GAAG;IACb,UAAU;IACV,YAAY;IACZ,WAAW;IACX,aAAa;IACb,aAAa;IACb,IAAI;IACJ,EAAE;IACF,IAAI;IACJ,MAAM;IACN,MAAM;IACN,QAAQ;IACR,QAAQ;IACR,SAAS;IACT,KAAK;IACL,KAAK;IACL,GAAG;CACJ,CAAC;AAEF,MAAM,SAAS,GAAG,IAAI,KAAK,CAAC,MAAM,EAAE,EAAE,mBAAmB,EAAE,KAAK,EAAE,gBAAgB,EAAE,MAAM,EAAE,CAAC,CAAC;AAqB9F,MAAM,GAAG,GAAG,CAAC,KAAyB,EAAU,EAAE,CAAC,CAAC,OAAO,KAAK,EAAE,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;AACzG,MAAM,EAAE,GAAG,CAAC,KAAyB,EAAE,IAAY,EAAW,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,WAAW,EAAE,KAAK,IAAI,CAAC;AAEnG,MAAM,UAAW,SAAQ,qBAAqB;IAC5C;QACE,KAAK,CAAC,MAAM,EAAE,EAAE,eAAe,EAAE,KAAK,EAAE,YAAY,EAAE,CAAC,EAAE,CAAC,CAAC;QAC3D,IAAI,CAAC,mBAAmB,EAAE,CAAC;IAC7B,CAAC;IAEM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,GAAY,EAAE;QAC5C,MAAM,WAAW,GAAgB,EAAE,CAAC;QACpC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE;YACb,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;YACjD,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,aAAa,CAAC,WAAW,EAAE,UAAU,CAAC,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC9E,CAAC,CAAC,CAAC;QACH,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,OAAO,EAAE,kBAAkB,EAAE,CAAC,CAAC;QACnE,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QACpC,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QACjC,yDAAyD;QACzD,IAAI,CAAC,KAAK,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS,KAAK,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAC5F,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QACrB,MAAM,OAAO,GAAgB,EAAE,CAAC;QAChC,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE;YACd,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YACzC,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;QAC1C,CAAC,CAAC,CAAC;QACH,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QACrB,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC;QAC3C,MAAM,UAAU,GAAG,EAAE,CAAC,MAAM,EAAE,QAAQ,CAAC,IAAI,EAAE,CAAC,OAAO,EAAE,SAAS,CAAC,IAAI,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,KAAK,KAAK,CAAC,CAAC;QAClH,OAAO,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,CAAC,EAAE,UAAU,EAAE,WAAW,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,CAAC,SAAS,IAAI,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,WAAW,IAAI,CAAC,EAAE,CAAC;IAC7H,CAAC,CAAC,CAAC;IAEK,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,GAAc,EAAE;QACnD,MAAM,WAAW,GAAgB,EAAE,CAAC;QACpC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE;YACb,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;YACjD,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,aAAa,CAAC,WAAW,EAAE,UAAU,CAAC,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC9E,CAAC,CAAC,CAAC;QACH,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,OAAO,EAAE,UAAU,EAAE,CAAC,CAAC;QAC5D,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QACnC,IAAI,KAAyB,CAAC;QAC9B,IAAI,CAAC,MAAM,CAAC;YACV,IAAI,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC;YAChC,GAAG,EAAE,GAAG,EAAE;gBACR,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;gBACpB,KAAK,GAAG,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC;YACnC,CAAC;SACF,CAAC,CAAC;QACH,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;QACxB,MAAM,MAAM,GAAc,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC,EAAE,UAAU,EAAE,EAAE,CAAC,OAAO,EAAE,QAAQ,CAAC,EAAE,WAAW,EAAE,IAAI,EAAE,OAAO,CAAC,SAAS,IAAI,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,WAAW,IAAI,CAAC,EAAE,CAAC;QAClK,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;YACxB,MAAM,CAAC,KAAK,GAAG,KAAK,CAAC;QACvB,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC,CAAC,CAAC;IAEK,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,GAA8B,EAAE;QAC3E,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QACjB,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAC3C,IAAI,KAAK,GAAoB,IAAI,CAAC;QAClC,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE;YACf,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;YACpB,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;QAC7C,CAAC,CAAC,CAAC;QACH,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IACvB,CAAC,CAAC,CAAC;IAEK,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,GAAW,EAAE;QACxD,IAAI,IAAI,GAAG,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;QACnC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE;YACb,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;YAClB,IAAI,IAAI,IAAI,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC;QACzC,CAAC,CAAC,CAAC;QACH,OAAO,IAAI,CAAC;IACd,CAAC,CAAC,CAAC;IAEK,eAAe,GAAG,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE,GAAoB,EAAE;QAC3E,OAAO,IAAI,CAAC,EAAE,CAAC;YACb,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,EAAE;YAChF,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE;YACvD;gBACE,GAAG,EAAE,GAAG,EAAE;oBACR,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;oBACnB,OAAO,IAAI,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC;gBACvC,CAAC;aACF;YACD;gBACE,GAAG,EAAE,GAAoB,EAAE;oBACzB,MAAM,IAAI,GAAG,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC;oBACtC,OAAO,IAAI,CAAC,WAAW,EAAE,KAAK,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,KAAK,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC;gBAC9F,CAAC;aACF;YACD;gBACE,GAAG,EAAE,GAAoB,EAAE;oBACzB,MAAM,MAAM,GAAsB,EAAE,CAAC;oBACrC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;oBACvB,IAAI,CAAC,QAAQ,CAAC;wBACZ,GAAG,EAAE,KAAK;wBACV,GAAG,EAAE,GAAG,EAAE;4BACR,MAAM,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;4BAC7C,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;wBACpC,CAAC;qBACF,CAAC,CAAC;oBACH,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;oBACvB,OAAO,MAAM,CAAC;gBAChB,CAAC;aACF;YACD;gBACE,GAAG,EAAE,GAAoB,EAAE;oBACzB,MAAM,MAAM,GAAqB,EAAE,CAAC;oBACpC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;oBACrB,IAAI,CAAC,SAAS,CAAC;wBACb,GAAG,EAAE,KAAK;wBACV,GAAG,EAAE,GAAG,EAAE;4BACR,MAAM,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;4BAC3C,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;4BACpB,MAAM,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;4BAC9C,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,aAAa,CAAC,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC;wBACnD,CAAC;qBACF,CAAC,CAAC;oBACH,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;oBACrB,OAAO,MAAM,CAAC;gBAChB,CAAC;aACF;SACF,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;CACJ;AAED,IAAI,MAA8B,CAAC;AAOnC,MAAM,UAAU,SAAS,CAAC,MAAc;IACtC,MAAM,KAAK,GAAG,SAAS,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;IACzC,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,yBAAyB,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;IAC/J,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACtB,OAAO,EAAE,MAAM,EAAE,CAAC;IACpB,CAAC;IACD,MAAM,KAAK,IAAI,UAAU,EAAE,CAAC;IAC5B,MAAM,CAAC,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC;IAC5B,MAAM,GAAG,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC;IAC1B,KAAK,MAAM,CAAC,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;QAC9B,MAAM,CAAC,IAAI,CAAC;YACV,OAAO,EAAE,oBAAoB,CAAC,CAAC,KAAK,CAAC,KAAK,MAAM,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE;YAChF,IAAI,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,CAAE,CAAC,CAAC,KAAK,CAAC,SAAoB,CAAC,CAAC,CAAC,CAAC;YAC5E,MAAM,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,CAAE,CAAC,CAAC,KAAK,CAAC,WAAsB,CAAC,CAAC,CAAC,CAAC;SACnF,CAAC,CAAC;IACL,CAAC;IACD,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACtB,OAAO,EAAE,MAAM,EAAE,CAAC;IACpB,CAAC;IACD,IAAI,CAAC,GAAG,CAAC,UAAU,EAAE,CAAC;QACpB,MAAM,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,sEAAsE,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC;IACvI,CAAC;IACD,OAAO,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,CAAC;AAC1D,CAAC"}
@@ -0,0 +1,18 @@
1
+ /**
2
+ * Reference data of the standard CDS views (I_Currency, I_UnitOfMeasure, I_Country, I_Language):
3
+ * on SAP, the content of these tables is delivered and maintained by SAP. English texts.
4
+ * Compact form: one entry per line, fields separated by `|`.
5
+ */
6
+ /** Currency | decimals | name (ISO 4217). */
7
+ export declare const CURRENCIES = "AED|2|UAE Dirham\nAFN|2|Afghani\nALL|2|Lek\nAMD|2|Armenian Dram\nANG|2|Netherlands Antillean Guilder\nAOA|2|Kwanza\nARS|2|Argentine Peso\nAUD|2|Australian Dollar\nAWG|2|Aruban Florin\nAZN|2|Azerbaijan Manat\nBAM|2|Convertible Mark\nBBD|2|Barbados Dollar\nBDT|2|Taka\nBGN|2|Bulgarian Lev\nBHD|3|Bahraini Dinar\nBIF|0|Burundi Franc\nBMD|2|Bermudian Dollar\nBND|2|Brunei Dollar\nBOB|2|Boliviano\nBRL|2|Brazilian Real\nBSD|2|Bahamian Dollar\nBTN|2|Ngultrum\nBWP|2|Pula\nBYN|2|Belarusian Ruble\nBZD|2|Belize Dollar\nCAD|2|Canadian Dollar\nCDF|2|Congolese Franc\nCHF|2|Swiss Franc\nCLP|0|Chilean Peso\nCNY|2|Yuan Renminbi\nCOP|2|Colombian Peso\nCRC|2|Costa Rican Colon\nCUP|2|Cuban Peso\nCVE|2|Cabo Verde Escudo\nCZK|2|Czech Koruna\nDJF|0|Djibouti Franc\nDKK|2|Danish Krone\nDOP|2|Dominican Peso\nDZD|2|Algerian Dinar\nEGP|2|Egyptian Pound\nERN|2|Nakfa\nETB|2|Ethiopian Birr\nEUR|2|Euro\nFJD|2|Fiji Dollar\nFKP|2|Falkland Islands Pound\nGBP|2|Pound Sterling\nGEL|2|Lari\nGHS|2|Ghana Cedi\nGIP|2|Gibraltar Pound\nGMD|2|Dalasi\nGNF|0|Guinean Franc\nGTQ|2|Quetzal\nGYD|2|Guyana Dollar\nHKD|2|Hong Kong Dollar\nHNL|2|Lempira\nHTG|2|Gourde\nHUF|2|Forint\nIDR|2|Rupiah\nILS|2|New Israeli Sheqel\nINR|2|Indian Rupee\nIQD|3|Iraqi Dinar\nIRR|2|Iranian Rial\nISK|0|Iceland Krona\nJMD|2|Jamaican Dollar\nJOD|3|Jordanian Dinar\nJPY|0|Yen\nKES|2|Kenyan Shilling\nKGS|2|Som\nKHR|2|Riel\nKMF|0|Comorian Franc\nKPW|2|North Korean Won\nKRW|0|Won\nKWD|3|Kuwaiti Dinar\nKYD|2|Cayman Islands Dollar\nKZT|2|Tenge\nLAK|2|Lao Kip\nLBP|2|Lebanese Pound\nLKR|2|Sri Lanka Rupee\nLRD|2|Liberian Dollar\nLSL|2|Loti\nLYD|3|Libyan Dinar\nMAD|2|Moroccan Dirham\nMDL|2|Moldovan Leu\nMGA|2|Malagasy Ariary\nMKD|2|Denar\nMMK|2|Kyat\nMNT|2|Tugrik\nMOP|2|Pataca\nMRU|2|Ouguiya\nMUR|2|Mauritius Rupee\nMVR|2|Rufiyaa\nMWK|2|Malawi Kwacha\nMXN|2|Mexican Peso\nMYR|2|Malaysian Ringgit\nMZN|2|Mozambique Metical\nNAD|2|Namibia Dollar\nNGN|2|Naira\nNIO|2|Cordoba Oro\nNOK|2|Norwegian Krone\nNPR|2|Nepalese Rupee\nNZD|2|New Zealand Dollar\nOMR|3|Rial Omani\nPAB|2|Balboa\nPEN|2|Sol\nPGK|2|Kina\nPHP|2|Philippine Peso\nPKR|2|Pakistan Rupee\nPLN|2|Zloty\nPYG|0|Guarani\nQAR|2|Qatari Rial\nRON|2|Romanian Leu\nRSD|2|Serbian Dinar\nRUB|2|Russian Ruble\nRWF|0|Rwanda Franc\nSAR|2|Saudi Riyal\nSBD|2|Solomon Islands Dollar\nSCR|2|Seychelles Rupee\nSDG|2|Sudanese Pound\nSEK|2|Swedish Krona\nSGD|2|Singapore Dollar\nSHP|2|Saint Helena Pound\nSLE|2|Leone\nSOS|2|Somali Shilling\nSRD|2|Surinam Dollar\nSSP|2|South Sudanese Pound\nSTN|2|Dobra\nSVC|2|El Salvador Colon\nSYP|2|Syrian Pound\nSZL|2|Lilangeni\nTHB|2|Baht\nTJS|2|Somoni\nTMT|2|Turkmenistan New Manat\nTND|3|Tunisian Dinar\nTOP|2|Pa'anga\nTRY|2|Turkish Lira\nTTD|2|Trinidad and Tobago Dollar\nTWD|2|New Taiwan Dollar\nTZS|2|Tanzanian Shilling\nUAH|2|Hryvnia\nUGX|0|Uganda Shilling\nUSD|2|US Dollar\nUYU|2|Peso Uruguayo\nUZS|2|Uzbekistan Sum\nVES|2|Bolivar Soberano\nVND|0|Dong\nVUV|0|Vatu\nWST|2|Tala\nXAF|0|CFA Franc BEAC\nXCD|2|East Caribbean Dollar\nXOF|0|CFA Franc BCEAO\nXPF|0|CFP Franc\nYER|2|Yemeni Rial\nZAR|2|Rand\nZMW|2|Zambian Kwacha\nZWG|2|Zimbabwe Gold";
8
+ /** Unit (internal SAP code) | ISO code | dimension | decimals | name. */
9
+ export declare const UNITS = "ST|PCE|AAAADL|0|Piece\nEA|EA|AAAADL|0|Each\nPAK|PK|AAAADL|0|Pack\nKAR|CT|AAAADL|0|Carton\nPAL|PF|AAAADL|0|Pallet\n%|P1|PROPOR|2|Percent\nKG|KGM|MASS|3|Kilogram\nG|GRM|MASS|3|Gram\nMG|MGM|MASS|3|Milligram\nTO|TNE|MASS|3|Ton\nLB|LBR|MASS|3|Pound\nM|MTR|LENGTH|3|Meter\nCM|CMT|LENGTH|2|Centimeter\nMM|MMT|LENGTH|0|Millimeter\nKM|KMT|LENGTH|3|Kilometer\nIN|INH|LENGTH|2|Inch\nFT|FOT|LENGTH|2|Foot\nM2|MTK|SURFAC|3|Square meter\nM3|MTQ|VOLUME|3|Cubic meter\nL|LTR|VOLUME|3|Liter\nML|MLT|VOLUME|0|Milliliter\nS|SEC|TIME|0|Second\nMIN|MIN|TIME|0|Minute\nH|HUR|TIME|2|Hour\nTAG|DAY|TIME|0|Day\nWCH|WEE|TIME|0|Week\nMON|MON|TIME|0|Month\nJHR|ANN|TIME|0|Year\nKWH|KWH|ENERGY|3|Kilowatt hour";
10
+ /** Language (SAP key) | ISO code | name. */
11
+ export declare const LANGUAGES = "E|EN|English\nD|DE|German\nF|FR|French\nS|ES|Spanish\nI|IT|Italian\nP|PT|Portuguese\nN|NL|Dutch\nK|DA|Danish\nV|SV|Swedish\nO|NO|Norwegian\nU|FI|Finnish\nL|PL|Polish\nC|CS|Czech\nQ|SK|Slovak\nH|HU|Hungarian\nR|RU|Russian\nT|TR|Turkish\nG|EL|Greek\nJ|JA|Japanese\n3|KO|Korean\n1|ZH|Chinese\nA|AR|Arabic\nB|HE|Hebrew\n2|TH|Thai\n4|RO|Romanian\n5|SL|Slovenian\n6|HR|Croatian\n0|SR|Serbian\n8|UK|Ukrainian\n9|ET|Estonian\nW|BG|Bulgarian";
12
+ /** Country (ISO 3166 alpha-2) | alpha-3 | currency | EU member (X) | name. */
13
+ export declare const COUNTRIES = "AD|AND|EUR||Andorra\nAE|ARE|AED||United Arab Emirates\nAF|AFG|AFN||Afghanistan\nAG|ATG|XCD||Antigua and Barbuda\nAL|ALB|ALL||Albania\nAM|ARM|AMD||Armenia\nAO|AGO|AOA||Angola\nAR|ARG|ARS||Argentina\nAT|AUT|EUR|X|Austria\nAU|AUS|AUD||Australia\nAZ|AZE|AZN||Azerbaijan\nBA|BIH|BAM||Bosnia and Herzegovina\nBB|BRB|BBD||Barbados\nBD|BGD|BDT||Bangladesh\nBE|BEL|EUR|X|Belgium\nBF|BFA|XOF||Burkina Faso\nBG|BGR|BGN|X|Bulgaria\nBH|BHR|BHD||Bahrain\nBI|BDI|BIF||Burundi\nBJ|BEN|XOF||Benin\nBN|BRN|BND||Brunei Darussalam\nBO|BOL|BOB||Bolivia\nBR|BRA|BRL||Brazil\nBS|BHS|BSD||Bahamas\nBT|BTN|BTN||Bhutan\nBW|BWA|BWP||Botswana\nBY|BLR|BYN||Belarus\nBZ|BLZ|BZD||Belize\nCA|CAN|CAD||Canada\nCD|COD|CDF||Congo, Democratic Republic\nCF|CAF|XAF||Central African Republic\nCG|COG|XAF||Congo\nCH|CHE|CHF||Switzerland\nCI|CIV|XOF||Cote d'Ivoire\nCL|CHL|CLP||Chile\nCM|CMR|XAF||Cameroon\nCN|CHN|CNY||China\nCO|COL|COP||Colombia\nCR|CRI|CRC||Costa Rica\nCU|CUB|CUP||Cuba\nCV|CPV|CVE||Cabo Verde\nCY|CYP|EUR|X|Cyprus\nCZ|CZE|CZK|X|Czechia\nDE|DEU|EUR|X|Germany\nDJ|DJI|DJF||Djibouti\nDK|DNK|DKK|X|Denmark\nDM|DMA|XCD||Dominica\nDO|DOM|DOP||Dominican Republic\nDZ|DZA|DZD||Algeria\nEC|ECU|USD||Ecuador\nEE|EST|EUR|X|Estonia\nEG|EGY|EGP||Egypt\nER|ERI|ERN||Eritrea\nES|ESP|EUR|X|Spain\nET|ETH|ETB||Ethiopia\nFI|FIN|EUR|X|Finland\nFJ|FJI|FJD||Fiji\nFM|FSM|USD||Micronesia\nFR|FRA|EUR|X|France\nGA|GAB|XAF||Gabon\nGB|GBR|GBP||United Kingdom\nGD|GRD|XCD||Grenada\nGE|GEO|GEL||Georgia\nGH|GHA|GHS||Ghana\nGM|GMB|GMD||Gambia\nGN|GIN|GNF||Guinea\nGQ|GNQ|XAF||Equatorial Guinea\nGR|GRC|EUR|X|Greece\nGT|GTM|GTQ||Guatemala\nGW|GNB|XOF||Guinea-Bissau\nGY|GUY|GYD||Guyana\nHK|HKG|HKD||Hong Kong\nHN|HND|HNL||Honduras\nHR|HRV|EUR|X|Croatia\nHT|HTI|HTG||Haiti\nHU|HUN|HUF|X|Hungary\nID|IDN|IDR||Indonesia\nIE|IRL|EUR|X|Ireland\nIL|ISR|ILS||Israel\nIN|IND|INR||India\nIQ|IRQ|IQD||Iraq\nIR|IRN|IRR||Iran\nIS|ISL|ISK||Iceland\nIT|ITA|EUR|X|Italy\nJM|JAM|JMD||Jamaica\nJO|JOR|JOD||Jordan\nJP|JPN|JPY||Japan\nKE|KEN|KES||Kenya\nKG|KGZ|KGS||Kyrgyzstan\nKH|KHM|KHR||Cambodia\nKI|KIR|AUD||Kiribati\nKM|COM|KMF||Comoros\nKN|KNA|XCD||Saint Kitts and Nevis\nKP|PRK|KPW||Korea, Democratic People's Republic\nKR|KOR|KRW||Korea, Republic\nKW|KWT|KWD||Kuwait\nKZ|KAZ|KZT||Kazakhstan\nLA|LAO|LAK||Laos\nLB|LBN|LBP||Lebanon\nLC|LCA|XCD||Saint Lucia\nLI|LIE|CHF||Liechtenstein\nLK|LKA|LKR||Sri Lanka\nLR|LBR|LRD||Liberia\nLS|LSO|LSL||Lesotho\nLT|LTU|EUR|X|Lithuania\nLU|LUX|EUR|X|Luxembourg\nLV|LVA|EUR|X|Latvia\nLY|LBY|LYD||Libya\nMA|MAR|MAD||Morocco\nMC|MCO|EUR||Monaco\nMD|MDA|MDL||Moldova\nME|MNE|EUR||Montenegro\nMG|MDG|MGA||Madagascar\nMH|MHL|USD||Marshall Islands\nMK|MKD|MKD||North Macedonia\nML|MLI|XOF||Mali\nMM|MMR|MMK||Myanmar\nMN|MNG|MNT||Mongolia\nMO|MAC|MOP||Macao\nMR|MRT|MRU||Mauritania\nMT|MLT|EUR|X|Malta\nMU|MUS|MUR||Mauritius\nMV|MDV|MVR||Maldives\nMW|MWI|MWK||Malawi\nMX|MEX|MXN||Mexico\nMY|MYS|MYR||Malaysia\nMZ|MOZ|MZN||Mozambique\nNA|NAM|NAD||Namibia\nNE|NER|XOF||Niger\nNG|NGA|NGN||Nigeria\nNI|NIC|NIO||Nicaragua\nNL|NLD|EUR|X|Netherlands\nNO|NOR|NOK||Norway\nNP|NPL|NPR||Nepal\nNR|NRU|AUD||Nauru\nNZ|NZL|NZD||New Zealand\nOM|OMN|OMR||Oman\nPA|PAN|PAB||Panama\nPE|PER|PEN||Peru\nPG|PNG|PGK||Papua New Guinea\nPH|PHL|PHP||Philippines\nPK|PAK|PKR||Pakistan\nPL|POL|PLN|X|Poland\nPT|PRT|EUR|X|Portugal\nPW|PLW|USD||Palau\nPY|PRY|PYG||Paraguay\nQA|QAT|QAR||Qatar\nRO|ROU|RON|X|Romania\nRS|SRB|RSD||Serbia\nRU|RUS|RUB||Russian Federation\nRW|RWA|RWF||Rwanda\nSA|SAU|SAR||Saudi Arabia\nSB|SLB|SBD||Solomon Islands\nSC|SYC|SCR||Seychelles\nSD|SDN|SDG||Sudan\nSE|SWE|SEK|X|Sweden\nSG|SGP|SGD||Singapore\nSI|SVN|EUR|X|Slovenia\nSK|SVK|EUR|X|Slovakia\nSL|SLE|SLE||Sierra Leone\nSM|SMR|EUR||San Marino\nSN|SEN|XOF||Senegal\nSO|SOM|SOS||Somalia\nSR|SUR|SRD||Suriname\nSS|SSD|SSP||South Sudan\nST|STP|STN||Sao Tome and Principe\nSV|SLV|USD||El Salvador\nSY|SYR|SYP||Syria\nSZ|SWZ|SZL||Eswatini\nTD|TCD|XAF||Chad\nTG|TGO|XOF||Togo\nTH|THA|THB||Thailand\nTJ|TJK|TJS||Tajikistan\nTL|TLS|USD||Timor-Leste\nTM|TKM|TMT||Turkmenistan\nTN|TUN|TND||Tunisia\nTO|TON|TOP||Tonga\nTR|TUR|TRY||Turkey\nTT|TTO|TTD||Trinidad and Tobago\nTV|TUV|AUD||Tuvalu\nTW|TWN|TWD||Taiwan\nTZ|TZA|TZS||Tanzania\nUA|UKR|UAH||Ukraine\nUG|UGA|UGX||Uganda\nUS|USA|USD||United States\nUY|URY|UYU||Uruguay\nUZ|UZB|UZS||Uzbekistan\nVA|VAT|EUR||Holy See\nVC|VCT|XCD||Saint Vincent and the Grenadines\nVE|VEN|VES||Venezuela\nVN|VNM|VND||Viet Nam\nVU|VUT|VUV||Vanuatu\nWS|WSM|WST||Samoa\nYE|YEM|YER||Yemen\nZA|ZAF|ZAR||South Africa\nZM|ZMB|ZMW||Zambia\nZW|ZWE|ZWG||Zimbabwe";
14
+ export declare function rows(text: string): string[][];
15
+ /** Country | region (SAP code) | name. United States, Canada, Germany, Australia. */
16
+ export declare const REGIONS = "US|AL|Alabama\nUS|AK|Alaska\nUS|AZ|Arizona\nUS|AR|Arkansas\nUS|CA|California\nUS|CO|Colorado\nUS|CT|Connecticut\nUS|DE|Delaware\nUS|DC|District of Columbia\nUS|FL|Florida\nUS|GA|Georgia\nUS|HI|Hawaii\nUS|ID|Idaho\nUS|IL|Illinois\nUS|IN|Indiana\nUS|IA|Iowa\nUS|KS|Kansas\nUS|KY|Kentucky\nUS|LA|Louisiana\nUS|ME|Maine\nUS|MD|Maryland\nUS|MA|Massachusetts\nUS|MI|Michigan\nUS|MN|Minnesota\nUS|MS|Mississippi\nUS|MO|Missouri\nUS|MT|Montana\nUS|NE|Nebraska\nUS|NV|Nevada\nUS|NH|New Hampshire\nUS|NJ|New Jersey\nUS|NM|New Mexico\nUS|NY|New York\nUS|NC|North Carolina\nUS|ND|North Dakota\nUS|OH|Ohio\nUS|OK|Oklahoma\nUS|OR|Oregon\nUS|PA|Pennsylvania\nUS|RI|Rhode Island\nUS|SC|South Carolina\nUS|SD|South Dakota\nUS|TN|Tennessee\nUS|TX|Texas\nUS|UT|Utah\nUS|VT|Vermont\nUS|VA|Virginia\nUS|WA|Washington\nUS|WV|West Virginia\nUS|WI|Wisconsin\nUS|WY|Wyoming\nCA|AB|Alberta\nCA|BC|British Columbia\nCA|MB|Manitoba\nCA|NB|New Brunswick\nCA|NL|Newfoundland and Labrador\nCA|NS|Nova Scotia\nCA|NT|Northwest Territories\nCA|NU|Nunavut\nCA|ON|Ontario\nCA|PE|Prince Edward Island\nCA|QC|Quebec\nCA|SK|Saskatchewan\nCA|YT|Yukon\nDE|01|Schleswig-Holstein\nDE|02|Hamburg\nDE|03|Lower Saxony\nDE|04|Bremen\nDE|05|North Rhine-Westphalia\nDE|06|Hesse\nDE|07|Rhineland-Palatinate\nDE|08|Baden-Wuerttemberg\nDE|09|Bavaria\nDE|10|Saarland\nDE|11|Berlin\nDE|12|Brandenburg\nDE|13|Mecklenburg-Western Pomerania\nDE|14|Saxony\nDE|15|Saxony-Anhalt\nDE|16|Thuringia\nAU|ACT|Australian Capital Territory\nAU|NSW|New South Wales\nAU|NT|Northern Territory\nAU|QLD|Queensland\nAU|SA|South Australia\nAU|TAS|Tasmania\nAU|VIC|Victoria\nAU|WA|Western Australia";
17
+ /** Time zone (SAP key) | UTC difference | IANA time zone | name. */
18
+ export declare const TIMEZONES = "UTC|+0000|Etc/UTC|Coordinated Universal Time\nGMTUK|+0000|Europe/London|United Kingdom\nCET|+0100|Europe/Paris|Central Europe\nEET|+0200|Europe/Athens|Eastern Europe\nRUS03|+0300|Europe/Moscow|Moscow\nUAE|+0400|Asia/Dubai|United Arab Emirates\nINDIA|+0530|Asia/Kolkata|India\nCHINA|+0800|Asia/Shanghai|China\nSINGAP|+0800|Asia/Singapore|Singapore\nJAPAN|+0900|Asia/Tokyo|Japan\nAUSNSW|+1000|Australia/Sydney|Australia (New South Wales)\nNZTA|+1200|Pacific/Auckland|New Zealand\nBRAZIL|-0300|America/Sao_Paulo|Brazil (Sao Paulo)\nEST|-0500|America/New_York|Eastern Time (US)\nCST|-0600|America/Chicago|Central Time (US)\nMST|-0700|America/Denver|Mountain Time (US)\nPST|-0800|America/Los_Angeles|Pacific Time (US)\nALAW|-0900|America/Anchorage|Alaska\nHAW|-1000|Pacific/Honolulu|Hawaii";