@meltemi/diagrams-cli 0.0.0-stage → 1.9.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (163) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +58 -2
  3. package/dist/assets-command.d.ts +16 -0
  4. package/dist/assets-command.d.ts.map +1 -0
  5. package/dist/assets-command.js +145 -0
  6. package/dist/assets-command.js.map +1 -0
  7. package/dist/assist-command.d.ts +19 -0
  8. package/dist/assist-command.d.ts.map +1 -0
  9. package/dist/assist-command.js +268 -0
  10. package/dist/assist-command.js.map +1 -0
  11. package/dist/auth-command.d.ts +14 -0
  12. package/dist/auth-command.d.ts.map +1 -0
  13. package/dist/auth-command.js +233 -0
  14. package/dist/auth-command.js.map +1 -0
  15. package/dist/bin.d.ts +3 -0
  16. package/dist/bin.d.ts.map +1 -0
  17. package/dist/bin.js +60 -0
  18. package/dist/bin.js.map +1 -0
  19. package/dist/build-command.d.ts +23 -0
  20. package/dist/build-command.d.ts.map +1 -0
  21. package/dist/build-command.js +123 -0
  22. package/dist/build-command.js.map +1 -0
  23. package/dist/cli.d.ts +46 -0
  24. package/dist/cli.d.ts.map +1 -0
  25. package/dist/cli.js +823 -0
  26. package/dist/cli.js.map +1 -0
  27. package/dist/cloud-client.d.ts +246 -0
  28. package/dist/cloud-client.d.ts.map +1 -0
  29. package/dist/cloud-client.js +591 -0
  30. package/dist/cloud-client.js.map +1 -0
  31. package/dist/cloud-command.d.ts +56 -0
  32. package/dist/cloud-command.d.ts.map +1 -0
  33. package/dist/cloud-command.js +81 -0
  34. package/dist/cloud-command.js.map +1 -0
  35. package/dist/cloud-context.d.ts +106 -0
  36. package/dist/cloud-context.d.ts.map +1 -0
  37. package/dist/cloud-context.js +185 -0
  38. package/dist/cloud-context.js.map +1 -0
  39. package/dist/cloud-errors.d.ts +37 -0
  40. package/dist/cloud-errors.d.ts.map +1 -0
  41. package/dist/cloud-errors.js +46 -0
  42. package/dist/cloud-errors.js.map +1 -0
  43. package/dist/cloud-host.d.ts +72 -0
  44. package/dist/cloud-host.d.ts.map +1 -0
  45. package/dist/cloud-host.js +129 -0
  46. package/dist/cloud-host.js.map +1 -0
  47. package/dist/cloud-manifest.d.ts +12 -0
  48. package/dist/cloud-manifest.d.ts.map +1 -0
  49. package/dist/cloud-manifest.js +21 -0
  50. package/dist/cloud-manifest.js.map +1 -0
  51. package/dist/cloud-paths.d.ts +48 -0
  52. package/dist/cloud-paths.d.ts.map +1 -0
  53. package/dist/cloud-paths.js +104 -0
  54. package/dist/cloud-paths.js.map +1 -0
  55. package/dist/credentials.d.ts +107 -0
  56. package/dist/credentials.d.ts.map +1 -0
  57. package/dist/credentials.js +243 -0
  58. package/dist/credentials.js.map +1 -0
  59. package/dist/export-command.d.ts +35 -0
  60. package/dist/export-command.d.ts.map +1 -0
  61. package/dist/export-command.js +524 -0
  62. package/dist/export-command.js.map +1 -0
  63. package/dist/import-command.d.ts +20 -0
  64. package/dist/import-command.d.ts.map +1 -0
  65. package/dist/import-command.js +254 -0
  66. package/dist/import-command.js.map +1 -0
  67. package/dist/index.d.ts +4 -0
  68. package/dist/index.d.ts.map +1 -0
  69. package/dist/index.js +4 -0
  70. package/dist/index.js.map +1 -0
  71. package/dist/init-command.d.ts +28 -0
  72. package/dist/init-command.d.ts.map +1 -0
  73. package/dist/init-command.js +199 -0
  74. package/dist/init-command.js.map +1 -0
  75. package/dist/login-listener.d.ts +58 -0
  76. package/dist/login-listener.d.ts.map +1 -0
  77. package/dist/login-listener.js +173 -0
  78. package/dist/login-listener.js.map +1 -0
  79. package/dist/messages/en.d.ts +533 -0
  80. package/dist/messages/en.d.ts.map +1 -0
  81. package/dist/messages/en.js +803 -0
  82. package/dist/messages/en.js.map +1 -0
  83. package/dist/messages/es.d.ts +3 -0
  84. package/dist/messages/es.d.ts.map +1 -0
  85. package/dist/messages/es.js +764 -0
  86. package/dist/messages/es.js.map +1 -0
  87. package/dist/messages/index.d.ts +442 -0
  88. package/dist/messages/index.d.ts.map +1 -0
  89. package/dist/messages/index.js +42 -0
  90. package/dist/messages/index.js.map +1 -0
  91. package/dist/messages/push-pull-en.d.ts +84 -0
  92. package/dist/messages/push-pull-en.d.ts.map +1 -0
  93. package/dist/messages/push-pull-en.js +146 -0
  94. package/dist/messages/push-pull-en.js.map +1 -0
  95. package/dist/messages/push-pull-es.d.ts +7 -0
  96. package/dist/messages/push-pull-es.d.ts.map +1 -0
  97. package/dist/messages/push-pull-es.js +144 -0
  98. package/dist/messages/push-pull-es.js.map +1 -0
  99. package/dist/open-url.d.ts +11 -0
  100. package/dist/open-url.d.ts.map +1 -0
  101. package/dist/open-url.js +36 -0
  102. package/dist/open-url.js.map +1 -0
  103. package/dist/plugins-command.d.ts +15 -0
  104. package/dist/plugins-command.d.ts.map +1 -0
  105. package/dist/plugins-command.js +106 -0
  106. package/dist/plugins-command.js.map +1 -0
  107. package/dist/preview.d.ts +54 -0
  108. package/dist/preview.d.ts.map +1 -0
  109. package/dist/preview.js +249 -0
  110. package/dist/preview.js.map +1 -0
  111. package/dist/project-errors.d.ts +17 -0
  112. package/dist/project-errors.d.ts.map +1 -0
  113. package/dist/project-errors.js +85 -0
  114. package/dist/project-errors.js.map +1 -0
  115. package/dist/projects-command.d.ts +13 -0
  116. package/dist/projects-command.d.ts.map +1 -0
  117. package/dist/projects-command.js +85 -0
  118. package/dist/projects-command.js.map +1 -0
  119. package/dist/publish-command.d.ts +41 -0
  120. package/dist/publish-command.d.ts.map +1 -0
  121. package/dist/publish-command.js +311 -0
  122. package/dist/publish-command.js.map +1 -0
  123. package/dist/pull-command.d.ts +21 -0
  124. package/dist/pull-command.d.ts.map +1 -0
  125. package/dist/pull-command.js +300 -0
  126. package/dist/pull-command.js.map +1 -0
  127. package/dist/push-command.d.ts +31 -0
  128. package/dist/push-command.d.ts.map +1 -0
  129. package/dist/push-command.js +391 -0
  130. package/dist/push-command.js.map +1 -0
  131. package/dist/push-review.d.ts +16 -0
  132. package/dist/push-review.d.ts.map +1 -0
  133. package/dist/push-review.js +72 -0
  134. package/dist/push-review.js.map +1 -0
  135. package/dist/push-set.d.ts +126 -0
  136. package/dist/push-set.d.ts.map +1 -0
  137. package/dist/push-set.js +289 -0
  138. package/dist/push-set.js.map +1 -0
  139. package/dist/push-validation.d.ts +20 -0
  140. package/dist/push-validation.d.ts.map +1 -0
  141. package/dist/push-validation.js +70 -0
  142. package/dist/push-validation.js.map +1 -0
  143. package/dist/redact.d.ts +9 -0
  144. package/dist/redact.d.ts.map +1 -0
  145. package/dist/redact.js +22 -0
  146. package/dist/redact.js.map +1 -0
  147. package/dist/review-command.d.ts +44 -0
  148. package/dist/review-command.d.ts.map +1 -0
  149. package/dist/review-command.js +348 -0
  150. package/dist/review-command.js.map +1 -0
  151. package/package.json +56 -3
  152. package/templates/c4/diagrams/views.meltemi +16 -0
  153. package/templates/c4/models/system.meltemi +23 -0
  154. package/templates/ci/github.yml +96 -0
  155. package/templates/ci/gitlab.yml +53 -0
  156. package/templates/flow/diagrams/overview.meltemi +15 -0
  157. package/templates/free/diagrams/slide.meltemi +39 -0
  158. package/templates/purchase/diagrams/architecture.meltemi +36 -0
  159. package/templates/purchase/diagrams/executive.meltemi +52 -0
  160. package/templates/purchase/diagrams/payment.meltemi +42 -0
  161. package/templates/purchase/models/commerce.meltemi +30 -0
  162. package/templates/purchase/stories/purchase.meltemi +38 -0
  163. package/templates/sequence/diagrams/sign-in.meltemi +36 -0
