@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.
- package/LICENSE +21 -0
- package/README.md +58 -2
- package/dist/assets-command.d.ts +16 -0
- package/dist/assets-command.d.ts.map +1 -0
- package/dist/assets-command.js +145 -0
- package/dist/assets-command.js.map +1 -0
- package/dist/assist-command.d.ts +19 -0
- package/dist/assist-command.d.ts.map +1 -0
- package/dist/assist-command.js +268 -0
- package/dist/assist-command.js.map +1 -0
- package/dist/auth-command.d.ts +14 -0
- package/dist/auth-command.d.ts.map +1 -0
- package/dist/auth-command.js +233 -0
- package/dist/auth-command.js.map +1 -0
- package/dist/bin.d.ts +3 -0
- package/dist/bin.d.ts.map +1 -0
- package/dist/bin.js +60 -0
- package/dist/bin.js.map +1 -0
- package/dist/build-command.d.ts +23 -0
- package/dist/build-command.d.ts.map +1 -0
- package/dist/build-command.js +123 -0
- package/dist/build-command.js.map +1 -0
- package/dist/cli.d.ts +46 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +823 -0
- package/dist/cli.js.map +1 -0
- package/dist/cloud-client.d.ts +246 -0
- package/dist/cloud-client.d.ts.map +1 -0
- package/dist/cloud-client.js +591 -0
- package/dist/cloud-client.js.map +1 -0
- package/dist/cloud-command.d.ts +56 -0
- package/dist/cloud-command.d.ts.map +1 -0
- package/dist/cloud-command.js +81 -0
- package/dist/cloud-command.js.map +1 -0
- package/dist/cloud-context.d.ts +106 -0
- package/dist/cloud-context.d.ts.map +1 -0
- package/dist/cloud-context.js +185 -0
- package/dist/cloud-context.js.map +1 -0
- package/dist/cloud-errors.d.ts +37 -0
- package/dist/cloud-errors.d.ts.map +1 -0
- package/dist/cloud-errors.js +46 -0
- package/dist/cloud-errors.js.map +1 -0
- package/dist/cloud-host.d.ts +72 -0
- package/dist/cloud-host.d.ts.map +1 -0
- package/dist/cloud-host.js +129 -0
- package/dist/cloud-host.js.map +1 -0
- package/dist/cloud-manifest.d.ts +12 -0
- package/dist/cloud-manifest.d.ts.map +1 -0
- package/dist/cloud-manifest.js +21 -0
- package/dist/cloud-manifest.js.map +1 -0
- package/dist/cloud-paths.d.ts +48 -0
- package/dist/cloud-paths.d.ts.map +1 -0
- package/dist/cloud-paths.js +104 -0
- package/dist/cloud-paths.js.map +1 -0
- package/dist/credentials.d.ts +107 -0
- package/dist/credentials.d.ts.map +1 -0
- package/dist/credentials.js +243 -0
- package/dist/credentials.js.map +1 -0
- package/dist/export-command.d.ts +35 -0
- package/dist/export-command.d.ts.map +1 -0
- package/dist/export-command.js +524 -0
- package/dist/export-command.js.map +1 -0
- package/dist/import-command.d.ts +20 -0
- package/dist/import-command.d.ts.map +1 -0
- package/dist/import-command.js +254 -0
- package/dist/import-command.js.map +1 -0
- package/dist/index.d.ts +4 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +4 -0
- package/dist/index.js.map +1 -0
- package/dist/init-command.d.ts +28 -0
- package/dist/init-command.d.ts.map +1 -0
- package/dist/init-command.js +199 -0
- package/dist/init-command.js.map +1 -0
- package/dist/login-listener.d.ts +58 -0
- package/dist/login-listener.d.ts.map +1 -0
- package/dist/login-listener.js +173 -0
- package/dist/login-listener.js.map +1 -0
- package/dist/messages/en.d.ts +533 -0
- package/dist/messages/en.d.ts.map +1 -0
- package/dist/messages/en.js +803 -0
- package/dist/messages/en.js.map +1 -0
- package/dist/messages/es.d.ts +3 -0
- package/dist/messages/es.d.ts.map +1 -0
- package/dist/messages/es.js +764 -0
- package/dist/messages/es.js.map +1 -0
- package/dist/messages/index.d.ts +442 -0
- package/dist/messages/index.d.ts.map +1 -0
- package/dist/messages/index.js +42 -0
- package/dist/messages/index.js.map +1 -0
- package/dist/messages/push-pull-en.d.ts +84 -0
- package/dist/messages/push-pull-en.d.ts.map +1 -0
- package/dist/messages/push-pull-en.js +146 -0
- package/dist/messages/push-pull-en.js.map +1 -0
- package/dist/messages/push-pull-es.d.ts +7 -0
- package/dist/messages/push-pull-es.d.ts.map +1 -0
- package/dist/messages/push-pull-es.js +144 -0
- package/dist/messages/push-pull-es.js.map +1 -0
- package/dist/open-url.d.ts +11 -0
- package/dist/open-url.d.ts.map +1 -0
- package/dist/open-url.js +36 -0
- package/dist/open-url.js.map +1 -0
- package/dist/plugins-command.d.ts +15 -0
- package/dist/plugins-command.d.ts.map +1 -0
- package/dist/plugins-command.js +106 -0
- package/dist/plugins-command.js.map +1 -0
- package/dist/preview.d.ts +54 -0
- package/dist/preview.d.ts.map +1 -0
- package/dist/preview.js +249 -0
- package/dist/preview.js.map +1 -0
- package/dist/project-errors.d.ts +17 -0
- package/dist/project-errors.d.ts.map +1 -0
- package/dist/project-errors.js +85 -0
- package/dist/project-errors.js.map +1 -0
- package/dist/projects-command.d.ts +13 -0
- package/dist/projects-command.d.ts.map +1 -0
- package/dist/projects-command.js +85 -0
- package/dist/projects-command.js.map +1 -0
- package/dist/publish-command.d.ts +41 -0
- package/dist/publish-command.d.ts.map +1 -0
- package/dist/publish-command.js +311 -0
- package/dist/publish-command.js.map +1 -0
- package/dist/pull-command.d.ts +21 -0
- package/dist/pull-command.d.ts.map +1 -0
- package/dist/pull-command.js +300 -0
- package/dist/pull-command.js.map +1 -0
- package/dist/push-command.d.ts +31 -0
- package/dist/push-command.d.ts.map +1 -0
- package/dist/push-command.js +391 -0
- package/dist/push-command.js.map +1 -0
- package/dist/push-review.d.ts +16 -0
- package/dist/push-review.d.ts.map +1 -0
- package/dist/push-review.js +72 -0
- package/dist/push-review.js.map +1 -0
- package/dist/push-set.d.ts +126 -0
- package/dist/push-set.d.ts.map +1 -0
- package/dist/push-set.js +289 -0
- package/dist/push-set.js.map +1 -0
- package/dist/push-validation.d.ts +20 -0
- package/dist/push-validation.d.ts.map +1 -0
- package/dist/push-validation.js +70 -0
- package/dist/push-validation.js.map +1 -0
- package/dist/redact.d.ts +9 -0
- package/dist/redact.d.ts.map +1 -0
- package/dist/redact.js +22 -0
- package/dist/redact.js.map +1 -0
- package/dist/review-command.d.ts +44 -0
- package/dist/review-command.d.ts.map +1 -0
- package/dist/review-command.js +348 -0
- package/dist/review-command.js.map +1 -0
- package/package.json +56 -3
- package/templates/c4/diagrams/views.meltemi +16 -0
- package/templates/c4/models/system.meltemi +23 -0
- package/templates/ci/github.yml +96 -0
- package/templates/ci/gitlab.yml +53 -0
- package/templates/flow/diagrams/overview.meltemi +15 -0
- package/templates/free/diagrams/slide.meltemi +39 -0
- package/templates/purchase/diagrams/architecture.meltemi +36 -0
- package/templates/purchase/diagrams/executive.meltemi +52 -0
- package/templates/purchase/diagrams/payment.meltemi +42 -0
- package/templates/purchase/models/commerce.meltemi +30 -0
- package/templates/purchase/stories/purchase.meltemi +38 -0
- 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"}
|