@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.
Files changed (120) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +107 -0
  3. package/bin/runestone +17 -0
  4. package/dist/cli.d.ts +4 -0
  5. package/dist/cli.d.ts.map +1 -0
  6. package/dist/cli.js +78 -0
  7. package/dist/cli.js.map +1 -0
  8. package/dist/commands/certs.d.ts +3 -0
  9. package/dist/commands/certs.d.ts.map +1 -0
  10. package/dist/commands/certs.js +110 -0
  11. package/dist/commands/certs.js.map +1 -0
  12. package/dist/commands/down.d.ts +3 -0
  13. package/dist/commands/down.d.ts.map +1 -0
  14. package/dist/commands/down.js +59 -0
  15. package/dist/commands/down.js.map +1 -0
  16. package/dist/commands/keys.d.ts +3 -0
  17. package/dist/commands/keys.d.ts.map +1 -0
  18. package/dist/commands/keys.js +51 -0
  19. package/dist/commands/keys.js.map +1 -0
  20. package/dist/commands/setup.d.ts +15 -0
  21. package/dist/commands/setup.d.ts.map +1 -0
  22. package/dist/commands/setup.js +641 -0
  23. package/dist/commands/setup.js.map +1 -0
  24. package/dist/commands/status.d.ts +3 -0
  25. package/dist/commands/status.d.ts.map +1 -0
  26. package/dist/commands/status.js +57 -0
  27. package/dist/commands/status.js.map +1 -0
  28. package/dist/commands/stop.d.ts +3 -0
  29. package/dist/commands/stop.d.ts.map +1 -0
  30. package/dist/commands/stop.js +25 -0
  31. package/dist/commands/stop.js.map +1 -0
  32. package/dist/commands/up.d.ts +3 -0
  33. package/dist/commands/up.d.ts.map +1 -0
  34. package/dist/commands/up.js +72 -0
  35. package/dist/commands/up.js.map +1 -0
  36. package/dist/i18n/index.d.ts +316 -0
  37. package/dist/i18n/index.d.ts.map +1 -0
  38. package/dist/i18n/index.js +378 -0
  39. package/dist/i18n/index.js.map +1 -0
  40. package/dist/services/cert-manager.d.ts +38 -0
  41. package/dist/services/cert-manager.d.ts.map +1 -0
  42. package/dist/services/cert-manager.js +260 -0
  43. package/dist/services/cert-manager.js.map +1 -0
  44. package/dist/services/docker-compose.d.ts +24 -0
  45. package/dist/services/docker-compose.d.ts.map +1 -0
  46. package/dist/services/docker-compose.js +132 -0
  47. package/dist/services/docker-compose.js.map +1 -0
  48. package/dist/services/docker-exec.d.ts +10 -0
  49. package/dist/services/docker-exec.d.ts.map +1 -0
  50. package/dist/services/docker-exec.js +39 -0
  51. package/dist/services/docker-exec.js.map +1 -0
  52. package/dist/services/docker-network.d.ts +13 -0
  53. package/dist/services/docker-network.d.ts.map +1 -0
  54. package/dist/services/docker-network.js +58 -0
  55. package/dist/services/docker-network.js.map +1 -0
  56. package/dist/services/docker-run.d.ts +18 -0
  57. package/dist/services/docker-run.d.ts.map +1 -0
  58. package/dist/services/docker-run.js +56 -0
  59. package/dist/services/docker-run.js.map +1 -0
  60. package/dist/services/docker-volume.d.ts +12 -0
  61. package/dist/services/docker-volume.d.ts.map +1 -0
  62. package/dist/services/docker-volume.js +57 -0
  63. package/dist/services/docker-volume.js.map +1 -0
  64. package/dist/services/domain-checker.d.ts +29 -0
  65. package/dist/services/domain-checker.d.ts.map +1 -0
  66. package/dist/services/domain-checker.js +149 -0
  67. package/dist/services/domain-checker.js.map +1 -0
  68. package/dist/services/port-checker.d.ts +3 -0
  69. package/dist/services/port-checker.d.ts.map +1 -0
  70. package/dist/services/port-checker.js +45 -0
  71. package/dist/services/port-checker.js.map +1 -0
  72. package/dist/services/ssh-manager.d.ts +7 -0
  73. package/dist/services/ssh-manager.d.ts.map +1 -0
  74. package/dist/services/ssh-manager.js +125 -0
  75. package/dist/services/ssh-manager.js.map +1 -0
  76. package/dist/utils/command.d.ts +6 -0
  77. package/dist/utils/command.d.ts.map +1 -0
  78. package/dist/utils/command.js +34 -0
  79. package/dist/utils/command.js.map +1 -0
  80. package/dist/utils/docker-checker.d.ts +5 -0
  81. package/dist/utils/docker-checker.d.ts.map +1 -0
  82. package/dist/utils/docker-checker.js +31 -0
  83. package/dist/utils/docker-checker.js.map +1 -0
  84. package/dist/utils/env-loader.d.ts +32 -0
  85. package/dist/utils/env-loader.d.ts.map +1 -0
  86. package/dist/utils/env-loader.js +113 -0
  87. package/dist/utils/env-loader.js.map +1 -0
  88. package/dist/utils/logger.d.ts +8 -0
  89. package/dist/utils/logger.d.ts.map +1 -0
  90. package/dist/utils/logger.js +25 -0
  91. package/dist/utils/logger.js.map +1 -0
  92. package/dist/utils/logo.d.ts +2 -0
  93. package/dist/utils/logo.d.ts.map +1 -0
  94. package/dist/utils/logo.js +15 -0
  95. package/dist/utils/logo.js.map +1 -0
  96. package/dist/utils/os-detector.d.ts +10 -0
  97. package/dist/utils/os-detector.d.ts.map +1 -0
  98. package/dist/utils/os-detector.js +76 -0
  99. package/dist/utils/os-detector.js.map +1 -0
  100. package/dist/utils/path-helpers.d.ts +9 -0
  101. package/dist/utils/path-helpers.d.ts.map +1 -0
  102. package/dist/utils/path-helpers.js +96 -0
  103. package/dist/utils/path-helpers.js.map +1 -0
  104. package/dist/utils/port-checker.d.ts +3 -0
  105. package/dist/utils/port-checker.d.ts.map +1 -0
  106. package/dist/utils/port-checker.js +45 -0
  107. package/dist/utils/port-checker.js.map +1 -0
  108. package/dist/utils/project-files.d.ts +7 -0
  109. package/dist/utils/project-files.d.ts.map +1 -0
  110. package/dist/utils/project-files.js +97 -0
  111. package/dist/utils/project-files.js.map +1 -0
  112. package/dist/utils/spawn.d.ts +7 -0
  113. package/dist/utils/spawn.d.ts.map +1 -0
  114. package/dist/utils/spawn.js +31 -0
  115. package/dist/utils/spawn.js.map +1 -0
  116. package/dist/utils/tool-state.d.ts +16 -0
  117. package/dist/utils/tool-state.d.ts.map +1 -0
  118. package/dist/utils/tool-state.js +86 -0
  119. package/dist/utils/tool-state.js.map +1 -0
  120. package/package.json +63 -0
