@laldigital/novaserve 2.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 +384 -0
- package/bin/nova.js +2 -0
- package/dist/commands/ai.d.ts +9 -0
- package/dist/commands/ai.d.ts.map +1 -0
- package/dist/commands/ai.js +152 -0
- package/dist/commands/ai.js.map +1 -0
- package/dist/commands/build.d.ts +6 -0
- package/dist/commands/build.d.ts.map +1 -0
- package/dist/commands/build.js +62 -0
- package/dist/commands/build.js.map +1 -0
- package/dist/commands/cost.d.ts +8 -0
- package/dist/commands/cost.d.ts.map +1 -0
- package/dist/commands/cost.js +50 -0
- package/dist/commands/cost.js.map +1 -0
- package/dist/commands/dashboard.d.ts +3 -0
- package/dist/commands/dashboard.d.ts.map +1 -0
- package/dist/commands/dashboard.js +25 -0
- package/dist/commands/dashboard.js.map +1 -0
- package/dist/commands/deploy.d.ts +8 -0
- package/dist/commands/deploy.d.ts.map +1 -0
- package/dist/commands/deploy.js +128 -0
- package/dist/commands/deploy.js.map +1 -0
- package/dist/commands/destroy.d.ts +6 -0
- package/dist/commands/destroy.d.ts.map +1 -0
- package/dist/commands/destroy.js +75 -0
- package/dist/commands/destroy.js.map +1 -0
- package/dist/commands/dev.d.ts +8 -0
- package/dist/commands/dev.d.ts.map +1 -0
- package/dist/commands/dev.js +60 -0
- package/dist/commands/dev.js.map +1 -0
- package/dist/commands/diff.d.ts +8 -0
- package/dist/commands/diff.d.ts.map +1 -0
- package/dist/commands/diff.js +60 -0
- package/dist/commands/diff.js.map +1 -0
- package/dist/commands/doctor.d.ts +9 -0
- package/dist/commands/doctor.d.ts.map +1 -0
- package/dist/commands/doctor.js +61 -0
- package/dist/commands/doctor.js.map +1 -0
- package/dist/commands/drift.d.ts +8 -0
- package/dist/commands/drift.d.ts.map +1 -0
- package/dist/commands/drift.js +81 -0
- package/dist/commands/drift.js.map +1 -0
- package/dist/commands/events.d.ts +8 -0
- package/dist/commands/events.d.ts.map +1 -0
- package/dist/commands/events.js +102 -0
- package/dist/commands/events.js.map +1 -0
- package/dist/commands/graph.d.ts +8 -0
- package/dist/commands/graph.d.ts.map +1 -0
- package/dist/commands/graph.js +55 -0
- package/dist/commands/graph.js.map +1 -0
- package/dist/commands/impact.d.ts +9 -0
- package/dist/commands/impact.d.ts.map +1 -0
- package/dist/commands/impact.js +65 -0
- package/dist/commands/impact.js.map +1 -0
- package/dist/commands/init.d.ts +8 -0
- package/dist/commands/init.d.ts.map +1 -0
- package/dist/commands/init.js +339 -0
- package/dist/commands/init.js.map +1 -0
- package/dist/commands/invoke.d.ts +9 -0
- package/dist/commands/invoke.d.ts.map +1 -0
- package/dist/commands/invoke.js +64 -0
- package/dist/commands/invoke.js.map +1 -0
- package/dist/commands/ir.d.ts +8 -0
- package/dist/commands/ir.d.ts.map +1 -0
- package/dist/commands/ir.js +85 -0
- package/dist/commands/ir.js.map +1 -0
- package/dist/commands/logs.d.ts +3 -0
- package/dist/commands/logs.d.ts.map +1 -0
- package/dist/commands/logs.js +50 -0
- package/dist/commands/logs.js.map +1 -0
- package/dist/commands/plan.d.ts +9 -0
- package/dist/commands/plan.d.ts.map +1 -0
- package/dist/commands/plan.js +81 -0
- package/dist/commands/plan.js.map +1 -0
- package/dist/commands/plugins.d.ts +9 -0
- package/dist/commands/plugins.d.ts.map +1 -0
- package/dist/commands/plugins.js +49 -0
- package/dist/commands/plugins.js.map +1 -0
- package/dist/commands/promote.d.ts +9 -0
- package/dist/commands/promote.d.ts.map +1 -0
- package/dist/commands/promote.js +44 -0
- package/dist/commands/promote.js.map +1 -0
- package/dist/commands/rollback.d.ts +9 -0
- package/dist/commands/rollback.d.ts.map +1 -0
- package/dist/commands/rollback.js +129 -0
- package/dist/commands/rollback.js.map +1 -0
- package/dist/commands/security.d.ts +8 -0
- package/dist/commands/security.d.ts.map +1 -0
- package/dist/commands/security.js +84 -0
- package/dist/commands/security.js.map +1 -0
- package/dist/commands/state.d.ts +8 -0
- package/dist/commands/state.d.ts.map +1 -0
- package/dist/commands/state.js +135 -0
- package/dist/commands/state.js.map +1 -0
- package/dist/commands/trace.d.ts +8 -0
- package/dist/commands/trace.d.ts.map +1 -0
- package/dist/commands/trace.js +66 -0
- package/dist/commands/trace.js.map +1 -0
- package/dist/index.d.ts +35 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +102 -0
- package/dist/index.js.map +1 -0
- package/dist/runtime.d.ts +5 -0
- package/dist/runtime.d.ts.map +1 -0
- package/dist/runtime.js +5 -0
- package/dist/runtime.js.map +1 -0
- package/dist/ui/banner.d.ts +14 -0
- package/dist/ui/banner.d.ts.map +1 -0
- package/dist/ui/banner.js +37 -0
- package/dist/ui/banner.js.map +1 -0
- package/dist/ui/spinner.d.ts +15 -0
- package/dist/ui/spinner.d.ts.map +1 -0
- package/dist/ui/spinner.js +39 -0
- package/dist/ui/spinner.js.map +1 -0
- package/dist/utils/config-loader.d.ts +12 -0
- package/dist/utils/config-loader.d.ts.map +1 -0
- package/dist/utils/config-loader.js +29 -0
- package/dist/utils/config-loader.js.map +1 -0
- package/dist/utils/logger.d.ts +24 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +52 -0
- package/dist/utils/logger.js.map +1 -0
- package/package.json +86 -0
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `nova state`
|
|
3
|
+
*
|
|
4
|
+
* Manages Nova deployment state graph, resource mappings, locks, and history.
|
|
5
|
+
*/
|
|
6
|
+
import { Command } from "commander";
|
|
7
|
+
import chalk from "chalk";
|
|
8
|
+
import { StateManager } from "novaserve-core";
|
|
9
|
+
import { loadConfig } from "../utils/config-loader.js";
|
|
10
|
+
export function stateCommand() {
|
|
11
|
+
const cmd = new Command("state").description("Inspect and manage Nova deployment state");
|
|
12
|
+
cmd
|
|
13
|
+
.command("list")
|
|
14
|
+
.description("List all active deployed resources in state")
|
|
15
|
+
.option("-e, --env <environment>", "Target environment", "production")
|
|
16
|
+
.action(async (options) => {
|
|
17
|
+
console.log(chalk.bold.yellow("\n◆ NovaServe Active Deployment State\n"));
|
|
18
|
+
try {
|
|
19
|
+
const app = await loadConfig();
|
|
20
|
+
const stateMgr = new StateManager(process.cwd());
|
|
21
|
+
const resources = stateMgr.getResources(app.name || "nova-app", options.env);
|
|
22
|
+
if (resources.length === 0) {
|
|
23
|
+
console.log(chalk.gray(`State is empty for app "${app.name}" (${options.env}). No resources deployed yet.`));
|
|
24
|
+
return;
|
|
25
|
+
}
|
|
26
|
+
console.log(`Application: ${chalk.cyan(app.name)}`);
|
|
27
|
+
console.log(`Environment: ${chalk.bold.magenta(options.env)}\n`);
|
|
28
|
+
for (const res of resources) {
|
|
29
|
+
console.log(`• ${chalk.cyan(res.id)} (${chalk.bold(res.type)}) - Status: ${chalk.green(res.status)}`);
|
|
30
|
+
}
|
|
31
|
+
console.log("");
|
|
32
|
+
}
|
|
33
|
+
catch (err) {
|
|
34
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
35
|
+
console.log(chalk.red(`State list failed: ${msg}`));
|
|
36
|
+
}
|
|
37
|
+
});
|
|
38
|
+
cmd
|
|
39
|
+
.command("inspect <id>")
|
|
40
|
+
.description("Inspect state details for a specific resource")
|
|
41
|
+
.option("-e, --env <environment>", "Target environment", "production")
|
|
42
|
+
.action(async (id, options) => {
|
|
43
|
+
console.log(chalk.bold.yellow(`\n◆ NovaServe State Inspect: ${id}\n`));
|
|
44
|
+
try {
|
|
45
|
+
const app = await loadConfig();
|
|
46
|
+
const stateMgr = new StateManager(process.cwd());
|
|
47
|
+
const resources = stateMgr.getResources(app.name || "nova-app", options.env);
|
|
48
|
+
const res = resources.find((r) => r.id === id || r.name === id);
|
|
49
|
+
if (!res) {
|
|
50
|
+
console.log(chalk.red(`Resource "${id}" not found in active state.`));
|
|
51
|
+
return;
|
|
52
|
+
}
|
|
53
|
+
console.log(JSON.stringify(res, null, 2));
|
|
54
|
+
}
|
|
55
|
+
catch (err) {
|
|
56
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
57
|
+
console.log(chalk.red(`State inspect failed: ${msg}`));
|
|
58
|
+
}
|
|
59
|
+
});
|
|
60
|
+
cmd
|
|
61
|
+
.command("verify")
|
|
62
|
+
.description("Verify state file integrity and lock status")
|
|
63
|
+
.option("-e, --env <environment>", "Target environment", "production")
|
|
64
|
+
.action(async (options) => {
|
|
65
|
+
console.log(chalk.bold.yellow("\n◆ NovaServe State Integrity Check\n"));
|
|
66
|
+
try {
|
|
67
|
+
const app = await loadConfig();
|
|
68
|
+
const stateMgr = new StateManager(process.cwd());
|
|
69
|
+
const verification = stateMgr.verifyState(app.name || "nova-app", options.env);
|
|
70
|
+
if (verification.valid) {
|
|
71
|
+
console.log(chalk.bold.green("✓ State file integrity verified. Zero corruption or schema errors detected.\n"));
|
|
72
|
+
}
|
|
73
|
+
else {
|
|
74
|
+
console.log(chalk.bold.red("✗ State Integrity Issues:"));
|
|
75
|
+
for (const issue of verification.issues) {
|
|
76
|
+
console.log(chalk.red(` • ${issue}`));
|
|
77
|
+
}
|
|
78
|
+
console.log("");
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
catch (err) {
|
|
82
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
83
|
+
console.log(chalk.red(`State verification failed: ${msg}`));
|
|
84
|
+
}
|
|
85
|
+
});
|
|
86
|
+
cmd
|
|
87
|
+
.command("export")
|
|
88
|
+
.description("Export raw deployment state graph as JSON")
|
|
89
|
+
.option("-e, --env <environment>", "Target environment", "production")
|
|
90
|
+
.action(async (options) => {
|
|
91
|
+
try {
|
|
92
|
+
const app = await loadConfig();
|
|
93
|
+
const stateMgr = new StateManager(process.cwd());
|
|
94
|
+
const history = stateMgr.getHistory(app.name || "nova-app", options.env);
|
|
95
|
+
console.log(JSON.stringify(history, null, 2));
|
|
96
|
+
}
|
|
97
|
+
catch (err) {
|
|
98
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
99
|
+
console.log(chalk.red(`State export failed: ${msg}`));
|
|
100
|
+
}
|
|
101
|
+
});
|
|
102
|
+
cmd
|
|
103
|
+
.command("reconcile")
|
|
104
|
+
.description("Query live cloud infrastructure to reconcile UNKNOWN or uncertain resource states")
|
|
105
|
+
.option("-e, --env <environment>", "Target environment", "production")
|
|
106
|
+
.action(async (options) => {
|
|
107
|
+
console.log(chalk.bold.yellow("\n◆ NovaServe State Reconciliation\n"));
|
|
108
|
+
try {
|
|
109
|
+
const app = await loadConfig();
|
|
110
|
+
const stateMgr = new StateManager(process.cwd());
|
|
111
|
+
const resources = stateMgr.getResources(app.name || "nova-app", options.env);
|
|
112
|
+
if (resources.length === 0) {
|
|
113
|
+
console.log(chalk.gray(`State is empty. Nothing to reconcile.`));
|
|
114
|
+
return;
|
|
115
|
+
}
|
|
116
|
+
console.log(`Inspecting live cloud state for ${resources.length} resource(s)...`);
|
|
117
|
+
const { AWSLiveStateInspector } = await import("novaserve-provider-aws");
|
|
118
|
+
const inspector = new AWSLiveStateInspector(app.config.region || "us-east-1", app.name || "nova-app");
|
|
119
|
+
const observed = await inspector.inspectResources(resources.map((r) => ({ id: r.id, type: r.type, name: r.name, config: r.config })));
|
|
120
|
+
const result = stateMgr.reconcileState(app.name || "nova-app", options.env, observed);
|
|
121
|
+
if (result.reconciledCount === 0) {
|
|
122
|
+
console.log(chalk.bold.green(`✓ All ${resources.length} resource states match live infrastructure.\n`));
|
|
123
|
+
}
|
|
124
|
+
else {
|
|
125
|
+
console.log(chalk.bold.green(`✓ Reconciled ${result.reconciledCount} resource(s): ${result.updatedResources.join(", ")}\n`));
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
catch (err) {
|
|
129
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
130
|
+
console.log(chalk.red(`State reconciliation failed: ${msg}`));
|
|
131
|
+
}
|
|
132
|
+
});
|
|
133
|
+
return cmd;
|
|
134
|
+
}
|
|
135
|
+
//# sourceMappingURL=state.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"state.js","sourceRoot":"","sources":["../../src/commands/state.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"trace.d.ts","sourceRoot":"","sources":["../../src/commands/trace.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAIpC,wBAAgB,YAAY,IAAI,OAAO,CA4DtC"}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `nova trace`
|
|
3
|
+
*
|
|
4
|
+
* OpenTelemetry distributed trace waterfall viewer.
|
|
5
|
+
*/
|
|
6
|
+
import { Command } from "commander";
|
|
7
|
+
import chalk from "chalk";
|
|
8
|
+
import { NovaTelemetry } from "novaserve-core";
|
|
9
|
+
export function traceCommand() {
|
|
10
|
+
return new Command("trace")
|
|
11
|
+
.description("Inspect OpenTelemetry distributed traces and span waterfalls")
|
|
12
|
+
.argument("[traceId]", "Specific trace ID to inspect")
|
|
13
|
+
.action((traceId) => {
|
|
14
|
+
console.log(chalk.bold.yellow("\n◆ NovaServe OpenTelemetry Trace Viewer\n"));
|
|
15
|
+
if (!traceId) {
|
|
16
|
+
// List recent traces
|
|
17
|
+
const traces = NovaTelemetry.listTraces(5);
|
|
18
|
+
if (traces.length === 0) {
|
|
19
|
+
// Seed demonstration trace
|
|
20
|
+
const t = NovaTelemetry.startTrace("my-nova-app", "production");
|
|
21
|
+
NovaTelemetry.recordSpan(t.traceId, {
|
|
22
|
+
name: "GET /users",
|
|
23
|
+
resourceId: "api-api",
|
|
24
|
+
kind: "SERVER",
|
|
25
|
+
status: "OK",
|
|
26
|
+
durationMs: 142,
|
|
27
|
+
attributes: { httpMethod: "GET", httpStatus: 200 },
|
|
28
|
+
});
|
|
29
|
+
NovaTelemetry.recordSpan(t.traceId, {
|
|
30
|
+
name: "users.list",
|
|
31
|
+
resourceId: "function-usersList",
|
|
32
|
+
kind: "INTERNAL",
|
|
33
|
+
status: "OK",
|
|
34
|
+
durationMs: 85,
|
|
35
|
+
attributes: { memoryUsedMb: 128 },
|
|
36
|
+
});
|
|
37
|
+
NovaTelemetry.recordSpan(t.traceId, {
|
|
38
|
+
name: "postgres.query",
|
|
39
|
+
resourceId: "database-main",
|
|
40
|
+
kind: "CLIENT",
|
|
41
|
+
status: "OK",
|
|
42
|
+
durationMs: 42,
|
|
43
|
+
attributes: { query: "SELECT * FROM users" },
|
|
44
|
+
});
|
|
45
|
+
traceId = t.traceId;
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
const trace = traceId ? NovaTelemetry.getTrace(traceId) : NovaTelemetry.listTraces(1)[0];
|
|
49
|
+
if (!trace) {
|
|
50
|
+
console.log(chalk.red(`Trace ID "${traceId}" not found.`));
|
|
51
|
+
return;
|
|
52
|
+
}
|
|
53
|
+
console.log(`Trace ID: ${chalk.bold.cyan(trace.traceId)}`);
|
|
54
|
+
console.log(`Application: ${chalk.yellow(trace.appName)} (${trace.environment})`);
|
|
55
|
+
console.log(`Duration: ${chalk.bold.green(`${trace.totalDurationMs}ms`)}`);
|
|
56
|
+
console.log(`Status: ${trace.hasError ? chalk.red("ERROR") : chalk.green("OK")}\n`);
|
|
57
|
+
console.log(chalk.bold("Span Waterfall:"));
|
|
58
|
+
for (const span of trace.spans) {
|
|
59
|
+
console.log(`├── [${chalk.bold.cyan(span.kind)}] ${chalk.bold(span.name)} (${chalk.yellow(span.resourceId)})`);
|
|
60
|
+
console.log(`│ ├── Duration: ${span.durationMs}ms | Status: ${span.status === "OK" ? chalk.green("OK") : chalk.red("ERROR")}`);
|
|
61
|
+
console.log(`│ └── Attributes: ${chalk.gray(JSON.stringify(span.attributes))}`);
|
|
62
|
+
}
|
|
63
|
+
console.log("");
|
|
64
|
+
});
|
|
65
|
+
}
|
|
66
|
+
//# sourceMappingURL=trace.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"trace.js","sourceRoot":"","sources":["../../src/commands/trace.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAE/C,MAAM,UAAU,YAAY;IAC1B,OAAO,IAAI,OAAO,CAAC,OAAO,CAAC;SACxB,WAAW,CAAC,8DAA8D,CAAC;SAC3E,QAAQ,CAAC,WAAW,EAAE,8BAA8B,CAAC;SACrD,MAAM,CAAC,CAAC,OAAgB,EAAE,EAAE;QAC3B,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,4CAA4C,CAAC,CAAC,CAAC;QAE7E,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,qBAAqB;YACrB,MAAM,MAAM,GAAG,aAAa,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;YAC3C,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACxB,2BAA2B;gBAC3B,MAAM,CAAC,GAAG,aAAa,CAAC,UAAU,CAAC,aAAa,EAAE,YAAY,CAAC,CAAC;gBAChE,aAAa,CAAC,UAAU,CAAC,CAAC,CAAC,OAAO,EAAE;oBAClC,IAAI,EAAE,YAAY;oBAClB,UAAU,EAAE,SAAS;oBACrB,IAAI,EAAE,QAAQ;oBACd,MAAM,EAAE,IAAI;oBACZ,UAAU,EAAE,GAAG;oBACf,UAAU,EAAE,EAAE,UAAU,EAAE,KAAK,EAAE,UAAU,EAAE,GAAG,EAAE;iBACnD,CAAC,CAAC;gBACH,aAAa,CAAC,UAAU,CAAC,CAAC,CAAC,OAAO,EAAE;oBAClC,IAAI,EAAE,YAAY;oBAClB,UAAU,EAAE,oBAAoB;oBAChC,IAAI,EAAE,UAAU;oBAChB,MAAM,EAAE,IAAI;oBACZ,UAAU,EAAE,EAAE;oBACd,UAAU,EAAE,EAAE,YAAY,EAAE,GAAG,EAAE;iBAClC,CAAC,CAAC;gBACH,aAAa,CAAC,UAAU,CAAC,CAAC,CAAC,OAAO,EAAE;oBAClC,IAAI,EAAE,gBAAgB;oBACtB,UAAU,EAAE,eAAe;oBAC3B,IAAI,EAAE,QAAQ;oBACd,MAAM,EAAE,IAAI;oBACZ,UAAU,EAAE,EAAE;oBACd,UAAU,EAAE,EAAE,KAAK,EAAE,qBAAqB,EAAE;iBAC7C,CAAC,CAAC;gBACH,OAAO,GAAG,CAAC,CAAC,OAAO,CAAC;YACtB,CAAC;QACH,CAAC;QAED,MAAM,KAAK,GAAG,OAAO,CAAC,CAAC,CAAC,aAAa,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACzF,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,aAAa,OAAO,cAAc,CAAC,CAAC,CAAC;YAC3D,OAAO;QACT,CAAC;QAED,OAAO,CAAC,GAAG,CAAC,mBAAmB,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QACjE,OAAO,CAAC,GAAG,CAAC,mBAAmB,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,KAAK,CAAC,WAAW,GAAG,CAAC,CAAC;QACrF,OAAO,CAAC,GAAG,CAAC,mBAAmB,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC,eAAe,IAAI,CAAC,EAAE,CAAC,CAAC;QACjF,OAAO,CAAC,GAAG,CAAC,mBAAmB,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAE5F,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC,CAAC;QAC3C,KAAK,MAAM,IAAI,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC;YAC/B,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;YAC/G,OAAO,CAAC,GAAG,CAAC,qBAAqB,IAAI,CAAC,UAAU,gBAAgB,IAAI,CAAC,MAAM,KAAK,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;YACjI,OAAO,CAAC,GAAG,CAAC,uBAAuB,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,EAAE,CAAC,CAAC;QACpF,CAAC;QACD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAClB,CAAC,CAAC,CAAC;AACP,CAAC"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* NovaServe CLI
|
|
4
|
+
*
|
|
5
|
+
* The next-generation, cloud-agnostic application infrastructure framework CLI.
|
|
6
|
+
*
|
|
7
|
+
* Core Commands:
|
|
8
|
+
* nova init — Create a new project
|
|
9
|
+
* nova dev — Start local development server (emulating IR graph)
|
|
10
|
+
* nova build — Compile application into Nova IR and bundle code
|
|
11
|
+
* nova plan — Generate diff-driven deployment execution plan & cost estimate
|
|
12
|
+
* nova ir — Inspect, validate, and hash Nova IR Graph (1.0.0)
|
|
13
|
+
* nova diff — Display granular resource attribute changes
|
|
14
|
+
* nova graph — Visualize dependency DAG & least-privilege IAM graph
|
|
15
|
+
* nova impact — Perform blast-radius impact analysis for a resource ID
|
|
16
|
+
* nova state — Inspect deployment state graph and lock status
|
|
17
|
+
* nova drift — Detect live infrastructure configuration drift & auto-fix
|
|
18
|
+
* nova deploy — Execute parallel incremental cloud deployment (supports --preview)
|
|
19
|
+
* nova rollback — Rollback application to a previous deployment state
|
|
20
|
+
* nova deployment — Inspect deployment history and resume paused journals
|
|
21
|
+
* nova promote — Promote application IR graph across environments (staging → production)
|
|
22
|
+
* nova destroy — Safely tear down infrastructure
|
|
23
|
+
* nova logs — View live correlated resource streams
|
|
24
|
+
* nova trace — Inspect OpenTelemetry distributed trace waterfalls
|
|
25
|
+
* nova events — Inspect event payloads and trigger local event replays
|
|
26
|
+
* nova doctor — Run signature diagnostics & deterministic auto-fixes
|
|
27
|
+
* nova security — Audit infrastructure for wildcard IAM, public storage, & flaws
|
|
28
|
+
* nova cost — Infrastructure cost intelligence & optimization advice
|
|
29
|
+
* nova ai — Intelligent AI infrastructure assistant
|
|
30
|
+
* nova add — Add a plugin package from the NovaServe capability marketplace
|
|
31
|
+
* nova plugins — List installed capability-gated plugins
|
|
32
|
+
* nova dashboard — Launch local visual management console
|
|
33
|
+
*/
|
|
34
|
+
export { defineApp, api, fn, function_, storage, database, queue, cron, cache, secret, env, link, } from "novaserve-sdk";
|
|
35
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AA0EH,OAAO,EACL,SAAS,EACT,GAAG,EACH,EAAE,EACF,SAAS,EACT,OAAO,EACP,QAAQ,EACR,KAAK,EACL,IAAI,EACJ,KAAK,EACL,MAAM,EACN,GAAG,EACH,IAAI,GACL,MAAM,eAAe,CAAC"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* NovaServe CLI
|
|
4
|
+
*
|
|
5
|
+
* The next-generation, cloud-agnostic application infrastructure framework CLI.
|
|
6
|
+
*
|
|
7
|
+
* Core Commands:
|
|
8
|
+
* nova init — Create a new project
|
|
9
|
+
* nova dev — Start local development server (emulating IR graph)
|
|
10
|
+
* nova build — Compile application into Nova IR and bundle code
|
|
11
|
+
* nova plan — Generate diff-driven deployment execution plan & cost estimate
|
|
12
|
+
* nova ir — Inspect, validate, and hash Nova IR Graph (1.0.0)
|
|
13
|
+
* nova diff — Display granular resource attribute changes
|
|
14
|
+
* nova graph — Visualize dependency DAG & least-privilege IAM graph
|
|
15
|
+
* nova impact — Perform blast-radius impact analysis for a resource ID
|
|
16
|
+
* nova state — Inspect deployment state graph and lock status
|
|
17
|
+
* nova drift — Detect live infrastructure configuration drift & auto-fix
|
|
18
|
+
* nova deploy — Execute parallel incremental cloud deployment (supports --preview)
|
|
19
|
+
* nova rollback — Rollback application to a previous deployment state
|
|
20
|
+
* nova deployment — Inspect deployment history and resume paused journals
|
|
21
|
+
* nova promote — Promote application IR graph across environments (staging → production)
|
|
22
|
+
* nova destroy — Safely tear down infrastructure
|
|
23
|
+
* nova logs — View live correlated resource streams
|
|
24
|
+
* nova trace — Inspect OpenTelemetry distributed trace waterfalls
|
|
25
|
+
* nova events — Inspect event payloads and trigger local event replays
|
|
26
|
+
* nova doctor — Run signature diagnostics & deterministic auto-fixes
|
|
27
|
+
* nova security — Audit infrastructure for wildcard IAM, public storage, & flaws
|
|
28
|
+
* nova cost — Infrastructure cost intelligence & optimization advice
|
|
29
|
+
* nova ai — Intelligent AI infrastructure assistant
|
|
30
|
+
* nova add — Add a plugin package from the NovaServe capability marketplace
|
|
31
|
+
* nova plugins — List installed capability-gated plugins
|
|
32
|
+
* nova dashboard — Launch local visual management console
|
|
33
|
+
*/
|
|
34
|
+
import { Command } from "commander";
|
|
35
|
+
import { printBanner } from "./ui/banner.js";
|
|
36
|
+
import { initCommand } from "./commands/init.js";
|
|
37
|
+
import { devCommand } from "./commands/dev.js";
|
|
38
|
+
import { buildCommand } from "./commands/build.js";
|
|
39
|
+
import { planCommand } from "./commands/plan.js";
|
|
40
|
+
import { irCommand } from "./commands/ir.js";
|
|
41
|
+
import { diffCommand } from "./commands/diff.js";
|
|
42
|
+
import { graphCommand } from "./commands/graph.js";
|
|
43
|
+
import { impactCommand } from "./commands/impact.js";
|
|
44
|
+
import { stateCommand } from "./commands/state.js";
|
|
45
|
+
import { driftCommand } from "./commands/drift.js";
|
|
46
|
+
import { deployCommand } from "./commands/deploy.js";
|
|
47
|
+
import { rollbackCommand, deploymentCommand } from "./commands/rollback.js";
|
|
48
|
+
import { promoteCommand } from "./commands/promote.js";
|
|
49
|
+
import { destroyCommand } from "./commands/destroy.js";
|
|
50
|
+
import { logsCommand } from "./commands/logs.js";
|
|
51
|
+
import { invokeCommand } from "./commands/invoke.js";
|
|
52
|
+
import { traceCommand } from "./commands/trace.js";
|
|
53
|
+
import { eventsCommand } from "./commands/events.js";
|
|
54
|
+
import { doctorCommand } from "./commands/doctor.js";
|
|
55
|
+
import { securityCommand } from "./commands/security.js";
|
|
56
|
+
import { costCommand } from "./commands/cost.js";
|
|
57
|
+
import { aiCommand } from "./commands/ai.js";
|
|
58
|
+
import { addCommand, pluginsCommand } from "./commands/plugins.js";
|
|
59
|
+
import { dashboardCommand } from "./commands/dashboard.js";
|
|
60
|
+
import { createRequire } from "node:module";
|
|
61
|
+
const require = createRequire(import.meta.url);
|
|
62
|
+
const { version } = require("../package.json");
|
|
63
|
+
const program = new Command();
|
|
64
|
+
program
|
|
65
|
+
.name("nova")
|
|
66
|
+
.description("NovaServe — The next-generation, cloud-agnostic serverless development framework.")
|
|
67
|
+
.version(version)
|
|
68
|
+
.hook("preAction", () => {
|
|
69
|
+
printBanner();
|
|
70
|
+
});
|
|
71
|
+
// Register all core commands
|
|
72
|
+
program.addCommand(initCommand());
|
|
73
|
+
program.addCommand(devCommand());
|
|
74
|
+
program.addCommand(buildCommand());
|
|
75
|
+
program.addCommand(planCommand());
|
|
76
|
+
program.addCommand(irCommand());
|
|
77
|
+
program.addCommand(diffCommand());
|
|
78
|
+
program.addCommand(graphCommand());
|
|
79
|
+
program.addCommand(impactCommand());
|
|
80
|
+
program.addCommand(stateCommand());
|
|
81
|
+
program.addCommand(driftCommand());
|
|
82
|
+
program.addCommand(deployCommand());
|
|
83
|
+
program.addCommand(rollbackCommand());
|
|
84
|
+
program.addCommand(deploymentCommand());
|
|
85
|
+
program.addCommand(promoteCommand());
|
|
86
|
+
program.addCommand(destroyCommand());
|
|
87
|
+
program.addCommand(logsCommand());
|
|
88
|
+
program.addCommand(invokeCommand());
|
|
89
|
+
program.addCommand(traceCommand());
|
|
90
|
+
program.addCommand(eventsCommand());
|
|
91
|
+
program.addCommand(doctorCommand());
|
|
92
|
+
program.addCommand(securityCommand());
|
|
93
|
+
program.addCommand(costCommand());
|
|
94
|
+
program.addCommand(aiCommand());
|
|
95
|
+
program.addCommand(addCommand());
|
|
96
|
+
program.addCommand(pluginsCommand());
|
|
97
|
+
program.addCommand(dashboardCommand());
|
|
98
|
+
// Re-export SDK builders for seamless import from "novaserve"
|
|
99
|
+
export { defineApp, api, fn, function_, storage, database, queue, cron, cache, secret, env, link, } from "novaserve-sdk";
|
|
100
|
+
// Parse and execute
|
|
101
|
+
program.parse();
|
|
102
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../src/runtime.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,cAAc,mBAAmB,CAAC"}
|
package/dist/runtime.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runtime.js","sourceRoot":"","sources":["../src/runtime.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,cAAc,mBAAmB,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ASCII Art Banner
|
|
3
|
+
*
|
|
4
|
+
* Beautiful terminal branding for NovaServe.
|
|
5
|
+
*/
|
|
6
|
+
/**
|
|
7
|
+
* Print the NovaServe banner (only once per CLI invocation).
|
|
8
|
+
*/
|
|
9
|
+
export declare function printBanner(compact?: boolean): void;
|
|
10
|
+
/**
|
|
11
|
+
* Print a section header.
|
|
12
|
+
*/
|
|
13
|
+
export declare function printSection(title: string): void;
|
|
14
|
+
//# sourceMappingURL=banner.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"banner.d.ts","sourceRoot":"","sources":["../../src/ui/banner.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAeH;;GAEG;AACH,wBAAgB,WAAW,CAAC,OAAO,UAAO,GAAG,IAAI,CAShD;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAGhD"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ASCII Art Banner
|
|
3
|
+
*
|
|
4
|
+
* Beautiful terminal branding for NovaServe.
|
|
5
|
+
*/
|
|
6
|
+
const BANNER = `
|
|
7
|
+
╔══════════════════════════════════════════════════╗
|
|
8
|
+
║ ║
|
|
9
|
+
║ ◆ N O V A S E R V E ║
|
|
10
|
+
║ The future of serverless development ║
|
|
11
|
+
║ ║
|
|
12
|
+
╚══════════════════════════════════════════════════╝
|
|
13
|
+
`;
|
|
14
|
+
const BANNER_COMPACT = ` ◆ NovaServe v2.0.0`;
|
|
15
|
+
let bannerPrinted = false;
|
|
16
|
+
/**
|
|
17
|
+
* Print the NovaServe banner (only once per CLI invocation).
|
|
18
|
+
*/
|
|
19
|
+
export function printBanner(compact = true) {
|
|
20
|
+
if (bannerPrinted)
|
|
21
|
+
return;
|
|
22
|
+
bannerPrinted = true;
|
|
23
|
+
if (compact) {
|
|
24
|
+
console.log(`\n${BANNER_COMPACT}\n`);
|
|
25
|
+
}
|
|
26
|
+
else {
|
|
27
|
+
console.log(BANNER);
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Print a section header.
|
|
32
|
+
*/
|
|
33
|
+
export function printSection(title) {
|
|
34
|
+
console.log(`\n ${title}`);
|
|
35
|
+
console.log(` ${"─".repeat(title.length + 2)}\n`);
|
|
36
|
+
}
|
|
37
|
+
//# sourceMappingURL=banner.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"banner.js","sourceRoot":"","sources":["../../src/ui/banner.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,MAAM,MAAM,GAAG;;;;;;;CAOd,CAAC;AAEF,MAAM,cAAc,GAAG,sBAAsB,CAAC;AAE9C,IAAI,aAAa,GAAG,KAAK,CAAC;AAE1B;;GAEG;AACH,MAAM,UAAU,WAAW,CAAC,OAAO,GAAG,IAAI;IACxC,IAAI,aAAa;QAAE,OAAO;IAC1B,aAAa,GAAG,IAAI,CAAC;IAErB,IAAI,OAAO,EAAE,CAAC;QACZ,OAAO,CAAC,GAAG,CAAC,KAAK,cAAc,IAAI,CAAC,CAAC;IACvC,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IACtB,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,YAAY,CAAC,KAAa;IACxC,OAAO,CAAC,GAAG,CAAC,OAAO,KAAK,EAAE,CAAC,CAAC;IAC5B,OAAO,CAAC,GAAG,CAAC,KAAK,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC;AACrD,CAAC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Spinner Wrapper
|
|
3
|
+
*
|
|
4
|
+
* Beautiful loading spinners for async operations.
|
|
5
|
+
*/
|
|
6
|
+
/**
|
|
7
|
+
* Create and manage a terminal spinner.
|
|
8
|
+
* Wraps ora for consistent styling.
|
|
9
|
+
*/
|
|
10
|
+
export declare function withSpinner<T>(message: string, fn: () => Promise<T>): Promise<T>;
|
|
11
|
+
/**
|
|
12
|
+
* Create a spinner that can be manually controlled.
|
|
13
|
+
*/
|
|
14
|
+
export declare function createSpinner(message: string): Promise<import("ora").Ora>;
|
|
15
|
+
//# sourceMappingURL=spinner.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"spinner.d.ts","sourceRoot":"","sources":["../../src/ui/spinner.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH;;;GAGG;AACH,wBAAsB,WAAW,CAAC,CAAC,EACjC,OAAO,EAAE,MAAM,EACf,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GACnB,OAAO,CAAC,CAAC,CAAC,CAkBZ;AAED;;GAEG;AACH,wBAAsB,aAAa,CAAC,OAAO,EAAE,MAAM,8BAQlD"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Spinner Wrapper
|
|
3
|
+
*
|
|
4
|
+
* Beautiful loading spinners for async operations.
|
|
5
|
+
*/
|
|
6
|
+
/**
|
|
7
|
+
* Create and manage a terminal spinner.
|
|
8
|
+
* Wraps ora for consistent styling.
|
|
9
|
+
*/
|
|
10
|
+
export async function withSpinner(message, fn) {
|
|
11
|
+
// Dynamic import for ESM compatibility
|
|
12
|
+
const { default: ora } = await import("ora");
|
|
13
|
+
const spinner = ora({
|
|
14
|
+
text: message,
|
|
15
|
+
prefixText: " ",
|
|
16
|
+
color: "cyan",
|
|
17
|
+
}).start();
|
|
18
|
+
try {
|
|
19
|
+
const result = await fn();
|
|
20
|
+
spinner.succeed(message);
|
|
21
|
+
return result;
|
|
22
|
+
}
|
|
23
|
+
catch (error) {
|
|
24
|
+
spinner.fail(message);
|
|
25
|
+
throw error;
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Create a spinner that can be manually controlled.
|
|
30
|
+
*/
|
|
31
|
+
export async function createSpinner(message) {
|
|
32
|
+
const { default: ora } = await import("ora");
|
|
33
|
+
return ora({
|
|
34
|
+
text: message,
|
|
35
|
+
prefixText: " ",
|
|
36
|
+
color: "cyan",
|
|
37
|
+
});
|
|
38
|
+
}
|
|
39
|
+
//# sourceMappingURL=spinner.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"spinner.js","sourceRoot":"","sources":["../../src/ui/spinner.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,WAAW,CAC/B,OAAe,EACf,EAAoB;IAEpB,uCAAuC;IACvC,MAAM,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,MAAM,MAAM,CAAC,KAAK,CAAC,CAAC;IAE7C,MAAM,OAAO,GAAG,GAAG,CAAC;QAClB,IAAI,EAAE,OAAO;QACb,UAAU,EAAE,IAAI;QAChB,KAAK,EAAE,MAAM;KACd,CAAC,CAAC,KAAK,EAAE,CAAC;IAEX,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,EAAE,EAAE,CAAC;QAC1B,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QACzB,OAAO,MAAM,CAAC;IAChB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACtB,MAAM,KAAK,CAAC;IACd,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,OAAe;IACjD,MAAM,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,MAAM,MAAM,CAAC,KAAK,CAAC,CAAC;IAE7C,OAAO,GAAG,CAAC;QACT,IAAI,EAAE,OAAO;QACb,UAAU,EAAE,IAAI;QAChB,KAAK,EAAE,MAAM;KACd,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Config Loader
|
|
3
|
+
*
|
|
4
|
+
* Loads nova.config.ts from the current project.
|
|
5
|
+
*/
|
|
6
|
+
import type { NovaApp } from "novaserve-sdk";
|
|
7
|
+
/**
|
|
8
|
+
* Load the nova config from the current directory.
|
|
9
|
+
* Exits the process with an error message if not found.
|
|
10
|
+
*/
|
|
11
|
+
export declare function loadConfig(cwd?: string): Promise<NovaApp>;
|
|
12
|
+
//# sourceMappingURL=config-loader.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config-loader.d.ts","sourceRoot":"","sources":["../../src/utils/config-loader.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAG7C;;;GAGG;AACH,wBAAsB,UAAU,CAAC,GAAG,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAiB/D"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Config Loader
|
|
3
|
+
*
|
|
4
|
+
* Loads nova.config.ts from the current project.
|
|
5
|
+
*/
|
|
6
|
+
import { ConfigParser } from "novaserve-core";
|
|
7
|
+
import { logger } from "./logger.js";
|
|
8
|
+
/**
|
|
9
|
+
* Load the nova config from the current directory.
|
|
10
|
+
* Exits the process with an error message if not found.
|
|
11
|
+
*/
|
|
12
|
+
export async function loadConfig(cwd) {
|
|
13
|
+
const parser = new ConfigParser(cwd || process.cwd());
|
|
14
|
+
const configFile = parser.findConfigFile();
|
|
15
|
+
if (!configFile) {
|
|
16
|
+
logger.error("No nova.config.ts found in this directory.");
|
|
17
|
+
logger.blank();
|
|
18
|
+
logger.info("Run 'nova init' to create a new project.");
|
|
19
|
+
process.exit(1);
|
|
20
|
+
}
|
|
21
|
+
try {
|
|
22
|
+
return await parser.load();
|
|
23
|
+
}
|
|
24
|
+
catch (error) {
|
|
25
|
+
logger.error(`Failed to load config: ${error instanceof Error ? error.message : String(error)}`);
|
|
26
|
+
process.exit(1);
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
//# sourceMappingURL=config-loader.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config-loader.js","sourceRoot":"","sources":["../../src/utils/config-loader.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAE9C,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAErC;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,GAAY;IAC3C,MAAM,MAAM,GAAG,IAAI,YAAY,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;IAEtD,MAAM,UAAU,GAAG,MAAM,CAAC,cAAc,EAAE,CAAC;IAC3C,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,MAAM,CAAC,KAAK,CAAC,4CAA4C,CAAC,CAAC;QAC3D,MAAM,CAAC,KAAK,EAAE,CAAC;QACf,MAAM,CAAC,IAAI,CAAC,0CAA0C,CAAC,CAAC;QACxD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,IAAI,CAAC;QACH,OAAO,MAAM,MAAM,CAAC,IAAI,EAAE,CAAC;IAC7B,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,CAAC,KAAK,CAAC,0BAA0B,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QACjG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Logger
|
|
3
|
+
*
|
|
4
|
+
* Consistent, color-coded logging for the CLI.
|
|
5
|
+
*/
|
|
6
|
+
export declare const logger: {
|
|
7
|
+
info(message: string): void;
|
|
8
|
+
success(message: string): void;
|
|
9
|
+
warn(message: string): void;
|
|
10
|
+
error(message: string): void;
|
|
11
|
+
debug(message: string): void;
|
|
12
|
+
/** Print a blank line */
|
|
13
|
+
blank(): void;
|
|
14
|
+
/** Print a key-value pair */
|
|
15
|
+
kv(key: string, value: string): void;
|
|
16
|
+
/** Print a box with content */
|
|
17
|
+
box(lines: Array<{
|
|
18
|
+
key: string;
|
|
19
|
+
value: string;
|
|
20
|
+
}>): void;
|
|
21
|
+
/** Print a diff-style change line */
|
|
22
|
+
diff(action: "+" | "~" | "-" | " ", resource: string, type: string, detail: string): void;
|
|
23
|
+
};
|
|
24
|
+
//# sourceMappingURL=logger.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../src/utils/logger.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,eAAO,MAAM,MAAM;kBACH,MAAM,GAAG,IAAI;qBAIV,MAAM,GAAG,IAAI;kBAIhB,MAAM,GAAG,IAAI;mBAIZ,MAAM,GAAG,IAAI;mBAIb,MAAM,GAAG,IAAI;IAM5B,yBAAyB;aAChB,IAAI;IAIb,6BAA6B;YACrB,MAAM,SAAS,MAAM,GAAG,IAAI;IAIpC,+BAA+B;eACpB,KAAK,CAAC;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,GAAG,IAAI;IAcvD,qCAAqC;iBACxB,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,YAAY,MAAM,QAAQ,MAAM,UAAU,MAAM,GAAG,IAAI;CAI1F,CAAC"}
|