varlock 0.0.11 → 0.0.13

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 (47) hide show
  1. package/dist/{chunk-FYLMYWUF.js → chunk-5EBVEGDW.js} +5 -24
  2. package/dist/chunk-5EBVEGDW.js.map +1 -0
  3. package/dist/{chunk-4CE75BSX.js → chunk-AS4LIW7A.js} +21 -15
  4. package/dist/chunk-AS4LIW7A.js.map +1 -0
  5. package/dist/{chunk-KCX4NC7Q.js → chunk-IML4QZHB.js} +4 -5
  6. package/dist/chunk-IML4QZHB.js.map +1 -0
  7. package/dist/{chunk-4WMY2EW3.js → chunk-LXJMZMID.js} +98 -66
  8. package/dist/chunk-LXJMZMID.js.map +1 -0
  9. package/dist/{chunk-ZW2T4C6A.js → chunk-MV5ZAKN7.js} +539 -267
  10. package/dist/chunk-MV5ZAKN7.js.map +1 -0
  11. package/dist/{chunk-LS6F7BSZ.js → chunk-MVYXWTAV.js} +4 -4
  12. package/dist/{chunk-LS6F7BSZ.js.map → chunk-MVYXWTAV.js.map} +1 -1
  13. package/dist/{chunk-PB7RWVE6.js → chunk-T3I4UFB2.js} +16 -5
  14. package/dist/chunk-T3I4UFB2.js.map +1 -0
  15. package/dist/{chunk-GWQT5VGW.js → chunk-UA3DMAAQ.js} +4 -4
  16. package/dist/{chunk-GWQT5VGW.js.map → chunk-UA3DMAAQ.js.map} +1 -1
  17. package/dist/cli/cli-executable.js +14 -15
  18. package/dist/cli/cli-executable.js.map +1 -1
  19. package/dist/{env-KH4bPru7.d.ts → env-B_LAqK4w.d.ts} +103 -64
  20. package/dist/index.d.ts +2 -3
  21. package/dist/index.js +2 -4
  22. package/dist/index.js.map +1 -1
  23. package/dist/init.command-CTO64XBL.js +8 -0
  24. package/dist/{init.command-ZRQOE2OK.js.map → init.command-CTO64XBL.js.map} +1 -1
  25. package/dist/load.command-EWIJDF55.js +8 -0
  26. package/dist/{load.command-YBN3BW6U.js.map → load.command-EWIJDF55.js.map} +1 -1
  27. package/dist/login.command-UZJJ4XTV.js +8 -0
  28. package/dist/{login.command-F5AWKZKA.js.map → login.command-UZJJ4XTV.js.map} +1 -1
  29. package/dist/run.command-T44BAZ7X.js +8 -0
  30. package/dist/{run.command-WWJ6ZE26.js.map → run.command-T44BAZ7X.js.map} +1 -1
  31. package/dist/runtime/env.d.ts +1 -1
  32. package/dist/telemetry.command-2C3MQA4K.js +8 -0
  33. package/dist/{telemetry.command-IS2JLIZM.js.map → telemetry.command-2C3MQA4K.js.map} +1 -1
  34. package/package.json +3 -3
  35. package/dist/chunk-4CE75BSX.js.map +0 -1
  36. package/dist/chunk-4WMY2EW3.js.map +0 -1
  37. package/dist/chunk-FYLMYWUF.js.map +0 -1
  38. package/dist/chunk-KCX4NC7Q.js.map +0 -1
  39. package/dist/chunk-PB7RWVE6.js.map +0 -1
  40. package/dist/chunk-ZUG7BEY5.js +0 -17
  41. package/dist/chunk-ZUG7BEY5.js.map +0 -1
  42. package/dist/chunk-ZW2T4C6A.js.map +0 -1
  43. package/dist/init.command-ZRQOE2OK.js +0 -9
  44. package/dist/load.command-YBN3BW6U.js +0 -9
  45. package/dist/login.command-F5AWKZKA.js +0 -8
  46. package/dist/run.command-WWJ6ZE26.js +0 -9
  47. package/dist/telemetry.command-IS2JLIZM.js +0 -8
@@ -1,8 +1,7 @@
1
- import { ansis_default, joinAndCompact, my_dash_default } from './chunk-ZW2T4C6A.js';
1
+ import { ansis_default, joinAndCompact, my_dash_default, pathExistsSync } from './chunk-MV5ZAKN7.js';
2
2
  import { __name } from './chunk-XN24GZXQ.js';
3
- import fs, { accessSync, existsSync } from 'fs';
4
- import { access } from 'fs/promises';
5
3
  import path from 'path';
4
+ import fs, { existsSync } from 'fs';
6
5
  import Debug from 'debug';
7
6
  import { execSync } from 'child_process';
8
7
 
@@ -32,24 +31,6 @@ var CliExitError = class extends Error {
32
31
  return msg;
33
32
  }
34
33
  };
35
- async function pathExists(p) {
36
- try {
37
- await access(p);
38
- return true;
39
- } catch {
40
- return false;
41
- }
42
- }
43
- __name(pathExists, "pathExists");
44
- function pathExistsSync(p) {
45
- try {
46
- accessSync(p);
47
- return true;
48
- } catch {
49
- return false;
50
- }
51
- }
52
- __name(pathExistsSync, "pathExistsSync");
53
34
  var debug = Debug("varlock:js-package-manager-utils");