@@ -0,0 +1,524 @@
1
+ import { mkdirSync, statSync, writeFileSync } from "node:fs";
2
+ import { basename, dirname, isAbsolute, join, relative, resolve } from "node:path";
3
+ import { parseArgs } from "node:util";
4
+ import { captureSync } from "@meltemi/diagrams-capture";
5
+ import { MAX_PIXELS, WRITABLE_FORMATS, produceExport, profileOutputs, profileRequest, } from "@meltemi/diagrams-editor/node";
6
+ import { THEME_COLOR_TOKENS, isSafeUrl } from "@meltemi/diagrams-model";
7
+ import { parseTime } from "@meltemi/diagrams-motion";
8
+ import { playerScript } from "@meltemi/diagrams-player/node";
9
+ import { toProjectPath } from "@meltemi/diagrams-project";
10
+ import { exportFileName } from "@meltemi/diagrams-editor";
11
+ import { argumentsError, messages } from "./messages/index.js";
12
+ export { WRITABLE_FORMATS, exportFileName };
13
+ export const EXIT_OK = 0;
14
+ export const EXIT_FINDINGS = 1;
15
+ export const EXIT_USAGE = 2;
16
+ const MELTEMI_EXTENSION = ".meltemi";
17
+ export const FONT_POLICIES = ["embedded", "outlined", "system"];
18
+ export const MOTION_MODES = ["static", "animated"];
19
+ /** The `--background` word or colour, as profiles store it, or undefined when it is not one. */
20
+ function readBackground(value) {
21
+ if (value === "transparent")
22
+ return value;
23
+ if (THEME_COLOR_TOKENS.includes(value))
24
+ return `@${value}`;
25
+ return /^(#[0-9a-f]{3,8}|(rgb|hsl)a?\([\d\s.,%/-]+\)|[a-z]+)$/i.test(value) ? value : undefined;
26
+ }
27
+ /** `1920x1080` as a size within the capture's limits. */
28
+ function readSize(value) {
29
+ const match = /^(\d+)x(\d+)$/i.exec(value);
30
+ if (!match)
31
+ return undefined;
32
+ const width = Number(match[1]);
33
+ const height = Number(match[2]);
34
+ const fits = (n) => n >= 16 && n <= MAX_PIXELS;
35
+ return fits(width) && fits(height) ? { width, height } : undefined;
36
+ }
37
+ /** Writes an export and says so; false (after reporting it) when the file cannot be written. */
38
+ function writeOutput(host, target, text, views = 1) {
39
+ try {
40
+ mkdirSync(dirname(target), { recursive: true });
41
+ writeFileSync(target, text, "utf8");
42
+ }
43
+ catch (error) {
44
+ host.io.stderr(`${host.name} export: ${messages().common.cannotWrite(host.display(target), error.message)}\n`);
45
+ return false;
46
+ }
47
+ host.io.stdout(`${views > 1 ? messages().export.wroteViews(host.display(target), views) : messages().common.wrote(host.display(target))}\n`);
48
+ return true;
49
+ }
50
+ /** Writes the outputs: text at once, pictures and videos in one browser session. */
51
+ function writeAll(host, outputs) {
52
+ let failed = false;
53
+ const jobs = [];
54
+ const videos = [];
55
+ for (const { request, output } of outputs) {
56
+ if ("problem" in output) {
57
+ host.io.stderr(`${host.name} export: ${output.problem}\n`);
58
+ failed = true;
59
+ continue;
60
+ }
61
+ if ("text" in output) {
62
+ if (request.out === null)
63
+ host.io.stdout(output.text);
64
+ else if (!writeOutput(host, request.out, output.text, output.views))
65
+ return EXIT_USAGE;
66
+ continue;
67
+ }
68
+ if ("video" in output)
69
+ videos.push(output.video);
70
+ else
71
+ jobs.push({ ...output.job, out: request.out });
72
+ }
73
+ if (jobs.length > 0 || videos.length > 0) {
74
+ let result;
75
+ try {
76
+ for (const job of [...jobs, ...videos])
77
+ mkdirSync(dirname(job.out), { recursive: true });
78
+ result = captureSync(jobs, { videos });
79
+ }
80
+ catch (error) {
81
+ host.io.stderr(`${host.name} export: ${error.message}\n`);
82
+ return EXIT_USAGE;
83
+ }
84
+ const t = messages().export;
85
+ for (const job of jobs) {
86
+ host.io.stdout(`${t.wrotePicture(host.display(job.out), result.browser)}\n`);
87
+ }
88
+ videos.forEach((video, i) => host.io.stdout(`${t.wroteVideo(host.display(video.out), result.browser, result.ffmpeg, result.frames[i])}\n`));
89
+ }
90
+ return failed ? EXIT_FINDINGS : EXIT_OK;
91
+ }
92
+ export function noDiagramDiagnostic(compilation) {
93
+ const first = compilation.document.unsupported[0];
94
+ const types = [...new Set(compilation.document.unsupported.map((u) => u.profile))];
95
+ const others = compilation.document.stories.length + compilation.document.exports.length > 0;
96
+ const t = messages().export;
97
+ return {
98
+ code: "export.no-diagram",
99
+ severity: "error",
100
+ message: t.noDiagram(types),
101
+ range: first?.range ?? compilation.parse.lines.range({ start: 0, end: 0 }),
102
+ hints: [others ? t.noDiagramStoriesHint : t.noDiagramTypesHint],
103
+ };
104
+ }
105
+ /**
106
+ * `meltemi-diagrams export`: diagrams, story frames, players and profiles of a file, or of every
107
+ * file of a project folder.
108
+ */
109
+ export function exportCommand(args, host) {
110
+ const { io, name } = host;
111
+ const usage = (message) => {
112
+ io.stderr(`${name} export: ${message}\n`);
113
+ return EXIT_USAGE;
114
+ };
115
+ let options;
116
+ let paths;
117
+ try {
118
+ const parsed = parseArgs({
119
+ args: [...args],
120
+ options: {
121
+ diagram: { type: "string" },
122
+ scenario: { type: "string" },
123
+ story: { type: "string" },
124
+ profile: { type: "string" },
125
+ profiles: { type: "boolean", default: false },
126
+ format: { type: "string" },
127
+ out: { type: "string" },
128
+ theme: { type: "string" },
129
+ fonts: { type: "string" },
130
+ motion: { type: "string" },
131
+ at: { type: "string" },
132
+ scale: { type: "string" },
133
+ size: { type: "string" },
134
+ background: { type: "string" },
135
+ link: { type: "string" },
136
+ fps: { type: "string" },
137
+ duration: { type: "string" },
138
+ embed: { type: "boolean", default: false },
139
+ stdout: { type: "boolean", default: false },
140
+ },
141
+ allowPositionals: true,
142
+ strict: true,
143
+ });
144
+ options = parsed.values;
145
+ paths = parsed.positionals;
146
+ }
147
+ catch (error) {
148
+ return usage(argumentsError(error));
149
+ }
150
+ const t = messages().export;
151
+ if (paths.length !== 1)
152
+ return usage(t.onePath);
153
+ // Profiles carry every option themselves.
154
+ const profileMode = options.profile !== undefined || options.profiles;
155
+ if (profileMode) {
156
+ if (options.profile !== undefined && options.profiles)
157
+ return usage(t.profileOrProfiles);
158
+ const given = [
159
+ ["format", options.format],
160
+ ["diagram", options.diagram],
161
+ ["story", options.story],
162
+ ["scenario", options.scenario],
163
+ ["theme", options.theme],
164
+ ["fonts", options.fonts],
165
+ ["motion", options.motion],
166
+ ["at", options.at],
167
+ ["scale", options.scale],
168
+ ["size", options.size],
169
+ ["background", options.background],
170
+ ["link", options.link],
171
+ ["fps", options.fps],
172
+ ["duration", options.duration],
173
+ ].find(([, value]) => value !== undefined);
174
+ const flag = given
175
+ ? `--${given[0]}`
176
+ : options.embed
177
+ ? "--embed"
178
+ : options.stdout
179
+ ? "--stdout"
180
+ : null;
181
+ if (flag)
182
+ return usage(t.profileOption(flag));
183
+ if (options.out !== undefined) {
184
+ const out = isAbsolute(options.out) ? options.out : resolve(io.cwd, options.out);
185
+ let isDirectory;
186
+ try {
187
+ isDirectory = statSync(out).isDirectory();
188
+ }
189
+ catch {
190
+ isDirectory = false;
191
+ }
192
+ if (!isDirectory)
193
+ return usage(t.profilesOut);
194
+ }
195
+ }
196
+ const format = options.format ?? "svg";
197
+ if (!WRITABLE_FORMATS.includes(format)) {
198
+ return usage(t.format(format, WRITABLE_FORMATS));
199
+ }
200
+ const fonts = options.fonts ?? "embedded";
201
+ if (!FONT_POLICIES.includes(fonts)) {
202
+ return usage(t.fonts(fonts, FONT_POLICIES));
203
+ }
204
+ const motion = options.motion ?? "static";
205
+ if (!MOTION_MODES.includes(motion)) {
206
+ return usage(t.motion(motion, MOTION_MODES));
207
+ }
208
+ let at = null;
209
+ if (options.at !== undefined) {
210
+ at = parseTime(options.at);
211
+ if (at === null)
212
+ return usage(t.at(options.at));
213
+ if (motion === "animated")
214
+ return usage(t.atAnimated);
215
+ }
216
+ if (options.story !== undefined) {
217
+ const clash = options.diagram !== undefined
218
+ ? "--diagram"
219
+ : options.scenario !== undefined
220
+ ? "--scenario"
221
+ : motion === "animated"
222
+ ? "--motion animated"
223
+ : null;
224
+ if (clash)
225
+ return usage(t.story(clash));
226
+ }
227
+ const picture = format === "png" || format === "pdf";
228
+ const video = format === "mp4" || format === "webm" || format === "gif";
229
+ if (format === "html") {
230
+ const clash = at !== null
231
+ ? "--at"
232
+ : motion === "animated"
233
+ ? "--motion animated"
234
+ : fonts === "outlined"
235
+ ? "--fonts outlined"
236
+ : null;
237
+ if (clash)
238
+ return usage(t.html(clash));
239
+ }
240
+ else if (options.embed) {
241
+ return usage(t.embed);
242
+ }
243
+ if (picture && motion === "animated")
244
+ return usage(t.picture(format));
245
+ if (video) {
246
+ const clash = at !== null
247
+ ? "--at"
248
+ : motion === "animated"
249
+ ? "--motion animated"
250
+ : options.link
251
+ ? "--link"
252
+ : null;
253
+ if (clash)
254
+ return usage(t.video(format, clash));
255
+ }
256
+ if ((picture || video) && options.stdout)
257
+ return usage(t.stdoutFile(format));
258
+ let fps = null;
259
+ if (options.fps !== undefined) {
260
+ if (!video)
261
+ return usage(t.fpsVideo);
262
+ fps = Number(options.fps);
263
+ if (!Number.isInteger(fps) || fps < 1 || fps > 60)
264
+ return usage(t.fps(options.fps));
265
+ }
266
+ let durationMs = null;
267
+ if (options.duration !== undefined) {
268
+ if (!video)
269
+ return usage(t.durationVideo);
270
+ durationMs = parseTime(options.duration);
271
+ if (durationMs === null || durationMs <= 0 || durationMs > 600_000) {
272
+ return usage(t.duration(options.duration));
273
+ }
274
+ }
275
+ let scale = 2;
276
+ if (options.scale !== undefined) {
277
+ if (format !== "png")
278
+ return usage(t.scalePng);
279
+ scale = Number(options.scale);
280
+ if (!(scale >= 1 && scale <= 8))
281
+ return usage(t.scale(options.scale));
282
+ }
283
+ let size = null;
284
+ if (options.size !== undefined) {
285
+ if (!picture && !video)
286
+ return usage(t.sizeOutput);
287
+ size = readSize(options.size) ?? null;
288
+ if (!size)
289
+ return usage(t.size(MAX_PIXELS, options.size));
290
+ }
291
+ let background = null;
292
+ if (options.background !== undefined) {
293
+ if (format === "html")
294
+ return usage(t.backgroundHtml);
295
+ background = readBackground(options.background) ?? null;
296
+ if (!background)
297
+ return usage(t.background(options.background));
298
+ if (format === "mp4" && background === "transparent")
299
+ return usage(t.mp4Transparent);
300
+ }
301
+ if (options.link !== undefined) {
302
+ if (format !== "svg" && format !== "pdf")
303
+ return usage(t.linkFormats);
304
+ if (!isSafeUrl(options.link))
305
+ return usage(t.link(options.link));
306
+ }
307
+ // A folder exports every file of its project below it, with the same options.
308
+ const given = isAbsolute(paths[0]) ? paths[0] : resolve(io.cwd, paths[0]);
309
+ let folderMode = false;
310
+ try {
311
+ folderMode = statSync(given).isDirectory();
312
+ }
313
+ catch {
314
+ // Not found: reading the file reports it.
315
+ }
316
+ if (folderMode) {
317
+ const clash = options.diagram !== undefined
318
+ ? "--diagram"
319
+ : options.story !== undefined
320
+ ? "--story"
321
+ : options.scenario !== undefined
322
+ ? "--scenario"
323
+ : options.stdout
324
+ ? "--stdout"
325
+ : null;
326
+ if (clash)
327
+ return usage(t.oneFile(clash));
328
+ }
329
+ // With --stdout, stdout holds only the output; diagnostics go to stderr.
330
+ const log = options.stdout ? io.stderr : io.stdout;
331
+ const projects = host.projects();
332
+ const base = {
333
+ theme: options.theme ?? null,
334
+ fonts: fonts,
335
+ motion: motion,
336
+ at,
337
+ scale,
338
+ size,
339
+ background,
340
+ link: options.link ?? null,
341
+ embed: options.embed,
342
+ autoplay: false,
343
+ loop: false,
344
+ fps,
345
+ durationMs,
346
+ };
347
+ const outRoot = options.out === undefined
348
+ ? null
349
+ : isAbsolute(options.out)
350
+ ? options.out
351
+ : resolve(io.cwd, options.out);
352
+ const outputs = [];
353
+ let failed = false;
354
+ let profilesFound = 0;
355
+ /**
356
+ * Plans the outputs of one file. In a folder, files without diagrams or without the profile are
357
+ * passed over, and outputs under --out keep the file's folder.
358
+ */
359
+ const planFile = (workspace, sourceFile, folderOut) => {
360
+ const projectPath = toProjectPath(sourceFile);
361
+ const path = host.display(sourceFile);
362
+ const file = workspace.file(projectPath);
363
+ const compilation = file.compilation;
364
+ host.printDiagnostics(log, path, file.diagnostics);
365
+ const context = {
366
+ file,
367
+ workspace,
368
+ projects,
369
+ playerScript,
370
+ report: (where, diagnostics) => host.printDiagnostics(log, host.display(where), diagnostics),
371
+ printed: new Set(file.diagnostics.map((d) => `${d.code}@${d.range.start.offset}`)),
372
+ };
373
+ // Diagrams without errors are still exported when other blocks of the file have problems.
374
+ if (file.diagnostics.some((d) => d.severity === "error"))
375
+ failed = true;
376
+ const stem = basename(sourceFile, MELTEMI_EXTENSION);
377
+ const folder = dirname(sourceFile);
378
+ const push = (request) => outputs.push({ request, output: produceExport(context, request) });
379
+ /** Where an output goes: --out as a file or a directory, or beside the source. */
380
+ const outTarget = (name, many) => {
381
+ if (options.stdout)
382
+ return null;
383
+ if (folderOut !== null)
384
+ return join(folderOut, name);
385
+ if (outRoot === null)
386
+ return join(folder, name);
387
+ let isDirectory = false;
388
+ try {
389
+ isDirectory = statSync(outRoot).isDirectory();
390
+ }
391
+ catch {
392
+ // Not an existing directory: treat the path as a file name.
393
+ }
394
+ if (isDirectory)
395
+ return join(outRoot, name);
396
+ return many ? false : outRoot;
397
+ };
398
+ if (profileMode) {
399
+ const all = compilation.document.exports;
400
+ const chosen = options.profile === undefined ? all : all.filter((p) => p.id === options.profile);
401
+ profilesFound += chosen.length;
402
+ if (chosen.length === 0) {
403
+ if (folderMode)
404
+ return undefined;
405
+ return options.profile === undefined
406
+ ? t.noProfiles(path)
407
+ : t.noProfile(options.profile, path, all.map((p) => p.id));
408
+ }
409
+ for (const profile of chosen) {
410
+ const request = profileRequest(context, profile, stem, profileOutputs(folder, folderOut ?? options.out, io.cwd));
411
+ if (typeof request === "string") {
412
+ io.stderr(`${name} export: ${profile.id}: ${request}\n`);
413
+ failed = true;
414
+ continue;
415
+ }
416
+ push(request);
417
+ }
418
+ return undefined;
419
+ }
420
+ if (options.story !== undefined) {
421
+ const story = compilation.document.stories.find((s) => s.id === options.story);
422
+ if (!story) {
423
+ const available = compilation.document.stories.map((s) => s.id);
424
+ return t.noStory(options.story, path, available);
425
+ }
426
+ const out = outTarget(`${stem}.${story.id}.${format}`, false);
427
+ push({
428
+ ...base,
429
+ target: { kind: "story", story },
430
+ format: format,
431
+ scenario: undefined,
432
+ out: out === false ? null : out,
433
+ });
434
+ return undefined;
435
+ }
436
+ const renderable = compilation.document.diagrams.filter((d) => !d.hasErrors);
437
+ let selected = renderable;
438
+ if (options.diagram !== undefined) {
439
+ selected = renderable.filter((d) => d.id === options.diagram);
440
+ if (selected.length === 0) {
441
+ const available = renderable.map((d) => d.id);
442
+ return messages().common.noDiagram(options.diagram, path, available);
443
+ }
444
+ }
445
+ if (selected.length === 0) {
446
+ // In a folder, models, themes and stories have nothing to draw on their own.
447
+ if (folderMode && compilation.document.diagrams.length === 0)
448
+ return undefined;
449
+ host.printDiagnostics(log, path, [noDiagramDiagnostic(compilation)]);
450
+ failed = true;
451
+ return undefined;
452
+ }
453
+ if (options.scenario !== undefined) {
454
+ // Only the sequence diagrams that declare the scenario.
455
+ const declaring = selected.filter((d) => d.scenarios.some((s) => s.id === options.scenario));
456
+ if (declaring.length === 0) {
457
+ const available = [...new Set(selected.flatMap((d) => d.scenarios.map((s) => s.id)))];
458
+ return t.noScenario(options.scenario, path, available);
459
+ }
460
+ selected = declaring;
461
+ }
462
+ if (options.stdout && selected.length > 1)
463
+ return t.stdoutOne;
464
+ for (const diagram of selected) {
465
+ // One diagram: named after the file. Several: the diagram id keeps the outputs apart, and a
466
+ // scenario adds its id.
467
+ const fileName = exportFileName(stem, diagram.id, compilation.document.diagrams.length, options.scenario, format);
468
+ const out = outTarget(fileName, selected.length > 1);
469
+ if (out === false)
470
+ return t.severalDiagrams(path, selected.length);
471
+ push({
472
+ ...base,
473
+ target: { kind: "diagram", diagram, owner: file },
474
+ format: format,
475
+ scenario: options.scenario,
476
+ out,
477
+ });
478
+ }
479
+ return undefined;
480
+ };
481
+ if (folderMode) {
482
+ const folder = toProjectPath(given);
483
+ const workspace = projects.forFolder(folder);
484
+ for (const [problemPath, diagnostics] of host.projectDiagnostics(workspace)) {
485
+ host.printDiagnostics(log, host.display(problemPath), diagnostics);
486
+ if (diagnostics.some((d) => d.severity === "error"))
487
+ failed = true;
488
+ }
489
+ const files = workspace
490
+ .sources()
491
+ .filter((path) => path === folder || path.startsWith(`${folder}/`));
492
+ if (files.length === 0)
493
+ return usage(t.noFiles(host.display(given)));
494
+ for (const path of files) {
495
+ const relativeFolder = dirname(relative(folder, path));
496
+ const folderOut = outRoot === null ? null : relativeFolder === "." ? outRoot : join(outRoot, relativeFolder);
497
+ const problem = planFile(workspace, path, folderOut);
498
+ if (problem !== undefined)
499
+ return usage(problem);
500
+ }
501
+ if (profileMode && profilesFound === 0) {
502
+ return usage(options.profile === undefined
503
+ ? t.noProfiles(host.display(given))
504
+ : t.noFileWithProfile(host.display(given), options.profile));
505
+ }
506
+ }
507
+ else {
508
+ const source = host.readSource(paths[0]);
509
+ if (!source)
510
+ return EXIT_USAGE;
511
+ const workspace = projects.forFile(toProjectPath(source.file));
512
+ for (const [problemPath, diagnostics] of host.projectDiagnostics(workspace)) {
513
+ host.printDiagnostics(log, host.display(problemPath), diagnostics);
514
+ if (diagnostics.some((d) => d.severity === "error"))
515
+ failed = true;
516
+ }
517
+ const problem = planFile(workspace, source.file, null);
518
+ if (problem !== undefined)
519
+ return usage(problem);
520
+ }
521
+ const code = writeAll(host, outputs);
522
+ return code === EXIT_USAGE ? code : failed || code === EXIT_FINDINGS ? EXIT_FINDINGS : EXIT_OK;
523
+ }
524
+ //# sourceMappingURL=export-command.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"export-command.js","sourceRoot":"","sources":["../src/export-command.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ import type { Locale } from "@meltemi/diagrams-i18n";
2
+ import { type Workspace } from "@meltemi/diagrams-project";
3
+ /** What the import command needs from the CLI. */
4
+ export interface ImportContext {
5
+ readonly name: string;
6
+ readonly stdout: (text: string) => void;
7
+ readonly stderr: (text: string) => void;
8
+ readonly cwd: string;
9
+ /** A path as printed: relative to the working folder. */
10
+ readonly display: (path: string) => string;
11
+ readonly workspaceFor: (path: string) => Workspace;
12
+ /**
13
+ * The language of the words the importer writes into a sheet: `--lang`, else the project's
14
+ * `locale`, else English.
15
+ */
16
+ readonly contentLocale: (workspace: Workspace) => Locale;
17
+ }
18
+ /** `meltemi-diagrams import <file or folder>`. */
19
+ export declare function importCommand(args: readonly string[], context: ImportContext): number;
20
+ //# sourceMappingURL=import-command.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"import-command.d.ts","sourceRoot":"","sources":["../src/import-command.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAC;AAErD,OAAO,EAAiB,KAAK,SAAS,EAAE,MAAM,2BAA2B,CAAC;AAG1E,kDAAkD;AAClD,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACxC,QAAQ,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACxC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,yDAAyD;IACzD,QAAQ,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,CAAC;IAC3C,QAAQ,CAAC,YAAY,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,SAAS,CAAC;IACnD;;;OAGG;IACH,QAAQ,CAAC,aAAa,EAAE,CAAC,SAAS,EAAE,SAAS,KAAK,MAAM,CAAC;CAC1D;AAoDD,kDAAkD;AAClD,wBAAgB,aAAa,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,EAAE,OAAO,EAAE,aAAa,GAAG,MAAM,CAyHrF"}