@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
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Architecture Studio contributors
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
CHANGED
|
@@ -1,3 +1,59 @@
|
|
|
1
|
-
#
|
|
1
|
+
# @meltemi/diagrams-cli
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
The command line of Meltemi Diagrams, `meltemi-diagrams` (alias `mdg`): start a project from a
|
|
4
|
+
template, preview its catalog with live reload, validate, format, lay out, import Mermaid and
|
|
5
|
+
PlantUML, export SVG, PNG, PDF, the HTML player, MP4, WebM and GIF, build the catalog, review what
|
|
6
|
+
changed since a Git revision or the cloud, use optional AI assistance, and keep a project in step
|
|
7
|
+
with the optional cloud service: sign in, push a folder, pull a project and publish the catalog.
|
|
8
|
+
|
|
9
|
+
It is part of [Meltemi Diagrams](https://github.com/askenaz-dev/meltemi-diagrams#readme), diagrams as code with a canvas, motion and
|
|
10
|
+
exports. Every package of the product has the same version.
|
|
11
|
+
|
|
12
|
+
## Install
|
|
13
|
+
|
|
14
|
+
```bash
|
|
15
|
+
npm install --global @meltemi/diagrams-cli
|
|
16
|
+
```
|
|
17
|
+
|
|
18
|
+
Node 22.12.0 or later. The package is an ES module with type declarations.
|
|
19
|
+
|
|
20
|
+
## Use
|
|
21
|
+
|
|
22
|
+
```bash
|
|
23
|
+
npm install --global @meltemi/diagrams-cli
|
|
24
|
+
meltemi-diagrams init shop --template purchase
|
|
25
|
+
meltemi-diagrams validate shop
|
|
26
|
+
meltemi-diagrams export shop --format png
|
|
27
|
+
meltemi-diagrams build catalog shop
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
PNG, PDF and video use the installed Edge or Chrome; video also uses the installed FFmpeg.
|
|
31
|
+
|
|
32
|
+
The cloud commands talk to the optional cloud service with an API token, and only when you run them:
|
|
33
|
+
|
|
34
|
+
```bash
|
|
35
|
+
meltemi-diagrams login
|
|
36
|
+
meltemi-diagrams push shop --create
|
|
37
|
+
meltemi-diagrams review shop --base cloud
|
|
38
|
+
meltemi-diagrams pull shop
|
|
39
|
+
meltemi-diagrams publish shop
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
`login` opens your browser and keeps a token in your configuration folder (`logout` revokes it,
|
|
43
|
+
`whoami` says who it is for, `projects` lists your cloud projects); `MELTEMI_TOKEN` in the
|
|
44
|
+
environment replaces it, for CI. A token goes only to the service you name (`--host`,
|
|
45
|
+
`MELTEMI_HOST`, else `https://diagrams.meltemi.dev`) and is never printed. `init --ci github --cloud`
|
|
46
|
+
adds a job that pushes on merge.
|
|
47
|
+
|
|
48
|
+
Messages are in English or Spanish: `--lang en|es`, else `MELTEMI_LANG` or the system's language.
|
|
49
|
+
Written files follow `--lang`, else the project's `"locale"`, else English, never the machine.
|
|
50
|
+
|
|
51
|
+
## Documentation
|
|
52
|
+
|
|
53
|
+
- [The command line](https://github.com/askenaz-dev/meltemi-diagrams/blob/main/docs/cli.md)
|
|
54
|
+
- [Getting started](https://github.com/askenaz-dev/meltemi-diagrams/blob/main/docs/getting-started.md)
|
|
55
|
+
- [All documentation](https://github.com/askenaz-dev/meltemi-diagrams/blob/main/docs/README.md)
|
|
56
|
+
|
|
57
|
+
## Licence
|
|
58
|
+
|
|
59
|
+
MIT. Third-party components and their licences are listed in [THIRD_PARTY_LICENSES.md](https://github.com/askenaz-dev/meltemi-diagrams/blob/main/THIRD_PARTY_LICENSES.md).
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { type Workspace } from "@meltemi/diagrams-project";
|
|
2
|
+
/** What the assets command needs from the CLI: output, paths, project lookup and diagnostics. */
|
|
3
|
+
export interface AssetsContext {
|
|
4
|
+
readonly name: string;
|
|
5
|
+
readonly stdout: (text: string) => void;
|
|
6
|
+
readonly stderr: (text: string) => void;
|
|
7
|
+
readonly cwd: string;
|
|
8
|
+
/** A path as printed: relative to the working folder. */
|
|
9
|
+
readonly display: (path: string) => string;
|
|
10
|
+
readonly workspaceFor: (path: string, isDirectory: boolean) => Workspace;
|
|
11
|
+
/** Prints the manifest and asset diagnostics of a project; returns whether there are errors. */
|
|
12
|
+
readonly printProject: (workspace: Workspace) => boolean;
|
|
13
|
+
}
|
|
14
|
+
/** `meltemi-diagrams assets list|icons|lock`. */
|
|
15
|
+
export declare function assetsCommand(args: readonly string[], context: AssetsContext): number;
|
|
16
|
+
//# sourceMappingURL=assets-command.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"assets-command.d.ts","sourceRoot":"","sources":["../src/assets-command.ts"],"names":[],"mappings":"AAIA,OAAO,EAA2B,KAAK,SAAS,EAAE,MAAM,2BAA2B,CAAC;AAGpF,iGAAiG;AACjG,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,EAAE,WAAW,EAAE,OAAO,KAAK,SAAS,CAAC;IACzE,gGAAgG;IAChG,QAAQ,CAAC,YAAY,EAAE,CAAC,SAAS,EAAE,SAAS,KAAK,OAAO,CAAC;CAC1D;AAwBD,iDAAiD;AACjD,wBAAgB,aAAa,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,EAAE,OAAO,EAAE,aAAa,GAAG,MAAM,CAkCrF"}
|
|
@@ -0,0 +1,145 @@
|
|
|
1
|
+
import { statSync, writeFileSync } from "node:fs";
|
|
2
|
+
import { resolve } from "node:path";
|
|
3
|
+
import { parseArgs } from "node:util";
|
|
4
|
+
import { LOCK_NAME, formatLock, searchIcons } from "@meltemi/diagrams-assets";
|
|
5
|
+
import { joinPath, toProjectPath } from "@meltemi/diagrams-project";
|
|
6
|
+
import { argumentsError, messages } from "./messages/index.js";
|
|
7
|
+
const EXIT_OK = 0;
|
|
8
|
+
const EXIT_FINDINGS = 1;
|
|
9
|
+
const EXIT_USAGE = 2;
|
|
10
|
+
function project(context, path, command) {
|
|
11
|
+
const absolute = toProjectPath(resolve(context.cwd, path ?? "."));
|
|
12
|
+
let isDirectory;
|
|
13
|
+
try {
|
|
14
|
+
isDirectory = statSync(absolute).isDirectory();
|
|
15
|
+
}
|
|
16
|
+
catch {
|
|
17
|
+
context.stderr(`${context.name} assets ${command}: ${messages().common.pathNotFound(path ?? ".")}\n`);
|
|
18
|
+
return undefined;
|
|
19
|
+
}
|
|
20
|
+
return context.workspaceFor(absolute, isDirectory);
|
|
21
|
+
}
|
|
22
|
+
/** `meltemi-diagrams assets list|icons|lock`. */
|
|
23
|
+
export function assetsCommand(args, context) {
|
|
24
|
+
const [subcommand, ...rest] = args;
|
|
25
|
+
if (subcommand === undefined || subcommand === "-h" || subcommand === "--help") {
|
|
26
|
+
context.stdout(messages().help.assets);
|
|
27
|
+
return subcommand === undefined ? EXIT_USAGE : EXIT_OK;
|
|
28
|
+
}
|
|
29
|
+
let values;
|
|
30
|
+
let positionals;
|
|
31
|
+
try {
|
|
32
|
+
const parsed = parseArgs({
|
|
33
|
+
args: [...rest],
|
|
34
|
+
options: { project: { type: "string" }, limit: { type: "string" } },
|
|
35
|
+
allowPositionals: true,
|
|
36
|
+
strict: true,
|
|
37
|
+
});
|
|
38
|
+
values = parsed.values;
|
|
39
|
+
positionals = parsed.positionals;
|
|
40
|
+
}
|
|
41
|
+
catch (error) {
|
|
42
|
+
context.stderr(`${context.name} assets: ${argumentsError(error)}\n`);
|
|
43
|
+
return EXIT_USAGE;
|
|
44
|
+
}
|
|
45
|
+
switch (subcommand) {
|
|
46
|
+
case "list":
|
|
47
|
+
return list(context, positionals[0]);
|
|
48
|
+
case "icons":
|
|
49
|
+
return icons(context, positionals.join(" "), values.project, values.limit);
|
|
50
|
+
case "lock":
|
|
51
|
+
return lock(context, positionals[0]);
|
|
52
|
+
default:
|
|
53
|
+
context.stderr(`${context.name} assets: ${messages().assets.unknownSubcommand(subcommand)}\n`);
|
|
54
|
+
return EXIT_USAGE;
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
function list(context, path) {
|
|
58
|
+
const workspace = project(context, path, "list");
|
|
59
|
+
if (!workspace)
|
|
60
|
+
return EXIT_USAGE;
|
|
61
|
+
const assets = workspace.assets();
|
|
62
|
+
const t = messages().assets;
|
|
63
|
+
const rows = [];
|
|
64
|
+
for (const pack of assets.registry.list()) {
|
|
65
|
+
const meta = pack.metadata;
|
|
66
|
+
rows.push([
|
|
67
|
+
pack.prefix,
|
|
68
|
+
meta.version ?? "-",
|
|
69
|
+
meta.source,
|
|
70
|
+
meta.license ?? t.noLicence,
|
|
71
|
+
t.icons(pack.names().length),
|
|
72
|
+
meta.redistribute ? "" : t.noRedistribution,
|
|
73
|
+
]);
|
|
74
|
+
}
|
|
75
|
+
context.stdout(`${t.packs}\n`);
|
|
76
|
+
context.stdout(table(rows));
|
|
77
|
+
const aliases = Object.entries(assets.registry.aliasList());
|
|
78
|
+
if (aliases.length > 0) {
|
|
79
|
+
context.stdout(`${t.aliases}\n`);
|
|
80
|
+
for (const [alias, target] of aliases.sort())
|
|
81
|
+
context.stdout(` ${alias} -> ${target}\n`);
|
|
82
|
+
}
|
|
83
|
+
if (assets.fonts.length > 0) {
|
|
84
|
+
context.stdout(`${t.fonts}\n`);
|
|
85
|
+
context.stdout(table(assets.fonts.map((font) => [
|
|
86
|
+
font.family ?? "?",
|
|
87
|
+
String(font.weight ?? "-"),
|
|
88
|
+
font.style ?? "-",
|
|
89
|
+
font.relative,
|
|
90
|
+
font.license ?? t.noLicence,
|
|
91
|
+
font.restricted ? t.noEmbedding : "",
|
|
92
|
+
])));
|
|
93
|
+
}
|
|
94
|
+
return context.printProject(workspace) ? EXIT_FINDINGS : EXIT_OK;
|
|
95
|
+
}
|
|
96
|
+
function table(rows) {
|
|
97
|
+
const widths = [];
|
|
98
|
+
for (const row of rows)
|
|
99
|
+
row.forEach((cell, i) => (widths[i] = Math.max(widths[i] ?? 0, cell.length)));
|
|
100
|
+
return rows
|
|
101
|
+
.map((row) => ` ${row
|
|
102
|
+
.map((cell, i) => cell.padEnd(widths[i]))
|
|
103
|
+
.join(" ")
|
|
104
|
+
.trimEnd()}\n`)
|
|
105
|
+
.join("");
|
|
106
|
+
}
|
|
107
|
+
function icons(context, query, projectPath, limitText) {
|
|
108
|
+
if (query.trim() === "") {
|
|
109
|
+
context.stderr(`${context.name} assets icons: ${messages().assets.noWords}\n`);
|
|
110
|
+
return EXIT_USAGE;
|
|
111
|
+
}
|
|
112
|
+
const limit = limitText === undefined ? 50 : Number(limitText);
|
|
113
|
+
if (!Number.isInteger(limit) || limit < 1) {
|
|
114
|
+
context.stderr(`${context.name} assets icons: ${messages().assets.limit}\n`);
|
|
115
|
+
return EXIT_USAGE;
|
|
116
|
+
}
|
|
117
|
+
const workspace = project(context, projectPath, "icons");
|
|
118
|
+
if (!workspace)
|
|
119
|
+
return EXIT_USAGE;
|
|
120
|
+
const found = searchIcons(workspace.assets().registry, query, limit);
|
|
121
|
+
for (const reference of found)
|
|
122
|
+
context.stdout(`${reference}\n`);
|
|
123
|
+
if (found.length === 0) {
|
|
124
|
+
context.stderr(`${messages().assets.noMatch(query)}\n`);
|
|
125
|
+
return EXIT_FINDINGS;
|
|
126
|
+
}
|
|
127
|
+
return EXIT_OK;
|
|
128
|
+
}
|
|
129
|
+
function lock(context, path) {
|
|
130
|
+
const workspace = project(context, path, "lock");
|
|
131
|
+
if (!workspace)
|
|
132
|
+
return EXIT_USAGE;
|
|
133
|
+
const target = joinPath(workspace.root, LOCK_NAME);
|
|
134
|
+
try {
|
|
135
|
+
writeFileSync(target, formatLock(workspace.assets().lock), "utf8");
|
|
136
|
+
}
|
|
137
|
+
catch (error) {
|
|
138
|
+
context.stderr(`${context.name} assets lock: ${messages().common.cannotWrite(target, error.message)}\n`);
|
|
139
|
+
return EXIT_USAGE;
|
|
140
|
+
}
|
|
141
|
+
workspace.invalidate(target);
|
|
142
|
+
context.stdout(`${messages().common.wrote(context.display(target))}\n`);
|
|
143
|
+
return EXIT_OK;
|
|
144
|
+
}
|
|
145
|
+
//# sourceMappingURL=assets-command.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"assets-command.js","sourceRoot":"","sources":["../src/assets-command.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import type { Locale } from "@meltemi/diagrams-i18n";
|
|
2
|
+
/** What the assist command needs from the CLI. */
|
|
3
|
+
export interface AssistContext {
|
|
4
|
+
readonly name: string;
|
|
5
|
+
readonly stdout: (text: string) => void;
|
|
6
|
+
readonly stderr: (text: string) => void;
|
|
7
|
+
readonly cwd: string;
|
|
8
|
+
readonly display: (path: string) => string;
|
|
9
|
+
readonly toolVersion: string;
|
|
10
|
+
/** The language of what the command writes: `--lang`, when given. */
|
|
11
|
+
readonly locale?: Locale;
|
|
12
|
+
/** Where provider settings and keys come from; the process environment by default. */
|
|
13
|
+
readonly env: Readonly<Record<string, string | undefined>>;
|
|
14
|
+
/** Asks the person a question in a terminal; absent when nobody can answer. */
|
|
15
|
+
readonly ask?: (question: string) => Promise<string>;
|
|
16
|
+
}
|
|
17
|
+
/** `meltemi-diagrams assist`. */
|
|
18
|
+
export declare function assistCommand(args: readonly string[], context: AssistContext): Promise<number>;
|
|
19
|
+
//# sourceMappingURL=assist-command.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"assist-command.d.ts","sourceRoot":"","sources":["../src/assist-command.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAC;AA2BrD,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,QAAQ,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,CAAC;IAC3C,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,qEAAqE;IACrE,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,sFAAsF;IACtF,QAAQ,CAAC,GAAG,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC,CAAC;IAC3D,+EAA+E;IAC/E,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;CACtD;AA2DD,iCAAiC;AACjC,wBAAsB,aAAa,CACjC,IAAI,EAAE,SAAS,MAAM,EAAE,EACvB,OAAO,EAAE,aAAa,GACrB,OAAO,CAAC,MAAM,CAAC,CA4HjB"}
|
|
@@ -0,0 +1,268 @@
|
|
|
1
|
+
import { existsSync, mkdirSync, readFileSync, statSync, writeFileSync } from "node:fs";
|
|
2
|
+
import { dirname, resolve } from "node:path";
|
|
3
|
+
import { parseArgs } from "node:util";
|
|
4
|
+
import { PROPOSAL_FORMAT, adapterFor, describeDisclosure, } from "@meltemi/diagrams-assist";
|
|
5
|
+
import { ProjectSessions, applyAssist, gitRevisionHost, prepareAssist, prepareExplain, reviewProjects, runAssist, runExplain, } from "@meltemi/diagrams-editor/node";
|
|
6
|
+
import { describeChange } from "@meltemi/diagrams-model";
|
|
7
|
+
import { joinPath, toProjectPath } from "@meltemi/diagrams-project";
|
|
8
|
+
import { argumentsError, isYes, messages } from "./messages/index.js";
|
|
9
|
+
const EXIT_OK = 0;
|
|
10
|
+
const EXIT_FINDINGS = 1;
|
|
11
|
+
const EXIT_USAGE = 2;
|
|
12
|
+
const OPERATIONS = ["generate", "modify", "relations", "explain", "apply"];
|
|
13
|
+
const PROFILES = ["flow", "c4", "sequence", "free"];
|
|
14
|
+
/** `all`, or a list of item numbers. */
|
|
15
|
+
function readItems(text, proposal) {
|
|
16
|
+
if (text === undefined || text === "all")
|
|
17
|
+
return proposal.items.map((i) => i.id);
|
|
18
|
+
const ids = text.split(",").map((s) => Number(s.trim()));
|
|
19
|
+
if (ids.some((id) => !proposal.items.some((i) => i.id === id))) {
|
|
20
|
+
return messages().assist.items(proposal.items.map((i) => i.id), text);
|
|
21
|
+
}
|
|
22
|
+
return ids;
|
|
23
|
+
}
|
|
24
|
+
function proposalLines(proposal, display) {
|
|
25
|
+
const t = messages().assist;
|
|
26
|
+
const lines = [
|
|
27
|
+
t.proposal(display, proposal.baseRevision, proposal.provider, proposal.model, proposal.summary),
|
|
28
|
+
];
|
|
29
|
+
if (proposal.items.length === 0)
|
|
30
|
+
lines.push(t.nothingToChange);
|
|
31
|
+
for (const item of proposal.items) {
|
|
32
|
+
lines.push(` ${item.id}. ${t.actions[item.action]}${item.block ? ` ${item.block}` : ""}${item.reason ? `: ${item.reason}` : ""}`);
|
|
33
|
+
if (item.action === "relation")
|
|
34
|
+
lines.push(` ${item.text}`);
|
|
35
|
+
for (const change of item.changes)
|
|
36
|
+
lines.push(` ${describeChange(change)}`);
|
|
37
|
+
}
|
|
38
|
+
if (proposal.imports.length > 0)
|
|
39
|
+
lines.push(t.imports(proposal.imports));
|
|
40
|
+
for (const problem of proposal.problems ?? [])
|
|
41
|
+
lines.push(t.together(problem));
|
|
42
|
+
return lines;
|
|
43
|
+
}
|
|
44
|
+
/** `meltemi-diagrams assist`. */
|
|
45
|
+
export async function assistCommand(args, context) {
|
|
46
|
+
const fail = (message, code = EXIT_USAGE) => {
|
|
47
|
+
context.stderr(`${context.name} assist: ${message}\n`);
|
|
48
|
+
return code;
|
|
49
|
+
};
|
|
50
|
+
const [operation, ...rest] = args;
|
|
51
|
+
if (operation === undefined || operation === "-h" || operation === "--help") {
|
|
52
|
+
context.stdout(messages().help.assist);
|
|
53
|
+
return operation === undefined ? EXIT_USAGE : EXIT_OK;
|
|
54
|
+
}
|
|
55
|
+
if (!OPERATIONS.includes(operation)) {
|
|
56
|
+
return fail(messages().assist.unknownOperation(operation, OPERATIONS));
|
|
57
|
+
}
|
|
58
|
+
let options;
|
|
59
|
+
let paths;
|
|
60
|
+
try {
|
|
61
|
+
const parsed = parseArgs({
|
|
62
|
+
args: [...rest],
|
|
63
|
+
options: {
|
|
64
|
+
prompt: { type: "string" },
|
|
65
|
+
profile: { type: "string" },
|
|
66
|
+
block: { type: "string" },
|
|
67
|
+
save: { type: "string" },
|
|
68
|
+
apply: { type: "string" },
|
|
69
|
+
items: { type: "string" },
|
|
70
|
+
base: { type: "string" },
|
|
71
|
+
before: { type: "string" },
|
|
72
|
+
provider: { type: "string" },
|
|
73
|
+
model: { type: "string" },
|
|
74
|
+
"base-url": { type: "string" },
|
|
75
|
+
yes: { type: "boolean", default: false },
|
|
76
|
+
json: { type: "boolean", default: false },
|
|
77
|
+
help: { type: "boolean", short: "h", default: false },
|
|
78
|
+
},
|
|
79
|
+
allowPositionals: true,
|
|
80
|
+
strict: true,
|
|
81
|
+
});
|
|
82
|
+
options = parsed.values;
|
|
83
|
+
paths = parsed.positionals;
|
|
84
|
+
}
|
|
85
|
+
catch (error) {
|
|
86
|
+
return fail(argumentsError(error));
|
|
87
|
+
}
|
|
88
|
+
const t = messages().assist;
|
|
89
|
+
if (options.help) {
|
|
90
|
+
context.stdout(messages().help.assist);
|
|
91
|
+
return EXIT_OK;
|
|
92
|
+
}
|
|
93
|
+
const projects = new ProjectSessions({ toolVersion: context.toolVersion, ...localeOf(context) });
|
|
94
|
+
if (operation === "apply") {
|
|
95
|
+
if (paths.length !== 1)
|
|
96
|
+
return fail(t.proposalFile);
|
|
97
|
+
let proposal;
|
|
98
|
+
try {
|
|
99
|
+
proposal = JSON.parse(readFileSync(resolve(context.cwd, paths[0]), "utf8"));
|
|
100
|
+
}
|
|
101
|
+
catch (error) {
|
|
102
|
+
return fail(messages().common.cannotRead(paths[0], error.message));
|
|
103
|
+
}
|
|
104
|
+
if (proposal.format !== PROPOSAL_FORMAT)
|
|
105
|
+
return fail(t.notAProposal(paths[0]));
|
|
106
|
+
return applyAndWrite(context, projects, proposal, options.items);
|
|
107
|
+
}
|
|
108
|
+
// What to send, and where.
|
|
109
|
+
const adapter = adapterFor({
|
|
110
|
+
...(options.provider !== undefined ? { provider: options.provider } : {}),
|
|
111
|
+
...(options.model !== undefined ? { model: options.model } : {}),
|
|
112
|
+
...(options["base-url"] !== undefined ? { baseUrl: options["base-url"] } : {}),
|
|
113
|
+
}, context.env);
|
|
114
|
+
if (typeof adapter === "string")
|
|
115
|
+
return fail(adapter);
|
|
116
|
+
if (operation === "explain")
|
|
117
|
+
return explain(context, projects, adapter, paths, options);
|
|
118
|
+
if (paths.length !== 1)
|
|
119
|
+
return fail(t.oneFile(operation));
|
|
120
|
+
const path = toProjectPath(resolve(context.cwd, paths[0]));
|
|
121
|
+
if (!path.endsWith(".meltemi"))
|
|
122
|
+
return fail(t.notMeltemi(paths[0]));
|
|
123
|
+
const exists = existsSync(path);
|
|
124
|
+
if (operation === "generate") {
|
|
125
|
+
if (exists && readFileSync(path, "utf8").trim() !== "") {
|
|
126
|
+
return fail(t.exists(context.display(path)));
|
|
127
|
+
}
|
|
128
|
+
if (options.profile !== undefined &&
|
|
129
|
+
!PROFILES.includes(options.profile)) {
|
|
130
|
+
return fail(t.profile(options.profile, PROFILES));
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
else if (!exists)
|
|
134
|
+
return fail(`${messages().common.cannotRead(paths[0])}.`);
|
|
135
|
+
const instruction = options.prompt?.trim() ?? "";
|
|
136
|
+
if (operation !== "relations" && instruction === "")
|
|
137
|
+
return fail(t.needsPrompt(operation));
|
|
138
|
+
const workspace = projects.forFile(path);
|
|
139
|
+
const prepared = prepareAssist({
|
|
140
|
+
workspace,
|
|
141
|
+
operation: operation,
|
|
142
|
+
path,
|
|
143
|
+
instruction,
|
|
144
|
+
...(options.profile ? { profile: options.profile } : {}),
|
|
145
|
+
...(options.block ? { block: options.block } : {}),
|
|
146
|
+
// Words a proposal writes into the file: `--lang`, else the project's `locale`, else English.
|
|
147
|
+
locale: projects.contentLocale(workspace),
|
|
148
|
+
});
|
|
149
|
+
if (!(await consent(context, prepared.disclosure(adapter), options.yes))) {
|
|
150
|
+
return fail(messages().assist.notSent);
|
|
151
|
+
}
|
|
152
|
+
let proposal;
|
|
153
|
+
try {
|
|
154
|
+
proposal = await runAssist(prepared, adapter, path);
|
|
155
|
+
}
|
|
156
|
+
catch (error) {
|
|
157
|
+
return fail(error.message, EXIT_FINDINGS);
|
|
158
|
+
}
|
|
159
|
+
if (options.json)
|
|
160
|
+
context.stdout(`${JSON.stringify(proposal, null, 2)}\n`);
|
|
161
|
+
else
|
|
162
|
+
context.stdout(`${proposalLines(proposal, context.display(path)).join("\n")}\n`);
|
|
163
|
+
if (options.save !== undefined) {
|
|
164
|
+
const target = resolve(context.cwd, options.save);
|
|
165
|
+
mkdirSync(dirname(target), { recursive: true });
|
|
166
|
+
writeFileSync(target, `${JSON.stringify(proposal, null, 2)}\n`);
|
|
167
|
+
if (!options.json) {
|
|
168
|
+
context.stdout(`${t.saved(context.display(target), context.name)}\n`);
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
if (options.apply !== undefined)
|
|
172
|
+
return applyAndWrite(context, projects, proposal, options.apply);
|
|
173
|
+
return EXIT_OK;
|
|
174
|
+
}
|
|
175
|
+
/** Shows what will be sent and asks, unless `--yes`; false when nothing may be sent. */
|
|
176
|
+
async function consent(context, disclosure, yes) {
|
|
177
|
+
context.stderr(`${describeDisclosure(disclosure).join("\n")}\n`);
|
|
178
|
+
if (yes)
|
|
179
|
+
return true;
|
|
180
|
+
if (!context.ask)
|
|
181
|
+
return false;
|
|
182
|
+
const answer = await context.ask(messages().assist.send);
|
|
183
|
+
return isYes(answer);
|
|
184
|
+
}
|
|
185
|
+
function applyAndWrite(context, projects, proposal, items) {
|
|
186
|
+
const ids = readItems(items, proposal);
|
|
187
|
+
if (typeof ids === "string") {
|
|
188
|
+
context.stderr(`${context.name} assist: ${ids}\n`);
|
|
189
|
+
return EXIT_USAGE;
|
|
190
|
+
}
|
|
191
|
+
const t = messages().assist;
|
|
192
|
+
const workspace = projects.forFile(proposal.path);
|
|
193
|
+
const result = applyAssist(workspace, proposal, ids);
|
|
194
|
+
if (result.conflicts.length > 0) {
|
|
195
|
+
context.stderr(`${context.name} assist: ${t.conflicts(result.conflicts)}\n`);
|
|
196
|
+
}
|
|
197
|
+
if (!result.ok) {
|
|
198
|
+
for (const problem of result.problems)
|
|
199
|
+
context.stderr(`${context.name} assist: ${problem}\n`);
|
|
200
|
+
context.stderr(`${context.name} assist: ${t.nothingWritten}\n`);
|
|
201
|
+
return EXIT_FINDINGS;
|
|
202
|
+
}
|
|
203
|
+
mkdirSync(dirname(proposal.path), { recursive: true });
|
|
204
|
+
writeFileSync(proposal.path, result.text);
|
|
205
|
+
context.stdout(`${t.applied(result.applied, context.display(proposal.path))}\n`);
|
|
206
|
+
return result.conflicts.length > 0 ? EXIT_FINDINGS : EXIT_OK;
|
|
207
|
+
}
|
|
208
|
+
async function explain(context, projects, adapter, paths, options) {
|
|
209
|
+
const fail = (message, code = EXIT_USAGE) => {
|
|
210
|
+
context.stderr(`${context.name} assist: ${message}\n`);
|
|
211
|
+
return code;
|
|
212
|
+
};
|
|
213
|
+
if (paths.length > 1)
|
|
214
|
+
return fail(messages().common.oneProjectFolderOrFile);
|
|
215
|
+
const target = toProjectPath(resolve(context.cwd, paths[0] ?? "."));
|
|
216
|
+
let isFolder;
|
|
217
|
+
try {
|
|
218
|
+
isFolder = statSync(target).isDirectory();
|
|
219
|
+
}
|
|
220
|
+
catch {
|
|
221
|
+
return fail(messages().common.pathNotFound(paths[0] ?? "."));
|
|
222
|
+
}
|
|
223
|
+
const afterWorkspace = isFolder ? projects.forFolder(target) : projects.forFile(target);
|
|
224
|
+
const scope = isFolder && target === afterWorkspace.root ? null : target;
|
|
225
|
+
const after = { workspace: afterWorkspace, projects, scope };
|
|
226
|
+
let before;
|
|
227
|
+
if (options.before !== undefined) {
|
|
228
|
+
const path = toProjectPath(resolve(context.cwd, options.before));
|
|
229
|
+
const old = new ProjectSessions({ toolVersion: context.toolVersion, ...localeOf(context) });
|
|
230
|
+
const workspace = isFolder ? old.forFolder(path) : old.forFile(path);
|
|
231
|
+
before = { workspace, projects: old, scope: isFolder && path === workspace.root ? null : path };
|
|
232
|
+
}
|
|
233
|
+
else {
|
|
234
|
+
const host = gitRevisionHost(isFolder ? target : dirname(target), options.base ?? "HEAD");
|
|
235
|
+
if (typeof host === "string")
|
|
236
|
+
return fail(host);
|
|
237
|
+
const old = new ProjectSessions({
|
|
238
|
+
toolVersion: context.toolVersion,
|
|
239
|
+
host,
|
|
240
|
+
...localeOf(context),
|
|
241
|
+
});
|
|
242
|
+
const workspace = isFolder ? old.forFolder(target) : old.forFile(target);
|
|
243
|
+
before = { workspace, projects: old, scope };
|
|
244
|
+
}
|
|
245
|
+
const review = reviewProjects(before, after, { images: false });
|
|
246
|
+
if (review.files.length === 0) {
|
|
247
|
+
context.stdout(`${messages().assist.noChanges}\n`);
|
|
248
|
+
return EXIT_OK;
|
|
249
|
+
}
|
|
250
|
+
const folder = scope === null ? afterWorkspace.root : isFolder ? scope : dirname(scope);
|
|
251
|
+
const prepared = prepareExplain(review, (path) => afterWorkspace.text(isFolder ? joinPath(folder, path) : target));
|
|
252
|
+
if (!(await consent(context, prepared.disclosure(adapter), options.yes))) {
|
|
253
|
+
return fail(messages().assist.notSent);
|
|
254
|
+
}
|
|
255
|
+
try {
|
|
256
|
+
const answer = await runExplain(prepared, adapter);
|
|
257
|
+
context.stdout(`${answer.explanation.trim() || answer.summary}\n`);
|
|
258
|
+
}
|
|
259
|
+
catch (error) {
|
|
260
|
+
return fail(error.message, EXIT_FINDINGS);
|
|
261
|
+
}
|
|
262
|
+
return EXIT_OK;
|
|
263
|
+
}
|
|
264
|
+
/** The session option for the language of written files, when the command was given one. */
|
|
265
|
+
function localeOf(context) {
|
|
266
|
+
return context.locale ? { locale: context.locale } : {};
|
|
267
|
+
}
|
|
268
|
+
//# sourceMappingURL=assist-command.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"assist-command.js","sourceRoot":"","sources":["../src/assist-command.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `login`, `logout` and `whoami` (`cli-cloud`, "Signing in from the command line").
|
|
3
|
+
*
|
|
4
|
+
* What `logout` does when the service cannot be asked (offline, a server error): the entry is KEPT
|
|
5
|
+
* and the command fails with exit code 1 (`logout.not-revoked`), because forgetting a token that is
|
|
6
|
+
* still alive would leave one nobody can revoke from this computer. Only an answer that settles the
|
|
7
|
+
* matter lets it go: the token revoked (204), or the service saying it does not know the token
|
|
8
|
+
* (`token.invalid`). Nobody is stuck with an entry they cannot remove: the message names the file.
|
|
9
|
+
*/
|
|
10
|
+
import { type CloudCommand } from "./cloud-context.js";
|
|
11
|
+
export declare const loginCommand: CloudCommand;
|
|
12
|
+
export declare const logoutCommand: CloudCommand;
|
|
13
|
+
export declare const whoamiCommand: CloudCommand;
|
|
14
|
+
//# sourceMappingURL=auth-command.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auth-command.d.ts","sourceRoot":"","sources":["../src/auth-command.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAMH,OAAO,EAML,KAAK,YAAY,EAElB,MAAM,oBAAoB,CAAC;AA0D5B,eAAO,MAAM,YAAY,EAAE,YAkB1B,CAAC;AAsHF,eAAO,MAAM,aAAa,EAAE,YAoC3B,CAAC;AAIF,eAAO,MAAM,aAAa,EAAE,YAU3B,CAAC"}
|