@clef-sh/cli 0.1.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/bin/clef.js +2 -0
- package/dist/commands/delete.d.ts +6 -0
- package/dist/commands/delete.d.ts.map +1 -0
- package/dist/commands/delete.js +130 -0
- package/dist/commands/delete.js.map +1 -0
- package/dist/commands/diff.d.ts +6 -0
- package/dist/commands/diff.d.ts.map +1 -0
- package/dist/commands/diff.js +168 -0
- package/dist/commands/diff.js.map +1 -0
- package/dist/commands/doctor.d.ts +6 -0
- package/dist/commands/doctor.d.ts.map +1 -0
- package/dist/commands/doctor.js +331 -0
- package/dist/commands/doctor.js.map +1 -0
- package/dist/commands/exec.d.ts +6 -0
- package/dist/commands/exec.d.ts.map +1 -0
- package/dist/commands/exec.js +187 -0
- package/dist/commands/exec.js.map +1 -0
- package/dist/commands/export.d.ts +6 -0
- package/dist/commands/export.d.ts.map +1 -0
- package/dist/commands/export.js +110 -0
- package/dist/commands/export.js.map +1 -0
- package/dist/commands/get.d.ts +6 -0
- package/dist/commands/get.d.ts.map +1 -0
- package/dist/commands/get.js +85 -0
- package/dist/commands/get.js.map +1 -0
- package/dist/commands/hooks.d.ts +6 -0
- package/dist/commands/hooks.d.ts.map +1 -0
- package/dist/commands/hooks.js +89 -0
- package/dist/commands/hooks.js.map +1 -0
- package/dist/commands/import.d.ts +6 -0
- package/dist/commands/import.d.ts.map +1 -0
- package/dist/commands/import.js +210 -0
- package/dist/commands/import.js.map +1 -0
- package/dist/commands/init.d.ts +11 -0
- package/dist/commands/init.d.ts.map +1 -0
- package/dist/commands/init.js +499 -0
- package/dist/commands/init.js.map +1 -0
- package/dist/commands/lint.d.ts +6 -0
- package/dist/commands/lint.d.ts.map +1 -0
- package/dist/commands/lint.js +152 -0
- package/dist/commands/lint.js.map +1 -0
- package/dist/commands/merge-driver.d.ts +6 -0
- package/dist/commands/merge-driver.d.ts.map +1 -0
- package/dist/commands/merge-driver.js +152 -0
- package/dist/commands/merge-driver.js.map +1 -0
- package/dist/commands/recipients.d.ts +7 -0
- package/dist/commands/recipients.d.ts.map +1 -0
- package/dist/commands/recipients.js +316 -0
- package/dist/commands/recipients.js.map +1 -0
- package/dist/commands/rotate.d.ts +6 -0
- package/dist/commands/rotate.d.ts.map +1 -0
- package/dist/commands/rotate.js +97 -0
- package/dist/commands/rotate.js.map +1 -0
- package/dist/commands/scan.d.ts +6 -0
- package/dist/commands/scan.d.ts.map +1 -0
- package/dist/commands/scan.js +152 -0
- package/dist/commands/scan.js.map +1 -0
- package/dist/commands/set.d.ts +6 -0
- package/dist/commands/set.d.ts.map +1 -0
- package/dist/commands/set.js +137 -0
- package/dist/commands/set.js.map +1 -0
- package/dist/commands/ui.d.ts +7 -0
- package/dist/commands/ui.d.ts.map +1 -0
- package/dist/commands/ui.js +100 -0
- package/dist/commands/ui.js.map +1 -0
- package/dist/commands/update.d.ts +6 -0
- package/dist/commands/update.d.ts.map +1 -0
- package/dist/commands/update.js +119 -0
- package/dist/commands/update.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +121 -0
- package/dist/index.js.map +1 -0
- package/dist/output/formatter.d.ts +20 -0
- package/dist/output/formatter.d.ts.map +1 -0
- package/dist/output/formatter.js +191 -0
- package/dist/output/formatter.js.map +1 -0
- package/dist/output/symbols.d.ts +21 -0
- package/dist/output/symbols.d.ts.map +1 -0
- package/dist/output/symbols.js +59 -0
- package/dist/output/symbols.js.map +1 -0
- package/dist/subprocess.d.ts +5 -0
- package/dist/subprocess.d.ts.map +1 -0
- package/dist/subprocess.js +27 -0
- package/dist/subprocess.js.map +1 -0
- package/package.json +40 -0
package/bin/clef.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"delete.d.ts","sourceRoot":"","sources":["../../src/commands/delete.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAQL,gBAAgB,EACjB,MAAM,eAAe,CAAC;AAGvB,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE;IAAE,MAAM,EAAE,gBAAgB,CAAA;CAAE,GAAG,IAAI,CA2GhG"}
|
|
@@ -0,0 +1,130 @@
|
|
|
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.registerDeleteCommand = registerDeleteCommand;
|
|
37
|
+
const path = __importStar(require("path"));
|
|
38
|
+
const core_1 = require("@clef-sh/core");
|
|
39
|
+
const formatter_1 = require("../output/formatter");
|
|
40
|
+
function registerDeleteCommand(program, deps) {
|
|
41
|
+
program
|
|
42
|
+
.command("delete <target> <key>")
|
|
43
|
+
.description("Delete a key from an encrypted file.\n\n" +
|
|
44
|
+
" target: namespace/environment (e.g. payments/staging)\n" +
|
|
45
|
+
" or just namespace when using --all-envs\n" +
|
|
46
|
+
" key: the key name to delete\n" +
|
|
47
|
+
" --all-envs: delete the key from all environments in the namespace\n\n" +
|
|
48
|
+
"Exit codes:\n" +
|
|
49
|
+
" 0 key deleted successfully\n" +
|
|
50
|
+
" 1 operation failed")
|
|
51
|
+
.option("--all-envs", "Delete from all environments in the namespace")
|
|
52
|
+
.action(async (target, key, options) => {
|
|
53
|
+
try {
|
|
54
|
+
const repoRoot = program.opts().repo || process.cwd();
|
|
55
|
+
const parser = new core_1.ManifestParser();
|
|
56
|
+
const manifest = parser.parse(path.join(repoRoot, "clef.yaml"));
|
|
57
|
+
const sopsClient = new core_1.SopsClient(deps.runner);
|
|
58
|
+
const matrixManager = new core_1.MatrixManager();
|
|
59
|
+
if (options.allEnvs) {
|
|
60
|
+
// target is just the namespace
|
|
61
|
+
const namespace = target.includes("/") ? target.split("/")[0] : target;
|
|
62
|
+
const protectedEnvs = manifest.environments.filter((e) => e.protected).map((e) => e.name);
|
|
63
|
+
const envNames = manifest.environments.map((e) => e.name).join(", ");
|
|
64
|
+
const protectedNote = protectedEnvs.length > 0
|
|
65
|
+
? ` including protected environments: ${protectedEnvs.join(", ")}`
|
|
66
|
+
: "";
|
|
67
|
+
const confirmed = await formatter_1.formatter.confirm(`This will delete '${key}' from ${manifest.environments.length} environments (${envNames})${protectedNote}.\nType the key name to confirm:`);
|
|
68
|
+
if (!confirmed) {
|
|
69
|
+
formatter_1.formatter.info("Aborted.");
|
|
70
|
+
return;
|
|
71
|
+
}
|
|
72
|
+
const bulkOps = new core_1.BulkOps();
|
|
73
|
+
await bulkOps.deleteAcrossEnvironments(namespace, key, manifest, sopsClient, repoRoot);
|
|
74
|
+
formatter_1.formatter.success(`Deleted '${key}' from ${namespace} in all environments`);
|
|
75
|
+
}
|
|
76
|
+
else {
|
|
77
|
+
const [namespace, environment] = parseTarget(target);
|
|
78
|
+
// Check for protected environment
|
|
79
|
+
if (matrixManager.isProtectedEnvironment(manifest, environment)) {
|
|
80
|
+
const protConfirmed = await formatter_1.formatter.confirm(`This is a protected environment (${environment}). Are you sure you want to delete '${key}'?`);
|
|
81
|
+
if (!protConfirmed) {
|
|
82
|
+
formatter_1.formatter.info("Aborted.");
|
|
83
|
+
return;
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
const confirmed = await formatter_1.formatter.confirm(`Delete '${key}' from ${namespace}/${environment}?`);
|
|
87
|
+
if (!confirmed) {
|
|
88
|
+
formatter_1.formatter.info("Aborted.");
|
|
89
|
+
return;
|
|
90
|
+
}
|
|
91
|
+
const filePath = path.join(repoRoot, manifest.file_pattern
|
|
92
|
+
.replace("{namespace}", namespace)
|
|
93
|
+
.replace("{environment}", environment));
|
|
94
|
+
const decrypted = await sopsClient.decrypt(filePath);
|
|
95
|
+
if (!(key in decrypted.values)) {
|
|
96
|
+
formatter_1.formatter.error(`Key '${key}' not found in ${namespace}/${environment}.`);
|
|
97
|
+
process.exit(1);
|
|
98
|
+
}
|
|
99
|
+
delete decrypted.values[key];
|
|
100
|
+
await sopsClient.encrypt(filePath, decrypted.values, manifest, environment);
|
|
101
|
+
// Clean up pending metadata if it exists
|
|
102
|
+
try {
|
|
103
|
+
await (0, core_1.markResolved)(filePath, [key]);
|
|
104
|
+
}
|
|
105
|
+
catch {
|
|
106
|
+
formatter_1.formatter.warn(`Key deleted but pending metadata could not be cleaned up. Run clef lint to verify.`);
|
|
107
|
+
}
|
|
108
|
+
formatter_1.formatter.success(`Deleted '${key}' from ${namespace}/${environment}`);
|
|
109
|
+
formatter_1.formatter.hint(`Commit: git add ${manifest.file_pattern.replace("{namespace}", namespace).replace("{environment}", environment)}`);
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
catch (err) {
|
|
113
|
+
if (err instanceof core_1.SopsMissingError || err instanceof core_1.SopsVersionError) {
|
|
114
|
+
formatter_1.formatter.formatDependencyError(err);
|
|
115
|
+
process.exit(1);
|
|
116
|
+
return;
|
|
117
|
+
}
|
|
118
|
+
formatter_1.formatter.error(err.message);
|
|
119
|
+
process.exit(1);
|
|
120
|
+
}
|
|
121
|
+
});
|
|
122
|
+
}
|
|
123
|
+
function parseTarget(target) {
|
|
124
|
+
const parts = target.split("/");
|
|
125
|
+
if (parts.length !== 2 || !parts[0] || !parts[1]) {
|
|
126
|
+
throw new Error(`Invalid target "${target}". Expected format: namespace/environment`);
|
|
127
|
+
}
|
|
128
|
+
return [parts[0], parts[1]];
|
|
129
|
+
}
|
|
130
|
+
//# sourceMappingURL=delete.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"delete.js","sourceRoot":"","sources":["../../src/commands/delete.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"diff.d.ts","sourceRoot":"","sources":["../../src/commands/diff.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAQL,gBAAgB,EACjB,MAAM,eAAe,CAAC;AAIvB,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE;IAAE,MAAM,EAAE,gBAAgB,CAAA;CAAE,GAAG,IAAI,CAuF9F"}
|
|
@@ -0,0 +1,168 @@
|
|
|
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
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
36
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
37
|
+
};
|
|
38
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
39
|
+
exports.registerDiffCommand = registerDiffCommand;
|
|
40
|
+
const path = __importStar(require("path"));
|
|
41
|
+
const picocolors_1 = __importDefault(require("picocolors"));
|
|
42
|
+
const core_1 = require("@clef-sh/core");
|
|
43
|
+
const formatter_1 = require("../output/formatter");
|
|
44
|
+
const symbols_1 = require("../output/symbols");
|
|
45
|
+
function registerDiffCommand(program, deps) {
|
|
46
|
+
program
|
|
47
|
+
.command("diff <namespace> <env-a> <env-b>")
|
|
48
|
+
.description("Compare secrets between two environments for a namespace.\n\n" +
|
|
49
|
+
"Exit codes:\n" +
|
|
50
|
+
" 0 No differences\n" +
|
|
51
|
+
" 1 Differences found")
|
|
52
|
+
.option("--show-identical", "Include identical keys in the output")
|
|
53
|
+
.option("--show-values", "Show plaintext values instead of masking them")
|
|
54
|
+
.option("--json", "Output raw DiffResult JSON")
|
|
55
|
+
.action(async (namespace, envA, envB, options) => {
|
|
56
|
+
try {
|
|
57
|
+
const repoRoot = program.opts().repo || process.cwd();
|
|
58
|
+
const parser = new core_1.ManifestParser();
|
|
59
|
+
const manifest = parser.parse(path.join(repoRoot, "clef.yaml"));
|
|
60
|
+
const sopsClient = new core_1.SopsClient(deps.runner);
|
|
61
|
+
const diffEngine = new core_1.DiffEngine();
|
|
62
|
+
const result = await diffEngine.diffFiles(namespace, envA, envB, manifest, sopsClient, repoRoot);
|
|
63
|
+
// Warn if showing values for a protected environment
|
|
64
|
+
if (options.showValues) {
|
|
65
|
+
const matrixManager = new core_1.MatrixManager();
|
|
66
|
+
if (matrixManager.isProtectedEnvironment(manifest, envA) ||
|
|
67
|
+
matrixManager.isProtectedEnvironment(manifest, envB)) {
|
|
68
|
+
formatter_1.formatter.warn("Warning: printing plaintext values for protected environment.");
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
if (options.json) {
|
|
72
|
+
const jsonOutput = options.showValues
|
|
73
|
+
? result
|
|
74
|
+
: {
|
|
75
|
+
...result,
|
|
76
|
+
rows: result.rows.map((r) => ({
|
|
77
|
+
...r,
|
|
78
|
+
valueA: r.valueA !== null ? "\u2022\u2022\u2022\u2022\u2022\u2022\u2022\u2022" : null,
|
|
79
|
+
valueB: r.valueB !== null ? "\u2022\u2022\u2022\u2022\u2022\u2022\u2022\u2022" : null,
|
|
80
|
+
masked: true,
|
|
81
|
+
})),
|
|
82
|
+
};
|
|
83
|
+
formatter_1.formatter.raw(JSON.stringify(jsonOutput, null, 2) + "\n");
|
|
84
|
+
const hasDiffs = result.rows.some((r) => r.status !== "identical");
|
|
85
|
+
process.exit(hasDiffs ? 1 : 0);
|
|
86
|
+
}
|
|
87
|
+
formatDiffOutput(result, envA, envB, options.showIdentical ?? false, options.showValues ?? false);
|
|
88
|
+
const hasDiffs = result.rows.some((r) => r.status !== "identical");
|
|
89
|
+
process.exit(hasDiffs ? 1 : 0);
|
|
90
|
+
}
|
|
91
|
+
catch (err) {
|
|
92
|
+
if (err instanceof core_1.SopsMissingError || err instanceof core_1.SopsVersionError) {
|
|
93
|
+
formatter_1.formatter.formatDependencyError(err);
|
|
94
|
+
process.exit(1);
|
|
95
|
+
return;
|
|
96
|
+
}
|
|
97
|
+
formatter_1.formatter.error(err.message);
|
|
98
|
+
process.exit(1);
|
|
99
|
+
}
|
|
100
|
+
});
|
|
101
|
+
}
|
|
102
|
+
const MASKED = "\u2022\u2022\u2022\u2022\u2022\u2022\u2022\u2022";
|
|
103
|
+
function formatDiffOutput(result, envA, envB, showIdentical, showValues) {
|
|
104
|
+
const filteredRows = showIdentical
|
|
105
|
+
? result.rows
|
|
106
|
+
: result.rows.filter((r) => r.status !== "identical");
|
|
107
|
+
if (filteredRows.length === 0) {
|
|
108
|
+
formatter_1.formatter.success(`No differences between ${envA} and ${envB} for ${result.namespace}`);
|
|
109
|
+
return;
|
|
110
|
+
}
|
|
111
|
+
// Summary
|
|
112
|
+
const changed = result.rows.filter((r) => r.status === "changed").length;
|
|
113
|
+
const missingA = result.rows.filter((r) => r.status === "missing_a").length;
|
|
114
|
+
const missingB = result.rows.filter((r) => r.status === "missing_b").length;
|
|
115
|
+
const identical = result.rows.filter((r) => r.status === "identical").length;
|
|
116
|
+
const parts = [];
|
|
117
|
+
if (changed > 0)
|
|
118
|
+
parts.push(`${changed} changed`);
|
|
119
|
+
if (missingA > 0)
|
|
120
|
+
parts.push(`${missingA} missing in ${envA}`);
|
|
121
|
+
if (missingB > 0)
|
|
122
|
+
parts.push(`${missingB} missing in ${envB}`);
|
|
123
|
+
if (identical > 0)
|
|
124
|
+
parts.push(`${identical} identical`);
|
|
125
|
+
formatter_1.formatter.print(`\n${result.namespace}: ${parts.join(", ")}\n`);
|
|
126
|
+
// Table
|
|
127
|
+
const rows = [];
|
|
128
|
+
for (const row of filteredRows) {
|
|
129
|
+
let valueA;
|
|
130
|
+
let valueB;
|
|
131
|
+
let status;
|
|
132
|
+
switch (row.status) {
|
|
133
|
+
case "changed":
|
|
134
|
+
valueA = picocolors_1.default.yellow(showValues ? (row.valueA ?? "") : MASKED);
|
|
135
|
+
valueB = picocolors_1.default.cyan(showValues ? (row.valueB ?? "") : MASKED);
|
|
136
|
+
status = `${(0, symbols_1.sym)("warning")} ${picocolors_1.default.yellow("changed")}`;
|
|
137
|
+
break;
|
|
138
|
+
case "missing_a":
|
|
139
|
+
valueA = picocolors_1.default.red(picocolors_1.default.italic("(not set)"));
|
|
140
|
+
valueB = showValues ? (row.valueB ?? "") : MASKED;
|
|
141
|
+
status = `${(0, symbols_1.sym)("failure")} ${picocolors_1.default.red(`missing in ${envA}`)}`;
|
|
142
|
+
break;
|
|
143
|
+
case "missing_b":
|
|
144
|
+
valueA = showValues ? (row.valueA ?? "") : MASKED;
|
|
145
|
+
valueB = picocolors_1.default.red(picocolors_1.default.italic("(not set)"));
|
|
146
|
+
status = `${(0, symbols_1.sym)("failure")} ${picocolors_1.default.red(`missing in ${envB}`)}`;
|
|
147
|
+
break;
|
|
148
|
+
case "identical":
|
|
149
|
+
valueA = showValues ? (row.valueA ?? "") : MASKED;
|
|
150
|
+
valueB = showValues ? (row.valueB ?? "") : MASKED;
|
|
151
|
+
status = `${(0, symbols_1.sym)("success")} ${picocolors_1.default.green("identical")}`;
|
|
152
|
+
break;
|
|
153
|
+
}
|
|
154
|
+
rows.push([row.key, valueA, valueB, status]);
|
|
155
|
+
}
|
|
156
|
+
formatter_1.formatter.table(rows, ["Key", envA, envB, "Status"]);
|
|
157
|
+
// Fix hints for missing keys
|
|
158
|
+
const missingRows = result.rows.filter((r) => r.status === "missing_a" || r.status === "missing_b");
|
|
159
|
+
if (missingRows.length > 0) {
|
|
160
|
+
formatter_1.formatter.print("");
|
|
161
|
+
formatter_1.formatter.hint("Fix:");
|
|
162
|
+
for (const row of missingRows) {
|
|
163
|
+
const missingEnv = row.status === "missing_a" ? envA : envB;
|
|
164
|
+
formatter_1.formatter.hint(`clef set ${result.namespace}/${missingEnv} ${row.key} <value>`);
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
//# sourceMappingURL=diff.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"diff.js","sourceRoot":"","sources":["../../src/commands/diff.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAgBA,kDAuFC;AAvGD,2CAA6B;AAC7B,4DAA4B;AAE5B,wCASuB;AACvB,mDAAgD;AAChD,+CAAwC;AAExC,SAAgB,mBAAmB,CAAC,OAAgB,EAAE,IAAkC;IACtF,OAAO;SACJ,OAAO,CAAC,kCAAkC,CAAC;SAC3C,WAAW,CACV,+DAA+D;QAC7D,eAAe;QACf,uBAAuB;QACvB,wBAAwB,CAC3B;SACA,MAAM,CAAC,kBAAkB,EAAE,sCAAsC,CAAC;SAClE,MAAM,CAAC,eAAe,EAAE,+CAA+C,CAAC;SACxE,MAAM,CAAC,QAAQ,EAAE,4BAA4B,CAAC;SAC9C,MAAM,CACL,KAAK,EACH,SAAiB,EACjB,IAAY,EACZ,IAAY,EACZ,OAA0E,EAC1E,EAAE;QACF,IAAI,CAAC;YACH,MAAM,QAAQ,GAAI,OAAO,CAAC,IAAI,EAAE,CAAC,IAAe,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;YAClE,MAAM,MAAM,GAAG,IAAI,qBAAc,EAAE,CAAC;YACpC,MAAM,QAAQ,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC,CAAC;YAEhE,MAAM,UAAU,GAAG,IAAI,iBAAU,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YAC/C,MAAM,UAAU,GAAG,IAAI,iBAAU,EAAE,CAAC;YAEpC,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,SAAS,CACvC,SAAS,EACT,IAAI,EACJ,IAAI,EACJ,QAAQ,EACR,UAAU,EACV,QAAQ,CACT,CAAC;YAEF,qDAAqD;YACrD,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC;gBACvB,MAAM,aAAa,GAAG,IAAI,oBAAa,EAAE,CAAC;gBAC1C,IACE,aAAa,CAAC,sBAAsB,CAAC,QAAQ,EAAE,IAAI,CAAC;oBACpD,aAAa,CAAC,sBAAsB,CAAC,QAAQ,EAAE,IAAI,CAAC,EACpD,CAAC;oBACD,qBAAS,CAAC,IAAI,CAAC,+DAA+D,CAAC,CAAC;gBAClF,CAAC;YACH,CAAC;YAED,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;gBACjB,MAAM,UAAU,GAAG,OAAO,CAAC,UAAU;oBACnC,CAAC,CAAC,MAAM;oBACR,CAAC,CAAC;wBACE,GAAG,MAAM;wBACT,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;4BAC5B,GAAG,CAAC;4BACJ,MAAM,EACJ,CAAC,CAAC,MAAM,KAAK,IAAI,CAAC,CAAC,CAAC,kDAAkD,CAAC,CAAC,CAAC,IAAI;4BAC/E,MAAM,EACJ,CAAC,CAAC,MAAM,KAAK,IAAI,CAAC,CAAC,CAAC,kDAAkD,CAAC,CAAC,CAAC,IAAI;4BAC/E,MAAM,EAAE,IAAI;yBACb,CAAC,CAAC;qBACJ,CAAC;gBACN,qBAAS,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,UAAU,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;gBAC1D,MAAM,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,WAAW,CAAC,CAAC;gBACnE,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YACjC,CAAC;YAED,gBAAgB,CACd,MAAM,EACN,IAAI,EACJ,IAAI,EACJ,OAAO,CAAC,aAAa,IAAI,KAAK,EAC9B,OAAO,CAAC,UAAU,IAAI,KAAK,CAC5B,CAAC;YAEF,MAAM,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,WAAW,CAAC,CAAC;YACnE,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACjC,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,IAAI,GAAG,YAAY,uBAAgB,IAAI,GAAG,YAAY,uBAAgB,EAAE,CAAC;gBACvE,qBAAS,CAAC,qBAAqB,CAAC,GAAG,CAAC,CAAC;gBACrC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;gBAChB,OAAO;YACT,CAAC;YACD,qBAAS,CAAC,KAAK,CAAE,GAAa,CAAC,OAAO,CAAC,CAAC;YACxC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC,CACF,CAAC;AACN,CAAC;AAED,MAAM,MAAM,GAAG,kDAAkD,CAAC;AAElE,SAAS,gBAAgB,CACvB,MAAkB,EAClB,IAAY,EACZ,IAAY,EACZ,aAAsB,EACtB,UAAmB;IAEnB,MAAM,YAAY,GAAG,aAAa;QAChC,CAAC,CAAC,MAAM,CAAC,IAAI;QACb,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,WAAW,CAAC,CAAC;IAExD,IAAI,YAAY,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC9B,qBAAS,CAAC,OAAO,CAAC,0BAA0B,IAAI,QAAQ,IAAI,QAAQ,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC;QACxF,OAAO;IACT,CAAC;IAED,UAAU;IACV,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,MAAM,CAAC;IACzE,MAAM,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,WAAW,CAAC,CAAC,MAAM,CAAC;IAC5E,MAAM,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,WAAW,CAAC,CAAC,MAAM,CAAC;IAC5E,MAAM,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,WAAW,CAAC,CAAC,MAAM,CAAC;IAE7E,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,IAAI,OAAO,GAAG,CAAC;QAAE,KAAK,CAAC,IAAI,CAAC,GAAG,OAAO,UAAU,CAAC,CAAC;IAClD,IAAI,QAAQ,GAAG,CAAC;QAAE,KAAK,CAAC,IAAI,CAAC,GAAG,QAAQ,eAAe,IAAI,EAAE,CAAC,CAAC;IAC/D,IAAI,QAAQ,GAAG,CAAC;QAAE,KAAK,CAAC,IAAI,CAAC,GAAG,QAAQ,eAAe,IAAI,EAAE,CAAC,CAAC;IAC/D,IAAI,SAAS,GAAG,CAAC;QAAE,KAAK,CAAC,IAAI,CAAC,GAAG,SAAS,YAAY,CAAC,CAAC;IACxD,qBAAS,CAAC,KAAK,CAAC,KAAK,MAAM,CAAC,SAAS,KAAK,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAEhE,QAAQ;IACR,MAAM,IAAI,GAAe,EAAE,CAAC;IAC5B,KAAK,MAAM,GAAG,IAAI,YAAY,EAAE,CAAC;QAC/B,IAAI,MAAc,CAAC;QACnB,IAAI,MAAc,CAAC;QACnB,IAAI,MAAc,CAAC;QAEnB,QAAQ,GAAG,CAAC,MAAM,EAAE,CAAC;YACnB,KAAK,SAAS;gBACZ,MAAM,GAAG,oBAAE,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;gBAC7D,MAAM,GAAG,oBAAE,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;gBAC3D,MAAM,GAAG,GAAG,IAAA,aAAG,EAAC,SAAS,CAAC,IAAI,oBAAE,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE,CAAC;gBACrD,MAAM;YACR,KAAK,WAAW;gBACd,MAAM,GAAG,oBAAE,CAAC,GAAG,CAAC,oBAAE,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC;gBACxC,MAAM,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;gBAClD,MAAM,GAAG,GAAG,IAAA,aAAG,EAAC,SAAS,CAAC,IAAI,oBAAE,CAAC,GAAG,CAAC,cAAc,IAAI,EAAE,CAAC,EAAE,CAAC;gBAC7D,MAAM;YACR,KAAK,WAAW;gBACd,MAAM,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;gBAClD,MAAM,GAAG,oBAAE,CAAC,GAAG,CAAC,oBAAE,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC;gBACxC,MAAM,GAAG,GAAG,IAAA,aAAG,EAAC,SAAS,CAAC,IAAI,oBAAE,CAAC,GAAG,CAAC,cAAc,IAAI,EAAE,CAAC,EAAE,CAAC;gBAC7D,MAAM;YACR,KAAK,WAAW;gBACd,MAAM,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;gBAClD,MAAM,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;gBAClD,MAAM,GAAG,GAAG,IAAA,aAAG,EAAC,SAAS,CAAC,IAAI,oBAAE,CAAC,KAAK,CAAC,WAAW,CAAC,EAAE,CAAC;gBACtD,MAAM;QACV,CAAC;QAED,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IAC/C,CAAC;IAED,qBAAS,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC;IAErD,6BAA6B;IAC7B,MAAM,WAAW,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CACpC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,WAAW,IAAI,CAAC,CAAC,MAAM,KAAK,WAAW,CAC5D,CAAC;IACF,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC3B,qBAAS,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QACpB,qBAAS,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACvB,KAAK,MAAM,GAAG,IAAI,WAAW,EAAE,CAAC;YAC9B,MAAM,UAAU,GAAG,GAAG,CAAC,MAAM,KAAK,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC;YAC5D,qBAAS,CAAC,IAAI,CAAC,YAAY,MAAM,CAAC,SAAS,IAAI,UAAU,IAAI,GAAG,CAAC,GAAG,UAAU,CAAC,CAAC;QAClF,CAAC;IACH,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"doctor.d.ts","sourceRoot":"","sources":["../../src/commands/doctor.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAA0C,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAuBzF,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE;IAAE,MAAM,EAAE,gBAAgB,CAAA;CAAE,GAAG,IAAI,CAoOhG"}
|