hostfn 0.1.4 → 0.1.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (145) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +1 -2
  3. package/dist/index.js +7 -1
  4. package/package.json +18 -6
  5. package/src/__tests__/core/sync.test.ts +42 -0
  6. package/src/__tests__/core/workspace.test.ts +180 -0
  7. package/src/commands/deploy.ts +122 -83
  8. package/src/commands/init.ts +1 -1
  9. package/src/config/loader.ts +1 -1
  10. package/src/config/schema.ts +1 -1
  11. package/src/core/ssh.ts +2 -0
  12. package/src/core/sync.ts +64 -23
  13. package/src/core/workspace.ts +111 -6
  14. package/src/index.ts +8 -1
  15. package/dist/__tests__/core/backup.test.d.ts +0 -2
  16. package/dist/__tests__/core/backup.test.d.ts.map +0 -1
  17. package/dist/__tests__/core/backup.test.js +0 -108
  18. package/dist/__tests__/core/backup.test.js.map +0 -1
  19. package/dist/__tests__/core/health.test.d.ts +0 -2
  20. package/dist/__tests__/core/health.test.d.ts.map +0 -1
  21. package/dist/__tests__/core/health.test.js +0 -97
  22. package/dist/__tests__/core/health.test.js.map +0 -1
  23. package/dist/__tests__/core/lock.test.d.ts +0 -2
  24. package/dist/__tests__/core/lock.test.d.ts.map +0 -1
  25. package/dist/__tests__/core/lock.test.js +0 -136
  26. package/dist/__tests__/core/lock.test.js.map +0 -1
  27. package/dist/__tests__/core/nginx-multi-domain.test.d.ts +0 -2
  28. package/dist/__tests__/core/nginx-multi-domain.test.d.ts.map +0 -1
  29. package/dist/__tests__/core/nginx-multi-domain.test.js +0 -158
  30. package/dist/__tests__/core/nginx-multi-domain.test.js.map +0 -1
  31. package/dist/__tests__/runtimes/pm2.test.d.ts +0 -2
  32. package/dist/__tests__/runtimes/pm2.test.d.ts.map +0 -1
  33. package/dist/__tests__/runtimes/pm2.test.js +0 -111
  34. package/dist/__tests__/runtimes/pm2.test.js.map +0 -1
  35. package/dist/__tests__/utils/validation.test.d.ts +0 -2
  36. package/dist/__tests__/utils/validation.test.d.ts.map +0 -1
  37. package/dist/__tests__/utils/validation.test.js +0 -136
  38. package/dist/__tests__/utils/validation.test.js.map +0 -1
  39. package/dist/commands/deploy.d.ts +0 -11
  40. package/dist/commands/deploy.d.ts.map +0 -1
  41. package/dist/commands/deploy.js +0 -636
  42. package/dist/commands/deploy.js.map +0 -1
  43. package/dist/commands/env.d.ts +0 -21
  44. package/dist/commands/env.d.ts.map +0 -1
  45. package/dist/commands/env.js +0 -317
  46. package/dist/commands/env.js.map +0 -1
  47. package/dist/commands/expose.d.ts +0 -6
  48. package/dist/commands/expose.d.ts.map +0 -1
  49. package/dist/commands/expose.js +0 -379
  50. package/dist/commands/expose.js.map +0 -1
  51. package/dist/commands/init.d.ts +0 -2
  52. package/dist/commands/init.d.ts.map +0 -1
  53. package/dist/commands/init.js +0 -175
  54. package/dist/commands/init.js.map +0 -1
  55. package/dist/commands/logs.d.ts +0 -10
  56. package/dist/commands/logs.d.ts.map +0 -1
  57. package/dist/commands/logs.js +0 -75
  58. package/dist/commands/logs.js.map +0 -1
  59. package/dist/commands/rollback.d.ts +0 -6
  60. package/dist/commands/rollback.d.ts.map +0 -1
  61. package/dist/commands/rollback.js +0 -113
  62. package/dist/commands/rollback.js.map +0 -1
  63. package/dist/commands/server/info.d.ts +0 -2
  64. package/dist/commands/server/info.d.ts.map +0 -1
  65. package/dist/commands/server/info.js +0 -104
  66. package/dist/commands/server/info.js.map +0 -1
  67. package/dist/commands/server/setup.d.ts +0 -11
  68. package/dist/commands/server/setup.d.ts.map +0 -1
  69. package/dist/commands/server/setup.js +0 -161
  70. package/dist/commands/server/setup.js.map +0 -1
  71. package/dist/commands/status.d.ts +0 -6
  72. package/dist/commands/status.d.ts.map +0 -1
  73. package/dist/commands/status.js +0 -120
  74. package/dist/commands/status.js.map +0 -1
  75. package/dist/config/loader.d.ts +0 -21
  76. package/dist/config/loader.d.ts.map +0 -1
  77. package/dist/config/loader.js +0 -54
  78. package/dist/config/loader.js.map +0 -1
  79. package/dist/config/schema.d.ts +0 -323
  80. package/dist/config/schema.d.ts.map +0 -1
  81. package/dist/config/schema.js +0 -108
  82. package/dist/config/schema.js.map +0 -1
  83. package/dist/core/backup.d.ts +0 -34
  84. package/dist/core/backup.d.ts.map +0 -1
  85. package/dist/core/backup.js +0 -95
  86. package/dist/core/backup.js.map +0 -1
  87. package/dist/core/health.d.ts +0 -31
  88. package/dist/core/health.d.ts.map +0 -1
  89. package/dist/core/health.js +0 -78
  90. package/dist/core/health.js.map +0 -1
  91. package/dist/core/local.d.ts +0 -19
  92. package/dist/core/local.d.ts.map +0 -1
  93. package/dist/core/local.js +0 -50
  94. package/dist/core/local.js.map +0 -1
  95. package/dist/core/lock.d.ts +0 -28
  96. package/dist/core/lock.d.ts.map +0 -1
  97. package/dist/core/lock.js +0 -89
  98. package/dist/core/lock.js.map +0 -1
  99. package/dist/core/nginx.d.ts +0 -43
  100. package/dist/core/nginx.d.ts.map +0 -1
  101. package/dist/core/nginx.js +0 -131
  102. package/dist/core/nginx.js.map +0 -1
  103. package/dist/core/ssh.d.ts +0 -79
  104. package/dist/core/ssh.d.ts.map +0 -1
  105. package/dist/core/ssh.js +0 -264
  106. package/dist/core/ssh.js.map +0 -1
  107. package/dist/core/sync.d.ts +0 -25
  108. package/dist/core/sync.d.ts.map +0 -1
  109. package/dist/core/sync.js +0 -117
  110. package/dist/core/sync.js.map +0 -1
  111. package/dist/core/workspace.d.ts +0 -13
  112. package/dist/core/workspace.d.ts.map +0 -1
  113. package/dist/core/workspace.js +0 -141
  114. package/dist/core/workspace.js.map +0 -1
  115. package/dist/index.d.ts +0 -3
  116. package/dist/index.d.ts.map +0 -1
  117. package/dist/index.js.map +0 -1
  118. package/dist/runtimes/base.d.ts +0 -115
  119. package/dist/runtimes/base.d.ts.map +0 -1
  120. package/dist/runtimes/base.js +0 -16
  121. package/dist/runtimes/base.js.map +0 -1
  122. package/dist/runtimes/nodejs/detector.d.ts +0 -47
  123. package/dist/runtimes/nodejs/detector.d.ts.map +0 -1
  124. package/dist/runtimes/nodejs/detector.js +0 -143
  125. package/dist/runtimes/nodejs/detector.js.map +0 -1
  126. package/dist/runtimes/nodejs/index.d.ts +0 -14
  127. package/dist/runtimes/nodejs/index.d.ts.map +0 -1
  128. package/dist/runtimes/nodejs/index.js +0 -213
  129. package/dist/runtimes/nodejs/index.js.map +0 -1
  130. package/dist/runtimes/nodejs/pm2.d.ts +0 -17
  131. package/dist/runtimes/nodejs/pm2.d.ts.map +0 -1
  132. package/dist/runtimes/nodejs/pm2.js +0 -60
  133. package/dist/runtimes/nodejs/pm2.js.map +0 -1
  134. package/dist/runtimes/registry.d.ts +0 -34
  135. package/dist/runtimes/registry.d.ts.map +0 -1
  136. package/dist/runtimes/registry.js +0 -58
  137. package/dist/runtimes/registry.js.map +0 -1
  138. package/dist/utils/logger.d.ts +0 -47
  139. package/dist/utils/logger.d.ts.map +0 -1
  140. package/dist/utils/logger.js +0 -76
  141. package/dist/utils/logger.js.map +0 -1
  142. package/dist/utils/validation.d.ts +0 -32
  143. package/dist/utils/validation.d.ts.map +0 -1
  144. package/dist/utils/validation.js +0 -125
  145. package/dist/utils/validation.js.map +0 -1
