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.
Files changed (43) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +550 -0
  3. package/dist/commands/create.d.ts +3 -0
  4. package/dist/commands/create.d.ts.map +1 -0
  5. package/dist/commands/create.js +281 -0
  6. package/dist/commands/create.js.map +1 -0
  7. package/dist/commands/decrypt.d.ts +3 -0
  8. package/dist/commands/decrypt.d.ts.map +1 -0
  9. package/dist/commands/decrypt.js +206 -0
  10. package/dist/commands/decrypt.js.map +1 -0
  11. package/dist/commands/encrypt.d.ts +3 -0
  12. package/dist/commands/encrypt.d.ts.map +1 -0
  13. package/dist/commands/encrypt.js +194 -0
  14. package/dist/commands/encrypt.js.map +1 -0
  15. package/dist/commands/interactive.d.ts +4 -0
  16. package/dist/commands/interactive.d.ts.map +1 -0
  17. package/dist/commands/interactive.js +218 -0
  18. package/dist/commands/interactive.js.map +1 -0
  19. package/dist/index.d.ts +5 -0
  20. package/dist/index.d.ts.map +1 -0
  21. package/dist/index.js +299 -0
  22. package/dist/index.js.map +1 -0
  23. package/dist/schemas/index.d.ts +167 -0
  24. package/dist/schemas/index.d.ts.map +1 -0
  25. package/dist/schemas/index.js +76 -0
  26. package/dist/schemas/index.js.map +1 -0
  27. package/dist/types/index.d.ts +64 -0
  28. package/dist/types/index.d.ts.map +1 -0
  29. package/dist/types/index.js +3 -0
  30. package/dist/types/index.js.map +1 -0
  31. package/dist/utils/exec.d.ts +32 -0
  32. package/dist/utils/exec.d.ts.map +1 -0
  33. package/dist/utils/exec.js +208 -0
  34. package/dist/utils/exec.js.map +1 -0
  35. package/dist/utils/file.d.ts +22 -0
  36. package/dist/utils/file.d.ts.map +1 -0
  37. package/dist/utils/file.js +200 -0
  38. package/dist/utils/file.js.map +1 -0
  39. package/dist/utils/interactive.d.ts +18 -0
  40. package/dist/utils/interactive.d.ts.map +1 -0
  41. package/dist/utils/interactive.js +365 -0
  42. package/dist/utils/interactive.js.map +1 -0
  43. package/package.json +74 -0
