varlock 0.3.0 → 0.4.1

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 (65) hide show
  1. package/README.md +23 -10
  2. package/dist/chunk-3U2C5ACW.js +48 -0
  3. package/dist/chunk-3U2C5ACW.js.map +1 -0
  4. package/dist/{chunk-MXZI2FC6.js → chunk-6SS4YD2I.js} +5 -5
  5. package/dist/{chunk-MXZI2FC6.js.map → chunk-6SS4YD2I.js.map} +1 -1
  6. package/dist/{chunk-26ICEAKS.js → chunk-AHEBZW37.js} +9 -8
  7. package/dist/chunk-AHEBZW37.js.map +1 -0
  8. package/dist/{chunk-IG5PPVD7.js → chunk-BGPQX6XO.js} +6 -6
  9. package/dist/{chunk-IG5PPVD7.js.map → chunk-BGPQX6XO.js.map} +1 -1
  10. package/dist/{chunk-MHIFZAPA.js → chunk-CBWJHW3M.js} +7 -7
  11. package/dist/{chunk-MHIFZAPA.js.map → chunk-CBWJHW3M.js.map} +1 -1
  12. package/dist/{chunk-JDMZWNQA.js → chunk-HS2NN4VF.js} +7 -7
  13. package/dist/chunk-HS2NN4VF.js.map +1 -0
  14. package/dist/chunk-I4RYFNPM.js +22 -0
  15. package/dist/chunk-I4RYFNPM.js.map +1 -0
  16. package/dist/{chunk-GEJNYKR4.js → chunk-MBYYRBL6.js} +3 -3
  17. package/dist/{chunk-GEJNYKR4.js.map → chunk-MBYYRBL6.js.map} +1 -1
  18. package/dist/{chunk-VQ5I7WMP.js → chunk-NWY5IIPW.js} +3 -3
  19. package/dist/{chunk-VQ5I7WMP.js.map → chunk-NWY5IIPW.js.map} +1 -1
  20. package/dist/{chunk-WDC5CEKD.js → chunk-ONSMSCMG.js} +5 -5
  21. package/dist/{chunk-WDC5CEKD.js.map → chunk-ONSMSCMG.js.map} +1 -1
  22. package/dist/{chunk-TLXFVH7P.js → chunk-P7WVEZYA.js} +4 -4
  23. package/dist/{chunk-TLXFVH7P.js.map → chunk-P7WVEZYA.js.map} +1 -1
  24. package/dist/{chunk-WZW7QS6M.js → chunk-PCRIVT4T.js} +342 -32
  25. package/dist/chunk-PCRIVT4T.js.map +1 -0
  26. package/dist/{chunk-KKPD7AYU.js → chunk-PIOJV2A7.js} +4 -4
  27. package/dist/{chunk-KKPD7AYU.js.map → chunk-PIOJV2A7.js.map} +1 -1
  28. package/dist/{chunk-LZ52O5WU.js → chunk-RQDMJMKL.js} +14 -23
  29. package/dist/chunk-RQDMJMKL.js.map +1 -0
  30. package/dist/cli/cli-executable.js +33 -25
  31. package/dist/cli/cli-executable.js.map +1 -1
  32. package/dist/config-item-K7KWEJD2.js +5 -0
  33. package/dist/{config-item-2AL7WF23.js.map → config-item-K7KWEJD2.js.map} +1 -1
  34. package/dist/{env-graph-C8s2oqOJ.d.ts → env-graph-COORmJlH.d.ts} +59 -0
  35. package/dist/index.d.ts +2 -2
  36. package/dist/index.js +6 -4
  37. package/dist/index.js.map +1 -1
  38. package/dist/init.command-SZPMB525.js +12 -0
  39. package/dist/{init.command-J4HZL3PB.js.map → init.command-SZPMB525.js.map} +1 -1
  40. package/dist/load.command-XSOTCSGA.js +11 -0
  41. package/dist/{load.command-6DAP7LEX.js.map → load.command-XSOTCSGA.js.map} +1 -1
  42. package/dist/plugin-lib.d.ts +2 -2
  43. package/dist/printenv.command-4HWCHHCY.js +12 -0
  44. package/dist/{printenv.command-7B7SZ2EF.js.map → printenv.command-4HWCHHCY.js.map} +1 -1
  45. package/dist/run.command-DIN6XVLO.js +12 -0
  46. package/dist/{run.command-HVV6XXDR.js.map → run.command-DIN6XVLO.js.map} +1 -1
  47. package/dist/runtime/env.d.ts +1 -1
  48. package/dist/scan.command-4J64EB4Z.js +13 -0
  49. package/dist/{scan.command-Q33VJOPD.js.map → scan.command-4J64EB4Z.js.map} +1 -1
  50. package/dist/telemetry.command-44NGPRGQ.js +11 -0
  51. package/dist/{telemetry.command-HOJDUCKG.js.map → telemetry.command-44NGPRGQ.js.map} +1 -1
  52. package/dist/typegen.command-7BE3K6PU.js +12 -0
  53. package/dist/typegen.command-7BE3K6PU.js.map +1 -0
  54. package/package.json +13 -12
  55. package/dist/chunk-26ICEAKS.js.map +0 -1
  56. package/dist/chunk-JDMZWNQA.js.map +0 -1
  57. package/dist/chunk-LZ52O5WU.js.map +0 -1
  58. package/dist/chunk-WZW7QS6M.js.map +0 -1
  59. package/dist/config-item-2AL7WF23.js +0 -5
  60. package/dist/init.command-J4HZL3PB.js +0 -12
  61. package/dist/load.command-6DAP7LEX.js +0 -11
  62. package/dist/printenv.command-7B7SZ2EF.js +0 -12
  63. package/dist/run.command-HVV6XXDR.js +0 -12
  64. package/dist/scan.command-Q33VJOPD.js +0 -13
  65. package/dist/telemetry.command-HOJDUCKG.js +0 -11
