hostfn 0.1.5 → 0.1.7

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