varlock 0.7.4 → 0.8.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.
Files changed (89) hide show
  1. package/dist/auto-load.js +3 -3
  2. package/dist/{chunk-CNDSEDGU.js → chunk-6SU7GLJM.js} +13 -8
  3. package/dist/chunk-6SU7GLJM.js.map +1 -0
  4. package/dist/{chunk-JV27VNND.js → chunk-CPD4LFCM.js} +4 -4
  5. package/dist/{chunk-JV27VNND.js.map → chunk-CPD4LFCM.js.map} +1 -1
  6. package/dist/{chunk-ZB2JSJLY.js → chunk-FHMYVMQZ.js} +5 -5
  7. package/dist/{chunk-ZB2JSJLY.js.map → chunk-FHMYVMQZ.js.map} +1 -1
  8. package/dist/{chunk-J4PGGBUP.js → chunk-FKC5YJXL.js} +9 -8
  9. package/dist/chunk-FKC5YJXL.js.map +1 -0
  10. package/dist/{chunk-RYMTOGGL.js → chunk-J6GN4T2B.js} +3 -3
  11. package/dist/{chunk-RYMTOGGL.js.map → chunk-J6GN4T2B.js.map} +1 -1
  12. package/dist/{chunk-EC3NKELX.js → chunk-JUCPBCOK.js} +5 -5
  13. package/dist/{chunk-EC3NKELX.js.map → chunk-JUCPBCOK.js.map} +1 -1
  14. package/dist/{chunk-FVFI4EQN.js → chunk-LM7YKESH.js} +9 -7
  15. package/dist/chunk-LM7YKESH.js.map +1 -0
  16. package/dist/{chunk-R54KUFZA.js → chunk-P6RTPTWC.js} +4 -4
  17. package/dist/{chunk-R54KUFZA.js.map → chunk-P6RTPTWC.js.map} +1 -1
  18. package/dist/{chunk-ANZNVJLY.js → chunk-PXR36IUP.js} +8 -6
  19. package/dist/chunk-PXR36IUP.js.map +1 -0
  20. package/dist/{chunk-CS57IAAJ.js → chunk-Q44UUWKJ.js} +10 -9
  21. package/dist/chunk-Q44UUWKJ.js.map +1 -0
  22. package/dist/{chunk-W4CM34OJ.js → chunk-SZ6MVAAJ.js} +4 -5
  23. package/dist/chunk-SZ6MVAAJ.js.map +1 -0
  24. package/dist/{chunk-NTGBMXQQ.js → chunk-U72DN4YC.js} +8 -7
  25. package/dist/chunk-U72DN4YC.js.map +1 -0
  26. package/dist/{chunk-QLNQ3KVC.js → chunk-UROBADYQ.js} +4 -4
  27. package/dist/{chunk-QLNQ3KVC.js.map → chunk-UROBADYQ.js.map} +1 -1
  28. package/dist/chunk-UWINGOPT.js +83 -0
  29. package/dist/chunk-UWINGOPT.js.map +1 -0
  30. package/dist/{chunk-5LNYCOEO.js → chunk-XYBJ2DUJ.js} +642 -382
  31. package/dist/chunk-XYBJ2DUJ.js.map +1 -0
  32. package/dist/{chunk-HMMDVPDG.js → chunk-YBJQXCZE.js} +9 -7
  33. package/dist/chunk-YBJQXCZE.js.map +1 -0
  34. package/dist/{chunk-FBBCEY7C.js → chunk-YHOWSHVH.js} +3 -3
  35. package/dist/chunk-YHOWSHVH.js.map +1 -0
  36. package/dist/cli/cli-executable.js +35 -26
  37. package/dist/cli/cli-executable.js.map +1 -1
  38. package/dist/config-item-YZNLESF2.js +5 -0
  39. package/dist/{config-item-IYYV4PO6.js.map → config-item-YZNLESF2.js.map} +1 -1
  40. package/dist/dotenv-compat.js +3 -3
  41. package/dist/{env-graph-BxA2OztA.d.ts → env-graph-BnquQhm-.d.ts} +12 -3
  42. package/dist/explain.command-P32BEQ3G.js +12 -0
  43. package/dist/{explain.command-VFR5SUW3.js.map → explain.command-P32BEQ3G.js.map} +1 -1
  44. package/dist/index.d.ts +6 -7
  45. package/dist/index.js +6 -6
  46. package/dist/init.command-NFFZQLKP.js +11 -0
  47. package/dist/{init.command-HRY74HHU.js.map → init.command-NFFZQLKP.js.map} +1 -1
  48. package/dist/install-plugin.command-LDLVV67L.js +11 -0
  49. package/dist/{install-plugin.command-WDCWQWT7.js.map → install-plugin.command-LDLVV67L.js.map} +1 -1
  50. package/dist/lib/exec-sync-varlock.js +1 -1
  51. package/dist/load.command-RJIWAOYQ.js +12 -0
  52. package/dist/{load.command-FNMIEIJB.js.map → load.command-RJIWAOYQ.js.map} +1 -1
  53. package/dist/plugin-lib.d.ts +2 -2
  54. package/dist/printenv.command-DLXXBGFW.js +12 -0
  55. package/dist/{printenv.command-3HLXLNHS.js.map → printenv.command-DLXXBGFW.js.map} +1 -1
  56. package/dist/run.command-6PRXLKAI.js +13 -0
  57. package/dist/{run.command-SXM3J6GI.js.map → run.command-6PRXLKAI.js.map} +1 -1
  58. package/dist/runtime/env.d.ts +1 -1
  59. package/dist/scan.command-HNFGUVZD.js +13 -0
  60. package/dist/{scan.command-PW7HYURX.js.map → scan.command-HNFGUVZD.js.map} +1 -1
  61. package/dist/telemetry.command-WQDTIW3U.js +11 -0
  62. package/dist/{telemetry.command-4HKKZK7N.js.map → telemetry.command-WQDTIW3U.js.map} +1 -1
  63. package/dist/typegen.command-MNJ2FPRL.js +12 -0
  64. package/dist/{typegen.command-O6OXWCVX.js.map → typegen.command-MNJ2FPRL.js.map} +1 -1
  65. package/package.json +2 -2
  66. package/dist/chunk-4JWJZ4P3.js +0 -86
  67. package/dist/chunk-4JWJZ4P3.js.map +0 -1
  68. package/dist/chunk-5LNYCOEO.js.map +0 -1
  69. package/dist/chunk-ANZNVJLY.js.map +0 -1
  70. package/dist/chunk-CNDSEDGU.js.map +0 -1
  71. package/dist/chunk-CS57IAAJ.js.map +0 -1
  72. package/dist/chunk-FBBCEY7C.js.map +0 -1
  73. package/dist/chunk-FVFI4EQN.js.map +0 -1
  74. package/dist/chunk-GGBNUVWR.js +0 -63
  75. package/dist/chunk-GGBNUVWR.js.map +0 -1
  76. package/dist/chunk-HMMDVPDG.js.map +0 -1
  77. package/dist/chunk-J4PGGBUP.js.map +0 -1
  78. package/dist/chunk-NTGBMXQQ.js.map +0 -1
  79. package/dist/chunk-W4CM34OJ.js.map +0 -1
  80. package/dist/config-item-IYYV4PO6.js +0 -5
  81. package/dist/explain.command-VFR5SUW3.js +0 -12
  82. package/dist/init.command-HRY74HHU.js +0 -12
  83. package/dist/install-plugin.command-WDCWQWT7.js +0 -11
  84. package/dist/load.command-FNMIEIJB.js +0 -12
  85. package/dist/printenv.command-3HLXLNHS.js +0 -12
  86. package/dist/run.command-SXM3J6GI.js +0 -13
  87. package/dist/scan.command-PW7HYURX.js +0 -14
  88. package/dist/telemetry.command-4HKKZK7N.js +0 -11
  89. package/dist/typegen.command-O6OXWCVX.js +0 -12
package/dist/auto-load.js CHANGED
@@ -1,8 +1,8 @@
1
- import './chunk-JV27VNND.js';
2
- import './chunk-LVZSZAKN.js';
1
+ import './chunk-CPD4LFCM.js';
2
+ import './chunk-YHOWSHVH.js';
3
3
  import './chunk-MYHVSJ3X.js';
4
- import './chunk-FBBCEY7C.js';
5
4
  import './chunk-BC7LU4LG.js';
5
+ import './chunk-LVZSZAKN.js';
6
6
  import './chunk-IMB5QAZS.js';
7
7
  import './chunk-XLYSNOR3.js';
8
8
  import './chunk-6PEHRAEP.js';
@@ -1,4 +1,4 @@
1
- import { ansis_default, EnvGraph, MultiplePathsContainerDataSource, DirectoryDataSource, DotEnvFileDataSource } from './chunk-5LNYCOEO.js';
1
+ import { ansis_default, EnvGraph, MultiplePathsContainerDataSource, DirectoryDataSource, DotEnvFileDataSource } from './chunk-XYBJ2DUJ.js';
2
2
  import { my_dash_default } from './chunk-6CCHLM3U.js';
3
3
  import { redactString } from './chunk-XLYSNOR3.js';
4
4
  import { __name } from './chunk-6PEHRAEP.js';
@@ -7,15 +7,20 @@ import path from 'path';
7
7
 
