@eudiplo/cli 7.1.1 → 7.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +190 -10
- package/dist/commands/config/index.d.ts +5 -0
- package/dist/commands/config/index.d.ts.map +1 -0
- package/dist/commands/config/index.js +15 -0
- package/dist/commands/config/index.js.map +1 -0
- package/dist/commands/config/tenant/action.d.ts +3 -0
- package/dist/commands/config/tenant/action.d.ts.map +1 -0
- package/dist/commands/config/tenant/action.js +298 -0
- package/dist/commands/config/tenant/action.js.map +1 -0
- package/dist/commands/config/tenant/index.d.ts +5 -0
- package/dist/commands/config/tenant/index.d.ts.map +1 -0
- package/dist/commands/config/tenant/index.js +61 -0
- package/dist/commands/config/tenant/index.js.map +1 -0
- package/dist/commands/config/validate/action.d.ts +4 -0
- package/dist/commands/config/validate/action.d.ts.map +1 -0
- package/dist/commands/config/validate/action.js +45 -0
- package/dist/commands/config/validate/action.js.map +1 -0
- package/dist/commands/config/validate/index.d.ts +5 -0
- package/dist/commands/config/validate/index.d.ts.map +1 -0
- package/dist/commands/config/validate/index.js +18 -0
- package/dist/commands/config/validate/index.js.map +1 -0
- package/dist/{config-validate → commands/config/validate}/registry.d.ts +1 -1
- package/dist/commands/config/validate/registry.d.ts.map +1 -0
- package/dist/{config-validate → commands/config/validate}/registry.js +1 -1
- package/dist/commands/config/validate/registry.js.map +1 -0
- package/dist/commands/config/validate/report.d.ts.map +1 -0
- package/dist/commands/config/validate/report.js.map +1 -0
- package/dist/commands/config/validate/schemas.d.ts.map +1 -0
- package/dist/{config-validate → commands/config/validate}/schemas.js +3 -3
- package/dist/commands/config/validate/schemas.js.map +1 -0
- package/dist/{config-validate → commands/config/validate}/types.d.ts +1 -1
- package/dist/commands/config/validate/types.d.ts.map +1 -0
- package/dist/commands/config/validate/types.js.map +1 -0
- package/dist/commands/config/validate/validator.d.ts.map +1 -0
- package/dist/{config-validate → commands/config/validate}/validator.js +4 -4
- package/dist/commands/config/validate/validator.js.map +1 -0
- package/dist/commands/demo/action.d.ts +3 -0
- package/dist/commands/demo/action.d.ts.map +1 -0
- package/dist/commands/demo/action.js +72 -0
- package/dist/commands/demo/action.js.map +1 -0
- package/dist/commands/demo/index.d.ts +5 -0
- package/dist/commands/demo/index.d.ts.map +1 -0
- package/dist/commands/demo/index.js +19 -0
- package/dist/commands/demo/index.js.map +1 -0
- package/dist/commands/deployment/action.d.ts +3 -0
- package/dist/commands/deployment/action.d.ts.map +1 -0
- package/dist/commands/deployment/action.js +16 -0
- package/dist/commands/deployment/action.js.map +1 -0
- package/dist/commands/deployment/index.d.ts +5 -0
- package/dist/commands/deployment/index.d.ts.map +1 -0
- package/dist/commands/deployment/index.js +19 -0
- package/dist/commands/deployment/index.js.map +1 -0
- package/dist/commands/doctor/action.d.ts +3 -0
- package/dist/commands/doctor/action.d.ts.map +1 -0
- package/dist/commands/doctor/action.js +12 -0
- package/dist/commands/doctor/action.js.map +1 -0
- package/dist/commands/doctor/index.d.ts +5 -0
- package/dist/commands/doctor/index.d.ts.map +1 -0
- package/dist/commands/doctor/index.js +13 -0
- package/dist/commands/doctor/index.js.map +1 -0
- package/dist/commands/init/action.d.ts +3 -0
- package/dist/commands/init/action.d.ts.map +1 -0
- package/dist/commands/init/action.js +242 -0
- package/dist/commands/init/action.js.map +1 -0
- package/dist/commands/init/index.d.ts +5 -0
- package/dist/commands/init/index.d.ts.map +1 -0
- package/dist/commands/init/index.js +35 -0
- package/dist/commands/init/index.js.map +1 -0
- package/dist/commands/instance/action.d.ts +3 -0
- package/dist/commands/instance/action.d.ts.map +1 -0
- package/dist/commands/instance/action.js +20 -0
- package/dist/commands/instance/action.js.map +1 -0
- package/dist/commands/instance/index.d.ts +5 -0
- package/dist/commands/instance/index.d.ts.map +1 -0
- package/dist/commands/instance/index.js +23 -0
- package/dist/commands/instance/index.js.map +1 -0
- package/dist/commands/shared.d.ts +14 -0
- package/dist/commands/shared.d.ts.map +1 -0
- package/dist/commands/shared.js +36 -0
- package/dist/commands/shared.js.map +1 -0
- package/dist/commands/status/action.d.ts +3 -0
- package/dist/commands/status/action.d.ts.map +1 -0
- package/dist/commands/status/action.js +13 -0
- package/dist/commands/status/action.js.map +1 -0
- package/dist/commands/status/index.d.ts +5 -0
- package/dist/commands/status/index.d.ts.map +1 -0
- package/dist/commands/status/index.js +13 -0
- package/dist/commands/status/index.js.map +1 -0
- package/dist/commands/version/action.d.ts +4 -0
- package/dist/commands/version/action.d.ts.map +1 -0
- package/dist/commands/version/action.js +68 -0
- package/dist/commands/version/action.js.map +1 -0
- package/dist/commands/version/index.d.ts +6 -0
- package/dist/commands/version/index.d.ts.map +1 -0
- package/dist/commands/version/index.js +12 -0
- package/dist/commands/version/index.js.map +1 -0
- package/dist/options.d.ts +2 -0
- package/dist/options.d.ts.map +1 -0
- package/dist/options.js +5 -0
- package/dist/options.js.map +1 -0
- package/dist/runtime.d.ts.map +1 -1
- package/dist/runtime.js +54 -465
- package/dist/runtime.js.map +1 -1
- package/dist/{config.d.ts → services/cli-config.d.ts} +2 -2
- package/dist/services/cli-config.d.ts.map +1 -0
- package/dist/{config.js → services/cli-config.js} +9 -4
- package/dist/services/cli-config.js.map +1 -0
- package/dist/{compose-template.d.ts → services/compose-project.d.ts} +14 -4
- package/dist/services/compose-project.d.ts.map +1 -0
- package/dist/services/compose-project.js +181 -0
- package/dist/services/compose-project.js.map +1 -0
- package/dist/{drivers.d.ts → services/deployment-drivers.d.ts} +9 -3
- package/dist/services/deployment-drivers.d.ts.map +1 -0
- package/dist/{drivers.js → services/deployment-drivers.js} +66 -11
- package/dist/services/deployment-drivers.js.map +1 -0
- package/dist/services/deployment-target.d.ts +3 -0
- package/dist/services/deployment-target.d.ts.map +1 -0
- package/dist/services/deployment-target.js +7 -0
- package/dist/services/deployment-target.js.map +1 -0
- package/dist/{doctor.d.ts → services/diagnostics.d.ts} +2 -2
- package/dist/services/diagnostics.d.ts.map +1 -0
- package/dist/{doctor.js → services/diagnostics.js} +1 -1
- package/dist/services/diagnostics.js.map +1 -0
- package/dist/services/instance-selection.d.ts +3 -0
- package/dist/services/instance-selection.d.ts.map +1 -0
- package/dist/services/instance-selection.js +13 -0
- package/dist/services/instance-selection.js.map +1 -0
- package/dist/services/project-directory.d.ts +3 -0
- package/dist/services/project-directory.d.ts.map +1 -0
- package/dist/services/project-directory.js +14 -0
- package/dist/services/project-directory.js.map +1 -0
- package/dist/types.d.ts +4 -0
- package/dist/types.d.ts.map +1 -1
- package/package.json +5 -4
- package/templates/docker-compose.yml +5 -4
- package/templates/schemas/CreateClientDto.schema.json +1 -0
- package/templates/schemas/CredentialConfigCreate.schema.json +55 -0
- package/templates/schemas/IssuanceConfig.schema.json +26 -6
- package/dist/args.d.ts +0 -4
- package/dist/args.d.ts.map +0 -1
- package/dist/args.js +0 -46
- package/dist/args.js.map +0 -1
- package/dist/compose-template.d.ts.map +0 -1
- package/dist/compose-template.js +0 -105
- package/dist/compose-template.js.map +0 -1
- package/dist/config-validate/index.d.ts +0 -4
- package/dist/config-validate/index.d.ts.map +0 -1
- package/dist/config-validate/index.js +0 -4
- package/dist/config-validate/index.js.map +0 -1
- package/dist/config-validate/registry.d.ts.map +0 -1
- package/dist/config-validate/registry.js.map +0 -1
- package/dist/config-validate/report.d.ts.map +0 -1
- package/dist/config-validate/report.js.map +0 -1
- package/dist/config-validate/schemas.d.ts.map +0 -1
- package/dist/config-validate/schemas.js.map +0 -1
- package/dist/config-validate/types.d.ts.map +0 -1
- package/dist/config-validate/types.js.map +0 -1
- package/dist/config-validate/validator.d.ts.map +0 -1
- package/dist/config-validate/validator.js.map +0 -1
- package/dist/config.d.ts.map +0 -1
- package/dist/config.js.map +0 -1
- package/dist/doctor.d.ts.map +0 -1
- package/dist/doctor.js.map +0 -1
- package/dist/drivers.d.ts.map +0 -1
- package/dist/drivers.js.map +0 -1
- /package/dist/{config-validate → commands/config/validate}/registry.json +0 -0
- /package/dist/{config-validate → commands/config/validate}/report.d.ts +0 -0
- /package/dist/{config-validate → commands/config/validate}/report.js +0 -0
- /package/dist/{config-validate → commands/config/validate}/schemas.d.ts +0 -0
- /package/dist/{config-validate → commands/config/validate}/types.js +0 -0
- /package/dist/{config-validate → commands/config/validate}/validator.d.ts +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"options.d.ts","sourceRoot":"","sources":["../src/options.ts"],"names":[],"mappings":"AAAA,wBAAgB,cAAc,CAC1B,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,EACvC,IAAI,EAAE,MAAM,GACb,MAAM,GAAG,SAAS,CAGpB"}
|
package/dist/options.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"options.js","sourceRoot":"","sources":["../src/options.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,cAAc,CAC1B,KAAuC,EACvC,IAAY;IAEZ,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC;IAC1B,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC;AAC7E,CAAC"}
|
package/dist/runtime.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../src/runtime.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../src/runtime.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAEjD,wBAAsB,MAAM,CACxB,IAAI,EAAE,MAAM,EAAE,EACd,OAAO,GAAE,cAAiC,GAC3C,OAAO,CAAC,MAAM,CAAC,CAiBjB"}
|
package/dist/runtime.js
CHANGED
|
@@ -1,485 +1,74 @@
|
|
|
1
|
-
import { isAbsolute, join, basename } from "node:path";
|
|
2
1
|
import { isSea } from "node:sea";
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
8
|
-
import
|
|
2
|
+
import { Command, CommanderError } from "commander";
|
|
3
|
+
import { createConfigCommand } from "./commands/config/index.js";
|
|
4
|
+
import { createDemoCommand } from "./commands/demo/index.js";
|
|
5
|
+
import { createDeploymentCommands } from "./commands/deployment/index.js";
|
|
6
|
+
import { createDoctorCommand } from "./commands/doctor/index.js";
|
|
7
|
+
import { createInitCommand } from "./commands/init/index.js";
|
|
8
|
+
import { createInstanceCommand } from "./commands/instance/index.js";
|
|
9
|
+
import { createStatusCommand } from "./commands/status/index.js";
|
|
10
|
+
import { createVersionCommand, versionText } from "./commands/version/index.js";
|
|
9
11
|
export async function runCli(args, context = defaultContext()) {
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
if (parsed.command === "version") {
|
|
16
|
-
context.stdout.write(`${await versionStatusText(context)}\n`);
|
|
17
|
-
return 0;
|
|
18
|
-
}
|
|
19
|
-
if (parsed.command && parsed.flags.help === true) {
|
|
20
|
-
context.stdout.write(`${commandHelpText(parsed.command)}\n`);
|
|
21
|
-
return 0;
|
|
22
|
-
}
|
|
23
|
-
if (!parsed.command || parsed.command === "help") {
|
|
24
|
-
context.stdout.write(`${helpText()}\n`);
|
|
25
|
-
return 0;
|
|
26
|
-
}
|
|
12
|
+
let actionExitCode = 0;
|
|
13
|
+
const setExitCode = (exitCode) => {
|
|
14
|
+
actionExitCode = exitCode;
|
|
15
|
+
};
|
|
16
|
+
const program = createProgram(context, setExitCode);
|
|
27
17
|
try {
|
|
28
|
-
|
|
18
|
+
await program.parseAsync(args, { from: "user" });
|
|
19
|
+
return actionExitCode;
|
|
29
20
|
}
|
|
30
21
|
catch (error) {
|
|
22
|
+
if (error instanceof CommanderError) {
|
|
23
|
+
return error.exitCode;
|
|
24
|
+
}
|
|
31
25
|
context.stderr.write(`${error instanceof Error ? error.message : String(error)}\n`);
|
|
32
26
|
return 1;
|
|
33
27
|
}
|
|
34
28
|
}
|
|
29
|
+
function createProgram(context, setExitCode) {
|
|
30
|
+
const program = new Command()
|
|
31
|
+
.name("eudiplo")
|
|
32
|
+
.description("Deployment-aware command line tools for EUDIPLO")
|
|
33
|
+
.version(versionText(), "-v, --version", "Print the installed CLI version")
|
|
34
|
+
.helpCommand(true)
|
|
35
|
+
.addHelpText("afterAll", "\nFor more information, see https://openwallet-foundation.github.io/eudiplo/docs/latest/getting-started/cli/");
|
|
36
|
+
program.addCommand(createDemoCommand(context, setExitCode));
|
|
37
|
+
program.addCommand(createInitCommand(context, setExitCode));
|
|
38
|
+
for (const command of createDeploymentCommands(context, setExitCode)) {
|
|
39
|
+
program.addCommand(command);
|
|
40
|
+
}
|
|
41
|
+
program.addCommand(createInstanceCommand(context, setExitCode));
|
|
42
|
+
program.addCommand(createConfigCommand(context, setExitCode));
|
|
43
|
+
program.addCommand(createDoctorCommand(context, setExitCode));
|
|
44
|
+
program.addCommand(createStatusCommand(context, setExitCode));
|
|
45
|
+
program.addCommand(createVersionCommand(context, setExitCode));
|
|
46
|
+
program.action(function showRootHelp() {
|
|
47
|
+
this.outputHelp();
|
|
48
|
+
});
|
|
49
|
+
configureCommandTree(program, context);
|
|
50
|
+
return program;
|
|
51
|
+
}
|
|
52
|
+
function configureCommandTree(command, context) {
|
|
53
|
+
command.exitOverride();
|
|
54
|
+
command.configureOutput({
|
|
55
|
+
writeOut: (value) => context.stdout.write(value),
|
|
56
|
+
writeErr: (value) => context.stderr.write(value),
|
|
57
|
+
});
|
|
58
|
+
command.showHelpAfterError("(add --help for additional information)");
|
|
59
|
+
for (const child of command.commands) {
|
|
60
|
+
configureCommandTree(child, context);
|
|
61
|
+
}
|
|
62
|
+
}
|
|
35
63
|
function defaultContext() {
|
|
36
64
|
return {
|
|
37
65
|
cwd: process.cwd(),
|
|
38
66
|
env: process.env,
|
|
39
67
|
installationMethod: isSea() ? "standalone" : "npm",
|
|
68
|
+
interactive: process.stdin.isTTY === true && process.stdout.isTTY === true,
|
|
40
69
|
stdout: process.stdout,
|
|
41
70
|
stderr: process.stderr,
|
|
42
71
|
fetch,
|
|
43
72
|
};
|
|
44
73
|
}
|
|
45
|
-
async function dispatch(parsed, context) {
|
|
46
|
-
const configPath = resolveConfigPath(context.env);
|
|
47
|
-
const config = await loadConfig(configPath);
|
|
48
|
-
switch (parsed.command) {
|
|
49
|
-
case "init":
|
|
50
|
-
return init(configPath, config, parsed, context);
|
|
51
|
-
case "demo":
|
|
52
|
-
return demo(configPath, config, parsed, context);
|
|
53
|
-
case "instance":
|
|
54
|
-
return instance(configPath, config, parsed, context);
|
|
55
|
-
case "config":
|
|
56
|
-
return validateConfigCommand(configPath, parsed, context);
|
|
57
|
-
case "doctor":
|
|
58
|
-
return doctor(config, parsed, context);
|
|
59
|
-
case "status":
|
|
60
|
-
return status(config, parsed, context);
|
|
61
|
-
case "up":
|
|
62
|
-
case "down":
|
|
63
|
-
case "logs":
|
|
64
|
-
return driverCommand(config, parsed.command, parsed, context);
|
|
65
|
-
default:
|
|
66
|
-
throw new Error(`Unknown command: ${parsed.command}`);
|
|
67
|
-
}
|
|
68
|
-
}
|
|
69
|
-
async function init(configPath, config, parsed, context) {
|
|
70
|
-
const target = parseTarget(readStringFlag(parsed.flags, "target") ?? "compose");
|
|
71
|
-
const name = readStringFlag(parsed.flags, "instance") ?? "local";
|
|
72
|
-
const url = readStringFlag(parsed.flags, "url");
|
|
73
|
-
const useDemoMode = parsed.flags.demo === true;
|
|
74
|
-
const noClient = parsed.flags["no-client"] === true;
|
|
75
|
-
const force = parsed.flags.force === true;
|
|
76
|
-
const imageTagOverride = readStringFlag(parsed.flags, "image-tag") ?? context.env.EUDIPLO_IMAGE_TAG;
|
|
77
|
-
if (target === "compose") {
|
|
78
|
-
const instance = await ensureComposeProject(context.cwd, {
|
|
79
|
-
mode: useDemoMode ? "demo" : "standard",
|
|
80
|
-
noClient,
|
|
81
|
-
force,
|
|
82
|
-
cliVersion: packageJson.version,
|
|
83
|
-
imageTagOverride,
|
|
84
|
-
});
|
|
85
|
-
const nextConfig = upsertInstance(config, name, {
|
|
86
|
-
...instance,
|
|
87
|
-
url: url ?? instance.url,
|
|
88
|
-
});
|
|
89
|
-
await saveConfig(configPath, nextConfig);
|
|
90
|
-
context.stdout.write(`Initialized compose instance ${name}. Run npx @eudiplo/cli up to start it.\n`);
|
|
91
|
-
return 0;
|
|
92
|
-
}
|
|
93
|
-
if (!url) {
|
|
94
|
-
throw new Error("External instances require --url.");
|
|
95
|
-
}
|
|
96
|
-
const nextConfig = upsertInstance(config, name, { target, url });
|
|
97
|
-
await saveConfig(configPath, nextConfig);
|
|
98
|
-
context.stdout.write(`Initialized external instance ${name}.\n`);
|
|
99
|
-
return 0;
|
|
100
|
-
}
|
|
101
|
-
async function demo(configPath, config, parsed, context) {
|
|
102
|
-
const force = parsed.flags.force === true;
|
|
103
|
-
const reset = parsed.flags.reset === true;
|
|
104
|
-
const imageTagOverride = readStringFlag(parsed.flags, "image-tag") ?? context.env.EUDIPLO_IMAGE_TAG;
|
|
105
|
-
if (reset && !force) {
|
|
106
|
-
throw new Error("demo --reset requires --force to remove managed demo data.");
|
|
107
|
-
}
|
|
108
|
-
if (reset && (await demoProjectExists(context.cwd))) {
|
|
109
|
-
context.stdout.write("Resetting demo deployment and removing managed demo volumes...\n");
|
|
110
|
-
await drivers.compose.down?.({
|
|
111
|
-
instanceName: "local",
|
|
112
|
-
instance: {
|
|
113
|
-
target: "compose",
|
|
114
|
-
url: "http://localhost:3000",
|
|
115
|
-
clientUrl: "http://localhost:4200",
|
|
116
|
-
composeFiles: ["eudiplo.demo.compose.yaml"],
|
|
117
|
-
envFile: ".eudiplo.demo.env",
|
|
118
|
-
projectName: "eudiplo-demo",
|
|
119
|
-
},
|
|
120
|
-
args: ["--volumes", "--remove-orphans"],
|
|
121
|
-
context,
|
|
122
|
-
});
|
|
123
|
-
}
|
|
124
|
-
const instance = await ensureComposeProject(context.cwd, {
|
|
125
|
-
mode: "demo",
|
|
126
|
-
force,
|
|
127
|
-
reset,
|
|
128
|
-
cliVersion: packageJson.version,
|
|
129
|
-
imageTagOverride,
|
|
130
|
-
});
|
|
131
|
-
const nextConfig = upsertInstance(config, "local", instance);
|
|
132
|
-
await saveConfig(configPath, nextConfig);
|
|
133
|
-
context.stdout.write("Starting EUDIPLO demo with Docker Compose...\n");
|
|
134
|
-
const exitCode = (await drivers.compose.up?.({
|
|
135
|
-
instanceName: "local",
|
|
136
|
-
instance,
|
|
137
|
-
args: [],
|
|
138
|
-
context,
|
|
139
|
-
})) ?? 1;
|
|
140
|
-
if (exitCode === 0) {
|
|
141
|
-
context.stdout.write("\nDemo mode - not for production.\n");
|
|
142
|
-
context.stdout.write("API URL: http://localhost:3000\n");
|
|
143
|
-
context.stdout.write("Client URL: http://localhost:4200\n");
|
|
144
|
-
context.stdout.write("Demo credentials:\n");
|
|
145
|
-
context.stdout.write(" Client ID: root\n");
|
|
146
|
-
context.stdout.write(" Client Secret: root\n");
|
|
147
|
-
context.stdout.write(`Editable demo config: ${context.cwd}/.eudiplo/demo-config\n`);
|
|
148
|
-
}
|
|
149
|
-
return exitCode;
|
|
150
|
-
}
|
|
151
|
-
async function instance(configPath, config, parsed, context) {
|
|
152
|
-
if (parsed.subject !== "add") {
|
|
153
|
-
throw new Error("Usage: eudiplo instance add <name> --url <url> [--target external]");
|
|
154
|
-
}
|
|
155
|
-
const name = parsed.positionals[0];
|
|
156
|
-
if (!name) {
|
|
157
|
-
throw new Error("Instance name is required.");
|
|
158
|
-
}
|
|
159
|
-
const url = readStringFlag(parsed.flags, "url");
|
|
160
|
-
if (!url) {
|
|
161
|
-
throw new Error("--url is required.");
|
|
162
|
-
}
|
|
163
|
-
const target = parseTarget(readStringFlag(parsed.flags, "target") ?? "external");
|
|
164
|
-
const clientUrl = readStringFlag(parsed.flags, "client-url");
|
|
165
|
-
const nextConfig = upsertInstance(config, name, { target, url, clientUrl });
|
|
166
|
-
await saveConfig(configPath, nextConfig);
|
|
167
|
-
context.stdout.write(`Added ${target} instance ${name}.\n`);
|
|
168
|
-
return 0;
|
|
169
|
-
}
|
|
170
|
-
async function validateConfigCommand(configPath, parsed, context) {
|
|
171
|
-
if (parsed.subject !== "validate") {
|
|
172
|
-
throw new Error("Usage: eudiplo config validate");
|
|
173
|
-
}
|
|
174
|
-
const tenantTarget = parsed.positionals[0];
|
|
175
|
-
if (tenantTarget === "tenant" || tenantTarget === "tenants") {
|
|
176
|
-
return validateTenantConfigCommand(tenantTarget, parsed, context);
|
|
177
|
-
}
|
|
178
|
-
const config = await loadConfig(configPath);
|
|
179
|
-
const instanceNames = Object.keys(config.instances);
|
|
180
|
-
context.stdout.write(`Config is valid: ${configPath}\n`);
|
|
181
|
-
context.stdout.write(`Instances: ${instanceNames.length}\n`);
|
|
182
|
-
if (config.defaultInstance) {
|
|
183
|
-
context.stdout.write(`Default instance: ${config.defaultInstance}\n`);
|
|
184
|
-
}
|
|
185
|
-
for (const name of instanceNames) {
|
|
186
|
-
const instance = config.instances[name];
|
|
187
|
-
context.stdout.write(`- ${name}: ${instance.target} ${instance.url}\n`);
|
|
188
|
-
}
|
|
189
|
-
return 0;
|
|
190
|
-
}
|
|
191
|
-
async function validateTenantConfigCommand(scope, parsed, context) {
|
|
192
|
-
const pathArg = parsed.positionals[1];
|
|
193
|
-
if (!pathArg) {
|
|
194
|
-
throw new Error(`Usage: eudiplo config validate ${scope} <path> [--format text|json]`);
|
|
195
|
-
}
|
|
196
|
-
const format = readStringFlag(parsed.flags, "format") ?? "text";
|
|
197
|
-
if (format !== "text" && format !== "json") {
|
|
198
|
-
throw new Error("Unsupported --format value. Use text or json.");
|
|
199
|
-
}
|
|
200
|
-
const rootPath = isAbsolute(pathArg) ? pathArg : join(context.cwd, pathArg);
|
|
201
|
-
const schemas = await loadTenantConfigSchemas();
|
|
202
|
-
const results = scope === "tenant"
|
|
203
|
-
? [await validateTenantDirectory(rootPath, basename(rootPath), schemas, context.env)]
|
|
204
|
-
: await validateTenantsRoot(rootPath, schemas, context.env);
|
|
205
|
-
context.stdout.write(format === "json"
|
|
206
|
-
? `${JSON.stringify(buildJsonReport(results), null, 2)}\n`
|
|
207
|
-
: formatTextReport(scope, rootPath, results));
|
|
208
|
-
return results.some((result) => !result.valid) ? 1 : 0;
|
|
209
|
-
}
|
|
210
|
-
async function doctor(config, parsed, context) {
|
|
211
|
-
const [instanceName, instance] = resolveInstance(config, parsed);
|
|
212
|
-
const driver = drivers[instance.target];
|
|
213
|
-
const checks = await runDoctor(instance, context, await driver.diagnostics(instance, context));
|
|
214
|
-
context.stdout.write(`Doctor for ${instanceName} (${instance.target})\n`);
|
|
215
|
-
context.stdout.write(`${formatChecks(checks)}\n`);
|
|
216
|
-
return hasFailedChecks(checks) ? 1 : 0;
|
|
217
|
-
}
|
|
218
|
-
async function status(config, parsed, context) {
|
|
219
|
-
const [instanceName, instance] = resolveInstance(config, parsed);
|
|
220
|
-
const checks = await runDoctor(instance, context, []);
|
|
221
|
-
const health = checks.find((check) => check.name === "health endpoint");
|
|
222
|
-
context.stdout.write(`${instanceName} (${instance.target}) ${instance.url}\n`);
|
|
223
|
-
if (health) {
|
|
224
|
-
context.stdout.write(`${health.status.toUpperCase()} ${health.message}\n`);
|
|
225
|
-
}
|
|
226
|
-
return health?.status === "fail" ? 1 : 0;
|
|
227
|
-
}
|
|
228
|
-
async function driverCommand(config, command, parsed, context) {
|
|
229
|
-
const [instanceName, instance] = resolveInstance(config, parsed);
|
|
230
|
-
const driver = drivers[instance.target];
|
|
231
|
-
const handler = driver[command];
|
|
232
|
-
if (!handler) {
|
|
233
|
-
throw new Error(unsupportedCommand(command, instance.target));
|
|
234
|
-
}
|
|
235
|
-
if (instance.target === "compose") {
|
|
236
|
-
context.stdout.write(`${command} ${instanceName} (${composeClientMode(instance)})\n`);
|
|
237
|
-
}
|
|
238
|
-
return handler({ instanceName, instance, args: parsed.positionals, context });
|
|
239
|
-
}
|
|
240
|
-
function resolveInstance(config, parsed) {
|
|
241
|
-
const name = readStringFlag(parsed.flags, "instance") ?? config.defaultInstance;
|
|
242
|
-
if (!name) {
|
|
243
|
-
throw new Error("No instance selected. Use --instance or add an instance first.");
|
|
244
|
-
}
|
|
245
|
-
const instance = config.instances[name];
|
|
246
|
-
if (!instance) {
|
|
247
|
-
throw new Error(`Unknown instance: ${name}`);
|
|
248
|
-
}
|
|
249
|
-
return [name, instance];
|
|
250
|
-
}
|
|
251
|
-
function parseTarget(value) {
|
|
252
|
-
if (value === "compose" || value === "external") {
|
|
253
|
-
return value;
|
|
254
|
-
}
|
|
255
|
-
throw new Error(`Unsupported target: ${value}`);
|
|
256
|
-
}
|
|
257
|
-
function composeClientMode(instance) {
|
|
258
|
-
return instance.clientUrl ? "client enabled" : "client disabled";
|
|
259
|
-
}
|
|
260
|
-
function helpText() {
|
|
261
|
-
return `EUDIPLO CLI
|
|
262
|
-
|
|
263
|
-
Usage:
|
|
264
|
-
eudiplo <command> [options]
|
|
265
|
-
|
|
266
|
-
Commands:
|
|
267
|
-
eudiplo demo Creates and starts a local Docker Compose demo.
|
|
268
|
-
eudiplo init --target compose Creates local Compose assets; add --demo or --no-client as needed.
|
|
269
|
-
eudiplo up Starts the selected Compose deployment.
|
|
270
|
-
eudiplo down Stops the selected Compose deployment.
|
|
271
|
-
eudiplo logs Streams logs for the selected Compose deployment.
|
|
272
|
-
eudiplo instance add <name> --url Registers an existing EUDIPLO deployment.
|
|
273
|
-
eudiplo doctor Checks API reachability, health, config, and client connectivity.
|
|
274
|
-
eudiplo status Prints the selected instance status.
|
|
275
|
-
eudiplo config validate Validates the local CLI configuration file.
|
|
276
|
-
eudiplo config validate tenant <path> Validates one tenant's config-import files.
|
|
277
|
-
eudiplo config validate tenants <path> Validates every tenant under a config root.
|
|
278
|
-
eudiplo version Prints the installed version and checks for updates.
|
|
279
|
-
|
|
280
|
-
Options:
|
|
281
|
-
--instance <name> Selects a configured instance.
|
|
282
|
-
--target <compose|external> Selects the deployment target for init/add.
|
|
283
|
-
--url <url> Sets the EUDIPLO API URL for an instance.
|
|
284
|
-
--client-url <url> Sets the optional web client URL for an instance.
|
|
285
|
-
--image-tag <tag> Overrides the backend/client Docker tag for demo mode.
|
|
286
|
-
--no-client Skips the web client for compose init.
|
|
287
|
-
--force Allows replacing managed demo files when used with --demo/--reset.
|
|
288
|
-
--help Shows this help message.
|
|
289
|
-
--version, -v Prints the installed CLI version without network access.
|
|
290
|
-
|
|
291
|
-
One-off npm usage:
|
|
292
|
-
npx @eudiplo/cli demo
|
|
293
|
-
|
|
294
|
-
For more information, see https://openwallet-foundation.github.io/eudiplo/docs/latest/getting-started/cli/`;
|
|
295
|
-
}
|
|
296
|
-
function commandHelpText(command) {
|
|
297
|
-
switch (command) {
|
|
298
|
-
case "demo":
|
|
299
|
-
return `EUDIPLO CLI
|
|
300
|
-
|
|
301
|
-
Usage:
|
|
302
|
-
eudiplo demo [--reset --force] [--image-tag <tag>]
|
|
303
|
-
|
|
304
|
-
Creates local demo assets and starts EUDIPLO with Docker Compose.
|
|
305
|
-
|
|
306
|
-
Options:
|
|
307
|
-
--reset Stops and recreates managed demo data and config.
|
|
308
|
-
--force Required with --reset; allows replacing managed demo files.
|
|
309
|
-
--image-tag <tag> Overrides backend/client Docker tag (or use EUDIPLO_IMAGE_TAG).
|
|
310
|
-
--help Shows this help message.`;
|
|
311
|
-
case "init":
|
|
312
|
-
return `EUDIPLO CLI
|
|
313
|
-
|
|
314
|
-
Usage:
|
|
315
|
-
eudiplo init --target compose [options]
|
|
316
|
-
|
|
317
|
-
Creates local deployment assets without starting them.
|
|
318
|
-
|
|
319
|
-
Options:
|
|
320
|
-
--target <compose|external> Selects the deployment target. Defaults to compose.
|
|
321
|
-
--instance <name> Names the instance in CLI config. Defaults to local.
|
|
322
|
-
--demo Generates editable demo config and uses regular backend/client images.
|
|
323
|
-
--no-client Omits the web client from the local Compose setup.
|
|
324
|
-
--image-tag <tag> Overrides backend/client Docker tag for demo mode.
|
|
325
|
-
--force Replaces managed demo files when used with --demo.
|
|
326
|
-
--url <url> Overrides the instance API URL.
|
|
327
|
-
--help Shows this help message.`;
|
|
328
|
-
case "up":
|
|
329
|
-
case "down":
|
|
330
|
-
case "logs":
|
|
331
|
-
return `EUDIPLO CLI
|
|
332
|
-
|
|
333
|
-
Usage:
|
|
334
|
-
eudiplo ${command} [--instance name]
|
|
335
|
-
|
|
336
|
-
${driverCommandDescription(command)}
|
|
337
|
-
|
|
338
|
-
Options:
|
|
339
|
-
--instance <name> Selects a configured Compose instance.
|
|
340
|
-
--help Shows this help message.`;
|
|
341
|
-
case "instance":
|
|
342
|
-
return `EUDIPLO CLI
|
|
343
|
-
|
|
344
|
-
Usage:
|
|
345
|
-
eudiplo instance add <name> --url <url> [options]
|
|
346
|
-
|
|
347
|
-
Registers an existing EUDIPLO deployment in the local CLI config.
|
|
348
|
-
|
|
349
|
-
Options:
|
|
350
|
-
--target <compose|external> Selects the deployment target. Defaults to external.
|
|
351
|
-
--url <url> Sets the EUDIPLO API URL.
|
|
352
|
-
--client-url <url> Sets the optional web client URL.
|
|
353
|
-
--help Shows this help message.`;
|
|
354
|
-
case "doctor":
|
|
355
|
-
return `EUDIPLO CLI
|
|
356
|
-
|
|
357
|
-
Usage:
|
|
358
|
-
eudiplo doctor [--instance name]
|
|
359
|
-
|
|
360
|
-
Checks API reachability, health, authentication hints, public URLs, and client connectivity.
|
|
361
|
-
|
|
362
|
-
Options:
|
|
363
|
-
--instance <name> Selects a configured instance.
|
|
364
|
-
--help Shows this help message.`;
|
|
365
|
-
case "status":
|
|
366
|
-
return `EUDIPLO CLI
|
|
367
|
-
|
|
368
|
-
Usage:
|
|
369
|
-
eudiplo status [--instance name]
|
|
370
|
-
|
|
371
|
-
Prints the selected instance URL and health status.
|
|
372
|
-
|
|
373
|
-
Options:
|
|
374
|
-
--instance <name> Selects a configured instance.
|
|
375
|
-
--help Shows this help message.`;
|
|
376
|
-
case "config":
|
|
377
|
-
return `EUDIPLO CLI
|
|
378
|
-
|
|
379
|
-
Usage:
|
|
380
|
-
eudiplo config validate
|
|
381
|
-
eudiplo config validate tenant <path> [--format text|json]
|
|
382
|
-
eudiplo config validate tenants <path> [--format text|json]
|
|
383
|
-
|
|
384
|
-
Validates the local CLI configuration file, or validates tenant config-import
|
|
385
|
-
files against the same schemas the backend uses, without starting EUDIPLO.
|
|
386
|
-
|
|
387
|
-
Commands:
|
|
388
|
-
eudiplo config validate Validates configured instances and URLs.
|
|
389
|
-
eudiplo config validate tenant <path> Validates a single tenant directory.
|
|
390
|
-
eudiplo config validate tenants <path> Validates every tenant under <path>.
|
|
391
|
-
|
|
392
|
-
Options:
|
|
393
|
-
--format <text|json> Selects the report format. Defaults to text.
|
|
394
|
-
--help Shows this help message.`;
|
|
395
|
-
case "version":
|
|
396
|
-
return `EUDIPLO CLI
|
|
397
|
-
|
|
398
|
-
Usage:
|
|
399
|
-
eudiplo version
|
|
400
|
-
eudiplo --version
|
|
401
|
-
eudiplo -v
|
|
402
|
-
|
|
403
|
-
Prints the installed CLI version. The version command also checks for updates.
|
|
404
|
-
|
|
405
|
-
Options:
|
|
406
|
-
--help Shows this help message.`;
|
|
407
|
-
default:
|
|
408
|
-
return `Unknown command: ${command}\n\n${helpText()}`;
|
|
409
|
-
}
|
|
410
|
-
}
|
|
411
|
-
function driverCommandDescription(command) {
|
|
412
|
-
if (command === "up") {
|
|
413
|
-
return "Starts the selected Docker Compose deployment.";
|
|
414
|
-
}
|
|
415
|
-
if (command === "down") {
|
|
416
|
-
return "Stops the selected Docker Compose deployment.";
|
|
417
|
-
}
|
|
418
|
-
return "Streams logs for the selected Docker Compose deployment.";
|
|
419
|
-
}
|
|
420
|
-
function versionText() {
|
|
421
|
-
return `${packageJson.name} ${packageJson.version}`;
|
|
422
|
-
}
|
|
423
|
-
async function versionStatusText(context) {
|
|
424
|
-
const currentVersion = packageJson.version;
|
|
425
|
-
const lines = [versionText()];
|
|
426
|
-
try {
|
|
427
|
-
const latestVersion = await fetchLatestVersion(context);
|
|
428
|
-
lines.push(`latest ${latestVersion}`);
|
|
429
|
-
const comparison = compareSemver(currentVersion, latestVersion);
|
|
430
|
-
if (comparison < 0) {
|
|
431
|
-
lines.push(`update available: ${updateCommand(context)}`);
|
|
432
|
-
}
|
|
433
|
-
else if (comparison === 0) {
|
|
434
|
-
lines.push("up to date");
|
|
435
|
-
}
|
|
436
|
-
else {
|
|
437
|
-
lines.push("newer than the latest published version");
|
|
438
|
-
}
|
|
439
|
-
}
|
|
440
|
-
catch (error) {
|
|
441
|
-
lines.push(`latest unavailable: ${error instanceof Error ? error.message : String(error)}`);
|
|
442
|
-
}
|
|
443
|
-
return lines.join("\n");
|
|
444
|
-
}
|
|
445
|
-
function updateCommand(context) {
|
|
446
|
-
const installationMethod = context.installationMethod ?? (isSea() ? "standalone" : "npm");
|
|
447
|
-
return installationMethod === "standalone"
|
|
448
|
-
? "curl -fsSL https://eudiplo.dev/install.sh | bash"
|
|
449
|
-
: "npm install -g @eudiplo/cli@latest";
|
|
450
|
-
}
|
|
451
|
-
async function fetchLatestVersion(context) {
|
|
452
|
-
const response = await context.fetch(`https://registry.npmjs.org/${encodeURIComponent(packageJson.name)}/latest`);
|
|
453
|
-
if (!response.ok) {
|
|
454
|
-
throw new Error(`npm registry returned HTTP ${response.status}`);
|
|
455
|
-
}
|
|
456
|
-
const metadata = await response.json();
|
|
457
|
-
if (!isPackageMetadata(metadata)) {
|
|
458
|
-
throw new Error("npm registry response did not include a version");
|
|
459
|
-
}
|
|
460
|
-
return metadata.version;
|
|
461
|
-
}
|
|
462
|
-
function isPackageMetadata(value) {
|
|
463
|
-
return (typeof value === "object" &&
|
|
464
|
-
value !== null &&
|
|
465
|
-
"version" in value &&
|
|
466
|
-
typeof value.version === "string");
|
|
467
|
-
}
|
|
468
|
-
function compareSemver(left, right) {
|
|
469
|
-
const leftParts = parseSemver(left);
|
|
470
|
-
const rightParts = parseSemver(right);
|
|
471
|
-
for (let index = 0; index < leftParts.length; index += 1) {
|
|
472
|
-
if (leftParts[index] > rightParts[index]) {
|
|
473
|
-
return 1;
|
|
474
|
-
}
|
|
475
|
-
if (leftParts[index] < rightParts[index]) {
|
|
476
|
-
return -1;
|
|
477
|
-
}
|
|
478
|
-
}
|
|
479
|
-
return 0;
|
|
480
|
-
}
|
|
481
|
-
function parseSemver(version) {
|
|
482
|
-
const [major = "0", minor = "0", patch = "0"] = version.split("-", 1)[0].split(".");
|
|
483
|
-
return [Number(major) || 0, Number(minor) || 0, Number(patch) || 0];
|
|
484
|
-
}
|
|
485
74
|
//# sourceMappingURL=runtime.js.map
|
package/dist/runtime.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runtime.js","sourceRoot":"","sources":["../src/runtime.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AACvD,OAAO,EAAE,KAAK,EAAE,MAAM,UAAU,CAAC;AACjC,OAAO,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AACtD,OAAO,EAAE,UAAU,EAAE,iBAAiB,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AACxF,OAAO,EACH,iBAAiB,EACjB,OAAO,EACP,oBAAoB,EACpB,kBAAkB,GACrB,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,YAAY,EAAE,eAAe,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACvE,OAAO,EACH,eAAe,EACf,gBAAgB,EAChB,uBAAuB,EACvB,uBAAuB,EACvB,mBAAmB,GACtB,MAAM,4BAA4B,CAAC;AACpC,OAAO,WAAW,MAAM,iBAAiB,CAAC,OAAO,IAAI,EAAE,MAAM,EAAE,CAAC;AAGhE,MAAM,CAAC,KAAK,UAAU,MAAM,CACxB,IAAc,EACd,OAAO,GAAmB,cAAc,EAAE;IAE1C,MAAM,MAAM,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;IAC/B,IAAI,MAAM,CAAC,OAAO,KAAK,IAAI,IAAI,MAAM,CAAC,OAAO,KAAK,WAAW,IAAI,MAAM,CAAC,KAAK,CAAC,OAAO,KAAK,IAAI,EAAE,CAAC;QAC7F,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,WAAW,EAAE,IAAI,CAAC,CAAC;QAC3C,OAAO,CAAC,CAAC;IACb,CAAC;IACD,IAAI,MAAM,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;QAC/B,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,MAAM,iBAAiB,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QAC9D,OAAO,CAAC,CAAC;IACb,CAAC;IACD,IAAI,MAAM,CAAC,OAAO,IAAI,MAAM,CAAC,KAAK,CAAC,IAAI,KAAK,IAAI,EAAE,CAAC;QAC/C,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,eAAe,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QAC7D,OAAO,CAAC,CAAC;IACb,CAAC;IACD,IAAI,CAAC,MAAM,CAAC,OAAO,IAAI,MAAM,CAAC,OAAO,KAAK,MAAM,EAAE,CAAC;QAC/C,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,QAAQ,EAAE,IAAI,CAAC,CAAC;QACxC,OAAO,CAAC,CAAC;IACb,CAAC;IAED,IAAI,CAAC;QACD,OAAO,MAAM,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC3C,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACb,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACpF,OAAO,CAAC,CAAC;IACb,CAAC;AACL,CAAC;AAED,SAAS,cAAc;IACnB,OAAO;QACH,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE;QAClB,GAAG,EAAE,OAAO,CAAC,GAAG;QAChB,kBAAkB,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,KAAK;QAClD,MAAM,EAAE,OAAO,CAAC,MAAM;QACtB,MAAM,EAAE,OAAO,CAAC,MAAM;QACtB,KAAK;KACR,CAAC;AACN,CAAC;AAED,KAAK,UAAU,QAAQ,CAAC,MAAkB,EAAE,OAAuB;IAC/D,MAAM,UAAU,GAAG,iBAAiB,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IAClD,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,UAAU,CAAC,CAAC;IAE5C,QAAQ,MAAM,CAAC,OAAO,EAAE,CAAC;QACrB,KAAK,MAAM;YACP,OAAO,IAAI,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;QACrD,KAAK,MAAM;YACP,OAAO,IAAI,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;QACrD,KAAK,UAAU;YACX,OAAO,QAAQ,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;QACzD,KAAK,QAAQ;YACT,OAAO,qBAAqB,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;QAC9D,KAAK,QAAQ;YACT,OAAO,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;QAC3C,KAAK,QAAQ;YACT,OAAO,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;QAC3C,KAAK,IAAI,CAAC;QACV,KAAK,MAAM,CAAC;QACZ,KAAK,MAAM;YACP,OAAO,aAAa,CAAC,MAAM,EAAE,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;QAClE;YACI,MAAM,IAAI,KAAK,CAAC,oBAAoB,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC;IAC9D,CAAC;AACL,CAAC;AAED,KAAK,UAAU,IAAI,CACf,UAAkB,EAClB,MAAiB,EACjB,MAAkB,EAClB,OAAuB;IAEvB,MAAM,MAAM,GAAG,WAAW,CAAC,cAAc,CAAC,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,IAAI,SAAS,CAAC,CAAC;IAChF,MAAM,IAAI,GAAG,cAAc,CAAC,MAAM,CAAC,KAAK,EAAE,UAAU,CAAC,IAAI,OAAO,CAAC;IACjE,MAAM,GAAG,GAAG,cAAc,CAAC,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;IAChD,MAAM,WAAW,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,KAAK,IAAI,CAAC;IAC/C,MAAM,QAAQ,GAAG,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,KAAK,IAAI,CAAC;IACpD,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,KAAK,KAAK,IAAI,CAAC;IAC1C,MAAM,gBAAgB,GAClB,cAAc,CAAC,MAAM,CAAC,KAAK,EAAE,WAAW,CAAC,IAAI,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC;IAE/E,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;QACvB,MAAM,QAAQ,GAAG,MAAM,oBAAoB,CAAC,OAAO,CAAC,GAAG,EAAE;YACrD,IAAI,EAAE,WAAW,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,UAAU;YACvC,QAAQ;YACR,KAAK;YACL,UAAU,EAAE,WAAW,CAAC,OAAO;YAC/B,gBAAgB;SACnB,CAAC,CAAC;QACH,MAAM,UAAU,GAAG,cAAc,CAAC,MAAM,EAAE,IAAI,EAAE;YAC5C,GAAG,QAAQ;YACX,GAAG,EAAE,GAAG,IAAI,QAAQ,CAAC,GAAG;SAC3B,CAAC,CAAC;QACH,MAAM,UAAU,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC;QACzC,OAAO,CAAC,MAAM,CAAC,KAAK,CAChB,gCAAgC,IAAI,0CAA0C,CACjF,CAAC;QACF,OAAO,CAAC,CAAC;IACb,CAAC;IAED,IAAI,CAAC,GAAG,EAAE,CAAC;QACP,MAAM,IAAI,KAAK,CAAC,mCAAmC,CAAC,CAAC;IACzD,CAAC;IAED,MAAM,UAAU,GAAG,cAAc,CAAC,MAAM,EAAE,IAAI,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC;IACjE,MAAM,UAAU,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC;IACzC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,iCAAiC,IAAI,KAAK,CAAC,CAAC;IACjE,OAAO,CAAC,CAAC;AACb,CAAC;AAED,KAAK,UAAU,IAAI,CACf,UAAkB,EAClB,MAAiB,EACjB,MAAkB,EAClB,OAAuB;IAEvB,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,KAAK,KAAK,IAAI,CAAC;IAC1C,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,KAAK,KAAK,IAAI,CAAC;IAC1C,MAAM,gBAAgB,GAClB,cAAc,CAAC,MAAM,CAAC,KAAK,EAAE,WAAW,CAAC,IAAI,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC;IAE/E,IAAI,KAAK,IAAI,CAAC,KAAK,EAAE,CAAC;QAClB,MAAM,IAAI,KAAK,CAAC,4DAA4D,CAAC,CAAC;IAClF,CAAC;IAED,IAAI,KAAK,IAAI,CAAC,MAAM,iBAAiB,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;QAClD,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,kEAAkE,CAAC,CAAC;QACzF,MAAM,OAAO,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;YACzB,YAAY,EAAE,OAAO;YACrB,QAAQ,EAAE;gBACN,MAAM,EAAE,SAAS;gBACjB,GAAG,EAAE,uBAAuB;gBAC5B,SAAS,EAAE,uBAAuB;gBAClC,YAAY,EAAE,CAAC,2BAA2B,CAAC;gBAC3C,OAAO,EAAE,mBAAmB;gBAC5B,WAAW,EAAE,cAAc;aAC9B;YACD,IAAI,EAAE,CAAC,WAAW,EAAE,kBAAkB,CAAC;YACvC,OAAO;SACV,CAAC,CAAC;IACP,CAAC;IAED,MAAM,QAAQ,GAAG,MAAM,oBAAoB,CAAC,OAAO,CAAC,GAAG,EAAE;QACrD,IAAI,EAAE,MAAM;QACZ,KAAK;QACL,KAAK;QACL,UAAU,EAAE,WAAW,CAAC,OAAO;QAC/B,gBAAgB;KACnB,CAAC,CAAC;IACH,MAAM,UAAU,GAAG,cAAc,CAAC,MAAM,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC;IAC7D,MAAM,UAAU,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC;IACzC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,gDAAgD,CAAC,CAAC;IACvE,MAAM,QAAQ,GACV,CAAC,MAAM,OAAO,CAAC,OAAO,CAAC,EAAE,EAAE,CAAC;QAC5B,YAAY,EAAE,OAAO;QACrB,QAAQ;QACR,IAAI,EAAE,EAAE;QACR,OAAO;KACV,CAAC,CAAC,IAAI,CAAC,CAAC;IAET,IAAI,QAAQ,KAAK,CAAC,EAAE,CAAC;QACjB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,qCAAqC,CAAC,CAAC;QAC5D,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,kCAAkC,CAAC,CAAC;QACzD,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,qCAAqC,CAAC,CAAC;QAC5D,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,qBAAqB,CAAC,CAAC;QAC5C,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,qBAAqB,CAAC,CAAC;QAC5C,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,yBAAyB,CAAC,CAAC;QAChD,OAAO,CAAC,MAAM,CAAC,KAAK,CAChB,yBAAyB,OAAO,CAAC,GAAG,yBAAyB,CAChE,CAAC;IACN,CAAC;IAED,OAAO,QAAQ,CAAC;AACpB,CAAC;AAED,KAAK,UAAU,QAAQ,CACnB,UAAkB,EAClB,MAAiB,EACjB,MAAkB,EAClB,OAAuB;IAEvB,IAAI,MAAM,CAAC,OAAO,KAAK,KAAK,EAAE,CAAC;QAC3B,MAAM,IAAI,KAAK,CAAC,oEAAoE,CAAC,CAAC;IAC1F,CAAC;IAED,MAAM,IAAI,GAAG,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;IACnC,IAAI,CAAC,IAAI,EAAE,CAAC;QACR,MAAM,IAAI,KAAK,CAAC,4BAA4B,CAAC,CAAC;IAClD,CAAC;IAED,MAAM,GAAG,GAAG,cAAc,CAAC,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;IAChD,IAAI,CAAC,GAAG,EAAE,CAAC;QACP,MAAM,IAAI,KAAK,CAAC,oBAAoB,CAAC,CAAC;IAC1C,CAAC;IAED,MAAM,MAAM,GAAG,WAAW,CAAC,cAAc,CAAC,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,IAAI,UAAU,CAAC,CAAC;IACjF,MAAM,SAAS,GAAG,cAAc,CAAC,MAAM,CAAC,KAAK,EAAE,YAAY,CAAC,CAAC;IAC7D,MAAM,UAAU,GAAG,cAAc,CAAC,MAAM,EAAE,IAAI,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,SAAS,EAAE,CAAC,CAAC;IAC5E,MAAM,UAAU,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC;IACzC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,SAAS,MAAM,aAAa,IAAI,KAAK,CAAC,CAAC;IAC5D,OAAO,CAAC,CAAC;AACb,CAAC;AAED,KAAK,UAAU,qBAAqB,CAChC,UAAkB,EAClB,MAAkB,EAClB,OAAuB;IAEvB,IAAI,MAAM,CAAC,OAAO,KAAK,UAAU,EAAE,CAAC;QAChC,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAC;IACtD,CAAC;IAED,MAAM,YAAY,GAAG,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;IAC3C,IAAI,YAAY,KAAK,QAAQ,IAAI,YAAY,KAAK,SAAS,EAAE,CAAC;QAC1D,OAAO,2BAA2B,CAAC,YAAY,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;IACtE,CAAC;IAED,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,UAAU,CAAC,CAAC;IAC5C,MAAM,aAAa,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;IACpD,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,oBAAoB,UAAU,IAAI,CAAC,CAAC;IACzD,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,cAAc,aAAa,CAAC,MAAM,IAAI,CAAC,CAAC;IAC7D,IAAI,MAAM,CAAC,eAAe,EAAE,CAAC;QACzB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,qBAAqB,MAAM,CAAC,eAAe,IAAI,CAAC,CAAC;IAC1E,CAAC;IACD,KAAK,MAAM,IAAI,IAAI,aAAa,EAAE,CAAC;QAC/B,MAAM,QAAQ,GAAG,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;QACxC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,IAAI,KAAK,QAAQ,CAAC,MAAM,IAAI,QAAQ,CAAC,GAAG,IAAI,CAAC,CAAC;IAC5E,CAAC;IACD,OAAO,CAAC,CAAC;AACb,CAAC;AAED,KAAK,UAAU,2BAA2B,CACtC,KAA2B,EAC3B,MAAkB,EAClB,OAAuB;IAEvB,MAAM,OAAO,GAAG,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;IACtC,IAAI,CAAC,OAAO,EAAE,CAAC;QACX,MAAM,IAAI,KAAK,CAAC,kCAAkC,KAAK,8BAA8B,CAAC,CAAC;IAC3F,CAAC;IAED,MAAM,MAAM,GAAG,cAAc,CAAC,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,IAAI,MAAM,CAAC;IAChE,IAAI,MAAM,KAAK,MAAM,IAAI,MAAM,KAAK,MAAM,EAAE,CAAC;QACzC,MAAM,IAAI,KAAK,CAAC,+CAA+C,CAAC,CAAC;IACrE,CAAC;IAED,MAAM,QAAQ,GAAG,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;IAC5E,MAAM,OAAO,GAAG,MAAM,uBAAuB,EAAE,CAAC;IAEhD,MAAM,OAAO,GACT,KAAK,KAAK,QAAQ;QACd,CAAC,CAAC,CAAC,MAAM,uBAAuB,CAAC,QAAQ,EAAE,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC;QACrF,CAAC,CAAC,MAAM,mBAAmB,CAAC,QAAQ,EAAE,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC;IAEpE,OAAO,CAAC,MAAM,CAAC,KAAK,CAChB,MAAM,KAAK,MAAM;QACb,CAAC,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,eAAe,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI;QAC1D,CAAC,CAAC,gBAAgB,CAAC,KAAK,EAAE,QAAQ,EAAE,OAAO,CAAC,CACnD,CAAC;IAEF,OAAO,OAAO,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC3D,CAAC;AAED,KAAK,UAAU,MAAM,CACjB,MAAiB,EACjB,MAAkB,EAClB,OAAuB;IAEvB,MAAM,CAAC,YAAY,EAAE,QAAQ,CAAC,GAAG,eAAe,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjE,MAAM,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;IACxC,MAAM,MAAM,GAAG,MAAM,SAAS,CAC1B,QAAQ,EACR,OAAO,EACP,MAAM,MAAM,CAAC,WAAW,CAAC,QAAQ,EAAE,OAAO,CAAC,CAC9C,CAAC;IACF,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,cAAc,YAAY,KAAK,QAAQ,CAAC,MAAM,KAAK,CAAC,CAAC;IAC1E,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,YAAY,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IAClD,OAAO,eAAe,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC3C,CAAC;AAED,KAAK,UAAU,MAAM,CACjB,MAAiB,EACjB,MAAkB,EAClB,OAAuB;IAEvB,MAAM,CAAC,YAAY,EAAE,QAAQ,CAAC,GAAG,eAAe,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjE,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,QAAQ,EAAE,OAAO,EAAE,EAAE,CAAC,CAAC;IACtD,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,KAAK,iBAAiB,CAAC,CAAC;IACxE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,YAAY,KAAK,QAAQ,CAAC,MAAM,KAAK,QAAQ,CAAC,GAAG,IAAI,CAAC,CAAC;IAC/E,IAAI,MAAM,EAAE,CAAC;QACT,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,WAAW,EAAE,IAAI,MAAM,CAAC,OAAO,IAAI,CAAC,CAAC;IAC/E,CAAC;IACD,OAAO,MAAM,EAAE,MAAM,KAAK,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC7C,CAAC;AAED,KAAK,UAAU,aAAa,CACxB,MAAiB,EACjB,OAA+B,EAC/B,MAAkB,EAClB,OAAuB;IAEvB,MAAM,CAAC,YAAY,EAAE,QAAQ,CAAC,GAAG,eAAe,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjE,MAAM,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;IACxC,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC;IAChC,IAAI,CAAC,OAAO,EAAE,CAAC;QACX,MAAM,IAAI,KAAK,CAAC,kBAAkB,CAAC,OAAO,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC;IAClE,CAAC;IACD,IAAI,QAAQ,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;QAChC,OAAO,CAAC,MAAM,CAAC,KAAK,CAChB,GAAG,OAAO,IAAI,YAAY,KAAK,iBAAiB,CAAC,QAAQ,CAAC,KAAK,CAClE,CAAC;IACN,CAAC;IACD,OAAO,OAAO,CAAC,EAAE,YAAY,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,CAAC,WAAW,EAAE,OAAO,EAAE,CAAC,CAAC;AAClF,CAAC;AAED,SAAS,eAAe,CACpB,MAAiB,EACjB,MAAkB;IAElB,MAAM,IAAI,GAAG,cAAc,CAAC,MAAM,CAAC,KAAK,EAAE,UAAU,CAAC,IAAI,MAAM,CAAC,eAAe,CAAC;IAChF,IAAI,CAAC,IAAI,EAAE,CAAC;QACR,MAAM,IAAI,KAAK,CAAC,gEAAgE,CAAC,CAAC;IACtF,CAAC;IACD,MAAM,QAAQ,GAAG,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;IACxC,IAAI,CAAC,QAAQ,EAAE,CAAC;QACZ,MAAM,IAAI,KAAK,CAAC,qBAAqB,IAAI,EAAE,CAAC,CAAC;IACjD,CAAC;IACD,OAAO,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;AAC5B,CAAC;AAED,SAAS,WAAW,CAAC,KAAa;IAC9B,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,UAAU,EAAE,CAAC;QAC9C,OAAO,KAAK,CAAC;IACjB,CAAC;IACD,MAAM,IAAI,KAAK,CAAC,uBAAuB,KAAK,EAAE,CAAC,CAAC;AACpD,CAAC;AAED,SAAS,iBAAiB,CAAC,QAAwC;IAC/D,OAAO,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,iBAAiB,CAAC;AACrE,CAAC;AAED,SAAS,QAAQ;IACb,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2GAiCgG,CAAC;AAC5G,CAAC;AAED,SAAS,eAAe,CAAC,OAAe;IACpC,QAAQ,OAAO,EAAE,CAAC;QACd,KAAK,MAAM;YACP,OAAO;;;;;;;;;;;kEAW+C,CAAC;QAC3D,KAAK,MAAM;YACP,OAAO;;;;;;;;;;;;;;;kEAe+C,CAAC;QAC3D,KAAK,IAAI,CAAC;QACV,KAAK,MAAM,CAAC;QACZ,KAAK,MAAM;YACP,OAAO;;;cAGL,OAAO;;EAEnB,wBAAwB,CAAC,OAAO,CAAC;;;;kEAI+B,CAAC;QAC3D,KAAK,UAAU;YACX,OAAO;;;;;;;;;;;kEAW+C,CAAC;QAC3D,KAAK,QAAQ;YACT,OAAO;;;;;;;;;kEAS+C,CAAC;QAC3D,KAAK,QAAQ;YACT,OAAO;;;;;;;;;kEAS+C,CAAC;QAC3D,KAAK,QAAQ;YACT,OAAO;;;;;;;;;;;;;;;;;kEAiB+C,CAAC;QAC3D,KAAK,SAAS;YACV,OAAO;;;;;;;;;;kEAU+C,CAAC;QAC3D;YACI,OAAO,oBAAoB,OAAO,OAAO,QAAQ,EAAE,EAAE,CAAC;IAC9D,CAAC;AACL,CAAC;AAED,SAAS,wBAAwB,CAAC,OAA+B;IAC7D,IAAI,OAAO,KAAK,IAAI,EAAE,CAAC;QACnB,OAAO,gDAAgD,CAAC;IAC5D,CAAC;IACD,IAAI,OAAO,KAAK,MAAM,EAAE,CAAC;QACrB,OAAO,+CAA+C,CAAC;IAC3D,CAAC;IACD,OAAO,0DAA0D,CAAC;AACtE,CAAC;AAED,SAAS,WAAW;IAChB,OAAO,GAAG,WAAW,CAAC,IAAI,IAAI,WAAW,CAAC,OAAO,EAAE,CAAC;AACxD,CAAC;AAED,KAAK,UAAU,iBAAiB,CAAC,OAAuB;IACpD,MAAM,cAAc,GAAG,WAAW,CAAC,OAAO,CAAC;IAC3C,MAAM,KAAK,GAAG,CAAC,WAAW,EAAE,CAAC,CAAC;IAE9B,IAAI,CAAC;QACD,MAAM,aAAa,GAAG,MAAM,kBAAkB,CAAC,OAAO,CAAC,CAAC;QACxD,KAAK,CAAC,IAAI,CAAC,UAAU,aAAa,EAAE,CAAC,CAAC;QACtC,MAAM,UAAU,GAAG,aAAa,CAAC,cAAc,EAAE,aAAa,CAAC,CAAC;QAChE,IAAI,UAAU,GAAG,CAAC,EAAE,CAAC;YACjB,KAAK,CAAC,IAAI,CAAC,qBAAqB,aAAa,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QAC9D,CAAC;aAAM,IAAI,UAAU,KAAK,CAAC,EAAE,CAAC;YAC1B,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QAC7B,CAAC;aAAM,CAAC;YACJ,KAAK,CAAC,IAAI,CAAC,yCAAyC,CAAC,CAAC;QAC1D,CAAC;IACL,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACb,KAAK,CAAC,IAAI,CAAC,uBAAuB,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IAChG,CAAC;IAED,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC5B,CAAC;AAED,SAAS,aAAa,CAAC,OAAuB;IAC1C,MAAM,kBAAkB,GACpB,OAAO,CAAC,kBAAkB,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;IACnE,OAAO,kBAAkB,KAAK,YAAY;QACtC,CAAC,CAAC,kDAAkD;QACpD,CAAC,CAAC,oCAAoC,CAAC;AAC/C,CAAC;AAED,KAAK,UAAU,kBAAkB,CAAC,OAAuB;IACrD,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,KAAK,CAChC,8BAA8B,kBAAkB,CAAC,WAAW,CAAC,IAAI,CAAC,SAAS,CAC9E,CAAC;IACF,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;QACf,MAAM,IAAI,KAAK,CAAC,8BAA8B,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;IACrE,CAAC;IAED,MAAM,QAAQ,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;IACvC,IAAI,CAAC,iBAAiB,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC/B,MAAM,IAAI,KAAK,CAAC,iDAAiD,CAAC,CAAC;IACvE,CAAC;IACD,OAAO,QAAQ,CAAC,OAAO,CAAC;AAC5B,CAAC;AAED,SAAS,iBAAiB,CAAC,KAAc;IACrC,OAAO,CACH,OAAO,KAAK,KAAK,QAAQ;QACzB,KAAK,KAAK,IAAI;QACd,SAAS,IAAI,KAAK;QAClB,OAAO,KAAK,CAAC,OAAO,KAAK,QAAQ,CACpC,CAAC;AACN,CAAC;AAED,SAAS,aAAa,CAAC,IAAY,EAAE,KAAa;IAC9C,MAAM,SAAS,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC;IACpC,MAAM,UAAU,GAAG,WAAW,CAAC,KAAK,CAAC,CAAC;IAEtC,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,SAAS,CAAC,MAAM,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC;QACvD,IAAI,SAAS,CAAC,KAAK,CAAC,GAAG,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC;YACvC,OAAO,CAAC,CAAC;QACb,CAAC;QACD,IAAI,SAAS,CAAC,KAAK,CAAC,GAAG,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC;YACvC,OAAO,CAAC,CAAC,CAAC;QACd,CAAC;IACL,CAAC;IAED,OAAO,CAAC,CAAC;AACb,CAAC;AAED,SAAS,WAAW,CAAC,OAAe;IAChC,MAAM,CAAC,KAAK,GAAG,GAAG,EAAE,KAAK,GAAG,GAAG,EAAE,KAAK,GAAG,GAAG,CAAC,GAAG,OAAO,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACpF,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;AACxE,CAAC"}
|
|
1
|
+
{"version":3,"file":"runtime.js","sourceRoot":"","sources":["../src/runtime.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import type { CliConfig, InstanceConfig } from "
|
|
1
|
+
import type { CliConfig, InstanceConfig } from "../types.js";
|
|
2
2
|
export declare function resolveConfigPath(env: NodeJS.ProcessEnv): string;
|
|
3
3
|
export declare function loadConfig(path: string): Promise<CliConfig>;
|
|
4
4
|
export declare function saveConfig(path: string, config: CliConfig): Promise<void>;
|
|
5
5
|
export declare function upsertInstance(config: CliConfig, name: string, instance: InstanceConfig): CliConfig;
|
|
6
|
-
//# sourceMappingURL=config.d.ts.map
|
|
6
|
+
//# sourceMappingURL=cli-config.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli-config.d.ts","sourceRoot":"","sources":["../../src/services/cli-config.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAI7D,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,MAAM,CAAC,UAAU,GAAG,MAAM,CAUhE;AAED,wBAAsB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC,CAUjE;AAED,wBAAsB,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC,CAM/E;AAsBD,wBAAgB,cAAc,CAC1B,MAAM,EAAE,SAAS,EACjB,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,cAAc,GACzB,SAAS,CAQX"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { mkdir, readFile, writeFile } from "node:fs/promises";
|
|
2
|
-
import { dirname, join, resolve } from "node:path";
|
|
2
|
+
import { dirname, isAbsolute, join, resolve } from "node:path";
|
|
3
3
|
import { homedir } from "node:os";
|
|
4
4
|
const emptyConfig = () => ({ instances: {} });
|
|
5
5
|
export function resolveConfigPath(env) {
|
|
@@ -82,25 +82,30 @@ function validateInstanceConfig(name, value) {
|
|
|
82
82
|
}
|
|
83
83
|
validateHttpUrl(value.url, `Instance ${name} url`);
|
|
84
84
|
validateOptionalHttpUrl(value.clientUrl, `Instance ${name} clientUrl`);
|
|
85
|
+
if (typeof value.projectDirectory === "string" && !isAbsolute(value.projectDirectory)) {
|
|
86
|
+
throw new Error(`Instance ${name} projectDirectory must be absolute.`);
|
|
87
|
+
}
|
|
85
88
|
return {
|
|
86
89
|
target: value.target,
|
|
87
90
|
url: value.url,
|
|
88
91
|
clientUrl: optionalString(value.clientUrl),
|
|
89
92
|
composeFile: optionalString(value.composeFile),
|
|
90
93
|
composeFiles: optionalStringArray(value.composeFiles),
|
|
94
|
+
composeProfiles: optionalStringArray(value.composeProfiles, "composeProfiles"),
|
|
91
95
|
envFile: optionalString(value.envFile),
|
|
92
96
|
projectName: optionalString(value.projectName),
|
|
97
|
+
projectDirectory: optionalString(value.projectDirectory),
|
|
93
98
|
};
|
|
94
99
|
}
|
|
95
100
|
function optionalString(value) {
|
|
96
101
|
return typeof value === "string" ? value : undefined;
|
|
97
102
|
}
|
|
98
|
-
function optionalStringArray(value) {
|
|
103
|
+
function optionalStringArray(value, label = "composeFiles") {
|
|
99
104
|
if (!Array.isArray(value)) {
|
|
100
105
|
return undefined;
|
|
101
106
|
}
|
|
102
107
|
if (value.some((item) => typeof item !== "string")) {
|
|
103
|
-
throw new Error(
|
|
108
|
+
throw new Error(`${label} must contain only strings.`);
|
|
104
109
|
}
|
|
105
110
|
return value;
|
|
106
111
|
}
|
|
@@ -120,4 +125,4 @@ function validateHttpUrl(value, label) {
|
|
|
120
125
|
throw new Error(`${label} must be an absolute HTTP(S) URL.`);
|
|
121
126
|
}
|
|
122
127
|
}
|
|
123
|
-
//# sourceMappingURL=config.js.map
|
|
128
|
+
//# sourceMappingURL=cli-config.js.map
|