varlock 0.9.0 → 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (113) hide show
  1. package/dist/auto-load.js +3 -3
  2. package/dist/{chunk-LRT2CHDN.js → chunk-2ABRAKHE.js} +4 -4
  3. package/dist/{chunk-LRT2CHDN.js.map → chunk-2ABRAKHE.js.map} +1 -1
  4. package/dist/chunk-2EEXFFKL.js +149 -0
  5. package/dist/chunk-2EEXFFKL.js.map +1 -0
  6. package/dist/{chunk-6CCHLM3U.js → chunk-2PFIYNFA.js} +3 -2
  7. package/dist/chunk-2PFIYNFA.js.map +1 -0
  8. package/dist/chunk-6DXWXIQV.js +1092 -0
  9. package/dist/chunk-6DXWXIQV.js.map +1 -0
  10. package/dist/{chunk-DGXO2UN7.js → chunk-6JKWTWLB.js} +80 -10
  11. package/dist/chunk-6JKWTWLB.js.map +1 -0
  12. package/dist/chunk-7WB7HK5Z.js +21 -0
  13. package/dist/chunk-7WB7HK5Z.js.map +1 -0
  14. package/dist/chunk-AMNNQL7K.js +26 -0
  15. package/dist/chunk-AMNNQL7K.js.map +1 -0
  16. package/dist/{chunk-P5H6JZZR.js → chunk-CKWXLVMV.js} +10 -9
  17. package/dist/chunk-CKWXLVMV.js.map +1 -0
  18. package/dist/{chunk-WLPAS4VQ.js → chunk-FTVXXJMG.js} +3 -3
  19. package/dist/{chunk-WLPAS4VQ.js.map → chunk-FTVXXJMG.js.map} +1 -1
  20. package/dist/{chunk-YBV5OJW6.js → chunk-GBCB7Y3B.js} +5 -4
  21. package/dist/chunk-GBCB7Y3B.js.map +1 -0
  22. package/dist/chunk-HDKXXS2X.js +1959 -0
  23. package/dist/chunk-HDKXXS2X.js.map +1 -0
  24. package/dist/chunk-JEZQ2DFL.js +198 -0
  25. package/dist/chunk-JEZQ2DFL.js.map +1 -0
  26. package/dist/{chunk-LAI7XVJU.js → chunk-LOIJO4MO.js} +4 -4
  27. package/dist/{chunk-LAI7XVJU.js.map → chunk-LOIJO4MO.js.map} +1 -1
  28. package/dist/{chunk-QYICMUCP.js → chunk-NJONB6CB.js} +5 -5
  29. package/dist/{chunk-QYICMUCP.js.map → chunk-NJONB6CB.js.map} +1 -1
  30. package/dist/{chunk-K5536FEN.js → chunk-QJ6NMN5H.js} +5 -5
  31. package/dist/{chunk-K5536FEN.js.map → chunk-QJ6NMN5H.js.map} +1 -1
  32. package/dist/{chunk-27CA3M4N.js → chunk-QNTIIXD5.js} +5 -5
  33. package/dist/{chunk-27CA3M4N.js.map → chunk-QNTIIXD5.js.map} +1 -1
  34. package/dist/{chunk-C4ITUXON.js → chunk-U7RQPX5K.js} +350 -1056
  35. package/dist/chunk-U7RQPX5K.js.map +1 -0
  36. package/dist/{chunk-Q2XA45LC.js → chunk-UKFHSMKY.js} +5 -5
  37. package/dist/{chunk-Q2XA45LC.js.map → chunk-UKFHSMKY.js.map} +1 -1
  38. package/dist/{chunk-N2E6DRSH.js → chunk-UUDTMOJS.js} +4 -4
  39. package/dist/{chunk-N2E6DRSH.js.map → chunk-UUDTMOJS.js.map} +1 -1
  40. package/dist/chunk-V2MTE4J6.js +426 -0
  41. package/dist/chunk-V2MTE4J6.js.map +1 -0
  42. package/dist/{chunk-ZZCDYV63.js → chunk-VODQDF4Q.js} +5 -5
  43. package/dist/{chunk-ZZCDYV63.js.map → chunk-VODQDF4Q.js.map} +1 -1
  44. package/dist/{chunk-2R7CWGVL.js → chunk-XADO6HQG.js} +7 -7
  45. package/dist/{chunk-2R7CWGVL.js.map → chunk-XADO6HQG.js.map} +1 -1
  46. package/dist/{chunk-GWQJHKYT.js → chunk-XTOUG72X.js} +5 -5
  47. package/dist/{chunk-GWQJHKYT.js.map → chunk-XTOUG72X.js.map} +1 -1
  48. package/dist/cli/cli-executable.js +48 -32
  49. package/dist/cli/cli-executable.js.map +1 -1
  50. package/dist/config-item-2FQ6I6PO.js +7 -0
  51. package/dist/{config-item-5WIOGFHA.js.map → config-item-2FQ6I6PO.js.map} +1 -1
  52. package/dist/dist-WGIHRGBZ.js +4 -0
  53. package/dist/dist-WGIHRGBZ.js.map +1 -0
  54. package/dist/dotenv-compat.js +3 -3
  55. package/dist/encrypt.command-K2SBJVQ5.js +14 -0
  56. package/dist/encrypt.command-K2SBJVQ5.js.map +1 -0
  57. package/dist/{env-graph-DaF8Aebq.d.ts → env-graph-CXTsI2Eg.d.ts} +3 -0
  58. package/dist/explain.command-E6MR72IY.js +15 -0
  59. package/dist/{explain.command-NST64XIO.js.map → explain.command-E6MR72IY.js.map} +1 -1
  60. package/dist/index.d.ts +2 -2
  61. package/dist/index.js +11 -8
  62. package/dist/index.js.map +1 -1
  63. package/dist/init.command-TGDNXHJ7.js +13 -0
  64. package/dist/{init.command-4Z3VRGOV.js.map → init.command-TGDNXHJ7.js.map} +1 -1
  65. package/dist/install-plugin.command-Z2S5DIFS.js +13 -0
  66. package/dist/{install-plugin.command-F244Y3RI.js.map → install-plugin.command-Z2S5DIFS.js.map} +1 -1
  67. package/dist/load.command-K2IH3646.js +15 -0
  68. package/dist/{load.command-JTUAYW2W.js.map → load.command-K2IH3646.js.map} +1 -1
  69. package/dist/lock.command-GL4CLXED.js +7 -0
  70. package/dist/lock.command-GL4CLXED.js.map +1 -0
  71. package/dist/plugin-lib.d.ts +2 -2
  72. package/dist/plugin-lib.js +2 -2
  73. package/dist/printenv.command-34LGQT6W.js +15 -0
  74. package/dist/{printenv.command-NAHG4T76.js.map → printenv.command-34LGQT6W.js.map} +1 -1
  75. package/dist/reveal.command-WOHYRSYO.js +15 -0
  76. package/dist/reveal.command-WOHYRSYO.js.map +1 -0
  77. package/dist/run.command-PPC2X2N7.js +16 -0
  78. package/dist/{run.command-2IUKOZHD.js.map → run.command-PPC2X2N7.js.map} +1 -1
  79. package/dist/runtime/env.d.ts +1 -1
  80. package/dist/scan.command-4DJBQEML.js +16 -0
  81. package/dist/{scan.command-BEPDT3YQ.js.map → scan.command-4DJBQEML.js.map} +1 -1
  82. package/dist/telemetry.command-LIOCXWQK.js +13 -0
  83. package/dist/{telemetry.command-E6GIZKTJ.js.map → telemetry.command-LIOCXWQK.js.map} +1 -1
  84. package/dist/typegen.command-COL35ALE.js +15 -0
  85. package/dist/{typegen.command-JGJUSFGG.js.map → typegen.command-COL35ALE.js.map} +1 -1
  86. package/native-bins/darwin/VarlockEnclave.app/Contents/CodeResources +0 -0
  87. package/native-bins/darwin/VarlockEnclave.app/Contents/Info.plist +28 -0
  88. package/native-bins/darwin/VarlockEnclave.app/Contents/MacOS/varlock-local-encrypt +0 -0
  89. package/native-bins/darwin/VarlockEnclave.app/Contents/Resources/AppIcon.icns +0 -0
  90. package/native-bins/darwin/VarlockEnclave.app/Contents/Resources/varlock-menu-locked.pdf +0 -0
  91. package/native-bins/darwin/VarlockEnclave.app/Contents/Resources/varlock-menu-unlocked.pdf +0 -0
  92. package/native-bins/darwin/VarlockEnclave.app/Contents/_CodeSignature/CodeResources +150 -0
  93. package/native-bins/linux-arm64/varlock-local-encrypt +0 -0
  94. package/native-bins/linux-x64/varlock-local-encrypt +0 -0
  95. package/native-bins/win32-x64/varlock-local-encrypt.exe +0 -0
  96. package/package.json +9 -2
  97. package/dist/chunk-6CCHLM3U.js.map +0 -1
  98. package/dist/chunk-C4ITUXON.js.map +0 -1
  99. package/dist/chunk-DGXO2UN7.js.map +0 -1
  100. package/dist/chunk-P5H6JZZR.js.map +0 -1
  101. package/dist/chunk-S5EU3LTR.js +0 -83
  102. package/dist/chunk-S5EU3LTR.js.map +0 -1
  103. package/dist/chunk-YBV5OJW6.js.map +0 -1
  104. package/dist/config-item-5WIOGFHA.js +0 -5
  105. package/dist/explain.command-NST64XIO.js +0 -12
  106. package/dist/init.command-4Z3VRGOV.js +0 -11
  107. package/dist/install-plugin.command-F244Y3RI.js +0 -11
  108. package/dist/load.command-JTUAYW2W.js +0 -12
  109. package/dist/printenv.command-NAHG4T76.js +0 -12
  110. package/dist/run.command-2IUKOZHD.js +0 -13
  111. package/dist/scan.command-BEPDT3YQ.js +0 -13
  112. package/dist/telemetry.command-E6GIZKTJ.js +0 -11
  113. package/dist/typegen.command-JGJUSFGG.js +0 -12