8
8
  async function loadEnvGraph(opts) {
9
9
  const graph = new EnvGraph();
10
- if (opts?.entryFilePaths && opts.entryFilePaths.length > 0) {
10
+ let rawPaths;
11
+ if (opts?.entryFilePaths) {
12
+ rawPaths = Array.isArray(opts.entryFilePaths) ? opts.entryFilePaths : [opts.entryFilePaths];
13
+ }
14
+ if (rawPaths && rawPaths.length > 1) {
11
15
  graph.basePath = opts?.basePath ?? process.cwd();
12
16
  if (opts?.afterInit) await opts.afterInit(graph);
13
17
  if (opts?.currentEnvFallback) graph.envFlagFallback = opts.currentEnvFallback;
14
- const resolvedPaths = opts.entryFilePaths.map((p) => path.resolve(p));
18
+ const resolvedPaths = rawPaths.map((p) => path.resolve(p));
15
19
  await graph.setRootDataSource(new MultiplePathsContainerDataSource(resolvedPaths));
16
- } else if (opts?.entryFilePath) {
17
- const resolvedPath = path.resolve(opts.entryFilePath);
18
- const isDirectory = opts.entryFilePath.endsWith("/") || opts.entryFilePath.endsWith(path.sep) || fs.existsSync(resolvedPath) && fs.statSync(resolvedPath).isDirectory();
20
+ } else if (rawPaths?.length === 1) {
21
+ const entryFilePath = rawPaths[0];
22
+ const resolvedPath = path.resolve(entryFilePath);
23
+ const isDirectory = entryFilePath.endsWith("/") || entryFilePath.endsWith(path.sep) || fs.existsSync(resolvedPath) && fs.statSync(resolvedPath).isDirectory();
19
24
  if (isDirectory) {
20
25
  graph.basePath = resolvedPath;
21
26
  if (opts?.afterInit) await opts.afterInit(graph);
@@ -157,5 +162,5 @@ var CliExitError = class extends Error {
157
162
  };
158
163
 
159
164
  export { CliExitError, formattedValue, getItemSummary, joinAndCompact, loadEnvGraph };
160
- //# sourceMappingURL=chunk-CNDSEDGU.js.map
161
- //# sourceMappingURL=chunk-CNDSEDGU.js.map
165
+ //# sourceMappingURL=chunk-6SU7GLJM.js.map
166
+ //# sourceMappingURL=chunk-6SU7GLJM.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/env-graph/lib/loader.ts","../src/lib/formatting.ts","../src/cli/helpers/exit-error.ts"],"names":[],"mappings":"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","file":"chunk-6SU7GLJM.js","sourcesContent":["import fs from 'node:fs';\nimport path from 'node:path';\nimport _ from '@env-spec/utils/my-dash';\nimport { EnvGraph } from './env-graph';\nimport { DirectoryDataSource, DotEnvFileDataSource, MultiplePathsContainerDataSource } from './data-source';\n\nexport async function loadEnvGraph(opts?: {\n basePath?: string,\n /** Entry file path(s) — accepts a single path or array of paths */\n entryFilePaths?: string | Array<string>,\n relativePaths?: Array<string>,\n checkGitIgnored?: boolean,\n excludeDirs?: Array<string>,\n currentEnvFallback?: string,\n afterInit?: (graph: EnvGraph) => Promise<void>,\n}) {\n const graph = new EnvGraph();\n\n let rawPaths: Array<string> | undefined;\n if (opts?.entryFilePaths) {\n rawPaths = Array.isArray(opts.entryFilePaths) ? opts.entryFilePaths : [opts.entryFilePaths];\n }\n\n if (rawPaths && rawPaths.length > 1) {\n graph.basePath = opts?.basePath ?? process.cwd();\n if (opts?.afterInit) await opts.afterInit(graph);\n if (opts?.currentEnvFallback) graph.envFlagFallback = opts.currentEnvFallback;\n const resolvedPaths = rawPaths.map((p) => path.resolve(p));\n await graph.setRootDataSource(new MultiplePathsContainerDataSource(resolvedPaths));\n } else if (rawPaths?.length === 1) {\n const entryFilePath = rawPaths[0];\n const resolvedPath = path.resolve(entryFilePath);\n const isDirectory = entryFilePath.endsWith('/') || entryFilePath.endsWith(path.sep)\n || (fs.existsSync(resolvedPath) && fs.statSync(resolvedPath).isDirectory());\n if (isDirectory) {\n graph.basePath = resolvedPath;\n if (opts?.afterInit) await opts.afterInit(graph);\n if (opts?.currentEnvFallback) graph.envFlagFallback = opts.currentEnvFallback;\n await graph.setRootDataSource(new DirectoryDataSource(resolvedPath));\n } else {\n graph.basePath = path.dirname(resolvedPath);\n if (opts?.afterInit) await opts.afterInit(graph);\n if (opts?.currentEnvFallback) graph.envFlagFallback = opts.currentEnvFallback;\n await graph.setRootDataSource(new DotEnvFileDataSource(resolvedPath));\n }\n } else {\n graph.basePath = opts?.basePath ?? process.cwd();\n if (opts?.afterInit) await opts.afterInit(graph);\n if (opts?.currentEnvFallback) graph.envFlagFallback = opts.currentEnvFallback;\n await graph.setRootDataSource(new DirectoryDataSource(graph.basePath));\n }\n\n await graph.finishLoad();\n\n return graph;\n}\n\n","import ansis, { type AnsiColors, type AnsiStyles } from 'ansis';\nimport _ from '@env-spec/utils/my-dash';\n\nimport { ConfigItem, VarlockError } from '../env-graph';\nimport { redactString } from '../runtime/lib/redaction';\n\ntype ColorMod = AnsiStyles | AnsiColors;\ntype ColorMods = ColorMod | Array<ColorMod>;\n\nfunction applyMods(str: string, mods?: ColorMods) {\n if (!mods) return str;\n if (_.isArray(mods)) {\n let modStr = str;\n mods.forEach((mod) => {\n modStr = ansis[mod](modStr);\n });\n return modStr;\n }\n return ansis[mods](str);\n}\n\nexport function formattedValue(val: any, showType = false) {\n let strVal: string = '';\n let strType: string = '';\n let mods: ColorMods | undefined;\n if (_.isBoolean(val)) {\n strVal = val.toString();\n mods = ['yellow', 'italic'];\n strType = 'boolean';\n } else if (_.isNumber(val)) {\n strVal = val.toString();\n mods = 'yellow';\n strType = 'number';\n } else if (_.isString(val)) {\n strVal = `\"${val}\"`;\n strType = 'string';\n } else if (_.isPlainObject(val)) {\n // TODO: can definitely make this better...\n strVal = JSON.stringify(val);\n strType = 'object';\n } else if (val === null) {\n strVal = 'null';\n mods = 'gray';\n } else if (val === undefined) {\n strVal = 'undefined';\n mods = 'gray';\n }\n return [\n applyMods(strVal, mods),\n showType && strType ? ansis.gray(` (${strType})`) : '',\n ].join('');\n}\n\n\nexport function formatError(err: VarlockError) {\n let whenStr = '';\n if (err.type === 'SchemaError') {\n whenStr += 'during schema initialization';\n }\n if (err.type === 'ValidationError') {\n whenStr += 'during validation';\n }\n if (err.type === 'CoercionError') {\n whenStr += 'during coercion';\n }\n if (err.type === 'ResolutionError') {\n whenStr += 'during resolution';\n }\n\n let errStr = `${err.icon} ${err.message}`;\n if (err.isUnexpected) {\n errStr += ansis.gray.italic(`\\n (unexpected error${whenStr ? ` ${whenStr}` : ''})`);\n if ('stack' in err) errStr += err.stack;\n }\n return errStr;\n}\n\nexport function joinAndCompact(strings: Array<string | number | boolean | undefined | null | false>, joinChar = ' ') {\n return strings.filter((s) => (\n // we'll not filter out empty strings - because it's useful to just add newlines\n s !== undefined && s !== null && s !== false\n )).join(joinChar);\n}\n\nconst VALIDATION_STATE_COLORS = {\n error: 'red',\n warn: 'yellow',\n valid: 'cyan',\n} as const;\n\nexport function getItemSummary(item: ConfigItem) {\n const summary: Array<string> = [];\n const itemErrors = item.errors;\n const icon = itemErrors.length ? itemErrors[0].icon : '✅';\n const isSensitive = item.isSensitive;\n const isRequired = item.isRequired;\n summary.push(joinAndCompact([\n icon,\n ansis[VALIDATION_STATE_COLORS[item.validationState]](item.key) + (isRequired ? ansis.magenta('*') : ''),\n\n // ansis.gray(`[type = ${item.type.typeLabel}]`),\n isSensitive && ` 🔐${ansis.gray.italic('sensitive')}`,\n\n // item.useAt ? ansis.gray.italic(`(${item.useAt?.join(', ')})`) : undefined,\n ]));\n\n let valAsStr = formattedValue(item.resolvedValue, false);\n if (isSensitive && item.resolvedValue && _.isString(item.resolvedValue)) {\n valAsStr = redactString(item.resolvedValue)!;\n }\n\n summary.push(joinAndCompact([\n ansis.gray(' └'),\n valAsStr,\n item.isCoerced && (\n ansis.gray.italic('< coerced from ')\n + (isSensitive ? formattedValue(item.resolvedRawValue) : formattedValue(item.resolvedRawValue, false))\n ),\n ]));\n\n if (item.isOverridden) {\n summary.push(` 🟡 ${ansis.yellow.italic('set via process.env override')}`);\n }\n\n itemErrors?.forEach((err) => {\n summary.push(ansis[err.isWarning ? 'yellow' : 'red'](` - ${err.isWarning ? '[WARNING] ' : ''}${err.message}`));\n\n // TODO: standardize here how we show parse error locations and stack info?\n\n // summary.push(...err.cleanedStack || '');\n if (err.tip) {\n summary.push(...err.tip.split('\\n').map((line) => ` ${line}`));\n }\n });\n\n // NO OBJECT/CHILDREN FOR NOW\n // for (const childItem of _.values(item.children)) {\n // const childSummary = getItemSummary(childItem);\n // summary.push(childSummary.split('\\n').map((l) => ` ${l}`).join('\\n'));\n // }\n\n return summary.join('\\n');\n}\n","import ansis from 'ansis';\nimport _ from '@env-spec/utils/my-dash';\nimport { joinAndCompact } from '../../lib/formatting';\n\nexport class CliExitError extends Error {\n constructor(\n message: string,\n private more?: {\n details?: string | Array<string>,\n suggestion?: string | Array<string>,\n /** always triggers a full exit, even in watch mode - useful if problem is irrecoverable */\n forceExit?: boolean,\n },\n ) {\n super(message);\n }\n\n get forceExit() { return !!this.more?.forceExit; }\n\n getFormattedOutput() {\n let msg = `\\n💥 ${ansis.red(this.message)} 💥\\n`;\n\n if (this.more?.details) {\n msg += joinAndCompact(_.castArray(this.more?.details), '\\n');\n }\n\n if (this.more?.suggestion) {\n msg += joinAndCompact(_.castArray(this.more?.suggestion), '\\n');\n }\n\n msg += '\\n';\n return msg;\n }\n}\n"]}
@@ -1,7 +1,7 @@
1
- import { patchGlobalResponse } from './chunk-LVZSZAKN.js';
1
+ import { execSyncVarlock } from './chunk-YHOWSHVH.js';
2
2
  import { patchGlobalServerResponse } from './chunk-MYHVSJ3X.js';
3
- import { execSyncVarlock } from './chunk-FBBCEY7C.js';
4
3
  import { patchGlobalConsole } from './chunk-BC7LU4LG.js';
4
+ import { patchGlobalResponse } from './chunk-LVZSZAKN.js';
5
5
  import { initVarlockEnv } from './chunk-IMB5QAZS.js';
6
6
 
7
7
  // src/auto-load.ts
@@ -18,5 +18,5 @@ initVarlockEnv();
18
18
  patchGlobalConsole();
19
19
  patchGlobalServerResponse();
20
20
  patchGlobalResponse();
21
- //# sourceMappingURL=chunk-JV27VNND.js.map
22
- //# sourceMappingURL=chunk-JV27VNND.js.map
21
+ //# sourceMappingURL=chunk-CPD4LFCM.js.map
22
+ //# sourceMappingURL=chunk-CPD4LFCM.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/auto-load.ts"],"names":[],"mappings":";;;;;;;AAaA,IAAM,UAAA,GAAa,gBAAgB,mCAAA,EAAqC;AAAA,EACtE,WAAA,EAAa,IAAA;AAAA,EACb,eAAA,EAAiB,IAAA;AAAA;AAAA;AAAA;AAAA,EAIjB,SAAA,EAAW,YAAY,OAAA,IAAW,IAAI,IAAI,GAAA,EAAK,MAAA,CAAA,IAAA,CAAY,GAAG,CAAA,CAAE;AAClE,CAAC,CAAA;AACD,OAAA,CAAQ,IAAI,aAAA,GAAgB,UAAA;AAG5B,cAAA,EAAe;AAEf,kBAAA,EAAmB;AACnB,yBAAA,EAA0B;AAC1B,mBAAA,EAAoB","file":"chunk-JV27VNND.js","sourcesContent":["import { execSyncVarlock } from './lib/exec-sync-varlock';\n\nimport { initVarlockEnv } from './runtime/env';\nimport { patchGlobalConsole } from './runtime/patch-console';\nimport { patchGlobalServerResponse } from './runtime/patch-server-response';\nimport { patchGlobalResponse } from './runtime/patch-response';\n\n// The varlock loading process uses async calls, but we need this to run synchronously.\n// because even with top level await, we run into hoisting issues where things happen out of order\n// so we call out to the CLI using execSync\n// this also isolates the varlock loading process from the end user process\n\n\nconst execResult = execSyncVarlock('load --format json-full --compact', {\n exitOnError: true,\n showLogsOnError: true,\n // Pass the directory of this module so that in monorepos the binary search\n // starts from inside the varlock package (e.g. apps/web/node_modules/varlock)\n // rather than from process.cwd(), which may be an unrelated workspace root.\n callerDir: import.meta.dirname ?? new URL('.', import.meta.url).pathname,\n});\nprocess.env.__VARLOCK_ENV = execResult;\n\n// initialize varlock and patch globals as necessary\ninitVarlockEnv();\n// these will be no-ops if these are disabled by settings\npatchGlobalConsole();\npatchGlobalServerResponse();\npatchGlobalResponse();\n\n"]}
1
+ {"version":3,"sources":["../src/auto-load.ts"],"names":[],"mappings":";;;;;;;AAaA,IAAM,UAAA,GAAa,gBAAgB,mCAAA,EAAqC;AAAA,EACtE,WAAA,EAAa,IAAA;AAAA,EACb,eAAA,EAAiB,IAAA;AAAA;AAAA;AAAA;AAAA,EAIjB,SAAA,EAAW,YAAY,OAAA,IAAW,IAAI,IAAI,GAAA,EAAK,MAAA,CAAA,IAAA,CAAY,GAAG,CAAA,CAAE;AAClE,CAAC,CAAA;AACD,OAAA,CAAQ,IAAI,aAAA,GAAgB,UAAA;AAG5B,cAAA,EAAe;AAEf,kBAAA,EAAmB;AACnB,yBAAA,EAA0B;AAC1B,mBAAA,EAAoB","file":"chunk-CPD4LFCM.js","sourcesContent":["import { execSyncVarlock } from './lib/exec-sync-varlock';\n\nimport { initVarlockEnv } from './runtime/env';\nimport { patchGlobalConsole } from './runtime/patch-console';\nimport { patchGlobalServerResponse } from './runtime/patch-server-response';\nimport { patchGlobalResponse } from './runtime/patch-response';\n\n// The varlock loading process uses async calls, but we need this to run synchronously.\n// because even with top level await, we run into hoisting issues where things happen out of order\n// so we call out to the CLI using execSync\n// this also isolates the varlock loading process from the end user process\n\n\nconst execResult = execSyncVarlock('load --format json-full --compact', {\n exitOnError: true,\n showLogsOnError: true,\n // Pass the directory of this module so that in monorepos the binary search\n // starts from inside the varlock package (e.g. apps/web/node_modules/varlock)\n // rather than from process.cwd(), which may be an unrelated workspace root.\n callerDir: import.meta.dirname ?? new URL('.', import.meta.url).pathname,\n});\nprocess.env.__VARLOCK_ENV = execResult;\n\n// initialize varlock and patch globals as necessary\ninitVarlockEnv();\n// these will be no-ops if these are disabled by settings\npatchGlobalConsole();\npatchGlobalServerResponse();\npatchGlobalResponse();\n\n"]}
@@ -1,8 +1,8 @@
1
- import { fmt } from './chunk-R54KUFZA.js';
1
+ import { fmt } from './chunk-P6RTPTWC.js';
2
2
  import { define } from './chunk-4A54P4EM.js';
3
3
  import { gracefulExit } from './chunk-CHQDS2PI.js';
4
- import { CliExitError } from './chunk-CNDSEDGU.js';
5
- import { getUserVarlockDir } from './chunk-5LNYCOEO.js';
4
+ import { CliExitError } from './chunk-6SU7GLJM.js';
5
+ import { getUserVarlockDir } from './chunk-XYBJ2DUJ.js';
6
6
  import { __name } from './chunk-6PEHRAEP.js';
7
7
  import { join } from 'path';
8
8
  import { mkdir, readFile, writeFile } from 'fs/promises';
@@ -63,5 +63,5 @@ var commandFn = /* @__PURE__ */ __name(async (ctx) => {
63
63
  }, "commandFn");
64
64
 
65
65
  export { commandFn, commandSpec };
66
- //# sourceMappingURL=chunk-ZB2JSJLY.js.map
67
- //# sourceMappingURL=chunk-ZB2JSJLY.js.map
66
+ //# sourceMappingURL=chunk-FHMYVMQZ.js.map
67
+ //# sourceMappingURL=chunk-FHMYVMQZ.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/cli/commands/telemetry.command.ts"],"names":[],"mappings":";;;;;;;;;;AAWO,IAAM,cAAc,MAAA,CAAO;AAAA,EAChC,IAAA,EAAM,WAAA;AAAA,EACN,WAAA,EAAa,0CAAA;AAAA,EACb,IAAA,EAAM;AAAA,IACJ,IAAA,EAAM;AAAA,MACJ,IAAA,EAAM,YAAA;AAAA,MACN,WAAA,EAAa;AAAA;AACf,GACF;AAAA,EACA,QAAA,EAAU;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA,EAAA,CAAA,CAWR,IAAA;AACJ,CAAC;AAEM,IAAM,SAAA,iCAA6D,GAAA,KAAQ;AAEhF,EAAA,IAAI,CAAC,CAAC,QAAA,EAAU,SAAS,EAAE,QAAA,CAAS,GAAA,CAAI,MAAA,CAAO,IAAI,CAAA,EAAG;AACpD,IAAA,MAAM,IAAI,aAAa,8CAAA,EAAgD;AAAA,MACrE,SAAA,EAAW;AAAA,KACZ,CAAA;AAAA,EACH;AAEA,EAAA,MAAM,YAAY,iBAAA,EAAkB;AACpC,EAAA,MAAM,UAAA,GAAa,IAAA,CAAK,SAAA,EAAW,aAAa,CAAA;AAEhD,EAAA,IAAI;AAEF,IAAA,IAAI,CAAC,UAAA,CAAW,SAAS,CAAA,EAAG;AAC1B,MAAA,MAAM,KAAA,CAAM,SAAA,EAAW,EAAE,SAAA,EAAW,MAAM,CAAA;AAAA,IAC5C;AAGA,IAAA,IAAI,SAA8B,EAAC;AACnC,IAAA,IAAI,UAAA,CAAW,UAAU,CAAA,EAAG;AAC1B,MAAA,MAAM,aAAA,GAAgB,MAAM,QAAA,CAAS,UAAA,EAAY,OAAO,CAAA;AACxD,MAAA,MAAA,GAAS,IAAA,CAAK,MAAM,aAAa,CAAA;AAAA,IACnC;AAGA,IAAA,IAAI,GAAA,CAAI,MAAA,CAAO,IAAA,KAAS,SAAA,SAAkB,iBAAA,GAAoB,IAAA;AAAA,gBAClD,MAAA,CAAO,iBAAA;AACnB,IAAA,MAAM,UAAU,UAAA,EAAY,IAAA,CAAK,UAAU,MAAA,EAAQ,IAAA,EAAM,CAAC,CAAC,CAAA;AAE3D,IAAA,IAAI,GAAA,CAAI,MAAA,CAAO,IAAA,KAAS,QAAA,EAAU;AAChC,MAAA,OAAA,CAAQ,IAAI,uDAAkD,CAAA;AAAA,IAChE,CAAA,MAAO;AACL,MAAA,OAAA,CAAQ,IAAI,wDAAmD,CAAA;AAAA,IACjE;AACA,IAAA,OAAA,CAAQ,GAAA,CAAI,aAAA,EAAe,GAAA,CAAI,QAAA,CAAS,UAAU,CAAC,CAAA;AAAA,EACrD,SAAS,KAAA,EAAO;AACd,IAAA,OAAA,CAAQ,KAAA,CAAM,mCAAmC,KAAK,CAAA;AACtD,IAAA,OAAO,aAAa,CAAC,CAAA;AAAA,EACvB;AACF,CAAA,EAvCmE,WAAA","file":"chunk-ZB2JSJLY.js","sourcesContent":["import { join } from 'node:path';\nimport { mkdir, writeFile, readFile } from 'node:fs/promises';\nimport { existsSync } from 'node:fs';\nimport { define } from 'gunshi';\nimport { type TypedGunshiCommandFn } from '../helpers/gunshi-type-utils';\nimport { gracefulExit } from 'exit-hook';\nimport { fmt } from '../helpers/pretty-format';\nimport { CliExitError } from '../helpers/exit-error';\nimport { getUserVarlockDir } from '../../lib/user-config-dir';\n\n\nexport const commandSpec = define({\n name: 'telemetry',\n description: 'Enable/disable anonymous usage analytics',\n args: {\n mode: {\n type: 'positional',\n description: '\"enable\" or \"disable\"',\n },\n },\n examples: `\nOpts in/out of anonymous usage analytics. This command creates/updates a configuration\nfile at $XDG_CONFIG_HOME/varlock/config.json (or ~/.config/varlock/config.json) saving\nyour preference.\n\nExamples:\n varlock telemetry disable # Opt out of telemetry\n varlock telemetry enable # Opt in to telemetry\n\n💡 Tip: You can also temporarily opt out by setting VARLOCK_TELEMETRY_DISABLED=1\nFor more information, visit https://varlock.dev/guides/telemetry/\n `.trim(),\n});\n\nexport const commandFn: TypedGunshiCommandFn<typeof commandSpec> = async (ctx) => {\n // TODO: remove this when gunshi supports types/validation for positional args\n if (!['enable', 'disable'].includes(ctx.values.mode)) {\n throw new CliExitError('additional arg must be \"enable\" or \"disable\"', {\n forceExit: true,\n });\n }\n\n const configDir = getUserVarlockDir();\n const configPath = join(configDir, 'config.json');\n\n try {\n // Create .varlock directory if it doesn't exist\n if (!existsSync(configDir)) {\n await mkdir(configDir, { recursive: true });\n }\n\n // Read existing config if it exists\n let config: Record<string, any> = {};\n if (existsSync(configPath)) {\n const configContent = await readFile(configPath, 'utf-8');\n config = JSON.parse(configContent);\n }\n\n // update config `telemetryDisabled` setting\n if (ctx.values.mode === 'disable') config.telemetryDisabled = true;\n else delete config.telemetryDisabled;\n await writeFile(configPath, JSON.stringify(config, null, 2));\n\n if (ctx.values.mode === 'enable') {\n console.log('✅ Successfully enabled anonymous usage analytics');\n } else {\n console.log('✅ Successfully disabled anonymous usage analytics');\n }\n console.log('> saved in:', fmt.filePath(configPath));\n } catch (error) {\n console.error('Failed to opt out of analytics:', error);\n return gracefulExit(1);\n }\n};\n"]}
1
+ {"version":3,"sources":["../src/cli/commands/telemetry.command.ts"],"names":[],"mappings":";;;;;;;;;;AAWO,IAAM,cAAc,MAAA,CAAO;AAAA,EAChC,IAAA,EAAM,WAAA;AAAA,EACN,WAAA,EAAa,0CAAA;AAAA,EACb,IAAA,EAAM;AAAA,IACJ,IAAA,EAAM;AAAA,MACJ,IAAA,EAAM,YAAA;AAAA,MACN,WAAA,EAAa;AAAA;AACf,GACF;AAAA,EACA,QAAA,EAAU;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA,EAAA,CAAA,CAWR,IAAA;AACJ,CAAC;AAEM,IAAM,SAAA,iCAA6D,GAAA,KAAQ;AAEhF,EAAA,IAAI,CAAC,CAAC,QAAA,EAAU,SAAS,EAAE,QAAA,CAAS,GAAA,CAAI,MAAA,CAAO,IAAI,CAAA,EAAG;AACpD,IAAA,MAAM,IAAI,aAAa,8CAAA,EAAgD;AAAA,MACrE,SAAA,EAAW;AAAA,KACZ,CAAA;AAAA,EACH;AAEA,EAAA,MAAM,YAAY,iBAAA,EAAkB;AACpC,EAAA,MAAM,UAAA,GAAa,IAAA,CAAK,SAAA,EAAW,aAAa,CAAA;AAEhD,EAAA,IAAI;AAEF,IAAA,IAAI,CAAC,UAAA,CAAW,SAAS,CAAA,EAAG;AAC1B,MAAA,MAAM,KAAA,CAAM,SAAA,EAAW,EAAE,SAAA,EAAW,MAAM,CAAA;AAAA,IAC5C;AAGA,IAAA,IAAI,SAA8B,EAAC;AACnC,IAAA,IAAI,UAAA,CAAW,UAAU,CAAA,EAAG;AAC1B,MAAA,MAAM,aAAA,GAAgB,MAAM,QAAA,CAAS,UAAA,EAAY,OAAO,CAAA;AACxD,MAAA,MAAA,GAAS,IAAA,CAAK,MAAM,aAAa,CAAA;AAAA,IACnC;AAGA,IAAA,IAAI,GAAA,CAAI,MAAA,CAAO,IAAA,KAAS,SAAA,SAAkB,iBAAA,GAAoB,IAAA;AAAA,gBAClD,MAAA,CAAO,iBAAA;AACnB,IAAA,MAAM,UAAU,UAAA,EAAY,IAAA,CAAK,UAAU,MAAA,EAAQ,IAAA,EAAM,CAAC,CAAC,CAAA;AAE3D,IAAA,IAAI,GAAA,CAAI,MAAA,CAAO,IAAA,KAAS,QAAA,EAAU;AAChC,MAAA,OAAA,CAAQ,IAAI,uDAAkD,CAAA;AAAA,IAChE,CAAA,MAAO;AACL,MAAA,OAAA,CAAQ,IAAI,wDAAmD,CAAA;AAAA,IACjE;AACA,IAAA,OAAA,CAAQ,GAAA,CAAI,aAAA,EAAe,GAAA,CAAI,QAAA,CAAS,UAAU,CAAC,CAAA;AAAA,EACrD,SAAS,KAAA,EAAO;AACd,IAAA,OAAA,CAAQ,KAAA,CAAM,mCAAmC,KAAK,CAAA;AACtD,IAAA,OAAO,aAAa,CAAC,CAAA;AAAA,EACvB;AACF,CAAA,EAvCmE,WAAA","file":"chunk-FHMYVMQZ.js","sourcesContent":["import { join } from 'node:path';\nimport { mkdir, writeFile, readFile } from 'node:fs/promises';\nimport { existsSync } from 'node:fs';\nimport { define } from 'gunshi';\nimport { type TypedGunshiCommandFn } from '../helpers/gunshi-type-utils';\nimport { gracefulExit } from 'exit-hook';\nimport { fmt } from '../helpers/pretty-format';\nimport { CliExitError } from '../helpers/exit-error';\nimport { getUserVarlockDir } from '../../lib/user-config-dir';\n\n\nexport const commandSpec = define({\n name: 'telemetry',\n description: 'Enable/disable anonymous usage analytics',\n args: {\n mode: {\n type: 'positional',\n description: '\"enable\" or \"disable\"',\n },\n },\n examples: `\nOpts in/out of anonymous usage analytics. This command creates/updates a configuration\nfile at $XDG_CONFIG_HOME/varlock/config.json (or ~/.config/varlock/config.json) saving\nyour preference.\n\nExamples:\n varlock telemetry disable # Opt out of telemetry\n varlock telemetry enable # Opt in to telemetry\n\n💡 Tip: You can also temporarily opt out by setting VARLOCK_TELEMETRY_DISABLED=1\nFor more information, visit https://varlock.dev/guides/telemetry/\n `.trim(),\n});\n\nexport const commandFn: TypedGunshiCommandFn<typeof commandSpec> = async (ctx) => {\n // TODO: remove this when gunshi supports types/validation for positional args\n if (!['enable', 'disable'].includes(ctx.values.mode)) {\n throw new CliExitError('additional arg must be \"enable\" or \"disable\"', {\n forceExit: true,\n });\n }\n\n const configDir = getUserVarlockDir();\n const configPath = join(configDir, 'config.json');\n\n try {\n // Create .varlock directory if it doesn't exist\n if (!existsSync(configDir)) {\n await mkdir(configDir, { recursive: true });\n }\n\n // Read existing config if it exists\n let config: Record<string, any> = {};\n if (existsSync(configPath)) {\n const configContent = await readFile(configPath, 'utf-8');\n config = JSON.parse(configContent);\n }\n\n // update config `telemetryDisabled` setting\n if (ctx.values.mode === 'disable') config.telemetryDisabled = true;\n else delete config.telemetryDisabled;\n await writeFile(configPath, JSON.stringify(config, null, 2));\n\n if (ctx.values.mode === 'enable') {\n console.log('✅ Successfully enabled anonymous usage analytics');\n } else {\n console.log('✅ Successfully disabled anonymous usage analytics');\n }\n console.log('> saved in:', fmt.filePath(configPath));\n } catch (error) {\n console.error('Failed to opt out of analytics:', error);\n return gracefulExit(1);\n }\n};\n"]}
@@ -1,9 +1,9 @@
1
1
  import { define } from './chunk-4A54P4EM.js';
2
- import { checkForSchemaErrors, checkForNoEnvFiles } from './chunk-QLNQ3KVC.js';
3
- import { loadVarlockEnvGraph } from './chunk-4JWJZ4P3.js';
2
+ import { checkForSchemaErrors, checkForNoEnvFiles } from './chunk-UROBADYQ.js';
3
+ import { loadVarlockEnvGraph } from './chunk-UWINGOPT.js';
4
4
  import { gracefulExit } from './chunk-CHQDS2PI.js';
5
- import { CliExitError, formattedValue } from './chunk-CNDSEDGU.js';
6
- import { StaticValueResolver, ansis_default } from './chunk-5LNYCOEO.js';
5
+ import { CliExitError, formattedValue } from './chunk-6SU7GLJM.js';
6
+ import { StaticValueResolver, ansis_default } from './chunk-XYBJ2DUJ.js';
7
7
  import { my_dash_default } from './chunk-6CCHLM3U.js';
8
8
  import { redactString } from './chunk-XLYSNOR3.js';
9
9
  import { __name } from './chunk-6PEHRAEP.js';
@@ -20,7 +20,8 @@ var commandSpec = define({
20
20
  path: {
21
21
  type: "string",
22
22
  short: "p",
23
- description: "Path to a specific .env file or directory to use as the entry point"
23
+ multiple: true,
24
+ description: "Path to a specific .env file or directory to use as the entry point (can be specified multiple times)"
24
25
  }
25
26
  },
26
27
  examples: `
@@ -54,7 +55,7 @@ var commandFn = /* @__PURE__ */ __name(async (ctx) => {
54
55
  const varName = positionals[0];
55
56
  const envGraph = await loadVarlockEnvGraph({
56
57
  currentEnvFallback: ctx.values.env,
57
- entryFilePath: ctx.values.path
58
+ entryFilePaths: ctx.values.path
58
59
  });
59
60
  checkForSchemaErrors(envGraph);
60
61
  checkForNoEnvFiles(envGraph);
@@ -158,5 +159,5 @@ var commandFn = /* @__PURE__ */ __name(async (ctx) => {
158
159
  }, "commandFn");
159
160
 
160
161
  export { commandFn, commandSpec };
161
- //# sourceMappingURL=chunk-J4PGGBUP.js.map
162
- //# sourceMappingURL=chunk-J4PGGBUP.js.map
162
+ //# sourceMappingURL=chunk-FKC5YJXL.js.map
163
+ //# sourceMappingURL=chunk-FKC5YJXL.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/cli/commands/explain.command.ts"],"names":[],"mappings":";;;;;;;;;;;AAeO,IAAM,cAAc,MAAA,CAAO;AAAA,EAChC,IAAA,EAAM,SAAA;AAAA,EACN,WAAA,EAAa,+DAAA;AAAA,EACb,IAAA,EAAM;AAAA,IACJ,GAAA,EAAK;AAAA,MACH,IAAA,EAAM,QAAA;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,CAAA,CAQV,IAAA;AACF,CAAC;AAED,SAAS,gBAAA,CAAiB,QAAA,EAAe,MAAA,GAAS,EAAA,EAAY;AAC5D,EAAA,IAAI,oBAAoB,mBAAA,EAAqB;AAC3C,IAAA,OAAO,GAAG,MAAM,CAAA,YAAA,CAAA;AAAA,EAClB;AACA,EAAA,MAAM,SAAS,QAAA,CAAS,MAAA;AACxB,EAAA,IAAI,MAAA,IAAU,CAAC,MAAA,CAAO,UAAA,CAAW,IAAI,CAAA,EAAG;AACtC,IAAA,OAAO,CAAA,EAAG,MAAM,CAAA,EAAG,MAAM,CAAA,EAAA,CAAA;AAAA,EAC3B;AACA,EAAA,OAAO,GAAG,MAAM,CAAA,UAAA,CAAA;AAClB;AATS,MAAA,CAAA,gBAAA,EAAA,kBAAA,CAAA;AAWF,IAAM,SAAA,iCAA6D,GAAA,KAAQ;AAChF,EAAA,MAAM,WAAA,GAAA,CAAe,IAAI,WAAA,IAAe,IAAI,KAAA,CAAM,GAAA,CAAI,WAAA,EAAa,MAAA,IAAU,CAAC,CAAA;AAC9E,EAAA,IAAI,CAAC,YAAY,MAAA,EAAQ;AACvB,IAAA,MAAM,IAAI,aAAa,0CAAA,EAA4C;AAAA,MACjE,UAAA,EAAY;AAAA,KACb,CAAA;AAAA,EACH;AACA,EAAA,MAAM,OAAA,GAAU,YAAY,CAAC,CAAA;AAE7B,EAAA,MAAM,QAAA,GAAW,MAAM,mBAAA,CAAoB;AAAA,IACzC,kBAAA,EAAoB,IAAI,MAAA,CAAO,GAAA;AAAA,IAC/B,cAAA,EAAgB,IAAI,MAAA,CAAO;AAAA,GAC5B,CAAA;AAED,EAAA,oBAAA,CAAqB,QAAQ,CAAA;AAC7B,EAAA,kBAAA,CAAmB,QAAQ,CAAA;AAE3B,EAAA,IAAI,EAAE,OAAA,IAAW,QAAA,CAAS,YAAA,CAAA,EAAe;AACvC,IAAA,MAAM,IAAI,YAAA,CAAa,CAAA,UAAA,EAAa,OAAO,CAAA,qBAAA,CAAuB,CAAA;AAAA,EACpE;AAEA,EAAA,MAAM,SAAS,gBAAA,EAAiB;AAEhC,EAAA,MAAM,IAAA,GAAO,QAAA,CAAS,YAAA,CAAa,OAAO,CAAA;AAC1C,EAAA,MAAM,cAAc,IAAA,CAAK,WAAA;AAGzB,EAAA,OAAA,CAAQ,IAAI,EAAE,CAAA;AACd,EAAA,OAAA,CAAQ,GAAA,CAAI,cAAM,IAAA,CAAK,IAAA,CAAK,KAAK,IAAA,CAAK,GAAG,EAAE,CAAC,CAAA;AAC5C,EAAA,OAAA,CAAQ,IAAI,EAAE,CAAA;AAGd,EAAA,IAAI,KAAK,WAAA,EAAa;AACpB,IAAA,OAAA,CAAQ,GAAA,CAAI,KAAK,aAAA,CAAM,IAAA,CAAK,cAAc,CAAC,CAAA,CAAA,EAAI,IAAA,CAAK,WAAW,CAAA,CAAE,CAAA;AAAA,EACnE;AAGA,EAAA,IAAI,KAAK,QAAA,EAAU;AACjB,IAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,EAAA,EAAK,aAAA,CAAM,IAAA,CAAK,OAAO,CAAC,CAAA,CAAA,EAAI,IAAA,CAAK,QAAA,CAAS,IAAI,CAAA,CAAE,CAAA;AAAA,EAC9D;AAGA,EAAA,MAAM,QAAQ,EAAC;AACf,EAAA,IAAI,IAAA,CAAK,UAAA,EAAY,KAAA,CAAM,IAAA,CAAK,UAAU,CAAA;AAAA,OACrC,KAAA,CAAM,KAAK,UAAU,CAAA;AAC1B,EAAA,IAAI,WAAA,EAAa,KAAA,CAAM,IAAA,CAAK,WAAW,CAAA;AAAA,OAClC,KAAA,CAAM,KAAK,QAAQ,CAAA;AACxB,EAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,EAAA,EAAK,aAAA,CAAM,IAAA,CAAK,aAAa,CAAC,CAAA,CAAA,EAAI,KAAA,CAAM,IAAA,CAAK,IAAI,CAAC,CAAA,CAAE,CAAA;AAGhE,EAAA,OAAA,CAAQ,IAAI,EAAE,CAAA;AACd,EAAA,OAAA,CAAQ,GAAA,CAAI,aAAA,CAAM,IAAA,CAAK,kBAAkB,CAAC,CAAA;AAC1C,EAAA,IAAI,IAAA,CAAK,oBAAoB,OAAA,EAAS;AACpC,IAAA,OAAA,CAAQ,IAAI,CAAA,EAAA,EAAK,aAAA,CAAM,GAAA,CAAI,uBAAuB,CAAC,CAAA,CAAE,CAAA;AACrD,IAAA,KAAA,MAAW,GAAA,IAAO,KAAK,MAAA,EAAQ;AAC7B,MAAA,OAAA,CAAQ,GAAA,CAAI,KAAK,aAAA,CAAM,GAAA,CAAI,OAAO,GAAA,CAAI,OAAO,CAAA,CAAE,CAAC,CAAA,CAAE,CAAA;AAAA,IACpD;AAAA,EACF,CAAA,MAAO;AACL,IAAA,IAAI,MAAA,GAAS,cAAA,CAAe,IAAA,CAAK,aAAA,EAAe,IAAI,CAAA;AACpD,IAAA,IAAI,eAAe,IAAA,CAAK,aAAA,IAAiB,gBAAE,QAAA,CAAS,IAAA,CAAK,aAAa,CAAA,EAAG;AACvE,MAAA,MAAA,GAAS,YAAA,CAAa,KAAK,aAAa,CAAA;AAAA,IAC1C;AACA,IAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,IAAA,EAAO,MAAM,CAAA,CAAE,CAAA;AAC3B,IAAA,IAAI,KAAK,SAAA,EAAW;AAClB,MAAA,IAAI,MAAA,GAAS,cAAA,CAAe,IAAA,CAAK,gBAAA,EAAkB,IAAI,CAAA;AACvD,MAAA,IAAI,eAAe,IAAA,CAAK,gBAAA,IAAoB,gBAAE,QAAA,CAAS,IAAA,CAAK,gBAAgB,CAAA,EAAG;AAC7E,QAAA,MAAA,GAAS,YAAA,CAAa,KAAK,gBAAgB,CAAA;AAAA,MAC7C;AACA,MAAA,OAAA,CAAQ,GAAA,CAAI,OAAO,aAAA,CAAM,IAAA,CAAK,OAAO,CAAA,aAAA,EAAgB,MAAM,CAAA,CAAE,CAAC,CAAA,CAAE,CAAA;AAAA,IAClE;AAAA,EACF;AAGA,EAAA,OAAA,CAAQ,IAAI,EAAE,CAAA;AACd,EAAA,OAAA,CAAQ,GAAA,CAAI,aAAA,CAAM,IAAA,CAAK,gBAAgB,CAAC,CAAA;AAExC,EAAA,IAAI,KAAK,YAAA,EAAc;AACrB,IAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,IAAA,EAAO,aAAA,CAAM,MAAA,CAAO,6BAAwB,CAAC,CAAA,CAAA,EAAI,aAAA,CAAM,MAAA,CAAO,IAAA,CAAK,UAAU,CAAC,CAAA,CAAE,CAAA;AAC5F,IAAA,MAAM,iBAAiB,IAAA,CAAK,cAAA;AAC5B,IAAA,IAAI,cAAA,EAAgB;AAClB,MAAA,MAAM,WAAA,GAAc,cAAA,CAAe,MAAA,EAAQ,KAAA,IAAS,UAAA;AACpD,MAAA,MAAM,YAAA,GAAe,eAAe,OAAA,CAAQ,QAAA,GACxC,iBAAiB,cAAA,CAAe,OAAA,CAAQ,QAAQ,CAAA,GAChD,UAAA;AACJ,MAAA,OAAA,CAAQ,IAAI,CAAA,IAAA,EAAO,aAAA,CAAM,IAAA,CAAK,QAAG,CAAC,CAAA,CAAA,EAAI,aAAA,CAAM,IAAA,CAAK,MAAA,CAAO,aAAa,YAAY,CAAA,MAAA,EAAS,WAAW,CAAA,iBAAA,CAAmB,CAAC,CAAA,CAAE,CAAA;AAAA,IAC7H;AAAA,EACF,CAAA,MAAO;AACL,IAAA,MAAM,iBAAiB,IAAA,CAAK,cAAA;AAC5B,IAAA,IAAI,cAAA,EAAgB;AAClB,MAAA,MAAM,WAAA,GAAc,cAAA,CAAe,MAAA,EAAQ,KAAA,IAAS,UAAA;AACpD,MAAA,MAAM,YAAA,GAAe,eAAe,OAAA,CAAQ,QAAA,GACxC,iBAAiB,cAAA,CAAe,OAAA,CAAQ,QAAQ,CAAA,GAChD,UAAA;AACJ,MAAA,OAAA,CAAQ,GAAA,CAAI,OAAO,YAAY,CAAA,MAAA,EAAS,cAAM,IAAA,CAAK,WAAW,CAAC,CAAA,CAAE,CAAA;AAAA,IACnE,CAAA,MAAO;AACL,MAAA,OAAA,CAAQ,IAAI,CAAA,IAAA,EAAO,aAAA,CAAM,IAAA,CAAK,gBAAgB,CAAC,CAAA,CAAE,CAAA;AAAA,IACnD;AAAA,EACF;AAGA,EAAA,MAAM,OAAO,IAAA,CAAK,IAAA;AAClB,EAAA,IAAI,KAAK,MAAA,EAAQ;AACf,IAAA,OAAA,CAAQ,IAAI,EAAE,CAAA;AACd,IAAA,OAAA,CAAQ,IAAI,aAAA,CAAM,IAAA,CAAK,mBAAmB,CAAA,GAAI,cAAM,IAAA,CAAK,CAAA,EAAA,EAAK,IAAA,CAAK,MAAM,UAAU,IAAA,CAAK,MAAA,GAAS,IAAI,GAAA,GAAM,EAAE,2BAA2B,CAAC,CAAA;AAEzI,IAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,IAAA,CAAK,QAAQ,CAAA,EAAA,EAAK;AACpC,MAAA,MAAM,GAAA,GAAM,KAAK,CAAC,CAAA;AAClB,MAAA,MAAM,WAAA,GAAc,GAAA,CAAI,MAAA,EAAQ,KAAA,IAAS,oBAAA;AACzC,MAAA,MAAM,UAAA,GAAa,GAAA,CAAI,MAAA,EAAQ,IAAA,IAAQ,SAAA;AAEvC,MAAA,MAAM,cAAA,GAAiB,CAAC,IAAA,CAAK,YAAA,IAAgB,QAAQ,IAAA,CAAK,cAAA;AAC1D,MAAA,MAAM,MAAA,GAAS,cAAA,GAAiB,aAAA,CAAM,KAAA,CAAM,gBAAW,CAAA,GAAI,EAAA;AAE3D,MAAA,OAAA,CAAQ,GAAA,CAAI,OAAO,aAAA,CAAM,IAAA,CAAK,GAAG,CAAA,GAAI,CAAC,CAAA,CAAA,CAAG,CAAC,CAAA,CAAA,EAAI,aAAA,CAAM,KAAK,WAAW,CAAC,CAAA,CAAA,EAAI,aAAA,CAAM,IAAA,CAAK,CAAA,CAAA,EAAI,UAAU,CAAA,CAAA,CAAG,CAAC,CAAA,EAAG,MAAM,CAAA,CAAE,CAAA;AAGjH,MAAA,IAAI,GAAA,CAAI,QAAQ,QAAA,EAAU;AACxB,QAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,OAAA,EAAU,aAAA,CAAM,IAAA,CAAK,QAAQ,CAAC,CAAA,CAAA,EAAI,gBAAA,CAAiB,GAAA,CAAI,OAAA,CAAQ,QAAQ,CAAC,CAAA,CAAE,CAAA;AAAA,MACxF,CAAA,MAAO;AACL,QAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,OAAA,EAAU,aAAA,CAAM,IAAA,CAAK,QAAQ,CAAC,CAAA,CAAA,EAAI,aAAA,CAAM,IAAA,CAAK,MAAA,CAAO,0BAA0B,CAAC,CAAA,CAAE,CAAA;AAAA,MAC/F;AAGA,MAAA,MAAM,QAAA,GAAW,GAAA,CAAI,OAAA,CAAQ,UAAA,EAAY,GAAA,CAAI,CAAC,CAAA,KAAM,CAAA,CAAA,EAAI,CAAA,CAAE,IAAI,CAAA,CAAE,CAAA,CAAE,KAAK,IAAI,CAAA;AAC3E,MAAA,IAAI,QAAA,EAAU;AACZ,QAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,OAAA,EAAU,aAAA,CAAM,IAAA,CAAK,aAAa,CAAC,CAAA,CAAA,EAAI,aAAA,CAAM,OAAA,CAAQ,QAAQ,CAAC,CAAA,CAAE,CAAA;AAAA,MAC9E;AAAA,IACF;AAAA,EACF;AAGA,EAAA,MAAM,YAAY,IAAA,CAAK,SAAA;AACvB,EAAA,IAAI,UAAU,MAAA,EAAQ;AACpB,IAAA,OAAA,CAAQ,IAAI,EAAE,CAAA;AACd,IAAA,OAAA,CAAQ,GAAA,CAAI,aAAA,CAAM,IAAA,CAAK,iBAAiB,CAAC,CAAA;AACzC,IAAA,KAAA,MAAW,QAAQ,SAAA,EAAW;AAC5B,MAAA,MAAM,QAAQ,IAAA,CAAK,WAAA,GAAc,CAAA,EAAG,IAAA,CAAK,WAAW,CAAA,EAAA,CAAA,GAAO,EAAA;AAC3D,MAAA,OAAA,CAAQ,GAAA,CAAI,OAAO,KAAK,CAAA,EAAG,cAAM,SAAA,CAAU,IAAA,CAAK,GAAG,CAAC,CAAA,CAAE,CAAA;AAAA,IACxD;AAAA,EACF;AAEA,EAAA,OAAA,CAAQ,IAAI,EAAE,CAAA;AAEd,EAAA,IAAI,IAAA,CAAK,oBAAoB,OAAA,EAAS;AACpC,IAAA,YAAA,CAAa,CAAC,CAAA;AAAA,EAChB;AACF,CAAA,EAlJmE,WAAA","file":"chunk-FKC5YJXL.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,4 +1,4 @@
1
- import { require_semver } from './chunk-5LNYCOEO.js';
1
+ import { require_semver } from './chunk-XYBJ2DUJ.js';
2
2
  import { __toESM, __name } from './chunk-6PEHRAEP.js';
3
3
 
4
4
  // src/lib/check-bun-version.ts
@@ -18,5 +18,5 @@ Bun ${MIN_BUN_VERSION} introduced the \`--no-env-file\` flag which is required t
18
18
  __name(checkBunVersion, "checkBunVersion");
19
19
 
20
20
  export { checkBunVersion };
21
- //# sourceMappingURL=chunk-RYMTOGGL.js.map
22
- //# sourceMappingURL=chunk-RYMTOGGL.js.map
21
+ //# sourceMappingURL=chunk-J6GN4T2B.js.map
22
+ //# sourceMappingURL=chunk-J6GN4T2B.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/lib/check-bun-version.ts"],"names":["semver"],"mappings":";;;;AAAA,IAAA,aAAA,GAAmB,OAAA,CAAA,cAAA,EAAA,EAAA,CAAA,CAAA;AAQZ,IAAM,eAAA,GAAkB,OAAA;AAMxB,SAAS,eAAA,GAAkB;AAChC,EAAA,MAAM,UAAA,GAAa,QAAQ,QAAA,CAAS,GAAA;AACpC,EAAA,IAAI,CAAC,UAAA,EAAY;AAEjB,EAAA,IAAI,CAAC,aAAA,CAAAA,OAAAA,CAAO,GAAA,CAAI,UAAA,EAAY,eAAe,CAAA,EAAG;AAC5C,IAAA,MAAM,IAAI,KAAA;AAAA,MACR,CAAA,wBAAA,EAA2B,eAAe,CAAA,wBAAA,EAA2B,UAAU,CAAA;AAAA;AAAA,IAAA,EAEtE,eAAe,CAAA,8GAAA;AAAA,KAE1B;AAAA,EACF;AACF;AAZgB,MAAA,CAAA,eAAA,EAAA,iBAAA,CAAA","file":"chunk-RYMTOGGL.js","sourcesContent":["import semver from 'semver';\n\n/**\n * Minimum Bun version required for varlock to work correctly.\n * Bun v1.3.3 introduced the ability to disable built-in .env file loading\n * via `--no-env-file` flag or `env = false` in bunfig.toml, which is necessary\n * to prevent conflicts with varlock's own .env loading.\n */\nexport const MIN_BUN_VERSION = '1.3.3';\n\n/**\n * Checks if the current Bun version meets the minimum requirement.\n * Throws an error if running on an unsupported Bun version.\n */\nexport function checkBunVersion() {\n const bunVersion = process.versions.bun;\n if (!bunVersion) return;\n\n if (!semver.gte(bunVersion, MIN_BUN_VERSION)) {\n throw new Error(\n `Varlock requires Bun >= ${MIN_BUN_VERSION}, but you are using Bun ${bunVersion}.\\n`\n + 'Please upgrade Bun by running: `bun upgrade`\\n'\n + `Bun ${MIN_BUN_VERSION} introduced the \\`--no-env-file\\` flag which is required to prevent `\n + 'conflicts with varlock\\'s own .env loading.',\n );\n }\n}\n"]}
1
+ {"version":3,"sources":["../src/lib/check-bun-version.ts"],"names":["semver"],"mappings":";;;;AAAA,IAAA,aAAA,GAAmB,OAAA,CAAA,cAAA,EAAA,EAAA,CAAA,CAAA;AAQZ,IAAM,eAAA,GAAkB,OAAA;AAMxB,SAAS,eAAA,GAAkB;AAChC,EAAA,MAAM,UAAA,GAAa,QAAQ,QAAA,CAAS,GAAA;AACpC,EAAA,IAAI,CAAC,UAAA,EAAY;AAEjB,EAAA,IAAI,CAAC,aAAA,CAAAA,OAAAA,CAAO,GAAA,CAAI,UAAA,EAAY,eAAe,CAAA,EAAG;AAC5C,IAAA,MAAM,IAAI,KAAA;AAAA,MACR,CAAA,wBAAA,EAA2B,eAAe,CAAA,wBAAA,EAA2B,UAAU,CAAA;AAAA;AAAA,IAAA,EAEtE,eAAe,CAAA,8GAAA;AAAA,KAE1B;AAAA,EACF;AACF;AAZgB,MAAA,CAAA,eAAA,EAAA,iBAAA,CAAA","file":"chunk-J6GN4T2B.js","sourcesContent":["import semver from 'semver';\n\n/**\n * Minimum Bun version required for varlock to work correctly.\n * Bun v1.3.3 introduced the ability to disable built-in .env file loading\n * via `--no-env-file` flag or `env = false` in bunfig.toml, which is necessary\n * to prevent conflicts with varlock's own .env loading.\n */\nexport const MIN_BUN_VERSION = '1.3.3';\n\n/**\n * Checks if the current Bun version meets the minimum requirement.\n * Throws an error if running on an unsupported Bun version.\n */\nexport function checkBunVersion() {\n const bunVersion = process.versions.bun;\n if (!bunVersion) return;\n\n if (!semver.gte(bunVersion, MIN_BUN_VERSION)) {\n throw new Error(\n `Varlock requires Bun >= ${MIN_BUN_VERSION}, but you are using Bun ${bunVersion}.\\n`\n + 'Please upgrade Bun by running: `bun upgrade`\\n'\n + `Bun ${MIN_BUN_VERSION} introduced the \\`--no-env-file\\` flag which is required to prevent `\n + 'conflicts with varlock\\'s own .env loading.',\n );\n }\n}\n"]}
@@ -1,8 +1,8 @@
1
1
  import { isBundledSEA } from './chunk-GXNQVEXD.js';
2
- import { fmt } from './chunk-R54KUFZA.js';
2
+ import { fmt } from './chunk-P6RTPTWC.js';
3
3
  import { define } from './chunk-4A54P4EM.js';
4
- import { CliExitError } from './chunk-CNDSEDGU.js';
5
- import { require_semver, ansis_default, downloadPluginToCache } from './chunk-5LNYCOEO.js';
4
+ import { CliExitError } from './chunk-6SU7GLJM.js';
5
+ import { require_semver, ansis_default, downloadPluginToCache } from './chunk-XYBJ2DUJ.js';
6
6
  import { __toESM, __name } from './chunk-6PEHRAEP.js';
7
7
 
8
8
  // src/cli/commands/install-plugin.command.ts
@@ -75,5 +75,5 @@ For example: ${fmt.command("add my-plugin", { jsPackageManager: true })}`
75
75
  }, "commandFn");
76
76
 
77
77
  export { commandFn, commandSpec };
78
- //# sourceMappingURL=chunk-EC3NKELX.js.map
79
- //# sourceMappingURL=chunk-EC3NKELX.js.map
78
+ //# sourceMappingURL=chunk-JUCPBCOK.js.map
79
+ //# sourceMappingURL=chunk-JUCPBCOK.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/cli/commands/install-plugin.command.ts"],"names":["semver"],"mappings":"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","file":"chunk-EC3NKELX.js","sourcesContent":["import { define } from 'gunshi';\nimport ansis from 'ansis';\nimport semver from 'semver';\n\nimport { type TypedGunshiCommandFn } from '../helpers/gunshi-type-utils';\nimport { CliExitError } from '../helpers/exit-error';\nimport { isBundledSEA } from '../helpers/install-detection';\nimport { fmt } from '../helpers/pretty-format';\nimport { downloadPluginToCache } from '../../env-graph/lib/plugins';\n\nexport const commandSpec = define({\n name: 'install-plugin',\n description: 'Download and cache a plugin from npm for use with the standalone binary',\n args: {\n plugin: {\n type: 'positional',\n description: 'Plugin to install, in the format name@version (e.g. my-plugin@1.2.3)',\n },\n },\n examples: `\nPre-downloads a plugin into the local varlock plugin cache so it is available without\nneeding an interactive confirmation prompt. This is useful in CI environments or any\nother non-interactive workflow where the standalone binary is used.\n\nThe plugin must be specified with an exact version number.\n\nExamples:\n varlock install-plugin my-plugin@1.2.3\n varlock install-plugin @my-scope/my-plugin@2.0.0\n`.trim(),\n});\n\nexport const commandFn: TypedGunshiCommandFn<typeof commandSpec> = async (ctx) => {\n if (!isBundledSEA()) {\n throw new CliExitError('This command is only available when using the standalone varlock binary', {\n suggestion: 'In a JS project, install plugins as regular dependencies using your package manager.\\n'\n + `For example: ${fmt.command('add my-plugin', { jsPackageManager: true })}`,\n });\n }\n\n const pluginDescriptor = ctx.values.plugin as string | undefined;\n\n if (!pluginDescriptor) {\n throw new CliExitError('No plugin specified', {\n suggestion: 'Usage: varlock install-plugin <name@version> (e.g. my-plugin@1.2.3)',\n });\n }\n\n // Parse module name and version from descriptor like `some-plugin@1.2.3` or `@scope/pkg@1.2.3`.\n // Use lastIndexOf to correctly handle scoped packages (e.g. @scope/pkg@1.2.3).\n const atLocation = pluginDescriptor.lastIndexOf('@');\n if (atLocation === -1) {\n throw new CliExitError(`Missing version in \"${pluginDescriptor}\"`, {\n suggestion: `Specify an exact version, e.g. \\`varlock install-plugin ${pluginDescriptor}@1.2.3\\``,\n });\n }\n\n const moduleName = pluginDescriptor.slice(0, atLocation);\n const versionDescriptor = pluginDescriptor.slice(atLocation + 1);\n\n if (!versionDescriptor) {\n throw new CliExitError(`Missing version in \"${pluginDescriptor}\"`, {\n suggestion: `Specify an exact version, e.g. \\`varlock install-plugin ${moduleName}@1.2.3\\``,\n });\n }\n\n if (!semver.valid(versionDescriptor)) {\n throw new CliExitError(`\"${versionDescriptor}\" is not an exact version`, {\n suggestion: `Use a fixed version number (e.g. 1.2.3), not a range. Example: \\`varlock install-plugin ${moduleName}@1.2.3\\``,\n });\n }\n\n console.log(`\\n📦 Installing plugin ${ansis.bold(`${moduleName}@${versionDescriptor}`)} into local cache...\\n`);\n\n try {\n const cachedPath = await downloadPluginToCache(moduleName, versionDescriptor);\n console.log(`✅ Plugin ${ansis.bold(`${moduleName}@${versionDescriptor}`)} installed successfully`);\n console.log(ansis.dim(` Cached at: ${cachedPath}\\n`));\n } catch (err) {\n throw new CliExitError(`Failed to install plugin \"${moduleName}@${versionDescriptor}\"`, {\n details: (err as Error).message,\n });\n }\n};\n"]}
1
+ {"version":3,"sources":["../src/cli/commands/install-plugin.command.ts"],"names":["semver"],"mappings":"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","file":"chunk-JUCPBCOK.js","sourcesContent":["import { define } from 'gunshi';\nimport ansis from 'ansis';\nimport semver from 'semver';\n\nimport { type TypedGunshiCommandFn } from '../helpers/gunshi-type-utils';\nimport { CliExitError } from '../helpers/exit-error';\nimport { isBundledSEA } from '../helpers/install-detection';\nimport { fmt } from '../helpers/pretty-format';\nimport { downloadPluginToCache } from '../../env-graph/lib/plugins';\n\nexport const commandSpec = define({\n name: 'install-plugin',\n description: 'Download and cache a plugin from npm for use with the standalone binary',\n args: {\n plugin: {\n type: 'positional',\n description: 'Plugin to install, in the format name@version (e.g. my-plugin@1.2.3)',\n },\n },\n examples: `\nPre-downloads a plugin into the local varlock plugin cache so it is available without\nneeding an interactive confirmation prompt. This is useful in CI environments or any\nother non-interactive workflow where the standalone binary is used.\n\nThe plugin must be specified with an exact version number.\n\nExamples:\n varlock install-plugin my-plugin@1.2.3\n varlock install-plugin @my-scope/my-plugin@2.0.0\n`.trim(),\n});\n\nexport const commandFn: TypedGunshiCommandFn<typeof commandSpec> = async (ctx) => {\n if (!isBundledSEA()) {\n throw new CliExitError('This command is only available when using the standalone varlock binary', {\n suggestion: 'In a JS project, install plugins as regular dependencies using your package manager.\\n'\n + `For example: ${fmt.command('add my-plugin', { jsPackageManager: true })}`,\n });\n }\n\n const pluginDescriptor = ctx.values.plugin as string | undefined;\n\n if (!pluginDescriptor) {\n throw new CliExitError('No plugin specified', {\n suggestion: 'Usage: varlock install-plugin <name@version> (e.g. my-plugin@1.2.3)',\n });\n }\n\n // Parse module name and version from descriptor like `some-plugin@1.2.3` or `@scope/pkg@1.2.3`.\n // Use lastIndexOf to correctly handle scoped packages (e.g. @scope/pkg@1.2.3).\n const atLocation = pluginDescriptor.lastIndexOf('@');\n if (atLocation === -1) {\n throw new CliExitError(`Missing version in \"${pluginDescriptor}\"`, {\n suggestion: `Specify an exact version, e.g. \\`varlock install-plugin ${pluginDescriptor}@1.2.3\\``,\n });\n }\n\n const moduleName = pluginDescriptor.slice(0, atLocation);\n const versionDescriptor = pluginDescriptor.slice(atLocation + 1);\n\n if (!versionDescriptor) {\n throw new CliExitError(`Missing version in \"${pluginDescriptor}\"`, {\n suggestion: `Specify an exact version, e.g. \\`varlock install-plugin ${moduleName}@1.2.3\\``,\n });\n }\n\n if (!semver.valid(versionDescriptor)) {\n throw new CliExitError(`\"${versionDescriptor}\" is not an exact version`, {\n suggestion: `Use a fixed version number (e.g. 1.2.3), not a range. Example: \\`varlock install-plugin ${moduleName}@1.2.3\\``,\n });\n }\n\n console.log(`\\n📦 Installing plugin ${ansis.bold(`${moduleName}@${versionDescriptor}`)} into local cache...\\n`);\n\n try {\n const cachedPath = await downloadPluginToCache(moduleName, versionDescriptor);\n console.log(`✅ Plugin ${ansis.bold(`${moduleName}@${versionDescriptor}`)} installed successfully`);\n console.log(ansis.dim(` Cached at: ${cachedPath}\\n`));\n } catch (err) {\n throw new CliExitError(`Failed to install plugin \"${moduleName}@${versionDescriptor}\"`, {\n details: (err as Error).message,\n });\n }\n};\n"]}
@@ -1,8 +1,8 @@
1
1
  import { define } from './chunk-4A54P4EM.js';
2
- import { checkForSchemaErrors } from './chunk-QLNQ3KVC.js';
3
- import { loadVarlockEnvGraph } from './chunk-4JWJZ4P3.js';
2
+ import { checkForSchemaErrors } from './chunk-UROBADYQ.js';
3
+ import { loadVarlockEnvGraph } from './chunk-UWINGOPT.js';
4
4
  import { gracefulExit } from './chunk-CHQDS2PI.js';
5
- import { CliExitError } from './chunk-CNDSEDGU.js';
5
+ import { CliExitError } from './chunk-6SU7GLJM.js';
6
6
  import { __name } from './chunk-6PEHRAEP.js';
7
7
 
8
8
  // src/cli/commands/printenv.command.ts
@@ -13,7 +13,8 @@ var commandSpec = define({
13
13
  path: {
14
14
  type: "string",
15
15
  short: "p",
16
- description: "Path to a specific .env file or directory (with trailing slash) to use as the entry point"
16
+ multiple: true,
17
+ description: "Path to a specific .env file or directory (with trailing slash) to use as the entry point (can be specified multiple times)"
17
18
  }
18
19
  },
19
20
  examples: `
@@ -24,6 +25,7 @@ Examples:
24
25
  varlock printenv MY_VAR # Print the value of MY_VAR
25
26
  varlock printenv --path .env.prod MY_VAR # Use a specific .env file
26
27
  varlock printenv --path ./config/ MY_VAR # Use a specific directory
28
+ varlock printenv -p ./envs -p ./overrides MY_VAR # Use multiple directories
27
29
 
28
30
  \u{1F4CD} Note: Use sh -c to embed this in shell commands, e.g.:
29
31
  sh -c 'do-something --token $(varlock printenv MY_TOKEN)'
@@ -41,7 +43,7 @@ var commandFn = /* @__PURE__ */ __name(async (ctx) => {
41
43
  }
42
44
  const varName = positionals[0];
43
45
  const envGraph = await loadVarlockEnvGraph({
44
- entryFilePath: ctx.values.path
46
+ entryFilePaths: ctx.values.path
45
47
  });
46
48
  checkForSchemaErrors(envGraph);
47
49
  if (!(varName in envGraph.configSchema)) {
@@ -64,5 +66,5 @@ var commandFn = /* @__PURE__ */ __name(async (ctx) => {
64
66
  }, "commandFn");
65
67
 
66
68
  export { commandFn, commandSpec };
67
- //# sourceMappingURL=chunk-FVFI4EQN.js.map
68
- //# sourceMappingURL=chunk-FVFI4EQN.js.map
69
+ //# sourceMappingURL=chunk-LM7YKESH.js.map
70
+ //# sourceMappingURL=chunk-LM7YKESH.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/cli/commands/printenv.command.ts"],"names":[],"mappings":";;;;;;;;AAQO,IAAM,cAAc,MAAA,CAAO;AAAA,EAChC,IAAA,EAAM,UAAA;AAAA,EACN,WAAA,EAAa,2DAAA;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;;AAAA;AAAA;AAAA,EAAA,CAAA,CAeR,IAAA;AACJ,CAAC;AAEM,IAAM,SAAA,iCAA6D,GAAA,KAAQ;AAGhF,EAAA,MAAM,WAAA,GAAA,CAAe,IAAI,WAAA,IAAe,IAAI,KAAA,CAAM,GAAA,CAAI,WAAA,EAAa,MAAA,IAAU,CAAC,CAAA;AAC9E,EAAA,IAAI,CAAC,YAAY,MAAA,EAAQ;AACvB,IAAA,MAAM,IAAI,aAAa,0CAAA,EAA4C;AAAA,MACjE,UAAA,EAAY;AAAA,KACb,CAAA;AAAA,EACH;AACA,EAAA,MAAM,OAAA,GAAU,YAAY,CAAC,CAAA;AAE7B,EAAA,MAAM,QAAA,GAAW,MAAM,mBAAA,CAAoB;AAAA,IACzC,cAAA,EAAgB,IAAI,MAAA,CAAO;AAAA,GAC5B,CAAA;AACD,EAAA,oBAAA,CAAqB,QAAQ,CAAA;AAE7B,EAAA,IAAI,EAAE,OAAA,IAAW,QAAA,CAAS,YAAA,CAAA,EAAe;AACvC,IAAA,MAAM,IAAI,YAAA,CAAa,CAAA,UAAA,EAAa,OAAO,CAAA,qBAAA,CAAuB,CAAA;AAAA,EACpE;AAGA,EAAA,MAAM,QAAA,CAAS,oBAAoB,OAAO,CAAA;AAE1C,EAAA,MAAM,IAAA,GAAO,QAAA,CAAS,YAAA,CAAa,OAAO,CAAA;AAC1C,EAAA,IAAI,IAAA,CAAK,oBAAoB,OAAA,EAAS;AACpC,IAAA,KAAA,MAAW,GAAA,IAAO,KAAK,MAAA,EAAQ;AAC7B,MAAA,OAAA,CAAQ,KAAA,CAAM,CAAA,UAAA,EAAM,GAAA,CAAI,OAAO,CAAA,CAAE,CAAA;AAAA,IACnC;AACA,IAAA,OAAO,aAAa,CAAC,CAAA;AAAA,EACvB;AAEA,EAAA,MAAM,QAAQ,IAAA,CAAK,aAAA;AACnB,EAAA,IAAI,KAAA,KAAU,MAAA,IAAa,KAAA,KAAU,IAAA,EAAM;AACzC,IAAA,OAAA,CAAQ,IAAI,EAAE,CAAA;AAAA,EAChB,CAAA,MAAO;AACL,IAAA,OAAA,CAAQ,GAAA,CAAI,MAAA,CAAO,KAAK,CAAC,CAAA;AAAA,EAC3B;AACF,CAAA,EArCmE,WAAA","file":"chunk-LM7YKESH.js","sourcesContent":["import { define } from 'gunshi';\nimport { gracefulExit } from 'exit-hook';\n\nimport { loadVarlockEnvGraph } from '../../lib/load-graph';\nimport { checkForSchemaErrors } from '../helpers/error-checks';\nimport { type TypedGunshiCommandFn } from '../helpers/gunshi-type-utils';\nimport { CliExitError } from '../helpers/exit-error';\n\nexport const commandSpec = define({\n name: 'printenv',\n description: 'Print the resolved value of a single environment variable',\n args: {\n path: {\n type: 'string',\n short: 'p',\n multiple: true,\n description: 'Path to a specific .env file or directory (with trailing slash) to use as the entry point (can be specified multiple times)',\n },\n },\n examples: `\nPrints the resolved value of a single environment variable.\nUseful within larger shell commands where you need a single env var value.\n\nExamples:\n varlock printenv MY_VAR # Print the value of MY_VAR\n varlock printenv --path .env.prod MY_VAR # Use a specific .env file\n varlock printenv --path ./config/ MY_VAR # Use a specific directory\n varlock printenv -p ./envs -p ./overrides MY_VAR # Use multiple directories\n\n📍 Note: Use sh -c to embed this in shell commands, e.g.:\n sh -c 'do-something --token $(varlock printenv MY_TOKEN)'\n\n💡 Tip: Unlike \\`varlock run -- echo $MY_VAR\\`, this works because the shell\n expansion happens after varlock has printed the value.\n `.trim(),\n});\n\nexport const commandFn: TypedGunshiCommandFn<typeof commandSpec> = async (ctx) => {\n // ctx.positionals includes the subcommand name(s) themselves, so we skip them\n // by slicing off ctx.commandPath.length entries (e.g. skips 'printenv' at index 0)\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 printenv MY_VAR` to print the value of MY_VAR',\n });\n }\n const varName = positionals[0];\n\n const envGraph = await loadVarlockEnvGraph({\n entryFilePaths: ctx.values.path,\n });\n checkForSchemaErrors(envGraph);\n\n if (!(varName in envGraph.configSchema)) {\n throw new CliExitError(`Variable \"${varName}\" not found in schema`);\n }\n\n // Resolve only the requested item and its transitive dependencies\n await envGraph.resolveItemWithDeps(varName);\n\n const item = envGraph.configSchema[varName];\n if (item.validationState === 'error') {\n for (const err of item.errors) {\n console.error(`🚨 ${err.message}`);\n }\n return gracefulExit(1);\n }\n\n const value = item.resolvedValue;\n if (value === undefined || value === null) {\n console.log('');\n } else {\n console.log(String(value));\n }\n};\n"]}
@@ -1,5 +1,5 @@
1
- import { CliExitError } from './chunk-CNDSEDGU.js';
2
- import { detectWorkspaceInfo, ansis_default } from './chunk-5LNYCOEO.js';
1
+ import { CliExitError } from './chunk-6SU7GLJM.js';
2
+ import { detectWorkspaceInfo, ansis_default } from './chunk-XYBJ2DUJ.js';
3
3
  import { __name } from './chunk-6PEHRAEP.js';
4
4
  import path from 'path';
5
5
  import fs, { existsSync } from 'fs';
@@ -64,5 +64,5 @@ var logLines = /* @__PURE__ */ __name((lines) => {
64
64
  }, "logLines");
65
65
 
66
66
  export { detectJsPackageManager, fmt, installJsDependency, logLines };
67
- //# sourceMappingURL=chunk-R54KUFZA.js.map
68
- //# sourceMappingURL=chunk-R54KUFZA.js.map
67
+ //# sourceMappingURL=chunk-P6RTPTWC.js.map
68
+ //# sourceMappingURL=chunk-P6RTPTWC.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/cli/helpers/js-package-manager-utils.ts","../src/cli/helpers/pretty-format.ts"],"names":[],"mappings":"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","file":"chunk-R54KUFZA.js","sourcesContent":["// Re-exports for backward compatibility - prefer importing from lib/workspace-utils directly\nexport {\n JS_PACKAGE_MANAGERS,\n detectWorkspaceInfo,\n getWorkspaceInfo,\n runWithWorkspaceInfo,\n type JsPackageManager,\n type JsPackageManagerMeta,\n type WorkspaceInfo,\n type MonorepoTool,\n} from '../../lib/workspace-utils';\n\nimport path from 'node:path';\nimport fs, { existsSync } from 'node:fs';\nimport { execSync } from 'node:child_process';\nimport { CliExitError } from './exit-error';\nimport { detectWorkspaceInfo, type JsPackageManager } from '../../lib/workspace-utils';\n\nexport function detectJsPackageManager(opts?: {\n cwd?: string,\n exitIfNotFound?: boolean,\n}) {\n const info = detectWorkspaceInfo({ cwd: opts?.cwd });\n if (!info) {\n if (opts?.exitIfNotFound) {\n throw new CliExitError('Unable to detect your JavaScript package manager!', {\n suggestion: 'We look for lock files (ex: package-lock.json) so you may just need to run a dependency install (ie `npm install`)',\n forceExit: true,\n });\n }\n return undefined;\n }\n return info.packageManager;\n}\n\nexport function installJsDependency(opts: {\n packageName: string,\n packageManager: JsPackageManager,\n packagePath?: string,\n isMonoRepoRoot?: boolean,\n}) {\n const packageJsonPath = path.join(opts.packagePath || process.cwd(), 'package.json');\n\n // for now, we'll just bail if we dont see a package.json\n if (!existsSync(packageJsonPath)) return false;\n\n const packageJson = JSON.parse(fs.readFileSync(packageJsonPath, 'utf8'));\n // bail if already installed\n if (packageJson.dependencies?.varlock) return false;\n\n // TODO: might want to check first if it's already installed?\n execSync([\n // move to the correct directory if needed\n opts.packagePath && `cd ${opts.packagePath} &&`,\n // `add` works in all of them\n `${opts.packageManager} add ${opts.packageName}`,\n // tells pnpm to either install in the workspace root explicitly\n // or to not check if we are the in the root\n opts.packageManager === 'pnpm' && (opts.isMonoRepoRoot ? '-w' : '--ignore-workspace-root-check'),\n ].filter(Boolean).join(' '));\n\n return true;\n}\n","import ansis from 'ansis';\nimport { detectJsPackageManager, type JsPackageManagerMeta } from './js-package-manager-utils';\n\n\nexport const fmt = {\n decorator: (s: string) => ansis.magenta(s),\n filePath: (s: string) => `📂 ${ansis.cyan.italic(s)}`,\n fileName: (s: string) => `${ansis.cyan.italic(s)}`,\n command: (s: string, opts?: { jsPackageManager?: JsPackageManagerMeta | true }) => {\n let jsPackageManager: JsPackageManagerMeta | undefined;\n if (opts?.jsPackageManager === true) {\n jsPackageManager = detectJsPackageManager();\n } else if (opts?.jsPackageManager) {\n jsPackageManager = opts.jsPackageManager;\n }\n if (jsPackageManager) {\n s = `${jsPackageManager.exec} ${s}`;\n }\n return ansis.green.italic(s);\n },\n packageName: (s: string) => ansis.green.italic(s),\n};\n\nexport const logLines = (lines: Array<string | false | undefined>) => {\n for (const line of lines) {\n // skip false, null, undefined, but not empty strings\n if (!line && line !== '') continue;\n console.log(line);\n }\n};\n"]}
1
+ {"version":3,"sources":["../src/cli/helpers/js-package-manager-utils.ts","../src/cli/helpers/pretty-format.ts"],"names":[],"mappings":";;;;;;;AAkBO,SAAS,uBAAuB,IAAA,EAGpC;AACD,EAAA,MAAM,OAAO,mBAAA,CAAoB,EAAE,GAAA,EAAK,IAAA,EAAM,KAAK,CAAA;AACnD,EAAA,IAAI,CAAC,IAAA,EAAM;AACT,IAAA,IAAI,MAAM,cAAA,EAAgB;AACxB,MAAA,MAAM,IAAI,aAAa,mDAAA,EAAqD;AAAA,QAC1E,UAAA,EAAY,oHAAA;AAAA,QACZ,SAAA,EAAW;AAAA,OACZ,CAAA;AAAA,IACH;AACA,IAAA,OAAO,MAAA;AAAA,EACT;AACA,EAAA,OAAO,IAAA,CAAK,cAAA;AACd;AAfgB,MAAA,CAAA,sBAAA,EAAA,wBAAA,CAAA;AAiBT,SAAS,oBAAoB,IAAA,EAKjC;AACD,EAAA,MAAM,eAAA,GAAkB,KAAK,IAAA,CAAK,IAAA,CAAK,eAAe,OAAA,CAAQ,GAAA,IAAO,cAAc,CAAA;AAGnF,EAAA,IAAI,CAAC,UAAA,CAAW,eAAe,CAAA,EAAG,OAAO,KAAA;AAEzC,EAAA,MAAM,cAAc,IAAA,CAAK,KAAA,CAAM,GAAG,YAAA,CAAa,eAAA,EAAiB,MAAM,CAAC,CAAA;AAEvE,EAAA,IAAI,WAAA,CAAY,YAAA,EAAc,OAAA,EAAS,OAAO,KAAA;AAG9C,EAAA,QAAA,CAAS;AAAA;AAAA,IAEP,IAAA,CAAK,WAAA,IAAe,CAAA,GAAA,EAAM,IAAA,CAAK,WAAW,CAAA,GAAA,CAAA;AAAA;AAAA,IAE1C,CAAA,EAAG,IAAA,CAAK,cAAc,CAAA,KAAA,EAAQ,KAAK,WAAW,CAAA,CAAA;AAAA;AAAA;AAAA,IAG9C,IAAA,CAAK,cAAA,KAAmB,MAAA,KAAW,IAAA,CAAK,iBAAiB,IAAA,GAAO,+BAAA;AAAA,IAChE,MAAA,CAAO,OAAO,CAAA,CAAE,IAAA,CAAK,GAAG,CAAC,CAAA;AAE3B,EAAA,OAAO,IAAA;AACT;AA3BgB,MAAA,CAAA,mBAAA,EAAA,qBAAA,CAAA;;;AC/BT,IAAM,GAAA,GAAM;AAAA,EACjB,2BAAW,MAAA,CAAA,CAAC,CAAA,KAAc,aAAA,CAAM,OAAA,CAAQ,CAAC,CAAA,EAA9B,WAAA,CAAA;AAAA,EACX,QAAA,0BAAW,CAAA,KAAc,CAAA,UAAA,EAAM,cAAM,IAAA,CAAK,MAAA,CAAO,CAAC,CAAC,CAAA,CAAA,EAAzC,UAAA,CAAA;AAAA,EACV,QAAA,0BAAW,CAAA,KAAc,CAAA,EAAG,cAAM,IAAA,CAAK,MAAA,CAAO,CAAC,CAAC,CAAA,CAAA,EAAtC,UAAA,CAAA;AAAA,EACV,OAAA,kBAAS,MAAA,CAAA,CAAC,CAAA,EAAW,IAAA,KAA8D;AACjF,IAAA,IAAI,gBAAA;AACJ,IAAA,IAAI,IAAA,EAAM,qBAAqB,IAAA,EAAM;AACnC,MAAA,gBAAA,GAAmB,sBAAA,EAAuB;AAAA,IAC5C,CAAA,MAAA,IAAW,MAAM,gBAAA,EAAkB;AACjC,MAAA,gBAAA,GAAmB,IAAA,CAAK,gBAAA;AAAA,IAC1B;AACA,IAAA,IAAI,gBAAA,EAAkB;AACpB,MAAA,CAAA,GAAI,CAAA,EAAG,gBAAA,CAAiB,IAAI,CAAA,CAAA,EAAI,CAAC,CAAA,CAAA;AAAA,IACnC;AACA,IAAA,OAAO,aAAA,CAAM,KAAA,CAAM,MAAA,CAAO,CAAC,CAAA;AAAA,EAC7B,CAAA,EAXS,SAAA,CAAA;AAAA,EAYT,6BAAa,MAAA,CAAA,CAAC,CAAA,KAAc,cAAM,KAAA,CAAM,MAAA,CAAO,CAAC,CAAA,EAAnC,aAAA;AACf;AAEO,IAAM,QAAA,2BAAY,KAAA,KAA6C;AACpE,EAAA,KAAA,MAAW,QAAQ,KAAA,EAAO;AAExB,IAAA,IAAI,CAAC,IAAA,IAAQ,IAAA,KAAS,EAAA,EAAI;AAC1B,IAAA,OAAA,CAAQ,IAAI,IAAI,CAAA;AAAA,EAClB;AACF,CAAA,EANwB,UAAA","file":"chunk-P6RTPTWC.js","sourcesContent":["// Re-exports for backward compatibility - prefer importing from lib/workspace-utils directly\nexport {\n JS_PACKAGE_MANAGERS,\n detectWorkspaceInfo,\n getWorkspaceInfo,\n runWithWorkspaceInfo,\n type JsPackageManager,\n type JsPackageManagerMeta,\n type WorkspaceInfo,\n type MonorepoTool,\n} from '../../lib/workspace-utils';\n\nimport path from 'node:path';\nimport fs, { existsSync } from 'node:fs';\nimport { execSync } from 'node:child_process';\nimport { CliExitError } from './exit-error';\nimport { detectWorkspaceInfo, type JsPackageManager } from '../../lib/workspace-utils';\n\nexport function detectJsPackageManager(opts?: {\n cwd?: string,\n exitIfNotFound?: boolean,\n}) {\n const info = detectWorkspaceInfo({ cwd: opts?.cwd });\n if (!info) {\n if (opts?.exitIfNotFound) {\n throw new CliExitError('Unable to detect your JavaScript package manager!', {\n suggestion: 'We look for lock files (ex: package-lock.json) so you may just need to run a dependency install (ie `npm install`)',\n forceExit: true,\n });\n }\n return undefined;\n }\n return info.packageManager;\n}\n\nexport function installJsDependency(opts: {\n packageName: string,\n packageManager: JsPackageManager,\n packagePath?: string,\n isMonoRepoRoot?: boolean,\n}) {\n const packageJsonPath = path.join(opts.packagePath || process.cwd(), 'package.json');\n\n // for now, we'll just bail if we dont see a package.json\n if (!existsSync(packageJsonPath)) return false;\n\n const packageJson = JSON.parse(fs.readFileSync(packageJsonPath, 'utf8'));\n // bail if already installed\n if (packageJson.dependencies?.varlock) return false;\n\n // TODO: might want to check first if it's already installed?\n execSync([\n // move to the correct directory if needed\n opts.packagePath && `cd ${opts.packagePath} &&`,\n // `add` works in all of them\n `${opts.packageManager} add ${opts.packageName}`,\n // tells pnpm to either install in the workspace root explicitly\n // or to not check if we are the in the root\n opts.packageManager === 'pnpm' && (opts.isMonoRepoRoot ? '-w' : '--ignore-workspace-root-check'),\n ].filter(Boolean).join(' '));\n\n return true;\n}\n","import ansis from 'ansis';\nimport { detectJsPackageManager, type JsPackageManagerMeta } from './js-package-manager-utils';\n\n\nexport const fmt = {\n decorator: (s: string) => ansis.magenta(s),\n filePath: (s: string) => `📂 ${ansis.cyan.italic(s)}`,\n fileName: (s: string) => `${ansis.cyan.italic(s)}`,\n command: (s: string, opts?: { jsPackageManager?: JsPackageManagerMeta | true }) => {\n let jsPackageManager: JsPackageManagerMeta | undefined;\n if (opts?.jsPackageManager === true) {\n jsPackageManager = detectJsPackageManager();\n } else if (opts?.jsPackageManager) {\n jsPackageManager = opts.jsPackageManager;\n }\n if (jsPackageManager) {\n s = `${jsPackageManager.exec} ${s}`;\n }\n return ansis.green.italic(s);\n },\n packageName: (s: string) => ansis.green.italic(s),\n};\n\nexport const logLines = (lines: Array<string | false | undefined>) => {\n for (const line of lines) {\n // skip false, null, undefined, but not empty strings\n if (!line && line !== '') continue;\n console.log(line);\n }\n};\n"]}
@@ -1,6 +1,6 @@
1
1
  import { define } from './chunk-4A54P4EM.js';
2
- import { checkForSchemaErrors, checkForNoEnvFiles, checkForConfigErrors } from './chunk-QLNQ3KVC.js';
3
- import { loadVarlockEnvGraph } from './chunk-4JWJZ4P3.js';
2
+ import { checkForSchemaErrors, checkForNoEnvFiles, checkForConfigErrors } from './chunk-UROBADYQ.js';
3
+ import { loadVarlockEnvGraph } from './chunk-UWINGOPT.js';
4
4
  import { gracefulExit } from './chunk-CHQDS2PI.js';
5
5
  import { resetRedactionMap, redactSensitiveConfig } from './chunk-IMB5QAZS.js';
6
6
  import { __name } from './chunk-6PEHRAEP.js';
@@ -196,7 +196,8 @@ var commandSpec = define({
196
196
  path: {
197
197
  type: "string",
198
198
  short: "p",
199
- description: "Path to a specific .env file or directory to use as the entry point"
199
+ multiple: true,
200
+ description: "Path to a specific .env file or directory to use as the entry point (can be specified multiple times)"
200
201
  }
201
202
  },
202
203
  examples: `
@@ -210,6 +211,7 @@ Examples:
210
211
  varlock run --no-redact-stdout -- psql # Preserve TTY for interactive tools
211
212
  varlock run --path .env.prod -- node app.js # Use a specific .env file
212
213
  varlock run --path ./config/ -- node app.js # Use a specific directory
214
+ varlock run -p ./envs -p ./overrides -- node app.js # Use multiple directories
213
215
 
214
216
  \u{1F4CD} Important: Use -- to separate varlock options from your command
215
217
 
@@ -233,7 +235,7 @@ var commandFn = /* @__PURE__ */ __name(async (ctx) => {
233
235
  const rawCommand = commandToRunAsArgs[0];
234
236
  const commandArgsOnly = commandToRunAsArgs.slice(1);
235
237
  const envGraph = await loadVarlockEnvGraph({
236
- entryFilePath: ctx.values.path
238
+ entryFilePaths: ctx.values.path
237
239
  });
238
240
  checkForSchemaErrors(envGraph);
239
241
  checkForNoEnvFiles(envGraph);
@@ -316,5 +318,5 @@ var commandFn = /* @__PURE__ */ __name(async (ctx) => {
316
318
  }, "commandFn");
317
319
 
318
320
  export { commandFn, commandSpec };
319
- //# sourceMappingURL=chunk-ANZNVJLY.js.map
320
- //# sourceMappingURL=chunk-ANZNVJLY.js.map
321
+ //# sourceMappingURL=chunk-PXR36IUP.js.map
322
+ //# sourceMappingURL=chunk-PXR36IUP.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/lib/exec.ts","../src/cli/commands/run.command.ts"],"names":["fsConstants"],"mappings":"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","file":"chunk-PXR36IUP.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\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 // Check if we need shell on Windows for .cmd/.bat files\n const needsShell = process.platform === 'win32' && /\\.(cmd|bat)$/i.test(resolvedCommand);\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 in cmd.exe\n if (needsShell) {\n spawnArgs = ['/d', '/s', '/c', `\"${resolvedCommand}\" ${args.map((a) => `\"${a}\"`).join(' ')}`];\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 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 --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 `.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 // needs more thought here\n const fullInjectedEnv = {\n ...process.env,\n ...resolvedEnv,\n __VARLOCK_RUN: '1', // flag for a child process to detect it is runnign via `varlock run`\n __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,11 +1,10 @@
1
1
  import { isBundledSEA } from './chunk-GXNQVEXD.js';
2
- import { spawnAsync } from './chunk-GGBNUVWR.js';
3
- import { detectJsPackageManager, logLines, fmt } from './chunk-R54KUFZA.js';
2
+ import { detectJsPackageManager, logLines, fmt } from './chunk-P6RTPTWC.js';
4
3
  import { define } from './chunk-4A54P4EM.js';
5
- import { loadVarlockEnvGraph } from './chunk-4JWJZ4P3.js';
4
+ import { loadVarlockEnvGraph } from './chunk-UWINGOPT.js';
6
5
  import { gracefulExit } from './chunk-CHQDS2PI.js';
7
- import { CliExitError } from './chunk-CNDSEDGU.js';
8
- import { pathExists, ansis_default } from './chunk-5LNYCOEO.js';
6
+ import { CliExitError } from './chunk-6SU7GLJM.js';
7
+ import { spawnAsync, pathExists, ansis_default } from './chunk-XYBJ2DUJ.js';
9
8
  import { my_dash_default } from './chunk-6CCHLM3U.js';
10
9
  import { redactString } from './chunk-XLYSNOR3.js';
11
10
  import { __name } from './chunk-6PEHRAEP.js';
@@ -80,7 +79,8 @@ var commandSpec = define({
80
79
  path: {
81
80
  type: "string",
82
81
  short: "p",
83
- description: 'Path to a specific .env file (e.g. .env.prod) or directory ending with "/" to use as the schema entry point (default: current directory)'
82
+ multiple: true,
83
+ description: 'Path to a specific .env file (e.g. .env.prod) or directory ending with "/" to use as the schema entry point (can be specified multiple times)'
84
84
  }
85
85
  },
86
86
  examples: `
@@ -92,6 +92,7 @@ Examples:
92
92
  varlock scan --staged # Only scan staged git files
93
93
  varlock scan --include-ignored # Scan all files, including git-ignored ones
94
94
  varlock scan --path .env.prod # Use a specific .env file as the schema entry point
95
+ varlock scan -p ./envs -p ./overrides # Use multiple schema entry points
95
96
  varlock scan --install-hook # Set up as a git pre-commit hook
96
97
  `.trim()
97
98
  });
@@ -314,7 +315,7 @@ var commandFn = /* @__PURE__ */ __name(async (ctx) => {
314
315
  const onlyStaged = ctx.values.staged ?? false;
315
316
  const includeIgnored = ctx.values["include-ignored"] ?? false;
316
317
  const envGraph = await loadVarlockEnvGraph({
317
- entryFilePath: ctx.values.path
318
+ entryFilePaths: ctx.values.path
318
319
  });
319
320
  for (const source of envGraph.sortedDataSources) {
320
321
  if (source.loadingError) {
@@ -392,5 +393,5 @@ var commandFn = /* @__PURE__ */ __name(async (ctx) => {
392
393
  }, "commandFn");
393
394
 
394
395
  export { commandFn, commandSpec, getGitFiles, scanFileForValues, walkDirectory };
395
- //# sourceMappingURL=chunk-CS57IAAJ.js.map
396
- //# sourceMappingURL=chunk-CS57IAAJ.js.map
396
+ //# sourceMappingURL=chunk-Q44UUWKJ.js.map
397
+ //# sourceMappingURL=chunk-Q44UUWKJ.js.map