@zlooks.cn/cli 1.0.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.
Files changed (81) hide show
  1. package/dist/command/index.d.ts +3 -0
  2. package/dist/command/index.d.ts.map +1 -0
  3. package/dist/command/index.js +145 -0
  4. package/dist/command/index.js.map +1 -0
  5. package/dist/deploy.d.ts +35 -0
  6. package/dist/deploy.d.ts.map +1 -0
  7. package/dist/deploy.js +312 -0
  8. package/dist/deploy.js.map +1 -0
  9. package/dist/deployment.d.ts +18 -0
  10. package/dist/deployment.d.ts.map +1 -0
  11. package/dist/deployment.js +26 -0
  12. package/dist/deployment.js.map +1 -0
  13. package/dist/doctor.d.ts +24 -0
  14. package/dist/doctor.d.ts.map +1 -0
  15. package/dist/doctor.js +78 -0
  16. package/dist/doctor.js.map +1 -0
  17. package/dist/export/export-operation.d.ts +34 -0
  18. package/dist/export/export-operation.d.ts.map +1 -0
  19. package/dist/export/export-operation.js +69 -0
  20. package/dist/export/export-operation.js.map +1 -0
  21. package/dist/export/legacy-export.d.ts +129 -0
  22. package/dist/export/legacy-export.d.ts.map +1 -0
  23. package/dist/export/legacy-export.js +334 -0
  24. package/dist/export/legacy-export.js.map +1 -0
  25. package/dist/export/legacy-source.d.ts +16 -0
  26. package/dist/export/legacy-source.d.ts.map +1 -0
  27. package/dist/export/legacy-source.js +164 -0
  28. package/dist/export/legacy-source.js.map +1 -0
  29. package/dist/global-packages.d.ts +24 -0
  30. package/dist/global-packages.d.ts.map +1 -0
  31. package/dist/global-packages.js +89 -0
  32. package/dist/global-packages.js.map +1 -0
  33. package/dist/import/import-operation.d.ts +6 -0
  34. package/dist/import/import-operation.d.ts.map +1 -0
  35. package/dist/import/import-operation.js +16 -0
  36. package/dist/import/import-operation.js.map +1 -0
  37. package/dist/npm-registry.d.ts +11 -0
  38. package/dist/npm-registry.d.ts.map +1 -0
  39. package/dist/npm-registry.js +20 -0
  40. package/dist/npm-registry.js.map +1 -0
  41. package/dist/operations.d.ts +33 -0
  42. package/dist/operations.d.ts.map +1 -0
  43. package/dist/operations.js +270 -0
  44. package/dist/operations.js.map +1 -0
  45. package/dist/package-manifest.d.ts +16 -0
  46. package/dist/package-manifest.d.ts.map +1 -0
  47. package/dist/package-manifest.js +72 -0
  48. package/dist/package-manifest.js.map +1 -0
  49. package/dist/package-updates.d.ts +13 -0
  50. package/dist/package-updates.d.ts.map +1 -0
  51. package/dist/package-updates.js +41 -0
  52. package/dist/package-updates.js.map +1 -0
  53. package/dist/pm2.d.ts +28 -0
  54. package/dist/pm2.d.ts.map +1 -0
  55. package/dist/pm2.js +72 -0
  56. package/dist/pm2.js.map +1 -0
  57. package/dist/prompt.d.ts +49 -0
  58. package/dist/prompt.d.ts.map +1 -0
  59. package/dist/prompt.js +25 -0
  60. package/dist/prompt.js.map +1 -0
  61. package/dist/release-environment.d.ts +6 -0
  62. package/dist/release-environment.d.ts.map +1 -0
  63. package/dist/release-environment.js +19 -0
  64. package/dist/release-environment.js.map +1 -0
  65. package/dist/service-catalog.d.ts +10 -0
  66. package/dist/service-catalog.d.ts.map +1 -0
  67. package/dist/service-catalog.js +28 -0
  68. package/dist/service-catalog.js.map +1 -0
  69. package/dist/setup.d.ts +39 -0
  70. package/dist/setup.d.ts.map +1 -0
  71. package/dist/setup.js +413 -0
  72. package/dist/setup.js.map +1 -0
  73. package/dist/system.d.ts +5 -0
  74. package/dist/system.d.ts.map +1 -0
  75. package/dist/system.js +11 -0
  76. package/dist/system.js.map +1 -0
  77. package/dist/topology.d.ts +11 -0
  78. package/dist/topology.d.ts.map +1 -0
  79. package/dist/topology.js +78 -0
  80. package/dist/topology.js.map +1 -0
  81. package/package.json +51 -0
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/command/index.ts"],"names":[],"mappings":""}
@@ -0,0 +1,145 @@
1
+ #!/usr/bin/env node
2
+ import { readFileSync } from 'node:fs';
3
+ import { homedir } from 'node:os';
4
+ import { resolve } from 'node:path';
5
+ import { Command } from 'commander';
6
+ import { completeDeployment, getDeploymentPath, rollbackDeployment, startDeployment, statusDeployment, } from '../deploy.js';
7
+ import { inspectDeployment } from '../doctor.js';
8
+ import { exportOperation } from '../export/export-operation.js';
9
+ import { legacyImportOperation } from '../import/import-operation.js';
10
+ import { installOperation, databaseOperation, restartOperation, serviceListOperation, stopOperation, uninstallOperation, updateOperation, } from '../operations.js';
11
+ import { confirm, isPromptCancellation, selectMany } from '../prompt.js';
12
+ import { getSetupPaths, setupOperation } from '../setup.js';
13
+ import { executeFile } from '../system.js';
14
+ const manifest = readManifest();
15
+ const defaultEnvironment = getSetupPaths(homedir()).environment;
16
+ const deploymentPath = getDeploymentPath(homedir());
17
+ const runtime = {
18
+ npm: { exec: (args, options) => executeFile('npm', args, options) },
19
+ pm2: { exec: (args, options) => executeFile('pm2', args, options) },
20
+ service: { exec: (executable, args) => executeFile(executable, args) },
21
+ cwd: process.cwd(),
22
+ environmentFile: defaultEnvironment,
23
+ confirm,
24
+ selectMany,
25
+ write: (text) => process.stdout.write(text),
26
+ };
27
+ const deploymentRuntime = runtime;
28
+ const program = new Command()
29
+ .name('zlooks')
30
+ .description('Install, operate, and inspect Zlooks services')
31
+ .version(manifest.version, '-v, --version')
32
+ .showHelpAfterError();
33
+ program.command('setup')
34
+ .description('Create or selectively update this machine\'s Zlooks configuration')
35
+ .action(async () => setupOperation());
36
+ program.command('export')
37
+ .description('Export legacy zlooks.cn data and decrypted key vault into ~/.zlooks.cn/export')
38
+ .option('--source-env <path>', 'Legacy zlooks.cn environment file', '.env.production')
39
+ .action(async (options) => {
40
+ await exportOperation({ sourceEnvironmentFile: options.sourceEnv });
41
+ });
42
+ program.command('import')
43
+ .description('Atomically import a zlooks export directory into the current PostgreSQL database')
44
+ .option('--source <path>', 'zlooks export directory', resolve(homedir(), '.zlooks.cn/export'))
45
+ .option('--env <path>', 'Registry bootstrap environment file', defaultEnvironment)
46
+ .action(async (options) => {
47
+ await legacyImportOperation(options, runtime);
48
+ });
49
+ program.command('install')
50
+ .description('Preview and confirm exact versions before installing services')
51
+ .argument('[package]', 'Published official or third-party Zlooks package spec')
52
+ .option('--env <path>', 'Registry bootstrap environment file used when starting', defaultEnvironment)
53
+ .option('--start', 'Start installed services without prompting')
54
+ .option('--skip-start', 'Do not start installed services')
55
+ .action(async (packageSpec, options) => {
56
+ if (options.start && options.skipStart)
57
+ throw new Error('--start and --skip-start cannot be combined');
58
+ await installOperation(packageSpec, options, runtime);
59
+ });
60
+ program.command('uninstall')
61
+ .description('Uninstall one package or select installed services')
62
+ .argument('[package]', 'Installed official or third-party Zlooks package name')
63
+ .option('-y, --yes', 'Confirm uninstall without prompting')
64
+ .action(async (packageName, options) => {
65
+ await uninstallOperation(packageName, options.yes === true, runtime);
66
+ });
67
+ program.command('stop')
68
+ .description('Stop every PM2 process in the zlooks namespace')
69
+ .action(async () => stopOperation(runtime));
70
+ program.command('restart')
71
+ .description('Restart the current PM2 Zlooks topology')
72
+ .action(async () => restartOperation(runtime));
73
+ program.command('update')
74
+ .description('Preview and confirm updates for current PM2 Zlooks services without restarting')
75
+ .action(async () => updateOperation(runtime));
76
+ const deploy = program.command('deploy').description('Prepare, complete, inspect, or roll back a Zlooks deployment');
77
+ deploy.command('start')
78
+ .description('Record the current PM2 Zlooks package versions as a rollback snapshot')
79
+ .action(() => startDeployment(deploymentPath, deploymentRuntime));
80
+ deploy.command('complete')
81
+ .description('Complete the deployment and delete its rollback snapshot')
82
+ .action(() => completeDeployment(deploymentPath, deploymentRuntime));
83
+ deploy.command('rollback')
84
+ .description('Restore the snapshotted package versions and PM2 topology')
85
+ .action(() => rollbackDeployment(deploymentPath, deploymentRuntime));
86
+ deploy.command('status')
87
+ .description('Show the active deployment snapshot and current version differences')
88
+ .action(() => statusDeployment(deploymentPath, deploymentRuntime));
89
+ const database = program.command('db').description('Run package-owned database operations');
90
+ database.command('sync')
91
+ .description('Select capable current PM2 services or synchronize one exact PM2 process name')
92
+ .argument('[package]', 'Exact name from the current PM2 Zlooks namespace')
93
+ .option('--env <path>', 'Registry bootstrap environment file', defaultEnvironment)
94
+ .action(async (packageName, options) => {
95
+ await databaseOperation('sync', packageName, options, runtime);
96
+ });
97
+ database.command('migrate')
98
+ .description('Select capable current PM2 services or migrate one exact PM2 process name')
99
+ .argument('[package]', 'Exact name from the current PM2 Zlooks namespace')
100
+ .option('--env <path>', 'Registry bootstrap environment file', defaultEnvironment)
101
+ .action(async (packageName, options) => {
102
+ await databaseOperation('migrate', packageName, options, runtime);
103
+ });
104
+ program.command('service')
105
+ .description('Inspect built-in services')
106
+ .command('list')
107
+ .description('List built-in services and deployment state')
108
+ .action(() => serviceListOperation(runtime));
109
+ program.command('doctor')
110
+ .description('Run read-only deployment prerequisite checks')
111
+ .argument('[services...]', 'Built-in service IDs')
112
+ .option('--env <path>', 'Registry bootstrap environment file', defaultEnvironment)
113
+ .option('--root <path>', 'Built workspace root', process.cwd())
114
+ .action(async (services, options) => {
115
+ const result = await inspectDeployment({
116
+ envFile: resolve(process.cwd(), options.env),
117
+ serviceIds: services,
118
+ workspaceRoot: resolve(process.cwd(), options.root),
119
+ });
120
+ for (const check of result.checks) {
121
+ runtime.write(`${check.ok ? 'PASS' : 'FAIL'}\t${check.id}\t${check.detail}\n`);
122
+ }
123
+ if (!result.ok)
124
+ process.exitCode = 1;
125
+ });
126
+ program.action(() => program.outputHelp());
127
+ try {
128
+ await program.parseAsync(process.argv);
129
+ }
130
+ catch (error) {
131
+ if (isPromptCancellation(error)) {
132
+ process.stdout.write('已取消,未执行操作。\n');
133
+ }
134
+ else {
135
+ process.stderr.write(`${error instanceof Error ? error.message : String(error)}\n`);
136
+ process.exitCode = 1;
137
+ }
138
+ }
139
+ function readManifest() {
140
+ const parsed = JSON.parse(readFileSync(new URL('../../package.json', import.meta.url), 'utf8'));
141
+ if (typeof parsed.version !== 'string')
142
+ throw new Error('CLI package version is missing');
143
+ return { version: parsed.version };
144
+ }
145
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/command/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,35 @@
1
+ import { type NpmRuntime } from './global-packages.js';
2
+ import { type ZlooksPackageManifest } from './package-manifest.js';
3
+ import { type ManagedProcess, type Pm2CommandRuntime } from './pm2.js';
4
+ export interface DeploymentRuntime {
5
+ readonly npm: NpmRuntime;
6
+ readonly pm2: Pm2CommandRuntime;
7
+ readonly environmentFile: string;
8
+ readonly createId?: () => string;
9
+ readonly now?: () => Date;
10
+ write(text: string): void;
11
+ }
12
+ export type DeploymentStatus = {
13
+ readonly state: 'none';
14
+ } | {
15
+ readonly state: 'active';
16
+ readonly deploymentId: string;
17
+ readonly createdAt: string;
18
+ readonly changes: readonly DeploymentStatusChange[];
19
+ };
20
+ export interface DeploymentStatusChange {
21
+ readonly status: 'unchanged' | 'updated' | 'missing' | 'added';
22
+ readonly name: string;
23
+ readonly baselineVersion?: string;
24
+ readonly currentVersion?: string;
25
+ }
26
+ export declare function getDeploymentPath(homeDirectory?: string): string;
27
+ export declare function startDeployment(path: string, runtime: DeploymentRuntime): void;
28
+ export declare function completeDeployment(path: string, runtime: DeploymentRuntime): void;
29
+ export declare function statusDeployment(path: string, runtime: DeploymentRuntime): void;
30
+ export declare function inspectDeploymentStatus(path: string, inventory: {
31
+ readonly processes: readonly ManagedProcess[];
32
+ readonly installed: readonly ZlooksPackageManifest[];
33
+ }): DeploymentStatus;
34
+ export declare function rollbackDeployment(path: string, runtime: DeploymentRuntime): void;
35
+ //# sourceMappingURL=deploy.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deploy.d.ts","sourceRoot":"","sources":["../src/deploy.ts"],"names":[],"mappings":"AAcA,OAAO,EAAkD,KAAK,UAAU,EAAE,MAAM,sBAAsB,CAAC;AACvG,OAAO,EAGL,KAAK,qBAAqB,EAC3B,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EAKL,KAAK,cAAc,EACnB,KAAK,iBAAiB,EACvB,MAAM,UAAU,CAAC;AAKlB,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,GAAG,EAAE,UAAU,CAAC;IACzB,QAAQ,CAAC,GAAG,EAAE,iBAAiB,CAAC;IAChC,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,MAAM,CAAC;IACjC,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,IAAI,CAAC;IAC1B,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;CAC3B;AAYD,MAAM,MAAM,gBAAgB,GACxB;IAAE,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GAC1B;IACA,QAAQ,CAAC,KAAK,EAAE,QAAQ,CAAC;IACzB,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,OAAO,EAAE,SAAS,sBAAsB,EAAE,CAAC;CACrD,CAAC;AAEJ,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,MAAM,EAAE,WAAW,GAAG,SAAS,GAAG,SAAS,GAAG,OAAO,CAAC;IAC/D,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,eAAe,CAAC,EAAE,MAAM,CAAC;IAClC,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC;CAClC;AAED,wBAAgB,iBAAiB,CAAC,aAAa,SAAY,GAAG,MAAM,CAEnE;AAED,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,iBAAiB,GAAG,IAAI,CAyB9E;AAED,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,iBAAiB,GAAG,IAAI,CAMjF;AAED,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,iBAAiB,GAAG,IAAI,CAY/E;AAED,wBAAgB,uBAAuB,CACrC,IAAI,EAAE,MAAM,EACZ,SAAS,EAAE;IACT,QAAQ,CAAC,SAAS,EAAE,SAAS,cAAc,EAAE,CAAC;IAC9C,QAAQ,CAAC,SAAS,EAAE,SAAS,qBAAqB,EAAE,CAAC;CACtD,GACA,gBAAgB,CAkClB;AAeD,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,iBAAiB,GAAG,IAAI,CAkBjF"}
package/dist/deploy.js ADDED
@@ -0,0 +1,312 @@
1
+ import { closeSync, existsSync, lstatSync, mkdirSync, openSync, readFileSync, renameSync, unlinkSync, writeFileSync, } from 'node:fs';
2
+ import { homedir } from 'node:os';
3
+ import { dirname, isAbsolute, resolve } from 'node:path';
4
+ import { randomUUID } from 'node:crypto';
5
+ import { installGlobalPackage, listGlobalZlooksPackages } from './global-packages.js';
6
+ import { isZlooksPackageName, parseZlooksPackageManifest, } from './package-manifest.js';
7
+ import { loadActiveNpmRegistry, parseActiveNpmRegistry } from './npm-registry.js';
8
+ import { deletePm2Service, listManagedProcesses, startPm2Service, stopPm2Service, } from './pm2.js';
9
+ import { planTopology, trimTopologyDependencies } from './topology.js';
10
+ const DEPLOYMENT_SCHEMA_VERSION = 1;
11
+ export function getDeploymentPath(homeDirectory = homedir()) {
12
+ return resolve(homeDirectory, '.zlooks.cn/.deploy');
13
+ }
14
+ export function startDeployment(path, runtime) {
15
+ withDeploymentLock(path, () => {
16
+ if (existsSync(path))
17
+ throw new Error(`Deployment snapshot already exists: ${path}`);
18
+ const processes = listManagedProcesses(runtime.pm2);
19
+ if (processes.length === 0)
20
+ throw new Error('No PM2-managed Zlooks services found');
21
+ const unavailable = processes.filter((process) => process.status !== 'online');
22
+ if (unavailable.length > 0) {
23
+ throw new Error(`Cannot prepare deployment while services are not online: ${unavailable.map((item) => item.name).join(', ')}`);
24
+ }
25
+ const installed = listGlobalZlooksPackages(runtime.npm);
26
+ const manifests = trimTopologyDependencies(processes.map((process) => requireInstalled(process.name, installed)));
27
+ const services = planTopology(manifests).start;
28
+ const snapshot = {
29
+ schemaVersion: DEPLOYMENT_SCHEMA_VERSION,
30
+ state: 'prepared',
31
+ deploymentId: runtime.createId?.() ?? randomUUID(),
32
+ createdAt: (runtime.now?.() ?? new Date()).toISOString(),
33
+ registry: loadActiveNpmRegistry(runtime.environmentFile),
34
+ environmentFile: resolve(runtime.environmentFile),
35
+ services,
36
+ };
37
+ writeSnapshot(path, snapshot);
38
+ runtime.write(`PREPARED\t${snapshot.deploymentId}\n`);
39
+ for (const service of services)
40
+ runtime.write(`${service.name}\t${service.version}\n`);
41
+ });
42
+ }
43
+ export function completeDeployment(path, runtime) {
44
+ withDeploymentLock(path, () => {
45
+ assertRegularSnapshot(path);
46
+ unlinkSync(path);
47
+ runtime.write('Deployment completed. Rollback snapshot removed.\n');
48
+ });
49
+ }
50
+ export function statusDeployment(path, runtime) {
51
+ if (!existsSync(path)) {
52
+ runtime.write('NO_ACTIVE_DEPLOYMENT\n');
53
+ return;
54
+ }
55
+ const status = inspectDeploymentStatus(path, {
56
+ processes: listManagedProcesses(runtime.pm2),
57
+ installed: listGlobalZlooksPackages(runtime.npm),
58
+ });
59
+ if (status.state === 'none')
60
+ throw new Error('Deployment snapshot disappeared while reading status');
61
+ runtime.write(`ACTIVE\t${status.deploymentId}\t${status.createdAt}\n`);
62
+ for (const change of status.changes)
63
+ runtime.write(renderDeploymentChange(change));
64
+ }
65
+ export function inspectDeploymentStatus(path, inventory) {
66
+ if (!existsSync(path))
67
+ return { state: 'none' };
68
+ const snapshot = readSnapshot(path);
69
+ const managedNames = new Set(inventory.processes.map((process) => process.name));
70
+ const installedByName = new Map(inventory.installed.map((manifest) => [manifest.name, manifest]));
71
+ const baselineNames = new Set(snapshot.services.map((service) => service.name));
72
+ const changes = snapshot.services.map((service) => {
73
+ const current = installedByName.get(service.name);
74
+ if (!managedNames.has(service.name) || !current) {
75
+ return { status: 'missing', name: service.name, baselineVersion: service.version };
76
+ }
77
+ if (current.version === service.version) {
78
+ return {
79
+ status: 'unchanged', name: service.name,
80
+ baselineVersion: service.version, currentVersion: current.version,
81
+ };
82
+ }
83
+ return {
84
+ status: 'updated', name: service.name,
85
+ baselineVersion: service.version, currentVersion: current.version,
86
+ };
87
+ });
88
+ for (const process of inventory.processes.filter((item) => !baselineNames.has(item.name))) {
89
+ changes.push({
90
+ status: 'added', name: process.name,
91
+ currentVersion: installedByName.get(process.name)?.version ?? 'not-installed',
92
+ });
93
+ }
94
+ return {
95
+ state: 'active',
96
+ deploymentId: snapshot.deploymentId,
97
+ createdAt: snapshot.createdAt,
98
+ changes,
99
+ };
100
+ }
101
+ function renderDeploymentChange(change) {
102
+ if (change.status === 'missing') {
103
+ return `MISSING\t${change.name}\t${change.baselineVersion}\n`;
104
+ }
105
+ if (change.status === 'added') {
106
+ return `ADDED\t${change.name}\t${change.currentVersion}\n`;
107
+ }
108
+ if (change.status === 'updated') {
109
+ return `UPDATED\t${change.name}\t${change.baselineVersion} -> ${change.currentVersion}\n`;
110
+ }
111
+ return `UNCHANGED\t${change.name}\t${change.currentVersion}\n`;
112
+ }
113
+ export function rollbackDeployment(path, runtime) {
114
+ withDeploymentLock(path, () => {
115
+ const snapshot = readSnapshot(path);
116
+ if (!existsSync(snapshot.environmentFile)) {
117
+ throw new Error(`Environment file not found: ${snapshot.environmentFile}`);
118
+ }
119
+ const plan = planTopology(snapshot.services);
120
+ const installed = listGlobalZlooksPackages(runtime.npm);
121
+ const packagesToRestore = plan.start.filter((service) => (installed.find((candidate) => candidate.name === service.name)?.version !== service.version));
122
+ preflightRollbackPackages(packagesToRestore, snapshot.registry, runtime.npm);
123
+ restorePackageVersions(packagesToRestore, snapshot.registry, runtime.npm);
124
+ const restored = verifyRestoredPackages(plan.start, runtime.npm);
125
+ replacePm2Topology(restored, snapshot.environmentFile, runtime);
126
+ unlinkSync(path);
127
+ runtime.write('Deployment rolled back. Rollback snapshot removed.\n');
128
+ });
129
+ }
130
+ function preflightRollbackPackages(services, registry, npm) {
131
+ for (const service of services) {
132
+ const spec = `${service.name}@${service.version}`;
133
+ try {
134
+ const available = npm.exec(['view', spec, 'version', `--registry=${registry}`], { silent: true }).trim();
135
+ if (available !== service.version)
136
+ throw new Error(`received ${available || 'no version'}`);
137
+ }
138
+ catch (error) {
139
+ throw new Error(`Rollback package is unavailable: ${spec}`, { cause: error });
140
+ }
141
+ }
142
+ }
143
+ function restorePackageVersions(services, registry, npm) {
144
+ for (const service of services) {
145
+ installGlobalPackage(`${service.name}@${service.version}`, registry, npm);
146
+ }
147
+ }
148
+ function verifyRestoredPackages(expected, npm) {
149
+ const installed = listGlobalZlooksPackages(npm);
150
+ const restored = trimTopologyDependencies(expected.map((snapshot) => {
151
+ const restored = requireInstalled(snapshot.name, installed);
152
+ if (restored.version !== snapshot.version) {
153
+ throw new Error(`Rollback version mismatch for ${snapshot.name}: expected ${snapshot.version}, got ${restored.version}`);
154
+ }
155
+ return restored;
156
+ }));
157
+ return expected.map((snapshot) => {
158
+ const candidate = requireInstalled(snapshot.name, restored);
159
+ if (JSON.stringify(candidate) !== JSON.stringify(snapshot)) {
160
+ throw new Error(`Rollback package metadata mismatch: ${snapshot.name}@${snapshot.version}`);
161
+ }
162
+ return candidate;
163
+ });
164
+ }
165
+ function replacePm2Topology(services, environmentFile, runtime) {
166
+ const current = listManagedProcesses(runtime.pm2);
167
+ const baselineNames = new Set(services.map((service) => service.name));
168
+ const currentByName = new Map(current.map((process) => [process.name, process]));
169
+ const extras = current.filter((process) => !baselineNames.has(process.name))
170
+ .sort((left, right) => right.name.localeCompare(left.name));
171
+ for (const process of extras)
172
+ stopAndDelete(process, runtime.pm2);
173
+ for (const service of planTopology(services).stop) {
174
+ const process = currentByName.get(service.name);
175
+ if (process)
176
+ stopAndDelete(process, runtime.pm2);
177
+ }
178
+ const ready = new Set();
179
+ const failures = [];
180
+ for (const service of planTopology(services).start) {
181
+ if (service.dependsOn.some((dependency) => !ready.has(dependency))) {
182
+ runtime.write(`BLOCKED\t${service.name}\n`);
183
+ failures.push(service.name);
184
+ continue;
185
+ }
186
+ try {
187
+ startPm2Service(service, environmentFile, runtime.pm2);
188
+ ready.add(service.name);
189
+ runtime.write(`READY\t${service.name}\n`);
190
+ }
191
+ catch (error) {
192
+ runtime.write(`FAILED\t${service.name}\t${error instanceof Error ? error.message : String(error)}\n`);
193
+ failures.push(service.name);
194
+ }
195
+ }
196
+ if (failures.length > 0)
197
+ throw new Error(`Rollback failed; snapshot retained: ${failures.join(', ')}`);
198
+ }
199
+ function stopAndDelete(process, pm2) {
200
+ stopPm2Service(process.pmId, pm2);
201
+ deletePm2Service(process.pmId, pm2);
202
+ }
203
+ function requireInstalled(name, manifests) {
204
+ const manifest = manifests.find((candidate) => candidate.name === name);
205
+ if (!manifest)
206
+ throw new Error(`Installed Zlooks package not found: ${name}`);
207
+ return manifest;
208
+ }
209
+ function writeSnapshot(path, snapshot) {
210
+ mkdirSync(dirname(path), { recursive: true, mode: 0o700 });
211
+ const temporary = `${path}.tmp-${process.pid}-${randomUUID()}`;
212
+ try {
213
+ writeFileSync(temporary, `${JSON.stringify(snapshot, null, 2)}\n`, { encoding: 'utf8', mode: 0o600, flag: 'wx' });
214
+ renameSync(temporary, path);
215
+ }
216
+ finally {
217
+ if (existsSync(temporary))
218
+ unlinkSync(temporary);
219
+ }
220
+ }
221
+ function readSnapshot(path) {
222
+ assertRegularSnapshot(path);
223
+ let parsed;
224
+ try {
225
+ parsed = JSON.parse(readFileSync(path, 'utf8'));
226
+ }
227
+ catch (error) {
228
+ throw new Error(`Invalid deployment snapshot JSON: ${path}`, { cause: error });
229
+ }
230
+ if (!isRecord(parsed)
231
+ || parsed.schemaVersion !== DEPLOYMENT_SCHEMA_VERSION
232
+ || parsed.state !== 'prepared'
233
+ || typeof parsed.deploymentId !== 'string'
234
+ || parsed.deploymentId.length === 0
235
+ || typeof parsed.createdAt !== 'string'
236
+ || Number.isNaN(Date.parse(parsed.createdAt))
237
+ || typeof parsed.environmentFile !== 'string'
238
+ || !isAbsolute(parsed.environmentFile)
239
+ || !Array.isArray(parsed.services)
240
+ || parsed.services.length === 0) {
241
+ throw new Error(`Invalid deployment snapshot: ${path}`);
242
+ }
243
+ const registry = parseActiveNpmRegistry(parsed.registry);
244
+ const services = parsed.services.map(parseSnapshotService);
245
+ planTopology(services);
246
+ return {
247
+ schemaVersion: DEPLOYMENT_SCHEMA_VERSION,
248
+ state: 'prepared',
249
+ deploymentId: parsed.deploymentId,
250
+ createdAt: parsed.createdAt,
251
+ registry,
252
+ environmentFile: parsed.environmentFile,
253
+ services,
254
+ };
255
+ }
256
+ function parseSnapshotService(value) {
257
+ if (!isRecord(value)
258
+ || typeof value.name !== 'string'
259
+ || !isZlooksPackageName(value.name)
260
+ || typeof value.version !== 'string'
261
+ || typeof value.bin !== 'string'
262
+ || typeof value.kind !== 'string'
263
+ || typeof value.description !== 'string'
264
+ || !Array.isArray(value.dependsOn)
265
+ || !Array.isArray(value.nodeConditions)
266
+ || !Array.isArray(value.databaseCommands)) {
267
+ throw new Error('Invalid service in deployment snapshot');
268
+ }
269
+ return parseZlooksPackageManifest({
270
+ name: value.name,
271
+ version: value.version,
272
+ bin: { [value.bin]: 'dist/command/index.js' },
273
+ zlooks: {
274
+ kind: value.kind,
275
+ description: value.description,
276
+ dependsOn: value.dependsOn,
277
+ nodeConditions: value.nodeConditions,
278
+ commands: { db: value.databaseCommands },
279
+ },
280
+ });
281
+ }
282
+ function assertRegularSnapshot(path) {
283
+ if (!existsSync(path))
284
+ throw new Error('No active deployment found');
285
+ const stats = lstatSync(path);
286
+ if (!stats.isFile() || stats.isSymbolicLink())
287
+ throw new Error(`Deployment snapshot is not a regular file: ${path}`);
288
+ }
289
+ function withDeploymentLock(path, operation) {
290
+ mkdirSync(dirname(path), { recursive: true, mode: 0o700 });
291
+ const lockPath = `${path}.lock`;
292
+ let descriptor;
293
+ try {
294
+ descriptor = openSync(lockPath, 'wx', 0o600);
295
+ }
296
+ catch (error) {
297
+ throw new Error(`Deployment operation already in progress: ${lockPath}`, { cause: error });
298
+ }
299
+ try {
300
+ writeFileSync(descriptor, JSON.stringify({ pid: process.pid, createdAt: new Date().toISOString() }));
301
+ return operation();
302
+ }
303
+ finally {
304
+ closeSync(descriptor);
305
+ if (existsSync(lockPath))
306
+ unlinkSync(lockPath);
307
+ }
308
+ }
309
+ function isRecord(value) {
310
+ return typeof value === 'object' && value !== null && !Array.isArray(value);
311
+ }
312
+ //# sourceMappingURL=deploy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deploy.js","sourceRoot":"","sources":["../src/deploy.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ import type { ZlooksPackageManifest } from './package-manifest.js';
2
+ export interface DeploymentRuntime {
3
+ stop(name: string): Promise<void>;
4
+ start(name: string, manifest: ZlooksPackageManifest): Promise<void>;
5
+ }
6
+ export type DeploymentResult = {
7
+ readonly name: string;
8
+ readonly status: 'ready';
9
+ } | {
10
+ readonly name: string;
11
+ readonly status: 'failed';
12
+ readonly error: string;
13
+ } | {
14
+ readonly name: string;
15
+ readonly status: 'blocked';
16
+ };
17
+ export declare function restartServices(services: readonly ZlooksPackageManifest[], runtime: DeploymentRuntime): Promise<readonly DeploymentResult[]>;
18
+ //# sourceMappingURL=deployment.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deployment.d.ts","sourceRoot":"","sources":["../src/deployment.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAGnE,MAAM,WAAW,iBAAiB;IAChC,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAClC,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,qBAAqB,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACrE;AAED,MAAM,MAAM,gBAAgB,GACxB;IAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAA;CAAE,GACnD;IAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GAC5E;IAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,SAAS,CAAA;CAAE,CAAC;AAE1D,wBAAsB,eAAe,CACnC,QAAQ,EAAE,SAAS,qBAAqB,EAAE,EAC1C,OAAO,EAAE,iBAAiB,GACzB,OAAO,CAAC,SAAS,gBAAgB,EAAE,CAAC,CAsBtC"}
@@ -0,0 +1,26 @@
1
+ import { planTopology } from './topology.js';
2
+ export async function restartServices(services, runtime) {
3
+ const plan = planTopology(services);
4
+ for (const service of plan.stop)
5
+ await runtime.stop(service.name);
6
+ const results = new Map();
7
+ for (const service of plan.start) {
8
+ if (service.dependsOn.some((dependency) => results.get(dependency)?.status !== 'ready')) {
9
+ results.set(service.name, { name: service.name, status: 'blocked' });
10
+ continue;
11
+ }
12
+ try {
13
+ await runtime.start(service.name, service);
14
+ results.set(service.name, { name: service.name, status: 'ready' });
15
+ }
16
+ catch (error) {
17
+ results.set(service.name, {
18
+ name: service.name,
19
+ status: 'failed',
20
+ error: error instanceof Error ? error.message : String(error),
21
+ });
22
+ }
23
+ }
24
+ return plan.start.map((service) => results.get(service.name));
25
+ }
26
+ //# sourceMappingURL=deployment.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deployment.js","sourceRoot":"","sources":["../src/deployment.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAY7C,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,QAA0C,EAC1C,OAA0B;IAE1B,MAAM,IAAI,GAAG,YAAY,CAAC,QAAQ,CAAC,CAAC;IACpC,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,IAAI;QAAE,MAAM,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IAElE,MAAM,OAAO,GAAG,IAAI,GAAG,EAA4B,CAAC;IACpD,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;QACjC,IAAI,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,UAAU,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,MAAM,KAAK,OAAO,CAAC,EAAE,CAAC;YACxF,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC,CAAC;YACrE,SAAS;QACX,CAAC;QACD,IAAI,CAAC;YACH,MAAM,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;YAC3C,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,CAAC;QACrE,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE;gBACxB,IAAI,EAAE,OAAO,CAAC,IAAI;gBAClB,MAAM,EAAE,QAAQ;gBAChB,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;aAC9D,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,CAAE,CAAC,CAAC;AACjE,CAAC"}
@@ -0,0 +1,24 @@
1
+ export interface DoctorCheck {
2
+ readonly id: string;
3
+ readonly ok: boolean;
4
+ readonly detail: string;
5
+ }
6
+ export interface DoctorResult {
7
+ readonly ok: boolean;
8
+ readonly checks: readonly DoctorCheck[];
9
+ }
10
+ export interface DoctorOptions {
11
+ readonly envFile: string;
12
+ readonly serviceIds: readonly string[];
13
+ readonly workspaceRoot: string;
14
+ }
15
+ interface DoctorRuntime {
16
+ readonly canConnect: (host: string, port: number) => Promise<boolean>;
17
+ readonly exists: (path: string) => boolean;
18
+ readonly findBootFiles: (directory: string) => readonly string[];
19
+ readonly nodeVersion: string;
20
+ readonly readText: (path: string) => string;
21
+ }
22
+ export declare function inspectDeployment(options: DoctorOptions, runtime?: DoctorRuntime): Promise<DoctorResult>;
23
+ export {};
24
+ //# sourceMappingURL=doctor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"doctor.d.ts","sourceRoot":"","sources":["../src/doctor.ts"],"names":[],"mappings":"AAOA,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,EAAE,OAAO,CAAC;IACrB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,EAAE,EAAE,OAAO,CAAC;IACrB,QAAQ,CAAC,MAAM,EAAE,SAAS,WAAW,EAAE,CAAC;CACzC;AAED,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,UAAU,EAAE,SAAS,MAAM,EAAE,CAAC;IACvC,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;CAChC;AAED,UAAU,aAAa;IACrB,QAAQ,CAAC,UAAU,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IACtE,QAAQ,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC;IAC3C,QAAQ,CAAC,aAAa,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,SAAS,MAAM,EAAE,CAAC;IACjE,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,CAAC;CAC7C;AAED,wBAAsB,iBAAiB,CACrC,OAAO,EAAE,aAAa,EACtB,OAAO,GAAE,aAA8B,GACtC,OAAO,CAAC,YAAY,CAAC,CAqDvB"}