UNPKG

eve

Version:

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

1 lines 2.54 kB
import{isObject}from"#shared/guards.js";function buildInputSchema(e,t){let n={},r=[];for(let t of e)n[t.name]=t.description===void 0?t.schema:{...t.schema,description:t.description},t.required&&r.push(t.name);t!==void 0&&(n.body=t.schema,t.required&&r.push(`body`));let i={type:`object`,properties:n};return r.length>0&&(i.required=r),i}function deref(e,t){return typeof t.$ref==`string`?resolveRef(e,t.$ref)??{}:t}function derefSchema(e,t,n=0,r=new Set){if(isArray(t))return t.map(t=>derefSchema(e,t,n+1,r));if(!isObject(t))return t;if(n>12)return{};if(typeof t.$ref==`string`){if(r.has(t.$ref))return{};let i=resolveRef(e,t.$ref);return i===void 0?{}:derefSchema(e,i,n+1,new Set([...r,t.$ref]))}let i={};for(let[a,o]of Object.entries(t))i[a]=a==="default"||a===`example`?o:(a===`properties`||a===`patternProperties`||a===`$defs`||a===`definitions`)&&isObject(o)?Object.fromEntries(Object.entries(o).map(([t,i])=>[t,derefSchema(e,i,n+2,r)])):derefSchema(e,o,n+1,r);return normalizeSchemaType(i),normalizeNullable(i),normalizeSchemaAnnotations(i),i}const VALID_JSON_SCHEMA_TYPES=new Set([`string`,`number`,`integer`,`boolean`,`object`,`array`,`null`]);function normalizeSchemaType(e){let t=e.type;if(typeof t==`string`&&!VALID_JSON_SCHEMA_TYPES.has(t))delete e.type;else if(isArray(t)){let n=t.filter(e=>typeof e==`string`&&VALID_JSON_SCHEMA_TYPES.has(e));n.length===0?delete e.type:e.type=n}}function normalizeNullable(e){if(!(`nullable`in e))return;let t=e.nullable===!0;if(delete e.nullable,!t)return;let n=e.type;typeof n==`string`?n!==`null`&&(e.type=[n,`null`]):isArray(n)?n.includes(`null`)||(e.type=[...n,`null`]):isArray(e.enum)&&!e.enum.includes(null)&&(e.enum=[...e.enum,null])}function normalizeSchemaAnnotations(e){let t=e.type;if(typeof t==`string`||isArray(t))for(let n of[`default`,`example`])n in e&&!matchesSchemaType(e[n],t)&&delete e[n]}function matchesSchemaType(e,t){return(typeof t==`string`?[t]:t).some(t=>{switch(t){case`string`:return typeof e==`string`;case`number`:return typeof e==`number`&&Number.isFinite(e);case`integer`:return typeof e==`number`&&Number.isInteger(e);case`boolean`:return typeof e==`boolean`;case`object`:return isObject(e);case`array`:return isArray(e);case`null`:return e===null;default:return!1}})}function resolveRef(e,t){if(!t.startsWith(`#/`))return;let n=t.slice(2).split(`/`).map(e=>e.replace(/~1/g,`/`).replace(/~0/g,`~`)),r=e;for(let e of n){if(!isObject(r))return;r=r[e]}return r}function isArray(e){return Array.isArray(e)}export{buildInputSchema,deref,derefSchema,isArray};