varlock 0.0.5 → 0.0.7

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 (91) hide show
  1. package/dist/auto-load.js +5 -5
  2. package/dist/{chunk-LU2R63B4.js → chunk-2AA6IZBK.js} +3 -3
  3. package/dist/chunk-2AA6IZBK.js.map +1 -0
  4. package/dist/{chunk-365YVT72.js → chunk-2H7TDBLD.js} +3 -3
  5. package/dist/chunk-2H7TDBLD.js.map +1 -0
  6. package/dist/chunk-33ROL4J5.js.map +1 -1
  7. package/dist/{chunk-Z5KNSSLC.js → chunk-4D3QUGGJ.js} +6 -6
  8. package/dist/chunk-4D3QUGGJ.js.map +1 -0
  9. package/dist/{chunk-C2ZQAQUU.js → chunk-67DF2S4X.js} +3 -3
  10. package/dist/chunk-67DF2S4X.js.map +1 -0
  11. package/dist/{chunk-GCUCCUG5.js → chunk-7NCUE6IU.js} +14 -5
  12. package/dist/chunk-7NCUE6IU.js.map +1 -0
  13. package/dist/{chunk-VVKXMIKQ.js → chunk-BDA3K24R.js} +26 -13
  14. package/dist/chunk-BDA3K24R.js.map +1 -0
  15. package/dist/chunk-DAZNZPLN.js.map +1 -1
  16. package/dist/chunk-FGMXIEFA.js.map +1 -1
  17. package/dist/{chunk-GAQWSZCY.js → chunk-HQ3K6KKC.js} +3 -3
  18. package/dist/chunk-HQ3K6KKC.js.map +1 -0
  19. package/dist/chunk-ITXNRGOJ.js +14 -0
  20. package/dist/{chunk-PZE4KJJW.js.map → chunk-ITXNRGOJ.js.map} +1 -1
  21. package/dist/chunk-LHTLO65N.js.map +1 -1
  22. package/dist/{chunk-K2N2TG4M.js → chunk-LJKKUJMC.js} +7 -4
  23. package/dist/chunk-LJKKUJMC.js.map +1 -0
  24. package/dist/chunk-PUGFIZE3.js.map +1 -1
  25. package/dist/{chunk-EVHLEWHL.js → chunk-QDGAWJPB.js} +3 -3
  26. package/dist/chunk-QDGAWJPB.js.map +1 -0
  27. package/dist/chunk-RZT65DRA.js.map +1 -1
  28. package/dist/{chunk-Y7WD33L3.js → chunk-WOHPERDH.js} +3 -3
  29. package/dist/chunk-WOHPERDH.js.map +1 -0
  30. package/dist/{chunk-UFAGBKYG.js → chunk-WRLSFZTQ.js} +3 -3
  31. package/dist/chunk-WRLSFZTQ.js.map +1 -0
  32. package/dist/{chunk-VVJO4FC3.js → chunk-X52WCHVG.js} +6 -6
  33. package/dist/chunk-X52WCHVG.js.map +1 -0
  34. package/dist/{chunk-7SCZ3YWG.js → chunk-XCHNL72R.js} +4 -4
  35. package/dist/chunk-XCHNL72R.js.map +1 -0
  36. package/dist/{chunk-HMRN5QZL.js → chunk-YZ2H2QXX.js} +3 -3
  37. package/dist/chunk-YZ2H2QXX.js.map +1 -0
  38. package/dist/{chunk-GVAD672U.js → chunk-Z52EXRDT.js} +4 -4
  39. package/dist/chunk-Z52EXRDT.js.map +1 -0
  40. package/dist/{chunk-WFN3ZXGS.js → chunk-ZDGB2ZFV.js} +4 -4
  41. package/dist/chunk-ZDGB2ZFV.js.map +1 -0
  42. package/dist/cli/cli-executable.js +19 -19
  43. package/dist/cli/cli-executable.js.map +1 -1
  44. package/dist/doctor.command-TKHDKSUY.js +7 -0
  45. package/dist/{doctor.command-NUG3BYDQ.js.map → doctor.command-TKHDKSUY.js.map} +1 -1
  46. package/dist/dotenv-compat.js +5 -5
  47. package/dist/en-US-TSGNDI2P.js.map +1 -1
  48. package/dist/{env-B8lQt2sl.d.ts → env-k8iRuXIH.d.ts} +2 -2
  49. package/dist/index.d.ts +1 -1
  50. package/dist/index.js +10 -10
  51. package/dist/index.js.map +1 -1
  52. package/dist/init.command-NWFSUQWW.js +13 -0
  53. package/dist/{init.command-DHE2Q6FX.js.map → init.command-NWFSUQWW.js.map} +1 -1
  54. package/dist/ja-JP-UBPCQAAD.js.map +1 -1
  55. package/dist/load.command-U3ZEZYEV.js +12 -0
  56. package/dist/{load.command-GGE4OANH.js.map → load.command-U3ZEZYEV.js.map} +1 -1
  57. package/dist/login.command-SWBJENRF.js +10 -0
  58. package/dist/{login.command-25PKQUGR.js.map → login.command-SWBJENRF.js.map} +1 -1
  59. package/dist/run.command-WNANCLWN.js +12 -0
  60. package/dist/{run.command-BLL6AL52.js.map → run.command-WNANCLWN.js.map} +1 -1
  61. package/dist/runtime/env.d.ts +1 -1
  62. package/dist/runtime/env.js +1 -1
  63. package/dist/runtime/patch-console.js +2 -2
  64. package/dist/runtime/patch-response.js +2 -2
  65. package/dist/runtime/patch-server-response.js +2 -2
  66. package/dist/telemetry.command-QMUHAB3Z.js +10 -0
  67. package/dist/{telemetry.command-MVL3E366.js.map → telemetry.command-QMUHAB3Z.js.map} +1 -1
  68. package/package.json +3 -3
  69. package/dist/chunk-365YVT72.js.map +0 -1
  70. package/dist/chunk-7SCZ3YWG.js.map +0 -1
  71. package/dist/chunk-C2ZQAQUU.js.map +0 -1
  72. package/dist/chunk-EVHLEWHL.js.map +0 -1
  73. package/dist/chunk-GAQWSZCY.js.map +0 -1
  74. package/dist/chunk-GCUCCUG5.js.map +0 -1
  75. package/dist/chunk-GVAD672U.js.map +0 -1
  76. package/dist/chunk-HMRN5QZL.js.map +0 -1
  77. package/dist/chunk-K2N2TG4M.js.map +0 -1
  78. package/dist/chunk-LU2R63B4.js.map +0 -1
  79. package/dist/chunk-PZE4KJJW.js +0 -14
  80. package/dist/chunk-UFAGBKYG.js.map +0 -1
  81. package/dist/chunk-VVJO4FC3.js.map +0 -1
  82. package/dist/chunk-VVKXMIKQ.js.map +0 -1
  83. package/dist/chunk-WFN3ZXGS.js.map +0 -1
  84. package/dist/chunk-Y7WD33L3.js.map +0 -1
  85. package/dist/chunk-Z5KNSSLC.js.map +0 -1
  86. package/dist/doctor.command-NUG3BYDQ.js +0 -7
  87. package/dist/init.command-DHE2Q6FX.js +0 -13
  88. package/dist/load.command-GGE4OANH.js +0 -12
  89. package/dist/login.command-25PKQUGR.js +0 -10
  90. package/dist/run.command-BLL6AL52.js +0 -12
  91. package/dist/telemetry.command-MVL3E366.js +0 -10
