@devdogsuga/devtools 0.1.33 → 0.1.35
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/{cli-CZKkNHK5.js → cli-Bb-Lzg-l.js} +16 -66
- package/dist/launch.js +3 -3
- package/dist/local-env-CR3McKHZ.js +2 -0
- package/dist/{local-env-D8HC2JK_.js → local-env-hH4encfD.js} +8 -63
- package/dist/{menu-CQBsQRgH.js → menu-DnqlX22U.js} +1 -1
- package/dist/{telemetry-C4foD8MD.js → telemetry-El7OainP.js} +2 -2
- package/dist/telemetry.js +1 -1
- package/package.json +4 -4
- package/dist/local-env-DrBCXqD8.js +0 -2
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import { a as cliName } from "./failure-log-BBPGejQv.js";
|
|
2
|
-
import { C as catalog, E as renderHelp, S as unwrap, T as renderCommandList, a as recordResolved, b as explain, c as probeEnvironment, d as nonEmpty, f as resolveDbConnection, i as recordEnteredTier, l as flagValue, m as sessionLabel, n as runMenu, o as reproducibleCommand, p as sessionIsLocal, r as beginInvocation, s as describeEnvironment, t as bareGroupStartPath, u as positionals, v as bail, w as helpPath, x as explainError, y as errorMessage } from "./menu-
|
|
2
|
+
import { C as catalog, E as renderHelp, S as unwrap, T as renderCommandList, a as recordResolved, b as explain, c as probeEnvironment, d as nonEmpty, f as resolveDbConnection, i as recordEnteredTier, l as flagValue, m as sessionLabel, n as runMenu, o as reproducibleCommand, p as sessionIsLocal, r as beginInvocation, s as describeEnvironment, t as bareGroupStartPath, u as positionals, v as bail, w as helpPath, x as explainError, y as errorMessage } from "./menu-DnqlX22U.js";
|
|
3
3
|
import { _ as dryRunKind, c as reportRuns, f as supabase, g as runInGroup, h as reportRan, l as run$1, s as dbPush, u as runWithStderr, v as isDryRun, x as wouldRunLine } from "./supabase-project-0knM0mqd.js";
|
|
4
4
|
import { a as ownVersion, n as discoverRepoRoot, r as findRepoRoot } from "./root-C2OmZDwD.js";
|
|
5
5
|
import { i as loadEnvSession, n as loadEnv, r as loadEnvLoad, t as getEnvSync } from "./peers-RBplwovA.js";
|
|
6
|
-
import { d as hasYes, f as isNonInteractive, n as captureDevtoolsError, o as initDevtoolsTelemetry, r as devtoolsEnvironment, t as captureDevtoolsDeprecation } from "./telemetry-
|
|
7
|
-
import {
|
|
6
|
+
import { d as hasYes, f as isNonInteractive, n as captureDevtoolsError, o as initDevtoolsTelemetry, r as devtoolsEnvironment, t as captureDevtoolsDeprecation } from "./telemetry-El7OainP.js";
|
|
7
|
+
import { n as assertRegistryLoaded, r as loadRegistry, t as scopedProcessEnv } from "./local-env-hH4encfD.js";
|
|
8
8
|
import { t as runStackCommand } from "./stack-BynCgRVS.js";
|
|
9
9
|
import { cancel, confirm, intro, isCancel, log, multiselect, note, outro, password, select, spinner, text } from "@clack/prompts";
|
|
10
10
|
import { existsSync, mkdirSync, readFileSync, readdirSync, statSync, writeFileSync } from "node:fs";
|
|
@@ -53,15 +53,6 @@ const DONE = "Done.";
|
|
|
53
53
|
* entry re-routes a credential behind a reviewer gate, so the reviewer of that
|
|
54
54
|
* change should have to touch this file and say so out loud.
|
|
55
55
|
*/
|
|
56
|
-
/** `sandbox`'s runtime manifest declares exactly these four; none may be
|
|
57
|
-
* storable, or `deploy secrets-file` would upload a long-lived secret to the
|
|
58
|
-
* internet-facing proxy Worker. */
|
|
59
|
-
const SANDBOX_RUNTIME_KEYS = [
|
|
60
|
-
"DEPLOY_ENV",
|
|
61
|
-
"PLATFORM_REST_URL",
|
|
62
|
-
"SANDBOX_PROXY_TOKEN",
|
|
63
|
-
"SANDBOX_SENTRY_DSN"
|
|
64
|
-
];
|
|
65
56
|
/** Public per-environment values the local stack also supplies. `localStack`
|
|
66
57
|
* describes development only; staging and production have no stack to supply
|
|
67
58
|
* these, so they must still reach a deploy. */
|
|
@@ -83,8 +74,7 @@ async function checkEnv(root) {
|
|
|
83
74
|
for (const other of rest) if (JSON.stringify(other.meta) !== JSON.stringify(first.meta)) problems.push(`${key} is declared by both "${first.source}" and "${other.source}" with diverging metadata. Duplicates must agree on every field, doc string included.`);
|
|
84
75
|
for (const entry of entries) if (entry.meta.doc.trim().length === 0) problems.push(`${key} (declared by "${entry.source}") has an empty doc.`);
|
|
85
76
|
}
|
|
86
|
-
const
|
|
87
|
-
const shipped = everyEntry.filter((e) => e.source === "study-group-finder");
|
|
77
|
+
const shipped = [...registry.values()].flat().filter((e) => e.source === "study-group-finder");
|
|
88
78
|
if (shipped.length === 0) problems.push("No variables are declared by \"study-group-finder\"; the no-secrets-in-the-binary check would be vacuous.");
|
|
89
79
|
for (const entry of shipped) if (entry.meta.secrecy !== "public") problems.push(`${entry.key} is in the study-group-finder runtime manifest with secrecy "${entry.meta.secrecy}". Move it to the "study-group-finder:tooling" manifest or make it public.`);
|
|
90
80
|
const storable = new Set(env.storableKeys());
|
|
@@ -92,9 +82,6 @@ async function checkEnv(root) {
|
|
|
92
82
|
const never = env.neverStoreKeys();
|
|
93
83
|
const minted = env.mintedKeys();
|
|
94
84
|
const narrowed = env.narrowedKeys();
|
|
95
|
-
const sandbox = everyEntry.filter((e) => e.source === "sandbox");
|
|
96
|
-
if (JSON.stringify(sandbox.map((e) => e.key).sort()) !== JSON.stringify(SANDBOX_RUNTIME_KEYS)) problems.push(`The sandbox runtime manifest declares [${sandbox.map((e) => e.key).sort().join(", ")}], not [${SANDBOX_RUNTIME_KEYS.join(", ")}].`);
|
|
97
|
-
for (const entry of sandbox) if (storable.has(entry.key)) problems.push(`${entry.key} is declared by the sandbox runtime manifest and is storable, so \`deploy secrets-file\` would upload it to the proxy Worker. Move it to the "sandbox:tooling" manifest if the deploy needs it rather than the Worker.`);
|
|
98
85
|
for (const [key, entries] of registry) if (key.startsWith("GITHUB_") && entries.some((e) => e.meta.scope === "environment")) problems.push(`${key} is environment-scoped but starts with GITHUB_, which GitHub reserves. Rename it (the App credentials use GH_*).`);
|
|
99
86
|
for (const key of never) {
|
|
100
87
|
if (storable.has(key)) problems.push(`${key} is never-store yet appears in storableKeys().`);
|
|
@@ -116,7 +103,7 @@ async function checkEnv(root) {
|
|
|
116
103
|
[
|
|
117
104
|
"minted",
|
|
118
105
|
minted,
|
|
119
|
-
[
|
|
106
|
+
[]
|
|
120
107
|
],
|
|
121
108
|
[
|
|
122
109
|
"narrowed",
|
|
@@ -308,9 +295,6 @@ function workerPaths() {
|
|
|
308
295
|
* both call that reusable workflow), so exactly one `matrix.include` block is
|
|
309
296
|
* expected.
|
|
310
297
|
*/
|
|
311
|
-
/** Worker apps that ship a `wrangler.jsonc` but are deliberately left out of
|
|
312
|
-
* the automated deploy matrix (see `deploy-app.yaml`'s own comment). */
|
|
313
|
-
const NOT_IN_DEPLOY_MATRIX = ["sandbox"];
|
|
314
298
|
/** The `packages:` glob list from `pnpm-workspace.yaml`, e.g. `["apps/*",
|
|
315
299
|
* "packages/*", "docs"]`. Stops at the next top-level (column-0) key. */
|
|
316
300
|
function workspaceGlobs(yamlText) {
|
|
@@ -392,8 +376,7 @@ function checkWorkers(root) {
|
|
|
392
376
|
}
|
|
393
377
|
const blocks = deployMatrixApps(readFileSync(deployApp, "utf8"));
|
|
394
378
|
if (blocks.length !== 1) problems.push(`deploy-app.yaml should define its deploy matrix once; found ${blocks.length}.`);
|
|
395
|
-
const
|
|
396
|
-
for (const block of blocks) if (!sameSet(block, deployed)) problems.push(`deploy-app.yaml's matrix is [${block.join(", ")}]; workers.json implies [${deployed.join(", ")}] (minus ${NOT_IN_DEPLOY_MATRIX.join(", ")}).`);
|
|
379
|
+
for (const block of blocks) if (!sameSet(block, apps)) problems.push(`deploy-app.yaml's matrix is [${block.join(", ")}]; workers.json lists [${apps.join(", ")}].`);
|
|
397
380
|
return problems;
|
|
398
381
|
}
|
|
399
382
|
//#endregion
|
|
@@ -818,7 +801,7 @@ function discoverWranglerConfigs() {
|
|
|
818
801
|
* Imports every app's `cloudflare/scheduled.ts` and returns the parsed
|
|
819
802
|
* `CRON_ROUTES` for each app that has one.
|
|
820
803
|
*
|
|
821
|
-
*
|
|
804
|
+
* An app with no scheduled.ts has no crons; absent is not an error.
|
|
822
805
|
*/
|
|
823
806
|
async function discoverCronMaps() {
|
|
824
807
|
const results = [];
|
|
@@ -2228,7 +2211,6 @@ const SECTION_ORDER = [
|
|
|
2228
2211
|
"platform",
|
|
2229
2212
|
"schedule-builder",
|
|
2230
2213
|
"study-group-finder",
|
|
2231
|
-
"sandbox",
|
|
2232
2214
|
"supabase",
|
|
2233
2215
|
"devtools"
|
|
2234
2216
|
];
|
|
@@ -2236,7 +2218,6 @@ const SECTION_LABELS = {
|
|
|
2236
2218
|
platform: "platform (apps/platform/src/env.ts)",
|
|
2237
2219
|
"schedule-builder": "schedule-builder (apps/schedule-builder/src/env.ts)",
|
|
2238
2220
|
"study-group-finder": "study-group-finder (apps/study-group-finder/env.ts)",
|
|
2239
|
-
sandbox: "sandbox — a dormant Worker's bindings; nothing provisions or deploys it from the platform side any more (apps/sandbox/env.ts)",
|
|
2240
2221
|
supabase: "supabase — read by config.toml and the Supabase CLI (supabase/env.ts)",
|
|
2241
2222
|
devtools: "devtools — operator tooling, no app reads these (@devdogsuga/devtools)"
|
|
2242
2223
|
};
|
|
@@ -2245,13 +2226,12 @@ function sectionOf(source) {
|
|
|
2245
2226
|
return source.split(":")[0];
|
|
2246
2227
|
}
|
|
2247
2228
|
/**
|
|
2248
|
-
* The sections a development init may narrow to: the
|
|
2229
|
+
* The sections a development init may narrow to: the three apps.
|
|
2249
2230
|
*
|
|
2250
2231
|
* Order is the PICKER's order, not the file's (that is `SECTION_ORDER`, fixed
|
|
2251
2232
|
* so `.env.example` stays byte-stable). The two projects most contributors
|
|
2252
2233
|
* join come first; `platform` follows as the shared auth infrastructure you
|
|
2253
|
-
* depend on but rarely edit
|
|
2254
|
-
* nobody touches.
|
|
2234
|
+
* depend on but rarely edit.
|
|
2255
2235
|
*
|
|
2256
2236
|
* `supabase` is NOT here and NOT optional. It is the shared database and auth
|
|
2257
2237
|
* layer every app runs against, so any selection implies it (the caller adds
|
|
@@ -2262,8 +2242,7 @@ function sectionOf(source) {
|
|
|
2262
2242
|
const APP_SECTIONS = [
|
|
2263
2243
|
"schedule-builder",
|
|
2264
2244
|
"study-group-finder",
|
|
2265
|
-
"platform"
|
|
2266
|
-
"sandbox"
|
|
2245
|
+
"platform"
|
|
2267
2246
|
];
|
|
2268
2247
|
/**
|
|
2269
2248
|
* Every declared key belonging to one of the chosen sections.
|
|
@@ -2522,8 +2501,7 @@ async function resolveSections(apps) {
|
|
|
2522
2501
|
const APP_HINTS = {
|
|
2523
2502
|
"schedule-builder": "the DogDays course-schedule planner (Next.js)",
|
|
2524
2503
|
"study-group-finder": "the Dog Pack study-group app (Flutter)",
|
|
2525
|
-
platform: "shared auth server — needed only if you run it locally for sign-in; usually you don't edit it"
|
|
2526
|
-
sandbox: "dormant Worker — no platform integration left; almost never touched"
|
|
2504
|
+
platform: "shared auth server — needed only if you run it locally for sign-in; usually you don't edit it"
|
|
2527
2505
|
};
|
|
2528
2506
|
const chosen = unwrap(await multiselect({
|
|
2529
2507
|
message: "Which projects are you working on? (The shared Supabase stack is always included; re-run init later to add more.)",
|
|
@@ -5184,7 +5162,7 @@ async function runDev(plan, filters, rest, tierEnv) {
|
|
|
5184
5162
|
"run",
|
|
5185
5163
|
"build"
|
|
5186
5164
|
], tierEnv, { final: false });
|
|
5187
|
-
const { scopedProcessEnv } = await import("./local-env-
|
|
5165
|
+
const { scopedProcessEnv } = await import("./local-env-CR3McKHZ.js");
|
|
5188
5166
|
const environment = {
|
|
5189
5167
|
...process.env,
|
|
5190
5168
|
...tierEnv
|
|
@@ -5632,8 +5610,7 @@ async function runSetup() {
|
|
|
5632
5610
|
if (sections) chosenApps = [
|
|
5633
5611
|
"schedule-builder",
|
|
5634
5612
|
"study-group-finder",
|
|
5635
|
-
"platform"
|
|
5636
|
-
"sandbox"
|
|
5613
|
+
"platform"
|
|
5637
5614
|
].filter((app) => sections.has(app));
|
|
5638
5615
|
writeFileSync(env, renderInit("development", (/* @__PURE__ */ new Date()).toISOString().slice(0, 10), sections), { flag: "wx" });
|
|
5639
5616
|
log.success("Created .env (same as `pnpm devtools env init`)");
|
|
@@ -5819,11 +5796,6 @@ const handleSetup = async () => {
|
|
|
5819
5796
|
* `dist/` output, so on a fresh clone `vinext build` fails to load
|
|
5820
5797
|
* `next.config.ts` without them.
|
|
5821
5798
|
*/
|
|
5822
|
-
/** Apps deployed without a framework build: Wrangler bundles `main` itself. */
|
|
5823
|
-
const NO_FRAMEWORK_BUILD = /* @__PURE__ */ new Set(["sandbox"]);
|
|
5824
|
-
function needsFrameworkBuild(app) {
|
|
5825
|
-
return !NO_FRAMEWORK_BUILD.has(app);
|
|
5826
|
-
}
|
|
5827
5799
|
function workspaceDepsBuildCommand(app) {
|
|
5828
5800
|
return [
|
|
5829
5801
|
"-r",
|
|
@@ -5941,18 +5913,6 @@ async function waitForLocalWorkflow(workflowName, instanceId, port, options = {}
|
|
|
5941
5913
|
process.stderr.write(`devtools workflows run: Workflow ${instanceId} did not finish within ${Math.round(timeoutMs / 6e4)} minutes.\n`);
|
|
5942
5914
|
return 1;
|
|
5943
5915
|
}
|
|
5944
|
-
function wranglerDevArgs(app, port) {
|
|
5945
|
-
return [
|
|
5946
|
-
"--filter",
|
|
5947
|
-
app,
|
|
5948
|
-
"exec",
|
|
5949
|
-
"wrangler",
|
|
5950
|
-
"dev",
|
|
5951
|
-
"--port",
|
|
5952
|
-
port,
|
|
5953
|
-
"--show-interactive-dev-session=false"
|
|
5954
|
-
];
|
|
5955
|
-
}
|
|
5956
5916
|
/** `vinext dev` bound to loopback, where `isWranglerDevRunning` probes. */
|
|
5957
5917
|
function vinextDevArgs(app, port) {
|
|
5958
5918
|
return [
|
|
@@ -6058,7 +6018,7 @@ async function startTemporaryWrangler(app, requestedPort) {
|
|
|
6058
6018
|
process.stdout.write(`Port ${requestedPort} is in use; starting the temporary dev session on ${free} instead.\n`);
|
|
6059
6019
|
port = String(free);
|
|
6060
6020
|
}
|
|
6061
|
-
const runtime =
|
|
6021
|
+
const runtime = "vinext dev";
|
|
6062
6022
|
process.stdout.write(`Preparing and starting a temporary ${runtime} session for ${app} on port ${port}…\n`);
|
|
6063
6023
|
let loaded;
|
|
6064
6024
|
try {
|
|
@@ -6075,16 +6035,11 @@ async function startTemporaryWrangler(app, requestedPort) {
|
|
|
6075
6035
|
process.stderr.write(`devtools workflows: building ${app}'s workspace dependencies failed (exit ${buildCode}); not starting ${runtime}.\n`);
|
|
6076
6036
|
return null;
|
|
6077
6037
|
}
|
|
6078
|
-
const
|
|
6079
|
-
const child = spawn("pnpm", runtimeEnv ? [
|
|
6080
|
-
...wranglerDevArgs(app, port),
|
|
6081
|
-
"--env-file",
|
|
6082
|
-
runtimeEnv.path
|
|
6083
|
-
] : vinextDevArgs(app, port), {
|
|
6038
|
+
const child = spawn("pnpm", vinextDevArgs(app, port), {
|
|
6084
6039
|
cwd: findRepoRoot(),
|
|
6085
6040
|
stdio: "inherit",
|
|
6086
6041
|
detached: process.platform !== "win32",
|
|
6087
|
-
|
|
6042
|
+
env: await scopedProcessEnv(app, loaded.env, "development")
|
|
6088
6043
|
});
|
|
6089
6044
|
let startupError;
|
|
6090
6045
|
child.once("error", (error) => {
|
|
@@ -6096,19 +6051,16 @@ async function startTemporaryWrangler(app, requestedPort) {
|
|
|
6096
6051
|
process.stdout.write(`${runtime} is ready.\n`);
|
|
6097
6052
|
const stopOnParentExit = () => {
|
|
6098
6053
|
signalProcessGroup(child, "SIGTERM");
|
|
6099
|
-
runtimeEnv?.remove();
|
|
6100
6054
|
};
|
|
6101
6055
|
process.once("exit", stopOnParentExit);
|
|
6102
6056
|
return {
|
|
6103
6057
|
stop: async () => {
|
|
6104
6058
|
process.off("exit", stopOnParentExit);
|
|
6105
6059
|
await stopTemporaryWrangler(child);
|
|
6106
|
-
runtimeEnv?.remove();
|
|
6107
6060
|
},
|
|
6108
6061
|
forceStop: () => {
|
|
6109
6062
|
process.off("exit", stopOnParentExit);
|
|
6110
6063
|
signalProcessGroup(child, "SIGKILL");
|
|
6111
|
-
runtimeEnv?.remove();
|
|
6112
6064
|
},
|
|
6113
6065
|
port
|
|
6114
6066
|
};
|
|
@@ -6116,13 +6068,11 @@ async function startTemporaryWrangler(app, requestedPort) {
|
|
|
6116
6068
|
if (startupError || child.exitCode !== null || child.signalCode !== null) {
|
|
6117
6069
|
const how = startupError ? `: ${startupError.message}` : child.signalCode !== null ? ` (killed by ${child.signalCode}).` : ` (exit ${child.exitCode}).`;
|
|
6118
6070
|
process.stderr.write(`devtools workflows run: ${runtime} stopped before it became ready${how}\n`);
|
|
6119
|
-
runtimeEnv?.remove();
|
|
6120
6071
|
return null;
|
|
6121
6072
|
}
|
|
6122
6073
|
await setTimeout$1(250);
|
|
6123
6074
|
}
|
|
6124
6075
|
await stopTemporaryWrangler(child);
|
|
6125
|
-
runtimeEnv?.remove();
|
|
6126
6076
|
process.stderr.write(`devtools workflows run: ${runtime} did not become ready on port ${port} within ${WRANGLER_READY_TIMEOUT_MS / 6e4} minutes.\n`);
|
|
6127
6077
|
return null;
|
|
6128
6078
|
}
|
package/dist/launch.js
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { a as cliName, t as installFailureLog } from "./failure-log-BBPGejQv.js";
|
|
2
|
-
import { C as catalog, S as unwrap, _ as setMenuEnvHook, d as nonEmpty, g as realEnvEntryDeps, h as enterSessionEnvironment, t as bareGroupStartPath, w as helpPath, y as errorMessage } from "./menu-
|
|
2
|
+
import { C as catalog, S as unwrap, _ as setMenuEnvHook, d as nonEmpty, g as realEnvEntryDeps, h as enterSessionEnvironment, t as bareGroupStartPath, w as helpPath, y as errorMessage } from "./menu-DnqlX22U.js";
|
|
3
3
|
import { b as setDryRun, m as formatCommand, v as isDryRun, y as resolveDryRun } from "./supabase-project-0knM0mqd.js";
|
|
4
4
|
import { n as discoverRepoRoot, r as findRepoRoot, t as RepoNotFoundError } from "./root-C2OmZDwD.js";
|
|
5
5
|
import { i as loadEnvSession, r as loadEnvLoad } from "./peers-RBplwovA.js";
|
|
6
|
-
import { d as hasYes, f as isNonInteractive, m as stripTierFlag, n as captureDevtoolsError, o as initDevtoolsTelemetry, p as stripNoEnvFlag, s as lastSentryEventId } from "./telemetry-
|
|
6
|
+
import { d as hasYes, f as isNonInteractive, m as stripTierFlag, n as captureDevtoolsError, o as initDevtoolsTelemetry, p as stripNoEnvFlag, s as lastSentryEventId } from "./telemetry-El7OainP.js";
|
|
7
7
|
import { confirm, select } from "@clack/prompts";
|
|
8
8
|
//#region ../cli-core/src/session.ts
|
|
9
9
|
/**
|
|
@@ -166,7 +166,7 @@ async function startStack() {
|
|
|
166
166
|
* post-tier-resolution path.
|
|
167
167
|
*/
|
|
168
168
|
async function dispatch(argv) {
|
|
169
|
-
const { main } = await import("./cli-
|
|
169
|
+
const { main } = await import("./cli-Bb-Lzg-l.js");
|
|
170
170
|
try {
|
|
171
171
|
await main(argv);
|
|
172
172
|
} catch (err) {
|
|
@@ -1,9 +1,8 @@
|
|
|
1
1
|
import { i as ownPackageDir, r as findRepoRoot } from "./root-C2OmZDwD.js";
|
|
2
2
|
import { a as repoPeerUrl, n as loadEnv, t as getEnvSync } from "./peers-RBplwovA.js";
|
|
3
3
|
import { register } from "node:module";
|
|
4
|
-
import { existsSync,
|
|
4
|
+
import { existsSync, readdirSync } from "node:fs";
|
|
5
5
|
import { join } from "node:path";
|
|
6
|
-
import { tmpdir } from "node:os";
|
|
7
6
|
import { pathToFileURL } from "node:url";
|
|
8
7
|
//#region ../cli-core/src/repo/peer-redirect.ts
|
|
9
8
|
/**
|
|
@@ -117,16 +116,12 @@ async function importRepoTs(absolutePath) {
|
|
|
117
116
|
* Most workspace packages declare nothing, so "no env.ts found" means
|
|
118
117
|
* not-a-manifest rather than an error.
|
|
119
118
|
*
|
|
120
|
-
* ⚠️
|
|
121
|
-
*
|
|
122
|
-
*
|
|
123
|
-
*
|
|
124
|
-
*
|
|
125
|
-
*
|
|
126
|
-
* `SANDBOX_PROXY_TOKEN`, minted at deploy time and therefore in no Bitwarden
|
|
127
|
-
* project by design, was reported as an orphan, i.e. as safe for the §3.6 prune
|
|
128
|
-
* path to delete. `apps/sandbox/env.ts` exists now, and states that reasoning
|
|
129
|
-
* at length.
|
|
119
|
+
* ⚠️ A Worker still needs a manifest, even though its bindings arrive as a
|
|
120
|
+
* function argument rather than `process.env`: a manifest is the only thing
|
|
121
|
+
* that routes a credential to a deployed environment and the only thing that
|
|
122
|
+
* tells `env audit` a Worker secret is supposed to be there. Without one, a
|
|
123
|
+
* minted secret (in no Bitwarden project by design) is reported as an orphan,
|
|
124
|
+
* i.e. as safe for the §3.6 prune path to delete.
|
|
130
125
|
*/
|
|
131
126
|
/**
|
|
132
127
|
* The single in-flight (or settled) load.
|
|
@@ -245,12 +240,6 @@ function manifestIn(dir) {
|
|
|
245
240
|
}
|
|
246
241
|
//#endregion
|
|
247
242
|
//#region src/cf/local-env.ts
|
|
248
|
-
function renderWranglerEnvFile(keys, environment) {
|
|
249
|
-
return keys.flatMap((key) => {
|
|
250
|
-
const value = environment[key];
|
|
251
|
-
return value === void 0 ? [] : [`${key}='${value}'`];
|
|
252
|
-
}).join("\n") + "\n";
|
|
253
|
-
}
|
|
254
243
|
/** The app's declared keys, deduped and sorted, from the given entries or the
|
|
255
244
|
* loaded registry.
|
|
256
245
|
*
|
|
@@ -303,49 +292,5 @@ async function scopedProcessEnv(app, environment, tier, entries) {
|
|
|
303
292
|
scoped.CLOUDFLARE_INCLUDE_PROCESS_ENV = "true";
|
|
304
293
|
return scoped;
|
|
305
294
|
}
|
|
306
|
-
/** Writes the mode-0600 `.dev.vars` into a fresh private temp directory. */
|
|
307
|
-
function materializeEnvFile(keys, environment) {
|
|
308
|
-
const directory = mkdtempSync(join(tmpdir(), "devtools-wrangler-env-"));
|
|
309
|
-
const path = join(directory, ".dev.vars");
|
|
310
|
-
writeFileSync(path, renderWranglerEnvFile(keys, environment), {
|
|
311
|
-
encoding: "utf8",
|
|
312
|
-
mode: 384
|
|
313
|
-
});
|
|
314
|
-
return {
|
|
315
|
-
directory,
|
|
316
|
-
path
|
|
317
|
-
};
|
|
318
|
-
}
|
|
319
|
-
/**
|
|
320
|
-
* Create an app-scoped, mode-0600 env file for a local Worker runtime whose
|
|
321
|
-
* lifetime a single bracket callback cannot express.
|
|
322
|
-
*
|
|
323
|
-
* ⚠️ KEPT DELIBERATELY, not an oversight: `workflows/commands.ts` holds this
|
|
324
|
-
* file open across a long-lived `wrangler dev` child process, and in the
|
|
325
|
-
* `workflows run` temporary-session path that span crosses a `finally` that
|
|
326
|
-
* is unrelated to starting Wrangler at all — it also triggers a Workflow and
|
|
327
|
-
* polls for its completion before the session stops. Squeezing that into a
|
|
328
|
-
* single `withWranglerEnv` callback would mean merging two previously
|
|
329
|
-
* independent concerns (spinning up a dev session; triggering-and-waiting)
|
|
330
|
-
* into one control path, which is a real redesign of a 700-line orchestrator,
|
|
331
|
-
* not a mechanical bracket swap — and duplicating this function's
|
|
332
|
-
* retry/readiness loop across a bracket-shaped variant just to convert the
|
|
333
|
-
* `workflows serve` half would fragment one shared, tested implementation
|
|
334
|
-
* into two for no behavioural gain.
|
|
335
|
-
*
|
|
336
|
-
* `env` mirrors `withWranglerEnv`'s `options.env`: pass a tier's loaded map to
|
|
337
|
-
* materialize a scoped file from THAT tier rather than the inherited process
|
|
338
|
-
* environment; omit it to keep today's behavior.
|
|
339
|
-
*/
|
|
340
|
-
async function createTemporaryWranglerEnv(app, env) {
|
|
341
|
-
const { directory, path } = materializeEnvFile(await scopedKeys(app), env ?? process.env);
|
|
342
|
-
return {
|
|
343
|
-
path,
|
|
344
|
-
remove: () => rmSync(directory, {
|
|
345
|
-
recursive: true,
|
|
346
|
-
force: true
|
|
347
|
-
})
|
|
348
|
-
};
|
|
349
|
-
}
|
|
350
295
|
//#endregion
|
|
351
|
-
export {
|
|
296
|
+
export { assertRegistryLoaded as n, loadRegistry as r, scopedProcessEnv as t };
|
|
@@ -2,7 +2,7 @@ import { c as YES, i as suppressFailureLog, l as createCatalog, o as JSON_FLAG,
|
|
|
2
2
|
import { a as listContainerNames, i as foreignStackProjectId, n as containerPrefix, o as readProjectId, p as supabaseCapture, r as foreignStackMessage, t as STACK_API_PORT } from "./supabase-project-0knM0mqd.js";
|
|
3
3
|
import { r as findRepoRoot } from "./root-C2OmZDwD.js";
|
|
4
4
|
import { n as loadEnv, r as loadEnvLoad } from "./peers-RBplwovA.js";
|
|
5
|
-
import { c as reportDevtoolsError, f as isNonInteractive } from "./telemetry-
|
|
5
|
+
import { c as reportDevtoolsError, f as isNonInteractive } from "./telemetry-El7OainP.js";
|
|
6
6
|
import { cancel, confirm, isCancel, log, note, select, text } from "@clack/prompts";
|
|
7
7
|
import { existsSync } from "node:fs";
|
|
8
8
|
import { writeFile } from "node:fs/promises";
|
|
@@ -78,8 +78,8 @@ function stripTierFlag(argv) {
|
|
|
78
78
|
//#region ../cli-core/src/telemetry.ts
|
|
79
79
|
/**
|
|
80
80
|
* devtools' own Sentry wiring — the CLI is a consumer of
|
|
81
|
-
* `@devdogsuga/telemetry` like `apps/platform
|
|
82
|
-
*
|
|
81
|
+
* `@devdogsuga/telemetry` like `apps/platform` and `apps/schedule-builder`,
|
|
82
|
+
* but on `@sentry/node` rather than a framework SDK: a CLI
|
|
83
83
|
* process starts, runs one command, and exits, with none of a server's
|
|
84
84
|
* request lifecycle for a framework integration to hook into.
|
|
85
85
|
*
|
package/dist/telemetry.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { a as hasRealCaller, c as reportDevtoolsError, i as devtoolsTelemetryEnabled, l as reportDevtoolsFailure, n as captureDevtoolsError, o as initDevtoolsTelemetry, r as devtoolsEnvironment, s as lastSentryEventId, t as captureDevtoolsDeprecation, u as resolveDevtoolsDsn } from "./telemetry-
|
|
1
|
+
import { a as hasRealCaller, c as reportDevtoolsError, i as devtoolsTelemetryEnabled, l as reportDevtoolsFailure, n as captureDevtoolsError, o as initDevtoolsTelemetry, r as devtoolsEnvironment, s as lastSentryEventId, t as captureDevtoolsDeprecation, u as resolveDevtoolsDsn } from "./telemetry-El7OainP.js";
|
|
2
2
|
export { captureDevtoolsDeprecation, captureDevtoolsError, devtoolsEnvironment, devtoolsTelemetryEnabled, hasRealCaller, initDevtoolsTelemetry, lastSentryEventId, reportDevtoolsError, reportDevtoolsFailure, resolveDevtoolsDsn };
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@devdogsuga/devtools",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.35",
|
|
4
4
|
"private": false,
|
|
5
5
|
"type": "module",
|
|
6
6
|
"description": "Contributor CLI for a DevDogsUGA checkout: the real tools with the session's tier filled in, a menu over them, and the checks CI runs. Ships built JS; run via `pnpm dlx @devdogsuga/devtools` (or the `devtools` bin once installed) from inside a DevDogsUGA clone.",
|
|
@@ -31,7 +31,7 @@
|
|
|
31
31
|
"tsx": "^4.23.12",
|
|
32
32
|
"typescript": "^6.0.3",
|
|
33
33
|
"zod": "4.4.3",
|
|
34
|
-
"@devdogsuga/telemetry": "0.1.
|
|
34
|
+
"@devdogsuga/telemetry": "0.1.4"
|
|
35
35
|
},
|
|
36
36
|
"peerDependencies": {
|
|
37
37
|
"@devdogsuga/db": "*",
|
|
@@ -52,9 +52,9 @@
|
|
|
52
52
|
"tsdown": "^0.23.0",
|
|
53
53
|
"vitest": "^4.1.11",
|
|
54
54
|
"@devdogsuga/cli-core": "0.0.0",
|
|
55
|
-
"@devdogsuga/db": "0.1.3",
|
|
56
55
|
"@devdogsuga/env": "0.1.5",
|
|
57
|
-
"@devdogsuga/config": "0.1.2"
|
|
56
|
+
"@devdogsuga/config": "0.1.2",
|
|
57
|
+
"@devdogsuga/db": "0.1.3"
|
|
58
58
|
},
|
|
59
59
|
"scripts": {
|
|
60
60
|
"build": "tsdown && node scripts/write-build-info.mjs && node ../../scripts/check-bundle-imports.mjs",
|