@varlock/cloudflare-integration 1.1.1 → 1.1.3

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.
@@ -3,7 +3,7 @@ import { join } from 'path';
3
3
  import { tmpdir } from 'os';
4
4
  import { randomBytes } from 'crypto';
5
5
  import { spawn, execSync } from 'child_process';
6
- import { execSyncVarlock } from 'varlock/exec-sync-varlock';
6
+ import { VarlockExecError, execSyncVarlock } from 'varlock/exec-sync-varlock';
7
7
 
8
8
  // src/varlock-wrangler.ts
9
9
  var isWindows = process.platform === "win32";
@@ -173,9 +173,12 @@ function formatEnvFileContent(graph) {
173
173
  addVarlockEnvToLines(lines, graph.json);
174
174
  return lines.join("\n");
175
175
  }
176
+ function isVersionsUploadCommand(args) {
177
+ return args[0] === "versions" && args[1] === "upload";
178
+ }
176
179
  function isDeployCommand(args) {
177
180
  if (args[0] === "deploy") return true;
178
- if (args[0] === "versions" && args[1] === "upload") return true;
181
+ if (isVersionsUploadCommand(args)) return true;
179
182
  return false;
180
183
  }
181
184
  function isTypesCommand(args) {
@@ -191,8 +194,9 @@ async function handleDeploy(args) {
191
194
  let loaded;
192
195
  try {
193
196
  loaded = loadSerializedGraph();
194
- } catch {
195
- console.error("Failed to resolve environment variables");
197
+ } catch (err) {
198
+ if (err instanceof VarlockExecError && err.stderr) process.stderr.write(err.stderr);
199
+ console.error("\n[varlock-wrangler] Failed to resolve environment variables\n");
196
200
  process.exitCode = 1;
197
201
  return;
198
202
  }
@@ -229,21 +233,25 @@ async function handleDeploy(args) {
229
233
  let exitCode = process.exitCode ?? 0;
230
234
  try {
231
235
  debug("deploy: spawning wrangler");
232
- exitCode = await spawnWrangler([...args, ...varFlags, "--secrets-file", tmp.filePath, "--keep-vars=false"]);
236
+ const wranglerArgs = [...args, ...varFlags, "--secrets-file", tmp.filePath];
237
+ if (!isVersionsUploadCommand(args)) wranglerArgs.push("--keep-vars=false");
238
+ exitCode = await spawnWrangler(wranglerArgs);
233
239
  debug("deploy: wrangler exited with code", exitCode);
234
240
  } finally {
235
241
  debug("deploy: cleaning up");
236
242
  handle.stop();
237
243
  tmp.cleanup();
238
244
  }
245
+ process.exitCode = exitCode;
239
246
  }
240
247
  async function handleTypes(args) {
241
248
  debug("types: resolving env");
242
249
  let loaded;
243
250
  try {
244
251
  loaded = loadSerializedGraph();
245
- } catch {
246
- console.error("Failed to resolve environment variables");
252
+ } catch (err) {
253
+ if (err instanceof VarlockExecError && err.stderr) process.stderr.write(err.stderr);
254
+ console.error("\n[varlock-wrangler] Failed to resolve environment variables\n");
247
255
  process.exitCode = 1;
248
256
  return;
249
257
  }
@@ -265,6 +273,7 @@ async function handleTypes(args) {
265
273
  handle.stop();
266
274
  tmp.cleanup();
267
275
  }
276
+ process.exitCode = exitCode;
268
277
  }
269
278
  async function handleDev(args) {
270
279
  if (existsSync(".dev.vars")) {
@@ -278,18 +287,33 @@ async function handleDev(args) {
278
287
  }
279
288
  debug("dev: resolving env");
280
289
  let loaded;
290
+ let configIsValid = false;
281
291
  try {
282
292
  loaded = loadSerializedGraph();
293
+ configIsValid = true;
283
294
  } catch (err) {
284
- console.error("Failed to resolve environment variables");
285
- console.error(err);
295
+ if (err instanceof VarlockExecError) {
296
+ if (err.stderr) process.stderr.write(err.stderr);
297
+ if (err.stdout) {
298
+ try {
299
+ const parsed = JSON.parse(err.stdout);
300
+ loaded = { json: err.stdout, graph: parsed };
301
+ } catch {
302
+ }
303
+ }
304
+ }
305
+ console.error("\n[varlock-wrangler] \u26A0\uFE0F config is invalid \u2014 fix the error(s) above and save to reload\n");
306
+ }
307
+ if (!loaded) {
308
+ console.error("[varlock-wrangler] Failed to parse env \u2014 cannot start dev server");
286
309
  process.exitCode = 1;
287
310
  return;
288
311
  }
289
- debug("dev: resolved", Object.keys(loaded.graph.config).length, "env vars");
312
+ debug("dev: resolved", Object.keys(loaded.graph.config).length, "env vars, valid =", configIsValid);
290
313
  const tmp = createServingTempFile("varlock-dev-env");
291
314
  debug("dev: created FIFO at", tmp.filePath);
292
- let cachedContent = formatEnvFileContent(loaded);
315
+ let cachedContent = configIsValid ? formatEnvFileContent(loaded) : `${formatEnvLine("__VARLOCK_ENV", loaded.json)}
316
+ `;
293
317
  let wranglerChild;
294
318
  const watchers = [];
295
319
  debug("dev: starting FIFO serve");
@@ -327,14 +351,34 @@ async function handleDev(args) {
327
351
  }
328
352
  cachedGraphJson = freshLoaded.json;
329
353
  loaded = freshLoaded;
354
+ configIsValid = true;
330
355
  lastRestartAt = now;
331
356
  cachedContent = formatEnvFileContent(freshLoaded);
332
357
  handle.update(cachedContent);
333
358
  console.log("[varlock-wrangler] env changed, restarting wrangler...");
334
359
  wranglerChild?.kill();
335
360
  } catch (err) {
361
+ configIsValid = false;
362
+ if (err instanceof VarlockExecError) {
363
+ if (err.stderr) process.stderr.write(err.stderr);
364
+ if (err.stdout) {
365
+ try {
366
+ const parsed = JSON.parse(err.stdout);
367
+ loaded = { json: err.stdout, graph: parsed };
368
+ cachedGraphJson = err.stdout;
369
+ cachedContent = `${formatEnvLine("__VARLOCK_ENV", err.stdout)}
370
+ `;
371
+ handle.update(cachedContent);
372
+ lastRestartAt = Date.now();
373
+ console.error("\n[varlock-wrangler] \u26A0\uFE0F config is invalid \u2014 fix the error(s) above and save to reload\n");
374
+ wranglerChild?.kill();
375
+ return;
376
+ } catch {
377
+ }
378
+ }
379
+ }
336
380
  restartTimeout = void 0;
337
- console.error("[varlock-wrangler] failed to re-resolve env:", err.message);
381
+ console.error("\n[varlock-wrangler] \u26A0\uFE0F config is invalid \u2014 fix the error(s) above and save to reload\n");
338
382
  }
339
383
  }, DEBOUNCE_MS);
340
384
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/varlock-wrangler.ts"],"names":[],"mappings":"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","file":"varlock-wrangler.js","sourcesContent":["/* eslint-disable no-console */\n\nimport {\n writeFileSync, unlinkSync, watch, existsSync,\n} from 'node:fs';\nimport { join } from 'node:path';\nimport { tmpdir } from 'node:os';\nimport { randomBytes } from 'node:crypto';\nimport { spawn, execSync } from 'node:child_process';\n\nimport { execSyncVarlock } from 'varlock/exec-sync-varlock';\n\nconst isWindows = process.platform === 'win32';\nconst debugEnabled = !!process.env.VARLOCK_DEBUG;\nfunction debug(...args: Array<any>) {\n if (debugEnabled) console.log('[varlock-wrangler]', ...args);\n}\n\n/** Detect the package manager exec command from npm_config_user_agent */\nfunction getExecPrefix(): string {\n const ua = process.env.npm_config_user_agent || '';\n if (ua.startsWith('pnpm/')) return 'pnpm exec ';\n if (ua.startsWith('yarn/')) return 'yarn exec ';\n if (ua.startsWith('bun/')) return 'bunx ';\n if (ua.startsWith('npm/')) return 'npx ';\n return '';\n}\n\n// --- shared helpers ---\n\nfunction spawnWrangler(args: Array<string>): Promise<number> {\n return new Promise((resolve, reject) => {\n const child = spawn('wrangler', args, {\n stdio: 'inherit',\n shell: isWindows,\n });\n child.on('error', (err) => {\n if ((err as any).code === 'ENOENT') {\n console.error('Error: wrangler not found. Install it with your package manager:');\n console.error(' Install it with your package manager, e.g.: npm install wrangler');\n }\n reject(err);\n });\n child.on('exit', (code, signal) => {\n resolve(code ?? (signal ? 1 : 0));\n });\n });\n}\n\nfunction loadSerializedGraph() {\n const { stdout } = execSyncVarlock('load --format json-full --compact', { fullResult: true });\n return {\n json: stdout,\n graph: JSON.parse(stdout) as {\n basePath?: string,\n sources: Array<{ label: string, enabled: boolean, path?: string }>,\n config: Record<string, { value: unknown, isSensitive: boolean }>,\n },\n };\n}\n\nfunction tmpPath(prefix: string) {\n return join(tmpdir(), `${prefix}-${randomBytes(8).toString('hex')}`);\n}\n\n/**\n * Creates a named pipe (FIFO) for long-running commands (dev).\n * On Unix: data only exists in a kernel buffer — secrets never touch disk.\n * On Windows: falls back to a regular temp file.\n */\nfunction createServingTempFile(prefix: string) {\n const filePath = tmpPath(prefix);\n\n if (!isWindows) {\n execSync(`mkfifo -m 0600 \"${filePath}\"`);\n }\n\n function cleanup() {\n try {\n unlinkSync(filePath);\n } catch {\n // may already be deleted\n }\n }\n\n /**\n * Start serving content via the FIFO (or write a regular file on Windows).\n * On Unix: spawns a child process that writes to the FIFO in a loop.\n * Using a child process means the blocked libuv thread lives in the child —\n * killing the child cleanly releases it, allowing our main process to exit.\n * On Windows: writes a regular file, with refresh() to update it.\n */\n function startServing(getContent: () => string) {\n if (isWindows) {\n writeFileSync(filePath, getContent());\n return {\n update(content: string) { writeFileSync(filePath, content); },\n stop() {\n /* noop on Windows */\n },\n };\n }\n\n // spawn a child process to serve the FIFO\n // the child reads content from stdin, then writes it to the FIFO in a loop\n const fifoServer = spawn(process.execPath, [\n '-e', `\n const fs = require('fs');\n const path = ${JSON.stringify(filePath)};\n let content = '';\n process.stdin.on('data', d => content += d);\n process.stdin.on('end', () => {\n (function serve() {\n try { fs.writeFileSync(path, content); setImmediate(serve); }\n catch { process.exit(); }\n })();\n });\n `,\n ], {\n stdio: ['pipe', 'ignore', 'ignore'],\n });\n fifoServer.stdin!.write(getContent());\n fifoServer.stdin!.end();\n\n return {\n /** Kill and respawn the FIFO server with new content */\n update(content: string) {\n fifoServer.kill();\n const replacement = startServing(() => content);\n // swap the stop/update methods on this handle\n this.stop = replacement.stop;\n this.update = replacement.update;\n },\n stop() {\n fifoServer.kill();\n },\n };\n }\n\n return {\n filePath, cleanup, startServing,\n };\n}\n\n// Cloudflare secrets are limited to 5KB each.\n// __VARLOCK_ENV can exceed this, so we split it into chunks.\nconst CF_SECRET_MAX_BYTES = 5120;\n\n/**\n * Split a string into chunks where each chunk's UTF-8 byte length ≤ maxBytes.\n * Unlike slicing a Buffer, this never splits a multi-byte character.\n */\nfunction chunkString(str: string, maxBytes: number): Array<string> {\n const chunks: Array<string> = [];\n let current = '';\n let currentBytes = 0;\n for (const char of str) {\n const charBytes = Buffer.byteLength(char);\n if (currentBytes + charBytes > maxBytes && current) {\n chunks.push(current);\n current = '';\n currentBytes = 0;\n }\n current += char;\n currentBytes += charBytes;\n }\n if (current) chunks.push(current);\n return chunks;\n}\n\nfunction formatEnvLine(key: string, value: string): string {\n if (!value.includes(\"'\")) {\n // single quotes — literal, no escaping needed\n return `${key}='${value}'`;\n }\n // fall back to double quotes with escaping\n const escaped = value.replace(/\\\\/g, '\\\\\\\\').replace(/\"/g, '\\\\\"').replace(/\\n/g, '\\\\n');\n return `${key}=\"${escaped}\"`;\n}\n\n/**\n * Adds __VARLOCK_ENV to a key-value record, splitting into chunks if needed.\n * If the value fits in one secret: sets __VARLOCK_ENV directly.\n * If too large: sets __VARLOCK_ENV_CHUNKS=N and __VARLOCK_ENV_0, __VARLOCK_ENV_1, etc.\n */\nfunction addVarlockEnvToRecord(record: Record<string, string>, json: string) {\n if (Buffer.byteLength(json) <= CF_SECRET_MAX_BYTES) {\n record.__VARLOCK_ENV = json;\n return;\n }\n const chunks = chunkString(json, CF_SECRET_MAX_BYTES);\n record.__VARLOCK_ENV_CHUNKS = String(chunks.length);\n for (let i = 0; i < chunks.length; i++) {\n record[`__VARLOCK_ENV_${i}`] = chunks[i];\n }\n debug(`__VARLOCK_ENV split into ${chunks.length} chunks (${Buffer.byteLength(json)} bytes)`);\n}\n\n/**\n * Adds __VARLOCK_ENV lines to a dotenv-format array, splitting into chunks if needed.\n */\nfunction addVarlockEnvToLines(lines: Array<string>, json: string) {\n if (Buffer.byteLength(json) <= CF_SECRET_MAX_BYTES) {\n lines.push(formatEnvLine('__VARLOCK_ENV', json));\n return;\n }\n const chunks = chunkString(json, CF_SECRET_MAX_BYTES);\n lines.push(formatEnvLine('__VARLOCK_ENV_CHUNKS', String(chunks.length)));\n for (let i = 0; i < chunks.length; i++) {\n lines.push(formatEnvLine(`__VARLOCK_ENV_${i}`, chunks[i]));\n }\n debug(`__VARLOCK_ENV split into ${chunks.length} chunks (${Buffer.byteLength(json)} bytes)`);\n}\n\nfunction formatEnvFileContent(graph: ReturnType<typeof loadSerializedGraph>) {\n // output as dotenv format using single quotes — single-quoted values are\n // treated as literal strings with no escape processing, which avoids issues\n // with double quotes in JSON blobs and special characters in values.\n // values containing single quotes are double-quoted with escaping instead.\n const lines: Array<string> = [\n '# ⚠️ AUTO-GENERATED BY VARLOCK — DO NOT EDIT',\n `# ${isWindows ? 'This is a temporary file and will be cleaned up automatically.' : 'This file is served via a named pipe (FIFO) and exists only in memory.'}`,\n '# Your .env files and .env.schema are the source of truth.',\n '# See https://varlock.dev/integrations/cloudflare/ for details.',\n '',\n ];\n for (const key in graph.graph.config) {\n const item = graph.graph.config[key];\n if (item.value === undefined) continue;\n const strValue = typeof item.value === 'string' ? item.value : JSON.stringify(item.value);\n lines.push(formatEnvLine(key, strValue));\n }\n // include __VARLOCK_ENV for the varlock runtime (compact JSON, no newlines)\n // split into chunks if it exceeds CF's 5KB secret limit\n addVarlockEnvToLines(lines, graph.json);\n return lines.join('\\n');\n}\n\n// --- command detection ---\n\nfunction isDeployCommand(args: Array<string>) {\n if (args[0] === 'deploy') return true;\n if (args[0] === 'versions' && args[1] === 'upload') return true;\n return false;\n}\n\nfunction isTypesCommand(args: Array<string>) {\n return args[0] === 'types';\n}\n\n// --- command handlers ---\n\nasync function handleDeploy(args: Array<string>) {\n if (args.includes('--secrets-file')) {\n console.error('Error: --secrets-file is managed automatically by varlock-wrangler.');\n console.error('Remove --secrets-file from your command and let varlock handle it.');\n process.exitCode = 1;\n return;\n }\n\n let loaded;\n try {\n loaded = loadSerializedGraph();\n } catch {\n console.error('Failed to resolve environment variables');\n process.exitCode = 1;\n return;\n }\n\n // split resolved vars into:\n // - non-sensitive → --var flags (visible in CF dashboard as environment variables)\n // - sensitive → --secrets-file (stored as CF secrets)\n // - __VARLOCK_ENV blob → always a secret (contains full graph including sensitive values)\n const varFlags: Array<string> = [];\n const secretsObj: Record<string, string> = {};\n\n for (const key in loaded.graph.config) {\n const item = loaded.graph.config[key];\n if (item.value === undefined) continue;\n const strValue = typeof item.value === 'string' ? item.value : JSON.stringify(item.value);\n\n if (item.isSensitive) {\n secretsObj[key] = strValue;\n } else {\n // wrangler splits KEY:VALUE on the first `:` only, so colons in values are safe\n // spawn args array passes newlines/special chars without shell escaping issues\n varFlags.push('--var', `${key}:${strValue}`);\n }\n }\n // split into chunks if it exceeds CF's 5KB secret limit\n addVarlockEnvToRecord(secretsObj, loaded.json);\n\n const tmp = createServingTempFile('varlock-secrets');\n const content = JSON.stringify(secretsObj);\n debug('deploy: starting FIFO serve');\n const handle = tmp.startServing(() => content);\n\n process.on('SIGINT', () => {\n handle.stop();\n tmp.cleanup();\n process.exit(1);\n });\n process.on('SIGTERM', () => {\n handle.stop();\n tmp.cleanup();\n process.exit(1);\n });\n\n const varCount = varFlags.length / 2; // each var is two entries: --var, KEY:VALUE\n // count only user secrets (exclude __VARLOCK_ENV and chunk keys)\n const secretCount = Object.keys(secretsObj).filter((k) => !k.startsWith('__VARLOCK_ENV')).length;\n console.log(`\\x1b[36m✨ Deploying with varlock: ${varCount} var${varCount !== 1 ? 's' : ''}, ${secretCount} secret${secretCount !== 1 ? 's' : ''} 🧙🔒\\x1b[0m`);\n\n let exitCode = process.exitCode ?? 0;\n try {\n debug('deploy: spawning wrangler');\n exitCode = await spawnWrangler([...args, ...varFlags, '--secrets-file', tmp.filePath, '--keep-vars=false']);\n debug('deploy: wrangler exited with code', exitCode);\n } finally {\n debug('deploy: cleaning up');\n handle.stop();\n tmp.cleanup();\n }\n}\n\nasync function handleTypes(args: Array<string>) {\n debug('types: resolving env');\n let loaded;\n try {\n loaded = loadSerializedGraph();\n } catch {\n console.error('Failed to resolve environment variables');\n process.exitCode = 1;\n return;\n }\n\n debug('types: resolved', Object.keys(loaded.graph.config).length, 'env vars');\n // generate a temp env file with just key names (no real values)\n // wrangler types reads this to discover which vars to include in the Env interface\n const envFileLines: Array<string> = [];\n for (const key in loaded.graph.config) {\n envFileLines.push(`${key}=`);\n }\n\n const tmp = createServingTempFile('varlock-types-env');\n debug('types: starting FIFO serve');\n const handle = tmp.startServing(() => envFileLines.join('\\n'));\n\n let exitCode = process.exitCode ?? 0;\n try {\n debug('types: spawning wrangler');\n exitCode = await spawnWrangler([...args, '--env-file', tmp.filePath]);\n debug('types: wrangler exited with code', exitCode);\n } finally {\n debug('types: cleaning up');\n handle.stop();\n tmp.cleanup();\n }\n}\n\nasync function handleDev(args: Array<string>) {\n // .dev.vars would conflict with our env injection via --env-file\n if (existsSync('.dev.vars')) {\n console.error([\n 'Error: a .dev.vars file was detected in your project.',\n 'This conflicts with varlock-wrangler which manages env vars automatically.',\n 'Remove .dev.vars and define your variables in .env files with a .env.schema instead.',\n ].join('\\n'));\n process.exitCode = 1;\n return;\n }\n\n debug('dev: resolving env');\n let loaded;\n try {\n loaded = loadSerializedGraph();\n } catch (err) {\n console.error('Failed to resolve environment variables');\n console.error(err);\n process.exitCode = 1;\n return;\n }\n debug('dev: resolved', Object.keys(loaded.graph.config).length, 'env vars');\n\n const tmp = createServingTempFile('varlock-dev-env');\n debug('dev: created FIFO at', tmp.filePath);\n\n let cachedContent = formatEnvFileContent(loaded);\n let wranglerChild: ReturnType<typeof spawn> | undefined;\n const watchers: Array<ReturnType<typeof watch>> = [];\n\n debug('dev: starting FIFO serve');\n const handle = tmp.startServing(() => cachedContent);\n\n function cleanup() {\n handle.stop();\n for (const w of watchers) w.close();\n tmp.cleanup();\n }\n\n process.on('SIGINT', () => {\n wranglerChild?.kill();\n cleanup();\n process.exit(1);\n });\n process.on('SIGTERM', () => {\n wranglerChild?.kill();\n cleanup();\n process.exit(1);\n });\n\n // watch env source files for changes and restart wrangler with fresh data\n const DEBOUNCE_MS = 300;\n // force a restart if the last save event was more than this long after the previous restart,\n // even when the resolved env is identical — handles repeated saves of an unchanged file\n const FORCE_RESTART_IDLE_MS = 5000;\n let restartTimeout: ReturnType<typeof setTimeout> | undefined;\n let cachedGraphJson = loaded.json;\n let lastRestartAt = Date.now();\n function scheduleRestart() {\n // debounce — multiple files may change at once (e.g. editor saves multiple files,\n // or macOS fs.watch() emits extra events for unchanged files)\n if (restartTimeout) clearTimeout(restartTimeout);\n restartTimeout = setTimeout(() => {\n try {\n const freshLoaded = loadSerializedGraph();\n const now = Date.now();\n const idleSinceLastRestart = now - lastRestartAt > FORCE_RESTART_IDLE_MS;\n // skip restart only when env is unchanged AND a restart happened recently\n if (freshLoaded.json === cachedGraphJson && !idleSinceLastRestart) {\n restartTimeout = undefined;\n return;\n }\n cachedGraphJson = freshLoaded.json;\n loaded = freshLoaded;\n lastRestartAt = now;\n cachedContent = formatEnvFileContent(freshLoaded);\n handle.update(cachedContent);\n console.log('[varlock-wrangler] env changed, restarting wrangler...');\n wranglerChild?.kill();\n // NOTE: restartTimeout stays truthy so the exit handler knows this was a restart-kill\n } catch (err) {\n restartTimeout = undefined;\n console.error('[varlock-wrangler] failed to re-resolve env:', (err as Error).message);\n }\n }, DEBOUNCE_MS);\n }\n\n // set up watchers on env source files\n if (loaded.graph.basePath) {\n for (const source of loaded.graph.sources) {\n if (!source.enabled || !source.path) continue;\n const fullPath = join(loaded.graph.basePath, source.path);\n try {\n const w = watch(fullPath, () => scheduleRestart());\n watchers.push(w);\n debug('dev: watching', fullPath);\n } catch {\n // file may not exist yet (e.g., optional env-specific file)\n }\n }\n }\n\n try {\n // outer loop: (re)spawn wrangler each time it exits\n // on env file changes, the watcher kills wrangler, which causes it to respawn\n // with the fresh data (FIFO serves fresh content, Windows file is refreshed)\n while (true) {\n debug('dev: spawning wrangler');\n wranglerChild = spawn('wrangler', [...args, '--env-file', tmp.filePath], {\n stdio: ['inherit', 'pipe', 'pipe'],\n shell: isWindows,\n // force color output since piped stdio loses TTY detection\n env: { ...process.env, FORCE_COLOR: '1' },\n });\n\n // pipe wrangler output with rewrites:\n // - replace FIFO path reference with a friendlier message\n // - strip env var binding rows (other bindings like KV, D1 are preserved)\n const tmpBasename = tmp.filePath.split(/[/\\\\]/).pop()!;\n const loadCmd = `${getExecPrefix()}varlock load`;\n const envVarCount = Object.keys(loaded.graph.config).length;\n let shownVarlockNotice = false;\n const varlockNotice = `\\x1b[36m✨ ${envVarCount} env var${envVarCount !== 1 ? 's' : ''} managed by varlock 🧙🔒\\x1b[0m\\n`\n + `\\x1b[2m run \\`${loadCmd}\\` to inspect\\x1b[0m\\n`;\n const rewriteOutput = (stream: NodeJS.WriteStream) => (chunk: Buffer) => {\n let str = chunk.toString();\n // strip the FIFO path line entirely\n if (str.includes(tmpBasename)) {\n str = str.replace(/.*varlock-dev-env-[a-f0-9]+.*\\n?/g, '');\n }\n // replace env var binding rows with a single varlock notice\n // (other bindings like KV, D1 are preserved)\n if (str.includes('Environment Variable')) {\n if (!shownVarlockNotice) {\n str = str.replace(/.*Environment Variable.*\\n?/, varlockNotice);\n shownVarlockNotice = true;\n }\n str = str.replace(/.*Environment Variable.*\\n?/g, '');\n }\n // rewrite wrangler types hint to use varlock-wrangler\n if (str.includes('wrangler types')) {\n str = str.replace(/wrangler types/g, 'varlock-wrangler types');\n }\n if (str) stream.write(str);\n };\n wranglerChild.stdout?.on('data', rewriteOutput(process.stdout));\n wranglerChild.stderr?.on('data', rewriteOutput(process.stderr));\n\n const child = wranglerChild;\n const exitCode = await new Promise<number>((resolve) => {\n child.on('error', (err) => {\n if ((err as any).code === 'ENOENT') {\n console.error('Error: wrangler not found. Install it with your package manager:');\n console.error(' Install it with your package manager, e.g.: npm install wrangler');\n }\n resolve(1);\n });\n child.on('exit', (code, signal) => {\n resolve(code ?? (signal ? 1 : 0));\n });\n });\n\n // if wrangler exited on its own (not killed by us for restart), stop\n if (!restartTimeout) {\n debug('dev: wrangler exited with code', exitCode);\n process.exitCode = exitCode;\n break;\n }\n debug('dev: restarting wrangler due to env change');\n }\n } finally {\n cleanup();\n }\n}\n\n// --- main ---\n\nasync function main() {\n const args = process.argv.slice(2);\n\n if (args.length === 0) {\n console.log('varlock-wrangler: a drop-in replacement for `wrangler` that injects resolved env');\n console.log('Usage: varlock-wrangler <wrangler-command> [options]');\n console.log('');\n console.log('Enhanced commands:');\n console.log(' dev - injects resolved env via named pipe (no secrets on disk)');\n console.log(' deploy / versions upload - uploads env as Cloudflare vars and secrets');\n console.log(' types - generates types including varlock-managed env vars');\n console.log('');\n console.log('All other commands are passed through to wrangler unchanged.');\n return;\n }\n\n if (isDeployCommand(args)) {\n await handleDeploy(args);\n } else if (isTypesCommand(args)) {\n await handleTypes(args);\n } else if (args[0] === 'dev') {\n await handleDev(args);\n } else {\n // pass through to wrangler unchanged\n const exitCode = await spawnWrangler(args);\n process.exitCode = exitCode;\n }\n}\n\nmain().catch((err) => {\n console.error('varlock-wrangler: unexpected error:', err);\n process.exitCode = 1;\n});\n"]}
1
+ {"version":3,"sources":["../src/varlock-wrangler.ts"],"names":[],"mappings":"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","file":"varlock-wrangler.js","sourcesContent":["/* eslint-disable no-console */\n\nimport {\n writeFileSync, unlinkSync, watch, existsSync,\n} from 'node:fs';\nimport { join } from 'node:path';\nimport { tmpdir } from 'node:os';\nimport { randomBytes } from 'node:crypto';\nimport { spawn, execSync } from 'node:child_process';\n\nimport { execSyncVarlock, VarlockExecError } from 'varlock/exec-sync-varlock';\n\nconst isWindows = process.platform === 'win32';\nconst debugEnabled = !!process.env.VARLOCK_DEBUG;\nfunction debug(...args: Array<any>) {\n if (debugEnabled) console.log('[varlock-wrangler]', ...args);\n}\n\n/** Detect the package manager exec command from npm_config_user_agent */\nfunction getExecPrefix(): string {\n const ua = process.env.npm_config_user_agent || '';\n if (ua.startsWith('pnpm/')) return 'pnpm exec ';\n if (ua.startsWith('yarn/')) return 'yarn exec ';\n if (ua.startsWith('bun/')) return 'bunx ';\n if (ua.startsWith('npm/')) return 'npx ';\n return '';\n}\n\n// --- shared helpers ---\n\nfunction spawnWrangler(args: Array<string>): Promise<number> {\n return new Promise((resolve, reject) => {\n const child = spawn('wrangler', args, {\n stdio: 'inherit',\n shell: isWindows,\n });\n child.on('error', (err) => {\n if ((err as any).code === 'ENOENT') {\n console.error('Error: wrangler not found. Install it with your package manager:');\n console.error(' Install it with your package manager, e.g.: npm install wrangler');\n }\n reject(err);\n });\n child.on('exit', (code, signal) => {\n resolve(code ?? (signal ? 1 : 0));\n });\n });\n}\n\nfunction loadSerializedGraph() {\n const { stdout } = execSyncVarlock('load --format json-full --compact', { fullResult: true });\n return {\n json: stdout,\n graph: JSON.parse(stdout) as {\n basePath?: string,\n sources: Array<{ label: string, enabled: boolean, path?: string }>,\n config: Record<string, { value: unknown, isSensitive: boolean }>,\n },\n };\n}\n\nfunction tmpPath(prefix: string) {\n return join(tmpdir(), `${prefix}-${randomBytes(8).toString('hex')}`);\n}\n\n/**\n * Creates a named pipe (FIFO) for long-running commands (dev).\n * On Unix: data only exists in a kernel buffer — secrets never touch disk.\n * On Windows: falls back to a regular temp file.\n */\nfunction createServingTempFile(prefix: string) {\n const filePath = tmpPath(prefix);\n\n if (!isWindows) {\n execSync(`mkfifo -m 0600 \"${filePath}\"`);\n }\n\n function cleanup() {\n try {\n unlinkSync(filePath);\n } catch {\n // may already be deleted\n }\n }\n\n /**\n * Start serving content via the FIFO (or write a regular file on Windows).\n * On Unix: spawns a child process that writes to the FIFO in a loop.\n * Using a child process means the blocked libuv thread lives in the child —\n * killing the child cleanly releases it, allowing our main process to exit.\n * On Windows: writes a regular file, with refresh() to update it.\n */\n function startServing(getContent: () => string) {\n if (isWindows) {\n writeFileSync(filePath, getContent());\n return {\n update(content: string) { writeFileSync(filePath, content); },\n stop() {\n /* noop on Windows */\n },\n };\n }\n\n // spawn a child process to serve the FIFO\n // the child reads content from stdin, then writes it to the FIFO in a loop\n const fifoServer = spawn(process.execPath, [\n '-e', `\n const fs = require('fs');\n const path = ${JSON.stringify(filePath)};\n let content = '';\n process.stdin.on('data', d => content += d);\n process.stdin.on('end', () => {\n (function serve() {\n try { fs.writeFileSync(path, content); setImmediate(serve); }\n catch { process.exit(); }\n })();\n });\n `,\n ], {\n stdio: ['pipe', 'ignore', 'ignore'],\n });\n fifoServer.stdin!.write(getContent());\n fifoServer.stdin!.end();\n\n return {\n /** Kill and respawn the FIFO server with new content */\n update(content: string) {\n fifoServer.kill();\n const replacement = startServing(() => content);\n // swap the stop/update methods on this handle\n this.stop = replacement.stop;\n this.update = replacement.update;\n },\n stop() {\n fifoServer.kill();\n },\n };\n }\n\n return {\n filePath, cleanup, startServing,\n };\n}\n\n// Cloudflare secrets are limited to 5KB each.\n// __VARLOCK_ENV can exceed this, so we split it into chunks.\nconst CF_SECRET_MAX_BYTES = 5120;\n\n/**\n * Split a string into chunks where each chunk's UTF-8 byte length ≤ maxBytes.\n * Unlike slicing a Buffer, this never splits a multi-byte character.\n */\nfunction chunkString(str: string, maxBytes: number): Array<string> {\n const chunks: Array<string> = [];\n let current = '';\n let currentBytes = 0;\n for (const char of str) {\n const charBytes = Buffer.byteLength(char);\n if (currentBytes + charBytes > maxBytes && current) {\n chunks.push(current);\n current = '';\n currentBytes = 0;\n }\n current += char;\n currentBytes += charBytes;\n }\n if (current) chunks.push(current);\n return chunks;\n}\n\nfunction formatEnvLine(key: string, value: string): string {\n if (!value.includes(\"'\")) {\n // single quotes — literal, no escaping needed\n return `${key}='${value}'`;\n }\n // fall back to double quotes with escaping\n const escaped = value.replace(/\\\\/g, '\\\\\\\\').replace(/\"/g, '\\\\\"').replace(/\\n/g, '\\\\n');\n return `${key}=\"${escaped}\"`;\n}\n\n/**\n * Adds __VARLOCK_ENV to a key-value record, splitting into chunks if needed.\n * If the value fits in one secret: sets __VARLOCK_ENV directly.\n * If too large: sets __VARLOCK_ENV_CHUNKS=N and __VARLOCK_ENV_0, __VARLOCK_ENV_1, etc.\n */\nfunction addVarlockEnvToRecord(record: Record<string, string>, json: string) {\n if (Buffer.byteLength(json) <= CF_SECRET_MAX_BYTES) {\n record.__VARLOCK_ENV = json;\n return;\n }\n const chunks = chunkString(json, CF_SECRET_MAX_BYTES);\n record.__VARLOCK_ENV_CHUNKS = String(chunks.length);\n for (let i = 0; i < chunks.length; i++) {\n record[`__VARLOCK_ENV_${i}`] = chunks[i];\n }\n debug(`__VARLOCK_ENV split into ${chunks.length} chunks (${Buffer.byteLength(json)} bytes)`);\n}\n\n/**\n * Adds __VARLOCK_ENV lines to a dotenv-format array, splitting into chunks if needed.\n */\nfunction addVarlockEnvToLines(lines: Array<string>, json: string) {\n if (Buffer.byteLength(json) <= CF_SECRET_MAX_BYTES) {\n lines.push(formatEnvLine('__VARLOCK_ENV', json));\n return;\n }\n const chunks = chunkString(json, CF_SECRET_MAX_BYTES);\n lines.push(formatEnvLine('__VARLOCK_ENV_CHUNKS', String(chunks.length)));\n for (let i = 0; i < chunks.length; i++) {\n lines.push(formatEnvLine(`__VARLOCK_ENV_${i}`, chunks[i]));\n }\n debug(`__VARLOCK_ENV split into ${chunks.length} chunks (${Buffer.byteLength(json)} bytes)`);\n}\n\nfunction formatEnvFileContent(graph: ReturnType<typeof loadSerializedGraph>) {\n // output as dotenv format using single quotes — single-quoted values are\n // treated as literal strings with no escape processing, which avoids issues\n // with double quotes in JSON blobs and special characters in values.\n // values containing single quotes are double-quoted with escaping instead.\n const lines: Array<string> = [\n '# ⚠️ AUTO-GENERATED BY VARLOCK — DO NOT EDIT',\n `# ${isWindows ? 'This is a temporary file and will be cleaned up automatically.' : 'This file is served via a named pipe (FIFO) and exists only in memory.'}`,\n '# Your .env files and .env.schema are the source of truth.',\n '# See https://varlock.dev/integrations/cloudflare/ for details.',\n '',\n ];\n for (const key in graph.graph.config) {\n const item = graph.graph.config[key];\n if (item.value === undefined) continue;\n const strValue = typeof item.value === 'string' ? item.value : JSON.stringify(item.value);\n lines.push(formatEnvLine(key, strValue));\n }\n // include __VARLOCK_ENV for the varlock runtime (compact JSON, no newlines)\n // split into chunks if it exceeds CF's 5KB secret limit\n addVarlockEnvToLines(lines, graph.json);\n return lines.join('\\n');\n}\n\n// --- command detection ---\n\nfunction isVersionsUploadCommand(args: Array<string>) {\n return args[0] === 'versions' && args[1] === 'upload';\n}\n\nfunction isDeployCommand(args: Array<string>) {\n if (args[0] === 'deploy') return true;\n if (isVersionsUploadCommand(args)) return true;\n return false;\n}\n\nfunction isTypesCommand(args: Array<string>) {\n return args[0] === 'types';\n}\n\n// --- command handlers ---\n\nasync function handleDeploy(args: Array<string>) {\n if (args.includes('--secrets-file')) {\n console.error('Error: --secrets-file is managed automatically by varlock-wrangler.');\n console.error('Remove --secrets-file from your command and let varlock handle it.');\n process.exitCode = 1;\n return;\n }\n\n let loaded;\n try {\n loaded = loadSerializedGraph();\n } catch (err) {\n if (err instanceof VarlockExecError && err.stderr) process.stderr.write(err.stderr);\n console.error('\\n[varlock-wrangler] Failed to resolve environment variables\\n');\n process.exitCode = 1;\n return;\n }\n\n // split resolved vars into:\n // - non-sensitive → --var flags (visible in CF dashboard as environment variables)\n // - sensitive → --secrets-file (stored as CF secrets)\n // - __VARLOCK_ENV blob → always a secret (contains full graph including sensitive values)\n const varFlags: Array<string> = [];\n const secretsObj: Record<string, string> = {};\n\n for (const key in loaded.graph.config) {\n const item = loaded.graph.config[key];\n if (item.value === undefined) continue;\n const strValue = typeof item.value === 'string' ? item.value : JSON.stringify(item.value);\n\n if (item.isSensitive) {\n secretsObj[key] = strValue;\n } else {\n // wrangler splits KEY:VALUE on the first `:` only, so colons in values are safe\n // spawn args array passes newlines/special chars without shell escaping issues\n varFlags.push('--var', `${key}:${strValue}`);\n }\n }\n // split into chunks if it exceeds CF's 5KB secret limit\n addVarlockEnvToRecord(secretsObj, loaded.json);\n\n const tmp = createServingTempFile('varlock-secrets');\n const content = JSON.stringify(secretsObj);\n debug('deploy: starting FIFO serve');\n const handle = tmp.startServing(() => content);\n\n process.on('SIGINT', () => {\n handle.stop();\n tmp.cleanup();\n process.exit(1);\n });\n process.on('SIGTERM', () => {\n handle.stop();\n tmp.cleanup();\n process.exit(1);\n });\n\n const varCount = varFlags.length / 2; // each var is two entries: --var, KEY:VALUE\n // count only user secrets (exclude __VARLOCK_ENV and chunk keys)\n const secretCount = Object.keys(secretsObj).filter((k) => !k.startsWith('__VARLOCK_ENV')).length;\n console.log(`\\x1b[36m✨ Deploying with varlock: ${varCount} var${varCount !== 1 ? 's' : ''}, ${secretCount} secret${secretCount !== 1 ? 's' : ''} 🧙🔒\\x1b[0m`);\n\n let exitCode = process.exitCode ?? 0;\n try {\n debug('deploy: spawning wrangler');\n const wranglerArgs = [...args, ...varFlags, '--secrets-file', tmp.filePath];\n if (!isVersionsUploadCommand(args)) wranglerArgs.push('--keep-vars=false');\n exitCode = await spawnWrangler(wranglerArgs);\n debug('deploy: wrangler exited with code', exitCode);\n } finally {\n debug('deploy: cleaning up');\n handle.stop();\n tmp.cleanup();\n }\n process.exitCode = exitCode;\n}\n\nasync function handleTypes(args: Array<string>) {\n debug('types: resolving env');\n let loaded;\n try {\n loaded = loadSerializedGraph();\n } catch (err) {\n if (err instanceof VarlockExecError && err.stderr) process.stderr.write(err.stderr);\n console.error('\\n[varlock-wrangler] Failed to resolve environment variables\\n');\n process.exitCode = 1;\n return;\n }\n\n debug('types: resolved', Object.keys(loaded.graph.config).length, 'env vars');\n // generate a temp env file with just key names (no real values)\n // wrangler types reads this to discover which vars to include in the Env interface\n const envFileLines: Array<string> = [];\n for (const key in loaded.graph.config) {\n envFileLines.push(`${key}=`);\n }\n\n const tmp = createServingTempFile('varlock-types-env');\n debug('types: starting FIFO serve');\n const handle = tmp.startServing(() => envFileLines.join('\\n'));\n\n let exitCode = process.exitCode ?? 0;\n try {\n debug('types: spawning wrangler');\n exitCode = await spawnWrangler([...args, '--env-file', tmp.filePath]);\n debug('types: wrangler exited with code', exitCode);\n } finally {\n debug('types: cleaning up');\n handle.stop();\n tmp.cleanup();\n }\n process.exitCode = exitCode;\n}\n\nasync function handleDev(args: Array<string>) {\n // .dev.vars would conflict with our env injection via --env-file\n if (existsSync('.dev.vars')) {\n console.error([\n 'Error: a .dev.vars file was detected in your project.',\n 'This conflicts with varlock-wrangler which manages env vars automatically.',\n 'Remove .dev.vars and define your variables in .env files with a .env.schema instead.',\n ].join('\\n'));\n process.exitCode = 1;\n return;\n }\n\n debug('dev: resolving env');\n let loaded: ReturnType<typeof loadSerializedGraph> | undefined;\n let configIsValid = false;\n try {\n loaded = loadSerializedGraph();\n configIsValid = true;\n } catch (err) {\n if (err instanceof VarlockExecError) {\n if (err.stderr) process.stderr.write(err.stderr);\n // Parse stdout even on failure — we need sources for file watchers\n if (err.stdout) {\n try {\n const parsed = JSON.parse(err.stdout);\n loaded = { json: err.stdout, graph: parsed };\n } catch { /* not parseable */ }\n }\n }\n console.error('\\n[varlock-wrangler] ⚠️ config is invalid — fix the error(s) above and save to reload\\n');\n }\n\n if (!loaded) {\n console.error('[varlock-wrangler] Failed to parse env — cannot start dev server');\n process.exitCode = 1;\n return;\n }\n debug('dev: resolved', Object.keys(loaded.graph.config).length, 'env vars, valid =', configIsValid);\n\n const tmp = createServingTempFile('varlock-dev-env');\n debug('dev: created FIFO at', tmp.filePath);\n\n // When config is invalid, serve a minimal env file with __VARLOCK_ENV containing\n // the error JSON — this lets the worker's initVarlockEnv() succeed (with configHasErrors=true)\n // instead of throwing \"initVarlockEnv failed\"\n let cachedContent = configIsValid\n ? formatEnvFileContent(loaded)\n : `${formatEnvLine('__VARLOCK_ENV', loaded.json)}\\n`;\n let wranglerChild: ReturnType<typeof spawn> | undefined;\n const watchers: Array<ReturnType<typeof watch>> = [];\n\n debug('dev: starting FIFO serve');\n const handle = tmp.startServing(() => cachedContent);\n\n function cleanup() {\n handle.stop();\n for (const w of watchers) w.close();\n tmp.cleanup();\n }\n\n process.on('SIGINT', () => {\n wranglerChild?.kill();\n cleanup();\n process.exit(1);\n });\n process.on('SIGTERM', () => {\n wranglerChild?.kill();\n cleanup();\n process.exit(1);\n });\n\n // watch env source files for changes and restart wrangler with fresh data\n const DEBOUNCE_MS = 300;\n // force a restart if the last save event was more than this long after the previous restart,\n // even when the resolved env is identical — handles repeated saves of an unchanged file\n const FORCE_RESTART_IDLE_MS = 5000;\n let restartTimeout: ReturnType<typeof setTimeout> | undefined;\n let cachedGraphJson = loaded.json;\n let lastRestartAt = Date.now();\n function scheduleRestart() {\n // debounce — multiple files may change at once (e.g. editor saves multiple files,\n // or macOS fs.watch() emits extra events for unchanged files)\n if (restartTimeout) clearTimeout(restartTimeout);\n restartTimeout = setTimeout(() => {\n try {\n const freshLoaded = loadSerializedGraph();\n const now = Date.now();\n const idleSinceLastRestart = now - lastRestartAt > FORCE_RESTART_IDLE_MS;\n // skip restart only when env is unchanged AND a restart happened recently\n if (freshLoaded.json === cachedGraphJson && !idleSinceLastRestart) {\n restartTimeout = undefined;\n return;\n }\n cachedGraphJson = freshLoaded.json;\n loaded = freshLoaded;\n configIsValid = true;\n lastRestartAt = now;\n cachedContent = formatEnvFileContent(freshLoaded);\n handle.update(cachedContent);\n console.log('[varlock-wrangler] env changed, restarting wrangler...');\n wranglerChild?.kill();\n // NOTE: restartTimeout stays truthy so the exit handler knows this was a restart-kill\n } catch (err) {\n configIsValid = false;\n if (err instanceof VarlockExecError) {\n if (err.stderr) process.stderr.write(err.stderr);\n // Update FIFO with error-state env and restart wrangler so the\n // worker picks up configHasErrors=true and warns on ENV access\n if (err.stdout) {\n try {\n const parsed = JSON.parse(err.stdout);\n loaded = { json: err.stdout, graph: parsed };\n cachedGraphJson = err.stdout;\n cachedContent = `${formatEnvLine('__VARLOCK_ENV', err.stdout)}\\n`;\n handle.update(cachedContent);\n lastRestartAt = Date.now();\n console.error('\\n[varlock-wrangler] \\u26a0\\ufe0f config is invalid \\u2014 fix the error(s) above and save to reload\\n');\n wranglerChild?.kill();\n // restartTimeout stays truthy so the exit handler knows this was a restart-kill\n return;\n } catch { /* not parseable */ }\n }\n }\n restartTimeout = undefined;\n console.error('\\n[varlock-wrangler] \\u26a0\\ufe0f config is invalid \\u2014 fix the error(s) above and save to reload\\n');\n }\n }, DEBOUNCE_MS);\n }\n\n // set up watchers on env source files\n if (loaded.graph.basePath) {\n for (const source of loaded.graph.sources) {\n if (!source.enabled || !source.path) continue;\n const fullPath = join(loaded.graph.basePath, source.path);\n try {\n const w = watch(fullPath, () => scheduleRestart());\n watchers.push(w);\n debug('dev: watching', fullPath);\n } catch {\n // file may not exist yet (e.g., optional env-specific file)\n }\n }\n }\n\n try {\n // outer loop: (re)spawn wrangler each time it exits\n // on env file changes, the watcher kills wrangler, which causes it to respawn\n // with the fresh data (FIFO serves fresh content, Windows file is refreshed)\n while (true) {\n debug('dev: spawning wrangler');\n wranglerChild = spawn('wrangler', [...args, '--env-file', tmp.filePath], {\n stdio: ['inherit', 'pipe', 'pipe'],\n shell: isWindows,\n // force color output since piped stdio loses TTY detection\n env: { ...process.env, FORCE_COLOR: '1' },\n });\n\n // pipe wrangler output with rewrites:\n // - replace FIFO path reference with a friendlier message\n // - strip env var binding rows (other bindings like KV, D1 are preserved)\n const tmpBasename = tmp.filePath.split(/[/\\\\]/).pop()!;\n const loadCmd = `${getExecPrefix()}varlock load`;\n const envVarCount = Object.keys(loaded.graph.config).length;\n let shownVarlockNotice = false;\n const varlockNotice = `\\x1b[36m✨ ${envVarCount} env var${envVarCount !== 1 ? 's' : ''} managed by varlock 🧙🔒\\x1b[0m\\n`\n + `\\x1b[2m run \\`${loadCmd}\\` to inspect\\x1b[0m\\n`;\n const rewriteOutput = (stream: NodeJS.WriteStream) => (chunk: Buffer) => {\n let str = chunk.toString();\n // strip the FIFO path line entirely\n if (str.includes(tmpBasename)) {\n str = str.replace(/.*varlock-dev-env-[a-f0-9]+.*\\n?/g, '');\n }\n // replace env var binding rows with a single varlock notice\n // (other bindings like KV, D1 are preserved)\n if (str.includes('Environment Variable')) {\n if (!shownVarlockNotice) {\n str = str.replace(/.*Environment Variable.*\\n?/, varlockNotice);\n shownVarlockNotice = true;\n }\n str = str.replace(/.*Environment Variable.*\\n?/g, '');\n }\n // rewrite wrangler types hint to use varlock-wrangler\n if (str.includes('wrangler types')) {\n str = str.replace(/wrangler types/g, 'varlock-wrangler types');\n }\n if (str) stream.write(str);\n };\n wranglerChild.stdout?.on('data', rewriteOutput(process.stdout));\n wranglerChild.stderr?.on('data', rewriteOutput(process.stderr));\n\n const child = wranglerChild;\n const exitCode = await new Promise<number>((resolve) => {\n child.on('error', (err) => {\n if ((err as any).code === 'ENOENT') {\n console.error('Error: wrangler not found. Install it with your package manager:');\n console.error(' Install it with your package manager, e.g.: npm install wrangler');\n }\n resolve(1);\n });\n child.on('exit', (code, signal) => {\n resolve(code ?? (signal ? 1 : 0));\n });\n });\n\n // if wrangler exited on its own (not killed by us for restart), stop\n if (!restartTimeout) {\n debug('dev: wrangler exited with code', exitCode);\n process.exitCode = exitCode;\n break;\n }\n debug('dev: restarting wrangler due to env change');\n }\n } finally {\n cleanup();\n }\n}\n\n// --- main ---\n\nasync function main() {\n const args = process.argv.slice(2);\n\n if (args.length === 0) {\n console.log('varlock-wrangler: a drop-in replacement for `wrangler` that injects resolved env');\n console.log('Usage: varlock-wrangler <wrangler-command> [options]');\n console.log('');\n console.log('Enhanced commands:');\n console.log(' dev - injects resolved env via named pipe (no secrets on disk)');\n console.log(' deploy / versions upload - uploads env as Cloudflare vars and secrets');\n console.log(' types - generates types including varlock-managed env vars');\n console.log('');\n console.log('All other commands are passed through to wrangler unchanged.');\n return;\n }\n\n if (isDeployCommand(args)) {\n await handleDeploy(args);\n } else if (isTypesCommand(args)) {\n await handleTypes(args);\n } else if (args[0] === 'dev') {\n await handleDev(args);\n } else {\n // pass through to wrangler unchanged\n const exitCode = await spawnWrangler(args);\n process.exitCode = exitCode;\n }\n}\n\nmain().catch((err) => {\n console.error('varlock-wrangler: unexpected error:', err);\n process.exitCode = 1;\n});\n"]}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@varlock/cloudflare-integration",
3
3
  "description": "Cloudflare Workers integration for varlock - deploy secrets via wrangler and auto-configure Vite",
4
- "version": "1.1.1",
4
+ "version": "1.1.3",
5
5
  "repository": {
6
6
  "type": "git",
7
7
  "url": "https://github.com/dmno-dev/varlock.git",
@@ -44,7 +44,7 @@
44
44
  "node": ">=22"
45
45
  },
46
46
  "peerDependencies": {
47
- "varlock": "^1.1.0",
47
+ "varlock": "^1.3.0",
48
48
  "vite": ">=5",
49
49
  "wrangler": ">=3",
50
50
  "@cloudflare/vite-plugin": ">=1"
@@ -62,9 +62,9 @@
62
62
  },
63
63
  "devDependencies": {
64
64
  "@types/node": "25.3.2",
65
- "@varlock/vite-integration": "^1.1.1",
65
+ "@varlock/vite-integration": "^1.1.2",
66
66
  "tsup": "^8.5.1",
67
- "varlock": "^1.1.0",
67
+ "varlock": "^1.3.0",
68
68
  "vite": "^7.1.0",
69
69
  "vitest": "^4.0.18"
70
70
  }