hostfn 0.1.0 → 0.1.2

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 (179) hide show
  1. package/dist/__tests__/core/backup.test.d.ts +2 -0
  2. package/dist/__tests__/core/backup.test.d.ts.map +1 -0
  3. package/dist/__tests__/core/backup.test.js +108 -0
  4. package/dist/__tests__/core/backup.test.js.map +1 -0
  5. package/dist/__tests__/core/health.test.d.ts +2 -0
  6. package/dist/__tests__/core/health.test.d.ts.map +1 -0
  7. package/dist/__tests__/core/health.test.js +97 -0
  8. package/dist/__tests__/core/health.test.js.map +1 -0
  9. package/dist/__tests__/core/lock.test.d.ts +2 -0
  10. package/dist/__tests__/core/lock.test.d.ts.map +1 -0
  11. package/dist/__tests__/core/lock.test.js +136 -0
  12. package/dist/__tests__/core/lock.test.js.map +1 -0
  13. package/dist/__tests__/core/nginx-multi-domain.test.d.ts +2 -0
  14. package/dist/__tests__/core/nginx-multi-domain.test.d.ts.map +1 -0
  15. package/dist/__tests__/core/nginx-multi-domain.test.js +158 -0
  16. package/dist/__tests__/core/nginx-multi-domain.test.js.map +1 -0
  17. package/dist/__tests__/runtimes/pm2.test.d.ts +2 -0
  18. package/dist/__tests__/runtimes/pm2.test.d.ts.map +1 -0
  19. package/dist/__tests__/runtimes/pm2.test.js +111 -0
  20. package/dist/__tests__/runtimes/pm2.test.js.map +1 -0
  21. package/dist/__tests__/utils/validation.test.d.ts +2 -0
  22. package/dist/__tests__/utils/validation.test.d.ts.map +1 -0
  23. package/dist/__tests__/utils/validation.test.js +136 -0
  24. package/dist/__tests__/utils/validation.test.js.map +1 -0
  25. package/dist/commands/deploy.d.ts +11 -0
  26. package/dist/commands/deploy.d.ts.map +1 -0
  27. package/dist/commands/deploy.js +636 -0
  28. package/dist/commands/deploy.js.map +1 -0
  29. package/dist/commands/env.d.ts +21 -0
  30. package/dist/commands/env.d.ts.map +1 -0
  31. package/dist/commands/env.js +317 -0
  32. package/dist/commands/env.js.map +1 -0
  33. package/dist/commands/expose.d.ts +6 -0
  34. package/dist/commands/expose.d.ts.map +1 -0
  35. package/dist/commands/expose.js +379 -0
  36. package/dist/commands/expose.js.map +1 -0
  37. package/dist/commands/init.d.ts +2 -0
  38. package/dist/commands/init.d.ts.map +1 -0
  39. package/dist/commands/init.js +175 -0
  40. package/dist/commands/init.js.map +1 -0
  41. package/dist/commands/logs.d.ts +10 -0
  42. package/dist/commands/logs.d.ts.map +1 -0
  43. package/dist/commands/logs.js +75 -0
  44. package/dist/commands/logs.js.map +1 -0
  45. package/dist/commands/rollback.d.ts +6 -0
  46. package/dist/commands/rollback.d.ts.map +1 -0
  47. package/dist/commands/rollback.js +113 -0
  48. package/dist/commands/rollback.js.map +1 -0
  49. package/dist/commands/server/info.d.ts +2 -0
  50. package/dist/commands/server/info.d.ts.map +1 -0
  51. package/dist/commands/server/info.js +104 -0
  52. package/dist/commands/server/info.js.map +1 -0
  53. package/dist/commands/server/setup.d.ts +11 -0
  54. package/dist/commands/server/setup.d.ts.map +1 -0
  55. package/dist/commands/server/setup.js +161 -0
  56. package/dist/commands/server/setup.js.map +1 -0
  57. package/dist/commands/status.d.ts +6 -0
  58. package/dist/commands/status.d.ts.map +1 -0
  59. package/dist/commands/status.js +120 -0
  60. package/dist/commands/status.js.map +1 -0
  61. package/dist/config/loader.d.ts +21 -0
  62. package/dist/config/loader.d.ts.map +1 -0
  63. package/dist/config/loader.js +54 -0
  64. package/dist/config/loader.js.map +1 -0
  65. package/dist/config/schema.d.ts +323 -0
  66. package/dist/config/schema.d.ts.map +1 -0
  67. package/dist/config/schema.js +108 -0
  68. package/dist/config/schema.js.map +1 -0
  69. package/dist/core/backup.d.ts +34 -0
  70. package/dist/core/backup.d.ts.map +1 -0
  71. package/dist/core/backup.js +95 -0
  72. package/dist/core/backup.js.map +1 -0
  73. package/dist/core/health.d.ts +31 -0
  74. package/dist/core/health.d.ts.map +1 -0
  75. package/dist/core/health.js +78 -0
  76. package/dist/core/health.js.map +1 -0
  77. package/dist/core/local.d.ts +19 -0
  78. package/dist/core/local.d.ts.map +1 -0
  79. package/dist/core/local.js +50 -0
  80. package/dist/core/local.js.map +1 -0
  81. package/dist/core/lock.d.ts +28 -0
  82. package/dist/core/lock.d.ts.map +1 -0
  83. package/dist/core/lock.js +89 -0
  84. package/dist/core/lock.js.map +1 -0
  85. package/dist/core/nginx.d.ts +43 -0
  86. package/dist/core/nginx.d.ts.map +1 -0
  87. package/dist/core/nginx.js +131 -0
  88. package/dist/core/nginx.js.map +1 -0
  89. package/dist/core/ssh.d.ts +79 -0
  90. package/dist/core/ssh.d.ts.map +1 -0
  91. package/dist/core/ssh.js +264 -0
  92. package/dist/core/ssh.js.map +1 -0
  93. package/dist/core/sync.d.ts +25 -0
  94. package/dist/core/sync.d.ts.map +1 -0
  95. package/dist/core/sync.js +117 -0
  96. package/dist/core/sync.js.map +1 -0
  97. package/dist/core/workspace.d.ts +13 -0
  98. package/dist/core/workspace.d.ts.map +1 -0
  99. package/dist/core/workspace.js +141 -0
  100. package/dist/core/workspace.js.map +1 -0
  101. package/dist/index.d.ts +3 -0
  102. package/dist/index.d.ts.map +1 -0
  103. package/dist/index.js +232 -0
  104. package/dist/index.js.map +1 -0
  105. package/dist/runtimes/base.d.ts +115 -0
  106. package/dist/runtimes/base.d.ts.map +1 -0
  107. package/dist/runtimes/base.js +16 -0
  108. package/dist/runtimes/base.js.map +1 -0
  109. package/dist/runtimes/nodejs/detector.d.ts +47 -0
  110. package/dist/runtimes/nodejs/detector.d.ts.map +1 -0
  111. package/dist/runtimes/nodejs/detector.js +143 -0
  112. package/dist/runtimes/nodejs/detector.js.map +1 -0
  113. package/dist/runtimes/nodejs/index.d.ts +14 -0
  114. package/dist/runtimes/nodejs/index.d.ts.map +1 -0
  115. package/dist/runtimes/nodejs/index.js +213 -0
  116. package/dist/runtimes/nodejs/index.js.map +1 -0
  117. package/dist/runtimes/nodejs/pm2.d.ts +17 -0
  118. package/dist/runtimes/nodejs/pm2.d.ts.map +1 -0
  119. package/dist/runtimes/nodejs/pm2.js +60 -0
  120. package/dist/runtimes/nodejs/pm2.js.map +1 -0
  121. package/dist/runtimes/registry.d.ts +34 -0
  122. package/dist/runtimes/registry.d.ts.map +1 -0
  123. package/dist/runtimes/registry.js +58 -0
  124. package/dist/runtimes/registry.js.map +1 -0
  125. package/dist/utils/logger.d.ts +47 -0
  126. package/dist/utils/logger.d.ts.map +1 -0
  127. package/dist/utils/logger.js +76 -0
  128. package/dist/utils/logger.js.map +1 -0
  129. package/dist/utils/validation.d.ts +32 -0
  130. package/dist/utils/validation.d.ts.map +1 -0
  131. package/dist/utils/validation.js +125 -0
  132. package/dist/utils/validation.js.map +1 -0
  133. package/package.json +34 -20
  134. package/{packages/cli/src → src}/__tests__/runtimes/pm2.test.ts +2 -2
  135. package/{packages/cli/src → src}/commands/deploy.ts +39 -23
  136. package/{packages/cli/src → src}/commands/env.ts +19 -6
  137. package/{packages/cli/src → src}/commands/expose.ts +20 -6
  138. package/{packages/cli/src → src}/commands/logs.ts +8 -4
  139. package/{packages/cli/src → src}/commands/rollback.ts +8 -6
  140. package/{packages/cli/src → src}/commands/status.ts +7 -3
  141. package/LICENSE +0 -21
  142. package/README.md +0 -1136
  143. package/_conduct/specs/1.v0.spec.md +0 -1041
  144. package/examples/express-api/package.json +0 -22
  145. package/examples/express-api/src/index.ts +0 -16
  146. package/examples/express-api/tsconfig.json +0 -11
  147. package/examples/github-actions-deploy.yml +0 -40
  148. package/examples/monorepo-config.json +0 -76
  149. package/examples/monorepo-multi-server-config.json +0 -74
  150. package/packages/cli/package.json +0 -40
  151. package/turbo.json +0 -24
  152. /package/{packages/cli/src → src}/__tests__/core/backup.test.ts +0 -0
  153. /package/{packages/cli/src → src}/__tests__/core/health.test.ts +0 -0
  154. /package/{packages/cli/src → src}/__tests__/core/lock.test.ts +0 -0
  155. /package/{packages/cli/src → src}/__tests__/core/nginx-multi-domain.test.ts +0 -0
  156. /package/{packages/cli/src → src}/__tests__/utils/validation.test.ts +0 -0
  157. /package/{packages/cli/src → src}/commands/init.ts +0 -0
  158. /package/{packages/cli/src → src}/commands/server/info.ts +0 -0
  159. /package/{packages/cli/src → src}/commands/server/setup.ts +0 -0
  160. /package/{packages/cli/src → src}/config/loader.ts +0 -0
  161. /package/{packages/cli/src → src}/config/schema.ts +0 -0
  162. /package/{packages/cli/src → src}/core/backup.ts +0 -0
  163. /package/{packages/cli/src → src}/core/health.ts +0 -0
  164. /package/{packages/cli/src → src}/core/local.ts +0 -0
  165. /package/{packages/cli/src → src}/core/lock.ts +0 -0
  166. /package/{packages/cli/src → src}/core/nginx.ts +0 -0
  167. /package/{packages/cli/src → src}/core/ssh.ts +0 -0
  168. /package/{packages/cli/src → src}/core/sync.ts +0 -0
  169. /package/{packages/cli/src → src}/core/workspace.ts +0 -0
  170. /package/{packages/cli/src → src}/index.ts +0 -0
  171. /package/{packages/cli/src → src}/runtimes/base.ts +0 -0
  172. /package/{packages/cli/src → src}/runtimes/nodejs/detector.ts +0 -0
  173. /package/{packages/cli/src → src}/runtimes/nodejs/index.ts +0 -0
  174. /package/{packages/cli/src → src}/runtimes/nodejs/pm2.ts +0 -0
  175. /package/{packages/cli/src → src}/runtimes/registry.ts +0 -0
  176. /package/{packages/cli/src → src}/utils/logger.ts +0 -0
  177. /package/{packages/cli/src → src}/utils/validation.ts +0 -0
  178. /package/{packages/cli/tsconfig.json → tsconfig.json} +0 -0
  179. /package/{packages/cli/vitest.config.ts → vitest.config.ts} +0 -0
