varlock 0.2.3 → 0.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (74) hide show
  1. package/README.md +23 -10
  2. package/dist/chunk-36LTSUR6.js +48 -0
  3. package/dist/chunk-36LTSUR6.js.map +1 -0
  4. package/dist/{chunk-UDXNNRWI.js → chunk-4A54P4EM.js} +10 -10
  5. package/dist/chunk-4A54P4EM.js.map +1 -0
  6. package/dist/chunk-4DZ3IHF6.js +34 -0
  7. package/dist/chunk-4DZ3IHF6.js.map +1 -0
  8. package/dist/{chunk-Q3C4VKFT.js → chunk-5HF5TS2C.js} +17 -41
  9. package/dist/chunk-5HF5TS2C.js.map +1 -0
  10. package/dist/chunk-ALNELNTO.js +68 -0
  11. package/dist/chunk-ALNELNTO.js.map +1 -0
  12. package/dist/{chunk-YIXN7TC7.js → chunk-BS7P3FRR.js} +40 -64
  13. package/dist/chunk-BS7P3FRR.js.map +1 -0
  14. package/dist/{chunk-OY5U5WTF.js → chunk-CBP4M7BN.js} +2969 -2140
  15. package/dist/chunk-CBP4M7BN.js.map +1 -0
  16. package/dist/{chunk-HTF7NU5C.js → chunk-EDSWMPIV.js} +11 -19
  17. package/dist/chunk-EDSWMPIV.js.map +1 -0
  18. package/dist/{chunk-BXR2RIO6.js → chunk-F5WNDO7I.js} +6 -5
  19. package/dist/chunk-F5WNDO7I.js.map +1 -0
  20. package/dist/{chunk-35SAMS66.js → chunk-GJ7PTJM4.js} +3 -3
  21. package/dist/{chunk-35SAMS66.js.map → chunk-GJ7PTJM4.js.map} +1 -1
  22. package/dist/chunk-HRNVJUR5.js +17 -0
  23. package/dist/chunk-HRNVJUR5.js.map +1 -0
  24. package/dist/{chunk-PESTWPBG.js → chunk-QNKJGOQ6.js} +8 -6
  25. package/dist/chunk-QNKJGOQ6.js.map +1 -0
  26. package/dist/chunk-VKRGHRPK.js +331 -0
  27. package/dist/chunk-VKRGHRPK.js.map +1 -0
  28. package/dist/chunk-WIIXKZ3N.js +405 -0
  29. package/dist/chunk-WIIXKZ3N.js.map +1 -0
  30. package/dist/chunk-Y3ITSQA4.js +58 -0
  31. package/dist/chunk-Y3ITSQA4.js.map +1 -0
  32. package/dist/{chunk-ISSW6NKZ.js → chunk-YFP6VA2U.js} +20 -17
  33. package/dist/chunk-YFP6VA2U.js.map +1 -0
  34. package/dist/cli/cli-executable.js +56 -38
  35. package/dist/cli/cli-executable.js.map +1 -1
  36. package/dist/config-item-GN5AUR45.js +5 -0
  37. package/dist/config-item-GN5AUR45.js.map +1 -0
  38. package/dist/{env-graph-DIcuAiYh.d.ts → env-graph-COORmJlH.d.ts} +121 -2
  39. package/dist/help.command-7E52XAOO.js +5 -0
  40. package/dist/{help.command-MLH2WA5Y.js.map → help.command-7E52XAOO.js.map} +1 -1
  41. package/dist/index.d.ts +2 -2
  42. package/dist/index.js +4 -2
  43. package/dist/index.js.map +1 -1
  44. package/dist/init.command-FMHXUGDI.js +12 -0
  45. package/dist/{init.command-RAYBZ66R.js.map → init.command-FMHXUGDI.js.map} +1 -1
  46. package/dist/load.command-6I2D5BPL.js +11 -0
  47. package/dist/{load.command-KOSPGLV6.js.map → load.command-6I2D5BPL.js.map} +1 -1
  48. package/dist/plugin-lib.d.ts +2 -2
  49. package/dist/printenv.command-TROZTZ26.js +12 -0
  50. package/dist/printenv.command-TROZTZ26.js.map +1 -0
  51. package/dist/run.command-4OJ6MBP6.js +12 -0
  52. package/dist/{run.command-BOBQIELJ.js.map → run.command-4OJ6MBP6.js.map} +1 -1
  53. package/dist/runtime/env.d.ts +1 -1
  54. package/dist/scan.command-YRNAKUZT.js +13 -0
  55. package/dist/scan.command-YRNAKUZT.js.map +1 -0
  56. package/dist/telemetry.command-UZQSUYAY.js +11 -0
  57. package/dist/{telemetry.command-SFEMMU3U.js.map → telemetry.command-UZQSUYAY.js.map} +1 -1
  58. package/dist/typegen.command-V4MATON4.js +12 -0
  59. package/dist/typegen.command-V4MATON4.js.map +1 -0
  60. package/package.json +18 -17
  61. package/LICENSE +0 -21
  62. package/dist/chunk-BXR2RIO6.js.map +0 -1
  63. package/dist/chunk-HTF7NU5C.js.map +0 -1
  64. package/dist/chunk-ISSW6NKZ.js.map +0 -1
  65. package/dist/chunk-OY5U5WTF.js.map +0 -1
  66. package/dist/chunk-PESTWPBG.js.map +0 -1
  67. package/dist/chunk-Q3C4VKFT.js.map +0 -1
  68. package/dist/chunk-UDXNNRWI.js.map +0 -1
  69. package/dist/chunk-YIXN7TC7.js.map +0 -1
  70. package/dist/help.command-MLH2WA5Y.js +0 -5
  71. package/dist/init.command-RAYBZ66R.js +0 -9
  72. package/dist/load.command-KOSPGLV6.js +0 -9
  73. package/dist/run.command-BOBQIELJ.js +0 -10
  74. package/dist/telemetry.command-SFEMMU3U.js +0 -9
