UNPKG

eve

Version:

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

1 lines 2.42 kB
import{resolve}from"node:path";import{parseJsonObject}from"#shared/json.js";import{createServiceConfigRecord}from"#internal/vercel/vercel-services-config.js";import{createEvePublicRoute,createEveRequestPathRoute,createEveServiceName}from"#internal/vercel/eve-service-contribution.js";function resolveServicePrefix(e){if(typeof e?.routePrefix==`string`&&e.routePrefix.trim().length>0)return e.routePrefix.trim();if(typeof e?.mount==`string`&&e.mount.trim().length>0)return e.mount.trim();if(typeof e?.mount==`object`&&typeof e.mount.path==`string`&&e.mount.path.trim().length>0)return e.mount.path.trim()}function parseLegacyServiceCollection(e){if(e===void 0)return;let t;try{t=Array.isArray(e)?e:Object.values(parseJsonObject(e))}catch{return}return t.flatMap(e=>{try{return[parseJsonObject(e)]}catch{return[]}})}function createServiceConfigList(e){return e===void 0?void 0:Object.values(createServiceConfigRecord(e))}function resolveServiceRoot(e,t){let n=t.root??t.entrypoint;return typeof n==`string`&&n.trim().length>0?resolve(e,n):void 0}function resolveServiceCollection(e){return parseLegacyServiceCollection(e.experimentalServices)??parseLegacyServiceCollection(e.experimentalServicesV2)??createServiceConfigList(e.services)}function resolveEveServicePrefixByRoot(e){for(let t of resolveServiceCollection(e.config)??[]){let n=resolveServicePrefix(t);if(t.framework===`eve`&&n!==void 0&&n!==`/`&&e.appRoots.includes(resolveServiceRoot(e.configRoot,t)??``))return n}}function findConfiguredEveServiceEntry(e,t){if(t.name!==void 0){let n=createEveServiceName(t.name),r=e[n];return r?.framework===`eve`?{name:n,service:r}:void 0}let n=Object.entries(e).find(([,e])=>e.framework===`eve`);return n===void 0?void 0:{name:n[0],service:n[1]}}function insertEveServiceRequestPathRoute(e,t){return[createEveRequestPathRoute(t),...(e??[]).filter(e=>e.src!==t)]}function isEveServiceRoute(e,t,n){let r=e.destination;return e.src===n&&typeof r==`object`&&r.type===`service`&&r.service===t}function insertEveServiceRoutes(e,t){let n=e.filter(e=>!t.some(({routeSrc:t,serviceName:n})=>isEveServiceRoute(e,n,t))),r=t.map(({routeSrc:e,serviceName:t})=>createEvePublicRoute(t,e)),i=n.findIndex(e=>e.handle===`filesystem`);return i<0?[...r,...n]:[...n.slice(0,i),...r,...n.slice(i)]}export{findConfiguredEveServiceEntry,insertEveServiceRequestPathRoute,insertEveServiceRoutes,resolveEveServicePrefixByRoot,resolveServicePrefix};