UNPKG

jodit-pro

Version:

PRO Version of Jodit Editor

2 lines (1 loc) 2.7 kB
var h=Object.defineProperty;var m=(l,e)=>h(l,"name",{value:e,configurable:!0});import{BUILT_IN_TOOLS as p}from"../tools/index.js";const u=class u{constructor(e){this.jodit=e,this.tools=new Map,this.registerBuiltInTools(e.o.aiAssistantPro.enabledTools||[]),this.registerCustomTools(e.o.aiAssistantPro.customTools||[])}registerBuiltInTools(e){e.forEach(r=>{const a=p[r];a&&this.tools.set(r,a)})}registerCustomTools(e){e.forEach(r=>{this.validateToolDefinition(r),this.tools.set(r.name,r)})}validateToolDefinition(e){if(!e.name||typeof e.name!="string")throw new Error("Tool must have a valid name");if(!e.description||typeof e.description!="string")throw new Error(`Tool "${e.name}" must have a description`);if(!Array.isArray(e.parameters))throw new Error(`Tool "${e.name}" must have a parameters array`);if(typeof e.execute!="function")throw new Error(`Tool "${e.name}" must have an execute function`);e.parameters.forEach(r=>{if(!r.name||typeof r.name!="string")throw new Error(`Tool "${e.name}" has a parameter without a valid name`);if(!r.type)throw new Error(`Tool "${e.name}" parameter "${r.name}" must have a type`);if(typeof r.required!="boolean")throw new Error(`Tool "${e.name}" parameter "${r.name}" must specify if it's required`)})}getAllTools(){return Array.from(this.tools.values())}getTool(e){return this.tools.get(e)}hasTool(e){return this.tools.has(e)}getToolNames(){return Array.from(this.tools.keys())}async executeTool(e,r,a){const s=this.getTool(e);if(!s)throw new Error(`Tool "${e}" not found`);const t=this.applyDefaults(s,r);this.validateArguments(s,t);try{return await s.execute(this.jodit,t,a)}catch(o){throw o?.name==="AbortError"||a.aborted?new Error("Tool execution was aborted"):o}}validateArguments(e,r){const a=Object.keys(r),s=e.parameters.filter(t=>t.required).map(t=>t.name);for(const t of s)if(!a.includes(t))throw new Error(`Tool "${e.name}" requires parameter "${t}"`);for(const[t,o]of Object.entries(r)){const n=e.parameters.find(c=>c.name===t);if(!n){this.jodit.o.aiAssistantPro.debug&&console.warn(`Tool "${e.name}" received unknown parameter "${t}"`);continue}const i=Array.isArray(o)?"array":typeof o=="object"&&o!=null?"object":typeof o;if(n.type!==i&&!(n.type==="number"&&i==="string"&&!isNaN(Number(o))))throw new Error(`Tool "${e.name}" parameter "${t}" expects type "${n.type}" but got "${i}"`);if(n.enum&&n.enum.length>0&&!n.enum.includes(o))throw new Error(`Tool "${e.name}" parameter "${t}" must be one of: ${n.enum.join(", ")}`)}}applyDefaults(e,r){const a={...r};for(const s of e.parameters)a[s.name]===void 0&&s.default!==void 0&&(a[s.name]=s.default);return a}destruct(){this.tools.clear()}};m(u,"ToolRegistry");let f=u;export{f as ToolRegistry};