varlock 1.3.0 → 1.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/audit.command-PXY2ZGU2.js +16 -0
- package/dist/{audit.command-LLD5UIAW.js.map → audit.command-PXY2ZGU2.js.map} +1 -1
- package/dist/{chunk-HMWAOBZR.js → chunk-2GZ4APXU.js} +7 -7
- package/dist/{chunk-HMWAOBZR.js.map → chunk-2GZ4APXU.js.map} +1 -1
- package/dist/{chunk-XXSPHSF7.js → chunk-66VKZYD7.js} +6 -6
- package/dist/{chunk-XXSPHSF7.js.map → chunk-66VKZYD7.js.map} +1 -1
- package/dist/{chunk-MPHVA4WC.js → chunk-7VERU3F7.js} +3 -3
- package/dist/{chunk-MPHVA4WC.js.map → chunk-7VERU3F7.js.map} +1 -1
- package/dist/{chunk-RQZZDYWL.js → chunk-A5L3SRQS.js} +7 -7
- package/dist/{chunk-RQZZDYWL.js.map → chunk-A5L3SRQS.js.map} +1 -1
- package/dist/{chunk-WTBUNHUJ.js → chunk-DQTUCLA7.js} +5 -5
- package/dist/{chunk-WTBUNHUJ.js.map → chunk-DQTUCLA7.js.map} +1 -1
- package/dist/{chunk-NW4KR67N.js → chunk-EGFAEO7L.js} +7 -7
- package/dist/{chunk-NW4KR67N.js.map → chunk-EGFAEO7L.js.map} +1 -1
- package/dist/{chunk-WJLMLKSG.js → chunk-F64DA7XN.js} +6 -6
- package/dist/{chunk-WJLMLKSG.js.map → chunk-F64DA7XN.js.map} +1 -1
- package/dist/{chunk-4A54P4EM.js → chunk-MGUGRIW2.js} +1185 -1152
- package/dist/chunk-MGUGRIW2.js.map +1 -0
- package/dist/{chunk-F6ZYIWAR.js → chunk-N7FJTNE5.js} +11 -5
- package/dist/chunk-N7FJTNE5.js.map +1 -0
- package/dist/{chunk-XUY3HAO2.js → chunk-NHNQJTPB.js} +4 -4
- package/dist/{chunk-XUY3HAO2.js.map → chunk-NHNQJTPB.js.map} +1 -1
- package/dist/{chunk-INGOLNLE.js → chunk-NZTQKZND.js} +4 -4
- package/dist/{chunk-INGOLNLE.js.map → chunk-NZTQKZND.js.map} +1 -1
- package/dist/{chunk-YWTIKDGU.js → chunk-P4HNABAM.js} +98 -20
- package/dist/chunk-P4HNABAM.js.map +1 -0
- package/dist/{chunk-GKN3UJNE.js → chunk-PBWMMYWL.js} +520 -373
- package/dist/chunk-PBWMMYWL.js.map +1 -0
- package/dist/{chunk-C5LW5EET.js → chunk-Q4I7MXFB.js} +5 -5
- package/dist/{chunk-C5LW5EET.js.map → chunk-Q4I7MXFB.js.map} +1 -1
- package/dist/{chunk-GJ7PTJM4.js → chunk-Q7XUQDLE.js} +3 -3
- package/dist/{chunk-GJ7PTJM4.js.map → chunk-Q7XUQDLE.js.map} +1 -1
- package/dist/{chunk-IO2OGZQU.js → chunk-ROZITJAP.js} +7 -7
- package/dist/{chunk-IO2OGZQU.js.map → chunk-ROZITJAP.js.map} +1 -1
- package/dist/{chunk-CESFJIM4.js → chunk-RTKFINP6.js} +6 -6
- package/dist/{chunk-CESFJIM4.js.map → chunk-RTKFINP6.js.map} +1 -1
- package/dist/{chunk-5DRCCFKV.js → chunk-RWXFFQWH.js} +4 -4
- package/dist/{chunk-5DRCCFKV.js.map → chunk-RWXFFQWH.js.map} +1 -1
- package/dist/{chunk-JOGGSYT2.js → chunk-SX2NUZCL.js} +3 -3
- package/dist/{chunk-JOGGSYT2.js.map → chunk-SX2NUZCL.js.map} +1 -1
- package/dist/{chunk-KI5QLKPU.js → chunk-T3NMDBCU.js} +5 -5
- package/dist/{chunk-KI5QLKPU.js.map → chunk-T3NMDBCU.js.map} +1 -1
- package/dist/{chunk-HH647LSU.js → chunk-YZCCCHDD.js} +6 -6
- package/dist/{chunk-HH647LSU.js.map → chunk-YZCCCHDD.js.map} +1 -1
- package/dist/{chunk-OGGTDFVX.js → chunk-ZCYV47TZ.js} +7 -7
- package/dist/{chunk-OGGTDFVX.js.map → chunk-ZCYV47TZ.js.map} +1 -1
- package/dist/cli/cli-executable.js +1545 -38
- package/dist/cli/cli-executable.js.map +1 -1
- package/dist/config-item-HMRJLPJY.js +7 -0
- package/dist/{config-item-SQFJ2BJ2.js.map → config-item-HMRJLPJY.js.map} +1 -1
- package/dist/encrypt.command-7M34IUJY.js +14 -0
- package/dist/{encrypt.command-WISNYCTG.js.map → encrypt.command-7M34IUJY.js.map} +1 -1
- package/dist/explain.command-LZJOP4TM.js +15 -0
- package/dist/{explain.command-THO6CRHD.js.map → explain.command-LZJOP4TM.js.map} +1 -1
- package/dist/help.command-VIBYZWCF.js +5 -0
- package/dist/{help.command-7E52XAOO.js.map → help.command-VIBYZWCF.js.map} +1 -1
- package/dist/index.js +6 -6
- package/dist/init.command-FFORG2JL.js +14 -0
- package/dist/{init.command-3EDACW36.js.map → init.command-FFORG2JL.js.map} +1 -1
- package/dist/install-plugin.command-SFNHDKVE.js +13 -0
- package/dist/{install-plugin.command-MXBZTBTE.js.map → install-plugin.command-SFNHDKVE.js.map} +1 -1
- package/dist/load.command-V3C5H6CZ.js +15 -0
- package/dist/{load.command-XRABTXAE.js.map → load.command-V3C5H6CZ.js.map} +1 -1
- package/dist/lock.command-QQV2S6NY.js +7 -0
- package/dist/{lock.command-O5MPBQ2I.js.map → lock.command-QQV2S6NY.js.map} +1 -1
- package/dist/printenv.command-2BIP7FCF.js +15 -0
- package/dist/{printenv.command-DLCI4IPZ.js.map → printenv.command-2BIP7FCF.js.map} +1 -1
- package/dist/reveal.command-7LHNCYS4.js +15 -0
- package/dist/{reveal.command-6BTK3FJZ.js.map → reveal.command-7LHNCYS4.js.map} +1 -1
- package/dist/run.command-TRSRYDOM.js +16 -0
- package/dist/{run.command-5CIHZECD.js.map → run.command-TRSRYDOM.js.map} +1 -1
- package/dist/{scan.command-PW3OOLQY.js → scan.command-NMBEPFUC.js} +9 -9
- package/dist/{scan.command-PW3OOLQY.js.map → scan.command-NMBEPFUC.js.map} +1 -1
- package/dist/telemetry.command-SMIT5ZZB.js +13 -0
- package/dist/{telemetry.command-TZDNG2WR.js.map → telemetry.command-SMIT5ZZB.js.map} +1 -1
- package/dist/typegen.command-C5KWLYPL.js +14 -0
- package/dist/{typegen.command-QD26Q3MP.js.map → typegen.command-C5KWLYPL.js.map} +1 -1
- package/native-bins/darwin/VarlockEnclave.app/Contents/CodeResources +0 -0
- package/native-bins/darwin/VarlockEnclave.app/Contents/MacOS/varlock-local-encrypt +0 -0
- package/native-bins/linux-arm64/varlock-local-encrypt +0 -0
- package/native-bins/linux-x64/varlock-local-encrypt +0 -0
- package/native-bins/win32-x64/varlock-local-encrypt.exe +0 -0
- package/package.json +4 -3
- package/dist/audit.command-LLD5UIAW.js +0 -16
- package/dist/chunk-4A54P4EM.js.map +0 -1
- package/dist/chunk-F6ZYIWAR.js.map +0 -1
- package/dist/chunk-GKN3UJNE.js.map +0 -1
- package/dist/chunk-YWTIKDGU.js.map +0 -1
- package/dist/config-item-SQFJ2BJ2.js +0 -7
- package/dist/encrypt.command-WISNYCTG.js +0 -14
- package/dist/explain.command-THO6CRHD.js +0 -15
- package/dist/help.command-7E52XAOO.js +0 -5
- package/dist/init.command-3EDACW36.js +0 -14
- package/dist/install-plugin.command-MXBZTBTE.js +0 -13
- package/dist/load.command-XRABTXAE.js +0 -15
- package/dist/lock.command-O5MPBQ2I.js +0 -7
- package/dist/printenv.command-DLCI4IPZ.js +0 -15
- package/dist/reveal.command-6BTK3FJZ.js +0 -15
- package/dist/run.command-5CIHZECD.js +0 -16
- package/dist/telemetry.command-TZDNG2WR.js +0 -13
- package/dist/typegen.command-QD26Q3MP.js +0 -14
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/lib/exec.ts","../src/cli/commands/run.command.ts"],"names":["fsConstants"],"mappings":"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","file":"chunk-KI5QLKPU.js","sourcesContent":["import { spawn, type ChildProcess } from 'node:child_process';\nimport { Readable } from 'node:stream';\nimport {\n join, delimiter, extname, isAbsolute,\n} from 'node:path';\nimport {\n existsSync, statSync, readFileSync, accessSync, constants as fsConstants,\n} from 'node:fs';\n\ninterface ExecOptions {\n env?: NodeJS.ProcessEnv;\n stdio?: 'inherit' | 'pipe' | [string, string, string];\n stdin?: 'inherit' | 'pipe';\n stdout?: 'inherit' | 'pipe';\n stderr?: 'inherit' | 'pipe';\n}\n\ninterface ExecResult {\n exitCode: number;\n signal?: NodeJS.Signals;\n stdout?: Readable;\n stderr?: Readable;\n pid?: number;\n kill: (signal?: number | NodeJS.Signals) => boolean;\n}\n\n/**\n * Get Windows executable extensions from PATHEXT or use defaults\n */\nfunction getWindowsExtensions(): Array<string> {\n const pathExt = process.env.PATHEXT || '.EXE;.CMD;.BAT;.COM';\n // Create both upper and lowercase variants\n const exts = pathExt.split(';').filter(Boolean);\n const result: Array<string> = [];\n for (const ext of exts) {\n result.push(ext.toUpperCase());\n result.push(ext.toLowerCase());\n }\n return result;\n}\n\n/**\n * Check if a path is executable (POSIX)\n */\nfunction isExecutable(filePath: string): boolean {\n try {\n accessSync(filePath, fsConstants.X_OK);\n const stats = statSync(filePath);\n return stats.isFile();\n } catch {\n return false;\n }\n}\n\n/**\n * Check if a file is executable on Windows (by extension)\n */\nfunction isExecutableOnWindows(filePath: string): boolean {\n if (!existsSync(filePath)) return false;\n\n try {\n const stats = statSync(filePath);\n if (!stats.isFile()) return false;\n } catch {\n return false;\n }\n\n const ext = extname(filePath).toLowerCase();\n const extensions = getWindowsExtensions().map((e) => e.toLowerCase());\n return extensions.includes(ext);\n}\n\n/**\n * Read shebang from file (first 150 bytes)\n */\nfunction readShebang(filePath: string): string | null {\n try {\n const fd = readFileSync(filePath, { encoding: 'utf8', flag: 'r' });\n const first150 = fd.slice(0, 150);\n const match = first150.match(/^#!([^\\r\\n]+)/);\n return match ? match[1].trim() : null;\n } catch {\n return null;\n }\n}\n\n/**\n * Find command in PATH with proper cross-platform support\n * Based on the `which` package logic\n */\nfunction findCommand(command: string): string {\n const isWin = process.platform === 'win32';\n const hasPathSep = command.includes('/') || command.includes('\\\\');\n\n // If it's an absolute or relative path, use it directly\n if (isAbsolute(command) || hasPathSep) {\n return command;\n }\n\n // Get PATH with proper handling\n const pathEnv = process.env.PATH || '';\n\n // On Windows, prepend current directory to search paths\n const searchPaths: Array<string> = [];\n if (isWin) {\n searchPaths.push(process.cwd());\n }\n\n // Split PATH and handle quoted entries\n const pathParts = pathEnv.split(delimiter);\n for (const part of pathParts) {\n // Strip surrounding quotes from PATH entries\n const cleanPart = /^\".*\"$/.test(part) ? part.slice(1, -1) : part;\n if (cleanPart) {\n searchPaths.push(cleanPart);\n }\n }\n\n // Get extensions to try\n let extensions: Array<string> = [''];\n if (isWin) {\n extensions = getWindowsExtensions();\n // If command has a dot and PATHEXT is set, try without extension first\n if (command.includes('.') && process.env.PATHEXT) {\n extensions.unshift('');\n }\n }\n\n // Search in each path\n for (const dir of searchPaths) {\n for (const ext of extensions) {\n const fullPath = join(dir, command + ext);\n\n if (isWin) {\n if (isExecutableOnWindows(fullPath)) {\n return fullPath;\n }\n } else {\n if (isExecutable(fullPath)) {\n // Check for shebang on non-Windows\n const shebang = readShebang(fullPath);\n if (shebang && shebang.startsWith('/')) {\n // Has shebang, can execute directly\n return fullPath;\n } else if (!shebang) {\n // No shebang, assume it's a native executable\n return fullPath;\n }\n }\n }\n }\n }\n\n // If not found, return the command as-is and let spawn handle the error\n return command;\n}\n\n/**\n * Escape a string for use inside a double-quoted cmd.exe argument.\n * cmd.exe convention: a literal \" is represented as \"\".\n */\nfunction escapeCmdExeArg(str: string): string {\n return str.replace(/\"/g, '\"\"');\n}\n\n\n/**\n * Simple command executor that replaces execa\n * Uses Node.js child_process.spawn under the hood\n */\nexport function exec(\n command: string,\n args: Array<string>,\n options: ExecOptions = {},\n): Promise<ExecResult> & {\n stdout?: Readable;\n stderr?: Readable;\n pid?: number;\n kill: (signal?: number | NodeJS.Signals) => boolean;\n} {\n // Find command in PATH if it's not an absolute path\n const resolvedCommand = findCommand(command);\n\n // Detect whether findCommand found a different path for the command.\n // Absolute/relative paths (containing a path separator) are always used as-is\n // (findCommand returns them unchanged), so we treat those as \"found\" too.\n const isCommandFound = resolvedCommand !== command\n || isAbsolute(command)\n || command.includes('/')\n || command.includes('\\\\');\n\n // On Windows, .cmd/.bat files must go through cmd.exe.\n // Also fall back to cmd.exe when the command wasn't found in PATH, so that\n // cmd.exe can handle PATHEXT lookups (e.g. tsx → tsx.cmd, pnpm → pnpm.cmd).\n const needsShell = process.platform === 'win32'\n && (/\\.(cmd|bat)$/i.test(resolvedCommand) || !isCommandFound);\n\n let spawnCommand = resolvedCommand;\n let spawnArgs = args;\n const spawnOptions: any = {\n env: options.env || process.env,\n shell: false,\n };\n\n // On Windows, wrap .cmd/.bat (or unresolved commands) in cmd.exe\n if (needsShell) {\n // Use the resolved path when available; otherwise let cmd.exe handle the\n // PATHEXT lookup by passing the original bare command name.\n const cmdToUse = isCommandFound ? resolvedCommand : command;\n // Always quote the command path to handle spaces and special characters.\n // Escape any embedded double-quotes as \"\" (cmd.exe convention).\n const quotedCmd = `\"${escapeCmdExeArg(cmdToUse)}\"`;\n // Build the inner string: quote every argument and escape embedded double-quotes,\n // then join with the command. Wrap the whole thing in one outer pair of quotes.\n // cmd.exe /s /c strips the first and last \" from the command string, so the outer\n // quotes are consumed and the quoted inner content is processed correctly.\n const cmdStr = [quotedCmd, ...args.map((a) => `\"${escapeCmdExeArg(a)}\"`)]\n .join(' ');\n spawnArgs = ['/d', '/s', '/c', `\"${cmdStr}\"`];\n spawnCommand = process.env.comspec || 'cmd.exe';\n spawnOptions.windowsVerbatimArguments = true;\n }\n\n // Normalize stdio options\n let stdio: 'inherit' | ['inherit' | 'pipe', 'inherit' | 'pipe', 'inherit' | 'pipe'];\n if (options.stdio === 'inherit') {\n stdio = 'inherit';\n } else if (options.stdio === 'pipe') {\n stdio = ['pipe', 'pipe', 'pipe'];\n } else if (options.stdio) {\n stdio = options.stdio as ['inherit' | 'pipe', 'inherit' | 'pipe', 'inherit' | 'pipe'];\n } else {\n // Default based on individual stdin/stdout/stderr\n stdio = [\n options.stdin || 'inherit',\n options.stdout || 'inherit',\n options.stderr || 'inherit',\n ] as ['inherit' | 'pipe', 'inherit' | 'pipe', 'inherit' | 'pipe'];\n }\n\n spawnOptions.stdio = stdio;\n\n const childProcess: ChildProcess = spawn(spawnCommand, spawnArgs, spawnOptions);\n\n const result: Partial<ExecResult> = {\n stdout: childProcess.stdout || undefined,\n stderr: childProcess.stderr || undefined,\n pid: childProcess.pid,\n kill: (signal?: number | NodeJS.Signals) => childProcess.kill(signal),\n };\n\n const promise = new Promise<ExecResult>((resolve, reject) => {\n let errorEmitted = false;\n\n childProcess.on('error', (error) => {\n errorEmitted = true;\n reject(\n Object.assign(error, {\n exitCode: 1,\n ...result,\n }),\n );\n });\n\n childProcess.on('exit', (code, signal) => {\n // Windows special case: exit code 1 without error event might be ENOENT\n if (process.platform === 'win32' && code === 1 && !errorEmitted && !existsSync(resolvedCommand)) {\n const error: any = new Error(`Command not found: ${command}`);\n error.code = 'ENOENT';\n error.exitCode = 1;\n Object.assign(error, result);\n reject(error);\n return;\n }\n\n const exitCode = code ?? (signal ? 1 : 0);\n const exitResult: ExecResult = {\n exitCode,\n signal: signal || undefined,\n ...result,\n } as ExecResult;\n\n if (exitCode !== 0) {\n const error: any = new Error(`Command failed with exit code ${exitCode}`);\n error.exitCode = exitCode;\n error.signal = signal;\n Object.assign(error, result);\n reject(error);\n } else {\n resolve(exitResult);\n }\n });\n }) as Promise<ExecResult> & Partial<ExecResult> & { kill: (signal?: number | NodeJS.Signals) => boolean };\n\n // Attach stream properties and methods to the promise\n Object.assign(promise, result);\n\n return promise as Promise<ExecResult> & {\n stdout?: Readable;\n stderr?: Readable;\n pid?: number;\n kill: (signal?: number | NodeJS.Signals) => boolean;\n };\n}\n","import { define } from 'gunshi';\nimport { gracefulExit } from 'exit-hook';\n\nimport { exec } from '../../lib/exec';\nimport { loadVarlockEnvGraph } from '../../lib/load-graph';\nimport { checkForConfigErrors, checkForNoEnvFiles, checkForSchemaErrors } from '../helpers/error-checks';\nimport { type TypedGunshiCommandFn } from '../helpers/gunshi-type-utils';\nimport { resetRedactionMap, redactSensitiveConfig } from '../../runtime/env';\n\nexport const commandSpec = define({\n name: 'run',\n description: 'Run a command with your environment variables injected',\n args: {\n // watch: {\n // type: 'boolean',\n // short: 'w',\n // description: 'Watch mode',\n // },\n 'no-redact-stdout': {\n type: 'boolean',\n description: 'Disable stdout/stderr redaction and use stdio inherit for full TTY pass-through (use for interactive tools that require raw TTY)',\n },\n 'no-inject-graph': {\n type: 'boolean',\n description: 'Disable injection of __VARLOCK_ENV serialized config graph into the child process environment (prevents sensitive value exposure via env inspection)',\n },\n path: {\n type: 'string',\n short: 'p',\n multiple: true,\n description: 'Path to a specific .env file or directory to use as the entry point (can be specified multiple times)',\n },\n },\n examples: `\nExecutes a command in a child process, injecting your resolved and validated environment\nvariables from your .env files. Useful when a code-level integration is not possible.\n\nExamples:\n varlock run -- node app.js # Run a Node.js application\n varlock run -- python script.py # Run a Python script\n varlock run -- sh -c 'echo $MY_VAR' # Use shell expansion for env vars\n varlock run --no-redact-stdout -- psql # Preserve TTY for interactive tools\n varlock run --no-inject-graph -- sh # Omit serialized config graph from env\n varlock run --path .env.prod -- node app.js # Use a specific .env file\n varlock run --path ./config/ -- node app.js # Use a specific directory\n varlock run -p ./envs -p ./overrides -- node app.js # Use multiple directories\n\n📍 Important: Use -- to separate varlock options from your command\n\n💡 Tip: For shell expansion of env vars, use: sh -c 'your command here'\n💡 Tip: Use --no-redact-stdout for interactive tools that require raw TTY (e.g., psql, claude)\n💡 Tip: Use --no-inject-graph to prevent __VARLOCK_ENV from being visible in child process environment (e.g., interactive shells, long-lived processes)\n `.trim(),\n});\n\nlet commandProcess: ReturnType<typeof exec> | undefined;\nlet childCommandKilledFromRestart = false;\nconst isWatchModeRestart = false; // TODO: re-enable watch mode\n\nexport const commandFn: TypedGunshiCommandFn<typeof commandSpec> = async (ctx) => {\n // if \"--\" is present, split the args into our command and the rest, which will be another external command\n const argv = process.argv.slice(2);\n let restCommandArgs: Array<string> = [];\n if (argv.includes('--')) {\n const doubleDashIndex = argv.indexOf('--');\n restCommandArgs = argv.slice(doubleDashIndex + 1);\n } else {\n throw new Error('No command to run! Your command should look like `varlock run -- <your-command>`');\n }\n const commandToRunAsArgs = restCommandArgs;\n const commandToRunStr = restCommandArgs.join(' ');\n\n const rawCommand = commandToRunAsArgs[0];\n const commandArgsOnly = commandToRunAsArgs.slice(1);\n\n // const isWatchEnabled = ctx.values.watch;\n const isWatchEnabled = false;\n\n // console.log('running command', pathAwareCommand || rawCommand, commandArgsOnly);\n\n\n const envGraph = await loadVarlockEnvGraph({\n entryFilePaths: ctx.values.path,\n });\n checkForSchemaErrors(envGraph);\n checkForNoEnvFiles(envGraph);\n\n // Generate types before resolving values — uses only non-env-specific schema info\n await envGraph.generateTypesIfNeeded();\n\n await envGraph.resolveEnvValues();\n checkForConfigErrors(envGraph);\n\n // will fail above if there are any errors\n\n const resolvedEnv = envGraph.getResolvedEnvObject();\n const serializedGraph = envGraph.getSerializedGraph();\n // console.log(resolvedEnv);\n\n const noInjectGraph = ctx.values['no-inject-graph'] ?? false;\n\n // needs more thought here\n const fullInjectedEnv: NodeJS.ProcessEnv = {\n ...process.env,\n ...resolvedEnv,\n __VARLOCK_RUN: '1', // flag for a child process to detect it is running via `varlock run`\n ...(!noInjectGraph ? { __VARLOCK_ENV: JSON.stringify(serializedGraph) } : {}),\n };\n\n const redactLogs = serializedGraph.settings?.redactLogs ?? true;\n const noRedactStdout = ctx.values['no-redact-stdout'] ?? false;\n\n // Initialize the redaction map if redaction is enabled\n if (redactLogs) {\n resetRedactionMap(serializedGraph);\n }\n\n // When --no-redact-stdout is set, use stdio: 'inherit' to preserve TTY detection\n // Otherwise, pipe stdout/stderr through redaction\n if (noRedactStdout) {\n commandProcess = exec(rawCommand, commandArgsOnly, {\n stdio: 'inherit',\n env: fullInjectedEnv,\n });\n } else {\n // When piping for redaction, preserve color support by injecting FORCE_COLOR if the\n // parent stdout is a TTY and colors are not explicitly disabled. This allows tools\n // that respect FORCE_COLOR (chalk, kleur, etc.) to still output colors even when piped.\n // We read terminal env vars (NO_COLOR, FORCE_COLOR, COLORTERM, TERM) from process.env\n // since these are set by the parent shell/terminal, not by varlock config.\n let redactEnv: NodeJS.ProcessEnv = fullInjectedEnv;\n if (\n process.stdout.isTTY\n && process.env.NO_COLOR === undefined\n && process.env.FORCE_COLOR === undefined\n ) {\n let forceColorLevel = '1';\n if (process.env.COLORTERM === 'truecolor' || process.env.COLORTERM === '24bit') {\n forceColorLevel = '3';\n } else if (process.env.TERM?.includes('256color') || process.env.TERM_PROGRAM === 'iTerm.app') {\n forceColorLevel = '2';\n }\n redactEnv = { ...fullInjectedEnv, FORCE_COLOR: forceColorLevel };\n }\n\n // Helper to redact and write output\n const writeRedacted = (stream: NodeJS.WriteStream, chunk: Buffer | string) => {\n const str = chunk.toString();\n stream.write(redactLogs ? redactSensitiveConfig(str) : str);\n };\n\n commandProcess = exec(rawCommand, commandArgsOnly, {\n stdin: 'inherit',\n stdout: 'pipe',\n stderr: 'pipe',\n env: redactEnv,\n });\n\n // Pipe stdout and stderr through redaction\n commandProcess.stdout?.on('data', (chunk: Buffer | string) => writeRedacted(process.stdout, chunk));\n commandProcess.stderr?.on('data', (chunk: Buffer | string) => writeRedacted(process.stderr, chunk));\n }\n // console.log('PARENT PID = ', process.pid);\n // console.log('CHILD PID = ', commandProcess.pid);\n\n // if first run, we need to attach some extra exit handling\n if (!isWatchModeRestart) {\n // try to make sure we shut down cleanly and kill the child process\n process.on('exit', (_code: any, _signal: any) => {\n // if (childCommandKilledFromRestart) {\n // childCommandKilledFromRestart = false;\n // return;\n // }\n // console.log('exit!', code, signal);\n commandProcess?.kill(9);\n });\n\n ['SIGTERM', 'SIGINT'].forEach((signal) => {\n process.on(signal, () => {\n // console.log('SIGNAL = ', signal);\n commandProcess?.kill(9);\n gracefulExit(1);\n });\n });\n // TODO: handle other signals?\n }\n\n\n let exitCode: any; // TODO: fix this any\n try {\n const result = await commandProcess;\n exitCode = result.exitCode;\n } catch (error) {\n // console.log('child command error!', error);\n if ((error as any).signal === 'SIGINT' && childCommandKilledFromRestart) {\n // console.log('child command failed due to being killed form restart');\n childCommandKilledFromRestart = false;\n return;\n }\n\n // console.log('child command result error', error);\n if ((error as any).signal === 'SIGINT' || (error as any).signal === 'SIGKILL') {\n gracefulExit(1);\n } else {\n console.log((error as Error).message);\n console.log(`command [${commandToRunStr}] failed`);\n console.log('try running the same command without varlock');\n console.log('if you get a different result, varlock may be the problem...');\n // console.log(`Please report issue here: <${REPORT_ISSUE_LINK}>`);\n }\n exitCode = (error as any).exitCode || 1;\n }\n\n if (isWatchEnabled) {\n if (!childCommandKilledFromRestart) {\n if (exitCode === 0) {\n console.log('\\n✅ command completed successfully');\n } else {\n console.log(`\\n💥 command failed - exit code = ${exitCode}`);\n }\n }\n }\n\n if (!isWatchEnabled) {\n return gracefulExit(exitCode);\n } else {\n console.log('... watching for changes ...');\n }\n};\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/lib/exec.ts","../src/cli/commands/run.command.ts"],"names":["fsConstants"],"mappings":";;;;;;;;;;;AA6BA,SAAS,oBAAA,GAAsC;AAC7C,EAAA,MAAM,OAAA,GAAU,OAAA,CAAQ,GAAA,CAAI,OAAA,IAAW,qBAAA;AAEvC,EAAA,MAAM,OAAO,OAAA,CAAQ,KAAA,CAAM,GAAG,CAAA,CAAE,OAAO,OAAO,CAAA;AAC9C,EAAA,MAAM,SAAwB,EAAC;AAC/B,EAAA,KAAA,MAAW,OAAO,IAAA,EAAM;AACtB,IAAA,MAAA,CAAO,IAAA,CAAK,GAAA,CAAI,WAAA,EAAa,CAAA;AAC7B,IAAA,MAAA,CAAO,IAAA,CAAK,GAAA,CAAI,WAAA,EAAa,CAAA;AAAA,EAC/B;AACA,EAAA,OAAO,MAAA;AACT;AAVS,MAAA,CAAA,oBAAA,EAAA,sBAAA,CAAA;AAeT,SAAS,aAAa,QAAA,EAA2B;AAC/C,EAAA,IAAI;AACF,IAAA,UAAA,CAAW,QAAA,EAAUA,UAAY,IAAI,CAAA;AACrC,IAAA,MAAM,KAAA,GAAQ,SAAS,QAAQ,CAAA;AAC/B,IAAA,OAAO,MAAM,MAAA,EAAO;AAAA,EACtB,CAAA,CAAA,MAAQ;AACN,IAAA,OAAO,KAAA;AAAA,EACT;AACF;AARS,MAAA,CAAA,YAAA,EAAA,cAAA,CAAA;AAaT,SAAS,sBAAsB,QAAA,EAA2B;AACxD,EAAA,IAAI,CAAC,UAAA,CAAW,QAAQ,CAAA,EAAG,OAAO,KAAA;AAElC,EAAA,IAAI;AACF,IAAA,MAAM,KAAA,GAAQ,SAAS,QAAQ,CAAA;AAC/B,IAAA,IAAI,CAAC,KAAA,CAAM,MAAA,EAAO,EAAG,OAAO,KAAA;AAAA,EAC9B,CAAA,CAAA,MAAQ;AACN,IAAA,OAAO,KAAA;AAAA,EACT;AAEA,EAAA,MAAM,GAAA,GAAM,OAAA,CAAQ,QAAQ,CAAA,CAAE,WAAA,EAAY;AAC1C,EAAA,MAAM,UAAA,GAAa,sBAAqB,CAAE,GAAA,CAAI,CAAC,CAAA,KAAM,CAAA,CAAE,aAAa,CAAA;AACpE,EAAA,OAAO,UAAA,CAAW,SAAS,GAAG,CAAA;AAChC;AAbS,MAAA,CAAA,qBAAA,EAAA,uBAAA,CAAA;AAkBT,SAAS,YAAY,QAAA,EAAiC;AACpD,EAAA,IAAI;AACF,IAAA,MAAM,EAAA,GAAK,aAAa,QAAA,EAAU,EAAE,UAAU,MAAA,EAAQ,IAAA,EAAM,KAAK,CAAA;AACjE,IAAA,MAAM,QAAA,GAAW,EAAA,CAAG,KAAA,CAAM,CAAA,EAAG,GAAG,CAAA;AAChC,IAAA,MAAM,KAAA,GAAQ,QAAA,CAAS,KAAA,CAAM,eAAe,CAAA;AAC5C,IAAA,OAAO,KAAA,GAAQ,KAAA,CAAM,CAAC,CAAA,CAAE,MAAK,GAAI,IAAA;AAAA,EACnC,CAAA,CAAA,MAAQ;AACN,IAAA,OAAO,IAAA;AAAA,EACT;AACF;AATS,MAAA,CAAA,WAAA,EAAA,aAAA,CAAA;AAeT,SAAS,YAAY,OAAA,EAAyB;AAC5C,EAAA,MAAM,KAAA,GAAQ,QAAQ,QAAA,KAAa,OAAA;AACnC,EAAA,MAAM,aAAa,OAAA,CAAQ,QAAA,CAAS,GAAG,CAAA,IAAK,OAAA,CAAQ,SAAS,IAAI,CAAA;AAGjE,EAAA,IAAI,UAAA,CAAW,OAAO,CAAA,IAAK,UAAA,EAAY;AACrC,IAAA,OAAO,OAAA;AAAA,EACT;AAGA,EAAA,MAAM,OAAA,GAAU,OAAA,CAAQ,GAAA,CAAI,IAAA,IAAQ,EAAA;AAGpC,EAAA,MAAM,cAA6B,EAAC;AACpC,EAAA,IAAI,KAAA,EAAO;AACT,IAAA,WAAA,CAAY,IAAA,CAAK,OAAA,CAAQ,GAAA,EAAK,CAAA;AAAA,EAChC;AAGA,EAAA,MAAM,SAAA,GAAY,OAAA,CAAQ,KAAA,CAAM,SAAS,CAAA;AACzC,EAAA,KAAA,MAAW,QAAQ,SAAA,EAAW;AAE5B,IAAA,MAAM,SAAA,GAAY,SAAS,IAAA,CAAK,IAAI,IAAI,IAAA,CAAK,KAAA,CAAM,CAAA,EAAG,EAAE,CAAA,GAAI,IAAA;AAC5D,IAAA,IAAI,SAAA,EAAW;AACb,MAAA,WAAA,CAAY,KAAK,SAAS,CAAA;AAAA,IAC5B;AAAA,EACF;AAGA,EAAA,IAAI,UAAA,GAA4B,CAAC,EAAE,CAAA;AACnC,EAAA,IAAI,KAAA,EAAO;AACT,IAAA,UAAA,GAAa,oBAAA,EAAqB;AAElC,IAAA,IAAI,QAAQ,QAAA,CAAS,GAAG,CAAA,IAAK,OAAA,CAAQ,IAAI,OAAA,EAAS;AAChD,MAAA,UAAA,CAAW,QAAQ,EAAE,CAAA;AAAA,IACvB;AAAA,EACF;AAGA,EAAA,KAAA,MAAW,OAAO,WAAA,EAAa;AAC7B,IAAA,KAAA,MAAW,OAAO,UAAA,EAAY;AAC5B,MAAA,MAAM,QAAA,GAAW,IAAA,CAAK,GAAA,EAAK,OAAA,GAAU,GAAG,CAAA;AAExC,MAAA,IAAI,KAAA,EAAO;AACT,QAAA,IAAI,qBAAA,CAAsB,QAAQ,CAAA,EAAG;AACnC,UAAA,OAAO,QAAA;AAAA,QACT;AAAA,MACF,CAAA,MAAO;AACL,QAAA,IAAI,YAAA,CAAa,QAAQ,CAAA,EAAG;AAE1B,UAAA,MAAM,OAAA,GAAU,YAAY,QAAQ,CAAA;AACpC,UAAA,IAAI,OAAA,IAAW,OAAA,CAAQ,UAAA,CAAW,GAAG,CAAA,EAAG;AAEtC,YAAA,OAAO,QAAA;AAAA,UACT,CAAA,MAAA,IAAW,CAAC,OAAA,EAAS;AAEnB,YAAA,OAAO,QAAA;AAAA,UACT;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAGA,EAAA,OAAO,OAAA;AACT;AAjES,MAAA,CAAA,WAAA,EAAA,aAAA,CAAA;AAuET,SAAS,gBAAgB,GAAA,EAAqB;AAC5C,EAAA,OAAO,GAAA,CAAI,OAAA,CAAQ,IAAA,EAAM,IAAI,CAAA;AAC/B;AAFS,MAAA,CAAA,eAAA,EAAA,iBAAA,CAAA;AASF,SAAS,IAAA,CACd,OAAA,EACA,IAAA,EACA,OAAA,GAAuB,EAAC,EAMxB;AAEA,EAAA,MAAM,eAAA,GAAkB,YAAY,OAAO,CAAA;AAK3C,EAAA,MAAM,cAAA,GAAiB,eAAA,KAAoB,OAAA,IACtC,UAAA,CAAW,OAAO,CAAA,IAClB,OAAA,CAAQ,QAAA,CAAS,GAAG,CAAA,IACpB,OAAA,CAAQ,QAAA,CAAS,IAAI,CAAA;AAK1B,EAAA,MAAM,UAAA,GAAa,QAAQ,QAAA,KAAa,OAAA,KAClC,gBAAgB,IAAA,CAAK,eAAe,KAAK,CAAC,cAAA,CAAA;AAEhD,EAAA,IAAI,YAAA,GAAe,eAAA;AACnB,EAAA,IAAI,SAAA,GAAY,IAAA;AAChB,EAAA,MAAM,YAAA,GAAoB;AAAA,IACxB,GAAA,EAAK,OAAA,CAAQ,GAAA,IAAO,OAAA,CAAQ,GAAA;AAAA,IAC5B,KAAA,EAAO;AAAA,GACT;AAGA,EAAA,IAAI,UAAA,EAAY;AAGd,IAAA,MAAM,QAAA,GAAW,iBAAiB,eAAA,GAAkB,OAAA;AAGpD,IAAA,MAAM,SAAA,GAAY,CAAA,CAAA,EAAI,eAAA,CAAgB,QAAQ,CAAC,CAAA,CAAA,CAAA;AAK/C,IAAA,MAAM,SAAS,CAAC,SAAA,EAAW,GAAG,IAAA,CAAK,IAAI,CAAC,CAAA,KAAM,CAAA,CAAA,EAAI,eAAA,CAAgB,CAAC,CAAC,CAAA,CAAA,CAAG,CAAC,CAAA,CACrE,KAAK,GAAG,CAAA;AACX,IAAA,SAAA,GAAY,CAAC,IAAA,EAAM,IAAA,EAAM,IAAA,EAAM,CAAA,CAAA,EAAI,MAAM,CAAA,CAAA,CAAG,CAAA;AAC5C,IAAA,YAAA,GAAe,OAAA,CAAQ,IAAI,OAAA,IAAW,SAAA;AACtC,IAAA,YAAA,CAAa,wBAAA,GAA2B,IAAA;AAAA,EAC1C;AAGA,EAAA,IAAI,KAAA;AACJ,EAAA,IAAI,OAAA,CAAQ,UAAU,SAAA,EAAW;AAC/B,IAAA,KAAA,GAAQ,SAAA;AAAA,EACV,CAAA,MAAA,IAAW,OAAA,CAAQ,KAAA,KAAU,MAAA,EAAQ;AACnC,IAAA,KAAA,GAAQ,CAAC,MAAA,EAAQ,MAAA,EAAQ,MAAM,CAAA;AAAA,EACjC,CAAA,MAAA,IAAW,QAAQ,KAAA,EAAO;AACxB,IAAA,KAAA,GAAQ,OAAA,CAAQ,KAAA;AAAA,EAClB,CAAA,MAAO;AAEL,IAAA,KAAA,GAAQ;AAAA,MACN,QAAQ,KAAA,IAAS,SAAA;AAAA,MACjB,QAAQ,MAAA,IAAU,SAAA;AAAA,MAClB,QAAQ,MAAA,IAAU;AAAA,KACpB;AAAA,EACF;AAEA,EAAA,YAAA,CAAa,KAAA,GAAQ,KAAA;AAErB,EAAA,MAAM,YAAA,GAA6B,KAAA,CAAM,YAAA,EAAc,SAAA,EAAW,YAAY,CAAA;AAE9E,EAAA,MAAM,MAAA,GAA8B;AAAA,IAClC,MAAA,EAAQ,aAAa,MAAA,IAAU,MAAA;AAAA,IAC/B,MAAA,EAAQ,aAAa,MAAA,IAAU,MAAA;AAAA,IAC/B,KAAK,YAAA,CAAa,GAAA;AAAA,IAClB,sBAAM,MAAA,CAAA,CAAC,MAAA,KAAqC,YAAA,CAAa,IAAA,CAAK,MAAM,CAAA,EAA9D,MAAA;AAAA,GACR;AAEA,EAAA,MAAM,OAAA,GAAU,IAAI,OAAA,CAAoB,CAAC,SAAS,MAAA,KAAW;AAC3D,IAAA,IAAI,YAAA,GAAe,KAAA;AAEnB,IAAA,YAAA,CAAa,EAAA,CAAG,OAAA,EAAS,CAAC,KAAA,KAAU;AAClC,MAAA,YAAA,GAAe,IAAA;AACf,MAAA,MAAA;AAAA,QACE,MAAA,CAAO,OAAO,KAAA,EAAO;AAAA,UACnB,QAAA,EAAU,CAAA;AAAA,UACV,GAAG;AAAA,SACJ;AAAA,OACH;AAAA,IACF,CAAC,CAAA;AAED,IAAA,YAAA,CAAa,EAAA,CAAG,MAAA,EAAQ,CAAC,IAAA,EAAM,MAAA,KAAW;AAExC,MAAA,IAAI,OAAA,CAAQ,QAAA,KAAa,OAAA,IAAW,IAAA,KAAS,CAAA,IAAK,CAAC,YAAA,IAAgB,CAAC,UAAA,CAAW,eAAe,CAAA,EAAG;AAC/F,QAAA,MAAM,KAAA,GAAa,IAAI,KAAA,CAAM,CAAA,mBAAA,EAAsB,OAAO,CAAA,CAAE,CAAA;AAC5D,QAAA,KAAA,CAAM,IAAA,GAAO,QAAA;AACb,QAAA,KAAA,CAAM,QAAA,GAAW,CAAA;AACjB,QAAA,MAAA,CAAO,MAAA,CAAO,OAAO,MAAM,CAAA;AAC3B,QAAA,MAAA,CAAO,KAAK,CAAA;AACZ,QAAA;AAAA,MACF;AAEA,MAAA,MAAM,QAAA,GAAW,IAAA,KAAS,MAAA,GAAS,CAAA,GAAI,CAAA,CAAA;AACvC,MAAA,MAAM,UAAA,GAAyB;AAAA,QAC7B,QAAA;AAAA,QACA,QAAQ,MAAA,IAAU,MAAA;AAAA,QAClB,GAAG;AAAA,OACL;AAEA,MAAA,IAAI,aAAa,CAAA,EAAG;AAClB,QAAA,MAAM,KAAA,GAAa,IAAI,KAAA,CAAM,CAAA,8BAAA,EAAiC,QAAQ,CAAA,CAAE,CAAA;AACxE,QAAA,KAAA,CAAM,QAAA,GAAW,QAAA;AACjB,QAAA,KAAA,CAAM,MAAA,GAAS,MAAA;AACf,QAAA,MAAA,CAAO,MAAA,CAAO,OAAO,MAAM,CAAA;AAC3B,QAAA,MAAA,CAAO,KAAK,CAAA;AAAA,MACd,CAAA,MAAO;AACL,QAAA,OAAA,CAAQ,UAAU,CAAA;AAAA,MACpB;AAAA,IACF,CAAC,CAAA;AAAA,EACH,CAAC,CAAA;AAGD,EAAA,MAAA,CAAO,MAAA,CAAO,SAAS,MAAM,CAAA;AAE7B,EAAA,OAAO,OAAA;AAMT;AArIgB,MAAA,CAAA,IAAA,EAAA,MAAA,CAAA;;;ACjKT,IAAM,cAAc,MAAA,CAAO;AAAA,EAChC,IAAA,EAAM,KAAA;AAAA,EACN,WAAA,EAAa,wDAAA;AAAA,EACb,IAAA,EAAM;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAMJ,kBAAA,EAAoB;AAAA,MAClB,IAAA,EAAM,SAAA;AAAA,MACN,WAAA,EAAa;AAAA,KACf;AAAA,IACA,iBAAA,EAAmB;AAAA,MACjB,IAAA,EAAM,SAAA;AAAA,MACN,WAAA,EAAa;AAAA,KACf;AAAA,IACA,IAAA,EAAM;AAAA,MACJ,IAAA,EAAM,QAAA;AAAA,MACN,KAAA,EAAO,GAAA;AAAA,MACP,QAAA,EAAU,IAAA;AAAA,MACV,WAAA,EAAa;AAAA;AACf,GACF;AAAA,EACA,QAAA,EAAU;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;;AAAA;AAAA;AAAA;AAAA,EAAA,CAAA,CAmBR,IAAA;AACJ,CAAC;AAED,IAAI,cAAA;AACJ,IAAI,6BAAA,GAAgC,KAAA;AAG7B,IAAM,SAAA,iCAA6D,GAAA,KAAQ;AAEhF,EAAA,MAAM,IAAA,GAAO,OAAA,CAAQ,IAAA,CAAK,KAAA,CAAM,CAAC,CAAA;AACjC,EAAA,IAAI,kBAAiC,EAAC;AACtC,EAAA,IAAI,IAAA,CAAK,QAAA,CAAS,IAAI,CAAA,EAAG;AACvB,IAAA,MAAM,eAAA,GAAkB,IAAA,CAAK,OAAA,CAAQ,IAAI,CAAA;AACzC,IAAA,eAAA,GAAkB,IAAA,CAAK,KAAA,CAAM,eAAA,GAAkB,CAAC,CAAA;AAAA,EAClD,CAAA,MAAO;AACL,IAAA,MAAM,IAAI,MAAM,kFAAkF,CAAA;AAAA,EACpG;AACA,EAAA,MAAM,kBAAA,GAAqB,eAAA;AAC3B,EAAA,MAAM,eAAA,GAAkB,eAAA,CAAgB,IAAA,CAAK,GAAG,CAAA;AAEhD,EAAA,MAAM,UAAA,GAAa,mBAAmB,CAAC,CAAA;AACvC,EAAA,MAAM,eAAA,GAAkB,kBAAA,CAAmB,KAAA,CAAM,CAAC,CAAA;AAQlD,EAAA,MAAM,QAAA,GAAW,MAAM,mBAAA,CAAoB;AAAA,IACzC,cAAA,EAAgB,IAAI,MAAA,CAAO;AAAA,GAC5B,CAAA;AACD,EAAA,oBAAA,CAAqB,QAAQ,CAAA;AAC7B,EAAA,kBAAA,CAAmB,QAAQ,CAAA;AAG3B,EAAA,MAAM,SAAS,qBAAA,EAAsB;AAErC,EAAA,MAAM,SAAS,gBAAA,EAAiB;AAChC,EAAA,oBAAA,CAAqB,QAAQ,CAAA;AAI7B,EAAA,MAAM,WAAA,GAAc,SAAS,oBAAA,EAAqB;AAClD,EAAA,MAAM,eAAA,GAAkB,SAAS,kBAAA,EAAmB;AAGpD,EAAA,MAAM,aAAA,GAAgB,GAAA,CAAI,MAAA,CAAO,iBAAiB,CAAA,IAAK,KAAA;AAGvD,EAAA,MAAM,eAAA,GAAqC;AAAA,IACzC,GAAG,OAAA,CAAQ,GAAA;AAAA,IACX,GAAG,WAAA;AAAA,IACH,aAAA,EAAe,GAAA;AAAA;AAAA,IACf,GAAI,CAAC,aAAA,GAAgB,EAAE,aAAA,EAAe,KAAK,SAAA,CAAU,eAAe,CAAA,EAAE,GAAI;AAAC,GAC7E;AAEA,EAAA,MAAM,UAAA,GAAa,eAAA,CAAgB,QAAA,EAAU,UAAA,IAAc,IAAA;AAC3D,EAAA,MAAM,cAAA,GAAiB,GAAA,CAAI,MAAA,CAAO,kBAAkB,CAAA,IAAK,KAAA;AAGzD,EAAA,IAAI,UAAA,EAAY;AACd,IAAA,iBAAA,CAAkB,eAAe,CAAA;AAAA,EACnC;AAIA,EAAA,IAAI,cAAA,EAAgB;AAClB,IAAA,cAAA,GAAiB,IAAA,CAAK,YAAY,eAAA,EAAiB;AAAA,MACjD,KAAA,EAAO,SAAA;AAAA,MACP,GAAA,EAAK;AAAA,KACN,CAAA;AAAA,EACH,CAAA,MAAO;AAML,IAAA,IAAI,SAAA,GAA+B,eAAA;AACnC,IAAA,IACE,OAAA,CAAQ,MAAA,CAAO,KAAA,IACZ,OAAA,CAAQ,GAAA,CAAI,aAAa,MAAA,IACzB,OAAA,CAAQ,GAAA,CAAI,WAAA,KAAgB,MAAA,EAC/B;AACA,MAAA,IAAI,eAAA,GAAkB,GAAA;AACtB,MAAA,IAAI,QAAQ,GAAA,CAAI,SAAA,KAAc,eAAe,OAAA,CAAQ,GAAA,CAAI,cAAc,OAAA,EAAS;AAC9E,QAAA,eAAA,GAAkB,GAAA;AAAA,MACpB,CAAA,MAAA,IAAW,OAAA,CAAQ,GAAA,CAAI,IAAA,EAAM,QAAA,CAAS,UAAU,CAAA,IAAK,OAAA,CAAQ,GAAA,CAAI,YAAA,KAAiB,WAAA,EAAa;AAC7F,QAAA,eAAA,GAAkB,GAAA;AAAA,MACpB;AACA,MAAA,SAAA,GAAY,EAAE,GAAG,eAAA,EAAiB,WAAA,EAAa,eAAA,EAAgB;AAAA,IACjE;AAGA,IAAA,MAAM,aAAA,mBAAgB,MAAA,CAAA,CAAC,MAAA,EAA4B,KAAA,KAA2B;AAC5E,MAAA,MAAM,GAAA,GAAM,MAAM,QAAA,EAAS;AAC3B,MAAA,MAAA,CAAO,KAAA,CAAM,UAAA,GAAa,qBAAA,CAAsB,GAAG,IAAI,GAAG,CAAA;AAAA,IAC5D,CAAA,EAHsB,eAAA,CAAA;AAKtB,IAAA,cAAA,GAAiB,IAAA,CAAK,YAAY,eAAA,EAAiB;AAAA,MACjD,KAAA,EAAO,SAAA;AAAA,MACP,MAAA,EAAQ,MAAA;AAAA,MACR,MAAA,EAAQ,MAAA;AAAA,MACR,GAAA,EAAK;AAAA,KACN,CAAA;AAGD,IAAA,cAAA,CAAe,MAAA,EAAQ,GAAG,MAAA,EAAQ,CAAC,UAA2B,aAAA,CAAc,OAAA,CAAQ,MAAA,EAAQ,KAAK,CAAC,CAAA;AAClG,IAAA,cAAA,CAAe,MAAA,EAAQ,GAAG,MAAA,EAAQ,CAAC,UAA2B,aAAA,CAAc,OAAA,CAAQ,MAAA,EAAQ,KAAK,CAAC,CAAA;AAAA,EACpG;AAKA,EAAyB;AAEvB,IAAA,OAAA,CAAQ,EAAA,CAAG,MAAA,EAAQ,CAAC,KAAA,EAAY,OAAA,KAAiB;AAM/C,MAAA,cAAA,EAAgB,KAAK,CAAC,CAAA;AAAA,IACxB,CAAC,CAAA;AAED,IAAA,CAAC,SAAA,EAAW,QAAQ,CAAA,CAAE,OAAA,CAAQ,CAAC,MAAA,KAAW;AACxC,MAAA,OAAA,CAAQ,EAAA,CAAG,QAAQ,MAAM;AAEvB,QAAA,cAAA,EAAgB,KAAK,CAAC,CAAA;AACtB,QAAA,YAAA,CAAa,CAAC,CAAA;AAAA,MAChB,CAAC,CAAA;AAAA,IACH,CAAC,CAAA;AAAA,EAEH;AAGA,EAAA,IAAI,QAAA;AACJ,EAAA,IAAI;AACF,IAAA,MAAM,SAAS,MAAM,cAAA;AACrB,IAAA,QAAA,GAAW,MAAA,CAAO,QAAA;AAAA,EACpB,SAAS,KAAA,EAAO;AAEd,IAAA,IAAK,KAAA,CAAc,MAAA,KAAW,QAAA,IAAY,6BAAA,EAA+B;AAOzE,IAAA,IAAK,KAAA,CAAc,MAAA,KAAW,QAAA,IAAa,KAAA,CAAc,WAAW,SAAA,EAAW;AAC7E,MAAA,YAAA,CAAa,CAAC,CAAA;AAAA,IAChB,CAAA,MAAO;AACL,MAAA,OAAA,CAAQ,GAAA,CAAK,MAAgB,OAAO,CAAA;AACpC,MAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,SAAA,EAAY,eAAe,CAAA,QAAA,CAAU,CAAA;AACjD,MAAA,OAAA,CAAQ,IAAI,8CAA8C,CAAA;AAC1D,MAAA,OAAA,CAAQ,IAAI,8DAA8D,CAAA;AAAA,IAE5E;AACA,IAAA,QAAA,GAAY,MAAc,QAAA,IAAY,CAAA;AAAA,EACxC;AAYA,EAAqB;AACnB,IAAA,OAAO,aAAa,QAAQ,CAAA;AAAA,EAC9B;AAGF,CAAA,EAzKmE,WAAA","file":"chunk-T3NMDBCU.js","sourcesContent":["import { spawn, type ChildProcess } from 'node:child_process';\nimport { Readable } from 'node:stream';\nimport {\n join, delimiter, extname, isAbsolute,\n} from 'node:path';\nimport {\n existsSync, statSync, readFileSync, accessSync, constants as fsConstants,\n} from 'node:fs';\n\ninterface ExecOptions {\n env?: NodeJS.ProcessEnv;\n stdio?: 'inherit' | 'pipe' | [string, string, string];\n stdin?: 'inherit' | 'pipe';\n stdout?: 'inherit' | 'pipe';\n stderr?: 'inherit' | 'pipe';\n}\n\ninterface ExecResult {\n exitCode: number;\n signal?: NodeJS.Signals;\n stdout?: Readable;\n stderr?: Readable;\n pid?: number;\n kill: (signal?: number | NodeJS.Signals) => boolean;\n}\n\n/**\n * Get Windows executable extensions from PATHEXT or use defaults\n */\nfunction getWindowsExtensions(): Array<string> {\n const pathExt = process.env.PATHEXT || '.EXE;.CMD;.BAT;.COM';\n // Create both upper and lowercase variants\n const exts = pathExt.split(';').filter(Boolean);\n const result: Array<string> = [];\n for (const ext of exts) {\n result.push(ext.toUpperCase());\n result.push(ext.toLowerCase());\n }\n return result;\n}\n\n/**\n * Check if a path is executable (POSIX)\n */\nfunction isExecutable(filePath: string): boolean {\n try {\n accessSync(filePath, fsConstants.X_OK);\n const stats = statSync(filePath);\n return stats.isFile();\n } catch {\n return false;\n }\n}\n\n/**\n * Check if a file is executable on Windows (by extension)\n */\nfunction isExecutableOnWindows(filePath: string): boolean {\n if (!existsSync(filePath)) return false;\n\n try {\n const stats = statSync(filePath);\n if (!stats.isFile()) return false;\n } catch {\n return false;\n }\n\n const ext = extname(filePath).toLowerCase();\n const extensions = getWindowsExtensions().map((e) => e.toLowerCase());\n return extensions.includes(ext);\n}\n\n/**\n * Read shebang from file (first 150 bytes)\n */\nfunction readShebang(filePath: string): string | null {\n try {\n const fd = readFileSync(filePath, { encoding: 'utf8', flag: 'r' });\n const first150 = fd.slice(0, 150);\n const match = first150.match(/^#!([^\\r\\n]+)/);\n return match ? match[1].trim() : null;\n } catch {\n return null;\n }\n}\n\n/**\n * Find command in PATH with proper cross-platform support\n * Based on the `which` package logic\n */\nfunction findCommand(command: string): string {\n const isWin = process.platform === 'win32';\n const hasPathSep = command.includes('/') || command.includes('\\\\');\n\n // If it's an absolute or relative path, use it directly\n if (isAbsolute(command) || hasPathSep) {\n return command;\n }\n\n // Get PATH with proper handling\n const pathEnv = process.env.PATH || '';\n\n // On Windows, prepend current directory to search paths\n const searchPaths: Array<string> = [];\n if (isWin) {\n searchPaths.push(process.cwd());\n }\n\n // Split PATH and handle quoted entries\n const pathParts = pathEnv.split(delimiter);\n for (const part of pathParts) {\n // Strip surrounding quotes from PATH entries\n const cleanPart = /^\".*\"$/.test(part) ? part.slice(1, -1) : part;\n if (cleanPart) {\n searchPaths.push(cleanPart);\n }\n }\n\n // Get extensions to try\n let extensions: Array<string> = [''];\n if (isWin) {\n extensions = getWindowsExtensions();\n // If command has a dot and PATHEXT is set, try without extension first\n if (command.includes('.') && process.env.PATHEXT) {\n extensions.unshift('');\n }\n }\n\n // Search in each path\n for (const dir of searchPaths) {\n for (const ext of extensions) {\n const fullPath = join(dir, command + ext);\n\n if (isWin) {\n if (isExecutableOnWindows(fullPath)) {\n return fullPath;\n }\n } else {\n if (isExecutable(fullPath)) {\n // Check for shebang on non-Windows\n const shebang = readShebang(fullPath);\n if (shebang && shebang.startsWith('/')) {\n // Has shebang, can execute directly\n return fullPath;\n } else if (!shebang) {\n // No shebang, assume it's a native executable\n return fullPath;\n }\n }\n }\n }\n }\n\n // If not found, return the command as-is and let spawn handle the error\n return command;\n}\n\n/**\n * Escape a string for use inside a double-quoted cmd.exe argument.\n * cmd.exe convention: a literal \" is represented as \"\".\n */\nfunction escapeCmdExeArg(str: string): string {\n return str.replace(/\"/g, '\"\"');\n}\n\n\n/**\n * Simple command executor that replaces execa\n * Uses Node.js child_process.spawn under the hood\n */\nexport function exec(\n command: string,\n args: Array<string>,\n options: ExecOptions = {},\n): Promise<ExecResult> & {\n stdout?: Readable;\n stderr?: Readable;\n pid?: number;\n kill: (signal?: number | NodeJS.Signals) => boolean;\n} {\n // Find command in PATH if it's not an absolute path\n const resolvedCommand = findCommand(command);\n\n // Detect whether findCommand found a different path for the command.\n // Absolute/relative paths (containing a path separator) are always used as-is\n // (findCommand returns them unchanged), so we treat those as \"found\" too.\n const isCommandFound = resolvedCommand !== command\n || isAbsolute(command)\n || command.includes('/')\n || command.includes('\\\\');\n\n // On Windows, .cmd/.bat files must go through cmd.exe.\n // Also fall back to cmd.exe when the command wasn't found in PATH, so that\n // cmd.exe can handle PATHEXT lookups (e.g. tsx → tsx.cmd, pnpm → pnpm.cmd).\n const needsShell = process.platform === 'win32'\n && (/\\.(cmd|bat)$/i.test(resolvedCommand) || !isCommandFound);\n\n let spawnCommand = resolvedCommand;\n let spawnArgs = args;\n const spawnOptions: any = {\n env: options.env || process.env,\n shell: false,\n };\n\n // On Windows, wrap .cmd/.bat (or unresolved commands) in cmd.exe\n if (needsShell) {\n // Use the resolved path when available; otherwise let cmd.exe handle the\n // PATHEXT lookup by passing the original bare command name.\n const cmdToUse = isCommandFound ? resolvedCommand : command;\n // Always quote the command path to handle spaces and special characters.\n // Escape any embedded double-quotes as \"\" (cmd.exe convention).\n const quotedCmd = `\"${escapeCmdExeArg(cmdToUse)}\"`;\n // Build the inner string: quote every argument and escape embedded double-quotes,\n // then join with the command. Wrap the whole thing in one outer pair of quotes.\n // cmd.exe /s /c strips the first and last \" from the command string, so the outer\n // quotes are consumed and the quoted inner content is processed correctly.\n const cmdStr = [quotedCmd, ...args.map((a) => `\"${escapeCmdExeArg(a)}\"`)]\n .join(' ');\n spawnArgs = ['/d', '/s', '/c', `\"${cmdStr}\"`];\n spawnCommand = process.env.comspec || 'cmd.exe';\n spawnOptions.windowsVerbatimArguments = true;\n }\n\n // Normalize stdio options\n let stdio: 'inherit' | ['inherit' | 'pipe', 'inherit' | 'pipe', 'inherit' | 'pipe'];\n if (options.stdio === 'inherit') {\n stdio = 'inherit';\n } else if (options.stdio === 'pipe') {\n stdio = ['pipe', 'pipe', 'pipe'];\n } else if (options.stdio) {\n stdio = options.stdio as ['inherit' | 'pipe', 'inherit' | 'pipe', 'inherit' | 'pipe'];\n } else {\n // Default based on individual stdin/stdout/stderr\n stdio = [\n options.stdin || 'inherit',\n options.stdout || 'inherit',\n options.stderr || 'inherit',\n ] as ['inherit' | 'pipe', 'inherit' | 'pipe', 'inherit' | 'pipe'];\n }\n\n spawnOptions.stdio = stdio;\n\n const childProcess: ChildProcess = spawn(spawnCommand, spawnArgs, spawnOptions);\n\n const result: Partial<ExecResult> = {\n stdout: childProcess.stdout || undefined,\n stderr: childProcess.stderr || undefined,\n pid: childProcess.pid,\n kill: (signal?: number | NodeJS.Signals) => childProcess.kill(signal),\n };\n\n const promise = new Promise<ExecResult>((resolve, reject) => {\n let errorEmitted = false;\n\n childProcess.on('error', (error) => {\n errorEmitted = true;\n reject(\n Object.assign(error, {\n exitCode: 1,\n ...result,\n }),\n );\n });\n\n childProcess.on('exit', (code, signal) => {\n // Windows special case: exit code 1 without error event might be ENOENT\n if (process.platform === 'win32' && code === 1 && !errorEmitted && !existsSync(resolvedCommand)) {\n const error: any = new Error(`Command not found: ${command}`);\n error.code = 'ENOENT';\n error.exitCode = 1;\n Object.assign(error, result);\n reject(error);\n return;\n }\n\n const exitCode = code ?? (signal ? 1 : 0);\n const exitResult: ExecResult = {\n exitCode,\n signal: signal || undefined,\n ...result,\n } as ExecResult;\n\n if (exitCode !== 0) {\n const error: any = new Error(`Command failed with exit code ${exitCode}`);\n error.exitCode = exitCode;\n error.signal = signal;\n Object.assign(error, result);\n reject(error);\n } else {\n resolve(exitResult);\n }\n });\n }) as Promise<ExecResult> & Partial<ExecResult> & { kill: (signal?: number | NodeJS.Signals) => boolean };\n\n // Attach stream properties and methods to the promise\n Object.assign(promise, result);\n\n return promise as Promise<ExecResult> & {\n stdout?: Readable;\n stderr?: Readable;\n pid?: number;\n kill: (signal?: number | NodeJS.Signals) => boolean;\n };\n}\n","import { define } from 'gunshi';\nimport { gracefulExit } from 'exit-hook';\n\nimport { exec } from '../../lib/exec';\nimport { loadVarlockEnvGraph } from '../../lib/load-graph';\nimport { checkForConfigErrors, checkForNoEnvFiles, checkForSchemaErrors } from '../helpers/error-checks';\nimport { type TypedGunshiCommandFn } from '../helpers/gunshi-type-utils';\nimport { resetRedactionMap, redactSensitiveConfig } from '../../runtime/env';\n\nexport const commandSpec = define({\n name: 'run',\n description: 'Run a command with your environment variables injected',\n args: {\n // watch: {\n // type: 'boolean',\n // short: 'w',\n // description: 'Watch mode',\n // },\n 'no-redact-stdout': {\n type: 'boolean',\n description: 'Disable stdout/stderr redaction and use stdio inherit for full TTY pass-through (use for interactive tools that require raw TTY)',\n },\n 'no-inject-graph': {\n type: 'boolean',\n description: 'Disable injection of __VARLOCK_ENV serialized config graph into the child process environment (prevents sensitive value exposure via env inspection)',\n },\n path: {\n type: 'string',\n short: 'p',\n multiple: true,\n description: 'Path to a specific .env file or directory to use as the entry point (can be specified multiple times)',\n },\n },\n examples: `\nExecutes a command in a child process, injecting your resolved and validated environment\nvariables from your .env files. Useful when a code-level integration is not possible.\n\nExamples:\n varlock run -- node app.js # Run a Node.js application\n varlock run -- python script.py # Run a Python script\n varlock run -- sh -c 'echo $MY_VAR' # Use shell expansion for env vars\n varlock run --no-redact-stdout -- psql # Preserve TTY for interactive tools\n varlock run --no-inject-graph -- sh # Omit serialized config graph from env\n varlock run --path .env.prod -- node app.js # Use a specific .env file\n varlock run --path ./config/ -- node app.js # Use a specific directory\n varlock run -p ./envs -p ./overrides -- node app.js # Use multiple directories\n\n📍 Important: Use -- to separate varlock options from your command\n\n💡 Tip: For shell expansion of env vars, use: sh -c 'your command here'\n💡 Tip: Use --no-redact-stdout for interactive tools that require raw TTY (e.g., psql, claude)\n💡 Tip: Use --no-inject-graph to prevent __VARLOCK_ENV from being visible in child process environment (e.g., interactive shells, long-lived processes)\n `.trim(),\n});\n\nlet commandProcess: ReturnType<typeof exec> | undefined;\nlet childCommandKilledFromRestart = false;\nconst isWatchModeRestart = false; // TODO: re-enable watch mode\n\nexport const commandFn: TypedGunshiCommandFn<typeof commandSpec> = async (ctx) => {\n // if \"--\" is present, split the args into our command and the rest, which will be another external command\n const argv = process.argv.slice(2);\n let restCommandArgs: Array<string> = [];\n if (argv.includes('--')) {\n const doubleDashIndex = argv.indexOf('--');\n restCommandArgs = argv.slice(doubleDashIndex + 1);\n } else {\n throw new Error('No command to run! Your command should look like `varlock run -- <your-command>`');\n }\n const commandToRunAsArgs = restCommandArgs;\n const commandToRunStr = restCommandArgs.join(' ');\n\n const rawCommand = commandToRunAsArgs[0];\n const commandArgsOnly = commandToRunAsArgs.slice(1);\n\n // const isWatchEnabled = ctx.values.watch;\n const isWatchEnabled = false;\n\n // console.log('running command', pathAwareCommand || rawCommand, commandArgsOnly);\n\n\n const envGraph = await loadVarlockEnvGraph({\n entryFilePaths: ctx.values.path,\n });\n checkForSchemaErrors(envGraph);\n checkForNoEnvFiles(envGraph);\n\n // Generate types before resolving values — uses only non-env-specific schema info\n await envGraph.generateTypesIfNeeded();\n\n await envGraph.resolveEnvValues();\n checkForConfigErrors(envGraph);\n\n // will fail above if there are any errors\n\n const resolvedEnv = envGraph.getResolvedEnvObject();\n const serializedGraph = envGraph.getSerializedGraph();\n // console.log(resolvedEnv);\n\n const noInjectGraph = ctx.values['no-inject-graph'] ?? false;\n\n // needs more thought here\n const fullInjectedEnv: NodeJS.ProcessEnv = {\n ...process.env,\n ...resolvedEnv,\n __VARLOCK_RUN: '1', // flag for a child process to detect it is running via `varlock run`\n ...(!noInjectGraph ? { __VARLOCK_ENV: JSON.stringify(serializedGraph) } : {}),\n };\n\n const redactLogs = serializedGraph.settings?.redactLogs ?? true;\n const noRedactStdout = ctx.values['no-redact-stdout'] ?? false;\n\n // Initialize the redaction map if redaction is enabled\n if (redactLogs) {\n resetRedactionMap(serializedGraph);\n }\n\n // When --no-redact-stdout is set, use stdio: 'inherit' to preserve TTY detection\n // Otherwise, pipe stdout/stderr through redaction\n if (noRedactStdout) {\n commandProcess = exec(rawCommand, commandArgsOnly, {\n stdio: 'inherit',\n env: fullInjectedEnv,\n });\n } else {\n // When piping for redaction, preserve color support by injecting FORCE_COLOR if the\n // parent stdout is a TTY and colors are not explicitly disabled. This allows tools\n // that respect FORCE_COLOR (chalk, kleur, etc.) to still output colors even when piped.\n // We read terminal env vars (NO_COLOR, FORCE_COLOR, COLORTERM, TERM) from process.env\n // since these are set by the parent shell/terminal, not by varlock config.\n let redactEnv: NodeJS.ProcessEnv = fullInjectedEnv;\n if (\n process.stdout.isTTY\n && process.env.NO_COLOR === undefined\n && process.env.FORCE_COLOR === undefined\n ) {\n let forceColorLevel = '1';\n if (process.env.COLORTERM === 'truecolor' || process.env.COLORTERM === '24bit') {\n forceColorLevel = '3';\n } else if (process.env.TERM?.includes('256color') || process.env.TERM_PROGRAM === 'iTerm.app') {\n forceColorLevel = '2';\n }\n redactEnv = { ...fullInjectedEnv, FORCE_COLOR: forceColorLevel };\n }\n\n // Helper to redact and write output\n const writeRedacted = (stream: NodeJS.WriteStream, chunk: Buffer | string) => {\n const str = chunk.toString();\n stream.write(redactLogs ? redactSensitiveConfig(str) : str);\n };\n\n commandProcess = exec(rawCommand, commandArgsOnly, {\n stdin: 'inherit',\n stdout: 'pipe',\n stderr: 'pipe',\n env: redactEnv,\n });\n\n // Pipe stdout and stderr through redaction\n commandProcess.stdout?.on('data', (chunk: Buffer | string) => writeRedacted(process.stdout, chunk));\n commandProcess.stderr?.on('data', (chunk: Buffer | string) => writeRedacted(process.stderr, chunk));\n }\n // console.log('PARENT PID = ', process.pid);\n // console.log('CHILD PID = ', commandProcess.pid);\n\n // if first run, we need to attach some extra exit handling\n if (!isWatchModeRestart) {\n // try to make sure we shut down cleanly and kill the child process\n process.on('exit', (_code: any, _signal: any) => {\n // if (childCommandKilledFromRestart) {\n // childCommandKilledFromRestart = false;\n // return;\n // }\n // console.log('exit!', code, signal);\n commandProcess?.kill(9);\n });\n\n ['SIGTERM', 'SIGINT'].forEach((signal) => {\n process.on(signal, () => {\n // console.log('SIGNAL = ', signal);\n commandProcess?.kill(9);\n gracefulExit(1);\n });\n });\n // TODO: handle other signals?\n }\n\n\n let exitCode: any; // TODO: fix this any\n try {\n const result = await commandProcess;\n exitCode = result.exitCode;\n } catch (error) {\n // console.log('child command error!', error);\n if ((error as any).signal === 'SIGINT' && childCommandKilledFromRestart) {\n // console.log('child command failed due to being killed form restart');\n childCommandKilledFromRestart = false;\n return;\n }\n\n // console.log('child command result error', error);\n if ((error as any).signal === 'SIGINT' || (error as any).signal === 'SIGKILL') {\n gracefulExit(1);\n } else {\n console.log((error as Error).message);\n console.log(`command [${commandToRunStr}] failed`);\n console.log('try running the same command without varlock');\n console.log('if you get a different result, varlock may be the problem...');\n // console.log(`Please report issue here: <${REPORT_ISSUE_LINK}>`);\n }\n exitCode = (error as any).exitCode || 1;\n }\n\n if (isWatchEnabled) {\n if (!childCommandKilledFromRestart) {\n if (exitCode === 0) {\n console.log('\\n✅ command completed successfully');\n } else {\n console.log(`\\n💥 command failed - exit code = ${exitCode}`);\n }\n }\n }\n\n if (!isWatchEnabled) {\n return gracefulExit(exitCode);\n } else {\n console.log('... watching for changes ...');\n }\n};\n"]}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { define } from './chunk-
|
|
2
|
-
import { checkForSchemaErrors, checkForNoEnvFiles } from './chunk-
|
|
3
|
-
import { loadVarlockEnvGraph } from './chunk-
|
|
4
|
-
import { CliExitError } from './chunk-
|
|
1
|
+
import { define } from './chunk-MGUGRIW2.js';
|
|
2
|
+
import { checkForSchemaErrors, checkForNoEnvFiles } from './chunk-NHNQJTPB.js';
|
|
3
|
+
import { loadVarlockEnvGraph } from './chunk-Q4I7MXFB.js';
|
|
4
|
+
import { CliExitError } from './chunk-SX2NUZCL.js';
|
|
5
5
|
import { __name } from './chunk-6PEHRAEP.js';
|
|
6
6
|
|
|
7
7
|
// src/cli/commands/typegen.command.ts
|
|
@@ -45,5 +45,5 @@ var commandFn = /* @__PURE__ */ __name(async (ctx) => {
|
|
|
45
45
|
}, "commandFn");
|
|
46
46
|
|
|
47
47
|
export { commandFn, commandSpec };
|
|
48
|
-
//# sourceMappingURL=chunk-
|
|
49
|
-
//# sourceMappingURL=chunk-
|
|
48
|
+
//# sourceMappingURL=chunk-YZCCCHDD.js.map
|
|
49
|
+
//# sourceMappingURL=chunk-YZCCCHDD.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/cli/commands/typegen.command.ts"],"names":[],"mappings":";;;;;;;AAOO,IAAM,cAAc,MAAA,CAAO;AAAA,EAChC,IAAA,EAAM,SAAA;AAAA,EACN,WAAA,EAAa,gDAAA;AAAA,EACb,IAAA,EAAM;AAAA,IACJ,IAAA,EAAM;AAAA,MACJ,IAAA,EAAM,QAAA;AAAA,MACN,KAAA,EAAO,GAAA;AAAA,MACP,QAAA,EAAU,IAAA;AAAA,MACV,WAAA,EAAa;AAAA;AACf,GACF;AAAA,EACA,QAAA,EAAU;AAAA;AAAA;AAAA;;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA,CAAA,CAWV,IAAA;AACF,CAAC;AAGM,IAAM,SAAA,iCAA6D,GAAA,KAAQ;AAChF,EAAA,MAAM,QAAA,GAAW,MAAM,mBAAA,CAAoB;AAAA,IACzC,cAAA,EAAgB,IAAI,MAAA,CAAO;AAAA,GAC5B,CAAA;AACD,EAAA,oBAAA,CAAqB,QAAQ,CAAA;AAC7B,EAAA,kBAAA,CAAmB,QAAQ,CAAA;AAG3B,EAAA,MAAM,iBAAiB,MAAM,QAAA,CAAS,sBAAsB,EAAE,eAAA,EAAiB,MAAM,CAAA;AAErF,EAAA,IAAI,mBAAmB,CAAA,EAAG;AACxB,IAAA,MAAM,IAAI,aAAa,kDAAA,EAAoD;AAAA,MACzE,UAAA,EAAY;AAAA,KACb,CAAA;AAAA,EACH;AAEA,EAAA,OAAA,CAAQ,IAAI,qCAAgC,CAAA;AAC9C,CAAA,EAjBmE,WAAA","file":"chunk-
|
|
1
|
+
{"version":3,"sources":["../src/cli/commands/typegen.command.ts"],"names":[],"mappings":";;;;;;;AAOO,IAAM,cAAc,MAAA,CAAO;AAAA,EAChC,IAAA,EAAM,SAAA;AAAA,EACN,WAAA,EAAa,gDAAA;AAAA,EACb,IAAA,EAAM;AAAA,IACJ,IAAA,EAAM;AAAA,MACJ,IAAA,EAAM,QAAA;AAAA,MACN,KAAA,EAAO,GAAA;AAAA,MACP,QAAA,EAAU,IAAA;AAAA,MACV,WAAA,EAAa;AAAA;AACf,GACF;AAAA,EACA,QAAA,EAAU;AAAA;AAAA;AAAA;;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA,CAAA,CAWV,IAAA;AACF,CAAC;AAGM,IAAM,SAAA,iCAA6D,GAAA,KAAQ;AAChF,EAAA,MAAM,QAAA,GAAW,MAAM,mBAAA,CAAoB;AAAA,IACzC,cAAA,EAAgB,IAAI,MAAA,CAAO;AAAA,GAC5B,CAAA;AACD,EAAA,oBAAA,CAAqB,QAAQ,CAAA;AAC7B,EAAA,kBAAA,CAAmB,QAAQ,CAAA;AAG3B,EAAA,MAAM,iBAAiB,MAAM,QAAA,CAAS,sBAAsB,EAAE,eAAA,EAAiB,MAAM,CAAA;AAErF,EAAA,IAAI,mBAAmB,CAAA,EAAG;AACxB,IAAA,MAAM,IAAI,aAAa,kDAAA,EAAoD;AAAA,MACzE,UAAA,EAAY;AAAA,KACb,CAAA;AAAA,EACH;AAEA,EAAA,OAAA,CAAQ,IAAI,qCAAgC,CAAA;AAC9C,CAAA,EAjBmE,WAAA","file":"chunk-YZCCCHDD.js","sourcesContent":["import { define } from 'gunshi';\n\nimport { loadVarlockEnvGraph } from '../../lib/load-graph';\nimport { checkForNoEnvFiles, checkForSchemaErrors } from '../helpers/error-checks';\nimport { CliExitError } from '../helpers/exit-error';\nimport { type TypedGunshiCommandFn } from '../helpers/gunshi-type-utils';\n\nexport const commandSpec = define({\n name: 'typegen',\n description: 'Generate TypeScript types from your env schema',\n args: {\n path: {\n type: 'string',\n short: 'p',\n multiple: true,\n description: 'Path to a specific .env file or directory to use as the entry point (can be specified multiple times)',\n },\n },\n examples: `\nGenerates TypeScript type definitions from your .env schema files.\nUses only non-environment-specific schema info, so output is deterministic\nregardless of which environment is active.\n\nThis is useful when you have \\`@generateTypes(lang=ts, path=env.d.ts, auto=false)\\`\nin your schema to disable automatic type generation during \\`varlock load\\` or \\`varlock run\\`.\n\nExamples:\n varlock typegen # Generate types using default schema\n varlock typegen --path .env.prod # Generate types from a specific .env file\n`.trim(),\n});\n\n\nexport const commandFn: TypedGunshiCommandFn<typeof commandSpec> = async (ctx) => {\n const envGraph = await loadVarlockEnvGraph({\n entryFilePaths: ctx.values.path,\n });\n checkForSchemaErrors(envGraph);\n checkForNoEnvFiles(envGraph);\n\n // Force type generation even if auto=false is set\n const generatedCount = await envGraph.generateTypesIfNeeded({ ignoreAutoFalse: true });\n\n if (generatedCount === 0) {\n throw new CliExitError('No @generateTypes decorator found in your schema', {\n suggestion: 'Add `@generateTypes(lang=ts, path=env.d.ts)` to your .env.schema file.',\n });\n }\n\n console.log('✅ Types generated successfully');\n};\n"]}
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { gracefulExit } from './chunk-CHQDS2PI.js';
|
|
2
|
-
import { define } from './chunk-
|
|
3
|
-
import { checkForSchemaErrors, checkForNoEnvFiles } from './chunk-
|
|
4
|
-
import { loadVarlockEnvGraph } from './chunk-
|
|
5
|
-
import { CliExitError, formattedValue } from './chunk-
|
|
6
|
-
import { StaticValueResolver, ansis_default } from './chunk-
|
|
2
|
+
import { define } from './chunk-MGUGRIW2.js';
|
|
3
|
+
import { checkForSchemaErrors, checkForNoEnvFiles } from './chunk-NHNQJTPB.js';
|
|
4
|
+
import { loadVarlockEnvGraph } from './chunk-Q4I7MXFB.js';
|
|
5
|
+
import { CliExitError, formattedValue } from './chunk-SX2NUZCL.js';
|
|
6
|
+
import { StaticValueResolver, ansis_default } from './chunk-PBWMMYWL.js';
|
|
7
7
|
import { my_dash_default } from './chunk-FA5SNEKN.js';
|
|
8
8
|
import { redactString } from './chunk-XLYSNOR3.js';
|
|
9
9
|
import { __name } from './chunk-6PEHRAEP.js';
|
|
@@ -159,5 +159,5 @@ var commandFn = /* @__PURE__ */ __name(async (ctx) => {
|
|
|
159
159
|
}, "commandFn");
|
|
160
160
|
|
|
161
161
|
export { commandFn, commandSpec };
|
|
162
|
-
//# sourceMappingURL=chunk-
|
|
163
|
-
//# sourceMappingURL=chunk-
|
|
162
|
+
//# sourceMappingURL=chunk-ZCYV47TZ.js.map
|
|
163
|
+
//# sourceMappingURL=chunk-ZCYV47TZ.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/cli/commands/explain.command.ts"],"names":[],"mappings":"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","file":"chunk-OGGTDFVX.js","sourcesContent":["import ansis from 'ansis';\nimport { define } from 'gunshi';\nimport { gracefulExit } from 'exit-hook';\n\nimport { loadVarlockEnvGraph } from '../../lib/load-graph';\nimport { formattedValue } from '../../lib/formatting';\nimport { redactString } from '../../runtime/lib/redaction';\nimport {\n checkForSchemaErrors, checkForNoEnvFiles,\n} from '../helpers/error-checks';\nimport { type TypedGunshiCommandFn } from '../helpers/gunshi-type-utils';\nimport { CliExitError } from '../helpers/exit-error';\nimport { StaticValueResolver } from '../../env-graph/lib/resolver';\nimport _ from '@env-spec/utils/my-dash';\n\nexport const commandSpec = define({\n name: 'explain',\n description: 'Show detailed information about how a config item is resolved',\n args: {\n env: {\n type: 'string',\n description: 'Set the environment (e.g., production, development, etc)',\n },\n path: {\n type: 'string',\n short: 'p',\n multiple: true,\n description: 'Path to a specific .env file or directory to use as the entry point (can be specified multiple times)',\n },\n },\n examples: `\nShows detailed information about all definitions, sources, and overrides\nthat feed into a single config item. Useful for debugging why a value\nis not what you expect.\n\nExamples:\n varlock explain DATABASE_URL # Explain how DATABASE_URL is resolved\n varlock explain --env production API_KEY # Explain in production context\n`.trim(),\n});\n\nfunction describeResolver(resolver: any, indent = ''): string {\n if (resolver instanceof StaticValueResolver) {\n return `${indent}static value`;\n }\n const fnName = resolver.fnName;\n if (fnName && !fnName.startsWith('\\0')) {\n return `${indent}${fnName}()`;\n }\n return `${indent}(resolver)`;\n}\n\nexport const commandFn: TypedGunshiCommandFn<typeof commandSpec> = async (ctx) => {\n const positionals = (ctx.positionals ?? []).slice(ctx.commandPath?.length ?? 0);\n if (!positionals.length) {\n throw new CliExitError('Missing required argument: variable name', {\n suggestion: 'Run `varlock explain MY_VAR` to explain a config item',\n });\n }\n const varName = positionals[0];\n\n const envGraph = await loadVarlockEnvGraph({\n currentEnvFallback: ctx.values.env,\n entryFilePaths: ctx.values.path,\n });\n\n checkForSchemaErrors(envGraph);\n checkForNoEnvFiles(envGraph);\n\n if (!(varName in envGraph.configSchema)) {\n throw new CliExitError(`Variable \"${varName}\" not found in schema`);\n }\n\n await envGraph.resolveEnvValues();\n\n const item = envGraph.configSchema[varName];\n const isSensitive = item.isSensitive;\n\n // Header\n console.log('');\n console.log(ansis.bold.cyan(` ${item.key}`));\n console.log('');\n\n // Description\n if (item.description) {\n console.log(` ${ansis.gray('Description:')} ${item.description}`);\n }\n\n // Type info\n if (item.dataType) {\n console.log(` ${ansis.gray('Type:')} ${item.dataType.name}`);\n }\n\n // Properties\n const props = [];\n if (item.isRequired) props.push('required');\n else props.push('optional');\n if (isSensitive) props.push('sensitive');\n else props.push('public');\n console.log(` ${ansis.gray('Properties:')} ${props.join(', ')}`);\n\n // Resolved value\n console.log('');\n console.log(ansis.bold(' Resolved value'));\n if (item.validationState === 'error') {\n console.log(` ${ansis.red(' (resolution failed)')}`);\n for (const err of item.errors) {\n console.log(` ${ansis.red(` - ${err.message}`)}`);\n }\n } else {\n let valStr = formattedValue(item.resolvedValue, true);\n if (isSensitive && item.resolvedValue && _.isString(item.resolvedValue)) {\n valStr = redactString(item.resolvedValue)!;\n }\n console.log(` ${valStr}`);\n if (item.isCoerced) {\n let rawStr = formattedValue(item.resolvedRawValue, true);\n if (isSensitive && item.resolvedRawValue && _.isString(item.resolvedRawValue)) {\n rawStr = redactString(item.resolvedRawValue)!;\n }\n console.log(` ${ansis.gray.italic(`coerced from ${rawStr}`)}`);\n }\n }\n\n // Value source\n console.log('');\n console.log(ansis.bold(' Value source'));\n\n if (item.isOverridden) {\n console.log(` ${ansis.yellow('⚡ process.env override')} ${ansis.yellow.bold('(active)')}`);\n const activeValueDef = item.activeValueDef;\n if (activeValueDef) {\n const sourceLabel = activeValueDef.source?.label || 'internal';\n const resolverDesc = activeValueDef.itemDef.resolver\n ? describeResolver(activeValueDef.itemDef.resolver)\n : 'no value';\n console.log(` ${ansis.gray('└')} ${ansis.gray.italic(`would use ${resolverDesc} from ${sourceLabel} without override`)}`);\n }\n } else {\n const activeValueDef = item.activeValueDef;\n if (activeValueDef) {\n const sourceLabel = activeValueDef.source?.label || 'internal';\n const resolverDesc = activeValueDef.itemDef.resolver\n ? describeResolver(activeValueDef.itemDef.resolver)\n : 'no value';\n console.log(` ${resolverDesc} from ${ansis.cyan(sourceLabel)}`);\n } else {\n console.log(` ${ansis.gray('(no value set)')}`);\n }\n }\n\n // All definitions\n const defs = item.defs;\n if (defs.length) {\n console.log('');\n console.log(ansis.bold(' All definitions') + ansis.gray(` (${defs.length} source${defs.length > 1 ? 's' : ''}, highest priority first)`));\n\n for (let i = 0; i < defs.length; i++) {\n const def = defs[i];\n const sourceLabel = def.source?.label || 'internal (builtin)';\n const sourceType = def.source?.type || 'builtin';\n\n const isActiveSource = !item.isOverridden && def === item.activeValueDef;\n const marker = isActiveSource ? ansis.green(' ← active') : '';\n\n console.log(` ${ansis.gray(`${i + 1}.`)} ${ansis.cyan(sourceLabel)} ${ansis.gray(`(${sourceType})`)}${marker}`);\n\n // Show resolver info\n if (def.itemDef.resolver) {\n console.log(` ${ansis.gray('value:')} ${describeResolver(def.itemDef.resolver)}`);\n } else {\n console.log(` ${ansis.gray('value:')} ${ansis.gray.italic('(none - decorators only)')}`);\n }\n\n // Show decorators from this definition\n const decNames = def.itemDef.decorators?.map((d) => `@${d.name}`).join(', ');\n if (decNames) {\n console.log(` ${ansis.gray('decorators:')} ${ansis.magenta(decNames)}`);\n }\n }\n }\n\n // Docs links\n const docsLinks = item.docsLinks;\n if (docsLinks.length) {\n console.log('');\n console.log(ansis.bold(' Documentation'));\n for (const link of docsLinks) {\n const label = link.description ? `${link.description}: ` : '';\n console.log(` ${label}${ansis.underline(link.url)}`);\n }\n }\n\n console.log('');\n\n if (item.validationState === 'error') {\n gracefulExit(1);\n }\n};\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/cli/commands/explain.command.ts"],"names":[],"mappings":"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","file":"chunk-ZCYV47TZ.js","sourcesContent":["import ansis from 'ansis';\nimport { define } from 'gunshi';\nimport { gracefulExit } from 'exit-hook';\n\nimport { loadVarlockEnvGraph } from '../../lib/load-graph';\nimport { formattedValue } from '../../lib/formatting';\nimport { redactString } from '../../runtime/lib/redaction';\nimport {\n checkForSchemaErrors, checkForNoEnvFiles,\n} from '../helpers/error-checks';\nimport { type TypedGunshiCommandFn } from '../helpers/gunshi-type-utils';\nimport { CliExitError } from '../helpers/exit-error';\nimport { StaticValueResolver } from '../../env-graph/lib/resolver';\nimport _ from '@env-spec/utils/my-dash';\n\nexport const commandSpec = define({\n name: 'explain',\n description: 'Show detailed information about how a config item is resolved',\n args: {\n env: {\n type: 'string',\n description: 'Set the environment (e.g., production, development, etc)',\n },\n path: {\n type: 'string',\n short: 'p',\n multiple: true,\n description: 'Path to a specific .env file or directory to use as the entry point (can be specified multiple times)',\n },\n },\n examples: `\nShows detailed information about all definitions, sources, and overrides\nthat feed into a single config item. Useful for debugging why a value\nis not what you expect.\n\nExamples:\n varlock explain DATABASE_URL # Explain how DATABASE_URL is resolved\n varlock explain --env production API_KEY # Explain in production context\n`.trim(),\n});\n\nfunction describeResolver(resolver: any, indent = ''): string {\n if (resolver instanceof StaticValueResolver) {\n return `${indent}static value`;\n }\n const fnName = resolver.fnName;\n if (fnName && !fnName.startsWith('\\0')) {\n return `${indent}${fnName}()`;\n }\n return `${indent}(resolver)`;\n}\n\nexport const commandFn: TypedGunshiCommandFn<typeof commandSpec> = async (ctx) => {\n const positionals = (ctx.positionals ?? []).slice(ctx.commandPath?.length ?? 0);\n if (!positionals.length) {\n throw new CliExitError('Missing required argument: variable name', {\n suggestion: 'Run `varlock explain MY_VAR` to explain a config item',\n });\n }\n const varName = positionals[0];\n\n const envGraph = await loadVarlockEnvGraph({\n currentEnvFallback: ctx.values.env,\n entryFilePaths: ctx.values.path,\n });\n\n checkForSchemaErrors(envGraph);\n checkForNoEnvFiles(envGraph);\n\n if (!(varName in envGraph.configSchema)) {\n throw new CliExitError(`Variable \"${varName}\" not found in schema`);\n }\n\n await envGraph.resolveEnvValues();\n\n const item = envGraph.configSchema[varName];\n const isSensitive = item.isSensitive;\n\n // Header\n console.log('');\n console.log(ansis.bold.cyan(` ${item.key}`));\n console.log('');\n\n // Description\n if (item.description) {\n console.log(` ${ansis.gray('Description:')} ${item.description}`);\n }\n\n // Type info\n if (item.dataType) {\n console.log(` ${ansis.gray('Type:')} ${item.dataType.name}`);\n }\n\n // Properties\n const props = [];\n if (item.isRequired) props.push('required');\n else props.push('optional');\n if (isSensitive) props.push('sensitive');\n else props.push('public');\n console.log(` ${ansis.gray('Properties:')} ${props.join(', ')}`);\n\n // Resolved value\n console.log('');\n console.log(ansis.bold(' Resolved value'));\n if (item.validationState === 'error') {\n console.log(` ${ansis.red(' (resolution failed)')}`);\n for (const err of item.errors) {\n console.log(` ${ansis.red(` - ${err.message}`)}`);\n }\n } else {\n let valStr = formattedValue(item.resolvedValue, true);\n if (isSensitive && item.resolvedValue && _.isString(item.resolvedValue)) {\n valStr = redactString(item.resolvedValue)!;\n }\n console.log(` ${valStr}`);\n if (item.isCoerced) {\n let rawStr = formattedValue(item.resolvedRawValue, true);\n if (isSensitive && item.resolvedRawValue && _.isString(item.resolvedRawValue)) {\n rawStr = redactString(item.resolvedRawValue)!;\n }\n console.log(` ${ansis.gray.italic(`coerced from ${rawStr}`)}`);\n }\n }\n\n // Value source\n console.log('');\n console.log(ansis.bold(' Value source'));\n\n if (item.isOverridden) {\n console.log(` ${ansis.yellow('⚡ process.env override')} ${ansis.yellow.bold('(active)')}`);\n const activeValueDef = item.activeValueDef;\n if (activeValueDef) {\n const sourceLabel = activeValueDef.source?.label || 'internal';\n const resolverDesc = activeValueDef.itemDef.resolver\n ? describeResolver(activeValueDef.itemDef.resolver)\n : 'no value';\n console.log(` ${ansis.gray('└')} ${ansis.gray.italic(`would use ${resolverDesc} from ${sourceLabel} without override`)}`);\n }\n } else {\n const activeValueDef = item.activeValueDef;\n if (activeValueDef) {\n const sourceLabel = activeValueDef.source?.label || 'internal';\n const resolverDesc = activeValueDef.itemDef.resolver\n ? describeResolver(activeValueDef.itemDef.resolver)\n : 'no value';\n console.log(` ${resolverDesc} from ${ansis.cyan(sourceLabel)}`);\n } else {\n console.log(` ${ansis.gray('(no value set)')}`);\n }\n }\n\n // All definitions\n const defs = item.defs;\n if (defs.length) {\n console.log('');\n console.log(ansis.bold(' All definitions') + ansis.gray(` (${defs.length} source${defs.length > 1 ? 's' : ''}, highest priority first)`));\n\n for (let i = 0; i < defs.length; i++) {\n const def = defs[i];\n const sourceLabel = def.source?.label || 'internal (builtin)';\n const sourceType = def.source?.type || 'builtin';\n\n const isActiveSource = !item.isOverridden && def === item.activeValueDef;\n const marker = isActiveSource ? ansis.green(' ← active') : '';\n\n console.log(` ${ansis.gray(`${i + 1}.`)} ${ansis.cyan(sourceLabel)} ${ansis.gray(`(${sourceType})`)}${marker}`);\n\n // Show resolver info\n if (def.itemDef.resolver) {\n console.log(` ${ansis.gray('value:')} ${describeResolver(def.itemDef.resolver)}`);\n } else {\n console.log(` ${ansis.gray('value:')} ${ansis.gray.italic('(none - decorators only)')}`);\n }\n\n // Show decorators from this definition\n const decNames = def.itemDef.decorators?.map((d) => `@${d.name}`).join(', ');\n if (decNames) {\n console.log(` ${ansis.gray('decorators:')} ${ansis.magenta(decNames)}`);\n }\n }\n }\n\n // Docs links\n const docsLinks = item.docsLinks;\n if (docsLinks.length) {\n console.log('');\n console.log(ansis.bold(' Documentation'));\n for (const link of docsLinks) {\n const label = link.description ? `${link.description}: ` : '';\n console.log(` ${label}${ansis.underline(link.url)}`);\n }\n }\n\n console.log('');\n\n if (item.validationState === 'error') {\n gracefulExit(1);\n }\n};\n"]}
|