varlock 0.0.1 → 0.0.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (70) hide show
  1. package/LICENSE +21 -0
  2. package/dist/auto-load.js +7 -8
  3. package/dist/auto-load.js.map +1 -1
  4. package/dist/{chunk-35HGPX6I.js → chunk-2CM6PMED.js} +7 -6
  5. package/dist/chunk-2CM6PMED.js.map +1 -0
  6. package/dist/chunk-3EBGAOLH.js +14 -0
  7. package/dist/chunk-3EBGAOLH.js.map +1 -0
  8. package/dist/chunk-3KZR56NU.js +45 -0
  9. package/dist/chunk-3KZR56NU.js.map +1 -0
  10. package/dist/{chunk-EMPXU5TW.js → chunk-5HDQH7UC.js} +5 -5
  11. package/dist/{chunk-EMPXU5TW.js.map → chunk-5HDQH7UC.js.map} +1 -1
  12. package/dist/chunk-7QXRUUDC.js +137 -0
  13. package/dist/chunk-7QXRUUDC.js.map +1 -0
  14. package/dist/chunk-FGMXIEFA.js +20 -0
  15. package/dist/chunk-FGMXIEFA.js.map +1 -0
  16. package/dist/{chunk-BRP5MZU6.js → chunk-NAZPFZOO.js} +15 -8
  17. package/dist/chunk-NAZPFZOO.js.map +1 -0
  18. package/dist/{chunk-NZDUC7Q3.js → chunk-OSSLRXKM.js} +4 -4
  19. package/dist/{chunk-NZDUC7Q3.js.map → chunk-OSSLRXKM.js.map} +1 -1
  20. package/dist/chunk-OXV76U3Y.js +39 -0
  21. package/dist/chunk-OXV76U3Y.js.map +1 -0
  22. package/dist/chunk-Q5P7F3WA.js +107 -0
  23. package/dist/chunk-Q5P7F3WA.js.map +1 -0
  24. package/dist/chunk-RF3YMFUX.js +93 -0
  25. package/dist/chunk-RF3YMFUX.js.map +1 -0
  26. package/dist/{chunk-R53MTEAM.js → chunk-RPLDMNWT.js} +3 -3
  27. package/dist/{chunk-R53MTEAM.js.map → chunk-RPLDMNWT.js.map} +1 -1
  28. package/dist/{chunk-HZADDTO5.js → chunk-TYL3Q4QG.js} +233 -76
  29. package/dist/chunk-TYL3Q4QG.js.map +1 -0
  30. package/dist/chunk-XHOJF7U7.js +12 -0
  31. package/dist/chunk-XHOJF7U7.js.map +1 -0
  32. package/dist/cli/cli-executable.js +72 -27
  33. package/dist/cli/cli-executable.js.map +1 -1
  34. package/dist/doctor.command-L3P5LBOW.js +6 -0
  35. package/dist/{doctor.command-N5JAIXRM.js.map → doctor.command-L3P5LBOW.js.map} +1 -1
  36. package/dist/dotenv-compat.js +7 -8
  37. package/dist/dotenv-compat.js.map +1 -1
  38. package/dist/index.d.ts +10 -34
  39. package/dist/index.js +36 -5
  40. package/dist/index.js.map +1 -1
  41. package/dist/init.command-Q4YBHAEG.js +11 -0
  42. package/dist/{init.command-7BSALNL5.js.map → init.command-Q4YBHAEG.js.map} +1 -1
  43. package/dist/load.command-K22PEH3D.js +10 -0
  44. package/dist/{load.command-4MJR5J43.js.map → load.command-K22PEH3D.js.map} +1 -1
  45. package/dist/run.command-DUAYGL6F.js +10 -0
  46. package/dist/{run.command-ASKXIWBC.js.map → run.command-DUAYGL6F.js.map} +1 -1
  47. package/dist/runtime/env.d.ts +27 -0
  48. package/dist/runtime/env.js +5 -0
  49. package/dist/runtime/env.js.map +1 -0
  50. package/dist/runtime/patch-console.d.ts +14 -0
  51. package/dist/runtime/patch-console.js +7 -0
  52. package/dist/runtime/patch-console.js.map +1 -0
  53. package/dist/runtime/patch-response.d.ts +3 -0
  54. package/dist/runtime/patch-response.js +7 -0
  55. package/dist/runtime/patch-response.js.map +1 -0
  56. package/dist/runtime/patch-server-response.d.ts +6 -0
  57. package/dist/runtime/patch-server-response.js +7 -0
  58. package/dist/runtime/patch-server-response.js.map +1 -0
  59. package/package.json +53 -8
  60. package/dist/chunk-35HGPX6I.js.map +0 -1
  61. package/dist/chunk-BRP5MZU6.js.map +0 -1
  62. package/dist/chunk-BS3AGAHF.js +0 -53
  63. package/dist/chunk-BS3AGAHF.js.map +0 -1
  64. package/dist/chunk-HZADDTO5.js.map +0 -1
  65. package/dist/chunk-QTYVZQSF.js +0 -225
  66. package/dist/chunk-QTYVZQSF.js.map +0 -1
  67. package/dist/doctor.command-N5JAIXRM.js +0 -6
  68. package/dist/init.command-7BSALNL5.js +0 -10
  69. package/dist/load.command-4MJR5J43.js +0 -9
  70. package/dist/run.command-ASKXIWBC.js +0 -9
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2025 DMNO Inc.
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/dist/auto-load.js CHANGED
@@ -1,11 +1,10 @@
1
- import { load } from './chunk-BS3AGAHF.js';
2
- import './chunk-NZDUC7Q3.js';
3
- import './chunk-QTYVZQSF.js';
4
- import './chunk-HZADDTO5.js';
5
- import './chunk-7UQXFWKN.js';
1
+ import './chunk-3EBGAOLH.js';
2
+ import './chunk-3KZR56NU.js';
3
+ import './chunk-OXV76U3Y.js';
4
+ import './chunk-RF3YMFUX.js';
5
+ import './chunk-XHOJF7U7.js';
6
+ import './chunk-7QXRUUDC.js';
7
+ import './chunk-FGMXIEFA.js';
6
8
  import './chunk-XN24GZXQ.js';
7
-
8
- // src/auto-load.ts
9
- await load();
10
9
  //# sourceMappingURL=auto-load.js.map
11
10
  //# sourceMappingURL=auto-load.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/auto-load.ts"],"names":[],"mappings":";;;;;;;;AAEA,MAAM,IAAK,EAAA","file":"auto-load.js","sourcesContent":["import { load } from './index';\n\nawait load();\n"]}
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"auto-load.js"}
@@ -1,6 +1,6 @@
1
- import { checkForSchemaErrors, checkForConfigErrors } from './chunk-NZDUC7Q3.js';
2
1
  import { define } from './chunk-33ROL4J5.js';
3
- import { loadVarlockEnvGraph } from './chunk-QTYVZQSF.js';
2
+ import { checkForSchemaErrors, checkForConfigErrors } from './chunk-OSSLRXKM.js';
3
+ import { loadVarlockEnvGraph } from './chunk-Q5P7F3WA.js';
4
4
  import { __name } from './chunk-XN24GZXQ.js';
5
5
  import { execa } from 'execa';
6
6
  import which from 'which';