@@ -0,0 +1,31 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.spawnCommand = spawnCommand;
4
+ const child_process_1 = require("child_process");
5
+ function shellQuote(value) {
6
+ return `"${value.replace(/(["\\])/g, '\\$1')}"`;
7
+ }
8
+ function shellCommand(command, args) {
9
+ return [command, ...args].map(shellQuote).join(' ');
10
+ }
11
+ function shouldRetryWithShell(error) {
12
+ if (process.platform !== 'win32') {
13
+ return false;
14
+ }
15
+ const code = error?.code;
16
+ return code === 'EPERM' || code === 'ENOENT';
17
+ }
18
+ function spawnCommand(command, args, options) {
19
+ const result = (0, child_process_1.spawnSync)(command, args, {
20
+ ...options,
21
+ shell: false
22
+ });
23
+ if (!result.error || !shouldRetryWithShell(result.error)) {
24
+ return result;
25
+ }
26
+ return (0, child_process_1.spawnSync)(shellCommand(command, args), {
27
+ ...options,
28
+ shell: true
29
+ });
30
+ }
31
+ //# sourceMappingURL=spawn.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"spawn.js","sourceRoot":"","sources":["../../src/utils/spawn.ts"],"names":[],"mappings":";;AAuBA,oCAkBC;AAzCD,iDAAgG;AAMhG,SAAS,UAAU,CAAC,KAAa;IAC/B,OAAO,IAAI,KAAK,CAAC,OAAO,CAAC,UAAU,EAAE,MAAM,CAAC,GAAG,CAAC;AAClD,CAAC;AAED,SAAS,YAAY,CAAC,OAAe,EAAE,IAAc;IACnD,OAAO,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACtD,CAAC;AAED,SAAS,oBAAoB,CAAC,KAAc;IAC1C,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO,EAAE,CAAC;QACjC,OAAO,KAAK,CAAC;IACf,CAAC;IAED,MAAM,IAAI,GAAI,KAA2C,EAAE,IAAI,CAAC;IAChE,OAAO,IAAI,KAAK,OAAO,IAAI,IAAI,KAAK,QAAQ,CAAC;AAC/C,CAAC;AAED,SAAgB,YAAY,CAC1B,OAAe,EACf,IAAc,EACd,OAA2B;IAE3B,MAAM,MAAM,GAAG,IAAA,yBAAS,EAAC,OAAO,EAAE,IAAI,EAAE;QACtC,GAAG,OAAO;QACV,KAAK,EAAE,KAAK;KACb,CAAC,CAAC;IAEH,IAAI,CAAC,MAAM,CAAC,KAAK,IAAI,CAAC,oBAAoB,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;QACzD,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,OAAO,IAAA,yBAAS,EAAC,YAAY,CAAC,OAAO,EAAE,IAAI,CAAC,EAAE;QAC5C,GAAG,OAAO;QACV,KAAK,EAAE,IAAI;KACZ,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1,16 @@
1
+ declare function packageRoot(): string;
2
+ declare function stateFilePath(): string;
3
+ export declare const toolState: {
4
+ packageRoot: typeof packageRoot;
5
+ stateFilePath: typeof stateFilePath;
6
+ readRunestonePath(): string | undefined;
7
+ readLocale(): string | undefined;
8
+ writeRunestonePath(runestonePath: string): void;
9
+ writeLocale(locale: string): void;
10
+ writeSetupState(state: {
11
+ runestonePath: string;
12
+ locale: string;
13
+ }): void;
14
+ };
15
+ export {};
16
+ //# sourceMappingURL=tool-state.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tool-state.d.ts","sourceRoot":"","sources":["../../src/utils/tool-state.ts"],"names":[],"mappings":"AAQA,iBAAS,WAAW,IAAI,MAAM,CAE7B;AAED,iBAAS,aAAa,IAAI,MAAM,CAE/B;AAyBD,eAAO,MAAM,SAAS;;;yBAIC,MAAM,GAAG,SAAS;kBAKzB,MAAM,GAAG,SAAS;sCAIE,MAAM,GAAG,IAAI;wBAI3B,MAAM,GAAG,IAAI;2BAIV;QAAE,aAAa,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI;CAOxE,CAAC"}
@@ -0,0 +1,86 @@
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.toolState = void 0;
37
+ const fs = __importStar(require("fs"));
38
+ const path = __importStar(require("path"));
39
+ function packageRoot() {
40
+ return path.resolve(__dirname, '..', '..');
41
+ }
42
+ function stateFilePath() {
43
+ return process.env.RUNESTONE_TOOL_STATE_PATH || path.join(packageRoot(), 'runestone.config.json');
44
+ }
45
+ function readState() {
46
+ const statePath = stateFilePath();
47
+ if (!fs.existsSync(statePath)) {
48
+ return {};
49
+ }
50
+ try {
51
+ return JSON.parse(fs.readFileSync(statePath, 'utf8'));
52
+ }
53
+ catch {
54
+ return {};
55
+ }
56
+ }
57
+ function writeState(nextState) {
58
+ const statePath = stateFilePath();
59
+ fs.mkdirSync(path.dirname(statePath), { recursive: true });
60
+ fs.writeFileSync(statePath, `${JSON.stringify(nextState, null, 2)}\n`, 'utf8');
61
+ }
62
+ exports.toolState = {
63
+ packageRoot,
64
+ stateFilePath,
65
+ readRunestonePath() {
66
+ const runestonePath = readState().runestonePath;
67
+ return runestonePath ? path.resolve(runestonePath) : undefined;
68
+ },
69
+ readLocale() {
70
+ return readState().locale;
71
+ },
72
+ writeRunestonePath(runestonePath) {
73
+ writeState({ ...readState(), runestonePath: path.resolve(runestonePath) });
74
+ },
75
+ writeLocale(locale) {
76
+ writeState({ ...readState(), locale });
77
+ },
78
+ writeSetupState(state) {
79
+ writeState({
80
+ ...readState(),
81
+ runestonePath: path.resolve(state.runestonePath),
82
+ locale: state.locale
83
+ });
84
+ }
85
+ };
86
+ //# sourceMappingURL=tool-state.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tool-state.js","sourceRoot":"","sources":["../../src/utils/tool-state.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,uCAAyB;AACzB,2CAA6B;AAO7B,SAAS,WAAW;IAClB,OAAO,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;AAC7C,CAAC;AAED,SAAS,aAAa;IACpB,OAAO,OAAO,CAAC,GAAG,CAAC,yBAAyB,IAAI,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,uBAAuB,CAAC,CAAC;AACpG,CAAC;AAED,SAAS,SAAS;IAChB,MAAM,SAAS,GAAG,aAAa,EAAE,CAAC;IAClC,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;QAC9B,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,SAAS,EAAE,MAAM,CAAC,CAAc,CAAC;IACrE,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC;AAED,SAAS,UAAU,CAAC,SAAoB;IACtC,MAAM,SAAS,GAAG,aAAa,EAAE,CAAC;IAClC,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC3D,EAAE,CAAC,aAAa,CACd,SAAS,EACT,GAAG,IAAI,CAAC,SAAS,CAAC,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EACzC,MAAM,CACP,CAAC;AACJ,CAAC;AAEY,QAAA,SAAS,GAAG;IACvB,WAAW;IACX,aAAa;IAEb,iBAAiB;QACf,MAAM,aAAa,GAAG,SAAS,EAAE,CAAC,aAAa,CAAC;QAChD,OAAO,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IACjE,CAAC;IAED,UAAU;QACR,OAAO,SAAS,EAAE,CAAC,MAAM,CAAC;IAC5B,CAAC;IAED,kBAAkB,CAAC,aAAqB;QACtC,UAAU,CAAC,EAAE,GAAG,SAAS,EAAE,EAAE,aAAa,EAAE,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC;IAC7E,CAAC;IAED,WAAW,CAAC,MAAc;QACxB,UAAU,CAAC,EAAE,GAAG,SAAS,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC;IACzC,CAAC;IAED,eAAe,CAAC,KAAgD;QAC9D,UAAU,CAAC;YACT,GAAG,SAAS,EAAE;YACd,aAAa,EAAE,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,aAAa,CAAC;YAChD,MAAM,EAAE,KAAK,CAAC,MAAM;SACrB,CAAC,CAAC;IACL,CAAC;CACF,CAAC"}
package/package.json ADDED
@@ -0,0 +1,63 @@
1
+ {
2
+ "name": "@developers-homelab/runestone-cli",
3
+ "version": "1.0.0",
4
+ "description": "Cross-platform CLI tool for the runestone Docker development environment",
5
+ "author": "cymondez",
6
+ "url": "https://github.com/cymondez/runestone",
7
+ "homepage": "https://github.com/cymondez/runestone#readme",
8
+ "bugs": {
9
+ "url": "https://github.com/cymondez/runestone/issues"
10
+ },
11
+ "repository": {
12
+ "type": "git",
13
+ "url": "git+https://github.com/cymondez/runestone.git"
14
+ },
15
+ "main": "dist/cli.js",
16
+ "types": "dist/cli.d.ts",
17
+ "bin": {
18
+ "runestone": "bin/runestone"
19
+ },
20
+ "scripts": {
21
+ "sync:readme": "node scripts/sync-readme.js",
22
+ "build": "npm run sync:readme && tsc --project tsconfig.json",
23
+ "prepack": "npm run build",
24
+ "prepublishOnly": "npm run build",
25
+ "test": "jest",
26
+ "test:unit": "jest tests/services tests/utils tests/commands",
27
+ "test:integration": "jest tests/integration",
28
+ "watch": "tsc --watch --project tsconfig.json"
29
+ },
30
+ "keywords": [
31
+ "runestone",
32
+ "docker",
33
+ "cli",
34
+ "traefik",
35
+ "mailpit",
36
+ "mkcert"
37
+ ],
38
+ "license": "MIT",
39
+ "engines": {
40
+ "node": ">=18.0.0"
41
+ },
42
+ "files": [
43
+ "bin/",
44
+ "dist/",
45
+ "README.md",
46
+ "LICENSE"
47
+ ],
48
+ "dependencies": {
49
+ "@clack/core": "^0.3.5",
50
+ "@clack/prompts": "^0.7.0",
51
+ "@mkcert/node": "^0.1.3",
52
+ "commander": "^12.0.0",
53
+ "dotenv": "^16.4.0",
54
+ "kleur": "^4.1.5"
55
+ },
56
+ "devDependencies": {
57
+ "@types/jest": "^29.5.0",
58
+ "@types/node": "^20.0.0",
59
+ "jest": "^29.7.0",
60
+ "ts-jest": "^29.1.0",
61
+ "typescript": "^5.4.0"
62
+ }
63
+ }