hostfn 0.1.1 → 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.
- package/dist/__tests__/core/backup.test.d.ts +2 -0
- package/dist/__tests__/core/backup.test.d.ts.map +1 -0
- package/dist/__tests__/core/backup.test.js +108 -0
- package/dist/__tests__/core/backup.test.js.map +1 -0
- package/dist/__tests__/core/health.test.d.ts +2 -0
- package/dist/__tests__/core/health.test.d.ts.map +1 -0
- package/dist/__tests__/core/health.test.js +97 -0
- package/dist/__tests__/core/health.test.js.map +1 -0
- package/dist/__tests__/core/lock.test.d.ts +2 -0
- package/dist/__tests__/core/lock.test.d.ts.map +1 -0
- package/dist/__tests__/core/lock.test.js +136 -0
- package/dist/__tests__/core/lock.test.js.map +1 -0
- package/dist/__tests__/core/nginx-multi-domain.test.d.ts +2 -0
- package/dist/__tests__/core/nginx-multi-domain.test.d.ts.map +1 -0
- package/dist/__tests__/core/nginx-multi-domain.test.js +158 -0
- package/dist/__tests__/core/nginx-multi-domain.test.js.map +1 -0
- package/dist/__tests__/runtimes/pm2.test.d.ts +2 -0
- package/dist/__tests__/runtimes/pm2.test.d.ts.map +1 -0
- package/dist/__tests__/runtimes/pm2.test.js +111 -0
- package/dist/__tests__/runtimes/pm2.test.js.map +1 -0
- package/dist/__tests__/utils/validation.test.d.ts +2 -0
- package/dist/__tests__/utils/validation.test.d.ts.map +1 -0
- package/dist/__tests__/utils/validation.test.js +136 -0
- package/dist/__tests__/utils/validation.test.js.map +1 -0
- package/dist/commands/deploy.d.ts +11 -0
- package/dist/commands/deploy.d.ts.map +1 -0
- package/dist/commands/deploy.js +636 -0
- package/dist/commands/deploy.js.map +1 -0
- package/dist/commands/env.d.ts +21 -0
- package/dist/commands/env.d.ts.map +1 -0
- package/dist/commands/env.js +317 -0
- package/dist/commands/env.js.map +1 -0
- package/dist/commands/expose.d.ts +6 -0
- package/dist/commands/expose.d.ts.map +1 -0
- package/dist/commands/expose.js +379 -0
- package/dist/commands/expose.js.map +1 -0
- package/dist/commands/init.d.ts +2 -0
- package/dist/commands/init.d.ts.map +1 -0
- package/dist/commands/init.js +175 -0
- package/dist/commands/init.js.map +1 -0
- package/dist/commands/logs.d.ts +10 -0
- package/dist/commands/logs.d.ts.map +1 -0
- package/dist/commands/logs.js +75 -0
- package/dist/commands/logs.js.map +1 -0
- package/dist/commands/rollback.d.ts +6 -0
- package/dist/commands/rollback.d.ts.map +1 -0
- package/dist/commands/rollback.js +113 -0
- package/dist/commands/rollback.js.map +1 -0
- package/dist/commands/server/info.d.ts +2 -0
- package/dist/commands/server/info.d.ts.map +1 -0
- package/dist/commands/server/info.js +104 -0
- package/dist/commands/server/info.js.map +1 -0
- package/dist/commands/server/setup.d.ts +11 -0
- package/dist/commands/server/setup.d.ts.map +1 -0
- package/dist/commands/server/setup.js +161 -0
- package/dist/commands/server/setup.js.map +1 -0
- package/dist/commands/status.d.ts +6 -0
- package/dist/commands/status.d.ts.map +1 -0
- package/dist/commands/status.js +120 -0
- package/dist/commands/status.js.map +1 -0
- package/dist/config/loader.d.ts +21 -0
- package/dist/config/loader.d.ts.map +1 -0
- package/dist/config/loader.js +54 -0
- package/dist/config/loader.js.map +1 -0
- package/dist/config/schema.d.ts +323 -0
- package/dist/config/schema.d.ts.map +1 -0
- package/dist/config/schema.js +108 -0
- package/dist/config/schema.js.map +1 -0
- package/dist/core/backup.d.ts +34 -0
- package/dist/core/backup.d.ts.map +1 -0
- package/dist/core/backup.js +95 -0
- package/dist/core/backup.js.map +1 -0
- package/dist/core/health.d.ts +31 -0
- package/dist/core/health.d.ts.map +1 -0
- package/dist/core/health.js +78 -0
- package/dist/core/health.js.map +1 -0
- package/dist/core/local.d.ts +19 -0
- package/dist/core/local.d.ts.map +1 -0
- package/dist/core/local.js +50 -0
- package/dist/core/local.js.map +1 -0
- package/dist/core/lock.d.ts +28 -0
- package/dist/core/lock.d.ts.map +1 -0
- package/dist/core/lock.js +89 -0
- package/dist/core/lock.js.map +1 -0
- package/dist/core/nginx.d.ts +43 -0
- package/dist/core/nginx.d.ts.map +1 -0
- package/dist/core/nginx.js +131 -0
- package/dist/core/nginx.js.map +1 -0
- package/dist/core/ssh.d.ts +79 -0
- package/dist/core/ssh.d.ts.map +1 -0
- package/dist/core/ssh.js +264 -0
- package/dist/core/ssh.js.map +1 -0
- package/dist/core/sync.d.ts +25 -0
- package/dist/core/sync.d.ts.map +1 -0
- package/dist/core/sync.js +117 -0
- package/dist/core/sync.js.map +1 -0
- package/dist/core/workspace.d.ts +13 -0
- package/dist/core/workspace.d.ts.map +1 -0
- package/dist/core/workspace.js +141 -0
- package/dist/core/workspace.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +232 -0
- package/dist/index.js.map +1 -0
- package/dist/runtimes/base.d.ts +115 -0
- package/dist/runtimes/base.d.ts.map +1 -0
- package/dist/runtimes/base.js +16 -0
- package/dist/runtimes/base.js.map +1 -0
- package/dist/runtimes/nodejs/detector.d.ts +47 -0
- package/dist/runtimes/nodejs/detector.d.ts.map +1 -0
- package/dist/runtimes/nodejs/detector.js +143 -0
- package/dist/runtimes/nodejs/detector.js.map +1 -0
- package/dist/runtimes/nodejs/index.d.ts +14 -0
- package/dist/runtimes/nodejs/index.d.ts.map +1 -0
- package/dist/runtimes/nodejs/index.js +213 -0
- package/dist/runtimes/nodejs/index.js.map +1 -0
- package/dist/runtimes/nodejs/pm2.d.ts +17 -0
- package/dist/runtimes/nodejs/pm2.d.ts.map +1 -0
- package/dist/runtimes/nodejs/pm2.js +60 -0
- package/dist/runtimes/nodejs/pm2.js.map +1 -0
- package/dist/runtimes/registry.d.ts +34 -0
- package/dist/runtimes/registry.d.ts.map +1 -0
- package/dist/runtimes/registry.js +58 -0
- package/dist/runtimes/registry.js.map +1 -0
- package/dist/utils/logger.d.ts +47 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +76 -0
- package/dist/utils/logger.js.map +1 -0
- package/dist/utils/validation.d.ts +32 -0
- package/dist/utils/validation.d.ts.map +1 -0
- package/dist/utils/validation.js +125 -0
- package/dist/utils/validation.js.map +1 -0
- package/package.json +33 -16
- package/LICENSE +0 -21
- package/README.md +0 -1136
- package/_conduct/specs/1.v0.spec.md +0 -1041
- package/examples/express-api/package.json +0 -22
- package/examples/express-api/src/index.ts +0 -16
- package/examples/express-api/tsconfig.json +0 -11
- package/examples/github-actions-deploy.yml +0 -40
- package/examples/monorepo-config.json +0 -76
- package/examples/monorepo-multi-server-config.json +0 -74
- package/packages/cli/package.json +0 -40
- package/turbo.json +0 -24
- /package/{packages/cli/src → src}/__tests__/core/backup.test.ts +0 -0
- /package/{packages/cli/src → src}/__tests__/core/health.test.ts +0 -0
- /package/{packages/cli/src → src}/__tests__/core/lock.test.ts +0 -0
- /package/{packages/cli/src → src}/__tests__/core/nginx-multi-domain.test.ts +0 -0
- /package/{packages/cli/src → src}/__tests__/runtimes/pm2.test.ts +0 -0
- /package/{packages/cli/src → src}/__tests__/utils/validation.test.ts +0 -0
- /package/{packages/cli/src → src}/commands/deploy.ts +0 -0
- /package/{packages/cli/src → src}/commands/env.ts +0 -0
- /package/{packages/cli/src → src}/commands/expose.ts +0 -0
- /package/{packages/cli/src → src}/commands/init.ts +0 -0
- /package/{packages/cli/src → src}/commands/logs.ts +0 -0
- /package/{packages/cli/src → src}/commands/rollback.ts +0 -0
- /package/{packages/cli/src → src}/commands/server/info.ts +0 -0
- /package/{packages/cli/src → src}/commands/server/setup.ts +0 -0
- /package/{packages/cli/src → src}/commands/status.ts +0 -0
- /package/{packages/cli/src → src}/config/loader.ts +0 -0
- /package/{packages/cli/src → src}/config/schema.ts +0 -0
- /package/{packages/cli/src → src}/core/backup.ts +0 -0
- /package/{packages/cli/src → src}/core/health.ts +0 -0
- /package/{packages/cli/src → src}/core/local.ts +0 -0
- /package/{packages/cli/src → src}/core/lock.ts +0 -0
- /package/{packages/cli/src → src}/core/nginx.ts +0 -0
- /package/{packages/cli/src → src}/core/ssh.ts +0 -0
- /package/{packages/cli/src → src}/core/sync.ts +0 -0
- /package/{packages/cli/src → src}/core/workspace.ts +0 -0
- /package/{packages/cli/src → src}/index.ts +0 -0
- /package/{packages/cli/src → src}/runtimes/base.ts +0 -0
- /package/{packages/cli/src → src}/runtimes/nodejs/detector.ts +0 -0
- /package/{packages/cli/src → src}/runtimes/nodejs/index.ts +0 -0
- /package/{packages/cli/src → src}/runtimes/nodejs/pm2.ts +0 -0
- /package/{packages/cli/src → src}/runtimes/registry.ts +0 -0
- /package/{packages/cli/src → src}/utils/logger.ts +0 -0
- /package/{packages/cli/src → src}/utils/validation.ts +0 -0
- /package/{packages/cli/tsconfig.json → tsconfig.json} +0 -0
- /package/{packages/cli/vitest.config.ts → vitest.config.ts} +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workspace.js","sourceRoot":"","sources":["../../src/core/workspace.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":""}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,232 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import { Command } from 'commander';
|
|
3
|
+
import { Logger } from './utils/logger.js';
|
|
4
|
+
import { RuntimeRegistry } from './runtimes/registry.js';
|
|
5
|
+
import { NodeJSAdapter } from './runtimes/nodejs/index.js';
|
|
6
|
+
// Register runtime adapters
|
|
7
|
+
RuntimeRegistry.register(new NodeJSAdapter());
|
|
8
|
+
const program = new Command();
|
|
9
|
+
program
|
|
10
|
+
.name('hostfn')
|
|
11
|
+
.description('Universal application deployment CLI')
|
|
12
|
+
.version('0.1.0');
|
|
13
|
+
// Init command
|
|
14
|
+
program
|
|
15
|
+
.command('init')
|
|
16
|
+
.description('Initialize hostfn configuration in current project')
|
|
17
|
+
.action(async () => {
|
|
18
|
+
try {
|
|
19
|
+
const { initCommand } = await import('./commands/init.js');
|
|
20
|
+
await initCommand();
|
|
21
|
+
}
|
|
22
|
+
catch (error) {
|
|
23
|
+
Logger.error(error instanceof Error ? error.message : String(error));
|
|
24
|
+
process.exit(1);
|
|
25
|
+
}
|
|
26
|
+
});
|
|
27
|
+
// Server setup command
|
|
28
|
+
program
|
|
29
|
+
.command('server')
|
|
30
|
+
.description('Server management commands')
|
|
31
|
+
.addCommand(new Command('setup')
|
|
32
|
+
.description('Setup a new server for deployments')
|
|
33
|
+
.argument('<host>', 'SSH connection string (user@host)')
|
|
34
|
+
.option('--env <environment>', 'Environment name', 'production')
|
|
35
|
+
.option('--node-version <version>', 'Node.js version', '20')
|
|
36
|
+
.option('--port <port>', 'Service port', '3000')
|
|
37
|
+
.option('--redis', 'Install Redis', false)
|
|
38
|
+
.option('--password <password>', 'SSH password (if not using key auth)')
|
|
39
|
+
.action(async (host, options) => {
|
|
40
|
+
try {
|
|
41
|
+
const { serverSetupCommand } = await import('./commands/server/setup.js');
|
|
42
|
+
await serverSetupCommand(host, options);
|
|
43
|
+
}
|
|
44
|
+
catch (error) {
|
|
45
|
+
Logger.error(error instanceof Error ? error.message : String(error));
|
|
46
|
+
process.exit(1);
|
|
47
|
+
}
|
|
48
|
+
}))
|
|
49
|
+
.addCommand(new Command('info')
|
|
50
|
+
.description('Show server information')
|
|
51
|
+
.argument('<host>', 'SSH connection string (user@host)')
|
|
52
|
+
.action(async (host) => {
|
|
53
|
+
try {
|
|
54
|
+
const { serverInfoCommand } = await import('./commands/server/info.js');
|
|
55
|
+
await serverInfoCommand(host);
|
|
56
|
+
}
|
|
57
|
+
catch (error) {
|
|
58
|
+
Logger.error(error instanceof Error ? error.message : String(error));
|
|
59
|
+
process.exit(1);
|
|
60
|
+
}
|
|
61
|
+
}));
|
|
62
|
+
// Deploy command
|
|
63
|
+
program
|
|
64
|
+
.command('deploy')
|
|
65
|
+
.description('Deploy application to server')
|
|
66
|
+
.argument('[environment]', 'Environment to deploy to', 'production')
|
|
67
|
+
.option('--host <host>', 'Override server host')
|
|
68
|
+
.option('--ci', 'CI/CD mode (non-interactive)', false)
|
|
69
|
+
.option('--local', 'Local deployment mode (skip SSH, for self-hosted runners)', false)
|
|
70
|
+
.option('--dry-run', 'Show what would be deployed without executing', false)
|
|
71
|
+
.option('--service <name>', 'Deploy specific service in monorepo')
|
|
72
|
+
.option('--all', 'Deploy all services in monorepo (default behavior)', false)
|
|
73
|
+
.action(async (environment, options) => {
|
|
74
|
+
try {
|
|
75
|
+
const { deployCommand } = await import('./commands/deploy.js');
|
|
76
|
+
await deployCommand(environment, options);
|
|
77
|
+
}
|
|
78
|
+
catch (error) {
|
|
79
|
+
Logger.error(error instanceof Error ? error.message : String(error));
|
|
80
|
+
process.exit(1);
|
|
81
|
+
}
|
|
82
|
+
});
|
|
83
|
+
// Logs command
|
|
84
|
+
program
|
|
85
|
+
.command('logs')
|
|
86
|
+
.description('View application logs')
|
|
87
|
+
.argument('[environment]', 'Environment', 'production')
|
|
88
|
+
.option('--lines <n>', 'Number of lines to show', '100')
|
|
89
|
+
.option('--errors', 'Show only errors', false)
|
|
90
|
+
.option('--output <file>', 'Save logs to file')
|
|
91
|
+
.option('--service <name>', 'View logs for specific service in monorepo')
|
|
92
|
+
.action(async (environment, options) => {
|
|
93
|
+
try {
|
|
94
|
+
const { logsCommand } = await import('./commands/logs.js');
|
|
95
|
+
await logsCommand(environment, options);
|
|
96
|
+
}
|
|
97
|
+
catch (error) {
|
|
98
|
+
Logger.error(error instanceof Error ? error.message : String(error));
|
|
99
|
+
process.exit(1);
|
|
100
|
+
}
|
|
101
|
+
});
|
|
102
|
+
// Status command
|
|
103
|
+
program
|
|
104
|
+
.command('status')
|
|
105
|
+
.description('Show application status')
|
|
106
|
+
.argument('[environment]', 'Environment', 'production')
|
|
107
|
+
.option('--service <name>', 'Show status for specific service in monorepo')
|
|
108
|
+
.action(async (environment, options) => {
|
|
109
|
+
try {
|
|
110
|
+
const { statusCommand } = await import('./commands/status.js');
|
|
111
|
+
await statusCommand(environment, options);
|
|
112
|
+
}
|
|
113
|
+
catch (error) {
|
|
114
|
+
Logger.error(error instanceof Error ? error.message : String(error));
|
|
115
|
+
process.exit(1);
|
|
116
|
+
}
|
|
117
|
+
});
|
|
118
|
+
// Rollback command
|
|
119
|
+
program
|
|
120
|
+
.command('rollback')
|
|
121
|
+
.description('Rollback to previous deployment')
|
|
122
|
+
.argument('[environment]', 'Environment', 'production')
|
|
123
|
+
.option('--to <timestamp>', 'Rollback to specific backup')
|
|
124
|
+
.action(async (environment, options) => {
|
|
125
|
+
try {
|
|
126
|
+
const { rollbackCommand } = await import('./commands/rollback.js');
|
|
127
|
+
await rollbackCommand(environment, options);
|
|
128
|
+
}
|
|
129
|
+
catch (error) {
|
|
130
|
+
Logger.error(error instanceof Error ? error.message : String(error));
|
|
131
|
+
process.exit(1);
|
|
132
|
+
}
|
|
133
|
+
});
|
|
134
|
+
// Expose command
|
|
135
|
+
program
|
|
136
|
+
.command('expose')
|
|
137
|
+
.description('Configure Nginx and SSL for deployed services')
|
|
138
|
+
.argument('[environment]', 'Environment', 'production')
|
|
139
|
+
.option('--host <host>', 'Override server host')
|
|
140
|
+
.option('--skip-ssl', 'Skip SSL certificate setup', false)
|
|
141
|
+
.option('--force', 'Overwrite existing configuration', false)
|
|
142
|
+
.action(async (environment, options) => {
|
|
143
|
+
try {
|
|
144
|
+
const { exposeCommand } = await import('./commands/expose.js');
|
|
145
|
+
await exposeCommand(environment, options);
|
|
146
|
+
}
|
|
147
|
+
catch (error) {
|
|
148
|
+
Logger.error(error instanceof Error ? error.message : String(error));
|
|
149
|
+
process.exit(1);
|
|
150
|
+
}
|
|
151
|
+
});
|
|
152
|
+
// Environment variable commands
|
|
153
|
+
const envCommand = program
|
|
154
|
+
.command('env')
|
|
155
|
+
.description('Manage environment variables');
|
|
156
|
+
envCommand
|
|
157
|
+
.command('list')
|
|
158
|
+
.description('List environment variables on server (masked)')
|
|
159
|
+
.argument('<environment>', 'Environment')
|
|
160
|
+
.action(async (environment) => {
|
|
161
|
+
try {
|
|
162
|
+
const { envListCommand } = await import('./commands/env.js');
|
|
163
|
+
await envListCommand(environment);
|
|
164
|
+
}
|
|
165
|
+
catch (error) {
|
|
166
|
+
Logger.error(error instanceof Error ? error.message : String(error));
|
|
167
|
+
process.exit(1);
|
|
168
|
+
}
|
|
169
|
+
});
|
|
170
|
+
envCommand
|
|
171
|
+
.command('set')
|
|
172
|
+
.description('Set an environment variable')
|
|
173
|
+
.argument('<environment>', 'Environment')
|
|
174
|
+
.argument('<key>', 'Variable name')
|
|
175
|
+
.argument('<value>', 'Variable value')
|
|
176
|
+
.action(async (environment, key, value) => {
|
|
177
|
+
try {
|
|
178
|
+
const { envSetCommand } = await import('./commands/env.js');
|
|
179
|
+
await envSetCommand(environment, key, value);
|
|
180
|
+
}
|
|
181
|
+
catch (error) {
|
|
182
|
+
Logger.error(error instanceof Error ? error.message : String(error));
|
|
183
|
+
process.exit(1);
|
|
184
|
+
}
|
|
185
|
+
});
|
|
186
|
+
envCommand
|
|
187
|
+
.command('push')
|
|
188
|
+
.description('Upload .env file to server')
|
|
189
|
+
.argument('<environment>', 'Environment')
|
|
190
|
+
.argument('<file>', 'Local .env file path')
|
|
191
|
+
.action(async (environment, file) => {
|
|
192
|
+
try {
|
|
193
|
+
const { envPushCommand } = await import('./commands/env.js');
|
|
194
|
+
await envPushCommand(environment, file);
|
|
195
|
+
}
|
|
196
|
+
catch (error) {
|
|
197
|
+
Logger.error(error instanceof Error ? error.message : String(error));
|
|
198
|
+
process.exit(1);
|
|
199
|
+
}
|
|
200
|
+
});
|
|
201
|
+
envCommand
|
|
202
|
+
.command('pull')
|
|
203
|
+
.description('Download .env file from server')
|
|
204
|
+
.argument('<environment>', 'Environment')
|
|
205
|
+
.argument('<file>', 'Local file path to save to')
|
|
206
|
+
.action(async (environment, file) => {
|
|
207
|
+
try {
|
|
208
|
+
const { envPullCommand } = await import('./commands/env.js');
|
|
209
|
+
await envPullCommand(environment, file);
|
|
210
|
+
}
|
|
211
|
+
catch (error) {
|
|
212
|
+
Logger.error(error instanceof Error ? error.message : String(error));
|
|
213
|
+
process.exit(1);
|
|
214
|
+
}
|
|
215
|
+
});
|
|
216
|
+
envCommand
|
|
217
|
+
.command('validate')
|
|
218
|
+
.description('Validate required environment variables exist')
|
|
219
|
+
.argument('<environment>', 'Environment')
|
|
220
|
+
.action(async (environment) => {
|
|
221
|
+
try {
|
|
222
|
+
const { envValidateCommand } = await import('./commands/env.js');
|
|
223
|
+
await envValidateCommand(environment);
|
|
224
|
+
}
|
|
225
|
+
catch (error) {
|
|
226
|
+
Logger.error(error instanceof Error ? error.message : String(error));
|
|
227
|
+
process.exit(1);
|
|
228
|
+
}
|
|
229
|
+
});
|
|
230
|
+
// Parse CLI arguments
|
|
231
|
+
program.parse(process.argv);
|
|
232
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
import { Runtime } from '../config/schema.js';
|
|
2
|
+
/**
|
|
3
|
+
* Base interface for runtime adapters
|
|
4
|
+
* Each runtime (Node.js, Python, Go, etc.) implements this interface
|
|
5
|
+
*/
|
|
6
|
+
export interface RuntimeAdapter {
|
|
7
|
+
/**
|
|
8
|
+
* Runtime identifier
|
|
9
|
+
*/
|
|
10
|
+
readonly name: Runtime;
|
|
11
|
+
/**
|
|
12
|
+
* Detect if this runtime is used in the project
|
|
13
|
+
* @param cwd Project directory
|
|
14
|
+
* @returns Detection result with confidence score
|
|
15
|
+
*/
|
|
16
|
+
detect(cwd: string): Promise<RuntimeDetectionResult>;
|
|
17
|
+
/**
|
|
18
|
+
* Get default configuration for this runtime
|
|
19
|
+
* @param cwd Project directory
|
|
20
|
+
* @returns Partial configuration with smart defaults
|
|
21
|
+
*/
|
|
22
|
+
getDefaultConfig(cwd: string): Promise<Partial<RuntimeConfig>>;
|
|
23
|
+
/**
|
|
24
|
+
* Generate server setup script for this runtime
|
|
25
|
+
* @param version Runtime version
|
|
26
|
+
* @param options Additional setup options
|
|
27
|
+
* @returns Shell script content
|
|
28
|
+
*/
|
|
29
|
+
generateSetupScript(version: string, options?: SetupOptions): string;
|
|
30
|
+
/**
|
|
31
|
+
* Get process manager command (PM2, systemd, etc.)
|
|
32
|
+
*/
|
|
33
|
+
getProcessManager(): ProcessManager;
|
|
34
|
+
/**
|
|
35
|
+
* Validate runtime-specific configuration
|
|
36
|
+
* @param config Runtime configuration
|
|
37
|
+
* @returns Validation errors (empty if valid)
|
|
38
|
+
*/
|
|
39
|
+
validateConfig(config: RuntimeConfig): string[];
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Runtime detection result
|
|
43
|
+
*/
|
|
44
|
+
export interface RuntimeDetectionResult {
|
|
45
|
+
detected: boolean;
|
|
46
|
+
confidence: number;
|
|
47
|
+
version?: string;
|
|
48
|
+
framework?: string;
|
|
49
|
+
packageManager?: string;
|
|
50
|
+
metadata?: Record<string, unknown>;
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Runtime configuration
|
|
54
|
+
*/
|
|
55
|
+
export interface RuntimeConfig {
|
|
56
|
+
name: string;
|
|
57
|
+
runtime: Runtime;
|
|
58
|
+
version: string;
|
|
59
|
+
build?: {
|
|
60
|
+
command: string;
|
|
61
|
+
directory: string;
|
|
62
|
+
};
|
|
63
|
+
start: {
|
|
64
|
+
command: string;
|
|
65
|
+
entry?: string;
|
|
66
|
+
};
|
|
67
|
+
port?: number;
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Server setup options
|
|
71
|
+
*/
|
|
72
|
+
export interface SetupOptions {
|
|
73
|
+
port?: number;
|
|
74
|
+
environment?: string;
|
|
75
|
+
installRedis?: boolean;
|
|
76
|
+
nodeModulesMode?: 'all' | 'production' | 'none';
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* Process manager interface
|
|
80
|
+
*/
|
|
81
|
+
export interface ProcessManager {
|
|
82
|
+
name: string;
|
|
83
|
+
/**
|
|
84
|
+
* Generate start command
|
|
85
|
+
*/
|
|
86
|
+
generateStartCommand(config: RuntimeConfig, environment: string): string;
|
|
87
|
+
/**
|
|
88
|
+
* Generate reload command (zero-downtime)
|
|
89
|
+
*/
|
|
90
|
+
generateReloadCommand(serviceName: string): string;
|
|
91
|
+
/**
|
|
92
|
+
* Generate stop command
|
|
93
|
+
*/
|
|
94
|
+
generateStopCommand(serviceName: string): string;
|
|
95
|
+
/**
|
|
96
|
+
* Generate status command
|
|
97
|
+
*/
|
|
98
|
+
generateStatusCommand(serviceName: string): string;
|
|
99
|
+
/**
|
|
100
|
+
* Generate logs command
|
|
101
|
+
*/
|
|
102
|
+
generateLogsCommand(serviceName: string, lines?: number): string;
|
|
103
|
+
}
|
|
104
|
+
/**
|
|
105
|
+
* Abstract base class for runtime adapters
|
|
106
|
+
*/
|
|
107
|
+
export declare abstract class BaseRuntimeAdapter implements RuntimeAdapter {
|
|
108
|
+
abstract readonly name: Runtime;
|
|
109
|
+
abstract detect(cwd: string): Promise<RuntimeDetectionResult>;
|
|
110
|
+
abstract getDefaultConfig(cwd: string): Promise<Partial<RuntimeConfig>>;
|
|
111
|
+
abstract generateSetupScript(version: string, options?: SetupOptions): string;
|
|
112
|
+
abstract getProcessManager(): ProcessManager;
|
|
113
|
+
validateConfig(config: RuntimeConfig): string[];
|
|
114
|
+
}
|
|
115
|
+
//# sourceMappingURL=base.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"base.d.ts","sourceRoot":"","sources":["../../src/runtimes/base.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Abstract base class for runtime adapters
|
|
3
|
+
*/
|
|
4
|
+
export class BaseRuntimeAdapter {
|
|
5
|
+
validateConfig(config) {
|
|
6
|
+
const errors = [];
|
|
7
|
+
if (!config.name) {
|
|
8
|
+
errors.push('Application name is required');
|
|
9
|
+
}
|
|
10
|
+
if (!config.start?.command) {
|
|
11
|
+
errors.push('Start command is required');
|
|
12
|
+
}
|
|
13
|
+
return errors;
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
//# sourceMappingURL=base.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"base.js","sourceRoot":"","sources":["../../src/runtimes/base.ts"],"names":[],"mappings":"AAuHA;;GAEG;AACH,MAAM,OAAgB,kBAAkB;IAQtC,cAAc,CAAC,MAAqB;QAClC,MAAM,MAAM,GAAa,EAAE,CAAC;QAE5B,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;YACjB,MAAM,CAAC,IAAI,CAAC,8BAA8B,CAAC,CAAC;QAC9C,CAAC;QAED,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,CAAC;YAC3B,MAAM,CAAC,IAAI,CAAC,2BAA2B,CAAC,CAAC;QAC3C,CAAC;QAED,OAAO,MAAM,CAAC;IAChB,CAAC;CACF"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import { RuntimeDetectionResult } from '../base.js';
|
|
2
|
+
interface PackageJson {
|
|
3
|
+
name?: string;
|
|
4
|
+
version?: string;
|
|
5
|
+
dependencies?: Record<string, string>;
|
|
6
|
+
devDependencies?: Record<string, string>;
|
|
7
|
+
scripts?: Record<string, string>;
|
|
8
|
+
engines?: {
|
|
9
|
+
node?: string;
|
|
10
|
+
};
|
|
11
|
+
}
|
|
12
|
+
export declare class NodeJSDetector {
|
|
13
|
+
/**
|
|
14
|
+
* Detect Node.js project
|
|
15
|
+
*/
|
|
16
|
+
static detect(cwd: string): Promise<RuntimeDetectionResult>;
|
|
17
|
+
/**
|
|
18
|
+
* Detect framework from dependencies
|
|
19
|
+
*/
|
|
20
|
+
private static detectFramework;
|
|
21
|
+
/**
|
|
22
|
+
* Detect package manager
|
|
23
|
+
*/
|
|
24
|
+
private static detectPackageManager;
|
|
25
|
+
/**
|
|
26
|
+
* Detect Node.js version from engines
|
|
27
|
+
*/
|
|
28
|
+
private static detectNodeVersion;
|
|
29
|
+
/**
|
|
30
|
+
* Check if project uses TypeScript
|
|
31
|
+
*/
|
|
32
|
+
private static hasTypeScript;
|
|
33
|
+
/**
|
|
34
|
+
* Extract build command from package.json
|
|
35
|
+
*/
|
|
36
|
+
static getBuildCommand(pkg: PackageJson): string | undefined;
|
|
37
|
+
/**
|
|
38
|
+
* Extract start command from package.json
|
|
39
|
+
*/
|
|
40
|
+
static getStartCommand(pkg: PackageJson): string;
|
|
41
|
+
/**
|
|
42
|
+
* Read package.json
|
|
43
|
+
*/
|
|
44
|
+
static readPackageJson(cwd: string): PackageJson | null;
|
|
45
|
+
}
|
|
46
|
+
export {};
|
|
47
|
+
//# sourceMappingURL=detector.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"detector.d.ts","sourceRoot":"","sources":["../../../src/runtimes/nodejs/detector.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,sBAAsB,EAAE,MAAM,YAAY,CAAC;AAEpD,UAAU,WAAW;IACnB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACtC,eAAe,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACzC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,OAAO,CAAC,EAAE;QACR,IAAI,CAAC,EAAE,MAAM,CAAC;KACf,CAAC;CACH;AAED,qBAAa,cAAc;IACzB;;OAEG;WACU,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,sBAAsB,CAAC;IAuCjE;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,eAAe;IAkB9B;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,oBAAoB;IAOnC;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,iBAAiB;IAQhC;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,aAAa;IAQ5B;;OAEG;IACH,MAAM,CAAC,eAAe,CAAC,GAAG,EAAE,WAAW,GAAG,MAAM,GAAG,SAAS;IAW5D;;OAEG;IACH,MAAM,CAAC,eAAe,CAAC,GAAG,EAAE,WAAW,GAAG,MAAM;IAWhD;;OAEG;IACH,MAAM,CAAC,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,WAAW,GAAG,IAAI;CAcxD"}
|
|
@@ -0,0 +1,143 @@
|
|
|
1
|
+
import { readFileSync, existsSync } from 'fs';
|
|
2
|
+
import { resolve } from 'path';
|
|
3
|
+
export class NodeJSDetector {
|
|
4
|
+
/**
|
|
5
|
+
* Detect Node.js project
|
|
6
|
+
*/
|
|
7
|
+
static async detect(cwd) {
|
|
8
|
+
const packageJsonPath = resolve(cwd, 'package.json');
|
|
9
|
+
if (!existsSync(packageJsonPath)) {
|
|
10
|
+
return {
|
|
11
|
+
detected: false,
|
|
12
|
+
confidence: 0,
|
|
13
|
+
};
|
|
14
|
+
}
|
|
15
|
+
try {
|
|
16
|
+
const content = readFileSync(packageJsonPath, 'utf-8');
|
|
17
|
+
const pkg = JSON.parse(content);
|
|
18
|
+
// Determine framework
|
|
19
|
+
const framework = this.detectFramework(pkg);
|
|
20
|
+
const packageManager = this.detectPackageManager(cwd);
|
|
21
|
+
const version = this.detectNodeVersion(pkg);
|
|
22
|
+
return {
|
|
23
|
+
detected: true,
|
|
24
|
+
confidence: 100, // package.json exists = 100% Node.js
|
|
25
|
+
version,
|
|
26
|
+
framework,
|
|
27
|
+
packageManager,
|
|
28
|
+
metadata: {
|
|
29
|
+
hasTypeScript: this.hasTypeScript(pkg),
|
|
30
|
+
hasScripts: Object.keys(pkg.scripts || {}).length > 0,
|
|
31
|
+
dependencies: Object.keys(pkg.dependencies || {}).length,
|
|
32
|
+
},
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
catch (error) {
|
|
36
|
+
return {
|
|
37
|
+
detected: false,
|
|
38
|
+
confidence: 0,
|
|
39
|
+
};
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Detect framework from dependencies
|
|
44
|
+
*/
|
|
45
|
+
static detectFramework(pkg) {
|
|
46
|
+
const allDeps = {
|
|
47
|
+
...pkg.dependencies,
|
|
48
|
+
...pkg.devDependencies,
|
|
49
|
+
};
|
|
50
|
+
// Check for common frameworks (order matters - more specific first)
|
|
51
|
+
if (allDeps['next'])
|
|
52
|
+
return 'next';
|
|
53
|
+
if (allDeps['@nestjs/core'])
|
|
54
|
+
return 'nestjs';
|
|
55
|
+
if (allDeps['hono'])
|
|
56
|
+
return 'hono';
|
|
57
|
+
if (allDeps['fastify'])
|
|
58
|
+
return 'fastify';
|
|
59
|
+
if (allDeps['express'])
|
|
60
|
+
return 'express';
|
|
61
|
+
if (allDeps['koa'])
|
|
62
|
+
return 'koa';
|
|
63
|
+
if (allDeps['@hapi/hapi'])
|
|
64
|
+
return 'hapi';
|
|
65
|
+
return 'generic';
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Detect package manager
|
|
69
|
+
*/
|
|
70
|
+
static detectPackageManager(cwd) {
|
|
71
|
+
if (existsSync(resolve(cwd, 'pnpm-lock.yaml')))
|
|
72
|
+
return 'pnpm';
|
|
73
|
+
if (existsSync(resolve(cwd, 'yarn.lock')))
|
|
74
|
+
return 'yarn';
|
|
75
|
+
if (existsSync(resolve(cwd, 'package-lock.json')))
|
|
76
|
+
return 'npm';
|
|
77
|
+
return 'npm'; // default
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* Detect Node.js version from engines
|
|
81
|
+
*/
|
|
82
|
+
static detectNodeVersion(pkg) {
|
|
83
|
+
if (!pkg.engines?.node)
|
|
84
|
+
return undefined;
|
|
85
|
+
// Parse version constraint (>=18.0.0 -> 18)
|
|
86
|
+
const match = pkg.engines.node.match(/(\d+)/);
|
|
87
|
+
return match ? match[1] : undefined;
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* Check if project uses TypeScript
|
|
91
|
+
*/
|
|
92
|
+
static hasTypeScript(pkg) {
|
|
93
|
+
const allDeps = {
|
|
94
|
+
...pkg.dependencies,
|
|
95
|
+
...pkg.devDependencies,
|
|
96
|
+
};
|
|
97
|
+
return 'typescript' in allDeps;
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* Extract build command from package.json
|
|
101
|
+
*/
|
|
102
|
+
static getBuildCommand(pkg) {
|
|
103
|
+
const scripts = pkg.scripts || {};
|
|
104
|
+
// Common build script names
|
|
105
|
+
if (scripts.build)
|
|
106
|
+
return 'npm run build';
|
|
107
|
+
if (scripts.compile)
|
|
108
|
+
return 'npm run compile';
|
|
109
|
+
if (scripts['build:prod'])
|
|
110
|
+
return 'npm run build:prod';
|
|
111
|
+
return undefined;
|
|
112
|
+
}
|
|
113
|
+
/**
|
|
114
|
+
* Extract start command from package.json
|
|
115
|
+
*/
|
|
116
|
+
static getStartCommand(pkg) {
|
|
117
|
+
const scripts = pkg.scripts || {};
|
|
118
|
+
// Common start script names
|
|
119
|
+
if (scripts.start)
|
|
120
|
+
return 'npm start';
|
|
121
|
+
if (scripts['start:prod'])
|
|
122
|
+
return 'npm run start:prod';
|
|
123
|
+
// Fallback: node entry point
|
|
124
|
+
return 'node dist/index.js';
|
|
125
|
+
}
|
|
126
|
+
/**
|
|
127
|
+
* Read package.json
|
|
128
|
+
*/
|
|
129
|
+
static readPackageJson(cwd) {
|
|
130
|
+
const packageJsonPath = resolve(cwd, 'package.json');
|
|
131
|
+
if (!existsSync(packageJsonPath)) {
|
|
132
|
+
return null;
|
|
133
|
+
}
|
|
134
|
+
try {
|
|
135
|
+
const content = readFileSync(packageJsonPath, 'utf-8');
|
|
136
|
+
return JSON.parse(content);
|
|
137
|
+
}
|
|
138
|
+
catch {
|
|
139
|
+
return null;
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
//# sourceMappingURL=detector.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"detector.js","sourceRoot":"","sources":["../../../src/runtimes/nodejs/detector.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { BaseRuntimeAdapter, RuntimeDetectionResult, RuntimeConfig, SetupOptions, ProcessManager } from '../base.js';
|
|
2
|
+
import { Runtime } from '../../config/schema.js';
|
|
3
|
+
/**
|
|
4
|
+
* Node.js runtime adapter
|
|
5
|
+
*/
|
|
6
|
+
export declare class NodeJSAdapter extends BaseRuntimeAdapter {
|
|
7
|
+
readonly name: Runtime;
|
|
8
|
+
private pm2Manager;
|
|
9
|
+
detect(cwd: string): Promise<RuntimeDetectionResult>;
|
|
10
|
+
getDefaultConfig(cwd: string): Promise<Partial<RuntimeConfig>>;
|
|
11
|
+
generateSetupScript(version: string, options?: SetupOptions): string;
|
|
12
|
+
getProcessManager(): ProcessManager;
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/runtimes/nodejs/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,kBAAkB,EAClB,sBAAsB,EACtB,aAAa,EACb,YAAY,EACZ,cAAc,EACf,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AAIjD;;GAEG;AACH,qBAAa,aAAc,SAAQ,kBAAkB;IACnD,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAY;IAClC,OAAO,CAAC,UAAU,CAAoB;IAEhC,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,sBAAsB,CAAC;IAIpD,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC;IAyBpE,mBAAmB,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,GAAE,YAAiB,GAAG,MAAM;IAiLxE,iBAAiB,IAAI,cAAc;CAGpC"}
|