UNPKG

eve

Version:

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

1 lines 1.76 kB
import{readFile}from"node:fs/promises";import{z}from"#compiled/zod/index.js";import{dirname,join,relative}from"node:path";const VercelProjectLinkSchema=z.object({projectId:z.string().min(1),orgId:z.string().min(1),projectName:z.string().min(1).optional()}),VercelRepoProjectSchema=z.object({directory:z.string().min(1),id:z.string().min(1),name:z.string().min(1),orgId:z.string().min(1).optional()}),VercelRepoLinkSchema=z.object({orgId:z.string().min(1).optional(),projects:z.array(VercelRepoProjectSchema)});function normalizeDirectory(e){return e===`.`?e:e.replaceAll(`\\`,`/`).replace(/\/+$/,``)}function containsDirectory(e,t){return e===`.`||t===e||t.startsWith(`${e}/`)}function resolveRepoProject(e,t,n){let r=normalizeDirectory(relative(t,n)),i=e.projects.filter(e=>containsDirectory(normalizeDirectory(e.directory),r)),a=Math.max(...i.map(e=>e.directory.length)),o=i.filter(e=>e.directory.length===a),s=o.length===1?o[0]:void 0;if(s===void 0)return;let c=s.orgId??e.orgId;return c===void 0?void 0:{orgId:c,projectId:s.id,projectName:s.name}}async function readProjectFile(e){try{let t=await readFile(join(e,`.vercel`,`project.json`),`utf8`),n=VercelProjectLinkSchema.safeParse(JSON.parse(t));return n.success?n.data:void 0}catch{return}}async function readRepoFile(e){try{let t=await readFile(join(e,`.vercel`,`repo.json`),`utf8`),n=VercelRepoLinkSchema.safeParse(JSON.parse(t));return n.success?n.data:void 0}catch{return}}async function readRepoProjectLink(e){let t=e;for(;;){let n=await readRepoFile(t);if(n!==void 0)return resolveRepoProject(n,t,e);let r=dirname(t);if(r===t)return;t=r}}async function readVercelProjectLink(e){return await readProjectFile(e)??await readRepoProjectLink(e)}export{VercelProjectLinkSchema,readVercelProjectLink};