eve
Version:
Filesystem-first framework for durable backend AI agents that run anywhere.
1 lines • 1.75 kB
JavaScript
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(t,n,r=0,i=new Set){if(isArray(n))return n.map(e=>derefSchema(t,e,r+1,i));if(!isObject(n))return n;if(r>12)return{};if(typeof n.$ref==`string`){if(i.has(n.$ref))return{};let e=resolveRef(t,n.$ref);return e===void 0?{}:derefSchema(t,e,r+1,new Set([...i,n.$ref]))}let a={};for(let[e,o]of Object.entries(n))a[e]=derefSchema(t,o,r+1,i);return normalizeSchemaType(a),normalizeNullable(a),a}const VALID_JSON_SCHEMA_TYPES=new Set([`string`,`number`,`integer`,`boolean`,`object`,`array`,`null`]);function normalizeSchemaType(e){let n=e.type;if(typeof n==`string`&&!VALID_JSON_SCHEMA_TYPES.has(n))delete e.type;else if(isArray(n)){let r=n.filter(e=>typeof e==`string`&&VALID_JSON_SCHEMA_TYPES.has(e));r.length===0?delete e.type:e.type=r}}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 resolveRef(t,n){if(!n.startsWith(`#/`))return;let r=n.slice(2).split(`/`).map(e=>e.replace(/~1/g,`/`).replace(/~0/g,`~`)),i=t;for(let t of r){if(!isObject(i))return;i=i[t]}return i}function isArray(e){return Array.isArray(e)}export{buildInputSchema,deref,derefSchema,isArray};