getmyenv 0.5.3 → 0.6.1

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 (161) hide show
  1. package/README.md +57 -13
  2. package/dist/bin.js +1 -24
  3. package/dist/bin.js.map +1 -1
  4. package/dist/cli.d.ts +10 -0
  5. package/dist/cli.d.ts.map +1 -1
  6. package/dist/cli.js +179 -106
  7. package/dist/cli.js.map +1 -1
  8. package/dist/commands/backup.d.ts +2 -1
  9. package/dist/commands/backup.d.ts.map +1 -1
  10. package/dist/commands/backup.js +15 -19
  11. package/dist/commands/backup.js.map +1 -1
  12. package/dist/commands/claim.d.ts +2 -1
  13. package/dist/commands/claim.d.ts.map +1 -1
  14. package/dist/commands/claim.js +114 -80
  15. package/dist/commands/claim.js.map +1 -1
  16. package/dist/commands/context.d.ts +11 -0
  17. package/dist/commands/context.d.ts.map +1 -0
  18. package/dist/commands/context.js +53 -0
  19. package/dist/commands/context.js.map +1 -0
  20. package/dist/commands/export.d.ts +11 -0
  21. package/dist/commands/export.d.ts.map +1 -0
  22. package/dist/commands/export.js +67 -0
  23. package/dist/commands/export.js.map +1 -0
  24. package/dist/commands/guest.d.ts +9 -3
  25. package/dist/commands/guest.d.ts.map +1 -1
  26. package/dist/commands/guest.js +32 -28
  27. package/dist/commands/guest.js.map +1 -1
  28. package/dist/commands/import.d.ts +26 -0
  29. package/dist/commands/import.d.ts.map +1 -0
  30. package/dist/commands/import.js +168 -0
  31. package/dist/commands/import.js.map +1 -0
  32. package/dist/commands/lock.d.ts +5 -0
  33. package/dist/commands/lock.d.ts.map +1 -0
  34. package/dist/commands/lock.js +18 -0
  35. package/dist/commands/lock.js.map +1 -0
  36. package/dist/commands/ls.d.ts +6 -0
  37. package/dist/commands/ls.d.ts.map +1 -0
  38. package/dist/commands/ls.js +37 -0
  39. package/dist/commands/ls.js.map +1 -0
  40. package/dist/commands/restore.d.ts +7 -2
  41. package/dist/commands/restore.d.ts.map +1 -1
  42. package/dist/commands/restore.js +57 -49
  43. package/dist/commands/restore.js.map +1 -1
  44. package/dist/commands/run.d.ts +7 -5
  45. package/dist/commands/run.d.ts.map +1 -1
  46. package/dist/commands/run.js +98 -187
  47. package/dist/commands/run.js.map +1 -1
  48. package/dist/commands/set.d.ts +16 -0
  49. package/dist/commands/set.d.ts.map +1 -0
  50. package/dist/commands/set.js +111 -0
  51. package/dist/commands/set.js.map +1 -0
  52. package/dist/commands/start.d.ts +16 -0
  53. package/dist/commands/start.d.ts.map +1 -0
  54. package/dist/commands/start.js +118 -0
  55. package/dist/commands/start.js.map +1 -0
  56. package/dist/commands/status.d.ts +5 -0
  57. package/dist/commands/status.d.ts.map +1 -0
  58. package/dist/commands/status.js +40 -0
  59. package/dist/commands/status.js.map +1 -0
  60. package/dist/commands/unlink.d.ts +9 -0
  61. package/dist/commands/unlink.d.ts.map +1 -0
  62. package/dist/commands/unlink.js +70 -0
  63. package/dist/commands/unlink.js.map +1 -0
  64. package/dist/lib/api-url.d.ts +12 -0
  65. package/dist/lib/api-url.d.ts.map +1 -1
  66. package/dist/lib/api-url.js +32 -0
  67. package/dist/lib/api-url.js.map +1 -1
  68. package/dist/lib/api.d.ts +35 -23
  69. package/dist/lib/api.d.ts.map +1 -1
  70. package/dist/lib/api.js +23 -59
  71. package/dist/lib/api.js.map +1 -1
  72. package/dist/lib/authorize.d.ts +13 -6
  73. package/dist/lib/authorize.d.ts.map +1 -1
  74. package/dist/lib/authorize.js +68 -61
  75. package/dist/lib/authorize.js.map +1 -1
  76. package/dist/lib/bootstrap.d.ts +18 -15
  77. package/dist/lib/bootstrap.d.ts.map +1 -1
  78. package/dist/lib/bootstrap.js +59 -69
  79. package/dist/lib/bootstrap.js.map +1 -1
  80. package/dist/lib/confirm.js +4 -4
  81. package/dist/lib/confirm.js.map +1 -1
  82. package/dist/lib/context.d.ts +12 -0
  83. package/dist/lib/context.d.ts.map +1 -0
  84. package/dist/lib/context.js +43 -0
  85. package/dist/lib/context.js.map +1 -0
  86. package/dist/lib/credentials.d.ts +8 -13
  87. package/dist/lib/credentials.d.ts.map +1 -1
  88. package/dist/lib/credentials.js +2 -9
  89. package/dist/lib/credentials.js.map +1 -1
  90. package/dist/lib/fs.d.ts +26 -40
  91. package/dist/lib/fs.d.ts.map +1 -1
  92. package/dist/lib/fs.js +112 -326
  93. package/dist/lib/fs.js.map +1 -1
  94. package/dist/lib/guest-key.d.ts +2 -5
  95. package/dist/lib/guest-key.d.ts.map +1 -1
  96. package/dist/lib/guest-key.js +9 -2
  97. package/dist/lib/guest-key.js.map +1 -1
  98. package/dist/lib/identity.d.ts +9 -11
  99. package/dist/lib/identity.d.ts.map +1 -1
  100. package/dist/lib/identity.js +34 -24
  101. package/dist/lib/identity.js.map +1 -1
  102. package/dist/lib/keychain.d.ts +21 -0
  103. package/dist/lib/keychain.d.ts.map +1 -0
  104. package/dist/lib/keychain.js +124 -0
  105. package/dist/lib/keychain.js.map +1 -0
  106. package/dist/lib/pek.d.ts +15 -24
  107. package/dist/lib/pek.d.ts.map +1 -1
  108. package/dist/lib/pek.js +30 -54
  109. package/dist/lib/pek.js.map +1 -1
  110. package/dist/lib/run-env.d.ts +50 -0
  111. package/dist/lib/run-env.d.ts.map +1 -0
  112. package/dist/lib/run-env.js +114 -0
  113. package/dist/lib/run-env.js.map +1 -0
  114. package/dist/lib/unlock.d.ts +24 -0
  115. package/dist/lib/unlock.d.ts.map +1 -0
  116. package/dist/lib/unlock.js +87 -0
  117. package/dist/lib/unlock.js.map +1 -0
  118. package/dist/lib/update-check.d.ts +4 -2
  119. package/dist/lib/update-check.d.ts.map +1 -1
  120. package/dist/lib/update-check.js +54 -68
  121. package/dist/lib/update-check.js.map +1 -1
  122. package/dist/lib/upload.d.ts +21 -0
  123. package/dist/lib/upload.d.ts.map +1 -0
  124. package/dist/lib/upload.js +53 -0
  125. package/dist/lib/upload.js.map +1 -0
  126. package/package.json +5 -3
  127. package/dist/commands/delete.d.ts +0 -6
  128. package/dist/commands/delete.d.ts.map +0 -1
  129. package/dist/commands/delete.js +0 -55
  130. package/dist/commands/delete.js.map +0 -1
  131. package/dist/commands/link.d.ts +0 -16
  132. package/dist/commands/link.d.ts.map +0 -1
  133. package/dist/commands/link.js +0 -142
  134. package/dist/commands/link.js.map +0 -1
  135. package/dist/commands/pull.d.ts +0 -15
  136. package/dist/commands/pull.d.ts.map +0 -1
  137. package/dist/commands/pull.js +0 -155
  138. package/dist/commands/pull.js.map +0 -1
  139. package/dist/commands/push.d.ts +0 -15
  140. package/dist/commands/push.d.ts.map +0 -1
  141. package/dist/commands/push.js +0 -261
  142. package/dist/commands/push.js.map +0 -1
  143. package/dist/commands/remove.d.ts +0 -11
  144. package/dist/commands/remove.d.ts.map +0 -1
  145. package/dist/commands/remove.js +0 -39
  146. package/dist/commands/remove.js.map +0 -1
  147. package/dist/commands/token.d.ts +0 -14
  148. package/dist/commands/token.d.ts.map +0 -1
  149. package/dist/commands/token.js +0 -132
  150. package/dist/commands/token.js.map +0 -1
  151. package/dist/commands/whoami.d.ts +0 -6
  152. package/dist/commands/whoami.d.ts.map +0 -1
  153. package/dist/commands/whoami.js +0 -46
  154. package/dist/commands/whoami.js.map +0 -1
  155. package/dist/lib/env-name.d.ts +0 -3
  156. package/dist/lib/env-name.d.ts.map +0 -1
  157. package/dist/lib/env-name.js +0 -5
  158. package/dist/lib/env-name.js.map +0 -1
  159. package/dist/lib/guest-key.test.d.ts +0 -2
  160. package/dist/lib/guest-key.test.d.ts.map +0 -1
  161. package/dist/lib/guest-key.test.js.map +0 -1
