envx-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 +550 -0
- package/dist/commands/create.d.ts +3 -0
- package/dist/commands/create.d.ts.map +1 -0
- package/dist/commands/create.js +281 -0
- package/dist/commands/create.js.map +1 -0
- package/dist/commands/decrypt.d.ts +3 -0
- package/dist/commands/decrypt.d.ts.map +1 -0
- package/dist/commands/decrypt.js +206 -0
- package/dist/commands/decrypt.js.map +1 -0
- package/dist/commands/encrypt.d.ts +3 -0
- package/dist/commands/encrypt.d.ts.map +1 -0
- package/dist/commands/encrypt.js +194 -0
- package/dist/commands/encrypt.js.map +1 -0
- package/dist/commands/interactive.d.ts +4 -0
- package/dist/commands/interactive.d.ts.map +1 -0
- package/dist/commands/interactive.js +218 -0
- package/dist/commands/interactive.js.map +1 -0
- package/dist/index.d.ts +5 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +299 -0
- package/dist/index.js.map +1 -0
- package/dist/schemas/index.d.ts +167 -0
- package/dist/schemas/index.d.ts.map +1 -0
- package/dist/schemas/index.js +76 -0
- package/dist/schemas/index.js.map +1 -0
- package/dist/types/index.d.ts +64 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +3 -0
- package/dist/types/index.js.map +1 -0
- package/dist/utils/exec.d.ts +32 -0
- package/dist/utils/exec.d.ts.map +1 -0
- package/dist/utils/exec.js +208 -0
- package/dist/utils/exec.js.map +1 -0
- package/dist/utils/file.d.ts +22 -0
- package/dist/utils/file.d.ts.map +1 -0
- package/dist/utils/file.js +200 -0
- package/dist/utils/file.js.map +1 -0
- package/dist/utils/interactive.d.ts +18 -0
- package/dist/utils/interactive.d.ts.map +1 -0
- package/dist/utils/interactive.js +365 -0
- package/dist/utils/interactive.js.map +1 -0
- package/package.json +74 -0
|
@@ -0,0 +1,365 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.InteractiveUtils = void 0;
|
|
7
|
+
const chalk_1 = __importDefault(require("chalk"));
|
|
8
|
+
const inquirer_1 = __importDefault(require("inquirer"));
|
|
9
|
+
const path_1 = __importDefault(require("path"));
|
|
10
|
+
const exec_1 = require("./exec");
|
|
11
|
+
const file_1 = require("./file");
|
|
12
|
+
class InteractiveUtils {
|
|
13
|
+
static async selectEnvironment(environments, message = "Select environment:") {
|
|
14
|
+
if (environments.length === 0) {
|
|
15
|
+
throw new Error("No environments found");
|
|
16
|
+
}
|
|
17
|
+
if (environments.length === 1) {
|
|
18
|
+
return environments[0];
|
|
19
|
+
}
|
|
20
|
+
const { environment } = await inquirer_1.default.prompt([
|
|
21
|
+
{
|
|
22
|
+
type: "list",
|
|
23
|
+
name: "environment",
|
|
24
|
+
message,
|
|
25
|
+
choices: environments,
|
|
26
|
+
},
|
|
27
|
+
]);
|
|
28
|
+
return environment;
|
|
29
|
+
}
|
|
30
|
+
static async selectMultipleEnvironments(environments, message = "Select environments:") {
|
|
31
|
+
if (environments.length === 0) {
|
|
32
|
+
throw new Error("No environments found");
|
|
33
|
+
}
|
|
34
|
+
const { selectedEnvironments } = await inquirer_1.default.prompt({
|
|
35
|
+
type: "checkbox",
|
|
36
|
+
name: "selectedEnvironments",
|
|
37
|
+
message,
|
|
38
|
+
choices: environments,
|
|
39
|
+
validate: (input) => {
|
|
40
|
+
if (input.length === 0) {
|
|
41
|
+
return "Please select at least one environment";
|
|
42
|
+
}
|
|
43
|
+
return true;
|
|
44
|
+
},
|
|
45
|
+
});
|
|
46
|
+
return selectedEnvironments;
|
|
47
|
+
}
|
|
48
|
+
static async promptPassphrase(message = "Enter passphrase:") {
|
|
49
|
+
const { passphrase } = await inquirer_1.default.prompt([
|
|
50
|
+
{
|
|
51
|
+
type: "password",
|
|
52
|
+
name: "passphrase",
|
|
53
|
+
message,
|
|
54
|
+
mask: "*",
|
|
55
|
+
validate: (input) => {
|
|
56
|
+
if (!input.trim()) {
|
|
57
|
+
return "Passphrase cannot be empty";
|
|
58
|
+
}
|
|
59
|
+
if (input.length < 4) {
|
|
60
|
+
return "Passphrase must be at least 4 characters long";
|
|
61
|
+
}
|
|
62
|
+
return true;
|
|
63
|
+
},
|
|
64
|
+
},
|
|
65
|
+
]);
|
|
66
|
+
return passphrase;
|
|
67
|
+
}
|
|
68
|
+
static async confirmPassphrase(originalPassphrase) {
|
|
69
|
+
const { confirmPassphrase } = await inquirer_1.default.prompt([
|
|
70
|
+
{
|
|
71
|
+
type: "password",
|
|
72
|
+
name: "confirmPassphrase",
|
|
73
|
+
message: "Confirm passphrase:",
|
|
74
|
+
mask: "*",
|
|
75
|
+
validate: (input) => {
|
|
76
|
+
if (input !== originalPassphrase) {
|
|
77
|
+
return "Passphrases do not match";
|
|
78
|
+
}
|
|
79
|
+
return true;
|
|
80
|
+
},
|
|
81
|
+
},
|
|
82
|
+
]);
|
|
83
|
+
return confirmPassphrase === originalPassphrase;
|
|
84
|
+
}
|
|
85
|
+
static async promptNewPassphrase() {
|
|
86
|
+
const passphrase = await this.promptPassphrase("Enter new passphrase:");
|
|
87
|
+
await this.confirmPassphrase(passphrase);
|
|
88
|
+
return passphrase;
|
|
89
|
+
}
|
|
90
|
+
static async promptEnvironmentName(message = "Enter environment name:") {
|
|
91
|
+
const { environment } = await inquirer_1.default.prompt([
|
|
92
|
+
{
|
|
93
|
+
type: "input",
|
|
94
|
+
name: "environment",
|
|
95
|
+
message,
|
|
96
|
+
validate: (input) => {
|
|
97
|
+
if (!input.trim()) {
|
|
98
|
+
return "Environment name cannot be empty";
|
|
99
|
+
}
|
|
100
|
+
if (!file_1.FileUtils.isValidEnvironmentName(input.trim())) {
|
|
101
|
+
return "Environment name can only contain letters, numbers, hyphens, and underscores";
|
|
102
|
+
}
|
|
103
|
+
return true;
|
|
104
|
+
},
|
|
105
|
+
filter: (input) => input.trim().toLowerCase(),
|
|
106
|
+
},
|
|
107
|
+
]);
|
|
108
|
+
return environment;
|
|
109
|
+
}
|
|
110
|
+
static async promptSecret(stageName) {
|
|
111
|
+
const { secretOption } = await inquirer_1.default.prompt([
|
|
112
|
+
{
|
|
113
|
+
type: "list",
|
|
114
|
+
name: "secretOption",
|
|
115
|
+
message: `How would you like to set the secret for ${chalk_1.default.magenta(stageName)}?`,
|
|
116
|
+
choices: [
|
|
117
|
+
{ name: "Generate random secret", value: "generate" },
|
|
118
|
+
{ name: "Enter custom secret", value: "custom" },
|
|
119
|
+
],
|
|
120
|
+
},
|
|
121
|
+
]);
|
|
122
|
+
if (secretOption === "generate") {
|
|
123
|
+
const { secretLength } = await inquirer_1.default.prompt([
|
|
124
|
+
{
|
|
125
|
+
type: "list",
|
|
126
|
+
name: "secretLength",
|
|
127
|
+
message: "Select secret length:",
|
|
128
|
+
choices: [
|
|
129
|
+
{ name: "32 characters (recommended)", value: 32 },
|
|
130
|
+
{ name: "64 characters (high security)", value: 64 },
|
|
131
|
+
{ name: "16 characters (basic)", value: 16 },
|
|
132
|
+
],
|
|
133
|
+
default: 32,
|
|
134
|
+
},
|
|
135
|
+
]);
|
|
136
|
+
return file_1.FileUtils.generateRandomSecret(secretLength);
|
|
137
|
+
}
|
|
138
|
+
else {
|
|
139
|
+
const { customSecret } = await inquirer_1.default.prompt([
|
|
140
|
+
{
|
|
141
|
+
type: "password",
|
|
142
|
+
name: "customSecret",
|
|
143
|
+
message: `Enter secret for ${stageName}:`,
|
|
144
|
+
mask: "*",
|
|
145
|
+
validate: (input) => {
|
|
146
|
+
if (!input.trim()) {
|
|
147
|
+
return "Secret cannot be empty";
|
|
148
|
+
}
|
|
149
|
+
if (input.length < 8) {
|
|
150
|
+
return "Secret must be at least 8 characters long";
|
|
151
|
+
}
|
|
152
|
+
return true;
|
|
153
|
+
},
|
|
154
|
+
},
|
|
155
|
+
]);
|
|
156
|
+
return customSecret;
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
static async setupEnvrc(cwd, existingEnvironments = []) {
|
|
160
|
+
exec_1.CliUtils.header("Interactive .envrc Setup");
|
|
161
|
+
console.log(chalk_1.default.gray("This will help you set up secrets for your environments."));
|
|
162
|
+
console.log(chalk_1.default.gray("The secrets will be stored in a .envrc file."));
|
|
163
|
+
console.log();
|
|
164
|
+
const envrcPath = path_1.default.join(cwd, ".envrc");
|
|
165
|
+
const envrcExists = await file_1.FileUtils.fileExists(envrcPath);
|
|
166
|
+
if (envrcExists) {
|
|
167
|
+
exec_1.CliUtils.warning(".envrc file already exists");
|
|
168
|
+
const { overwrite } = await inquirer_1.default.prompt([
|
|
169
|
+
{
|
|
170
|
+
type: "confirm",
|
|
171
|
+
name: "overwrite",
|
|
172
|
+
message: "Do you want to overwrite the existing .envrc file?",
|
|
173
|
+
default: false,
|
|
174
|
+
},
|
|
175
|
+
]);
|
|
176
|
+
if (!overwrite) {
|
|
177
|
+
exec_1.CliUtils.info("Keeping existing .envrc file");
|
|
178
|
+
return await file_1.FileUtils.readEnvrc(cwd);
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
let environments = [];
|
|
182
|
+
if (existingEnvironments.length > 0) {
|
|
183
|
+
exec_1.CliUtils.info(`Found existing environments: ${existingEnvironments.map((env) => chalk_1.default.magenta(env)).join(", ")}`);
|
|
184
|
+
const { useExisting } = await inquirer_1.default.prompt([
|
|
185
|
+
{
|
|
186
|
+
type: "confirm",
|
|
187
|
+
name: "useExisting",
|
|
188
|
+
message: "Do you want to set up secrets for these existing environments?",
|
|
189
|
+
default: true,
|
|
190
|
+
},
|
|
191
|
+
]);
|
|
192
|
+
if (useExisting) {
|
|
193
|
+
const selectedEnvs = await this.selectMultipleEnvironments(existingEnvironments, "Select environments to set up secrets for:");
|
|
194
|
+
environments = environments.concat(selectedEnvs);
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
const { addMore } = await inquirer_1.default.prompt([
|
|
198
|
+
{
|
|
199
|
+
type: "confirm",
|
|
200
|
+
name: "addMore",
|
|
201
|
+
message: "Do you want to add secrets for additional environments?",
|
|
202
|
+
default: environments.length === 0,
|
|
203
|
+
},
|
|
204
|
+
]);
|
|
205
|
+
if (addMore) {
|
|
206
|
+
let addingMore = true;
|
|
207
|
+
while (addingMore) {
|
|
208
|
+
const newEnv = await this.promptEnvironmentName("Enter new environment name:");
|
|
209
|
+
if (!environments.includes(newEnv)) {
|
|
210
|
+
environments.push(newEnv);
|
|
211
|
+
exec_1.CliUtils.success(`Added ${chalk_1.default.magenta(newEnv)} to the list`);
|
|
212
|
+
}
|
|
213
|
+
else {
|
|
214
|
+
exec_1.CliUtils.warning(`Environment ${chalk_1.default.magenta(newEnv)} already exists in the list`);
|
|
215
|
+
}
|
|
216
|
+
const { continueAdding } = await inquirer_1.default.prompt([
|
|
217
|
+
{
|
|
218
|
+
type: "confirm",
|
|
219
|
+
name: "continueAdding",
|
|
220
|
+
message: "Do you want to add another environment?",
|
|
221
|
+
default: false,
|
|
222
|
+
},
|
|
223
|
+
]);
|
|
224
|
+
addingMore = continueAdding;
|
|
225
|
+
}
|
|
226
|
+
}
|
|
227
|
+
if (environments.length === 0) {
|
|
228
|
+
throw new Error("No environments selected for .envrc setup");
|
|
229
|
+
}
|
|
230
|
+
const config = {};
|
|
231
|
+
const secrets = [];
|
|
232
|
+
exec_1.CliUtils.subheader("Setting up secrets");
|
|
233
|
+
for (const env of environments.sort()) {
|
|
234
|
+
console.log();
|
|
235
|
+
exec_1.CliUtils.info(`Setting up secret for ${chalk_1.default.magenta(env)}`);
|
|
236
|
+
const secret = await this.promptSecret(env);
|
|
237
|
+
const variableName = file_1.FileUtils.generateSecretVariableName(env);
|
|
238
|
+
config[variableName] = secret;
|
|
239
|
+
secrets.push({
|
|
240
|
+
stage: env,
|
|
241
|
+
secret,
|
|
242
|
+
variableName,
|
|
243
|
+
});
|
|
244
|
+
exec_1.CliUtils.success(`Secret configured for ${chalk_1.default.magenta(env)} as ${chalk_1.default.cyan(variableName)}`);
|
|
245
|
+
}
|
|
246
|
+
console.log();
|
|
247
|
+
exec_1.CliUtils.subheader("Summary");
|
|
248
|
+
const tableRows = secrets.map(({ stage, variableName }) => [
|
|
249
|
+
chalk_1.default.magenta(stage),
|
|
250
|
+
chalk_1.default.cyan(variableName),
|
|
251
|
+
chalk_1.default.green("✓ Set"),
|
|
252
|
+
]);
|
|
253
|
+
exec_1.CliUtils.printTable(["Environment", "Variable Name", "Status"], tableRows);
|
|
254
|
+
const { confirmCreate } = await inquirer_1.default.prompt([
|
|
255
|
+
{
|
|
256
|
+
type: "confirm",
|
|
257
|
+
name: "confirmCreate",
|
|
258
|
+
message: "Create .envrc file with these settings?",
|
|
259
|
+
default: true,
|
|
260
|
+
},
|
|
261
|
+
]);
|
|
262
|
+
if (!confirmCreate) {
|
|
263
|
+
throw new Error("Setup cancelled by user");
|
|
264
|
+
}
|
|
265
|
+
return config;
|
|
266
|
+
}
|
|
267
|
+
static async selectFiles(files, message = "Select files:") {
|
|
268
|
+
if (files.length === 0) {
|
|
269
|
+
throw new Error("No files available for selection");
|
|
270
|
+
}
|
|
271
|
+
if (files.length === 1) {
|
|
272
|
+
const { confirm } = await inquirer_1.default.prompt([
|
|
273
|
+
{
|
|
274
|
+
type: "confirm",
|
|
275
|
+
name: "confirm",
|
|
276
|
+
message: `Process file ${chalk_1.default.cyan(files[0])}?`,
|
|
277
|
+
default: true,
|
|
278
|
+
},
|
|
279
|
+
]);
|
|
280
|
+
return confirm ? files : [];
|
|
281
|
+
}
|
|
282
|
+
const { selectedFiles } = await inquirer_1.default.prompt({
|
|
283
|
+
type: "checkbox",
|
|
284
|
+
name: "selectedFiles",
|
|
285
|
+
message,
|
|
286
|
+
choices: files.map((file) => ({
|
|
287
|
+
name: file,
|
|
288
|
+
value: file,
|
|
289
|
+
})),
|
|
290
|
+
validate: (input) => {
|
|
291
|
+
if (input.length === 0) {
|
|
292
|
+
return "Please select at least one file";
|
|
293
|
+
}
|
|
294
|
+
return true;
|
|
295
|
+
},
|
|
296
|
+
});
|
|
297
|
+
return selectedFiles;
|
|
298
|
+
}
|
|
299
|
+
static async confirmOperation(message, defaultValue = true) {
|
|
300
|
+
const { confirm } = await inquirer_1.default.prompt([
|
|
301
|
+
{
|
|
302
|
+
type: "confirm",
|
|
303
|
+
name: "confirm",
|
|
304
|
+
message,
|
|
305
|
+
default: defaultValue,
|
|
306
|
+
},
|
|
307
|
+
]);
|
|
308
|
+
return confirm;
|
|
309
|
+
}
|
|
310
|
+
static async selectOperationMode() {
|
|
311
|
+
const { operation } = await inquirer_1.default.prompt([
|
|
312
|
+
{
|
|
313
|
+
type: "list",
|
|
314
|
+
name: "operation",
|
|
315
|
+
message: "What would you like to do?",
|
|
316
|
+
choices: [
|
|
317
|
+
{ name: "Encrypt environment files", value: "encrypt" },
|
|
318
|
+
{ name: "Decrypt environment files", value: "decrypt" },
|
|
319
|
+
{ name: "Create new environment file", value: "create" },
|
|
320
|
+
{ name: "Interactive setup (.envrc)", value: "interactive" },
|
|
321
|
+
],
|
|
322
|
+
},
|
|
323
|
+
]);
|
|
324
|
+
return operation;
|
|
325
|
+
}
|
|
326
|
+
static async withProgress(promise, message = "Processing...") {
|
|
327
|
+
const spinner = ["⠋", "⠙", "⠹", "⠸", "⠼", "⠴", "⠦", "⠧", "⠇", "⠏"];
|
|
328
|
+
let i = 0;
|
|
329
|
+
const interval = setInterval(() => {
|
|
330
|
+
process.stdout.write(`\r${spinner[i]} ${message}`);
|
|
331
|
+
i = (i + 1) % spinner.length;
|
|
332
|
+
}, 100);
|
|
333
|
+
try {
|
|
334
|
+
const result = await promise;
|
|
335
|
+
clearInterval(interval);
|
|
336
|
+
process.stdout.write(`\r✓ ${message}\n`);
|
|
337
|
+
return result;
|
|
338
|
+
}
|
|
339
|
+
catch (error) {
|
|
340
|
+
clearInterval(interval);
|
|
341
|
+
process.stdout.write(`\r✗ ${message}\n`);
|
|
342
|
+
throw error;
|
|
343
|
+
}
|
|
344
|
+
}
|
|
345
|
+
static displayWelcome() {
|
|
346
|
+
console.log();
|
|
347
|
+
console.log(chalk_1.default.bold.cyan("🔐 Welcome to EnvX"));
|
|
348
|
+
console.log(chalk_1.default.gray("Environment file encryption and management tool"));
|
|
349
|
+
console.log();
|
|
350
|
+
}
|
|
351
|
+
static displayPrerequisites() {
|
|
352
|
+
exec_1.CliUtils.header("Prerequisites");
|
|
353
|
+
console.log("Before using EnvX, make sure you have:");
|
|
354
|
+
console.log(chalk_1.default.yellow("• GPG installed and configured"));
|
|
355
|
+
console.log(chalk_1.default.yellow("• Appropriate file permissions in your project directory"));
|
|
356
|
+
console.log();
|
|
357
|
+
console.log("To install GPG:");
|
|
358
|
+
console.log(chalk_1.default.cyan("• macOS: brew install gnupg"));
|
|
359
|
+
console.log(chalk_1.default.cyan("• Ubuntu/Debian: sudo apt-get install gnupg"));
|
|
360
|
+
console.log(chalk_1.default.cyan("• Windows: Download from https://gnupg.org/download/"));
|
|
361
|
+
console.log();
|
|
362
|
+
}
|
|
363
|
+
}
|
|
364
|
+
exports.InteractiveUtils = InteractiveUtils;
|
|
365
|
+
//# sourceMappingURL=interactive.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"interactive.js","sourceRoot":"","sources":["../../src/utils/interactive.ts"],"names":[],"mappings":"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"}
|
package/package.json
ADDED
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "envx-cli",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"description": "Environment file encryption and management tool",
|
|
5
|
+
"main": "dist/index.js",
|
|
6
|
+
"types": "dist/index.d.ts",
|
|
7
|
+
"bin": {
|
|
8
|
+
"envx": "dist/index.js"
|
|
9
|
+
},
|
|
10
|
+
"scripts": {
|
|
11
|
+
"build": "tsc",
|
|
12
|
+
"dev": "ts-node src/index.ts",
|
|
13
|
+
"start": "node dist/index.js",
|
|
14
|
+
"prepublishOnly": "npm run build",
|
|
15
|
+
"test": "jest",
|
|
16
|
+
"test:watch": "jest --watch",
|
|
17
|
+
"test:coverage": "jest --coverage",
|
|
18
|
+
"test:ci": "jest --ci --coverage --watchAll=false",
|
|
19
|
+
"test:core": "jest __tests__/core",
|
|
20
|
+
"test:integration": "jest __tests__/integration"
|
|
21
|
+
},
|
|
22
|
+
"keywords": [
|
|
23
|
+
"environment",
|
|
24
|
+
"encryption",
|
|
25
|
+
"env",
|
|
26
|
+
"gpg",
|
|
27
|
+
"security",
|
|
28
|
+
"cli",
|
|
29
|
+
"devops",
|
|
30
|
+
"envx"
|
|
31
|
+
],
|
|
32
|
+
"author": "EnvX Contributors",
|
|
33
|
+
"repository": {
|
|
34
|
+
"type": "git",
|
|
35
|
+
"url": "https://github.com/rahulretnan/envx-cli.git"
|
|
36
|
+
},
|
|
37
|
+
"bugs": {
|
|
38
|
+
"url": "https://github.com/rahulretnan/envx-cli/issues"
|
|
39
|
+
},
|
|
40
|
+
"homepage": "https://github.com/rahulretnan/envx-cli#readme",
|
|
41
|
+
"license": "MIT",
|
|
42
|
+
"files": [
|
|
43
|
+
"dist/**/*",
|
|
44
|
+
"README.md",
|
|
45
|
+
"LICENSE"
|
|
46
|
+
],
|
|
47
|
+
"engines": {
|
|
48
|
+
"node": ">=14.0.0"
|
|
49
|
+
},
|
|
50
|
+
"dependencies": {
|
|
51
|
+
"chalk": "^5.4.1",
|
|
52
|
+
"commander": "^14.0.0",
|
|
53
|
+
"fast-glob": "^3.3.2",
|
|
54
|
+
"fs-extra": "^11.2.0",
|
|
55
|
+
"inquirer": "^12.1.0",
|
|
56
|
+
"lodash": "^4.17.21",
|
|
57
|
+
"shelljs": "^0.8.5",
|
|
58
|
+
"zod": "^3.22.4"
|
|
59
|
+
},
|
|
60
|
+
"devDependencies": {
|
|
61
|
+
"@types/fs-extra": "^11.0.4",
|
|
62
|
+
"@types/inquirer": "^9.0.7",
|
|
63
|
+
"@types/jest": "^30.0.0",
|
|
64
|
+
"@types/lodash": "^4.14.202",
|
|
65
|
+
"@types/node": "^20.10.5",
|
|
66
|
+
"@types/shelljs": "^0.8.15",
|
|
67
|
+
"jest": "^30.0.5",
|
|
68
|
+
"mock-fs": "^5.5.0",
|
|
69
|
+
"supertest": "^7.1.4",
|
|
70
|
+
"ts-jest": "^29.4.0",
|
|
71
|
+
"ts-node": "^10.9.2",
|
|
72
|
+
"typescript": "^5.3.3"
|
|
73
|
+
}
|
|
74
|
+
}
|