@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,243 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Where the command line keeps its sign-in (`cli-cloud`, "Signing in from the command line"):
|
|
3
|
+
* `credentials.json` in the user's configuration folder, one entry `{ token, id, user }` per host,
|
|
4
|
+
* and how a command finds the host and the token it uses.
|
|
5
|
+
*
|
|
6
|
+
* - The host is `--host`, else `MELTEMI_HOST`, else `https://diagrams.meltemi.dev`: never a
|
|
7
|
+
* manifest's (`checkManifestHost` fails with `cloud.host-mismatch` when `project.json` names
|
|
8
|
+
* another one).
|
|
9
|
+
* - The token is `MELTEMI_TOKEN` in the environment, else the file's entry for the host.
|
|
10
|
+
* - The file is written owner-only (`0o600`, in a `0o700` folder) where the system has such modes,
|
|
11
|
+
* through a temporary file and a rename, so a failure never leaves half a file. Windows keeps the
|
|
12
|
+
* ACLs the user's profile folder has.
|
|
13
|
+
* - A file that cannot be read as credentials is reported (`credentials.corrupt`) and never
|
|
14
|
+
* overwritten.
|
|
15
|
+
*/
|
|
16
|
+
import { randomBytes } from "node:crypto";
|
|
17
|
+
import { chmodSync, mkdirSync, readFileSync, renameSync, rmSync, statSync, writeFileSync, } from "node:fs";
|
|
18
|
+
import { homedir } from "node:os";
|
|
19
|
+
import { posix, win32 } from "node:path";
|
|
20
|
+
import { cloudHostOrigin, parseCloudHost } from "@meltemi/diagrams-project";
|
|
21
|
+
import { CloudError } from "./cloud-errors.js";
|
|
22
|
+
/** The service every cloud command talks to unless `--host` or `MELTEMI_HOST` says otherwise. */
|
|
23
|
+
export const DEFAULT_HOST = "https://diagrams.meltemi.dev";
|
|
24
|
+
/** The folder of the configuration, and the file of the credentials in it. */
|
|
25
|
+
export const CONFIGURATION_FOLDER = "meltemi-diagrams";
|
|
26
|
+
export const CREDENTIALS_FILE = "credentials.json";
|
|
27
|
+
/** The most a credentials file may weigh: it holds a few entries. */
|
|
28
|
+
const MAX_FILE_BYTES = 1024 * 1024;
|
|
29
|
+
/**
|
|
30
|
+
* The folder of the configuration: `%APPDATA%\meltemi-diagrams` on Windows;
|
|
31
|
+
* `$XDG_CONFIG_HOME/meltemi-diagrams` elsewhere (an absolute value only, as the specification
|
|
32
|
+
* says), else `~/.config/meltemi-diagrams`.
|
|
33
|
+
*/
|
|
34
|
+
export function configurationFolder(options) {
|
|
35
|
+
const platform = options.platform ?? process.platform;
|
|
36
|
+
const env = options.env;
|
|
37
|
+
if (platform === "win32") {
|
|
38
|
+
const home = options.home ?? (env["USERPROFILE"]?.trim() || homedir());
|
|
39
|
+
const appData = env["APPDATA"]?.trim();
|
|
40
|
+
return win32.join(appData ? appData : win32.join(home, "AppData", "Roaming"), CONFIGURATION_FOLDER);
|
|
41
|
+
}
|
|
42
|
+
const home = options.home ?? (env["HOME"]?.trim() || homedir());
|
|
43
|
+
const xdg = env["XDG_CONFIG_HOME"]?.trim();
|
|
44
|
+
return posix.join(xdg && posix.isAbsolute(xdg) ? xdg : posix.join(home, ".config"), CONFIGURATION_FOLDER);
|
|
45
|
+
}
|
|
46
|
+
/** The credentials file of an environment. */
|
|
47
|
+
export function credentialsPath(options) {
|
|
48
|
+
const platform = options.platform ?? process.platform;
|
|
49
|
+
return (platform === "win32" ? win32 : posix).join(configurationFolder(options), CREDENTIALS_FILE);
|
|
50
|
+
}
|
|
51
|
+
// ------------------------------------------------------------------------------------ hosts
|
|
52
|
+
/**
|
|
53
|
+
* The host a cloud command talks to: `--host` (`flag`), else `MELTEMI_HOST`, else the default. An
|
|
54
|
+
* empty `MELTEMI_HOST` counts as not set, as CI expands an unset variable. The answer is the
|
|
55
|
+
* normalised origin. Throws `cloud.host-invalid` for a text that is not an origin and
|
|
56
|
+
* `cloud.insecure-host` for `http:` anywhere but the loopback (`127.0.0.1`, `localhost`, `[::1]`),
|
|
57
|
+
* before anything is sent.
|
|
58
|
+
*/
|
|
59
|
+
export function resolveHost(options) {
|
|
60
|
+
const fromEnvironment = options.env["MELTEMI_HOST"]?.trim();
|
|
61
|
+
const raw = options.flag ?? (fromEnvironment ? fromEnvironment : DEFAULT_HOST);
|
|
62
|
+
const parsed = parseCloudHost(raw);
|
|
63
|
+
if (parsed.ok)
|
|
64
|
+
return parsed.origin;
|
|
65
|
+
if (parsed.reason === "insecure") {
|
|
66
|
+
throw new CloudError("cloud.insecure-host", `${raw} is an http: address; a token only travels over https:, or http: to 127.0.0.1, localhost or [::1].`, { details: { host: raw } });
|
|
67
|
+
}
|
|
68
|
+
throw new CloudError("cloud.host-invalid", `${raw} is not the address of a service; use an origin such as ${DEFAULT_HOST}.`, { details: { host: raw } });
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Fails with `cloud.host-mismatch`, naming both hosts and `--host`, when a project's `cloud.host`
|
|
72
|
+
* is not the host the command resolved. A manifest never chooses where a token goes. Call it before
|
|
73
|
+
* any request; `manifestHost` is `project.json`'s `cloud.host` (absent when it names none).
|
|
74
|
+
*/
|
|
75
|
+
export function checkManifestHost(resolved, manifestHost) {
|
|
76
|
+
if (manifestHost === null || manifestHost === undefined)
|
|
77
|
+
return;
|
|
78
|
+
if (cloudHostOrigin(manifestHost) === resolved)
|
|
79
|
+
return;
|
|
80
|
+
throw new CloudError("cloud.host-mismatch", `project.json names ${manifestHost}, but this command talks to ${resolved}; pass --host ${manifestHost} to use it.`, { details: { manifestHost, host: resolved } });
|
|
81
|
+
}
|
|
82
|
+
const isRecord = (value) => typeof value === "object" && value !== null && !Array.isArray(value);
|
|
83
|
+
/** The entry a value is, or undefined when it is not one. */
|
|
84
|
+
function readEntry(value) {
|
|
85
|
+
if (!isRecord(value) || !isRecord(value["user"]))
|
|
86
|
+
return undefined;
|
|
87
|
+
const { token, id } = value;
|
|
88
|
+
const { sub, name } = value["user"];
|
|
89
|
+
if (typeof token !== "string" || token === "" || /\s/.test(token))
|
|
90
|
+
return undefined;
|
|
91
|
+
if (typeof id !== "string" || id === "")
|
|
92
|
+
return undefined;
|
|
93
|
+
if (typeof sub !== "string" || typeof name !== "string")
|
|
94
|
+
return undefined;
|
|
95
|
+
return { token, id, user: { sub, name } };
|
|
96
|
+
}
|
|
97
|
+
/** The token of `MELTEMI_TOKEN`, when it is set to something. */
|
|
98
|
+
export function environmentToken(env) {
|
|
99
|
+
const token = env["MELTEMI_TOKEN"]?.trim();
|
|
100
|
+
return token ? token : undefined;
|
|
101
|
+
}
|
|
102
|
+
/**
|
|
103
|
+
* The credentials file. A missing file is an empty one. A file that is not JSON, not an object, or
|
|
104
|
+
* whose `hosts` is not an object, or whose entry for the host asked about is not an entry, is
|
|
105
|
+
* `credentials.corrupt`; nothing is written over it, so the person can read what is there.
|
|
106
|
+
* Entries of other hosts and fields it does not know are kept as they were found.
|
|
107
|
+
*/
|
|
108
|
+
export class CredentialsStore {
|
|
109
|
+
path;
|
|
110
|
+
folder;
|
|
111
|
+
constructor(options) {
|
|
112
|
+
const platform = options.platform ?? process.platform;
|
|
113
|
+
this.folder = configurationFolder(options);
|
|
114
|
+
this.path = (platform === "win32" ? win32 : posix).join(this.folder, CREDENTIALS_FILE);
|
|
115
|
+
}
|
|
116
|
+
corrupt(reason) {
|
|
117
|
+
return new CloudError("credentials.corrupt", `The credentials file ${this.path} cannot be used: ${reason}. Fix it or delete it.`, { details: { path: this.path, reason } });
|
|
118
|
+
}
|
|
119
|
+
load() {
|
|
120
|
+
let text;
|
|
121
|
+
try {
|
|
122
|
+
const size = statSync(this.path).size;
|
|
123
|
+
if (size > MAX_FILE_BYTES)
|
|
124
|
+
throw this.corrupt("it is too large");
|
|
125
|
+
text = readFileSync(this.path, "utf8");
|
|
126
|
+
}
|
|
127
|
+
catch (error) {
|
|
128
|
+
if (error instanceof CloudError)
|
|
129
|
+
throw error;
|
|
130
|
+
// Nothing there, or a folder in the path that is not one: no file yet (writing says why not).
|
|
131
|
+
const reason = error.code;
|
|
132
|
+
if (reason === "ENOENT" || reason === "ENOTDIR")
|
|
133
|
+
return { hosts: {}, others: {} };
|
|
134
|
+
throw new CloudError("credentials.unreadable", `The credentials file ${this.path} cannot be read: ${error.message}`, { details: { path: this.path, reason: error.message } });
|
|
135
|
+
}
|
|
136
|
+
let parsed;
|
|
137
|
+
try {
|
|
138
|
+
parsed = JSON.parse(text.charCodeAt(0) === 0xfeff ? text.slice(1) : text);
|
|
139
|
+
}
|
|
140
|
+
catch (error) {
|
|
141
|
+
throw this.corrupt(`it is not valid JSON (${error.message})`);
|
|
142
|
+
}
|
|
143
|
+
if (!isRecord(parsed))
|
|
144
|
+
throw this.corrupt("it is not a JSON object");
|
|
145
|
+
const { hosts, ...others } = parsed;
|
|
146
|
+
if (hosts === undefined)
|
|
147
|
+
return { hosts: {}, others };
|
|
148
|
+
if (!isRecord(hosts))
|
|
149
|
+
throw this.corrupt('"hosts" is not an object');
|
|
150
|
+
return { hosts, others };
|
|
151
|
+
}
|
|
152
|
+
/** Reads the file and makes its folder, so that a command finds out before it asks for a token. */
|
|
153
|
+
prepare() {
|
|
154
|
+
this.load();
|
|
155
|
+
try {
|
|
156
|
+
mkdirSync(this.folder, { recursive: true, mode: 0o700 });
|
|
157
|
+
}
|
|
158
|
+
catch (error) {
|
|
159
|
+
throw new CloudError("credentials.unwritable", `The credentials folder ${this.folder} cannot be made: ${error.message}`, { details: { path: this.folder, reason: error.message } });
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
/** The hosts that have an entry. */
|
|
163
|
+
hosts() {
|
|
164
|
+
return Object.keys(this.load().hosts);
|
|
165
|
+
}
|
|
166
|
+
/** The entry of a host, or undefined; `credentials.corrupt` when what is there is not an entry. */
|
|
167
|
+
entry(host) {
|
|
168
|
+
const stored = this.load().hosts[host];
|
|
169
|
+
if (stored === undefined)
|
|
170
|
+
return undefined;
|
|
171
|
+
const entry = readEntry(stored);
|
|
172
|
+
if (entry === undefined) {
|
|
173
|
+
throw this.corrupt(`the entry for ${host} needs "token", "id" and "user" with "sub" and "name"`);
|
|
174
|
+
}
|
|
175
|
+
return entry;
|
|
176
|
+
}
|
|
177
|
+
/** Keeps the entry of a host, replacing the one it had. */
|
|
178
|
+
save(host, entry) {
|
|
179
|
+
const { hosts, others } = this.load();
|
|
180
|
+
this.write({ ...others, hosts: { ...hosts, [host]: entry } });
|
|
181
|
+
}
|
|
182
|
+
/** Forgets the entry of a host; whether there was one. The file goes when nothing is left in it. */
|
|
183
|
+
remove(host) {
|
|
184
|
+
const { hosts, others } = this.load();
|
|
185
|
+
if (!(host in hosts))
|
|
186
|
+
return false;
|
|
187
|
+
const { [host]: _removed, ...rest } = hosts;
|
|
188
|
+
if (Object.keys(rest).length === 0 && Object.keys(others).length === 0) {
|
|
189
|
+
try {
|
|
190
|
+
rmSync(this.path, { force: true });
|
|
191
|
+
}
|
|
192
|
+
catch (error) {
|
|
193
|
+
throw this.unwritable(error);
|
|
194
|
+
}
|
|
195
|
+
return true;
|
|
196
|
+
}
|
|
197
|
+
this.write({ ...others, hosts: rest });
|
|
198
|
+
return true;
|
|
199
|
+
}
|
|
200
|
+
unwritable(error) {
|
|
201
|
+
return new CloudError("credentials.unwritable", `The credentials file ${this.path} cannot be written: ${error.message}`, { details: { path: this.path, reason: error.message } });
|
|
202
|
+
}
|
|
203
|
+
/** Writes owner-only through a temporary file in the same folder, then renames it into place. */
|
|
204
|
+
write(document) {
|
|
205
|
+
const temporary = `${this.path}.${process.pid}.${randomBytes(6).toString("hex")}.tmp`;
|
|
206
|
+
try {
|
|
207
|
+
mkdirSync(this.folder, { recursive: true, mode: 0o700 });
|
|
208
|
+
// A folder that was already there keeps its mode through mkdir: tighten it, as it holds tokens.
|
|
209
|
+
if (process.platform !== "win32")
|
|
210
|
+
chmodSync(this.folder, 0o700);
|
|
211
|
+
writeFileSync(temporary, `${JSON.stringify(document, null, 2)}\n`, {
|
|
212
|
+
encoding: "utf8",
|
|
213
|
+
mode: 0o600,
|
|
214
|
+
flag: "wx",
|
|
215
|
+
});
|
|
216
|
+
// The mode of a new file is subject to the umask and ignored where it is already there.
|
|
217
|
+
if (process.platform !== "win32")
|
|
218
|
+
chmodSync(temporary, 0o600);
|
|
219
|
+
renameSync(temporary, this.path);
|
|
220
|
+
}
|
|
221
|
+
catch (error) {
|
|
222
|
+
try {
|
|
223
|
+
rmSync(temporary, { force: true });
|
|
224
|
+
}
|
|
225
|
+
catch {
|
|
226
|
+
// Nothing more to do with a temporary file that will not go.
|
|
227
|
+
}
|
|
228
|
+
throw this.unwritable(error);
|
|
229
|
+
}
|
|
230
|
+
}
|
|
231
|
+
/**
|
|
232
|
+
* The token a command uses for a host: `MELTEMI_TOKEN` when it is set (the file is not even
|
|
233
|
+
* read), else the host's entry. Undefined when there is none.
|
|
234
|
+
*/
|
|
235
|
+
resolveToken(host, env) {
|
|
236
|
+
const token = environmentToken(env);
|
|
237
|
+
if (token !== undefined)
|
|
238
|
+
return { token, source: "environment" };
|
|
239
|
+
const entry = this.entry(host);
|
|
240
|
+
return entry === undefined ? undefined : { token: entry.token, source: "file", entry };
|
|
241
|
+
}
|
|
242
|
+
}
|
|
243
|
+
//# sourceMappingURL=credentials.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"credentials.js","sourceRoot":"","sources":["../src/credentials.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { WRITABLE_FORMATS, type ProjectSessions } from "@meltemi/diagrams-editor/node";
|
|
2
|
+
import type { Diagnostic } from "@meltemi/diagrams-language";
|
|
3
|
+
import { type Compilation } from "@meltemi/diagrams-model";
|
|
4
|
+
import { type Workspace } from "@meltemi/diagrams-project";
|
|
5
|
+
import { exportFileName } from "@meltemi/diagrams-editor";
|
|
6
|
+
export { WRITABLE_FORMATS, exportFileName };
|
|
7
|
+
/** What `export` needs from the command line around it. */
|
|
8
|
+
export interface ExportHost {
|
|
9
|
+
readonly name: string;
|
|
10
|
+
readonly io: {
|
|
11
|
+
readonly stdout: (text: string) => void;
|
|
12
|
+
readonly stderr: (text: string) => void;
|
|
13
|
+
readonly cwd: string;
|
|
14
|
+
};
|
|
15
|
+
readonly display: (path: string) => string;
|
|
16
|
+
readonly projects: () => ProjectSessions;
|
|
17
|
+
readonly readSource: (path: string) => {
|
|
18
|
+
file: string;
|
|
19
|
+
text: string;
|
|
20
|
+
} | undefined;
|
|
21
|
+
readonly projectDiagnostics: (workspace: Workspace) => Map<string, readonly Diagnostic[]>;
|
|
22
|
+
readonly printDiagnostics: (out: (text: string) => void, path: string, diagnostics: readonly Diagnostic[]) => void;
|
|
23
|
+
}
|
|
24
|
+
export declare const EXIT_OK = 0;
|
|
25
|
+
export declare const EXIT_FINDINGS = 1;
|
|
26
|
+
export declare const EXIT_USAGE = 2;
|
|
27
|
+
export declare const FONT_POLICIES: readonly ["embedded", "outlined", "system"];
|
|
28
|
+
export declare const MOTION_MODES: readonly ["static", "animated"];
|
|
29
|
+
export declare function noDiagramDiagnostic(compilation: Compilation): Diagnostic;
|
|
30
|
+
/**
|
|
31
|
+
* `meltemi-diagrams export`: diagrams, story frames, players and profiles of a file, or of every
|
|
32
|
+
* file of a project folder.
|
|
33
|
+
*/
|
|
34
|
+
export declare function exportCommand(args: readonly string[], host: ExportHost): number;
|
|
35
|
+
//# sourceMappingURL=export-command.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"export-command.d.ts","sourceRoot":"","sources":["../src/export-command.ts"],"names":[],"mappings":"AAIA,OAAO,EAEL,gBAAgB,EAMhB,KAAK,eAAe,EAErB,MAAM,+BAA+B,CAAC;AACvC,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;AAC7D,OAAO,EAAiC,KAAK,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAG1F,OAAO,EAAiB,KAAK,SAAS,EAAE,MAAM,2BAA2B,CAAC;AAG1E,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAG1D,OAAO,EAAE,gBAAgB,EAAE,cAAc,EAAE,CAAC;AAE5C,2DAA2D;AAC3D,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,EAAE,EAAE;QACX,QAAQ,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;QACxC,QAAQ,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;QACxC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;KACtB,CAAC;IACF,QAAQ,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,CAAC;IAC3C,QAAQ,CAAC,QAAQ,EAAE,MAAM,eAAe,CAAC;IACzC,QAAQ,CAAC,UAAU,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,GAAG,SAAS,CAAC;IAClF,QAAQ,CAAC,kBAAkB,EAAE,CAAC,SAAS,EAAE,SAAS,KAAK,GAAG,CAAC,MAAM,EAAE,SAAS,UAAU,EAAE,CAAC,CAAC;IAC1F,QAAQ,CAAC,gBAAgB,EAAE,CACzB,GAAG,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,EAC3B,IAAI,EAAE,MAAM,EACZ,WAAW,EAAE,SAAS,UAAU,EAAE,KAC/B,IAAI,CAAC;CACX;AAED,eAAO,MAAM,OAAO,IAAI,CAAC;AACzB,eAAO,MAAM,aAAa,IAAI,CAAC;AAC/B,eAAO,MAAM,UAAU,IAAI,CAAC;AAG5B,eAAO,MAAM,aAAa,6CAA8C,CAAC;AACzE,eAAO,MAAM,YAAY,iCAAkC,CAAC;AAkF5D,wBAAgB,mBAAmB,CAAC,WAAW,EAAE,WAAW,GAAG,UAAU,CAYxE;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,EAAE,IAAI,EAAE,UAAU,GAAG,MAAM,CA8a/E"}
|