@@ -42,8 +42,9 @@ var commandFn = /* @__PURE__ */ __name(async (ctx) => {
42
42
  const fullInjectedEnv = {
43
43
  ...process.env,
44
44
  ...resolvedEnv,
45
- _VARLOCK_RUN: "1"
46
- // flag so we know our env is already injected
45
+ __VARLOCK_RUN: "1",
46
+ // flag for a child process to detect it is runnign via `varlock run`
47
+ __VARLOCK_ENV: JSON.stringify(envGraph.getSerializedGraph())
47
48
  };
48
49
  commandProcess = execa(pathAwareCommand || rawCommand, commandArgsOnly, {
49
50
  stdio: "inherit",
@@ -94,5 +95,5 @@ var commandFn = /* @__PURE__ */ __name(async (ctx) => {
94
95
  }, "commandFn");
95
96
 
96
97
  export { commandFn, commandSpec };
97
- //# sourceMappingURL=chunk-35HGPX6I.js.map
98
- //# sourceMappingURL=chunk-35HGPX6I.js.map
98
+ //# sourceMappingURL=chunk-2CM6PMED.js.map
99
+ //# sourceMappingURL=chunk-2CM6PMED.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/cli/commands/run.command.ts"],"names":[],"mappings":"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","file":"chunk-2CM6PMED.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 { TypedGunshiCommandFn } from '../helpers/gunshi-type-utils';\n\n\nexport const commandSpec = define({\n name: 'run',\n description: 'Run a command with the environment variables loaded from the .env file',\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;\nlet isWatchModeRestart = false;\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 commandArgs: Array<string> = [];\n let restCommandArgs: Array<string> = [];\n if (argv.includes('--')) {\n const doubleDashIndex = argv.indexOf('--');\n commandArgs = argv.slice(0, doubleDashIndex);\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\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 process.exit(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 process.exit(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 process.exit(exitCode);\n } else {\n console.log('... watching for changes ...');\n // TODO: watch for changes and restart the command\n }\n};\n"]}
@@ -0,0 +1,14 @@
1
+ import { patchGlobalConsole } from './chunk-3KZR56NU.js';
2
+ import { patchGlobalResponse } from './chunk-OXV76U3Y.js';
3
+ import { patchGlobalServerResponse } from './chunk-RF3YMFUX.js';
4
+ import { initVarlockEnv } from './chunk-7QXRUUDC.js';
5
+ import { execSync } from 'node:child_process';
6
+
7
+ var execResult = execSync("varlock load --format json-full");
8
+ process.env.__VARLOCK_ENV = execResult.toString();
9
+ initVarlockEnv();
10
+ patchGlobalConsole();
11
+ patchGlobalServerResponse();
12
+ patchGlobalResponse();
13
+ //# sourceMappingURL=chunk-3EBGAOLH.js.map
14
+ //# sourceMappingURL=chunk-3EBGAOLH.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/auto-load.ts"],"names":[],"mappings":";;;;;;AAWA,IAAM,UAAA,GAAa,SAAS,iCAAiC,CAAA;AAC7D,OAAQ,CAAA,GAAA,CAAI,aAAgB,GAAA,UAAA,CAAW,QAAS,EAAA;AAGhD,cAAe,EAAA;AAEf,kBAAmB,EAAA;AACnB,yBAA0B,EAAA;AAC1B,mBAAoB,EAAA","file":"chunk-3EBGAOLH.js","sourcesContent":["import { execSync } from 'node:child_process';\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\nconst execResult = execSync('varlock load --format json-full');\nprocess.env.__VARLOCK_ENV = execResult.toString();\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"]}
@@ -0,0 +1,45 @@
1
+ import { debug } from './chunk-XHOJF7U7.js';
2
+ import { varlockSettings, redactSensitiveConfig } from './chunk-7QXRUUDC.js';
3
+ import { __name } from './chunk-XN24GZXQ.js';
4
+
5
+ // src/runtime/patch-console.ts
6
+ function patchGlobalConsole() {
7
+ debug("\u26A1\uFE0F PATCHING global console methods");
8
+ if (console.log._varlockPatchedFn) {
9
+ debug("> already patched");
10
+ return;
11
+ }
12
+ if (varlockSettings.redactLogs === false) {
13
+ debug("> disabled by settings");
14
+ return;
15
+ }
16
+ const kWriteToConsoleSymbol = Object.getOwnPropertySymbols(globalThis.console).find((s) => s.description === "kWriteToConsole");
17
+ globalThis._varlockOrigWriteToConsoleFn ||= globalThis.console[kWriteToConsoleSymbol];
18
+ globalThis.console[kWriteToConsoleSymbol] = function() {
19
+ globalThis._varlockOrigWriteToConsoleFn.apply(this, [
20
+ arguments[0],
21
+ redactSensitiveConfig(arguments[1]),
22
+ arguments[2]
23
+ ]);
24
+ };
25
+ for (const logMethodName of ["trace", "debug", "info", "log", "info", "warn", "error"]) {
26
+ const originalLogMethod = globalThis.console[logMethodName];
27
+ const patchedFn = /* @__PURE__ */ __name(function() {
28
+ originalLogMethod.apply(this, Array.from(arguments).map(redactSensitiveConfig));
29
+ }, "patchedFn");
30
+ patchedFn._varlockPatchedFn = true;
31
+ globalThis.console[logMethodName] = patchedFn;
32
+ }
33
+ }
34
+ __name(patchGlobalConsole, "patchGlobalConsole");
35
+ function unpatchGlobalConsole() {
36
+ if (!globalThis._varlockOrigWriteToConsoleFn) return;
37
+ const kWriteToConsoleSymbol = Object.getOwnPropertySymbols(globalThis.console).find((s) => s.description === "kWriteToConsole");
38
+ globalThis.console[kWriteToConsoleSymbol] = globalThis._varlockOrigWriteToConsoleFn;
39
+ delete globalThis._varlockOrigWriteToConsoleFn;
40
+ }
41
+ __name(unpatchGlobalConsole, "unpatchGlobalConsole");
42
+
43
+ export { patchGlobalConsole, unpatchGlobalConsole };
44
+ //# sourceMappingURL=chunk-3KZR56NU.js.map
45
+ //# sourceMappingURL=chunk-3KZR56NU.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/runtime/patch-console.ts"],"names":[],"mappings":";;;;;AAWO,SAAS,kBAAqB,GAAA;AACnC,EAAA,KAAA,CAAM,8CAAoC,CAAA;AAC1C,EAAK,IAAA,OAAA,CAAQ,IAAY,iBAAmB,EAAA;AAC1C,IAAA,KAAA,CAAM,mBAAmB,CAAA;AACzB,IAAA;AAAA;AAEF,EAAI,IAAA,eAAA,CAAgB,eAAe,KAAO,EAAA;AACxC,IAAA,KAAA,CAAM,wBAAwB,CAAA;AAC9B,IAAA;AAAA;AASF,EAAM,MAAA,qBAAA,GAAwB,MAAO,CAAA,qBAAA,CAAsB,UAAW,CAAA,OAAO,CAAE,CAAA,IAAA,CAAK,CAAC,CAAA,KAAM,CAAE,CAAA,WAAA,KAAgB,iBAAiB,CAAA;AAG9H,EAAC,UAAmB,CAAA,4BAAA,KAAiC,UAAW,CAAA,OAAA,CAAQ,qBAAqB,CAAA;AAE7F,EAAW,UAAA,CAAA,OAAA,CAAQ,qBAAqB,CAAA,GAAI,WAAY;AACtD,IAAC,UAAA,CAAmB,4BAA6B,CAAA,KAAA,CAAM,IAAM,EAAA;AAAA,MAC3D,UAAU,CAAC,CAAA;AAAA,MACX,qBAAA,CAAsB,SAAU,CAAA,CAAC,CAAC,CAAA;AAAA,MAClC,UAAU,CAAC;AAAA,KACZ,CAAA;AAAA,GACH;AAOA,EAAW,KAAA,MAAA,aAAA,IAAiB,CAAC,OAAS,EAAA,OAAA,EAAS,QAAQ,KAAO,EAAA,MAAA,EAAQ,MAAQ,EAAA,OAAO,CAAG,EAAA;AAEtF,IAAM,MAAA,iBAAA,GAAoB,UAAW,CAAA,OAAA,CAAQ,aAAa,CAAA;AAE1D,IAAA,MAAM,4BAAwB,MAAA,CAAA,WAAA;AAE5B,MAAkB,iBAAA,CAAA,KAAA,CAAM,MAAM,KAAM,CAAA,IAAA,CAAK,SAAS,CAAE,CAAA,GAAA,CAAI,qBAAqB,CAAC,CAAA;AAAA,KAF9D,EAAA,WAAA,CAAA;AAIlB,IAAA,SAAA,CAAU,iBAAoB,GAAA,IAAA;AAG9B,IAAW,UAAA,CAAA,OAAA,CAAQ,aAAa,CAAI,GAAA,SAAA;AAAA;AAExC;AAhDgB,MAAA,CAAA,kBAAA,EAAA,oBAAA,CAAA;AAuDT,SAAS,oBAAuB,GAAA;AAErC,EAAI,IAAA,CAAE,WAAmB,4BAA8B,EAAA;AAEvD,EAAM,MAAA,qBAAA,GAAwB,MAAO,CAAA,qBAAA,CAAsB,UAAW,CAAA,OAAO,CAAE,CAAA,IAAA,CAAK,CAAC,CAAA,KAAM,CAAE,CAAA,WAAA,KAAgB,iBAAiB,CAAA;AAE9H,EAAW,UAAA,CAAA,OAAA,CAAQ,qBAAqB,CAAA,GAAK,UAAmB,CAAA,4BAAA;AAChE,EAAA,OAAQ,UAAmB,CAAA,4BAAA;AAC7B;AARgB,MAAA,CAAA,oBAAA,EAAA,sBAAA,CAAA","file":"chunk-3KZR56NU.js","sourcesContent":["/* eslint-disable func-names, no-console, prefer-rest-params */\n\nimport { redactSensitiveConfig, varlockSettings } from './env';\nimport { debug } from './lib/debug';\n\n\n/**\n * patches global console methods to redact sensitive config\n *\n * NOTE - this may not be 100% foolproof depending on the platform\n * */\nexport function patchGlobalConsole() {\n debug('⚡️ PATCHING global console methods');\n if ((console.log as any)._varlockPatchedFn) {\n debug('> already patched');\n return;\n }\n if (varlockSettings.redactLogs === false) {\n debug('> disabled by settings');\n return;\n }\n\n // our method of patching involves replacing an internal node method which may not be called if console.log itself has also been patched\n // for example AWS lambdas patches this to write the logs to a file which then is pushed to the rest of their system\n\n // so first we'll just patch the internal method do deal with normal stdout/stderr logs -------------------------------------\n\n // we need the internal symbol name to access the internal method\n const kWriteToConsoleSymbol = Object.getOwnPropertySymbols(globalThis.console).find((s) => s.description === 'kWriteToConsole');\n\n // @ts-ignore\n (globalThis as any)._varlockOrigWriteToConsoleFn ||= globalThis.console[kWriteToConsoleSymbol];\n // @ts-ignore\n globalThis.console[kWriteToConsoleSymbol] = function () {\n (globalThis as any)._varlockOrigWriteToConsoleFn.apply(this, [\n arguments[0],\n redactSensitiveConfig(arguments[1]),\n arguments[2],\n ]);\n };\n\n // and now we'll wrap console.log (and the other methods) if it looks like they have been patched already ------------------\n // NOTE - this will not fully redact from everything since we can't safely reach deep into objects\n // ideally we would only turn this when the above method does not work, but it's not trivial to detect when it that is the case\n // so we'll turn it on all the time for now...\n\n for (const logMethodName of ['trace', 'debug', 'info', 'log', 'info', 'warn', 'error']) {\n // @ts-ignore\n const originalLogMethod = globalThis.console[logMethodName];\n\n const patchedFn = function () {\n // @ts-ignore\n originalLogMethod.apply(this, Array.from(arguments).map(redactSensitiveConfig));\n };\n patchedFn._varlockPatchedFn = true;\n\n // @ts-ignore\n globalThis.console[logMethodName] = patchedFn;\n }\n}\n\n/**\n * restore's original global console methods to stop redacting secrets\n *\n * (only needed during local development when switching settings on/off in a process that does not reload)\n * */\nexport function unpatchGlobalConsole() {\n // we'll only care about the normal case where console.log has NOT been patched by something else... (see above)\n if (!(globalThis as any)._varlockOrigWriteToConsoleFn) return;\n\n const kWriteToConsoleSymbol = Object.getOwnPropertySymbols(globalThis.console).find((s) => s.description === 'kWriteToConsole');\n // @ts-ignore\n globalThis.console[kWriteToConsoleSymbol] = (globalThis as any)._varlockOrigWriteToConsoleFn;\n delete (globalThis as any)._varlockOrigWriteToConsoleFn;\n}\n\n// ---\n\n// patchGlobalConsole();\n"]}
@@ -1,9 +1,9 @@
1
- import { ve, pD, dD, SD, LD } from './chunk-DAZNZPLN.js';
2
1
  import { logLines, fmt } from './chunk-LQZ6ICSS.js';
2
+ import { ve, pD, dD, SD, LD } from './chunk-DAZNZPLN.js';
3
3
  import { define } from './chunk-33ROL4J5.js';
4
- import { joinAndCompact, loadVarlockEnvGraph } from './chunk-QTYVZQSF.js';
5
- import { my_dash_default, StaticValueResolver, DotEnvFileDataSource, checkIsFileGitIgnored } from './chunk-HZADDTO5.js';
4
+ import { joinAndCompact, loadVarlockEnvGraph } from './chunk-Q5P7F3WA.js';
6
5
  import { ansis_default } from './chunk-7UQXFWKN.js';
6
+ import { my_dash_default, StaticValueResolver, DotEnvFileDataSource, checkIsFileGitIgnored } from './chunk-TYL3Q4QG.js';
7
7
  import { __name } from './chunk-XN24GZXQ.js';
8
8
  import path from 'node:path';
9
9
  import fs3, { access } from 'node:fs/promises';
@@ -677,5 +677,5 @@ var commandFn = /* @__PURE__ */ __name(async (ctx) => {
677
677
  }, "commandFn");
678
678
 
679
679
  export { CliExitError, commandFn, commandSpec };
680
- //# sourceMappingURL=chunk-EMPXU5TW.js.map
681
- //# sourceMappingURL=chunk-EMPXU5TW.js.map
680
+ //# sourceMappingURL=chunk-5HDQH7UC.js.map
681
+ //# sourceMappingURL=chunk-5HDQH7UC.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../utils/src/fs-utils.ts","../../../node_modules/.pnpm/is-unicode-supported@2.1.0/node_modules/is-unicode-supported/index.js","../src/cli/helpers/prompts.ts","../src/cli/helpers/infer-schema.ts","../src/cli/helpers/exit-error.ts","../src/cli/helpers/js-package-manager-utils.ts","../src/cli/commands/init.command.ts"],"names":["process","fs","parseEnvSpecDotEnvFile","envSpecUpdater","path"],"mappings":"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","file":"chunk-EMPXU5TW.js","sourcesContent":["import { accessSync } from 'node:fs';\nimport { access } from 'node:fs/promises';\n\nexport async function pathExists(p: string) {\n try {\n await access(p);\n return true;\n } catch {\n return false;\n }\n}\n\nexport function pathExistsSync(p:string) {\n try {\n accessSync(p);\n return true;\n } catch {\n return false;\n }\n}\n","import process from 'node:process';\n\nexport default function isUnicodeSupported() {\n\tconst {env} = process;\n\tconst {TERM, TERM_PROGRAM} = env;\n\n\tif (process.platform !== 'win32') {\n\t\treturn TERM !== 'linux'; // Linux console (kernel)\n\t}\n\n\treturn Boolean(env.WT_SESSION) // Windows Terminal\n\t\t|| Boolean(env.TERMINUS_SUBLIME) // Terminus (<0.2.27)\n\t\t|| env.ConEmuTask === '{cmd::Cmder}' // ConEmu and cmder\n\t\t|| TERM_PROGRAM === 'Terminus-Sublime'\n\t\t|| TERM_PROGRAM === 'vscode'\n\t\t|| TERM === 'xterm-256color'\n\t\t|| TERM === 'alacritty'\n\t\t|| TERM === 'rxvt-unicode'\n\t\t|| TERM === 'rxvt-unicode-256color'\n\t\t|| env.TERMINAL_EMULATOR === 'JetBrains-JediTerm';\n}\n","// this is a slightly modified version of @clack/prompts\n// mostly to remove the additional left border\n\nimport type { Readable, Writable } from 'node:stream';\nimport { WriteStream } from 'node:tty';\nimport {\n ConfirmPrompt, SelectPrompt, MultiSelectPrompt, type State,\n} from '@clack/core';\nimport color from 'ansis';\nimport isUnicodeSupported from 'is-unicode-supported';\n\nconst unicode = isUnicodeSupported();\nconst isCI = (): boolean => process.env.CI === 'true';\nconst unicodeOr = (c: string, fallback: string) => (unicode ? c : fallback);\nconst S_STEP_ACTIVE = unicodeOr('◆', '*');\nconst S_STEP_CANCEL = unicodeOr('■', 'x');\nconst S_STEP_ERROR = unicodeOr('▲', 'x');\nconst S_STEP_SUBMIT = unicodeOr('◇', 'o');\n\nconst S_BAR_START = unicodeOr('┌', 'T');\nconst S_BAR = unicodeOr('│', '|');\nconst S_BAR_END = unicodeOr('└', '—');\n\nconst S_RADIO_ACTIVE = unicodeOr('●', '>');\nconst S_RADIO_INACTIVE = unicodeOr('○', ' ');\nconst S_CHECKBOX_ACTIVE = unicodeOr('◻', '[•]');\nconst S_CHECKBOX_SELECTED = unicodeOr('◼', '[+]');\nconst S_CHECKBOX_INACTIVE = unicodeOr('◻', '[ ]');\nconst S_PASSWORD_MASK = unicodeOr('▪', '•');\n\nconst S_BAR_H = unicodeOr('─', '-');\nconst S_CORNER_TOP_RIGHT = unicodeOr('╮', '+');\nconst S_CONNECT_LEFT = unicodeOr('├', '+');\nconst S_CORNER_BOTTOM_RIGHT = unicodeOr('╯', '+');\n\nconst S_INFO = unicodeOr('●', '•');\nconst S_SUCCESS = unicodeOr('◆', '*');\nconst S_WARN = unicodeOr('▲', '!');\nconst S_ERROR = unicodeOr('■', 'x');\n\nconst symbol = (state: State) => {\n // eslint-disable-next-line default-case\n switch (state) {\n case 'initial':\n case 'active':\n return color.cyan(S_STEP_ACTIVE);\n case 'cancel':\n return color.red(S_STEP_CANCEL);\n case 'error':\n return color.yellow(S_STEP_ERROR);\n case 'submit':\n return color.green(S_STEP_SUBMIT);\n }\n};\n\nexport interface CommonOptions {\n input?: Readable;\n output?: Writable;\n}\n\n\n\n\n/// /\nexport interface LimitOptionsParams<TOption> extends CommonOptions {\n options: Array<TOption>;\n maxItems: number | undefined;\n cursor: number;\n style: (option: TOption, active: boolean) => string;\n}\n\nexport const limitOptions = <TOption>(params: LimitOptionsParams<TOption>): Array<string> => {\n const { cursor, options, style } = params;\n const output: Writable = params.output ?? process.stdout;\n const rows = output instanceof WriteStream && output.rows !== undefined ? output.rows : 10;\n\n const paramMaxItems = params.maxItems ?? Number.POSITIVE_INFINITY;\n const outputMaxItems = Math.max(rows - 4, 0);\n // We clamp to minimum 5 because anything less doesn't make sense UX wise\n const maxItems = Math.min(outputMaxItems, Math.max(paramMaxItems, 5));\n let slidingWindowLocation = 0;\n\n if (cursor >= slidingWindowLocation + maxItems - 3) {\n slidingWindowLocation = Math.max(Math.min(cursor - maxItems + 3, options.length - maxItems), 0);\n } else if (cursor < slidingWindowLocation + 2) {\n slidingWindowLocation = Math.max(cursor - 2, 0);\n }\n\n const shouldRenderTopEllipsis = maxItems < options.length && slidingWindowLocation > 0;\n const shouldRenderBottomEllipsis = maxItems < options.length && slidingWindowLocation + maxItems < options.length;\n\n return options\n .slice(slidingWindowLocation, slidingWindowLocation + maxItems)\n .map((option, i, arr) => {\n const isTopLimit = i === 0 && shouldRenderTopEllipsis;\n const isBottomLimit = i === arr.length - 1 && shouldRenderBottomEllipsis;\n return isTopLimit || isBottomLimit\n ? color.dim('...')\n : style(option, i + slidingWindowLocation === cursor);\n });\n};\n\n\n///\n\nexport interface ConfirmOptions extends CommonOptions {\n message: string;\n active?: string;\n inactive?: string;\n initialValue?: boolean;\n}\nexport const confirm = (opts: ConfirmOptions) => {\n const active = opts.active ?? 'Yes';\n const inactive = opts.inactive ?? 'No';\n return new ConfirmPrompt({\n active,\n inactive,\n input: opts.input,\n output: opts.output,\n initialValue: opts.initialValue ?? true,\n render() {\n const title = `\\n${symbol(this.state)} ${opts.message}\\n`;\n const value = this.value ? active : inactive;\n\n // NOTE it's trimming leading spaces, so we use an invisible character at the beginnign of the line to add some spacing\n switch (this.state) {\n case 'submit':\n return `${title}‎ ${color.dim(value)}`;\n case 'cancel':\n return `${title}‎ ${color.strikethrough(\n color.dim(value),\n )}\\n`;\n default: {\n return `${title}‎ ${\n this.value\n ? `${color.green(S_RADIO_ACTIVE)} ${active}`\n : `${color.dim(S_RADIO_INACTIVE)} ${color.dim(active)}`\n } ${color.dim('/')} ${\n !this.value\n ? `${color.green(S_RADIO_ACTIVE)} ${inactive}`\n : `${color.dim(S_RADIO_INACTIVE)} ${color.dim(inactive)}`\n }\\n`;\n }\n }\n },\n }).prompt() as Promise<boolean | symbol>;\n};\n\n\n\ntype Primitive = Readonly<string | boolean | number>;\n\nexport type Option<Value> = Value extends Primitive\n ? {\n /**\n * Internal data for this option.\n */\n value: Value;\n /**\n * The optional, user-facing text for this option.\n *\n * By default, the `value` is converted to a string.\n */\n label?: string;\n /**\n * An optional hint to display to the user when\n * this option might be selected.\n *\n * By default, no `hint` is displayed.\n */\n hint?: string;\n }\n : {\n /**\n * Internal data for this option.\n */\n value: Value;\n /**\n * Required. The user-facing text for this option.\n */\n label: string;\n /**\n * An optional hint to display to the user when\n * this option might be selected.\n *\n * By default, no `hint` is displayed.\n */\n hint?: string;\n };\n\nexport interface SelectOptions<Value> extends CommonOptions {\n message: string;\n options: Array<Option<Value>>;\n initialValue?: Value;\n maxItems?: number;\n}\n\nexport const select = <Value>(opts: SelectOptions<Value>) => {\n const opt = (option: Option<Value>, state: 'inactive' | 'active' | 'selected' | 'cancelled') => {\n const label = option.label ?? String(option.value);\n switch (state) {\n case 'selected':\n return `${color.dim(label)}`;\n case 'active':\n return `${color.green(S_RADIO_ACTIVE)} ${label} ${\n option.hint ? color.dim(`(${option.hint})`) : ''\n }`;\n case 'cancelled':\n return `${color.strikethrough(color.dim(label))}`;\n default:\n return `${color.dim(S_RADIO_INACTIVE)} ${color.dim(label)}`;\n }\n };\n\n return new SelectPrompt({\n options: opts.options,\n input: opts.input,\n output: opts.output,\n initialValue: opts.initialValue,\n render() {\n const title = `${color.gray(S_BAR)}\\n${symbol(this.state)} ${opts.message}\\n`;\n\n switch (this.state) {\n case 'submit':\n return `${title}${color.gray(S_BAR)} ${opt(this.options[this.cursor], 'selected')}`;\n case 'cancel':\n return `${title}${color.gray(S_BAR)} ${opt(\n this.options[this.cursor],\n 'cancelled',\n )}\\n${color.gray(S_BAR)}`;\n default: {\n return `${title}${color.cyan(S_BAR)} ${limitOptions({\n output: opts.output,\n cursor: this.cursor,\n options: this.options,\n maxItems: opts.maxItems,\n style: (item, active) => opt(item, active ? 'active' : 'inactive'),\n }).join(`\\n${color.cyan(S_BAR)} `)}\\n${color.cyan(S_BAR_END)}\\n`;\n }\n }\n },\n }).prompt() as Promise<Value | symbol>;\n};\n\n\nexport interface MultiSelectOptions<Value> extends CommonOptions {\n message: string;\n details?: string;\n options: Array<Option<Value>>;\n initialValues?: Array<Value>;\n maxItems?: number;\n required?: boolean;\n cursorAt?: Value;\n}\nexport const multiselect = <Value>(opts: MultiSelectOptions<Value>) => {\n const opt = (\n option: Option<Value>,\n state: 'inactive' | 'active' | 'selected' | 'active-selected' | 'submitted' | 'cancelled',\n ) => {\n const label = option.label ?? String(option.value);\n if (state === 'active') {\n return `${color.cyan(S_CHECKBOX_ACTIVE)} ${label} ${\n option.hint ? color.dim(`(${option.hint})`) : ''\n }`;\n }\n if (state === 'selected') {\n return `${color.green(S_CHECKBOX_SELECTED)} ${color.dim(label)} ${\n option.hint ? color.dim(`(${option.hint})`) : ''\n }`;\n }\n if (state === 'cancelled') {\n return `${color.strikethrough(color.dim(label))}`;\n }\n if (state === 'active-selected') {\n return `${color.green(S_CHECKBOX_SELECTED)} ${label} ${\n option.hint ? color.dim(`(${option.hint})`) : ''\n }`;\n }\n if (state === 'submitted') {\n return `${color.dim(label)}`;\n }\n return `${color.dim(S_CHECKBOX_INACTIVE)} ${color.dim(label)}`;\n };\n\n return new MultiSelectPrompt({\n options: opts.options,\n input: opts.input,\n output: opts.output,\n initialValues: opts.initialValues,\n required: opts.required ?? true,\n cursorAt: opts.cursorAt,\n validate(selected: Array<Value>) {\n if (this.required && selected.length === 0) {\n return `Please select at least one option.\\n${color.reset(\n color.dim(\n `Press ${color.gray(color.bgWhite(color.inverse(' space ')))} to select, ${color.gray(\n color.bgWhite(color.inverse(' enter ')),\n )} to submit`,\n ),\n )}`;\n }\n },\n render() {\n let title = `${color.gray(S_BAR)}\\n${symbol(this.state)} ${opts.message}\\n`;\n if (opts.details) title += `${color.gray(S_BAR)} ${opts.details}\\n`;\n\n const styleOption = (option: Option<Value>, active: boolean) => {\n const selected = this.value.includes(option.value);\n if (active && selected) {\n return opt(option, 'active-selected');\n }\n if (selected) {\n return opt(option, 'selected');\n }\n return opt(option, active ? 'active' : 'inactive');\n };\n\n switch (this.state) {\n case 'submit': {\n return `${title}${color.gray(S_BAR)} ${\n this.options\n .filter(({ value }) => this.value.includes(value))\n .map((option) => opt(option, 'submitted'))\n .join(color.dim(', ')) || color.dim('none')\n }`;\n }\n case 'cancel': {\n const label = this.options\n .filter(({ value }) => this.value.includes(value))\n .map((option) => opt(option, 'cancelled'))\n .join(color.dim(', '));\n return `${title}${color.gray(S_BAR)} ${\n label.trim() ? `${label}\\n${color.gray(S_BAR)}` : ''\n }`;\n }\n case 'error': {\n const footer = this.error\n .split('\\n')\n .map((ln, i) => (i === 0 ? `${color.yellow(S_BAR_END)} ${color.yellow(ln)}` : ` ${ln}`))\n .join('\\n');\n return `${title + color.yellow(S_BAR)} ${limitOptions({\n output: opts.output,\n options: this.options,\n cursor: this.cursor,\n maxItems: opts.maxItems,\n style: styleOption,\n }).join(`\\n${color.yellow(S_BAR)} `)}\\n${footer}\\n`;\n }\n default: {\n return `${title}${color.cyan(S_BAR)} ${limitOptions({\n output: opts.output,\n options: this.options,\n cursor: this.cursor,\n maxItems: opts.maxItems,\n style: styleOption,\n }).join(`\\n${color.cyan(S_BAR)} `)}\\n${color.cyan(S_BAR_END)}\\n`;\n }\n }\n },\n }).prompt() as Promise<Array<Value> | symbol>;\n};\n\n\n\n/// ////\n\nconst prompts = {\n confirm,\n select,\n multiselect,\n};\n\nexport default prompts;\n","import fs from 'node:fs/promises';\nimport { DotEnvFileDataSource, EnvGraph } from '@env-spec/env-graph';\nimport {\n envSpecUpdater, ParsedEnvSpecFile, ParsedEnvSpecStaticValue, parseEnvSpecDotEnvFile,\n} from '@env-spec/parser';\nimport { StaticValueResolver } from '../../../../env-graph/src/lib/resolver';\n\n\nconst PUBLIC_PREFIXES = [\n 'PUBLIC',\n 'VITE',\n 'NEXT_PUBLIC',\n 'NUXT_PUBLIC',\n];\nconst PUBLIC_KEYWORDS = ['PUBLIC'];\nconst SENSITIVE_KEYWORDS = [\n 'SECRET',\n 'API_KEY',\n 'PASSWORD',\n 'TOKEN',\n 'PRIVATE',\n 'CREDENTIALS',\n];\n\nfunction isValidUrl(val: string) {\n try {\n const u = new URL(val);\n return true;\n } catch (err) {\n return false;\n }\n}\n\nconst EMAIL_REGEX = /^(([^<>()[\\]\\\\.,;:\\s@\"]+(\\.[^<>()[\\]\\\\.,;:\\s@\"]+)*)|(\".+\"))@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}])|(([a-zA-Z\\-0-9]+\\.)+[a-zA-Z]{2,}))$/;\nconst VALID_NUMBER_REGEX = /^(0|([1-9][0-9]*))?(\\.[0-9]+)?$/;\n\n\nfunction inferItemDecorators(file: ParsedEnvSpecFile, itemKey: string, valueStr: string) {\n // infer @sensitive\n let itemIsPublic = false;\n if (PUBLIC_PREFIXES.some((prefix) => itemKey.startsWith(prefix))) itemIsPublic = true;\n if (PUBLIC_KEYWORDS.some((keyword) => itemKey.includes(keyword))) itemIsPublic = true;\n\n let itemIsSensitive = false;\n if (SENSITIVE_KEYWORDS.some((keyword) => itemKey.includes(keyword))) itemIsSensitive = true;\n\n if (itemIsPublic) {\n // not marking these for now, since we've already made the default not sensitive\n // envSpecUpdater.setItemDecorator(file, itemKey, 'sensitive', 'false');\n } else if (itemIsSensitive) {\n envSpecUpdater.setItemDecorator(file, itemKey, 'sensitive', 'true');\n }\n\n // infer @type\n // > from key\n if (itemKey === 'PORT' || itemKey.endsWith('_PORT')) {\n envSpecUpdater.setItemDecorator(file, itemKey, 'type', 'port');\n } else if (itemKey.endsWith('_EMAIL')) {\n envSpecUpdater.setItemDecorator(file, itemKey, 'type', 'email');\n } else if (itemKey.endsWith('_URL') || itemKey.endsWith('_URI')) {\n envSpecUpdater.setItemDecorator(file, itemKey, 'type', 'url');\n\n\n // > from value\n } else if (valueStr) {\n // move obvious examples to @example\n if (valueStr.startsWith('<') && valueStr.endsWith('>')) {\n envSpecUpdater.setItemDecorator(file, itemKey, 'example', valueStr);\n // remove example from value\n }\n\n if (valueStr === 'true' || valueStr === 'false') {\n envSpecUpdater.setItemDecorator(file, itemKey, 'type', 'boolean');\n } else if (EMAIL_REGEX.test(valueStr)) {\n envSpecUpdater.setItemDecorator(file, itemKey, 'type', 'email');\n } else if (valueStr !== '0' && valueStr !== '1' && VALID_NUMBER_REGEX.test(valueStr)) {\n envSpecUpdater.setItemDecorator(file, itemKey, 'type', 'number');\n } else if (isValidUrl(valueStr)) {\n envSpecUpdater.setItemDecorator(file, itemKey, 'type', 'url');\n }\n // TODO: more...\n }\n}\n\nexport function inferSchemaUpdates(file: ParsedEnvSpecFile) {\n for (const item of file.configItems) {\n const valueStr = (\n item.value instanceof ParsedEnvSpecStaticValue && item.value.value?.toString()\n ) || '';\n // console.log(item.key, '-', valueStr);\n inferItemDecorators(file, item.key, valueStr);\n }\n}\n\n\nexport function ensureAllItemsExist(envGraph: EnvGraph, schemaFile: ParsedEnvSpecFile) {\n const addedItemKeys: Array<string> = [];\n for (const itemKey in envGraph.configSchema) {\n const item = envGraph.configSchema[itemKey];\n const itemInSchema = schemaFile.configItems.find((i) => i.key === itemKey);\n\n if (!itemInSchema) {\n if (addedItemKeys.length === 0) {\n envSpecUpdater.injectFromStr(schemaFile, [\n '',\n '# items added to schema by `varlock init`',\n '# that were missing in example, but detected in other env files',\n '# PLEASE REVIEW THESE!',\n '# ---',\n '',\n ].join('\\n'), { location: 'end' });\n }\n addedItemKeys.push(itemKey);\n envSpecUpdater.injectFromStr(schemaFile, [`${itemKey}=`].join('\\n'));\n const itemValue = (\n item.valueResolver instanceof StaticValueResolver && item.valueResolver.staticValue\n ) || '';\n inferItemDecorators(schemaFile, itemKey, String(itemValue));\n }\n }\n}\n\nexport async function detectRedundantValues(envGraph: EnvGraph, opts: { delete?: boolean } = {}) {\n const schema = envGraph.schemaDataSource;\n if (!schema) return {};\n const redundantItemsBySourcePath: Record<string, Array<string>> = {};\n const schemaValues = schema.getStaticValues();\n for (const source of envGraph.dataSources) {\n if (source === schema) continue;\n // we'll skip example files, since it is expected to be deleted and full of redundant values\n if (source.type === 'example') continue;\n if (!(source instanceof DotEnvFileDataSource) || !source.parsedFile) continue;\n\n const sourceValues = source.getStaticValues();\n for (const [key, value] of Object.entries(sourceValues)) {\n if (schemaValues[key] !== value) continue;\n\n redundantItemsBySourcePath[source.fullPath] ||= [];\n redundantItemsBySourcePath[source.fullPath].push(key);\n if (opts.delete) {\n envSpecUpdater.deleteItem(source.parsedFile, key);\n }\n }\n\n if (opts.delete) {\n await fs.writeFile(source.fullPath, source.parsedFile.toString(), 'utf8');\n }\n }\n\n return redundantItemsBySourcePath;\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","import path from 'node:path';\nimport fs, { existsSync } from 'node:fs';\nimport { pathExistsSync } from '@env-spec/utils/fs-utils';\n\nimport { CliExitError } from './exit-error';\nimport { execSync } from 'node:child_process';\n\nexport type JsPackageManager = 'npm' | 'pnpm' | 'yarn' | 'bun' | 'deno';\n\ntype 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 let cwd = opts?.cwd || process.cwd();\n const cwdParts = cwd.split(path.sep);\n do {\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 detectedPm = pm;\n }\n }\n if (detectedPm) return JS_PACKAGE_MANAGERS[detectedPm];\n\n cwdParts.pop();\n cwd = path.join(...cwdParts);\n if (opts?.workspaceRootPath) {\n if (opts.workspaceRootPath === cwd) break;\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'))) break;\n }\n } while (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 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 opts.packagePath ? `cd ${opts.packagePath} &&` : '',\n // `add` works in all of them\n `${opts.packageManager} add ${opts.packageName}`,\n (opts.isMonoRepoRoot && opts.packageManager === 'pnpm') ? '-w' : '',\n ].join(' '));\n\n return true;\n}\n\n","/* eslint-disable @stylistic/quotes */\nimport path from 'node:path';\nimport fs from 'node:fs/promises';\nimport ansis from 'ansis';\nimport { isCancel, select } from '@clack/prompts';\nimport { define } from 'gunshi';\n\nimport _ from '@env-spec/utils/my-dash';\nimport { DotEnvFileDataSource } from '@env-spec/env-graph';\nimport { envSpecUpdater, parseEnvSpecDotEnvFile } from '@env-spec/parser';\nimport { checkIsFileGitIgnored } from '@env-spec/utils/git-utils';\nimport { pathExists } from '@env-spec/utils/fs-utils';\n\nimport { loadVarlockEnvGraph } from '../../lib/load-graph';\nimport prompts from '../helpers/prompts';\nimport { fmt, logLines } from '../helpers/pretty-format';\nimport { detectRedundantValues, ensureAllItemsExist, inferSchemaUpdates } from '../helpers/infer-schema';\nimport { detectJsPackageManager, installJsDependency } from '../helpers/js-package-manager-utils';\nimport { TypedGunshiCommandFn } from '../helpers/gunshi-type-utils';\n\nexport const commandSpec = define({\n name: 'init',\n description: 'Set up varlock in the current project',\n args: {},\n});\n\nexport const commandFn: TypedGunshiCommandFn<typeof commandSpec> = async (ctx) => {\n let showOnboarding = true;\n\n if (showOnboarding) {\n console.log('🧙 Hello and welcome to Varlock 🔒🔥✨');\n // console.log(VARLOCK_BANNER_COLOR);\n }\n\n let envGraph = await loadVarlockEnvGraph();\n const existingSchemaFile = envGraph.dataSources.find((dataSource) => {\n return dataSource.type === 'schema';\n });\n\n // * SET UP SCHEMA ---------------------------------------------\n if (existingSchemaFile) {\n // for now - we don't do anything if they already have a schema set up\n // in the future, we may want to add more tools for projects that are already set up\n logLines([\n `It looks like you already have a ${fmt.fileName('.env.schema')} file 🎉`,\n 'This init helper is meant to help you get a new project set up.',\n 'If you need to make changes to your schema or values, you can update your files directly.',\n 'See more docs at https://varlock.dev/guides/schema',\n ]);\n } else {\n // find/select example file to use for schema gereration\n let exampleFileToConvert: DotEnvFileDataSource | null = null;\n const allExampleFiles = envGraph.dataSources.filter((dataSource) => {\n return dataSource instanceof DotEnvFileDataSource && dataSource.type === 'example';\n }) as Array<DotEnvFileDataSource>;\n if (allExampleFiles.length === 1) {\n exampleFileToConvert = allExampleFiles[0];\n } else if (allExampleFiles.length > 1) {\n console.log('');\n // not sure what to do here... could have them select one?\n const selectedExample = await select({\n message: `We detected more than one example .env file. Which one should we use to create your new ${fmt.fileName('.env.schema')}?`,\n options: allExampleFiles.map((file) => ({\n label: file.fileName,\n value: file,\n })),\n });\n if (isCancel(selectedExample)) process.exit(0);\n exampleFileToConvert = selectedExample;\n }\n\n // update the schema\n const parsedEnvFile = exampleFileToConvert?.parsedFile || parseEnvSpecDotEnvFile('');\n if (!parsedEnvFile) throw new Error('No parsed .env file found');\n envSpecUpdater.ensureHeader(parsedEnvFile, [\n 'This env file uses @env-spec - see https://varlock.dev/env-spec for more info',\n '',\n // TODO: add env spec version? real links?\n ].join('\\n'));\n envSpecUpdater.setRootDecorator(parsedEnvFile, 'defaultRequired', 'false', { explicitTrue: true });\n envSpecUpdater.setRootDecorator(parsedEnvFile, 'defaultSensitive', 'false', { explicitTrue: true });\n // TODO: detect js/ts project before adding this\n envSpecUpdater.setRootDecorator(parsedEnvFile, 'generateTypes', 'lang=ts, path=env.d.ts', { bareFnArgs: true });\n // envSpecUpdater.setRootDecorator(parsedEnvFile, 'envFlag', 'APP_ENV', { comment: 'controls automatic loading of env-specific files (e.g. .env.test, .env.prod, etc.)' });\n\n // add example item\n envSpecUpdater.injectFromStr(parsedEnvFile, [\n '',\n '# example env variable injected by `varlock init`',\n '# @required @sensitive @example=\"example value\"',\n 'EXAMPLE_ITEM=\"delete me!\"',\n '',\n ].join('\\n'), { location: 'after_header' });\n // update some decorators based on some simple heuristics\n inferSchemaUpdates(parsedEnvFile);\n // add items we find in other env files, but are missing in the schema/example\n ensureAllItemsExist(envGraph, parsedEnvFile);\n\n // write new updated schema file\n const schemaFilePath = path.join(process.cwd(), '.env.schema');\n await fs.writeFile(schemaFilePath, parsedEnvFile.toString());\n\n // log new schema file path\n if (exampleFileToConvert) {\n logLines([\n '',\n `Your ${fmt.fileName(exampleFileToConvert.fileName)} has been used to generate your new ${fmt.fileName('.env.schema')}:`,\n fmt.filePath(schemaFilePath),\n ]);\n } else {\n logLines([\n '',\n `Your new ${fmt.fileName('.env.schema')} file has been created:`,\n fmt.filePath(schemaFilePath),\n ]);\n }\n\n // make sure .env.schema is not gitignored\n if (await checkIsFileGitIgnored(schemaFilePath)) {\n // maybe could do this silently? it's relatively harmless\n logLines([ansis.dim(`(and updated ${fmt.fileName('.gitignore')} to ensure it will be tracked by git)`)]);\n await fs.appendFile('.gitignore', '\\n!.env.schema');\n }\n\n // ask them to review and confirm\n logLines([\n '',\n ansis.bold(`🚧 Please review and update your new ${fmt.fileName('.env.schema')} file! 🚧`),\n `We've done our best to get you started, but you must review and make sure it is correct!`,\n '',\n `👉 Some helpful pointers to get you started:`,\n `- use ${fmt.decorator('@required')} (or ${fmt.decorator('@optional')}) to tag items that should fail validation when empty`,\n `- use ${fmt.decorator('@sensitive')} to tag items that contain sensitive secrets, and must be handled accordingly`,\n `- use ${fmt.decorator('@type')} to set an item's data type (if not a basic string), which affects validation and coercion logic`,\n `- if an item value is purely an ${ansis.italic('example')} rather than a default, move it into an ${fmt.decorator('@example')} decorator, or delete it`,\n `- if an item value is just a dummy placeholder, delete it`,\n ]);\n const confirmReviewed = await prompts.confirm({\n message: `Have you reviewed and updated your new ${fmt.fileName('.env.schema')} file?`,\n });\n if (isCancel(confirmReviewed)) process.exit(0);\n\n // reload the graph\n envGraph = await loadVarlockEnvGraph();\n\n // check if they removed the EXAMPLE_ITEM and warn them\n if (envGraph.configSchema.EXAMPLE_ITEM) {\n logLines([\n '',\n ansis.bold(`🚨 Really? ${ansis.red(\"You didn't remove the EXAMPLE_ITEM!\")}`),\n `Please make sure your schema is all correct before using it...`,\n ]);\n }\n\n // delete the example file if they want us to\n if (exampleFileToConvert) {\n const confirmDeleteExample = await prompts.confirm({\n message: `Should we delete your ${fmt.fileName(exampleFileToConvert.fileName)} file? ${ansis.italic.gray('(you can always do this yourself later)')}`,\n });\n if (isCancel(confirmDeleteExample)) process.exit(0);\n if (confirmDeleteExample) {\n await fs.unlink(exampleFileToConvert.fullPath);\n }\n }\n\n // recommendation to delete defaults file\n const defaultsFile = envGraph.dataSources.find((dataSource) => {\n return dataSource instanceof DotEnvFileDataSource && dataSource.type === 'defaults';\n }) as DotEnvFileDataSource;\n if (defaultsFile) {\n logLines([\n '',\n `🚧 We detected a ${fmt.fileName(defaultsFile.fileName)} file in your project`,\n `You should migrate these default values into ${fmt.fileName('.env.schema')} and delete ${fmt.fileName(defaultsFile.fileName)}`,\n ]);\n }\n\n // detect and remove redundant defaults that are now in the schema\n const redundantInfo = await detectRedundantValues(envGraph);\n if (Object.keys(redundantInfo).length > 0) {\n logLines([\n '',\n ansis.bold('‼️ Now that your schema contains defaults, some values in your other .env files are redundant:'),\n ]);\n for (const [sourcePath, itemKeys] of Object.entries(redundantInfo)) {\n console.log(fmt.filePath(sourcePath));\n console.log(' ', itemKeys.map((k) => ansis.italic(k)).join(', '));\n }\n\n const confirmDeleteRedundant = await prompts.confirm({\n message: 'Should we delete these redundant values from your other .env files?',\n });\n if (isCancel(confirmDeleteRedundant)) process.exit(0);\n if (confirmDeleteRedundant) {\n await detectRedundantValues(envGraph, { delete: true });\n }\n }\n\n // final success!\n logLines([\n '',\n ansis.bold('🎉 Great!'),\n `You can run ${fmt.command('varlock load')} to attempt loading your env vars validate against your new schema.`,\n 'Check out our integration guide for more info about integrating into your application.',\n ]);\n }\n\n // * MAKE SURE VARLOCK IS INSTALLED ------------------------------------------\n const jsPackageManager = detectJsPackageManager();\n if (jsPackageManager && await pathExists(path.join(process.cwd(), 'package.json'))) {\n const installResult = installJsDependency({\n packageManager: jsPackageManager.name,\n packageName: 'varlock',\n });\n if (installResult) {\n logLines([\n '',\n `✅ Added ${fmt.packageName('varlock')} as a dependency in your package.json`,\n ]);\n }\n }\n};\n"]}
1
+ {"version":3,"sources":["../../utils/src/fs-utils.ts","../../../node_modules/.pnpm/is-unicode-supported@2.1.0/node_modules/is-unicode-supported/index.js","../src/cli/helpers/prompts.ts","../src/cli/helpers/infer-schema.ts","../src/cli/helpers/exit-error.ts","../src/cli/helpers/js-package-manager-utils.ts","../src/cli/commands/init.command.ts"],"names":["process","fs","parseEnvSpecDotEnvFile","envSpecUpdater","path"],"mappings":"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","file":"chunk-5HDQH7UC.js","sourcesContent":["import { accessSync } from 'node:fs';\nimport { access } from 'node:fs/promises';\n\nexport async function pathExists(p: string) {\n try {\n await access(p);\n return true;\n } catch {\n return false;\n }\n}\n\nexport function pathExistsSync(p:string) {\n try {\n accessSync(p);\n return true;\n } catch {\n return false;\n }\n}\n","import process from 'node:process';\n\nexport default function isUnicodeSupported() {\n\tconst {env} = process;\n\tconst {TERM, TERM_PROGRAM} = env;\n\n\tif (process.platform !== 'win32') {\n\t\treturn TERM !== 'linux'; // Linux console (kernel)\n\t}\n\n\treturn Boolean(env.WT_SESSION) // Windows Terminal\n\t\t|| Boolean(env.TERMINUS_SUBLIME) // Terminus (<0.2.27)\n\t\t|| env.ConEmuTask === '{cmd::Cmder}' // ConEmu and cmder\n\t\t|| TERM_PROGRAM === 'Terminus-Sublime'\n\t\t|| TERM_PROGRAM === 'vscode'\n\t\t|| TERM === 'xterm-256color'\n\t\t|| TERM === 'alacritty'\n\t\t|| TERM === 'rxvt-unicode'\n\t\t|| TERM === 'rxvt-unicode-256color'\n\t\t|| env.TERMINAL_EMULATOR === 'JetBrains-JediTerm';\n}\n","// this is a slightly modified version of @clack/prompts\n// mostly to remove the additional left border\n\nimport type { Readable, Writable } from 'node:stream';\nimport { WriteStream } from 'node:tty';\nimport {\n ConfirmPrompt, SelectPrompt, MultiSelectPrompt, type State,\n} from '@clack/core';\nimport color from 'ansis';\nimport isUnicodeSupported from 'is-unicode-supported';\n\nconst unicode = isUnicodeSupported();\nconst isCI = (): boolean => process.env.CI === 'true';\nconst unicodeOr = (c: string, fallback: string) => (unicode ? c : fallback);\nconst S_STEP_ACTIVE = unicodeOr('◆', '*');\nconst S_STEP_CANCEL = unicodeOr('■', 'x');\nconst S_STEP_ERROR = unicodeOr('▲', 'x');\nconst S_STEP_SUBMIT = unicodeOr('◇', 'o');\n\nconst S_BAR_START = unicodeOr('┌', 'T');\nconst S_BAR = unicodeOr('│', '|');\nconst S_BAR_END = unicodeOr('└', '—');\n\nconst S_RADIO_ACTIVE = unicodeOr('●', '>');\nconst S_RADIO_INACTIVE = unicodeOr('○', ' ');\nconst S_CHECKBOX_ACTIVE = unicodeOr('◻', '[•]');\nconst S_CHECKBOX_SELECTED = unicodeOr('◼', '[+]');\nconst S_CHECKBOX_INACTIVE = unicodeOr('◻', '[ ]');\nconst S_PASSWORD_MASK = unicodeOr('▪', '•');\n\nconst S_BAR_H = unicodeOr('─', '-');\nconst S_CORNER_TOP_RIGHT = unicodeOr('╮', '+');\nconst S_CONNECT_LEFT = unicodeOr('├', '+');\nconst S_CORNER_BOTTOM_RIGHT = unicodeOr('╯', '+');\n\nconst S_INFO = unicodeOr('●', '•');\nconst S_SUCCESS = unicodeOr('◆', '*');\nconst S_WARN = unicodeOr('▲', '!');\nconst S_ERROR = unicodeOr('■', 'x');\n\nconst symbol = (state: State) => {\n // eslint-disable-next-line default-case\n switch (state) {\n case 'initial':\n case 'active':\n return color.cyan(S_STEP_ACTIVE);\n case 'cancel':\n return color.red(S_STEP_CANCEL);\n case 'error':\n return color.yellow(S_STEP_ERROR);\n case 'submit':\n return color.green(S_STEP_SUBMIT);\n }\n};\n\nexport interface CommonOptions {\n input?: Readable;\n output?: Writable;\n}\n\n\n\n\n/// /\nexport interface LimitOptionsParams<TOption> extends CommonOptions {\n options: Array<TOption>;\n maxItems: number | undefined;\n cursor: number;\n style: (option: TOption, active: boolean) => string;\n}\n\nexport const limitOptions = <TOption>(params: LimitOptionsParams<TOption>): Array<string> => {\n const { cursor, options, style } = params;\n const output: Writable = params.output ?? process.stdout;\n const rows = output instanceof WriteStream && output.rows !== undefined ? output.rows : 10;\n\n const paramMaxItems = params.maxItems ?? Number.POSITIVE_INFINITY;\n const outputMaxItems = Math.max(rows - 4, 0);\n // We clamp to minimum 5 because anything less doesn't make sense UX wise\n const maxItems = Math.min(outputMaxItems, Math.max(paramMaxItems, 5));\n let slidingWindowLocation = 0;\n\n if (cursor >= slidingWindowLocation + maxItems - 3) {\n slidingWindowLocation = Math.max(Math.min(cursor - maxItems + 3, options.length - maxItems), 0);\n } else if (cursor < slidingWindowLocation + 2) {\n slidingWindowLocation = Math.max(cursor - 2, 0);\n }\n\n const shouldRenderTopEllipsis = maxItems < options.length && slidingWindowLocation > 0;\n const shouldRenderBottomEllipsis = maxItems < options.length && slidingWindowLocation + maxItems < options.length;\n\n return options\n .slice(slidingWindowLocation, slidingWindowLocation + maxItems)\n .map((option, i, arr) => {\n const isTopLimit = i === 0 && shouldRenderTopEllipsis;\n const isBottomLimit = i === arr.length - 1 && shouldRenderBottomEllipsis;\n return isTopLimit || isBottomLimit\n ? color.dim('...')\n : style(option, i + slidingWindowLocation === cursor);\n });\n};\n\n\n///\n\nexport interface ConfirmOptions extends CommonOptions {\n message: string;\n active?: string;\n inactive?: string;\n initialValue?: boolean;\n}\nexport const confirm = (opts: ConfirmOptions) => {\n const active = opts.active ?? 'Yes';\n const inactive = opts.inactive ?? 'No';\n return new ConfirmPrompt({\n active,\n inactive,\n input: opts.input,\n output: opts.output,\n initialValue: opts.initialValue ?? true,\n render() {\n const title = `\\n${symbol(this.state)} ${opts.message}\\n`;\n const value = this.value ? active : inactive;\n\n // NOTE it's trimming leading spaces, so we use an invisible character at the beginnign of the line to add some spacing\n switch (this.state) {\n case 'submit':\n return `${title}‎ ${color.dim(value)}`;\n case 'cancel':\n return `${title}‎ ${color.strikethrough(\n color.dim(value),\n )}\\n`;\n default: {\n return `${title}‎ ${\n this.value\n ? `${color.green(S_RADIO_ACTIVE)} ${active}`\n : `${color.dim(S_RADIO_INACTIVE)} ${color.dim(active)}`\n } ${color.dim('/')} ${\n !this.value\n ? `${color.green(S_RADIO_ACTIVE)} ${inactive}`\n : `${color.dim(S_RADIO_INACTIVE)} ${color.dim(inactive)}`\n }\\n`;\n }\n }\n },\n }).prompt() as Promise<boolean | symbol>;\n};\n\n\n\ntype Primitive = Readonly<string | boolean | number>;\n\nexport type Option<Value> = Value extends Primitive\n ? {\n /**\n * Internal data for this option.\n */\n value: Value;\n /**\n * The optional, user-facing text for this option.\n *\n * By default, the `value` is converted to a string.\n */\n label?: string;\n /**\n * An optional hint to display to the user when\n * this option might be selected.\n *\n * By default, no `hint` is displayed.\n */\n hint?: string;\n }\n : {\n /**\n * Internal data for this option.\n */\n value: Value;\n /**\n * Required. The user-facing text for this option.\n */\n label: string;\n /**\n * An optional hint to display to the user when\n * this option might be selected.\n *\n * By default, no `hint` is displayed.\n */\n hint?: string;\n };\n\nexport interface SelectOptions<Value> extends CommonOptions {\n message: string;\n options: Array<Option<Value>>;\n initialValue?: Value;\n maxItems?: number;\n}\n\nexport const select = <Value>(opts: SelectOptions<Value>) => {\n const opt = (option: Option<Value>, state: 'inactive' | 'active' | 'selected' | 'cancelled') => {\n const label = option.label ?? String(option.value);\n switch (state) {\n case 'selected':\n return `${color.dim(label)}`;\n case 'active':\n return `${color.green(S_RADIO_ACTIVE)} ${label} ${\n option.hint ? color.dim(`(${option.hint})`) : ''\n }`;\n case 'cancelled':\n return `${color.strikethrough(color.dim(label))}`;\n default:\n return `${color.dim(S_RADIO_INACTIVE)} ${color.dim(label)}`;\n }\n };\n\n return new SelectPrompt({\n options: opts.options,\n input: opts.input,\n output: opts.output,\n initialValue: opts.initialValue,\n render() {\n const title = `${color.gray(S_BAR)}\\n${symbol(this.state)} ${opts.message}\\n`;\n\n switch (this.state) {\n case 'submit':\n return `${title}${color.gray(S_BAR)} ${opt(this.options[this.cursor], 'selected')}`;\n case 'cancel':\n return `${title}${color.gray(S_BAR)} ${opt(\n this.options[this.cursor],\n 'cancelled',\n )}\\n${color.gray(S_BAR)}`;\n default: {\n return `${title}${color.cyan(S_BAR)} ${limitOptions({\n output: opts.output,\n cursor: this.cursor,\n options: this.options,\n maxItems: opts.maxItems,\n style: (item, active) => opt(item, active ? 'active' : 'inactive'),\n }).join(`\\n${color.cyan(S_BAR)} `)}\\n${color.cyan(S_BAR_END)}\\n`;\n }\n }\n },\n }).prompt() as Promise<Value | symbol>;\n};\n\n\nexport interface MultiSelectOptions<Value> extends CommonOptions {\n message: string;\n details?: string;\n options: Array<Option<Value>>;\n initialValues?: Array<Value>;\n maxItems?: number;\n required?: boolean;\n cursorAt?: Value;\n}\nexport const multiselect = <Value>(opts: MultiSelectOptions<Value>) => {\n const opt = (\n option: Option<Value>,\n state: 'inactive' | 'active' | 'selected' | 'active-selected' | 'submitted' | 'cancelled',\n ) => {\n const label = option.label ?? String(option.value);\n if (state === 'active') {\n return `${color.cyan(S_CHECKBOX_ACTIVE)} ${label} ${\n option.hint ? color.dim(`(${option.hint})`) : ''\n }`;\n }\n if (state === 'selected') {\n return `${color.green(S_CHECKBOX_SELECTED)} ${color.dim(label)} ${\n option.hint ? color.dim(`(${option.hint})`) : ''\n }`;\n }\n if (state === 'cancelled') {\n return `${color.strikethrough(color.dim(label))}`;\n }\n if (state === 'active-selected') {\n return `${color.green(S_CHECKBOX_SELECTED)} ${label} ${\n option.hint ? color.dim(`(${option.hint})`) : ''\n }`;\n }\n if (state === 'submitted') {\n return `${color.dim(label)}`;\n }\n return `${color.dim(S_CHECKBOX_INACTIVE)} ${color.dim(label)}`;\n };\n\n return new MultiSelectPrompt({\n options: opts.options,\n input: opts.input,\n output: opts.output,\n initialValues: opts.initialValues,\n required: opts.required ?? true,\n cursorAt: opts.cursorAt,\n validate(selected: Array<Value>) {\n if (this.required && selected.length === 0) {\n return `Please select at least one option.\\n${color.reset(\n color.dim(\n `Press ${color.gray(color.bgWhite(color.inverse(' space ')))} to select, ${color.gray(\n color.bgWhite(color.inverse(' enter ')),\n )} to submit`,\n ),\n )}`;\n }\n },\n render() {\n let title = `${color.gray(S_BAR)}\\n${symbol(this.state)} ${opts.message}\\n`;\n if (opts.details) title += `${color.gray(S_BAR)} ${opts.details}\\n`;\n\n const styleOption = (option: Option<Value>, active: boolean) => {\n const selected = this.value.includes(option.value);\n if (active && selected) {\n return opt(option, 'active-selected');\n }\n if (selected) {\n return opt(option, 'selected');\n }\n return opt(option, active ? 'active' : 'inactive');\n };\n\n switch (this.state) {\n case 'submit': {\n return `${title}${color.gray(S_BAR)} ${\n this.options\n .filter(({ value }) => this.value.includes(value))\n .map((option) => opt(option, 'submitted'))\n .join(color.dim(', ')) || color.dim('none')\n }`;\n }\n case 'cancel': {\n const label = this.options\n .filter(({ value }) => this.value.includes(value))\n .map((option) => opt(option, 'cancelled'))\n .join(color.dim(', '));\n return `${title}${color.gray(S_BAR)} ${\n label.trim() ? `${label}\\n${color.gray(S_BAR)}` : ''\n }`;\n }\n case 'error': {\n const footer = this.error\n .split('\\n')\n .map((ln, i) => (i === 0 ? `${color.yellow(S_BAR_END)} ${color.yellow(ln)}` : ` ${ln}`))\n .join('\\n');\n return `${title + color.yellow(S_BAR)} ${limitOptions({\n output: opts.output,\n options: this.options,\n cursor: this.cursor,\n maxItems: opts.maxItems,\n style: styleOption,\n }).join(`\\n${color.yellow(S_BAR)} `)}\\n${footer}\\n`;\n }\n default: {\n return `${title}${color.cyan(S_BAR)} ${limitOptions({\n output: opts.output,\n options: this.options,\n cursor: this.cursor,\n maxItems: opts.maxItems,\n style: styleOption,\n }).join(`\\n${color.cyan(S_BAR)} `)}\\n${color.cyan(S_BAR_END)}\\n`;\n }\n }\n },\n }).prompt() as Promise<Array<Value> | symbol>;\n};\n\n\n\n/// ////\n\nconst prompts = {\n confirm,\n select,\n multiselect,\n};\n\nexport default prompts;\n","import fs from 'node:fs/promises';\nimport { DotEnvFileDataSource, EnvGraph } from '@env-spec/env-graph';\nimport {\n envSpecUpdater, ParsedEnvSpecFile, ParsedEnvSpecStaticValue, parseEnvSpecDotEnvFile,\n} from '@env-spec/parser';\nimport { StaticValueResolver } from '../../../../env-graph/src/lib/resolver';\n\n\nconst PUBLIC_PREFIXES = [\n 'PUBLIC',\n 'VITE',\n 'NEXT_PUBLIC',\n 'NUXT_PUBLIC',\n];\nconst PUBLIC_KEYWORDS = ['PUBLIC'];\nconst SENSITIVE_KEYWORDS = [\n 'SECRET',\n 'API_KEY',\n 'PASSWORD',\n 'TOKEN',\n 'PRIVATE',\n 'CREDENTIALS',\n];\n\nfunction isValidUrl(val: string) {\n try {\n const u = new URL(val);\n return true;\n } catch (err) {\n return false;\n }\n}\n\nconst EMAIL_REGEX = /^(([^<>()[\\]\\\\.,;:\\s@\"]+(\\.[^<>()[\\]\\\\.,;:\\s@\"]+)*)|(\".+\"))@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}])|(([a-zA-Z\\-0-9]+\\.)+[a-zA-Z]{2,}))$/;\nconst VALID_NUMBER_REGEX = /^(0|([1-9][0-9]*))?(\\.[0-9]+)?$/;\n\n\nfunction inferItemDecorators(file: ParsedEnvSpecFile, itemKey: string, valueStr: string) {\n // infer @sensitive\n let itemIsPublic = false;\n if (PUBLIC_PREFIXES.some((prefix) => itemKey.startsWith(prefix))) itemIsPublic = true;\n if (PUBLIC_KEYWORDS.some((keyword) => itemKey.includes(keyword))) itemIsPublic = true;\n\n let itemIsSensitive = false;\n if (SENSITIVE_KEYWORDS.some((keyword) => itemKey.includes(keyword))) itemIsSensitive = true;\n\n if (itemIsPublic) {\n // not marking these for now, since we've already made the default not sensitive\n // envSpecUpdater.setItemDecorator(file, itemKey, 'sensitive', 'false');\n } else if (itemIsSensitive) {\n envSpecUpdater.setItemDecorator(file, itemKey, 'sensitive', 'true');\n }\n\n // infer @type\n // > from key\n if (itemKey === 'PORT' || itemKey.endsWith('_PORT')) {\n envSpecUpdater.setItemDecorator(file, itemKey, 'type', 'port');\n } else if (itemKey.endsWith('_EMAIL')) {\n envSpecUpdater.setItemDecorator(file, itemKey, 'type', 'email');\n } else if (itemKey.endsWith('_URL') || itemKey.endsWith('_URI')) {\n envSpecUpdater.setItemDecorator(file, itemKey, 'type', 'url');\n\n\n // > from value\n } else if (valueStr) {\n // move obvious examples to @example\n if (valueStr.startsWith('<') && valueStr.endsWith('>')) {\n envSpecUpdater.setItemDecorator(file, itemKey, 'example', valueStr);\n // remove example from value\n }\n\n if (valueStr === 'true' || valueStr === 'false') {\n envSpecUpdater.setItemDecorator(file, itemKey, 'type', 'boolean');\n } else if (EMAIL_REGEX.test(valueStr)) {\n envSpecUpdater.setItemDecorator(file, itemKey, 'type', 'email');\n } else if (valueStr !== '0' && valueStr !== '1' && VALID_NUMBER_REGEX.test(valueStr)) {\n envSpecUpdater.setItemDecorator(file, itemKey, 'type', 'number');\n } else if (isValidUrl(valueStr)) {\n envSpecUpdater.setItemDecorator(file, itemKey, 'type', 'url');\n }\n // TODO: more...\n }\n}\n\nexport function inferSchemaUpdates(file: ParsedEnvSpecFile) {\n for (const item of file.configItems) {\n const valueStr = (\n item.value instanceof ParsedEnvSpecStaticValue && item.value.value?.toString()\n ) || '';\n // console.log(item.key, '-', valueStr);\n inferItemDecorators(file, item.key, valueStr);\n }\n}\n\n\nexport function ensureAllItemsExist(envGraph: EnvGraph, schemaFile: ParsedEnvSpecFile) {\n const addedItemKeys: Array<string> = [];\n for (const itemKey in envGraph.configSchema) {\n const item = envGraph.configSchema[itemKey];\n const itemInSchema = schemaFile.configItems.find((i) => i.key === itemKey);\n\n if (!itemInSchema) {\n if (addedItemKeys.length === 0) {\n envSpecUpdater.injectFromStr(schemaFile, [\n '',\n '# items added to schema by `varlock init`',\n '# that were missing in example, but detected in other env files',\n '# PLEASE REVIEW THESE!',\n '# ---',\n '',\n ].join('\\n'), { location: 'end' });\n }\n addedItemKeys.push(itemKey);\n envSpecUpdater.injectFromStr(schemaFile, [`${itemKey}=`].join('\\n'));\n const itemValue = (\n item.valueResolver instanceof StaticValueResolver && item.valueResolver.staticValue\n ) || '';\n inferItemDecorators(schemaFile, itemKey, String(itemValue));\n }\n }\n}\n\nexport async function detectRedundantValues(envGraph: EnvGraph, opts: { delete?: boolean } = {}) {\n const schema = envGraph.schemaDataSource;\n if (!schema) return {};\n const redundantItemsBySourcePath: Record<string, Array<string>> = {};\n const schemaValues = schema.getStaticValues();\n for (const source of envGraph.dataSources) {\n if (source === schema) continue;\n // we'll skip example files, since it is expected to be deleted and full of redundant values\n if (source.type === 'example') continue;\n if (!(source instanceof DotEnvFileDataSource) || !source.parsedFile) continue;\n\n const sourceValues = source.getStaticValues();\n for (const [key, value] of Object.entries(sourceValues)) {\n if (schemaValues[key] !== value) continue;\n\n redundantItemsBySourcePath[source.fullPath] ||= [];\n redundantItemsBySourcePath[source.fullPath].push(key);\n if (opts.delete) {\n envSpecUpdater.deleteItem(source.parsedFile, key);\n }\n }\n\n if (opts.delete) {\n await fs.writeFile(source.fullPath, source.parsedFile.toString(), 'utf8');\n }\n }\n\n return redundantItemsBySourcePath;\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","import path from 'node:path';\nimport fs, { existsSync } from 'node:fs';\nimport { pathExistsSync } from '@env-spec/utils/fs-utils';\n\nimport { CliExitError } from './exit-error';\nimport { execSync } from 'node:child_process';\n\nexport type JsPackageManager = 'npm' | 'pnpm' | 'yarn' | 'bun' | 'deno';\n\ntype 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 let cwd = opts?.cwd || process.cwd();\n const cwdParts = cwd.split(path.sep);\n do {\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 detectedPm = pm;\n }\n }\n if (detectedPm) return JS_PACKAGE_MANAGERS[detectedPm];\n\n cwdParts.pop();\n cwd = path.join(...cwdParts);\n if (opts?.workspaceRootPath) {\n if (opts.workspaceRootPath === cwd) break;\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'))) break;\n }\n } while (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 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 opts.packagePath ? `cd ${opts.packagePath} &&` : '',\n // `add` works in all of them\n `${opts.packageManager} add ${opts.packageName}`,\n (opts.isMonoRepoRoot && opts.packageManager === 'pnpm') ? '-w' : '',\n ].join(' '));\n\n return true;\n}\n\n","/* eslint-disable @stylistic/quotes */\nimport path from 'node:path';\nimport fs from 'node:fs/promises';\nimport ansis from 'ansis';\nimport { isCancel, select } from '@clack/prompts';\nimport { define } from 'gunshi';\n\nimport _ from '@env-spec/utils/my-dash';\nimport { DotEnvFileDataSource } from '@env-spec/env-graph';\nimport { envSpecUpdater, parseEnvSpecDotEnvFile } from '@env-spec/parser';\nimport { checkIsFileGitIgnored } from '@env-spec/utils/git-utils';\nimport { pathExists } from '@env-spec/utils/fs-utils';\n\nimport { loadVarlockEnvGraph } from '../../lib/load-graph';\nimport prompts from '../helpers/prompts';\nimport { fmt, logLines } from '../helpers/pretty-format';\nimport { detectRedundantValues, ensureAllItemsExist, inferSchemaUpdates } from '../helpers/infer-schema';\nimport { detectJsPackageManager, installJsDependency } from '../helpers/js-package-manager-utils';\nimport { TypedGunshiCommandFn } from '../helpers/gunshi-type-utils';\n\nexport const commandSpec = define({\n name: 'init',\n description: 'Set up varlock in the current project',\n args: {},\n});\n\nexport const commandFn: TypedGunshiCommandFn<typeof commandSpec> = async (ctx) => {\n let showOnboarding = true;\n\n if (showOnboarding) {\n console.log('🧙 Hello and welcome to Varlock 🔒🔥✨');\n // console.log(VARLOCK_BANNER_COLOR);\n }\n\n let envGraph = await loadVarlockEnvGraph();\n const existingSchemaFile = envGraph.dataSources.find((dataSource) => {\n return dataSource.type === 'schema';\n });\n\n // * SET UP SCHEMA ---------------------------------------------\n if (existingSchemaFile) {\n // for now - we don't do anything if they already have a schema set up\n // in the future, we may want to add more tools for projects that are already set up\n logLines([\n `It looks like you already have a ${fmt.fileName('.env.schema')} file 🎉`,\n 'This init helper is meant to help you get a new project set up.',\n 'If you need to make changes to your schema or values, you can update your files directly.',\n 'See more docs at https://varlock.dev/guides/schema',\n ]);\n } else {\n // find/select example file to use for schema gereration\n let exampleFileToConvert: DotEnvFileDataSource | null = null;\n const allExampleFiles = envGraph.dataSources.filter((dataSource) => {\n return dataSource instanceof DotEnvFileDataSource && dataSource.type === 'example';\n }) as Array<DotEnvFileDataSource>;\n if (allExampleFiles.length === 1) {\n exampleFileToConvert = allExampleFiles[0];\n } else if (allExampleFiles.length > 1) {\n console.log('');\n // not sure what to do here... could have them select one?\n const selectedExample = await select({\n message: `We detected more than one example .env file. Which one should we use to create your new ${fmt.fileName('.env.schema')}?`,\n options: allExampleFiles.map((file) => ({\n label: file.fileName,\n value: file,\n })),\n });\n if (isCancel(selectedExample)) process.exit(0);\n exampleFileToConvert = selectedExample;\n }\n\n // update the schema\n const parsedEnvFile = exampleFileToConvert?.parsedFile || parseEnvSpecDotEnvFile('');\n if (!parsedEnvFile) throw new Error('No parsed .env file found');\n envSpecUpdater.ensureHeader(parsedEnvFile, [\n 'This env file uses @env-spec - see https://varlock.dev/env-spec for more info',\n '',\n // TODO: add env spec version? real links?\n ].join('\\n'));\n envSpecUpdater.setRootDecorator(parsedEnvFile, 'defaultRequired', 'false', { explicitTrue: true });\n envSpecUpdater.setRootDecorator(parsedEnvFile, 'defaultSensitive', 'false', { explicitTrue: true });\n // TODO: detect js/ts project before adding this\n envSpecUpdater.setRootDecorator(parsedEnvFile, 'generateTypes', 'lang=ts, path=env.d.ts', { bareFnArgs: true });\n // envSpecUpdater.setRootDecorator(parsedEnvFile, 'envFlag', 'APP_ENV', { comment: 'controls automatic loading of env-specific files (e.g. .env.test, .env.prod, etc.)' });\n\n // add example item\n envSpecUpdater.injectFromStr(parsedEnvFile, [\n '',\n '# example env variable injected by `varlock init`',\n '# @required @sensitive @example=\"example value\"',\n 'EXAMPLE_ITEM=\"delete me!\"',\n '',\n ].join('\\n'), { location: 'after_header' });\n // update some decorators based on some simple heuristics\n inferSchemaUpdates(parsedEnvFile);\n // add items we find in other env files, but are missing in the schema/example\n ensureAllItemsExist(envGraph, parsedEnvFile);\n\n // write new updated schema file\n const schemaFilePath = path.join(process.cwd(), '.env.schema');\n await fs.writeFile(schemaFilePath, parsedEnvFile.toString());\n\n // log new schema file path\n if (exampleFileToConvert) {\n logLines([\n '',\n `Your ${fmt.fileName(exampleFileToConvert.fileName)} has been used to generate your new ${fmt.fileName('.env.schema')}:`,\n fmt.filePath(schemaFilePath),\n ]);\n } else {\n logLines([\n '',\n `Your new ${fmt.fileName('.env.schema')} file has been created:`,\n fmt.filePath(schemaFilePath),\n ]);\n }\n\n // make sure .env.schema is not gitignored\n if (await checkIsFileGitIgnored(schemaFilePath)) {\n // maybe could do this silently? it's relatively harmless\n logLines([ansis.dim(`(and updated ${fmt.fileName('.gitignore')} to ensure it will be tracked by git)`)]);\n await fs.appendFile('.gitignore', '\\n!.env.schema');\n }\n\n // ask them to review and confirm\n logLines([\n '',\n ansis.bold(`🚧 Please review and update your new ${fmt.fileName('.env.schema')} file! 🚧`),\n `We've done our best to get you started, but you must review and make sure it is correct!`,\n '',\n `👉 Some helpful pointers to get you started:`,\n `- use ${fmt.decorator('@required')} (or ${fmt.decorator('@optional')}) to tag items that should fail validation when empty`,\n `- use ${fmt.decorator('@sensitive')} to tag items that contain sensitive secrets, and must be handled accordingly`,\n `- use ${fmt.decorator('@type')} to set an item's data type (if not a basic string), which affects validation and coercion logic`,\n `- if an item value is purely an ${ansis.italic('example')} rather than a default, move it into an ${fmt.decorator('@example')} decorator, or delete it`,\n `- if an item value is just a dummy placeholder, delete it`,\n ]);\n const confirmReviewed = await prompts.confirm({\n message: `Have you reviewed and updated your new ${fmt.fileName('.env.schema')} file?`,\n });\n if (isCancel(confirmReviewed)) process.exit(0);\n\n // reload the graph\n envGraph = await loadVarlockEnvGraph();\n\n // check if they removed the EXAMPLE_ITEM and warn them\n if (envGraph.configSchema.EXAMPLE_ITEM) {\n logLines([\n '',\n ansis.bold(`🚨 Really? ${ansis.red(\"You didn't remove the EXAMPLE_ITEM!\")}`),\n `Please make sure your schema is all correct before using it...`,\n ]);\n }\n\n // delete the example file if they want us to\n if (exampleFileToConvert) {\n const confirmDeleteExample = await prompts.confirm({\n message: `Should we delete your ${fmt.fileName(exampleFileToConvert.fileName)} file? ${ansis.italic.gray('(you can always do this yourself later)')}`,\n });\n if (isCancel(confirmDeleteExample)) process.exit(0);\n if (confirmDeleteExample) {\n await fs.unlink(exampleFileToConvert.fullPath);\n }\n }\n\n // recommendation to delete defaults file\n const defaultsFile = envGraph.dataSources.find((dataSource) => {\n return dataSource instanceof DotEnvFileDataSource && dataSource.type === 'defaults';\n }) as DotEnvFileDataSource;\n if (defaultsFile) {\n logLines([\n '',\n `🚧 We detected a ${fmt.fileName(defaultsFile.fileName)} file in your project`,\n `You should migrate these default values into ${fmt.fileName('.env.schema')} and delete ${fmt.fileName(defaultsFile.fileName)}`,\n ]);\n }\n\n // detect and remove redundant defaults that are now in the schema\n const redundantInfo = await detectRedundantValues(envGraph);\n if (Object.keys(redundantInfo).length > 0) {\n logLines([\n '',\n ansis.bold('‼️ Now that your schema contains defaults, some values in your other .env files are redundant:'),\n ]);\n for (const [sourcePath, itemKeys] of Object.entries(redundantInfo)) {\n console.log(fmt.filePath(sourcePath));\n console.log(' ', itemKeys.map((k) => ansis.italic(k)).join(', '));\n }\n\n const confirmDeleteRedundant = await prompts.confirm({\n message: 'Should we delete these redundant values from your other .env files?',\n });\n if (isCancel(confirmDeleteRedundant)) process.exit(0);\n if (confirmDeleteRedundant) {\n await detectRedundantValues(envGraph, { delete: true });\n }\n }\n\n // final success!\n logLines([\n '',\n ansis.bold('🎉 Great!'),\n `You can run ${fmt.command('varlock load')} to attempt loading your env vars validate against your new schema.`,\n 'Check out our integration guide for more info about integrating into your application.',\n ]);\n }\n\n // * MAKE SURE VARLOCK IS INSTALLED ------------------------------------------\n const jsPackageManager = detectJsPackageManager();\n if (jsPackageManager && await pathExists(path.join(process.cwd(), 'package.json'))) {\n const installResult = installJsDependency({\n packageManager: jsPackageManager.name,\n packageName: 'varlock',\n });\n if (installResult) {\n logLines([\n '',\n `✅ Added ${fmt.packageName('varlock')} as a dependency in your package.json`,\n ]);\n }\n }\n};\n"]}