eve
Version:
Filesystem-first framework for durable backend AI agents that run anywhere.
1 lines • 1.75 kB
JavaScript
import{pathExists}from"./path-exists.js";import{dirname,join,resolve}from"node:path";import{readFile}from"node:fs/promises";const LOCKFILE_MANAGERS=[[`pnpm-lock.yaml`,`pnpm`],[`package-lock.json`,`npm`],[`yarn.lock`,`yarn`],[`bun.lock`,`bun`],[`bun.lockb`,`bun`]];function isPackageManagerKind(e){return e===`bun`||e===`npm`||e===`pnpm`||e===`yarn`}function resolvePackageManager(e){let t=e.packageManagerField?.split(`@`,1)[0]?.trim();if(t!==void 0&&isPackageManagerKind(t))return{kind:t,source:`package-manager-field`};for(let[t,n]of LOCKFILE_MANAGERS)if(e.lockfiles.includes(t))return{kind:n,source:`lockfile`};return{kind:`pnpm`,source:`default`}}function packageManagerFromUserAgent(e){let t=e?.split(`/`,1)[0];return t!==void 0&&isPackageManagerKind(t)?t:void 0}function detectInvokingPackageManager(){return packageManagerFromUserAgent(process.env.npm_config_user_agent)}async function detectPackageManagerInDirectory(t){let r;try{let e=JSON.parse(await readFile(join(t,`package.json`),`utf8`));typeof e==`object`&&e&&`packageManager`in e&&typeof e.packageManager==`string`&&(r=e.packageManager)}catch{}let i=[];for(let[r]of LOCKFILE_MANAGERS)await pathExists(join(t,r))&&i.push(r);let a=resolvePackageManager({packageManagerField:r,lockfiles:i});return a.source==="default"?void 0:a}async function detectAncestorPackageManager(e){let n=dirname(resolve(e));for(;;){let e=await detectPackageManagerInDirectory(n);if(e!==void 0)return e;let r=dirname(n);if(r===n)return;n=r}}async function detectPackageManager(e){return await detectPackageManagerInDirectory(resolve(e))??await detectAncestorPackageManager(e)??{kind:`pnpm`,source:`default`}}export{detectInvokingPackageManager,detectPackageManager,packageManagerFromUserAgent,resolvePackageManager};