@developers-homelab/runestone-cli 1.0.0
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/LICENSE +21 -0
- package/README.md +107 -0
- package/bin/runestone +17 -0
- package/dist/cli.d.ts +4 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +78 -0
- package/dist/cli.js.map +1 -0
- package/dist/commands/certs.d.ts +3 -0
- package/dist/commands/certs.d.ts.map +1 -0
- package/dist/commands/certs.js +110 -0
- package/dist/commands/certs.js.map +1 -0
- package/dist/commands/down.d.ts +3 -0
- package/dist/commands/down.d.ts.map +1 -0
- package/dist/commands/down.js +59 -0
- package/dist/commands/down.js.map +1 -0
- package/dist/commands/keys.d.ts +3 -0
- package/dist/commands/keys.d.ts.map +1 -0
- package/dist/commands/keys.js +51 -0
- package/dist/commands/keys.js.map +1 -0
- package/dist/commands/setup.d.ts +15 -0
- package/dist/commands/setup.d.ts.map +1 -0
- package/dist/commands/setup.js +641 -0
- package/dist/commands/setup.js.map +1 -0
- package/dist/commands/status.d.ts +3 -0
- package/dist/commands/status.d.ts.map +1 -0
- package/dist/commands/status.js +57 -0
- package/dist/commands/status.js.map +1 -0
- package/dist/commands/stop.d.ts +3 -0
- package/dist/commands/stop.d.ts.map +1 -0
- package/dist/commands/stop.js +25 -0
- package/dist/commands/stop.js.map +1 -0
- package/dist/commands/up.d.ts +3 -0
- package/dist/commands/up.d.ts.map +1 -0
- package/dist/commands/up.js +72 -0
- package/dist/commands/up.js.map +1 -0
- package/dist/i18n/index.d.ts +316 -0
- package/dist/i18n/index.d.ts.map +1 -0
- package/dist/i18n/index.js +378 -0
- package/dist/i18n/index.js.map +1 -0
- package/dist/services/cert-manager.d.ts +38 -0
- package/dist/services/cert-manager.d.ts.map +1 -0
- package/dist/services/cert-manager.js +260 -0
- package/dist/services/cert-manager.js.map +1 -0
- package/dist/services/docker-compose.d.ts +24 -0
- package/dist/services/docker-compose.d.ts.map +1 -0
- package/dist/services/docker-compose.js +132 -0
- package/dist/services/docker-compose.js.map +1 -0
- package/dist/services/docker-exec.d.ts +10 -0
- package/dist/services/docker-exec.d.ts.map +1 -0
- package/dist/services/docker-exec.js +39 -0
- package/dist/services/docker-exec.js.map +1 -0
- package/dist/services/docker-network.d.ts +13 -0
- package/dist/services/docker-network.d.ts.map +1 -0
- package/dist/services/docker-network.js +58 -0
- package/dist/services/docker-network.js.map +1 -0
- package/dist/services/docker-run.d.ts +18 -0
- package/dist/services/docker-run.d.ts.map +1 -0
- package/dist/services/docker-run.js +56 -0
- package/dist/services/docker-run.js.map +1 -0
- package/dist/services/docker-volume.d.ts +12 -0
- package/dist/services/docker-volume.d.ts.map +1 -0
- package/dist/services/docker-volume.js +57 -0
- package/dist/services/docker-volume.js.map +1 -0
- package/dist/services/domain-checker.d.ts +29 -0
- package/dist/services/domain-checker.d.ts.map +1 -0
- package/dist/services/domain-checker.js +149 -0
- package/dist/services/domain-checker.js.map +1 -0
- package/dist/services/port-checker.d.ts +3 -0
- package/dist/services/port-checker.d.ts.map +1 -0
- package/dist/services/port-checker.js +45 -0
- package/dist/services/port-checker.js.map +1 -0
- package/dist/services/ssh-manager.d.ts +7 -0
- package/dist/services/ssh-manager.d.ts.map +1 -0
- package/dist/services/ssh-manager.js +125 -0
- package/dist/services/ssh-manager.js.map +1 -0
- package/dist/utils/command.d.ts +6 -0
- package/dist/utils/command.d.ts.map +1 -0
- package/dist/utils/command.js +34 -0
- package/dist/utils/command.js.map +1 -0
- package/dist/utils/docker-checker.d.ts +5 -0
- package/dist/utils/docker-checker.d.ts.map +1 -0
- package/dist/utils/docker-checker.js +31 -0
- package/dist/utils/docker-checker.js.map +1 -0
- package/dist/utils/env-loader.d.ts +32 -0
- package/dist/utils/env-loader.d.ts.map +1 -0
- package/dist/utils/env-loader.js +113 -0
- package/dist/utils/env-loader.js.map +1 -0
- package/dist/utils/logger.d.ts +8 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +25 -0
- package/dist/utils/logger.js.map +1 -0
- package/dist/utils/logo.d.ts +2 -0
- package/dist/utils/logo.d.ts.map +1 -0
- package/dist/utils/logo.js +15 -0
- package/dist/utils/logo.js.map +1 -0
- package/dist/utils/os-detector.d.ts +10 -0
- package/dist/utils/os-detector.d.ts.map +1 -0
- package/dist/utils/os-detector.js +76 -0
- package/dist/utils/os-detector.js.map +1 -0
- package/dist/utils/path-helpers.d.ts +9 -0
- package/dist/utils/path-helpers.d.ts.map +1 -0
- package/dist/utils/path-helpers.js +96 -0
- package/dist/utils/path-helpers.js.map +1 -0
- package/dist/utils/port-checker.d.ts +3 -0
- package/dist/utils/port-checker.d.ts.map +1 -0
- package/dist/utils/port-checker.js +45 -0
- package/dist/utils/port-checker.js.map +1 -0
- package/dist/utils/project-files.d.ts +7 -0
- package/dist/utils/project-files.d.ts.map +1 -0
- package/dist/utils/project-files.js +97 -0
- package/dist/utils/project-files.js.map +1 -0
- package/dist/utils/spawn.d.ts +7 -0
- package/dist/utils/spawn.d.ts.map +1 -0
- package/dist/utils/spawn.js +31 -0
- package/dist/utils/spawn.js.map +1 -0
- package/dist/utils/tool-state.d.ts +16 -0
- package/dist/utils/tool-state.d.ts.map +1 -0
- package/dist/utils/tool-state.js +86 -0
- package/dist/utils/tool-state.js.map +1 -0
- package/package.json +63 -0
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
export interface RunestoneEnv {
|
|
2
|
+
HOST_DOMAIN: string;
|
|
3
|
+
PREFIX: string;
|
|
4
|
+
HTTPS_PORT: string;
|
|
5
|
+
HTTP_PORT: string;
|
|
6
|
+
SMTP_PORT: string;
|
|
7
|
+
RUNESTONE_IMAGE: string;
|
|
8
|
+
RUNESTONE_TAG: string;
|
|
9
|
+
MKCERT_INSTALLED: string;
|
|
10
|
+
RUNESTONE_VERSION: string;
|
|
11
|
+
RUNESTONE_LANG: string;
|
|
12
|
+
WEB_ENTRYPOINT_PORT: string;
|
|
13
|
+
WEB_ENTRYPOINT_NAME: string;
|
|
14
|
+
WEB_SECURE_ENTRYPOINT_PORT: string;
|
|
15
|
+
WEB_SECURE_ENTRYPOINT_NAME: string;
|
|
16
|
+
PROJECT_DIR: string;
|
|
17
|
+
ENV_PATH: string;
|
|
18
|
+
COMPOSE_FILE_PATH: string;
|
|
19
|
+
NETWORK_NAME: string;
|
|
20
|
+
SSH_VOLUME_NAME: string;
|
|
21
|
+
ENV_FILE_EXISTS: boolean;
|
|
22
|
+
REQUIRED_VARS_PRESENT: boolean;
|
|
23
|
+
}
|
|
24
|
+
export type EnvInput = Partial<Pick<RunestoneEnv, 'HOST_DOMAIN' | 'PREFIX' | 'HTTPS_PORT' | 'HTTP_PORT' | 'SMTP_PORT' | 'RUNESTONE_IMAGE' | 'RUNESTONE_TAG' | 'MKCERT_INSTALLED' | 'RUNESTONE_VERSION' | 'WEB_ENTRYPOINT_PORT' | 'WEB_ENTRYPOINT_NAME' | 'WEB_SECURE_ENTRYPOINT_PORT' | 'WEB_SECURE_ENTRYPOINT_NAME'>>;
|
|
25
|
+
export declare const DEFAULT_ENV: Required<EnvInput>;
|
|
26
|
+
export declare const envLoader: {
|
|
27
|
+
load(cliEnvPath?: string, projectArg?: string): RunestoneEnv;
|
|
28
|
+
write(envPath: string, config: EnvInput): void;
|
|
29
|
+
exists(envPath: string): boolean;
|
|
30
|
+
hasRequiredVars(config: RunestoneEnv): boolean;
|
|
31
|
+
};
|
|
32
|
+
//# sourceMappingURL=env-loader.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"env-loader.d.ts","sourceRoot":"","sources":["../../src/utils/env-loader.ts"],"names":[],"mappings":"AAMA,MAAM,WAAW,YAAY;IAC3B,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,eAAe,EAAE,MAAM,CAAC;IACxB,aAAa,EAAE,MAAM,CAAC;IACtB,gBAAgB,EAAE,MAAM,CAAC;IACzB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,cAAc,EAAE,MAAM,CAAC;IACvB,mBAAmB,EAAE,MAAM,CAAC;IAC5B,mBAAmB,EAAE,MAAM,CAAC;IAC5B,0BAA0B,EAAE,MAAM,CAAC;IACnC,0BAA0B,EAAE,MAAM,CAAC;IACnC,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,YAAY,EAAE,MAAM,CAAC;IACrB,eAAe,EAAE,MAAM,CAAC;IACxB,eAAe,EAAE,OAAO,CAAC;IACzB,qBAAqB,EAAE,OAAO,CAAC;CAChC;AAED,MAAM,MAAM,QAAQ,GAAG,OAAO,CAC5B,IAAI,CACF,YAAY,EACV,aAAa,GACb,QAAQ,GACR,YAAY,GACZ,WAAW,GACX,WAAW,GACX,iBAAiB,GACjB,eAAe,GACf,kBAAkB,GAClB,mBAAmB,GACnB,qBAAqB,GACrB,qBAAqB,GACrB,4BAA4B,GAC5B,4BAA4B,CAC/B,CACF,CAAC;AAEF,eAAO,MAAM,WAAW,EAAE,QAAQ,CAAC,QAAQ,CAc1C,CAAC;AAUF,eAAO,MAAM,SAAS;sBACF,MAAM,eAAe,MAAM,GAAG,YAAY;mBAkC7C,MAAM,UAAU,QAAQ,GAAG,IAAI;oBAc9B,MAAM,GAAG,OAAO;4BAIR,YAAY,GAAG,OAAO;CAG/C,CAAC"}
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.envLoader = exports.DEFAULT_ENV = void 0;
|
|
37
|
+
const dotenv = __importStar(require("dotenv"));
|
|
38
|
+
const fs = __importStar(require("fs"));
|
|
39
|
+
const path = __importStar(require("path"));
|
|
40
|
+
const path_helpers_1 = require("./path-helpers");
|
|
41
|
+
const tool_state_1 = require("./tool-state");
|
|
42
|
+
exports.DEFAULT_ENV = {
|
|
43
|
+
HOST_DOMAIN: 'local.developers-homelab.net',
|
|
44
|
+
PREFIX: 'runestone',
|
|
45
|
+
HTTPS_PORT: '443',
|
|
46
|
+
HTTP_PORT: '80',
|
|
47
|
+
SMTP_PORT: '1025',
|
|
48
|
+
RUNESTONE_IMAGE: 'cymondez/runestone',
|
|
49
|
+
RUNESTONE_TAG: '5.2',
|
|
50
|
+
MKCERT_INSTALLED: 'false',
|
|
51
|
+
RUNESTONE_VERSION: '5',
|
|
52
|
+
WEB_ENTRYPOINT_PORT: '80',
|
|
53
|
+
WEB_ENTRYPOINT_NAME: 'web',
|
|
54
|
+
WEB_SECURE_ENTRYPOINT_PORT: '443',
|
|
55
|
+
WEB_SECURE_ENTRYPOINT_NAME: 'websecure'
|
|
56
|
+
};
|
|
57
|
+
function readEnvFile(envPath) {
|
|
58
|
+
if (!fs.existsSync(envPath)) {
|
|
59
|
+
return {};
|
|
60
|
+
}
|
|
61
|
+
return dotenv.parse(fs.readFileSync(envPath));
|
|
62
|
+
}
|
|
63
|
+
exports.envLoader = {
|
|
64
|
+
load(cliEnvPath, projectArg) {
|
|
65
|
+
const projectDir = path_helpers_1.pathHelpers.resolveProjectDir(projectArg);
|
|
66
|
+
const envPath = path_helpers_1.pathHelpers.resolveEnvPath(cliEnvPath, projectDir);
|
|
67
|
+
const envFileExists = fs.existsSync(envPath);
|
|
68
|
+
const parsed = readEnvFile(envPath);
|
|
69
|
+
const merged = { ...exports.DEFAULT_ENV, ...parsed };
|
|
70
|
+
const prefix = merged.PREFIX || exports.DEFAULT_ENV.PREFIX;
|
|
71
|
+
return {
|
|
72
|
+
HOST_DOMAIN: merged.HOST_DOMAIN || exports.DEFAULT_ENV.HOST_DOMAIN,
|
|
73
|
+
PREFIX: prefix,
|
|
74
|
+
HTTPS_PORT: merged.HTTPS_PORT || exports.DEFAULT_ENV.HTTPS_PORT,
|
|
75
|
+
HTTP_PORT: merged.HTTP_PORT || exports.DEFAULT_ENV.HTTP_PORT,
|
|
76
|
+
SMTP_PORT: merged.SMTP_PORT || exports.DEFAULT_ENV.SMTP_PORT,
|
|
77
|
+
RUNESTONE_IMAGE: merged.RUNESTONE_IMAGE || exports.DEFAULT_ENV.RUNESTONE_IMAGE,
|
|
78
|
+
RUNESTONE_TAG: merged.RUNESTONE_TAG || exports.DEFAULT_ENV.RUNESTONE_TAG,
|
|
79
|
+
MKCERT_INSTALLED: merged.MKCERT_INSTALLED || exports.DEFAULT_ENV.MKCERT_INSTALLED,
|
|
80
|
+
RUNESTONE_VERSION: merged.RUNESTONE_VERSION || exports.DEFAULT_ENV.RUNESTONE_VERSION,
|
|
81
|
+
RUNESTONE_LANG: tool_state_1.toolState.readLocale() || 'en',
|
|
82
|
+
WEB_ENTRYPOINT_PORT: merged.WEB_ENTRYPOINT_PORT || merged.HTTP_PORT || exports.DEFAULT_ENV.WEB_ENTRYPOINT_PORT,
|
|
83
|
+
WEB_ENTRYPOINT_NAME: merged.WEB_ENTRYPOINT_NAME || exports.DEFAULT_ENV.WEB_ENTRYPOINT_NAME,
|
|
84
|
+
WEB_SECURE_ENTRYPOINT_PORT: merged.WEB_SECURE_ENTRYPOINT_PORT || merged.HTTPS_PORT || exports.DEFAULT_ENV.WEB_SECURE_ENTRYPOINT_PORT,
|
|
85
|
+
WEB_SECURE_ENTRYPOINT_NAME: merged.WEB_SECURE_ENTRYPOINT_NAME || exports.DEFAULT_ENV.WEB_SECURE_ENTRYPOINT_NAME,
|
|
86
|
+
PROJECT_DIR: projectDir,
|
|
87
|
+
ENV_PATH: envPath,
|
|
88
|
+
COMPOSE_FILE_PATH: path_helpers_1.pathHelpers.resolveComposePath(projectArg),
|
|
89
|
+
NETWORK_NAME: `${prefix}-network`,
|
|
90
|
+
SSH_VOLUME_NAME: `${prefix}-ssh`,
|
|
91
|
+
ENV_FILE_EXISTS: envFileExists,
|
|
92
|
+
REQUIRED_VARS_PRESENT: Boolean(parsed.HOST_DOMAIN && parsed.PREFIX)
|
|
93
|
+
};
|
|
94
|
+
},
|
|
95
|
+
write(envPath, config) {
|
|
96
|
+
const dir = path.dirname(envPath);
|
|
97
|
+
fs.mkdirSync(dir, { recursive: true });
|
|
98
|
+
const existing = readEnvFile(envPath);
|
|
99
|
+
const merged = { ...existing, ...config };
|
|
100
|
+
const content = Object.entries(merged)
|
|
101
|
+
.filter(([, value]) => value !== undefined)
|
|
102
|
+
.map(([key, value]) => `${key}=${value}`)
|
|
103
|
+
.join('\n');
|
|
104
|
+
fs.writeFileSync(envPath, `${content}\n`, 'utf8');
|
|
105
|
+
},
|
|
106
|
+
exists(envPath) {
|
|
107
|
+
return fs.existsSync(path.resolve(envPath));
|
|
108
|
+
},
|
|
109
|
+
hasRequiredVars(config) {
|
|
110
|
+
return config.ENV_FILE_EXISTS && config.REQUIRED_VARS_PRESENT;
|
|
111
|
+
}
|
|
112
|
+
};
|
|
113
|
+
//# sourceMappingURL=env-loader.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"env-loader.js","sourceRoot":"","sources":["../../src/utils/env-loader.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../src/utils/logger.ts"],"names":[],"mappings":"AAIA,eAAO,MAAM,MAAM;kBACH,MAAM,GAAG,IAAI;qBAIV,MAAM,GAAG,IAAI;kBAIhB,MAAM,GAAG,IAAI;mBAIZ,MAAM,GAAG,IAAI;mBAIb,MAAM,GAAG,IAAI;CAK7B,CAAC"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.logger = void 0;
|
|
4
|
+
const kleur_1 = require("kleur");
|
|
5
|
+
const DEBUG = process.env.DEBUG === '1';
|
|
6
|
+
exports.logger = {
|
|
7
|
+
info(message) {
|
|
8
|
+
console.log(`${(0, kleur_1.cyan)('[info]')} ${message}`);
|
|
9
|
+
},
|
|
10
|
+
success(message) {
|
|
11
|
+
console.log(`${(0, kleur_1.green)('[ok]')} ${message}`);
|
|
12
|
+
},
|
|
13
|
+
warn(message) {
|
|
14
|
+
console.warn(`${(0, kleur_1.yellow)('[warn]')} ${message}`);
|
|
15
|
+
},
|
|
16
|
+
error(message) {
|
|
17
|
+
console.error(`${(0, kleur_1.red)('[error]')} ${message}`);
|
|
18
|
+
},
|
|
19
|
+
debug(message) {
|
|
20
|
+
if (DEBUG) {
|
|
21
|
+
console.log(`${(0, kleur_1.cyan)('[debug]')} ${message}`);
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
};
|
|
25
|
+
//# sourceMappingURL=logger.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/utils/logger.ts"],"names":[],"mappings":";;;AAAA,iCAAiD;AAEjD,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,KAAK,KAAK,GAAG,CAAC;AAE3B,QAAA,MAAM,GAAG;IACpB,IAAI,CAAC,OAAe;QAClB,OAAO,CAAC,GAAG,CAAC,GAAG,IAAA,YAAI,EAAC,QAAQ,CAAC,IAAI,OAAO,EAAE,CAAC,CAAC;IAC9C,CAAC;IAED,OAAO,CAAC,OAAe;QACrB,OAAO,CAAC,GAAG,CAAC,GAAG,IAAA,aAAK,EAAC,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC,CAAC;IAC7C,CAAC;IAED,IAAI,CAAC,OAAe;QAClB,OAAO,CAAC,IAAI,CAAC,GAAG,IAAA,cAAM,EAAC,QAAQ,CAAC,IAAI,OAAO,EAAE,CAAC,CAAC;IACjD,CAAC;IAED,KAAK,CAAC,OAAe;QACnB,OAAO,CAAC,KAAK,CAAC,GAAG,IAAA,WAAG,EAAC,SAAS,CAAC,IAAI,OAAO,EAAE,CAAC,CAAC;IAChD,CAAC;IAED,KAAK,CAAC,OAAe;QACnB,IAAI,KAAK,EAAE,CAAC;YACV,OAAO,CAAC,GAAG,CAAC,GAAG,IAAA,YAAI,EAAC,SAAS,CAAC,IAAI,OAAO,EAAE,CAAC,CAAC;QAC/C,CAAC;IACH,CAAC;CACF,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logo.d.ts","sourceRoot":"","sources":["../../src/utils/logo.ts"],"names":[],"mappings":"AASA,wBAAgB,iBAAiB,IAAI,MAAM,CAE1C"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.loadRunestoneLogo = loadRunestoneLogo;
|
|
4
|
+
const RUNESTONE_LOGO = String.raw `
|
|
5
|
+
██████╗ ██╗ ██╗███╗ ██╗███████╗███████╗████████╗ ██████╗ ███╗ ██╗███████╗
|
|
6
|
+
██╔══██╗██║ ██║████╗ ██║██╔════╝██╔════╝╚══██╔══╝██╔═══██╗████╗ ██║██╔════╝
|
|
7
|
+
██████╔╝██║ ██║██╔██╗ ██║█████╗ ███████╗ ██║ ██║ ██║██╔██╗ ██║█████╗
|
|
8
|
+
██╔══██╗██║ ██║██║╚██╗██║██╔══╝ ╚════██║ ██║ ██║ ██║██║╚██╗██║██╔══╝
|
|
9
|
+
██║ ██║╚██████╔╝██║ ╚████║███████╗███████║ ██║ ╚██████╔╝██║ ╚████║███████╗
|
|
10
|
+
╚═╝ ╚═╝ ╚═════╝ ╚═╝ ╚═══╝╚══════╝╚══════╝ ╚═╝ ╚═════╝ ╚═╝ ╚═══╝╚══════╝
|
|
11
|
+
`;
|
|
12
|
+
function loadRunestoneLogo() {
|
|
13
|
+
return RUNESTONE_LOGO;
|
|
14
|
+
}
|
|
15
|
+
//# sourceMappingURL=logo.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logo.js","sourceRoot":"","sources":["../../src/utils/logo.ts"],"names":[],"mappings":";;AASA,8CAEC;AAXD,MAAM,cAAc,GAAG,MAAM,CAAC,GAAG,CAAA;;;;;;;CAOhC,CAAC;AAEF,SAAgB,iBAAiB;IAC/B,OAAO,cAAc,CAAC;AACxB,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export type RunestonePlatform = 'win32' | 'darwin' | 'linux';
|
|
2
|
+
export type RunestoneArch = 'x64' | 'arm64' | 'other';
|
|
3
|
+
export declare const osDetector: {
|
|
4
|
+
platform(): RunestonePlatform;
|
|
5
|
+
arch(): RunestoneArch;
|
|
6
|
+
homeDir(): string;
|
|
7
|
+
sshDir(): string;
|
|
8
|
+
isWsl(): boolean;
|
|
9
|
+
};
|
|
10
|
+
//# sourceMappingURL=os-detector.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"os-detector.d.ts","sourceRoot":"","sources":["../../src/utils/os-detector.ts"],"names":[],"mappings":"AAIA,MAAM,MAAM,iBAAiB,GAAG,OAAO,GAAG,QAAQ,GAAG,OAAO,CAAC;AAC7D,MAAM,MAAM,aAAa,GAAG,KAAK,GAAG,OAAO,GAAG,OAAO,CAAC;AAEtD,eAAO,MAAM,UAAU;gBACT,iBAAiB;YAYrB,aAAa;eASV,MAAM;cAIP,MAAM;aAIP,OAAO;CAYjB,CAAC"}
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.osDetector = void 0;
|
|
37
|
+
const fs = __importStar(require("fs"));
|
|
38
|
+
const os = __importStar(require("os"));
|
|
39
|
+
const path = __importStar(require("path"));
|
|
40
|
+
exports.osDetector = {
|
|
41
|
+
platform() {
|
|
42
|
+
if (process.platform === 'win32') {
|
|
43
|
+
return 'win32';
|
|
44
|
+
}
|
|
45
|
+
if (process.platform === 'darwin') {
|
|
46
|
+
return 'darwin';
|
|
47
|
+
}
|
|
48
|
+
return 'linux';
|
|
49
|
+
},
|
|
50
|
+
arch() {
|
|
51
|
+
const arch = os.arch();
|
|
52
|
+
if (arch === 'x64' || arch === 'arm64') {
|
|
53
|
+
return arch;
|
|
54
|
+
}
|
|
55
|
+
return 'other';
|
|
56
|
+
},
|
|
57
|
+
homeDir() {
|
|
58
|
+
return os.homedir();
|
|
59
|
+
},
|
|
60
|
+
sshDir() {
|
|
61
|
+
return path.join(this.homeDir(), '.ssh');
|
|
62
|
+
},
|
|
63
|
+
isWsl() {
|
|
64
|
+
try {
|
|
65
|
+
if (!fs.existsSync('/proc/version')) {
|
|
66
|
+
return false;
|
|
67
|
+
}
|
|
68
|
+
const version = fs.readFileSync('/proc/version', 'utf8').toLowerCase();
|
|
69
|
+
return version.includes('microsoft') || version.includes('wsl');
|
|
70
|
+
}
|
|
71
|
+
catch {
|
|
72
|
+
return false;
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
};
|
|
76
|
+
//# sourceMappingURL=os-detector.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"os-detector.js","sourceRoot":"","sources":["../../src/utils/os-detector.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,uCAAyB;AACzB,uCAAyB;AACzB,2CAA6B;AAKhB,QAAA,UAAU,GAAG;IACxB,QAAQ;QACN,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO,EAAE,CAAC;YACjC,OAAO,OAAO,CAAC;QACjB,CAAC;QAED,IAAI,OAAO,CAAC,QAAQ,KAAK,QAAQ,EAAE,CAAC;YAClC,OAAO,QAAQ,CAAC;QAClB,CAAC;QAED,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,IAAI;QACF,MAAM,IAAI,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC;QACvB,IAAI,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,OAAO,EAAE,CAAC;YACvC,OAAO,IAAI,CAAC;QACd,CAAC;QAED,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,OAAO;QACL,OAAO,EAAE,CAAC,OAAO,EAAE,CAAC;IACtB,CAAC;IAED,MAAM;QACJ,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,MAAM,CAAC,CAAC;IAC3C,CAAC;IAED,KAAK;QACH,IAAI,CAAC;YACH,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,eAAe,CAAC,EAAE,CAAC;gBACpC,OAAO,KAAK,CAAC;YACf,CAAC;YAED,MAAM,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,eAAe,EAAE,MAAM,CAAC,CAAC,WAAW,EAAE,CAAC;YACvE,OAAO,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;QAClE,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC;CACF,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export declare const pathHelpers: {
|
|
2
|
+
runestoneDir(): string;
|
|
3
|
+
resolveProjectDir(projectArg?: string): string;
|
|
4
|
+
resolveComposePath(projectArg?: string): string;
|
|
5
|
+
resolveEnvPath(cliArg?: string, projectDir?: string): string;
|
|
6
|
+
ensureDir(dir: string): void;
|
|
7
|
+
normalizePath(value: string): string;
|
|
8
|
+
};
|
|
9
|
+
//# sourceMappingURL=path-helpers.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"path-helpers.d.ts","sourceRoot":"","sources":["../../src/utils/path-helpers.ts"],"names":[],"mappings":"AAqBA,eAAO,MAAM,WAAW;oBACN,MAAM;mCAIS,MAAM,GAAG,MAAM;oCAcd,MAAM,GAAG,MAAM;4BAQvB,MAAM,eAAe,MAAM,GAAG,MAAM;mBAQ7C,MAAM,GAAG,IAAI;yBAIP,MAAM,GAAG,MAAM;CAcrC,CAAC"}
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.pathHelpers = void 0;
|
|
37
|
+
const fs = __importStar(require("fs"));
|
|
38
|
+
const os = __importStar(require("os"));
|
|
39
|
+
const path = __importStar(require("path"));
|
|
40
|
+
const tool_state_1 = require("./tool-state");
|
|
41
|
+
function maybeComposeFile(projectOrFile) {
|
|
42
|
+
const resolved = path.resolve(projectOrFile);
|
|
43
|
+
const ext = path.extname(resolved).toLowerCase();
|
|
44
|
+
if (ext === '.yml' || ext === '.yaml') {
|
|
45
|
+
return resolved;
|
|
46
|
+
}
|
|
47
|
+
const yamlPath = path.join(resolved, 'compose.yaml');
|
|
48
|
+
if (fs.existsSync(yamlPath)) {
|
|
49
|
+
return yamlPath;
|
|
50
|
+
}
|
|
51
|
+
return path.join(resolved, 'compose.yml');
|
|
52
|
+
}
|
|
53
|
+
exports.pathHelpers = {
|
|
54
|
+
runestoneDir() {
|
|
55
|
+
return tool_state_1.toolState.readRunestonePath() ?? path.join(os.homedir(), '.runestone');
|
|
56
|
+
},
|
|
57
|
+
resolveProjectDir(projectArg) {
|
|
58
|
+
if (!projectArg) {
|
|
59
|
+
return this.runestoneDir();
|
|
60
|
+
}
|
|
61
|
+
const resolved = path.resolve(projectArg);
|
|
62
|
+
const ext = path.extname(resolved).toLowerCase();
|
|
63
|
+
if (ext === '.yml' || ext === '.yaml') {
|
|
64
|
+
return path.dirname(resolved);
|
|
65
|
+
}
|
|
66
|
+
return resolved;
|
|
67
|
+
},
|
|
68
|
+
resolveComposePath(projectArg) {
|
|
69
|
+
if (!projectArg) {
|
|
70
|
+
return path.join(this.runestoneDir(), 'compose.yml');
|
|
71
|
+
}
|
|
72
|
+
return maybeComposeFile(projectArg);
|
|
73
|
+
},
|
|
74
|
+
resolveEnvPath(cliArg, projectDir) {
|
|
75
|
+
if (cliArg) {
|
|
76
|
+
return path.resolve(cliArg);
|
|
77
|
+
}
|
|
78
|
+
return path.join(projectDir ?? this.runestoneDir(), '.env');
|
|
79
|
+
},
|
|
80
|
+
ensureDir(dir) {
|
|
81
|
+
fs.mkdirSync(path.resolve(dir), { recursive: true });
|
|
82
|
+
},
|
|
83
|
+
normalizePath(value) {
|
|
84
|
+
if (process.platform !== 'win32') {
|
|
85
|
+
return value;
|
|
86
|
+
}
|
|
87
|
+
const drivePath = /^([a-zA-Z]):\\(.*)$/.exec(value);
|
|
88
|
+
if (!drivePath) {
|
|
89
|
+
return value;
|
|
90
|
+
}
|
|
91
|
+
const drive = drivePath[1].toLowerCase();
|
|
92
|
+
const rest = drivePath[2].replace(/\\/g, '/');
|
|
93
|
+
return `/mnt/${drive}/${rest}`;
|
|
94
|
+
}
|
|
95
|
+
};
|
|
96
|
+
//# sourceMappingURL=path-helpers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"path-helpers.js","sourceRoot":"","sources":["../../src/utils/path-helpers.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,uCAAyB;AACzB,uCAAyB;AACzB,2CAA6B;AAC7B,6CAAyC;AAEzC,SAAS,gBAAgB,CAAC,aAAqB;IAC7C,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC;IAC7C,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,WAAW,EAAE,CAAC;IAEjD,IAAI,GAAG,KAAK,MAAM,IAAI,GAAG,KAAK,OAAO,EAAE,CAAC;QACtC,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,cAAc,CAAC,CAAC;IACrD,IAAI,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC5B,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED,OAAO,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,aAAa,CAAC,CAAC;AAC5C,CAAC;AAEY,QAAA,WAAW,GAAG;IACzB,YAAY;QACV,OAAO,sBAAS,CAAC,iBAAiB,EAAE,IAAI,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,YAAY,CAAC,CAAC;IAChF,CAAC;IAED,iBAAiB,CAAC,UAAmB;QACnC,IAAI,CAAC,UAAU,EAAE,CAAC;YAChB,OAAO,IAAI,CAAC,YAAY,EAAE,CAAC;QAC7B,CAAC;QAED,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;QAC1C,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,WAAW,EAAE,CAAC;QACjD,IAAI,GAAG,KAAK,MAAM,IAAI,GAAG,KAAK,OAAO,EAAE,CAAC;YACtC,OAAO,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QAChC,CAAC;QAED,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED,kBAAkB,CAAC,UAAmB;QACpC,IAAI,CAAC,UAAU,EAAE,CAAC;YAChB,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,EAAE,aAAa,CAAC,CAAC;QACvD,CAAC;QAED,OAAO,gBAAgB,CAAC,UAAU,CAAC,CAAC;IACtC,CAAC;IAED,cAAc,CAAC,MAAe,EAAE,UAAmB;QACjD,IAAI,MAAM,EAAE,CAAC;YACX,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QAC9B,CAAC;QAED,OAAO,IAAI,CAAC,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,YAAY,EAAE,EAAE,MAAM,CAAC,CAAC;IAC9D,CAAC;IAED,SAAS,CAAC,GAAW;QACnB,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACvD,CAAC;IAED,aAAa,CAAC,KAAa;QACzB,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO,EAAE,CAAC;YACjC,OAAO,KAAK,CAAC;QACf,CAAC;QAED,MAAM,SAAS,GAAG,qBAAqB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACpD,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,OAAO,KAAK,CAAC;QACf,CAAC;QAED,MAAM,KAAK,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;QACzC,MAAM,IAAI,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;QAC9C,OAAO,QAAQ,KAAK,IAAI,IAAI,EAAE,CAAC;IACjC,CAAC;CACF,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"port-checker.d.ts","sourceRoot":"","sources":["../../src/utils/port-checker.ts"],"names":[],"mappings":"AAOA,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAsB1E;AAiBD,wBAAsB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAIpE"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.isListeningLineForPort = isListeningLineForPort;
|
|
4
|
+
exports.isPortAvailable = isPortAvailable;
|
|
5
|
+
const child_process_1 = require("child_process");
|
|
6
|
+
function addressHasPort(address, port) {
|
|
7
|
+
const escapedPort = String(port).replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
|
|
8
|
+
return new RegExp(`[:.]${escapedPort}$`).test(address.trim());
|
|
9
|
+
}
|
|
10
|
+
function isListeningLineForPort(line, port) {
|
|
11
|
+
const parts = line.trim().split(/\s+/);
|
|
12
|
+
if (parts.length === 0) {
|
|
13
|
+
return false;
|
|
14
|
+
}
|
|
15
|
+
const hasListeningState = parts.some((part) => /^LISTEN(?:ING)?$/i.test(part));
|
|
16
|
+
if (!hasListeningState) {
|
|
17
|
+
return false;
|
|
18
|
+
}
|
|
19
|
+
const upperFirst = parts[0].toUpperCase();
|
|
20
|
+
const localAddress = upperFirst === 'LISTEN'
|
|
21
|
+
? parts[3]
|
|
22
|
+
: /^TCP\d*$/i.test(parts[0]) || /^UDP\d*$/i.test(parts[0])
|
|
23
|
+
? parts[3]?.toUpperCase() === 'LISTEN' || parts[3]?.toUpperCase() === 'LISTENING'
|
|
24
|
+
? parts[1]
|
|
25
|
+
: parts[3]
|
|
26
|
+
: undefined;
|
|
27
|
+
return Boolean(localAddress && addressHasPort(localAddress, port));
|
|
28
|
+
}
|
|
29
|
+
function netstatOutput() {
|
|
30
|
+
const args = process.platform === 'win32' ? ['-ano'] : ['-an'];
|
|
31
|
+
const result = (0, child_process_1.spawnSync)('netstat', args, { encoding: 'utf8', shell: process.platform === 'win32' });
|
|
32
|
+
if (result.error) {
|
|
33
|
+
throw result.error;
|
|
34
|
+
}
|
|
35
|
+
if (result.status !== 0) {
|
|
36
|
+
throw new Error(result.stderr?.trim() || 'netstat failed');
|
|
37
|
+
}
|
|
38
|
+
return result.stdout ?? '';
|
|
39
|
+
}
|
|
40
|
+
async function isPortAvailable(port) {
|
|
41
|
+
return !netstatOutput()
|
|
42
|
+
.split(/\r?\n/)
|
|
43
|
+
.some((line) => isListeningLineForPort(line, port));
|
|
44
|
+
}
|
|
45
|
+
//# sourceMappingURL=port-checker.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"port-checker.js","sourceRoot":"","sources":["../../src/utils/port-checker.ts"],"names":[],"mappings":";;AAOA,wDAsBC;AAiBD,0CAIC;AAlDD,iDAA0C;AAE1C,SAAS,cAAc,CAAC,OAAe,EAAE,IAAY;IACnD,MAAM,WAAW,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,qBAAqB,EAAE,MAAM,CAAC,CAAC;IACxE,OAAO,IAAI,MAAM,CAAC,OAAO,WAAW,GAAG,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;AAChE,CAAC;AAED,SAAgB,sBAAsB,CAAC,IAAY,EAAE,IAAY;IAC/D,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IACvC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACvB,OAAO,KAAK,CAAC;IACf,CAAC;IAED,MAAM,iBAAiB,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IAC/E,IAAI,CAAC,iBAAiB,EAAE,CAAC;QACvB,OAAO,KAAK,CAAC;IACf,CAAC;IAED,MAAM,UAAU,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;IAC1C,MAAM,YAAY,GAChB,UAAU,KAAK,QAAQ;QACrB,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;QACV,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YACxD,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,KAAK,QAAQ,IAAI,KAAK,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,KAAK,WAAW;gBAC/E,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;gBACV,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;YACZ,CAAC,CAAC,SAAS,CAAC;IAElB,OAAO,OAAO,CAAC,YAAY,IAAI,cAAc,CAAC,YAAY,EAAE,IAAI,CAAC,CAAC,CAAC;AACrE,CAAC;AAED,SAAS,aAAa;IACpB,MAAM,IAAI,GAAG,OAAO,CAAC,QAAQ,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;IAC/D,MAAM,MAAM,GAAG,IAAA,yBAAS,EAAC,SAAS,EAAE,IAAI,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,CAAC,QAAQ,KAAK,OAAO,EAAE,CAAC,CAAC;IAErG,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;QACjB,MAAM,MAAM,CAAC,KAAK,CAAC;IACrB,CAAC;IAED,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACxB,MAAM,IAAI,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,EAAE,IAAI,gBAAgB,CAAC,CAAC;IAC7D,CAAC;IAED,OAAO,MAAM,CAAC,MAAM,IAAI,EAAE,CAAC;AAC7B,CAAC;AAEM,KAAK,UAAU,eAAe,CAAC,IAAY;IAChD,OAAO,CAAC,aAAa,EAAE;SACpB,KAAK,CAAC,OAAO,CAAC;SACd,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,sBAAsB,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC;AACxD,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { EnvInput, RunestoneEnv } from './env-loader';
|
|
2
|
+
export declare function buildComposeFile(): string;
|
|
3
|
+
export declare function defaultEnvInput(): EnvInput;
|
|
4
|
+
export declare function ensureProjectFiles(config: RunestoneEnv, options?: {
|
|
5
|
+
overwriteCompose?: boolean;
|
|
6
|
+
}): void;
|
|
7
|
+
//# sourceMappingURL=project-files.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"project-files.d.ts","sourceRoot":"","sources":["../../src/utils/project-files.ts"],"names":[],"mappings":"AAEA,OAAO,EAAe,QAAQ,EAAE,YAAY,EAAa,MAAM,cAAc,CAAC;AAG9E,wBAAgB,gBAAgB,IAAI,MAAM,CAuCzC;AAED,wBAAgB,eAAe,IAAI,QAAQ,CAE1C;AAED,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,YAAY,EAAE,OAAO,CAAC,EAAE;IAAE,gBAAgB,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,IAAI,CAYvG"}
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.buildComposeFile = buildComposeFile;
|
|
37
|
+
exports.defaultEnvInput = defaultEnvInput;
|
|
38
|
+
exports.ensureProjectFiles = ensureProjectFiles;
|
|
39
|
+
const fs = __importStar(require("fs"));
|
|
40
|
+
const path = __importStar(require("path"));
|
|
41
|
+
const env_loader_1 = require("./env-loader");
|
|
42
|
+
const path_helpers_1 = require("./path-helpers");
|
|
43
|
+
function buildComposeFile() {
|
|
44
|
+
return `services:
|
|
45
|
+
runestone:
|
|
46
|
+
image: \${RUNESTONE_IMAGE:-cymondez/runestone}:\${RUNESTONE_TAG:-5.2}
|
|
47
|
+
container_name: \${PREFIX:-runestone}
|
|
48
|
+
restart: unless-stopped
|
|
49
|
+
command: |-
|
|
50
|
+
--providers.docker.network="\${PREFIX:-runestone}-network"
|
|
51
|
+
environment:
|
|
52
|
+
HOST_DOMAIN: \${HOST_DOMAIN:-local.developers-homelab.net}
|
|
53
|
+
MAILPIT_HOST: mailpit.\${HOST_DOMAIN:-local.developers-homelab.net}
|
|
54
|
+
TRAEFIK_HOST: traefik.\${HOST_DOMAIN:-local.developers-homelab.net}
|
|
55
|
+
WEB_ENTRYPOINT_NAME: \${WEB_ENTRYPOINT_NAME:-web}
|
|
56
|
+
WEB_ENTRYPOINT_PORT: \${WEB_ENTRYPOINT_PORT:-80}
|
|
57
|
+
WEB_SECURE_ENTRYPOINT_NAME: \${WEB_SECURE_ENTRYPOINT_NAME:-websecure}
|
|
58
|
+
WEB_SECURE_ENTRYPOINT_PORT: \${WEB_SECURE_ENTRYPOINT_PORT:-443}
|
|
59
|
+
PREFIX: \${PREFIX:-runestone}
|
|
60
|
+
ports:
|
|
61
|
+
- "\${WEB_ENTRYPOINT_PORT:-80}:\${WEB_ENTRYPOINT_PORT:-80}"
|
|
62
|
+
- "\${WEB_SECURE_ENTRYPOINT_PORT:-443}:\${WEB_SECURE_ENTRYPOINT_PORT:-443}"
|
|
63
|
+
- "\${SMTP_PORT:-1025}:1025"
|
|
64
|
+
extra_hosts:
|
|
65
|
+
- host.docker.internal:host-gateway
|
|
66
|
+
volumes:
|
|
67
|
+
- /var/run/docker.sock:/var/run/docker.sock
|
|
68
|
+
- ./certs:/ssl
|
|
69
|
+
- ./configuration:/configuration
|
|
70
|
+
- ssh:/tmp/druid_ssh-agent/
|
|
71
|
+
|
|
72
|
+
networks:
|
|
73
|
+
default:
|
|
74
|
+
name: \${PREFIX:-runestone}-network
|
|
75
|
+
external: true
|
|
76
|
+
|
|
77
|
+
volumes:
|
|
78
|
+
ssh:
|
|
79
|
+
name: \${PREFIX:-runestone}-ssh
|
|
80
|
+
external: true
|
|
81
|
+
`;
|
|
82
|
+
}
|
|
83
|
+
function defaultEnvInput() {
|
|
84
|
+
return { ...env_loader_1.DEFAULT_ENV };
|
|
85
|
+
}
|
|
86
|
+
function ensureProjectFiles(config, options) {
|
|
87
|
+
path_helpers_1.pathHelpers.ensureDir(config.PROJECT_DIR);
|
|
88
|
+
path_helpers_1.pathHelpers.ensureDir(path.join(config.PROJECT_DIR, 'certs'));
|
|
89
|
+
path_helpers_1.pathHelpers.ensureDir(path.join(config.PROJECT_DIR, 'configuration'));
|
|
90
|
+
if (!fs.existsSync(config.ENV_PATH)) {
|
|
91
|
+
env_loader_1.envLoader.write(config.ENV_PATH, defaultEnvInput());
|
|
92
|
+
}
|
|
93
|
+
if (options?.overwriteCompose || !fs.existsSync(config.COMPOSE_FILE_PATH)) {
|
|
94
|
+
fs.writeFileSync(config.COMPOSE_FILE_PATH, buildComposeFile(), 'utf8');
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
//# sourceMappingURL=project-files.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"project-files.js","sourceRoot":"","sources":["../../src/utils/project-files.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAKA,4CAuCC;AAED,0CAEC;AAED,gDAYC;AA9DD,uCAAyB;AACzB,2CAA6B;AAC7B,6CAA8E;AAC9E,iDAA6C;AAE7C,SAAgB,gBAAgB;IAC9B,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAqCR,CAAC;AACF,CAAC;AAED,SAAgB,eAAe;IAC7B,OAAO,EAAE,GAAG,wBAAW,EAAE,CAAC;AAC5B,CAAC;AAED,SAAgB,kBAAkB,CAAC,MAAoB,EAAE,OAAwC;IAC/F,0BAAW,CAAC,SAAS,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;IAC1C,0BAAW,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC,CAAC;IAC9D,0BAAW,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,eAAe,CAAC,CAAC,CAAC;IAEtE,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC;QACpC,sBAAS,CAAC,KAAK,CAAC,MAAM,CAAC,QAAQ,EAAE,eAAe,EAAE,CAAC,CAAC;IACtD,CAAC;IAED,IAAI,OAAO,EAAE,gBAAgB,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,MAAM,CAAC,iBAAiB,CAAC,EAAE,CAAC;QAC1E,EAAE,CAAC,aAAa,CAAC,MAAM,CAAC,iBAAiB,EAAE,gBAAgB,EAAE,EAAE,MAAM,CAAC,CAAC;IACzE,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { SpawnSyncOptionsWithStringEncoding, SpawnSyncReturns } from 'child_process';
|
|
2
|
+
type StringSpawnOptions = SpawnSyncOptionsWithStringEncoding & {
|
|
3
|
+
encoding: BufferEncoding;
|
|
4
|
+
};
|
|
5
|
+
export declare function spawnCommand(command: string, args: string[], options: StringSpawnOptions): SpawnSyncReturns<string>;
|
|
6
|
+
export {};
|
|
7
|
+
//# sourceMappingURL=spawn.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"spawn.d.ts","sourceRoot":"","sources":["../../src/utils/spawn.ts"],"names":[],"mappings":"AAAA,OAAO,EAAa,kCAAkC,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAEhG,KAAK,kBAAkB,GAAG,kCAAkC,GAAG;IAC7D,QAAQ,EAAE,cAAc,CAAC;CAC1B,CAAC;AAmBF,wBAAgB,YAAY,CAC1B,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,MAAM,EAAE,EACd,OAAO,EAAE,kBAAkB,GAC1B,gBAAgB,CAAC,MAAM,CAAC,CAc1B"}
|