@@ -301,12 +301,30 @@ declare abstract class EnvGraphDataSource {
301
301
  importMeta?: {
302
302
  isImport?: boolean;
303
303
  importKeys?: Array<string>;
304
+ /** true when the @import had a non-static `enabled` parameter (e.g. `enabled=forEnv("dev")`) */
305
+ isConditionallyEnabled?: boolean;
304
306
  };
305
307
  get isImport(): boolean;
306
308
  get isPartialImport(): boolean;
307
309
  get importKeys(): Array<string> | undefined;
308
310
  /** adds a child data source and sets up the correct references in both directions */
309
311
  addChild(child: EnvGraphDataSource, importMeta?: EnvGraphDataSource['importMeta']): Promise<void>;
312
+ /**
313
+ * Whether this data source is environment-specific.
314
+ * A source is env-specific if:
315
+ * - it was auto-loaded for a specific env (e.g., `.env.production` loaded by a DirectoryDataSource)
316
+ * - it has a conditional `@disable` decorator (e.g., `@disable=forEnv(test)`)
317
+ * - it was conditionally imported (e.g., `@import(..., enabled=forEnv("dev"))`)
318
+ * - any of its ancestors are env-specific
319
+ * Used by type generation to filter out env-dependent definitions.
320
+ *
321
+ * Note: `applyForEnv` from filename parsing is only relevant for auto-loaded files.
322
+ * Explicitly imported files (via `@import`) are controlled by the import mechanism,
323
+ * not the auto-load-by-env logic, so their `applyForEnv` is ignored here.
324
+ */
325
+ get isEnvSpecific(): boolean;
326
+ /** true when the source has a `@disable` decorator whose value is not static */
327
+ _hasConditionalDisable?: boolean;
310
328
  /** environment flag key (as set by @envFlag decorator) - only if set within this source */
311
329
  _envFlagKey?: string;
312
330
  /** environment flag key getter that will follow up the parent chain */
@@ -397,6 +415,12 @@ declare class ConfigItem {
397
415
  * internal defs (builtins) are appended last (lowest priority)
398
416
  */
399
417
  get defs(): ConfigItemDefAndSource[];
418
+ /**
419
+ * Like `defs` but filtered to exclude environment-specific data sources.
420
+ * Used by type generation so that generated types are deterministic
421
+ * regardless of which environment is being loaded.
422
+ */
423
+ get defsForTypeGeneration(): ConfigItemDefAndSource[];
400
424
  get description(): string | undefined;
401
425
  get icon(): any;
402
426
  get docsLinks(): {
@@ -448,7 +472,29 @@ declare class ConfigItem {
448
472
  get isCoerced(): boolean;
449
473
  resolve(reset?: boolean): Promise<void>;
450
474
  get isValid(): boolean;
475
+ /**
476
+ * Compute schema-level info for type generation using only non-env-specific definitions.
477
+ * This mirrors the logic of processRequired/processSensitive but:
478
+ * - Uses defsForTypeGeneration (excludes env-specific sources)
479
+ * - Returns a result object instead of mutating item state
480
+ * - Resolves only static decorators from non-env-specific sources
481
+ */
482
+ getTypeGenInfo(): Promise<TypeGenItemInfo>;
451
483
  }
484
+ /** Schema-level info for a config item, computed from non-env-specific definitions only */
485
+ type TypeGenItemInfo = {
486
+ key: string;
487
+ description?: string;
488
+ dataType?: EnvGraphDataType;
489
+ isRequired: boolean;
490
+ isRequiredDynamic: boolean;
491
+ isSensitive: boolean;
492
+ icon?: string;
493
+ docsLinks: Array<{
494
+ url: string;
495
+ description?: string;
496
+ }>;
497
+ };
452
498
 
453
499
  type GraphNodeId = string;
454
500
  type GraphAdjacencyList = Record<GraphNodeId, Array<GraphNodeId>>;
@@ -609,6 +655,19 @@ declare class EnvGraph {
609
655
  getSerializedGraph(): SerializedEnvGraph;
610
656
  get isInvalid(): boolean;
611
657
  generateTypes(lang: string, outputPath: string): Promise<void>;
658
+ /**
659
+ * Resolve @generateTypes decorators and generate type files.
660
+ * This should be called after finishLoad() but before resolveEnvValues().
661
+ * The @generateTypes decorator args (lang, path) are static, so we can resolve them
662
+ * without needing full env resolution. Type info is computed from non-env-specific
663
+ * definitions only, so the output is deterministic regardless of environment.
664
+ *
665
+ * @param opts.ignoreAutoFalse - if true, generate types even if `auto=false` is set.
666
+ * Used by the `varlock typegen` command to force generation.
667
+ */
668
+ generateTypesIfNeeded(opts?: {
669
+ ignoreAutoFalse?: boolean;
670
+ }): Promise<number>;
612
671
  getRootDec(decoratorName: string): RootDecoratorInstance | undefined;
613
672
  getRootDecFns(decoratorName: string): RootDecoratorInstance[];
614
673
  /** plugins installed globally in the graph */
package/dist/index.d.ts CHANGED
@@ -1,5 +1,5 @@
1
- import { E as EnvGraph, a as DotEnvFileDataSource, C as ConfigLoadError, b as SchemaError, d as ValidationError, e as CoercionError, f as ResolutionError } from './env-graph-C8s2oqOJ.js';
2
- export { D as Debugger, S as SerializedEnvGraph, c as createDebug } from './env-graph-C8s2oqOJ.js';
1
+ import { E as EnvGraph, a as DotEnvFileDataSource, C as ConfigLoadError, b as SchemaError, d as ValidationError, e as CoercionError, f as ResolutionError } from './env-graph-COORmJlH.js';
2
+ export { D as Debugger, S as SerializedEnvGraph, c as createDebug } from './env-graph-COORmJlH.js';
3
3
  import { initVarlockEnv } from './runtime/env.js';
4
4
  export { ENV } from './runtime/env.js';
5
5
  export { patchGlobalConsole } from './runtime/patch-console.js';
package/dist/index.js CHANGED
@@ -1,9 +1,10 @@
1
1
  export { patchGlobalResponse } from './chunk-UIOEEWG5.js';
2
2
  export { patchGlobalServerResponse } from './chunk-ZXJ4CEDK.js';
3
- import { checkForConfigErrors } from './chunk-TLXFVH7P.js';
4
- import { loadVarlockEnvGraph } from './chunk-GEJNYKR4.js';
5
- import { loadEnvGraph } from './chunk-VQ5I7WMP.js';
6
- import { ResolutionError, CoercionError, ValidationError, SchemaError, ConfigLoadError, DotEnvFileDataSource, EnvGraph } from './chunk-WZW7QS6M.js';
3
+ import { checkBunVersion } from './chunk-I4RYFNPM.js';
4
+ import { checkForConfigErrors } from './chunk-P7WVEZYA.js';
5
+ import { loadVarlockEnvGraph } from './chunk-MBYYRBL6.js';
6
+ import { loadEnvGraph } from './chunk-NWY5IIPW.js';
7
+ import { ResolutionError, CoercionError, ValidationError, SchemaError, ConfigLoadError, DotEnvFileDataSource, EnvGraph } from './chunk-PCRIVT4T.js';
7
8
  export { createDebug } from './chunk-QZ6HBRJC.js';
8
9
  export { patchGlobalConsole } from './chunk-TYIS6T2T.js';
9
10
  import { initVarlockEnv } from './chunk-WAMBVZL2.js';
@@ -13,6 +14,7 @@ import { __name } from './chunk-6PEHRAEP.js';
13
14
 
14
15
  // src/index.ts
15
16
  async function load() {
17
+ checkBunVersion();
16
18
  const envGraph = await loadVarlockEnvGraph();
17
19
  await envGraph.resolveEnvValues();
18
20
  checkForConfigErrors(envGraph);
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;AAiBA,eAAsB,IAAA,GAAO;AAE3B,EAAA,MAAM,QAAA,GAAW,MAAM,mBAAA,EAAoB;AAC3C,EAAA,MAAM,SAAS,gBAAA,EAAiB;AAChC,EAAA,oBAAA,CAAqB,QAAQ,CAAA;AAG7B,EAAA,OAAA,CAAQ,IAAI,aAAA,GAAgB,IAAA,CAAK,SAAA,CAAU,QAAA,CAAS,oBAAoB,CAAA;AACxE,EAAA,cAAA,EAAe;AAEjB;AAVsB,MAAA,CAAA,IAAA,EAAA,MAAA,CAAA;AAaf,SAAS,yBAAyB,IAAA,EAGtC;AACD,EAAA,IAAI,CAAC,OAAA,CAAQ,GAAA,CAAI,aAAA,SAAsB,EAAC;AACxC,EAAA,MAAM,OAAA,GAAU,IAAA,CAAK,KAAA,CAAM,OAAA,CAAQ,IAAI,aAAa,CAAA;AACpD,EAAA,MAAM,eAAe,EAAC;AACtB,EAAA,KAAA,MAAW,GAAA,IAAO,QAAQ,MAAA,EAAQ;AAChC,IAAA,MAAM,QAAA,GAAW,OAAA,CAAQ,MAAA,CAAO,GAAG,CAAA;AACnC,IAAA,MAAM,WAAA,GAAc,CAAC,QAAA,CAAS,WAAA,IAAe,IAAA,EAAM,gBAAA;AACnD,IAAA,IAAI,CAAC,WAAA,EAAa;AAClB,IAAA,YAAA,CAAa,CAAA,EAAG,IAAA,EAAM,SAAA,IAAa,KAAK,IAAI,GAAG,CAAA,CAAE,CAAA,GAAI,IAAA,CAAK,SAAA,CAAU,OAAA,CAAQ,MAAA,CAAO,GAAG,EAAE,KAAK,CAAA;AAAA,EAC/F;AACA,EAAA,OAAO,YAAA;AACT;AAdgB,MAAA,CAAA,wBAAA,EAAA,0BAAA,CAAA;AAiBT,IAAM,QAAA,GAAW;AAAA;AAAA,EAEtB,QAAA;AAAA,EACA,oBAAA;AAAA;AAAA,EAGA,YAAA;AAAA;AAAA,EAGA,eAAA;AAAA,EACA,WAAA;AAAA,EACA,eAAA;AAAA,EACA,aAAA;AAAA,EACA,eAAA;AAAA;AAAA,EAGA,mBAAA;AAAA,EACA,oBAAA;AAAA,EACA;AACF","file":"index.js","sourcesContent":["import { checkForConfigErrors } from './cli/helpers/error-checks';\nimport { loadVarlockEnvGraph } from './lib/load-graph';\nimport { initVarlockEnv } from './runtime/env';\n\n// Import env-graph components for internal API\nimport {\n EnvGraph,\n loadEnvGraph,\n DotEnvFileDataSource,\n ConfigLoadError,\n SchemaError,\n ValidationError,\n CoercionError,\n ResolutionError,\n type SerializedEnvGraph,\n} from './env-graph';\n\nexport async function load() {\n // TODO: add some options\n const envGraph = await loadVarlockEnvGraph();\n await envGraph.resolveEnvValues();\n checkForConfigErrors(envGraph);\n\n // loadFromSerializedGraph(envGraph.getSerializedGraph());\n process.env.__VARLOCK_ENV = JSON.stringify(envGraph.getSerializedGraph());\n initVarlockEnv();\n // TODO: return resolved env and schema / meta info\n}\n\n\nexport function getBuildTimeReplacements(opts?: {\n objectKey?: string,\n includeSensitive?: boolean,\n}) {\n if (!process.env.__VARLOCK_ENV) return {};\n const envInfo = JSON.parse(process.env.__VARLOCK_ENV) as SerializedEnvGraph;\n const replacements = {} as Record<string, string>;\n for (const key in envInfo.config) {\n const itemInfo = envInfo.config[key];\n const replaceItem = !itemInfo.isSensitive || opts?.includeSensitive;\n if (!replaceItem) continue;\n replacements[`${opts?.objectKey || 'ENV'}.${key}`] = JSON.stringify(envInfo.config[key].value);\n }\n return replacements;\n}\n\n// Internal API for direct env graph manipulation\nexport const internal = {\n // Core classes\n EnvGraph,\n DotEnvFileDataSource,\n\n // Loader function\n loadEnvGraph,\n\n // Error classes\n ConfigLoadError,\n SchemaError,\n ValidationError,\n CoercionError,\n ResolutionError,\n\n // Varlock-specific utilities\n loadVarlockEnvGraph,\n checkForConfigErrors,\n initVarlockEnv,\n};\n\nexport { patchGlobalConsole } from './runtime/patch-console';\nexport { patchGlobalServerResponse } from './runtime/patch-server-response';\nexport { patchGlobalResponse } from './runtime/patch-response';\nexport { ENV } from './runtime/env';\nexport { createDebug, type Debugger } from './lib/debug';\nexport type { SerializedEnvGraph };\n"]}
1
+ {"version":3,"sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAkBA,eAAsB,IAAA,GAAO;AAC3B,EAAA,eAAA,EAAgB;AAEhB,EAAA,MAAM,QAAA,GAAW,MAAM,mBAAA,EAAoB;AAC3C,EAAA,MAAM,SAAS,gBAAA,EAAiB;AAChC,EAAA,oBAAA,CAAqB,QAAQ,CAAA;AAG7B,EAAA,OAAA,CAAQ,IAAI,aAAA,GAAgB,IAAA,CAAK,SAAA,CAAU,QAAA,CAAS,oBAAoB,CAAA;AACxE,EAAA,cAAA,EAAe;AAEjB;AAXsB,MAAA,CAAA,IAAA,EAAA,MAAA,CAAA;AAcf,SAAS,yBAAyB,IAAA,EAGtC;AACD,EAAA,IAAI,CAAC,OAAA,CAAQ,GAAA,CAAI,aAAA,SAAsB,EAAC;AACxC,EAAA,MAAM,OAAA,GAAU,IAAA,CAAK,KAAA,CAAM,OAAA,CAAQ,IAAI,aAAa,CAAA;AACpD,EAAA,MAAM,eAAe,EAAC;AACtB,EAAA,KAAA,MAAW,GAAA,IAAO,QAAQ,MAAA,EAAQ;AAChC,IAAA,MAAM,QAAA,GAAW,OAAA,CAAQ,MAAA,CAAO,GAAG,CAAA;AACnC,IAAA,MAAM,WAAA,GAAc,CAAC,QAAA,CAAS,WAAA,IAAe,IAAA,EAAM,gBAAA;AACnD,IAAA,IAAI,CAAC,WAAA,EAAa;AAClB,IAAA,YAAA,CAAa,CAAA,EAAG,IAAA,EAAM,SAAA,IAAa,KAAK,IAAI,GAAG,CAAA,CAAE,CAAA,GAAI,IAAA,CAAK,SAAA,CAAU,OAAA,CAAQ,MAAA,CAAO,GAAG,EAAE,KAAK,CAAA;AAAA,EAC/F;AACA,EAAA,OAAO,YAAA;AACT;AAdgB,MAAA,CAAA,wBAAA,EAAA,0BAAA,CAAA;AAiBT,IAAM,QAAA,GAAW;AAAA;AAAA,EAEtB,QAAA;AAAA,EACA,oBAAA;AAAA;AAAA,EAGA,YAAA;AAAA;AAAA,EAGA,eAAA;AAAA,EACA,WAAA;AAAA,EACA,eAAA;AAAA,EACA,aAAA;AAAA,EACA,eAAA;AAAA;AAAA,EAGA,mBAAA;AAAA,EACA,oBAAA;AAAA,EACA;AACF","file":"index.js","sourcesContent":["import { checkForConfigErrors } from './cli/helpers/error-checks';\nimport { loadVarlockEnvGraph } from './lib/load-graph';\nimport { initVarlockEnv } from './runtime/env';\nimport { checkBunVersion } from './lib/check-bun-version';\n\n// Import env-graph components for internal API\nimport {\n EnvGraph,\n loadEnvGraph,\n DotEnvFileDataSource,\n ConfigLoadError,\n SchemaError,\n ValidationError,\n CoercionError,\n ResolutionError,\n type SerializedEnvGraph,\n} from './env-graph';\n\nexport async function load() {\n checkBunVersion();\n // TODO: add some options\n const envGraph = await loadVarlockEnvGraph();\n await envGraph.resolveEnvValues();\n checkForConfigErrors(envGraph);\n\n // loadFromSerializedGraph(envGraph.getSerializedGraph());\n process.env.__VARLOCK_ENV = JSON.stringify(envGraph.getSerializedGraph());\n initVarlockEnv();\n // TODO: return resolved env and schema / meta info\n}\n\n\nexport function getBuildTimeReplacements(opts?: {\n objectKey?: string,\n includeSensitive?: boolean,\n}) {\n if (!process.env.__VARLOCK_ENV) return {};\n const envInfo = JSON.parse(process.env.__VARLOCK_ENV) as SerializedEnvGraph;\n const replacements = {} as Record<string, string>;\n for (const key in envInfo.config) {\n const itemInfo = envInfo.config[key];\n const replaceItem = !itemInfo.isSensitive || opts?.includeSensitive;\n if (!replaceItem) continue;\n replacements[`${opts?.objectKey || 'ENV'}.${key}`] = JSON.stringify(envInfo.config[key].value);\n }\n return replacements;\n}\n\n// Internal API for direct env graph manipulation\nexport const internal = {\n // Core classes\n EnvGraph,\n DotEnvFileDataSource,\n\n // Loader function\n loadEnvGraph,\n\n // Error classes\n ConfigLoadError,\n SchemaError,\n ValidationError,\n CoercionError,\n ResolutionError,\n\n // Varlock-specific utilities\n loadVarlockEnvGraph,\n checkForConfigErrors,\n initVarlockEnv,\n};\n\nexport { patchGlobalConsole } from './runtime/patch-console';\nexport { patchGlobalServerResponse } from './runtime/patch-server-response';\nexport { patchGlobalResponse } from './runtime/patch-response';\nexport { ENV } from './runtime/env';\nexport { createDebug, type Debugger } from './lib/debug';\nexport type { SerializedEnvGraph };\n"]}
@@ -0,0 +1,12 @@
1
+ export { commandFn, commandSpec } from './chunk-BGPQX6XO.js';
2
+ import './chunk-Y3ITSQA4.js';
3
+ import './chunk-6SS4YD2I.js';
4
+ import './chunk-PIOJV2A7.js';
5
+ import './chunk-4A54P4EM.js';
6
+ import './chunk-NWY5IIPW.js';
7
+ import './chunk-PCRIVT4T.js';
8
+ import './chunk-QZ6HBRJC.js';
9
+ import './chunk-MIBOBKI4.js';
10
+ import './chunk-6PEHRAEP.js';
11
+ //# sourceMappingURL=init.command-SZPMB525.js.map
12
+ //# sourceMappingURL=init.command-SZPMB525.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":[],"names":[],"mappings":"","file":"init.command-J4HZL3PB.js"}
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"init.command-SZPMB525.js"}
@@ -0,0 +1,11 @@
1
+ export { commandFn, commandSpec } from './chunk-RQDMJMKL.js';
2
+ import './chunk-4A54P4EM.js';
3
+ import './chunk-P7WVEZYA.js';
4
+ import './chunk-MBYYRBL6.js';
5
+ import './chunk-NWY5IIPW.js';
6
+ import './chunk-PCRIVT4T.js';
7
+ import './chunk-QZ6HBRJC.js';
8
+ import './chunk-MIBOBKI4.js';
9
+ import './chunk-6PEHRAEP.js';
10
+ //# sourceMappingURL=load.command-XSOTCSGA.js.map
11
+ //# sourceMappingURL=load.command-XSOTCSGA.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":[],"names":[],"mappings":"","file":"load.command-6DAP7LEX.js"}
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"load.command-XSOTCSGA.js"}
@@ -1,5 +1,5 @@
1
- import { V as VarlockPlugin } from './env-graph-C8s2oqOJ.js';
2
- export { D as Debugger, R as Resolver, c as createDebug } from './env-graph-C8s2oqOJ.js';
1
+ import { V as VarlockPlugin } from './env-graph-COORmJlH.js';
2
+ export { D as Debugger, R as Resolver, c as createDebug } from './env-graph-COORmJlH.js';
3
3
  import '@env-spec/parser';
4
4
  import '@env-spec/utils/type-utils';
5
5
 
@@ -0,0 +1,12 @@
1
+ export { commandFn, commandSpec } from './chunk-HS2NN4VF.js';
2
+ import './chunk-PIOJV2A7.js';
3
+ import './chunk-4A54P4EM.js';
4
+ import './chunk-P7WVEZYA.js';
5
+ import './chunk-MBYYRBL6.js';
6
+ import './chunk-NWY5IIPW.js';
7
+ import './chunk-PCRIVT4T.js';
8
+ import './chunk-QZ6HBRJC.js';
9
+ import './chunk-MIBOBKI4.js';
10
+ import './chunk-6PEHRAEP.js';
11
+ //# sourceMappingURL=printenv.command-4HWCHHCY.js.map
12
+ //# sourceMappingURL=printenv.command-4HWCHHCY.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":[],"names":[],"mappings":"","file":"printenv.command-7B7SZ2EF.js"}
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"printenv.command-4HWCHHCY.js"}
@@ -0,0 +1,12 @@
1
+ export { commandFn, commandSpec } from './chunk-ONSMSCMG.js';
2
+ import './chunk-4A54P4EM.js';
3
+ import './chunk-P7WVEZYA.js';
4
+ import './chunk-MBYYRBL6.js';
5
+ import './chunk-NWY5IIPW.js';
6
+ import './chunk-PCRIVT4T.js';
7
+ import './chunk-QZ6HBRJC.js';
8
+ import './chunk-WAMBVZL2.js';
9
+ import './chunk-MIBOBKI4.js';
10
+ import './chunk-6PEHRAEP.js';
11
+ //# sourceMappingURL=run.command-DIN6XVLO.js.map
12
+ //# sourceMappingURL=run.command-DIN6XVLO.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":[],"names":[],"mappings":"","file":"run.command-HVV6XXDR.js"}
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"run.command-DIN6XVLO.js"}
@@ -1,4 +1,4 @@
1
- import { S as SerializedEnvGraph } from '../env-graph-C8s2oqOJ.js';
1
+ import { S as SerializedEnvGraph } from '../env-graph-COORmJlH.js';
2
2
  import '@env-spec/parser';
3
3
  import '@env-spec/utils/type-utils';
4
4
 
@@ -0,0 +1,13 @@
1
+ export { commandFn, commandSpec, getGitFiles, scanFileForValues, walkDirectory } from './chunk-CBWJHW3M.js';
2
+ import './chunk-Y3ITSQA4.js';
3
+ import './chunk-6SS4YD2I.js';
4
+ import './chunk-PIOJV2A7.js';
5
+ import './chunk-4A54P4EM.js';
6
+ import './chunk-MBYYRBL6.js';
7
+ import './chunk-NWY5IIPW.js';
8
+ import './chunk-PCRIVT4T.js';
9
+ import './chunk-QZ6HBRJC.js';
10
+ import './chunk-MIBOBKI4.js';
11
+ import './chunk-6PEHRAEP.js';
12
+ //# sourceMappingURL=scan.command-4J64EB4Z.js.map
13
+ //# sourceMappingURL=scan.command-4J64EB4Z.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":[],"names":[],"mappings":"","file":"scan.command-Q33VJOPD.js"}
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"scan.command-4J64EB4Z.js"}
@@ -0,0 +1,11 @@
1
+ export { commandFn, commandSpec } from './chunk-AHEBZW37.js';
2
+ import './chunk-6SS4YD2I.js';
3
+ import './chunk-PIOJV2A7.js';
4
+ import './chunk-4A54P4EM.js';
5
+ import './chunk-NWY5IIPW.js';
6
+ import './chunk-PCRIVT4T.js';
7
+ import './chunk-QZ6HBRJC.js';
8
+ import './chunk-MIBOBKI4.js';
9
+ import './chunk-6PEHRAEP.js';
10
+ //# sourceMappingURL=telemetry.command-44NGPRGQ.js.map
11
+ //# sourceMappingURL=telemetry.command-44NGPRGQ.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":[],"names":[],"mappings":"","file":"telemetry.command-HOJDUCKG.js"}
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"telemetry.command-44NGPRGQ.js"}
@@ -0,0 +1,12 @@
1
+ export { commandFn, commandSpec } from './chunk-3U2C5ACW.js';
2
+ import './chunk-PIOJV2A7.js';
3
+ import './chunk-4A54P4EM.js';
4
+ import './chunk-P7WVEZYA.js';
5
+ import './chunk-MBYYRBL6.js';
6
+ import './chunk-NWY5IIPW.js';
7
+ import './chunk-PCRIVT4T.js';
8
+ import './chunk-QZ6HBRJC.js';
9
+ import './chunk-MIBOBKI4.js';
10
+ import './chunk-6PEHRAEP.js';
11
+ //# sourceMappingURL=typegen.command-7BE3K6PU.js.map
12
+ //# sourceMappingURL=typegen.command-7BE3K6PU.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"typegen.command-7BE3K6PU.js"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "varlock",
3
- "version": "0.3.0",
4
- "description": "The unified env var toolkit - load, validate, and secure your environment variables",
3
+ "version": "0.4.1",
4
+ "description": "AI-safe .env files: Schemas for agents, Secrets for humans.",
5
5
  "main": "index.js",
