envmatic 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/README.md +567 -0
- package/dist/cli.d.ts +7 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +203 -0
- package/dist/cli.js.map +1 -0
- package/dist/commands/add.d.ts +11 -0
- package/dist/commands/add.d.ts.map +1 -0
- package/dist/commands/add.js +77 -0
- package/dist/commands/add.js.map +1 -0
- package/dist/commands/delete.d.ts +6 -0
- package/dist/commands/delete.d.ts.map +1 -0
- package/dist/commands/delete.js +78 -0
- package/dist/commands/delete.js.map +1 -0
- package/dist/commands/edit.d.ts +13 -0
- package/dist/commands/edit.d.ts.map +1 -0
- package/dist/commands/edit.js +364 -0
- package/dist/commands/edit.js.map +1 -0
- package/dist/commands/import.d.ts +11 -0
- package/dist/commands/import.d.ts.map +1 -0
- package/dist/commands/import.js +103 -0
- package/dist/commands/import.js.map +1 -0
- package/dist/commands/init.d.ts +8 -0
- package/dist/commands/init.d.ts.map +1 -0
- package/dist/commands/init.js +237 -0
- package/dist/commands/init.js.map +1 -0
- package/dist/commands/link.d.ts +16 -0
- package/dist/commands/link.d.ts.map +1 -0
- package/dist/commands/link.js +157 -0
- package/dist/commands/link.js.map +1 -0
- package/dist/commands/list.d.ts +9 -0
- package/dist/commands/list.d.ts.map +1 -0
- package/dist/commands/list.js +73 -0
- package/dist/commands/list.js.map +1 -0
- package/dist/commands/lock.d.ts +16 -0
- package/dist/commands/lock.d.ts.map +1 -0
- package/dist/commands/lock.js +245 -0
- package/dist/commands/lock.js.map +1 -0
- package/dist/commands/rotate.d.ts +15 -0
- package/dist/commands/rotate.d.ts.map +1 -0
- package/dist/commands/rotate.js +406 -0
- package/dist/commands/rotate.js.map +1 -0
- package/dist/commands/show.d.ts +9 -0
- package/dist/commands/show.d.ts.map +1 -0
- package/dist/commands/show.js +72 -0
- package/dist/commands/show.js.map +1 -0
- package/dist/commands/sync.d.ts +13 -0
- package/dist/commands/sync.d.ts.map +1 -0
- package/dist/commands/sync.js +174 -0
- package/dist/commands/sync.js.map +1 -0
- package/dist/commands/use.d.ts +19 -0
- package/dist/commands/use.d.ts.map +1 -0
- package/dist/commands/use.js +238 -0
- package/dist/commands/use.js.map +1 -0
- package/dist/constants.d.ts +20 -0
- package/dist/constants.d.ts.map +1 -0
- package/dist/constants.js +47 -0
- package/dist/constants.js.map +1 -0
- package/dist/index.d.ts +15 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +21 -0
- package/dist/index.js.map +1 -0
- package/dist/services/config.d.ts +64 -0
- package/dist/services/config.d.ts.map +1 -0
- package/dist/services/config.js +133 -0
- package/dist/services/config.js.map +1 -0
- package/dist/services/encryption.d.ts +30 -0
- package/dist/services/encryption.d.ts.map +1 -0
- package/dist/services/encryption.js +146 -0
- package/dist/services/encryption.js.map +1 -0
- package/dist/services/envfile.d.ts +76 -0
- package/dist/services/envfile.d.ts.map +1 -0
- package/dist/services/envfile.js +247 -0
- package/dist/services/envfile.js.map +1 -0
- package/dist/services/git.d.ts +60 -0
- package/dist/services/git.d.ts.map +1 -0
- package/dist/services/git.js +239 -0
- package/dist/services/git.js.map +1 -0
- package/dist/services/linker.d.ts +46 -0
- package/dist/services/linker.d.ts.map +1 -0
- package/dist/services/linker.js +222 -0
- package/dist/services/linker.js.map +1 -0
- package/dist/services/protection.d.ts +32 -0
- package/dist/services/protection.d.ts.map +1 -0
- package/dist/services/protection.js +190 -0
- package/dist/services/protection.js.map +1 -0
- package/dist/types/index.d.ts +73 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +5 -0
- package/dist/types/index.js.map +1 -0
- package/dist/utils/display.d.ts +74 -0
- package/dist/utils/display.d.ts.map +1 -0
- package/dist/utils/display.js +138 -0
- package/dist/utils/display.js.map +1 -0
- package/dist/utils/editor.d.ts +22 -0
- package/dist/utils/editor.d.ts.map +1 -0
- package/dist/utils/editor.js +159 -0
- package/dist/utils/editor.js.map +1 -0
- package/dist/utils/prompts.d.ts +41 -0
- package/dist/utils/prompts.d.ts.map +1 -0
- package/dist/utils/prompts.js +222 -0
- package/dist/utils/prompts.js.map +1 -0
- package/package.json +69 -0
|
@@ -0,0 +1,364 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Edit Command
|
|
3
|
+
* Edit variables in an env file
|
|
4
|
+
*/
|
|
5
|
+
import inquirer from 'inquirer';
|
|
6
|
+
import ora from 'ora';
|
|
7
|
+
import fs from 'fs-extra';
|
|
8
|
+
import path from 'path';
|
|
9
|
+
import os from 'os';
|
|
10
|
+
import { readEnvFile, updateEnvFile, setVariable, removeVariable, listEnvFiles, getEnvFilePath, parseEnvContent, serializeEnvContent } from '../services/envfile.js';
|
|
11
|
+
import { sync } from '../services/git.js';
|
|
12
|
+
import { getConfig } from '../services/config.js';
|
|
13
|
+
import { makeMutable, makeImmutable } from '../services/protection.js';
|
|
14
|
+
import { syncCopies } from '../services/linker.js';
|
|
15
|
+
import { printBanner, success, error, info, warning, colors, formatFileId, maskValue } from '../utils/display.js';
|
|
16
|
+
import { getEncryptionOptions, select, confirm } from '../utils/prompts.js';
|
|
17
|
+
import { detectEditors, openInEditor, isTerminalEditor } from '../utils/editor.js';
|
|
18
|
+
/**
|
|
19
|
+
* Edit command with optional external editor support
|
|
20
|
+
*/
|
|
21
|
+
export async function editCommand(fileId, options = {}) {
|
|
22
|
+
printBanner();
|
|
23
|
+
const config = await getConfig();
|
|
24
|
+
if (!config) {
|
|
25
|
+
error('Envmatic is not initialized. Run `envmatic init` first.');
|
|
26
|
+
return;
|
|
27
|
+
}
|
|
28
|
+
// If no file ID provided, prompt for selection
|
|
29
|
+
if (!fileId) {
|
|
30
|
+
const files = await listEnvFiles();
|
|
31
|
+
if (files.length === 0) {
|
|
32
|
+
error('No env files found. Add one with `envmatic add`');
|
|
33
|
+
return;
|
|
34
|
+
}
|
|
35
|
+
fileId = await select('Select an env file to edit:', files.map(f => ({
|
|
36
|
+
name: `${f.project}/${f.environment || 'default'}/${f.name}`,
|
|
37
|
+
value: f.id,
|
|
38
|
+
})));
|
|
39
|
+
}
|
|
40
|
+
const encryptionOptions = await getEncryptionOptions();
|
|
41
|
+
try {
|
|
42
|
+
const { metadata, variables } = await readEnvFile(fileId, encryptionOptions);
|
|
43
|
+
console.log('Editing: ' + formatFileId(fileId) + '\n');
|
|
44
|
+
// Make file mutable for editing
|
|
45
|
+
const filePath = getEnvFilePath(fileId, metadata.encrypted);
|
|
46
|
+
if (metadata.immutable) {
|
|
47
|
+
await makeMutable(filePath);
|
|
48
|
+
}
|
|
49
|
+
// External editor mode
|
|
50
|
+
if (options.editor) {
|
|
51
|
+
await editWithExternalEditor(fileId, metadata, variables, encryptionOptions, filePath);
|
|
52
|
+
return;
|
|
53
|
+
}
|
|
54
|
+
// Interactive edit loop
|
|
55
|
+
let modified = false;
|
|
56
|
+
while (true) {
|
|
57
|
+
const { action } = await inquirer.prompt([
|
|
58
|
+
{
|
|
59
|
+
type: 'list',
|
|
60
|
+
name: 'action',
|
|
61
|
+
message: 'What would you like to do?',
|
|
62
|
+
choices: [
|
|
63
|
+
{ name: 'View all variables', value: 'view' },
|
|
64
|
+
{ name: 'Add/Update a variable', value: 'set' },
|
|
65
|
+
{ name: 'Remove a variable', value: 'remove' },
|
|
66
|
+
new inquirer.Separator(),
|
|
67
|
+
{ name: 'Save and exit', value: 'save' },
|
|
68
|
+
{ name: 'Discard changes and exit', value: 'cancel' },
|
|
69
|
+
],
|
|
70
|
+
},
|
|
71
|
+
]);
|
|
72
|
+
if (action === 'view') {
|
|
73
|
+
console.log();
|
|
74
|
+
for (const [key, value] of Object.entries(variables)) {
|
|
75
|
+
console.log(` ${colors.secondary(key)} = ${maskValue(value)}`);
|
|
76
|
+
}
|
|
77
|
+
console.log();
|
|
78
|
+
}
|
|
79
|
+
else if (action === 'set') {
|
|
80
|
+
const { key, value } = await inquirer.prompt([
|
|
81
|
+
{
|
|
82
|
+
type: 'input',
|
|
83
|
+
name: 'key',
|
|
84
|
+
message: 'Variable name:',
|
|
85
|
+
validate: (input) => input.trim().length > 0 || 'Name is required',
|
|
86
|
+
},
|
|
87
|
+
{
|
|
88
|
+
type: 'input',
|
|
89
|
+
name: 'value',
|
|
90
|
+
message: 'Value:',
|
|
91
|
+
},
|
|
92
|
+
]);
|
|
93
|
+
const oldValue = variables[key.trim()];
|
|
94
|
+
variables[key.trim()] = value;
|
|
95
|
+
modified = true;
|
|
96
|
+
if (oldValue !== undefined) {
|
|
97
|
+
info(`Updated: ${key}`);
|
|
98
|
+
}
|
|
99
|
+
else {
|
|
100
|
+
success(`Added: ${key}`);
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
else if (action === 'remove') {
|
|
104
|
+
const keys = Object.keys(variables);
|
|
105
|
+
if (keys.length === 0) {
|
|
106
|
+
info('No variables to remove.');
|
|
107
|
+
continue;
|
|
108
|
+
}
|
|
109
|
+
const { keyToRemove } = await inquirer.prompt([
|
|
110
|
+
{
|
|
111
|
+
type: 'list',
|
|
112
|
+
name: 'keyToRemove',
|
|
113
|
+
message: 'Select variable to remove:',
|
|
114
|
+
choices: keys,
|
|
115
|
+
},
|
|
116
|
+
]);
|
|
117
|
+
delete variables[keyToRemove];
|
|
118
|
+
modified = true;
|
|
119
|
+
success(`Removed: ${keyToRemove}`);
|
|
120
|
+
}
|
|
121
|
+
else if (action === 'save') {
|
|
122
|
+
if (modified) {
|
|
123
|
+
const spinner = ora('Saving changes...').start();
|
|
124
|
+
await updateEnvFile(fileId, variables, encryptionOptions);
|
|
125
|
+
// Re-apply protection if needed
|
|
126
|
+
if (metadata.immutable) {
|
|
127
|
+
await makeImmutable(filePath);
|
|
128
|
+
}
|
|
129
|
+
spinner.succeed('Changes saved');
|
|
130
|
+
// Sync copies
|
|
131
|
+
await syncCopies(fileId, encryptionOptions);
|
|
132
|
+
// Sync to remote
|
|
133
|
+
const syncSpinner = ora('Syncing to remote...').start();
|
|
134
|
+
try {
|
|
135
|
+
await sync();
|
|
136
|
+
syncSpinner.succeed('Synced');
|
|
137
|
+
}
|
|
138
|
+
catch {
|
|
139
|
+
syncSpinner.warn('Could not sync (will sync later)');
|
|
140
|
+
}
|
|
141
|
+
console.log();
|
|
142
|
+
success('File updated successfully!');
|
|
143
|
+
}
|
|
144
|
+
else {
|
|
145
|
+
info('No changes to save.');
|
|
146
|
+
}
|
|
147
|
+
break;
|
|
148
|
+
}
|
|
149
|
+
else if (action === 'cancel') {
|
|
150
|
+
if (modified) {
|
|
151
|
+
const confirmCancel = await confirm('Discard all changes?', false);
|
|
152
|
+
if (!confirmCancel) {
|
|
153
|
+
continue;
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
// Restore protection
|
|
157
|
+
if (metadata.immutable) {
|
|
158
|
+
await makeImmutable(filePath);
|
|
159
|
+
}
|
|
160
|
+
info('Changes discarded.');
|
|
161
|
+
break;
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
catch (err) {
|
|
166
|
+
const errorMessage = err instanceof Error ? err.message : String(err);
|
|
167
|
+
error(errorMessage);
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
/**
|
|
171
|
+
* Edit a file using an external editor
|
|
172
|
+
*/
|
|
173
|
+
async function editWithExternalEditor(fileId, metadata, variables, encryptionOptions, filePath) {
|
|
174
|
+
// Detect available editors
|
|
175
|
+
const detectSpinner = ora('Detecting available editors...').start();
|
|
176
|
+
const editors = await detectEditors();
|
|
177
|
+
detectSpinner.stop();
|
|
178
|
+
if (editors.length === 0) {
|
|
179
|
+
error('No editors found on your system.');
|
|
180
|
+
info('Set the EDITOR environment variable to specify your preferred editor.');
|
|
181
|
+
// Restore protection
|
|
182
|
+
if (metadata.immutable) {
|
|
183
|
+
await makeImmutable(filePath);
|
|
184
|
+
}
|
|
185
|
+
return;
|
|
186
|
+
}
|
|
187
|
+
// Let user choose editor
|
|
188
|
+
const { editorChoice } = await inquirer.prompt([
|
|
189
|
+
{
|
|
190
|
+
type: 'list',
|
|
191
|
+
name: 'editorChoice',
|
|
192
|
+
message: 'Choose an editor:',
|
|
193
|
+
choices: editors.map(e => ({
|
|
194
|
+
name: e.name,
|
|
195
|
+
value: e.command,
|
|
196
|
+
})),
|
|
197
|
+
},
|
|
198
|
+
]);
|
|
199
|
+
// For encrypted files, we need to create a temporary decrypted file
|
|
200
|
+
let editFilePath = filePath;
|
|
201
|
+
let tempFilePath = null;
|
|
202
|
+
if (metadata.encrypted) {
|
|
203
|
+
// Create a temp file with decrypted content
|
|
204
|
+
const tempDir = os.tmpdir();
|
|
205
|
+
const tempFileName = `envmatic-edit-${Date.now()}.env`;
|
|
206
|
+
tempFilePath = path.join(tempDir, tempFileName);
|
|
207
|
+
const content = serializeEnvContent(variables);
|
|
208
|
+
await fs.writeFile(tempFilePath, content);
|
|
209
|
+
editFilePath = tempFilePath;
|
|
210
|
+
console.log();
|
|
211
|
+
info('Created temporary decrypted file for editing.');
|
|
212
|
+
}
|
|
213
|
+
console.log();
|
|
214
|
+
console.log(colors.warning('┌─────────────────────────────────────────────────────────────┐'));
|
|
215
|
+
console.log(colors.warning('│') + colors.accent(' 🔓 FILE UNLOCKED FOR EDITING ') + colors.warning('│'));
|
|
216
|
+
console.log(colors.warning('├─────────────────────────────────────────────────────────────┤'));
|
|
217
|
+
console.log(colors.warning('│') + ' The file is now unlocked and editable. ' + colors.warning('│'));
|
|
218
|
+
console.log(colors.warning('│') + ' ' + colors.warning('│'));
|
|
219
|
+
console.log(colors.warning('│') + ' After you finish editing and close the editor: ' + colors.warning('│'));
|
|
220
|
+
console.log(colors.warning('│') + ' • Changes will be saved automatically ' + colors.warning('│'));
|
|
221
|
+
console.log(colors.warning('│') + ' • The file will be re-encrypted (if applicable) ' + colors.warning('│'));
|
|
222
|
+
console.log(colors.warning('│') + ' • You\'ll be prompted to sync and lock ' + colors.warning('│'));
|
|
223
|
+
console.log(colors.warning('│') + ' ' + colors.warning('│'));
|
|
224
|
+
console.log(colors.warning('│') + ' If something goes wrong, run: ' + colors.warning('│'));
|
|
225
|
+
console.log(colors.warning('│') + colors.primary(' envmatic lock ') + colors.warning('│'));
|
|
226
|
+
console.log(colors.warning('└─────────────────────────────────────────────────────────────┘'));
|
|
227
|
+
console.log();
|
|
228
|
+
// Open editor and wait
|
|
229
|
+
const editorSpinner = ora('Opening editor...').start();
|
|
230
|
+
try {
|
|
231
|
+
// For terminal editors, stop the spinner before opening
|
|
232
|
+
if (isTerminalEditor(editorChoice)) {
|
|
233
|
+
editorSpinner.stop();
|
|
234
|
+
console.log(colors.muted('Opening editor... (save and quit when done)\n'));
|
|
235
|
+
}
|
|
236
|
+
await openInEditor(editFilePath, editorChoice);
|
|
237
|
+
if (!isTerminalEditor(editorChoice)) {
|
|
238
|
+
editorSpinner.succeed('Editor closed');
|
|
239
|
+
}
|
|
240
|
+
// Read the edited content
|
|
241
|
+
const editedContent = await fs.readFile(editFilePath, 'utf-8');
|
|
242
|
+
const editedVariables = parseEnvContent(editedContent);
|
|
243
|
+
// Check if content changed
|
|
244
|
+
const originalContent = serializeEnvContent(variables);
|
|
245
|
+
const newContent = serializeEnvContent(editedVariables);
|
|
246
|
+
if (originalContent === newContent) {
|
|
247
|
+
info('No changes detected.');
|
|
248
|
+
// Clean up temp file
|
|
249
|
+
if (tempFilePath) {
|
|
250
|
+
await fs.remove(tempFilePath);
|
|
251
|
+
}
|
|
252
|
+
// Ask if they want to lock the file
|
|
253
|
+
const shouldLock = await confirm('Lock the file?', true);
|
|
254
|
+
if (shouldLock && metadata.immutable) {
|
|
255
|
+
await makeImmutable(filePath);
|
|
256
|
+
success('File locked.');
|
|
257
|
+
}
|
|
258
|
+
else if (!shouldLock) {
|
|
259
|
+
console.log();
|
|
260
|
+
warning('File remains unlocked. Run `envmatic lock` when done.');
|
|
261
|
+
}
|
|
262
|
+
return;
|
|
263
|
+
}
|
|
264
|
+
// Save changes
|
|
265
|
+
const saveSpinner = ora('Saving changes...').start();
|
|
266
|
+
await updateEnvFile(fileId, editedVariables, encryptionOptions);
|
|
267
|
+
saveSpinner.succeed('Changes saved');
|
|
268
|
+
// Clean up temp file
|
|
269
|
+
if (tempFilePath) {
|
|
270
|
+
await fs.remove(tempFilePath);
|
|
271
|
+
}
|
|
272
|
+
// Sync copies
|
|
273
|
+
await syncCopies(fileId, encryptionOptions);
|
|
274
|
+
// Sync to remote
|
|
275
|
+
const shouldSync = await confirm('Sync changes to remote?', true);
|
|
276
|
+
if (shouldSync) {
|
|
277
|
+
const syncSpinner = ora('Syncing to remote...').start();
|
|
278
|
+
try {
|
|
279
|
+
await sync();
|
|
280
|
+
syncSpinner.succeed('Synced');
|
|
281
|
+
}
|
|
282
|
+
catch {
|
|
283
|
+
syncSpinner.warn('Could not sync (will sync later)');
|
|
284
|
+
}
|
|
285
|
+
}
|
|
286
|
+
// Lock the file
|
|
287
|
+
const shouldLock = await confirm('Lock the file?', true);
|
|
288
|
+
if (shouldLock && metadata.immutable) {
|
|
289
|
+
await makeImmutable(filePath);
|
|
290
|
+
success('File locked.');
|
|
291
|
+
}
|
|
292
|
+
else if (!shouldLock) {
|
|
293
|
+
console.log();
|
|
294
|
+
warning('File remains unlocked. Run `envmatic lock` when done.');
|
|
295
|
+
}
|
|
296
|
+
console.log();
|
|
297
|
+
success('File updated successfully!');
|
|
298
|
+
}
|
|
299
|
+
catch (err) {
|
|
300
|
+
const errorMessage = err instanceof Error ? err.message : String(err);
|
|
301
|
+
error(`Editor error: ${errorMessage}`);
|
|
302
|
+
// Clean up temp file on error
|
|
303
|
+
if (tempFilePath && await fs.pathExists(tempFilePath)) {
|
|
304
|
+
await fs.remove(tempFilePath);
|
|
305
|
+
}
|
|
306
|
+
console.log();
|
|
307
|
+
warning('File may still be unlocked. Run `envmatic lock` to secure it.');
|
|
308
|
+
}
|
|
309
|
+
}
|
|
310
|
+
export async function setCommand(fileId, key, value) {
|
|
311
|
+
printBanner();
|
|
312
|
+
const config = await getConfig();
|
|
313
|
+
if (!config) {
|
|
314
|
+
error('Envmatic is not initialized. Run `envmatic init` first.');
|
|
315
|
+
return;
|
|
316
|
+
}
|
|
317
|
+
const encryptionOptions = await getEncryptionOptions();
|
|
318
|
+
const spinner = ora('Setting variable...').start();
|
|
319
|
+
try {
|
|
320
|
+
await setVariable(fileId, key, value, encryptionOptions);
|
|
321
|
+
await syncCopies(fileId, encryptionOptions);
|
|
322
|
+
spinner.succeed(`Set ${key} in ${fileId}`);
|
|
323
|
+
// Sync
|
|
324
|
+
try {
|
|
325
|
+
await sync();
|
|
326
|
+
}
|
|
327
|
+
catch {
|
|
328
|
+
// Ignore sync errors
|
|
329
|
+
}
|
|
330
|
+
}
|
|
331
|
+
catch (err) {
|
|
332
|
+
spinner.fail('Failed to set variable');
|
|
333
|
+
const errorMessage = err instanceof Error ? err.message : String(err);
|
|
334
|
+
error(errorMessage);
|
|
335
|
+
}
|
|
336
|
+
}
|
|
337
|
+
export async function unsetCommand(fileId, key) {
|
|
338
|
+
printBanner();
|
|
339
|
+
const config = await getConfig();
|
|
340
|
+
if (!config) {
|
|
341
|
+
error('Envmatic is not initialized. Run `envmatic init` first.');
|
|
342
|
+
return;
|
|
343
|
+
}
|
|
344
|
+
const encryptionOptions = await getEncryptionOptions();
|
|
345
|
+
const spinner = ora('Removing variable...').start();
|
|
346
|
+
try {
|
|
347
|
+
await removeVariable(fileId, key, encryptionOptions);
|
|
348
|
+
await syncCopies(fileId, encryptionOptions);
|
|
349
|
+
spinner.succeed(`Removed ${key} from ${fileId}`);
|
|
350
|
+
// Sync
|
|
351
|
+
try {
|
|
352
|
+
await sync();
|
|
353
|
+
}
|
|
354
|
+
catch {
|
|
355
|
+
// Ignore sync errors
|
|
356
|
+
}
|
|
357
|
+
}
|
|
358
|
+
catch (err) {
|
|
359
|
+
spinner.fail('Failed to remove variable');
|
|
360
|
+
const errorMessage = err instanceof Error ? err.message : String(err);
|
|
361
|
+
error(errorMessage);
|
|
362
|
+
}
|
|
363
|
+
}
|
|
364
|
+
//# sourceMappingURL=edit.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"edit.js","sourceRoot":"","sources":["../../src/commands/edit.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Import Command
|
|
3
|
+
* Import an existing .env file into the vault
|
|
4
|
+
*/
|
|
5
|
+
export declare function importCommand(sourcePath: string, options?: {
|
|
6
|
+
project?: string;
|
|
7
|
+
environment?: string;
|
|
8
|
+
name?: string;
|
|
9
|
+
description?: string;
|
|
10
|
+
}): Promise<void>;
|
|
11
|
+
//# sourceMappingURL=import.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"import.d.ts","sourceRoot":"","sources":["../../src/commands/import.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAwBH,wBAAsB,aAAa,CACjC,UAAU,EAAE,MAAM,EAClB,OAAO,GAAE;IACP,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;CACjB,GACL,OAAO,CAAC,IAAI,CAAC,CA+Gf"}
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Import Command
|
|
3
|
+
* Import an existing .env file into the vault
|
|
4
|
+
*/
|
|
5
|
+
import fs from 'fs-extra';
|
|
6
|
+
import path from 'path';
|
|
7
|
+
import ora from 'ora';
|
|
8
|
+
import { importEnvFile, listProjects, getEnvFilePath } from '../services/envfile.js';
|
|
9
|
+
import { sync } from '../services/git.js';
|
|
10
|
+
import { getConfig } from '../services/config.js';
|
|
11
|
+
import { makeImmutable } from '../services/protection.js';
|
|
12
|
+
import { printBanner, success, error, info, colors, formatFileId } from '../utils/display.js';
|
|
13
|
+
import { promptProject, promptEnvironment, getEncryptionOptions, confirm } from '../utils/prompts.js';
|
|
14
|
+
export async function importCommand(sourcePath, options = {}) {
|
|
15
|
+
printBanner();
|
|
16
|
+
const config = await getConfig();
|
|
17
|
+
if (!config) {
|
|
18
|
+
error('Envmatic is not initialized. Run `envmatic init` first.');
|
|
19
|
+
return;
|
|
20
|
+
}
|
|
21
|
+
// Resolve and validate source path
|
|
22
|
+
const resolvedPath = path.resolve(sourcePath);
|
|
23
|
+
if (!(await fs.pathExists(resolvedPath))) {
|
|
24
|
+
error(`File not found: ${resolvedPath}`);
|
|
25
|
+
return;
|
|
26
|
+
}
|
|
27
|
+
// Read and preview the file
|
|
28
|
+
const content = await fs.readFile(resolvedPath, 'utf-8');
|
|
29
|
+
const lines = content.trim().split('\n').filter(l => l && !l.startsWith('#'));
|
|
30
|
+
console.log(colors.muted(`Importing: ${resolvedPath}`));
|
|
31
|
+
console.log(colors.muted(`Variables: ${lines.length}`));
|
|
32
|
+
console.log();
|
|
33
|
+
// Preview first few variables
|
|
34
|
+
const previewCount = Math.min(5, lines.length);
|
|
35
|
+
console.log(colors.muted('Preview:'));
|
|
36
|
+
for (let i = 0; i < previewCount; i++) {
|
|
37
|
+
const line = lines[i];
|
|
38
|
+
const [key] = line.split('=');
|
|
39
|
+
console.log(colors.muted(` ${key}=...`));
|
|
40
|
+
}
|
|
41
|
+
if (lines.length > previewCount) {
|
|
42
|
+
console.log(colors.muted(` ... and ${lines.length - previewCount} more`));
|
|
43
|
+
}
|
|
44
|
+
console.log();
|
|
45
|
+
// Confirm import
|
|
46
|
+
const proceed = await confirm('Import this file?', true);
|
|
47
|
+
if (!proceed) {
|
|
48
|
+
info('Import cancelled.');
|
|
49
|
+
return;
|
|
50
|
+
}
|
|
51
|
+
// Get project
|
|
52
|
+
const projects = await listProjects();
|
|
53
|
+
const project = options.project || await promptProject(projects);
|
|
54
|
+
// Get environment
|
|
55
|
+
const environment = options.environment || await promptEnvironment();
|
|
56
|
+
// Get encryption options
|
|
57
|
+
const encryptionOptions = await getEncryptionOptions();
|
|
58
|
+
// Import the file
|
|
59
|
+
const spinner = ora('Importing env file...').start();
|
|
60
|
+
try {
|
|
61
|
+
const envFile = await importEnvFile(resolvedPath, project, environment, {
|
|
62
|
+
name: options.name || path.basename(resolvedPath),
|
|
63
|
+
description: options.description,
|
|
64
|
+
encryptionOptions,
|
|
65
|
+
immutable: config.immutableByDefault,
|
|
66
|
+
});
|
|
67
|
+
// Apply file protection if needed
|
|
68
|
+
if (envFile.immutable) {
|
|
69
|
+
const filePath = getEnvFilePath(envFile.id, envFile.encrypted);
|
|
70
|
+
await makeImmutable(filePath);
|
|
71
|
+
}
|
|
72
|
+
spinner.succeed('File imported');
|
|
73
|
+
// Sync to remote
|
|
74
|
+
const syncSpinner = ora('Syncing to remote...').start();
|
|
75
|
+
try {
|
|
76
|
+
await sync();
|
|
77
|
+
syncSpinner.succeed('Synced to remote');
|
|
78
|
+
}
|
|
79
|
+
catch {
|
|
80
|
+
syncSpinner.warn('Could not sync to remote (will sync later)');
|
|
81
|
+
}
|
|
82
|
+
console.log();
|
|
83
|
+
success('Environment file imported successfully!');
|
|
84
|
+
console.log();
|
|
85
|
+
console.log(' File ID: ' + formatFileId(envFile.id));
|
|
86
|
+
console.log(' Variables: ' + lines.length);
|
|
87
|
+
console.log(' Encrypted: ' + (envFile.encrypted ? colors.secondary('yes') : 'no'));
|
|
88
|
+
console.log();
|
|
89
|
+
// Ask about replacing original
|
|
90
|
+
const replace = await confirm('Replace original file with a link to the vault?', false);
|
|
91
|
+
if (replace) {
|
|
92
|
+
const { createCopy } = await import('../services/linker.js');
|
|
93
|
+
await createCopy(envFile.id, resolvedPath, encryptionOptions, true);
|
|
94
|
+
success('Original file replaced with vault link');
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
catch (err) {
|
|
98
|
+
spinner.fail('Failed to import env file');
|
|
99
|
+
const errorMessage = err instanceof Error ? err.message : String(err);
|
|
100
|
+
error(errorMessage);
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
//# sourceMappingURL=import.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"import.js","sourceRoot":"","sources":["../../src/commands/import.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAoBH,wBAAsB,WAAW,CAAC,OAAO,EAAE;IAAE,KAAK,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CA+P7E"}
|