@@ -1,120 +0,0 @@
1
- import ora from 'ora';
2
- import chalk from 'chalk';
3
- import { Logger } from '../utils/logger.js';
4
- import { ConfigLoader } from '../config/loader.js';
5
- import { createSSHConnection } from '../core/ssh.js';
6
- export async function statusCommand(environment, options = {}) {
7
- Logger.header(`Status - ${environment}`);
8
- // Load configuration
9
- const config = ConfigLoader.load();
10
- const envConfig = config.environments[environment];
11
- if (!envConfig) {
12
- throw new Error(`Environment '${environment}' not found`);
13
- }
14
- // Handle multi-service status
15
- if (config.services && Object.keys(config.services).length > 0) {
16
- if (options.service) {
17
- // Show status for specific service
18
- if (!config.services[options.service]) {
19
- throw new Error(`Service '${options.service}' not found\n` +
20
- `Available: ${Object.keys(config.services).join(', ')}`);
21
- }
22
- const serviceConfig = config.services[options.service];
23
- const serviceServer = serviceConfig.server || envConfig.server;
24
- await showServiceStatus(`${config.name}-${options.service}-${environment}`, serviceServer, options.service);
25
- }
26
- else {
27
- // Show status for all services
28
- Logger.info(`Showing status for all ${Object.keys(config.services).length} services`);
29
- Logger.br();
30
- for (const serviceName of Object.keys(config.services)) {
31
- const serviceConfig = config.services[serviceName];
32
- const serviceServer = serviceConfig.server || envConfig.server;
33
- await showServiceStatus(`${config.name}-${serviceName}-${environment}`, serviceServer, serviceName);
34
- Logger.br();
35
- }
36
- }
37
- return;
38
- }
39
- const serviceName = `${config.name}-${environment}`;
40
- try {
41
- await showServiceStatus(serviceName, envConfig.server);
42
- }
43
- catch (error) {
44
- Logger.error(error instanceof Error ? error.message : String(error));
45
- process.exit(1);
46
- }
47
- }
48
- async function showServiceStatus(serviceName, server, displayName) {
49
- const spinner = ora(`Fetching status for ${displayName || serviceName}...`).start();
50
- let ssh = null;
51
- try {
52
- ssh = await createSSHConnection(server);
53
- spinner.succeed('Connected');
54
- Logger.br();
55
- // Get PM2 service details
56
- const result = await ssh.exec(`pm2 jlist | jq '.[] | select(.name=="${serviceName}")'`);
57
- if (result.stdout.trim()) {
58
- const service = JSON.parse(result.stdout);
59
- const status = service.pm2_env?.status || 'unknown';
60
- const statusColor = status === 'online' ? chalk.green : chalk.red;
61
- if (displayName) {
62
- Logger.section(`Service: ${displayName}`);
63
- }
64
- else {
65
- Logger.section('Service Information');
66
- }
67
- Logger.kv('Name', service.name);
68
- Logger.kv('Status', statusColor(status));
69
- Logger.kv('PID', service.pid?.toString() || 'N/A');
70
- Logger.kv('Restarts', service.pm2_env?.restart_time?.toString() || '0');
71
- Logger.br();
72
- Logger.section('Resources');
73
- const memory = service.monit?.memory
74
- ? `${Math.round(service.monit.memory / 1024 / 1024)}MB`
75
- : 'N/A';
76
- const cpu = service.monit?.cpu !== undefined
77
- ? `${service.monit.cpu}%`
78
- : 'N/A';
79
- Logger.kv('Memory', memory);
80
- Logger.kv('CPU', cpu);
81
- Logger.br();
82
- Logger.section('Timing');
83
- if (service.pm2_env?.pm_uptime) {
84
- const uptime = Date.now() - service.pm2_env.pm_uptime;
85
- Logger.kv('Uptime', formatUptime(uptime));
86
- }
87
- if (service.pm2_env?.created_at) {
88
- Logger.kv('Created', new Date(service.pm2_env.created_at).toLocaleString());
89
- }
90
- Logger.br();
91
- }
92
- else {
93
- Logger.warn(`Service '${serviceName}' not found`);
94
- Logger.info('Has the service been deployed?');
95
- }
96
- }
97
- catch (error) {
98
- spinner.fail('Failed to get status');
99
- throw error;
100
- }
101
- finally {
102
- if (ssh) {
103
- ssh.disconnect();
104
- }
105
- }
106
- }
107
- function formatUptime(ms) {
108
- const seconds = Math.floor(ms / 1000);
109
- const minutes = Math.floor(seconds / 60);
110
- const hours = Math.floor(minutes / 60);
111
- const days = Math.floor(hours / 24);
112
- if (days > 0)
113
- return `${days}d ${hours % 24}h ${minutes % 60}m`;
114
- if (hours > 0)
115
- return `${hours}h ${minutes % 60}m`;
116
- if (minutes > 0)
117
- return `${minutes}m ${seconds % 60}s`;
118
- return `${seconds}s`;
119
- }
120
- //# sourceMappingURL=status.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"status.js","sourceRoot":"","sources":["../../src/commands/status.ts"],"names":[],"mappings":"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"}
@@ -1,21 +0,0 @@
1
- import { HostfnConfig } from './schema.js';
2
- export declare class ConfigLoader {
3
- private static CONFIG_FILENAME;
4
- /**
5
- * Load configuration from file
6
- */
7
- static load(cwd?: string): HostfnConfig;
8
- /**
9
- * Validate configuration against schema
10
- */
11
- static validate(config: unknown): HostfnConfig;
12
- /**
13
- * Check if config file exists
14
- */
15
- static exists(cwd?: string): boolean;
16
- /**
17
- * Get config file path
18
- */
19
- static getConfigPath(cwd?: string): string;
20
- }
21
- //# sourceMappingURL=loader.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"loader.d.ts","sourceRoot":"","sources":["../../src/config/loader.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,YAAY,EAAsB,MAAM,aAAa,CAAC;AAE/D,qBAAa,YAAY;IACvB,OAAO,CAAC,MAAM,CAAC,eAAe,CAAwB;IAEtD;;OAEG;IACH,MAAM,CAAC,IAAI,CAAC,GAAG,GAAE,MAAsB,GAAG,YAAY;IAsBtD;;OAEG;IACH,MAAM,CAAC,QAAQ,CAAC,MAAM,EAAE,OAAO,GAAG,YAAY;IAgB9C;;OAEG;IACH,MAAM,CAAC,MAAM,CAAC,GAAG,GAAE,MAAsB,GAAG,OAAO;IAKnD;;OAEG;IACH,MAAM,CAAC,aAAa,CAAC,GAAG,GAAE,MAAsB,GAAG,MAAM;CAG1D"}
@@ -1,54 +0,0 @@
1
- import { readFileSync, existsSync } from 'fs';
2
- import { resolve } from 'path';
3
- import { HostfnConfigSchema } from './schema.js';
4
- export class ConfigLoader {
5
- static CONFIG_FILENAME = 'hostfn.config.json';
6
- /**
7
- * Load configuration from file
8
- */
9
- static load(cwd = process.cwd()) {
10
- const configPath = resolve(cwd, this.CONFIG_FILENAME);
11
- if (!existsSync(configPath)) {
12
- throw new Error(`Configuration file not found: ${configPath}\n` +
13
- `Run 'hostfn init' to create one.`);
14
- }
15
- try {
16
- const content = readFileSync(configPath, 'utf-8');
17
- const json = JSON.parse(content);
18
- return this.validate(json);
19
- }
20
- catch (error) {
21
- if (error instanceof SyntaxError) {
22
- throw new Error(`Invalid JSON in config file: ${error.message}`);
23
- }
24
- throw error;
25
- }
26
- }
27
- /**
28
- * Validate configuration against schema
29
- */
30
- static validate(config) {
31
- const result = HostfnConfigSchema.safeParse(config);
32
- if (!result.success) {
33
- const errors = result.error.errors
34
- .map(err => ` - ${err.path.join('.')}: ${err.message}`)
35
- .join('\n');
36
- throw new Error(`Invalid configuration:\n${errors}`);
37
- }
38
- return result.data;
39
- }
40
- /**
41
- * Check if config file exists
42
- */
43
- static exists(cwd = process.cwd()) {
44
- const configPath = resolve(cwd, this.CONFIG_FILENAME);
45
- return existsSync(configPath);
46
- }
47
- /**
48
- * Get config file path
49
- */
50
- static getConfigPath(cwd = process.cwd()) {
51
- return resolve(cwd, this.CONFIG_FILENAME);
52
- }
53
- }
54
- //# sourceMappingURL=loader.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"loader.js","sourceRoot":"","sources":["../../src/config/loader.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC;AAC9C,OAAO,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AAC/B,OAAO,EAAgB,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAE/D,MAAM,OAAO,YAAY;IACf,MAAM,CAAC,eAAe,GAAG,oBAAoB,CAAC;IAEtD;;OAEG;IACH,MAAM,CAAC,IAAI,CAAC,MAAc,OAAO,CAAC,GAAG,EAAE;QACrC,MAAM,UAAU,GAAG,OAAO,CAAC,GAAG,EAAE,IAAI,CAAC,eAAe,CAAC,CAAC;QAEtD,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;YAC5B,MAAM,IAAI,KAAK,CACb,iCAAiC,UAAU,IAAI;gBAC/C,kCAAkC,CACnC,CAAC;QACJ,CAAC;QAED,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,YAAY,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;YAClD,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YACjC,OAAO,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QAC7B,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,KAAK,YAAY,WAAW,EAAE,CAAC;gBACjC,MAAM,IAAI,KAAK,CAAC,gCAAgC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;YACnE,CAAC;YACD,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,QAAQ,CAAC,MAAe;QAC7B,MAAM,MAAM,GAAG,kBAAkB,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;QAEpD,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;YACpB,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,MAAM;iBAC/B,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,OAAO,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,GAAG,CAAC,OAAO,EAAE,CAAC;iBACvD,IAAI,CAAC,IAAI,CAAC,CAAC;YAEd,MAAM,IAAI,KAAK,CACb,2BAA2B,MAAM,EAAE,CACpC,CAAC;QACJ,CAAC;QAED,OAAO,MAAM,CAAC,IAAI,CAAC;IACrB,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,MAAM,CAAC,MAAc,OAAO,CAAC,GAAG,EAAE;QACvC,MAAM,UAAU,GAAG,OAAO,CAAC,GAAG,EAAE,IAAI,CAAC,eAAe,CAAC,CAAC;QACtD,OAAO,UAAU,CAAC,UAAU,CAAC,CAAC;IAChC,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,aAAa,CAAC,MAAc,OAAO,CAAC,GAAG,EAAE;QAC9C,OAAO,OAAO,CAAC,GAAG,EAAE,IAAI,CAAC,eAAe,CAAC,CAAC;IAC5C,CAAC"}
@@ -1,323 +0,0 @@
1
- import { z } from 'zod';
2
- export declare const RuntimeSchema: z.ZodEnum<["nodejs", "python", "go", "ruby", "rust", "docker"]>;
3
- export type Runtime = z.infer<typeof RuntimeSchema>;
4
- export declare const EnvironmentConfigSchema: z.ZodObject<{
5
- server: z.ZodString;
6
- port: z.ZodNumber;
7
- instances: z.ZodDefault<z.ZodUnion<[z.ZodNumber, z.ZodLiteral<"max">]>>;
8
- domain: z.ZodOptional<z.ZodUnion<[z.ZodString, z.ZodArray<z.ZodString, "many">]>>;
9
- sslEmail: z.ZodOptional<z.ZodString>;
10
- }, "strip", z.ZodTypeAny, {
11
- server: string;
12
- port: number;
13
- instances: number | "max";
14
- domain?: string | string[] | undefined;
15
- sslEmail?: string | undefined;
16
- }, {
17
- server: string;
18
- port: number;
19
- instances?: number | "max" | undefined;
20
- domain?: string | string[] | undefined;
21
- sslEmail?: string | undefined;
22
- }>;
23
- export type EnvironmentConfig = z.infer<typeof EnvironmentConfigSchema>;
24
- export declare const BuildConfigSchema: z.ZodOptional<z.ZodObject<{
25
- command: z.ZodString;
26
- directory: z.ZodDefault<z.ZodString>;
27
- nodeModules: z.ZodDefault<z.ZodEnum<["all", "production", "none"]>>;
28
- }, "strip", z.ZodTypeAny, {
29
- command: string;
30
- directory: string;
31
- nodeModules: "all" | "production" | "none";
32
- }, {
33
- command: string;
34
- directory?: string | undefined;
35
- nodeModules?: "all" | "production" | "none" | undefined;
36
- }>>;
37
- export type BuildConfig = z.infer<typeof BuildConfigSchema>;
38
- export declare const StartConfigSchema: z.ZodObject<{
39
- command: z.ZodString;
40
- entry: z.ZodOptional<z.ZodString>;
41
- }, "strip", z.ZodTypeAny, {
42
- command: string;
43
- entry?: string | undefined;
44
- }, {
45
- command: string;
46
- entry?: string | undefined;
47
- }>;
48
- export type StartConfig = z.infer<typeof StartConfigSchema>;
49
- export declare const HealthCheckConfigSchema: z.ZodOptional<z.ZodObject<{
50
- path: z.ZodDefault<z.ZodString>;
51
- timeout: z.ZodDefault<z.ZodNumber>;
52
- retries: z.ZodDefault<z.ZodNumber>;
53
- interval: z.ZodDefault<z.ZodNumber>;
54
- }, "strip", z.ZodTypeAny, {
55
- path: string;
56
- timeout: number;
57
- retries: number;
58
- interval: number;
59
- }, {
60
- path?: string | undefined;
61
- timeout?: number | undefined;
62
- retries?: number | undefined;
63
- interval?: number | undefined;
64
- }>>;
65
- export type HealthCheckConfig = z.infer<typeof HealthCheckConfigSchema>;
66
- export declare const EnvConfigSchema: z.ZodObject<{
67
- required: z.ZodDefault<z.ZodArray<z.ZodString, "many">>;
68
- optional: z.ZodDefault<z.ZodArray<z.ZodString, "many">>;
69
- }, "strip", z.ZodTypeAny, {
70
- required: string[];
71
- optional: string[];
72
- }, {
73
- required?: string[] | undefined;
74
- optional?: string[] | undefined;
75
- }>;
76
- export type EnvConfig = z.infer<typeof EnvConfigSchema>;
77
- export declare const SyncConfigSchema: z.ZodOptional<z.ZodObject<{
78
- exclude: z.ZodDefault<z.ZodArray<z.ZodString, "many">>;
79
- include: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
80
- }, "strip", z.ZodTypeAny, {
81
- exclude: string[];
82
- include?: string[] | undefined;
83
- }, {
84
- exclude?: string[] | undefined;
85
- include?: string[] | undefined;
86
- }>>;
87
- export type SyncConfig = z.infer<typeof SyncConfigSchema>;
88
- export declare const BackupConfigSchema: z.ZodOptional<z.ZodObject<{
89
- keep: z.ZodDefault<z.ZodNumber>;
90
- }, "strip", z.ZodTypeAny, {
91
- keep: number;
92
- }, {
93
- keep?: number | undefined;
94
- }>>;
95
- export type BackupConfig = z.infer<typeof BackupConfigSchema>;
96
- export declare const ServiceConfigSchema: z.ZodObject<{
97
- port: z.ZodNumber;
98
- path: z.ZodString;
99
- domain: z.ZodOptional<z.ZodUnion<[z.ZodString, z.ZodArray<z.ZodString, "many">]>>;
100
- exposePath: z.ZodOptional<z.ZodString>;
101
- server: z.ZodOptional<z.ZodString>;
102
- instances: z.ZodOptional<z.ZodUnion<[z.ZodNumber, z.ZodLiteral<"max">]>>;
103
- }, "strip", z.ZodTypeAny, {
104
- path: string;
105
- port: number;
106
- server?: string | undefined;
107
- instances?: number | "max" | undefined;
108
- domain?: string | string[] | undefined;
109
- exposePath?: string | undefined;
110
- }, {
111
- path: string;
112
- port: number;
113
- server?: string | undefined;
114
- instances?: number | "max" | undefined;
115
- domain?: string | string[] | undefined;
116
- exposePath?: string | undefined;
117
- }>;
118
- export type ServiceConfig = z.infer<typeof ServiceConfigSchema>;
119
- export declare const HostfnConfigSchema: z.ZodObject<{
120
- name: z.ZodString;
121
- runtime: z.ZodEnum<["nodejs", "python", "go", "ruby", "rust", "docker"]>;
122
- version: z.ZodString;
123
- environments: z.ZodRecord<z.ZodString, z.ZodObject<{
124
- server: z.ZodString;
125
- port: z.ZodNumber;
126
- instances: z.ZodDefault<z.ZodUnion<[z.ZodNumber, z.ZodLiteral<"max">]>>;
127
- domain: z.ZodOptional<z.ZodUnion<[z.ZodString, z.ZodArray<z.ZodString, "many">]>>;
128
- sslEmail: z.ZodOptional<z.ZodString>;
129
- }, "strip", z.ZodTypeAny, {
130
- server: string;
131
- port: number;
132
- instances: number | "max";
133
- domain?: string | string[] | undefined;
134
- sslEmail?: string | undefined;
135
- }, {
136
- server: string;
137
- port: number;
138
- instances?: number | "max" | undefined;
139
- domain?: string | string[] | undefined;
140
- sslEmail?: string | undefined;
141
- }>>;
142
- build: z.ZodOptional<z.ZodObject<{
143
- command: z.ZodString;
144
- directory: z.ZodDefault<z.ZodString>;
145
- nodeModules: z.ZodDefault<z.ZodEnum<["all", "production", "none"]>>;
146
- }, "strip", z.ZodTypeAny, {
147
- command: string;
148
- directory: string;
149
- nodeModules: "all" | "production" | "none";
150
- }, {
151
- command: string;
152
- directory?: string | undefined;
153
- nodeModules?: "all" | "production" | "none" | undefined;
154
- }>>;
155
- start: z.ZodObject<{
156
- command: z.ZodString;
157
- entry: z.ZodOptional<z.ZodString>;
158
- }, "strip", z.ZodTypeAny, {
159
- command: string;
160
- entry?: string | undefined;
161
- }, {
162
- command: string;
163
- entry?: string | undefined;
164
- }>;
165
- health: z.ZodOptional<z.ZodObject<{
166
- path: z.ZodDefault<z.ZodString>;
167
- timeout: z.ZodDefault<z.ZodNumber>;
168
- retries: z.ZodDefault<z.ZodNumber>;
169
- interval: z.ZodDefault<z.ZodNumber>;
170
- }, "strip", z.ZodTypeAny, {
171
- path: string;
172
- timeout: number;
173
- retries: number;
174
- interval: number;
175
- }, {
176
- path?: string | undefined;
177
- timeout?: number | undefined;
178
- retries?: number | undefined;
179
- interval?: number | undefined;
180
- }>>;
181
- env: z.ZodDefault<z.ZodObject<{
182
- required: z.ZodDefault<z.ZodArray<z.ZodString, "many">>;
183
- optional: z.ZodDefault<z.ZodArray<z.ZodString, "many">>;
184
- }, "strip", z.ZodTypeAny, {
185
- required: string[];
186
- optional: string[];
187
- }, {
188
- required?: string[] | undefined;
189
- optional?: string[] | undefined;
190
- }>>;
191
- sync: z.ZodOptional<z.ZodObject<{
192
- exclude: z.ZodDefault<z.ZodArray<z.ZodString, "many">>;
193
- include: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
194
- }, "strip", z.ZodTypeAny, {
195
- exclude: string[];
196
- include?: string[] | undefined;
197
- }, {
198
- exclude?: string[] | undefined;
199
- include?: string[] | undefined;
200
- }>>;
201
- backup: z.ZodOptional<z.ZodObject<{
202
- keep: z.ZodDefault<z.ZodNumber>;
203
- }, "strip", z.ZodTypeAny, {
204
- keep: number;
205
- }, {
206
- keep?: number | undefined;
207
- }>>;
208
- services: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodObject<{
209
- port: z.ZodNumber;
210
- path: z.ZodString;
211
- domain: z.ZodOptional<z.ZodUnion<[z.ZodString, z.ZodArray<z.ZodString, "many">]>>;
212
- exposePath: z.ZodOptional<z.ZodString>;
213
- server: z.ZodOptional<z.ZodString>;
214
- instances: z.ZodOptional<z.ZodUnion<[z.ZodNumber, z.ZodLiteral<"max">]>>;
215
- }, "strip", z.ZodTypeAny, {
216
- path: string;
217
- port: number;
218
- server?: string | undefined;
219
- instances?: number | "max" | undefined;
220
- domain?: string | string[] | undefined;
221
- exposePath?: string | undefined;
222
- }, {
223
- path: string;
224
- port: number;
225
- server?: string | undefined;
226
- instances?: number | "max" | undefined;
227
- domain?: string | string[] | undefined;
228
- exposePath?: string | undefined;
229
- }>>>;
230
- }, "strip", z.ZodTypeAny, {
231
- name: string;
232
- runtime: "nodejs" | "python" | "go" | "ruby" | "rust" | "docker";
233
- version: string;
234
- environments: Record<string, {
235
- server: string;
236
- port: number;
237
- instances: number | "max";
238
- domain?: string | string[] | undefined;
239
- sslEmail?: string | undefined;
240
- }>;
241
- start: {
242
- command: string;
243
- entry?: string | undefined;
244
- };
245
- env: {
246
- required: string[];
247
- optional: string[];
248
- };
249
- build?: {
250
- command: string;
251
- directory: string;
252
- nodeModules: "all" | "production" | "none";
253
- } | undefined;
254
- health?: {
255
- path: string;
256
- timeout: number;
257
- retries: number;
258
- interval: number;
259
- } | undefined;
260
- sync?: {
261
- exclude: string[];
262
- include?: string[] | undefined;
263
- } | undefined;
264
- backup?: {
265
- keep: number;
266
- } | undefined;
267
- services?: Record<string, {
268
- path: string;
269
- port: number;
270
- server?: string | undefined;
271
- instances?: number | "max" | undefined;
272
- domain?: string | string[] | undefined;
273
- exposePath?: string | undefined;
274
- }> | undefined;
275
- }, {
276
- name: string;
277
- runtime: "nodejs" | "python" | "go" | "ruby" | "rust" | "docker";
278
- version: string;
279
- environments: Record<string, {
280
- server: string;
281
- port: number;
282
- instances?: number | "max" | undefined;
283
- domain?: string | string[] | undefined;
284
- sslEmail?: string | undefined;
285
- }>;
286
- start: {
287
- command: string;
288
- entry?: string | undefined;
289
- };
290
- build?: {
291
- command: string;
292
- directory?: string | undefined;
293
- nodeModules?: "all" | "production" | "none" | undefined;
294
- } | undefined;
295
- health?: {
296
- path?: string | undefined;
297
- timeout?: number | undefined;
298
- retries?: number | undefined;
299
- interval?: number | undefined;
300
- } | undefined;
301
- env?: {
302
- required?: string[] | undefined;
303
- optional?: string[] | undefined;
304
- } | undefined;
305
- sync?: {
306
- exclude?: string[] | undefined;
307
- include?: string[] | undefined;
308
- } | undefined;
309
- backup?: {
310
- keep?: number | undefined;
311
- } | undefined;
312
- services?: Record<string, {
313
- path: string;
314
- port: number;
315
- server?: string | undefined;
316
- instances?: number | "max" | undefined;
317
- domain?: string | string[] | undefined;
318
- exposePath?: string | undefined;
319
- }> | undefined;
320
- }>;
321
- export type HostfnConfig = z.infer<typeof HostfnConfigSchema>;
322
- export declare const DEFAULT_CONFIG: Partial<HostfnConfig>;
323
- //# sourceMappingURL=schema.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../src/config/schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,eAAO,MAAM,aAAa,iEAA+D,CAAC;AAC1F,MAAM,MAAM,OAAO,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,aAAa,CAAC,CAAC;AAGpD,eAAO,MAAM,uBAAuB;;;;;;;;;;;;;;;;;;EAMlC,CAAC;AAEH,MAAM,MAAM,iBAAiB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,uBAAuB,CAAC,CAAC;AAGxE,eAAO,MAAM,iBAAiB;;;;;;;;;;;;GAIjB,CAAC;AAEd,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAC;AAG5D,eAAO,MAAM,iBAAiB;;;;;;;;;EAG5B,CAAC;AAEH,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAC;AAG5D,eAAO,MAAM,uBAAuB;;;;;;;;;;;;;;;GAKvB,CAAC;AAEd,MAAM,MAAM,iBAAiB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,uBAAuB,CAAC,CAAC;AAGxE,eAAO,MAAM,eAAe;;;;;;;;;EAG1B,CAAC;AAEH,MAAM,MAAM,SAAS,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,eAAe,CAAC,CAAC;AAGxD,eAAO,MAAM,gBAAgB;;;;;;;;;GAchB,CAAC;AAEd,MAAM,MAAM,UAAU,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,gBAAgB,CAAC,CAAC;AAG1D,eAAO,MAAM,kBAAkB;;;;;;GAElB,CAAC;AAEd,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAC;AAG9D,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;;;;;;;EAO9B,CAAC;AAEH,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAC;AAGhE,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAiB7B,CAAC;AAEH,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAC;AAG9D,eAAO,MAAM,cAAc,EAAE,OAAO,CAAC,YAAY,CA0BhD,CAAC"}
@@ -1,108 +0,0 @@
1
- import { z } from 'zod';
2
- // Runtime types - extensible for future languages
3
- export const RuntimeSchema = z.enum(['nodejs', 'python', 'go', 'ruby', 'rust', 'docker']);
4
- // Environment configuration
5
- export const EnvironmentConfigSchema = z.object({
6
- server: z.string().describe('SSH connection string (user@host)'),
7
- port: z.number().int().positive().describe('Port for the service'),
8
- instances: z.union([z.number().int().positive(), z.literal('max')]).default(1),
9
- domain: z.union([z.string(), z.array(z.string())]).optional().describe('Domain name(s) for the service - can be a single domain or array of domains'),
10
- sslEmail: z.string().email().optional().describe('Email for SSL certificate'),
11
- });
12
- // Build configuration
13
- export const BuildConfigSchema = z.object({
14
- command: z.string().describe('Build command to run'),
15
- directory: z.string().default('dist').describe('Output directory'),
16
- nodeModules: z.enum(['all', 'production', 'none']).default('production'),
17
- }).optional();
18
- // Start configuration
19
- export const StartConfigSchema = z.object({
20
- command: z.string().describe('Start command'),
21
- entry: z.string().optional().describe('Entry point file'),
22
- });
23
- // Health check configuration
24
- export const HealthCheckConfigSchema = z.object({
25
- path: z.string().default('/health'),
26
- timeout: z.number().int().positive().default(60),
27
- retries: z.number().int().positive().default(10),
28
- interval: z.number().int().positive().default(3),
29
- }).optional();
30
- // Environment variables configuration
31
- export const EnvConfigSchema = z.object({
32
- required: z.array(z.string()).default([]),
33
- optional: z.array(z.string()).default([]),
34
- });
35
- // Sync configuration
36
- export const SyncConfigSchema = z.object({
37
- exclude: z.array(z.string()).default([
38
- 'node_modules',
39
- '.git',
40
- '.github',
41
- 'dist',
42
- 'build',
43
- '.env',
44
- '.env.*',
45
- '*.log',
46
- '.turbo',
47
- '.wrangler',
48
- ]),
49
- include: z.array(z.string()).optional(),
50
- }).optional();
51
- // Backup configuration
52
- export const BackupConfigSchema = z.object({
53
- keep: z.number().int().positive().default(5),
54
- }).optional();
55
- // Service configuration (for monorepos)
56
- export const ServiceConfigSchema = z.object({
57
- port: z.number().int().positive(),
58
- path: z.string().describe('Path in monorepo'),
59
- domain: z.union([z.string(), z.array(z.string())]).optional().describe('Domain name(s) for this service - can be a single domain or array of domains'),
60
- exposePath: z.string().optional().describe('Nginx path prefix (e.g., "/api", "/docs")'),
61
- server: z.string().optional().describe('Override server for this service (defaults to environment server)'),
62
- instances: z.union([z.number().int().positive(), z.literal('max')]).optional().describe('PM2 instances for this service'),
63
- });
64
- // Main configuration schema
65
- export const HostfnConfigSchema = z.object({
66
- name: z.string().describe('Application name'),
67
- runtime: RuntimeSchema.describe('Runtime/language'),
68
- version: z.string().describe('Runtime version'),
69
- environments: z.record(z.string(), EnvironmentConfigSchema)
70
- .describe('Environment configurations'),
71
- build: BuildConfigSchema,
72
- start: StartConfigSchema,
73
- health: HealthCheckConfigSchema,
74
- env: EnvConfigSchema.default({ required: [], optional: [] }),
75
- sync: SyncConfigSchema,
76
- backup: BackupConfigSchema,
77
- services: z.record(z.string(), ServiceConfigSchema).optional()
78
- .describe('Multi-service configuration for monorepos'),
79
- });
80
- // Default configuration for new projects
81
- export const DEFAULT_CONFIG = {
82
- health: {
83
- path: '/health',
84
- timeout: 60,
85
- retries: 10,
86
- interval: 3,
87
- },
88
- env: {
89
- required: [],
90
- optional: [],
91
- },
92
- sync: {
93
- exclude: [
94
- 'node_modules',
95
- '.git',
96
- '.github',
97
- 'dist',
98
- 'build',
99
- '.env',
100
- '.env.*',
101
- '*.log',
102
- ],
103
- },
104
- backup: {
105
- keep: 5,
106
- },
107
- };
108
- //# sourceMappingURL=schema.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"schema.js","sourceRoot":"","sources":["../../src/config/schema.ts"],"names":[],"mappings":"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"}