@@ -1,9 +1,10 @@
1
- import { define } from './chunk-UDXNNRWI.js';
2
- import { loadVarlockEnvGraph, checkForSchemaErrors, checkForConfigErrors } from './chunk-ISSW6NKZ.js';
3
- import { my_dash_default, FileBasedDataSource, getItemSummary } from './chunk-OY5U5WTF.js';
1
+ import { define } from './chunk-4A54P4EM.js';
2
+ import { checkForSchemaErrors, checkForNoEnvFiles, checkForConfigErrors } from './chunk-YFP6VA2U.js';
3
+ import { loadVarlockEnvGraph } from './chunk-HRNVJUR5.js';
4
+ import { getItemSummary } from './chunk-VKRGHRPK.js';
4
5
  import { __name } from './chunk-6PEHRAEP.js';
5
- import path from 'path';
6
6
 
7
+ // src/cli/commands/load.command.ts
7
8
  var commandSpec = define({
8
9
  name: "load",
9
10
  description: "Load env according to schema and resolve values",
@@ -30,7 +31,7 @@ var commandSpec = define({
30
31
  path: {
31
32
  type: "string",
32
33
  short: "p",
33
- description: "Path to a specific .env file or directory (with trailing slash) to use as the entry point"
34
+ description: "Path to a specific .env file or directory to use as the entry point"
34
35
  }
35
36
  },
36
37
  examples: `
@@ -53,22 +54,13 @@ var commandFn = /* @__PURE__ */ __name(async (ctx) => {
53
54
  entryFilePath: ctx.values.path
54
55
  });
55
56
  checkForSchemaErrors(envGraph);
57
+ checkForNoEnvFiles(envGraph);
56
58
  if (!envGraph.rootDataSource) throw new Error("expected root data source to be set");
59
+ await envGraph.generateTypesIfNeeded();
57
60
  await envGraph.resolveEnvValues();
58
- const generateTypesDecs = envGraph.getRootDecFns("generateTypes");
59
- for (const generateTypesDec of generateTypesDecs) {
60
- const typeGenSettings = await generateTypesDec.resolve();
61
- if (generateTypesDec.dataSource.isImport && !typeGenSettings.obj.executeWhenImported) continue;
62
- if (!typeGenSettings.obj.lang) throw new Error("@generateTypes - must set `lang` arg");
63
- if (typeGenSettings.obj.lang !== "ts") throw new Error(`@generateTypes - unsupported language: ${typeGenSettings.obj.lang}`);
64
- if (!typeGenSettings.obj.path) throw new Error("@generateTypes - must set `path` arg");
65
- if (!my_dash_default.isString(typeGenSettings.obj.path)) throw new Error("@generateTypes - `path` arg must be a string");
66
- const outputPath = generateTypesDec.dataSource instanceof FileBasedDataSource ? path.resolve(generateTypesDec.dataSource.fullPath, "..", typeGenSettings.obj.path) : typeGenSettings.obj.path;
67
- await envGraph.generateTypes(typeGenSettings.obj.lang, outputPath);
68
- }
69
61
  checkForConfigErrors(envGraph, { showAll });
70
62
  if (format === "pretty") {
71
- for (const itemKey in envGraph.configSchema) {
63
+ for (const itemKey of envGraph.sortedConfigKeys) {
72
64
  const item = envGraph.configSchema[itemKey];
73
65
  console.log(getItemSummary(item));
74
66
  }
@@ -101,5 +93,5 @@ var commandFn = /* @__PURE__ */ __name(async (ctx) => {
101
93
  }, "commandFn");
102
94
 
103
95
  export { commandFn, commandSpec };
104
- //# sourceMappingURL=chunk-HTF7NU5C.js.map
105
- //# sourceMappingURL=chunk-HTF7NU5C.js.map
96
+ //# sourceMappingURL=chunk-EDSWMPIV.js.map
97
+ //# sourceMappingURL=chunk-EDSWMPIV.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/cli/commands/load.command.ts"],"names":[],"mappings":"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","file":"chunk-EDSWMPIV.js","sourcesContent":["import { define } from 'gunshi';\n\nimport { loadVarlockEnvGraph } from '../../lib/load-graph';\nimport { getItemSummary } from '../../lib/formatting';\nimport { checkForConfigErrors, checkForNoEnvFiles, checkForSchemaErrors } from '../helpers/error-checks';\nimport { type TypedGunshiCommandFn } from '../helpers/gunshi-type-utils';\n\nexport const commandSpec = define({\n name: 'load',\n description: 'Load env according to schema and resolve values',\n args: {\n format: {\n type: 'enum',\n short: 'f',\n choices: ['pretty', 'json', 'env', 'json-full'],\n description: 'Format of output',\n default: 'pretty',\n },\n compact: {\n type: 'boolean',\n description: 'Use compact format (for json-full: no indentation, for env: skip undefined values)',\n },\n 'show-all': {\n type: 'boolean',\n description: 'When load is failing, show all items rather than only failing items',\n },\n env: {\n type: 'string',\n description: 'Set the environment (e.g., production, development, etc) - will be overridden by @currentEnv in the schema if present',\n },\n path: {\n type: 'string',\n short: 'p',\n description: 'Path to a specific .env file or directory to use as the entry point',\n },\n },\n examples: `\nLoads and validates environment variables according to your .env files, and prints the results.\nUseful for debugging locally, and in CI to print out a summary of env vars.\n\nExamples:\n varlock load # Load and validate with pretty output\n varlock load --format json # Output in JSON format\n varlock load --show-all # Show all items when validation fails\n varlock load --path .env.prod # Load from a specific .env file\n varlock looad --compact # Use compact format - skips undefined values, no indentation for json-full\n varlock load --env production # Load for a specific environment (⚠️ ignored if using @currentEnv!)\n`.trim(),\n});\n\n\nexport const commandFn: TypedGunshiCommandFn<typeof commandSpec> = async (ctx) => {\n const { format, compact, 'show-all': showAll } = ctx.values;\n\n const envGraph = await loadVarlockEnvGraph({\n currentEnvFallback: ctx.values.env,\n entryFilePath: ctx.values.path,\n });\n checkForSchemaErrors(envGraph);\n checkForNoEnvFiles(envGraph);\n\n if (!envGraph.rootDataSource) throw new Error('expected root data source to be set');\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, { showAll });\n\n if (format === 'pretty') {\n for (const itemKey of envGraph.sortedConfigKeys) {\n const item = envGraph.configSchema[itemKey];\n console.log(getItemSummary(item));\n }\n } else if (format === 'json') {\n console.log(JSON.stringify(envGraph.getResolvedEnvObject(), null, 2));\n } else if (format === 'json-full') {\n const indent = compact ? 0 : 2;\n console.log(JSON.stringify(envGraph.getSerializedGraph(), null, indent));\n } else if (format === 'env') {\n const resolvedEnv = envGraph.getResolvedEnvObject();\n const skipUndefined = compact === true;\n\n for (const key in resolvedEnv) {\n const value = resolvedEnv[key];\n\n if (value === undefined && skipUndefined) {\n continue;\n }\n\n let strValue: string;\n if (value === undefined) {\n strValue = '';\n } else if (typeof value === 'string') {\n strValue = `\"${value.replaceAll('\"', '\\\\\"').replaceAll('\\n', '\\\\n')}\"`;\n } else {\n strValue = JSON.stringify(value);\n }\n console.log(`${key}=${strValue}`);\n }\n } else {\n throw new Error(`Unknown format: ${format}`);\n }\n};\n"]}
@@ -1,6 +1,7 @@
1
- import { CliExitError, fmt } from './chunk-Q3C4VKFT.js';
2
- import { define } from './chunk-UDXNNRWI.js';
3
- import { gracefulExit } from './chunk-OY5U5WTF.js';
1
+ import { fmt } from './chunk-5HF5TS2C.js';
2
+ import { CliExitError } from './chunk-4DZ3IHF6.js';
3
+ import { define } from './chunk-4A54P4EM.js';
4
+ import { gracefulExit } from './chunk-VKRGHRPK.js';
4
5
  import { __name } from './chunk-6PEHRAEP.js';
5
6
  import { homedir } from 'os';
6
7
  import { join } from 'path';
@@ -61,5 +62,5 @@ var commandFn = /* @__PURE__ */ __name(async (ctx) => {
61
62
  }, "commandFn");
62
63
 
63
64
  export { commandFn, commandSpec };
64
- //# sourceMappingURL=chunk-BXR2RIO6.js.map
65
- //# sourceMappingURL=chunk-BXR2RIO6.js.map
65
+ //# sourceMappingURL=chunk-F5WNDO7I.js.map
66
+ //# sourceMappingURL=chunk-F5WNDO7I.js.map
@@ -0,0 +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,EAAA,CAAA,CAUR,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,SAAA,GAAY,IAAA,CAAK,OAAA,EAAQ,EAAG,UAAU,CAAA;AAC5C,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,OAAO,IAAA,EAAM;AACnB,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-F5WNDO7I.js","sourcesContent":["import { homedir } from 'node:os';\nimport { 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';\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 ~/.varlock/config.json saving your 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 = join(homedir(), '.varlock');\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) {\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,4 +1,4 @@
1
- import { define } from './chunk-UDXNNRWI.js';
1
+ import { define } from './chunk-4A54P4EM.js';
2
2
  import { __name } from './chunk-6PEHRAEP.js';
3
3
 
4
4
  // src/cli/commands/help.command.ts
@@ -11,5 +11,5 @@ var commandFn = /* @__PURE__ */ __name(async (ctx) => {
11
11
  }, "commandFn");
12
12
 
13
13
  export { commandFn, commandSpec };
14
- //# sourceMappingURL=chunk-35SAMS66.js.map
15
- //# sourceMappingURL=chunk-35SAMS66.js.map
14
+ //# sourceMappingURL=chunk-GJ7PTJM4.js.map
15
+ //# sourceMappingURL=chunk-GJ7PTJM4.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/cli/commands/help.command.ts"],"names":[],"mappings":";;;;AAGO,IAAM,cAAc,MAAA,CAAO;AAAA,EAChC,IAAA,EAAM,MAAA;AAAA,EACN,WAAA,EAAa,4BAAA;AAAA,EACb,MAAM;AACR,CAAC;AAEM,IAAM,SAAA,iCAA6D,GAAA,KAAQ;AAElF,CAAA,EAFmE,WAAA","file":"chunk-35SAMS66.js","sourcesContent":["import { define } from 'gunshi';\nimport { type TypedGunshiCommandFn } from '../helpers/gunshi-type-utils';\n\nexport const commandSpec = define({\n name: 'help',\n description: 'Show help info for varlock',\n args: {},\n});\n\nexport const commandFn: TypedGunshiCommandFn<typeof commandSpec> = async (ctx) => {\n // no-op - we'll trigger help from main entry point\n};\n"]}
1
+ {"version":3,"sources":["../src/cli/commands/help.command.ts"],"names":[],"mappings":";;;;AAGO,IAAM,cAAc,MAAA,CAAO;AAAA,EAChC,IAAA,EAAM,MAAA;AAAA,EACN,WAAA,EAAa,4BAAA;AAAA,EACb,MAAM;AACR,CAAC;AAEM,IAAM,SAAA,iCAA6D,GAAA,KAAQ;AAElF,CAAA,EAFmE,WAAA","file":"chunk-GJ7PTJM4.js","sourcesContent":["import { define } from 'gunshi';\nimport { type TypedGunshiCommandFn } from '../helpers/gunshi-type-utils';\n\nexport const commandSpec = define({\n name: 'help',\n description: 'Show help info for varlock',\n args: {},\n});\n\nexport const commandFn: TypedGunshiCommandFn<typeof commandSpec> = async (ctx) => {\n // no-op - we'll trigger help from main entry point\n};\n"]}
@@ -0,0 +1,17 @@
1
+ import { loadEnvGraph } from './chunk-VKRGHRPK.js';
2
+ import { __name } from './chunk-6PEHRAEP.js';
3
+
4
+ // src/lib/load-graph.ts
5
+ async function loadVarlockEnvGraph(opts) {
6
+ const envGraph = await loadEnvGraph({
7
+ ...opts,
8
+ afterInit: /* @__PURE__ */ __name(async (_g) => {
9
+ }, "afterInit")
10
+ });
11
+ return envGraph;
12
+ }
13
+ __name(loadVarlockEnvGraph, "loadVarlockEnvGraph");
14
+
15
+ export { loadVarlockEnvGraph };
16
+ //# sourceMappingURL=chunk-HRNVJUR5.js.map
17
+ //# sourceMappingURL=chunk-HRNVJUR5.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/lib/load-graph.ts"],"names":[],"mappings":";;;;AAEA,eAAsB,oBAAoB,IAAA,EAGvC;AACD,EAAA,MAAM,QAAA,GAAW,MAAM,YAAA,CAAa;AAAA,IAClC,GAAG,IAAA;AAAA,IACH,SAAA,gCAAkB,EAAA,KAAO;AAAA,IAEzB,CAAA,EAFW,WAAA;AAAA,GAGZ,CAAA;AAED,EAAA,OAAO,QAAA;AACT;AAZsB,MAAA,CAAA,mBAAA,EAAA,qBAAA,CAAA","file":"chunk-HRNVJUR5.js","sourcesContent":["import { loadEnvGraph } from '../env-graph';\n\nexport async function loadVarlockEnvGraph(opts?: {\n currentEnvFallback?: string,\n entryFilePath?: string,\n}) {\n const envGraph = await loadEnvGraph({\n ...opts,\n afterInit: async (_g) => {\n // TODO: register varlock resolver\n },\n });\n\n return envGraph;\n}\n"]}
@@ -1,6 +1,7 @@
1
- import { define } from './chunk-UDXNNRWI.js';
2
- import { loadVarlockEnvGraph, checkForSchemaErrors, checkForConfigErrors } from './chunk-ISSW6NKZ.js';
3
- import { gracefulExit } from './chunk-OY5U5WTF.js';
1
+ import { define } from './chunk-4A54P4EM.js';
2
+ import { checkForSchemaErrors, checkForNoEnvFiles, checkForConfigErrors } from './chunk-YFP6VA2U.js';
3
+ import { loadVarlockEnvGraph } from './chunk-HRNVJUR5.js';
4
+ import { gracefulExit } from './chunk-VKRGHRPK.js';
4
5
  import { resetRedactionMap, redactSensitiveConfig } from './chunk-WAMBVZL2.js';
5
6
  import { __name } from './chunk-6PEHRAEP.js';
6
7
  import { spawn } from 'child_process';
@@ -195,7 +196,7 @@ var commandSpec = define({
195
196
  path: {
196
197
  type: "string",
197
198
  short: "p",
198
- description: "Path to a specific .env file or directory (with trailing slash) to use as the entry point"
199
+ description: "Path to a specific .env file or directory to use as the entry point"
199
200
  }
200
201
  },
201
202
  examples: `
@@ -235,6 +236,7 @@ var commandFn = /* @__PURE__ */ __name(async (ctx) => {
235
236
  entryFilePath: ctx.values.path
236
237
  });
237
238
  checkForSchemaErrors(envGraph);
239
+ checkForNoEnvFiles(envGraph);
238
240
  await envGraph.resolveEnvValues();
239
241
  checkForConfigErrors(envGraph);
240
242
  const resolvedEnv = envGraph.getResolvedEnvObject();
@@ -303,5 +305,5 @@ var commandFn = /* @__PURE__ */ __name(async (ctx) => {
303
305
  }, "commandFn");
304
306
 
305
307
  export { commandFn, commandSpec };
306
- //# sourceMappingURL=chunk-PESTWPBG.js.map
307
- //# sourceMappingURL=chunk-PESTWPBG.js.map
308
+ //# sourceMappingURL=chunk-QNKJGOQ6.js.map
309
+ //# sourceMappingURL=chunk-QNKJGOQ6.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-QNKJGOQ6.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 to preserve TTY detection for interactive tools',\n },\n path: {\n type: 'string',\n short: 'p',\n description: 'Path to a specific .env file or directory to use as the entry point',\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\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 (psql, claude, etc.)\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 entryFilePath: ctx.values.path,\n });\n checkForSchemaErrors(envGraph);\n checkForNoEnvFiles(envGraph);\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 // 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: fullInjectedEnv,\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"]}
@@ -0,0 +1,331 @@
1
+ import { EnvGraph, DirectoryDataSource, DotEnvFileDataSource, my_dash_default } from './chunk-CBP4M7BN.js';
2
+ import { redactString } from './chunk-MIBOBKI4.js';
3
+ import { __commonJS, __name, __toESM } from './chunk-6PEHRAEP.js';
4
+ import process2 from 'process';
5
+ import fs from 'fs';
6
+ import path from 'path';
7
+
8
+ // ../../node_modules/.bun/ansis@4.2.0/node_modules/ansis/index.cjs
9
+ var require_ansis = __commonJS({
10
+ "../../node_modules/.bun/ansis@4.2.0/node_modules/ansis/index.cjs"(exports$1, module) {
11
+ var e;
12
+ var t;
13
+ var r;
14
+ var { defineProperty: l, setPrototypeOf: n, create: o, keys: s } = Object;
15
+ var i = "";
16
+ var { round: c, max: a2 } = Math;
17
+ var p = /* @__PURE__ */ __name((e2) => {
18
+ let t2 = /([a-f\d]{3,6})/i.exec(e2)?.[1], r2 = t2?.length, l2 = parseInt(6 ^ r2 ? 3 ^ r2 ? "0" : t2[0] + t2[0] + t2[1] + t2[1] + t2[2] + t2[2] : t2, 16);
19
+ return [l2 >> 16 & 255, l2 >> 8 & 255, 255 & l2];
20
+ }, "p");
21
+ var u = /* @__PURE__ */ __name((e2, t2, r2) => e2 ^ t2 || t2 ^ r2 ? 16 + 36 * c(e2 / 51) + 6 * c(t2 / 51) + c(r2 / 51) : 8 > e2 ? 16 : e2 > 248 ? 231 : c(24 * (e2 - 8) / 247) + 232, "u");
22
+ var d = /* @__PURE__ */ __name((e2) => {
23
+ let t2, r2, l2, n2, o2;
24
+ return 8 > e2 ? 30 + e2 : 16 > e2 ? e2 - 8 + 90 : (232 > e2 ? (o2 = (e2 -= 16) % 36, t2 = (e2 / 36 | 0) / 5, r2 = (o2 / 6 | 0) / 5, l2 = o2 % 6 / 5) : t2 = r2 = l2 = (10 * (e2 - 232) + 8) / 255, n2 = 2 * a2(t2, r2, l2), n2 ? 30 + (c(l2) << 2 | c(r2) << 1 | c(t2)) + (2 ^ n2 ? 0 : 60) : 30);
25
+ }, "d");
26
+ var f = (() => {
27
+ let r2 = /* @__PURE__ */ __name((e2) => o2.some(((t2) => e2.test(t2))), "r"), l2 = globalThis, n2 = l2.process ?? {}, o2 = n2.argv ?? [], i2 = n2.env ?? {}, c2 = -1;
28
+ try {
29
+ e = "," + s(i2).join(",");
30
+ } catch (e2) {
31
+ i2 = {}, c2 = 0;
32
+ }
33
+ let a3 = "FORCE_COLOR", p2 = { false: 0, 0: 0, 1: 1, 2: 2, 3: 3 }[i2[a3]] ?? -1, u2 = a3 in i2 && p2 || r2(/^--color=?(true|always)?$/);
34
+ return u2 && (c2 = p2), ~c2 || (c2 = ((r3, l3, n3) => (t = r3.TERM, { "24bit": 3, truecolor: 3, ansi256: 2, ansi: 1 }[r3.COLORTERM] || (r3.CI ? /,GITHUB/.test(e) ? 3 : 1 : l3 && "dumb" !== t ? n3 ? 3 : /-256/.test(t) ? 2 : 1 : 0)))(i2, !!i2.PM2_HOME || i2.NEXT_RUNTIME?.includes("edge") || !!n2.stdout?.isTTY, "win32" === n2.platform)), !p2 || i2.NO_COLOR || r2(/^--(no-color|color=(false|never))$/) ? 0 : l2.window?.chrome || u2 && !c2 ? 3 : c2;
35
+ })();
36
+ var g = { open: i, close: i };
37
+ var h = 39;
38
+ var b = 49;
39
+ var O = {};
40
+ var m = /* @__PURE__ */ __name(({ p: e2 }, { open: t2, close: l2 }) => {
41
+ let o2 = /* @__PURE__ */ __name((e3, ...r2) => {
42
+ if (!e3) {
43
+ if (t2 && t2 === l2) return t2;
44
+ if ((e3 ?? i) === i) return i;
45
+ }
46
+ let n2, s3 = e3.raw ? String.raw({ raw: e3 }, ...r2) : i + e3, c3 = o2.p, a3 = c3.o, p2 = c3.c;
47
+ if (s3.includes("\x1B")) for (; c3; c3 = c3.p) {
48
+ let { open: e4, close: t3 } = c3, r3 = t3.length, l3 = i, o3 = 0;
49
+ if (r3) for (; ~(n2 = s3.indexOf(t3, o3)); o3 = n2 + r3) l3 += s3.slice(o3, n2) + e4;
50
+ s3 = l3 + s3.slice(o3);
51
+ }
52
+ return a3 + (s3.includes("\n") ? s3.replace(/(\r?\n)/g, p2 + "$1" + a3) : s3) + p2;
53
+ }, "o"), s2 = t2, c2 = l2;
54
+ return e2 && (s2 = e2.o + t2, c2 = l2 + e2.c), n(o2, r), o2.p = { open: t2, close: l2, o: s2, c: c2, p: e2 }, o2.open = s2, o2.close = c2, o2;
55
+ }, "m");
56
+ var w = new (/* @__PURE__ */ __name(function e2(t2 = f) {
57
+ let s2 = { Ansis: e2, level: t2, isSupported: /* @__PURE__ */ __name(() => a3, "isSupported"), strip: /* @__PURE__ */ __name((e3) => e3.replace(/[›][[()#;?]*(?:[0-9]{1,4}(?:;[0-9]{0,4})*)?[0-9A-ORZcf-nqry=><]/g, i), "strip"), extend(e3) {
58
+ for (let t3 in e3) {
59
+ let r2 = e3[t3], l2 = (typeof r2)[0];
60
+ "s" === l2 ? (c2(t3, T(...p(r2))), c2(_2(t3), v(...p(r2)))) : c2(t3, r2, "f" === l2);
61
+ }
62
+ return r = o({}, O), n(s2, r), s2;
63
+ } }, c2 = /* @__PURE__ */ __name((e3, t3, r2) => {
64
+ O[e3] = { get() {
65
+ let n2 = r2 ? (...e4) => m(this, t3(...e4)) : m(this, t3);
66
+ return l(this, e3, { value: n2 }), n2;
67
+ } };
68
+ }, "c"), a3 = t2 > 0, w2 = /* @__PURE__ */ __name((e3, t3) => a3 ? { open: `\x1B[${e3}m`, close: `\x1B[${t3}m` } : g, "w"), y = /* @__PURE__ */ __name((e3) => (t3) => e3(...p(t3)), "y"), R = /* @__PURE__ */ __name((e3, t3) => (r2, l2, n2) => w2(`${e3}8;2;${r2};${l2};${n2}`, t3), "R"), $ = /* @__PURE__ */ __name((e3, t3) => (r2, l2, n2) => w2(((e4, t4, r3) => d(u(e4, t4, r3)))(r2, l2, n2) + e3, t3), "$"), x = /* @__PURE__ */ __name((e3) => (t3, r2, l2) => e3(u(t3, r2, l2)), "x"), T = R(3, h), v = R(4, b), C = /* @__PURE__ */ __name((e3) => w2("38;5;" + e3, h), "C"), E = /* @__PURE__ */ __name((e3) => w2("48;5;" + e3, b), "E");
69
+ 2 === t2 ? (T = x(C), v = x(E)) : 1 === t2 && (T = $(0, h), v = $(10, b), C = /* @__PURE__ */ __name((e3) => w2(d(e3), h), "C"), E = /* @__PURE__ */ __name((e3) => w2(d(e3) + 10, b), "E"));
70
+ let M, I = { fg: C, bg: E, rgb: T, bgRgb: v, hex: y(T), bgHex: y(v), visible: g, reset: w2(0, 0), bold: w2(1, 22), dim: w2(2, 22), italic: w2(3, 23), underline: w2(4, 24), inverse: w2(7, 27), hidden: w2(8, 28), strikethrough: w2(9, 29) }, _2 = /* @__PURE__ */ __name((e3) => "bg" + e3[0].toUpperCase() + e3.slice(1), "_"), k = "Bright";
71
+ return "black,red,green,yellow,blue,magenta,cyan,white,gray".split(",").map(((e3, t3) => {
72
+ M = _2(e3), 8 > t3 ? (I[e3 + k] = w2(90 + t3, h), I[M + k] = w2(100 + t3, b)) : t3 = 60, I[e3] = w2(30 + t3, h), I[M] = w2(40 + t3, b);
73
+ })), s2.extend(I);
74
+ }, "e"))();
75
+ module.exports = w, w.default = w;
76
+ }
77
+ });
78
+
79
+ // ../../node_modules/.bun/ansis@4.2.0/node_modules/ansis/index.mjs
80
+ var import_index = __toESM(require_ansis(), 1);
81
+ var ansis_default = import_index.default;
82
+ var { Ansis, fg, bg, rgb, bgRgb, hex, bgHex, reset, inverse, hidden, visible, bold, dim, italic, underline, strikethrough, black, red, green, yellow, blue, magenta, cyan, white, gray, redBright, greenBright, yellowBright, blueBright, magentaBright, cyanBright, whiteBright, bgBlack, bgRed, bgGreen, bgYellow, bgBlue, bgMagenta, bgCyan, bgWhite, bgGray, bgRedBright, bgGreenBright, bgYellowBright, bgBlueBright, bgMagentaBright, bgCyanBright, bgWhiteBright } = import_index.default;
83
+ var asyncCallbacks = /* @__PURE__ */ new Set();
84
+ var callbacks = /* @__PURE__ */ new Set();
85
+ var isCalled = false;
86
+ var isRegistered = false;
87
+ async function flushStdio() {
88
+ const flush = /* @__PURE__ */ __name((stream) => new Promise((resolve) => {
89
+ if (!stream || !stream.writable || stream.writableEnded || stream.destroyed) {
90
+ resolve();
91
+ return;
92
+ }
93
+ const onError = /* @__PURE__ */ __name(() => {
94
+ stream.off("error", onError);
95
+ resolve();
96
+ }, "onError");
97
+ stream.once("error", onError);
98
+ try {
99
+ stream.write("", () => {
100
+ stream.off("error", onError);
101
+ resolve();
102
+ });
103
+ } catch {
104
+ stream.off("error", onError);
105
+ resolve();
106
+ }
107
+ }), "flush");
108
+ const timeout = new Promise((resolve) => {
109
+ setTimeout(resolve, 1e3);
110
+ });
111
+ await Promise.race([
112
+ Promise.all([flush(process2.stdout), flush(process2.stderr)]),
113
+ timeout
114
+ ]);
115
+ }
116
+ __name(flushStdio, "flushStdio");
117
+ async function exit(shouldManuallyExit, isSynchronous, signal) {
118
+ if (isCalled) {
119
+ return;
120
+ }
121
+ isCalled = true;
122
+ if (asyncCallbacks.size > 0 && isSynchronous) {
123
+ console.error([
124
+ "SYNCHRONOUS TERMINATION NOTICE:",
125
+ "When explicitly exiting the process via process.exit or via a parent process,",
126
+ "asynchronous tasks in your exitHooks will not run. Either remove these tasks,",
127
+ "use gracefulExit() instead of process.exit(), or ensure your parent process",
128
+ "sends a SIGINT to the process running this code."
129
+ ].join(" "));
130
+ }
131
+ let exitCode = 0;
132
+ if (signal > 0) {
133
+ exitCode = 128 + signal;
134
+ } else if (typeof process2.exitCode === "number" || typeof process2.exitCode === "string") {
135
+ exitCode = process2.exitCode;
136
+ }
137
+ const done = /* @__PURE__ */ __name((force = false) => {
138
+ if (force === true || shouldManuallyExit === true) {
139
+ process2.exit(exitCode);
140
+ }
141
+ }, "done");
142
+ for (const callback of callbacks) {
143
+ callback(exitCode);
144
+ }
145
+ if (isSynchronous) {
146
+ done();
147
+ return;
148
+ }
149
+ const promises = [];
150
+ let forceAfter = 0;
151
+ for (const [callback, wait] of asyncCallbacks) {
152
+ forceAfter = Math.max(forceAfter, wait);
153
+ promises.push(Promise.resolve(callback(exitCode)));
154
+ }
155
+ const asyncTimer = forceAfter > 0 ? setTimeout(() => {
156
+ done(true);
157
+ }, forceAfter) : void 0;
158
+ await Promise.all(promises);
159
+ clearTimeout(asyncTimer);
160
+ await flushStdio();
161
+ done();
162
+ }
163
+ __name(exit, "exit");
164
+ function addHook(options) {
165
+ const { onExit, wait, isSynchronous } = options;
166
+ const asyncCallbackConfig = [onExit, wait];
167
+ if (isSynchronous) {
168
+ callbacks.add(onExit);
169
+ } else {
170
+ asyncCallbacks.add(asyncCallbackConfig);
171
+ }
172
+ if (!isRegistered) {
173
+ isRegistered = true;
174
+ process2.once("beforeExit", exit.bind(void 0, true, false, -128));
175
+ process2.once("SIGINT", exit.bind(void 0, true, false, 2));
176
+ process2.once("SIGTERM", exit.bind(void 0, true, false, 15));
177
+ process2.once("exit", exit.bind(void 0, false, true, 0));
178
+ process2.on("message", (message) => {
179
+ if (message === "shutdown") {
180
+ exit(true, true, -128);
181
+ }
182
+ });
183
+ }
184
+ return () => {
185
+ if (isSynchronous) {
186
+ callbacks.delete(onExit);
187
+ } else {
188
+ asyncCallbacks.delete(asyncCallbackConfig);
189
+ }
190
+ };
191
+ }
192
+ __name(addHook, "addHook");
193
+ function asyncExitHook(onExit, options = {}) {
194
+ if (typeof onExit !== "function") {
195
+ throw new TypeError("onExit must be a function");
196
+ }
197
+ if (!(typeof options.wait === "number" && options.wait > 0)) {
198
+ throw new TypeError("wait must be set to a positive numeric value");
199
+ }
200
+ return addHook({
201
+ onExit,
202
+ wait: options.wait,
203
+ isSynchronous: false
204
+ });
205
+ }
206
+ __name(asyncExitHook, "asyncExitHook");
207
+ function gracefulExit(signal) {
208
+ if (signal !== void 0) {
209
+ process2.exitCode = signal;
210
+ }
211
+ exit(true, false, -128);
212
+ }
213
+ __name(gracefulExit, "gracefulExit");
214
+ async function loadEnvGraph(opts) {
215
+ const graph = new EnvGraph();
216
+ if (opts?.entryFilePath) {
217
+ const resolvedPath = path.resolve(opts.entryFilePath);
218
+ const isDirectory = opts.entryFilePath.endsWith("/") || opts.entryFilePath.endsWith(path.sep) || fs.existsSync(resolvedPath) && fs.statSync(resolvedPath).isDirectory();
219
+ if (isDirectory) {
220
+ graph.basePath = resolvedPath;
221
+ if (opts?.afterInit) await opts.afterInit(graph);
222
+ if (opts?.currentEnvFallback) graph.envFlagFallback = opts.currentEnvFallback;
223
+ await graph.setRootDataSource(new DirectoryDataSource(resolvedPath));
224
+ } else {
225
+ graph.basePath = path.dirname(resolvedPath);
226
+ if (opts?.afterInit) await opts.afterInit(graph);
227
+ if (opts?.currentEnvFallback) graph.envFlagFallback = opts.currentEnvFallback;
228
+ await graph.setRootDataSource(new DotEnvFileDataSource(resolvedPath));
229
+ }
230
+ } else {
231
+ graph.basePath = opts?.basePath ?? process.cwd();
232
+ if (opts?.afterInit) await opts.afterInit(graph);
233
+ if (opts?.currentEnvFallback) graph.envFlagFallback = opts.currentEnvFallback;
234
+ await graph.setRootDataSource(new DirectoryDataSource(graph.basePath));
235
+ }
236
+ await graph.finishLoad();
237
+ return graph;
238
+ }
239
+ __name(loadEnvGraph, "loadEnvGraph");
240
+
241
+ // src/lib/formatting.ts
242
+ function applyMods(str, mods) {
243
+ if (!mods) return str;
244
+ if (my_dash_default.isArray(mods)) {
245
+ let modStr = str;
246
+ mods.forEach((mod) => {
247
+ modStr = ansis_default[mod](modStr);
248
+ });
249
+ return modStr;
250
+ }
251
+ return ansis_default[mods](str);
252
+ }
253
+ __name(applyMods, "applyMods");
254
+ function formattedValue(val, showType = false) {
255
+ let strVal = "";
256
+ let strType = "";
257
+ let mods;
258
+ if (my_dash_default.isBoolean(val)) {
259
+ strVal = val.toString();
260
+ mods = ["yellow", "italic"];
261
+ strType = "boolean";
262
+ } else if (my_dash_default.isNumber(val)) {
263
+ strVal = val.toString();
264
+ mods = "yellow";
265
+ strType = "number";
266
+ } else if (my_dash_default.isString(val)) {
267
+ strVal = `"${val}"`;
268
+ strType = "string";
269
+ } else if (my_dash_default.isPlainObject(val)) {
270
+ strVal = JSON.stringify(val);
271
+ strType = "object";
272
+ } else if (val === null) {
273
+ strVal = "null";
274
+ mods = "gray";
275
+ } else if (val === void 0) {
276
+ strVal = "undefined";
277
+ mods = "gray";
278
+ }
279
+ return [
280
+ applyMods(strVal, mods),
281
+ showType && strType ? ansis_default.gray(` (${strType})`) : ""
282
+ ].join("");
283
+ }
284
+ __name(formattedValue, "formattedValue");
285
+ function joinAndCompact(strings, joinChar = " ") {
286
+ return strings.filter((s) => (
287
+ // we'll not filter out empty strings - because it's useful to just add newlines
288
+ s !== void 0 && s !== null && s !== false
289
+ )).join(joinChar);
290
+ }
291
+ __name(joinAndCompact, "joinAndCompact");
292
+ var VALIDATION_STATE_COLORS = {
293
+ error: "red",
294
+ warn: "yellow",
295
+ valid: "cyan"
296
+ };
297
+ function getItemSummary(item) {
298
+ const summary = [];
299
+ const itemErrors = item.errors;
300
+ const icon = itemErrors.length ? itemErrors[0].icon : "\u2705";
301
+ const isSensitive = item.isSensitive;
302
+ const isRequired = item.isRequired;
303
+ summary.push(joinAndCompact([
304
+ icon,
305
+ ansis_default[VALIDATION_STATE_COLORS[item.validationState]](item.key) + (isRequired ? ansis_default.magenta("*") : ""),
306
+ // ansis.gray(`[type = ${item.type.typeLabel}]`),
307
+ isSensitive && ` \u{1F510}${ansis_default.gray.italic("sensitive")}`
308
+ // item.useAt ? ansis.gray.italic(`(${item.useAt?.join(', ')})`) : undefined,
309
+ ]));
310
+ let valAsStr = formattedValue(item.resolvedValue, false);
311
+ if (isSensitive && item.resolvedValue && my_dash_default.isString(item.resolvedValue)) {
312
+ valAsStr = redactString(item.resolvedValue);
313
+ }
314
+ summary.push(joinAndCompact([
315
+ ansis_default.gray(" \u2514"),
316
+ valAsStr,
317
+ item.isCoerced && ansis_default.gray.italic("< coerced from ") + (isSensitive ? formattedValue(item.resolvedRawValue) : formattedValue(item.resolvedRawValue, false))
318
+ ]));
319
+ itemErrors?.forEach((err) => {
320
+ summary.push(ansis_default[err.isWarning ? "yellow" : "red"](` - ${err.isWarning ? "[WARNING] " : ""}${err.message}`));
321
+ if (err.tip) {
322
+ summary.push(...err.tip.split("\n").map((line) => ` ${line}`));
323
+ }
324
+ });
325
+ return summary.join("\n");
326
+ }
327
+ __name(getItemSummary, "getItemSummary");
328
+
329
+ export { ansis_default, asyncExitHook, getItemSummary, gracefulExit, joinAndCompact, loadEnvGraph };
330
+ //# sourceMappingURL=chunk-VKRGHRPK.js.map
331
+ //# sourceMappingURL=chunk-VKRGHRPK.js.map