@@ -1,214 +1,125 @@
1
1
  import { spawn } from "node:child_process";
2
+ import os from "node:os";
2
3
  import pc from "picocolors";
3
- import { decryptSecret, parsePayload, signAccessRequest, } from "@getmyenv/crypto";
4
- import { readRequirements, } from "../lib/fs.js";
5
- import { ApiClient, isDefaultApiUrl } from "../lib/api.js";
4
+ import { decryptSecret, parsePayload } from "@getmyenv/crypto";
5
+ import { ApiError } from "../lib/api.js";
6
6
  import { ensureTokenAndLink } from "../lib/bootstrap.js";
7
- import { clearGrant, loadGrant, loadOrCreateIdentity, saveGrant, } from "../lib/identity.js";
8
- import { unwrapPek } from "../lib/pek.js";
9
- import { resolveVaultPassword } from "../lib/guest-key.js";
10
- import { normalizeEnvName } from "../lib/env-name.js";
11
- export async function runCommand(opts, childArgs) {
12
- if (childArgs.length === 0) {
13
- throw new Error("Usage: npx getmyenv run -- <command>");
14
- }
15
- console.log(pc.bold("\ngetmyenv\n"));
16
- const { who, apiUrl, token, projectId } = await ensureTokenAndLink({
17
- apiUrl: opts.apiUrl,
18
- action: "run",
19
- });
20
- const client = new ApiClient(apiUrl, token);
21
- let environment = normalizeEnvName(opts.env);
22
- if (environment !== who.cliScope) {
23
- if (opts.envWasDefault) {
24
- environment = who.cliScope;
7
+ import { resolveContext } from "../lib/context.js";
8
+ import { signMachineProof } from "../lib/identity.js";
9
+ import { unlockProjectKey } from "../lib/unlock.js";
10
+ import { sleep } from "../lib/authorize.js";
11
+ import { explainLines, mergeEnv, signalExitCode, validationError, windowsCommandLine, } from "../lib/run-env.js";
12
+ const GRANT_HEADER = "X-Getmyenv-Grant";
13
+ /** Status lines go to stderr so the child's stdout stays clean for pipes. */
14
+ const log = (line = "") => console.error(line);
15
+ async function resolveOnce(client, projectId, slug, grant) {
16
+ return client.request("POST", "/api/cli/resolve", { context: slug, machine: signMachineProof(projectId, slug) }, grant ? { [GRANT_HEADER]: grant } : undefined);
17
+ }
18
+ async function waitForGrant(client, pending) {
19
+ log(`Waiting for approval in the dashboard: ${pending.reviewUrl}`);
20
+ log(pc.dim("Trust this machine there to skip approval next time.\n"));
21
+ const deadline = new Date(pending.expiresAt).getTime();
22
+ while (Date.now() < deadline) {
23
+ await sleep(1500);
24
+ const s = await client.request("GET", `/api/cli/requests/${pending.requestId}`);
25
+ if (s.status === "approved" && s.grantToken) {
26
+ log(`${pc.green("✓")} Approved\n`);
27
+ return s.grantToken;
25
28
  }
26
- else {
27
- throw new Error([
28
- `Token scope is ${who.cliScope}, but you passed -e ${environment}.`,
29
- who.cliScope === "development"
30
- ? "Use: npx getmyenv run -e development -- <cmd>"
31
- : "Use: npx getmyenv run -e production -- <cmd>",
32
- "Or create a matching Development/Production token on /cli.",
33
- ].join("\n"));
29
+ if (s.status === "approved") {
30
+ throw new Error("This approval was already used. Run the command again.");
34
31
  }
32
+ if (s.status === "denied")
33
+ throw new Error("Access denied in the dashboard.");
34
+ if (s.status === "expired")
35
+ break;
35
36
  }
36
- const requestedSecretNames = readRequirements();
37
- const needsDashboardWait = who.cliScope === "production";
38
- console.log(`Project: ${who.projectName}`);
39
- console.log(`Environment: ${environment}`);
40
- if (!isDefaultApiUrl(apiUrl)) {
41
- console.log(`API: ${apiUrl}`);
42
- }
43
- console.log("");
44
- const envInfo = await client.request("GET", `/api/cli/projects/${projectId}`);
45
- const envRow = envInfo.environments.find((e) => e.name.toLowerCase() === environment.toLowerCase());
46
- if (!envRow) {
47
- throw new Error(`Environment not found: ${environment}`);
37
+ throw new Error("Approval request expired. Run the command again.");
38
+ }
39
+ /** Resolve, validate, merge, spawn. */
40
+ export async function runCommand(opts, childArgs) {
41
+ if (childArgs.length === 0 && !opts.explain) {
42
+ throw new Error("Usage: npx getmyenv run [context] -- <command>");
48
43
  }
49
- const environmentId = String(envRow.id);
50
- let grant = loadGrant(projectId, environmentId);
51
- if (!grant) {
52
- const identity = loadOrCreateIdentity(projectId);
53
- const timestamp = String(Date.now());
54
- const message = [
55
- projectId,
56
- environmentId,
57
- identity.publicKey,
58
- timestamp,
59
- ].join(":");
60
- const signature = signAccessRequest(identity.privateKey, message);
61
- let request;
44
+ const { who, client, meta, apiUrl } = await ensureTokenAndLink({ apiUrl: opts.apiUrl });
45
+ const ctx = resolveContext(who, meta, opts.context);
46
+ let res = await resolveOnce(client, who.project.id, ctx.slug);
47
+ if (res.status === "pending") {
48
+ const grant = await waitForGrant(client, res);
62
49
  try {
63
- request = await client.request("POST", "/api/cli/requests", {
64
- projectId,
65
- environmentId: envRow.id,
66
- identityPublicKey: identity.publicKey,
67
- identityLabel: process.env.GETMYENV_MACHINE_LABEL ??
68
- `${process.env.USERNAME ?? process.env.USER ?? "dev"}'s machine`,
69
- signature,
70
- message,
71
- timestamp,
72
- requestedSecretNames: requestedSecretNames.length > 0 ? requestedSecretNames : undefined,
73
- });
50
+ res = await resolveOnce(client, who.project.id, ctx.slug, grant);
74
51
  }
75
52
  catch (err) {
76
- const msg = err instanceof Error ? err.message : String(err);
77
- if (/access requests are disabled/i.test(msg)) {
78
- console.log(`\n${pc.red("✗")} Access requests are disabled for this project.\n`);
79
- process.exit(1);
53
+ if (err instanceof ApiError && err.status === 401) {
54
+ throw new Error(`${err.message}. Run the command again.`);
80
55
  }
81
56
  throw err;
82
57
  }
83
- if (request.status === "approved" &&
84
- request.grantToken &&
85
- request.grantExpiresAt) {
86
- grant = {
87
- grantToken: request.grantToken,
88
- expiresAt: request.grantExpiresAt,
89
- projectId,
90
- environmentId,
91
- };
92
- saveGrant(grant);
93
- console.log(`${pc.green("✓")} ${needsDashboardWait
94
- ? "Trusted device - access granted"
95
- : "Access granted (development)"}\n`);
58
+ if (res.status !== "ok")
59
+ throw new Error("Approval did not complete. Run the command again.");
60
+ }
61
+ const values = {};
62
+ if (res.values.length > 0) {
63
+ if (res.wrappedProjectKey == null) {
64
+ throw new Error("This project has values but no key. Restore the key from a backup.");
96
65
  }
97
- else {
98
- const appOrigin = apiUrl.replace(/\/$/, "");
99
- console.log(`Waiting for dashboard approval (production). Open ${appOrigin}/requests\n`);
100
- console.log(pc.dim("Tip: choose Trust this device in the dashboard to skip approval next time on this machine.\n"));
101
- console.log(pc.dim("Waiting..."));
102
- const deadline = new Date(request.expiresAt).getTime();
103
- let approved = false;
104
- while (Date.now() < deadline) {
105
- const remaining = Math.max(0, Math.ceil((deadline - Date.now()) / 1000));
106
- process.stdout.write(`\r${pc.dim(`Waiting... ${String(remaining).padStart(2, "0")}s`)} `);
107
- await sleep(1500);
108
- const status = await client.request("GET", `/api/cli/requests/${request.id}`);
109
- if (status.status === "approved" &&
110
- status.grantToken &&
111
- status.grantExpiresAt) {
112
- grant = {
113
- grantToken: status.grantToken,
114
- expiresAt: status.grantExpiresAt,
115
- projectId,
116
- environmentId,
117
- };
118
- saveGrant(grant);
119
- approved = true;
120
- break;
121
- }
122
- if (status.status === "denied") {
123
- console.log(`\n\n${pc.red("✗")} Access denied\n`);
124
- process.exit(1);
125
- }
126
- if (status.status === "expired" || status.status === "consumed") {
127
- break;
128
- }
129
- }
130
- if (!approved || !grant) {
131
- console.log(`\n\n${pc.red("✗")} Approval request expired\n`);
132
- console.log("Run the command again to request access.\n");
133
- process.exit(1);
134
- }
135
- console.log(`\n\n${pc.green("✓")} Access approved\n`);
66
+ const { pek } = await unlockProjectKey({
67
+ isGuest: who.isGuest,
68
+ projectId: who.project.id,
69
+ wrapped: res.wrappedProjectKey,
70
+ cache: res.cacheKey,
71
+ vaultPasswordStdin: opts.vaultPasswordStdin,
72
+ apiUrl,
73
+ });
74
+ for (const v of res.values) {
75
+ values[v.name] = decryptSecret(pek, parsePayload(v.ciphertext));
136
76
  }
137
77
  }
138
- // Guest uses claim.json passphrase (no prompt). Claimed projects prompt first.
139
- const maxAttempts = opts.vaultPasswordStdin || who.isGuest ? 1 : 3;
140
- let password = await resolveVaultPassword({
141
- isGuest: who.isGuest,
142
- vaultPasswordStdin: opts.vaultPasswordStdin,
143
- });
144
- console.log("Loading secrets...\n");
145
- let bundle;
146
- try {
147
- bundle = await client.request("POST", `/api/cli/grants/secrets`, {
148
- projectId,
149
- environmentId: envRow.id,
150
- }, { "X-Getmyenv-Grant": grant.grantToken });
78
+ const merged = mergeEnv(process.env, values, res.missing, opts.keepExisting === true);
79
+ const label = `${res.context.name} (${res.context.slug}${res.context.protection === "locked" ? ", locked" : ""})`;
80
+ if (opts.explain) {
81
+ log(pc.bold(`${who.project.name} / ${label}`));
82
+ for (const line of explainLines(merged, res.context.slug))
83
+ log(line);
84
+ log();
151
85
  }
152
- catch (err) {
153
- const msg = err instanceof Error ? err.message : String(err);
154
- if (/grant already used|invalid grant|grant expired/i.test(msg)) {
155
- clearGrant(projectId, environmentId);
156
- }
157
- throw err;
86
+ const invalid = validationError(merged, res.context.slug, opts.allowMissing === true);
87
+ if (invalid)
88
+ throw new Error(invalid);
89
+ if (childArgs.length === 0)
90
+ return;
91
+ if (!opts.explain) {
92
+ log(`${pc.green("✓")} ${who.project.name} / ${label}: ${merged.applied.length} variable${merged.applied.length === 1 ? "" : "s"}`);
158
93
  }
159
- let pek = null;
160
- for (let attempt = 1; attempt <= maxAttempts; attempt++) {
161
- if (attempt > 1) {
162
- password = await resolveVaultPassword({
163
- isGuest: who.isGuest,
164
- vaultPasswordStdin: opts.vaultPasswordStdin,
165
- });
166
- }
167
- try {
168
- pek = await unwrapPek({
169
- password,
170
- scope: who.cliScope,
171
- wrapped: bundle.wrappedProjectKey,
172
- });
173
- break;
174
- }
175
- catch {
176
- if (who.isGuest) {
177
- clearGrant(projectId, environmentId);
178
- throw new Error("Could not decrypt secrets with claim.json passphrase. Restore claim.json or run: npx getmyenv claim");
179
- }
180
- if (attempt < maxAttempts) {
181
- console.log(pc.red("Wrong Vault password. Try again.\n"));
182
- continue;
183
- }
184
- clearGrant(projectId, environmentId);
185
- throw new Error("Could not decrypt secrets. Check your vault password.");
186
- }
94
+ if (merged.overridden.length > 0) {
95
+ log(pc.yellow(`Replaced from parent env: ${merged.overridden.join(", ")}`));
187
96
  }
188
- if (!pek) {
189
- clearGrant(projectId, environmentId);
190
- throw new Error("Could not decrypt secrets. Check your vault password.");
97
+ if (merged.kept.length > 0 && !opts.explain) {
98
+ log(pc.dim(`Kept from parent env: ${merged.kept.join(", ")}`));
191
99
  }
192
- const env = { ...process.env };
193
- const loadedNames = [];
194
- for (const secret of bundle.secrets) {
195
- env[secret.name] = decryptSecret(pek, parsePayload(secret.ciphertext));
196
- loadedNames.push(secret.name);
100
+ if (merged.unresolved.length > 0) {
101
+ log(pc.yellow(`Not set: ${merged.unresolved.map((m) => m.name).join(", ")}`));
197
102
  }
198
- console.log(`${pc.green("✓")} Loaded ${loadedNames.length} secret${loadedNames.length === 1 ? "" : "s"}: ${loadedNames.join(", ") || "(none)"}\n`);
199
- console.log("Starting application...\n");
200
103
  const [cmd, ...args] = childArgs;
201
- const child = spawn(cmd, args, {
202
- env,
203
- stdio: "inherit",
204
- shell: process.platform === "win32",
205
- });
104
+ const child = process.platform === "win32"
105
+ ? spawn(windowsCommandLine(childArgs), { env: merged.env, stdio: "inherit", shell: true })
106
+ : spawn(cmd, args, { env: merged.env, stdio: "inherit" });
107
+ // Ctrl+C already reaches the child through the terminal. Only wait for it.
108
+ process.on("SIGINT", () => undefined);
109
+ // SIGTERM / SIGHUP are sent to this process only. Pass them on.
110
+ for (const sig of ["SIGTERM", "SIGHUP"]) {
111
+ process.on(sig, () => {
112
+ if (child.exitCode === null && child.signalCode === null)
113
+ child.kill(sig);
114
+ });
115
+ }
206
116
  const code = await new Promise((resolve) => {
207
- child.on("exit", (c) => resolve(c ?? 1));
117
+ child.on("error", (err) => {
118
+ log(pc.red(`Could not start ${cmd}: ${err.message}`));
119
+ resolve(127);
120
+ });
121
+ child.on("exit", (c, signal) => resolve(c ?? (signal ? signalExitCode(signal, os.constants.signals) : 0)));
208
122
  });
209
123
  process.exit(code);
210
124
  }
211
- function sleep(ms) {
212
- return new Promise((r) => setTimeout(r, ms));
213
- }
214
125
  //# sourceMappingURL=run.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"run.js","sourceRoot":"","sources":["../../src/commands/run.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAC3C,OAAO,EAAE,MAAM,YAAY,CAAC;AAC5B,OAAO,EACL,aAAa,EACb,YAAY,EACZ,iBAAiB,GAClB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EACL,gBAAgB,GACjB,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,SAAS,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAC3D,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,EACL,UAAU,EACV,SAAS,EACT,oBAAoB,EACpB,SAAS,GACV,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAC1C,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAStD,MAAM,CAAC,KAAK,UAAU,UAAU,CAC9B,IAAa,EACb,SAAmB;IAEnB,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC3B,MAAM,IAAI,KAAK,CAAC,sCAAsC,CAAC,CAAC;IAC1D,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC;IAErC,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,GAAG,MAAM,kBAAkB,CAAC;QACjE,MAAM,EAAE,IAAI,CAAC,MAAM;QACnB,MAAM,EAAE,KAAK;KACd,CAAC,CAAC;IACH,MAAM,MAAM,GAAG,IAAI,SAAS,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;IAE5C,IAAI,WAAW,GAAG,gBAAgB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC7C,IAAI,WAAW,KAAK,GAAG,CAAC,QAAQ,EAAE,CAAC;QACjC,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;YACvB,WAAW,GAAG,GAAG,CAAC,QAAQ,CAAC;QAC7B,CAAC;aAAM,CAAC;YACN,MAAM,IAAI,KAAK,CACb;gBACE,kBAAkB,GAAG,CAAC,QAAQ,uBAAuB,WAAW,GAAG;gBACnE,GAAG,CAAC,QAAQ,KAAK,aAAa;oBAC5B,CAAC,CAAC,+CAA+C;oBACjD,CAAC,CAAC,8CAA8C;gBAClD,4DAA4D;aAC7D,CAAC,IAAI,CAAC,IAAI,CAAC,CACb,CAAC;QACJ,CAAC;IACH,CAAC;IAED,MAAM,oBAAoB,GAAG,gBAAgB,EAAE,CAAC;IAChD,MAAM,kBAAkB,GAAG,GAAG,CAAC,QAAQ,KAAK,YAAY,CAAC;IAEzD,OAAO,CAAC,GAAG,CAAC,gBAAgB,GAAG,CAAC,WAAW,EAAE,CAAC,CAAC;IAC/C,OAAO,CAAC,GAAG,CAAC,gBAAgB,WAAW,EAAE,CAAC,CAAC;IAC3C,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,EAAE,CAAC;QAC7B,OAAO,CAAC,GAAG,CAAC,gBAAgB,MAAM,EAAE,CAAC,CAAC;IACxC,CAAC;IACD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAEhB,MAAM,OAAO,GAAG,MAAM,MAAM,CAAC,OAAO,CAEjC,KAAK,EAAE,qBAAqB,SAAS,EAAE,CAAC,CAAC;IAC5C,MAAM,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC,IAAI,CACtC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,KAAK,WAAW,CAAC,WAAW,EAAE,CAC1D,CAAC;IACF,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,MAAM,IAAI,KAAK,CAAC,0BAA0B,WAAW,EAAE,CAAC,CAAC;IAC3D,CAAC;IACD,MAAM,aAAa,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;IAExC,IAAI,KAAK,GAAG,SAAS,CAAC,SAAS,EAAE,aAAa,CAAC,CAAC;IAEhD,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,MAAM,QAAQ,GAAG,oBAAoB,CAAC,SAAS,CAAC,CAAC;QAEjD,MAAM,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;QACrC,MAAM,OAAO,GAAG;YACd,SAAS;YACT,aAAa;YACb,QAAQ,CAAC,SAAS;YAClB,SAAS;SACV,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACZ,MAAM,SAAS,GAAG,iBAAiB,CAAC,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;QAElE,IAAI,OAMH,CAAC;QACF,IAAI,CAAC;YACH,OAAO,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC,MAAM,EAAE,mBAAmB,EAAE;gBAC1D,SAAS;gBACT,aAAa,EAAE,MAAM,CAAC,EAAE;gBACxB,iBAAiB,EAAE,QAAQ,CAAC,SAAS;gBACrC,aAAa,EACX,OAAO,CAAC,GAAG,CAAC,sBAAsB;oBAClC,GAAG,OAAO,CAAC,GAAG,CAAC,QAAQ,IAAI,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,KAAK,YAAY;gBAClE,SAAS;gBACT,OAAO;gBACP,SAAS;gBACT,oBAAoB,EAClB,oBAAoB,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,oBAAoB,CAAC,CAAC,CAAC,SAAS;aACrE,CAAC,CAAC;QACL,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,GAAG,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YAC7D,IAAI,+BAA+B,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;gBAC9C,OAAO,CAAC,GAAG,CACT,KAAK,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,mDAAmD,CACpE,CAAC;gBACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAClB,CAAC;YACD,MAAM,GAAG,CAAC;QACZ,CAAC;QAED,IACE,OAAO,CAAC,MAAM,KAAK,UAAU;YAC7B,OAAO,CAAC,UAAU;YAClB,OAAO,CAAC,cAAc,EACtB,CAAC;YACD,KAAK,GAAG;gBACN,UAAU,EAAE,OAAO,CAAC,UAAU;gBAC9B,SAAS,EAAE,OAAO,CAAC,cAAc;gBACjC,SAAS;gBACT,aAAa;aACd,CAAC;YACF,SAAS,CAAC,KAAK,CAAC,CAAC;YACjB,OAAO,CAAC,GAAG,CACT,GAAG,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,IACd,kBAAkB;gBAChB,CAAC,CAAC,iCAAiC;gBACnC,CAAC,CAAC,8BACN,IAAI,CACL,CAAC;QACJ,CAAC;aAAM,CAAC;YACN,MAAM,SAAS,GAAG,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;YAC5C,OAAO,CAAC,GAAG,CACT,qDAAqD,SAAS,aAAa,CAC5E,CAAC;YACF,OAAO,CAAC,GAAG,CACT,EAAE,CAAC,GAAG,CACJ,8FAA8F,CAC/F,CACF,CAAC;YACF,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC;YAElC,MAAM,QAAQ,GAAG,IAAI,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,OAAO,EAAE,CAAC;YACvD,IAAI,QAAQ,GAAG,KAAK,CAAC;YACrB,OAAO,IAAI,CAAC,GAAG,EAAE,GAAG,QAAQ,EAAE,CAAC;gBAC7B,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CACxB,CAAC,EACD,IAAI,CAAC,IAAI,CAAC,CAAC,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,GAAG,IAAI,CAAC,CAC1C,CAAC;gBACF,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,KAAK,EAAE,CAAC,GAAG,CAAC,cAAc,MAAM,CAAC,SAAS,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG,CAAC,KAAK,CACtE,CAAC;gBACF,MAAM,KAAK,CAAC,IAAI,CAAC,CAAC;gBAClB,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,OAAO,CAIhC,KAAK,EAAE,qBAAqB,OAAO,CAAC,EAAE,EAAE,CAAC,CAAC;gBAC7C,IACE,MAAM,CAAC,MAAM,KAAK,UAAU;oBAC5B,MAAM,CAAC,UAAU;oBACjB,MAAM,CAAC,cAAc,EACrB,CAAC;oBACD,KAAK,GAAG;wBACN,UAAU,EAAE,MAAM,CAAC,UAAU;wBAC7B,SAAS,EAAE,MAAM,CAAC,cAAc;wBAChC,SAAS;wBACT,aAAa;qBACd,CAAC;oBACF,SAAS,CAAC,KAAK,CAAC,CAAC;oBACjB,QAAQ,GAAG,IAAI,CAAC;oBAChB,MAAM;gBACR,CAAC;gBACD,IAAI,MAAM,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;oBAC/B,OAAO,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC;oBAClD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;gBAClB,CAAC;gBACD,IAAI,MAAM,CAAC,MAAM,KAAK,SAAS,IAAI,MAAM,CAAC,MAAM,KAAK,UAAU,EAAE,CAAC;oBAChE,MAAM;gBACR,CAAC;YACH,CAAC;YAED,IAAI,CAAC,QAAQ,IAAI,CAAC,KAAK,EAAE,CAAC;gBACxB,OAAO,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,6BAA6B,CAAC,CAAC;gBAC7D,OAAO,CAAC,GAAG,CAAC,4CAA4C,CAAC,CAAC;gBAC1D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAClB,CAAC;YACD,OAAO,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,oBAAoB,CAAC,CAAC;QACxD,CAAC;IACH,CAAC;IAED,+EAA+E;IAC/E,MAAM,WAAW,GAAG,IAAI,CAAC,kBAAkB,IAAI,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACnE,IAAI,QAAQ,GAAG,MAAM,oBAAoB,CAAC;QACxC,OAAO,EAAE,GAAG,CAAC,OAAO;QACpB,kBAAkB,EAAE,IAAI,CAAC,kBAAkB;KAC5C,CAAC,CAAC;IAEH,OAAO,CAAC,GAAG,CAAC,sBAAsB,CAAC,CAAC;IAEpC,IAAI,MAGH,CAAC;IACF,IAAI,CAAC;QACH,MAAM,GAAG,MAAM,MAAM,CAAC,OAAO,CAC3B,MAAM,EACN,yBAAyB,EACzB;YACE,SAAS;YACT,aAAa,EAAE,MAAM,CAAC,EAAE;SACzB,EACD,EAAE,kBAAkB,EAAE,KAAK,CAAC,UAAU,EAAE,CACzC,CAAC;IACJ,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,GAAG,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QAC7D,IAAI,iDAAiD,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;YAChE,UAAU,CAAC,SAAS,EAAE,aAAa,CAAC,CAAC;QACvC,CAAC;QACD,MAAM,GAAG,CAAC;IACZ,CAAC;IAED,IAAI,GAAG,GAAsB,IAAI,CAAC;IAClC,KAAK,IAAI,OAAO,GAAG,CAAC,EAAE,OAAO,IAAI,WAAW,EAAE,OAAO,EAAE,EAAE,CAAC;QACxD,IAAI,OAAO,GAAG,CAAC,EAAE,CAAC;YAChB,QAAQ,GAAG,MAAM,oBAAoB,CAAC;gBACpC,OAAO,EAAE,GAAG,CAAC,OAAO;gBACpB,kBAAkB,EAAE,IAAI,CAAC,kBAAkB;aAC5C,CAAC,CAAC;QACL,CAAC;QACD,IAAI,CAAC;YACH,GAAG,GAAG,MAAM,SAAS,CAAC;gBACpB,QAAQ;gBACR,KAAK,EAAE,GAAG,CAAC,QAAQ;gBACnB,OAAO,EAAE,MAAM,CAAC,iBAAiB;aAClC,CAAC,CAAC;YACH,MAAM;QACR,CAAC;QAAC,MAAM,CAAC;YACP,IAAI,GAAG,CAAC,OAAO,EAAE,CAAC;gBAChB,UAAU,CAAC,SAAS,EAAE,aAAa,CAAC,CAAC;gBACrC,MAAM,IAAI,KAAK,CACb,qGAAqG,CACtG,CAAC;YACJ,CAAC;YACD,IAAI,OAAO,GAAG,WAAW,EAAE,CAAC;gBAC1B,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,oCAAoC,CAAC,CAAC,CAAC;gBAC1D,SAAS;YACX,CAAC;YACD,UAAU,CAAC,SAAS,EAAE,aAAa,CAAC,CAAC;YACrC,MAAM,IAAI,KAAK,CAAC,uDAAuD,CAAC,CAAC;QAC3E,CAAC;IACH,CAAC;IACD,IAAI,CAAC,GAAG,EAAE,CAAC;QACT,UAAU,CAAC,SAAS,EAAE,aAAa,CAAC,CAAC;QACrC,MAAM,IAAI,KAAK,CAAC,uDAAuD,CAAC,CAAC;IAC3E,CAAC;IAED,MAAM,GAAG,GAAG,EAAE,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;IAC/B,MAAM,WAAW,GAAa,EAAE,CAAC;IACjC,KAAK,MAAM,MAAM,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;QACpC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,aAAa,CAC9B,GAAG,EACH,YAAY,CAAC,MAAM,CAAC,UAAoB,CAAC,CAC1C,CAAC;QACF,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IAChC,CAAC;IAED,OAAO,CAAC,GAAG,CACT,GAAG,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,WAAW,WAAW,CAAC,MAAM,UAC3C,WAAW,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAClC,KAAK,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,QAAQ,IAAI,CAC5C,CAAC;IACF,OAAO,CAAC,GAAG,CAAC,2BAA2B,CAAC,CAAC;IAEzC,MAAM,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,SAAS,CAAC;IACjC,MAAM,KAAK,GAAG,KAAK,CAAC,GAAI,EAAE,IAAI,EAAE;QAC9B,GAAG;QACH,KAAK,EAAE,SAAS;QAChB,KAAK,EAAE,OAAO,CAAC,QAAQ,KAAK,OAAO;KACpC,CAAC,CAAC;IACH,MAAM,IAAI,GAAG,MAAM,IAAI,OAAO,CAAS,CAAC,OAAO,EAAE,EAAE;QACjD,KAAK,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAC3C,CAAC,CAAC,CAAC;IACH,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACrB,CAAC;AAED,SAAS,KAAK,CAAC,EAAU;IACvB,OAAO,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;AAC/C,CAAC"}
1
+ {"version":3,"file":"run.js","sourceRoot":"","sources":["../../src/commands/run.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAC3C,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,EAAE,MAAM,YAAY,CAAC;AAC5B,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAC/D,OAAO,EAAa,QAAQ,EAAmB,MAAM,eAAe,CAAC;AACrE,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,EAAE,KAAK,EAAE,MAAM,qBAAqB,CAAC;AAC5C,OAAO,EACL,YAAY,EACZ,QAAQ,EACR,cAAc,EACd,eAAe,EACf,kBAAkB,GAEnB,MAAM,mBAAmB,CAAC;AA2B3B,MAAM,YAAY,GAAG,kBAAkB,CAAC;AAExC,6EAA6E;AAC7E,MAAM,GAAG,GAAG,CAAC,IAAI,GAAG,EAAE,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;AAE/C,KAAK,UAAU,WAAW,CACxB,MAAiB,EACjB,SAAiB,EACjB,IAAY,EACZ,KAAc;IAEd,OAAO,MAAM,CAAC,OAAO,CACnB,MAAM,EACN,kBAAkB,EAClB,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,gBAAgB,CAAC,SAAS,EAAE,IAAI,CAAC,EAAE,EAC7D,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,YAAY,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,SAAS,CAC9C,CAAC;AACJ,CAAC;AAED,KAAK,UAAU,YAAY,CACzB,MAAiB,EACjB,OAAuB;IAEvB,GAAG,CAAC,0CAA0C,OAAO,CAAC,SAAS,EAAE,CAAC,CAAC;IACnE,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,wDAAwD,CAAC,CAAC,CAAC;IACtE,MAAM,QAAQ,GAAG,IAAI,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,OAAO,EAAE,CAAC;IACvD,OAAO,IAAI,CAAC,GAAG,EAAE,GAAG,QAAQ,EAAE,CAAC;QAC7B,MAAM,KAAK,CAAC,IAAI,CAAC,CAAC;QAClB,MAAM,CAAC,GAAG,MAAM,MAAM,CAAC,OAAO,CAC5B,KAAK,EACL,qBAAqB,OAAO,CAAC,SAAS,EAAE,CACzC,CAAC;QACF,IAAI,CAAC,CAAC,MAAM,KAAK,UAAU,IAAI,CAAC,CAAC,UAAU,EAAE,CAAC;YAC5C,GAAG,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;YACnC,OAAO,CAAC,CAAC,UAAU,CAAC;QACtB,CAAC;QACD,IAAI,CAAC,CAAC,MAAM,KAAK,UAAU,EAAE,CAAC;YAC5B,MAAM,IAAI,KAAK,CAAC,wDAAwD,CAAC,CAAC;QAC5E,CAAC;QACD,IAAI,CAAC,CAAC,MAAM,KAAK,QAAQ;YAAE,MAAM,IAAI,KAAK,CAAC,iCAAiC,CAAC,CAAC;QAC9E,IAAI,CAAC,CAAC,MAAM,KAAK,SAAS;YAAE,MAAM;IACpC,CAAC;IACD,MAAM,IAAI,KAAK,CAAC,kDAAkD,CAAC,CAAC;AACtE,CAAC;AAED,uCAAuC;AACvC,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,IAAa,EAAE,SAAmB;IACjE,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;QAC5C,MAAM,IAAI,KAAK,CAAC,gDAAgD,CAAC,CAAC;IACpE,CAAC;IAED,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,MAAM,kBAAkB,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;IACxF,MAAM,GAAG,GAAG,cAAc,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;IAEpD,IAAI,GAAG,GAAG,MAAM,WAAW,CAAC,MAAM,EAAE,GAAG,CAAC,OAAO,CAAC,EAAE,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC;IAC9D,IAAI,GAAG,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;QAC7B,MAAM,KAAK,GAAG,MAAM,YAAY,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;QAC9C,IAAI,CAAC;YACH,GAAG,GAAG,MAAM,WAAW,CAAC,MAAM,EAAE,GAAG,CAAC,OAAO,CAAC,EAAE,EAAE,GAAG,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QACnE,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,IAAI,GAAG,YAAY,QAAQ,IAAI,GAAG,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;gBAClD,MAAM,IAAI,KAAK,CAAC,GAAG,GAAG,CAAC,OAAO,0BAA0B,CAAC,CAAC;YAC5D,CAAC;YACD,MAAM,GAAG,CAAC;QACZ,CAAC;QACD,IAAI,GAAG,CAAC,MAAM,KAAK,IAAI;YAAE,MAAM,IAAI,KAAK,CAAC,mDAAmD,CAAC,CAAC;IAChG,CAAC;IAED,MAAM,MAAM,GAA2B,EAAE,CAAC;IAC1C,IAAI,GAAG,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC1B,IAAI,GAAG,CAAC,iBAAiB,IAAI,IAAI,EAAE,CAAC;YAClC,MAAM,IAAI,KAAK,CAAC,oEAAoE,CAAC,CAAC;QACxF,CAAC;QACD,MAAM,EAAE,GAAG,EAAE,GAAG,MAAM,gBAAgB,CAAC;YACrC,OAAO,EAAE,GAAG,CAAC,OAAO;YACpB,SAAS,EAAE,GAAG,CAAC,OAAO,CAAC,EAAE;YACzB,OAAO,EAAE,GAAG,CAAC,iBAAiB;YAC9B,KAAK,EAAE,GAAG,CAAC,QAAQ;YACnB,kBAAkB,EAAE,IAAI,CAAC,kBAAkB;YAC3C,MAAM;SACP,CAAC,CAAC;QACH,KAAK,MAAM,CAAC,IAAI,GAAG,CAAC,MAAM,EAAE,CAAC;YAC3B,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,aAAa,CAAC,GAAG,EAAE,YAAY,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC;QAClE,CAAC;IACH,CAAC;IAED,MAAM,MAAM,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,CAAC,OAAO,EAAE,IAAI,CAAC,YAAY,KAAK,IAAI,CAAC,CAAC;IACtF,MAAM,KAAK,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,IAAI,KAAK,GAAG,CAAC,OAAO,CAAC,IAAI,GAAG,GAAG,CAAC,OAAO,CAAC,UAAU,KAAK,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC;IAElH,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;QACjB,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,OAAO,CAAC,IAAI,MAAM,KAAK,EAAE,CAAC,CAAC,CAAC;QAC/C,KAAK,MAAM,IAAI,IAAI,YAAY,CAAC,MAAM,EAAE,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC;YAAE,GAAG,CAAC,IAAI,CAAC,CAAC;QACrE,GAAG,EAAE,CAAC;IACR,CAAC;IAED,MAAM,OAAO,GAAG,eAAe,CAAC,MAAM,EAAE,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,YAAY,KAAK,IAAI,CAAC,CAAC;IACtF,IAAI,OAAO;QAAE,MAAM,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC;IAEtC,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO;IAEnC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;QAClB,GAAG,CACD,GAAG,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,OAAO,CAAC,IAAI,MAAM,KAAK,KAAK,MAAM,CAAC,OAAO,CAAC,MAAM,YAAY,MAAM,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAC9H,CAAC;IACJ,CAAC;IACD,IAAI,MAAM,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACjC,GAAG,CAAC,EAAE,CAAC,MAAM,CAAC,6BAA6B,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;IAC9E,CAAC;IACD,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;QAC5C,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,yBAAyB,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;IACjE,CAAC;IACD,IAAI,MAAM,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACjC,GAAG,CAAC,EAAE,CAAC,MAAM,CAAC,YAAY,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;IAChF,CAAC;IAED,MAAM,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,SAAS,CAAC;IACjC,MAAM,KAAK,GACT,OAAO,CAAC,QAAQ,KAAK,OAAO;QAC1B,CAAC,CAAC,KAAK,CAAC,kBAAkB,CAAC,SAAS,CAAC,EAAE,EAAE,GAAG,EAAE,MAAM,CAAC,GAAG,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;QAC1F,CAAC,CAAC,KAAK,CAAC,GAAI,EAAE,IAAI,EAAE,EAAE,GAAG,EAAE,MAAM,CAAC,GAAG,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC;IAC/D,2EAA2E;IAC3E,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;IACtC,gEAAgE;IAChE,KAAK,MAAM,GAAG,IAAI,CAAC,SAAS,EAAE,QAAQ,CAAU,EAAE,CAAC;QACjD,OAAO,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE;YACnB,IAAI,KAAK,CAAC,QAAQ,KAAK,IAAI,IAAI,KAAK,CAAC,UAAU,KAAK,IAAI;gBAAE,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAC5E,CAAC,CAAC,CAAC;IACL,CAAC;IACD,MAAM,IAAI,GAAG,MAAM,IAAI,OAAO,CAAS,CAAC,OAAO,EAAE,EAAE;QACjD,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE;YACxB,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,mBAAmB,GAAG,KAAK,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;YACtD,OAAO,CAAC,GAAG,CAAC,CAAC;QACf,CAAC,CAAC,CAAC;QACH,KAAK,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,CAC7B,OAAO,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,cAAc,CAAC,MAAM,EAAE,EAAE,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAC1E,CAAC;IACJ,CAAC,CAAC,CAAC;IACH,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACrB,CAAC"}
@@ -0,0 +1,16 @@
1
+ export type SetOpts = {
2
+ context?: string;
3
+ apiUrl?: string;
4
+ expires?: string;
5
+ vaultPasswordStdin?: boolean;
6
+ /** Read the one value from stdin, so it never lands in argv or shell history. */
7
+ stdin?: boolean;
8
+ };
9
+ /** `set KEY[=VALUE] ...` Omitted values are prompted without echo. */
10
+ export declare function setCommand(args: string[], opts: SetOpts): Promise<void>;
11
+ export declare function unsetCommand(names: string[], opts: {
12
+ context?: string;
13
+ apiUrl?: string;
14
+ all?: boolean;
15
+ }): Promise<void>;
16
+ //# sourceMappingURL=set.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"set.d.ts","sourceRoot":"","sources":["../../src/commands/set.ts"],"names":[],"mappings":"AAQA,MAAM,MAAM,OAAO,GAAG;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,iFAAiF;IACjF,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB,CAAC;AA0BF,sEAAsE;AACtE,wBAAsB,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CA0D7E;AAED,wBAAsB,YAAY,CAChC,KAAK,EAAE,MAAM,EAAE,EACf,IAAI,EAAE;IAAE,OAAO,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,GAAG,CAAC,EAAE,OAAO,CAAA;CAAE,GACzD,OAAO,CAAC,IAAI,CAAC,CAgBf"}
@@ -0,0 +1,111 @@
1
+ import pc from "picocolors";
2
+ import { variableNameSchema } from "@getmyenv/shared";
3
+ import { promptHidden } from "../lib/fs.js";
4
+ import { presetVaultPassword } from "../lib/guest-key.js";
5
+ import { ensureTokenAndLink } from "../lib/bootstrap.js";
6
+ import { resolveContext } from "../lib/context.js";
7
+ import { assertWritable, uploadValues } from "../lib/upload.js";
8
+ async function readStdinValue() {
9
+ const chunks = [];
10
+ for await (const chunk of process.stdin) {
11
+ chunks.push(Buffer.isBuffer(chunk) ? chunk : Buffer.from(chunk));
12
+ }
13
+ return Buffer.concat(chunks).toString("utf8").replace(/\r?\n$/, "");
14
+ }
15
+ function parsePair(arg) {
16
+ const eq = arg.indexOf("=");
17
+ if (eq <= 0)
18
+ return { name: arg.trim() };
19
+ return { name: arg.slice(0, eq).trim(), value: arg.slice(eq + 1) };
20
+ }
21
+ function parseExpires(raw) {
22
+ if (raw === undefined)
23
+ return undefined;
24
+ if (raw === "never" || raw === "")
25
+ return null;
26
+ const d = new Date(raw);
27
+ if (Number.isNaN(d.getTime())) {
28
+ throw new Error("--expires takes a date like 2026-12-31, or never.");
29
+ }
30
+ return d.toISOString();
31
+ }
32
+ /** `set KEY[=VALUE] ...` Omitted values are prompted without echo. */
33
+ export async function setCommand(args, opts) {
34
+ const pairs = args.map(parsePair);
35
+ for (const p of pairs) {
36
+ if (!variableNameSchema.safeParse(p.name).success) {
37
+ throw new Error(`Invalid name: ${p.name}. Use an environment variable name like API_KEY.`);
38
+ }
39
+ }
40
+ const expiresAt = parseExpires(opts.expires);
41
+ if (opts.stdin) {
42
+ if (pairs.length !== 1 || pairs[0].value !== undefined) {
43
+ throw new Error("--stdin sets one variable: printf %s \"$VALUE\" | npx getmyenv set KEY --stdin");
44
+ }
45
+ if (process.stdin.isTTY) {
46
+ throw new Error("--stdin reads a piped value: printf %s \"$VALUE\" | npx getmyenv set KEY --stdin");
47
+ }
48
+ }
49
+ const linked = await ensureTokenAndLink({ apiUrl: opts.apiUrl });
50
+ const ctx = resolveContext(linked.who, linked.meta, opts.context);
51
+ assertWritable(linked, ctx);
52
+ const values = {};
53
+ if (opts.stdin) {
54
+ const input = await readStdinValue();
55
+ if (opts.vaultPasswordStdin) {
56
+ const nl = input.indexOf("\n");
57
+ if (nl < 0) {
58
+ throw new Error("With --vault-password-stdin, send the password on the first line and the value after it.");
59
+ }
60
+ presetVaultPassword(input.slice(0, nl).replace(/\r$/, ""));
61
+ values[pairs[0].name] = input.slice(nl + 1);
62
+ }
63
+ else {
64
+ values[pairs[0].name] = input;
65
+ }
66
+ }
67
+ for (const p of pairs) {
68
+ if (opts.stdin)
69
+ break;
70
+ if (p.value !== undefined) {
71
+ values[p.name] = p.value;
72
+ continue;
73
+ }
74
+ if (!process.stdin.isTTY) {
75
+ throw new Error(`No value for ${p.name}. Pipe it with --stdin, pass ${p.name}=VALUE, or run in a terminal to be prompted.`);
76
+ }
77
+ values[p.name] = await promptHidden(`${p.name} (hidden): `);
78
+ }
79
+ const res = await uploadValues({
80
+ linked,
81
+ context: ctx,
82
+ pairs: values,
83
+ expiresAt,
84
+ vaultPasswordStdin: opts.vaultPasswordStdin,
85
+ });
86
+ for (const name of res.set)
87
+ console.log(`${pc.green("✓")} ${name} ${pc.dim(`set in ${ctx.slug}`)}`);
88
+ for (const name of res.declared)
89
+ console.log(`${pc.yellow("○")} ${name} ${pc.dim(`declared, no value in ${ctx.slug}`)}`);
90
+ }
91
+ export async function unsetCommand(names, opts) {
92
+ for (const n of names) {
93
+ if (!variableNameSchema.safeParse(n).success)
94
+ throw new Error(`Invalid name: ${n}`);
95
+ }
96
+ const linked = await ensureTokenAndLink({ apiUrl: opts.apiUrl });
97
+ const ctx = resolveContext(linked.who, linked.meta, opts.context);
98
+ assertWritable(linked, ctx);
99
+ const res = await linked.client.request("DELETE", "/api/cli/values", {
100
+ context: ctx.slug,
101
+ names,
102
+ ...(opts.all ? { deleteKey: true } : {}),
103
+ });
104
+ const where = opts.all ? "removed from every context" : `unset in ${ctx.slug}`;
105
+ for (const name of res.removed)
106
+ console.log(`${pc.green("✓")} ${name} ${pc.dim(where)}`);
107
+ const skipped = names.filter((n) => !res.removed.includes(n));
108
+ if (skipped.length > 0)
109
+ console.log(pc.dim(`No change: ${skipped.join(", ")}`));
110
+ }
111
+ //# sourceMappingURL=set.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"set.js","sourceRoot":"","sources":["../../src/commands/set.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ /** Best guess at the app's start command, for the printed `run` line. */
2
+ export declare function suggestedStartCommand(cwd?: string): string;
3
+ export declare function runLine(context: string | null, cwd?: string): string;
4
+ /**
5
+ * Guided setup for an unlinked folder, in a terminal.
6
+ * Start without an account, or sign in. Then offer to import a detected .env.
7
+ */
8
+ export declare function startSetup(opts: {
9
+ apiUrl?: string;
10
+ thenContinue?: boolean;
11
+ }): Promise<void>;
12
+ /** Bare `getmyenv`: setup when unlinked (terminal only), status when linked. */
13
+ export declare function startCommand(opts: {
14
+ apiUrl?: string;
15
+ }): Promise<void>;
16
+ //# sourceMappingURL=start.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"start.d.ts","sourceRoot":"","sources":["../../src/commands/start.ts"],"names":[],"mappings":"AAmBA,yEAAyE;AACzE,wBAAgB,qBAAqB,CAAC,GAAG,SAAgB,GAAG,MAAM,CAkBjE;AAED,wBAAgB,OAAO,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,EAAE,GAAG,SAAgB,GAAG,MAAM,CAG3E;AA4BD;;;GAGG;AACH,wBAAsB,UAAU,CAAC,IAAI,EAAE;IAAE,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,YAAY,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAuDjG;AAED,gFAAgF;AAChF,wBAAsB,YAAY,CAAC,IAAI,EAAE;IAAE,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAU3E"}