@@ -1,4 +1,4 @@
1
- import { EnvGraph, DotEnvFileDataSource, ProcessEnvDataSource } from './chunk-K2N2TG4M.js';
1
+ import { EnvGraph, DotEnvFileDataSource, ProcessEnvDataSource } from './chunk-LJKKUJMC.js';
2
2
  import { __name } from './chunk-XN24GZXQ.js';
3
3
  import path from 'node:path';
4
4
  import fs from 'node:fs/promises';
@@ -55,5 +55,5 @@ async function loadEnvGraph(opts) {
55
55
  __name(loadEnvGraph, "loadEnvGraph");
56
56
 
57
57
  export { loadEnvGraph };
58
- //# sourceMappingURL=chunk-EVHLEWHL.js.map
59
- //# sourceMappingURL=chunk-EVHLEWHL.js.map
58
+ //# sourceMappingURL=chunk-QDGAWJPB.js.map
59
+ //# sourceMappingURL=chunk-QDGAWJPB.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../utils/src/find-env-files.ts","../../env-graph/src/lib/loader.ts"],"names":[],"mappings":";;;;;AAIA,IAAM,eAAA,GAAkB,CAAC,KAAA,EAAO,OAAO,CAAA;AAEvC,eAAsB,aAAa,IAAA,EAEhC;AACD,EAAA,MAAM,GAAA,GAAM,IAAA,EAAM,GAAA,IAAO,OAAA,CAAQ,GAAA,EAAI;AAErC,EAAA,MAAM,WAAW,EAAC;AAElB,EAAA,MAAM,cAAA,GAAiB,MAAM,EAAA,CAAG,OAAA,CAAQ,GAAG,CAAA;AAG3C,EAAA,KAAA,MAAW,YAAY,cAAA,EAAgB;AACrC,IAAA,IAAI,QAAA,CAAS,UAAA,CAAW,MAAM,CAAA,EAAG;AAC/B,MAAA,IAAI,IAAA,GAAO,KAAA;AACX,MAAA,KAAA,MAAW,YAAY,eAAA,EAAiB;AACtC,QAAA,IAAI,QAAA,CAAS,QAAA,CAAS,QAAQ,CAAA,EAAG,IAAA,GAAO,IAAA;AAAA,MAC1C;AACA,MAAA,IAAI,IAAA,EAAM;AACV,MAAA,QAAA,CAAS,IAAA,CAAK,IAAA,CAAK,IAAA,CAAK,GAAA,EAAK,QAAQ,CAAC,CAAA;AAAA,IACxC;AAAA,EACF;AAKA,EAAA,OAAO,QAAA;AACT;AAzBsB,MAAA,CAAA,YAAA,EAAA,cAAA,CAAA;;;ACDtB,SAAS,kBAAA,GAAqB;AAC5B,EAAA,MAAM,GAAA,GAAM,QAAQ,GAAA,CAAI,GAAA;AACxB,EAAA,IAAI,CAAC,GAAA,EAAK;AACR,IAAA,MAAM,IAAI,MAAM,gBAAgB,CAAA;AAAA,EAClC;AACA,EAAA,OAAO,GAAA;AACT;AANS,MAAA,CAAA,kBAAA,EAAA,oBAAA,CAAA;AAST,eAAsB,aAAa,IAAA,EAOhC;AACD,EAAA,MAAM,KAAA,GAAQ,IAAI,QAAA,EAAS;AAC3B,EAAA,KAAA,CAAM,QAAA,GAAW,IAAA,EAAM,QAAA,IAAY,kBAAA,EAAmB;AAEtD,EAAA,IAAI,MAAM,SAAA,EAAW;AACnB,IAAA,MAAM,IAAA,CAAK,UAAU,KAAK,CAAA;AAAA,EAC5B;AAEA,EAAA,IAAI,MAAM,kBAAA,EAAoB;AAC5B,IAAA,KAAA,CAAM,eAAe,IAAA,CAAK,kBAAA;AAAA,EAC5B;AAEA,EAAA,MAAM,YAAA,GAAe,MAAM,YAAA,CAAa;AAAA,IACtC,KAAK,KAAA,CAAM;AAAA,GACZ,CAAA;AAED,EAAA,KAAA,MAAW,eAAe,YAAA,EAAc;AACtC,IAAA,MAAM,cAAA,GAAiB,IAAI,oBAAA,CAAqB,WAAW,CAAA;AAE3D,IAAA,KAAA,CAAM,cAAc,cAAc,CAAA;AAClC,IAAA,MAAM,eAAe,UAAA,EAAW;AAAA,EAClC;AAEA,EAAA,KAAA,CAAM,wBAAA,GAA2B,IAAI,oBAAA,EAAqB;AAE1D,EAAA,MAAM,MAAM,UAAA,EAAW;AAEvB,EAAA,OAAO,KAAA;AACT;AAnCsB,MAAA,CAAA,YAAA,EAAA,cAAA,CAAA","file":"chunk-QDGAWJPB.js","sourcesContent":["import path from 'node:path';\nimport fs from 'node:fs/promises';\n\n// our tool may generate some additional files which we want to ignore\nconst SKIP_FILE_TYPES = ['.md', '.d.ts'];\n\nexport async function findEnvFiles(opts?: {\n cwd?: string,\n}) {\n const cwd = opts?.cwd || process.cwd();\n\n const envFiles = [];\n\n const filesWithinDir = await fs.readdir(cwd);\n\n // Filter for files starting with .env and check if they exist\n for (const fileName of filesWithinDir) {\n if (fileName.startsWith('.env')) {\n let skip = false;\n for (const fileType of SKIP_FILE_TYPES) {\n if (fileName.endsWith(fileType)) skip = true;\n }\n if (skip) continue;\n envFiles.push(path.join(cwd, fileName));\n }\n }\n\n // TODO: we may want to look up or down the folder tree?\n // TODO: we could support looking within specific directories (\"config\", \"env\", etc)\n\n return envFiles;\n}\n","import _ from '@env-spec/utils/my-dash';\nimport { EnvGraph } from './env-graph';\nimport { DotEnvFileDataSource, ProcessEnvDataSource } from './data-source';\nimport { findEnvFiles } from '@env-spec/utils/find-env-files';\n\nfunction autoDetectBasePath() {\n const PWD = process.env.PWD;\n if (!PWD) {\n throw new Error('PWD is not set');\n }\n return PWD;\n}\n\n\nexport async function loadEnvGraph(opts?: {\n basePath?: string,\n relativePaths?: Array<string>,\n checkGitIgnored?: boolean,\n excludeDirs?: Array<string>,\n currentEnvFallback?: string,\n afterInit?: (graph: EnvGraph) => Promise<void>,\n}) {\n const graph = new EnvGraph();\n graph.basePath = opts?.basePath ?? autoDetectBasePath();\n\n if (opts?.afterInit) {\n await opts.afterInit(graph);\n }\n\n if (opts?.currentEnvFallback) {\n graph.envFlagValue = opts.currentEnvFallback;\n }\n\n const envFilePaths = await findEnvFiles({\n cwd: graph.basePath,\n });\n\n for (const envFilePath of envFilePaths) {\n const fileDataSource = new DotEnvFileDataSource(envFilePath);\n // must call before finishInit so the dataSource has a reference to the graph\n graph.addDataSource(fileDataSource);\n await fileDataSource.finishInit();\n }\n // proocss.env overrides get some special treatment\n graph.finalOverridesDataSource = new ProcessEnvDataSource();\n\n await graph.finishLoad();\n\n return graph;\n}\n\n"]}
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/cli/commands/help.command.ts"],"names":[],"mappings":";;;;AAGO,IAAM,cAAc,MAAO,CAAA;AAAA,EAChC,IAAM,EAAA,MAAA;AAAA,EACN,WAAa,EAAA,4BAAA;AAAA,EACb,MAAM;AACR,CAAC;AAEY,IAAA,SAAA,iCAA6D,GAAQ,KAAA;AAElF,CAFmE,EAAA,WAAA","file":"chunk-RZT65DRA.js","sourcesContent":["import { define } from 'gunshi';\nimport { type TypedGunshiCommandFn } from '../helpers/gunshi-type-utils';\n\nexport const commandSpec = define({\n name: 'help',\n description: 'Show help info for varlock',\n args: {},\n});\n\nexport const commandFn: TypedGunshiCommandFn<typeof commandSpec> = async (ctx) => {\n // no-op - we'll trigger help from main entry point\n};\n"]}
1
+ {"version":3,"sources":["../src/cli/commands/help.command.ts"],"names":[],"mappings":";;;;AAGO,IAAM,cAAc,MAAA,CAAO;AAAA,EAChC,IAAA,EAAM,MAAA;AAAA,EACN,WAAA,EAAa,4BAAA;AAAA,EACb,MAAM;AACR,CAAC;AAEM,IAAM,SAAA,iCAA6D,GAAA,KAAQ;AAElF,CAAA,EAFmE,WAAA","file":"chunk-RZT65DRA.js","sourcesContent":["import { define } from 'gunshi';\nimport { type TypedGunshiCommandFn } from '../helpers/gunshi-type-utils';\n\nexport const commandSpec = define({\n name: 'help',\n description: 'Show help info for varlock',\n args: {},\n});\n\nexport const commandFn: TypedGunshiCommandFn<typeof commandSpec> = async (ctx) => {\n // no-op - we'll trigger help from main entry point\n};\n"]}
@@ -1,4 +1,4 @@
1
- import { loadEnvGraph } from './chunk-EVHLEWHL.js';
1
+ import { loadEnvGraph } from './chunk-QDGAWJPB.js';
2
2
  import { __name } from './chunk-XN24GZXQ.js';
3
3
 
4
4
  // src/lib/load-graph.ts
@@ -13,5 +13,5 @@ async function loadVarlockEnvGraph(opts) {
13
13
  __name(loadVarlockEnvGraph, "loadVarlockEnvGraph");
14
14
 
15
15
  export { loadVarlockEnvGraph };
16
- //# sourceMappingURL=chunk-Y7WD33L3.js.map
17
- //# sourceMappingURL=chunk-Y7WD33L3.js.map
16
+ //# sourceMappingURL=chunk-WOHPERDH.js.map
17
+ //# sourceMappingURL=chunk-WOHPERDH.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/lib/load-graph.ts"],"names":[],"mappings":";;;;AAEA,eAAsB,oBAAoB,IAAA,EAEvC;AACD,EAAA,MAAM,QAAA,GAAW,MAAM,YAAA,CAAa;AAAA,IAClC,GAAG,IAAA;AAAA,IACH,SAAA,gCAAkB,CAAA,KAAM;AAAA,IAExB,CAAA,EAFW,WAAA;AAAA,GAGZ,CAAA;AAED,EAAA,OAAO,QAAA;AACT;AAXsB,MAAA,CAAA,mBAAA,EAAA,qBAAA,CAAA","file":"chunk-WOHPERDH.js","sourcesContent":["import { loadEnvGraph } from '@env-spec/env-graph';\n\nexport async function loadVarlockEnvGraph(opts?: {\n currentEnvFallback?: string,\n}) {\n const envGraph = await loadEnvGraph({\n ...opts,\n afterInit: async (g) => {\n // TODO: register varlock resolver\n },\n });\n\n return envGraph;\n}\n"]}
@@ -1,4 +1,4 @@
1
- import { CliExitError, fmt } from './chunk-VVKXMIKQ.js';
1
+ import { CliExitError, fmt } from './chunk-BDA3K24R.js';
2
2
  import { define } from './chunk-33ROL4J5.js';
3
3
  import { gracefulExit } from './chunk-LHTLO65N.js';
4
4
  import { __name } from './chunk-XN24GZXQ.js';
@@ -50,5 +50,5 @@ var commandFn = /* @__PURE__ */ __name(async (ctx) => {
50
50
  }, "commandFn");
51
51
 
52
52
  export { commandFn, commandSpec };
53
- //# sourceMappingURL=chunk-UFAGBKYG.js.map
54
- //# sourceMappingURL=chunk-UFAGBKYG.js.map
53
+ //# sourceMappingURL=chunk-WRLSFZTQ.js.map
54
+ //# sourceMappingURL=chunk-WRLSFZTQ.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/cli/commands/telemetry.command.ts"],"names":[],"mappings":";;;;;;;;;AAWO,IAAM,cAAc,MAAA,CAAO;AAAA,EAChC,IAAA,EAAM,WAAA;AAAA,EACN,WAAA,EAAa,0CAAA;AAAA,EACb,IAAA,EAAM;AAAA,IACJ,IAAA,EAAM;AAAA,MACJ,IAAA,EAAM,YAAA;AAAA,MACN,WAAA,EAAa;AAAA;AACf;AAEJ,CAAC;AAEM,IAAM,SAAA,iCAA6D,GAAA,KAAQ;AAEhF,EAAA,IAAI,CAAC,CAAC,QAAA,EAAU,SAAS,EAAE,QAAA,CAAS,GAAA,CAAI,MAAA,CAAO,IAAI,CAAA,EAAG;AACpD,IAAA,MAAM,IAAI,aAAa,8CAAA,EAAgD;AAAA,MACrE,SAAA,EAAW;AAAA,KACZ,CAAA;AAAA,EACH;AAEA,EAAA,MAAM,SAAA,GAAY,IAAA,CAAK,OAAA,EAAQ,EAAG,UAAU,CAAA;AAC5C,EAAA,MAAM,UAAA,GAAa,IAAA,CAAK,SAAA,EAAW,aAAa,CAAA;AAEhD,EAAA,IAAI;AAEF,IAAA,IAAI,CAAC,UAAA,CAAW,SAAS,CAAA,EAAG;AAC1B,MAAA,MAAM,KAAA,CAAM,SAAA,EAAW,EAAE,SAAA,EAAW,MAAM,CAAA;AAAA,IAC5C;AAGA,IAAA,IAAI,SAA8B,EAAC;AACnC,IAAA,IAAI,UAAA,CAAW,UAAU,CAAA,EAAG;AAC1B,MAAA,MAAM,aAAA,GAAgB,MAAM,QAAA,CAAS,UAAA,EAAY,OAAO,CAAA;AACxD,MAAA,MAAA,GAAS,IAAA,CAAK,MAAM,aAAa,CAAA;AAAA,IACnC;AAGA,IAAA,IAAI,GAAA,CAAI,MAAA,CAAO,IAAA,KAAS,SAAA,SAAkB,iBAAA,GAAoB,IAAA;AAAA,gBAClD,MAAA,CAAO,iBAAA;AACnB,IAAA,MAAM,UAAU,UAAA,EAAY,IAAA,CAAK,UAAU,MAAA,EAAQ,IAAA,EAAM,CAAC,CAAC,CAAA;AAE3D,IAAA,IAAI,GAAA,CAAI,OAAO,IAAA,EAAM;AACnB,MAAA,OAAA,CAAQ,IAAI,uDAAkD,CAAA;AAAA,IAChE,CAAA,MAAO;AACL,MAAA,OAAA,CAAQ,IAAI,wDAAmD,CAAA;AAAA,IACjE;AACA,IAAA,OAAA,CAAQ,GAAA,CAAI,aAAA,EAAe,GAAA,CAAI,QAAA,CAAS,UAAU,CAAC,CAAA;AAAA,EACrD,SAAS,KAAA,EAAO;AACd,IAAA,OAAA,CAAQ,KAAA,CAAM,mCAAmC,KAAK,CAAA;AACtD,IAAA,OAAO,aAAa,CAAC,CAAA;AAAA,EACvB;AACF,CAAA,EAvCmE,WAAA","file":"chunk-WRLSFZTQ.js","sourcesContent":["import { homedir } from 'node:os';\nimport { join } from 'node:path';\nimport { mkdir, writeFile, readFile } from 'node:fs/promises';\nimport { existsSync } from 'node:fs';\nimport { define } from 'gunshi';\nimport { type TypedGunshiCommandFn } from '../helpers/gunshi-type-utils';\nimport { gracefulExit } from 'exit-hook';\nimport { fmt } from '../helpers/pretty-format';\nimport { CliExitError } from '../helpers/exit-error';\n\n\nexport const commandSpec = define({\n name: 'telemetry',\n description: 'Enable/disable anonymous usage analytics',\n args: {\n mode: {\n type: 'positional',\n description: '\"enable\" or \"disable\"',\n },\n },\n});\n\nexport const commandFn: TypedGunshiCommandFn<typeof commandSpec> = async (ctx) => {\n // TODO: remove this when gunshi supports types/validation for positional args\n if (!['enable', 'disable'].includes(ctx.values.mode)) {\n throw new CliExitError('additional arg must be \"enable\" or \"disable\"', {\n forceExit: true,\n });\n }\n\n const configDir = join(homedir(), '.varlock');\n const configPath = join(configDir, 'config.json');\n\n try {\n // Create .varlock directory if it doesn't exist\n if (!existsSync(configDir)) {\n await mkdir(configDir, { recursive: true });\n }\n\n // Read existing config if it exists\n let config: Record<string, any> = {};\n if (existsSync(configPath)) {\n const configContent = await readFile(configPath, 'utf-8');\n config = JSON.parse(configContent);\n }\n\n // update config `telemetryDisabled` setting\n if (ctx.values.mode === 'disable') config.telemetryDisabled = true;\n else delete config.telemetryDisabled;\n await writeFile(configPath, JSON.stringify(config, null, 2));\n\n if (ctx.values.mode) {\n console.log('✅ Successfully enabled anonymous usage analytics');\n } else {\n console.log('✅ Successfully disabled anonymous usage analytics');\n }\n console.log('> saved in:', fmt.filePath(configPath));\n } catch (error) {\n console.error('Failed to opt out of analytics:', error);\n return gracefulExit(1);\n }\n};\n"]}
@@ -1,10 +1,10 @@
1
- import { detectJsPackageManager, logLines, fmt, pathExists, installJsDependency } from './chunk-VVKXMIKQ.js';
1
+ import { detectJsPackageManager, logLines, fmt, pathExists, installJsDependency } from './chunk-BDA3K24R.js';
2
2
  import { ve, pD, dD, SD, LD } from './chunk-DAZNZPLN.js';
3
3
  import { define } from './chunk-33ROL4J5.js';
4
- import { loadVarlockEnvGraph } from './chunk-Y7WD33L3.js';
5
- import { ansis_default } from './chunk-365YVT72.js';
4
+ import { loadVarlockEnvGraph } from './chunk-WOHPERDH.js';
5
+ import { ansis_default } from './chunk-2H7TDBLD.js';
6
6
  import { gracefulExit } from './chunk-LHTLO65N.js';
7
- import { StaticValueResolver, DotEnvFileDataSource, checkIsFileGitIgnored } from './chunk-K2N2TG4M.js';
7
+ import { StaticValueResolver, DotEnvFileDataSource, checkIsFileGitIgnored } from './chunk-LJKKUJMC.js';
8
8
  import { __name } from './chunk-XN24GZXQ.js';
9
9
  import path from 'node:path';
10
10
  import fs2 from 'node:fs/promises';
@@ -536,5 +536,5 @@ var commandFn = /* @__PURE__ */ __name(async (ctx) => {
536
536
  }, "commandFn");
537
537
 
538
538
  export { commandFn, commandSpec };
539
- //# sourceMappingURL=chunk-VVJO4FC3.js.map
540
- //# sourceMappingURL=chunk-VVJO4FC3.js.map
539
+ //# sourceMappingURL=chunk-X52WCHVG.js.map
540
+ //# sourceMappingURL=chunk-X52WCHVG.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../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/commands/init.command.ts"],"names":["process","fs","parseEnvSpecDotEnvFile","envSpecUpdater"],"mappings":"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","file":"chunk-X52WCHVG.js","sourcesContent":["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","/* 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 { type TypedGunshiCommandFn } from '../helpers/gunshi-type-utils';\nimport { gracefulExit } from 'exit-hook';\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 const jsPackageManager = detectJsPackageManager();\n\n console.log('🧙 Hello and welcome to Varlock 🔒🔥✨');\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)) return gracefulExit(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` ⚠️ DELETE THIS ITEM! ⚠️',\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 `- add a description to each item when the name is not self explanitory - it will come through in generated types`,\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 a ${ansis.italic('useful example')} rather than a default, use ${fmt.decorator('@example')}`,\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)) return gracefulExit(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)) return gracefulExit(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)) return gracefulExit(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', { jsPackageManager })} to attempt loading your env vars validate against your new schema.`,\n '',\n 'Check out our docs for more info about integrating into your application.',\n '',\n '📖 https://varlock.dev 👈',\n '',\n ]);\n }\n\n // * MAKE SURE VARLOCK IS INSTALLED ------------------------------------------\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,6 +1,6 @@
1
- import { logLines } from './chunk-VVKXMIKQ.js';
1
+ import { logLines } from './chunk-BDA3K24R.js';
2
2
  import { define } from './chunk-33ROL4J5.js';
3
- import { ansis_default } from './chunk-365YVT72.js';
3
+ import { ansis_default } from './chunk-2H7TDBLD.js';
4
4
  import { gracefulExit } from './chunk-LHTLO65N.js';
5
5
  import { __name } from './chunk-XN24GZXQ.js';
6
6
  import { setTimeout } from 'node:timers/promises';
@@ -143,5 +143,5 @@ var commandFn = /* @__PURE__ */ __name(async (ctx) => {
143
143
  }, "commandFn");
144
144
 
145
145
  export { CONFIG, commandFn, commandSpec };
146
- //# sourceMappingURL=chunk-7SCZ3YWG.js.map
147
- //# sourceMappingURL=chunk-7SCZ3YWG.js.map
146
+ //# sourceMappingURL=chunk-XCHNL72R.js.map
147
+ //# sourceMappingURL=chunk-XCHNL72R.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/config.ts","../src/cli/helpers/open-url.ts","../src/cli/helpers/key-press.ts","../src/cli/commands/login.command.ts"],"names":["delay"],"mappings":"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","file":"chunk-XCHNL72R.js","sourcesContent":["// TODO: figure out dev vs prod env vars... would be great to use varlock here!\n\n// NOTE - these keys are safe to publish\n\nexport const CONFIG = {\n // VARLOCK_API_URL: 'http://localhost:8888',\n VARLOCK_API_URL: 'https://api.varlock.dev',\n GITHUB_APP_CLIENT_ID: 'Iv23li50gB8bMxLauiJQ', // varlock.dev app\n POSTHOG_API_KEY: 'phc_bfzH97VIta8yQa8HrsgmitqS6rTydjMISs0m8aqJTnq',\n POSTHOG_HOST: 'https://ph.varlock.dev',\n};\n","import os from 'node:os';\nimport { spawn } from 'node:child_process';\n\nconst platform = os.platform();\n\nconst isWindows = platform.match(/^win/i);\nconst isMac = platform.match(/^darwin/i);\nconst isLinux = (!isWindows && !isMac);\n\n/** opens a url using the default browser */\nexport function openUrl(url: string) {\n if (isWindows) {\n spawn('cmd', ['/c', 'start', ' ', url], { detached: true });\n } else if (isMac) {\n spawn('open', [url], { detached: true });\n } else if (isLinux) {\n // TODO: maybe check for x-www-browser instead?\n spawn('xdg-open', [url], { detached: true });\n }\n}\n","import { gracefulExit } from 'exit-hook';\n\nexport async function keyPressed(keys: Array<string> | true = true) {\n process.stdin.setRawMode(true);\n return new Promise<void>((resolve) => {\n function keyPressHandler(d: Buffer) {\n const keyStr = d.toString();\n // exit on ctrl+c or ctrl+d\n if (['\\u0003', '\\u0004'].includes(keyStr)) {\n return gracefulExit(1);\n }\n if (keys === true || keys.includes(keyStr)) {\n process.stdin.setRawMode(false);\n process.stdin.off('data', keyPressHandler);\n resolve();\n }\n }\n process.stdin.on('data', keyPressHandler);\n });\n}\n","\nimport { setTimeout as delay } from 'node:timers/promises';\nimport ansis from 'ansis';\nimport { define } from 'gunshi';\nimport { logLines } from '../helpers/pretty-format';\nimport { CONFIG } from '../../config';\nimport { openUrl } from '../helpers/open-url';\nimport { keyPressed } from '../helpers/key-press';\nimport { type TypedGunshiCommandFn } from '../helpers/gunshi-type-utils';\nimport { gracefulExit } from 'exit-hook';\n\n\nexport const commandSpec = define({\n name: 'login',\n description: 'Authenticate (using GitHub)',\n args: {},\n});\n\n\nexport const commandFn: TypedGunshiCommandFn<typeof commandSpec> = async (ctx) => {\n const codeReq = await fetch('https://github.com/login/device/code', {\n method: 'POST',\n body: JSON.stringify({\n client_id: CONFIG.GITHUB_APP_CLIENT_ID,\n }),\n headers: {\n 'Content-Type': 'application/json',\n Accept: 'application/json',\n },\n });\n if (codeReq.status !== 200) {\n console.log('Failed to initiate GitHub device flow login!');\n return gracefulExit(1);\n }\n\n const ghCodeInfo = await codeReq.json() as {\n device_code: string;\n user_code: string;\n verification_uri: string;\n expires_in: number;\n interval: number;\n };\n\n logLines([\n '🔑 Authenticating using GitHub:',\n '',\n `First please copy this code: ${ansis.bold.magenta(ghCodeInfo.user_code)}`,\n '',\n `Log in @ ${ghCodeInfo.verification_uri}`,\n '',\n 'Press ENTER to open in your default browser...',\n ]);\n await keyPressed(['\\r']);\n console.log(ansis.italic.gray('... please complete login on github.com ...'));\n openUrl(ghCodeInfo.verification_uri);\n\n const pollMs = ghCodeInfo.interval * 1000;\n const expiresMs = ghCodeInfo.expires_in * 1000;\n const startAt = new Date();\n\n let oauthStatus: any;\n while (true) {\n await delay(pollMs);\n try {\n const oauthStatusReq = await fetch('https://github.com/login/oauth/access_token', {\n method: 'POST',\n body: JSON.stringify({\n client_id: CONFIG.GITHUB_APP_CLIENT_ID,\n device_code: ghCodeInfo.device_code,\n grant_type: 'urn:ietf:params:oauth:grant-type:device_code',\n }),\n headers: {\n 'Content-Type': 'application/json',\n Accept: 'application/json',\n },\n });\n oauthStatus = await oauthStatusReq.json();\n } catch (err) {\n console.log(err);\n }\n\n // we are expecting to see { error: 'authorization_pending' }\n // probably a few more error types we could bail early on\n if (oauthStatus.error === 'access_denied') {\n console.log('❌ Login attempt was cancelled! Please try again.');\n return gracefulExit(1);\n }\n\n // if we got the token, we break and continue\n if (oauthStatus.access_token) break;\n\n // if we've been polling for too long, give up\n if (new Date().getTime() - startAt.getTime() > expiresMs) {\n console.log('❌ Login timed out! Please try again.');\n return gracefulExit(1);\n }\n }\n\n // oauthStatus when completed looks like:\n // {\n // access_token: 'ghu_abcxyz',\n // expires_in: 28800,\n // refresh_token: 'ghr_abcxyz',\n // refresh_token_expires_in: 15897600,\n // token_type: 'bearer',\n // scope: ''\n // }\n\n // pass along github auth info to API, which will fetch info from HG, handle login/signup, return JWT\n const authReq = await fetch(`${CONFIG.VARLOCK_API_URL}/github/auth-from-device-flow`, {\n method: 'POST',\n body: JSON.stringify({\n accessToken: oauthStatus.access_token,\n refreshToken: oauthStatus.refresh_token,\n accessTokenExpiresAt: new Date(Date.now() + oauthStatus.expires_in * 1000).toISOString(),\n refreshTokenExpiresAt: new Date(Date.now() + oauthStatus.refresh_token_expires_in * 1000).toISOString(),\n tokenType: oauthStatus.token_type,\n scope: oauthStatus.scope,\n }),\n headers: {\n 'Content-Type': 'application/json',\n Accept: 'application/json',\n },\n });\n if (authReq.status !== 200) {\n console.log(await authReq.json());\n return gracefulExit(1);\n }\n\n const authRes = await authReq.json() as {\n user: {\n githubUserId: string;\n githubUsername: string;\n name: string;\n },\n token: string;\n isNewUser: boolean;\n publicKey?: string;\n };\n\n // TODO: if app exists, pass off login info to it instead of storing in home folder\n // otherwise save login info in ~/.varlock/identity.json\n // also save it along with a new keypair if necessary, and send the public key to the api\n\n console.log(`✅ Logged in as ${authRes.user.githubUsername} (${authRes.user.name})!`);\n};\n"]}
@@ -1,5 +1,5 @@
1
1
  import { define } from './chunk-33ROL4J5.js';
2
- import { loadEnvGraph } from './chunk-EVHLEWHL.js';
2
+ import { loadEnvGraph } from './chunk-QDGAWJPB.js';
3
3
  import { __name } from './chunk-XN24GZXQ.js';
4
4
 
5
5
  // src/cli/helpers/install-detection.ts
@@ -28,5 +28,5 @@ var commandFn = /* @__PURE__ */ __name(async (ctx) => {
28
28
  }, "commandFn");
29
29
 
30
30
  export { commandFn, commandSpec };
31
- //# sourceMappingURL=chunk-HMRN5QZL.js.map
32
- //# sourceMappingURL=chunk-HMRN5QZL.js.map
31
+ //# sourceMappingURL=chunk-YZ2H2QXX.js.map
32
+ //# sourceMappingURL=chunk-YZ2H2QXX.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/cli/helpers/install-detection.ts","../src/cli/commands/doctor.command.ts"],"names":[],"mappings":";;;;;AACO,SAAS,YAAA,GAAe;AAC7B,EAAA,IAAI;AACF,IAAA,OAAO,KAAA;AAAA,EACT,SAAS,CAAA,EAAG;AACV,IAAA,OAAO,KAAA;AAAA,EACT;AACF;AANgB,MAAA,CAAA,YAAA,EAAA,cAAA,CAAA;;;ACIT,IAAM,cAAc,MAAA,CAAO;AAAA,EAChC,IAAA,EAAM,QAAA;AAAA,EACN,WAAA,EAAa,4DAAA;AAAA,EACb,MAAM;AACR,CAAC;AAEM,IAAM,SAAA,iCAA6D,GAAA,KAAQ;AAChF,EAAA,OAAA,CAAQ,IAAI,EAAE,CAAA;AACd,EAAA,MAAM,OAAA,CAAQ,IAAI,yCAA6B,CAAA;AAE/C,EAAA,OAAA,CAAQ,GAAA,CAAI,cAAA,EAAgB,YAAA,EAAc,CAAA;AAE1C,EAAA,MAAM,QAAA,GAAW,MAAM,YAAA,EAAa;AACpC,EAAA,MAAM,SAAS,gBAAA,EAAiB;AAChC,EAAoB,SAAS,oBAAA;AAI/B,CAAA,EAZmE,WAAA","file":"chunk-YZ2H2QXX.js","sourcesContent":["\nexport function isBundledSEA() {\n try {\n return __VARLOCK_SEA_BUILD__;\n } catch (e) {\n return false;\n }\n}\n","import { define } from 'gunshi';\nimport { loadEnvGraph } from '@env-spec/env-graph';\nimport { isBundledSEA } from '../helpers/install-detection';\nimport { type TypedGunshiCommandFn } from '../helpers/gunshi-type-utils';\n\nexport const commandSpec = define({\n name: 'doctor',\n description: 'Debug and diagnose issues with your env file(s) and system',\n args: {},\n});\n\nexport const commandFn: TypedGunshiCommandFn<typeof commandSpec> = async (ctx) => {\n console.log('');\n await console.log('🧙 Scanning for issues... ✨');\n\n console.log('Bundled SEA?', isBundledSEA());\n\n const envGraph = await loadEnvGraph();\n await envGraph.resolveEnvValues();\n const resolvedEnv = envGraph.getResolvedEnvObject();\n\n // TODO: Mac app checks\n // - installed, running, logged in, set up (keys exist), locked/unlocked state\n};\n\n"]}
@@ -1,6 +1,6 @@
1
1
  import { define } from './chunk-33ROL4J5.js';
2
- import { checkForSchemaErrors, checkForConfigErrors } from './chunk-WFN3ZXGS.js';
3
- import { loadVarlockEnvGraph } from './chunk-Y7WD33L3.js';
2
+ import { checkForSchemaErrors, checkForConfigErrors } from './chunk-ZDGB2ZFV.js';
3
+ import { loadVarlockEnvGraph } from './chunk-WOHPERDH.js';
4
4
  import { gracefulExit } from './chunk-LHTLO65N.js';
5
5
  import { __name } from './chunk-XN24GZXQ.js';
6
6
  import { execa } from 'execa';
@@ -83,5 +83,5 @@ var commandFn = /* @__PURE__ */ __name(async (ctx) => {
83
83
  }, "commandFn");
84
84
 
85
85
  export { commandFn, commandSpec };
86
- //# sourceMappingURL=chunk-GVAD672U.js.map
87
- //# sourceMappingURL=chunk-GVAD672U.js.map
86
+ //# sourceMappingURL=chunk-Z52EXRDT.js.map
87
+ //# sourceMappingURL=chunk-Z52EXRDT.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;AAEjC,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,IAAc,IAAA,CAAK,KAAA,CAAM,CAAA,EAAG,eAAe,CAAA;AAC3C,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,IAAA,EAAW,MAAA,KAAgB;AAM7C,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,EAjHmE,WAAA","file":"chunk-Z52EXRDT.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;\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 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,6 +1,6 @@
1
- import { ansis_default, getItemSummary, joinAndCompact } from './chunk-365YVT72.js';
1
+ import { ansis_default, getItemSummary, joinAndCompact } from './chunk-2H7TDBLD.js';
2
2
  import { gracefulExit } from './chunk-LHTLO65N.js';
3
- import { my_dash_default } from './chunk-K2N2TG4M.js';
3
+ import { my_dash_default } from './chunk-LJKKUJMC.js';
4
4
  import { __name } from './chunk-XN24GZXQ.js';
5
5
 
6
6
  // src/cli/helpers/error-checks.ts
@@ -65,5 +65,5 @@ function checkForConfigErrors(envGraph, opts) {
65
65
  __name(checkForConfigErrors, "checkForConfigErrors");
66
66
 
67
67
  export { InvalidEnvError, checkForConfigErrors, checkForSchemaErrors };
68
- //# sourceMappingURL=chunk-WFN3ZXGS.js.map
69
- //# sourceMappingURL=chunk-WFN3ZXGS.js.map
68
+ //# sourceMappingURL=chunk-ZDGB2ZFV.js.map
69
+ //# sourceMappingURL=chunk-ZDGB2ZFV.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/cli/helpers/error-checks.ts"],"names":[],"mappings":"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","file":"chunk-ZDGB2ZFV.js","sourcesContent":["import ansis from 'ansis';\nimport { EnvGraph } from '@env-spec/env-graph';\nimport _ from '@env-spec/utils/my-dash';\nimport { getItemSummary, joinAndCompact } from '../../lib/formatting';\nimport { gracefulExit } from 'exit-hook';\n\nexport function checkForSchemaErrors(envGraph: EnvGraph) {\n // first we check for loading/parse errors - some cases we may want to let it fail silently?\n for (const source of envGraph.dataSources) {\n // do we care about loading errors from disabled sources?\n // if (source.disabled) continue;\n\n // console.log(source);\n\n // TODO: use a formatting helper to show the error - which will include location/stack/etc appropriately\n if (source.loadingError) {\n console.log(`🚨 Error encountered while loading ${source.label}`);\n console.log(source.loadingError.message);\n console.log(source.loadingError.location);\n\n const errLoc = source.loadingError.location as any;\n\n const errPreview = [\n errLoc.lineStr,\n `${ansis.gray('-'.repeat(errLoc.colNumber - 1))}${ansis.red('^')}`,\n ].join('\\n');\n\n console.log('Error parsing .env file');\n console.log(` ${errLoc.path}:${errLoc.lineNumber}:${errLoc.colNumber}`);\n console.log(errPreview);\n\n return gracefulExit(1);\n }\n }\n\n // now we check for any schema errors - where something about how things are wired up is invalid\n // NOTE - we should not have run any resolution yet\n // TODO: make sure we are calling this before attempting to resolve values\n // const failingItems = _.filter(_.values(envGraph.configSchema), (item) => item.validationState === 'error');\n // if (failingItems.length > 0) {\n // throw new CliExitError('Schema is currently invalid');\n // }\n}\n\nexport class InvalidEnvError extends Error {\n constructor() {\n super('Resolved config/env did not pass validation');\n }\n getFormattedOutput() {\n return `\\n💥 ${ansis.red(this.message)} 💥\\n`;\n }\n}\n\nexport function checkForConfigErrors(envGraph: EnvGraph, opts?: {\n showAll?: boolean\n}) {\n const failingItems = _.filter(_.values(envGraph.configSchema), (item) => item.validationState === 'error');\n\n // TODO: use service.isValid?\n if (failingItems.length > 0) {\n console.log(`\\n🚨 🚨 🚨 ${ansis.bold.underline('Configuration is currently invalid ')} 🚨 🚨 🚨\\n`);\n console.log('Invalid items:\\n');\n\n _.each(failingItems, (item) => {\n console.log(getItemSummary(item));\n console.log();\n });\n if (opts?.showAll) {\n console.log();\n console.log(joinAndCompact([\n 'Valid items:',\n ansis.italic.gray('(remove `--show-all` flag to hide)'),\n ]));\n console.log();\n const validItems = _.filter(_.values(envGraph.configSchema), (i) => !!i.isValid);\n _.each(validItems, (item) => {\n console.log(getItemSummary(item));\n });\n }\n\n throw new InvalidEnvError();\n }\n}\n"]}
@@ -1,20 +1,20 @@
1
- import { commandSpec as commandSpec$6 } from '../chunk-UFAGBKYG.js';
2
- import { CONFIG, commandSpec as commandSpec$7 } from '../chunk-7SCZ3YWG.js';
3
- import { commandSpec } from '../chunk-VVJO4FC3.js';
4
- import { CliExitError, fmt } from '../chunk-VVKXMIKQ.js';
5
- import { commandSpec as commandSpec$1 } from '../chunk-Z5KNSSLC.js';
6
- import { commandSpec as commandSpec$2 } from '../chunk-GVAD672U.js';
1
+ import { commandSpec as commandSpec$6 } from '../chunk-WRLSFZTQ.js';
2
+ import { CONFIG, commandSpec as commandSpec$7 } from '../chunk-XCHNL72R.js';
3
+ import { commandSpec } from '../chunk-X52WCHVG.js';
4
+ import { CliExitError, fmt } from '../chunk-BDA3K24R.js';
5
+ import { commandSpec as commandSpec$1 } from '../chunk-4D3QUGGJ.js';
6
+ import { commandSpec as commandSpec$2 } from '../chunk-Z52EXRDT.js';
7
7
  import { commandSpec as commandSpec$3 } from '../chunk-PUGFIZE3.js';
8
8
  import '../chunk-DAZNZPLN.js';
9
- import { commandSpec as commandSpec$4 } from '../chunk-HMRN5QZL.js';
9
+ import { commandSpec as commandSpec$4 } from '../chunk-YZ2H2QXX.js';
10
10
  import { commandSpec as commandSpec$5 } from '../chunk-RZT65DRA.js';
11
11
  import { cli } from '../chunk-33ROL4J5.js';
12
- import { InvalidEnvError } from '../chunk-WFN3ZXGS.js';
13
- import '../chunk-Y7WD33L3.js';
14
- import { ansis_default } from '../chunk-365YVT72.js';
12
+ import { InvalidEnvError } from '../chunk-ZDGB2ZFV.js';
13
+ import '../chunk-WOHPERDH.js';
14
+ import { ansis_default } from '../chunk-2H7TDBLD.js';
15
15
  import { gracefulExit, asyncExitHook } from '../chunk-LHTLO65N.js';
16
- import '../chunk-EVHLEWHL.js';
17
- import { EnvSourceParseError } from '../chunk-K2N2TG4M.js';
16
+ import '../chunk-QDGAWJPB.js';
17
+ import { EnvSourceParseError } from '../chunk-LJKKUJMC.js';
18
18
  import '../chunk-FGMXIEFA.js';
19
19
  import { __commonJS, __name, __toESM } from '../chunk-XN24GZXQ.js';
20
20
  import os2 from 'node:os';
@@ -545,7 +545,7 @@ var is_wsl_default = process2.env.__IS_WSL_TEST__ ? isWsl : isWsl();
545
545
 
546
546
  // package.json
547
547
  var package_default = {
548
- version: "0.0.5"};
548
+ version: "0.0.7"};
549
549
 
550
550
  // src/cli/helpers/telemetry.ts
551
551
  var debug = Debug("varlock:telemetry");
@@ -730,14 +730,14 @@ function buildLazyCommand(commandSpec9, loadCommandFn) {
730
730
  }
731
731
  __name(buildLazyCommand, "buildLazyCommand");
732
732
  var subCommands = /* @__PURE__ */ new Map();
733
- subCommands.set("init", buildLazyCommand(commandSpec, async () => await import('../init.command-DHE2Q6FX.js')));
734
- subCommands.set("load", buildLazyCommand(commandSpec$1, async () => await import('../load.command-GGE4OANH.js')));
735
- subCommands.set("run", buildLazyCommand(commandSpec$2, async () => await import('../run.command-BLL6AL52.js')));
733
+ subCommands.set("init", buildLazyCommand(commandSpec, async () => await import('../init.command-NWFSUQWW.js')));
734
+ subCommands.set("load", buildLazyCommand(commandSpec$1, async () => await import('../load.command-U3ZEZYEV.js')));
735
+ subCommands.set("run", buildLazyCommand(commandSpec$2, async () => await import('../run.command-WNANCLWN.js')));
736
736
  subCommands.set("encrypt", buildLazyCommand(commandSpec$3, async () => await import('../encrypt.command-AGHQ4KTI.js')));
737
- subCommands.set("doctor", buildLazyCommand(commandSpec$4, async () => await import('../doctor.command-NUG3BYDQ.js')));
737
+ subCommands.set("doctor", buildLazyCommand(commandSpec$4, async () => await import('../doctor.command-TKHDKSUY.js')));
738
738
  subCommands.set("help", buildLazyCommand(commandSpec$5, async () => await import('../help.command-B7VWA53B.js')));
739
- subCommands.set("telemetry", buildLazyCommand(commandSpec$6, async () => await import('../telemetry.command-MVL3E366.js')));
740
- subCommands.set("login", buildLazyCommand(commandSpec$7, async () => await import('../login.command-25PKQUGR.js')));
739
+ subCommands.set("telemetry", buildLazyCommand(commandSpec$6, async () => await import('../telemetry.command-QMUHAB3Z.js')));
740
+ subCommands.set("login", buildLazyCommand(commandSpec$7, async () => await import('../login.command-SWBJENRF.js')));
741
741
  (/* @__PURE__ */ __name(async function go() {
742
742
  try {
743
743
  let args = process.argv.slice(2);