varlock 0.4.2 → 0.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (93) hide show
  1. package/dist/auto-load.js +6 -6
  2. package/dist/{chunk-PCRIVT4T.js → chunk-2AGKN64R.js} +663 -258
  3. package/dist/chunk-2AGKN64R.js.map +1 -0
  4. package/dist/{chunk-BGPQX6XO.js → chunk-3J7BFRB4.js} +372 -446
  5. package/dist/chunk-3J7BFRB4.js.map +1 -0
  6. package/dist/{chunk-3U2C5ACW.js → chunk-4JMFWK65.js} +5 -5
  7. package/dist/{chunk-3U2C5ACW.js.map → chunk-4JMFWK65.js.map} +1 -1
  8. package/dist/{chunk-TYIS6T2T.js → chunk-BC7LU4LG.js} +3 -3
  9. package/dist/{chunk-TYIS6T2T.js.map → chunk-BC7LU4LG.js.map} +1 -1
  10. package/dist/chunk-EXG5VPNZ.js +17 -0
  11. package/dist/chunk-EXG5VPNZ.js.map +1 -0
  12. package/dist/{chunk-P7WVEZYA.js → chunk-FYZ7LKLX.js} +27 -7
  13. package/dist/chunk-FYZ7LKLX.js.map +1 -0
  14. package/dist/{chunk-CBWJHW3M.js → chunk-G7FDCTNA.js} +8 -8
  15. package/dist/{chunk-CBWJHW3M.js.map → chunk-G7FDCTNA.js.map} +1 -1
  16. package/dist/{chunk-WAMBVZL2.js → chunk-IMB5QAZS.js} +38 -16
  17. package/dist/chunk-IMB5QAZS.js.map +1 -0
  18. package/dist/{chunk-NWY5IIPW.js → chunk-J7PA7B2U.js} +6 -81
  19. package/dist/chunk-J7PA7B2U.js.map +1 -0
  20. package/dist/{chunk-HS2NN4VF.js → chunk-JCJISIY6.js} +6 -6
  21. package/dist/{chunk-HS2NN4VF.js.map → chunk-JCJISIY6.js.map} +1 -1
  22. package/dist/{chunk-I4RYFNPM.js → chunk-KKNNZWYD.js} +3 -3
  23. package/dist/{chunk-I4RYFNPM.js.map → chunk-KKNNZWYD.js.map} +1 -1
  24. package/dist/{chunk-QQDWRXNU.js → chunk-LVZSZAKN.js} +3 -3
  25. package/dist/{chunk-QQDWRXNU.js.map → chunk-LVZSZAKN.js.map} +1 -1
  26. package/dist/{chunk-ZXJ4CEDK.js → chunk-MYHVSJ3X.js} +3 -3
  27. package/dist/{chunk-ZXJ4CEDK.js.map → chunk-MYHVSJ3X.js.map} +1 -1
  28. package/dist/{chunk-PIOJV2A7.js → chunk-NPPZVF24.js} +4 -4
  29. package/dist/{chunk-PIOJV2A7.js.map → chunk-NPPZVF24.js.map} +1 -1
  30. package/dist/{chunk-RQDMJMKL.js → chunk-PMBDCWD5.js} +6 -5
  31. package/dist/chunk-PMBDCWD5.js.map +1 -0
  32. package/dist/{chunk-YWFNGAPT.js → chunk-SHONHP24.js} +6 -6
  33. package/dist/{chunk-YWFNGAPT.js.map → chunk-SHONHP24.js.map} +1 -1
  34. package/dist/chunk-TLEEAUD7.js +68 -0
  35. package/dist/chunk-TLEEAUD7.js.map +1 -0
  36. package/dist/{chunk-LJTQEZE2.js → chunk-UVWLW5KD.js} +6 -6
  37. package/dist/{chunk-LJTQEZE2.js.map → chunk-UVWLW5KD.js.map} +1 -1
  38. package/dist/{chunk-MIBOBKI4.js → chunk-XLYSNOR3.js} +15 -3
  39. package/dist/chunk-XLYSNOR3.js.map +1 -0
  40. package/dist/{chunk-LFBK6MZU.js → chunk-ZLAUDWOL.js} +6 -6
  41. package/dist/{chunk-LFBK6MZU.js.map → chunk-ZLAUDWOL.js.map} +1 -1
  42. package/dist/cli/cli-executable.js +24 -24
  43. package/dist/cli/cli-executable.js.map +1 -1
  44. package/dist/config-item-NO5PKZRH.js +5 -0
  45. package/dist/{config-item-K7KWEJD2.js.map → config-item-NO5PKZRH.js.map} +1 -1
  46. package/dist/dotenv-compat.js +6 -6
  47. package/dist/{env-graph-COORmJlH.d.ts → env-graph-Cz_c5P6Y.d.ts} +24 -1
  48. package/dist/index.d.ts +2 -2
  49. package/dist/index.js +11 -11
  50. package/dist/init.command-AV4EWYIT.js +12 -0
  51. package/dist/{init.command-SZPMB525.js.map → init.command-AV4EWYIT.js.map} +1 -1
  52. package/dist/load.command-5JQUW3H7.js +11 -0
  53. package/dist/{load.command-XSOTCSGA.js.map → load.command-5JQUW3H7.js.map} +1 -1
  54. package/dist/plugin-lib.d.ts +2 -2
  55. package/dist/printenv.command-SBB6GVC2.js +12 -0
  56. package/dist/{printenv.command-4HWCHHCY.js.map → printenv.command-SBB6GVC2.js.map} +1 -1
  57. package/dist/run.command-HTGTG6ER.js +12 -0
  58. package/dist/{run.command-2HLQ2AYT.js.map → run.command-HTGTG6ER.js.map} +1 -1
  59. package/dist/runtime/env.d.ts +7 -2
  60. package/dist/runtime/env.js +2 -2
  61. package/dist/runtime/init-edge.cjs +297 -0
  62. package/dist/runtime/init-edge.d.cts +1 -0
  63. package/dist/runtime/init-server.cjs +370 -0
  64. package/dist/runtime/init-server.d.cts +20 -0
  65. package/dist/runtime/patch-console.js +3 -3
  66. package/dist/runtime/patch-response.js +3 -3
  67. package/dist/runtime/patch-server-response.js +3 -3
  68. package/dist/scan.command-ADKVWN5T.js +13 -0
  69. package/dist/{scan.command-4J64EB4Z.js.map → scan.command-ADKVWN5T.js.map} +1 -1
  70. package/dist/telemetry.command-CQFTGXPF.js +11 -0
  71. package/dist/{telemetry.command-NLJFD63U.js.map → telemetry.command-CQFTGXPF.js.map} +1 -1
  72. package/dist/typegen.command-A544SFYM.js +12 -0
  73. package/dist/{typegen.command-7BE3K6PU.js.map → typegen.command-A544SFYM.js.map} +1 -1
  74. package/package.json +12 -2
  75. package/dist/chunk-6SS4YD2I.js +0 -156
  76. package/dist/chunk-6SS4YD2I.js.map +0 -1
  77. package/dist/chunk-BGPQX6XO.js.map +0 -1
  78. package/dist/chunk-MBYYRBL6.js +0 -17
  79. package/dist/chunk-MBYYRBL6.js.map +0 -1
  80. package/dist/chunk-MIBOBKI4.js.map +0 -1
  81. package/dist/chunk-NWY5IIPW.js.map +0 -1
  82. package/dist/chunk-P7WVEZYA.js.map +0 -1
  83. package/dist/chunk-PCRIVT4T.js.map +0 -1
  84. package/dist/chunk-RQDMJMKL.js.map +0 -1
  85. package/dist/chunk-WAMBVZL2.js.map +0 -1
  86. package/dist/config-item-K7KWEJD2.js +0 -5
  87. package/dist/init.command-SZPMB525.js +0 -12
  88. package/dist/load.command-XSOTCSGA.js +0 -11
  89. package/dist/printenv.command-4HWCHHCY.js +0 -12
  90. package/dist/run.command-2HLQ2AYT.js +0 -12
  91. package/dist/scan.command-4J64EB4Z.js +0 -13
  92. package/dist/telemetry.command-NLJFD63U.js +0 -11
  93. package/dist/typegen.command-7BE3K6PU.js +0 -12
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/cli/helpers/js-package-manager-utils.ts","../src/cli/helpers/pretty-format.ts"],"names":[],"mappings":"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","file":"chunk-6SS4YD2I.js","sourcesContent":["import path from 'node:path';\nimport fs, { existsSync } from 'node:fs';\nimport { pathExistsSync } from '@env-spec/utils/fs-utils';\nimport { createDebug } from '../../lib/debug';\n\nimport { CliExitError } from './exit-error';\nimport { execSync } from 'node:child_process';\n\nconst debug = createDebug('varlock:js-package-manager-utils');\n\nexport type JsPackageManager = 'npm' | 'pnpm' | 'yarn' | 'bun' | 'deno';\n\nexport type JsPackageManagerMeta = {\n name: JsPackageManager;\n lockfiles: Array<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 lockfiles: ['package-lock.json'],\n add: 'npm install', // add also works\n exec: 'npm exec --',\n dlx: 'npx',\n },\n pnpm: {\n name: 'pnpm',\n lockfiles: ['pnpm-lock.yaml'],\n add: 'pnpm add',\n exec: 'pnpm exec',\n dlx: 'pnpm dlx',\n },\n yarn: {\n name: 'yarn',\n lockfiles: ['yarn.lock'],\n add: 'yarn add',\n exec: 'yarn exec --',\n dlx: 'yarn dlx',\n },\n bun: {\n name: 'bun',\n lockfiles: ['bun.lock', '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 lockfiles: ['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 debug('Detecting js package manager');\n let cwd = opts?.cwd || process.cwd();\n let multipleLockfilesDetected: Array<JsPackageManager> | undefined;\n do {\n debug(`> scanning ${cwd}`);\n const scanDir = cwd;\n let pm: JsPackageManager;\n let detectedPm: JsPackageManager | undefined;\n for (pm in JS_PACKAGE_MANAGERS) {\n const foundLockfile = JS_PACKAGE_MANAGERS[pm].lockfiles.find(\n (lockfile) => pathExistsSync(path.join(scanDir, lockfile)),\n );\n\n if (foundLockfile) {\n // if we find 2 lockfiles at the same level, store them and continue\n // this can happen in monorepos or when switching package managers\n if (detectedPm) {\n debug(`> found multiple lockfiles: ${foundLockfile} and ${JS_PACKAGE_MANAGERS[detectedPm].lockfiles[0]}`);\n multipleLockfilesDetected = [detectedPm, pm];\n break;\n }\n debug(`> found ${foundLockfile}`);\n detectedPm = pm;\n }\n }\n if (detectedPm && !multipleLockfilesDetected) return JS_PACKAGE_MANAGERS[detectedPm];\n if (multipleLockfilesDetected) break;\n\n // will break when we reach the root\n const parentDir = path.dirname(cwd);\n if (parentDir === cwd) break;\n cwd = parentDir;\n\n if (opts?.workspaceRootPath) {\n if (opts.workspaceRootPath === cwd) {\n debug('> found workspace root');\n break;\n }\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'))) {\n debug('> found git root');\n break;\n }\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 debug(`> found ${pmFromAgent} using npm_config_user_agent`);\n return JS_PACKAGE_MANAGERS[pmFromAgent as JsPackageManager];\n }\n }\n\n // if we found multiple lockfiles and env var detection failed, return the first detected one\n // we choose the first one because the order is deterministic (based on the order in JS_PACKAGE_MANAGERS)\n // and this provides a reasonable fallback when we can't determine the active package manager\n if (multipleLockfilesDetected) {\n debug(`> using ${multipleLockfilesDetected[0]} from multiple detected lockfiles`);\n return JS_PACKAGE_MANAGERS[multipleLockfilesDetected[0]];\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 // move to the correct directory if needed\n opts.packagePath && `cd ${opts.packagePath} &&`,\n // `add` works in all of them\n `${opts.packageManager} add ${opts.packageName}`,\n // tells pnpm to either install in the workspace root explicitly\n // or to not check if we are the in the root\n opts.packageManager === 'pnpm' && (opts.isMonoRepoRoot ? '-w' : '--ignore-workspace-root-check'),\n ].filter(Boolean).join(' '));\n\n return true;\n}\n\n","import ansis from 'ansis';\nimport { detectJsPackageManager, JsPackageManagerMeta } from './js-package-manager-utils';\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, opts?: { jsPackageManager?: JsPackageManagerMeta | true }) => {\n let jsPackageManager: JsPackageManagerMeta | undefined;\n if (opts?.jsPackageManager === true) {\n jsPackageManager = detectJsPackageManager();\n } else if (opts?.jsPackageManager) {\n jsPackageManager = opts.jsPackageManager;\n }\n if (jsPackageManager) {\n s = `${jsPackageManager.exec} ${s}`;\n }\n return ansis.green.italic(s);\n },\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"]}