@open-rap/compiler 0.1.2 → 0.2.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.
@@ -0,0 +1,117 @@
1
+ /**
2
+ * `rapt launchpad dev <launchpad.json>`: the launchpad of the workspace in development (decision
3
+ * D75). Each application with sources (`source`) runs as in `rapt dev` (built, embedded PGlite,
4
+ * rebuilt on change) on the port of its `url`; the launchpad runs in front of them, as the
5
+ * generated one (`rapt launchpad`, `npm start`), and is generated again when launchpad.json or the
6
+ * service of an application changes. Nothing to install, no Docker: one command for every
7
+ * application of the workspace.
8
+ */
9
+ import { Diagnostics, type Diagnostic } from "../diagnostics.js";
10
+ import { type DevEvent, type DiagnosticCounts } from "../dev.js";
11
+ /** An application of launchpad.json that rapt launchpad dev runs from its sources. */
12
+ export interface DevApp {
13
+ id: string;
14
+ /** The folder of its sources. */
15
+ root: string;
16
+ /** The port of its url, where it runs. */
17
+ port: number;
18
+ url: string;
19
+ service?: string;
20
+ }
21
+ export interface DevPlan {
22
+ apps: DevApp[];
23
+ diagnostics: Diagnostics;
24
+ }
25
+ /**
26
+ * The applications of a launchpad.json run by rapt launchpad dev: those with sources, each on the
27
+ * local port of its url (LPD010 when it cannot be). Those without sources (`build`, `url` only) are
28
+ * reached at their url, where they must already run.
29
+ */
30
+ export declare function launchpadDevPlan(file: string, launchpadPort?: number): DevPlan;
31
+ export interface LaunchpadDevOptions {
32
+ /** Port of the launchpad (default 8090). */
33
+ port?: number;
34
+ /** Interface of the launchpad and of the applications (default: HOST, else 127.0.0.1). */
35
+ host?: string;
36
+ /** Folder of the development launchpad (default: `.rapt/launchpad` next to launchpad.json). */
37
+ outDir?: string;
38
+ /** @open-rap/runtime package (default: next to the compiler). */
39
+ runtimeDir?: string;
40
+ env?: Record<string, string | undefined>;
41
+ out?: (line: string) => void;
42
+ err?: (line: string) => void;
43
+ /** Events (`rapt launchpad dev --json`); replaces the text output. */
44
+ events?: (event: LaunchpadDevEvent) => void;
45
+ }
46
+ /** What happens in a session: the events of each application (with its id), and of the launchpad. */
47
+ export type LaunchpadDevEvent = {
48
+ type: "apps";
49
+ file: string;
50
+ apps: Array<{
51
+ id: string;
52
+ root: string;
53
+ url: string;
54
+ }>;
55
+ } | {
56
+ type: "launchpad-diagnostics";
57
+ diagnostics: Array<Diagnostic & {
58
+ path?: string;
59
+ }>;
60
+ counts: DiagnosticCounts;
61
+ } | {
62
+ type: "launchpad-waiting";
63
+ apps: string[];
64
+ } | {
65
+ type: "launchpad-ready";
66
+ url: string;
67
+ } | {
68
+ type: "launchpad-failed";
69
+ message: string;
70
+ } | (DevEvent & {
71
+ app?: string;
72
+ });
73
+ export declare class LaunchpadDevSession {
74
+ private readonly options;
75
+ readonly file: string;
76
+ readonly outDir: string;
77
+ readonly port: number;
78
+ private readonly env;
79
+ private readonly host;
80
+ private readonly out;
81
+ private readonly err;
82
+ private readonly runtimeDir;
83
+ private readonly sessions;
84
+ private server;
85
+ private config;
86
+ private watcher;
87
+ private timer;
88
+ private refreshing;
89
+ private started;
90
+ private closed;
91
+ constructor(file: string, options?: LaunchpadDevOptions);
92
+ /** The URL of the launchpad. */
93
+ get url(): string;
94
+ /** The applications running, by id. */
95
+ get apps(): DevApp[];
96
+ /**
97
+ * Starts the applications (one first build each), then the launchpad, and watches launchpad.json.
98
+ * False when launchpad.json does not allow it (LPD diagnostics), nothing is started then.
99
+ */
100
+ start(): Promise<boolean>;
101
+ close(): Promise<void>;
102
+ private emit;
103
+ /** The applications of launchpad.json: those added are started, those removed or moved stopped. */
104
+ private reconcile;
105
+ private onAppEvent;
106
+ private emitDiagnostics;
107
+ private watchFile;
108
+ /**
109
+ * One refresh at a time, in order. A refresh that throws (a file that cannot be written) is
110
+ * reported and does not stop the next ones: the chain never rejects.
111
+ */
112
+ private scheduleRefresh;
113
+ /** Generates the launchpad from launchpad.json and the running applications; restarts it when it changed. */
114
+ private refresh;
115
+ private startServer;
116
+ private stopServer;
117
+ }
@@ -0,0 +1,395 @@
1
+ /**
2
+ * `rapt launchpad dev <launchpad.json>`: the launchpad of the workspace in development (decision
3
+ * D75). Each application with sources (`source`) runs as in `rapt dev` (built, embedded PGlite,
4
+ * rebuilt on change) on the port of its `url`; the launchpad runs in front of them, as the
5
+ * generated one (`rapt launchpad`, `npm start`), and is generated again when launchpad.json or the
6
+ * service of an application changes. Nothing to install, no Docker: one command for every
7
+ * application of the workspace.
8
+ */
9
+ import { spawn } from "node:child_process";
10
+ import { existsSync, mkdirSync, readFileSync, watch, writeFileSync } from "node:fs";
11
+ import path from "node:path";
12
+ import { pathToFileURL } from "node:url";
13
+ import { countDiagnostics, Diagnostics, formatDiagnostic } from "../diagnostics.js";
14
+ import { DevSession, devEventLines, linkFolder, READY, realPath, runtimeDependencies } from "../dev.js";
15
+ import { generateLaunchpadUi } from "../gen/launchpad/index.js";
16
+ import { packageDir } from "../gen/vendor.js";
17
+ import { resolveLaunchpad } from "./config.js";
18
+ import { LAUNCHPAD_PORT } from "./workspace.js";
19
+ const ID = /^[a-z][a-z0-9-]*$/;
20
+ const LOCAL_HOSTS = new Set(["localhost", "127.0.0.1", "[::1]"]);
21
+ /**
22
+ * The applications of a launchpad.json run by rapt launchpad dev: those with sources, each on the
23
+ * local port of its url (LPD010 when it cannot be). Those without sources (`build`, `url` only) are
24
+ * reached at their url, where they must already run.
25
+ */
26
+ export function launchpadDevPlan(file, launchpadPort = LAUNCHPAD_PORT) {
27
+ const diagnostics = new Diagnostics();
28
+ const at = { file };
29
+ let entries = [];
30
+ try {
31
+ const source = JSON.parse(readFileSync(file, "utf8"));
32
+ entries = Array.isArray(source?.apps) ? source.apps : [];
33
+ }
34
+ catch (error) {
35
+ diagnostics.error("LPD001", `launchpad.json cannot be read: ${error.message}`, at);
36
+ return { apps: [], diagnostics };
37
+ }
38
+ const base = path.dirname(path.resolve(file));
39
+ const apps = [];
40
+ for (const entry of entries) {
41
+ const id = entry?.["id"];
42
+ if (typeof id !== "string" || !ID.test(id)) {
43
+ continue; // reported by resolveLaunchpad (LPD001)
44
+ }
45
+ const url = typeof entry?.["url"] === "string" ? entry["url"] : "";
46
+ const source = entry?.["source"];
47
+ if (typeof source !== "string" || source.trim() === "" || entry?.["build"] !== undefined) {
48
+ diagnostics.warning("LPD010", `the application ${id} has no sources (source): rapt launchpad dev does not start it, it must already run at ${url || "its url"}`, at);
49
+ continue;
50
+ }
51
+ const root = path.resolve(base, source);
52
+ if (!existsSync(root)) {
53
+ diagnostics.error("LPD009", `the application ${id}: no folder ${source} (source, relative to launchpad.json)`, at);
54
+ continue;
55
+ }
56
+ let parsed;
57
+ try {
58
+ parsed = new URL(url);
59
+ }
60
+ catch {
61
+ parsed = undefined;
62
+ }
63
+ const port = parsed === undefined ? Number.NaN : Number(parsed.port);
64
+ if (parsed === undefined || parsed.protocol !== "http:" || !LOCAL_HOSTS.has(parsed.hostname) || !Number.isInteger(port) || port <= 0) {
65
+ diagnostics.error("LPD010", `the application ${id}: rapt launchpad dev runs it on the port of its url, a local one (http://localhost:<port>/), not ${JSON.stringify(url)}`, at);
66
+ continue;
67
+ }
68
+ if (port === launchpadPort) {
69
+ diagnostics.error("LPD010", `the application ${id}: port ${port} is the port of the launchpad; give it another one in its url`, at);
70
+ continue;
71
+ }
72
+ const other = apps.find((a) => a.port === port);
73
+ if (other !== undefined) {
74
+ diagnostics.error("LPD010", `the applications ${other.id} and ${id} have the same port ${port}; give each one its own in its url`, at);
75
+ continue;
76
+ }
77
+ const service = entry?.["service"];
78
+ apps.push({ id, root, port, url: `http://localhost:${port}/`, ...(typeof service === "string" ? { service } : {}) });
79
+ }
80
+ if (apps.length === 0 && !diagnostics.hasErrors()) {
81
+ diagnostics.error("LPD010", "no application of launchpad.json has sources (source) to run: add one with rapt launchpad add <project>", at);
82
+ }
83
+ return { apps, diagnostics };
84
+ }
85
+ export class LaunchpadDevSession {
86
+ options;
87
+ file;
88
+ outDir;
89
+ port;
90
+ env;
91
+ host;
92
+ out;
93
+ err;
94
+ runtimeDir;
95
+ sessions = new Map();
96
+ server;
97
+ config;
98
+ watcher;
99
+ timer;
100
+ refreshing = Promise.resolve();
101
+ started = false;
102
+ closed = false;
103
+ constructor(file, options = {}) {
104
+ this.options = options;
105
+ this.file = realPath(path.resolve(file));
106
+ this.outDir = path.resolve(options.outDir ?? path.join(path.dirname(this.file), ".rapt", "launchpad"));
107
+ this.port = options.port ?? LAUNCHPAD_PORT;
108
+ this.env = options.env ?? process.env;
109
+ this.host = options.host ?? this.env["HOST"] ?? "127.0.0.1";
110
+ this.out = options.out ?? ((line) => process.stdout.write(`${line}\n`));
111
+ this.err = options.err ?? ((line) => process.stderr.write(`${line}\n`));
112
+ this.runtimeDir = packageDir("@open-rap/runtime", "runtime", options.runtimeDir);
113
+ }
114
+ /** The URL of the launchpad. */
115
+ get url() {
116
+ return `http://localhost:${this.port}/`;
117
+ }
118
+ /** The applications running, by id. */
119
+ get apps() {
120
+ return [...this.sessions.values()].map((s) => s.app);
121
+ }
122
+ /**
123
+ * Starts the applications (one first build each), then the launchpad, and watches launchpad.json.
124
+ * False when launchpad.json does not allow it (LPD diagnostics), nothing is started then.
125
+ */
126
+ async start() {
127
+ if (!(await this.reconcile())) {
128
+ return false;
129
+ }
130
+ this.started = true;
131
+ await this.scheduleRefresh();
132
+ if (!this.closed) {
133
+ this.watchFile();
134
+ }
135
+ return true;
136
+ }
137
+ async close() {
138
+ this.closed = true;
139
+ clearTimeout(this.timer);
140
+ this.watcher?.close();
141
+ this.watcher = undefined;
142
+ await this.refreshing;
143
+ await Promise.all([...this.sessions.values()].map((s) => s.session.close()));
144
+ this.sessions.clear();
145
+ await this.stopServer();
146
+ }
147
+ emit(event) {
148
+ if (this.options.events !== undefined) {
149
+ this.options.events(event);
150
+ return;
151
+ }
152
+ switch (event.type) {
153
+ case "apps":
154
+ this.out(`rapt launchpad dev: ${event.apps.map((a) => `${a.id} at ${a.url}`).join(", ")}`);
155
+ return;
156
+ case "launchpad-diagnostics":
157
+ for (const d of event.diagnostics) {
158
+ (d.severity === "error" ? this.err : this.out)(formatDiagnostic(d));
159
+ }
160
+ return;
161
+ case "launchpad-waiting":
162
+ this.out(`rapt launchpad dev: the launchpad waits for ${event.apps.join(", ")} to build`);
163
+ return;
164
+ case "launchpad-ready":
165
+ this.out(`rapt launchpad dev: launchpad ready at ${event.url}`);
166
+ return;
167
+ case "launchpad-failed":
168
+ this.err(`rapt launchpad dev: ${event.message}`);
169
+ return;
170
+ }
171
+ const prefix = event.app === undefined ? "" : `[${event.app}] `;
172
+ for (const text of devEventLines(event)) {
173
+ (text.error ? this.err : this.out)(`${prefix}${text.line}`);
174
+ }
175
+ }
176
+ /** The applications of launchpad.json: those added are started, those removed or moved stopped. */
177
+ async reconcile() {
178
+ const plan = launchpadDevPlan(this.file, this.port);
179
+ if (plan.diagnostics.items.length > 0) {
180
+ this.emitDiagnostics(plan.diagnostics);
181
+ }
182
+ if (plan.diagnostics.hasErrors()) {
183
+ return false;
184
+ }
185
+ const key = (a) => JSON.stringify([a.root, a.port, a.service ?? ""]);
186
+ for (const [id, running] of this.sessions) {
187
+ const next = plan.apps.find((a) => a.id === id);
188
+ if (next === undefined || key(next) !== key(running.app)) {
189
+ this.sessions.delete(id);
190
+ await running.session.close();
191
+ }
192
+ }
193
+ this.emit({ type: "apps", file: this.file, apps: plan.apps.map((a) => ({ id: a.id, root: a.root, url: a.url })) });
194
+ for (const app of plan.apps) {
195
+ if (this.closed || this.sessions.has(app.id)) {
196
+ continue;
197
+ }
198
+ const session = new DevSession(app.root, {
199
+ port: app.port,
200
+ host: this.host,
201
+ env: this.env,
202
+ ...(app.service === undefined ? {} : { service: app.service }),
203
+ ...(this.options.runtimeDir === undefined ? {} : { runtimeDir: this.options.runtimeDir }),
204
+ events: (event) => this.onAppEvent(app, event),
205
+ });
206
+ this.sessions.set(app.id, { app, session });
207
+ // one application at a time: the first builds share the processor
208
+ await session.watch();
209
+ }
210
+ return true;
211
+ }
212
+ onAppEvent(app, event) {
213
+ this.emit({ ...event, app: app.id });
214
+ // a new service (path, entity sets, title) changes the launchpad
215
+ if (event.type === "ready" && this.started) {
216
+ void this.scheduleRefresh();
217
+ }
218
+ }
219
+ emitDiagnostics(diagnostics) {
220
+ const sorted = diagnostics.sorted().map((d) => (d.file === undefined ? d : { ...d, path: path.resolve(path.dirname(this.file), d.file) }));
221
+ this.emit({ type: "launchpad-diagnostics", diagnostics: sorted, counts: countDiagnostics(sorted) });
222
+ }
223
+ watchFile() {
224
+ const name = path.basename(this.file);
225
+ try {
226
+ // the folder, not the file: editors replace the file when they save it
227
+ this.watcher = watch(path.dirname(this.file), (_event, changed) => {
228
+ if (changed?.toString() !== name || this.closed)
229
+ return;
230
+ clearTimeout(this.timer);
231
+ this.timer = setTimeout(() => {
232
+ this.emit({ type: "changed", file: name });
233
+ void this.scheduleRefresh(true);
234
+ }, 150);
235
+ });
236
+ this.watcher.on("error", () => this.watcher?.close());
237
+ }
238
+ catch {
239
+ // the folder was removed
240
+ }
241
+ }
242
+ /**
243
+ * One refresh at a time, in order. A refresh that throws (a file that cannot be written) is
244
+ * reported and does not stop the next ones: the chain never rejects.
245
+ */
246
+ scheduleRefresh(reconcile = false) {
247
+ this.refreshing = this.refreshing
248
+ .then(async () => {
249
+ if (this.closed)
250
+ return;
251
+ if (reconcile && !(await this.reconcile())) {
252
+ this.emit({ type: "launchpad-failed", message: "launchpad.json has errors, the previous launchpad keeps running" });
253
+ return;
254
+ }
255
+ await this.refresh();
256
+ })
257
+ .catch((error) => {
258
+ this.config = undefined;
259
+ this.emit({ type: "launchpad-failed", message: `the launchpad could not be generated: ${error instanceof Error ? error.message : String(error)}` });
260
+ });
261
+ return this.refreshing;
262
+ }
263
+ /** Generates the launchpad from launchpad.json and the running applications; restarts it when it changed. */
264
+ async refresh() {
265
+ const waiting = [...this.sessions.values()].filter((s) => s.session.model === undefined).map((s) => s.app.id);
266
+ if (waiting.length > 0) {
267
+ this.emit({ type: "launchpad-waiting", apps: waiting });
268
+ return;
269
+ }
270
+ const built = new Map();
271
+ for (const { app, session } of this.sessions.values()) {
272
+ const title = uiTitle(session.outDir);
273
+ built.set(app.id, { dir: session.outDir, model: session.model, ...(title === undefined ? {} : { title }) });
274
+ }
275
+ const diagnostics = new Diagnostics();
276
+ const resolution = resolveLaunchpad(this.file, diagnostics, { built });
277
+ this.emitDiagnostics(diagnostics);
278
+ if (resolution === undefined || diagnostics.hasErrors()) {
279
+ this.emit({ type: "launchpad-failed", message: this.server === undefined ? "launchpad.json has errors, the launchpad is not started" : "launchpad.json has errors, the previous launchpad keeps running" });
280
+ return;
281
+ }
282
+ const config = `${JSON.stringify(resolution.model, null, 2)}\n`;
283
+ if (config === this.config && this.server !== undefined) {
284
+ return;
285
+ }
286
+ const runtimeNodeModules = this.runtimeDir === undefined ? undefined : runtimeDependencies(this.runtimeDir);
287
+ if (runtimeNodeModules === undefined) {
288
+ this.emit({ type: "launchpad-failed", message: "the @open-rap/runtime package (built, with its node_modules) is needed: run pnpm install and pnpm build, or give --runtime <dir>" });
289
+ return;
290
+ }
291
+ await this.stopServer();
292
+ mkdirSync(path.join(this.outDir, "launchpad"), { recursive: true });
293
+ writeFileSync(path.join(this.outDir, "launchpad", "config.json"), config);
294
+ for (const f of generateLaunchpadUi(resolution.model)) {
295
+ const target = path.join(this.outDir, "ui", ...f.path.split("/"));
296
+ mkdirSync(path.dirname(target), { recursive: true });
297
+ writeFileSync(target, f.content);
298
+ }
299
+ linkFolder(path.join(this.outDir, "node_modules"), runtimeNodeModules);
300
+ writeFileSync(path.join(this.outDir, "launchpad-server.mjs"), launchpadServer(pathToFileURL(path.join(this.runtimeDir, "dist", "index.js")).href));
301
+ if (await this.startServer()) {
302
+ this.config = config;
303
+ this.emit({ type: "launchpad-ready", url: this.url });
304
+ }
305
+ else {
306
+ this.config = undefined;
307
+ this.emit({ type: "launchpad-failed", message: `the launchpad did not start (port ${this.port} in use?)` });
308
+ }
309
+ }
310
+ startServer() {
311
+ const env = {
312
+ ...this.env,
313
+ PORT: String(this.port),
314
+ HOST: this.host,
315
+ PUBLIC_URL: this.url,
316
+ LOG_LEVEL: this.env["LOG_LEVEL"] ?? "warn",
317
+ AUTH_MODE: this.env["AUTH_MODE"] ?? "none",
318
+ };
319
+ const child = spawn(process.execPath, [path.join(this.outDir, "launchpad-server.mjs")], { cwd: this.outDir, env, stdio: ["ignore", "pipe", "pipe", "ipc"] });
320
+ this.server = child;
321
+ return new Promise((resolve) => {
322
+ let ready = false;
323
+ const forward = (stream, name) => {
324
+ let buffer = "";
325
+ stream?.setEncoding("utf8");
326
+ stream?.on("data", (chunk) => {
327
+ buffer += chunk;
328
+ const lines = buffer.split("\n");
329
+ buffer = lines.pop() ?? "";
330
+ for (const line of lines) {
331
+ if (!ready && line.startsWith(READY)) {
332
+ ready = true;
333
+ resolve(true);
334
+ }
335
+ else if (line !== "") {
336
+ this.emit({ type: "log", stream: name, line });
337
+ }
338
+ }
339
+ });
340
+ };
341
+ forward(child.stdout, "stdout");
342
+ forward(child.stderr, "stderr");
343
+ child.once("exit", () => {
344
+ if (this.server === child)
345
+ this.server = undefined;
346
+ if (!ready)
347
+ resolve(false);
348
+ });
349
+ });
350
+ }
351
+ async stopServer() {
352
+ const child = this.server;
353
+ this.server = undefined;
354
+ if (child === undefined || child.exitCode !== null) {
355
+ return;
356
+ }
357
+ const exited = new Promise((resolve) => child.once("exit", () => resolve()));
358
+ try {
359
+ child.send("close", () => undefined);
360
+ }
361
+ catch {
362
+ child.kill();
363
+ }
364
+ const timeout = setTimeout(() => child.kill(), 5000);
365
+ await exited;
366
+ clearTimeout(timeout);
367
+ }
368
+ }
369
+ /** The title of the UI of a build (`sap.app.title`). */
370
+ function uiTitle(dir) {
371
+ try {
372
+ const title = JSON.parse(readFileSync(path.join(dir, "ui", "manifest.json"), "utf8"))["sap.app"]?.title;
373
+ return typeof title === "string" && title !== "" ? title : undefined;
374
+ }
375
+ catch {
376
+ return undefined;
377
+ }
378
+ }
379
+ /** The server of the development launchpad: the launchpad of the runtime, closed on a message. */
380
+ function launchpadServer(runtimeUrl) {
381
+ return `// Generated by rapt launchpad dev: starts the launchpad with the runtime of Open RAP Runtime.
382
+ import { fileURLToPath } from "node:url";
383
+ import { startLaunchpad } from ${JSON.stringify(runtimeUrl)};
384
+
385
+ const launchpad = await startLaunchpad({ dir: fileURLToPath(new URL(".", import.meta.url)) });
386
+ const close = () => launchpad.close().then(() => process.exit(0), () => process.exit(1));
387
+ process.on("message", (message) => message === "close" && close());
388
+ process.on("disconnect", close);
389
+ for (const signal of ["SIGINT", "SIGTERM"]) {
390
+ process.once(signal, close);
391
+ }
392
+ console.log(${JSON.stringify(READY)});
393
+ `;
394
+ }
395
+ //# sourceMappingURL=dev.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dev.js","sourceRoot":"","sources":["../../src/launchpad/dev.ts"],"names":[],"mappings":"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"}
@@ -8,6 +8,8 @@ export declare const LAUNCHPAD_FILE = "launchpad.json";
8
8
  export declare const DEFAULT_LAUNCHPAD_TITLE = "Launchpad";