@@ -0,0 +1,213 @@
1
+ import { BaseRuntimeAdapter, } from '../base.js';
2
+ import { NodeJSDetector } from './detector.js';
3
+ import { PM2Manager } from './pm2.js';
4
+ /**
5
+ * Node.js runtime adapter
6
+ */
7
+ export class NodeJSAdapter extends BaseRuntimeAdapter {
8
+ name = 'nodejs';
9
+ pm2Manager = new PM2Manager();
10
+ async detect(cwd) {
11
+ return NodeJSDetector.detect(cwd);
12
+ }
13
+ async getDefaultConfig(cwd) {
14
+ const pkg = NodeJSDetector.readPackageJson(cwd);
15
+ if (!pkg) {
16
+ throw new Error('package.json not found');
17
+ }
18
+ const buildCommand = NodeJSDetector.getBuildCommand(pkg);
19
+ const startCommand = NodeJSDetector.getStartCommand(pkg);
20
+ return {
21
+ name: pkg.name || 'my-app',
22
+ runtime: 'nodejs',
23
+ version: pkg.engines?.node?.match(/\d+/)?.[0] || '18',
24
+ build: buildCommand ? {
25
+ command: buildCommand,
26
+ directory: 'dist',
27
+ } : undefined,
28
+ start: {
29
+ command: startCommand,
30
+ entry: 'dist/index.js',
31
+ },
32
+ };
33
+ }
34
+ generateSetupScript(version, options = {}) {
35
+ const port = options.port || 3000;
36
+ const env = options.environment || 'production';
37
+ const installRedis = options.installRedis ?? false;
38
+ return `#!/bin/bash
39
+ set -e
40
+
41
+ # Log everything to file
42
+ LOG_FILE="/tmp/hostfn-setup.log"
43
+ exec > >(tee -a "$LOG_FILE") 2>&1
44
+ echo "[$(date)] Starting hostfn setup..."
45
+
46
+ echo "=========================================="
47
+ echo "Node.js Server Setup (hostfn)"
48
+ echo "Environment: ${env}"
49
+ echo "=========================================="
50
+
51
+ # Detect OS
52
+ if [ -f /etc/os-release ]; then
53
+ . /etc/os-release
54
+ OS=$NAME
55
+ VER=$VERSION_ID
56
+ echo "Detected OS: $OS $VER"
57
+ fi
58
+
59
+ # 1. Install Node.js via nvm
60
+ echo ""
61
+ echo "[1/7] Installing Node.js v${version} via nvm..."
62
+ if [ ! -d "$HOME/.nvm" ]; then
63
+ curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh | bash
64
+ export NVM_DIR="$HOME/.nvm"
65
+ [ -s "$NVM_DIR/nvm.sh" ] && \\. "$NVM_DIR/nvm.sh"
66
+
67
+ nvm install ${version}
68
+ nvm use ${version}
69
+ nvm alias default ${version}
70
+ echo "Node.js $(node --version) installed"
71
+ else
72
+ echo "nvm already installed"
73
+ source "$HOME/.nvm/nvm.sh"
74
+ nvm install ${version}
75
+ nvm use ${version}
76
+ fi
77
+
78
+ # 2. Install PM2
79
+ echo ""
80
+ echo "[2/7] Installing PM2 process manager..."
81
+ npm install -g pm2
82
+ pm2 --version
83
+
84
+ # 3. Install system dependencies
85
+ echo ""
86
+ echo "[3/7] Installing system dependencies..."
87
+ if command -v apt-get &> /dev/null; then
88
+ sudo apt-get update
89
+ sudo apt-get install -y nginx certbot python3-certbot-nginx rsync curl git build-essential
90
+ elif command -v yum &> /dev/null; then
91
+ sudo yum install -y nginx certbot python3-certbot-nginx rsync git gcc-c++ make
92
+ elif command -v dnf &> /dev/null; then
93
+ sudo dnf install -y nginx certbot python3-certbot-nginx rsync curl git gcc-c++ make
94
+ fi
95
+
96
+ # 4. Configure Nginx
97
+ echo ""
98
+ echo "[4/7] Configuring Nginx..."
99
+ if [ -d "/etc/nginx/sites-available" ]; then
100
+ NGINX_CONFIG="/etc/nginx/sites-available/hostfn-${env}"
101
+ sudo tee $NGINX_CONFIG > /dev/null <<'EOF'
102
+ server {
103
+ listen 80;
104
+ server_name _;
105
+
106
+ location / {
107
+ proxy_pass http://localhost:${port};
108
+ proxy_http_version 1.1;
109
+ proxy_set_header Upgrade $http_upgrade;
110
+ proxy_set_header Connection 'upgrade';
111
+ proxy_set_header Host $host;
112
+ proxy_set_header X-Real-IP $remote_addr;
113
+ proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
114
+ proxy_set_header X-Forwarded-Proto $scheme;
115
+ proxy_cache_bypass $http_upgrade;
116
+ proxy_read_timeout 60s;
117
+ proxy_connect_timeout 60s;
118
+ }
119
+ }
120
+ EOF
121
+ sudo ln -sf $NGINX_CONFIG /etc/nginx/sites-enabled/hostfn-${env}
122
+ elif [ -d "/etc/nginx/conf.d" ]; then
123
+ NGINX_CONFIG="/etc/nginx/conf.d/hostfn-${env}.conf"
124
+ sudo tee $NGINX_CONFIG > /dev/null <<'EOF'
125
+ server {
126
+ listen 80 default_server;
127
+ server_name _;
128
+
129
+ location / {
130
+ proxy_pass http://localhost:${port};
131
+ proxy_http_version 1.1;
132
+ proxy_set_header Upgrade $http_upgrade;
133
+ proxy_set_header Connection 'upgrade';
134
+ proxy_set_header Host $host;
135
+ proxy_set_header X-Real-IP $remote_addr;
136
+ proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
137
+ proxy_set_header X-Forwarded-Proto $scheme;
138
+ proxy_cache_bypass $http_upgrade;
139
+ }
140
+ }
141
+ EOF
142
+ fi
143
+
144
+ sudo nginx -t
145
+ sudo systemctl restart nginx
146
+ sudo systemctl enable nginx
147
+
148
+ ${installRedis ? `
149
+ # 5. Install Redis (optional)
150
+ echo ""
151
+ echo "[5/7] Installing Redis..."
152
+ if command -v apt-get &> /dev/null; then
153
+ sudo apt-get install -y redis-server
154
+ sudo systemctl enable redis-server
155
+ sudo systemctl start redis-server
156
+ elif command -v yum &> /dev/null; then
157
+ sudo yum install -y redis
158
+ sudo systemctl enable redis
159
+ sudo systemctl start redis
160
+ fi
161
+ ` : `
162
+ # 5. Skip Redis installation
163
+ echo ""
164
+ echo "[5/7] Skipping Redis installation..."
165
+ `}
166
+
167
+ # 6. Create deployment directories
168
+ echo ""
169
+ echo "[6/7] Creating deployment directories..."
170
+ sudo mkdir -p /var/www
171
+ sudo chown -R $USER:$USER /var/www
172
+ mkdir -p /var/log/pm2
173
+
174
+ # 7. Configure PM2 startup
175
+ echo ""
176
+ echo "[7/7] Configuring PM2 startup..."
177
+ PM2_STARTUP_CMD=$(pm2 startup | grep 'sudo' | tail -n 1)
178
+ if [ -n "$PM2_STARTUP_CMD" ]; then
179
+ eval "$PM2_STARTUP_CMD" || echo "PM2 startup configured"
180
+ else
181
+ echo "PM2 startup already configured or not needed"
182
+ fi
183
+ pm2 save
184
+
185
+ # 8. Firewall setup
186
+ echo ""
187
+ echo "[8/7] Configuring firewall..."
188
+ if command -v ufw &> /dev/null; then
189
+ sudo ufw allow 22/tcp
190
+ sudo ufw allow 80/tcp
191
+ sudo ufw allow 443/tcp
192
+ sudo ufw --force enable
193
+ fi
194
+
195
+ echo ""
196
+ echo "=========================================="
197
+ echo "✅ Server setup complete!"
198
+ echo "=========================================="
199
+ echo "Node.js: $(node --version)"
200
+ echo "npm: $(npm --version)"
201
+ echo "PM2: $(pm2 --version)"
202
+ echo "Nginx: Running"
203
+ echo "Port: ${port}"
204
+ echo "=========================================="
205
+ echo "[$(date)] Setup completed successfully"
206
+ echo "Log saved to: $LOG_FILE"
207
+ `;
208
+ }
209
+ getProcessManager() {
210
+ return this.pm2Manager;
211
+ }
212
+ }
213
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/runtimes/nodejs/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,kBAAkB,GAKnB,MAAM,YAAY,CAAC;AAEpB,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAC/C,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAEtC;;GAEG;AACH,MAAM,OAAO,aAAc,SAAQ,kBAAkB;IAC1C,IAAI,GAAY,QAAQ,CAAC;IAC1B,UAAU,GAAG,IAAI,UAAU,EAAE,CAAC;IAEtC,KAAK,CAAC,MAAM,CAAC,GAAW;QACtB,OAAO,cAAc,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IACpC,CAAC;IAED,KAAK,CAAC,gBAAgB,CAAC,GAAW;QAChC,MAAM,GAAG,GAAG,cAAc,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC;QAEhD,IAAI,CAAC,GAAG,EAAE,CAAC;YACT,MAAM,IAAI,KAAK,CAAC,wBAAwB,CAAC,CAAC;QAC5C,CAAC;QAED,MAAM,YAAY,GAAG,cAAc,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC;QACzD,MAAM,YAAY,GAAG,cAAc,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC;QAEzD,OAAO;YACL,IAAI,EAAE,GAAG,CAAC,IAAI,IAAI,QAAQ;YAC1B,OAAO,EAAE,QAAQ;YACjB,OAAO,EAAE,GAAG,CAAC,OAAO,EAAE,IAAI,EAAE,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,IAAI;YACrD,KAAK,EAAE,YAAY,CAAC,CAAC,CAAC;gBACpB,OAAO,EAAE,YAAY;gBACrB,SAAS,EAAE,MAAM;aAClB,CAAC,CAAC,CAAC,SAAS;YACb,KAAK,EAAE;gBACL,OAAO,EAAE,YAAY;gBACrB,KAAK,EAAE,eAAe;aACvB;SACF,CAAC;IACJ,CAAC;IAED,mBAAmB,CAAC,OAAe,EAAE,UAAwB,EAAE;QAC7D,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,IAAI,IAAI,CAAC;QAClC,MAAM,GAAG,GAAG,OAAO,CAAC,WAAW,IAAI,YAAY,CAAC;QAChD,MAAM,YAAY,GAAG,OAAO,CAAC,YAAY,IAAI,KAAK,CAAC;QAEnD,OAAO;;;;;;;;;;qBAUU,GAAG;;;;;;;;;;;;;kCAaU,OAAO;;;;;;kBAMvB,OAAO;cACX,OAAO;wBACG,OAAO;;;;;kBAKb,OAAO;cACX,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;sDAyBiC,GAAG;;;;;;;sCAOnB,IAAI;;;;;;;;;;;;;;gEAcsB,GAAG;;6CAEtB,GAAG;;;;;;;sCAOV,IAAI;;;;;;;;;;;;;;;;;;EAkBxC,YAAY,CAAC,CAAC,CAAC;;;;;;;;;;;;;CAahB,CAAC,CAAC,CAAC;;;;CAIH;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;cAsCa,IAAI;;;;CAIjB,CAAC;IACA,CAAC;IAED,iBAAiB;QACf,OAAO,IAAI,CAAC,UAAU,CAAC;IACzB,CAAC;CACF"}
@@ -0,0 +1,17 @@
1
+ import { ProcessManager, RuntimeConfig } from '../base.js';
2
+ /**
3
+ * PM2 process manager for Node.js
4
+ */
5
+ export declare class PM2Manager implements ProcessManager {
6
+ readonly name = "pm2";
7
+ generateStartCommand(config: RuntimeConfig, environment: string): string;
8
+ generateReloadCommand(serviceName: string): string;
9
+ generateStopCommand(serviceName: string): string;
10
+ generateStatusCommand(serviceName: string): string;
11
+ generateLogsCommand(serviceName: string, lines?: number): string;
12
+ /**
13
+ * Generate PM2 ecosystem config file content
14
+ */
15
+ generateEcosystemConfig(config: RuntimeConfig, environment: string, envVars?: Record<string, string>): string;
16
+ }
17
+ //# sourceMappingURL=pm2.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pm2.d.ts","sourceRoot":"","sources":["../../../src/runtimes/nodejs/pm2.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAE3D;;GAEG;AACH,qBAAa,UAAW,YAAW,cAAc;IAC/C,QAAQ,CAAC,IAAI,SAAS;IAEtB,oBAAoB,CAAC,MAAM,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,GAAG,MAAM;IAOxE,qBAAqB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM;IAIlD,mBAAmB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM;IAIhD,qBAAqB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM;IAIlD,mBAAmB,CAAC,WAAW,EAAE,MAAM,EAAE,KAAK,GAAE,MAAY,GAAG,MAAM;IAIrE;;OAEG;IACH,uBAAuB,CAAC,MAAM,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,EAAE,OAAO,GAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAM,GAAG,MAAM;CAoClH"}
@@ -0,0 +1,60 @@
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
@@ -0,0 +1 @@
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"}
@@ -0,0 +1,34 @@
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
@@ -0,0 +1 @@
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"}
@@ -0,0 +1,58 @@
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
@@ -0,0 +1 @@
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"}
@@ -0,0 +1,47 @@
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
@@ -0,0 +1 @@
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"}
@@ -0,0 +1,76 @@
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
@@ -0,0 +1 @@
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"}
@@ -0,0 +1,32 @@
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
@@ -0,0 +1 @@
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"}