@kalphq/cli 0.0.0-dev-20260513002146 → 0.0.0-dev-20260513005156
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/add-NDU352FV.js +124 -0
- package/dist/add-NDU352FV.js.map +1 -0
- package/dist/chunk-5ZRVO3TQ.js +70 -0
- package/dist/chunk-5ZRVO3TQ.js.map +1 -0
- package/dist/{chunk-63JREECU.js → chunk-DHCCSWJN.js} +83 -220
- package/dist/chunk-DHCCSWJN.js.map +1 -0
- package/dist/{chunk-TNKYKA7N.js → chunk-GNQI376N.js} +118 -18
- package/dist/chunk-GNQI376N.js.map +1 -0
- package/dist/chunk-NV2IZ4XM.js +102 -0
- package/dist/chunk-NV2IZ4XM.js.map +1 -0
- package/dist/{chunk-PY6VAS54.js → chunk-X56YSZGT.js} +43 -8
- package/dist/chunk-X56YSZGT.js.map +1 -0
- package/dist/delete-DY5FQAHW.js +127 -0
- package/dist/delete-DY5FQAHW.js.map +1 -0
- package/dist/{deploy-Z2R7ER7U.js → deploy-AD3F3BN7.js} +27 -22
- package/dist/deploy-AD3F3BN7.js.map +1 -0
- package/dist/{dev-PNRWXULV.js → dev-X43HHIYV.js} +5 -3
- package/dist/{dev-PNRWXULV.js.map → dev-X43HHIYV.js.map} +1 -1
- package/dist/index.js +6 -8
- package/dist/index.js.map +1 -1
- package/dist/list-4X735L5X.js +90 -0
- package/dist/list-4X735L5X.js.map +1 -0
- package/dist/{login-DGX55YZ6.js → login-RAN2I7YT.js} +3 -5
- package/dist/{login-DGX55YZ6.js.map → login-RAN2I7YT.js.map} +1 -1
- package/dist/{push-SVABM7WN.js → push-RA6GEUV4.js} +21 -10
- package/dist/push-RA6GEUV4.js.map +1 -0
- package/dist/{secrets-P7ADVLOS.js → secrets-5ZPPASCH.js} +10 -10
- package/dist/secrets-5ZPPASCH.js.map +1 -0
- package/dist/sync-2NLWWGI2.js +69 -0
- package/dist/sync-2NLWWGI2.js.map +1 -0
- package/package.json +4 -4
- package/dist/add-XTXSSGC5.js +0 -139
- package/dist/add-XTXSSGC5.js.map +0 -1
- package/dist/chunk-5RODADXW.js +0 -65
- package/dist/chunk-5RODADXW.js.map +0 -1
- package/dist/chunk-63JREECU.js.map +0 -1
- package/dist/chunk-PY6VAS54.js.map +0 -1
- package/dist/chunk-TNKYKA7N.js.map +0 -1
- package/dist/delete-N4OSUK3X.js +0 -145
- package/dist/delete-N4OSUK3X.js.map +0 -1
- package/dist/deploy-Z2R7ER7U.js.map +0 -1
- package/dist/link-WZQSR2TM.js +0 -36
- package/dist/link-WZQSR2TM.js.map +0 -1
- package/dist/list-VMJPWHIH.js +0 -120
- package/dist/list-VMJPWHIH.js.map +0 -1
- package/dist/push-SVABM7WN.js.map +0 -1
- package/dist/secrets-P7ADVLOS.js.map +0 -1
- package/dist/sync-OTO44GQS.js +0 -121
- package/dist/sync-OTO44GQS.js.map +0 -1
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import {
|
|
3
|
+
generateTypes
|
|
4
|
+
} from "./chunk-MMS3GWBG.js";
|
|
5
|
+
import {
|
|
6
|
+
mergeSecrets,
|
|
7
|
+
readLocalSecretsFromConfig,
|
|
8
|
+
resolveSecretsRuntimeConfigPath,
|
|
9
|
+
writeLocalSecretsToConfig
|
|
10
|
+
} from "./chunk-5ZRVO3TQ.js";
|
|
11
|
+
import "./chunk-INB3LG6O.js";
|
|
12
|
+
import {
|
|
13
|
+
requireAuth,
|
|
14
|
+
resolveProvider
|
|
15
|
+
} from "./chunk-GNQI376N.js";
|
|
16
|
+
import "./chunk-FO24J6XL.js";
|
|
17
|
+
import "./chunk-DHCCSWJN.js";
|
|
18
|
+
|
|
19
|
+
// src/commands/secrets/add.ts
|
|
20
|
+
import { defineCommand } from "citty";
|
|
21
|
+
import * as p from "@clack/prompts";
|
|
22
|
+
import pc from "picocolors";
|
|
23
|
+
var LOGO = "\u{1F98B}";
|
|
24
|
+
var add_default = defineCommand({
|
|
25
|
+
meta: {
|
|
26
|
+
name: "add",
|
|
27
|
+
description: "Add a secret to remote runtime and local config"
|
|
28
|
+
},
|
|
29
|
+
args: {
|
|
30
|
+
key: {
|
|
31
|
+
type: "string",
|
|
32
|
+
alias: "k",
|
|
33
|
+
description: "Secret key (UPPER_SNAKE_CASE)"
|
|
34
|
+
},
|
|
35
|
+
value: {
|
|
36
|
+
type: "string",
|
|
37
|
+
alias: "v",
|
|
38
|
+
description: "Secret value"
|
|
39
|
+
},
|
|
40
|
+
help: {
|
|
41
|
+
type: "boolean",
|
|
42
|
+
alias: "h",
|
|
43
|
+
description: "Show help",
|
|
44
|
+
default: false
|
|
45
|
+
}
|
|
46
|
+
},
|
|
47
|
+
async run({ args }) {
|
|
48
|
+
const cwd = process.cwd();
|
|
49
|
+
if (args.help) {
|
|
50
|
+
p.log.info(`${pc.bold("Usage")}: kalp secrets add -k <KEY> -v <VALUE>`);
|
|
51
|
+
return;
|
|
52
|
+
}
|
|
53
|
+
p.intro(`${LOGO} ${pc.bold("kalp secrets add")}`);
|
|
54
|
+
await requireAuth().catch(() => {
|
|
55
|
+
p.log.error("Not authenticated. Run `kalp login` first.");
|
|
56
|
+
process.exit(1);
|
|
57
|
+
});
|
|
58
|
+
let key = args.key?.trim();
|
|
59
|
+
let value = args.value;
|
|
60
|
+
if (!key) {
|
|
61
|
+
const input = await p.text({
|
|
62
|
+
message: "Secret key name",
|
|
63
|
+
placeholder: "STRIPE_SECRET_KEY",
|
|
64
|
+
validate: (v) => {
|
|
65
|
+
if (!v) return "Key is required";
|
|
66
|
+
if (!/^[A-Z_][A-Z0-9_]*$/.test(v)) {
|
|
67
|
+
return "Key must be UPPER_SNAKE_CASE";
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
});
|
|
71
|
+
if (p.isCancel(input)) {
|
|
72
|
+
p.outro("Cancelled");
|
|
73
|
+
return;
|
|
74
|
+
}
|
|
75
|
+
key = String(input).trim();
|
|
76
|
+
}
|
|
77
|
+
if (!/^[A-Z_][A-Z0-9_]*$/.test(key)) {
|
|
78
|
+
p.log.error("Invalid key. Use UPPER_SNAKE_CASE.");
|
|
79
|
+
process.exit(1);
|
|
80
|
+
}
|
|
81
|
+
if (!value) {
|
|
82
|
+
const input = await p.password({
|
|
83
|
+
message: `Enter value for ${key}`,
|
|
84
|
+
mask: "*"
|
|
85
|
+
});
|
|
86
|
+
if (p.isCancel(input)) {
|
|
87
|
+
p.outro("Cancelled");
|
|
88
|
+
return;
|
|
89
|
+
}
|
|
90
|
+
value = String(input);
|
|
91
|
+
}
|
|
92
|
+
const trimmedValue = value.trim();
|
|
93
|
+
if (!trimmedValue) {
|
|
94
|
+
p.log.error("Secret value cannot be empty.");
|
|
95
|
+
process.exit(1);
|
|
96
|
+
}
|
|
97
|
+
const spinner2 = p.spinner();
|
|
98
|
+
spinner2.start(`Adding ${pc.cyan(key)} to remote runtime`);
|
|
99
|
+
try {
|
|
100
|
+
const configPath = await resolveSecretsRuntimeConfigPath(cwd);
|
|
101
|
+
const provider = resolveProvider();
|
|
102
|
+
await provider.putSecret({
|
|
103
|
+
cwd,
|
|
104
|
+
configPath,
|
|
105
|
+
name: key,
|
|
106
|
+
value: trimmedValue
|
|
107
|
+
});
|
|
108
|
+
const localSecrets = await readLocalSecretsFromConfig(cwd);
|
|
109
|
+
const merged = mergeSecrets(localSecrets, [key]);
|
|
110
|
+
await writeLocalSecretsToConfig(cwd, merged);
|
|
111
|
+
await generateTypes(cwd);
|
|
112
|
+
spinner2.stop(`Secret ${pc.cyan(key)} added`);
|
|
113
|
+
p.outro("Done");
|
|
114
|
+
} catch (error) {
|
|
115
|
+
spinner2.stop("Failed to add secret");
|
|
116
|
+
p.log.error(error instanceof Error ? error.message : String(error));
|
|
117
|
+
process.exit(1);
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
});
|
|
121
|
+
export {
|
|
122
|
+
add_default as default
|
|
123
|
+
};
|
|
124
|
+
//# sourceMappingURL=add-NDU352FV.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/commands/secrets/add.ts"],"sourcesContent":["import { defineCommand } from \"citty\";\nimport * as p from \"@clack/prompts\";\nimport pc from \"picocolors\";\nimport { requireAuth } from \"@/utils/auth\";\nimport { generateTypes } from \"@/utils/codegen\";\nimport { resolveProvider } from \"@/utils/providers\";\nimport {\n mergeSecrets,\n readLocalSecretsFromConfig,\n writeLocalSecretsToConfig,\n} from \"@/utils/secrets-config\";\nimport { resolveSecretsRuntimeConfigPath } from \"@/utils/secrets-runtime\";\n\nconst LOGO = \"🦋\";\n\nexport default defineCommand({\n meta: {\n name: \"add\",\n description: \"Add a secret to remote runtime and local config\",\n },\n args: {\n key: {\n type: \"string\",\n alias: \"k\",\n description: \"Secret key (UPPER_SNAKE_CASE)\",\n },\n value: {\n type: \"string\",\n alias: \"v\",\n description: \"Secret value\",\n },\n help: {\n type: \"boolean\",\n alias: \"h\",\n description: \"Show help\",\n default: false,\n },\n },\n async run({ args }) {\n const cwd = process.cwd();\n\n if (args.help) {\n p.log.info(`${pc.bold(\"Usage\")}: kalp secrets add -k <KEY> -v <VALUE>`);\n return;\n }\n\n p.intro(`${LOGO} ${pc.bold(\"kalp secrets add\")}`);\n\n await requireAuth().catch(() => {\n p.log.error(\"Not authenticated. Run `kalp login` first.\");\n process.exit(1);\n });\n\n let key = args.key?.trim();\n let value = args.value;\n\n if (!key) {\n const input = await p.text({\n message: \"Secret key name\",\n placeholder: \"STRIPE_SECRET_KEY\",\n validate: (v) => {\n if (!v) return \"Key is required\";\n if (!/^[A-Z_][A-Z0-9_]*$/.test(v)) {\n return \"Key must be UPPER_SNAKE_CASE\";\n }\n },\n });\n if (p.isCancel(input)) {\n p.outro(\"Cancelled\");\n return;\n }\n key = String(input).trim();\n }\n\n if (!/^[A-Z_][A-Z0-9_]*$/.test(key)) {\n p.log.error(\"Invalid key. Use UPPER_SNAKE_CASE.\");\n process.exit(1);\n }\n\n if (!value) {\n const input = await p.password({\n message: `Enter value for ${key}`,\n mask: \"*\",\n });\n if (p.isCancel(input)) {\n p.outro(\"Cancelled\");\n return;\n }\n value = String(input);\n }\n\n const trimmedValue = value.trim();\n if (!trimmedValue) {\n p.log.error(\"Secret value cannot be empty.\");\n process.exit(1);\n }\n\n const spinner = p.spinner();\n spinner.start(`Adding ${pc.cyan(key)} to remote runtime`);\n\n try {\n const configPath = await resolveSecretsRuntimeConfigPath(cwd);\n const provider = resolveProvider();\n await provider.putSecret({\n cwd,\n configPath,\n name: key,\n value: trimmedValue,\n });\n\n const localSecrets = await readLocalSecretsFromConfig(cwd);\n const merged = mergeSecrets(localSecrets, [key]);\n await writeLocalSecretsToConfig(cwd, merged);\n await generateTypes(cwd);\n\n spinner.stop(`Secret ${pc.cyan(key)} added`);\n p.outro(\"Done\");\n } catch (error) {\n spinner.stop(\"Failed to add secret\");\n p.log.error(error instanceof Error ? error.message : String(error));\n process.exit(1);\n }\n },\n});\n"],"mappings":";;;;;;;;;;;;;;;;;;;AAAA,SAAS,qBAAqB;AAC9B,YAAY,OAAO;AACnB,OAAO,QAAQ;AAWf,IAAM,OAAO;AAEb,IAAO,cAAQ,cAAc;AAAA,EAC3B,MAAM;AAAA,IACJ,MAAM;AAAA,IACN,aAAa;AAAA,EACf;AAAA,EACA,MAAM;AAAA,IACJ,KAAK;AAAA,MACH,MAAM;AAAA,MACN,OAAO;AAAA,MACP,aAAa;AAAA,IACf;AAAA,IACA,OAAO;AAAA,MACL,MAAM;AAAA,MACN,OAAO;AAAA,MACP,aAAa;AAAA,IACf;AAAA,IACA,MAAM;AAAA,MACJ,MAAM;AAAA,MACN,OAAO;AAAA,MACP,aAAa;AAAA,MACb,SAAS;AAAA,IACX;AAAA,EACF;AAAA,EACA,MAAM,IAAI,EAAE,KAAK,GAAG;AAClB,UAAM,MAAM,QAAQ,IAAI;AAExB,QAAI,KAAK,MAAM;AACb,MAAE,MAAI,KAAK,GAAG,GAAG,KAAK,OAAO,CAAC,wCAAwC;AACtE;AAAA,IACF;AAEA,IAAE,QAAM,GAAG,IAAI,IAAI,GAAG,KAAK,kBAAkB,CAAC,EAAE;AAEhD,UAAM,YAAY,EAAE,MAAM,MAAM;AAC9B,MAAE,MAAI,MAAM,4CAA4C;AACxD,cAAQ,KAAK,CAAC;AAAA,IAChB,CAAC;AAED,QAAI,MAAM,KAAK,KAAK,KAAK;AACzB,QAAI,QAAQ,KAAK;AAEjB,QAAI,CAAC,KAAK;AACR,YAAM,QAAQ,MAAQ,OAAK;AAAA,QACzB,SAAS;AAAA,QACT,aAAa;AAAA,QACb,UAAU,CAAC,MAAM;AACf,cAAI,CAAC,EAAG,QAAO;AACf,cAAI,CAAC,qBAAqB,KAAK,CAAC,GAAG;AACjC,mBAAO;AAAA,UACT;AAAA,QACF;AAAA,MACF,CAAC;AACD,UAAM,WAAS,KAAK,GAAG;AACrB,QAAE,QAAM,WAAW;AACnB;AAAA,MACF;AACA,YAAM,OAAO,KAAK,EAAE,KAAK;AAAA,IAC3B;AAEA,QAAI,CAAC,qBAAqB,KAAK,GAAG,GAAG;AACnC,MAAE,MAAI,MAAM,oCAAoC;AAChD,cAAQ,KAAK,CAAC;AAAA,IAChB;AAEA,QAAI,CAAC,OAAO;AACV,YAAM,QAAQ,MAAQ,WAAS;AAAA,QAC7B,SAAS,mBAAmB,GAAG;AAAA,QAC/B,MAAM;AAAA,MACR,CAAC;AACD,UAAM,WAAS,KAAK,GAAG;AACrB,QAAE,QAAM,WAAW;AACnB;AAAA,MACF;AACA,cAAQ,OAAO,KAAK;AAAA,IACtB;AAEA,UAAM,eAAe,MAAM,KAAK;AAChC,QAAI,CAAC,cAAc;AACjB,MAAE,MAAI,MAAM,+BAA+B;AAC3C,cAAQ,KAAK,CAAC;AAAA,IAChB;AAEA,UAAMA,WAAY,UAAQ;AAC1B,IAAAA,SAAQ,MAAM,UAAU,GAAG,KAAK,GAAG,CAAC,oBAAoB;AAExD,QAAI;AACF,YAAM,aAAa,MAAM,gCAAgC,GAAG;AAC5D,YAAM,WAAW,gBAAgB;AACjC,YAAM,SAAS,UAAU;AAAA,QACvB;AAAA,QACA;AAAA,QACA,MAAM;AAAA,QACN,OAAO;AAAA,MACT,CAAC;AAED,YAAM,eAAe,MAAM,2BAA2B,GAAG;AACzD,YAAM,SAAS,aAAa,cAAc,CAAC,GAAG,CAAC;AAC/C,YAAM,0BAA0B,KAAK,MAAM;AAC3C,YAAM,cAAc,GAAG;AAEvB,MAAAA,SAAQ,KAAK,UAAU,GAAG,KAAK,GAAG,CAAC,QAAQ;AAC3C,MAAE,QAAM,MAAM;AAAA,IAChB,SAAS,OAAO;AACd,MAAAA,SAAQ,KAAK,sBAAsB;AACnC,MAAE,MAAI,MAAM,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK,CAAC;AAClE,cAAQ,KAAK,CAAC;AAAA,IAChB;AAAA,EACF;AACF,CAAC;","names":["spinner"]}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import {
|
|
3
|
+
ensureConfig
|
|
4
|
+
} from "./chunk-INB3LG6O.js";
|
|
5
|
+
import {
|
|
6
|
+
materializeRuntime,
|
|
7
|
+
readProjectState
|
|
8
|
+
} from "./chunk-DHCCSWJN.js";
|
|
9
|
+
|
|
10
|
+
// src/utils/secrets-config.ts
|
|
11
|
+
import { readFile, writeFile } from "fs/promises";
|
|
12
|
+
import { join } from "path";
|
|
13
|
+
var SECRETS_ARRAY_REGEX = /secrets:\s*\[([\s\S]*?)\]/m;
|
|
14
|
+
var SECRET_LITERAL_REGEX = /["'`]([^"'`]+)["'`]/g;
|
|
15
|
+
async function readLocalSecretsFromConfig(cwd) {
|
|
16
|
+
const configPath = join(cwd, "kalp.config.ts");
|
|
17
|
+
const content = await readFile(configPath, "utf-8").catch(() => {
|
|
18
|
+
throw new Error("kalp.config.ts not found. Run create-kalp first.");
|
|
19
|
+
});
|
|
20
|
+
const match = content.match(SECRETS_ARRAY_REGEX);
|
|
21
|
+
if (!match) return [];
|
|
22
|
+
const body = match[1] ?? "";
|
|
23
|
+
const values = [];
|
|
24
|
+
let item;
|
|
25
|
+
while ((item = SECRET_LITERAL_REGEX.exec(body)) !== null) {
|
|
26
|
+
if (item[1]) values.push(item[1]);
|
|
27
|
+
}
|
|
28
|
+
return [...new Set(values)].sort((a, b) => a.localeCompare(b));
|
|
29
|
+
}
|
|
30
|
+
async function writeLocalSecretsToConfig(cwd, secrets) {
|
|
31
|
+
const configPath = join(cwd, "kalp.config.ts");
|
|
32
|
+
const content = await readFile(configPath, "utf-8").catch(() => {
|
|
33
|
+
throw new Error("kalp.config.ts not found. Run create-kalp first.");
|
|
34
|
+
});
|
|
35
|
+
if (!SECRETS_ARRAY_REGEX.test(content)) {
|
|
36
|
+
throw new Error(
|
|
37
|
+
"Could not find `secrets: []` in kalp.config.ts. Add a secrets array first."
|
|
38
|
+
);
|
|
39
|
+
}
|
|
40
|
+
const sorted = [...new Set(secrets)].map((value) => value.trim()).filter(Boolean).sort((a, b) => a.localeCompare(b));
|
|
41
|
+
const serialized = sorted.length > 0 ? sorted.map((secret) => `"${secret}"`).join(", ") : "";
|
|
42
|
+
const next = content.replace(SECRETS_ARRAY_REGEX, `secrets: [${serialized}]`);
|
|
43
|
+
await writeFile(configPath, next, "utf-8");
|
|
44
|
+
}
|
|
45
|
+
function mergeSecrets(base, incoming) {
|
|
46
|
+
return [...new Set([...base, ...incoming].map((value) => value.trim()).filter(Boolean))].sort((a, b) => a.localeCompare(b));
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
// src/utils/secrets-runtime.ts
|
|
50
|
+
async function resolveSecretsRuntimeConfigPath(cwd) {
|
|
51
|
+
await ensureConfig(cwd).catch(() => {
|
|
52
|
+
throw new Error("kalp.config.ts not found.");
|
|
53
|
+
});
|
|
54
|
+
const state = await readProjectState(cwd);
|
|
55
|
+
if (!state?.workerUrl) {
|
|
56
|
+
throw new Error(
|
|
57
|
+
"No remote runtime found for this project. Run `kalp deploy` first."
|
|
58
|
+
);
|
|
59
|
+
}
|
|
60
|
+
const runtime = await materializeRuntime(cwd, { mode: "remote" });
|
|
61
|
+
return runtime.wranglerConfigPath;
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
export {
|
|
65
|
+
readLocalSecretsFromConfig,
|
|
66
|
+
writeLocalSecretsToConfig,
|
|
67
|
+
mergeSecrets,
|
|
68
|
+
resolveSecretsRuntimeConfigPath
|
|
69
|
+
};
|
|
70
|
+
//# sourceMappingURL=chunk-5ZRVO3TQ.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/utils/secrets-config.ts","../src/utils/secrets-runtime.ts"],"sourcesContent":["import { readFile, writeFile } from \"node:fs/promises\";\nimport { join } from \"node:path\";\n\nconst SECRETS_ARRAY_REGEX = /secrets:\\s*\\[([\\s\\S]*?)\\]/m;\nconst SECRET_LITERAL_REGEX = /[\"'`]([^\"'`]+)[\"'`]/g;\n\nexport async function readLocalSecretsFromConfig(cwd: string): Promise<string[]> {\n const configPath = join(cwd, \"kalp.config.ts\");\n const content = await readFile(configPath, \"utf-8\").catch(() => {\n throw new Error(\"kalp.config.ts not found. Run create-kalp first.\");\n });\n\n const match = content.match(SECRETS_ARRAY_REGEX);\n if (!match) return [];\n const body = match[1] ?? \"\";\n const values: string[] = [];\n let item: RegExpExecArray | null;\n while ((item = SECRET_LITERAL_REGEX.exec(body)) !== null) {\n if (item[1]) values.push(item[1]);\n }\n return [...new Set(values)].sort((a, b) => a.localeCompare(b));\n}\n\nexport async function writeLocalSecretsToConfig(\n cwd: string,\n secrets: string[],\n): Promise<void> {\n const configPath = join(cwd, \"kalp.config.ts\");\n const content = await readFile(configPath, \"utf-8\").catch(() => {\n throw new Error(\"kalp.config.ts not found. Run create-kalp first.\");\n });\n\n if (!SECRETS_ARRAY_REGEX.test(content)) {\n throw new Error(\n \"Could not find `secrets: []` in kalp.config.ts. Add a secrets array first.\",\n );\n }\n\n const sorted = [...new Set(secrets)]\n .map((value) => value.trim())\n .filter(Boolean)\n .sort((a, b) => a.localeCompare(b));\n\n const serialized =\n sorted.length > 0 ? sorted.map((secret) => `\"${secret}\"`).join(\", \") : \"\";\n const next = content.replace(SECRETS_ARRAY_REGEX, `secrets: [${serialized}]`);\n await writeFile(configPath, next, \"utf-8\");\n}\n\nexport function mergeSecrets(\n base: string[],\n incoming: string[],\n): string[] {\n return [...new Set([...base, ...incoming].map((value) => value.trim()).filter(Boolean))]\n .sort((a, b) => a.localeCompare(b));\n}\n","import { ensureConfig } from \"@/utils/fs\";\nimport { readProjectState } from \"@/utils/project-state\";\nimport { materializeRuntime } from \"@/utils/runtime\";\n\nexport async function resolveSecretsRuntimeConfigPath(cwd: string): Promise<string> {\n await ensureConfig(cwd).catch(() => {\n throw new Error(\"kalp.config.ts not found.\");\n });\n\n const state = await readProjectState(cwd);\n if (!state?.workerUrl) {\n throw new Error(\n \"No remote runtime found for this project. Run `kalp deploy` first.\",\n );\n }\n\n const runtime = await materializeRuntime(cwd, { mode: \"remote\" });\n return runtime.wranglerConfigPath;\n}\n"],"mappings":";;;;;;;;;;AAAA,SAAS,UAAU,iBAAiB;AACpC,SAAS,YAAY;AAErB,IAAM,sBAAsB;AAC5B,IAAM,uBAAuB;AAE7B,eAAsB,2BAA2B,KAAgC;AAC/E,QAAM,aAAa,KAAK,KAAK,gBAAgB;AAC7C,QAAM,UAAU,MAAM,SAAS,YAAY,OAAO,EAAE,MAAM,MAAM;AAC9D,UAAM,IAAI,MAAM,kDAAkD;AAAA,EACpE,CAAC;AAED,QAAM,QAAQ,QAAQ,MAAM,mBAAmB;AAC/C,MAAI,CAAC,MAAO,QAAO,CAAC;AACpB,QAAM,OAAO,MAAM,CAAC,KAAK;AACzB,QAAM,SAAmB,CAAC;AAC1B,MAAI;AACJ,UAAQ,OAAO,qBAAqB,KAAK,IAAI,OAAO,MAAM;AACxD,QAAI,KAAK,CAAC,EAAG,QAAO,KAAK,KAAK,CAAC,CAAC;AAAA,EAClC;AACA,SAAO,CAAC,GAAG,IAAI,IAAI,MAAM,CAAC,EAAE,KAAK,CAAC,GAAG,MAAM,EAAE,cAAc,CAAC,CAAC;AAC/D;AAEA,eAAsB,0BACpB,KACA,SACe;AACf,QAAM,aAAa,KAAK,KAAK,gBAAgB;AAC7C,QAAM,UAAU,MAAM,SAAS,YAAY,OAAO,EAAE,MAAM,MAAM;AAC9D,UAAM,IAAI,MAAM,kDAAkD;AAAA,EACpE,CAAC;AAED,MAAI,CAAC,oBAAoB,KAAK,OAAO,GAAG;AACtC,UAAM,IAAI;AAAA,MACR;AAAA,IACF;AAAA,EACF;AAEA,QAAM,SAAS,CAAC,GAAG,IAAI,IAAI,OAAO,CAAC,EAChC,IAAI,CAAC,UAAU,MAAM,KAAK,CAAC,EAC3B,OAAO,OAAO,EACd,KAAK,CAAC,GAAG,MAAM,EAAE,cAAc,CAAC,CAAC;AAEpC,QAAM,aACJ,OAAO,SAAS,IAAI,OAAO,IAAI,CAAC,WAAW,IAAI,MAAM,GAAG,EAAE,KAAK,IAAI,IAAI;AACzE,QAAM,OAAO,QAAQ,QAAQ,qBAAqB,aAAa,UAAU,GAAG;AAC5E,QAAM,UAAU,YAAY,MAAM,OAAO;AAC3C;AAEO,SAAS,aACd,MACA,UACU;AACV,SAAO,CAAC,GAAG,IAAI,IAAI,CAAC,GAAG,MAAM,GAAG,QAAQ,EAAE,IAAI,CAAC,UAAU,MAAM,KAAK,CAAC,EAAE,OAAO,OAAO,CAAC,CAAC,EACpF,KAAK,CAAC,GAAG,MAAM,EAAE,cAAc,CAAC,CAAC;AACtC;;;ACnDA,eAAsB,gCAAgC,KAA8B;AAClF,QAAM,aAAa,GAAG,EAAE,MAAM,MAAM;AAClC,UAAM,IAAI,MAAM,2BAA2B;AAAA,EAC7C,CAAC;AAED,QAAM,QAAQ,MAAM,iBAAiB,GAAG;AACxC,MAAI,CAAC,OAAO,WAAW;AACrB,UAAM,IAAI;AAAA,MACR;AAAA,IACF;AAAA,EACF;AAEA,QAAM,UAAU,MAAM,mBAAmB,KAAK,EAAE,MAAM,SAAS,CAAC;AAChE,SAAO,QAAQ;AACjB;","names":[]}
|