pax8-cta 0.1.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 +200 -0
- package/README.md +659 -0
- package/demo-data/solutions/ProductQADemo_1_0_0_2_managed.zip +0 -0
- package/dist/commands/analyze.d.ts +28 -0
- package/dist/commands/analyze.d.ts.map +1 -0
- package/dist/commands/analyze.js +571 -0
- package/dist/commands/analyze.js.map +1 -0
- package/dist/commands/auth.d.ts +18 -0
- package/dist/commands/auth.d.ts.map +1 -0
- package/dist/commands/auth.js +171 -0
- package/dist/commands/auth.js.map +1 -0
- package/dist/commands/config.d.ts +34 -0
- package/dist/commands/config.d.ts.map +1 -0
- package/dist/commands/config.js +299 -0
- package/dist/commands/config.js.map +1 -0
- package/dist/commands/demo.d.ts +33 -0
- package/dist/commands/demo.d.ts.map +1 -0
- package/dist/commands/demo.js +362 -0
- package/dist/commands/demo.js.map +1 -0
- package/dist/commands/deploy.d.ts +18 -0
- package/dist/commands/deploy.d.ts.map +1 -0
- package/dist/commands/deploy.js +1186 -0
- package/dist/commands/deploy.js.map +1 -0
- package/dist/commands/deployments/helpers.d.ts +68 -0
- package/dist/commands/deployments/helpers.d.ts.map +1 -0
- package/dist/commands/deployments/helpers.js +414 -0
- package/dist/commands/deployments/helpers.js.map +1 -0
- package/dist/commands/deployments/index.d.ts +24 -0
- package/dist/commands/deployments/index.d.ts.map +1 -0
- package/dist/commands/deployments/index.js +47 -0
- package/dist/commands/deployments/index.js.map +1 -0
- package/dist/commands/deployments/list.d.ts +18 -0
- package/dist/commands/deployments/list.d.ts.map +1 -0
- package/dist/commands/deployments/list.js +97 -0
- package/dist/commands/deployments/list.js.map +1 -0
- package/dist/commands/deployments/show.d.ts +18 -0
- package/dist/commands/deployments/show.d.ts.map +1 -0
- package/dist/commands/deployments/show.js +81 -0
- package/dist/commands/deployments/show.js.map +1 -0
- package/dist/commands/deployments/undo.d.ts +18 -0
- package/dist/commands/deployments/undo.d.ts.map +1 -0
- package/dist/commands/deployments/undo.js +295 -0
- package/dist/commands/deployments/undo.js.map +1 -0
- package/dist/commands/export.d.ts +18 -0
- package/dist/commands/export.d.ts.map +1 -0
- package/dist/commands/export.js +133 -0
- package/dist/commands/export.js.map +1 -0
- package/dist/commands/import.d.ts +18 -0
- package/dist/commands/import.d.ts.map +1 -0
- package/dist/commands/import.js +129 -0
- package/dist/commands/import.js.map +1 -0
- package/dist/commands/init-config.d.ts +26 -0
- package/dist/commands/init-config.d.ts.map +1 -0
- package/dist/commands/init-config.js +123 -0
- package/dist/commands/init-config.js.map +1 -0
- package/dist/commands/init-validation.d.ts +47 -0
- package/dist/commands/init-validation.d.ts.map +1 -0
- package/dist/commands/init-validation.js +339 -0
- package/dist/commands/init-validation.js.map +1 -0
- package/dist/commands/init-wizard.d.ts +25 -0
- package/dist/commands/init-wizard.d.ts.map +1 -0
- package/dist/commands/init-wizard.js +433 -0
- package/dist/commands/init-wizard.js.map +1 -0
- package/dist/commands/init.d.ts +18 -0
- package/dist/commands/init.d.ts.map +1 -0
- package/dist/commands/init.js +46 -0
- package/dist/commands/init.js.map +1 -0
- package/dist/commands/resolve-url.d.ts +18 -0
- package/dist/commands/resolve-url.d.ts.map +1 -0
- package/dist/commands/resolve-url.js +126 -0
- package/dist/commands/resolve-url.js.map +1 -0
- package/dist/commands/setup.d.ts +18 -0
- package/dist/commands/setup.d.ts.map +1 -0
- package/dist/commands/setup.js +239 -0
- package/dist/commands/setup.js.map +1 -0
- package/dist/commands/solutions/drift-analysis.d.ts +73 -0
- package/dist/commands/solutions/drift-analysis.d.ts.map +1 -0
- package/dist/commands/solutions/drift-analysis.js +416 -0
- package/dist/commands/solutions/drift-analysis.js.map +1 -0
- package/dist/commands/solutions/drift.d.ts +32 -0
- package/dist/commands/solutions/drift.d.ts.map +1 -0
- package/dist/commands/solutions/drift.js +641 -0
- package/dist/commands/solutions/drift.js.map +1 -0
- package/dist/commands/solutions/fix-planner.d.ts +48 -0
- package/dist/commands/solutions/fix-planner.d.ts.map +1 -0
- package/dist/commands/solutions/fix-planner.js +43 -0
- package/dist/commands/solutions/fix-planner.js.map +1 -0
- package/dist/commands/solutions/helpers.d.ts +35 -0
- package/dist/commands/solutions/helpers.d.ts.map +1 -0
- package/dist/commands/solutions/helpers.js +54 -0
- package/dist/commands/solutions/helpers.js.map +1 -0
- package/dist/commands/solutions/index.d.ts +18 -0
- package/dist/commands/solutions/index.d.ts.map +1 -0
- package/dist/commands/solutions/index.js +30 -0
- package/dist/commands/solutions/index.js.map +1 -0
- package/dist/commands/solutions/list.d.ts +18 -0
- package/dist/commands/solutions/list.d.ts.map +1 -0
- package/dist/commands/solutions/list.js +174 -0
- package/dist/commands/solutions/list.js.map +1 -0
- package/dist/commands/solutions/remove.d.ts +18 -0
- package/dist/commands/solutions/remove.d.ts.map +1 -0
- package/dist/commands/solutions/remove.js +137 -0
- package/dist/commands/solutions/remove.js.map +1 -0
- package/dist/commands/solutions/risk-calculator.d.ts +33 -0
- package/dist/commands/solutions/risk-calculator.d.ts.map +1 -0
- package/dist/commands/solutions/risk-calculator.js +79 -0
- package/dist/commands/solutions/risk-calculator.js.map +1 -0
- package/dist/commands/solutions/show.d.ts +18 -0
- package/dist/commands/solutions/show.d.ts.map +1 -0
- package/dist/commands/solutions/show.js +165 -0
- package/dist/commands/solutions/show.js.map +1 -0
- package/dist/commands/status.d.ts +18 -0
- package/dist/commands/status.d.ts.map +1 -0
- package/dist/commands/status.js +573 -0
- package/dist/commands/status.js.map +1 -0
- package/dist/commands/telemetry.d.ts +18 -0
- package/dist/commands/telemetry.d.ts.map +1 -0
- package/dist/commands/telemetry.js +85 -0
- package/dist/commands/telemetry.js.map +1 -0
- package/dist/commands/tenants/health.d.ts +18 -0
- package/dist/commands/tenants/health.d.ts.map +1 -0
- package/dist/commands/tenants/health.js +172 -0
- package/dist/commands/tenants/health.js.map +1 -0
- package/dist/commands/tenants/helpers.d.ts +44 -0
- package/dist/commands/tenants/helpers.d.ts.map +1 -0
- package/dist/commands/tenants/helpers.js +72 -0
- package/dist/commands/tenants/helpers.js.map +1 -0
- package/dist/commands/tenants/index.d.ts +19 -0
- package/dist/commands/tenants/index.d.ts.map +1 -0
- package/dist/commands/tenants/index.js +39 -0
- package/dist/commands/tenants/index.js.map +1 -0
- package/dist/commands/tenants/inspect.d.ts +18 -0
- package/dist/commands/tenants/inspect.d.ts.map +1 -0
- package/dist/commands/tenants/inspect.js +176 -0
- package/dist/commands/tenants/inspect.js.map +1 -0
- package/dist/commands/tenants/list.d.ts +18 -0
- package/dist/commands/tenants/list.d.ts.map +1 -0
- package/dist/commands/tenants/list.js +144 -0
- package/dist/commands/tenants/list.js.map +1 -0
- package/dist/commands/tenants/manage.d.ts +20 -0
- package/dist/commands/tenants/manage.d.ts.map +1 -0
- package/dist/commands/tenants/manage.js +206 -0
- package/dist/commands/tenants/manage.js.map +1 -0
- package/dist/commands/tenants/show.d.ts +18 -0
- package/dist/commands/tenants/show.d.ts.map +1 -0
- package/dist/commands/tenants/show.js +191 -0
- package/dist/commands/tenants/show.js.map +1 -0
- package/dist/commands/validate.d.ts +18 -0
- package/dist/commands/validate.d.ts.map +1 -0
- package/dist/commands/validate.js +536 -0
- package/dist/commands/validate.js.map +1 -0
- package/dist/index.d.ts +19 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +258 -0
- package/dist/index.js.map +1 -0
- package/dist/lib/auth.d.ts +51 -0
- package/dist/lib/auth.d.ts.map +1 -0
- package/dist/lib/auth.js +153 -0
- package/dist/lib/auth.js.map +1 -0
- package/dist/lib/banner.d.ts +19 -0
- package/dist/lib/banner.d.ts.map +1 -0
- package/dist/lib/banner.js +78 -0
- package/dist/lib/banner.js.map +1 -0
- package/dist/lib/command-wrapper.d.ts +56 -0
- package/dist/lib/command-wrapper.d.ts.map +1 -0
- package/dist/lib/command-wrapper.js +71 -0
- package/dist/lib/command-wrapper.js.map +1 -0
- package/dist/lib/credentials.d.ts +56 -0
- package/dist/lib/credentials.d.ts.map +1 -0
- package/dist/lib/credentials.js +146 -0
- package/dist/lib/credentials.js.map +1 -0
- package/dist/lib/demo-banner.d.ts +15 -0
- package/dist/lib/demo-banner.d.ts.map +1 -0
- package/dist/lib/demo-banner.js +33 -0
- package/dist/lib/demo-banner.js.map +1 -0
- package/dist/lib/error-handler.d.ts +51 -0
- package/dist/lib/error-handler.d.ts.map +1 -0
- package/dist/lib/error-handler.js +458 -0
- package/dist/lib/error-handler.js.map +1 -0
- package/dist/lib/errors.d.ts +61 -0
- package/dist/lib/errors.d.ts.map +1 -0
- package/dist/lib/errors.js +168 -0
- package/dist/lib/errors.js.map +1 -0
- package/dist/lib/formatters.d.ts +55 -0
- package/dist/lib/formatters.d.ts.map +1 -0
- package/dist/lib/formatters.js +163 -0
- package/dist/lib/formatters.js.map +1 -0
- package/dist/lib/graph-client.d.ts +74 -0
- package/dist/lib/graph-client.d.ts.map +1 -0
- package/dist/lib/graph-client.js +231 -0
- package/dist/lib/graph-client.js.map +1 -0
- package/dist/lib/input.d.ts +22 -0
- package/dist/lib/input.d.ts.map +1 -0
- package/dist/lib/input.js +120 -0
- package/dist/lib/input.js.map +1 -0
- package/dist/lib/interactive-wizard.d.ts +26 -0
- package/dist/lib/interactive-wizard.d.ts.map +1 -0
- package/dist/lib/interactive-wizard.js +550 -0
- package/dist/lib/interactive-wizard.js.map +1 -0
- package/dist/lib/oss-surface.d.ts +21 -0
- package/dist/lib/oss-surface.d.ts.map +1 -0
- package/dist/lib/oss-surface.js +29 -0
- package/dist/lib/oss-surface.js.map +1 -0
- package/dist/lib/output.d.ts +74 -0
- package/dist/lib/output.d.ts.map +1 -0
- package/dist/lib/output.js +156 -0
- package/dist/lib/output.js.map +1 -0
- package/dist/lib/picker.d.ts +75 -0
- package/dist/lib/picker.d.ts.map +1 -0
- package/dist/lib/picker.js +115 -0
- package/dist/lib/picker.js.map +1 -0
- package/dist/lib/repl.d.ts +19 -0
- package/dist/lib/repl.d.ts.map +1 -0
- package/dist/lib/repl.js +158 -0
- package/dist/lib/repl.js.map +1 -0
- package/dist/lib/spinner.d.ts +41 -0
- package/dist/lib/spinner.d.ts.map +1 -0
- package/dist/lib/spinner.js +126 -0
- package/dist/lib/spinner.js.map +1 -0
- package/dist/lib/telemetry.d.ts +96 -0
- package/dist/lib/telemetry.d.ts.map +1 -0
- package/dist/lib/telemetry.js +367 -0
- package/dist/lib/telemetry.js.map +1 -0
- package/package.json +68 -0
|
@@ -0,0 +1,168 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright 2024 Pax8, Inc.
|
|
3
|
+
*
|
|
4
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
+
* you may not use this file except in compliance with the License.
|
|
6
|
+
* You may obtain a copy of the License at
|
|
7
|
+
*
|
|
8
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
+
*
|
|
10
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
11
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
+
* See the License for the specific language governing permissions and
|
|
14
|
+
* limitations under the License.
|
|
15
|
+
*/
|
|
16
|
+
import chalk from "chalk";
|
|
17
|
+
import { formatError, printError, CtaError } from "./error-handler.js";
|
|
18
|
+
/**
|
|
19
|
+
* Base CLI error with exit code.
|
|
20
|
+
* Exit code 1 = runtime error (config not found, network failure, etc.)
|
|
21
|
+
*/
|
|
22
|
+
export class CliError extends Error {
|
|
23
|
+
exitCode;
|
|
24
|
+
constructor(message, exitCode = 1) {
|
|
25
|
+
super(message);
|
|
26
|
+
this.exitCode = exitCode;
|
|
27
|
+
this.name = "CliError";
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Usage error — invalid options, missing required args, etc.
|
|
32
|
+
* Exit code 2.
|
|
33
|
+
*/
|
|
34
|
+
export class UsageError extends CliError {
|
|
35
|
+
constructor(message) {
|
|
36
|
+
super(message, 2);
|
|
37
|
+
this.name = "UsageError";
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Detect whether JSON output mode is active.
|
|
42
|
+
*
|
|
43
|
+
* Two signals (OR'd):
|
|
44
|
+
* 1. `--json` is present anywhere in process.argv (simple substring check).
|
|
45
|
+
* 2. stdout is not a TTY (piped/redirected).
|
|
46
|
+
*
|
|
47
|
+
* Exported so that issue #345 (proper Commander-driven --json flag) can replace
|
|
48
|
+
* this with a single authoritative source of truth once that flag lands.
|
|
49
|
+
*/
|
|
50
|
+
export function isJsonOutputMode() {
|
|
51
|
+
return process.argv.includes("--json") || !process.stdout.isTTY;
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Build the JSON error payload from any error value.
|
|
55
|
+
*
|
|
56
|
+
* Schema:
|
|
57
|
+
* ```json
|
|
58
|
+
* {
|
|
59
|
+
* "error": {
|
|
60
|
+
* "code": "...",
|
|
61
|
+
* "message": "...",
|
|
62
|
+
* "causes": [...],
|
|
63
|
+
* "recovery": [...],
|
|
64
|
+
* "context": { ... }
|
|
65
|
+
* }
|
|
66
|
+
* }
|
|
67
|
+
* ```
|
|
68
|
+
*
|
|
69
|
+
* Plain `Error` / unknown become `{ error: { message } }`.
|
|
70
|
+
* Stack traces are never included.
|
|
71
|
+
*/
|
|
72
|
+
function buildJsonError(error) {
|
|
73
|
+
// ZodError — duck-typed so we don't need to import zod directly in the CLI package.
|
|
74
|
+
// ZodError instances always have an `errors` array of `{ path, message }` objects.
|
|
75
|
+
if (error instanceof Error && error.name === "ZodError" && Array.isArray(error.errors)) {
|
|
76
|
+
const zodErrors = error.errors;
|
|
77
|
+
return {
|
|
78
|
+
error: {
|
|
79
|
+
code: "ERROR_VALIDATION",
|
|
80
|
+
message: "Validation failed",
|
|
81
|
+
causes: zodErrors.map((e) => `${e.path.join(".")}: ${e.message}`),
|
|
82
|
+
recovery: ["Check the input values and retry"],
|
|
83
|
+
},
|
|
84
|
+
};
|
|
85
|
+
}
|
|
86
|
+
// CtaError (CLI structured error) — emit all fields directly
|
|
87
|
+
if (error instanceof CtaError) {
|
|
88
|
+
const payload = {
|
|
89
|
+
code: error.code,
|
|
90
|
+
message: error.message,
|
|
91
|
+
causes: error.causes,
|
|
92
|
+
recovery: error.recovery,
|
|
93
|
+
};
|
|
94
|
+
if (error.context && Object.keys(error.context).length > 0) {
|
|
95
|
+
payload.context = error.context;
|
|
96
|
+
}
|
|
97
|
+
return { error: payload };
|
|
98
|
+
}
|
|
99
|
+
// CliError / UsageError — already actionable (message authored by the
|
|
100
|
+
// caller). Emit the message verbatim instead of running it through the
|
|
101
|
+
// regex formatter, which can mis-classify "X not found" messages as a
|
|
102
|
+
// generic ERROR_CONFIG_NOT_FOUND. (Issue #360.)
|
|
103
|
+
if (error instanceof CliError) {
|
|
104
|
+
return {
|
|
105
|
+
error: {
|
|
106
|
+
code: error.exitCode === 2 ? "ERROR_USAGE" : "ERROR_CLI",
|
|
107
|
+
message: error.message,
|
|
108
|
+
},
|
|
109
|
+
};
|
|
110
|
+
}
|
|
111
|
+
// For any other error, run through the structured formatter and emit result
|
|
112
|
+
try {
|
|
113
|
+
const structured = formatError(error);
|
|
114
|
+
const payload = {
|
|
115
|
+
code: structured.code,
|
|
116
|
+
message: structured.message,
|
|
117
|
+
causes: structured.causes,
|
|
118
|
+
recovery: structured.recovery,
|
|
119
|
+
};
|
|
120
|
+
if (structured.context && Object.keys(structured.context).length > 0) {
|
|
121
|
+
payload.context = structured.context;
|
|
122
|
+
}
|
|
123
|
+
return { error: payload };
|
|
124
|
+
}
|
|
125
|
+
catch {
|
|
126
|
+
// Ultimate fallback — plain Error or unknown
|
|
127
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
128
|
+
return { error: { message } };
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
/**
|
|
132
|
+
* Standard error handler for CLI commands.
|
|
133
|
+
*
|
|
134
|
+
* - Stops the spinner with a fail message
|
|
135
|
+
* - When JSON mode is active (--json flag or piped stdout), emits a single JSON
|
|
136
|
+
* object to stderr with structured `code`, `message`, `causes`, and `recovery`
|
|
137
|
+
* fields — suitable for LLM-agent consumption.
|
|
138
|
+
* - Otherwise, uses the human-formatted handler (formatError/printError).
|
|
139
|
+
* - Exits with the appropriate code (1=runtime, 2=usage).
|
|
140
|
+
*/
|
|
141
|
+
export function handleCommandError(error, spinner, failMessage) {
|
|
142
|
+
// Stop the spinner before any output
|
|
143
|
+
if (spinner) {
|
|
144
|
+
spinner.fail(failMessage ? chalk.red(failMessage) : chalk.red("Command failed"));
|
|
145
|
+
}
|
|
146
|
+
if (isJsonOutputMode()) {
|
|
147
|
+
// JSON mode: emit structured payload to stderr, no human-formatted text
|
|
148
|
+
const payload = buildJsonError(error);
|
|
149
|
+
process.stderr.write(JSON.stringify(payload) + "\n");
|
|
150
|
+
process.exit(error instanceof CliError ? error.exitCode : 1);
|
|
151
|
+
}
|
|
152
|
+
// Human-readable mode (original behaviour preserved exactly)
|
|
153
|
+
if (error instanceof CliError) {
|
|
154
|
+
if (!spinner && failMessage) {
|
|
155
|
+
console.error(chalk.red(failMessage));
|
|
156
|
+
}
|
|
157
|
+
// CliError messages are already actionable — print directly
|
|
158
|
+
console.error(chalk.red(`\nError: ${error.message}`));
|
|
159
|
+
process.exit(error.exitCode);
|
|
160
|
+
}
|
|
161
|
+
if (!spinner && failMessage) {
|
|
162
|
+
console.error(chalk.red(failMessage));
|
|
163
|
+
}
|
|
164
|
+
const structured = formatError(error);
|
|
165
|
+
printError(structured);
|
|
166
|
+
process.exit(1);
|
|
167
|
+
}
|
|
168
|
+
//# sourceMappingURL=errors.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/lib/errors.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright 2024 Pax8, Inc.
|
|
3
|
+
*
|
|
4
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
+
* you may not use this file except in compliance with the License.
|
|
6
|
+
* You may obtain a copy of the License at
|
|
7
|
+
*
|
|
8
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
+
*
|
|
10
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
11
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
+
* See the License for the specific language governing permissions and
|
|
14
|
+
* limitations under the License.
|
|
15
|
+
*/
|
|
16
|
+
/**
|
|
17
|
+
* Shared formatting utilities for CLI output
|
|
18
|
+
*/
|
|
19
|
+
/**
|
|
20
|
+
* Format a date string as a human-readable "time ago" string
|
|
21
|
+
*/
|
|
22
|
+
export declare function formatTimeAgo(dateString: string): string;
|
|
23
|
+
/**
|
|
24
|
+
* Format a duration in milliseconds as a human-readable string
|
|
25
|
+
*/
|
|
26
|
+
export declare function formatDuration(ms: number): string;
|
|
27
|
+
/**
|
|
28
|
+
* Calculate and format duration between two date strings
|
|
29
|
+
*/
|
|
30
|
+
export declare function calculateDuration(startedAt?: string, completedAt?: string): string;
|
|
31
|
+
/**
|
|
32
|
+
* Deployment status type
|
|
33
|
+
*/
|
|
34
|
+
export type DeploymentStatus = "completed" | "failed" | "in_progress" | "pending" | "scheduled" | "awaiting_approval" | "approved" | "rejected" | "cancelled" | "rolling_back" | "rolled_back";
|
|
35
|
+
/**
|
|
36
|
+
* Format a deployment status with color and icon
|
|
37
|
+
* @param status - The deployment status
|
|
38
|
+
* @param style - 'default' for standard labels, 'tracking' for the per-deployment
|
|
39
|
+
* tracking view (slightly different verbiage / icons for the
|
|
40
|
+
* progress-oriented status table)
|
|
41
|
+
*/
|
|
42
|
+
export declare function formatStatus(status: string, style?: "default" | "tracking"): string;
|
|
43
|
+
/**
|
|
44
|
+
* Truncate a string to a maximum length, adding ellipsis if needed
|
|
45
|
+
*/
|
|
46
|
+
export declare function truncate(str: string, maxLength: number): string;
|
|
47
|
+
/**
|
|
48
|
+
* Truncate an ID string (defaults to 15 chars for UUIDs)
|
|
49
|
+
*/
|
|
50
|
+
export declare function truncateId(id: string, maxLength?: number): string;
|
|
51
|
+
/**
|
|
52
|
+
* Safely format an error to a string
|
|
53
|
+
*/
|
|
54
|
+
export declare function formatError(error: unknown): string;
|
|
55
|
+
//# sourceMappingURL=formatters.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"formatters.d.ts","sourceRoot":"","sources":["../../src/lib/formatters.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAIH;;GAEG;AAMH;;GAEG;AACH,wBAAgB,aAAa,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAexD;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,CAMjD;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,SAAS,CAAC,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,MAAM,GAAG,MAAM,CAQlF;AAMD;;GAEG;AACH,MAAM,MAAM,gBAAgB,GACxB,WAAW,GACX,QAAQ,GACR,aAAa,GACb,SAAS,GACT,WAAW,GACX,mBAAmB,GACnB,UAAU,GACV,UAAU,GACV,WAAW,GACX,cAAc,GACd,aAAa,CAAC;AAElB;;;;;;GAMG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,GAAE,SAAS,GAAG,UAAsB,GAAG,MAAM,CAyD9F;AAMD;;GAEG;AACH,wBAAgB,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,CAG/D;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,EAAE,EAAE,MAAM,EAAE,SAAS,GAAE,MAAW,GAAG,MAAM,CAGrE;AAMD;;GAEG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAIlD"}
|
|
@@ -0,0 +1,163 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright 2024 Pax8, Inc.
|
|
3
|
+
*
|
|
4
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
+
* you may not use this file except in compliance with the License.
|
|
6
|
+
* You may obtain a copy of the License at
|
|
7
|
+
*
|
|
8
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
+
*
|
|
10
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
11
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
+
* See the License for the specific language governing permissions and
|
|
14
|
+
* limitations under the License.
|
|
15
|
+
*/
|
|
16
|
+
import chalk from "chalk";
|
|
17
|
+
/**
|
|
18
|
+
* Shared formatting utilities for CLI output
|
|
19
|
+
*/
|
|
20
|
+
// ============================================================================
|
|
21
|
+
// Time Formatting
|
|
22
|
+
// ============================================================================
|
|
23
|
+
/**
|
|
24
|
+
* Format a date string as a human-readable "time ago" string
|
|
25
|
+
*/
|
|
26
|
+
export function formatTimeAgo(dateString) {
|
|
27
|
+
const now = Date.now();
|
|
28
|
+
const then = new Date(dateString).getTime();
|
|
29
|
+
const diffMs = now - then;
|
|
30
|
+
const seconds = Math.floor(diffMs / 1000);
|
|
31
|
+
const minutes = Math.floor(seconds / 60);
|
|
32
|
+
const hours = Math.floor(minutes / 60);
|
|
33
|
+
const days = Math.floor(hours / 24);
|
|
34
|
+
if (days > 0)
|
|
35
|
+
return `${days}d ago`;
|
|
36
|
+
if (hours > 0)
|
|
37
|
+
return `${hours}h ago`;
|
|
38
|
+
if (minutes > 0)
|
|
39
|
+
return `${minutes}m ago`;
|
|
40
|
+
if (seconds > 0)
|
|
41
|
+
return `${seconds}s ago`;
|
|
42
|
+
return "just now";
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Format a duration in milliseconds as a human-readable string
|
|
46
|
+
*/
|
|
47
|
+
export function formatDuration(ms) {
|
|
48
|
+
if (ms < 1000)
|
|
49
|
+
return `${ms}ms`;
|
|
50
|
+
if (ms < 60000)
|
|
51
|
+
return `${Math.round(ms / 1000)}s`;
|
|
52
|
+
const minutes = Math.floor(ms / 60000);
|
|
53
|
+
const seconds = Math.round((ms % 60000) / 1000);
|
|
54
|
+
return `${minutes}m ${seconds}s`;
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Calculate and format duration between two date strings
|
|
58
|
+
*/
|
|
59
|
+
export function calculateDuration(startedAt, completedAt) {
|
|
60
|
+
if (!startedAt)
|
|
61
|
+
return "-";
|
|
62
|
+
const start = new Date(startedAt).getTime();
|
|
63
|
+
const end = completedAt ? new Date(completedAt).getTime() : Date.now();
|
|
64
|
+
const durationMs = end - start;
|
|
65
|
+
return formatDuration(durationMs);
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Format a deployment status with color and icon
|
|
69
|
+
* @param status - The deployment status
|
|
70
|
+
* @param style - 'default' for standard labels, 'tracking' for the per-deployment
|
|
71
|
+
* tracking view (slightly different verbiage / icons for the
|
|
72
|
+
* progress-oriented status table)
|
|
73
|
+
*/
|
|
74
|
+
export function formatStatus(status, style = "default") {
|
|
75
|
+
if (style === "tracking") {
|
|
76
|
+
switch (status) {
|
|
77
|
+
case "completed":
|
|
78
|
+
return chalk.green("✓ Completed");
|
|
79
|
+
case "failed":
|
|
80
|
+
return chalk.red("✗ Failed");
|
|
81
|
+
case "in_progress":
|
|
82
|
+
return chalk.yellow("● In Progress");
|
|
83
|
+
case "pending":
|
|
84
|
+
return chalk.gray("○ Queued");
|
|
85
|
+
case "scheduled":
|
|
86
|
+
return chalk.cyan("◷ Scheduled");
|
|
87
|
+
case "awaiting_approval":
|
|
88
|
+
return chalk.magenta("⊙ Awaiting Approval");
|
|
89
|
+
case "approved":
|
|
90
|
+
return chalk.green("✓ Approved");
|
|
91
|
+
case "rejected":
|
|
92
|
+
return chalk.red("✗ Rejected");
|
|
93
|
+
case "cancelled":
|
|
94
|
+
return chalk.gray("⊘ Cancelled");
|
|
95
|
+
case "rolling_back":
|
|
96
|
+
return chalk.yellow("↩ Rolling Back");
|
|
97
|
+
case "rolled_back":
|
|
98
|
+
return chalk.blue("↩ Rolled Back");
|
|
99
|
+
default:
|
|
100
|
+
return status;
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
// Default style
|
|
104
|
+
switch (status) {
|
|
105
|
+
case "completed":
|
|
106
|
+
return chalk.green("✓ Completed");
|
|
107
|
+
case "failed":
|
|
108
|
+
return chalk.red("✗ Failed");
|
|
109
|
+
case "in_progress":
|
|
110
|
+
return chalk.yellow("● In Progress");
|
|
111
|
+
case "pending":
|
|
112
|
+
return chalk.gray("○ Pending");
|
|
113
|
+
case "scheduled":
|
|
114
|
+
return chalk.cyan("◷ Scheduled");
|
|
115
|
+
case "awaiting_approval":
|
|
116
|
+
return chalk.magenta("⊙ Awaiting Approval");
|
|
117
|
+
case "approved":
|
|
118
|
+
return chalk.green("✓ Approved");
|
|
119
|
+
case "rejected":
|
|
120
|
+
return chalk.red("✗ Rejected");
|
|
121
|
+
case "cancelled":
|
|
122
|
+
return chalk.gray("⊘ Cancelled");
|
|
123
|
+
case "rolling_back":
|
|
124
|
+
return chalk.yellow("↩ Rolling Back");
|
|
125
|
+
case "rolled_back":
|
|
126
|
+
return chalk.blue("↩ Rolled Back");
|
|
127
|
+
default:
|
|
128
|
+
return status;
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
// ============================================================================
|
|
132
|
+
// String Truncation
|
|
133
|
+
// ============================================================================
|
|
134
|
+
/**
|
|
135
|
+
* Truncate a string to a maximum length, adding ellipsis if needed
|
|
136
|
+
*/
|
|
137
|
+
export function truncate(str, maxLength) {
|
|
138
|
+
if (str.length <= maxLength)
|
|
139
|
+
return str;
|
|
140
|
+
return str.slice(0, maxLength - 3) + "...";
|
|
141
|
+
}
|
|
142
|
+
/**
|
|
143
|
+
* Truncate an ID string (defaults to 15 chars for UUIDs)
|
|
144
|
+
*/
|
|
145
|
+
export function truncateId(id, maxLength = 15) {
|
|
146
|
+
if (id.length <= maxLength)
|
|
147
|
+
return id;
|
|
148
|
+
return id.slice(0, maxLength) + "...";
|
|
149
|
+
}
|
|
150
|
+
// ============================================================================
|
|
151
|
+
// Error Formatting
|
|
152
|
+
// ============================================================================
|
|
153
|
+
/**
|
|
154
|
+
* Safely format an error to a string
|
|
155
|
+
*/
|
|
156
|
+
export function formatError(error) {
|
|
157
|
+
if (error instanceof Error)
|
|
158
|
+
return error.message;
|
|
159
|
+
if (typeof error === "string")
|
|
160
|
+
return error;
|
|
161
|
+
return String(error);
|
|
162
|
+
}
|
|
163
|
+
//# sourceMappingURL=formatters.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"formatters.js","sourceRoot":"","sources":["../../src/lib/formatters.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B;;GAEG;AAEH,+EAA+E;AAC/E,kBAAkB;AAClB,+EAA+E;AAE/E;;GAEG;AACH,MAAM,UAAU,aAAa,CAAC,UAAkB;IAC9C,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACvB,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,UAAU,CAAC,CAAC,OAAO,EAAE,CAAC;IAC5C,MAAM,MAAM,GAAG,GAAG,GAAG,IAAI,CAAC;IAE1B,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;IAC1C,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,EAAE,CAAC,CAAC;IACzC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,EAAE,CAAC,CAAC;IACvC,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,EAAE,CAAC,CAAC;IAEpC,IAAI,IAAI,GAAG,CAAC;QAAE,OAAO,GAAG,IAAI,OAAO,CAAC;IACpC,IAAI,KAAK,GAAG,CAAC;QAAE,OAAO,GAAG,KAAK,OAAO,CAAC;IACtC,IAAI,OAAO,GAAG,CAAC;QAAE,OAAO,GAAG,OAAO,OAAO,CAAC;IAC1C,IAAI,OAAO,GAAG,CAAC;QAAE,OAAO,GAAG,OAAO,OAAO,CAAC;IAC1C,OAAO,UAAU,CAAC;AACpB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,cAAc,CAAC,EAAU;IACvC,IAAI,EAAE,GAAG,IAAI;QAAE,OAAO,GAAG,EAAE,IAAI,CAAC;IAChC,IAAI,EAAE,GAAG,KAAK;QAAE,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC;IACnD,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,GAAG,KAAK,CAAC,CAAC;IACvC,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,KAAK,CAAC,GAAG,IAAI,CAAC,CAAC;IAChD,OAAO,GAAG,OAAO,KAAK,OAAO,GAAG,CAAC;AACnC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,iBAAiB,CAAC,SAAkB,EAAE,WAAoB;IACxE,IAAI,CAAC,SAAS;QAAE,OAAO,GAAG,CAAC;IAE3B,MAAM,KAAK,GAAG,IAAI,IAAI,CAAC,SAAS,CAAC,CAAC,OAAO,EAAE,CAAC;IAC5C,MAAM,GAAG,GAAG,WAAW,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,WAAW,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC;IACvE,MAAM,UAAU,GAAG,GAAG,GAAG,KAAK,CAAC;IAE/B,OAAO,cAAc,CAAC,UAAU,CAAC,CAAC;AACpC,CAAC;AAsBD;;;;;;GAMG;AACH,MAAM,UAAU,YAAY,CAAC,MAAc,EAAE,QAAgC,SAAS;IACpF,IAAI,KAAK,KAAK,UAAU,EAAE,CAAC;QACzB,QAAQ,MAAM,EAAE,CAAC;YACf,KAAK,WAAW;gBACd,OAAO,KAAK,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;YACpC,KAAK,QAAQ;gBACX,OAAO,KAAK,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;YAC/B,KAAK,aAAa;gBAChB,OAAO,KAAK,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC;YACvC,KAAK,SAAS;gBACZ,OAAO,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;YAChC,KAAK,WAAW;gBACd,OAAO,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;YACnC,KAAK,mBAAmB;gBACtB,OAAO,KAAK,CAAC,OAAO,CAAC,qBAAqB,CAAC,CAAC;YAC9C,KAAK,UAAU;gBACb,OAAO,KAAK,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;YACnC,KAAK,UAAU;gBACb,OAAO,KAAK,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;YACjC,KAAK,WAAW;gBACd,OAAO,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;YACnC,KAAK,cAAc;gBACjB,OAAO,KAAK,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC;YACxC,KAAK,aAAa;gBAChB,OAAO,KAAK,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;YACrC;gBACE,OAAO,MAAM,CAAC;QAClB,CAAC;IACH,CAAC;IAED,gBAAgB;IAChB,QAAQ,MAAM,EAAE,CAAC;QACf,KAAK,WAAW;YACd,OAAO,KAAK,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;QACpC,KAAK,QAAQ;YACX,OAAO,KAAK,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QAC/B,KAAK,aAAa;YAChB,OAAO,KAAK,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC;QACvC,KAAK,SAAS;YACZ,OAAO,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QACjC,KAAK,WAAW;YACd,OAAO,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QACnC,KAAK,mBAAmB;YACtB,OAAO,KAAK,CAAC,OAAO,CAAC,qBAAqB,CAAC,CAAC;QAC9C,KAAK,UAAU;YACb,OAAO,KAAK,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;QACnC,KAAK,UAAU;YACb,OAAO,KAAK,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;QACjC,KAAK,WAAW;YACd,OAAO,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QACnC,KAAK,cAAc;YACjB,OAAO,KAAK,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC;QACxC,KAAK,aAAa;YAChB,OAAO,KAAK,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;QACrC;YACE,OAAO,MAAM,CAAC;IAClB,CAAC;AACH,CAAC;AAED,+EAA+E;AAC/E,oBAAoB;AACpB,+EAA+E;AAE/E;;GAEG;AACH,MAAM,UAAU,QAAQ,CAAC,GAAW,EAAE,SAAiB;IACrD,IAAI,GAAG,CAAC,MAAM,IAAI,SAAS;QAAE,OAAO,GAAG,CAAC;IACxC,OAAO,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,SAAS,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC;AAC7C,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,UAAU,CAAC,EAAU,EAAE,YAAoB,EAAE;IAC3D,IAAI,EAAE,CAAC,MAAM,IAAI,SAAS;QAAE,OAAO,EAAE,CAAC;IACtC,OAAO,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,SAAS,CAAC,GAAG,KAAK,CAAC;AACxC,CAAC;AAED,+EAA+E;AAC/E,mBAAmB;AACnB,+EAA+E;AAE/E;;GAEG;AACH,MAAM,UAAU,WAAW,CAAC,KAAc;IACxC,IAAI,KAAK,YAAY,KAAK;QAAE,OAAO,KAAK,CAAC,OAAO,CAAC;IACjD,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAC;IAC5C,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC;AACvB,CAAC"}
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright 2024 Pax8, Inc.
|
|
3
|
+
*
|
|
4
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
+
* you may not use this file except in compliance with the License.
|
|
6
|
+
* You may obtain a copy of the License at
|
|
7
|
+
*
|
|
8
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
+
*
|
|
10
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
11
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
+
* See the License for the specific language governing permissions and
|
|
14
|
+
* limitations under the License.
|
|
15
|
+
*/
|
|
16
|
+
export interface AppRegistration {
|
|
17
|
+
id: string;
|
|
18
|
+
appId: string;
|
|
19
|
+
displayName: string;
|
|
20
|
+
signInAudience: string;
|
|
21
|
+
}
|
|
22
|
+
export interface ClientSecretResult {
|
|
23
|
+
secretId: string;
|
|
24
|
+
secretText: string;
|
|
25
|
+
displayName: string;
|
|
26
|
+
endDateTime: string;
|
|
27
|
+
}
|
|
28
|
+
export interface GraphClientConfig {
|
|
29
|
+
accessToken: string;
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Microsoft Graph API client for managing Azure AD app registrations
|
|
33
|
+
*/
|
|
34
|
+
export declare class GraphClient {
|
|
35
|
+
private accessToken;
|
|
36
|
+
private readonly baseUrl;
|
|
37
|
+
constructor(config: GraphClientConfig);
|
|
38
|
+
/**
|
|
39
|
+
* Create a new app registration in Azure AD
|
|
40
|
+
*/
|
|
41
|
+
createAppRegistration(displayName: string): Promise<AppRegistration>;
|
|
42
|
+
/**
|
|
43
|
+
* Find existing app registration by display name
|
|
44
|
+
*/
|
|
45
|
+
findExistingApp(displayName: string): Promise<AppRegistration | null>;
|
|
46
|
+
/**
|
|
47
|
+
* List all app registrations the user owns or has access to
|
|
48
|
+
*/
|
|
49
|
+
listAppRegistrations(): Promise<AppRegistration[]>;
|
|
50
|
+
/**
|
|
51
|
+
* Add Dynamics CRM API permission to an app
|
|
52
|
+
*/
|
|
53
|
+
addDynamicsPermission(appObjectId: string): Promise<void>;
|
|
54
|
+
/**
|
|
55
|
+
* Grant admin consent for app permissions
|
|
56
|
+
* Note: This requires admin privileges and may not work for all users
|
|
57
|
+
*/
|
|
58
|
+
grantAdminConsent(appId: string): Promise<void>;
|
|
59
|
+
/**
|
|
60
|
+
* Create a new client secret for the app
|
|
61
|
+
*/
|
|
62
|
+
createClientSecret(appObjectId: string, description: string, validityMonths?: number): Promise<ClientSecretResult>;
|
|
63
|
+
/**
|
|
64
|
+
* Get service principal for an app (needed for some operations)
|
|
65
|
+
*/
|
|
66
|
+
getServicePrincipal(appId: string): Promise<{
|
|
67
|
+
id: string;
|
|
68
|
+
} | null>;
|
|
69
|
+
/**
|
|
70
|
+
* Create service principal for an app if it doesn't exist
|
|
71
|
+
*/
|
|
72
|
+
ensureServicePrincipal(appId: string): Promise<string>;
|
|
73
|
+
}
|
|
74
|
+
//# sourceMappingURL=graph-client.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"graph-client.d.ts","sourceRoot":"","sources":["../../src/lib/graph-client.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,kBAAkB;IACjC,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,iBAAiB;IAChC,WAAW,EAAE,MAAM,CAAC;CACrB;AAED;;GAEG;AACH,qBAAa,WAAW;IACtB,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAsC;gBAElD,MAAM,EAAE,iBAAiB;IAIrC;;OAEG;IACG,qBAAqB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC;IAmC1E;;OAEG;IACG,eAAe,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,GAAG,IAAI,CAAC;IAmB3E;;OAEG;IACG,oBAAoB,IAAI,OAAO,CAAC,eAAe,EAAE,CAAC;IAmBxD;;OAEG;IACG,qBAAqB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAqE/D;;;OAGG;IACG,iBAAiB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAUrD;;OAEG;IACG,kBAAkB,CACtB,WAAW,EAAE,MAAM,EACnB,WAAW,EAAE,MAAM,EACnB,cAAc,GAAE,MAAW,GAC1B,OAAO,CAAC,kBAAkB,CAAC;IAsC9B;;OAEG;IACG,mBAAmB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,EAAE,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;IAexE;;OAEG;IACG,sBAAsB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;CAyB7D"}
|