hostfn 0.1.5 → 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.
Files changed (143) hide show
  1. package/README.md +1 -2
  2. package/dist/index.js +0 -0
  3. package/package.json +14 -3
  4. package/src/__tests__/core/sync.test.ts +42 -0
  5. package/src/__tests__/core/workspace.test.ts +180 -0
  6. package/src/commands/deploy.ts +122 -83
  7. package/src/commands/init.ts +1 -1
  8. package/src/config/loader.ts +1 -1
  9. package/src/config/schema.ts +1 -1
  10. package/src/core/ssh.ts +2 -0
  11. package/src/core/sync.ts +64 -23
  12. package/src/core/workspace.ts +111 -6
  13. package/dist/__tests__/core/backup.test.d.ts +0 -2
  14. package/dist/__tests__/core/backup.test.d.ts.map +0 -1
  15. package/dist/__tests__/core/backup.test.js +0 -108
  16. package/dist/__tests__/core/backup.test.js.map +0 -1
  17. package/dist/__tests__/core/health.test.d.ts +0 -2
  18. package/dist/__tests__/core/health.test.d.ts.map +0 -1
  19. package/dist/__tests__/core/health.test.js +0 -97
  20. package/dist/__tests__/core/health.test.js.map +0 -1
  21. package/dist/__tests__/core/lock.test.d.ts +0 -2
  22. package/dist/__tests__/core/lock.test.d.ts.map +0 -1
  23. package/dist/__tests__/core/lock.test.js +0 -136
  24. package/dist/__tests__/core/lock.test.js.map +0 -1
  25. package/dist/__tests__/core/nginx-multi-domain.test.d.ts +0 -2
  26. package/dist/__tests__/core/nginx-multi-domain.test.d.ts.map +0 -1
  27. package/dist/__tests__/core/nginx-multi-domain.test.js +0 -158
  28. package/dist/__tests__/core/nginx-multi-domain.test.js.map +0 -1
  29. package/dist/__tests__/runtimes/pm2.test.d.ts +0 -2
  30. package/dist/__tests__/runtimes/pm2.test.d.ts.map +0 -1
  31. package/dist/__tests__/runtimes/pm2.test.js +0 -111
  32. package/dist/__tests__/runtimes/pm2.test.js.map +0 -1
  33. package/dist/__tests__/utils/validation.test.d.ts +0 -2
  34. package/dist/__tests__/utils/validation.test.d.ts.map +0 -1
  35. package/dist/__tests__/utils/validation.test.js +0 -136
  36. package/dist/__tests__/utils/validation.test.js.map +0 -1
  37. package/dist/commands/deploy.d.ts +0 -11
  38. package/dist/commands/deploy.d.ts.map +0 -1
  39. package/dist/commands/deploy.js +0 -636
  40. package/dist/commands/deploy.js.map +0 -1
  41. package/dist/commands/env.d.ts +0 -21
  42. package/dist/commands/env.d.ts.map +0 -1
  43. package/dist/commands/env.js +0 -317
  44. package/dist/commands/env.js.map +0 -1
  45. package/dist/commands/expose.d.ts +0 -6
  46. package/dist/commands/expose.d.ts.map +0 -1
  47. package/dist/commands/expose.js +0 -379
  48. package/dist/commands/expose.js.map +0 -1
  49. package/dist/commands/init.d.ts +0 -2
  50. package/dist/commands/init.d.ts.map +0 -1
  51. package/dist/commands/init.js +0 -175
  52. package/dist/commands/init.js.map +0 -1
  53. package/dist/commands/logs.d.ts +0 -10
  54. package/dist/commands/logs.d.ts.map +0 -1
  55. package/dist/commands/logs.js +0 -75
  56. package/dist/commands/logs.js.map +0 -1
  57. package/dist/commands/rollback.d.ts +0 -6
  58. package/dist/commands/rollback.d.ts.map +0 -1
  59. package/dist/commands/rollback.js +0 -113
  60. package/dist/commands/rollback.js.map +0 -1
  61. package/dist/commands/server/info.d.ts +0 -2
  62. package/dist/commands/server/info.d.ts.map +0 -1
  63. package/dist/commands/server/info.js +0 -104
  64. package/dist/commands/server/info.js.map +0 -1
  65. package/dist/commands/server/setup.d.ts +0 -11
  66. package/dist/commands/server/setup.d.ts.map +0 -1
  67. package/dist/commands/server/setup.js +0 -161
  68. package/dist/commands/server/setup.js.map +0 -1
  69. package/dist/commands/status.d.ts +0 -6
  70. package/dist/commands/status.d.ts.map +0 -1
  71. package/dist/commands/status.js +0 -120
  72. package/dist/commands/status.js.map +0 -1
  73. package/dist/config/loader.d.ts +0 -21
  74. package/dist/config/loader.d.ts.map +0 -1
  75. package/dist/config/loader.js +0 -54
  76. package/dist/config/loader.js.map +0 -1
  77. package/dist/config/schema.d.ts +0 -323
  78. package/dist/config/schema.d.ts.map +0 -1
  79. package/dist/config/schema.js +0 -108
  80. package/dist/config/schema.js.map +0 -1
  81. package/dist/core/backup.d.ts +0 -34
  82. package/dist/core/backup.d.ts.map +0 -1
  83. package/dist/core/backup.js +0 -95
  84. package/dist/core/backup.js.map +0 -1
  85. package/dist/core/health.d.ts +0 -31
  86. package/dist/core/health.d.ts.map +0 -1
  87. package/dist/core/health.js +0 -78
  88. package/dist/core/health.js.map +0 -1
  89. package/dist/core/local.d.ts +0 -19
  90. package/dist/core/local.d.ts.map +0 -1
  91. package/dist/core/local.js +0 -50
  92. package/dist/core/local.js.map +0 -1
  93. package/dist/core/lock.d.ts +0 -28
  94. package/dist/core/lock.d.ts.map +0 -1
  95. package/dist/core/lock.js +0 -89
  96. package/dist/core/lock.js.map +0 -1
  97. package/dist/core/nginx.d.ts +0 -43
  98. package/dist/core/nginx.d.ts.map +0 -1
  99. package/dist/core/nginx.js +0 -131
  100. package/dist/core/nginx.js.map +0 -1
  101. package/dist/core/ssh.d.ts +0 -79
  102. package/dist/core/ssh.d.ts.map +0 -1
  103. package/dist/core/ssh.js +0 -264
  104. package/dist/core/ssh.js.map +0 -1
  105. package/dist/core/sync.d.ts +0 -25
  106. package/dist/core/sync.d.ts.map +0 -1
  107. package/dist/core/sync.js +0 -117
  108. package/dist/core/sync.js.map +0 -1
  109. package/dist/core/workspace.d.ts +0 -13
  110. package/dist/core/workspace.d.ts.map +0 -1
  111. package/dist/core/workspace.js +0 -141
  112. package/dist/core/workspace.js.map +0 -1
  113. package/dist/index.d.ts +0 -3
  114. package/dist/index.d.ts.map +0 -1
  115. package/dist/index.js.map +0 -1
  116. package/dist/runtimes/base.d.ts +0 -115
  117. package/dist/runtimes/base.d.ts.map +0 -1
  118. package/dist/runtimes/base.js +0 -16
  119. package/dist/runtimes/base.js.map +0 -1
  120. package/dist/runtimes/nodejs/detector.d.ts +0 -47
  121. package/dist/runtimes/nodejs/detector.d.ts.map +0 -1
  122. package/dist/runtimes/nodejs/detector.js +0 -143
  123. package/dist/runtimes/nodejs/detector.js.map +0 -1
  124. package/dist/runtimes/nodejs/index.d.ts +0 -14
  125. package/dist/runtimes/nodejs/index.d.ts.map +0 -1
  126. package/dist/runtimes/nodejs/index.js +0 -213
  127. package/dist/runtimes/nodejs/index.js.map +0 -1
  128. package/dist/runtimes/nodejs/pm2.d.ts +0 -17
  129. package/dist/runtimes/nodejs/pm2.d.ts.map +0 -1
  130. package/dist/runtimes/nodejs/pm2.js +0 -60
  131. package/dist/runtimes/nodejs/pm2.js.map +0 -1
  132. package/dist/runtimes/registry.d.ts +0 -34
  133. package/dist/runtimes/registry.d.ts.map +0 -1
  134. package/dist/runtimes/registry.js +0 -58
  135. package/dist/runtimes/registry.js.map +0 -1
  136. package/dist/utils/logger.d.ts +0 -47
  137. package/dist/utils/logger.d.ts.map +0 -1
  138. package/dist/utils/logger.js +0 -76
  139. package/dist/utils/logger.js.map +0 -1
  140. package/dist/utils/validation.d.ts +0 -32
  141. package/dist/utils/validation.d.ts.map +0 -1
  142. package/dist/utils/validation.js +0 -125
  143. 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"}
@@ -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"}
@@ -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
@@ -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"}
@@ -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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"}