@joltdesign/scripts 0.19.2 → 0.20.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/dist/AWSConsoleUrlGenerator.js +59 -0
- package/dist/AWSConsoleUrlGenerator.js.map +1 -0
- package/dist/Command/AWS.js +255 -12
- package/dist/Command/AWS.js.map +1 -1
- package/dist/Command/Cache.js +1 -1
- package/dist/Command/Cache.js.map +1 -1
- package/dist/Command/DB.js +31 -17
- package/dist/Command/DB.js.map +1 -1
- package/dist/Command/Docker.js +5 -3
- package/dist/Command/Docker.js.map +1 -1
- package/dist/Command/JoltCommand.js +43 -0
- package/dist/Command/JoltCommand.js.map +1 -1
- package/dist/Command/Nexcess.js +6 -0
- package/dist/Command/Nexcess.js.map +1 -1
- package/dist/Command/Prepare.js +12 -1
- package/dist/Command/Prepare.js.map +1 -1
- package/dist/Command/SSH.js +10 -10
- package/dist/Command/SSH.js.map +1 -1
- package/dist/Command/WP.js +2 -1
- package/dist/Command/WP.js.map +1 -1
- package/dist/Config.js +45 -16
- package/dist/Config.js.map +1 -1
- package/dist/cli.js +6 -3
- package/dist/cli.js.map +1 -1
- package/dist/errors.js +13 -0
- package/dist/errors.js.map +1 -0
- package/dist/schemas.js +11 -0
- package/dist/schemas.js.map +1 -0
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- package/dist/utils.js +150 -12
- package/dist/utils.js.map +1 -1
- package/package.json +13 -5
package/dist/cli.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import { Cli } from 'clipanion';
|
|
3
|
-
import { CloudFrontInvalidateCommand, CodeBuildStartCommand, ECSDeployCommand, ECSDeploySpecificCommand, LogsTailCommand, S3SyncCommand, } from './Command/AWS.js';
|
|
3
|
+
import { CloudFrontInvalidateCommand, CodeBuildStartCommand, ECSDeployCommand, ECSDeploySpecificCommand, ECSStatusCommand, LogsTailCommand, S3SyncCommand, } from './Command/AWS.js';
|
|
4
4
|
import { BuildCommand } from './Command/Build.js';
|
|
5
5
|
import { CacheFlushCommand } from './Command/Cache.js';
|
|
6
6
|
import { CmdCommand } from './Command/Cmd.js';
|
|
@@ -11,11 +11,13 @@ import { NexcessDeployCommand, NexcessDeployLocalCommand } from './Command/Nexce
|
|
|
11
11
|
import { PrepareCommand } from './Command/Prepare.js';
|
|
12
12
|
import { RsyncCommand, SSHCommand } from './Command/SSH.js';
|
|
13
13
|
import { WPCommand } from './Command/WP.js';
|
|
14
|
+
import { getPackageJson } from './utils.js';
|
|
14
15
|
const [_node, _app, ...args] = process.argv;
|
|
16
|
+
const packageInfo = await getPackageJson();
|
|
15
17
|
const cli = new Cli({
|
|
16
18
|
binaryLabel: 'Jolt Scripts',
|
|
17
|
-
binaryName:
|
|
18
|
-
binaryVersion:
|
|
19
|
+
binaryName: Object.keys(packageInfo.bin)[0],
|
|
20
|
+
binaryVersion: packageInfo.version,
|
|
19
21
|
});
|
|
20
22
|
cli.register(BuildCommand);
|
|
21
23
|
cli.register(ConfigCommand);
|
|
@@ -28,6 +30,7 @@ cli.register(DockerManifestCommand);
|
|
|
28
30
|
cli.register(WPCommand);
|
|
29
31
|
cli.register(ECSDeployCommand);
|
|
30
32
|
cli.register(ECSDeploySpecificCommand);
|
|
33
|
+
cli.register(ECSStatusCommand);
|
|
31
34
|
cli.register(DBDumpCommand);
|
|
32
35
|
cli.register(DBResetCommand);
|
|
33
36
|
cli.register(DBAwaitCommand);
|
package/dist/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,GAAG,EAAE,MAAM,WAAW,CAAA;AAC/B,OAAO,EACL,2BAA2B,EAC3B,qBAAqB,EACrB,gBAAgB,EAChB,wBAAwB,EACxB,eAAe,EACf,aAAa,GACd,MAAM,kBAAkB,CAAA;AACzB,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AACjD,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAA;AACtD,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAC7C,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAA;AACnD,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAA;AAC/E,OAAO,EACL,kBAAkB,EAClB,qBAAqB,EACrB,kBAAkB,EAClB,qBAAqB,EACrB,iBAAiB,EACjB,gBAAgB,GACjB,MAAM,qBAAqB,CAAA;AAC5B,OAAO,EAAE,oBAAoB,EAAE,yBAAyB,EAAE,MAAM,sBAAsB,CAAA;AACtF,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAA;AACrD,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAC3D,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA;AAE3C,MAAM,CAAC,KAAK,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC,GAAG,OAAO,CAAC,IAAI,CAAA;
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|
package/dist/errors.js
ADDED
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
export class ConfigValidationError extends Error {
|
|
2
|
+
constructor(message) {
|
|
3
|
+
super(message);
|
|
4
|
+
this.name = 'ConfigValidationError';
|
|
5
|
+
}
|
|
6
|
+
}
|
|
7
|
+
export class ContainerRuntimeError extends Error {
|
|
8
|
+
constructor(message) {
|
|
9
|
+
super(message);
|
|
10
|
+
this.name = 'ContainerRuntimeError';
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
//# sourceMappingURL=errors.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAAA,MAAM,OAAO,qBAAsB,SAAQ,KAAK;IAC9C,YAAY,OAAe;QACzB,KAAK,CAAC,OAAO,CAAC,CAAA;QACd,IAAI,CAAC,IAAI,GAAG,uBAAuB,CAAA;IACrC,CAAC;CACF;AAED,MAAM,OAAO,qBAAsB,SAAQ,KAAK;IAC9C,YAAY,OAAe;QACzB,KAAK,CAAC,OAAO,CAAC,CAAA;QACd,IAAI,CAAC,IAAI,GAAG,uBAAuB,CAAA;IACrC,CAAC;CACF"}
|
package/dist/schemas.js
ADDED
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
export const PrepareTimingSchema = z.enum(['early', 'normal']);
|
|
3
|
+
export const PrepareCommandSchema = z.object({
|
|
4
|
+
cmd: z.string(),
|
|
5
|
+
name: z.string().optional(),
|
|
6
|
+
fail: z.boolean().optional().default(true),
|
|
7
|
+
dir: z.string().optional(),
|
|
8
|
+
timing: PrepareTimingSchema.optional().default('normal'),
|
|
9
|
+
});
|
|
10
|
+
export const PrepareCommandsSchema = z.array(z.union([z.string(), PrepareCommandSchema]));
|
|
11
|
+
//# sourceMappingURL=schemas.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schemas.js","sourceRoot":"","sources":["../src/schemas.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAEvB,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC,CAAA;AAE9D,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC3C,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE;IACf,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC3B,IAAI,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC;IAC1C,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC1B,MAAM,EAAE,mBAAmB,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,QAAQ,CAAC;CACzD,CAAC,CAAA;AAEF,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,oBAAoB,CAAC,CAAC,CAAC,CAAA"}
|
package/dist/types.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":""}
|
package/dist/utils.js
CHANGED
|
@@ -1,6 +1,9 @@
|
|
|
1
|
-
import { stat } from 'node:fs/promises';
|
|
1
|
+
import { readFile, stat } from 'node:fs/promises';
|
|
2
|
+
import ansis from 'ansis';
|
|
3
|
+
import { camelCase, constantCase } from 'change-case';
|
|
2
4
|
import { execa } from 'execa';
|
|
3
5
|
import realWhich from 'which';
|
|
6
|
+
import { ContainerRuntimeError } from './errors.js';
|
|
4
7
|
export async function fileExists(path) {
|
|
5
8
|
try {
|
|
6
9
|
return (await stat(path)).isFile();
|
|
@@ -18,17 +21,90 @@ export async function directoryExists(path) {
|
|
|
18
21
|
}
|
|
19
22
|
}
|
|
20
23
|
export function constToCamel(key) {
|
|
21
|
-
|
|
22
|
-
parts = parts.map((x) => x.toLocaleLowerCase().replace(/^./, (y) => y.toLocaleUpperCase()));
|
|
23
|
-
parts[0] = parts[0].toLocaleLowerCase();
|
|
24
|
-
return parts.join('');
|
|
24
|
+
return camelCase(key);
|
|
25
25
|
}
|
|
26
26
|
export function keyToConst(str) {
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
27
|
+
return constantCase(str);
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Detects if an error message indicates a container runtime daemon is not running
|
|
31
|
+
* Supports Docker, Podman, and Rancher Desktop
|
|
32
|
+
*/
|
|
33
|
+
function isContainerRuntimeError(errorMessage) {
|
|
34
|
+
const containerRuntimeErrorPatterns = [
|
|
35
|
+
// Docker patterns
|
|
36
|
+
/cannot connect to the docker daemon/i,
|
|
37
|
+
/docker: error during connect/i,
|
|
38
|
+
/is the docker daemon running/i,
|
|
39
|
+
/connection refused.*docker/i,
|
|
40
|
+
/docker desktop is not running/i,
|
|
41
|
+
/error during connect.*docker/i,
|
|
42
|
+
/failed to connect to.*docker/i,
|
|
43
|
+
/dial unix.*docker\.sock.*connection refused/i,
|
|
44
|
+
/connect: no such file or directory.*docker\.sock/i,
|
|
45
|
+
// Podman patterns
|
|
46
|
+
/cannot connect to podman/i,
|
|
47
|
+
/error: unable to connect to podman/i,
|
|
48
|
+
/is the podman service running/i,
|
|
49
|
+
/connection refused.*podman/i,
|
|
50
|
+
/podman desktop is not running/i,
|
|
51
|
+
/unable to connect to podman socket/i,
|
|
52
|
+
/dial unix.*podman\.sock.*connection refused/i,
|
|
53
|
+
/connect: no such file or directory.*podman\.sock/i,
|
|
54
|
+
// Rancher Desktop patterns (uses Docker API but with Rancher-specific paths)
|
|
55
|
+
/rancher desktop is not running/i,
|
|
56
|
+
/connection refused.*rancher/i,
|
|
57
|
+
/dial unix.*rancher.*docker\.sock.*connection refused/i,
|
|
58
|
+
/connect: no such file or directory.*rancher.*docker\.sock/i,
|
|
59
|
+
/dial unix.*\.rd\/.*connection refused/i,
|
|
60
|
+
/connect: no such file or directory.*\.rd\//i,
|
|
61
|
+
];
|
|
62
|
+
return containerRuntimeErrorPatterns.some((pattern) => pattern.test(errorMessage));
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Detects the container runtime type from the command and error message
|
|
66
|
+
*/
|
|
67
|
+
function detectContainerRuntime(command, errorMessage) {
|
|
68
|
+
if (command.includes('podman') || /podman/i.test(errorMessage)) {
|
|
69
|
+
return 'podman';
|
|
70
|
+
}
|
|
71
|
+
// Check for Rancher Desktop indicators in the error message
|
|
72
|
+
if (/rancher/i.test(errorMessage) || /\.rd\//i.test(errorMessage)) {
|
|
73
|
+
return 'rancher';
|
|
74
|
+
}
|
|
75
|
+
if (command.includes('docker') || /docker/i.test(errorMessage)) {
|
|
76
|
+
return 'docker';
|
|
77
|
+
}
|
|
78
|
+
return 'unknown';
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* Creates a user-friendly error message for container runtime issues
|
|
82
|
+
*/
|
|
83
|
+
function createContainerRuntimeErrorMessage(command, originalError) {
|
|
84
|
+
const runtime = detectContainerRuntime(command, originalError);
|
|
85
|
+
let runtimeName;
|
|
86
|
+
let suggestion;
|
|
87
|
+
switch (runtime) {
|
|
88
|
+
case 'podman':
|
|
89
|
+
runtimeName = 'Podman';
|
|
90
|
+
suggestion = 'Please start Podman Desktop or ensure the Podman service is running before retrying.';
|
|
91
|
+
break;
|
|
92
|
+
case 'rancher':
|
|
93
|
+
runtimeName = 'Rancher Desktop';
|
|
94
|
+
suggestion = 'Please start Rancher Desktop or ensure the container runtime is running before retrying.';
|
|
95
|
+
break;
|
|
96
|
+
default:
|
|
97
|
+
runtimeName = 'Docker';
|
|
98
|
+
suggestion = 'Please start Docker Desktop or ensure the Docker daemon is running before retrying.';
|
|
99
|
+
break;
|
|
100
|
+
}
|
|
101
|
+
const header = ansis.red(`🐳 ${runtimeName} daemon is not running!`);
|
|
102
|
+
const suggestionText = ansis.yellow(suggestion);
|
|
103
|
+
const details = ansis.gray(`Original error: ${originalError}`);
|
|
104
|
+
return `${header}\n${suggestionText}\n${details}`;
|
|
30
105
|
}
|
|
31
106
|
export async function execC(command, args = [], options = {}) {
|
|
107
|
+
var _a;
|
|
32
108
|
const allOptions = {
|
|
33
109
|
shell: true,
|
|
34
110
|
cleanArgs: true,
|
|
@@ -43,7 +119,29 @@ export async function execC(command, args = [], options = {}) {
|
|
|
43
119
|
if (allOptions.cleanArgs) {
|
|
44
120
|
argsToUse = args.filter((x) => !!x);
|
|
45
121
|
}
|
|
46
|
-
|
|
122
|
+
try {
|
|
123
|
+
return await execa(command, argsToUse, allOptions);
|
|
124
|
+
}
|
|
125
|
+
catch (error) {
|
|
126
|
+
// Check if this is a container runtime command that failed due to daemon not running
|
|
127
|
+
if (error instanceof Error &&
|
|
128
|
+
'stderr' in error &&
|
|
129
|
+
typeof error.stderr === 'string' &&
|
|
130
|
+
(command.includes('docker') || command.includes('podman'))) {
|
|
131
|
+
const errorMessage = error.stderr || error.message || '';
|
|
132
|
+
if (isContainerRuntimeError(errorMessage)) {
|
|
133
|
+
const friendlyMessage = createContainerRuntimeErrorMessage(command, errorMessage);
|
|
134
|
+
// Write the friendly error to stderr if available
|
|
135
|
+
if ((_a = options.context) === null || _a === void 0 ? void 0 : _a.stderr) {
|
|
136
|
+
options.context.stderr.write(`${friendlyMessage}\n`);
|
|
137
|
+
}
|
|
138
|
+
// Throw a specific ContainerRuntimeError for programmatic handling
|
|
139
|
+
throw new ContainerRuntimeError(friendlyMessage);
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
// Re-throw the original error if it's not a container runtime daemon issue
|
|
143
|
+
throw error;
|
|
144
|
+
}
|
|
47
145
|
}
|
|
48
146
|
export function delay(ms) {
|
|
49
147
|
return new Promise((res) => setTimeout(res, ms, null));
|
|
@@ -59,12 +157,52 @@ asyncFn) {
|
|
|
59
157
|
const data = await Promise.all(promises);
|
|
60
158
|
return str.replace(replace, () => data.shift() || '');
|
|
61
159
|
}
|
|
160
|
+
// Cache for memoizing which() results since command availability doesn't change during execution
|
|
161
|
+
const whichCache = new Map();
|
|
162
|
+
/**
|
|
163
|
+
* Clear the which() cache - primarily for testing purposes
|
|
164
|
+
*/
|
|
165
|
+
export function clearWhichCache() {
|
|
166
|
+
whichCache.clear();
|
|
167
|
+
}
|
|
62
168
|
export async function which(cmd) {
|
|
169
|
+
var _a;
|
|
170
|
+
// Check cache first
|
|
171
|
+
if (whichCache.has(cmd)) {
|
|
172
|
+
return (_a = whichCache.get(cmd)) !== null && _a !== void 0 ? _a : null;
|
|
173
|
+
}
|
|
174
|
+
let result = null;
|
|
63
175
|
const parts = cmd.split(' ');
|
|
64
176
|
if (parts[1] === 'compose') {
|
|
65
|
-
//
|
|
66
|
-
|
|
177
|
+
// First check if docker exists
|
|
178
|
+
const dockerPath = await which(parts[0]);
|
|
179
|
+
if (!dockerPath) {
|
|
180
|
+
result = null;
|
|
181
|
+
}
|
|
182
|
+
else {
|
|
183
|
+
// Then verify docker compose plugin is available
|
|
184
|
+
try {
|
|
185
|
+
await execa(parts[0], ['compose', 'version'], {
|
|
186
|
+
stdio: 'ignore',
|
|
187
|
+
timeout: 5000,
|
|
188
|
+
});
|
|
189
|
+
result = dockerPath;
|
|
190
|
+
}
|
|
191
|
+
catch (_b) {
|
|
192
|
+
// docker compose plugin not available
|
|
193
|
+
result = null;
|
|
194
|
+
}
|
|
195
|
+
}
|
|
67
196
|
}
|
|
68
|
-
|
|
197
|
+
else {
|
|
198
|
+
result = await realWhich(cmd, { nothrow: true });
|
|
199
|
+
}
|
|
200
|
+
// Cache the result
|
|
201
|
+
whichCache.set(cmd, result);
|
|
202
|
+
return result;
|
|
203
|
+
}
|
|
204
|
+
export async function getPackageJson() {
|
|
205
|
+
const contents = await readFile(`${import.meta.dirname}/../package.json`);
|
|
206
|
+
return JSON.parse(contents.toString());
|
|
69
207
|
}
|
|
70
208
|
//# sourceMappingURL=utils.js.map
|
package/dist/utils.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAA;
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -4,13 +4,16 @@
|
|
|
4
4
|
"bin": {
|
|
5
5
|
"jolt": "./dist/cli.js"
|
|
6
6
|
},
|
|
7
|
-
"version": "0.
|
|
7
|
+
"version": "0.20.0",
|
|
8
8
|
"type": "module",
|
|
9
9
|
"devDependencies": {
|
|
10
|
-
"@biomejs/biome": "^2.2.
|
|
11
|
-
"@types/node": "^24.
|
|
10
|
+
"@biomejs/biome": "^2.2.4",
|
|
11
|
+
"@types/node": "^24.5.2",
|
|
12
12
|
"@types/which": "^3.0.4",
|
|
13
|
-
"
|
|
13
|
+
"@vitest/coverage-v8": "^3.2.4",
|
|
14
|
+
"@vitest/ui": "3.2.4",
|
|
15
|
+
"typescript": "^5.9.2",
|
|
16
|
+
"vitest": "^3.2.4"
|
|
14
17
|
},
|
|
15
18
|
"files": [
|
|
16
19
|
"/dist"
|
|
@@ -22,15 +25,20 @@
|
|
|
22
25
|
"fmt": "biome format",
|
|
23
26
|
"prepack": "run build",
|
|
24
27
|
"prepare": "jolt prepare",
|
|
28
|
+
"test": "vitest",
|
|
29
|
+
"test:coverage": "vitest --coverage.enabled=true",
|
|
30
|
+
"test:run": "vitest run",
|
|
25
31
|
"watch": "tsc -w"
|
|
26
32
|
},
|
|
27
33
|
"dependencies": {
|
|
28
34
|
"ansis": "^4.1.0",
|
|
35
|
+
"change-case": "^5.4.4",
|
|
29
36
|
"clipanion": "^4.0.0-rc.4",
|
|
30
37
|
"dotenv": "^17.2.2",
|
|
31
38
|
"execa": "^9.6.0",
|
|
32
39
|
"object-resolve-path": "^1.1.1",
|
|
33
40
|
"typanion": "^3.14.0",
|
|
34
|
-
"which": "^5.0.0"
|
|
41
|
+
"which": "^5.0.0",
|
|
42
|
+
"zod": "^4.1.9"
|
|
35
43
|
}
|
|
36
44
|
}
|