eve
Version:
Filesystem-first framework for durable backend AI agents that run anywhere.
1 lines • 1.7 kB
JavaScript
import{join}from"node:path";import{readFile}from"node:fs/promises";import{toErrorMessage}from"#shared/errors.js";import{createHash}from"node:crypto";import{loadModuleBackedDefinition}from"#compiler/normalize-helpers.js";import{normalizeSandboxDefinition}from"#internal/authored-definition/sandbox.js";async function compileSandboxDefinition(e,t,n={}){let r=`Expected the sandbox export "${t.exportName??`default`}" from "${t.logicalPath}" to match the public eve shape.`,o=normalizeSandboxDefinition(await loadModuleBackedDefinition({agentRoot:e,externalDependencies:n.externalDependencies,kind:`sandbox`,source:t}),r),s=o.revalidationKey===void 0?void 0:await resolveSandboxRevalidationKey({message:r,revalidationKey:o.revalidationKey,source:t});return{backendName:resolveCompiledBackendName(o.backend),description:o.description,exportName:t.exportName,logicalPath:t.logicalPath,revalidationKey:s,sourceHash:await resolveSandboxSourceHash(e,t),sourceId:t.sourceId,sourceKind:`module`}}function resolveCompiledBackendName(e){if(e!==void 0)try{return e.name}catch{return}}async function resolveSandboxRevalidationKey(e){let t;try{t=await e.revalidationKey()}catch(t){throw Error(`${e.message} Failed to execute the "revalidationKey" function from "${e.source.logicalPath}": ${toErrorMessage(t)}`)}if(typeof t!=`string`)throw Error(`${e.message} The "revalidationKey" function must return a string.`);if(t.trim().length===0)throw Error(`${e.message} The "revalidationKey" function must return a non-empty string.`);return t}async function resolveSandboxSourceHash(n,i){let a=await readFile(join(n,i.logicalPath));return createHash(`sha256`).update(a).digest(`hex`)}export{compileSandboxDefinition};