hostfn 0.1.4 → 0.1.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +1 -2
- package/dist/index.js +7 -1
- package/package.json +18 -6
- package/src/__tests__/core/sync.test.ts +42 -0
- package/src/__tests__/core/workspace.test.ts +180 -0
- package/src/commands/deploy.ts +122 -83
- package/src/commands/init.ts +1 -1
- package/src/config/loader.ts +1 -1
- package/src/config/schema.ts +1 -1
- package/src/core/ssh.ts +2 -0
- package/src/core/sync.ts +64 -23
- package/src/core/workspace.ts +111 -6
- package/src/index.ts +8 -1
- package/dist/__tests__/core/backup.test.d.ts +0 -2
- package/dist/__tests__/core/backup.test.d.ts.map +0 -1
- package/dist/__tests__/core/backup.test.js +0 -108
- package/dist/__tests__/core/backup.test.js.map +0 -1
- package/dist/__tests__/core/health.test.d.ts +0 -2
- package/dist/__tests__/core/health.test.d.ts.map +0 -1
- package/dist/__tests__/core/health.test.js +0 -97
- package/dist/__tests__/core/health.test.js.map +0 -1
- package/dist/__tests__/core/lock.test.d.ts +0 -2
- package/dist/__tests__/core/lock.test.d.ts.map +0 -1
- package/dist/__tests__/core/lock.test.js +0 -136
- package/dist/__tests__/core/lock.test.js.map +0 -1
- package/dist/__tests__/core/nginx-multi-domain.test.d.ts +0 -2
- package/dist/__tests__/core/nginx-multi-domain.test.d.ts.map +0 -1
- package/dist/__tests__/core/nginx-multi-domain.test.js +0 -158
- package/dist/__tests__/core/nginx-multi-domain.test.js.map +0 -1
- package/dist/__tests__/runtimes/pm2.test.d.ts +0 -2
- package/dist/__tests__/runtimes/pm2.test.d.ts.map +0 -1
- package/dist/__tests__/runtimes/pm2.test.js +0 -111
- package/dist/__tests__/runtimes/pm2.test.js.map +0 -1
- package/dist/__tests__/utils/validation.test.d.ts +0 -2
- package/dist/__tests__/utils/validation.test.d.ts.map +0 -1
- package/dist/__tests__/utils/validation.test.js +0 -136
- package/dist/__tests__/utils/validation.test.js.map +0 -1
- package/dist/commands/deploy.d.ts +0 -11
- package/dist/commands/deploy.d.ts.map +0 -1
- package/dist/commands/deploy.js +0 -636
- package/dist/commands/deploy.js.map +0 -1
- package/dist/commands/env.d.ts +0 -21
- package/dist/commands/env.d.ts.map +0 -1
- package/dist/commands/env.js +0 -317
- package/dist/commands/env.js.map +0 -1
- package/dist/commands/expose.d.ts +0 -6
- package/dist/commands/expose.d.ts.map +0 -1
- package/dist/commands/expose.js +0 -379
- package/dist/commands/expose.js.map +0 -1
- package/dist/commands/init.d.ts +0 -2
- package/dist/commands/init.d.ts.map +0 -1
- package/dist/commands/init.js +0 -175
- package/dist/commands/init.js.map +0 -1
- package/dist/commands/logs.d.ts +0 -10
- package/dist/commands/logs.d.ts.map +0 -1
- package/dist/commands/logs.js +0 -75
- package/dist/commands/logs.js.map +0 -1
- package/dist/commands/rollback.d.ts +0 -6
- package/dist/commands/rollback.d.ts.map +0 -1
- package/dist/commands/rollback.js +0 -113
- package/dist/commands/rollback.js.map +0 -1
- package/dist/commands/server/info.d.ts +0 -2
- package/dist/commands/server/info.d.ts.map +0 -1
- package/dist/commands/server/info.js +0 -104
- package/dist/commands/server/info.js.map +0 -1
- package/dist/commands/server/setup.d.ts +0 -11
- package/dist/commands/server/setup.d.ts.map +0 -1
- package/dist/commands/server/setup.js +0 -161
- package/dist/commands/server/setup.js.map +0 -1
- package/dist/commands/status.d.ts +0 -6
- package/dist/commands/status.d.ts.map +0 -1
- package/dist/commands/status.js +0 -120
- package/dist/commands/status.js.map +0 -1
- package/dist/config/loader.d.ts +0 -21
- package/dist/config/loader.d.ts.map +0 -1
- package/dist/config/loader.js +0 -54
- package/dist/config/loader.js.map +0 -1
- package/dist/config/schema.d.ts +0 -323
- package/dist/config/schema.d.ts.map +0 -1
- package/dist/config/schema.js +0 -108
- package/dist/config/schema.js.map +0 -1
- package/dist/core/backup.d.ts +0 -34
- package/dist/core/backup.d.ts.map +0 -1
- package/dist/core/backup.js +0 -95
- package/dist/core/backup.js.map +0 -1
- package/dist/core/health.d.ts +0 -31
- package/dist/core/health.d.ts.map +0 -1
- package/dist/core/health.js +0 -78
- package/dist/core/health.js.map +0 -1
- package/dist/core/local.d.ts +0 -19
- package/dist/core/local.d.ts.map +0 -1
- package/dist/core/local.js +0 -50
- package/dist/core/local.js.map +0 -1
- package/dist/core/lock.d.ts +0 -28
- package/dist/core/lock.d.ts.map +0 -1
- package/dist/core/lock.js +0 -89
- package/dist/core/lock.js.map +0 -1
- package/dist/core/nginx.d.ts +0 -43
- package/dist/core/nginx.d.ts.map +0 -1
- package/dist/core/nginx.js +0 -131
- package/dist/core/nginx.js.map +0 -1
- package/dist/core/ssh.d.ts +0 -79
- package/dist/core/ssh.d.ts.map +0 -1
- package/dist/core/ssh.js +0 -264
- package/dist/core/ssh.js.map +0 -1
- package/dist/core/sync.d.ts +0 -25
- package/dist/core/sync.d.ts.map +0 -1
- package/dist/core/sync.js +0 -117
- package/dist/core/sync.js.map +0 -1
- package/dist/core/workspace.d.ts +0 -13
- package/dist/core/workspace.d.ts.map +0 -1
- package/dist/core/workspace.js +0 -141
- package/dist/core/workspace.js.map +0 -1
- package/dist/index.d.ts +0 -3
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js.map +0 -1
- package/dist/runtimes/base.d.ts +0 -115
- package/dist/runtimes/base.d.ts.map +0 -1
- package/dist/runtimes/base.js +0 -16
- package/dist/runtimes/base.js.map +0 -1
- package/dist/runtimes/nodejs/detector.d.ts +0 -47
- package/dist/runtimes/nodejs/detector.d.ts.map +0 -1
- package/dist/runtimes/nodejs/detector.js +0 -143
- package/dist/runtimes/nodejs/detector.js.map +0 -1
- package/dist/runtimes/nodejs/index.d.ts +0 -14
- package/dist/runtimes/nodejs/index.d.ts.map +0 -1
- package/dist/runtimes/nodejs/index.js +0 -213
- package/dist/runtimes/nodejs/index.js.map +0 -1
- package/dist/runtimes/nodejs/pm2.d.ts +0 -17
- package/dist/runtimes/nodejs/pm2.d.ts.map +0 -1
- package/dist/runtimes/nodejs/pm2.js +0 -60
- package/dist/runtimes/nodejs/pm2.js.map +0 -1
- package/dist/runtimes/registry.d.ts +0 -34
- package/dist/runtimes/registry.d.ts.map +0 -1
- package/dist/runtimes/registry.js +0 -58
- package/dist/runtimes/registry.js.map +0 -1
- package/dist/utils/logger.d.ts +0 -47
- package/dist/utils/logger.d.ts.map +0 -1
- package/dist/utils/logger.js +0 -76
- package/dist/utils/logger.js.map +0 -1
- package/dist/utils/validation.d.ts +0 -32
- package/dist/utils/validation.d.ts.map +0 -1
- package/dist/utils/validation.js +0 -125
- package/dist/utils/validation.js.map +0 -1
|
@@ -1,60 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* PM2 process manager for Node.js
|
|
3
|
-
*/
|
|
4
|
-
export class PM2Manager {
|
|
5
|
-
name = 'pm2';
|
|
6
|
-
generateStartCommand(config, environment) {
|
|
7
|
-
const serviceName = `${config.name}-${environment}`;
|
|
8
|
-
const entry = config.start.entry || 'dist/index.js';
|
|
9
|
-
return `pm2 start ${entry} --name ${serviceName} -i max --env ${environment}`;
|
|
10
|
-
}
|
|
11
|
-
generateReloadCommand(serviceName) {
|
|
12
|
-
return `pm2 reload ${serviceName} --update-env`;
|
|
13
|
-
}
|
|
14
|
-
generateStopCommand(serviceName) {
|
|
15
|
-
return `pm2 stop ${serviceName}`;
|
|
16
|
-
}
|
|
17
|
-
generateStatusCommand(serviceName) {
|
|
18
|
-
return `pm2 list | grep ${serviceName}`;
|
|
19
|
-
}
|
|
20
|
-
generateLogsCommand(serviceName, lines = 100) {
|
|
21
|
-
return `pm2 logs ${serviceName} --lines ${lines}`;
|
|
22
|
-
}
|
|
23
|
-
/**
|
|
24
|
-
* Generate PM2 ecosystem config file content
|
|
25
|
-
*/
|
|
26
|
-
generateEcosystemConfig(config, environment, envVars = {}) {
|
|
27
|
-
const serviceName = `${config.name}-${environment}`;
|
|
28
|
-
const entry = config.start.entry || 'dist/index.js';
|
|
29
|
-
// Merge base env with provided env vars
|
|
30
|
-
const allEnv = {
|
|
31
|
-
NODE_ENV: environment,
|
|
32
|
-
PORT: config.port || 3000,
|
|
33
|
-
...envVars
|
|
34
|
-
};
|
|
35
|
-
// Generate env object string
|
|
36
|
-
const envString = Object.entries(allEnv)
|
|
37
|
-
.map(([key, value]) => ` ${key}: ${JSON.stringify(value)}`)
|
|
38
|
-
.join(',\n');
|
|
39
|
-
return `module.exports = {
|
|
40
|
-
apps: [{
|
|
41
|
-
name: '${serviceName}',
|
|
42
|
-
script: '${entry}',
|
|
43
|
-
instances: 'max',
|
|
44
|
-
exec_mode: 'cluster',
|
|
45
|
-
env: {
|
|
46
|
-
${envString}
|
|
47
|
-
},
|
|
48
|
-
error_file: './logs/err.log',
|
|
49
|
-
out_file: './logs/out.log',
|
|
50
|
-
time: true,
|
|
51
|
-
autorestart: true,
|
|
52
|
-
max_restarts: 10,
|
|
53
|
-
min_uptime: '10s',
|
|
54
|
-
max_memory_restart: '1G'
|
|
55
|
-
}]
|
|
56
|
-
};
|
|
57
|
-
`;
|
|
58
|
-
}
|
|
59
|
-
}
|
|
60
|
-
//# sourceMappingURL=pm2.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"pm2.js","sourceRoot":"","sources":["../../../src/runtimes/nodejs/pm2.ts"],"names":[],"mappings":"AAEA;;GAEG;AACH,MAAM,OAAO,UAAU;IACZ,IAAI,GAAG,KAAK,CAAC;IAEtB,oBAAoB,CAAC,MAAqB,EAAE,WAAmB;QAC7D,MAAM,WAAW,GAAG,GAAG,MAAM,CAAC,IAAI,IAAI,WAAW,EAAE,CAAC;QACpD,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,KAAK,IAAI,eAAe,CAAC;QAEpD,OAAO,aAAa,KAAK,WAAW,WAAW,iBAAiB,WAAW,EAAE,CAAC;IAChF,CAAC;IAED,qBAAqB,CAAC,WAAmB;QACvC,OAAO,cAAc,WAAW,eAAe,CAAC;IAClD,CAAC;IAED,mBAAmB,CAAC,WAAmB;QACrC,OAAO,YAAY,WAAW,EAAE,CAAC;IACnC,CAAC;IAED,qBAAqB,CAAC,WAAmB;QACvC,OAAO,mBAAmB,WAAW,EAAE,CAAC;IAC1C,CAAC;IAED,mBAAmB,CAAC,WAAmB,EAAE,QAAgB,GAAG;QAC1D,OAAO,YAAY,WAAW,YAAY,KAAK,EAAE,CAAC;IACpD,CAAC;IAED;;OAEG;IACH,uBAAuB,CAAC,MAAqB,EAAE,WAAmB,EAAE,UAAkC,EAAE;QACtG,MAAM,WAAW,GAAG,GAAG,MAAM,CAAC,IAAI,IAAI,WAAW,EAAE,CAAC;QACpD,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,KAAK,IAAI,eAAe,CAAC;QAEpD,wCAAwC;QACxC,MAAM,MAAM,GAAG;YACb,QAAQ,EAAE,WAAW;YACrB,IAAI,EAAE,MAAM,CAAC,IAAI,IAAI,IAAI;YACzB,GAAG,OAAO;SACX,CAAC;QAEF,6BAA6B;QAC7B,MAAM,SAAS,GAAG,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC;aACrC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,SAAS,GAAG,KAAK,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC;aAC/D,IAAI,CAAC,KAAK,CAAC,CAAC;QAEf,OAAO;;aAEE,WAAW;eACT,KAAK;;;;EAIlB,SAAS;;;;;;;;;;;CAWV,CAAC;IACA,CAAC;CACF"}
|
|
@@ -1,34 +0,0 @@
|
|
|
1
|
-
import { Runtime } from '../config/schema.js';
|
|
2
|
-
import { RuntimeAdapter } from './base.js';
|
|
3
|
-
/**
|
|
4
|
-
* Runtime adapter registry
|
|
5
|
-
* Manages all available runtime adapters
|
|
6
|
-
*/
|
|
7
|
-
export declare class RuntimeRegistry {
|
|
8
|
-
private static adapters;
|
|
9
|
-
/**
|
|
10
|
-
* Register a runtime adapter
|
|
11
|
-
*/
|
|
12
|
-
static register(adapter: RuntimeAdapter): void;
|
|
13
|
-
/**
|
|
14
|
-
* Get runtime adapter by name
|
|
15
|
-
*/
|
|
16
|
-
static get(runtime: Runtime): RuntimeAdapter;
|
|
17
|
-
/**
|
|
18
|
-
* Get all registered adapters
|
|
19
|
-
*/
|
|
20
|
-
static getAll(): RuntimeAdapter[];
|
|
21
|
-
/**
|
|
22
|
-
* Check if runtime is supported
|
|
23
|
-
*/
|
|
24
|
-
static has(runtime: Runtime): boolean;
|
|
25
|
-
/**
|
|
26
|
-
* Auto-detect runtime in project directory
|
|
27
|
-
*/
|
|
28
|
-
static detect(cwd: string): Promise<{
|
|
29
|
-
runtime: Runtime;
|
|
30
|
-
adapter: RuntimeAdapter;
|
|
31
|
-
confidence: number;
|
|
32
|
-
} | null>;
|
|
33
|
-
}
|
|
34
|
-
//# sourceMappingURL=registry.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/runtimes/registry.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAC9C,OAAO,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAE3C;;;GAGG;AACH,qBAAa,eAAe;IAC1B,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAsC;IAE7D;;OAEG;IACH,MAAM,CAAC,QAAQ,CAAC,OAAO,EAAE,cAAc,GAAG,IAAI;IAI9C;;OAEG;IACH,MAAM,CAAC,GAAG,CAAC,OAAO,EAAE,OAAO,GAAG,cAAc;IAW5C;;OAEG;IACH,MAAM,CAAC,MAAM,IAAI,cAAc,EAAE;IAIjC;;OAEG;IACH,MAAM,CAAC,GAAG,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO;IAIrC;;OAEG;WACU,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;QACxC,OAAO,EAAE,OAAO,CAAC;QACjB,OAAO,EAAE,cAAc,CAAC;QACxB,UAAU,EAAE,MAAM,CAAC;KACpB,GAAG,IAAI,CAAC;CAuBV"}
|
|
@@ -1,58 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Runtime adapter registry
|
|
3
|
-
* Manages all available runtime adapters
|
|
4
|
-
*/
|
|
5
|
-
export class RuntimeRegistry {
|
|
6
|
-
static adapters = new Map();
|
|
7
|
-
/**
|
|
8
|
-
* Register a runtime adapter
|
|
9
|
-
*/
|
|
10
|
-
static register(adapter) {
|
|
11
|
-
this.adapters.set(adapter.name, adapter);
|
|
12
|
-
}
|
|
13
|
-
/**
|
|
14
|
-
* Get runtime adapter by name
|
|
15
|
-
*/
|
|
16
|
-
static get(runtime) {
|
|
17
|
-
const adapter = this.adapters.get(runtime);
|
|
18
|
-
if (!adapter) {
|
|
19
|
-
throw new Error(`Runtime adapter not found: ${runtime}\n` +
|
|
20
|
-
`Available runtimes: ${Array.from(this.adapters.keys()).join(', ')}`);
|
|
21
|
-
}
|
|
22
|
-
return adapter;
|
|
23
|
-
}
|
|
24
|
-
/**
|
|
25
|
-
* Get all registered adapters
|
|
26
|
-
*/
|
|
27
|
-
static getAll() {
|
|
28
|
-
return Array.from(this.adapters.values());
|
|
29
|
-
}
|
|
30
|
-
/**
|
|
31
|
-
* Check if runtime is supported
|
|
32
|
-
*/
|
|
33
|
-
static has(runtime) {
|
|
34
|
-
return this.adapters.has(runtime);
|
|
35
|
-
}
|
|
36
|
-
/**
|
|
37
|
-
* Auto-detect runtime in project directory
|
|
38
|
-
*/
|
|
39
|
-
static async detect(cwd) {
|
|
40
|
-
const results = await Promise.all(Array.from(this.adapters.values()).map(async (adapter) => {
|
|
41
|
-
const result = await adapter.detect(cwd);
|
|
42
|
-
return {
|
|
43
|
-
runtime: adapter.name,
|
|
44
|
-
adapter,
|
|
45
|
-
...result,
|
|
46
|
-
};
|
|
47
|
-
}));
|
|
48
|
-
// Sort by confidence and get the best match
|
|
49
|
-
const sorted = results
|
|
50
|
-
.filter(r => r.detected)
|
|
51
|
-
.sort((a, b) => b.confidence - a.confidence);
|
|
52
|
-
if (sorted.length === 0) {
|
|
53
|
-
return null;
|
|
54
|
-
}
|
|
55
|
-
return sorted[0];
|
|
56
|
-
}
|
|
57
|
-
}
|
|
58
|
-
//# sourceMappingURL=registry.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/runtimes/registry.ts"],"names":[],"mappings":"AAGA;;;GAGG;AACH,MAAM,OAAO,eAAe;IAClB,MAAM,CAAC,QAAQ,GAAG,IAAI,GAAG,EAA2B,CAAC;IAE7D;;OAEG;IACH,MAAM,CAAC,QAAQ,CAAC,OAAuB;QACrC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IAC3C,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,GAAG,CAAC,OAAgB;QACzB,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QAC3C,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,MAAM,IAAI,KAAK,CACb,8BAA8B,OAAO,IAAI;gBACzC,uBAAuB,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CACrE,CAAC;QACJ,CAAC;QACD,OAAO,OAAO,CAAC;IACjB,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,MAAM;QACX,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;IAC5C,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,GAAG,CAAC,OAAgB;QACzB,OAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IACpC,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,GAAW;QAK7B,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,GAAG,CAC/B,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE;YACvD,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YACzC,OAAO;gBACL,OAAO,EAAE,OAAO,CAAC,IAAI;gBACrB,OAAO;gBACP,GAAG,MAAM;aACV,CAAC;QACJ,CAAC,CAAC,CACH,CAAC;QAEF,4CAA4C;QAC5C,MAAM,MAAM,GAAG,OAAO;aACnB,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC;aACvB,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,GAAG,CAAC,CAAC,UAAU,CAAC,CAAC;QAE/C,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACxB,OAAO,IAAI,CAAC;QACd,CAAC;QAED,OAAO,MAAM,CAAC,CAAC,CAAC,CAAC;IACnB,CAAC"}
|
package/dist/utils/logger.d.ts
DELETED
|
@@ -1,47 +0,0 @@
|
|
|
1
|
-
export declare class Logger {
|
|
2
|
-
/**
|
|
3
|
-
* Log info message
|
|
4
|
-
*/
|
|
5
|
-
static info(message: string): void;
|
|
6
|
-
/**
|
|
7
|
-
* Log success message
|
|
8
|
-
*/
|
|
9
|
-
static success(message: string): void;
|
|
10
|
-
/**
|
|
11
|
-
* Log warning message
|
|
12
|
-
*/
|
|
13
|
-
static warn(message: string): void;
|
|
14
|
-
/**
|
|
15
|
-
* Log error message
|
|
16
|
-
*/
|
|
17
|
-
static error(message: string): void;
|
|
18
|
-
/**
|
|
19
|
-
* Log step message (with emoji)
|
|
20
|
-
*/
|
|
21
|
-
static step(emoji: string, message: string): void;
|
|
22
|
-
/**
|
|
23
|
-
* Log header/title
|
|
24
|
-
*/
|
|
25
|
-
static header(message: string): void;
|
|
26
|
-
/**
|
|
27
|
-
* Log section
|
|
28
|
-
*/
|
|
29
|
-
static section(message: string): void;
|
|
30
|
-
/**
|
|
31
|
-
* Log plain message
|
|
32
|
-
*/
|
|
33
|
-
static log(message: string): void;
|
|
34
|
-
/**
|
|
35
|
-
* Log empty line
|
|
36
|
-
*/
|
|
37
|
-
static br(): void;
|
|
38
|
-
/**
|
|
39
|
-
* Log key-value pair
|
|
40
|
-
*/
|
|
41
|
-
static kv(key: string, value: string): void;
|
|
42
|
-
/**
|
|
43
|
-
* Log command to run
|
|
44
|
-
*/
|
|
45
|
-
static command(cmd: string): void;
|
|
46
|
-
}
|
|
47
|
-
//# sourceMappingURL=logger.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../src/utils/logger.ts"],"names":[],"mappings":"AAEA,qBAAa,MAAM;IACjB;;OAEG;IACH,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAIlC;;OAEG;IACH,MAAM,CAAC,OAAO,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAIrC;;OAEG;IACH,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAIlC;;OAEG;IACH,MAAM,CAAC,KAAK,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAInC;;OAEG;IACH,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI;IAIjD;;OAEG;IACH,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAQpC;;OAEG;IACH,MAAM,CAAC,OAAO,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAMrC;;OAEG;IACH,MAAM,CAAC,GAAG,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAIjC;;OAEG;IACH,MAAM,CAAC,EAAE,IAAI,IAAI;IAIjB;;OAEG;IACH,MAAM,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI;IAI3C;;OAEG;IACH,MAAM,CAAC,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;CAGlC"}
|
package/dist/utils/logger.js
DELETED
|
@@ -1,76 +0,0 @@
|
|
|
1
|
-
import chalk from 'chalk';
|
|
2
|
-
export class Logger {
|
|
3
|
-
/**
|
|
4
|
-
* Log info message
|
|
5
|
-
*/
|
|
6
|
-
static info(message) {
|
|
7
|
-
console.log(chalk.blue('ℹ'), message);
|
|
8
|
-
}
|
|
9
|
-
/**
|
|
10
|
-
* Log success message
|
|
11
|
-
*/
|
|
12
|
-
static success(message) {
|
|
13
|
-
console.log(chalk.green('✓'), message);
|
|
14
|
-
}
|
|
15
|
-
/**
|
|
16
|
-
* Log warning message
|
|
17
|
-
*/
|
|
18
|
-
static warn(message) {
|
|
19
|
-
console.log(chalk.yellow('⚠'), message);
|
|
20
|
-
}
|
|
21
|
-
/**
|
|
22
|
-
* Log error message
|
|
23
|
-
*/
|
|
24
|
-
static error(message) {
|
|
25
|
-
console.log(chalk.red('✗'), message);
|
|
26
|
-
}
|
|
27
|
-
/**
|
|
28
|
-
* Log step message (with emoji)
|
|
29
|
-
*/
|
|
30
|
-
static step(emoji, message) {
|
|
31
|
-
console.log(emoji, chalk.bold(message));
|
|
32
|
-
}
|
|
33
|
-
/**
|
|
34
|
-
* Log header/title
|
|
35
|
-
*/
|
|
36
|
-
static header(message) {
|
|
37
|
-
console.log();
|
|
38
|
-
console.log(chalk.bold.cyan('='.repeat(50)));
|
|
39
|
-
console.log(chalk.bold.cyan(message));
|
|
40
|
-
console.log(chalk.bold.cyan('='.repeat(50)));
|
|
41
|
-
console.log();
|
|
42
|
-
}
|
|
43
|
-
/**
|
|
44
|
-
* Log section
|
|
45
|
-
*/
|
|
46
|
-
static section(message) {
|
|
47
|
-
console.log();
|
|
48
|
-
console.log(chalk.bold(message));
|
|
49
|
-
console.log(chalk.gray('-'.repeat(message.length)));
|
|
50
|
-
}
|
|
51
|
-
/**
|
|
52
|
-
* Log plain message
|
|
53
|
-
*/
|
|
54
|
-
static log(message) {
|
|
55
|
-
console.log(message);
|
|
56
|
-
}
|
|
57
|
-
/**
|
|
58
|
-
* Log empty line
|
|
59
|
-
*/
|
|
60
|
-
static br() {
|
|
61
|
-
console.log();
|
|
62
|
-
}
|
|
63
|
-
/**
|
|
64
|
-
* Log key-value pair
|
|
65
|
-
*/
|
|
66
|
-
static kv(key, value) {
|
|
67
|
-
console.log(` ${chalk.gray(key + ':')} ${value}`);
|
|
68
|
-
}
|
|
69
|
-
/**
|
|
70
|
-
* Log command to run
|
|
71
|
-
*/
|
|
72
|
-
static command(cmd) {
|
|
73
|
-
console.log(chalk.gray(' $ ') + chalk.cyan(cmd));
|
|
74
|
-
}
|
|
75
|
-
}
|
|
76
|
-
//# sourceMappingURL=logger.js.map
|
package/dist/utils/logger.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/utils/logger.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,MAAM,OAAO,MAAM;IACjB;;OAEG;IACH,MAAM,CAAC,IAAI,CAAC,OAAe;QACzB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,OAAO,CAAC,CAAC;IACxC,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,OAAO,CAAC,OAAe;QAC5B,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,OAAO,CAAC,CAAC;IACzC,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,IAAI,CAAC,OAAe;QACzB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,OAAO,CAAC,CAAC;IAC1C,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,KAAK,CAAC,OAAe;QAC1B,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,OAAO,CAAC,CAAC;IACvC,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,IAAI,CAAC,KAAa,EAAE,OAAe;QACxC,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;IAC1C,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,MAAM,CAAC,OAAe;QAC3B,OAAO,CAAC,GAAG,EAAE,CAAC;QACd,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QAC7C,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;QACtC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QAC7C,OAAO,CAAC,GAAG,EAAE,CAAC;IAChB,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,OAAO,CAAC,OAAe;QAC5B,OAAO,CAAC,GAAG,EAAE,CAAC;QACd,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;QACjC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;IACtD,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,GAAG,CAAC,OAAe;QACxB,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IACvB,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,EAAE;QACP,OAAO,CAAC,GAAG,EAAE,CAAC;IAChB,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,EAAE,CAAC,GAAW,EAAE,KAAa;QAClC,OAAO,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC,IAAI,KAAK,EAAE,CAAC,CAAC;IACrD,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,OAAO,CAAC,GAAW;QACxB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;IACpD,CAAC;CACF"}
|
|
@@ -1,32 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Validation utilities
|
|
3
|
-
*/
|
|
4
|
-
/**
|
|
5
|
-
* Validate SSH connection string format
|
|
6
|
-
*/
|
|
7
|
-
export declare function validateSSHConnection(connectionString: string): boolean;
|
|
8
|
-
/**
|
|
9
|
-
* Validate HTTP URL format
|
|
10
|
-
*/
|
|
11
|
-
export declare function validateHttpUrl(url: string): boolean;
|
|
12
|
-
/**
|
|
13
|
-
* Validate environment name
|
|
14
|
-
*/
|
|
15
|
-
export declare function validateEnvironmentName(name: string): boolean;
|
|
16
|
-
/**
|
|
17
|
-
* Validate port number
|
|
18
|
-
*/
|
|
19
|
-
export declare function validatePort(port: number): boolean;
|
|
20
|
-
/**
|
|
21
|
-
* Validate Node.js version format
|
|
22
|
-
*/
|
|
23
|
-
export declare function validateNodeVersion(version: string): boolean;
|
|
24
|
-
/**
|
|
25
|
-
* Validate application name
|
|
26
|
-
*/
|
|
27
|
-
export declare function validateAppName(name: string): boolean;
|
|
28
|
-
/**
|
|
29
|
-
* Validate remote directory path
|
|
30
|
-
*/
|
|
31
|
-
export declare function validateRemotePath(path: string): boolean;
|
|
32
|
-
//# sourceMappingURL=validation.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"validation.d.ts","sourceRoot":"","sources":["../../src/utils/validation.ts"],"names":[],"mappings":"AAEA;;GAEG;AAEH;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,gBAAgB,EAAE,MAAM,GAAG,OAAO,CAavE;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAcpD;AAED;;GAEG;AACH,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAW7D;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAYlD;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAe5D;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAqBrD;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAqBxD"}
|
package/dist/utils/validation.js
DELETED
|
@@ -1,125 +0,0 @@
|
|
|
1
|
-
import { Logger } from './logger.js';
|
|
2
|
-
/**
|
|
3
|
-
* Validation utilities
|
|
4
|
-
*/
|
|
5
|
-
/**
|
|
6
|
-
* Validate SSH connection string format
|
|
7
|
-
*/
|
|
8
|
-
export function validateSSHConnection(connectionString) {
|
|
9
|
-
const regex = /^([^@]+)@([^:]+)(?::(\d+))?$/;
|
|
10
|
-
if (!regex.test(connectionString)) {
|
|
11
|
-
Logger.error(`Invalid SSH connection string: ${connectionString}`);
|
|
12
|
-
Logger.info('Expected format: user@host or user@host:port');
|
|
13
|
-
Logger.info('Examples:');
|
|
14
|
-
Logger.log(' ubuntu@123.45.67.89');
|
|
15
|
-
Logger.log(' ubuntu@myserver.com:2222');
|
|
16
|
-
return false;
|
|
17
|
-
}
|
|
18
|
-
return true;
|
|
19
|
-
}
|
|
20
|
-
/**
|
|
21
|
-
* Validate HTTP URL format
|
|
22
|
-
*/
|
|
23
|
-
export function validateHttpUrl(url) {
|
|
24
|
-
try {
|
|
25
|
-
const parsed = new URL(url);
|
|
26
|
-
if (!['http:', 'https:'].includes(parsed.protocol)) {
|
|
27
|
-
Logger.error(`Invalid URL protocol: ${parsed.protocol}`);
|
|
28
|
-
Logger.info('Expected: http:// or https://');
|
|
29
|
-
return false;
|
|
30
|
-
}
|
|
31
|
-
return true;
|
|
32
|
-
}
|
|
33
|
-
catch (error) {
|
|
34
|
-
Logger.error(`Invalid URL format: ${url}`);
|
|
35
|
-
Logger.info('Expected format: http://host:port/path');
|
|
36
|
-
return false;
|
|
37
|
-
}
|
|
38
|
-
}
|
|
39
|
-
/**
|
|
40
|
-
* Validate environment name
|
|
41
|
-
*/
|
|
42
|
-
export function validateEnvironmentName(name) {
|
|
43
|
-
const regex = /^[a-zA-Z0-9_-]+$/;
|
|
44
|
-
if (!regex.test(name)) {
|
|
45
|
-
Logger.error(`Invalid environment name: ${name}`);
|
|
46
|
-
Logger.info('Environment names can only contain: a-z, A-Z, 0-9, _, -');
|
|
47
|
-
Logger.info('Examples: production, staging, dev, prod-eu');
|
|
48
|
-
return false;
|
|
49
|
-
}
|
|
50
|
-
return true;
|
|
51
|
-
}
|
|
52
|
-
/**
|
|
53
|
-
* Validate port number
|
|
54
|
-
*/
|
|
55
|
-
export function validatePort(port) {
|
|
56
|
-
if (port < 1 || port > 65535) {
|
|
57
|
-
Logger.error(`Invalid port number: ${port}`);
|
|
58
|
-
Logger.info('Port must be between 1 and 65535');
|
|
59
|
-
return false;
|
|
60
|
-
}
|
|
61
|
-
if (port < 1024) {
|
|
62
|
-
Logger.warn(`Port ${port} is privileged (< 1024) - may require sudo`);
|
|
63
|
-
}
|
|
64
|
-
return true;
|
|
65
|
-
}
|
|
66
|
-
/**
|
|
67
|
-
* Validate Node.js version format
|
|
68
|
-
*/
|
|
69
|
-
export function validateNodeVersion(version) {
|
|
70
|
-
const regex = /^\d+(\.\d+)?(\.\d+)?$/;
|
|
71
|
-
if (!regex.test(version)) {
|
|
72
|
-
Logger.error(`Invalid Node.js version: ${version}`);
|
|
73
|
-
Logger.info('Expected format: 18 or 18.19 or 18.19.0');
|
|
74
|
-
return false;
|
|
75
|
-
}
|
|
76
|
-
const major = parseInt(version.split('.')[0]);
|
|
77
|
-
if (major < 14) {
|
|
78
|
-
Logger.warn(`Node.js ${version} is very old - consider using 18 or 20`);
|
|
79
|
-
}
|
|
80
|
-
return true;
|
|
81
|
-
}
|
|
82
|
-
/**
|
|
83
|
-
* Validate application name
|
|
84
|
-
*/
|
|
85
|
-
export function validateAppName(name) {
|
|
86
|
-
const regex = /^[a-zA-Z0-9_-]+$/;
|
|
87
|
-
if (!regex.test(name)) {
|
|
88
|
-
Logger.error(`Invalid application name: ${name}`);
|
|
89
|
-
Logger.info('Names can only contain: a-z, A-Z, 0-9, _, -');
|
|
90
|
-
Logger.info('Examples: my-app, api_server, webapp-v2');
|
|
91
|
-
return false;
|
|
92
|
-
}
|
|
93
|
-
if (name.length < 2) {
|
|
94
|
-
Logger.error('Application name must be at least 2 characters');
|
|
95
|
-
return false;
|
|
96
|
-
}
|
|
97
|
-
if (name.length > 50) {
|
|
98
|
-
Logger.error('Application name must be less than 50 characters');
|
|
99
|
-
return false;
|
|
100
|
-
}
|
|
101
|
-
return true;
|
|
102
|
-
}
|
|
103
|
-
/**
|
|
104
|
-
* Validate remote directory path
|
|
105
|
-
*/
|
|
106
|
-
export function validateRemotePath(path) {
|
|
107
|
-
if (!path.startsWith('/')) {
|
|
108
|
-
Logger.error(`Remote path must be absolute: ${path}`);
|
|
109
|
-
Logger.info('Example: /var/www/my-app');
|
|
110
|
-
return false;
|
|
111
|
-
}
|
|
112
|
-
if (path.includes('..')) {
|
|
113
|
-
Logger.error('Remote path cannot contain ..');
|
|
114
|
-
return false;
|
|
115
|
-
}
|
|
116
|
-
// Warn about dangerous paths
|
|
117
|
-
const dangerousPaths = ['/', '/etc', '/bin', '/usr', '/var/log', '/root', '/home'];
|
|
118
|
-
if (dangerousPaths.includes(path)) {
|
|
119
|
-
Logger.error(`Refusing to deploy to system directory: ${path}`);
|
|
120
|
-
Logger.info('Use a subdirectory like /var/www/my-app');
|
|
121
|
-
return false;
|
|
122
|
-
}
|
|
123
|
-
return true;
|
|
124
|
-
}
|
|
125
|
-
//# sourceMappingURL=validation.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"validation.js","sourceRoot":"","sources":["../../src/utils/validation.ts"],"names":[],"mappings":"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"}
|