@@ -0,0 +1,32 @@
1
+ import { CommandResult } from '../types';
2
+ export declare class ExecUtils {
3
+ static exec(command: string, options?: {
4
+ silent?: boolean;
5
+ cwd?: string;
6
+ }): CommandResult;
7
+ static encryptFile(filePath: string, passphrase: string): CommandResult;
8
+ static decryptFile(encryptedPath: string, outputPath: string, passphrase: string): CommandResult;
9
+ static isGpgAvailable(): boolean;
10
+ static getCurrentDir(): string;
11
+ static dirExists(path: string): boolean;
12
+ static fileExists(path: string): boolean;
13
+ static ensureDir(path: string): void;
14
+ static copyFile(source: string, destination: string): CommandResult;
15
+ static moveFile(source: string, destination: string): CommandResult;
16
+ static removeFile(path: string): CommandResult;
17
+ static testGpgOperation(passphrase: string): CommandResult;
18
+ }
19
+ export declare class CliUtils {
20
+ static success(message: string): void;
21
+ static error(message: string): void;
22
+ static warning(message: string): void;
23
+ static info(message: string): void;
24
+ static header(message: string): void;
25
+ static subheader(message: string): void;
26
+ static printFileOperation(result: CommandResult, operation: string): void;
27
+ static printTable(headers: string[], rows: string[][]): void;
28
+ static formatPath(path: string, cwd: string): string;
29
+ static formatEnvironment(env: string): string;
30
+ static formatStatus(status: string, success?: boolean): string;
31
+ }
32
+ //# sourceMappingURL=exec.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"exec.d.ts","sourceRoot":"","sources":["../../src/utils/exec.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC,qBAAa,SAAS;IAIpB,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,GAAE;QAAE,MAAM,CAAC,EAAE,OAAO,CAAC;QAAC,GAAG,CAAC,EAAE,MAAM,CAAA;KAAO,GAAG,aAAa;IAiC7F,MAAM,CAAC,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,aAAa;IAQvE,MAAM,CAAC,WAAW,CAAC,aAAa,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,aAAa;IAQhG,MAAM,CAAC,cAAc,IAAI,OAAO;IAYhC,MAAM,CAAC,aAAa,IAAI,MAAM;IAO9B,MAAM,CAAC,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAOvC,MAAM,CAAC,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAOxC,MAAM,CAAC,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAOpC,MAAM,CAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,aAAa;IAmBnE,MAAM,CAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,aAAa;IAmBnE,MAAM,CAAC,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,aAAa;IAmB9C,MAAM,CAAC,gBAAgB,CAAC,UAAU,EAAE,MAAM,GAAG,aAAa;CA0C3D;AAED,qBAAa,QAAQ;IAInB,MAAM,CAAC,OAAO,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAOrC,MAAM,CAAC,KAAK,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAOnC,MAAM,CAAC,OAAO,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAOrC,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAOlC,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IASpC,MAAM,CAAC,SAAS,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IASvC,MAAM,CAAC,kBAAkB,CAAC,MAAM,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI;IAgBzE,MAAM,CAAC,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,GAAG,IAAI;IA0B5D,MAAM,CAAC,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM;IAQpD,MAAM,CAAC,iBAAiB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM;IAO7C,MAAM,CAAC,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,GAAE,OAAc,GAAG,MAAM;CAGrE"}
@@ -0,0 +1,208 @@
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.CliUtils = exports.ExecUtils = void 0;
7
+ const chalk_1 = __importDefault(require("chalk"));
8
+ const child_process_1 = require("child_process");
9
+ const shelljs_1 = __importDefault(require("shelljs"));
10
+ class ExecUtils {
11
+ static exec(command, options = {}) {
12
+ try {
13
+ const { silent = false, cwd } = options;
14
+ if (!silent) {
15
+ console.log(chalk_1.default.blue(`Executing: ${command}`));
16
+ }
17
+ const result = (0, child_process_1.execSync)(command, {
18
+ cwd: cwd || process.cwd(),
19
+ encoding: 'utf-8',
20
+ stdio: silent ? 'pipe' : 'inherit'
21
+ });
22
+ return {
23
+ success: true,
24
+ message: 'Command executed successfully',
25
+ data: result
26
+ };
27
+ }
28
+ catch (error) {
29
+ const err = error;
30
+ return {
31
+ success: false,
32
+ message: `Command failed: ${err.message}`,
33
+ errors: [err.stderr || err.message]
34
+ };
35
+ }
36
+ }
37
+ static encryptFile(filePath, passphrase) {
38
+ const command = `gpg --passphrase "${passphrase}" --quiet --yes --batch -c "${filePath}"`;
39
+ return this.exec(command, { silent: true });
40
+ }
41
+ static decryptFile(encryptedPath, outputPath, passphrase) {
42
+ const command = `gpg --passphrase "${passphrase}" --quiet --yes --batch -o "${outputPath}" -d "${encryptedPath}"`;
43
+ return this.exec(command, { silent: true });
44
+ }
45
+ static isGpgAvailable() {
46
+ try {
47
+ (0, child_process_1.execSync)('gpg --version', { stdio: 'pipe' });
48
+ return true;
49
+ }
50
+ catch {
51
+ return false;
52
+ }
53
+ }
54
+ static getCurrentDir() {
55
+ return shelljs_1.default.pwd().toString();
56
+ }
57
+ static dirExists(path) {
58
+ return shelljs_1.default.test('-d', path);
59
+ }
60
+ static fileExists(path) {
61
+ return shelljs_1.default.test('-f', path);
62
+ }
63
+ static ensureDir(path) {
64
+ shelljs_1.default.mkdir('-p', path);
65
+ }
66
+ static copyFile(source, destination) {
67
+ try {
68
+ shelljs_1.default.cp(source, destination);
69
+ return {
70
+ success: true,
71
+ message: `File copied from ${source} to ${destination}`
72
+ };
73
+ }
74
+ catch (error) {
75
+ return {
76
+ success: false,
77
+ message: `Failed to copy file: ${error}`,
78
+ errors: [String(error)]
79
+ };
80
+ }
81
+ }
82
+ static moveFile(source, destination) {
83
+ try {
84
+ shelljs_1.default.mv(source, destination);
85
+ return {
86
+ success: true,
87
+ message: `File moved from ${source} to ${destination}`
88
+ };
89
+ }
90
+ catch (error) {
91
+ return {
92
+ success: false,
93
+ message: `Failed to move file: ${error}`,
94
+ errors: [String(error)]
95
+ };
96
+ }
97
+ }
98
+ static removeFile(path) {
99
+ try {
100
+ shelljs_1.default.rm(path);
101
+ return {
102
+ success: true,
103
+ message: `File removed: ${path}`
104
+ };
105
+ }
106
+ catch (error) {
107
+ return {
108
+ success: false,
109
+ message: `Failed to remove file: ${error}`,
110
+ errors: [String(error)]
111
+ };
112
+ }
113
+ }
114
+ static testGpgOperation(passphrase) {
115
+ const testContent = 'test-content-for-gpg';
116
+ const testFile = `/tmp/envx-test-${Date.now()}.txt`;
117
+ const encryptedFile = `${testFile}.gpg`;
118
+ try {
119
+ shelljs_1.default.echo(testContent).to(testFile);
120
+ const encryptResult = this.encryptFile(testFile, passphrase);
121
+ if (!encryptResult.success) {
122
+ shelljs_1.default.rm('-f', testFile);
123
+ return encryptResult;
124
+ }
125
+ const decryptedFile = `/tmp/envx-test-decrypted-${Date.now()}.txt`;
126
+ const decryptResult = this.decryptFile(encryptedFile, decryptedFile, passphrase);
127
+ shelljs_1.default.rm('-f', testFile, encryptedFile, decryptedFile);
128
+ if (!decryptResult.success) {
129
+ return decryptResult;
130
+ }
131
+ return {
132
+ success: true,
133
+ message: 'GPG operations test passed'
134
+ };
135
+ }
136
+ catch (error) {
137
+ shelljs_1.default.rm('-f', testFile, encryptedFile);
138
+ return {
139
+ success: false,
140
+ message: `GPG test failed: ${error}`,
141
+ errors: [String(error)]
142
+ };
143
+ }
144
+ }
145
+ }
146
+ exports.ExecUtils = ExecUtils;
147
+ class CliUtils {
148
+ static success(message) {
149
+ console.log(chalk_1.default.green('✓'), message);
150
+ }
151
+ static error(message) {
152
+ console.log(chalk_1.default.red('✗'), message);
153
+ }
154
+ static warning(message) {
155
+ console.log(chalk_1.default.yellow('⚠'), message);
156
+ }
157
+ static info(message) {
158
+ console.log(chalk_1.default.blue('ℹ'), message);
159
+ }
160
+ static header(message) {
161
+ console.log();
162
+ console.log(chalk_1.default.bold.cyan(message));
163
+ console.log(chalk_1.default.cyan('='.repeat(message.length)));
164
+ }
165
+ static subheader(message) {
166
+ console.log();
167
+ console.log(chalk_1.default.bold(message));
168
+ console.log('-'.repeat(message.length));
169
+ }
170
+ static printFileOperation(result, operation) {
171
+ if (result.success) {
172
+ this.success(`${operation}: ${result.message}`);
173
+ }
174
+ else {
175
+ this.error(`${operation}: ${result.message}`);
176
+ if (result.errors) {
177
+ result.errors.forEach(error => {
178
+ console.log(chalk_1.default.red(` • ${error}`));
179
+ });
180
+ }
181
+ }
182
+ }
183
+ static printTable(headers, rows) {
184
+ const columnWidths = headers.map((header, index) => {
185
+ const columnValues = [header, ...rows.map(row => row[index] || '')];
186
+ return Math.max(...columnValues.map(val => val.length));
187
+ });
188
+ const headerRow = headers.map((header, index) => header.padEnd(columnWidths[index])).join(' | ');
189
+ console.log(chalk_1.default.bold(headerRow));
190
+ console.log(columnWidths.map(width => '-'.repeat(width)).join('-|-'));
191
+ rows.forEach(row => {
192
+ const formattedRow = row.map((cell, index) => (cell || '').padEnd(columnWidths[index])).join(' | ');
193
+ console.log(formattedRow);
194
+ });
195
+ }
196
+ static formatPath(path, cwd) {
197
+ const relativePath = path.replace(cwd, '.');
198
+ return chalk_1.default.cyan(relativePath);
199
+ }
200
+ static formatEnvironment(env) {
201
+ return chalk_1.default.magenta(env);
202
+ }
203
+ static formatStatus(status, success = true) {
204
+ return success ? chalk_1.default.green(status) : chalk_1.default.red(status);
205
+ }
206
+ }
207
+ exports.CliUtils = CliUtils;
208
+ //# sourceMappingURL=exec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"exec.js","sourceRoot":"","sources":["../../src/utils/exec.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,22 @@
1
+ import { EnvFile, EnvrcConfig, FileOperationResult } from "../types";
2
+ export declare class FileUtils {
3
+ static findEnvFiles(environment: string, cwd: string): Promise<EnvFile[]>;
4
+ static findAllEnvironments(cwd: string): Promise<string[]>;
5
+ static fileExists(filePath: string): Promise<boolean>;
6
+ static createBackup(filePath: string): Promise<string>;
7
+ static removeBackup(backupPath: string): Promise<void>;
8
+ static getFileHash(filePath: string): Promise<string>;
9
+ static filesAreIdentical(file1: string, file2: string): Promise<boolean>;
10
+ static readEnvrc(cwd: string): Promise<EnvrcConfig>;
11
+ static writeEnvrc(cwd: string, config: EnvrcConfig): Promise<FileOperationResult>;
12
+ static createEnvTemplate(filePath: string, template?: string): Promise<FileOperationResult>;
13
+ static generateRandomSecret(length?: number): string;
14
+ static generateSecretVariableName(stage: string): string;
15
+ static ensureDir(dirPath: string): Promise<void>;
16
+ static getRelativePath(absolutePath: string, cwd: string): string;
17
+ static isValidEnvironmentName(name: string): boolean;
18
+ static getEncryptedPath(filePath: string): string;
19
+ static getDecryptedPath(encryptedPath: string): string;
20
+ static isEncryptedFile(filePath: string): boolean;
21
+ }
22
+ //# sourceMappingURL=file.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"file.d.ts","sourceRoot":"","sources":["../../src/utils/file.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,mBAAmB,EAAE,MAAM,UAAU,CAAC;AAErE,qBAAa,SAAS;WAIP,YAAY,CACvB,WAAW,EAAE,MAAM,EACnB,GAAG,EAAE,MAAM,GACV,OAAO,CAAC,OAAO,EAAE,CAAC;WAsCR,mBAAmB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;WAoBnD,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;WAY9C,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;WAW/C,YAAY,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;WAS/C,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;WAQ9C,iBAAiB,CAC5B,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,MAAM,GACZ,OAAO,CAAC,OAAO,CAAC;WAgBN,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC;WAqC5C,UAAU,CACrB,GAAG,EAAE,MAAM,EACX,MAAM,EAAE,WAAW,GAClB,OAAO,CAAC,mBAAmB,CAAC;WAgClB,iBAAiB,CAC5B,QAAQ,EAAE,MAAM,EAChB,QAAQ,CAAC,EAAE,MAAM,GAChB,OAAO,CAAC,mBAAmB,CAAC;IAyC/B,MAAM,CAAC,oBAAoB,CAAC,MAAM,GAAE,MAAW,GAAG,MAAM;IAOxD,MAAM,CAAC,0BAA0B,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM;WAO3C,SAAS,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAOtD,MAAM,CAAC,eAAe,CAAC,YAAY,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM;IAOjE,MAAM,CAAC,sBAAsB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAQpD,MAAM,CAAC,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM;IAOjD,MAAM,CAAC,gBAAgB,CAAC,aAAa,EAAE,MAAM,GAAG,MAAM;IAOtD,MAAM,CAAC,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO;CAGlD"}
@@ -0,0 +1,200 @@
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.FileUtils = void 0;
7
+ const crypto_1 = __importDefault(require("crypto"));
8
+ const fast_glob_1 = __importDefault(require("fast-glob"));
9
+ const fs_extra_1 = __importDefault(require("fs-extra"));
10
+ const lodash_1 = require("lodash");
11
+ const path_1 = __importDefault(require("path"));
12
+ class FileUtils {
13
+ static async findEnvFiles(environment, cwd) {
14
+ const pattern = `**/.env.${environment}`;
15
+ const encryptedPattern = `**/.env.${environment}.gpg`;
16
+ const [envFiles, encryptedFiles] = await Promise.all([
17
+ (0, fast_glob_1.default)(pattern, { cwd, dot: true }),
18
+ (0, fast_glob_1.default)(encryptedPattern, { cwd, dot: true }),
19
+ ]);
20
+ const results = [];
21
+ for (const filePath of envFiles) {
22
+ results.push({
23
+ path: path_1.default.join(cwd, filePath),
24
+ stage: environment,
25
+ encrypted: false,
26
+ exists: true,
27
+ });
28
+ }
29
+ for (const filePath of encryptedFiles) {
30
+ const decryptedPath = (0, lodash_1.replace)(filePath, ".gpg", "");
31
+ results.push({
32
+ path: path_1.default.join(cwd, decryptedPath),
33
+ stage: environment,
34
+ encrypted: true,
35
+ exists: true,
36
+ });
37
+ }
38
+ return results;
39
+ }
40
+ static async findAllEnvironments(cwd) {
41
+ const pattern = "**/.env.*";
42
+ const files = await (0, fast_glob_1.default)(pattern, { cwd, dot: true });
43
+ const environments = new Set();
44
+ for (const file of files) {
45
+ const basename = path_1.default.basename(file);
46
+ const match = basename.match(/^\.env\.([^.]+)(\.gpg)?$/);
47
+ if (match && match[1]) {
48
+ environments.add(match[1]);
49
+ }
50
+ }
51
+ return Array.from(environments).sort();
52
+ }
53
+ static async fileExists(filePath) {
54
+ try {
55
+ const stat = await fs_extra_1.default.stat(filePath);
56
+ return stat.isFile();
57
+ }
58
+ catch {
59
+ return false;
60
+ }
61
+ }
62
+ static async createBackup(filePath) {
63
+ const timestamp = Date.now();
64
+ const random = Math.random().toString(36).substring(2, 8);
65
+ const backupPath = `${filePath}.backup.${timestamp}.${random}`;
66
+ await fs_extra_1.default.copy(filePath, backupPath);
67
+ return backupPath;
68
+ }
69
+ static async removeBackup(backupPath) {
70
+ if (await this.fileExists(backupPath)) {
71
+ await fs_extra_1.default.remove(backupPath);
72
+ }
73
+ }
74
+ static async getFileHash(filePath) {
75
+ const fileBuffer = await fs_extra_1.default.readFile(filePath);
76
+ return crypto_1.default.createHash("md5").update(fileBuffer).digest("hex");
77
+ }
78
+ static async filesAreIdentical(file1, file2) {
79
+ if (!(await this.fileExists(file1)) || !(await this.fileExists(file2))) {
80
+ return false;
81
+ }
82
+ const [hash1, hash2] = await Promise.all([
83
+ this.getFileHash(file1),
84
+ this.getFileHash(file2),
85
+ ]);
86
+ return hash1 === hash2;
87
+ }
88
+ static async readEnvrc(cwd) {
89
+ const envrcPath = path_1.default.join(cwd, ".envrc");
90
+ if (!(await this.fileExists(envrcPath))) {
91
+ return {};
92
+ }
93
+ try {
94
+ const content = await fs_extra_1.default.readFile(envrcPath, "utf-8");
95
+ const config = {};
96
+ const lines = content.split("\n");
97
+ for (const line of lines) {
98
+ const trimmed = line.trim();
99
+ if (trimmed.startsWith("export ")) {
100
+ const exportStatement = trimmed.substring(7);
101
+ const [key, ...valueParts] = exportStatement.split("=");
102
+ if (key && valueParts.length > 0) {
103
+ let value = valueParts.join("=");
104
+ value = value.replace(/^["']|["']$/g, "");
105
+ config[key.trim()] = value;
106
+ }
107
+ }
108
+ }
109
+ return config;
110
+ }
111
+ catch (error) {
112
+ console.warn(`Warning: Could not read .envrc file: ${error}`);
113
+ return {};
114
+ }
115
+ }
116
+ static async writeEnvrc(cwd, config) {
117
+ const envrcPath = path_1.default.join(cwd, ".envrc");
118
+ try {
119
+ const lines = ["# Environment secrets generated by envx", ""];
120
+ for (const [key, value] of Object.entries(config)) {
121
+ lines.push(`export ${key}="${value}"`);
122
+ }
123
+ lines.push("");
124
+ await fs_extra_1.default.writeFile(envrcPath, lines.join("\n"), "utf-8");
125
+ return {
126
+ success: true,
127
+ message: "Successfully wrote .envrc file",
128
+ filePath: envrcPath,
129
+ };
130
+ }
131
+ catch (error) {
132
+ return {
133
+ success: false,
134
+ message: `Failed to write .envrc file: ${error}`,
135
+ filePath: envrcPath,
136
+ error: error,
137
+ };
138
+ }
139
+ }
140
+ static async createEnvTemplate(filePath, template) {
141
+ try {
142
+ let content = "";
143
+ if (template && (await this.fileExists(template))) {
144
+ content = await fs_extra_1.default.readFile(template, "utf-8");
145
+ }
146
+ else {
147
+ content = [
148
+ "# Environment variables",
149
+ "# Add your environment-specific variables here",
150
+ "",
151
+ "# Example:",
152
+ "# DATABASE_URL=",
153
+ "# API_KEY=",
154
+ "# DEBUG=false",
155
+ "",
156
+ ].join("\n");
157
+ }
158
+ await fs_extra_1.default.writeFile(filePath, content, "utf-8");
159
+ return {
160
+ success: true,
161
+ message: `Successfully created .env file`,
162
+ filePath,
163
+ };
164
+ }
165
+ catch (error) {
166
+ return {
167
+ success: false,
168
+ message: `Failed to create .env file: ${error}`,
169
+ filePath,
170
+ error: error,
171
+ };
172
+ }
173
+ }
174
+ static generateRandomSecret(length = 32) {
175
+ return crypto_1.default.randomBytes(length).toString("hex");
176
+ }
177
+ static generateSecretVariableName(stage) {
178
+ return `${stage.toUpperCase()}_SECRET`;
179
+ }
180
+ static async ensureDir(dirPath) {
181
+ await fs_extra_1.default.ensureDir(dirPath);
182
+ }
183
+ static getRelativePath(absolutePath, cwd) {
184
+ return path_1.default.relative(cwd, absolutePath);
185
+ }
186
+ static isValidEnvironmentName(name) {
187
+ return /^[a-zA-Z0-9_-]+$/.test(name);
188
+ }
189
+ static getEncryptedPath(filePath) {
190
+ return `${filePath}.gpg`;
191
+ }
192
+ static getDecryptedPath(encryptedPath) {
193
+ return (0, lodash_1.replace)(encryptedPath, ".gpg", "");
194
+ }
195
+ static isEncryptedFile(filePath) {
196
+ return filePath.endsWith(".gpg");
197
+ }
198
+ }
199
+ exports.FileUtils = FileUtils;
200
+ //# sourceMappingURL=file.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"file.js","sourceRoot":"","sources":["../../src/utils/file.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ import { EnvrcConfig } from "../types";
2
+ export declare class InteractiveUtils {
3
+ static selectEnvironment(environments: string[], message?: string): Promise<string>;
4
+ static selectMultipleEnvironments(environments: string[], message?: string): Promise<string[]>;
5
+ static promptPassphrase(message?: string): Promise<string>;
6
+ static confirmPassphrase(originalPassphrase: string): Promise<boolean>;
7
+ static promptNewPassphrase(): Promise<string>;
8
+ static promptEnvironmentName(message?: string): Promise<string>;
9
+ static promptSecret(stageName: string): Promise<string>;
10
+ static setupEnvrc(cwd: string, existingEnvironments?: string[]): Promise<EnvrcConfig>;
11
+ static selectFiles(files: string[], message?: string): Promise<string[]>;
12
+ static confirmOperation(message: string, defaultValue?: boolean): Promise<boolean>;
13
+ static selectOperationMode(): Promise<"encrypt" | "decrypt" | "create" | "interactive">;
14
+ static withProgress<T>(promise: Promise<T>, message?: string): Promise<T>;
15
+ static displayWelcome(): void;
16
+ static displayPrerequisites(): void;
17
+ }
18
+ //# sourceMappingURL=interactive.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"interactive.d.ts","sourceRoot":"","sources":["../../src/utils/interactive.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,WAAW,EAAe,MAAM,UAAU,CAAC;AAIpD,qBAAa,gBAAgB;WAId,iBAAiB,CAC5B,YAAY,EAAE,MAAM,EAAE,EACtB,OAAO,GAAE,MAA8B,GACtC,OAAO,CAAC,MAAM,CAAC;WAwBL,0BAA0B,CACrC,YAAY,EAAE,MAAM,EAAE,EACtB,OAAO,GAAE,MAA+B,GACvC,OAAO,CAAC,MAAM,EAAE,CAAC;WAwBP,gBAAgB,CAC3B,OAAO,GAAE,MAA4B,GACpC,OAAO,CAAC,MAAM,CAAC;WAyBL,iBAAiB,CAAC,kBAAkB,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;WAsB/D,mBAAmB,IAAI,OAAO,CAAC,MAAM,CAAC;WAStC,qBAAqB,CAChC,OAAO,GAAE,MAAkC,GAC1C,OAAO,CAAC,MAAM,CAAC;WAyBL,YAAY,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;WAuDhD,UAAU,CACrB,GAAG,EAAE,MAAM,EACX,oBAAoB,GAAE,MAAM,EAAO,GAClC,OAAO,CAAC,WAAW,CAAC;WA4JV,WAAW,CACtB,KAAK,EAAE,MAAM,EAAE,EACf,OAAO,GAAE,MAAwB,GAChC,OAAO,CAAC,MAAM,EAAE,CAAC;WAwCP,gBAAgB,CAC3B,OAAO,EAAE,MAAM,EACf,YAAY,GAAE,OAAc,GAC3B,OAAO,CAAC,OAAO,CAAC;WAgBN,mBAAmB,IAAI,OAAO,CACzC,SAAS,GAAG,SAAS,GAAG,QAAQ,GAAG,aAAa,CACjD;WAqBY,YAAY,CAAC,CAAC,EACzB,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,EACnB,OAAO,GAAE,MAAwB,GAChC,OAAO,CAAC,CAAC,CAAC;IAwBb,MAAM,CAAC,cAAc,IAAI,IAAI;IAU7B,MAAM,CAAC,oBAAoB,IAAI,IAAI;CAgBpC"}