9
9
  /** The group (or section of the first page) the tiles of the registered applications go to. */
10
10
  export declare const DEFAULT_SECTION = "Applications";
11
+ /** The port of the launchpad run locally (npm start, rapt launchpad dev). */
12
+ export declare const LAUNCHPAD_PORT = 8090;
11
13
  export interface LaunchpadLocation {
12
14
  file: string;
13
15
  exists: boolean;
@@ -31,6 +33,11 @@ export interface RegisterResult {
31
33
  service?: string;
32
34
  };
33
35
  tile?: Record<string, unknown>;
36
+ /**
37
+ * The project is an OData V4 - Web API (D76): an API for other systems, without UI, never added
38
+ * to the launchpad (`added` false, no error).
39
+ */
40
+ webApi?: boolean;
34
41
  error?: string;
35
42
  }
36
43
  /**
@@ -44,5 +51,6 @@ export declare function findLaunchpad(projectDir: string): LaunchpadLocation;
44
51
  * Adds an application (its sources) and its tile to the launchpad of the workspace, created with
45
52
  * the title "Launchpad" when there is none. Idempotent: an application already there (same
46
53
  * sources, or same id without sources) is left as it is, and nothing the user wrote is changed.
54
+ * A Web API (OData V4 - Web API binding, D76) has no UI: it is not added (`webApi`).
47
55
  */