6
6
  "type": "module",
7
7
  "author": "dmno-dev",
@@ -49,7 +49,8 @@
49
49
  "varlock": "./bin/cli.js"
50
50
  },
51
51
  "engines": {
52
- "node": ">=22"
52
+ "node": ">=22",
53
+ "bun": ">=1.3.3"
53
54
  },
54
55
  "dependencies": {},
55
56
  "exports": {
@@ -107,13 +108,13 @@
107
108
  "devDependencies": {
108
109
  "@clack/core": "^1.0.0",
109
110
  "@clack/prompts": "^1.0.0",
110
- "@env-spec/parser": "workspace:*",
111
- "@env-spec/utils": "workspace:*",
112
- "@sindresorhus/is": "catalog:",
113
- "@types/node": "catalog:",
111
+ "@env-spec/parser": "0.1.1",
112
+ "@env-spec/utils": "0.0.0",
113
+ "@sindresorhus/is": "^7.2.0",
114
+ "@types/node": "25.3.2",
114
115
  "@types/semver": "^7.7.1",
115
- "@varlock/ci-env-info": "workspace:^",
116
- "ansis": "catalog:",
116
+ "@varlock/ci-env-info": "^0.0.1",
117
+ "ansis": "^4.2.0",
117
118
  "browser-or-node": "^3.0.0",
118
119
  "ci-info": "^4.3.1",
119
120
  "exit-hook": "^5.1.0",
@@ -121,9 +122,9 @@
121
122
  "is-docker": "^4.0.0",
122
123
  "is-unicode-supported": "^2.1.0",
123
124
  "is-wsl": "^3.1.0",
124
- "outdent": "catalog:",
125
+ "outdent": "^0.8.0",
125
126
  "semver": "^7.7.4",
126
- "tsup": "catalog:",
127
- "vitest": "catalog:"
127
+ "tsup": "^8.5.1",
128
+ "vitest": "^4.0.18"
128
129
  }
129
130
  }
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/cli/commands/telemetry.command.ts"],"names":[],"mappings":";;;;;;;;;;AAWO,IAAM,cAAc,MAAA,CAAO;AAAA,EAChC,IAAA,EAAM,WAAA;AAAA,EACN,WAAA,EAAa,0CAAA;AAAA,EACb,IAAA,EAAM;AAAA,IACJ,IAAA,EAAM;AAAA,MACJ,IAAA,EAAM,YAAA;AAAA,MACN,WAAA,EAAa;AAAA;AACf,GACF;AAAA,EACA,QAAA,EAAU;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA,EAAA,CAAA,CAUR,IAAA;AACJ,CAAC;AAEM,IAAM,SAAA,iCAA6D,GAAA,KAAQ;AAEhF,EAAA,IAAI,CAAC,CAAC,QAAA,EAAU,SAAS,EAAE,QAAA,CAAS,GAAA,CAAI,MAAA,CAAO,IAAI,CAAA,EAAG;AACpD,IAAA,MAAM,IAAI,aAAa,8CAAA,EAAgD;AAAA,MACrE,SAAA,EAAW;AAAA,KACZ,CAAA;AAAA,EACH;AAEA,EAAA,MAAM,SAAA,GAAY,IAAA,CAAK,OAAA,EAAQ,EAAG,UAAU,CAAA;AAC5C,EAAA,MAAM,UAAA,GAAa,IAAA,CAAK,SAAA,EAAW,aAAa,CAAA;AAEhD,EAAA,IAAI;AAEF,IAAA,IAAI,CAAC,UAAA,CAAW,SAAS,CAAA,EAAG;AAC1B,MAAA,MAAM,KAAA,CAAM,SAAA,EAAW,EAAE,SAAA,EAAW,MAAM,CAAA;AAAA,IAC5C;AAGA,IAAA,IAAI,SAA8B,EAAC;AACnC,IAAA,IAAI,UAAA,CAAW,UAAU,CAAA,EAAG;AAC1B,MAAA,MAAM,aAAA,GAAgB,MAAM,QAAA,CAAS,UAAA,EAAY,OAAO,CAAA;AACxD,MAAA,MAAA,GAAS,IAAA,CAAK,MAAM,aAAa,CAAA;AAAA,IACnC;AAGA,IAAA,IAAI,GAAA,CAAI,MAAA,CAAO,IAAA,KAAS,SAAA,SAAkB,iBAAA,GAAoB,IAAA;AAAA,gBAClD,MAAA,CAAO,iBAAA;AACnB,IAAA,MAAM,UAAU,UAAA,EAAY,IAAA,CAAK,UAAU,MAAA,EAAQ,IAAA,EAAM,CAAC,CAAC,CAAA;AAE3D,IAAA,IAAI,GAAA,CAAI,OAAO,IAAA,EAAM;AACnB,MAAA,OAAA,CAAQ,IAAI,uDAAkD,CAAA;AAAA,IAChE,CAAA,MAAO;AACL,MAAA,OAAA,CAAQ,IAAI,wDAAmD,CAAA;AAAA,IACjE;AACA,IAAA,OAAA,CAAQ,GAAA,CAAI,aAAA,EAAe,GAAA,CAAI,QAAA,CAAS,UAAU,CAAC,CAAA;AAAA,EACrD,SAAS,KAAA,EAAO;AACd,IAAA,OAAA,CAAQ,KAAA,CAAM,mCAAmC,KAAK,CAAA;AACtD,IAAA,OAAO,aAAa,CAAC,CAAA;AAAA,EACvB;AACF,CAAA,EAvCmE,WAAA","file":"chunk-26ICEAKS.js","sourcesContent":["import { homedir } from 'node:os';\nimport { join } from 'node:path';\nimport { mkdir, writeFile, readFile } from 'node:fs/promises';\nimport { existsSync } from 'node:fs';\nimport { define } from 'gunshi';\nimport { type TypedGunshiCommandFn } from '../helpers/gunshi-type-utils';\nimport { gracefulExit } from 'exit-hook';\nimport { fmt } from '../helpers/pretty-format';\nimport { CliExitError } from '../helpers/exit-error';\n\n\nexport const commandSpec = define({\n name: 'telemetry',\n description: 'Enable/disable anonymous usage analytics',\n args: {\n mode: {\n type: 'positional',\n description: '\"enable\" or \"disable\"',\n },\n },\n examples: `\nOpts in/out of anonymous usage analytics. This command creates/updates a configuration\nfile at ~/.varlock/config.json saving your preference.\n\nExamples:\n varlock telemetry disable # Opt out of telemetry\n varlock telemetry enable # Opt in to telemetry\n\n💡 Tip: You can also temporarily opt out by setting VARLOCK_TELEMETRY_DISABLED=1\nFor more information, visit https://varlock.dev/guides/telemetry/\n `.trim(),\n});\n\nexport const commandFn: TypedGunshiCommandFn<typeof commandSpec> = async (ctx) => {\n // TODO: remove this when gunshi supports types/validation for positional args\n if (!['enable', 'disable'].includes(ctx.values.mode)) {\n throw new CliExitError('additional arg must be \"enable\" or \"disable\"', {\n forceExit: true,\n });\n }\n\n const configDir = join(homedir(), '.varlock');\n const configPath = join(configDir, 'config.json');\n\n try {\n // Create .varlock directory if it doesn't exist\n if (!existsSync(configDir)) {\n await mkdir(configDir, { recursive: true });\n }\n\n // Read existing config if it exists\n let config: Record<string, any> = {};\n if (existsSync(configPath)) {\n const configContent = await readFile(configPath, 'utf-8');\n config = JSON.parse(configContent);\n }\n\n // update config `telemetryDisabled` setting\n if (ctx.values.mode === 'disable') config.telemetryDisabled = true;\n else delete config.telemetryDisabled;\n await writeFile(configPath, JSON.stringify(config, null, 2));\n\n if (ctx.values.mode) {\n console.log('✅ Successfully enabled anonymous usage analytics');\n } else {\n console.log('✅ Successfully disabled anonymous usage analytics');\n }\n console.log('> saved in:', fmt.filePath(configPath));\n } catch (error) {\n console.error('Failed to opt out of analytics:', error);\n return gracefulExit(1);\n }\n};\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/cli/commands/printenv.command.ts"],"names":[],"mappings":";;;;;;;;AAQO,IAAM,cAAc,MAAA,CAAO;AAAA,EAChC,IAAA,EAAM,UAAA;AAAA,EACN,WAAA,EAAa,2DAAA;AAAA,EACb,IAAA,EAAM;AAAA,IACJ,IAAA,EAAM;AAAA,MACJ,IAAA,EAAM,QAAA;AAAA,MACN,KAAA,EAAO,GAAA;AAAA,MACP,WAAA,EAAa;AAAA;AACf,GACF;AAAA,EACA,QAAA,EAAU;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;;AAAA;AAAA;AAAA,EAAA,CAAA,CAcR,IAAA;AACJ,CAAC;AAEM,IAAM,SAAA,iCAA6D,GAAA,KAAQ;AAChF,EAAA,MAAM,WAAA,GAAc,GAAA,CAAI,WAAA,IAAe,EAAC;AACxC,EAAA,IAAI,CAAC,YAAY,MAAA,EAAQ;AACvB,IAAA,MAAM,IAAI,aAAa,0CAAA,EAA4C;AAAA,MACjE,UAAA,EAAY;AAAA,KACb,CAAA;AAAA,EACH;AACA,EAAA,MAAM,OAAA,GAAU,YAAY,CAAC,CAAA;AAE7B,EAAA,MAAM,QAAA,GAAW,MAAM,mBAAA,CAAoB;AAAA,IACzC,aAAA,EAAe,IAAI,MAAA,CAAO;AAAA,GAC3B,CAAA;AACD,EAAA,oBAAA,CAAqB,QAAQ,CAAA;AAE7B,EAAA,IAAI,EAAE,OAAA,IAAW,QAAA,CAAS,YAAA,CAAA,EAAe;AACvC,IAAA,MAAM,IAAI,YAAA,CAAa,CAAA,UAAA,EAAa,OAAO,CAAA,qBAAA,CAAuB,CAAA;AAAA,EACpE;AAGA,EAAA,MAAM,QAAA,CAAS,oBAAoB,OAAO,CAAA;AAE1C,EAAA,MAAM,IAAA,GAAO,QAAA,CAAS,YAAA,CAAa,OAAO,CAAA;AAC1C,EAAA,IAAI,IAAA,CAAK,oBAAoB,OAAA,EAAS;AACpC,IAAA,KAAA,MAAW,GAAA,IAAO,KAAK,MAAA,EAAQ;AAC7B,MAAA,OAAA,CAAQ,KAAA,CAAM,CAAA,UAAA,EAAM,GAAA,CAAI,OAAO,CAAA,CAAE,CAAA;AAAA,IACnC;AACA,IAAA,OAAO,aAAa,CAAC,CAAA;AAAA,EACvB;AAEA,EAAA,MAAM,QAAQ,IAAA,CAAK,aAAA;AACnB,EAAA,IAAI,KAAA,KAAU,MAAA,IAAa,KAAA,KAAU,IAAA,EAAM;AACzC,IAAA,OAAA,CAAQ,IAAI,EAAE,CAAA;AAAA,EAChB,CAAA,MAAO;AACL,IAAA,OAAA,CAAQ,GAAA,CAAI,MAAA,CAAO,KAAK,CAAC,CAAA;AAAA,EAC3B;AACF,CAAA,EAnCmE,WAAA","file":"chunk-JDMZWNQA.js","sourcesContent":["import { define } from 'gunshi';\nimport { gracefulExit } from 'exit-hook';\n\nimport { loadVarlockEnvGraph } from '../../lib/load-graph';\nimport { checkForSchemaErrors } from '../helpers/error-checks';\nimport { type TypedGunshiCommandFn } from '../helpers/gunshi-type-utils';\nimport { CliExitError } from '../helpers/exit-error';\n\nexport const commandSpec = define({\n name: 'printenv',\n description: 'Print the resolved value of a single environment variable',\n args: {\n path: {\n type: 'string',\n short: 'p',\n description: 'Path to a specific .env file or directory (with trailing slash) to use as the entry point',\n },\n },\n examples: `\nPrints the resolved value of a single environment variable.\nUseful within larger shell commands where you need a single env var value.\n\nExamples:\n varlock printenv MY_VAR # Print the value of MY_VAR\n varlock printenv --path .env.prod MY_VAR # Use a specific .env file\n varlock printenv --path ./config/ MY_VAR # Use a specific directory\n\n📍 Note: Use sh -c to embed this in shell commands, e.g.:\n sh -c 'do-something --token $(varlock printenv MY_TOKEN)'\n\n💡 Tip: Unlike \\`varlock run -- echo $MY_VAR\\`, this works because the shell\n expansion happens after varlock has printed the value.\n `.trim(),\n});\n\nexport const commandFn: TypedGunshiCommandFn<typeof commandSpec> = async (ctx) => {\n const positionals = ctx.positionals ?? [];\n if (!positionals.length) {\n throw new CliExitError('Missing required argument: variable name', {\n suggestion: 'Run `varlock printenv MY_VAR` to print the value of MY_VAR',\n });\n }\n const varName = positionals[0];\n\n const envGraph = await loadVarlockEnvGraph({\n entryFilePath: ctx.values.path,\n });\n checkForSchemaErrors(envGraph);\n\n if (!(varName in envGraph.configSchema)) {\n throw new CliExitError(`Variable \"${varName}\" not found in schema`);\n }\n\n // Resolve only the requested item and its transitive dependencies\n await envGraph.resolveItemWithDeps(varName);\n\n const item = envGraph.configSchema[varName];\n if (item.validationState === 'error') {\n for (const err of item.errors) {\n console.error(`🚨 ${err.message}`);\n }\n return gracefulExit(1);\n }\n\n const value = item.resolvedValue;\n if (value === undefined || value === null) {\n console.log('');\n } else {\n console.log(String(value));\n }\n};\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/cli/commands/load.command.ts"],"names":[],"mappings":"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","file":"chunk-LZ52O5WU.js","sourcesContent":["import { define } from 'gunshi';\nimport _ from '@env-spec/utils/my-dash';\n\nimport { loadVarlockEnvGraph } from '../../lib/load-graph';\nimport { getItemSummary } from '../../lib/formatting';\nimport { checkForConfigErrors, checkForNoEnvFiles, checkForSchemaErrors } from '../helpers/error-checks';\nimport { type TypedGunshiCommandFn } from '../helpers/gunshi-type-utils';\nimport path from 'node:path';\nimport { FileBasedDataSource } from '../../env-graph';\n\nexport const commandSpec = define({\n name: 'load',\n description: 'Load env according to schema and resolve values',\n args: {\n format: {\n type: 'enum',\n short: 'f',\n choices: ['pretty', 'json', 'env', 'json-full'],\n description: 'Format of output',\n default: 'pretty',\n },\n compact: {\n type: 'boolean',\n description: 'Use compact format (for json-full: no indentation, for env: skip undefined values)',\n },\n 'show-all': {\n type: 'boolean',\n description: 'When load is failing, show all items rather than only failing items',\n },\n env: {\n type: 'string',\n description: 'Set the environment (e.g., production, development, etc) - will be overridden by @currentEnv in the schema if present',\n },\n path: {\n type: 'string',\n short: 'p',\n description: 'Path to a specific .env file or directory to use as the entry point',\n },\n },\n examples: `\nLoads and validates environment variables according to your .env files, and prints the results.\nUseful for debugging locally, and in CI to print out a summary of env vars.\n\nExamples:\n varlock load # Load and validate with pretty output\n varlock load --format json # Output in JSON format\n varlock load --show-all # Show all items when validation fails\n varlock load --path .env.prod # Load from a specific .env file\n varlock looad --compact # Use compact format - skips undefined values, no indentation for json-full\n varlock load --env production # Load for a specific environment (⚠️ ignored if using @currentEnv!)\n`.trim(),\n});\n\n\nexport const commandFn: TypedGunshiCommandFn<typeof commandSpec> = async (ctx) => {\n const { format, compact, 'show-all': showAll } = ctx.values;\n\n const envGraph = await loadVarlockEnvGraph({\n currentEnvFallback: ctx.values.env,\n entryFilePath: ctx.values.path,\n });\n checkForSchemaErrors(envGraph);\n checkForNoEnvFiles(envGraph);\n\n if (!envGraph.rootDataSource) throw new Error('expected root data source to be set');\n\n await envGraph.resolveEnvValues();\n\n // ideally we could be smarter about generating types without needing to resolve values\n // but for now the decorators are all resolved as part of the general resolution process\n const generateTypesDecs = envGraph.getRootDecFns('generateTypes');\n for (const generateTypesDec of generateTypesDecs) {\n const typeGenSettings = await generateTypesDec.resolve();\n\n // we skip generating types if `@generateTypes` was not in the main file\n // unless the `executeWhenImported` flag is set\n if (generateTypesDec.dataSource.isImport && !typeGenSettings.obj.executeWhenImported) continue;\n\n if (!typeGenSettings.obj.lang) throw new Error('@generateTypes - must set `lang` arg');\n if (typeGenSettings.obj.lang !== 'ts') throw new Error(`@generateTypes - unsupported language: ${typeGenSettings.obj.lang}`);\n if (!typeGenSettings.obj.path) throw new Error('@generateTypes - must set `path` arg');\n if (!_.isString(typeGenSettings.obj.path)) throw new Error('@generateTypes - `path` arg must be a string');\n\n const outputPath = generateTypesDec.dataSource instanceof FileBasedDataSource\n ? path.resolve(generateTypesDec.dataSource.fullPath, '..', typeGenSettings.obj.path)\n : typeGenSettings.obj.path;\n\n await envGraph.generateTypes(typeGenSettings.obj.lang, outputPath);\n }\n\n checkForConfigErrors(envGraph, { showAll });\n\n if (format === 'pretty') {\n for (const itemKey of envGraph.sortedConfigKeys) {\n const item = envGraph.configSchema[itemKey];\n console.log(getItemSummary(item));\n }\n } else if (format === 'json') {\n console.log(JSON.stringify(envGraph.getResolvedEnvObject(), null, 2));\n } else if (format === 'json-full') {\n const indent = compact ? 0 : 2;\n console.log(JSON.stringify(envGraph.getSerializedGraph(), null, indent));\n } else if (format === 'env') {\n const resolvedEnv = envGraph.getResolvedEnvObject();\n const skipUndefined = compact === true;\n\n for (const key in resolvedEnv) {\n const value = resolvedEnv[key];\n\n if (value === undefined && skipUndefined) {\n continue;\n }\n\n let strValue: string;\n if (value === undefined) {\n strValue = '';\n } else if (typeof value === 'string') {\n strValue = `\"${value.replaceAll('\"', '\\\\\"').replaceAll('\\n', '\\\\n')}\"`;\n } else {\n strValue = JSON.stringify(value);\n }\n console.log(`${key}=${strValue}`);\n }\n } else {\n throw new Error(`Unknown format: ${format}`);\n }\n\n // const resolvedEnv = envGraph.getResolvedEnvObject();\n // console.log(resolvedEnv);\n};\n"]}