@@ -1,7 +1,7 @@
1
1
  import { gracefulExit } from './chunk-CHQDS2PI.js';
2
- import { getItemSummary, joinAndCompact } from './chunk-YBV5OJW6.js';
3
- import { ansis_default, FileBasedDataSource } from './chunk-C4ITUXON.js';
4
- import { VarlockError, my_dash_default } from './chunk-6CCHLM3U.js';
2
+ import { getItemSummary, joinAndCompact } from './chunk-GBCB7Y3B.js';
3
+ import { ansis_default, FileBasedDataSource } from './chunk-U7RQPX5K.js';
4
+ import { VarlockError, my_dash_default } from './chunk-2PFIYNFA.js';
5
5
  import { __name } from './chunk-6PEHRAEP.js';
6
6
 
7
7
  // src/cli/helpers/error-checks.ts
@@ -132,5 +132,5 @@ function checkForConfigErrors(envGraph, opts) {
132
132
  __name(checkForConfigErrors, "checkForConfigErrors");
133
133
 
134
134
  export { InvalidEnvError, checkForConfigErrors, checkForNoEnvFiles, checkForSchemaErrors, showPluginWarnings };
135
- //# sourceMappingURL=chunk-Q2XA45LC.js.map
136
- //# sourceMappingURL=chunk-Q2XA45LC.js.map
135
+ //# sourceMappingURL=chunk-UKFHSMKY.js.map
136
+ //# sourceMappingURL=chunk-UKFHSMKY.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/cli/helpers/error-checks.ts"],"names":[],"mappings":"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","file":"chunk-Q2XA45LC.js","sourcesContent":["import ansis from 'ansis';\nimport { gracefulExit } from 'exit-hook';\nimport _ from '@env-spec/utils/my-dash';\nimport { EnvGraph, ConfigItem, FileBasedDataSource } from '../../env-graph';\nimport { getItemSummary, joinAndCompact } from '../../lib/formatting';\nimport { VarlockError } from '../../env-graph/lib/errors';\n\n\nfunction showErrorLocationDetails(err: Error) {\n if (!(err instanceof VarlockError) || !err.location) return;\n const errLoc = err.location;\n const errPreview = [\n errLoc.lineStr,\n `${ansis.gray('-'.repeat(errLoc.colNumber - 1))}${ansis.red('^')}`,\n ].join('\\n');\n\n console.error('');\n console.error(`📂 ${errLoc.id}:${errLoc.lineNumber}:${errLoc.colNumber}`);\n console.error(errPreview);\n}\n\nexport function checkForNoEnvFiles(envGraph: EnvGraph) {\n if (Object.keys(envGraph.configSchema).length === 0) {\n const displayPath = envGraph.basePath ?? process.cwd();\n const hasLoadedFiles = envGraph.sortedDataSources.some((s) => s instanceof FileBasedDataSource);\n if (!hasLoadedFiles) {\n console.error(`🚨 No .env files found in ${displayPath}\\n`);\n console.error('Run `varlock init` to create a .env.schema file, or use `--path` to specify a file or directory.');\n } else {\n console.error(`🚨 No config items defined in ${displayPath}\\n`);\n console.error('Add items to your .env.schema file to get started.');\n }\n return gracefulExit(1);\n }\n}\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.sortedDataSources) {\n // do we care about loading errors from disabled sources?\n // if (source.disabled) continue;\n\n if (source.loadingError) {\n console.error(`🚨 Error encountered while loading ${source.label}\\n`);\n\n console.error(source.loadingError.message);\n showErrorLocationDetails(source.loadingError);\n\n // For plugin loading errors, show the full stack trace since it's usually\n // a runtime error from executing the plugin code\n if (source.loadingError.stack && !(source.loadingError instanceof VarlockError)) {\n console.error(`\\n${ansis.dim('Stack trace:')}`);\n console.error(ansis.dim(source.loadingError.stack));\n }\n\n return gracefulExit(1);\n }\n // TODO: unify this with the above!\n if (source.schemaErrors.length) {\n console.error(`🚨 Error(s) encountered in ${source.label}`);\n\n for (const schemaErr of source.schemaErrors) {\n console.error(`- ${schemaErr.message}`);\n showErrorLocationDetails(schemaErr);\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\n\nexport function showPluginWarnings(envGraph: EnvGraph) {\n for (const plugin of envGraph.plugins) {\n if (!plugin.warnings.length) continue;\n for (const warning of plugin.warnings) {\n console.error(ansis.yellow(`[WARNING] ${warning.message}`));\n if (warning.tip) {\n for (const line of warning.tip.split('\\n')) {\n console.error(` ${line}`);\n }\n }\n }\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 /** Log errors to stderr but don't throw — used when the caller will handle errors itself (e.g. json-full output) */\n noThrow?: boolean;\n}) {\n // check for root decorator \"execution\"\n for (const source of envGraph.sortedDataSources) {\n if (source.resolutionErrors.length) {\n console.error(`🚨 Root decorator error(s) in ${source.label}`);\n\n for (const err of source.resolutionErrors) {\n console.error(`- ${err.message}`);\n if (err instanceof VarlockError && err.tip) {\n for (const line of err.tip.split('\\n')) {\n console.error(` ${line}`);\n }\n }\n showErrorLocationDetails(err);\n }\n }\n }\n\n\n\n const failingItems = envGraph.sortedConfigKeys\n .map((k) => envGraph.configSchema[k])\n .filter((item) => item.validationState === 'error');\n\n // TODO: use service.isValid?\n if (failingItems.length > 0) {\n console.error(`\\n🚨 🚨 🚨 ${ansis.bold.underline('Configuration is currently invalid ')} 🚨 🚨 🚨\\n`);\n console.error('Invalid items:\\n');\n\n _.each(failingItems, (item: ConfigItem) => {\n console.error(getItemSummary(item));\n console.error();\n });\n if (opts?.showAll) {\n console.error();\n console.error(joinAndCompact([\n 'Valid items:',\n ansis.italic.gray('(remove `--show-all` flag to hide)'),\n ]));\n console.error();\n const validItems = envGraph.sortedConfigKeys\n .map((k) => envGraph.configSchema[k])\n .filter((i) => !!i.isValid);\n _.each(validItems, (item: ConfigItem) => {\n console.error(getItemSummary(item));\n });\n }\n\n showPluginWarnings(envGraph);\n if (!opts?.noThrow) {\n throw new InvalidEnvError();\n }\n }\n}\n"]}
1
+ {"version":3,"sources":["../src/cli/helpers/error-checks.ts"],"names":[],"mappings":"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","file":"chunk-UKFHSMKY.js","sourcesContent":["import ansis from 'ansis';\nimport { gracefulExit } from 'exit-hook';\nimport _ from '@env-spec/utils/my-dash';\nimport { EnvGraph, ConfigItem, FileBasedDataSource } from '../../env-graph';\nimport { getItemSummary, joinAndCompact } from '../../lib/formatting';\nimport { VarlockError } from '../../env-graph/lib/errors';\n\n\nfunction showErrorLocationDetails(err: Error) {\n if (!(err instanceof VarlockError) || !err.location) return;\n const errLoc = err.location;\n const errPreview = [\n errLoc.lineStr,\n `${ansis.gray('-'.repeat(errLoc.colNumber - 1))}${ansis.red('^')}`,\n ].join('\\n');\n\n console.error('');\n console.error(`📂 ${errLoc.id}:${errLoc.lineNumber}:${errLoc.colNumber}`);\n console.error(errPreview);\n}\n\nexport function checkForNoEnvFiles(envGraph: EnvGraph) {\n if (Object.keys(envGraph.configSchema).length === 0) {\n const displayPath = envGraph.basePath ?? process.cwd();\n const hasLoadedFiles = envGraph.sortedDataSources.some((s) => s instanceof FileBasedDataSource);\n if (!hasLoadedFiles) {\n console.error(`🚨 No .env files found in ${displayPath}\\n`);\n console.error('Run `varlock init` to create a .env.schema file, or use `--path` to specify a file or directory.');\n } else {\n console.error(`🚨 No config items defined in ${displayPath}\\n`);\n console.error('Add items to your .env.schema file to get started.');\n }\n return gracefulExit(1);\n }\n}\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.sortedDataSources) {\n // do we care about loading errors from disabled sources?\n // if (source.disabled) continue;\n\n if (source.loadingError) {\n console.error(`🚨 Error encountered while loading ${source.label}\\n`);\n\n console.error(source.loadingError.message);\n showErrorLocationDetails(source.loadingError);\n\n // For plugin loading errors, show the full stack trace since it's usually\n // a runtime error from executing the plugin code\n if (source.loadingError.stack && !(source.loadingError instanceof VarlockError)) {\n console.error(`\\n${ansis.dim('Stack trace:')}`);\n console.error(ansis.dim(source.loadingError.stack));\n }\n\n return gracefulExit(1);\n }\n // TODO: unify this with the above!\n if (source.schemaErrors.length) {\n console.error(`🚨 Error(s) encountered in ${source.label}`);\n\n for (const schemaErr of source.schemaErrors) {\n console.error(`- ${schemaErr.message}`);\n showErrorLocationDetails(schemaErr);\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\n\nexport function showPluginWarnings(envGraph: EnvGraph) {\n for (const plugin of envGraph.plugins) {\n if (!plugin.warnings.length) continue;\n for (const warning of plugin.warnings) {\n console.error(ansis.yellow(`[WARNING] ${warning.message}`));\n if (warning.tip) {\n for (const line of warning.tip.split('\\n')) {\n console.error(` ${line}`);\n }\n }\n }\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 /** Log errors to stderr but don't throw — used when the caller will handle errors itself (e.g. json-full output) */\n noThrow?: boolean;\n}) {\n // check for root decorator \"execution\"\n for (const source of envGraph.sortedDataSources) {\n if (source.resolutionErrors.length) {\n console.error(`🚨 Root decorator error(s) in ${source.label}`);\n\n for (const err of source.resolutionErrors) {\n console.error(`- ${err.message}`);\n if (err instanceof VarlockError && err.tip) {\n for (const line of err.tip.split('\\n')) {\n console.error(` ${line}`);\n }\n }\n showErrorLocationDetails(err);\n }\n }\n }\n\n\n\n const failingItems = envGraph.sortedConfigKeys\n .map((k) => envGraph.configSchema[k])\n .filter((item) => item.validationState === 'error');\n\n // TODO: use service.isValid?\n if (failingItems.length > 0) {\n console.error(`\\n🚨 🚨 🚨 ${ansis.bold.underline('Configuration is currently invalid ')} 🚨 🚨 🚨\\n`);\n console.error('Invalid items:\\n');\n\n _.each(failingItems, (item: ConfigItem) => {\n console.error(getItemSummary(item));\n console.error();\n });\n if (opts?.showAll) {\n console.error();\n console.error(joinAndCompact([\n 'Valid items:',\n ansis.italic.gray('(remove `--show-all` flag to hide)'),\n ]));\n console.error();\n const validItems = envGraph.sortedConfigKeys\n .map((k) => envGraph.configSchema[k])\n .filter((i) => !!i.isValid);\n _.each(validItems, (item: ConfigItem) => {\n console.error(getItemSummary(item));\n });\n }\n\n showPluginWarnings(envGraph);\n if (!opts?.noThrow) {\n throw new InvalidEnvError();\n }\n }\n}\n"]}
@@ -1,7 +1,7 @@
1
- import { execSyncVarlock } from './chunk-YHOWSHVH.js';
1
+ import { patchGlobalResponse } from './chunk-F6RTQ5QX.js';
2
2
  import { patchGlobalServerResponse } from './chunk-5DUWGI2N.js';
3
+ import { execSyncVarlock } from './chunk-YHOWSHVH.js';
3
4
  import { patchGlobalConsole } from './chunk-R73FENLU.js';
4
- import { patchGlobalResponse } from './chunk-F6RTQ5QX.js';
5
5
  import { initVarlockEnv } from './chunk-MGWUDHT5.js';
6
6
 
7
7
  // src/auto-load.ts
@@ -18,5 +18,5 @@ initVarlockEnv();
18
18
  patchGlobalConsole();
19
19
  patchGlobalServerResponse();
20
20
  patchGlobalResponse();
21
- //# sourceMappingURL=chunk-N2E6DRSH.js.map
22
- //# sourceMappingURL=chunk-N2E6DRSH.js.map
21
+ //# sourceMappingURL=chunk-UUDTMOJS.js.map
22
+ //# sourceMappingURL=chunk-UUDTMOJS.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/auto-load.ts"],"names":[],"mappings":";;;;;;;AAaA,IAAM,UAAA,GAAa,gBAAgB,mCAAA,EAAqC;AAAA,EACtE,WAAA,EAAa,IAAA;AAAA,EACb,eAAA,EAAiB,IAAA;AAAA;AAAA;AAAA;AAAA,EAIjB,SAAA,EAAW,YAAY,OAAA,IAAW,IAAI,IAAI,GAAA,EAAK,MAAA,CAAA,IAAA,CAAY,GAAG,CAAA,CAAE;AAClE,CAAC,CAAA;AACD,OAAA,CAAQ,IAAI,aAAA,GAAgB,UAAA;AAG5B,cAAA,EAAe;AAEf,kBAAA,EAAmB;AACnB,yBAAA,EAA0B;AAC1B,mBAAA,EAAoB","file":"chunk-N2E6DRSH.js","sourcesContent":["import { execSyncVarlock } from './lib/exec-sync-varlock';\n\nimport { initVarlockEnv } from './runtime/env';\nimport { patchGlobalConsole } from './runtime/patch-console';\nimport { patchGlobalServerResponse } from './runtime/patch-server-response';\nimport { patchGlobalResponse } from './runtime/patch-response';\n\n// The varlock loading process uses async calls, but we need this to run synchronously.\n// because even with top level await, we run into hoisting issues where things happen out of order\n// so we call out to the CLI using execSync\n// this also isolates the varlock loading process from the end user process\n\n\nconst execResult = execSyncVarlock('load --format json-full --compact', {\n exitOnError: true,\n showLogsOnError: true,\n // Pass the directory of this module so that in monorepos the binary search\n // starts from inside the varlock package (e.g. apps/web/node_modules/varlock)\n // rather than from process.cwd(), which may be an unrelated workspace root.\n callerDir: import.meta.dirname ?? new URL('.', import.meta.url).pathname,\n});\nprocess.env.__VARLOCK_ENV = execResult;\n\n// initialize varlock and patch globals as necessary\ninitVarlockEnv();\n// these will be no-ops if these are disabled by settings\npatchGlobalConsole();\npatchGlobalServerResponse();\npatchGlobalResponse();\n\n"]}
1
+ {"version":3,"sources":["../src/auto-load.ts"],"names":[],"mappings":";;;;;;;AAaA,IAAM,UAAA,GAAa,gBAAgB,mCAAA,EAAqC;AAAA,EACtE,WAAA,EAAa,IAAA;AAAA,EACb,eAAA,EAAiB,IAAA;AAAA;AAAA;AAAA;AAAA,EAIjB,SAAA,EAAW,YAAY,OAAA,IAAW,IAAI,IAAI,GAAA,EAAK,MAAA,CAAA,IAAA,CAAY,GAAG,CAAA,CAAE;AAClE,CAAC,CAAA;AACD,OAAA,CAAQ,IAAI,aAAA,GAAgB,UAAA;AAG5B,cAAA,EAAe;AAEf,kBAAA,EAAmB;AACnB,yBAAA,EAA0B;AAC1B,mBAAA,EAAoB","file":"chunk-UUDTMOJS.js","sourcesContent":["import { execSyncVarlock } from './lib/exec-sync-varlock';\n\nimport { initVarlockEnv } from './runtime/env';\nimport { patchGlobalConsole } from './runtime/patch-console';\nimport { patchGlobalServerResponse } from './runtime/patch-server-response';\nimport { patchGlobalResponse } from './runtime/patch-response';\n\n// The varlock loading process uses async calls, but we need this to run synchronously.\n// because even with top level await, we run into hoisting issues where things happen out of order\n// so we call out to the CLI using execSync\n// this also isolates the varlock loading process from the end user process\n\n\nconst execResult = execSyncVarlock('load --format json-full --compact', {\n exitOnError: true,\n showLogsOnError: true,\n // Pass the directory of this module so that in monorepos the binary search\n // starts from inside the varlock package (e.g. apps/web/node_modules/varlock)\n // rather than from process.cwd(), which may be an unrelated workspace root.\n callerDir: import.meta.dirname ?? new URL('.', import.meta.url).pathname,\n});\nprocess.env.__VARLOCK_ENV = execResult;\n\n// initialize varlock and patch globals as necessary\ninitVarlockEnv();\n// these will be no-ops if these are disabled by settings\npatchGlobalConsole();\npatchGlobalServerResponse();\npatchGlobalResponse();\n\n"]}
@@ -0,0 +1,426 @@
1
+ import { getBackendInfo, getDaemonClient, ensureKey, decryptValue, encryptValue } from './chunk-6DXWXIQV.js';
2
+ import { CliExitError, loadEnvGraph } from './chunk-GBCB7Y3B.js';
3
+ import { createResolver, parseEnvSpecDotEnvFile, runWithWorkspaceInfo, prompts_default } from './chunk-U7RQPX5K.js';
4
+ import { ResolutionError, SchemaError, createDebug } from './chunk-2PFIYNFA.js';
5
+ import { __name } from './chunk-6PEHRAEP.js';
6
+ import fs from 'fs';
7
+ import path from 'path';
8
+
9
+ function writeBackValue(itemKey, newValueStr, sourceFilePath) {
10
+ if (!sourceFilePath) {
11
+ return { updated: false, reason: "missing-source-file" };
12
+ }
13
+ const currentContents = fs.readFileSync(sourceFilePath, "utf-8");
14
+ const file = parseEnvSpecDotEnvFile(currentContents);
15
+ const item = file.configItems.find((i) => i.key === itemKey);
16
+ if (!item) {
17
+ return { updated: false, reason: "item-not-found" };
18
+ }
19
+ const dummyFile = parseEnvSpecDotEnvFile(`_=${newValueStr}`);
20
+ const dummyItem = dummyFile.configItems[0];
21
+ if (!dummyItem?.value) {
22
+ return { updated: false, reason: "item-not-found" };
23
+ }
24
+ item.data.value = dummyItem.value;
25
+ item.value = dummyItem.value;
26
+ fs.writeFileSync(sourceFilePath, file.toString());
27
+ return { updated: true };
28
+ }
29
+ __name(writeBackValue, "writeBackValue");
30
+
31
+ // src/lib/local-encrypt/builtin-resolver.ts
32
+ var LOCAL_PREFIX = "local:";
33
+ var PLUGIN_ICON = "mdi:fingerprint";
34
+ var pendingBatch;
35
+ function enqueueBatchEntry(entry) {
36
+ let triggerBatch = false;
37
+ if (!pendingBatch) {
38
+ pendingBatch = [];
39
+ triggerBatch = true;
40
+ }
41
+ pendingBatch.push(entry);
42
+ if (triggerBatch) {
43
+ setImmediate(() => executeBatch());
44
+ }
45
+ }
46
+ __name(enqueueBatchEntry, "enqueueBatchEntry");
47
+ function enqueueDecrypt(ciphertext) {
48
+ return new Promise((resolve, reject) => {
49
+ enqueueBatchEntry({
50
+ kind: "decrypt",
51
+ ciphertext,
52
+ resolve,
53
+ reject
54
+ });
55
+ });
56
+ }
57
+ __name(enqueueDecrypt, "enqueueDecrypt");
58
+ function enqueuePrompt(execute) {
59
+ return new Promise((resolve, reject) => {
60
+ enqueueBatchEntry({
61
+ kind: "prompt",
62
+ execute,
63
+ resolve,
64
+ reject
65
+ });
66
+ });
67
+ }
68
+ __name(enqueuePrompt, "enqueuePrompt");
69
+ function bailRemaining(batch, startIndex, error) {
70
+ for (let j = startIndex; j < batch.length; j++) {
71
+ batch[j].reject(error);
72
+ }
73
+ }
74
+ __name(bailRemaining, "bailRemaining");
75
+ async function executeBatch() {
76
+ const batch = pendingBatch;
77
+ pendingBatch = void 0;
78
+ if (!batch?.length) return;
79
+ batch.sort((a, b) => {
80
+ if (a.kind === b.kind) return 0;
81
+ return a.kind === "prompt" ? -1 : 1;
82
+ });
83
+ await ensureKey();
84
+ for (let i = 0; i < batch.length; i++) {
85
+ const entry = batch[i];
86
+ try {
87
+ if (entry.kind === "decrypt") {
88
+ const plaintext = await decryptValue(entry.ciphertext);
89
+ entry.resolve(plaintext);
90
+ } else {
91
+ const result = await entry.execute();
92
+ entry.resolve(result);
93
+ }
94
+ } catch (err) {
95
+ entry.reject(err);
96
+ const msg = err instanceof Error ? err.message : String(err);
97
+ if (msg.includes("cancelled") || msg.includes("canceled") || msg.includes("verification failed")) {
98
+ bailRemaining(batch, i + 1, new ResolutionError("Skipped \u2014 user cancelled"));
99
+ return;
100
+ }
101
+ }
102
+ }
103
+ }
104
+ __name(executeBatch, "executeBatch");
105
+ function writeBackEncryptedValue(itemKey, ciphertext, sourceFilePath) {
106
+ const prefixedCiphertext = `${LOCAL_PREFIX}${ciphertext}`;
107
+ return writeBackValue(itemKey, `varlock("${prefixedCiphertext}")`, sourceFilePath);
108
+ }
109
+ __name(writeBackEncryptedValue, "writeBackEncryptedValue");
110
+ var VarlockResolver = createResolver({
111
+ name: "varlock",
112
+ label: "Decrypt locally encrypted value",
113
+ icon: PLUGIN_ICON,
114
+ impliesSensitive: true,
115
+ argsSchema: {
116
+ type: "mixed",
117
+ arrayMinLength: 0
118
+ },
119
+ process() {
120
+ const promptArg = this.objArgs?.prompt;
121
+ const isPromptPositional = this.arrArgs?.length === 1 && this.arrArgs[0]?.isStatic && this.arrArgs[0].staticValue === "prompt";
122
+ if (promptArg || isPromptPositional) {
123
+ const parent = this.parent;
124
+ const itemKey = parent?.key || "unknown";
125
+ const dataSource = this.dataSource;
126
+ const sourceFilePath = dataSource?.fullPath;
127
+ return { mode: "prompt", itemKey, sourceFilePath };
128
+ }
129
+ if (!this.arrArgs || this.arrArgs.length !== 1) {
130
+ throw new SchemaError("varlock() expects a single encrypted payload string, or prompt to enter a new value");
131
+ }
132
+ if (!this.arrArgs[0]?.isStatic) {
133
+ throw new SchemaError("varlock() expects a single static encrypted payload string");
134
+ }
135
+ const payload = this.arrArgs[0].staticValue;
136
+ if (typeof payload !== "string") {
137
+ throw new SchemaError("varlock() expects a string argument");
138
+ }
139
+ return { mode: "decrypt", payload };
140
+ },
141
+ async resolve(state) {
142
+ if (state.mode === "decrypt") {
143
+ let ciphertext = state.payload;
144
+ if (ciphertext.startsWith(LOCAL_PREFIX)) {
145
+ ciphertext = ciphertext.slice(LOCAL_PREFIX.length);
146
+ }
147
+ try {
148
+ return await enqueueDecrypt(ciphertext);
149
+ } catch (err) {
150
+ if (err instanceof ResolutionError) throw err;
151
+ const backend = getBackendInfo();
152
+ throw new ResolutionError(
153
+ `Decryption failed: ${err instanceof Error ? err.message : err}`,
154
+ {
155
+ tip: [
156
+ `Backend: ${backend.type} (${backend.hardwareBacked ? "hardware-backed" : "file-based"})`,
157
+ "This usually means the value was encrypted with a different key or backend.",
158
+ "Set a new value using `varlock encrypt` or `KEY=varlock(prompt)`."
159
+ ].join("\n")
160
+ }
161
+ );
162
+ }
163
+ }
164
+ const { itemKey, sourceFilePath } = state;
165
+ return enqueuePrompt(async () => {
166
+ const backend = getBackendInfo();
167
+ if (backend.type === "secure-enclave" && backend.biometricAvailable) {
168
+ const client = getDaemonClient();
169
+ const ciphertext2 = await client.promptSecret({
170
+ itemKey,
171
+ message: `Enter the secret value for ${itemKey}:`
172
+ });
173
+ if (!ciphertext2) {
174
+ throw new ResolutionError("Secret input was cancelled", {
175
+ tip: "Run varlock again and enter a value, or replace prompt=1 with an encrypted value"
176
+ });
177
+ }
178
+ const writeBackResult2 = writeBackEncryptedValue(itemKey, ciphertext2, sourceFilePath);
179
+ if (!writeBackResult2.updated) {
180
+ if (writeBackResult2.reason === "missing-source-file") {
181
+ throw new ResolutionError(`Unable to persist encrypted value for ${itemKey}`, {
182
+ tip: "varlock(prompt=1) can only persist values from file-backed sources. Use `varlock encrypt` to generate an encrypted value manually."
183
+ });
184
+ }
185
+ throw new ResolutionError(`Unable to persist encrypted value for ${itemKey}`, {
186
+ tip: `Could not find a writable \`${itemKey}=varlock(...)\` entry to update in ${sourceFilePath}.`
187
+ });
188
+ }
189
+ return decryptValue(ciphertext2);
190
+ }
191
+ if (!process.stdout.isTTY || !process.stdin.isTTY) {
192
+ throw new ResolutionError(
193
+ `No encrypted value found for ${itemKey}`,
194
+ {
195
+ tip: `Run \`varlock encrypt --file ${sourceFilePath || "<your-env-file>"}\` to encrypt this value interactively.`
196
+ }
197
+ );
198
+ }
199
+ const rawValue = await prompts_default.password({ message: `Enter the secret value for ${itemKey}:`, hint: "for multi-line values, use `varlock encrypt`" });
200
+ const isCanceled = typeof rawValue !== "string";
201
+ if (isCanceled || !rawValue) {
202
+ throw new ResolutionError("Secret input was cancelled", {
203
+ tip: "Run varlock again and enter a value, or replace prompt=1 with an encrypted value"
204
+ });
205
+ }
206
+ const ciphertext = await encryptValue(rawValue);
207
+ const writeBackResult = writeBackEncryptedValue(itemKey, ciphertext, sourceFilePath);
208
+ if (!writeBackResult.updated) {
209
+ if (writeBackResult.reason === "missing-source-file") {
210
+ throw new ResolutionError(`Unable to persist encrypted value for ${itemKey}`, {
211
+ tip: "varlock(prompt=1) can only persist values from file-backed sources. Use `varlock encrypt` to generate an encrypted value manually."
212
+ });
213
+ }
214
+ throw new ResolutionError(`Unable to persist encrypted value for ${itemKey}`, {
215
+ tip: `Could not find a writable \`${itemKey}=varlock(...)\` entry to update in ${sourceFilePath}.`
216
+ });
217
+ }
218
+ return rawValue;
219
+ });
220
+ }
221
+ });
222
+
223
+ // src/lib/local-encrypt/keychain-resolver.ts
224
+ function writeBackKeychainRef(itemKey, ref, sourceFilePath) {
225
+ let argsStr;
226
+ if (!ref.account && !ref.keychain) {
227
+ argsStr = `"${ref.service}"`;
228
+ } else {
229
+ const parts = [`service="${ref.service}"`];
230
+ if (ref.account) parts.push(`account="${ref.account}"`);
231
+ if (ref.keychain) parts.push(`keychain="${ref.keychain}"`);
232
+ argsStr = parts.join(", ");
233
+ }
234
+ writeBackValue(itemKey, `keychain(${argsStr})`, sourceFilePath);
235
+ }
236
+ __name(writeBackKeychainRef, "writeBackKeychainRef");
237
+ var KeychainResolver = createResolver({
238
+ name: "keychain",
239
+ label: "Read from macOS Keychain",
240
+ icon: "mdi:key-chain",
241
+ impliesSensitive: true,
242
+ argsSchema: {
243
+ type: "mixed",
244
+ arrayMinLength: 0
245
+ },
246
+ process() {
247
+ if (process.platform !== "darwin") {
248
+ throw new SchemaError("keychain() is only supported on macOS");
249
+ }
250
+ const promptArg = this.objArgs?.prompt;
251
+ const isPromptPositional = this.arrArgs?.length === 1 && this.arrArgs[0]?.isStatic && this.arrArgs[0].staticValue === "prompt";
252
+ if (promptArg || isPromptPositional) {
253
+ const parent = this.parent;
254
+ const itemKey = parent?.key || "unknown";
255
+ const dataSource = this.dataSource;
256
+ const sourceFilePath = dataSource?.fullPath;
257
+ return { mode: "prompt", itemKey, sourceFilePath };
258
+ }
259
+ const serviceArg = this.objArgs?.service;
260
+ const accountArg = this.objArgs?.account;
261
+ const keychainArg = this.objArgs?.keychain;
262
+ const fieldArg = this.objArgs?.field;
263
+ const account = accountArg?.isStatic ? accountArg.staticValue : void 0;
264
+ const keychain = keychainArg?.isStatic ? keychainArg.staticValue : void 0;
265
+ const field = fieldArg?.isStatic ? fieldArg.staticValue : void 0;
266
+ if (serviceArg) {
267
+ if (!serviceArg.isStatic || typeof serviceArg.staticValue !== "string") {
268
+ throw new SchemaError("keychain() service must be a static string");
269
+ }
270
+ return {
271
+ mode: "get",
272
+ service: serviceArg.staticValue,
273
+ account,
274
+ keychain,
275
+ field
276
+ };
277
+ }
278
+ if (accountArg) {
279
+ return {
280
+ mode: "get",
281
+ account,
282
+ keychain,
283
+ field
284
+ };
285
+ }
286
+ if (this.arrArgs?.length === 1 && this.arrArgs[0]?.isStatic) {
287
+ const value = this.arrArgs[0].staticValue;
288
+ if (typeof value !== "string") {
289
+ throw new SchemaError("keychain() expects a string service name");
290
+ }
291
+ return { mode: "get", service: value, field };
292
+ }
293
+ throw new SchemaError(
294
+ 'keychain() requires service name, account, or prompt mode. Usage: keychain(service="com.example"), keychain("com.example"), or keychain(prompt)'
295
+ );
296
+ },
297
+ async resolve(state) {
298
+ const client = getDaemonClient();
299
+ if (state.mode === "get") {
300
+ try {
301
+ return await client.keychainGet({
302
+ service: state.service,
303
+ account: state.account,
304
+ keychain: state.keychain,
305
+ field: state.field
306
+ });
307
+ } catch (err) {
308
+ throw new ResolutionError(
309
+ `Failed to read keychain item: ${err instanceof Error ? err.message : err}`,
310
+ {
311
+ tip: [
312
+ state.service ? `Service: ${state.service}` : null,
313
+ state.account ? `Account: ${state.account}` : null,
314
+ state.keychain ? `Keychain: ${state.keychain}` : null,
315
+ state.field ? `Field: ${state.field}` : null,
316
+ "Make sure the item exists in your Keychain and VarlockEnclave has access.",
317
+ "You can grant access via: keychain(prompt)"
318
+ ].filter(Boolean).join("\n")
319
+ }
320
+ );
321
+ }
322
+ }
323
+ const { itemKey, sourceFilePath } = state;
324
+ const selected = await client.keychainPick({ itemKey });
325
+ if (!selected) {
326
+ throw new ResolutionError("Keychain item selection was cancelled", {
327
+ tip: 'Run varlock again and select an item, or use keychain(service="...") with an explicit service name'
328
+ });
329
+ }
330
+ writeBackKeychainRef(itemKey, selected, sourceFilePath);
331
+ try {
332
+ return await client.keychainGet({
333
+ service: selected.service,
334
+ account: selected.account,
335
+ keychain: selected.keychain
336
+ });
337
+ } catch (err) {
338
+ throw new ResolutionError(
339
+ `Selected keychain item but failed to read value: ${err instanceof Error ? err.message : err}`,
340
+ {
341
+ tip: "The item reference has been written to your config. Try running varlock again."
342
+ }
343
+ );
344
+ }
345
+ }
346
+ });
347
+ function readVarlockPackageJsonConfig(opts) {
348
+ const cwd = opts?.cwd ?? process.cwd();
349
+ const pkgPath = path.join(cwd, "package.json");
350
+ if (!fs.existsSync(pkgPath)) return void 0;
351
+ try {
352
+ const pkg = JSON.parse(fs.readFileSync(pkgPath, "utf-8"));
353
+ if (pkg.varlock && typeof pkg.varlock === "object") {
354
+ return pkg.varlock;
355
+ }
356
+ } catch {
357
+ }
358
+ return void 0;
359
+ }
360
+ __name(readVarlockPackageJsonConfig, "readVarlockPackageJsonConfig");
361
+
362
+ // src/lib/load-graph.ts
363
+ var debug = createDebug("varlock:load");
364
+ function normalizePkgLoadPath(pkgLoadPath) {
365
+ if (Array.isArray(pkgLoadPath)) return pkgLoadPath;
366
+ return [pkgLoadPath];
367
+ }
368
+ __name(normalizePkgLoadPath, "normalizePkgLoadPath");
369
+ function loadFromPaths(rawPaths, config) {
370
+ const resolvedPaths = rawPaths.map((p) => path.resolve(p));
371
+ if (resolvedPaths.length === 1) {
372
+ debug("using path from %s: %s", config.source, resolvedPaths[0]);
373
+ } else {
374
+ debug("using %d paths from %s: %s", resolvedPaths.length, config.source, resolvedPaths.join(", "));
375
+ }
376
+ for (const resolvedPath of resolvedPaths) {
377
+ if (!fs.existsSync(resolvedPath)) {
378
+ throw new CliExitError(`${config.errorPrefix}: ${resolvedPath}`, {
379
+ suggestion: config.errorSuggestion
380
+ });
381
+ }
382
+ }
383
+ return runWithWorkspaceInfo(() => loadEnvGraph({
384
+ currentEnvFallback: config.currentEnvFallback,
385
+ entryFilePaths: resolvedPaths,
386
+ afterInit: /* @__PURE__ */ __name(async (g) => {
387
+ g.registerResolver(VarlockResolver);
388
+ g.registerResolver(KeychainResolver);
389
+ }, "afterInit")
390
+ }));
391
+ }
392
+ __name(loadFromPaths, "loadFromPaths");
393
+ function loadVarlockEnvGraph(opts) {
394
+ const cliPaths = opts?.entryFilePaths?.filter(Boolean);
395
+ if (cliPaths && cliPaths.length > 0) {
396
+ return loadFromPaths(cliPaths, {
397
+ source: "--path flag",
398
+ errorPrefix: "The --path value does not exist",
399
+ errorSuggestion: "Use `--path` to specify a valid file or directory.",
400
+ currentEnvFallback: opts?.currentEnvFallback
401
+ });
402
+ }
403
+ const pkgLoadPath = readVarlockPackageJsonConfig()?.loadPath;
404
+ const pkgLoadPaths = pkgLoadPath ? normalizePkgLoadPath(pkgLoadPath) : void 0;
405
+ if (pkgLoadPaths) {
406
+ return loadFromPaths(pkgLoadPaths, {
407
+ source: "package.json varlock.loadPath",
408
+ errorPrefix: "A path in `varlock.loadPath` configured in package.json does not exist",
409
+ errorSuggestion: "Update `varlock.loadPath` in your package.json to point to valid files or directories.",
410
+ currentEnvFallback: opts?.currentEnvFallback
411
+ });
412
+ }
413
+ debug("no path configured, using cwd: %s", process.cwd());
414
+ return runWithWorkspaceInfo(() => loadEnvGraph({
415
+ currentEnvFallback: opts?.currentEnvFallback,
416
+ afterInit: /* @__PURE__ */ __name(async (g) => {
417
+ g.registerResolver(VarlockResolver);
418
+ g.registerResolver(KeychainResolver);
419
+ }, "afterInit")
420
+ }));
421
+ }
422
+ __name(loadVarlockEnvGraph, "loadVarlockEnvGraph");
423
+
424
+ export { loadVarlockEnvGraph, writeBackValue };
425
+ //# sourceMappingURL=chunk-V2MTE4J6.js.map
426
+ //# sourceMappingURL=chunk-V2MTE4J6.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/lib/local-encrypt/write-back.ts","../src/lib/local-encrypt/builtin-resolver.ts","../src/lib/local-encrypt/keychain-resolver.ts","../src/lib/package-json-config.ts","../src/lib/load-graph.ts"],"names":["ciphertext","writeBackResult","fs","path"],"mappings":"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","file":"chunk-V2MTE4J6.js","sourcesContent":["/**\n * Shared utilities for writing back encrypted/resolved values to .env files.\n *\n * Uses the env-spec AST parser to safely update values.\n */\n\nimport fs from 'node:fs';\nimport { parseEnvSpecDotEnvFile } from '@env-spec/parser';\n\ntype WriteBackResult = { updated: boolean; reason?: 'missing-source-file' | 'item-not-found' };\n\n/**\n * Update a config item's value in a .env file using AST-based replacement.\n */\nexport function writeBackValue(\n itemKey: string,\n newValueStr: string,\n sourceFilePath: string | undefined,\n): WriteBackResult {\n if (!sourceFilePath) {\n return { updated: false, reason: 'missing-source-file' };\n }\n\n const currentContents = fs.readFileSync(sourceFilePath, 'utf-8');\n const file = parseEnvSpecDotEnvFile(currentContents);\n\n const item = file.configItems.find((i) => i.key === itemKey);\n if (!item) {\n return { updated: false, reason: 'item-not-found' };\n }\n\n // Parse a dummy line to get the correct AST value node\n const dummyFile = parseEnvSpecDotEnvFile(`_=${newValueStr}`);\n const dummyItem = dummyFile.configItems[0];\n if (!dummyItem?.value) {\n return { updated: false, reason: 'item-not-found' };\n }\n\n // Replace the value\n item.data.value = dummyItem.value;\n item.value = dummyItem.value;\n\n fs.writeFileSync(sourceFilePath, file.toString());\n return { updated: true };\n}\n\n","/**\n * Built-in varlock() resolver function.\n *\n * Replaces the plugin-based resolver from @varlock/secure-enclave-plugin.\n * Works cross-platform using the local-encrypt abstraction layer.\n */\n\nimport { createResolver, Resolver } from '../../env-graph/lib/resolver';\nimport { ResolutionError, SchemaError } from '../../env-graph/lib/errors';\nimport prompts from '../../cli/helpers/prompts';\nimport * as localEncrypt from './index';\nimport { writeBackValue } from './write-back';\n\nconst LOCAL_PREFIX = 'local:';\nconst PLUGIN_ICON = 'mdi:fingerprint';\n\n// ── Unified varlock() batch queue ──────────────────────────────\n// Collects all concurrent varlock() calls (both prompt and decrypt) into a\n// single batch using setImmediate, then processes them sequentially.\n// Prompts are sorted first so the user enters values before biometric decrypts.\n// If the user cancels a prompt or biometric auth, all remaining items in the\n// batch are rejected immediately.\n\ntype VarlockBatchEntry = {\n kind: 'prompt' | 'decrypt';\n resolve: (value: string) => void;\n reject: (reason: unknown) => void;\n} & (\n | { kind: 'decrypt'; ciphertext: string }\n | { kind: 'prompt'; execute: () => Promise<string> }\n);\n\nlet pendingBatch: Array<VarlockBatchEntry> | undefined;\n\nfunction enqueueBatchEntry(entry: VarlockBatchEntry) {\n let triggerBatch = false;\n if (!pendingBatch) {\n pendingBatch = [];\n triggerBatch = true;\n }\n pendingBatch.push(entry);\n\n if (triggerBatch) {\n // eslint-disable-next-line no-use-before-define\n setImmediate(() => executeBatch());\n }\n}\n\nfunction enqueueDecrypt(ciphertext: string): Promise<string> {\n return new Promise<string>((resolve, reject) => {\n enqueueBatchEntry({\n kind: 'decrypt', ciphertext, resolve, reject,\n });\n });\n}\n\nfunction enqueuePrompt(execute: () => Promise<string>): Promise<string> {\n return new Promise<string>((resolve, reject) => {\n enqueueBatchEntry({\n kind: 'prompt', execute, resolve, reject,\n });\n });\n}\n\nfunction bailRemaining(batch: Array<VarlockBatchEntry>, startIndex: number, error: Error) {\n for (let j = startIndex; j < batch.length; j++) {\n batch[j].reject(error);\n }\n}\n\nasync function executeBatch() {\n const batch = pendingBatch;\n pendingBatch = undefined;\n if (!batch?.length) return;\n\n // Sort prompts before decrypts so the user enters values first\n batch.sort((a, b) => {\n if (a.kind === b.kind) return 0;\n return a.kind === 'prompt' ? -1 : 1;\n });\n\n // Ensure encryption key exists before processing any items\n await localEncrypt.ensureKey();\n\n for (let i = 0; i < batch.length; i++) {\n const entry = batch[i];\n try {\n if (entry.kind === 'decrypt') {\n const plaintext = await localEncrypt.decryptValue(entry.ciphertext);\n entry.resolve(plaintext);\n } else {\n const result = await entry.execute();\n entry.resolve(result);\n }\n } catch (err) {\n entry.reject(err);\n\n // If this looks like a user cancellation or auth failure, bail on remaining items\n const msg = err instanceof Error ? err.message : String(err);\n if (\n msg.includes('cancelled') || msg.includes('canceled')\n || msg.includes('verification failed')\n ) {\n bailRemaining(batch, i + 1, new ResolutionError('Skipped — user cancelled'));\n return;\n }\n }\n }\n}\n\ntype VarlockResolverState = {\n mode: 'decrypt';\n payload: string;\n} | {\n mode: 'prompt';\n itemKey: string;\n sourceFilePath: string | undefined;\n};\n\nfunction writeBackEncryptedValue(\n itemKey: string,\n ciphertext: string,\n sourceFilePath: string | undefined,\n) {\n const prefixedCiphertext = `${LOCAL_PREFIX}${ciphertext}`;\n return writeBackValue(itemKey, `varlock(\"${prefixedCiphertext}\")`, sourceFilePath);\n}\n\n\nexport const VarlockResolver: typeof Resolver = createResolver<VarlockResolverState>({\n name: 'varlock',\n label: 'Decrypt locally encrypted value',\n icon: PLUGIN_ICON,\n impliesSensitive: true,\n argsSchema: {\n type: 'mixed',\n arrayMinLength: 0,\n },\n process(): VarlockResolverState {\n // Check for prompt mode: varlock(prompt=1) or varlock(prompt)\n const promptArg = this.objArgs?.prompt;\n const isPromptPositional = this.arrArgs?.length === 1\n && this.arrArgs[0]?.isStatic\n && this.arrArgs[0].staticValue === 'prompt';\n if (promptArg || isPromptPositional) {\n // Resolver doesn't expose parent item in its type, but it's available at runtime\n const parent = (this as any).parent;\n const itemKey = parent?.key || 'unknown';\n const dataSource = this.dataSource as any;\n const sourceFilePath = dataSource?.fullPath as string | undefined;\n return { mode: 'prompt', itemKey, sourceFilePath };\n }\n\n // Normal mode: varlock(\"encrypted-payload\")\n if (!this.arrArgs || this.arrArgs.length !== 1) {\n throw new SchemaError('varlock() expects a single encrypted payload string, or prompt to enter a new value');\n }\n if (!this.arrArgs[0]?.isStatic) {\n throw new SchemaError('varlock() expects a single static encrypted payload string');\n }\n const payload = this.arrArgs[0].staticValue;\n if (typeof payload !== 'string') {\n throw new SchemaError('varlock() expects a string argument');\n }\n return { mode: 'decrypt', payload };\n },\n async resolve(state: VarlockResolverState) {\n if (state.mode === 'decrypt') {\n let ciphertext = state.payload;\n if (ciphertext.startsWith(LOCAL_PREFIX)) {\n ciphertext = ciphertext.slice(LOCAL_PREFIX.length);\n }\n try {\n return await enqueueDecrypt(ciphertext);\n } catch (err) {\n // Re-throw ResolutionErrors (e.g. batch cancellation) as-is\n if (err instanceof ResolutionError) throw err;\n\n const backend = localEncrypt.getBackendInfo();\n throw new ResolutionError(\n `Decryption failed: ${err instanceof Error ? err.message : err}`,\n {\n tip: [\n `Backend: ${backend.type} (${backend.hardwareBacked ? 'hardware-backed' : 'file-based'})`,\n 'This usually means the value was encrypted with a different key or backend.',\n 'Set a new value using `varlock encrypt` or `KEY=varlock(prompt)`.',\n ].join('\\n'),\n },\n );\n }\n }\n\n // Prompt mode: enqueued into the unified batch so prompts run before decrypts\n // and cancellation propagates to all remaining items.\n const { itemKey, sourceFilePath } = state;\n return enqueuePrompt(async () => {\n const backend = localEncrypt.getBackendInfo();\n\n // Use daemon's native dialog on macOS Secure Enclave\n if (backend.type === 'secure-enclave' && backend.biometricAvailable) {\n const client = localEncrypt.getDaemonClient();\n const ciphertext = await client.promptSecret({\n itemKey,\n message: `Enter the secret value for ${itemKey}:`,\n });\n\n if (!ciphertext) {\n throw new ResolutionError('Secret input was cancelled', {\n tip: 'Run varlock again and enter a value, or replace prompt=1 with an encrypted value',\n });\n }\n\n const writeBackResult = writeBackEncryptedValue(itemKey, ciphertext, sourceFilePath);\n if (!writeBackResult.updated) {\n if (writeBackResult.reason === 'missing-source-file') {\n throw new ResolutionError(`Unable to persist encrypted value for ${itemKey}`, {\n tip: 'varlock(prompt=1) can only persist values from file-backed sources. Use `varlock encrypt` to generate an encrypted value manually.',\n });\n }\n\n throw new ResolutionError(`Unable to persist encrypted value for ${itemKey}`, {\n tip: `Could not find a writable \\`${itemKey}=varlock(...)\\` entry to update in ${sourceFilePath}.`,\n });\n }\n\n return localEncrypt.decryptValue(ciphertext);\n }\n\n // Terminal prompt for file-based backend\n if (!process.stdout.isTTY || !process.stdin.isTTY) {\n throw new ResolutionError(\n `No encrypted value found for ${itemKey}`,\n {\n tip: `Run \\`varlock encrypt --file ${sourceFilePath || '<your-env-file>'}\\` to encrypt this value interactively.`,\n },\n );\n }\n\n const rawValue = await prompts.password({ message: `Enter the secret value for ${itemKey}:`, hint: 'for multi-line values, use `varlock encrypt`' });\n const isCanceled = typeof rawValue !== 'string';\n if (isCanceled || !rawValue) {\n throw new ResolutionError('Secret input was cancelled', {\n tip: 'Run varlock again and enter a value, or replace prompt=1 with an encrypted value',\n });\n }\n\n const ciphertext = await localEncrypt.encryptValue(rawValue);\n const writeBackResult = writeBackEncryptedValue(itemKey, ciphertext, sourceFilePath);\n\n if (!writeBackResult.updated) {\n if (writeBackResult.reason === 'missing-source-file') {\n throw new ResolutionError(`Unable to persist encrypted value for ${itemKey}`, {\n tip: 'varlock(prompt=1) can only persist values from file-backed sources. Use `varlock encrypt` to generate an encrypted value manually.',\n });\n }\n\n throw new ResolutionError(`Unable to persist encrypted value for ${itemKey}`, {\n tip: `Could not find a writable \\`${itemKey}=varlock(...)\\` entry to update in ${sourceFilePath}.`,\n });\n }\n\n return rawValue;\n });\n },\n});\n","/**\n * Built-in keychain() resolver function.\n *\n * Reads secrets from the macOS Keychain via the Swift daemon binary.\n * Always goes through the daemon to enforce biometric gating (per-TTY sessions)\n * and to make VarlockEnclave the authorized keychain accessor.\n *\n * Syntax:\n * keychain(service=\"com.company.db\")\n * keychain(service=\"com.company.db\", account=\"admin\")\n * keychain(service=\"com.company.db\", keychain=\"System\")\n * keychain(\"com.company.db\") — shorthand for service\n * keychain(prompt) — interactive picker, writes back reference\n */\n\nimport { createResolver, Resolver } from '../../env-graph/lib/resolver';\nimport { ResolutionError, SchemaError } from '../../env-graph/lib/errors';\nimport { getDaemonClient } from './index';\nimport { writeBackValue } from './write-back';\n\ntype KeychainResolverState = {\n mode: 'get';\n service?: string;\n account?: string;\n keychain?: string;\n field?: string;\n} | {\n mode: 'prompt';\n itemKey: string;\n sourceFilePath: string | undefined;\n};\n\nfunction writeBackKeychainRef(\n itemKey: string,\n ref: { service: string; account?: string; keychain?: string },\n sourceFilePath: string | undefined,\n) {\n // Use positional shorthand when only service is needed, named args when disambiguating\n let argsStr: string;\n if (!ref.account && !ref.keychain) {\n argsStr = `\"${ref.service}\"`;\n } else {\n const parts: Array<string> = [`service=\"${ref.service}\"`];\n if (ref.account) parts.push(`account=\"${ref.account}\"`);\n if (ref.keychain) parts.push(`keychain=\"${ref.keychain}\"`);\n argsStr = parts.join(', ');\n }\n\n writeBackValue(itemKey, `keychain(${argsStr})`, sourceFilePath);\n}\n\nexport const KeychainResolver: typeof Resolver = createResolver<KeychainResolverState>({\n name: 'keychain',\n label: 'Read from macOS Keychain',\n icon: 'mdi:key-chain',\n impliesSensitive: true,\n argsSchema: {\n type: 'mixed',\n arrayMinLength: 0,\n },\n process(): KeychainResolverState {\n if (process.platform !== 'darwin') {\n throw new SchemaError('keychain() is only supported on macOS');\n }\n\n // Check for prompt mode: keychain(prompt) or keychain(prompt=1)\n const promptArg = this.objArgs?.prompt;\n const isPromptPositional = this.arrArgs?.length === 1\n && this.arrArgs[0]?.isStatic\n && this.arrArgs[0].staticValue === 'prompt';\n\n if (promptArg || isPromptPositional) {\n const parent = (this as any).parent;\n const itemKey = parent?.key || 'unknown';\n const dataSource = this.dataSource as any;\n const sourceFilePath = dataSource?.fullPath as string | undefined;\n return { mode: 'prompt', itemKey, sourceFilePath };\n }\n\n // Named args mode: keychain(service=\"...\", account=\"...\", keychain=\"...\", field=\"...\")\n const serviceArg = this.objArgs?.service;\n const accountArg = this.objArgs?.account;\n const keychainArg = this.objArgs?.keychain;\n const fieldArg = this.objArgs?.field;\n\n const account = accountArg?.isStatic ? accountArg.staticValue as string : undefined;\n const keychain = keychainArg?.isStatic ? keychainArg.staticValue as string : undefined;\n const field = fieldArg?.isStatic ? fieldArg.staticValue as string : undefined;\n\n if (serviceArg) {\n if (!serviceArg.isStatic || typeof serviceArg.staticValue !== 'string') {\n throw new SchemaError('keychain() service must be a static string');\n }\n return {\n mode: 'get', service: serviceArg.staticValue, account, keychain, field,\n };\n }\n\n // account-only lookup: keychain(account=\"admin@corp.com\", field=\"account\")\n if (accountArg) {\n return {\n mode: 'get', account, keychain, field,\n };\n }\n\n // Positional shorthand: keychain(\"com.company.service\")\n if (this.arrArgs?.length === 1 && this.arrArgs[0]?.isStatic) {\n const value = this.arrArgs[0].staticValue;\n if (typeof value !== 'string') {\n throw new SchemaError('keychain() expects a string service name');\n }\n return { mode: 'get', service: value, field };\n }\n\n throw new SchemaError(\n 'keychain() requires service name, account, or prompt mode. '\n + 'Usage: keychain(service=\"com.example\"), keychain(\"com.example\"), or keychain(prompt)',\n );\n },\n async resolve(state: KeychainResolverState) {\n const client = getDaemonClient();\n\n if (state.mode === 'get') {\n try {\n return await client.keychainGet({\n service: state.service,\n account: state.account,\n keychain: state.keychain,\n field: state.field,\n });\n } catch (err) {\n throw new ResolutionError(\n `Failed to read keychain item: ${err instanceof Error ? err.message : err}`,\n {\n tip: [\n state.service ? `Service: ${state.service}` : null,\n state.account ? `Account: ${state.account}` : null,\n state.keychain ? `Keychain: ${state.keychain}` : null,\n state.field ? `Field: ${state.field}` : null,\n 'Make sure the item exists in your Keychain and VarlockEnclave has access.',\n 'You can grant access via: keychain(prompt)',\n ].filter(Boolean).join('\\n'),\n },\n );\n }\n }\n\n // Prompt mode: show native picker, write back reference\n const { itemKey, sourceFilePath } = state;\n\n const selected = await client.keychainPick({ itemKey });\n if (!selected) {\n throw new ResolutionError('Keychain item selection was cancelled', {\n tip: 'Run varlock again and select an item, or use keychain(service=\"...\") with an explicit service name',\n });\n }\n\n writeBackKeychainRef(itemKey, selected, sourceFilePath);\n\n // Now fetch the actual value\n try {\n return await client.keychainGet({\n service: selected.service,\n account: selected.account,\n keychain: selected.keychain,\n });\n } catch (err) {\n throw new ResolutionError(\n `Selected keychain item but failed to read value: ${err instanceof Error ? err.message : err}`,\n {\n tip: 'The item reference has been written to your config. Try running varlock again.',\n },\n );\n }\n },\n});\n","import path from 'node:path';\nimport fs from 'node:fs';\n\nexport type VarlockPackageJsonConfig = {\n /** Path (or array of paths) to a specific .env file or directory to use as the entry point for loading */\n loadPath?: string | Array<string>;\n};\n\n/**\n * Reads varlock configuration from the `package.json` in `cwd`.\n * Returns undefined if no `package.json` exists or it has no `varlock` key.\n */\nexport function readVarlockPackageJsonConfig(opts?: { cwd?: string }): VarlockPackageJsonConfig | undefined {\n const cwd = opts?.cwd ?? process.cwd();\n const pkgPath = path.join(cwd, 'package.json');\n if (!fs.existsSync(pkgPath)) return undefined;\n try {\n const pkg = JSON.parse(fs.readFileSync(pkgPath, 'utf-8'));\n if (pkg.varlock && typeof pkg.varlock === 'object') {\n return pkg.varlock as VarlockPackageJsonConfig;\n }\n } catch { /* ignore parse errors */ }\n return undefined;\n}\n","import fs from 'node:fs';\nimport path from 'node:path';\nimport { loadEnvGraph } from '../env-graph';\nimport { VarlockResolver } from './local-encrypt/builtin-resolver';\nimport { KeychainResolver } from './local-encrypt/keychain-resolver';\nimport { CliExitError } from '../cli/helpers/exit-error';\nimport { runWithWorkspaceInfo } from './workspace-utils';\nimport { readVarlockPackageJsonConfig } from './package-json-config';\nimport { createDebug } from './debug';\n\nconst debug = createDebug('varlock:load');\n\nfunction normalizePkgLoadPath(pkgLoadPath: string | Array<string>): Array<string> {\n if (Array.isArray(pkgLoadPath)) return pkgLoadPath;\n return [pkgLoadPath];\n}\n\nfunction loadFromPaths(\n rawPaths: Array<string>,\n config: {\n source: string,\n errorPrefix: string,\n errorSuggestion: string,\n currentEnvFallback?: string,\n },\n) {\n const resolvedPaths = rawPaths.map((p) => path.resolve(p));\n\n if (resolvedPaths.length === 1) {\n debug('using path from %s: %s', config.source, resolvedPaths[0]);\n } else {\n debug('using %d paths from %s: %s', resolvedPaths.length, config.source, resolvedPaths.join(', '));\n }\n\n for (const resolvedPath of resolvedPaths) {\n if (!fs.existsSync(resolvedPath)) {\n throw new CliExitError(`${config.errorPrefix}: ${resolvedPath}`, {\n suggestion: config.errorSuggestion,\n });\n }\n }\n\n return runWithWorkspaceInfo(() => loadEnvGraph({\n currentEnvFallback: config.currentEnvFallback,\n entryFilePaths: resolvedPaths,\n afterInit: async (g) => {\n g.registerResolver(VarlockResolver);\n g.registerResolver(KeychainResolver);\n },\n }));\n}\n\nexport function loadVarlockEnvGraph(opts?: {\n currentEnvFallback?: string,\n /** Explicit entry file paths from --path flag(s) - overrides package.json config */\n entryFilePaths?: Array<string>,\n}) {\n const cliPaths = opts?.entryFilePaths?.filter(Boolean);\n\n // If --path flag(s) provided, they take precedence over package.json config\n if (cliPaths && cliPaths.length > 0) {\n // Return early and ignore pkgLoadPaths\n return loadFromPaths(cliPaths, {\n source: '--path flag',\n errorPrefix: 'The --path value does not exist',\n errorSuggestion: 'Use `--path` to specify a valid file or directory.',\n currentEnvFallback: opts?.currentEnvFallback,\n });\n }\n\n // Fall back to package.json varlock.loadPath\n const pkgLoadPath = readVarlockPackageJsonConfig()?.loadPath;\n const pkgLoadPaths = pkgLoadPath ? normalizePkgLoadPath(pkgLoadPath) : undefined;\n\n if (pkgLoadPaths) {\n return loadFromPaths(pkgLoadPaths, {\n source: 'package.json varlock.loadPath',\n errorPrefix: 'A path in `varlock.loadPath` configured in package.json does not exist',\n errorSuggestion: 'Update `varlock.loadPath` in your package.json to point to valid files or directories.',\n currentEnvFallback: opts?.currentEnvFallback,\n });\n }\n\n debug('no path configured, using cwd: %s', process.cwd());\n\n return runWithWorkspaceInfo(() => loadEnvGraph({\n currentEnvFallback: opts?.currentEnvFallback,\n afterInit: async (g) => {\n g.registerResolver(VarlockResolver);\n g.registerResolver(KeychainResolver);\n },\n }));\n}\n"]}
@@ -1,8 +1,8 @@
1
1
  import { define } from './chunk-4A54P4EM.js';
2
- import { checkForSchemaErrors, checkForNoEnvFiles, checkForConfigErrors, showPluginWarnings } from './chunk-Q2XA45LC.js';
3
- import { loadVarlockEnvGraph } from './chunk-S5EU3LTR.js';
2
+ import { checkForSchemaErrors, checkForNoEnvFiles, checkForConfigErrors, showPluginWarnings } from './chunk-UKFHSMKY.js';
3
+ import { loadVarlockEnvGraph } from './chunk-V2MTE4J6.js';
4
4
  import { gracefulExit } from './chunk-CHQDS2PI.js';
5
- import { getItemSummary } from './chunk-YBV5OJW6.js';
5
+ import { getItemSummary } from './chunk-GBCB7Y3B.js';
6
6
  import { __name } from './chunk-6PEHRAEP.js';
7
7
 
8
8
  // src/cli/commands/load.command.ts
@@ -117,5 +117,5 @@ var commandFn = /* @__PURE__ */ __name(async (ctx) => {
117
117
  }, "commandFn");
118
118
 
119
119
  export { commandFn, commandSpec, formatShellValue };
120
- //# sourceMappingURL=chunk-ZZCDYV63.js.map
121
- //# sourceMappingURL=chunk-ZZCDYV63.js.map
120
+ //# sourceMappingURL=chunk-VODQDF4Q.js.map
121
+ //# sourceMappingURL=chunk-VODQDF4Q.js.map