48
56
  export declare function registerApp(projectDir: string, options?: RegisterOptions): RegisterResult;
@@ -16,7 +16,8 @@ export const DEFAULT_LAUNCHPAD_TITLE = "Launchpad";
16
16
  export const DEFAULT_SECTION = "Applications";
17
17
  /** How many folders above the project the existing launchpad is looked for. */
18
18
  const SEARCH_DEPTH = 4;
19
- const LAUNCHPAD_PORT = 8090;
19
+ /** The port of the launchpad run locally (npm start, rapt launchpad dev). */
20
+ export const LAUNCHPAD_PORT = 8090;
20
21
  const same = (a, b) => (process.platform === "win32" ? a.toLowerCase() === b.toLowerCase() : a === b);
21
22
  /** Folders that are never a workspace: the file system root, the home and the temporary folders. */
22
23
  function systemFolder(dir) {
@@ -97,6 +98,7 @@ function defaultTiles(source) {
97
98
  * Adds an application (its sources) and its tile to the launchpad of the workspace, created with
98
99
  * the title "Launchpad" when there is none. Idempotent: an application already there (same
99
100
  * sources, or same id without sources) is left as it is, and nothing the user wrote is changed.
101
+ * A Web API (OData V4 - Web API binding, D76) has no UI: it is not added (`webApi`).
100
102
  */
101
103
  export function registerApp(projectDir, options = {}) {
102
104
  const root = path.resolve(projectDir);
@@ -124,6 +126,9 @@ export function registerApp(projectDir, options = {}) {
124
126
  if (model === undefined) {
125
127
  return { file, created: false, added: false, error: `${root}: no application to add to the launchpad (a service definition is needed; rapt check ${root})` };
126
128
  }
129
+ if (model.service.webApi === true) {
130
+ return { file, created: false, added: false, webApi: true };
131
+ }
127
132
  let id = slug(path.basename(root));
128
133
  if (!ID.test(id))
129
134
  id = slug(model.service.name);
@@ -1 +1 @@
1
- {"version":3,"file":"workspace.js","sourceRoot":"","sources":["../../src/launchpad/workspace.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"workspace.js","sourceRoot":"","sources":["../../src/launchpad/workspace.ts"],"names":[],"mappings":"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"}