varlock 0.0.3 → 0.0.5

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 (102) hide show
  1. package/README.md +48 -25
  2. package/dist/auto-load.js +5 -6
  3. package/dist/{chunk-7UQXFWKN.js → chunk-365YVT72.js} +93 -3
  4. package/dist/chunk-365YVT72.js.map +1 -0
  5. package/dist/{chunk-CPA2D42B.js → chunk-7SCZ3YWG.js} +10 -9
  6. package/dist/chunk-7SCZ3YWG.js.map +1 -0
  7. package/dist/{chunk-RF3YMFUX.js → chunk-C2ZQAQUU.js} +3 -4
  8. package/dist/chunk-C2ZQAQUU.js.map +1 -0
  9. package/dist/chunk-EVHLEWHL.js +59 -0
  10. package/dist/chunk-EVHLEWHL.js.map +1 -0
  11. package/dist/{chunk-3KZR56NU.js → chunk-GAQWSZCY.js} +3 -4
  12. package/dist/chunk-GAQWSZCY.js.map +1 -0
  13. package/dist/{chunk-7QXRUUDC.js → chunk-GCUCCUG5.js} +29 -7
  14. package/dist/chunk-GCUCCUG5.js.map +1 -0
  15. package/dist/{chunk-2CM6PMED.js → chunk-GVAD672U.js} +15 -27
  16. package/dist/chunk-GVAD672U.js.map +1 -0
  17. package/dist/{chunk-RPLDMNWT.js → chunk-HMRN5QZL.js} +3 -3
  18. package/dist/{chunk-RPLDMNWT.js.map → chunk-HMRN5QZL.js.map} +1 -1
  19. package/dist/{chunk-TYL3Q4QG.js → chunk-K2N2TG4M.js} +1227 -1259
  20. package/dist/chunk-K2N2TG4M.js.map +1 -0
  21. package/dist/chunk-LHTLO65N.js +99 -0
  22. package/dist/chunk-LHTLO65N.js.map +1 -0
  23. package/dist/{chunk-OXV76U3Y.js → chunk-LU2R63B4.js} +3 -4
  24. package/dist/chunk-LU2R63B4.js.map +1 -0
  25. package/dist/{chunk-B4UBSMSZ.js → chunk-PUGFIZE3.js} +4 -3
  26. package/dist/chunk-PUGFIZE3.js.map +1 -0
  27. package/dist/chunk-PZE4KJJW.js +14 -0
  28. package/dist/{chunk-3EBGAOLH.js.map → chunk-PZE4KJJW.js.map} +1 -1
  29. package/dist/{chunk-RCHPHIHX.js → chunk-RZT65DRA.js} +2 -2
  30. package/dist/chunk-RZT65DRA.js.map +1 -0
  31. package/dist/chunk-UFAGBKYG.js +54 -0
  32. package/dist/chunk-UFAGBKYG.js.map +1 -0
  33. package/dist/{chunk-5HDQH7UC.js → chunk-VVJO4FC3.js} +28 -169
  34. package/dist/chunk-VVJO4FC3.js.map +1 -0
  35. package/dist/chunk-VVKXMIKQ.js +180 -0
  36. package/dist/chunk-VVKXMIKQ.js.map +1 -0
  37. package/dist/{chunk-OSSLRXKM.js → chunk-WFN3ZXGS.js} +6 -6
  38. package/dist/chunk-WFN3ZXGS.js.map +1 -0
  39. package/dist/chunk-Y7WD33L3.js +17 -0
  40. package/dist/chunk-Y7WD33L3.js.map +1 -0
  41. package/dist/{chunk-NAZPFZOO.js → chunk-Z5KNSSLC.js} +10 -8
  42. package/dist/chunk-Z5KNSSLC.js.map +1 -0
  43. package/dist/cli/cli-executable.js +702 -158
  44. package/dist/cli/cli-executable.js.map +1 -1
  45. package/dist/doctor.command-NUG3BYDQ.js +7 -0
  46. package/dist/{doctor.command-L3P5LBOW.js.map → doctor.command-NUG3BYDQ.js.map} +1 -1
  47. package/dist/dotenv-compat.js +5 -6
  48. package/dist/encrypt.command-AGHQ4KTI.js +7 -0
  49. package/dist/{encrypt.command-VGJABHNK.js.map → encrypt.command-AGHQ4KTI.js.map} +1 -1
  50. package/dist/env-B8lQt2sl.d.ts +42 -0
  51. package/dist/help.command-B7VWA53B.js +5 -0
  52. package/dist/{help.command-YZDL2VEQ.js.map → help.command-B7VWA53B.js.map} +1 -1
  53. package/dist/index.d.ts +1 -2
  54. package/dist/index.js +11 -10
  55. package/dist/index.js.map +1 -1
  56. package/dist/init.command-DHE2Q6FX.js +13 -0
  57. package/dist/{init.command-Q4YBHAEG.js.map → init.command-DHE2Q6FX.js.map} +1 -1
  58. package/dist/load.command-GGE4OANH.js +12 -0
  59. package/dist/{load.command-K22PEH3D.js.map → load.command-GGE4OANH.js.map} +1 -1
  60. package/dist/login.command-25PKQUGR.js +10 -0
  61. package/dist/{login.command-22RUZJLR.js.map → login.command-25PKQUGR.js.map} +1 -1
  62. package/dist/run.command-BLL6AL52.js +12 -0
  63. package/dist/{run.command-DUAYGL6F.js.map → run.command-BLL6AL52.js.map} +1 -1
  64. package/dist/runtime/env.d.ts +1 -27
  65. package/dist/runtime/env.js +1 -1
  66. package/dist/runtime/patch-console.js +2 -3
  67. package/dist/runtime/patch-response.js +2 -3
  68. package/dist/runtime/patch-server-response.js +2 -3
  69. package/dist/telemetry.command-MVL3E366.js +10 -0
  70. package/dist/telemetry.command-MVL3E366.js.map +1 -0
  71. package/package.json +6 -2
  72. package/dist/chunk-2CM6PMED.js.map +0 -1
  73. package/dist/chunk-3EBGAOLH.js +0 -14
  74. package/dist/chunk-3KZR56NU.js.map +0 -1
  75. package/dist/chunk-5HDQH7UC.js.map +0 -1
  76. package/dist/chunk-7QXRUUDC.js.map +0 -1
  77. package/dist/chunk-7UQXFWKN.js.map +0 -1
  78. package/dist/chunk-B4UBSMSZ.js.map +0 -1
  79. package/dist/chunk-CPA2D42B.js.map +0 -1
  80. package/dist/chunk-LQZ6ICSS.js +0 -21
  81. package/dist/chunk-LQZ6ICSS.js.map +0 -1
  82. package/dist/chunk-NAZPFZOO.js.map +0 -1
  83. package/dist/chunk-OSSLRXKM.js.map +0 -1
  84. package/dist/chunk-OXV76U3Y.js.map +0 -1
  85. package/dist/chunk-Q5P7F3WA.js +0 -107
  86. package/dist/chunk-Q5P7F3WA.js.map +0 -1
  87. package/dist/chunk-QCC3P7BT.js +0 -39
  88. package/dist/chunk-QCC3P7BT.js.map +0 -1
  89. package/dist/chunk-RCHPHIHX.js.map +0 -1
  90. package/dist/chunk-RF3YMFUX.js.map +0 -1
  91. package/dist/chunk-TYL3Q4QG.js.map +0 -1
  92. package/dist/chunk-XHOJF7U7.js +0 -12
  93. package/dist/chunk-XHOJF7U7.js.map +0 -1
  94. package/dist/doctor.command-L3P5LBOW.js +0 -6
  95. package/dist/encrypt.command-VGJABHNK.js +0 -6
  96. package/dist/help.command-YZDL2VEQ.js +0 -5
  97. package/dist/init.command-Q4YBHAEG.js +0 -11
  98. package/dist/load.command-K22PEH3D.js +0 -10
  99. package/dist/login.command-22RUZJLR.js +0 -7
  100. package/dist/opt-out.command-Y4KUQ6PQ.js +0 -5
  101. package/dist/opt-out.command-Y4KUQ6PQ.js.map +0 -1
  102. package/dist/run.command-DUAYGL6F.js +0 -10
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../utils/src/fs-utils.ts","../../../node_modules/.pnpm/is-unicode-supported@2.1.0/node_modules/is-unicode-supported/index.js","../src/cli/helpers/prompts.ts","../src/cli/helpers/infer-schema.ts","../src/cli/helpers/exit-error.ts","../src/cli/helpers/js-package-manager-utils.ts","../src/cli/commands/init.command.ts"],"names":["process","fs","parseEnvSpecDotEnvFile","envSpecUpdater","path"],"mappings":"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","file":"chunk-5HDQH7UC.js","sourcesContent":["import { accessSync } from 'node:fs';\nimport { access } from 'node:fs/promises';\n\nexport async function pathExists(p: string) {\n try {\n await access(p);\n return true;\n } catch {\n return false;\n }\n}\n\nexport function pathExistsSync(p:string) {\n try {\n accessSync(p);\n return true;\n } catch {\n return false;\n }\n}\n","import process from 'node:process';\n\nexport default function isUnicodeSupported() {\n\tconst {env} = process;\n\tconst {TERM, TERM_PROGRAM} = env;\n\n\tif (process.platform !== 'win32') {\n\t\treturn TERM !== 'linux'; // Linux console (kernel)\n\t}\n\n\treturn Boolean(env.WT_SESSION) // Windows Terminal\n\t\t|| Boolean(env.TERMINUS_SUBLIME) // Terminus (<0.2.27)\n\t\t|| env.ConEmuTask === '{cmd::Cmder}' // ConEmu and cmder\n\t\t|| TERM_PROGRAM === 'Terminus-Sublime'\n\t\t|| TERM_PROGRAM === 'vscode'\n\t\t|| TERM === 'xterm-256color'\n\t\t|| TERM === 'alacritty'\n\t\t|| TERM === 'rxvt-unicode'\n\t\t|| TERM === 'rxvt-unicode-256color'\n\t\t|| env.TERMINAL_EMULATOR === 'JetBrains-JediTerm';\n}\n","// this is a slightly modified version of @clack/prompts\n// mostly to remove the additional left border\n\nimport type { Readable, Writable } from 'node:stream';\nimport { WriteStream } from 'node:tty';\nimport {\n ConfirmPrompt, SelectPrompt, MultiSelectPrompt, type State,\n} from '@clack/core';\nimport color from 'ansis';\nimport isUnicodeSupported from 'is-unicode-supported';\n\nconst unicode = isUnicodeSupported();\nconst isCI = (): boolean => process.env.CI === 'true';\nconst unicodeOr = (c: string, fallback: string) => (unicode ? c : fallback);\nconst S_STEP_ACTIVE = unicodeOr('◆', '*');\nconst S_STEP_CANCEL = unicodeOr('■', 'x');\nconst S_STEP_ERROR = unicodeOr('▲', 'x');\nconst S_STEP_SUBMIT = unicodeOr('◇', 'o');\n\nconst S_BAR_START = unicodeOr('┌', 'T');\nconst S_BAR = unicodeOr('│', '|');\nconst S_BAR_END = unicodeOr('└', '—');\n\nconst S_RADIO_ACTIVE = unicodeOr('●', '>');\nconst S_RADIO_INACTIVE = unicodeOr('○', ' ');\nconst S_CHECKBOX_ACTIVE = unicodeOr('◻', '[•]');\nconst S_CHECKBOX_SELECTED = unicodeOr('◼', '[+]');\nconst S_CHECKBOX_INACTIVE = unicodeOr('◻', '[ ]');\nconst S_PASSWORD_MASK = unicodeOr('▪', '•');\n\nconst S_BAR_H = unicodeOr('─', '-');\nconst S_CORNER_TOP_RIGHT = unicodeOr('╮', '+');\nconst S_CONNECT_LEFT = unicodeOr('├', '+');\nconst S_CORNER_BOTTOM_RIGHT = unicodeOr('╯', '+');\n\nconst S_INFO = unicodeOr('●', '•');\nconst S_SUCCESS = unicodeOr('◆', '*');\nconst S_WARN = unicodeOr('▲', '!');\nconst S_ERROR = unicodeOr('■', 'x');\n\nconst symbol = (state: State) => {\n // eslint-disable-next-line default-case\n switch (state) {\n case 'initial':\n case 'active':\n return color.cyan(S_STEP_ACTIVE);\n case 'cancel':\n return color.red(S_STEP_CANCEL);\n case 'error':\n return color.yellow(S_STEP_ERROR);\n case 'submit':\n return color.green(S_STEP_SUBMIT);\n }\n};\n\nexport interface CommonOptions {\n input?: Readable;\n output?: Writable;\n}\n\n\n\n\n/// /\nexport interface LimitOptionsParams<TOption> extends CommonOptions {\n options: Array<TOption>;\n maxItems: number | undefined;\n cursor: number;\n style: (option: TOption, active: boolean) => string;\n}\n\nexport const limitOptions = <TOption>(params: LimitOptionsParams<TOption>): Array<string> => {\n const { cursor, options, style } = params;\n const output: Writable = params.output ?? process.stdout;\n const rows = output instanceof WriteStream && output.rows !== undefined ? output.rows : 10;\n\n const paramMaxItems = params.maxItems ?? Number.POSITIVE_INFINITY;\n const outputMaxItems = Math.max(rows - 4, 0);\n // We clamp to minimum 5 because anything less doesn't make sense UX wise\n const maxItems = Math.min(outputMaxItems, Math.max(paramMaxItems, 5));\n let slidingWindowLocation = 0;\n\n if (cursor >= slidingWindowLocation + maxItems - 3) {\n slidingWindowLocation = Math.max(Math.min(cursor - maxItems + 3, options.length - maxItems), 0);\n } else if (cursor < slidingWindowLocation + 2) {\n slidingWindowLocation = Math.max(cursor - 2, 0);\n }\n\n const shouldRenderTopEllipsis = maxItems < options.length && slidingWindowLocation > 0;\n const shouldRenderBottomEllipsis = maxItems < options.length && slidingWindowLocation + maxItems < options.length;\n\n return options\n .slice(slidingWindowLocation, slidingWindowLocation + maxItems)\n .map((option, i, arr) => {\n const isTopLimit = i === 0 && shouldRenderTopEllipsis;\n const isBottomLimit = i === arr.length - 1 && shouldRenderBottomEllipsis;\n return isTopLimit || isBottomLimit\n ? color.dim('...')\n : style(option, i + slidingWindowLocation === cursor);\n });\n};\n\n\n///\n\nexport interface ConfirmOptions extends CommonOptions {\n message: string;\n active?: string;\n inactive?: string;\n initialValue?: boolean;\n}\nexport const confirm = (opts: ConfirmOptions) => {\n const active = opts.active ?? 'Yes';\n const inactive = opts.inactive ?? 'No';\n return new ConfirmPrompt({\n active,\n inactive,\n input: opts.input,\n output: opts.output,\n initialValue: opts.initialValue ?? true,\n render() {\n const title = `\\n${symbol(this.state)} ${opts.message}\\n`;\n const value = this.value ? active : inactive;\n\n // NOTE it's trimming leading spaces, so we use an invisible character at the beginnign of the line to add some spacing\n switch (this.state) {\n case 'submit':\n return `${title}‎ ${color.dim(value)}`;\n case 'cancel':\n return `${title}‎ ${color.strikethrough(\n color.dim(value),\n )}\\n`;\n default: {\n return `${title}‎ ${\n this.value\n ? `${color.green(S_RADIO_ACTIVE)} ${active}`\n : `${color.dim(S_RADIO_INACTIVE)} ${color.dim(active)}`\n } ${color.dim('/')} ${\n !this.value\n ? `${color.green(S_RADIO_ACTIVE)} ${inactive}`\n : `${color.dim(S_RADIO_INACTIVE)} ${color.dim(inactive)}`\n }\\n`;\n }\n }\n },\n }).prompt() as Promise<boolean | symbol>;\n};\n\n\n\ntype Primitive = Readonly<string | boolean | number>;\n\nexport type Option<Value> = Value extends Primitive\n ? {\n /**\n * Internal data for this option.\n */\n value: Value;\n /**\n * The optional, user-facing text for this option.\n *\n * By default, the `value` is converted to a string.\n */\n label?: string;\n /**\n * An optional hint to display to the user when\n * this option might be selected.\n *\n * By default, no `hint` is displayed.\n */\n hint?: string;\n }\n : {\n /**\n * Internal data for this option.\n */\n value: Value;\n /**\n * Required. The user-facing text for this option.\n */\n label: string;\n /**\n * An optional hint to display to the user when\n * this option might be selected.\n *\n * By default, no `hint` is displayed.\n */\n hint?: string;\n };\n\nexport interface SelectOptions<Value> extends CommonOptions {\n message: string;\n options: Array<Option<Value>>;\n initialValue?: Value;\n maxItems?: number;\n}\n\nexport const select = <Value>(opts: SelectOptions<Value>) => {\n const opt = (option: Option<Value>, state: 'inactive' | 'active' | 'selected' | 'cancelled') => {\n const label = option.label ?? String(option.value);\n switch (state) {\n case 'selected':\n return `${color.dim(label)}`;\n case 'active':\n return `${color.green(S_RADIO_ACTIVE)} ${label} ${\n option.hint ? color.dim(`(${option.hint})`) : ''\n }`;\n case 'cancelled':\n return `${color.strikethrough(color.dim(label))}`;\n default:\n return `${color.dim(S_RADIO_INACTIVE)} ${color.dim(label)}`;\n }\n };\n\n return new SelectPrompt({\n options: opts.options,\n input: opts.input,\n output: opts.output,\n initialValue: opts.initialValue,\n render() {\n const title = `${color.gray(S_BAR)}\\n${symbol(this.state)} ${opts.message}\\n`;\n\n switch (this.state) {\n case 'submit':\n return `${title}${color.gray(S_BAR)} ${opt(this.options[this.cursor], 'selected')}`;\n case 'cancel':\n return `${title}${color.gray(S_BAR)} ${opt(\n this.options[this.cursor],\n 'cancelled',\n )}\\n${color.gray(S_BAR)}`;\n default: {\n return `${title}${color.cyan(S_BAR)} ${limitOptions({\n output: opts.output,\n cursor: this.cursor,\n options: this.options,\n maxItems: opts.maxItems,\n style: (item, active) => opt(item, active ? 'active' : 'inactive'),\n }).join(`\\n${color.cyan(S_BAR)} `)}\\n${color.cyan(S_BAR_END)}\\n`;\n }\n }\n },\n }).prompt() as Promise<Value | symbol>;\n};\n\n\nexport interface MultiSelectOptions<Value> extends CommonOptions {\n message: string;\n details?: string;\n options: Array<Option<Value>>;\n initialValues?: Array<Value>;\n maxItems?: number;\n required?: boolean;\n cursorAt?: Value;\n}\nexport const multiselect = <Value>(opts: MultiSelectOptions<Value>) => {\n const opt = (\n option: Option<Value>,\n state: 'inactive' | 'active' | 'selected' | 'active-selected' | 'submitted' | 'cancelled',\n ) => {\n const label = option.label ?? String(option.value);\n if (state === 'active') {\n return `${color.cyan(S_CHECKBOX_ACTIVE)} ${label} ${\n option.hint ? color.dim(`(${option.hint})`) : ''\n }`;\n }\n if (state === 'selected') {\n return `${color.green(S_CHECKBOX_SELECTED)} ${color.dim(label)} ${\n option.hint ? color.dim(`(${option.hint})`) : ''\n }`;\n }\n if (state === 'cancelled') {\n return `${color.strikethrough(color.dim(label))}`;\n }\n if (state === 'active-selected') {\n return `${color.green(S_CHECKBOX_SELECTED)} ${label} ${\n option.hint ? color.dim(`(${option.hint})`) : ''\n }`;\n }\n if (state === 'submitted') {\n return `${color.dim(label)}`;\n }\n return `${color.dim(S_CHECKBOX_INACTIVE)} ${color.dim(label)}`;\n };\n\n return new MultiSelectPrompt({\n options: opts.options,\n input: opts.input,\n output: opts.output,\n initialValues: opts.initialValues,\n required: opts.required ?? true,\n cursorAt: opts.cursorAt,\n validate(selected: Array<Value>) {\n if (this.required && selected.length === 0) {\n return `Please select at least one option.\\n${color.reset(\n color.dim(\n `Press ${color.gray(color.bgWhite(color.inverse(' space ')))} to select, ${color.gray(\n color.bgWhite(color.inverse(' enter ')),\n )} to submit`,\n ),\n )}`;\n }\n },\n render() {\n let title = `${color.gray(S_BAR)}\\n${symbol(this.state)} ${opts.message}\\n`;\n if (opts.details) title += `${color.gray(S_BAR)} ${opts.details}\\n`;\n\n const styleOption = (option: Option<Value>, active: boolean) => {\n const selected = this.value.includes(option.value);\n if (active && selected) {\n return opt(option, 'active-selected');\n }\n if (selected) {\n return opt(option, 'selected');\n }\n return opt(option, active ? 'active' : 'inactive');\n };\n\n switch (this.state) {\n case 'submit': {\n return `${title}${color.gray(S_BAR)} ${\n this.options\n .filter(({ value }) => this.value.includes(value))\n .map((option) => opt(option, 'submitted'))\n .join(color.dim(', ')) || color.dim('none')\n }`;\n }\n case 'cancel': {\n const label = this.options\n .filter(({ value }) => this.value.includes(value))\n .map((option) => opt(option, 'cancelled'))\n .join(color.dim(', '));\n return `${title}${color.gray(S_BAR)} ${\n label.trim() ? `${label}\\n${color.gray(S_BAR)}` : ''\n }`;\n }\n case 'error': {\n const footer = this.error\n .split('\\n')\n .map((ln, i) => (i === 0 ? `${color.yellow(S_BAR_END)} ${color.yellow(ln)}` : ` ${ln}`))\n .join('\\n');\n return `${title + color.yellow(S_BAR)} ${limitOptions({\n output: opts.output,\n options: this.options,\n cursor: this.cursor,\n maxItems: opts.maxItems,\n style: styleOption,\n }).join(`\\n${color.yellow(S_BAR)} `)}\\n${footer}\\n`;\n }\n default: {\n return `${title}${color.cyan(S_BAR)} ${limitOptions({\n output: opts.output,\n options: this.options,\n cursor: this.cursor,\n maxItems: opts.maxItems,\n style: styleOption,\n }).join(`\\n${color.cyan(S_BAR)} `)}\\n${color.cyan(S_BAR_END)}\\n`;\n }\n }\n },\n }).prompt() as Promise<Array<Value> | symbol>;\n};\n\n\n\n/// ////\n\nconst prompts = {\n confirm,\n select,\n multiselect,\n};\n\nexport default prompts;\n","import fs from 'node:fs/promises';\nimport { DotEnvFileDataSource, EnvGraph } from '@env-spec/env-graph';\nimport {\n envSpecUpdater, ParsedEnvSpecFile, ParsedEnvSpecStaticValue, parseEnvSpecDotEnvFile,\n} from '@env-spec/parser';\nimport { StaticValueResolver } from '../../../../env-graph/src/lib/resolver';\n\n\nconst PUBLIC_PREFIXES = [\n 'PUBLIC',\n 'VITE',\n 'NEXT_PUBLIC',\n 'NUXT_PUBLIC',\n];\nconst PUBLIC_KEYWORDS = ['PUBLIC'];\nconst SENSITIVE_KEYWORDS = [\n 'SECRET',\n 'API_KEY',\n 'PASSWORD',\n 'TOKEN',\n 'PRIVATE',\n 'CREDENTIALS',\n];\n\nfunction isValidUrl(val: string) {\n try {\n const u = new URL(val);\n return true;\n } catch (err) {\n return false;\n }\n}\n\nconst EMAIL_REGEX = /^(([^<>()[\\]\\\\.,;:\\s@\"]+(\\.[^<>()[\\]\\\\.,;:\\s@\"]+)*)|(\".+\"))@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}])|(([a-zA-Z\\-0-9]+\\.)+[a-zA-Z]{2,}))$/;\nconst VALID_NUMBER_REGEX = /^(0|([1-9][0-9]*))?(\\.[0-9]+)?$/;\n\n\nfunction inferItemDecorators(file: ParsedEnvSpecFile, itemKey: string, valueStr: string) {\n // infer @sensitive\n let itemIsPublic = false;\n if (PUBLIC_PREFIXES.some((prefix) => itemKey.startsWith(prefix))) itemIsPublic = true;\n if (PUBLIC_KEYWORDS.some((keyword) => itemKey.includes(keyword))) itemIsPublic = true;\n\n let itemIsSensitive = false;\n if (SENSITIVE_KEYWORDS.some((keyword) => itemKey.includes(keyword))) itemIsSensitive = true;\n\n if (itemIsPublic) {\n // not marking these for now, since we've already made the default not sensitive\n // envSpecUpdater.setItemDecorator(file, itemKey, 'sensitive', 'false');\n } else if (itemIsSensitive) {\n envSpecUpdater.setItemDecorator(file, itemKey, 'sensitive', 'true');\n }\n\n // infer @type\n // > from key\n if (itemKey === 'PORT' || itemKey.endsWith('_PORT')) {\n envSpecUpdater.setItemDecorator(file, itemKey, 'type', 'port');\n } else if (itemKey.endsWith('_EMAIL')) {\n envSpecUpdater.setItemDecorator(file, itemKey, 'type', 'email');\n } else if (itemKey.endsWith('_URL') || itemKey.endsWith('_URI')) {\n envSpecUpdater.setItemDecorator(file, itemKey, 'type', 'url');\n\n\n // > from value\n } else if (valueStr) {\n // move obvious examples to @example\n if (valueStr.startsWith('<') && valueStr.endsWith('>')) {\n envSpecUpdater.setItemDecorator(file, itemKey, 'example', valueStr);\n // remove example from value\n }\n\n if (valueStr === 'true' || valueStr === 'false') {\n envSpecUpdater.setItemDecorator(file, itemKey, 'type', 'boolean');\n } else if (EMAIL_REGEX.test(valueStr)) {\n envSpecUpdater.setItemDecorator(file, itemKey, 'type', 'email');\n } else if (valueStr !== '0' && valueStr !== '1' && VALID_NUMBER_REGEX.test(valueStr)) {\n envSpecUpdater.setItemDecorator(file, itemKey, 'type', 'number');\n } else if (isValidUrl(valueStr)) {\n envSpecUpdater.setItemDecorator(file, itemKey, 'type', 'url');\n }\n // TODO: more...\n }\n}\n\nexport function inferSchemaUpdates(file: ParsedEnvSpecFile) {\n for (const item of file.configItems) {\n const valueStr = (\n item.value instanceof ParsedEnvSpecStaticValue && item.value.value?.toString()\n ) || '';\n // console.log(item.key, '-', valueStr);\n inferItemDecorators(file, item.key, valueStr);\n }\n}\n\n\nexport function ensureAllItemsExist(envGraph: EnvGraph, schemaFile: ParsedEnvSpecFile) {\n const addedItemKeys: Array<string> = [];\n for (const itemKey in envGraph.configSchema) {\n const item = envGraph.configSchema[itemKey];\n const itemInSchema = schemaFile.configItems.find((i) => i.key === itemKey);\n\n if (!itemInSchema) {\n if (addedItemKeys.length === 0) {\n envSpecUpdater.injectFromStr(schemaFile, [\n '',\n '# items added to schema by `varlock init`',\n '# that were missing in example, but detected in other env files',\n '# PLEASE REVIEW THESE!',\n '# ---',\n '',\n ].join('\\n'), { location: 'end' });\n }\n addedItemKeys.push(itemKey);\n envSpecUpdater.injectFromStr(schemaFile, [`${itemKey}=`].join('\\n'));\n const itemValue = (\n item.valueResolver instanceof StaticValueResolver && item.valueResolver.staticValue\n ) || '';\n inferItemDecorators(schemaFile, itemKey, String(itemValue));\n }\n }\n}\n\nexport async function detectRedundantValues(envGraph: EnvGraph, opts: { delete?: boolean } = {}) {\n const schema = envGraph.schemaDataSource;\n if (!schema) return {};\n const redundantItemsBySourcePath: Record<string, Array<string>> = {};\n const schemaValues = schema.getStaticValues();\n for (const source of envGraph.dataSources) {\n if (source === schema) continue;\n // we'll skip example files, since it is expected to be deleted and full of redundant values\n if (source.type === 'example') continue;\n if (!(source instanceof DotEnvFileDataSource) || !source.parsedFile) continue;\n\n const sourceValues = source.getStaticValues();\n for (const [key, value] of Object.entries(sourceValues)) {\n if (schemaValues[key] !== value) continue;\n\n redundantItemsBySourcePath[source.fullPath] ||= [];\n redundantItemsBySourcePath[source.fullPath].push(key);\n if (opts.delete) {\n envSpecUpdater.deleteItem(source.parsedFile, key);\n }\n }\n\n if (opts.delete) {\n await fs.writeFile(source.fullPath, source.parsedFile.toString(), 'utf8');\n }\n }\n\n return redundantItemsBySourcePath;\n}\n","import ansis from 'ansis';\nimport _ from '@env-spec/utils/my-dash';\nimport { joinAndCompact } from '../../lib/formatting';\n\nexport class CliExitError extends Error {\n constructor(\n message: string,\n private more?: {\n details?: string | Array<string>,\n suggestion?: string | Array<string>,\n /** always triggers a full exit, even in watch mode - useful if problem is irrecoverable */\n forceExit?: boolean,\n },\n ) {\n super(message);\n }\n\n get forceExit() { return !!this.more?.forceExit; }\n\n getFormattedOutput() {\n let msg = `\\n💥 ${ansis.red(this.message)} 💥\\n`;\n\n if (this.more?.details) {\n msg += joinAndCompact(_.castArray(this.more?.details), '\\n');\n }\n\n if (this.more?.suggestion) {\n msg += joinAndCompact(_.castArray(this.more?.suggestion), '\\n');\n }\n\n msg += '\\n';\n return msg;\n }\n}\n","import path from 'node:path';\nimport fs, { existsSync } from 'node:fs';\nimport { pathExistsSync } from '@env-spec/utils/fs-utils';\n\nimport { CliExitError } from './exit-error';\nimport { execSync } from 'node:child_process';\n\nexport type JsPackageManager = 'npm' | 'pnpm' | 'yarn' | 'bun' | 'deno';\n\ntype JsPackageManagerMeta = {\n name: JsPackageManager;\n lockfile: string;\n add: string;\n exec: string;\n dlx: string;\n};\n\nexport const JS_PACKAGE_MANAGERS: Record<JsPackageManager, JsPackageManagerMeta> = Object.freeze({\n npm: {\n name: 'npm',\n lockfile: 'package-lock.json',\n add: 'npm install', // add also works\n exec: 'npm exec --',\n dlx: 'npx',\n },\n pnpm: {\n name: 'pnpm',\n lockfile: 'pnpm-lock.yaml',\n add: 'pnpm add',\n exec: 'pnpm exec',\n dlx: 'pnpm dlx',\n },\n yarn: {\n name: 'yarn',\n lockfile: 'yarn.lock',\n add: 'yarn add',\n exec: 'yarn exec --',\n dlx: 'yarn dlx',\n },\n bun: {\n name: 'bun',\n lockfile: 'bun.lockb',\n add: 'bun add',\n exec: 'bun run',\n dlx: 'bunx',\n },\n deno: { //! deno not fully supported yet\n name: 'deno',\n lockfile: 'deno.lock',\n add: 'deno add',\n // TODO: don't think these are quite right...\n exec: 'deno run',\n dlx: 'deno run',\n },\n});\n\n/**\n * detect js package manager\n *\n * currently go up the folder tree looking for lockfiles (ex: package-lock.json, pnpm-lock.yaml)\n * if nothing found, we'll look at process.env.npm_config_user_agent\n * */\nexport function detectJsPackageManager(opts?: {\n cwd?: string,\n workspaceRootPath?: string,\n exitIfNotFound?: boolean,\n}) {\n let cwd = opts?.cwd || process.cwd();\n const cwdParts = cwd.split(path.sep);\n do {\n let pm: JsPackageManager;\n let detectedPm: JsPackageManager | undefined;\n for (pm in JS_PACKAGE_MANAGERS) {\n const lockFilePath = path.join(\n cwd,\n JS_PACKAGE_MANAGERS[pm].lockfile,\n );\n\n if (pathExistsSync(lockFilePath)) {\n // if we find 2 lockfiles at the same level, we throw an error\n if (detectedPm) {\n throw new CliExitError('Found multiple js package manager lockfiles', {\n details: `${JS_PACKAGE_MANAGERS[pm].lockfile} and ${JS_PACKAGE_MANAGERS[detectedPm].lockfile}`,\n forceExit: true,\n });\n }\n detectedPm = pm;\n }\n }\n if (detectedPm) return JS_PACKAGE_MANAGERS[detectedPm];\n\n cwdParts.pop();\n cwd = path.join(...cwdParts);\n if (opts?.workspaceRootPath) {\n if (opts.workspaceRootPath === cwd) break;\n } else {\n // if we don't have a workspace root path, we'll break if we hit the git repo root\n if (pathExistsSync(path.join(cwd, '.git'))) break;\n }\n } while (cwd);\n\n // if we did not find a lockfile, we'll look at env vars for other hints\n if (process.env.npm_config_user_agent) {\n const pmFromAgent = process.env.npm_config_user_agent.split('/')[0];\n if (Object.keys(JS_PACKAGE_MANAGERS).includes(pmFromAgent)) {\n return JS_PACKAGE_MANAGERS[pmFromAgent as JsPackageManager];\n }\n }\n\n if (opts?.exitIfNotFound) {\n // show some hopefully useful error messaging if we hit the root folder without finding anything\n throw new CliExitError('Unable to find detect your JavaScript package manager!', {\n suggestion: 'We look for lock files (ex: package-lock.json) so you may just need to run a dependency install (ie `npm install`)',\n forceExit: true,\n });\n }\n}\n\n\n\n\nexport function installJsDependency(opts: {\n packageName: string,\n packageManager: JsPackageManager,\n packagePath?: string,\n isMonoRepoRoot?: boolean,\n}) {\n const packageJsonPath = path.join(opts.packagePath || process.cwd(), 'package.json');\n\n // for now, we'll just bail if we dont see a package.json\n if (!existsSync(packageJsonPath)) return false;\n\n const packageJson = JSON.parse(fs.readFileSync(packageJsonPath, 'utf8'));\n // bail if already installed\n if (packageJson.dependencies?.varlock) return false;\n\n // TODO: might want to check first if it's already installed?\n execSync([\n opts.packagePath ? `cd ${opts.packagePath} &&` : '',\n // `add` works in all of them\n `${opts.packageManager} add ${opts.packageName}`,\n (opts.isMonoRepoRoot && opts.packageManager === 'pnpm') ? '-w' : '',\n ].join(' '));\n\n return true;\n}\n\n","/* eslint-disable @stylistic/quotes */\nimport path from 'node:path';\nimport fs from 'node:fs/promises';\nimport ansis from 'ansis';\nimport { isCancel, select } from '@clack/prompts';\nimport { define } from 'gunshi';\n\nimport _ from '@env-spec/utils/my-dash';\nimport { DotEnvFileDataSource } from '@env-spec/env-graph';\nimport { envSpecUpdater, parseEnvSpecDotEnvFile } from '@env-spec/parser';\nimport { checkIsFileGitIgnored } from '@env-spec/utils/git-utils';\nimport { pathExists } from '@env-spec/utils/fs-utils';\n\nimport { loadVarlockEnvGraph } from '../../lib/load-graph';\nimport prompts from '../helpers/prompts';\nimport { fmt, logLines } from '../helpers/pretty-format';\nimport { detectRedundantValues, ensureAllItemsExist, inferSchemaUpdates } from '../helpers/infer-schema';\nimport { detectJsPackageManager, installJsDependency } from '../helpers/js-package-manager-utils';\nimport { TypedGunshiCommandFn } from '../helpers/gunshi-type-utils';\n\nexport const commandSpec = define({\n name: 'init',\n description: 'Set up varlock in the current project',\n args: {},\n});\n\nexport const commandFn: TypedGunshiCommandFn<typeof commandSpec> = async (ctx) => {\n let showOnboarding = true;\n\n if (showOnboarding) {\n console.log('🧙 Hello and welcome to Varlock 🔒🔥✨');\n // console.log(VARLOCK_BANNER_COLOR);\n }\n\n let envGraph = await loadVarlockEnvGraph();\n const existingSchemaFile = envGraph.dataSources.find((dataSource) => {\n return dataSource.type === 'schema';\n });\n\n // * SET UP SCHEMA ---------------------------------------------\n if (existingSchemaFile) {\n // for now - we don't do anything if they already have a schema set up\n // in the future, we may want to add more tools for projects that are already set up\n logLines([\n `It looks like you already have a ${fmt.fileName('.env.schema')} file 🎉`,\n 'This init helper is meant to help you get a new project set up.',\n 'If you need to make changes to your schema or values, you can update your files directly.',\n 'See more docs at https://varlock.dev/guides/schema',\n ]);\n } else {\n // find/select example file to use for schema gereration\n let exampleFileToConvert: DotEnvFileDataSource | null = null;\n const allExampleFiles = envGraph.dataSources.filter((dataSource) => {\n return dataSource instanceof DotEnvFileDataSource && dataSource.type === 'example';\n }) as Array<DotEnvFileDataSource>;\n if (allExampleFiles.length === 1) {\n exampleFileToConvert = allExampleFiles[0];\n } else if (allExampleFiles.length > 1) {\n console.log('');\n // not sure what to do here... could have them select one?\n const selectedExample = await select({\n message: `We detected more than one example .env file. Which one should we use to create your new ${fmt.fileName('.env.schema')}?`,\n options: allExampleFiles.map((file) => ({\n label: file.fileName,\n value: file,\n })),\n });\n if (isCancel(selectedExample)) process.exit(0);\n exampleFileToConvert = selectedExample;\n }\n\n // update the schema\n const parsedEnvFile = exampleFileToConvert?.parsedFile || parseEnvSpecDotEnvFile('');\n if (!parsedEnvFile) throw new Error('No parsed .env file found');\n envSpecUpdater.ensureHeader(parsedEnvFile, [\n 'This env file uses @env-spec - see https://varlock.dev/env-spec for more info',\n '',\n // TODO: add env spec version? real links?\n ].join('\\n'));\n envSpecUpdater.setRootDecorator(parsedEnvFile, 'defaultRequired', 'false', { explicitTrue: true });\n envSpecUpdater.setRootDecorator(parsedEnvFile, 'defaultSensitive', 'false', { explicitTrue: true });\n // TODO: detect js/ts project before adding this\n envSpecUpdater.setRootDecorator(parsedEnvFile, 'generateTypes', 'lang=ts, path=env.d.ts', { bareFnArgs: true });\n // envSpecUpdater.setRootDecorator(parsedEnvFile, 'envFlag', 'APP_ENV', { comment: 'controls automatic loading of env-specific files (e.g. .env.test, .env.prod, etc.)' });\n\n // add example item\n envSpecUpdater.injectFromStr(parsedEnvFile, [\n '',\n '# example env variable injected by `varlock init`',\n '# @required @sensitive @example=\"example value\"',\n 'EXAMPLE_ITEM=\"delete me!\"',\n '',\n ].join('\\n'), { location: 'after_header' });\n // update some decorators based on some simple heuristics\n inferSchemaUpdates(parsedEnvFile);\n // add items we find in other env files, but are missing in the schema/example\n ensureAllItemsExist(envGraph, parsedEnvFile);\n\n // write new updated schema file\n const schemaFilePath = path.join(process.cwd(), '.env.schema');\n await fs.writeFile(schemaFilePath, parsedEnvFile.toString());\n\n // log new schema file path\n if (exampleFileToConvert) {\n logLines([\n '',\n `Your ${fmt.fileName(exampleFileToConvert.fileName)} has been used to generate your new ${fmt.fileName('.env.schema')}:`,\n fmt.filePath(schemaFilePath),\n ]);\n } else {\n logLines([\n '',\n `Your new ${fmt.fileName('.env.schema')} file has been created:`,\n fmt.filePath(schemaFilePath),\n ]);\n }\n\n // make sure .env.schema is not gitignored\n if (await checkIsFileGitIgnored(schemaFilePath)) {\n // maybe could do this silently? it's relatively harmless\n logLines([ansis.dim(`(and updated ${fmt.fileName('.gitignore')} to ensure it will be tracked by git)`)]);\n await fs.appendFile('.gitignore', '\\n!.env.schema');\n }\n\n // ask them to review and confirm\n logLines([\n '',\n ansis.bold(`🚧 Please review and update your new ${fmt.fileName('.env.schema')} file! 🚧`),\n `We've done our best to get you started, but you must review and make sure it is correct!`,\n '',\n `👉 Some helpful pointers to get you started:`,\n `- use ${fmt.decorator('@required')} (or ${fmt.decorator('@optional')}) to tag items that should fail validation when empty`,\n `- use ${fmt.decorator('@sensitive')} to tag items that contain sensitive secrets, and must be handled accordingly`,\n `- use ${fmt.decorator('@type')} to set an item's data type (if not a basic string), which affects validation and coercion logic`,\n `- if an item value is purely an ${ansis.italic('example')} rather than a default, move it into an ${fmt.decorator('@example')} decorator, or delete it`,\n `- if an item value is just a dummy placeholder, delete it`,\n ]);\n const confirmReviewed = await prompts.confirm({\n message: `Have you reviewed and updated your new ${fmt.fileName('.env.schema')} file?`,\n });\n if (isCancel(confirmReviewed)) process.exit(0);\n\n // reload the graph\n envGraph = await loadVarlockEnvGraph();\n\n // check if they removed the EXAMPLE_ITEM and warn them\n if (envGraph.configSchema.EXAMPLE_ITEM) {\n logLines([\n '',\n ansis.bold(`🚨 Really? ${ansis.red(\"You didn't remove the EXAMPLE_ITEM!\")}`),\n `Please make sure your schema is all correct before using it...`,\n ]);\n }\n\n // delete the example file if they want us to\n if (exampleFileToConvert) {\n const confirmDeleteExample = await prompts.confirm({\n message: `Should we delete your ${fmt.fileName(exampleFileToConvert.fileName)} file? ${ansis.italic.gray('(you can always do this yourself later)')}`,\n });\n if (isCancel(confirmDeleteExample)) process.exit(0);\n if (confirmDeleteExample) {\n await fs.unlink(exampleFileToConvert.fullPath);\n }\n }\n\n // recommendation to delete defaults file\n const defaultsFile = envGraph.dataSources.find((dataSource) => {\n return dataSource instanceof DotEnvFileDataSource && dataSource.type === 'defaults';\n }) as DotEnvFileDataSource;\n if (defaultsFile) {\n logLines([\n '',\n `🚧 We detected a ${fmt.fileName(defaultsFile.fileName)} file in your project`,\n `You should migrate these default values into ${fmt.fileName('.env.schema')} and delete ${fmt.fileName(defaultsFile.fileName)}`,\n ]);\n }\n\n // detect and remove redundant defaults that are now in the schema\n const redundantInfo = await detectRedundantValues(envGraph);\n if (Object.keys(redundantInfo).length > 0) {\n logLines([\n '',\n ansis.bold('‼️ Now that your schema contains defaults, some values in your other .env files are redundant:'),\n ]);\n for (const [sourcePath, itemKeys] of Object.entries(redundantInfo)) {\n console.log(fmt.filePath(sourcePath));\n console.log(' ', itemKeys.map((k) => ansis.italic(k)).join(', '));\n }\n\n const confirmDeleteRedundant = await prompts.confirm({\n message: 'Should we delete these redundant values from your other .env files?',\n });\n if (isCancel(confirmDeleteRedundant)) process.exit(0);\n if (confirmDeleteRedundant) {\n await detectRedundantValues(envGraph, { delete: true });\n }\n }\n\n // final success!\n logLines([\n '',\n ansis.bold('🎉 Great!'),\n `You can run ${fmt.command('varlock load')} to attempt loading your env vars validate against your new schema.`,\n 'Check out our integration guide for more info about integrating into your application.',\n ]);\n }\n\n // * MAKE SURE VARLOCK IS INSTALLED ------------------------------------------\n const jsPackageManager = detectJsPackageManager();\n if (jsPackageManager && await pathExists(path.join(process.cwd(), 'package.json'))) {\n const installResult = installJsDependency({\n packageManager: jsPackageManager.name,\n packageName: 'varlock',\n });\n if (installResult) {\n logLines([\n '',\n `✅ Added ${fmt.packageName('varlock')} as a dependency in your package.json`,\n ]);\n }\n }\n};\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/runtime/env.ts"],"names":[],"mappings":"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","file":"chunk-7QXRUUDC.js","sourcesContent":["import { type SerializedEnvGraph } from '@env-spec/env-graph';\nimport { debug } from './lib/debug';\nimport { redactString } from './lib/redaction';\n\n// TODO: would like to move all of the redaction utils out of this file\n// but its complicated since it is imported by code that may be run in the backend and frontend\n// but the patching code (which only runs in the backend) use these helper functions\n\n// this does not cover all cases, but serves our needs so far for Next.js\nfunction isString(s: any) {\n return Object.prototype.toString.call(s) === '[object String]';\n}\n\nconst UNMASK_STR = '👁';\n\n\n/** key value lookup of sensitive values to their redacted version */\nlet sensitiveSecretsMap: Record<string, { key: string, redacted: string }> = {};\n\ntype ReplaceFn = (match: string, pre: string, val: string, post: string) => string;\nlet redactorFindReplace: undefined | { find: RegExp, replace: ReplaceFn };\n\nexport function resetRedactionMap(graph: SerializedEnvGraph) {\n // reset map of { [sensitive] => redacted }\n sensitiveSecretsMap = {};\n for (const itemKey in graph.config) {\n const item = graph.config[itemKey];\n if (item.isSensitive && item.value && isString(item.value)) {\n // TODO: we want to respect masking settings from the schema (once added)\n const redacted = redactString(item.value);\n if (redacted) sensitiveSecretsMap[item.value] = { key: itemKey, redacted };\n }\n }\n\n // reset find/replace regex+fn used for redacting secrets in strings\n const findRegex = new RegExp(\n [\n `(${UNMASK_STR} )?`,\n '(',\n Object.keys(sensitiveSecretsMap)\n // Escape special characters\n .map((s) => s.replace(/[()[\\]{}*+?^$|#.,/\\\\\\s-]/g, '\\\\$&'))\n // Sort for maximal munch\n .sort((a, b) => b.length - a.length)\n .join('|'),\n ')',\n `( ${UNMASK_STR})?`,\n ].join(''),\n 'g',\n );\n\n const replaceFn: ReplaceFn = (match, pre, val, post) => {\n // the pre and post matches only will be populated if they were present\n // and they are used to unmask the secret - so we do not want to replace in this case\n if (pre && post) return match;\n return sensitiveSecretsMap[val].redacted;\n };\n redactorFindReplace = { find: findRegex, replace: replaceFn };\n}\n\n\n// While the module itself acts as a singleton to hold the current map of redacted values\n// we expose only the below const to end users\n\n\n/**\n * Redacts senstive config values from any string/array/object/etc\n *\n * NOTE - must be used only after varlock has loaded config\n * */\nexport function redactSensitiveConfig(o: any): any {\n if (!redactorFindReplace) return o;\n if (!o) return o;\n\n // TODO: handle more cases?\n // we can probably redact safely from a few other datatypes - like set,map,etc?\n // objects are a bit tougher\n if (Array.isArray(o)) {\n return o.map(redactSensitiveConfig);\n }\n // try to redact if it's a plain object - not necessarily great for perf...\n if (o && typeof (o) === 'object' && Object.getPrototypeOf(o) === Object.prototype) {\n try {\n return JSON.parse(redactSensitiveConfig(JSON.stringify(o)));\n } catch (err) {\n return o;\n }\n }\n\n const type = typeof o;\n if (type === 'string' || (type === 'object' && Object.prototype.toString.call(o) === '[object String]')) {\n return (o as string).replaceAll(redactorFindReplace.find, redactorFindReplace.replace);\n }\n\n return o;\n}\n\n/**\n * utility to unmask a secret/sensitive value when logging to the console\n * currently this only works on a single secret, not objects or aggregated strings\n * */\nexport function revealSensitiveConfig(secretStr: string) {\n // if redaction not enabled, we just return the secret itself\n if (!(globalThis as any)._varlockOrigWriteToConsoleFn) return secretStr;\n // otherwise we add some wrapper characters which will be removed by the patched console behaviour\n return `${UNMASK_STR} ${secretStr} ${UNMASK_STR}`;\n}\n\n\n\n\n\n// reusable leak scanning helper function, used by various integrations\nexport function scanForLeaks(\n toScan: string | Response | ReadableStream,\n // optional additional information about what is being scanned to be used in error messages\n meta?: {\n method?: string,\n file?: string,\n },\n) {\n function scanStrForLeaks(strToScan: string) {\n // console.log('[varlock leak scanner] ', strToScan.substr(0, 100));\n\n // TODO: probably should use a single regex\n for (const sensitiveValue in sensitiveSecretsMap) {\n if (strToScan.includes(sensitiveValue)) {\n const itemKey = sensitiveSecretsMap[sensitiveValue].key;\n\n // error stack can gets awkwardly buried since we're so deep in the internals\n // so we'll write a nicer error message to help the user debug\n console.error([\n '',\n `🚨 ${'DETECTED LEAKED SENSITIVE CONFIG'} 🚨`,\n `> Config item key: ${itemKey}`,\n ...meta?.method ? [`> Scan method: ${meta.method}`] : [],\n ...meta?.file ? [`> File: ${meta.file}`] : [],\n '',\n ].join('\\n'));\n\n throw new Error(`🚨 DETECTED LEAKED SENSITIVE CONFIG - ${itemKey}`);\n }\n }\n }\n\n // scan a string\n if (isString(toScan)) {\n scanStrForLeaks(toScan as string);\n return toScan;\n } else if (toScan instanceof Buffer) {\n scanStrForLeaks(toScan.toString());\n return toScan;\n // scan a ReadableStream by piping it through a scanner\n } else if (toScan instanceof ReadableStream) {\n if (toScan.locked) {\n // console.log('> stream already locked');\n return toScan;\n } else {\n // console.log('> stream will be scanned!');\n }\n const chunkDecoder = new TextDecoder();\n return toScan.pipeThrough(\n new TransformStream({\n transform(chunk, controller) {\n const chunkStr = chunkDecoder.decode(chunk);\n scanStrForLeaks(chunkStr);\n controller.enqueue(chunk);\n },\n }),\n );\n }\n // other things may be passed in like Buffer... but we'll ignore for now\n return toScan;\n}\n\n// -----------\n\n\n\n\n// --------------\n\nlet initializedEnv = false;\nconst envValues = {} as Record<string, any>;\nexport const varlockSettings = {} as Record<string, any>;\n\nexport function initVarlockEnv(opts?: {\n setProcessEnv?: boolean,\n}) {\n // console.log('⚡️ INIT VARLOCK ENV!', initializedEnv, !!process.env.__VARLOCK_ENV);\n try {\n const serializedEnvData: SerializedEnvGraph = JSON.parse(process.env.__VARLOCK_ENV || '{}');\n Object.assign(varlockSettings, serializedEnvData.settings);\n resetRedactionMap(serializedEnvData);\n for (const itemKey in serializedEnvData.config) {\n const itemValue = serializedEnvData.config[itemKey].value;\n envValues[itemKey] = itemValue;\n if (opts?.setProcessEnv !== false && itemValue !== undefined) process.env[itemKey] = String(itemValue);\n }\n } catch (err) {\n console.error('failed to load varlock env', err, process.env.__VARLOCK_ENV);\n }\n initializedEnv = true;\n}\n\nif (process.env.__VARLOCK_ENV && !initializedEnv) {\n // if we are automatically loading because __VARLOCK_ENV is already set\n // then we assume process.env vars have also already been set (although might not harm anything?)\n initVarlockEnv({ setProcessEnv: false });\n}\n\n\nexport interface TypedEnvSchema {}\n\nconst EnvProxy = new Proxy<TypedEnvSchema>({}, {\n get(target, prop) {\n if (typeof prop !== 'string') throw new Error('prop keys cannot be symbols');\n return envValues[prop];\n },\n});\n\nexport const ENV = EnvProxy;\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../node_modules/.pnpm/ansis@4.1.0/node_modules/ansis/index.cjs","../../../node_modules/.pnpm/ansis@4.1.0/node_modules/ansis/index.mjs"],"names":["a","e","t","r","n","l","o","i","c","p","u","s","y"],"mappings":";;;AAAA,IAAA,aAAA,GAAA,UAAA,CAAA;AAAA,EAAA,mEAAA,CAAA,OAAA,EAAA,MAAA,EAAA;AAAA,IAAI,IAAA,CAAA;AAAJ,IAAM,IAAA,CAAA;AAAN,IAAQ,IAAA,CAAA;AAAR,IAAU,IAAA,EAAC,gBAAe,CAAE,EAAA,cAAA,EAAe,GAAE,MAAO,EAAA,CAAA,EAAE,IAAK,EAAA,CAAA,EAAG,GAAA,MAAA;AAA9D,IAAA,IAAqE,CAAE,GAAA,EAAA;AAAvE,IAAA,IAA0E,EAAC,KAAA,EAAM,CAAE,EAAA,GAAA,EAAIA,IAAG,GAAA,IAAA;AAA1F,IAA+F,IAAA,CAAA,2BAAEC,EAAG,KAAA;AAAC,MAAA,IAAIC,KAAE,iBAAkB,CAAA,IAAA,CAAKD,EAAC,CAAA,GAAI,CAAC,CAAEE,EAAAA,EAAAA,GAAED,EAAG,EAAA,MAAA,EAAOE,KAAE,QAAS,CAAA,CAAA,GAAED,EAAE,GAAA,CAAA,GAAEA,KAAE,GAAID,GAAAA,EAAAA,CAAE,CAAC,CAAA,GAAEA,GAAE,CAAC,CAAA,GAAEA,EAAE,CAAA,CAAC,IAAEA,EAAE,CAAA,CAAC,CAAEA,GAAAA,EAAAA,CAAE,CAAC,CAAEA,GAAAA,EAAAA,CAAE,CAAC,CAAA,GAAEA,IAAE,EAAE,CAAA;AAAE,MAAM,OAAA,CAACE,MAAG,EAAG,GAAA,GAAA,EAAIA,MAAG,CAAE,GAAA,GAAA,EAAI,MAAIA,EAAC,CAAA;AAAA,KAA/I,EAAA,GAAA,CAAA;AAAjG,IAAA,IAAmP,oBAAGH,MAAAA,CAAAA,CAAAA,EAAAA,EAAEC,EAAEC,EAAAA,EAAAA,KAAIF,KAAEC,EAAGA,IAAAA,EAAAA,GAAEC,EAAE,GAAA,EAAA,GAAG,KAAG,CAAEF,CAAAA,EAAAA,GAAE,EAAE,CAAA,GAAE,IAAE,CAAEC,CAAAA,EAAAA,GAAE,EAAE,CAAA,GAAE,EAAEC,EAAE,GAAA,EAAE,CAAE,GAAA,CAAA,GAAEF,KAAE,EAAGA,GAAAA,EAAAA,GAAE,GAAI,GAAA,GAAA,GAAI,EAAE,EAAIA,IAAAA,EAAAA,GAAE,CAAG,CAAA,GAAA,GAAG,IAAE,GAAnF,EAAA,GAAA,CAAA;AAArP,IAA4U,IAAA,CAAA,2BAAEA,EAAG,KAAA;AAAC,MAAIC,IAAAA,EAAAA,EAAEC,EAAEC,EAAAA,EAAAA,EAAEC,EAAEC,EAAAA,EAAAA;AAAE,MAAA,OAAO,CAAEL,GAAAA,EAAAA,GAAE,EAAGA,GAAAA,EAAAA,GAAE,EAAGA,GAAAA,EAAAA,GAAEA,EAAE,GAAA,CAAA,GAAE,EAAI,IAAA,GAAA,GAAIA,EAAGK,IAAAA,EAAAA,GAAAA,CAAGL,EAAG,IAAA,EAAA,IAAI,EAAGC,EAAAA,EAAAA,GAAAA,CAAGD,EAAE,GAAA,EAAA,GAAG,CAAG,IAAA,CAAA,EAAEE,EAAGG,GAAAA,CAAAA,EAAAA,GAAE,CAAE,GAAA,CAAA,IAAG,CAAEF,EAAAA,EAAAA,GAAEE,EAAE,GAAA,CAAA,GAAE,CAAGJ,IAAAA,EAAAA,GAAEC,EAAEC,GAAAA,EAAAA,GAAAA,CAAG,EAAIH,IAAAA,EAAAA,GAAE,GAAK,CAAA,GAAA,CAAA,IAAG,GAAII,EAAAA,EAAAA,GAAE,CAAEL,GAAAA,EAAAA,CAAEE,EAAEC,EAAAA,EAAAA,EAAEC,EAAC,CAAA,EAAEC,EAAE,GAAA,EAAA,IAAI,CAAED,CAAAA,EAAC,CAAG,IAAA,CAAA,GAAE,CAAED,CAAAA,EAAC,CAAG,IAAA,CAAA,GAAE,CAAED,CAAAA,EAAC,CAAI,CAAA,IAAA,CAAA,GAAEG,EAAE,GAAA,CAAA,GAAE,EAAI,CAAA,GAAA,EAAA,CAAA;AAAA,KAAlL,EAAA,GAAA,CAAA;AAA9U,IAAA,IAAqgB,KAAG,MAAI;AAAC,MAAA,IAAIF,EAAE,mBAAA,MAAA,CAAA,CAAAF,EAAGK,KAAAA,EAAAA,CAAE,IAAM,CAAA,CAAAJ,EAAGD,KAAAA,EAAAA,CAAE,IAAKC,CAAAA,EAAC,CAAE,CAAA,EAAxB,MAA0BE,EAAE,GAAA,UAAA,EAAWC,EAAED,GAAAA,EAAAA,CAAE,OAAS,IAAA,EAAGE,EAAAA,EAAAA,GAAED,EAAE,CAAA,IAAA,IAAM,EAAC,EAAEE,EAAEF,GAAAA,EAAAA,CAAE,GAAK,IAAA,IAAGG,EAAE,GAAA,EAAA;AAAG,MAAG,IAAA;AAAC,QAAA,CAAA,GAAE,GAAI,GAAA,CAAA,CAAED,EAAC,CAAA,CAAE,KAAK,GAAG,CAAA;AAAA,eAAQN,EAAE,EAAA;AAAC,QAAAM,EAAAA,GAAE,EAAC,EAAEC,EAAE,GAAA,CAAA;AAAA;AAAE,MAAIR,IAAAA,EAAAA,GAAE,aAAcS,EAAAA,EAAAA,GAAE,EAAC,KAAA,EAAM,GAAE,CAAE,EAAA,CAAA,EAAE,CAAE,EAAA,CAAA,EAAE,CAAE,EAAA,CAAA,EAAE,GAAE,CAAC,EAAA,CAAEF,EAAEP,CAAAA,EAAC,CAAC,CAAA,IAAG,EAAGU,EAAAA,EAAAA,GAAEV,EAAKO,IAAAA,EAAAA,IAAGE,EAAGN,IAAAA,EAAAA,CAAE,2BAA2B,CAAA;AAAE,MAAA,OAAOO,OAAIF,EAAEC,GAAAA,EAAAA,CAAAA,EAAG,CAACD,EAAAA,KAAIA,MAAG,CAACL,EAAAA,EAAEC,EAAEC,EAAAA,EAAAA,MAAK,IAAEF,EAAE,CAAA,IAAA,EAAK,EAAC,OAAA,EAAQ,GAAE,SAAU,EAAA,CAAA,EAAE,OAAQ,EAAA,CAAA,EAAE,MAAK,CAAC,EAAA,CAAEA,EAAE,CAAA,SAAS,MAAIA,EAAE,CAAA,EAAA,GAAG,SAAU,CAAA,IAAA,CAAK,CAAC,CAAE,GAAA,CAAA,GAAE,IAAEC,EAAG,IAAA,MAAA,KAAS,IAAEC,EAAE,GAAA,CAAA,GAAE,MAAO,CAAA,IAAA,CAAK,CAAC,CAAE,GAAA,CAAA,GAAE,CAAE,GAAA,CAAA,CAAA,CAAA,EAAKE,IAAE,CAAC,CAACA,EAAE,CAAA,QAAA,IAAUA,GAAE,YAAc,EAAA,QAAA,CAAS,MAAM,CAAG,IAAA,CAAC,CAACF,EAAE,CAAA,MAAA,EAAQ,KAAM,EAAA,OAAA,KAAUA,GAAE,QAAQ,CAAA,CAAA,EAAG,CAACI,EAAAA,IAAGF,GAAE,QAAUJ,IAAAA,EAAAA,CAAE,oCAAoC,CAAA,GAAE,IAAEC,EAAE,CAAA,MAAA,EAAQ,UAAQM,EAAG,IAAA,CAACF,KAAE,CAAEA,GAAAA,EAAAA;AAAA,KAAI,GAAA;AAAplC,IAAA,IAAslC,CAAE,GAAA,EAAC,IAAK,EAAA,CAAA,EAAE,OAAM,CAAC,EAAA;AAAvmC,IAAA,IAAymC,CAAE,GAAA,EAAA;AAA3mC,IAAA,IAA8mC,CAAE,GAAA,EAAA;AAAhnC,IAAA,IAAmnC,IAAE,EAAC;AAAtnC,IAAwnC,IAAA,CAAA,mBAAG,MAAA,CAAA,CAAA,EAAC,CAAEP,EAAAA,EAAAA,EAAG,EAAA,EAAC,IAAKC,EAAAA,EAAAA,EAAE,KAAME,EAAAA,EAAAA,EAAK,KAAA;AAAC,MAAIE,IAAAA,EAAAA,mBAAGL,MAAAA,CAAAA,CAAAA,EAAAA,EAAAA,GAAKE,EAAI,KAAA;AAAC,QAAA,IAAG,CAACF,EAAE,EAAA;AAAC,UAAGC,IAAAA,EAAAA,IAAGA,EAAIE,KAAAA,EAAAA,EAASF,OAAAA,EAAAA;AAAE,UAAID,IAAAA,CAAAA,EAAAA,IAAG,CAAK,MAAA,CAAA,EAAS,OAAA,CAAA;AAAA;AAAE,QAAII,IAAAA,EAAAA,EAAEM,KAAEV,EAAE,CAAA,GAAA,GAAI,OAAO,GAAI,CAAA,EAAC,GAAIA,EAAAA,EAAAA,EAAG,EAAA,GAAGE,EAAC,CAAE,GAAA,CAAA,GAAEF,IAAEO,EAAEF,GAAAA,EAAAA,CAAE,GAAEN,EAAEQ,GAAAA,EAAAA,CAAE,CAAEC,EAAAA,EAAAA,GAAED,EAAE,CAAA,CAAA;AAAE,QAAGG,IAAAA,EAAAA,CAAE,SAAS,MAAG,CAAA,SAAOH,EAAEA,EAAAA,EAAAA,GAAEA,GAAE,CAAE,EAAA;AAAC,UAAA,IAAG,EAAC,IAAA,EAAKP,EAAE,EAAA,KAAA,EAAMC,EAAC,EAAA,GAAEM,EAAEL,EAAAA,EAAAA,GAAED,EAAE,CAAA,MAAA,EAAOE,EAAE,GAAA,CAAA,EAAEE,EAAE,GAAA,CAAA;AAAE,UAAA,IAAGH,IAAO,OAAA,EAAEE,KAAEM,EAAE,CAAA,OAAA,CAAQT,IAAEI,EAAC,CAAA,CAAA,EAAGA,EAAED,GAAAA,EAAAA,GAAEF,IAAEC,EAAAA,IAAGO,GAAE,KAAML,CAAAA,EAAAA,EAAED,EAAC,CAAEJ,GAAAA,EAAAA;AAAE,UAAAU,EAAEP,GAAAA,EAAAA,GAAEO,EAAE,CAAA,KAAA,CAAML,EAAC,CAAA;AAAA;AAAE,QAAA,OAAON,EAAGW,IAAAA,EAAAA,CAAE,QAAS,CAAA,IAAI,CAAEA,GAAAA,EAAAA,CAAE,OAAQ,CAAA,UAAA,EAAWF,EAAE,GAAA,IAAA,GAAKT,EAAC,CAAA,GAAEW,EAAGF,CAAAA,GAAAA,EAAAA;AAAA,OAAvU,EAAA,GAAA,CAAA,EAA0UE,EAAET,GAAAA,EAAAA,EAAEM,EAAEJ,GAAAA,EAAAA;AAAE,MAAA,OAAOH,EAAIU,KAAAA,EAAAA,GAAEV,EAAE,CAAA,CAAA,GAAEC,IAAEM,EAAEJ,GAAAA,EAAAA,GAAEH,EAAE,CAAA,CAAA,CAAA,EAAG,CAAEK,CAAAA,EAAAA,EAAE,CAAC,CAAA,EAAEA,GAAE,CAAE,GAAA,EAAC,IAAKJ,EAAAA,EAAAA,EAAE,KAAME,EAAAA,EAAAA,EAAE,CAAEO,EAAAA,EAAAA,EAAE,GAAAH,EAAE,EAAA,CAAA,EAAEP,EAAC,EAAA,EAAEK,EAAE,CAAA,IAAA,GAAKK,EAAEL,EAAAA,EAAAA,CAAE,QAAME,EAAEF,EAAAA,EAAAA;AAAA,KAAxc,EAAA,GAAA,CAAA;AAA2c,IAAM,IAAA,CAAA,mBAAWL,MAAAA,CAAAA,SAAAA,EAAAA,GAAE,CAAE,EAAA;AAAC,MAAIC,IAAAA,EAAAA,GAAE,EAAC,KAAM,EAAA,CAAA,EAAE,OAAMD,EAAE,EAAA,WAAA,+BAAgBU,EAAJ,EAAA,aAAA,CAAA,EAAM,uBAAMV,MAAAA,CAAAA,CAAAA,EAAAA,KAAGA,GAAE,OAAQ,CAAA,mEAAA,EAAoE,CAAC,CAAlF,EAAA,OAAA,CAAA,EAAoF,OAAOA,EAAE,EAAA;AAAC,QAAA,KAAA,IAAQC,MAAKD,EAAE,EAAA;AAAC,UAAA,IAAIE,KAAEF,EAAEC,CAAAA,EAAC,CAAEG,EAAAA,EAAAA,GAAAA,CAAG,OAAOF,EAAG,EAAA,CAAC,CAAEG,EAAAA,EAAAA,GAAE,QAAMD,EAAE,GAAA,CAAA,CAAE,GAAG,CAAEF,CAAAA,EAAC,CAAC,CAAEA,GAAAA,EAAAA;AAAE,UAAA,CAAA,CAAED,EAAC,CAAA,GAAE,GAAMG,KAAAA,EAAAA,GAAE,EAAC,GAAK,GAAA;AAAC,YAAA,OAAM,IAAIJ,EAAI,KAAA,CAAA,CAAE,MAAKE,EAAE,CAAA,GAAGF,EAAC,CAAC,CAAA;AAAA,WAAC,EAAG,GAAA,EAAC,GAAK,GAAA;AAAC,YAAIA,IAAAA,EAAAA,GAAE,CAAE,CAAA,IAAA,EAAKK,EAAC,CAAA;AAAE,YAAA,OAAO,EAAE,IAAKJ,EAAAA,EAAAA,EAAE,EAAC,KAAMD,EAAAA,EAAAA,EAAE,CAAEA,EAAAA,EAAAA;AAAA,WAAE,EAAA;AAAA;AAAE,QAAO,OAAA,CAAA,GAAE,EAAE,EAAC,EAAE,CAAC,CAAE,EAAA,CAAA,CAAEC,EAAE,EAAA,CAAC,CAAEA,EAAAA,EAAAA;AAAA,OAAE,EAAA,EAAES,EAAEV,GAAAA,EAAAA,GAAE,CAAEO,EAAAA,EAAAA,mBAAGP,MAAAA,CAAAA,CAAAA,EAAAA,EAAEC,EAAIS,KAAAA,EAAAA,GAAE,EAAC,IAAA,EAAK,CAAKV,KAAAA,EAAAA,EAAC,CAAI,CAAA,CAAA,EAAA,KAAA,EAAM,CAAKC,KAAAA,EAAAA,EAAC,CAAG,CAAA,CAAA,EAAA,GAAE,CAA1C,EAAA,GAAA,CAAA,EAA4CF,EAAE,mBAAA,MAAA,CAAA,CAAAC,EAAG,KAAA,CAAAC,EAAGD,KAAAA,EAAAA,CAAE,GAAG,CAAA,CAAEC,EAAC,CAAC,CAAf,EAAA,GAAA,CAAA,EAAiBU,EAAE,mBAAA,MAAA,CAAA,CAACX,EAAEC,EAAAA,EAAAA,KAAI,CAACC,EAAAA,EAAEC,EAAEC,EAAAA,EAAAA,KAAIG,EAAE,CAAA,CAAA,EAAGP,EAAC,CAAA,IAAA,EAAOE,EAAC,CAAA,CAAA,EAAIC,EAAC,CAAA,CAAA,EAAIC,EAAC,CAAA,CAAA,EAAGH,EAAC,CAAA,EAA5C,GAA8C,CAAA,EAAA,CAAA,mBAAGD,MAAAA,CAAAA,CAAAA,EAAAA,EAAEC,EAAI,KAAA,CAACC,EAAEC,EAAAA,EAAAA,EAAEC,EAAIG,KAAAA,EAAAA,CAAAA,CAAG,CAACP,EAAAA,EAAEC,EAAEC,EAAAA,EAAAA,KAAI,CAAE,CAAA,CAAA,CAAEF,EAAEC,EAAAA,EAAAA,EAAEC,EAAC,CAAC,CAAGA,EAAAA,EAAAA,EAAEC,EAAEC,EAAAA,EAAC,CAAEJ,GAAAA,EAAAA,EAAEC,EAAC,CAAA,EAAnD,GAAqD,CAAA,EAAA,CAAA,mBAAED,MAAAA,CAAAA,CAAAA,EAAAA,KAAG,CAACC,EAAAA,EAAEC,EAAEC,EAAAA,EAAAA,KAAIH,EAAE,CAAA,CAAA,CAAEC,EAAEC,EAAAA,EAAAA,EAAEC,EAAC,CAAC,CAAtB,EAAA,GAAA,CAAA,EAAwB,CAAEQ,GAAAA,EAAAA,CAAE,CAAE,EAAA,CAAC,CAAE,EAAA,CAAA,GAAEA,EAAE,CAAA,CAAA,EAAE,CAAC,CAAA,EAAE,CAAE,mBAAA,MAAA,CAAA,CAAAX,EAAGO,KAAAA,EAAAA,CAAE,OAAQP,GAAAA,EAAAA,EAAE,CAAC,CAAA,EAAhB,GAAkB,CAAA,EAAA,CAAA,mBAAEA,MAAAA,CAAAA,CAAAA,EAAAA,KAAGO,EAAE,CAAA,OAAA,GAAQP,EAAE,EAAA,CAAC,CAAhB,EAAA,GAAA,CAAA;AAAkB,MAAA,CAAA,KAAIA,MAAG,CAAE,GAAA,CAAA,CAAE,CAAC,CAAE,EAAA,CAAA,GAAE,EAAE,CAAC,CAAA,IAAG,CAAIA,KAAAA,EAAAA,KAAI,IAAE,CAAE,CAAA,CAAA,EAAE,CAAC,CAAE,EAAA,CAAA,GAAE,EAAE,EAAG,EAAA,CAAC,CAAE,EAAA,CAAA,2BAAEA,EAAGO,KAAAA,EAAAA,CAAE,EAAEP,EAAC,CAAA,EAAE,CAAC,CAAX,EAAA,GAAA,CAAA,EAAa,CAAE,mBAAA,MAAA,CAAA,CAAAA,OAAGO,EAAE,CAAA,CAAA,CAAEP,EAAC,CAAE,GAAA,EAAA,EAAG,CAAC,CAAd,EAAA,GAAA,CAAA,CAAA;AAAiB,MAAA,IAAI,CAAE,EAAA,CAAA,GAAE,EAAC,EAAA,EAAG,CAAE,EAAA,EAAA,EAAG,CAAE,EAAA,GAAA,EAAI,CAAE,EAAA,KAAA,EAAM,CAAE,EAAA,GAAA,EAAID,EAAE,CAAA,CAAC,CAAE,EAAA,KAAA,EAAMA,EAAE,CAAA,CAAC,CAAE,EAAA,OAAA,EAAQ,CAAE,EAAA,KAAA,EAAMQ,EAAE,CAAA,CAAA,EAAE,CAAC,CAAA,EAAE,IAAKA,EAAAA,EAAAA,CAAE,GAAE,EAAE,CAAA,EAAE,GAAIA,EAAAA,EAAAA,CAAE,CAAE,EAAA,EAAE,CAAE,EAAA,MAAA,EAAOA,EAAE,CAAA,CAAA,EAAE,EAAE,CAAA,EAAE,SAAUA,EAAAA,EAAAA,CAAE,CAAE,EAAA,EAAE,CAAE,EAAA,OAAA,EAAQA,EAAE,CAAA,CAAA,EAAE,EAAE,CAAA,EAAE,MAAOA,EAAAA,EAAAA,CAAE,CAAE,EAAA,EAAE,CAAE,EAAA,aAAA,EAAcA,EAAE,CAAA,CAAA,EAAE,EAAE,CAAA,IAAG,CAAE,GAAA,QAAA;AAAS,MAAA,OAAM,sDAAsD,KAAM,CAAA,GAAG,EAAE,GAAK,CAAA,CAACP,IAAEC,EAAI,KAAA;AAAC,QAAE,CAAA,GAAA,IAAA,GAAKD,GAAE,CAAC,CAAA,CAAE,aAAcA,GAAAA,EAAAA,CAAE,MAAM,CAAC,CAAA,EAAE,IAAEC,EAAG,IAAA,CAAA,CAAED,KAAE,CAAC,CAAA,GAAEO,GAAE,EAAGN,GAAAA,EAAAA,EAAE,CAAC,CAAA,EAAE,CAAE,CAAA,CAAA,GAAE,CAAC,CAAEM,GAAAA,EAAAA,CAAE,MAAIN,EAAE,EAAA,CAAC,KAAGA,EAAE,GAAA,EAAA,EAAG,EAAED,EAAC,CAAA,GAAEO,GAAE,EAAGN,GAAAA,EAAAA,EAAE,CAAC,CAAE,EAAA,CAAA,CAAE,CAAC,CAAEM,GAAAA,EAAAA,CAAE,EAAGN,GAAAA,EAAAA,EAAE,CAAC,CAAA;AAAA,OAAG,CAAA,EAAEA,EAAE,CAAA,MAAA,CAAO,CAAC,CAAA;AAAA,KAAjlC,EAAA,GAAA,CAAA;AAAR,IAAA,IAA4lC,IAAE,IAAI,CAAA,EAAA;AAAE,IAAO,MAAA,CAAA,OAAA,GAAQ,CAAE,EAAA,CAAA,CAAE,OAAQ,GAAA,CAAA;AAAA;AAAA,CAAA,CAAA;;;ACApsF,IAAa,YAAA,GAAA,OAAA,CAAA,aAAA,EAAA,EAAA,CAAA,CAAA;AAAc,IAAO,gBAAQ,YAAAF,CAAAA;AAAS,IAAK,EAAC,OAAM,EAAG,EAAA,EAAA,EAAG,KAAI,KAAM,EAAA,GAAA,EAAI,KAAM,EAAA,KAAA,EAAM,OAAQ,EAAA,MAAA,EAAO,SAAQ,IAAK,EAAA,GAAA,EAAI,MAAO,EAAA,SAAA,EAAU,aAAc,EAAA,KAAA,EAAM,KAAI,KAAM,EAAA,MAAA,EAAO,IAAK,EAAA,OAAA,EAAQ,IAAK,EAAA,KAAA,EAAM,MAAK,SAAU,EAAA,WAAA,EAAY,cAAa,UAAW,EAAA,aAAA,EAAc,YAAW,WAAY,EAAA,OAAA,EAAQ,KAAM,EAAA,OAAA,EAAQ,QAAS,EAAA,MAAA,EAAO,WAAU,MAAO,EAAA,OAAA,EAAQ,MAAO,EAAA,WAAA,EAAY,aAAc,EAAA,cAAA,EAAe,cAAa,eAAgB,EAAA,YAAA,EAAa,aAAa,EAAA,GAAE,YAAAA,CAAAA,OAAAA","file":"chunk-7UQXFWKN.js","sourcesContent":["let e,t,r,{defineProperty:n,setPrototypeOf:l,create:o,keys:s}=Object,i=\"\",{round:c,max:a}=Math,p=e=>{let t=/([a-f\\d]{3,6})/i.exec(e)?.[1],r=t?.length,n=parseInt(6^r?3^r?\"0\":t[0]+t[0]+t[1]+t[1]+t[2]+t[2]:t,16);return[n>>16&255,n>>8&255,255&n]},u=(e,t,r)=>e^t||t^r?16+36*c(e/51)+6*c(t/51)+c(r/51):8>e?16:e>248?231:c(24*(e-8)/247)+232,d=e=>{let t,r,n,l,o;return 8>e?30+e:16>e?e-8+90:(232>e?(o=(e-=16)%36,t=(e/36|0)/5,r=(o/6|0)/5,n=o%6/5):t=r=n=(10*(e-232)+8)/255,l=2*a(t,r,n),l?30+(c(n)<<2|c(r)<<1|c(t))+(2^l?0:60):30)},g=(()=>{let r=e=>o.some((t=>e.test(t))),n=globalThis,l=n.process??{},o=l.argv??[],i=l.env??{},c=-1;try{e=\",\"+s(i).join(\",\")}catch(e){i={},c=0}let a=\"FORCE_COLOR\",p={false:0,0:0,1:1,2:2,3:3}[i[a]]??-1,u=a in i&&p||r(/^--color=?(true|always)?$/);return u&&(c=p),~c||(c=((r,n,l)=>(t=r.TERM,{\"24bit\":3,truecolor:3,ansi256:2,ansi:1}[r.COLORTERM]||(r.CI?/,GITHUB/.test(e)?3:1:n&&\"dumb\"!==t?l?3:/-256/.test(t)?2:1:0)))(i,!!i.PM2_HOME||i.NEXT_RUNTIME?.includes(\"edge\")||!!l.stdout?.isTTY,\"win32\"===l.platform)),!p||i.NO_COLOR||r(/^--(no-color|color=(false|never))$/)?0:n.window?.chrome||u&&!c?3:c})(),f={open:i,close:i},h=39,b=49,O={},m=({p:e},{open:t,close:n})=>{let o=(e,...r)=>{if(!e){if(t&&t===n)return t;if((e??i)===i)return i}let l,s=e.raw?String.raw({raw:e},...r):i+e,c=o.p,a=c.o,p=c.c;if(s.includes(\"\u001b\"))for(;c;c=c.p){let{open:e,close:t}=c,r=t.length,n=i,o=0;if(r)for(;~(l=s.indexOf(t,o));o=l+r)n+=s.slice(o,l)+e;s=n+s.slice(o)}return a+(s.includes(\"\\n\")?s.replace(/(\\r?\\n)/g,p+\"$1\"+a):s)+p},s=t,c=n;return e&&(s=e.o+t,c=n+e.c),l(o,r),o.p={open:t,close:n,o:s,c,p:e},o.open=s,o.close=c,o};const w=function(e=g){let t={Ansis:w,level:e,isSupported:()=>s,strip:e=>e.replace(/[\u001b›][[()#;?]*(?:[0-9]{1,4}(?:;[0-9]{0,4})*)?[0-9A-ORZcf-nqry=><]/g,i),extend(e){for(let t in e){let r=e[t],l=(typeof r)[0],o=\"s\"===l?x(...p(r)):r;O[t]=\"f\"===l?{get(){return(...e)=>m(this,r(...e))}}:{get(){let e=m(this,o);return n(this,t,{value:e}),e}}}return r=o({},O),l(t,r),t}},s=e>0,c=(e,t)=>s?{open:`\u001b[${e}m`,close:`\u001b[${t}m`}:f,a=e=>t=>e(...p(t)),y=(e,t)=>(r,n,l)=>c(`${e}8;2;${r};${n};${l}`,t),R=(e,t)=>(r,n,l)=>c(((e,t,r)=>d(u(e,t,r)))(r,n,l)+e,t),$=e=>(t,r,n)=>e(u(t,r,n)),x=y(3,h),T=y(4,b),v=e=>c(\"38;5;\"+e,h),C=e=>c(\"48;5;\"+e,b);2===e?(x=$(v),T=$(C)):1===e&&(x=R(0,h),T=R(10,b),v=e=>c(d(e),h),C=e=>c(d(e)+10,b));let E,M={fg:v,bg:C,rgb:x,bgRgb:T,hex:a(x),bgHex:a(T),visible:f,reset:c(0,0),bold:c(1,22),dim:c(2,22),italic:c(3,23),underline:c(4,24),inverse:c(7,27),hidden:c(8,28),strikethrough:c(9,29)},I=\"Bright\";return\"black,red,green,yellow,blue,magenta,cyan,white,gray\".split(\",\").map(((e,t)=>{E=\"bg\"+e[0].toUpperCase()+e.slice(1),8>t?(M[e+I]=c(90+t,h),M[E+I]=c(100+t,b)):t=60,M[e]=c(30+t,h),M[E]=c(40+t,b)})),t.extend(M)},y=new w;module.exports=y,y.default=y;\n","import a from\"./index.cjs\";export default a;export const{Ansis,fg,bg,rgb,bgRgb,hex,bgHex,reset,inverse,hidden,visible,bold,dim,italic,underline,strikethrough,black,red,green,yellow,blue,magenta,cyan,white,gray,redBright,greenBright,yellowBright,blueBright,magentaBright,cyanBright,whiteBright,bgBlack,bgRed,bgGreen,bgYellow,bgBlue,bgMagenta,bgCyan,bgWhite,bgGray,bgRedBright,bgGreenBright,bgYellowBright,bgBlueBright,bgMagentaBright,bgCyanBright,bgWhiteBright}=a;"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/lib/native-app-client.ts","../src/cli/commands/encrypt.command.ts"],"names":[],"mappings":"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","file":"chunk-B4UBSMSZ.js","sourcesContent":["import path from 'node:path';\nimport os from 'node:os';\nimport net from 'node:net';\nimport crypto from 'node:crypto';\nimport Debug from 'debug';\n\nconst debug = Debug('varlock:native-app-client');\n\nconst MAC_APP_PATH = 'Library/Containers/dev.dmno.macapp';\nconst IPC_SOCKET_FILE_PATH = 'Data/dmno-ipc';\n\nexport class VarlockNativeAppClient {\n private socket: net.Socket;\n\n private messageQueue: Map<string, { resolve: (value: any) => void; reject: (error: Error) => void }>;\n\n private isInitialized: boolean = false;\n private isConnected: boolean;\n private socketPath: string;\n\n constructor(opts?: { socketPath?: string }) {\n this.socket = new net.Socket();\n this.messageQueue = new Map();\n this.isConnected = false;\n this.socketPath = opts?.socketPath ?? path.resolve(\n os.homedir(),\n 'Library/Containers/dev.dmno.macapp/Data/dmno-ipc',\n );\n }\n\n private generateMessageId(): string {\n // Generate a unique ID using timestamp and random bytes\n const timestamp = Date.now().toString(36); // Base36 timestamp\n const random = crypto.randomBytes(4).toString('hex'); // 8 random hex chars\n return `${timestamp}-${random}`;\n }\n\n initializeSocket() {\n this.isInitialized = true;\n\n return new Promise((resolve, _reject) => {\n this.socket.on('connect', () => {\n debug('Connected to native app');\n this.isConnected = true;\n resolve(true);\n });\n\n this.socket.on('data', (data: Buffer) => {\n debug('> received data');\n try {\n // Read message length (4 bytes, little endian)\n const messageLength = data.readUInt32LE(0);\n const messageData = data.slice(4, 4 + messageLength);\n const message = JSON.parse(messageData.toString());\n\n debug('> message', message);\n\n // Handle special messages\n if (message.type === '__disconnect') {\n this.cleanup();\n return;\n }\n\n // Handle response messages\n if (message.id && this.messageQueue.has(message.id)) {\n const { resolve: qResolve } = this.messageQueue.get(message.id)!;\n this.messageQueue.delete(message.id);\n qResolve(message.result);\n } else {\n console.log('Received message without ID:', message);\n }\n } catch (error) {\n console.error('Error processing message:', error);\n }\n });\n\n this.socket.on('error', (error) => {\n console.error('Socket error:', error);\n // TODO: if error is related to initial connection, reject the promise\n this.cleanup();\n });\n\n this.socket.on('close', () => {\n debug('socket closed');\n this.isConnected = false;\n this.cleanup();\n });\n\n this.socket.connect(this.socketPath);\n });\n }\n\n private sendMessage(message: any): Promise<any> {\n return new Promise((resolve, reject) => {\n if (!this.isConnected) {\n reject(new Error('Socket is not connected'));\n return;\n }\n\n const messageId = this.generateMessageId();\n const messageWithId = {\n ...message,\n id: messageId,\n };\n\n const jsonData = JSON.stringify(messageWithId);\n const messageBytes = new TextEncoder().encode(jsonData);\n\n // Create length prefix (4 bytes, little endian)\n const lengthBytes = new Uint8Array(4);\n const view = new DataView(lengthBytes.buffer);\n view.setUint32(0, messageBytes.length, true);\n\n // Combine length and message\n const combinedBytes = new Uint8Array(4 + messageBytes.length);\n combinedBytes.set(lengthBytes);\n combinedBytes.set(messageBytes, 4);\n\n // Store promise handlers\n this.messageQueue.set(messageId, { resolve, reject });\n\n // Send message\n this.socket.write(combinedBytes);\n });\n }\n\n public async encrypt(plaintext: string): Promise<any> {\n if (!this.isInitialized) await this.initializeSocket();\n return this.sendMessage({\n action: 'encrypt',\n payload: { plaintext },\n });\n }\n\n public async decrypt(ciphertext: string): Promise<any> {\n if (!this.isInitialized) await this.initializeSocket();\n return this.sendMessage({\n action: 'decrypt',\n payload: { ciphertext },\n });\n }\n\n public cleanup() {\n // Reject all pending messages\n for (const { reject } of this.messageQueue.values()) {\n reject(new Error('Connection closed'));\n }\n this.messageQueue.clear();\n this.socket.end();\n }\n}\n\n// // Example usage:\n// async function main() {\n// const client = new VarlockNativeAppClient();\n\n// try {\n// await client.initializeSocket();\n\n// // Send multiple messages\n// const encryptedHello = await client.encrypt('hello world');\n// console.log('Encrypted data:', encryptedHello);\n\n// const decryptedHello = await client.decrypt(encryptedHello);\n// console.log('Decrypted data:', decryptedHello);\n\n// // Keep the process running\n// process.on('SIGINT', () => {\n// client.cleanup();\n// process.exit(0);\n// });\n// } catch (error) {\n// console.error('Error:', error);\n// process.exit(1);\n// }\n// }\n\n// main();\n","\nimport { define } from 'gunshi';\nimport { isCancel, password } from '@clack/prompts';\n\nimport { VarlockNativeAppClient } from '../../lib/native-app-client';\nimport { TypedGunshiCommandFn } from '../helpers/gunshi-type-utils';\n\nexport const commandSpec = define({\n name: 'encrypt',\n description: 'Encrypt environment variables in your .env file',\n args: {},\n});\n\nexport const commandFn: TypedGunshiCommandFn<typeof commandSpec> = async (ctx) => {\n console.log('');\n console.log('🧙 Encrypting environment variables... ✨');\n // intro('🧙 Encrypting environment variables... ✨');\n\n const rawValue = await password({ message: 'Enter the value you want to encrypt' });\n if (isCancel(rawValue)) process.exit(0);\n\n const client = new VarlockNativeAppClient();\n await client.initializeSocket();\n const encryptedValue = await client.encrypt(rawValue);\n\n console.log('Copy this into your .env.local file and rename the key appropriately:\\n');\n console.log(`SOME_SENSITIVE_KEY=varlock(\"${encryptedValue}\")`);\n\n // const envGraph = await loadEnvGraph();\n // await envGraph.resolveEnvValues();\n // const resolvedEnv = envGraph.getResolvedEnvObject();\n\n // TODO: need to reimplement using the new parser\n\n // const client = new VarlockNativeAppClient();\n // await client.initializeSocket();\n\n // for (const envFile of loadedEnv.files) {\n // let changeCount = 0;\n // for (const itemKey in envFile.items) {\n // const item = envFile.items[itemKey];\n // if (item.decorators?.sensitive) {\n // if ('value' in item && item.value) {\n // console.log('Encrypting', itemKey, envFile.path);\n // const encryptedValue = await client.encrypt(item.value);\n // delete item.value;\n // (item as any).resolverName = 'varlock';\n // (item as any).resolverArgs = [encryptedValue];\n // changeCount++;\n // }\n // } else {\n // if ('resolverName' in item && item.resolverName === 'varlock') {\n // console.log('Decrypting', itemKey, envFile.path);\n // const encryptedValue = item.resolverArgs[0];\n // if (typeof encryptedValue !== 'string') {\n // throw new Error('Expected encrypted value to be a string');\n // }\n // const decryptedValue = await client.decrypt(encryptedValue);\n // (item as any).value = decryptedValue;\n // delete (item as any).resolverName;\n // delete (item as any).resolverArgs;\n // changeCount++;\n // }\n // }\n // }\n\n // const updatedEnvFileStr = dumpDotEnvContents(envFile.parsedContents);\n // await fs.writeFile(envFile.path, updatedEnvFileStr);\n\n // log.success(`Updated ${changeCount} items in ${envFile.path}`);\n // }\n\n // console.log(loadedEnv);\n\n // const unencryptedKeys: Array<string> = [];\n // parsedEnv.forEach((item) => {\n // if (item.type !== 'item') return;\n // if (item.key.startsWith('_VARLOCK_')) return;\n // if (!('value' in item) || !item.value) return;\n\n // unencryptedKeys.push(item.key);\n // });\n\n // if (unencryptedKeys.length === 0) {\n // console.log('No items to encrypt. Exiting...');\n // return;\n // }\n\n // const selectedKeys = await multiselect({\n // message: 'Select env item(s) to encrypt 🔏',\n // options: unencryptedKeys.map((key) => ({\n // value: key,\n // label: key,\n // })),\n // initialValues: unencryptedKeys,\n // required: false,\n // });\n\n // if (isCancel(selectedKeys) || !selectedKeys.length) {\n // console.log('No items selected. Exiting...');\n // return;\n // }\n\n // for (const item of parsedEnv) {\n // if (item.type === 'item' && selectedKeys.includes(item.key)) {\n // if (!('value' in item) || !item.value) throw new Error(`Item ${item.key} has no value`);\n // const encryptedValue = await client.encrypt(item.value);\n // delete item.value;\n // (item as any).resolverName = 'varlock';\n // (item as any).resolverArgs = [encryptedValue];\n // }\n // }\n\n // // write the updated env file\n\n // const updatedEnvFileStr = dumpDotEnvContents(parsedEnv);\n // await fs.writeFile(envFilePath, updatedEnvFileStr);\n\n // outro(`Encrypted ${selectedKeys.length} items!`);\n};\n\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/config.ts","../src/cli/helpers/open-url.ts","../src/cli/helpers/key-press.ts","../src/cli/commands/login.command.ts"],"names":["delay"],"mappings":"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","file":"chunk-CPA2D42B.js","sourcesContent":["// TODO: figure out dev vs prod env vars... would be great to use varlock here!\n\n// NOTE - these keys are safe to publish\n\nexport const CONFIG = {\n // VARLOCK_API_URL: 'http://localhost:8888',\n VARLOCK_API_URL: 'https://api.varlock.dev',\n GITHUB_APP_CLIENT_ID: 'Iv23li50gB8bMxLauiJQ', // varlock.dev app\n POSTHOG_API_KEY: 'phc_bfzH97VIta8yQa8HrsgmitqS6rTydjMISs0m8aqJTnq',\n POSTHOG_HOST: 'https://ph.varlock.dev',\n};\n","import os from 'node:os';\nimport { spawn } from 'node:child_process';\n\nconst platform = os.platform();\n\nconst isWindows = platform.match(/^win/i);\nconst isMac = platform.match(/^darwin/i);\nconst isLinux = (!isWindows && !isMac);\n\n/** opens a url using the default browser */\nexport function openUrl(url: string) {\n if (isWindows) {\n spawn('cmd', ['/c', 'start', ' ', url], { detached: true });\n } else if (isMac) {\n spawn('open', [url], { detached: true });\n } else if (isLinux) {\n // TODO: maybe check for x-www-browser instead?\n spawn('xdg-open', [url], { detached: true });\n }\n}\n","\nexport async function keyPressed(keys: Array<string> | true = true) {\n process.stdin.setRawMode(true);\n return new Promise<void>((resolve) => {\n function keyPressHandler(d: Buffer) {\n const keyStr = d.toString();\n // exit on ctrl+c or ctrl+d\n if (['\\u0003', '\\u0004'].includes(keyStr)) {\n process.exit(1);\n }\n if (keys === true || keys.includes(keyStr)) {\n process.stdin.setRawMode(false);\n process.stdin.off('data', keyPressHandler);\n resolve();\n }\n }\n process.stdin.on('data', keyPressHandler);\n });\n}\n","\nimport { setTimeout as delay } from 'node:timers/promises';\nimport ansis from 'ansis';\nimport { define } from 'gunshi';\nimport { logLines } from '../helpers/pretty-format';\nimport { CONFIG } from '../../config';\nimport { openUrl } from '../helpers/open-url';\nimport { keyPressed } from '../helpers/key-press';\nimport { TypedGunshiCommandFn } from '../helpers/gunshi-type-utils';\n\n\nexport const commandSpec = define({\n name: 'login',\n description: 'Authenticate (using GitHub)',\n args: {},\n});\n\n\nexport const commandFn: TypedGunshiCommandFn<typeof commandSpec> = async (ctx) => {\n const codeReq = await fetch('https://github.com/login/device/code', {\n method: 'POST',\n body: JSON.stringify({\n client_id: CONFIG.GITHUB_APP_CLIENT_ID,\n }),\n headers: {\n 'Content-Type': 'application/json',\n Accept: 'application/json',\n },\n });\n if (codeReq.status !== 200) {\n console.log('Failed to initiate GitHub device flow login!');\n process.exit(1);\n }\n\n const ghCodeInfo = await codeReq.json() as {\n device_code: string;\n user_code: string;\n verification_uri: string;\n expires_in: number;\n interval: number;\n };\n\n logLines([\n '🔑 Authenticating using GitHub:',\n '',\n `First please copy this code: ${ansis.bold.magenta(ghCodeInfo.user_code)}`,\n '',\n `Log in @ ${ghCodeInfo.verification_uri}`,\n '',\n 'Press ENTER to open in your default browser...',\n ]);\n await keyPressed(['\\r']);\n console.log(ansis.italic.gray('... please complete login on github.com ...'));\n openUrl(ghCodeInfo.verification_uri);\n\n const pollMs = ghCodeInfo.interval * 1000;\n const expiresMs = ghCodeInfo.expires_in * 1000;\n const startAt = new Date();\n\n let oauthStatus: any;\n while (true) {\n await delay(pollMs);\n try {\n const oauthStatusReq = await fetch('https://github.com/login/oauth/access_token', {\n method: 'POST',\n body: JSON.stringify({\n client_id: CONFIG.GITHUB_APP_CLIENT_ID,\n device_code: ghCodeInfo.device_code,\n grant_type: 'urn:ietf:params:oauth:grant-type:device_code',\n }),\n headers: {\n 'Content-Type': 'application/json',\n Accept: 'application/json',\n },\n });\n oauthStatus = await oauthStatusReq.json();\n } catch (err) {\n console.log(err);\n }\n\n // we are expecting to see { error: 'authorization_pending' }\n // probably a few more error types we could bail early on\n if (oauthStatus.error === 'access_denied') {\n console.log('❌ Login attempt was cancelled! Please try again.');\n process.exit(1);\n }\n\n // if we got the token, we break and continue\n if (oauthStatus.access_token) break;\n\n // if we've been polling for too long, give up\n if (new Date().getTime() - startAt.getTime() > expiresMs) {\n console.log('❌ Login timed out! Please try again.');\n process.exit(1);\n }\n }\n\n // oauthStatus when completed looks like:\n // {\n // access_token: 'ghu_abcxyz',\n // expires_in: 28800,\n // refresh_token: 'ghr_abcxyz',\n // refresh_token_expires_in: 15897600,\n // token_type: 'bearer',\n // scope: ''\n // }\n\n // pass along github auth info to API, which will fetch info from HG, handle login/signup, return JWT\n const authReq = await fetch(`${CONFIG.VARLOCK_API_URL}/github/auth-from-device-flow`, {\n method: 'POST',\n body: JSON.stringify({\n accessToken: oauthStatus.access_token,\n refreshToken: oauthStatus.refresh_token,\n accessTokenExpiresAt: new Date(Date.now() + oauthStatus.expires_in * 1000).toISOString(),\n refreshTokenExpiresAt: new Date(Date.now() + oauthStatus.refresh_token_expires_in * 1000).toISOString(),\n tokenType: oauthStatus.token_type,\n scope: oauthStatus.scope,\n }),\n headers: {\n 'Content-Type': 'application/json',\n Accept: 'application/json',\n },\n });\n if (authReq.status !== 200) {\n console.log(await authReq.json());\n process.exit(1);\n }\n\n const authRes = await authReq.json() as {\n user: {\n githubUserId: string;\n githubUsername: string;\n name: string;\n },\n token: string;\n isNewUser: boolean;\n publicKey?: string;\n };\n\n // TODO: if app exists, pass off login info to it instead of storing in home folder\n // otherwise save login info in ~/.varlock/identity.json\n // also save it along with a new keypair if necessary, and send the public key to the api\n\n console.log(`✅ Logged in as ${authRes.user.githubUsername} (${authRes.user.name})!`);\n};\n"]}
@@ -1,21 +0,0 @@
1
- import { ansis_default } from './chunk-7UQXFWKN.js';
2
- import { __name } from './chunk-XN24GZXQ.js';
3
-
4
- // src/cli/helpers/pretty-format.ts
5
- var fmt = {
6
- decorator: /* @__PURE__ */ __name((s) => ansis_default.magenta(s), "decorator"),
7
- filePath: /* @__PURE__ */ __name((s) => `\u{1F4C2} ${ansis_default.cyan.italic(s)}`, "filePath"),
8
- fileName: /* @__PURE__ */ __name((s) => `${ansis_default.cyan.italic(s)}`, "fileName"),
9
- command: /* @__PURE__ */ __name((s) => ansis_default.green.italic(s), "command"),
10
- packageName: /* @__PURE__ */ __name((s) => ansis_default.green.italic(s), "packageName")
11
- };
12
- var logLines = /* @__PURE__ */ __name((lines) => {
13
- for (const line of lines) {
14
- if (!line && line !== "") continue;
15
- console.log(line);
16
- }
17
- }, "logLines");
18
-
19
- export { fmt, logLines };
20
- //# sourceMappingURL=chunk-LQZ6ICSS.js.map
21
- //# sourceMappingURL=chunk-LQZ6ICSS.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/cli/helpers/pretty-format.ts"],"names":[],"mappings":";;;;AAGO,IAAM,GAAM,GAAA;AAAA,EACjB,2BAAY,MAAA,CAAA,CAAA,CAAA,KAAc,aAAM,CAAA,OAAA,CAAQ,CAAC,CAA9B,EAAA,WAAA,CAAA;AAAA,EACX,QAAA,0BAAW,CAAc,KAAA,CAAA,UAAA,EAAM,cAAM,IAAK,CAAA,MAAA,CAAO,CAAC,CAAC,CAAzC,CAAA,EAAA,UAAA,CAAA;AAAA,EACV,QAAA,0BAAW,CAAc,KAAA,CAAA,EAAG,cAAM,IAAK,CAAA,MAAA,CAAO,CAAC,CAAC,CAAtC,CAAA,EAAA,UAAA,CAAA;AAAA,EACV,yBAAU,MAAA,CAAA,CAAA,CAAA,KAAc,cAAM,KAAM,CAAA,MAAA,CAAO,CAAC,CAAnC,EAAA,SAAA,CAAA;AAAA,EACT,6BAAc,MAAA,CAAA,CAAA,CAAA,KAAc,cAAM,KAAM,CAAA,MAAA,CAAO,CAAC,CAAnC,EAAA,aAAA;AACf;AAEa,IAAA,QAAA,2BAAY,KAA6C,KAAA;AACpE,EAAA,KAAA,MAAW,QAAQ,KAAO,EAAA;AAExB,IAAI,IAAA,CAAC,IAAQ,IAAA,IAAA,KAAS,EAAI,EAAA;AAC1B,IAAA,OAAA,CAAQ,IAAI,IAAI,CAAA;AAAA;AAEpB,CANwB,EAAA,UAAA","file":"chunk-LQZ6ICSS.js","sourcesContent":["import ansis from 'ansis';\n\n\nexport const fmt = {\n decorator: (s: string) => ansis.magenta(s),\n filePath: (s: string) => `📂 ${ansis.cyan.italic(s)}`,\n fileName: (s: string) => `${ansis.cyan.italic(s)}`,\n command: (s: string) => ansis.green.italic(s),\n packageName: (s: string) => ansis.green.italic(s),\n};\n\nexport const logLines = (lines: Array<string | false | undefined>) => {\n for (const line of lines) {\n // skip false, null, undefined, but not empty strings\n if (!line && line !== '') continue;\n console.log(line);\n }\n};\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/cli/commands/load.command.ts"],"names":[],"mappings":"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","file":"chunk-NAZPFZOO.js","sourcesContent":["import { define } from 'gunshi';\nimport _ from '@env-spec/utils/my-dash';\n\nimport { loadVarlockEnvGraph } from '../../lib/load-graph';\nimport { getItemSummary } from '../../lib/formatting';\nimport { checkForConfigErrors, checkForSchemaErrors } from '../helpers/error-checks';\nimport { TypedGunshiCommandFn } from '../helpers/gunshi-type-utils';\n\nexport const commandSpec = define({\n name: 'load',\n description: 'Load env according to schema and resolve values',\n args: {\n format: {\n type: 'string',\n short: 'f',\n description: 'Format of output (if not pretty printed to console)',\n default: 'pretty',\n },\n 'show-all': {\n type: 'boolean',\n description: 'When load is fialing, show all items rather than only failing items',\n },\n env: {\n type: 'string',\n description: 'Set the environment (e.g., production, development, etc) - will be overridden by @envFlag in the schema if present',\n },\n },\n});\n\n\nexport const commandFn: TypedGunshiCommandFn<typeof commandSpec> = async (ctx) => {\n const { format, 'show-all': showAll } = ctx.values;\n\n const envGraph = await loadVarlockEnvGraph({\n currentEnvFallback: ctx.values.env,\n });\n checkForSchemaErrors(envGraph);\n\n // TODO: move into a more general post-load hook system\n if (envGraph.schemaDataSource?.decorators.generateTypes) {\n // TODO: much of this logic should move to the definition of the decorator itself\n const typeGenSettings = envGraph.schemaDataSource?.decorators.generateTypes.bareFnArgs?.simplifiedValues;\n if (!_.isPlainObject(typeGenSettings)) {\n throw new Error('@generateTypes - must be a fn call with key/value args');\n }\n if (!typeGenSettings.lang) throw new Error('@generateTypes - must set `lang` arg');\n if (typeGenSettings.lang !== 'ts') throw new Error(`@generateTypes - unsupported language: ${typeGenSettings.lang}`);\n if (!typeGenSettings.path) throw new Error('@generateTypes - must set `path` arg');\n if (!_.isString(typeGenSettings.path)) throw new Error('@generateTypes - `path` arg must be a string');\n await envGraph.generateTypes(typeGenSettings.lang, typeGenSettings.path);\n }\n\n await envGraph.resolveEnvValues();\n checkForConfigErrors(envGraph, { showAll });\n\n if (format === 'pretty') {\n for (const itemKey in envGraph.configSchema) {\n const item = envGraph.configSchema[itemKey];\n console.log(getItemSummary(item));\n }\n } else if (format === 'json') {\n console.log(JSON.stringify(envGraph.getResolvedEnvObject(), null, 2));\n } else if (format === 'json-full') {\n console.log(JSON.stringify(envGraph.getSerializedGraph(), null, 2));\n } else if (format === 'env') {\n const resolvedEnv = envGraph.getResolvedEnvObject();\n for (const key in resolvedEnv) {\n const value = resolvedEnv[key];\n let strValue: string;\n if (value === undefined) {\n strValue = '';\n } else if (typeof value === 'string') {\n strValue = `\"${value.replaceAll('\"', '\\\\\"').replaceAll('\\n', '\\\\n')}\"`;\n } else {\n strValue = JSON.stringify(value);\n }\n console.log(`${key}=${strValue}`);\n }\n } else {\n throw new Error(`Unknown format: ${format}`);\n }\n\n // const resolvedEnv = envGraph.getResolvedEnvObject();\n // console.log(resolvedEnv);\n};\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/cli/helpers/error-checks.ts"],"names":[],"mappings":"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","file":"chunk-OSSLRXKM.js","sourcesContent":["import ansis from 'ansis';\nimport { EnvGraph } from '@env-spec/env-graph';\nimport _ from '@env-spec/utils/my-dash';\nimport { getItemSummary, joinAndCompact } from '../../lib/formatting';\n\nexport function checkForSchemaErrors(envGraph: EnvGraph) {\n // first we check for loading/parse errors - some cases we may want to let it fail silently?\n for (const source of envGraph.dataSources) {\n // do we care about loading errors from disabled sources?\n // if (source.disabled) continue;\n\n // console.log(source);\n\n // TODO: use a formatting helper to show the error - which will include location/stack/etc appropriately\n if (source.loadingError) {\n console.log(`🚨 Error encountered while loading ${source.label}`);\n console.log(source.loadingError.message);\n console.log(source.loadingError.location);\n\n const errLoc = source.loadingError.location as any;\n\n const errPreview = [\n errLoc.lineStr,\n `${ansis.gray('-'.repeat(errLoc.colNumber - 1))}${ansis.red('^')}`,\n ].join('\\n');\n\n console.log('Error parsing .env file');\n console.log(` ${errLoc.path}:${errLoc.lineNumber}:${errLoc.colNumber}`);\n console.log(errPreview);\n\n process.exit(1);\n }\n }\n\n // now we check for any schema errors - where something about how things are wired up is invalid\n // NOTE - we should not have run any resolution yet\n // TODO: make sure we are calling this before attempting to resolve values\n // const failingItems = _.filter(_.values(envGraph.configSchema), (item) => item.validationState === 'error');\n // if (failingItems.length > 0) {\n // throw new CliExitError('Schema is currently invalid');\n // }\n}\n\nexport class InvalidEnvError extends Error {\n constructor() {\n super('Resolved config/env did not pass validation');\n }\n getFormattedOutput() {\n return `\\n💥 ${ansis.red(this.message)} 💥\\n`;\n }\n}\n\nexport function checkForConfigErrors(envGraph: EnvGraph, opts?: {\n showAll?: boolean\n}) {\n const failingItems = _.filter(_.values(envGraph.configSchema), (item) => item.validationState === 'error');\n\n // TODO: use service.isValid?\n if (failingItems.length > 0) {\n console.log(`\\n🚨 🚨 🚨 ${ansis.bold.underline('Configuration is currently invalid ')} 🚨 🚨 🚨\\n`);\n console.log('Invalid items:\\n');\n\n _.each(failingItems, (item) => {\n console.log(getItemSummary(item));\n console.log();\n });\n if (opts?.showAll) {\n console.log();\n console.log(joinAndCompact([\n 'Valid items:',\n ansis.italic.gray('(remove `--show-all` flag to hide)'),\n ]));\n console.log();\n const validItems = _.filter(_.values(envGraph.configSchema), (i) => !!i.isValid);\n _.each(validItems, (item) => {\n console.log(getItemSummary(item));\n });\n }\n\n throw new InvalidEnvError();\n }\n}\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/runtime/patch-response.ts"],"names":[],"mappings":";;;;;AAGO,SAAS,mBAAsB,GAAA;AACpC,EAAA,KAAA,CAAM,uCAA6B,CAAA;AACnC,EAAI,IAAA,CAAE,UAAW,CAAA,QAAA,CAAiB,iBAAmB,EAAA;AACnD,IAAA,KAAA,CAAM,mBAAmB,CAAA;AACzB,IAAA;AAAA;AAEF,EAAI,IAAA,eAAA,CAAgB,iBAAiB,KAAO,EAAA;AAC1C,IAAA,KAAA,CAAM,wBAAwB,CAAA;AAC9B,IAAA;AAAA;AAGF,EAAA,MAAM,qBAAqB,UAAW,CAAA,QAAA;AACtC,EAAW,UAAA,CAAA,QAAA,GAAW,MAAM,sBAAA,SAA+B,kBAAmB,CAAA;AAAA,IAfhF;AAegF,MAAA,MAAA,CAAA,IAAA,EAAA,wBAAA,CAAA;AAAA;AAAA,IAC5E,OAAO,iBAAoB,GAAA,IAAA;AAAA,IAC3B,WAAA,CAAY,MAAW,IAAW,EAAA;AAChC,MAAA,KAAA,CAAM,2CAAiC,CAAA;AACvC,MAAA,KAAA,CAAM,aAAa,IAAM,EAAA,EAAE,QAAQ,8BAA+B,EAAC,GAAU,IAAI,CAAA;AAAA;AACnF,IACA,OAAO,IAAK,CAAA,IAAA,EAAW,IAAW,EAAA;AAChC,MAAA,KAAA,CAAM,oCAA0B,CAAA;AAChC,MAAA,YAAA,CAAa,KAAK,SAAU,CAAA,IAAI,GAAG,EAAE,MAAA,EAAQ,yBAAyB,CAAA;AACtE,MAAA,MAAM,CAAI,GAAA,kBAAA,CAAmB,IAAK,CAAA,IAAA,EAAM,IAAI,CAAA;AAC5C,MAAO,MAAA,CAAA,cAAA,CAAe,CAAG,EAAA,QAAA,CAAS,SAAS,CAAA;AAC3C,MAAO,OAAA,CAAA;AAAA;AACT,GACF;AACF;AA1BgB,MAAA,CAAA,mBAAA,EAAA,qBAAA,CAAA","file":"chunk-OXV76U3Y.js","sourcesContent":["import { scanForLeaks, varlockSettings } from './env';\nimport { debug } from './lib/debug';\n\nexport function patchGlobalResponse() {\n debug('⚡️ PATCHING global Response');\n if (!(globalThis.Response as any)._patchedByVarlock) {\n debug('> already patched');\n return;\n }\n if (varlockSettings.preventLeaks === false) {\n debug('> disabled by settings');\n return;\n }\n\n const _UnpatchedResponse = globalThis.Response;\n globalThis.Response = class VarlockPatchedResponse extends _UnpatchedResponse {\n static _patchedByVarlock = true;\n constructor(body: any, init: any) {\n debug('⚡️ patched Response constructor');\n super(scanForLeaks(body, { method: 'patched Response constructor' }) as any, init);\n }\n static json(data: any, init: any) {\n debug('⚡️ patched Response.json');\n scanForLeaks(JSON.stringify(data), { method: 'patched Response.json' });\n const r = _UnpatchedResponse.json(data, init);\n Object.setPrototypeOf(r, Response.prototype);\n return r;\n }\n };\n}\n"]}
@@ -1,107 +0,0 @@
1
- import { ansis_default } from './chunk-7UQXFWKN.js';
2
- import { my_dash_default, loadEnvGraph } from './chunk-TYL3Q4QG.js';
3
- import { redactString } from './chunk-FGMXIEFA.js';
4
- import { __name } from './chunk-XN24GZXQ.js';
5
-
6
- // src/lib/formatting.ts
7
- function applyMods(str, mods) {
8
- if (!mods) return str;
9
- if (my_dash_default.isArray(mods)) {
10
- let modStr = str;
11
- mods.forEach((mod) => {
12
- modStr = ansis_default[mod](modStr);
13
- });
14
- return modStr;
15
- }
16
- return ansis_default[mods](str);
17
- }
18
- __name(applyMods, "applyMods");
19
- function formattedValue(val, showType = false) {
20
- let strVal = "";
21
- let strType = "";
22
- let mods;
23
- if (my_dash_default.isBoolean(val)) {
24
- strVal = val.toString();
25
- mods = ["yellow", "italic"];
26
- strType = "boolean";
27
- } else if (my_dash_default.isNumber(val)) {
28
- strVal = val.toString();
29
- mods = "yellow";
30
- strType = "number";
31
- } else if (my_dash_default.isString(val)) {
32
- strVal = `"${val}"`;
33
- strType = "string";
34
- } else if (my_dash_default.isPlainObject(val)) {
35
- strVal = JSON.stringify(val);
36
- strType = "object";
37
- } else if (val === null) {
38
- strVal = "null";
39
- mods = "gray";
40
- } else if (val === void 0) {
41
- strVal = "undefined";
42
- mods = "gray";
43
- }
44
- return [
45
- applyMods(strVal, mods),
46
- showType && strType ? ansis_default.gray(` (${strType})`) : ""
47
- ].join("");
48
- }
49
- __name(formattedValue, "formattedValue");
50
- function joinAndCompact(strings, joinChar = " ") {
51
- return strings.filter((s) => (
52
- // we'll not filter out empty strings - because it's useful to just add newlines
53
- s !== void 0 && s !== null && s !== false
54
- )).join(joinChar);
55
- }
56
- __name(joinAndCompact, "joinAndCompact");
57
- var VALIDATION_STATE_COLORS = {
58
- error: "red",
59
- warn: "yellow",
60
- valid: "cyan"
61
- };
62
- function getItemSummary(item) {
63
- const summary = [];
64
- const itemErrors = item.errors;
65
- const icon = itemErrors.length ? itemErrors[0].icon : "\u2705";
66
- const isSensitive = item.isSensitive;
67
- const isRequired = item.isRequired;
68
- summary.push(joinAndCompact([
69
- icon,
70
- ansis_default[VALIDATION_STATE_COLORS[item.validationState]](item.key) + (isRequired ? ansis_default.magenta("*") : ""),
71
- // ansis.gray(`[type = ${item.type.typeLabel}]`),
72
- isSensitive && ` \u{1F510}${ansis_default.gray.italic("sensitive")}`
73
- // item.useAt ? ansis.gray.italic(`(${item.useAt?.join(', ')})`) : undefined,
74
- ]));
75
- let valAsStr = formattedValue(item.resolvedValue, false);
76
- if (isSensitive && item.resolvedValue && my_dash_default.isString(item.resolvedValue)) {
77
- valAsStr = redactString(item.resolvedValue);
78
- }
79
- summary.push(joinAndCompact([
80
- ansis_default.gray(" \u2514"),
81
- valAsStr,
82
- item.isCoerced && ansis_default.gray.italic("< coerced from ") + (isSensitive ? formattedValue(item.resolvedRawValue) : formattedValue(item.resolvedRawValue, false))
83
- ]));
84
- itemErrors?.forEach((err) => {
85
- summary.push(ansis_default[err.isWarning ? "yellow" : "red"](` - ${err.isWarning ? "[WARNING] " : ""}${err.message}`));
86
- if (err.tip) {
87
- summary.push(...err.tip.split("\n").map((line) => ` ${line}`));
88
- }
89
- });
90
- return summary.join("\n");
91
- }
92
- __name(getItemSummary, "getItemSummary");
93
-
94
- // src/lib/load-graph.ts
95
- async function loadVarlockEnvGraph(opts) {
96
- const envGraph = await loadEnvGraph({
97
- ...opts,
98
- afterInit: /* @__PURE__ */ __name(async (g) => {
99
- }, "afterInit")
100
- });
101
- return envGraph;
102
- }
103
- __name(loadVarlockEnvGraph, "loadVarlockEnvGraph");
104
-
105
- export { getItemSummary, joinAndCompact, loadVarlockEnvGraph };
106
- //# sourceMappingURL=chunk-Q5P7F3WA.js.map
107
- //# sourceMappingURL=chunk-Q5P7F3WA.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/lib/formatting.ts","../src/lib/load-graph.ts"],"names":[],"mappings":";;;;;;AAUA,SAAS,SAAA,CAAU,KAAa,IAAkB,EAAA;AAChD,EAAI,IAAA,CAAC,MAAa,OAAA,GAAA;AAClB,EAAI,IAAA,eAAA,CAAE,OAAQ,CAAA,IAAI,CAAG,EAAA;AACnB,IAAA,IAAI,MAAS,GAAA,GAAA;AACb,IAAK,IAAA,CAAA,OAAA,CAAQ,CAAC,GAAQ,KAAA;AACpB,MAAS,MAAA,GAAA,aAAA,CAAM,GAAG,CAAA,CAAE,MAAM,CAAA;AAAA,KAC3B,CAAA;AACD,IAAO,OAAA,MAAA;AAAA;AAET,EAAO,OAAA,aAAA,CAAM,IAAI,CAAA,CAAE,GAAG,CAAA;AACxB;AAVS,MAAA,CAAA,SAAA,EAAA,WAAA,CAAA;AAYF,SAAS,cAAA,CAAe,GAAU,EAAA,QAAA,GAAW,KAAO,EAAA;AACzD,EAAA,IAAI,MAAiB,GAAA,EAAA;AACrB,EAAA,IAAI,OAAkB,GAAA,EAAA;AACtB,EAAI,IAAA,IAAA;AACJ,EAAI,IAAA,eAAA,CAAE,SAAU,CAAA,GAAG,CAAG,EAAA;AACpB,IAAA,MAAA,GAAS,IAAI,QAAS,EAAA;AACtB,IAAO,IAAA,GAAA,CAAC,UAAU,QAAQ,CAAA;AAC1B,IAAU,OAAA,GAAA,SAAA;AAAA,GACD,MAAA,IAAA,eAAA,CAAE,QAAS,CAAA,GAAG,CAAG,EAAA;AAC1B,IAAA,MAAA,GAAS,IAAI,QAAS,EAAA;AACtB,IAAO,IAAA,GAAA,QAAA;AACP,IAAU,OAAA,GAAA,QAAA;AAAA,GACD,MAAA,IAAA,eAAA,CAAE,QAAS,CAAA,GAAG,CAAG,EAAA;AAC1B,IAAA,MAAA,GAAS,IAAI,GAAG,CAAA,CAAA,CAAA;AAChB,IAAU,OAAA,GAAA,QAAA;AAAA,GACD,MAAA,IAAA,eAAA,CAAE,aAAc,CAAA,GAAG,CAAG,EAAA;AAE/B,IAAS,MAAA,GAAA,IAAA,CAAK,UAAU,GAAG,CAAA;AAC3B,IAAU,OAAA,GAAA,QAAA;AAAA,GACZ,MAAA,IAAW,QAAQ,IAAM,EAAA;AACvB,IAAS,MAAA,GAAA,MAAA;AACT,IAAO,IAAA,GAAA,MAAA;AAAA,GACT,MAAA,IAAW,QAAQ,MAAW,EAAA;AAC5B,IAAS,MAAA,GAAA,WAAA;AACT,IAAO,IAAA,GAAA,MAAA;AAAA;AAET,EAAO,OAAA;AAAA,IACL,SAAA,CAAU,QAAQ,IAAI,CAAA;AAAA,IACtB,YAAY,OAAU,GAAA,aAAA,CAAM,KAAK,CAAK,EAAA,EAAA,OAAO,GAAG,CAAI,GAAA;AAAA,GACtD,CAAE,KAAK,EAAE,CAAA;AACX;AA9BgB,MAAA,CAAA,cAAA,EAAA,gBAAA,CAAA;AAwDT,SAAS,cAAA,CAAe,OAAsE,EAAA,QAAA,GAAW,GAAK,EAAA;AACnH,EAAO,OAAA,OAAA,CAAQ,OAAO,CAAC,CAAA;AAAA;AAAA,IAErB,CAAM,KAAA,MAAA,IAAa,CAAM,KAAA,IAAA,IAAQ,CAAM,KAAA;AAAA,GACxC,CAAA,CAAE,KAAK,QAAQ,CAAA;AAClB;AALgB,MAAA,CAAA,cAAA,EAAA,gBAAA,CAAA;AAOhB,IAAM,uBAA0B,GAAA;AAAA,EAC9B,KAAO,EAAA,KAAA;AAAA,EACP,IAAM,EAAA,QAAA;AAAA,EACN,KAAO,EAAA;AACT,CAAA;AAEO,SAAS,eAAe,IAAkB,EAAA;AAC/C,EAAA,MAAM,UAAyB,EAAC;AAChC,EAAA,MAAM,aAAa,IAAK,CAAA,MAAA;AACxB,EAAA,MAAM,OAAO,UAAW,CAAA,MAAA,GAAS,UAAW,CAAA,CAAC,EAAE,IAAO,GAAA,QAAA;AACtD,EAAA,MAAM,cAAc,IAAK,CAAA,WAAA;AACzB,EAAA,MAAM,aAAa,IAAK,CAAA,UAAA;AACxB,EAAA,OAAA,CAAQ,KAAK,cAAe,CAAA;AAAA,IAC1B,IAAA;AAAA,IACA,aAAM,CAAA,uBAAA,CAAwB,IAAK,CAAA,eAAe,CAAC,CAAA,CAAE,IAAK,CAAA,GAAG,CAAK,IAAA,UAAA,GAAa,aAAM,CAAA,OAAA,CAAQ,GAAG,CAAI,GAAA,EAAA,CAAA;AAAA;AAAA,IAGpG,eAAe,CAAM,UAAA,EAAA,aAAA,CAAM,IAAK,CAAA,MAAA,CAAO,WAAW,CAAC,CAAA;AAAA;AAAA,GAGpD,CAAC,CAAA;AAEF,EAAA,IAAI,QAAW,GAAA,cAAA,CAAe,IAAK,CAAA,aAAA,EAAe,KAAK,CAAA;AACvD,EAAA,IAAI,eAAe,IAAK,CAAA,aAAA,IAAiB,gBAAE,QAAS,CAAA,IAAA,CAAK,aAAa,CAAG,EAAA;AACvE,IAAW,QAAA,GAAA,YAAA,CAAa,KAAK,aAAa,CAAA;AAAA;AAG5C,EAAA,OAAA,CAAQ,KAAK,cAAe,CAAA;AAAA,IAC1B,aAAA,CAAM,KAAK,WAAM,CAAA;AAAA,IACjB,QAAA;AAAA,IACA,IAAK,CAAA,SAAA,IACH,aAAM,CAAA,IAAA,CAAK,OAAO,iBAAiB,CAAA,IAChC,WAAc,GAAA,cAAA,CAAe,KAAK,gBAAgB,CAAA,GAAI,cAAe,CAAA,IAAA,CAAK,kBAAkB,KAAK,CAAA;AAAA,GAEvG,CAAC,CAAA;AAUF,EAAY,UAAA,EAAA,OAAA,CAAQ,CAAC,GAAQ,KAAA;AAC3B,IAAA,OAAA,CAAQ,KAAK,aAAM,CAAA,GAAA,CAAI,SAAY,GAAA,QAAA,GAAW,KAAK,CAAE,CAAA,CAAA,KAAA,EAAQ,GAAI,CAAA,SAAA,GAAY,eAAe,EAAE,CAAA,EAAG,GAAI,CAAA,OAAO,EAAE,CAAC,CAAA;AAK/G,IAAA,IAAI,IAAI,GAAK,EAAA;AACX,MAAA,OAAA,CAAQ,IAAK,CAAA,GAAG,GAAI,CAAA,GAAA,CAAI,KAAM,CAAA,IAAI,CAAE,CAAA,GAAA,CAAI,CAAC,IAAA,KAAS,CAAQ,KAAA,EAAA,IAAI,EAAE,CAAC,CAAA;AAAA;AACnE,GACD,CAAA;AAQD,EAAO,OAAA,OAAA,CAAQ,KAAK,IAAI,CAAA;AAC1B;AAxDgB,MAAA,CAAA,cAAA,EAAA,gBAAA,CAAA;;;ACzFhB,eAAsB,oBAAoB,IAEvC,EAAA;AACD,EAAM,MAAA,QAAA,GAAW,MAAM,YAAa,CAAA;AAAA,IAClC,GAAG,IAAA;AAAA,IACH,SAAA,gCAAkB,CAAM,KAAA;AAAA,KAAb,EAAA,WAAA;AAAA,GAGZ,CAAA;AAED,EAAO,OAAA,QAAA;AACT;AAXsB,MAAA,CAAA,mBAAA,EAAA,qBAAA,CAAA","file":"chunk-Q5P7F3WA.js","sourcesContent":["import ansis, { AnsiColors, AnsiStyles } from 'ansis';\nimport _ from '@env-spec/utils/my-dash';\n\nimport { ConfigItem } from '../../../env-graph/src/lib/config-item';\nimport { VarlockError } from '../../../env-graph/src/lib/errors';\nimport { redactString } from '../runtime/lib/redaction';\n\ntype ColorMod = AnsiStyles | AnsiColors;\ntype ColorMods = ColorMod | Array<ColorMod>;\n\nfunction applyMods(str: string, mods?: ColorMods) {\n if (!mods) return str;\n if (_.isArray(mods)) {\n let modStr = str;\n mods.forEach((mod) => {\n modStr = ansis[mod](modStr);\n });\n return modStr;\n }\n return ansis[mods](str);\n}\n\nexport function formattedValue(val: any, showType = false) {\n let strVal: string = '';\n let strType: string = '';\n let mods: ColorMods | undefined;\n if (_.isBoolean(val)) {\n strVal = val.toString();\n mods = ['yellow', 'italic'];\n strType = 'boolean';\n } else if (_.isNumber(val)) {\n strVal = val.toString();\n mods = 'yellow';\n strType = 'number';\n } else if (_.isString(val)) {\n strVal = `\"${val}\"`;\n strType = 'string';\n } else if (_.isPlainObject(val)) {\n // TODO: can definitely make this better...\n strVal = JSON.stringify(val);\n strType = 'object';\n } else if (val === null) {\n strVal = 'null';\n mods = 'gray';\n } else if (val === undefined) {\n strVal = 'undefined';\n mods = 'gray';\n }\n return [\n applyMods(strVal, mods),\n showType && strType ? ansis.gray(` (${strType})`) : '',\n ].join('');\n}\n\n\nexport function formatError(err: VarlockError) {\n let whenStr = '';\n if (err.type === 'SchemaError') {\n whenStr += 'during schema initialization';\n }\n if (err.type === 'ValidationError') {\n whenStr += 'during validation';\n }\n if (err.type === 'CoercionError') {\n whenStr += 'during coercion';\n }\n if (err.type === 'ResolutionError') {\n whenStr += 'during resolution';\n }\n\n let errStr = `${err.icon} ${err.message}`;\n if (err.isUnexpected) {\n errStr += ansis.gray.italic(`\\n (unexpected error${whenStr ? ` ${whenStr}` : ''})`);\n if ('stack' in err) errStr += err.stack;\n }\n return errStr;\n}\n\nexport function joinAndCompact(strings: Array<string | number | boolean | undefined | null | false>, joinChar = ' ') {\n return strings.filter((s) => (\n // we'll not filter out empty strings - because it's useful to just add newlines\n s !== undefined && s !== null && s !== false\n )).join(joinChar);\n}\n\nconst VALIDATION_STATE_COLORS = {\n error: 'red',\n warn: 'yellow',\n valid: 'cyan',\n} as const;\n\nexport function getItemSummary(item: ConfigItem) {\n const summary: Array<string> = [];\n const itemErrors = item.errors;\n const icon = itemErrors.length ? itemErrors[0].icon : '✅';\n const isSensitive = item.isSensitive;\n const isRequired = item.isRequired;\n summary.push(joinAndCompact([\n icon,\n ansis[VALIDATION_STATE_COLORS[item.validationState]](item.key) + (isRequired ? ansis.magenta('*') : ''),\n\n // ansis.gray(`[type = ${item.type.typeLabel}]`),\n isSensitive && ` 🔐${ansis.gray.italic('sensitive')}`,\n\n // item.useAt ? ansis.gray.italic(`(${item.useAt?.join(', ')})`) : undefined,\n ]));\n\n let valAsStr = formattedValue(item.resolvedValue, false);\n if (isSensitive && item.resolvedValue && _.isString(item.resolvedValue)) {\n valAsStr = redactString(item.resolvedValue)!;\n }\n\n summary.push(joinAndCompact([\n ansis.gray(' └'),\n valAsStr,\n item.isCoerced && (\n ansis.gray.italic('< coerced from ')\n + (isSensitive ? formattedValue(item.resolvedRawValue) : formattedValue(item.resolvedRawValue, false))\n ),\n ]));\n\n // if (item.overrides?.length) {\n // const activeOverride = item.overrides[0];\n // let overrideNote = ansis.gray.italic('value set via override: ');\n // overrideNote += ansis.gray(activeOverride.sourceType);\n // if (activeOverride.sourceLabel) overrideNote += ansis.gray(` - ${activeOverride.sourceLabel}`);\n // summary.push(` ${overrideNote}`);\n // }\n\n itemErrors?.forEach((err) => {\n summary.push(ansis[err.isWarning ? 'yellow' : 'red'](` - ${err.isWarning ? '[WARNING] ' : ''}${err.message}`));\n\n // TODO: standardize here how we show parse error locations and stack info?\n\n // summary.push(...err.cleanedStack || '');\n if (err.tip) {\n summary.push(...err.tip.split('\\n').map((line) => ` ${line}`));\n }\n });\n\n // NO OBJECT/CHILDREN FOR NOW\n // for (const childItem of _.values(item.children)) {\n // const childSummary = getItemSummary(childItem);\n // summary.push(childSummary.split('\\n').map((l) => ` ${l}`).join('\\n'));\n // }\n\n return summary.join('\\n');\n}\n","import { loadEnvGraph } from '@env-spec/env-graph';\n\nexport async function loadVarlockEnvGraph(opts?: {\n currentEnvFallback?: string,\n}) {\n const envGraph = await loadEnvGraph({\n ...opts,\n afterInit: async (g) => {\n // TODO: register varlock resolver\n },\n });\n\n return envGraph;\n}\n"]}
@@ -1,39 +0,0 @@
1
- import { define } from './chunk-33ROL4J5.js';
2
- import { __name } from './chunk-XN24GZXQ.js';
3
- import { homedir } from 'node:os';
4
- import { join } from 'node:path';
5
- import { mkdir, readFile, writeFile } from 'node:fs/promises';
6
- import { existsSync } from 'node:fs';
7
-
8
- var commandSpec = define({
9
- name: "opt-out",
10
- description: "Opt out of anonymous usage analytics"
11
- });
12
- var commandFn = /* @__PURE__ */ __name(async (ctx) => {
13
- const configDir = join(homedir(), ".varlock");
14
- const configPath = join(configDir, "config.json");
15
- try {
16
- if (!existsSync(configDir)) {
17
- await mkdir(configDir, { recursive: true });
18
- }
19
- let config = {};
20
- if (existsSync(configPath)) {
21
- const configContent = await readFile(configPath, "utf-8");
22
- config = JSON.parse(configContent);
23
- }
24
- config = {
25
- ...config,
26
- analytics_opt_out: true
27
- };
28
- await writeFile(configPath, JSON.stringify(config, null, 2));
29
- console.log("\u2705 Successfully opted out of anonymous usage analytics");
30
- console.log("This setting is stored in:", configPath);
31
- } catch (error) {
32
- console.error("Failed to opt out of analytics:", error);
33
- process.exit(1);
34
- }
35
- }, "commandFn");
36
-
37
- export { commandFn, commandSpec };
38
- //# sourceMappingURL=chunk-QCC3P7BT.js.map
39
- //# sourceMappingURL=chunk-QCC3P7BT.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/cli/commands/opt-out.command.ts"],"names":[],"mappings":";;;;;;;AAQO,IAAM,cAAc,MAAO,CAAA;AAAA,EAChC,IAAM,EAAA,SAAA;AAAA,EACN,WAAa,EAAA;AACf,CAAC;AAEY,IAAA,SAAA,iCAA6D,GAAQ,KAAA;AAChF,EAAA,MAAM,SAAY,GAAA,IAAA,CAAK,OAAQ,EAAA,EAAG,UAAU,CAAA;AAC5C,EAAM,MAAA,UAAA,GAAa,IAAK,CAAA,SAAA,EAAW,aAAa,CAAA;AAEhD,EAAI,IAAA;AAEF,IAAI,IAAA,CAAC,UAAW,CAAA,SAAS,CAAG,EAAA;AAC1B,MAAA,MAAM,KAAM,CAAA,SAAA,EAAW,EAAE,SAAA,EAAW,MAAM,CAAA;AAAA;AAI5C,IAAA,IAAI,SAAS,EAAC;AACd,IAAI,IAAA,UAAA,CAAW,UAAU,CAAG,EAAA;AAC1B,MAAA,MAAM,aAAgB,GAAA,MAAM,QAAS,CAAA,UAAA,EAAY,OAAO,CAAA;AACxD,MAAS,MAAA,GAAA,IAAA,CAAK,MAAM,aAAa,CAAA;AAAA;AAInC,IAAS,MAAA,GAAA;AAAA,MACP,GAAG,MAAA;AAAA,MACH,iBAAmB,EAAA;AAAA,KACrB;AAGA,IAAA,MAAM,UAAU,UAAY,EAAA,IAAA,CAAK,UAAU,MAAQ,EAAA,IAAA,EAAM,CAAC,CAAC,CAAA;AAE3D,IAAA,OAAA,CAAQ,IAAI,4DAAuD,CAAA;AACnE,IAAQ,OAAA,CAAA,GAAA,CAAI,8BAA8B,UAAU,CAAA;AAAA,WAC7C,KAAO,EAAA;AACd,IAAQ,OAAA,CAAA,KAAA,CAAM,mCAAmC,KAAK,CAAA;AACtD,IAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA;AAElB,CAhCmE,EAAA,WAAA","file":"chunk-QCC3P7BT.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 { TypedGunshiCommandFn } from '../helpers/gunshi-type-utils';\n\n\nexport const commandSpec = define({\n name: 'opt-out',\n description: 'Opt out of anonymous usage analytics',\n});\n\nexport const commandFn: TypedGunshiCommandFn<typeof commandSpec> = async (ctx) => {\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 = {};\n if (existsSync(configPath)) {\n const configContent = await readFile(configPath, 'utf-8');\n config = JSON.parse(configContent);\n }\n\n // Update config with opt-out setting\n config = {\n ...config,\n analytics_opt_out: true,\n };\n\n // Write updated config\n await writeFile(configPath, JSON.stringify(config, null, 2));\n\n console.log('✅ Successfully opted out of anonymous usage analytics');\n console.log('This setting is stored in:', configPath);\n } catch (error) {\n console.error('Failed to opt out of analytics:', error);\n process.exit(1);\n }\n};\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/cli/commands/help.command.ts"],"names":[],"mappings":";;;;AAGO,IAAM,cAAc,MAAO,CAAA;AAAA,EAChC,IAAM,EAAA,MAAA;AAAA,EACN,WAAa,EAAA,4BAAA;AAAA,EACb,MAAM;AACR,CAAC;AAEY,IAAA,SAAA,iCAA6D,GAAQ,KAAA;AAElF,CAFmE,EAAA,WAAA","file":"chunk-RCHPHIHX.js","sourcesContent":["import { define } from 'gunshi';\nimport { TypedGunshiCommandFn } from '../helpers/gunshi-type-utils';\n\nexport const commandSpec = define({\n name: 'help',\n description: 'Show help info for varlock',\n args: {},\n});\n\nexport const commandFn: TypedGunshiCommandFn<typeof commandSpec> = async (ctx) => {\n // no-op - we'll trigger help from main entry point\n};\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/runtime/patch-server-response.ts"],"names":[],"mappings":"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","file":"chunk-RF3YMFUX.js","sourcesContent":["/*\n This patches the global ServerResponse object to scan for secret leaks - currently used for next.js and remix\n*/\n\nimport zlib from 'node:zlib';\nimport { ServerResponse } from 'node:http';\nimport { redactSensitiveConfig, scanForLeaks, varlockSettings } from './env';\nimport { debug } from './lib/debug';\n\n// NOTE - previously was using a symbol but got weird because of multiple builds and contexts...\nconst patchedKey = '_patchedByVarlock';\nexport function patchGlobalServerResponse(opts?: {\n ignoreUrlPatterns?: Array<RegExp>,\n redactInsteadOfThrow?: boolean,\n}) {\n debug('⚡️ PATCHING global ServerResponse');\n if (Object.getOwnPropertyDescriptor(ServerResponse.prototype, patchedKey)) {\n debug('> already patched');\n return;\n }\n if (varlockSettings.preventLeaks === false) {\n debug('> disabled by settings');\n return;\n }\n\n Object.defineProperty(ServerResponse.prototype, patchedKey, { value: true });\n\n const serverResponseWrite = ServerResponse.prototype.write;\n\n // @ts-ignore\n ServerResponse.prototype.write = function varlockPatchedServerResponseWrite(...args) {\n // console.log('⚡️ patched ServerResponse.write');\n // TODO: do we want to filter out some requests here? maybe based on the file type?\n\n const rawChunk = args[0];\n\n // for now, we only scan rendered html... may need to change this though for server components?\n // so we bail if it looks like this response does not contain html\n const contentType = this.getHeader('content-type')?.toString() || '';\n // console.log('patched ServerResponse.write', contentType);\n let runScan = (\n contentType.startsWith('text/')\n || contentType.startsWith('application/json')\n // || contentType.startsWith('application/javascript')\n );\n\n const reqUrl = (this as any).req.url;\n // console.log('> scan ServerResponse.write', contentType, reqUrl);\n if (runScan && reqUrl && opts?.ignoreUrlPatterns?.some((pattern) => pattern.test(reqUrl))) {\n runScan = false;\n }\n\n // we want to run the scanner on text/html and text/x-component (server actions)\n // TODO: anything else?\n if (!runScan) {\n // @ts-ignore\n return serverResponseWrite.apply(this, args);\n }\n\n // have to deal with compressed data, which is awkward but possible\n const compressionType = this.getHeader('Content-Encoding');\n let chunkStr;\n let chunkType: 'string' | 'encoded' | 'gzip' | null = null;\n if (typeof rawChunk === 'string') {\n chunkType = 'string';\n chunkStr = rawChunk;\n } else if (!compressionType) {\n chunkType = 'encoded';\n const decoder = new TextDecoder();\n chunkStr = decoder.decode(rawChunk);\n } else if (compressionType === 'gzip') {\n chunkType = 'gzip';\n // first chunk of data contains only compression headers\n if (!(this as any)._zlibChunks) {\n // (this as any)._zlibHeadersChunk = rawChunk;\n (this as any)._zlibChunks = [rawChunk];\n } else {\n // TODO: figure out how we can unzip one chunk at a time instead of storing everything\n (this as any)._zlibChunks?.push(rawChunk);\n try {\n const unzippedChunk = zlib.unzipSync(Buffer.concat((this as any)._zlibChunks || []), {\n flush: zlib.constants.Z_SYNC_FLUSH,\n finishFlush: zlib.constants.Z_SYNC_FLUSH,\n });\n const fullUnzippedData = unzippedChunk.toString('utf-8');\n chunkStr = fullUnzippedData.substring((this as any)._lastChunkEndIndex || 0);\n (this as any)._lastChunkEndIndex = fullUnzippedData.length;\n } catch (err) {\n // console.log('error unzipping chunk', err);\n }\n }\n }\n // TODO: we may want to support other compression schemes? but currently only used in nextjs which is using gzip\n if (chunkStr) {\n // console.log('scanning!', chunkStr.substring(0, 1000));\n\n\n try {\n scanForLeaks(chunkStr, { method: 'patched ServerResponse.write', file: (this as any).req.url });\n } catch (err) {\n // console.log('found secret in chunk', chunkType, chunkStr);\n // console.log(this)\n if (opts?.redactInsteadOfThrow) {\n chunkStr = redactSensitiveConfig(chunkStr);\n if (chunkType === 'string') {\n args[0] = chunkStr;\n } else if (chunkType === 'encoded') {\n const encoder = new TextEncoder();\n args[0] = encoder.encode(chunkStr);\n } else if (chunkType === 'gzip') {\n // currently unable to scrub gzip chunks\n // this works sometimes, but othertimes causes decoding error\n // we'll need to pass through chunks from a new gzip stream, because we don't have access to the underlying one\n // args[0] = zlib.gzipSync(chunkStr, {\n // flush: zlib.constants.Z_SYNC_FLUSH,\n // finishFlush: zlib.constants.Z_SYNC_FLUSH,\n // });\n } else {\n throw new Error(`unable to scrub - unknown chunk type ${chunkType}`);\n }\n } else {\n throw err;\n }\n }\n }\n\n // @ts-ignore\n return serverResponseWrite.apply(this, args);\n };\n\n\n // calling `res.json()` in the api routes on pages router calls `res.end` without called `res.write`\n const serverResponseEnd = ServerResponse.prototype.end;\n // @ts-ignore\n ServerResponse.prototype.end = function patchedServerResponseEnd(...args) {\n // console.log('⚡️ patched ServerResponse.end');\n const endChunk = args[0];\n // console.log('patched ServerResponse.end', endChunk);\n // this just needs to work (so far) for nextjs sending json bodies, so does not need to handle all cases...\n if (endChunk && typeof endChunk === 'string') {\n // TODO: currently this throws the error and then things just hang... do we want to try to return an error type response instead?\n scanForLeaks(endChunk, { method: 'patched ServerResponse.end' });\n }\n // @ts-ignore\n return serverResponseEnd.apply(this, args);\n };\n}\n\n// ---\n// patchGlobalServerResponse();\n"]}