54
35
  var JS_PACKAGE_MANAGERS = Object.freeze({
55
36
  npm: {
@@ -187,6 +168,6 @@ var logLines = /* @__PURE__ */ __name((lines) => {
187
168
  }
188
169
  }, "logLines");
189
170
 
190
- export { CliExitError, detectJsPackageManager, fmt, installJsDependency, logLines, pathExists };
191
- //# sourceMappingURL=chunk-FYLMYWUF.js.map
192
- //# sourceMappingURL=chunk-FYLMYWUF.js.map
171
+ export { CliExitError, detectJsPackageManager, fmt, installJsDependency, logLines };
172
+ //# sourceMappingURL=chunk-5EBVEGDW.js.map
173
+ //# sourceMappingURL=chunk-5EBVEGDW.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/cli/helpers/exit-error.ts","../src/cli/helpers/js-package-manager-utils.ts","../src/cli/helpers/pretty-format.ts"],"names":[],"mappings":"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","file":"chunk-5EBVEGDW.js","sourcesContent":["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","import path from 'node:path';\nimport fs, { existsSync } from 'node:fs';\nimport { pathExistsSync } from '@env-spec/utils/fs-utils';\nimport Debug from 'debug';\n\nimport { CliExitError } from './exit-error';\nimport { execSync } from 'node:child_process';\n\nconst debug = Debug('varlock:js-package-manager-utils');\n\nexport type JsPackageManager = 'npm' | 'pnpm' | 'yarn' | 'bun' | 'deno';\n\nexport type JsPackageManagerMeta = {\n name: JsPackageManager;\n lockfile: string;\n add: string;\n exec: string;\n dlx: string;\n};\n\nexport const JS_PACKAGE_MANAGERS: Record<JsPackageManager, JsPackageManagerMeta> = Object.freeze({\n npm: {\n name: 'npm',\n lockfile: 'package-lock.json',\n add: 'npm install', // add also works\n exec: 'npm exec --',\n dlx: 'npx',\n },\n pnpm: {\n name: 'pnpm',\n lockfile: 'pnpm-lock.yaml',\n add: 'pnpm add',\n exec: 'pnpm exec',\n dlx: 'pnpm dlx',\n },\n yarn: {\n name: 'yarn',\n lockfile: 'yarn.lock',\n add: 'yarn add',\n exec: 'yarn exec --',\n dlx: 'yarn dlx',\n },\n bun: {\n name: 'bun',\n lockfile: 'bun.lockb',\n add: 'bun add',\n exec: 'bun run',\n dlx: 'bunx',\n },\n deno: { //! deno not fully supported yet\n name: 'deno',\n lockfile: 'deno.lock',\n add: 'deno add',\n // TODO: don't think these are quite right...\n exec: 'deno run',\n dlx: 'deno run',\n },\n});\n\n/**\n * detect js package manager\n *\n * currently go up the folder tree looking for lockfiles (ex: package-lock.json, pnpm-lock.yaml)\n * if nothing found, we'll look at process.env.npm_config_user_agent\n * */\nexport function detectJsPackageManager(opts?: {\n cwd?: string,\n workspaceRootPath?: string,\n exitIfNotFound?: boolean,\n}) {\n debug('Detecting js package manager');\n let cwd = opts?.cwd || process.cwd();\n do {\n debug(`> scanning ${cwd}`);\n let pm: JsPackageManager;\n let detectedPm: JsPackageManager | undefined;\n for (pm in JS_PACKAGE_MANAGERS) {\n const lockFilePath = path.join(\n cwd,\n JS_PACKAGE_MANAGERS[pm].lockfile,\n );\n\n if (pathExistsSync(lockFilePath)) {\n // if we find 2 lockfiles at the same level, we throw an error\n if (detectedPm) {\n throw new CliExitError('Found multiple js package manager lockfiles', {\n details: `${JS_PACKAGE_MANAGERS[pm].lockfile} and ${JS_PACKAGE_MANAGERS[detectedPm].lockfile}`,\n forceExit: true,\n });\n }\n debug(`> found ${JS_PACKAGE_MANAGERS[pm].lockfile}`);\n detectedPm = pm;\n }\n }\n if (detectedPm) return JS_PACKAGE_MANAGERS[detectedPm];\n\n cwd = path.join(cwd, '..');\n if (opts?.workspaceRootPath) {\n if (opts.workspaceRootPath === cwd) {\n debug('> found workspace root');\n break;\n }\n } else {\n // if we don't have a workspace root path, we'll break if we hit the git repo root\n if (pathExistsSync(path.join(cwd, '.git'))) {\n debug('> found git root');\n break;\n }\n }\n } while (cwd && cwd !== '.' && cwd !== '/');\n\n // if we did not find a lockfile, we'll look at env vars for other hints\n if (process.env.npm_config_user_agent) {\n const pmFromAgent = process.env.npm_config_user_agent.split('/')[0];\n if (Object.keys(JS_PACKAGE_MANAGERS).includes(pmFromAgent)) {\n debug(`> found ${pmFromAgent} using npm_config_user_agent`);\n return JS_PACKAGE_MANAGERS[pmFromAgent as JsPackageManager];\n }\n }\n\n if (opts?.exitIfNotFound) {\n // show some hopefully useful error messaging if we hit the root folder without finding anything\n throw new CliExitError('Unable to find 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}\n\n\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\n","import ansis from 'ansis';\nimport { detectJsPackageManager, 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,10 +1,9 @@
1
1
  import { define } from './chunk-33ROL4J5.js';
2
- import { checkForSchemaErrors, checkForConfigErrors } from './chunk-PB7RWVE6.js';
3
- import { loadVarlockEnvGraph } from './chunk-ZUG7BEY5.js';
4
- import { my_dash_default, getItemSummary } from './chunk-ZW2T4C6A.js';
2
+ import { loadVarlockEnvGraph, checkForSchemaErrors, checkForConfigErrors } from './chunk-T3I4UFB2.js';
3
+ import { my_dash_default, FileBasedDataSource, getItemSummary } from './chunk-MV5ZAKN7.js';
5
4
  import { __name } from './chunk-XN24GZXQ.js';
5
+ import path from 'path';
6
6
 
7
- // src/cli/commands/load.command.ts
8
7
  var commandSpec = define({
9
8
  name: "load",
10
9
  description: "Load env according to schema and resolve values",
@@ -32,16 +31,23 @@ var commandFn = /* @__PURE__ */ __name(async (ctx) => {
32
31
  currentEnvFallback: ctx.values.env
33
32
  });
34
33
  checkForSchemaErrors(envGraph);
35
- if (envGraph.schemaDataSource?.decorators.generateTypes) {
36
- const typeGenSettings = envGraph.schemaDataSource?.decorators.generateTypes.bareFnArgs?.simplifiedValues;
37
- if (!my_dash_default.isPlainObject(typeGenSettings)) {
38
- throw new Error("@generateTypes - must be a fn call with key/value args");
34
+ if (!envGraph.rootDataSource) throw new Error("expected root data source to be set");
35
+ const generateTypesDecoratorsPerSource = envGraph.getRootDecorators("generateTypes");
36
+ if (generateTypesDecoratorsPerSource.length) {
37
+ for (const [source, generateTypesDecorators] of generateTypesDecoratorsPerSource) {
38
+ for (const generateTypesDecorator of generateTypesDecorators) {
39
+ const typeGenSettings = generateTypesDecorator.bareFnArgs?.simplifiedValues;
40
+ if (!my_dash_default.isPlainObject(typeGenSettings)) {
41
+ throw new Error("@generateTypes - must be a fn call with key/value args");
42
+ }
43
+ if (!typeGenSettings.lang) throw new Error("@generateTypes - must set `lang` arg");
44
+ if (typeGenSettings.lang !== "ts") throw new Error(`@generateTypes - unsupported language: ${typeGenSettings.lang}`);
45
+ if (!typeGenSettings.path) throw new Error("@generateTypes - must set `path` arg");
46
+ if (!my_dash_default.isString(typeGenSettings.path)) throw new Error("@generateTypes - `path` arg must be a string");
47
+ const outputPath = source instanceof FileBasedDataSource ? path.resolve(source.fullPath, "..", typeGenSettings.path) : typeGenSettings.path;
48
+ await envGraph.generateTypes(typeGenSettings.lang, outputPath);
49
+ }
39
50
  }
40
- if (!typeGenSettings.lang) throw new Error("@generateTypes - must set `lang` arg");
41
- if (typeGenSettings.lang !== "ts") throw new Error(`@generateTypes - unsupported language: ${typeGenSettings.lang}`);
42
- if (!typeGenSettings.path) throw new Error("@generateTypes - must set `path` arg");
43
- if (!my_dash_default.isString(typeGenSettings.path)) throw new Error("@generateTypes - `path` arg must be a string");
44
- await envGraph.generateTypes(typeGenSettings.lang, typeGenSettings.path);
45
51
  }
46
52
  await envGraph.resolveEnvValues();
47
53
  checkForConfigErrors(envGraph, { showAll });
@@ -74,5 +80,5 @@ var commandFn = /* @__PURE__ */ __name(async (ctx) => {
74
80
  }, "commandFn");
75
81
 
76
82
  export { commandFn, commandSpec };
77
- //# sourceMappingURL=chunk-4CE75BSX.js.map
78
- //# sourceMappingURL=chunk-4CE75BSX.js.map
83
+ //# sourceMappingURL=chunk-AS4LIW7A.js.map
84
+ //# sourceMappingURL=chunk-AS4LIW7A.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/cli/commands/load.command.ts"],"names":[],"mappings":"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","file":"chunk-AS4LIW7A.js","sourcesContent":["import { define } from 'gunshi';\nimport _ from '@env-spec/utils/my-dash';\n\nimport { loadVarlockEnvGraph } from '../../lib/load-graph';\nimport { getItemSummary } from '../../lib/formatting';\nimport { checkForConfigErrors, checkForSchemaErrors } from '../helpers/error-checks';\nimport { type TypedGunshiCommandFn } from '../helpers/gunshi-type-utils';\nimport path from 'node:path';\nimport { FileBasedDataSource } from '../../../env-graph';\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 '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 @envFlag in the schema if present',\n },\n },\n});\n\n\nexport const commandFn: TypedGunshiCommandFn<typeof commandSpec> = async (ctx) => {\n const { format, 'show-all': showAll } = ctx.values;\n\n const envGraph = await loadVarlockEnvGraph({\n currentEnvFallback: ctx.values.env,\n });\n checkForSchemaErrors(envGraph);\n\n if (!envGraph.rootDataSource) throw new Error('expected root data source to be set');\n // TODO: move into a more general post-load hook system\n const generateTypesDecoratorsPerSource = envGraph.getRootDecorators('generateTypes');\n if (generateTypesDecoratorsPerSource.length) {\n for (const [source, generateTypesDecorators] of generateTypesDecoratorsPerSource) {\n for (const generateTypesDecorator of generateTypesDecorators) {\n // TODO: much of this logic should move to the definition of the decorator itself\n const typeGenSettings = generateTypesDecorator.bareFnArgs?.simplifiedValues;\n if (!_.isPlainObject(typeGenSettings)) {\n throw new Error('@generateTypes - must be a fn call with key/value args');\n }\n if (!typeGenSettings.lang) throw new Error('@generateTypes - must set `lang` arg');\n if (typeGenSettings.lang !== 'ts') throw new Error(`@generateTypes - unsupported language: ${typeGenSettings.lang}`);\n if (!typeGenSettings.path) throw new Error('@generateTypes - must set `path` arg');\n if (!_.isString(typeGenSettings.path)) throw new Error('@generateTypes - `path` arg must be a string');\n\n const outputPath = source instanceof FileBasedDataSource\n ? path.resolve(source.fullPath, '..', typeGenSettings.path)\n : typeGenSettings.path;\n\n await envGraph.generateTypes(typeGenSettings.lang, outputPath);\n }\n }\n }\n\n await envGraph.resolveEnvValues();\n checkForConfigErrors(envGraph, { showAll });\n\n if (format === 'pretty') {\n for (const itemKey in envGraph.configSchema) {\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 console.log(JSON.stringify(envGraph.getSerializedGraph(), null, 2));\n } else if (format === 'env') {\n const resolvedEnv = envGraph.getResolvedEnvObject();\n for (const key in resolvedEnv) {\n const value = resolvedEnv[key];\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 // const resolvedEnv = envGraph.getResolvedEnvObject();\n // console.log(resolvedEnv);\n};\n"]}
@@ -1,7 +1,6 @@
1
1
  import { define } from './chunk-33ROL4J5.js';
2
- import { checkForSchemaErrors, checkForConfigErrors } from './chunk-PB7RWVE6.js';
3
- import { loadVarlockEnvGraph } from './chunk-ZUG7BEY5.js';
4
- import { gracefulExit } from './chunk-ZW2T4C6A.js';
2
+ import { loadVarlockEnvGraph, checkForSchemaErrors, checkForConfigErrors } from './chunk-T3I4UFB2.js';
3
+ import { gracefulExit } from './chunk-MV5ZAKN7.js';
5
4
  import { __name } from './chunk-XN24GZXQ.js';
6
5
  import { execa } from 'execa';
7
6
  import which from 'which';
@@ -82,5 +81,5 @@ var commandFn = /* @__PURE__ */ __name(async (ctx) => {
82
81
  }, "commandFn");
83
82
 
84
83
  export { commandFn, commandSpec };
85
- //# sourceMappingURL=chunk-KCX4NC7Q.js.map
86
- //# sourceMappingURL=chunk-KCX4NC7Q.js.map
84
+ //# sourceMappingURL=chunk-IML4QZHB.js.map
85
+ //# sourceMappingURL=chunk-IML4QZHB.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/cli/commands/run.command.ts"],"names":[],"mappings":";;;;;;;AAUO,IAAM,cAAc,MAAA,CAAO;AAAA,EAChC,IAAA,EAAM,KAAA;AAAA,EACN,WAAA,EAAa,wDAAA;AAAA,EACb,IAAA,EAAM;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAOR,CAAC;AAED,IAAI,cAAA;AACJ,IAAI,6BAAA,GAAgC,KAAA;AAG7B,IAAM,SAAA,iCAA6D,GAAA,KAAQ;AAEhF,EAAA,MAAM,IAAA,GAAO,OAAA,CAAQ,IAAA,CAAK,KAAA,CAAM,CAAC,CAAA;AACjC,EAAA,IAAI,kBAAiC,EAAC;AACtC,EAAA,IAAI,IAAA,CAAK,QAAA,CAAS,IAAI,CAAA,EAAG;AACvB,IAAA,MAAM,eAAA,GAAkB,IAAA,CAAK,OAAA,CAAQ,IAAI,CAAA;AACzC,IAAA,eAAA,GAAkB,IAAA,CAAK,KAAA,CAAM,eAAA,GAAkB,CAAC,CAAA;AAAA,EAClD,CAAA,MAAO;AACL,IAAA,MAAM,IAAI,MAAM,kFAAkF,CAAA;AAAA,EACpG;AACA,EAAA,MAAM,kBAAA,GAAqB,eAAA;AAC3B,EAAA,MAAM,eAAA,GAAkB,eAAA,CAAgB,IAAA,CAAK,GAAG,CAAA;AAEhD,EAAA,MAAM,UAAA,GAAa,mBAAmB,CAAC,CAAA;AACvC,EAAA,MAAM,eAAA,GAAkB,kBAAA,CAAmB,KAAA,CAAM,CAAC,CAAA;AAClD,EAAA,MAAM,mBAAmB,KAAA,CAAM,IAAA,CAAK,YAAY,EAAE,OAAA,EAAS,MAAM,CAAA;AAQjE,EAAA,MAAM,QAAA,GAAW,MAAM,mBAAA,EAAoB;AAC3C,EAAA,oBAAA,CAAqB,QAAQ,CAAA;AAC7B,EAAA,MAAM,SAAS,gBAAA,EAAiB;AAChC,EAAA,oBAAA,CAAqB,QAAQ,CAAA;AAI7B,EAAA,MAAM,WAAA,GAAc,SAAS,oBAAA,EAAqB;AAIlD,EAAA,MAAM,eAAA,GAAkB;AAAA,IACtB,GAAG,OAAA,CAAQ,GAAA;AAAA,IACX,GAAG,WAAA;AAAA,IACH,aAAA,EAAe,GAAA;AAAA;AAAA,IACf,aAAA,EAAe,IAAA,CAAK,SAAA,CAAU,QAAA,CAAS,oBAAoB;AAAA,GAC7D;AAEA,EAAA,cAAA,GAAiB,KAAA,CAAM,gBAAA,IAAoB,UAAA,EAAY,eAAA,EAAiB;AAAA,IACtE,KAAA,EAAO,SAAA;AAAA,IACP,GAAA,EAAK;AAAA,GACN,CAAA;AAKD,EAAyB;AAEvB,IAAA,OAAA,CAAQ,EAAA,CAAG,MAAA,EAAQ,CAAC,KAAA,EAAY,OAAA,KAAiB;AAM/C,MAAA,cAAA,EAAgB,KAAK,CAAC,CAAA;AAAA,IACxB,CAAC,CAAA;AAED,IAAA,CAAC,SAAA,EAAW,QAAQ,CAAA,CAAE,OAAA,CAAQ,CAAC,MAAA,KAAW;AACxC,MAAA,OAAA,CAAQ,EAAA,CAAG,QAAQ,MAAM;AAEvB,QAAA,cAAA,EAAgB,KAAK,CAAC,CAAA;AACtB,QAAA,YAAA,CAAa,CAAC,CAAA;AAAA,MAChB,CAAC,CAAA;AAAA,IACH,CAAC,CAAA;AAAA,EAEH;AAGA,EAAA,IAAI,QAAA;AACJ,EAAA,IAAI;AACF,IAAA,MAAM,gBAAgB,MAAM,cAAA;AAC5B,IAAA,QAAA,GAAW,aAAA,CAAc,QAAA;AAAA,EAC3B,SAAS,KAAA,EAAO;AAEd,IAAA,IAAK,KAAA,CAAc,MAAA,KAAW,QAAA,IAAY,6BAAA,EAA+B;AAOzE,IAAA,IAAK,KAAA,CAAc,MAAA,KAAW,QAAA,IAAa,KAAA,CAAc,WAAW,SAAA,EAAW;AAC7E,MAAA,YAAA,CAAa,CAAC,CAAA;AAAA,IAChB,CAAA,MAAO;AACL,MAAA,OAAA,CAAQ,GAAA,CAAK,MAAgB,OAAO,CAAA;AACpC,MAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,SAAA,EAAY,eAAe,CAAA,QAAA,CAAU,CAAA;AACjD,MAAA,OAAA,CAAQ,IAAI,2CAA2C,CAAA;AACvD,MAAA,OAAA,CAAQ,IAAI,2DAA2D,CAAA;AAAA,IAEzE;AACA,IAAA,QAAA,GAAY,MAAc,QAAA,IAAY,CAAA;AAAA,EACxC;AAYA,EAAqB;AACnB,IAAA,OAAO,aAAa,QAAQ,CAAA;AAAA,EAC9B;AAGF,CAAA,EA/GmE,WAAA","file":"chunk-IML4QZHB.js","sourcesContent":["import { execa, type ResultPromise } from 'execa';\nimport which from 'which';\nimport { define } from 'gunshi';\n\nimport { loadVarlockEnvGraph } from '../../lib/load-graph';\nimport { checkForConfigErrors, checkForSchemaErrors } from '../helpers/error-checks';\nimport { type TypedGunshiCommandFn } from '../helpers/gunshi-type-utils';\nimport { gracefulExit } from 'exit-hook';\n\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 },\n});\n\nlet commandProcess: ResultPromise | 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 const pathAwareCommand = which.sync(rawCommand, { nothrow: true });\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 checkForSchemaErrors(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 // 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(envGraph.getSerializedGraph()),\n };\n\n commandProcess = execa(pathAwareCommand || rawCommand, commandArgsOnly, {\n stdio: 'inherit',\n env: fullInjectedEnv,\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 commandResult = await commandProcess;\n exitCode = commandResult.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 dmno');\n console.log('if you get a different result, dmno 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,10 +1,9 @@
1
- import { detectJsPackageManager, logLines, fmt, pathExists, installJsDependency } from './chunk-FYLMYWUF.js';
1
+ import { detectJsPackageManager, logLines, fmt, installJsDependency } from './chunk-5EBVEGDW.js';
2
2
  import { define } from './chunk-33ROL4J5.js';
3
- import { loadVarlockEnvGraph } from './chunk-ZUG7BEY5.js';
4
- import { StaticValueResolver, DotEnvFileDataSource, gracefulExit, checkIsFileGitIgnored, ansis_default } from './chunk-ZW2T4C6A.js';
3
+ import { tryCatch, gracefulExit, checkIsFileGitIgnored, ansis_default, pathExists } from './chunk-MV5ZAKN7.js';
5
4
  import { __commonJS, __name, __toESM } from './chunk-XN24GZXQ.js';
6
- import path from 'path';
7
- import fs2 from 'fs/promises';
5
+ import path2 from 'path';
6
+ import fs3 from 'fs/promises';
8
7
  import 'util';
9
8
  import y2, { stdin, stdout } from 'process';
10
9
  import O from 'readline';
@@ -940,55 +939,70 @@ function inferSchemaUpdates(file) {
940
939
  }
941
940
  }
942
941
  __name(inferSchemaUpdates, "inferSchemaUpdates");
943
- function ensureAllItemsExist(envGraph, schemaFile) {
942
+ function ensureAllItemsExist(schemaFile, otherFiles) {
944
943
  const addedItemKeys = [];
945
- for (const itemKey in envGraph.configSchema) {
946
- const item = envGraph.configSchema[itemKey];
947
- const itemInSchema = schemaFile.configItems.find((i) => i.key === itemKey);
948
- if (!itemInSchema) {
944
+ for (const otherFile of otherFiles) {
945
+ for (const item of otherFile.parsedFile.configItems) {
946
+ const itemInSchema = schemaFile.configItems.find((i) => i.key === item.key);
947
+ if (itemInSchema) continue;
949
948
  if (addedItemKeys.length === 0) {
950
949
  envSpecUpdater.injectFromStr(schemaFile, [
951
950
  "",
952
951
  "# items added to schema by `varlock init`",
953
- "# that were missing in example, but detected in other env files",
952
+ "# that were missing in example, but detected in other .env files",
954
953
  "# PLEASE REVIEW THESE!",
955
954
  "# ---",
956
955
  ""
957
956
  ].join("\n"), { location: "end" });
958
957
  }
959
- addedItemKeys.push(itemKey);
960
- envSpecUpdater.injectFromStr(schemaFile, [`${itemKey}=`].join("\n"));
961
- const itemValue = item.valueResolver instanceof StaticValueResolver && item.valueResolver.staticValue || "";
962
- inferItemDecorators(schemaFile, itemKey, String(itemValue));
958
+ addedItemKeys.push(item.key);
959
+ envSpecUpdater.injectFromStr(schemaFile, `${item.key}=`);
960
+ const itemValue = item.value instanceof ParsedEnvSpecStaticValue && item.value.value?.toString() || "";
961
+ inferItemDecorators(schemaFile, item.key, String(itemValue));
963
962
  }
964
963
  }
965
964
  }
966
965
  __name(ensureAllItemsExist, "ensureAllItemsExist");
967
- async function detectRedundantValues(envGraph, opts = {}) {
968
- const schema = envGraph.schemaDataSource;
969
- if (!schema) return {};
966
+ async function detectRedundantValues(schemaFile, otherFiles, opts = {}) {
970
967
  const redundantItemsBySourcePath = {};
971
- const schemaValues = schema.getStaticValues();
972
- for (const source of envGraph.dataSources) {
973
- if (source === schema) continue;
974
- if (source.type === "example") continue;
975
- if (!(source instanceof DotEnvFileDataSource) || !source.parsedFile) continue;
976
- const sourceValues = source.getStaticValues();
977
- for (const [key, value] of Object.entries(sourceValues)) {
978
- if (schemaValues[key] !== value) continue;
979
- redundantItemsBySourcePath[source.fullPath] ||= [];
980
- redundantItemsBySourcePath[source.fullPath].push(key);
968
+ const schemaValues = schemaFile.toSimpleObj();
969
+ for (const otherFile of Object.values(otherFiles)) {
970
+ if (otherFile.fileName.startsWith(".env.schema") || otherFile.fileName.startsWith(".env.example") || otherFile.fileName.startsWith(".env.sample") || otherFile.fileName.startsWith(".env.default")) continue;
971
+ const otherFileValues = otherFile.parsedFile.toSimpleObj();
972
+ for (const itemKey in otherFileValues) {
973
+ if (!(itemKey in schemaValues)) continue;
974
+ if (otherFileValues[itemKey] !== schemaValues[itemKey]) continue;
975
+ redundantItemsBySourcePath[otherFile.fullPath] ||= [];
976
+ redundantItemsBySourcePath[otherFile.fullPath].push(itemKey);
981
977
  if (opts.delete) {
982
- envSpecUpdater.deleteItem(source.parsedFile, key);
978
+ envSpecUpdater.deleteItem(otherFile.parsedFile, itemKey);
983
979
  }
984
980
  }
985
981
  if (opts.delete) {
986
- await fs2.writeFile(source.fullPath, source.parsedFile.toString(), "utf8");
982
+ await fs3.writeFile(otherFile.fullPath, otherFile.parsedFile.toString(), "utf8");
987
983
  }
988
984
  }
989
985
  return redundantItemsBySourcePath;
990
986
  }
991
987
  __name(detectRedundantValues, "detectRedundantValues");
988
+ var SKIP_FILE_TYPES = [".md", ".d.ts"];
989
+ async function findEnvFiles(opts) {
990
+ const cwd = opts?.cwd || process.cwd();
991
+ const envFiles = [];
992
+ const filesWithinDir = await fs3.readdir(cwd);
993
+ for (const fileName of filesWithinDir) {
994
+ if (fileName === ".env" || fileName.startsWith(".env.")) {
995
+ let skip = false;
996
+ for (const fileType of SKIP_FILE_TYPES) {
997
+ if (fileName.endsWith(fileType)) skip = true;
998
+ }
999
+ if (skip) continue;
1000
+ envFiles.push(path2.join(cwd, fileName));
1001
+ }
1002
+ }
1003
+ return envFiles;
1004
+ }
1005
+ __name(findEnvFiles, "findEnvFiles");
992
1006
 
993
1007
  // src/cli/commands/init.command.ts
994
1008
  var commandSpec = define({
@@ -999,10 +1013,28 @@ var commandSpec = define({
999
1013
  var commandFn = /* @__PURE__ */ __name(async (ctx) => {
1000
1014
  const jsPackageManager = detectJsPackageManager();
1001
1015
  console.log("\u{1F9D9} Hello and welcome to Varlock \u{1F512}\u{1F525}\u2728");
1002
- let envGraph = await loadVarlockEnvGraph();
1003
- const existingSchemaFile = envGraph.dataSources.find((dataSource) => {
1004
- return dataSource.type === "schema";
1005
- });
1016
+ const envFilePaths = await findEnvFiles();
1017
+ const parsedEnvFiles = {};
1018
+ for (const filePath of envFilePaths) {
1019
+ const fileContents = await fs3.readFile(filePath, "utf-8");
1020
+ const fileName = path2.basename(filePath);
1021
+ const parsedFile = await tryCatch(async () => parseEnvSpecDotEnvFile(fileContents), () => {
1022
+ logLines([
1023
+ "",
1024
+ `Unable to parse ${fmt.filePath(filePath)}`,
1025
+ "This file will be skipped."
1026
+ ]);
1027
+ });
1028
+ if (!parsedFile) {
1029
+ continue;
1030
+ }
1031
+ parsedEnvFiles[fileName] = {
1032
+ fileName,
1033
+ fullPath: filePath,
1034
+ parsedFile
1035
+ };
1036
+ }
1037
+ const existingSchemaFile = parsedEnvFiles[".env.schema"];
1006
1038
  if (existingSchemaFile) {
1007
1039
  logLines([
1008
1040
  `It looks like you already have a ${fmt.fileName(".env.schema")} file \u{1F389}`,
@@ -1011,45 +1043,45 @@ var commandFn = /* @__PURE__ */ __name(async (ctx) => {
1011
1043
  "See more docs at https://varlock.dev/guides/schema"
1012
1044
  ]);
1013
1045
  } else {
1014
- let exampleFileToConvert = null;
1015
- const allExampleFiles = envGraph.dataSources.filter((dataSource) => {
1016
- return dataSource instanceof DotEnvFileDataSource && dataSource.type === "example";
1046
+ const allExampleFileNames = Object.keys(parsedEnvFiles).filter((fileName) => {
1047
+ return fileName.startsWith(".env.example") || fileName.startsWith(".env.sample");
1017
1048
  });
1018
- if (allExampleFiles.length === 1) {
1019
- exampleFileToConvert = allExampleFiles[0];
1020
- } else if (allExampleFiles.length > 1) {
1049
+ let exampleFileToConvert;
1050
+ if (allExampleFileNames.length === 1) {
1051
+ exampleFileToConvert = parsedEnvFiles[allExampleFileNames[0]];
1052
+ } else if (allExampleFileNames.length > 1) {
1021
1053
  console.log("");
1022
1054
  const selectedExample = await ve({
1023
1055
  message: `We detected more than one example .env file. Which one should we use to create your new ${fmt.fileName(".env.schema")}?`,
1024
- options: allExampleFiles.map((file) => ({
1025
- label: file.fileName,
1026
- value: file
1056
+ options: allExampleFileNames.map((fileName) => ({
1057
+ label: fileName,
1058
+ value: parsedEnvFiles[fileName]
1027
1059
  }))
1028
1060
  });
1029
1061
  if (pD(selectedExample)) return gracefulExit(0);
1030
1062
  exampleFileToConvert = selectedExample;
1031
1063
  }
1032
- const parsedEnvFile = exampleFileToConvert?.parsedFile || parseEnvSpecDotEnvFile("");
1033
- if (!parsedEnvFile) throw new Error("No parsed .env file found");
1034
- envSpecUpdater.ensureHeader(parsedEnvFile, [
1064
+ const parsedEnvSchemaFile = exampleFileToConvert?.parsedFile || parseEnvSpecDotEnvFile("");
1065
+ if (!parsedEnvSchemaFile) throw new Error("expected parsed .env example file");
1066
+ envSpecUpdater.ensureHeader(parsedEnvSchemaFile, [
1035
1067
  "This env file uses @env-spec - see https://varlock.dev/env-spec for more info",
1036
1068
  ""
1037
1069
  // TODO: add env spec version? real links?
1038
1070
  ].join("\n"));
1039
- envSpecUpdater.setRootDecorator(parsedEnvFile, "defaultRequired", "false", { explicitTrue: true });
1040
- envSpecUpdater.setRootDecorator(parsedEnvFile, "defaultSensitive", "false", { explicitTrue: true });
1041
- envSpecUpdater.setRootDecorator(parsedEnvFile, "generateTypes", "lang=ts, path=env.d.ts", { bareFnArgs: true });
1042
- envSpecUpdater.injectFromStr(parsedEnvFile, [
1071
+ envSpecUpdater.setRootDecorator(parsedEnvSchemaFile, "defaultRequired", "false", { explicitTrue: true });
1072
+ envSpecUpdater.setRootDecorator(parsedEnvSchemaFile, "defaultSensitive", "false", { explicitTrue: true });
1073
+ envSpecUpdater.setRootDecorator(parsedEnvSchemaFile, "generateTypes", "lang=ts, path=env.d.ts", { bareFnArgs: true });
1074
+ envSpecUpdater.injectFromStr(parsedEnvSchemaFile, [
1043
1075
  "",
1044
1076
  "# example env variable injected by `varlock init` \u26A0\uFE0F DELETE THIS ITEM! \u26A0\uFE0F",
1045
1077
  '# @required @sensitive @example="example value"',
1046
1078
  'EXAMPLE_ITEM="delete me!"',
1047
1079
  ""
1048
1080
  ].join("\n"), { location: "after_header" });
1049
- inferSchemaUpdates(parsedEnvFile);
1050
- ensureAllItemsExist(envGraph, parsedEnvFile);
1051
- const schemaFilePath = path.join(process.cwd(), ".env.schema");
1052
- await fs2.writeFile(schemaFilePath, parsedEnvFile.toString());
1081
+ inferSchemaUpdates(parsedEnvSchemaFile);
1082
+ ensureAllItemsExist(parsedEnvSchemaFile, Object.values(parsedEnvFiles));
1083
+ const schemaFilePath = path2.join(process.cwd(), ".env.schema");
1084
+ await fs3.writeFile(schemaFilePath, parsedEnvSchemaFile.toString());
1053
1085
  if (exampleFileToConvert) {
1054
1086
  logLines([
1055
1087
  "",
@@ -1065,7 +1097,7 @@ var commandFn = /* @__PURE__ */ __name(async (ctx) => {
1065
1097
  }
1066
1098
  if (await checkIsFileGitIgnored(schemaFilePath)) {
1067
1099
  logLines([ansis_default.dim(`(and updated ${fmt.fileName(".gitignore")} to ensure it will be tracked by git)`)]);
1068
- await fs2.appendFile(".gitignore", "\n!.env.schema");
1100
+ await fs3.appendFile(".gitignore", "\n!.env.schema");
1069
1101
  }
1070
1102
  logLines([
1071
1103
  "",
@@ -1084,8 +1116,8 @@ var commandFn = /* @__PURE__ */ __name(async (ctx) => {
1084
1116
  message: `Have you reviewed and updated your new ${fmt.fileName(".env.schema")} file?`
1085
1117
  });
1086
1118
  if (pD(confirmReviewed)) return gracefulExit(0);
1087
- envGraph = await loadVarlockEnvGraph();
1088
- if (envGraph.configSchema.EXAMPLE_ITEM) {
1119
+ const reloadedSchemaFile = await parseEnvSpecDotEnvFile(await fs3.readFile(schemaFilePath, "utf-8"));
1120
+ if (reloadedSchemaFile.configItems.find((i) => i.key === "EXAMPLE_ITEM")) {
1089
1121
  logLines([
1090
1122
  "",
1091
1123
  ansis_default.bold(`\u{1F6A8} Really? ${ansis_default.red("You didn't remove the EXAMPLE_ITEM!")}`),
@@ -1098,20 +1130,20 @@ var commandFn = /* @__PURE__ */ __name(async (ctx) => {
1098
1130
  });
1099
1131
  if (pD(confirmDeleteExample)) return gracefulExit(0);
1100
1132
  if (confirmDeleteExample) {
1101
- await fs2.unlink(exampleFileToConvert.fullPath);
1133
+ await fs3.unlink(exampleFileToConvert.fullPath);
1102
1134
  }
1103
1135
  }
1104
- const defaultsFile = envGraph.dataSources.find((dataSource) => {
1105
- return dataSource instanceof DotEnvFileDataSource && dataSource.type === "defaults";
1136
+ const defaultsFile = Object.values(parsedEnvFiles).find((f) => {
1137
+ return f.fileName.startsWith(".env.default");
1106
1138
  });
1107
1139
  if (defaultsFile) {
1108
1140
  logLines([
1109
1141
  "",
1110
1142
  `\u{1F6A7} We detected a ${fmt.fileName(defaultsFile.fileName)} file in your project`,
1111
- `You should migrate these default values into ${fmt.fileName(".env.schema")} and delete ${fmt.fileName(defaultsFile.fileName)}`
1143
+ `You should migrate these default values into ${fmt.fileName(".env.schema")} and delete it.`
1112
1144
  ]);
1113
1145
  }
1114
- const redundantInfo = await detectRedundantValues(envGraph);
1146
+ const redundantInfo = await detectRedundantValues(parsedEnvSchemaFile, parsedEnvFiles);
1115
1147
  if (Object.keys(redundantInfo).length > 0) {
1116
1148
  logLines([
1117
1149
  "",
@@ -1126,7 +1158,7 @@ var commandFn = /* @__PURE__ */ __name(async (ctx) => {
1126
1158
  });
1127
1159
  if (pD(confirmDeleteRedundant)) return gracefulExit(0);
1128
1160
  if (confirmDeleteRedundant) {
1129
- await detectRedundantValues(envGraph, { delete: true });
1161
+ await detectRedundantValues(parsedEnvSchemaFile, parsedEnvFiles, { delete: true });
1130
1162
  }
1131
1163
  }
1132
1164
  logLines([
@@ -1140,7 +1172,7 @@ var commandFn = /* @__PURE__ */ __name(async (ctx) => {
1140
1172
  ""
1141
1173
  ]);
1142
1174
  }
1143
- if (jsPackageManager && await pathExists(path.join(process.cwd(), "package.json"))) {
1175
+ if (jsPackageManager && await pathExists(path2.join(process.cwd(), "package.json"))) {
1144
1176
  const installResult = installJsDependency({
1145
1177
  packageManager: jsPackageManager.name,
1146
1178
  packageName: "varlock"
@@ -1155,5 +1187,5 @@ var commandFn = /* @__PURE__ */ __name(async (ctx) => {
1155
1187
  }, "commandFn");
1156
1188
 
1157
1189
  export { commandFn, commandSpec };
1158
- //# sourceMappingURL=chunk-4WMY2EW3.js.map
1159
- //# sourceMappingURL=chunk-4WMY2EW3.js.map
1190
+ //# sourceMappingURL=chunk-LXJMZMID.js.map
1191
+ //# sourceMappingURL=chunk-LXJMZMID.js.map