UNPKG

eve

Version:

Filesystem-first framework for durable backend AI agents that run anywhere.

1 lines 1.79 kB
import{pathExists}from"./path-exists.js";import{readFile}from"node:fs/promises";import{dirname,join,resolve}from"node:path";const LOCKFILE_MANAGERS=[[`pnpm-lock.yaml`,`pnpm`],[`pnpm-workspace.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(e){let t;try{let n=JSON.parse(await readFile(join(e,`package.json`),`utf8`));typeof n==`object`&&n&&`packageManager`in n&&typeof n.packageManager==`string`&&(t=n.packageManager)}catch{}let n=[];for(let[t]of LOCKFILE_MANAGERS)await pathExists(join(e,t))&&n.push(t);let r=resolvePackageManager({packageManagerField:t,lockfiles:n});return r.source==="default"?void 0:r}async function detectAncestorPackageManager(e){let t=dirname(resolve(e));for(;;){let e=await detectPackageManagerInDirectory(t);if(e!==void 0)return e;let n=dirname(t);if(n===t)return;t=n}}async function detectPackageManager(e){return await detectPackageManagerInDirectory(resolve(e))??await detectAncestorPackageManager(e)??{kind:`pnpm`,source:`default`}}export{detectInvokingPackageManager,detectPackageManager,packageManagerFromUserAgent,resolvePackageManager};