@asaidimu/anansi 4.0.1 → 4.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (3) hide show
  1. package/index.cjs +1 -1
  2. package/index.js +1 -1
  3. package/package.json +1 -1
package/index.cjs CHANGED
@@ -1,4 +1,4 @@
1
- "use strict";var tt=Object.create;var Z=Object.defineProperty;var nt=Object.getOwnPropertyDescriptor;var it=Object.getOwnPropertyNames;var st=Object.getPrototypeOf,at=Object.prototype.hasOwnProperty;var rt=(t,e)=>{for(var n in e)Z(t,n,{get:e[n],enumerable:!0})},Ie=(t,e,n,i)=>{if(e&&typeof e=="object"||typeof e=="function")for(let a of it(e))!at.call(t,a)&&a!==n&&Z(t,a,{get:()=>e[a],enumerable:!(i=nt(e,a))||i.enumerable});return t};var K=(t,e,n)=>(n=t!=null?tt(st(t)):{},Ie(e||!t||!t.__esModule?Z(n,"default",{value:t,enumerable:!0}):n,t)),ot=t=>Ie(Z({},"__esModule",{value:!0}),t);var Vt={};rt(Vt,{JsonPatchError:()=>M,MigrationEngine:()=>xe,MigrationError:()=>A,MigrationErrorCode:()=>Be,SchemaRegistry:()=>Y,applyPatch:()=>ie,calculateNextVersion:()=>Te,compareSemanticVersions:()=>j,createGitSchemaRegistry:()=>Ot,createPatch:()=>ut,createSchemaMigrationHelper:()=>Ke,createStandardSchemaValidator:()=>Oe,deepMerge:()=>ye,docgen:()=>Nt,extractInputFieldGroups:()=>Ft,formResolver:()=>ht,generateSHA256Hash:()=>L,normalizePath:()=>Fe,schemaChangeToPatch:()=>he,schemaDefaults:()=>Pt,schemaToTypes:()=>jt,serializeParams:()=>U,sortSemanticVars:()=>At,validate:()=>wt,validateMigration:()=>ve,validateSchemaChange:()=>Ee,validateSchemaDefinition:()=>z});module.exports=ot(Vt);var It=require("@asaidimu/events");var Rt=require("@asaidimu/events"),re=require("@asaidimu/query");var M=class extends Error{constructor(n,i){super(n);this.operation=i;this.name="JsonPatchError"}};function te(t){let e=Fe(t);return e===""?[]:e.substring(1).split("/").map(ct)}function Fe(t){return t===""||t==="/"?"":t.startsWith("/")?"/"+t.substring(1).split("/").map(ee).join("/"):"/"+t.split(".").map(ee).join("/")}function ee(t){return t.replace(/~/g,"~0").replace(/\//g,"~1")}function ct(t){return t.replace(/~1/g,"/").replace(/~0/g,"~")}var N=new Map;function ne(t,e){let n=t;for(let i of e){if(n===null||typeof n!="object")throw new M(`Invalid path - parent not found at ${i}`);if(Array.isArray(n)){let a=i==="-"?n.length:parseInt(i);if(isNaN(a)||a<0||a>n.length)throw new M(`Invalid array index: ${i}`);n=n[a]}else{if(!n.hasOwnProperty(i))throw new M(`Property ${i} not found`);n=n[i]}}return n}function fe(t,e){let n=N.get(e)||te(e);if(N.set(e,n),n.length===0)return t;let i=ne(t,n.slice(0,-1)),a=n[n.length-1];if(Array.isArray(i)){let r=parseInt(a);if(isNaN(r)||r<0||r>=i.length)throw new M(`Invalid array index: ${a}`);return i[r]}return i[a]}function dt(t,e,n){let i=N.get(e)||te(e);N.set(e,i);let a=ne(t,i.slice(0,-1)),r=i[i.length-1];return Array.isArray(a)?a.splice(0,a.length,...a.filter(s=>s!==n)):a[r]===n&&delete a[r],t}function X(t,e,n){let i=N.get(e)||te(e);if(N.set(e,i),i.length===0)return n;let a=i.slice(0,-1),r=i[i.length-1],s=ne(t,a);if(Array.isArray(s))if(r==="-")s.push(n);else{let o=parseInt(r);if(o<0||o>s.length)throw new M(`Invalid array index: ${r}`);s.splice(o,0,n)}else s[r]=n;return t}function le(t,e){let n=N.get(e)||te(e);if(N.set(e,n),n.length===0)return;let i=ne(t,n.slice(0,-1)),a=n[n.length-1];if(Array.isArray(i)){let r=parseInt(a);i.splice(r,1)}else delete i[a];return t}function ie(t,e){let n=JSON.parse(JSON.stringify(t));for(let i of e)try{switch(i.op){case"add":n=X(n,i.path,i.value);break;case"remove":n=le(n,i.path);break;case"removeValue":n=dt(n,i.path,i.value);break;case"replace":n=X(le(n,i.path),i.path,i.value);break;case"copy":{let a=fe(n,i.from);n=X(n,i.path,JSON.parse(JSON.stringify(a)));break}case"move":{let a=fe(n,i.from);n=X(n,i.path,a),n=le(n,i.from);break}case"test":{let a=fe(n,i.path);if(JSON.stringify(a)!==JSON.stringify(i.value))throw new M("Test operation failed");break}default:throw new M(`Unsupported operation: ${i.op}`)}}catch(a){throw a instanceof M&&(a.operation=i),a}return n}function ut(t,e){let n=[];return me(t,e,"",n),n}function me(t,e,n,i){if(t!==e){if(typeof t!=typeof e||Array.isArray(t)!==Array.isArray(e)){i.push({op:"replace",path:n,value:e});return}typeof t=="object"&&t!==null?Array.isArray(t)?ft(t,e,n,i):lt(t,e,n,i):t!==e&&i.push({op:"replace",path:n,value:e})}}function ft(t,e,n,i){let a=Math.max(t.length,e.length);for(let r=0;r<a;r++){let s=`${n}/${r}`;r>=t.length?i.push({op:"add",path:`${n}/-`,value:e[r]}):r>=e.length?i.push({op:"remove",path:s}):me(t[r],e[r],s,i)}}function lt(t,e,n,i){let a=new Set,r=Object.keys(t),s=Object.keys(e);for(let o of r){let c=ee(o),u=n?`${n}/${c}`:`/${c}`;e.hasOwnProperty(o)?(me(t[o],e[o],u,i),a.add(o)):i.push({op:"remove",path:u})}for(let o of s)if(!a.has(o)){let c=ee(o),u=n?`${n}/${c}`:`/${c}`;i.push({op:"add",path:u,value:e[o]})}}function he(t,e){let n=[];switch(t.type){case"addField":n.push({op:"add",path:`/fields/${t.id}`,value:t.definition});break;case"removeField":n.push({op:"remove",path:`/fields/${t.id}`});break;case"modifyField":{let i=`/fields/${t.id}`;Object.entries(t.changes).forEach(([a,r])=>{typeof r=="object"&&r!==null&&!Array.isArray(r)?n.push({op:"replace",path:`${i}/${a}`,value:r}):n.push({op:"replace",path:`${i}/${a}`,value:r})});break}case"deprecateField":n.push({op:"add",path:`/fields/${t.id}/deprecated`,value:!0});break;case"addIndex":e.indexes||n.push({op:"add",path:"/indexes",value:[]}),n.push({op:"add",path:"/indexes/-",value:t.definition});break;case"removeIndex":{let i=e.indexes?.findIndex(a=>a.name===t.name);i!==void 0&&i>=0&&n.push({op:"remove",path:`/indexes/${i}`});break}case"modifyIndex":{let i=e.indexes?.findIndex(a=>a.name===t.name);i!==void 0&&i>=0&&Object.entries(t.changes).forEach(([a,r])=>{n.push({op:"replace",path:`/indexes/${i}/${a}`,value:r})});break}case"addConstraint":e.constraints||n.push({op:"add",path:"/constraints",value:[]}),Array.isArray(t.constraint)?t.constraint.forEach(i=>{n.push({op:"add",path:"/constraints/-",value:i})}):n.push({op:"add",path:"/constraints/-",value:t.constraint});break;case"removeConstraint":{let i=e.constraints?.findIndex(a=>Array.isArray(a)?a.some(r=>r.name===t.name):a.name===t.name);i!==void 0&&i>=0&&n.push({op:"remove",path:`/constraints/${i}`});break}case"modifyConstraint":{let i=mt(e,t.name);i&&Object.entries(t.changes).forEach(([a,r])=>{n.push({op:"replace",path:`${i}/${a}`,value:r})});break}}return n}function mt(t,e){if(!t.constraints)return null;for(let n=0;n<t.constraints.length;n++){let i=t.constraints[n];if(i.name===e)return`/constraints/${n}`;if(Pe(i)){let a=Me(i.rules,e);if(a)return`/constraints/${n}${a}`}}return null}function Pe(t){return t&&"operator"in t&&"rules"in t}function Me(t,e){for(let n=0;n<t.length;n++){let i=t[n];if("name"in i&&i.name===e)return`/rules/${n}`;if(Pe(i)){let a=Me(i.rules,e);if(a)return`/rules/${n}${a}`}}return null}function ye(t,e){let n={...t};return pe(t)&&pe(e)&&Object.keys(e).forEach(i=>{pe(e[i])?i in t?n[i]=ye(t[i],e[i]):Object.assign(n,{[i]:e[i]}):Object.assign(n,{[i]:e[i]})}),n}function pe(t){return t&&typeof t=="object"&&!Array.isArray(t)}var ge=new Map;function U(t){return t instanceof RegExp?t.toString().slice(1,-1):JSON.stringify(t)}function Oe(t,e){let n=o=>({value:o}),i=o=>({issues:o}),a=(o,c,u,f)=>{switch(c){case"string":return typeof o!="string"?[{message:`Expected string, got ${typeof o}`,path:u}]:[];case"number":return typeof o!="number"||isNaN(o)?[{message:`Expected number, got ${typeof o}`,path:u}]:[];case"boolean":return typeof o!="boolean"?[{message:`Expected boolean, got ${typeof o}`,path:u}]:[];case"array":return Array.isArray(o)?[]:[{message:`Expected array, got ${typeof o}`,path:u}];case"set":return!Array.isArray(o)||new Set(o).size!==o.length?[{message:`Expected unique array, got ${typeof o}`,path:u}]:[];case"enum":return f?.values?f.values.includes(o)?[]:[{message:`Expected one of ${JSON.stringify(f.values)}, got ${o}`,path:u}]:[{message:"Enum type requires 'values' definition",path:u}];case"object":return typeof o!="object"||o===null||Array.isArray(o)?[{message:`Expected object, got ${typeof o}`,path:u}]:[];case"record":return typeof o!="object"||o===null||Array.isArray(o)?[{message:`Expected record (object), got ${typeof o}`,path:u}]:[];case"union":return typeof o!="object"||o===null||Array.isArray(o)?[{message:`Expected union (object), got ${typeof o}`,path:u}]:[];case"dynamic":return console.warn("Deprecated: 'dynamic' type used. Use 'record' instead."),typeof o!="object"||o===null||Array.isArray(o)?[{message:`Expected record (object), got ${typeof o}`,path:u}]:[];default:return[{message:`Unknown type '${c}'`,path:u}]}};function r(o,c,u,f,b){let p=[],v=o.rules.map((m,g)=>{let y=[...f,`rules[${g}]`],$=`${m.name}@${y.join(".")}`;if("rules"in m){if(b.has($))return!0;b.add($);let h=r(m,c,u,y,b);return p.push(...h),b.delete($),h.length===0}else{let h=u[m.predicate];if(!h)return p.push({message:`Predicate '${m.predicate}' not found`,path:y}),!1;let E=`${m.predicate}:${JSON.stringify(m.parameters)}:${JSON.stringify(c[m.field])}`;if(ge.has(E)){let d=ge.get(E);return d||p.push({message:m.errorMessage||`Constraint '${m.name}' failed with params ${U(m.parameters)}`,path:y}),d}let S=h({data:c,field:m.field,arguments:m.parameters});return ge.set(E,S),S||p.push({message:m.errorMessage||`Constraint '${m.name}' failed with params ${U(m.parameters)}`,path:y}),S}});return(()=>{switch(o.operator){case"and":return v.every(m=>m);case"or":return v.some(m=>m);case"not":return!v.every(m=>m);case"nor":return!v.some(m=>m);case"xor":return v.filter(m=>m).length===1}})()||p.push({message:`Constraint group '${o.name}' failed`,path:f}),p}function s(o,c,u,f,b,p=new Set){let v=[];if("type"in c&&!("fields"in c)){let g=f.length>0?o[f[f.length-1]]:o;return v.push(...a(g,c.type,f,{values:c.values})),c.constraints&&c.constraints.forEach((y,$)=>{if("rules"in y)v.push(...r(y,{value:g},u,[...f,`constraints[${$}]`],p));else{let h=u[y.predicate];h?h({data:{value:g},field:"value",arguments:y.parameters})||v.push({message:y.errorMessage||`Constraint '${y.name}' failed with params ${U(y.parameters)}`,path:[...f,`constraints[${$}]`]}):v.push({message:`Predicate '${y.predicate}' not found`,path:[...f,`constraints[${$}]`]})}}),v}let C={};if("concrete"in c)if(c.concrete===!0||!Array.isArray(c.fields))C=c.fields;else{let g=c.fields,y=g.find(h=>!h.when);y&&Object.assign(C,y.fields);let $=g.find(h=>h.when&&o[h.when.field]!==void 0&&o[h.when.field]===h.when.value);if($)Object.assign(C,$.fields);else if(!y)return v.push({message:"No matching field set found for discriminated schema",path:f}),v}else C=c.fields;let m=new Set(Object.values(C).map(g=>g.name));Object.entries(C).forEach(([g,y])=>{let $=[...f,y.name],h=Object.hasOwnProperty.call(o,y.name)?o[y.name]:y.default!==void 0?y.default:void 0;y.required&&h==null&&v.push({message:`Field '${y.name}' is required`,path:$});let E=y.schema||y.nestedSchema;if(y.type==="object"&&E&&!Array.isArray(E)){let S=b[E.id];if(S)if(p.has(E.id))v.push({message:`Circular reference detected at '${E.id}'`,path:$});else{p.add(E.id);let d=h&&typeof h=="object"&&!Array.isArray(h)?h:{};v.push(...s(d,S,u,$,b,p)),E.constraints?.forEach((l,w)=>{if("rules"in l)v.push(...r(l,d,u,[...$,`constraints[${w}]`],p));else{let T=u[l.predicate];T?T({data:d,field:void 0,arguments:l.parameters})||v.push({message:l.errorMessage||`Constraint '${l.name}' failed with params ${U(l.parameters)}`,path:[...$,`constraints[${w}]`]}):v.push({message:`Predicate '${l.predicate}' not found`,path:[...$,`constraints[${w}]`]})}}),p.delete(E.id)}else v.push({message:`Nested schema '${E.id}' not found`,path:$})}if(y.type==="union"&&E&&Array.isArray(E)){let S=!1,d=[];E.forEach((l,w)=>{let T=b[l.id];if(T)if(p.has(l.id))d.push({message:`Circular reference detected at '${l.id}'`,path:[...$,w.toString()]});else{p.add(l.id);let D=h&&typeof h=="object"&&!Array.isArray(h)?h:{},k=s(D,T,u,$,b,new Set(p));k.length===0&&h!==void 0?(S=!0,l.constraints?.forEach((R,F)=>{if("rules"in R){let P=r(R,D,u,[...$,`constraints[${F}]`],p);P.length>0&&(S=!1,d.push(...P))}else{let P=u[R.predicate];P&&!P({data:D,field:void 0,arguments:R.parameters})&&(S=!1,d.push({message:R.errorMessage||`Constraint '${R.name}' failed`,path:[...$,`constraints[${F}]`]}))}})):h===void 0&&d.push(...k.filter(R=>R.message.includes("is required"))),p.delete(l.id)}else d.push({message:`Nested schema '${l.id}' not found`,path:[...$,w.toString()]})}),!S&&h!==void 0?(v.push({message:"Value does not match any union schema",path:$}),v.push(...d)):h===void 0&&v.push(...d)}h!==void 0&&(v.push(...a(h,y.type,$,{values:y.values})),(y.type==="array"||y.type==="set")&&Array.isArray(h)&&(y.constraints?.forEach((S,d)=>{let l=u[S.predicate];l&&!l({data:{[y.name]:h},field:y.name,arguments:S.parameters})&&v.push({message:S.errorMessage||`Constraint '${S.name}' failed for field '${y.name}'`,path:[...$,`constraints[${d}]`]})}),y.itemsType&&h.forEach((S,d)=>v.push(...a(S,y.itemsType,[...$,d.toString()]))),E&&!Array.isArray(E)&&(b[E.id]?h.forEach((S,d)=>{typeof S=="object"&&S!==null&&(p.has(E.id)?v.push({message:`Circular reference detected at '${E.id}'`,path:[...$,d.toString()]}):(p.add(E.id),v.push(...s(S,b[E.id],u,[...$,d.toString()],b,p)),p.delete(E.id)))}):v.push({message:`Nested schema '${E.id}' not found`,path:$}))),y.constraints?.forEach((S,d)=>{if("rules"in S)v.push(...r(S,o,u,[...$,`constraints[${d}]`],p));else{let l=u[S.predicate];l?l({data:o,field:y.name,arguments:S.parameters})||v.push({message:S.errorMessage||`Constraint '${S.name}' failed for field '${y.name}' with params ${U(S.parameters)}`,path:[...$,`constraints[${d}]`]}):v.push({message:`Predicate '${S.predicate}' not found`,path:[...$,`constraints[${d}]`]})}}))});for(let g in o)Object.hasOwnProperty.call(o,g)&&!m.has(g)&&v.push({message:`Unexpected field '${g}'`,path:[...f,g]});return c.constraints?.forEach((g,y)=>{if("rules"in g)v.push(...r(g,o,u,[...f,`constraints[${y}]`],p));else{let $=u[g.predicate];$?$({data:o,field:g.field,arguments:g.parameters})||v.push({message:g.errorMessage||`Constraint '${g.name}' failed with params ${U(g.parameters)}`,path:[...f,`constraints[${y}]`]}):v.push({message:`Predicate '${g.predicate}' not found`,path:[...f,`constraints[${y}]`]})}}),v}return t.version!=="1.0.0"&&console.warn(`Schema version '${t.version}' may require migrations. Validator assumes version 1.0.0.`),{"~standard":{version:1,vendor:"@asaidimu/anansi",validate:o=>{if(typeof o!="object"||o===null)return i([{message:"Input must be an object",path:[]}]);let c=o,u=s(c,t,e,[],t.nestedSchemas||{});return u.length>0?i(u):n(c)},types:{input:{},output:{}}}}}function ht(t){return async e=>{let n=t.validate(e);if(n instanceof Promise&&(n=await n),"value"in n)return{values:n.value,errors:{}};let i={};return n.issues.forEach(a=>{if(!a.path)return;let r=a.path.filter(o=>!o.includes("constraints")),s=i;for(let o=0;o<r.length;o++){let c=r[o];o===r.length-1?s[c]={type:"validation",message:a.message}:(s[c]=s[c]||{},s=s[c])}}),{values:{},errors:i}}}var H=class extends Error{constructor(n,i){super(n);this.errors=i;this.name="SchemaValidationError"}};var we=t=>({value:t}),J=t=>({issues:t}),x=(t,e,n=!0)=>t===void 0&&!n?[]:typeof t!="string"||t.trim()===""?[{message:"Must be a non-empty string",path:[e]}]:[],se=(t,e)=>{let n=["string","number","boolean","array","set","enum","object","record","union","dynamic"];return typeof t!="string"||!n.includes(t)?[{message:`Must be one of ${n.join(", ")}`,path:[e]}]:t==="dynamic"?[{message:"Field type 'dynamic' is deprecated; use 'record' instead",path:[e]}]:[]},pt=(t,e)=>{let n=["normal","unique","btree","hash","spatial","fulltext","gi","expression","composite"];return typeof t!="string"||!n.includes(t)?[{message:`Must be one of ${n.join(", ")}`,path:[e]}]:[]},je=(t,e)=>{let n=["and","or","not","nor","xor"];return typeof t!="string"||!n.includes(t)?[{message:`Must be one of ${n.join(", ")}`,path:[e]}]:[]},W=(t,e,n=!1)=>t===void 0&&!n?[]:typeof t!="boolean"?[{message:"Must be a boolean",path:[e]}]:[],yt=(t,e,n)=>t===void 0?[]:[],Se=(t,e,n)=>{let i=[],a=["predicate","name"],r=["type","predicate","field","parameters","name","description","errorMessage"],s=t;return a.forEach(o=>{s[o]===void 0&&i.push({message:`${o} is required`,path:[`${n}.${o}`]})}),Object.keys(s).forEach(o=>{r.includes(o)||i.push({message:`Unknown property ${o}`,path:[`${n}.${o}`]})}),i.push(...x(t.name,`${n}.name`)),i.push(...x(t.predicate,`${n}.predicate`)),t.field!==void 0&&typeof t.field!="string"&&i.push({message:"Field must be a string",path:[`${n}.field`]}),t.parameters!==void 0&&i.push(...yt(t.parameters,e,`${n}.parameters`)),i.push(...x(t.description,`${n}.description`,!1)),i.push(...x(t.errorMessage,`${n}.errorMessage`,!1)),i},be=(t,e,n)=>{let i=[],a=["name","operator","rules"],r=a,s=t;return a.forEach(o=>{s[o]===void 0&&i.push({message:`${o} is required`,path:[`${n}.${o}`]})}),Object.keys(s).forEach(o=>{r.includes(o)||i.push({message:`Unknown property ${o}`,path:[`${n}.${o}`]})}),i.push(...x(t.name,`${n}.name`)),i.push(...je(t.operator,`${n}.operator`)),!Array.isArray(t.rules)||t.rules.length===0?i.push({message:"Rules must be a non-empty array",path:[`${n}.rules`]}):t.rules.forEach((o,c)=>{"rules"in o?i.push(...be(o,e,`${n}.rules[${c}]`)):i.push(...Se(o,e,`${n}.rules[${c}]`))}),i},V=(t,e,n)=>{if(!Array.isArray(t))return[{message:"Must be an array",path:[n]}];let i=[];return t.forEach((a,r)=>{"rules"in a?i.push(...be(a,e,`${n}[${r}]`)):i.push(...Se(a,e,`${n}[${r}]`))}),i},Ne=(t,e)=>{let n=[],i=["operator","field"],a=["operator","field","value","conditions"],r=t;return i.forEach(s=>{r[s]===void 0&&n.push({message:`${s} is required`,path:[`${e}.${s}`]})}),Object.keys(r).forEach(s=>{a.includes(s)||n.push({message:`Unknown property ${s}`,path:[`${e}.${s}`]})}),n.push(...je(t.operator,`${e}.operator`)),n.push(...x(t.field,`${e}.field`)),t.conditions!==void 0&&(Array.isArray(t.conditions)?t.conditions.forEach((s,o)=>n.push(...Ne(s,`${e}.conditions[${o}]`))):n.push({message:"Conditions must be an array",path:[`${e}.conditions`]})),n},Ve=(t,e)=>{let n=[],i=["fields","type","name"],a=["fields","type","unique","partial","description","order","name"],r=t;return i.forEach(s=>{r[s]===void 0&&n.push({message:`${s} is required`,path:[`${e}.${s}`]})}),Object.keys(r).forEach(s=>{a.includes(s)||n.push({message:`Unknown property ${s}`,path:[`${e}.${s}`]})}),n.push(...x(t.name,`${e}.name`)),n.push(...pt(t.type,`${e}.type`)),(!Array.isArray(t.fields)||t.fields.length===0||!t.fields.every(s=>typeof s=="string"))&&n.push({message:"Fields must be a non-empty array of strings",path:[`${e}.fields`]}),n.push(...W(t.unique,`${e}.unique`,!1)),t.partial&&n.push(...Ne(t.partial,`${e}.partial`)),n.push(...x(t.description,`${e}.description`,!1)),t.order!==void 0&&!["asc","desc"].includes(t.order)&&n.push({message:"Order must be 'asc' or 'desc'",path:[`${e}.order`]}),n},G=(t,e)=>{if(t===void 0)return[];if(!Array.isArray(t))return[{message:"Must be an array",path:[e]}];let n=[];return t.forEach((i,a)=>n.push(...Ve(i,`${e}[${a}]`))),n},qe=(t,e,n,i,a)=>{let r=[];return t===void 0?[]:(n==="union"&&Array.isArray(t)?(t.length===0&&r.push({message:"Schema array must not be empty for union type",path:[e]}),t.forEach((s,o)=>{let c=`${e}[${o}]`;r.push(...x(s.id,`${c}.id`)),i.includes(s.id)||r.push({message:`Schema ID '${s.id}' must match a nestedSchemas key`,path:[`${c}.id`]}),s.constraints&&r.push(...V(s.constraints,"dynamic",`${c}.constraints`)),s.indexes&&r.push(...G(s.indexes,`${c}.indexes`))})):(n==="object"||n==="array"&&a==="object")&&!Array.isArray(t)?(r.push(...x(t.id,`${e}.id`)),i.includes(t.id)||r.push({message:`Schema ID '${t.id}' must match a nestedSchemas key`,path:[`${e}.id`]}),t.constraints&&r.push(...V(t.constraints,"dynamic",`${e}.constraints`)),t.indexes&&r.push(...G(t.indexes,`${e}.indexes`))):r.push({message:"Schema is only valid for 'object', 'union', or 'array' with itemsType 'object'",path:[e]}),r)},Ue=(t,e,n)=>{if(t===void 0)return[];switch(e){case"string":if(typeof t!="string")return[{message:"Default must be a string",path:[n]}];break;case"number":if(typeof t!="number")return[{message:"Default must be a number",path:[n]}];break;case"boolean":if(typeof t!="boolean")return[{message:"Default must be a boolean",path:[n]}];break;case"array":case"set":if(!Array.isArray(t))return[{message:"Default must be an array",path:[n]}];break;case"enum":if(!Array.isArray(t)||!t.every(i=>typeof i=="string"||typeof i=="number"))return[{message:"Default must be an array of strings or numbers",path:[n]}];break;case"object":case"record":if(typeof t!="object"||t===null)return[{message:"Default must be an object",path:[n]}];break;case"union":case"dynamic":return[]}return[]},Le=(t,e)=>t===void 0?[]:typeof t!="object"||t===null?[{message:"Hint must be an object",path:[e]}]:"input"in t&&typeof t.input!="object"?[{message:"Hint.input must be an object",path:[`${e}.input`]}]:[],ae=(t,e,n)=>{let i=[],a=["name","type"],r=["name","type","required","constraints","default","values","schema","itemsType","nestedSchema","deprecated","reference","description","unique","hint"],s=t;if(a.forEach(o=>{s[o]===void 0&&i.push({message:`${o} is required`,path:[`${e}.${o}`]})}),Object.keys(s).forEach(o=>{r.includes(o)||i.push({message:`Unknown property ${o}`,path:[`${e}.${o}`]})}),i.push(...x(t.name,`${e}.name`)),i.push(...se(t.type,`${e}.type`)),i.push(...W(t.required,`${e}.required`,!1)),t.constraints&&i.push(...V(t.constraints,t.type,`${e}.constraints`)),i.push(...Ue(t.default,t.type,`${e}.default`)),t.values!==void 0&&(t.type==="enum"?(!Array.isArray(t.values)||t.values.length===0||!t.values.every(o=>typeof o=="string"||typeof o=="number"))&&i.push({message:"Values must be a non-empty array of strings or numbers",path:[`${e}.values`]}):i.push({message:"Values is only valid for 'enum' type",path:[`${e}.values`]})),t.schema!==void 0&&i.push(...qe(t.schema,`${e}.schema`,t.type,n,t.itemsType)),t.itemsType&&i.push(...se(t.itemsType,`${e}.itemsType`)),t.nestedSchema){i.push({message:"nestedSchema is deprecated; use schema instead",path:[`${e}.nestedSchema`]});let o=["id"],c=["id","constraints","indexes"],u=t.nestedSchema;o.forEach(f=>{u[f]===void 0&&i.push({message:`${f} is required`,path:[`${e}.nestedSchema.${f}`]})}),Object.keys(u).forEach(f=>{c.includes(f)||i.push({message:`Unknown property ${f}`,path:[`${e}.nestedSchema.${f}`]})}),i.push(...x(t.nestedSchema.id,`${e}.nestedSchema.id`)),n.includes(t.nestedSchema.id)||i.push({message:`nestedSchema.id '${t.nestedSchema.id}' must match a nestedSchemas key`,path:[`${e}.nestedSchema.id`]}),t.nestedSchema.constraints&&i.push(...V(t.nestedSchema.constraints,"dynamic",`${e}.nestedSchema.constraints`)),t.nestedSchema.indexes&&i.push(...G(t.nestedSchema.indexes,`${e}.nestedSchema.indexes`))}if(i.push(...W(t.deprecated,`${e}.deprecated`,!1)),t.reference){i.push({message:"reference is deprecated",path:[`${e}.reference`]});let o=["schema","field"],c=["schema","field"],u=t.reference;o.forEach(f=>{u[f]===void 0&&i.push({message:`${f} is required`,path:[`${e}.reference.${f}`]})}),Object.keys(u).forEach(f=>{c.includes(f)||i.push({message:`Unknown property ${f}`,path:[`${e}.reference.${f}`]})}),i.push(...x(t.reference.schema,`${e}.reference.schema`)),i.push(...x(t.reference.field,`${e}.reference.field`))}return i.push(...x(t.description,`${e}.description`,!1)),i.push(...W(t.unique,`${e}.unique`,!1)),t.hint&&i.push(...Le(t.hint,`${e}.hint`)),i},_e=(t,e,n)=>{let i=[];if("type"in t&&["string","number","boolean","array","set","enum","record"].includes(t.type)){let r=["name","type"],s=["name","type","default","schema","itemsType","constraints","description","metadata"],o=t;r.forEach(c=>{o[c]===void 0&&i.push({message:`${c} is required`,path:[`${e}.${c}`]})}),Object.keys(o).forEach(c=>{s.includes(c)||i.push({message:`Unknown property ${c}`,path:[`${e}.${c}`]})}),i.push(...x(t.name,`${e}.name`)),i.push(...se(t.type,`${e}.type`)),i.push(...Ue(t.default,t.type,`${e}.default`)),t.schema&&i.push(...qe(t.schema,`${e}.schema`,t.type,n,t.itemsType)),t.itemsType&&i.push(...se(t.itemsType,`${e}.itemsType`)),t.constraints&&i.push(...V(t.constraints,t.type,`${e}.constraints`)),i.push(...x(t.description,`${e}.description`,!1)),t.metadata!==void 0&&(typeof t.metadata!="object"||t.metadata===null)&&i.push({message:"Metadata must be an object",path:[`${e}.metadata`]})}else{let r=["name"],s=["name","description","concrete","fields","indexes","constraints","metadata"],o=t;r.forEach(c=>{o[c]===void 0&&i.push({message:`${c} is required`,path:[`${e}.${c}`]})}),Object.keys(o).forEach(c=>{s.includes(c)||i.push({message:`Unknown property ${c}`,path:[`${e}.${c}`]})}),i.push(...x(t.name,`${e}.name`)),i.push(...W(o.concrete,`${e}.concrete`,!1)),o.concrete&&Array.isArray(o.fields)&&i.push({message:"Fields must be an object when concrete is true",path:[`${e}.fields`]}),Array.isArray(o.fields)?(o.fields.length===0&&i.push({message:"Fields array must not be empty",path:[`${e}.fields`]}),o.fields.forEach((c,u)=>{let f=`${e}.fields[${u}]`;if(typeof c!="object"||c===null||!("fields"in c))i.push({message:"Each variant must have a 'fields' property",path:[f]});else{let b=c.fields;typeof b!="object"||b===null?i.push({message:"Fields must be a non-empty object",path:[`${f}.fields`]}):Object.entries(b).forEach(([p,v])=>{i.push(...ae(v,`${f}.fields.${p}`,n))}),c.when!==void 0&&(typeof c.when!="object"||c.when===null?i.push({message:"When must be an object",path:[`${f}.when`]}):i.push(...x(c.when.field,`${f}.when.field`)))}})):o.fields!==void 0&&(typeof o.fields!="object"||o.fields===null?i.push({message:"Fields must be a non-empty object",path:[`${e}.fields`]}):Object.entries(o.fields).forEach(([c,u])=>{i.push(...ae(u,`${e}.fields.${c}`,n))})),i.push(...x(t.description,`${e}.description`,!1)),t.indexes&&i.push(...G(t.indexes,`${e}.indexes`)),t.constraints&&i.push(...V(o.constraints,"dynamic",`${e}.constraints`)),t.metadata!==void 0&&(typeof t.metadata!="object"||t.metadata===null)&&i.push({message:"Metadata must be an object",path:[`${e}.metadata`]})}return i},gt=t=>{if(typeof t!="object"||t===null)return J([{message:"Schema must be an object",path:[]}]);let e=t,n=[],i=["name","version","fields"],a=["name","version","description","fields","nestedSchemas","indexes","constraints","metadata","dependencies","migrations","mock","hint"],r=e;if(i.forEach(s=>{r[s]===void 0&&n.push({message:`${s} is required`,path:[s]})}),Object.keys(r).forEach(s=>{a.includes(s)||n.push({message:`Unknown property ${s}`,path:[s]})}),n.push(...x(e.name,"name")),n.push(...x(e.version,"version")),typeof e.fields!="object"||e.fields===null)n.push({message:"Fields must be a non-empty object",path:["fields"]});else{let s=Object.keys(e.nestedSchemas||{});Object.entries(e.fields).forEach(([o,c])=>{n.push(...ae(c,`fields.${o}`,s))})}if(e.nestedSchemas!==void 0)if(typeof e.nestedSchemas!="object"||e.nestedSchemas===null)n.push({message:"NestedSchemas must be an object",path:["nestedSchemas"]});else{let s=Object.keys(e.nestedSchemas);Object.entries(e.nestedSchemas).forEach(([o,c])=>n.push(..._e(c,`nestedSchemas.${o}`,s)))}return n.push(...x(e.description,"description",!1)),e.indexes&&n.push(...G(e.indexes,"indexes")),e.constraints&&n.push(...V(e.constraints,"dynamic","constraints")),e.metadata!==void 0&&(typeof e.metadata!="object"||e.metadata===null)&&n.push({message:"Metadata must be an object",path:["metadata"]}),e.dependencies!==void 0&&(n.push({message:"dependencies is deprecated; use DomainModel instead",path:["dependencies"]}),(!Array.isArray(e.dependencies)||!e.dependencies.every(s=>typeof s=="string"))&&n.push({message:"Dependencies must be an array of strings",path:["dependencies"]})),e.migrations!==void 0&&(Array.isArray(e.migrations)?e.migrations.forEach((s,o)=>n.push(...He(s,`migrations[${o}]`))):n.push({message:"Migrations must be an array",path:["migrations"]})),e.mock!==void 0&&typeof e.mock!="function"&&n.push({message:"Mock must be a function",path:["mock"]}),e.hint&&n.push(...Le(e.hint,"hint")),n.length>0?J(n):we(e)},$e=(t,e)=>{let n=[];switch(t.type||n.push({message:"type is required",path:[`${e}.type`]}),t.type){case"modifyProperty":{let i=["type","id","changes"],a=i,r=t;i.forEach(s=>{r[s]===void 0&&n.push({message:`${s} is required`,path:[`${e}.${s}`]})}),Object.keys(r).forEach(s=>{a.includes(s)||n.push({message:`Unknown property ${s}`,path:[`${e}.${s}`]})}),n.push(...x(t.id,`${e}.id`)),(t.changes===void 0||typeof t.changes!="object")&&n.push({message:"Changes must be an object",path:[`${e}.changes`]});break}case"addField":{let i=["type","id","definition"],a=i,r=t;i.forEach(s=>{r[s]===void 0&&n.push({message:`${s} is required`,path:[`${e}.${s}`]})}),Object.keys(r).forEach(s=>{a.includes(s)||n.push({message:`Unknown property ${s}`,path:[`${e}.${s}`]})}),n.push(...x(t.id,`${e}.id`)),n.push(...ae(t.definition,`${e}.definition`,[]));break}case"removeField":case"deprecateField":{let i=["type","id"],a=i,r=t;i.forEach(s=>{r[s]===void 0&&n.push({message:`${s} is required`,path:[`${e}.${s}`]})}),Object.keys(r).forEach(s=>{a.includes(s)||n.push({message:`Unknown property ${s}`,path:[`${e}.${s}`]})}),n.push(...x(t.id,`${e}.id`));break}case"modifyField":{let i=["type","id","changes"],a=["type","id","changes","nestedSchemaChanges"],r=t;if(i.forEach(s=>{r[s]===void 0&&n.push({message:`${s} is required`,path:[`${e}.${s}`]})}),Object.keys(r).forEach(s=>{a.includes(s)||n.push({message:`Unknown property ${s}`,path:[`${e}.${s}`]})}),n.push(...x(t.id,`${e}.id`)),typeof t.changes!="object"&&n.push({message:"Changes must be an object",path:[`${e}.changes`]}),t.nestedSchemaChanges){let s=["id","constraints","indexes"],o=t.nestedSchemaChanges;Object.keys(o).forEach(c=>{s.includes(c)||n.push({message:`Unknown property ${c}`,path:[`${e}.nestedSchemaChanges.${c}`]})}),n.push(...x(o.id,`${e}.nestedSchemaChanges.id`,!1)),o.constraints&&n.push(...V(o.constraints,"dynamic",`${e}.nestedSchemaChanges.constraints`)),o.indexes&&n.push(...G(o.indexes,`${e}.nestedSchemaChanges.indexes`))}break}case"addIndex":{let i=["type","definition"],a=i,r=t;i.forEach(s=>{r[s]===void 0&&n.push({message:`${s} is required`,path:[`${e}.${s}`]})}),Object.keys(r).forEach(s=>{a.includes(s)||n.push({message:`Unknown property ${s}`,path:[`${e}.${s}`]})}),n.push(...Ve(t.definition,`${e}.definition`));break}case"removeIndex":{let i=["type","name"],a=i,r=t;i.forEach(s=>{r[s]===void 0&&n.push({message:`${s} is required`,path:[`${e}.${s}`]})}),Object.keys(r).forEach(s=>{a.includes(s)||n.push({message:`Unknown property ${s}`,path:[`${e}.${s}`]})}),n.push(...x(t.name,`${e}.name`));break}case"modifyIndex":{let i=["type","name","changes"],a=i,r=t;i.forEach(s=>{r[s]===void 0&&n.push({message:`${s} is required`,path:[`${e}.${s}`]})}),Object.keys(r).forEach(s=>{a.includes(s)||n.push({message:`Unknown property ${s}`,path:[`${e}.${s}`]})}),n.push(...x(t.name,`${e}.name`)),typeof t.changes!="object"&&n.push({message:"Changes must be an object",path:[`${e}.changes`]});break}case"addConstraint":{let i=["type","constraint"],a=i,r=t;i.forEach(s=>{r[s]===void 0&&n.push({message:`${s} is required`,path:[`${e}.${s}`]})}),Object.keys(r).forEach(s=>{a.includes(s)||n.push({message:`Unknown property ${s}`,path:[`${e}.${s}`]})}),"rules"in t.constraint?n.push(...be(t.constraint,"dynamic",`${e}.constraint`)):n.push(...Se(t.constraint,"dynamic",`${e}.constraint`));break}case"removeConstraint":{let i=["type","name"],a=i,r=t;i.forEach(s=>{r[s]===void 0&&n.push({message:`${s} is required`,path:[`${e}.${s}`]})}),Object.keys(r).forEach(s=>{a.includes(s)||n.push({message:`Unknown property ${s}`,path:[`${e}.${s}`]})}),n.push(...x(t.name,`${e}.name`));break}case"modifyConstraint":{let i=["type","name","changes"],a=i,r=t;i.forEach(s=>{r[s]===void 0&&n.push({message:`${s} is required`,path:[`${e}.${s}`]})}),Object.keys(r).forEach(s=>{a.includes(s)||n.push({message:`Unknown property ${s}`,path:[`${e}.${s}`]})}),n.push(...x(t.name,`${e}.name`)),typeof t.changes!="object"&&n.push({message:"Changes must be an object",path:[`${e}.changes`]});break}case"addNestedSchema":{let i=["type","id","definition"],a=i,r=t;i.forEach(s=>{r[s]===void 0&&n.push({message:`${s} is required`,path:[`${e}.${s}`]})}),Object.keys(r).forEach(s=>{a.includes(s)||n.push({message:`Unknown property ${s}`,path:[`${e}.${s}`]})}),n.push(...x(t.id,`${e}.id`)),n.push(..._e(t.definition,`${e}.definition`,[]));break}case"removeNestedSchema":{let i=["type","id"],a=i,r=t;i.forEach(s=>{r[s]===void 0&&n.push({message:`${s} is required`,path:[`${e}.${s}`]})}),Object.keys(r).forEach(s=>{a.includes(s)||n.push({message:`Unknown property ${s}`,path:[`${e}.${s}`]})}),n.push(...x(t.id,`${e}.id`));break}case"modifyNestedSchema":{let i=["type","id","changes"],a=i,r=t;i.forEach(s=>{r[s]===void 0&&n.push({message:`${s} is required`,path:[`${e}.${s}`]})}),Object.keys(r).forEach(s=>{a.includes(s)||n.push({message:`Unknown property ${s}`,path:[`${e}.${s}`]})}),n.push(...x(t.id,`${e}.id`)),typeof t.changes!="object"&&n.push({message:"Changes must be an object",path:[`${e}.changes`]});break}default:n.push({message:"Unknown schema change type",path:[`${e}.type`]})}return n},$t=(t,e)=>{let n=[],i=["forward","backward"],a=i,r=t;return i.forEach(s=>{r[s]===void 0&&n.push({message:`${s} is required`,path:[`${e}.${s}`]})}),Object.keys(r).forEach(s=>{a.includes(s)||n.push({message:`Unknown property ${s}`,path:[`${e}.${s}`]})}),typeof t.forward!="function"&&n.push({message:"Forward must be a function",path:[`${e}.forward`]}),typeof t.backward!="function"&&n.push({message:"Backward must be a function",path:[`${e}.backward`]}),n},He=(t,e)=>{let n=[],i=["id","schemaVersion","changes","description","status","transform","createdAt","checksum"],a=[...i,"rollback","dependencies"],r=t;i.forEach(o=>{r[o]===void 0&&n.push({message:`${o} is required`,path:[`${e}.${o}`]})}),Object.keys(r).forEach(o=>{a.includes(o)||n.push({message:`Unknown property ${o}`,path:[`${e}.${o}`]})}),n.push(...x(t.id,`${e}.id`)),n.push(...x(t.schemaVersion,`${e}.schemaVersion`)),n.push(...x(t.description,`${e}.description`));let s=["pending","applied","failed"];return s.includes(t.status)||n.push({message:`Status must be one of ${s.join(", ")}`,path:[`${e}.status`]}),!Array.isArray(t.changes)||t.changes.length===0?n.push({message:"Changes must be a non-empty array",path:[`${e}.changes`]}):t.changes.forEach((o,c)=>{n.push(...$e(o,`${e}.changes[${c}]`))}),t.rollback!==void 0&&(Array.isArray(t.rollback)?t.rollback.forEach((o,c)=>n.push(...$e(o,`${e}.rollback[${c}]`))):n.push({message:"Rollback must be an array",path:[`${e}.rollback`]})),typeof t.transform=="string"?n.push(...x(t.transform,`${e}.transform`)):typeof t.transform=="object"&&t.transform!==null?n.push(...$t(t.transform,`${e}.transform`)):n.push({message:"Transform must be a string or object",path:[`${e}.transform`]}),n.push(...x(t.createdAt,`${e}.createdAt`)),n.push(...x(t.checksum,`${e}.checksum`)),t.dependencies!==void 0&&(n.push({message:"dependencies is deprecated; use DomainModel instead",path:[`${e}.dependencies`]}),(!Array.isArray(t.dependencies)||!t.dependencies.every(o=>typeof o=="string"))&&n.push({message:"Dependencies must be an array of strings",path:[`${e}.dependencies`]})),n},Je={"~standard":{version:1,vendor:"@asaidimu/anansi",validate:gt,types:{input:{},output:{}}}};var Ge={"~standard":{version:1,vendor:"@asaidimu/anansi",validate:t=>{if(typeof t!="object"||t===null)return J([{message:"Migration must be an object",path:[]}]);let e=t,n=He(e,"");return n.length>0?J(n):we(e)},types:{input:{},output:{}}}},ze={"~standard":{version:1,vendor:"@asaidimu/anansi",validate:t=>{if(!Array.isArray(t))return J([{message:"SchemaChanges must be an array",path:[]}]);let e=t,n=[];return e.forEach((i,a)=>n.push(...$e(i,`[${a}]`))),n.length>0?J(n):we(e)},types:{input:[],output:[]}}};function ve(t){try{return!Ge["~standard"].validate(t).issues}catch(e){throw new H("Invalid migration definition",e instanceof Error?e:new Error(String(e)))}}function Ee(t){try{return!ze["~standard"].validate(t).issues}catch(e){throw new H("Invalid schema change definition",e instanceof Error?e:new Error(String(e)))}}function z(t){try{return!Je["~standard"].validate(t).issues}catch(e){throw new H("Invalid schema definition",e instanceof Error?e:new Error(String(e)))}}var wt=z;var L=async t=>{if(typeof window<"u"&&crypto.subtle){let n=new TextEncoder().encode(t),i=await crypto.subtle.digest("SHA-256",n);return Array.from(new Uint8Array(i)).map(r=>r.toString(16).padStart(2,"0")).join("")}else{let{createHash:e}=await import("crypto");return e("sha256").update(t).digest("hex")}};function St(t){let e=t.match(/^(\d+)\.(\d+)\.(\d+)$/);if(!e)throw new Error(`Invalid version format: ${t}. Expected format: major.minor.patch`);return{major:parseInt(e[1],10),minor:parseInt(e[2],10),patch:parseInt(e[3],10)}}function bt(t,e){if(e&&"field"in t&&t.field){let n=e.fields[t.field];if(n)return n.type}if("parameters"in t){let n=t.parameters;if(n instanceof RegExp||Array.isArray(n)&&typeof n[0]=="string")return"string";if(typeof n=="number"||Array.isArray(n)&&typeof n[0]=="number")return"number";if(typeof n=="boolean")return"boolean";if(typeof n=="object"&&n!==null){if("minItems"in n||"maxItems"in n)return"array";if("schema"in n)return"object"}}}function vt(t){return t.required===!0||t.type!==void 0||t.itemsType!==void 0||t.nestedSchema!==void 0||t.reference!==void 0||t.unique===!0}function Et(t,e,n){switch(n){case"string":if(t instanceof RegExp&&e instanceof RegExp)return t.source!==e.source;if(Array.isArray(t)&&Array.isArray(e))return e.length<t.length||!t.every(i=>e.includes(i));break;case"number":if(typeof t=="object"&&typeof e=="object"&&"precision"in t&&"precision"in e)return e.precision<t.precision||(e.scale??0)<(t.scale??0);if(Array.isArray(t)&&Array.isArray(e))return e.length<t.length||!t.every(i=>e.includes(i));break;case"array":if(typeof t=="object"&&typeof e=="object"&&"minItems"in t&&"maxItems"in t&&"minItems"in e&&"maxItems"in e)return e.minItems>t.minItems||e.maxItems<t.maxItems;break;case"object":if(typeof t=="object"&&typeof e=="object"&&"schema"in t&&"schema"in e)return Object.keys(e.schema).length>Object.keys(t.schema).length;break}return!1}function Tt(t,e){let n={or:1,xor:2,and:3,not:4,nor:4};return!!(e.operator&&n[e.operator]>n[t.operator]||e.rules&&e.rules.length>t.rules.length)}function xt(t,e,n){if(!e)return!0;if("rules"in e&&"rules"in t)return Tt(e,t);if("predicate"in t&&t.predicate!==void 0)return!0;if("parameters"in t&&t.parameters!==void 0){let i=bt(e,n);return i?Et(e.parameters,t.parameters,i):!0}return!1}function Ct(t,e){switch(t.type){case"removeField":case"removeIndex":return"major";case"modifyField":return vt(t.changes)?"major":t.changes.deprecated?"minor":"patch";case"modifyIndex":return t.changes.unique!==void 0||t.changes.fields!==void 0?"major":"minor";case"addConstraint":return"major";case"removeConstraint":return"minor";case"modifyConstraint":let n=e?.constraints?.find(i=>"name"in i&&i.name===t.name);return xt(t.changes,n,e)?"major":"minor";case"addField":case"addIndex":case"deprecateField":return"minor";default:throw new Error(`Unhandled change type: ${JSON.stringify(t)}`)}}function kt(t){let e=new Set,n=new Set,i=new Set,a=new Set;for(let r of t)switch(r.type){case"addField":if(n.has(r.id))throw new Error(`Cannot add previously removed field: ${r.id}`);if(e.has(r.id))throw new Error(`Cannot add already modified field: ${r.id}`);if(a.has(r.id))throw new Error(`Cannot add deprecated field: ${r.id}`);i.add(r.id);break;case"removeField":if(i.has(r.id))throw new Error(`Cannot remove newly added field: ${r.id}`);if(e.has(r.id))throw new Error(`Cannot remove modified field: ${r.id}`);if(a.has(r.id))throw new Error(`Cannot remove field that is being deprecated: ${r.id}`);n.add(r.id);break;case"modifyField":if(n.has(r.id))throw new Error(`Cannot modify removed field: ${r.id}`);if(i.has(r.id))throw new Error(`Cannot modify newly added field: ${r.id}`);if(a.has(r.id))throw new Error(`Cannot modify field that is being deprecated: ${r.id}`);e.add(r.id);break;case"deprecateField":if(n.has(r.id))throw new Error(`Cannot deprecate removed field: ${r.id}`);if(i.has(r.id))throw new Error(`Cannot deprecate newly added field: ${r.id}`);if(e.has(r.id))throw new Error(`Cannot deprecate modified field: ${r.id}`);a.add(r.id);break}}function Dt(t){let e=new Set,n=new Set,i=new Set;for(let a of t)switch(a.type){case"addConstraint":let r=a.constraint,s=("name"in r,r.name);if(n.has(s))throw new Error(`Cannot add previously removed constraint: ${s}`);if(e.has(s))throw new Error(`Cannot add already modified constraint: ${s}`);i.add(s);break;case"removeConstraint":if(i.has(a.name))throw new Error(`Cannot remove newly added constraint: ${a.name}`);if(e.has(a.name))throw new Error(`Cannot remove modified constraint: ${a.name}`);n.add(a.name);break;case"modifyConstraint":if(n.has(a.name))throw new Error(`Cannot modify removed constraint: ${a.name}`);if(i.has(a.name))throw new Error(`Cannot modify newly added constraint: ${a.name}`);e.add(a.name);break}}function Te(t,e,n){if(e.length===0)throw new Error("No changes provided");kt(e),Dt(e);let i=St(t),a="patch";for(let r of e){let s=Ct(r,n);if(s==="major"){a="major";break}else s==="minor"&&a==="patch"&&(a="minor")}switch(a){case"major":return`${i.major+1}.0.0`;case"minor":return`${i.major}.${i.minor+1}.0`;case"patch":return`${i.major}.${i.minor}.${i.patch+1}`}}function j(t,e){let n=u=>u.split(".").map(f=>parseInt(f,10)||0),[i,a,r]=n(t),[s,o,c]=n(e);return i-s||a-o||r-c}function At(t){return t.sort(j)}var A=class extends Error{constructor(n,i,a,r){super(n);this.code=i;this.migrationId=a;this.cause=r;this.name="MigrationError"}},Be=(p=>(p.INVALID_SCHEMA="INVALID_SCHEMA",p.INVALID_MIGRATION="INVALID_MIGRATION",p.CHECKSUM_MISMATCH="CHECKSUM_MISMATCH",p.TIMEOUT="TIMEOUT",p.MEMORY_LIMIT="MEMORY_LIMIT",p.CONCURRENT_OPERATION="CONCURRENT_OPERATION",p.TRANSFORM_ERROR="TRANSFORM_ERROR",p.VERSION_NOT_FOUND="VERSION_NOT_FOUND",p.CIRCULAR_DEPENDENCY="CIRCULAR_DEPENDENCY",p.STREAM_ERROR="STREAM_ERROR",p.ROLLBACK_ERROR="ROLLBACK_ERROR",p.MISSING_TRANSFORM="MISSING_TRANSFORM",p))(Be||{}),xe=class t{currentSchema;history=[];migrations=[];isProcessing=!1;constructor(e,n,i){try{if(!z(e))throw new A("Invalid initial schema","INVALID_SCHEMA");if(this.currentSchema=e,n){if(!n.every(a=>ve(a)))throw new A("Invalid migration configuration","INVALID_MIGRATION");this.migrations=n.sort((a,r)=>j(a.schemaVersion,r.schemaVersion))}i&&(this.history=i.sort((a,r)=>j(a.version,r.version)))}catch(a){throw a instanceof A?a:new A("Failed to initialize MigrationEngine","INVALID_SCHEMA",void 0,a)}}data(){return{schema:this.currentSchema,history:this.history,migrations:this.migrations}}async generateChecksum(e){try{let n=JSON.stringify({id:e.id,schemaVersion:e.schemaVersion,changes:e.changes,description:e.description,rollback:e.rollback,createdAt:e.createdAt});return await L(n)}catch(n){throw new A("Checksum generation failed","CHECKSUM_MISMATCH",e.id,n)}}async add(e){if(this.isProcessing)throw new A("Concurrent operation","CONCURRENT_OPERATION");if(!e.changes?.length)throw new A("Migration must include changes","INVALID_MIGRATION");try{e.changes.forEach(i=>Ee(i))}catch(i){throw new A("Invalid schema changes","INVALID_MIGRATION",void 0,i)}let n={id:Date.now().toString(),schemaVersion:this.currentSchema.version,changes:e.changes,description:e.description,status:"pending",rollback:e.rollback,transform:e.transform,createdAt:new Date().toISOString(),checksum:""};n.checksum=await this.generateChecksum(n),this.migrations.push(n)}async dryRun(e,n,i){if(this.isProcessing)throw new A("Concurrent operation","CONCURRENT_OPERATION");try{this.isProcessing=!0;let a={...this.currentSchema},r=this.getRelevantMigrations(n,i),s=r.reduce((c,u)=>{let f=n==="forward"?u.changes:u.rollback||[];return this.applySchemaChanges(c,f,u.id)},a),o=await t.processMigrationList(e,n,r);return{newSchema:s,dataPreview:o}}catch(a){throw a instanceof A?a:new A("Dry run failed","INVALID_SCHEMA",void 0,a)}finally{this.isProcessing=!1}}getRelevantMigrations(e,n){return[...this.migrations].filter(i=>{let a=e==="forward"?"pending":"applied",r=n?j(i.schemaVersion,n)>=0:!0;return i.status===a&&r}).sort((i,a)=>e==="forward"?i.id.localeCompare(a.id):a.id.localeCompare(i.id))}applySchemaChanges(e,n,i){try{let a=Te(e.version,n);return n.map(s=>{try{return he(s,e)}catch(o){throw new A("Invalid schema change","INVALID_SCHEMA",i,o)}}).reduce((s,o)=>{try{return ie(s,o)}catch(c){throw new A("Failed to apply patch","INVALID_SCHEMA",i,c)}},{...e,version:a})}catch(a){throw a instanceof A?a:new A("Schema update failed","INVALID_SCHEMA",i,a)}}async prepareMigration(){let e=this.migrations.filter(n=>n.status==="pending");return await this.validateMigrations(e),e}async migrate(e){if(this.isProcessing)throw new A("Concurrent operation","CONCURRENT_OPERATION");let n=await this.prepareMigration();try{this.isProcessing=!0,this.transformSchema("forward");let i=await t.processMigrationList(e,"forward",n);return this.markMigrationsApplied(n),i}finally{this.isProcessing=!1}}async validateMigrations(e){await Promise.all(e.map(async n=>{let i=await this.generateChecksum(n);if(n.checksum!==i)throw new A("Checksum mismatch","CHECKSUM_MISMATCH",n.id)}))}markMigrationsApplied(e){this.migrations=this.migrations.map(n=>e.some(i=>i.id===n.id)?{...n,status:"applied"}:n)}async rollback(e){if(this.isProcessing)throw new A("Concurrent operation","CONCURRENT_OPERATION");return this.migrations.filter(i=>i.status==="applied").slice(-1)[0]?this.rollbackToVersion(this.history[this.history.length-1]?.version||this.currentSchema.version,e):e}async rollbackToVersion(e,n){if(this.isProcessing)throw new A("Concurrent operation","CONCURRENT_OPERATION");try{let i=this.history.findIndex(o=>o.version===e);if(i===-1)throw new Error(`Version ${e} not found in history`);let a=this.migrations.filter(o=>o.schemaVersion===e&&o.status==="applied").sort((o,c)=>c.id.localeCompare(o.id)),r=this.history.length-i;if(r<0)return n;for(let o=0;o<r;o++)this.transformSchema("backward");let s=await t.processMigrationList(n,"backward",a);return this.migrations=this.migrations.map(o=>o.schemaVersion===e&&o.status==="applied"?{...o,status:"pending"}:o),s}finally{this.isProcessing=!1}}static async processMigrationList(e,n,i){return(await Promise.all(i.map(async s=>{try{let o=await this.resolveTransform(s,n);return{migration:s,transform:o}}catch(o){throw new A(`Failed to resolve transform for migration ${s.id}`,"TRANSFORM_ERROR",s.id,o)}}))).filter(s=>!!s.transform).reduce((s,{migration:o,transform:c})=>s.pipeThrough(new TransformStream({async transform(u,f){try{let b=await c(u);f.enqueue(b)}catch(b){f.error(new A(`Data transformation failed for migration ${o.id}`,"TRANSFORM_ERROR",o.id,b))}}})),e)}static async resolveTransform(e,n){return e.transform?typeof e.transform=="string"?e.transform.startsWith("http://")||e.transform.startsWith("https://")?this.resolveRemoteTransform(e.transform,n):this.resolveLocalTransform(e.transform,n):e.transform[n]:null}static async resolveRemoteTransform(e,n){try{let i=await fetch(e);if(!i.ok)throw new A(`Failed to fetch transform module: ${e}`,"TRANSFORM_ERROR",void 0);let a=await i.text();if(typeof window<"u"){let r=new Blob([a],{type:"application/javascript"});return(await import(URL.createObjectURL(r))).default[n]}else{let{runInNewContext:r}=await import("vm"),s={module:{exports:{}},console};return r(a,s,e),s.module.exports[n]}}catch(i){throw new A(`Failed to load remote transform module: ${e}`,"TRANSFORM_ERROR",void 0,i)}}static async resolveLocalTransform(e,n){try{return(await import(e)).default[n]}catch(i){throw new A(`Failed to import local transform module: ${e}`,"TRANSFORM_ERROR",void 0,i)}}transformSchema(e){try{if(e==="backward"){let i=this.history.pop();if(!i)throw new Error("No previous version");this.currentSchema=i;return}let n=this.migrations.filter(i=>i.status==="pending").flatMap(i=>i.changes);if(!n.length)return;this.history.push(structuredClone(this.currentSchema)),this.currentSchema=n.reduce((i,a)=>this.applySchemaChanges(i,[a]),this.currentSchema)}catch(n){throw n instanceof A?n:new A("Schema transformation failed","INVALID_SCHEMA",void 0,n)}}};var Ke=t=>{let e=[],n=[];return{addField:(i,a)=>{e.push({type:"addField",id:i,definition:a}),n.push({type:"removeField",id:i})},removeField:i=>{e.push({type:"removeField",id:i});let a=t.fields[i];a&&n.push({type:"addField",id:i,definition:a})},modifyField:(i,a)=>{e.push({type:"modifyField",id:i,changes:a});let r=t.fields[i];r&&n.push({type:"modifyField",id:i,changes:r})},deprecateField:i=>{e.push({type:"deprecateField",id:i}),n.push({type:"modifyField",id:i,changes:{deprecated:!1}})},addIndex:i=>{e.push({type:"addIndex",definition:i}),n.push({type:"removeIndex",name:i.name})},removeIndex:i=>{e.push({type:"removeIndex",name:i});let a=t.indexes?.find(r=>r.name===i);a&&n.push({type:"addIndex",definition:a})},modifyIndex:(i,a)=>{e.push({type:"modifyIndex",name:i,changes:a});let r=t.indexes?.find(s=>s.name===i);r&&n.push({type:"modifyIndex",name:i,changes:r})},addConstraint:i=>{e.push({type:"addConstraint",constraint:i}),n.push({type:"removeConstraint",name:i.name})},removeConstraint:i=>{e.push({type:"removeConstraint",name:i});let a=t.constraints?.find(r=>"name"in r&&r.name===i);a&&n.push({type:"addConstraint",constraint:a})},modifyConstraint:(i,a)=>{e.push({type:"modifyConstraint",name:i,changes:a});let r=t.constraints?.find(s=>"name"in s&&s.name===i);r&&n.push({type:"modifyConstraint",name:i,changes:r})},addNestedSchema:(i,a)=>{e.push({type:"addNestedSchema",id:i,definition:a}),n.push({type:"removeNestedSchema",id:i})},removeNestedSchema:i=>{if(e.push({type:"removeNestedSchema",id:i}),!t.nestedSchemas)return;let a=t.nestedSchemas[i];a&&n.push({type:"addNestedSchema",id:i,definition:a})},modifyNestedSchema:(i,a)=>{if(e.push({type:"modifyNestedSchema",id:i,changes:a}),!t.nestedSchemas)return;let r=t.nestedSchemas[i];r&&n.push({type:"modifyNestedSchema",id:i,changes:r})},changes:()=>({migrate:e,rollback:n})}};var Tn=require("@isomorphic-git/lightning-fs"),I=K(require("isomorphic-git"),1),Q=K(require("isomorphic-git/http/web"),1);var Ze=K(require("@isomorphic-git/lightning-fs"),1);function We(t){let e=t.toString(),n=e.substring(e.indexOf("(")+1,e.indexOf(")")),i=e.substring(e.indexOf("{")+1,e.lastIndexOf("}")).trim();return JSON.stringify({params:n,body:i})}function Ye(t){let{params:e,body:n}=JSON.parse(t),i=Object.getPrototypeOf(function*(){}).constructor;return new i(e,n)}function Ce(t){let e=t.toString(),n=e.match(/\(([^)]*)\)\s*=>\s*(.+)/s),i=e.match(/function\s*\(([^)]*)\)\s*{([\s\S]*)}/),a=e.match(/([^(]*)\(([^)]*)\)\s*{([\s\S]*)}/),r,s;return n?(r=n[1],s=n[2].includes("{")?n[2].substring(1,n[2].length-1).trim():`return ${n[2]}`):i?(r=i[1],s=i[2].trim()):a?(r=a[2],s=a[3].trim()):(r=e.substring(e.indexOf("(")+1,e.indexOf(")")),s=e.substring(e.indexOf("{")+1,e.lastIndexOf("}")).trim()),JSON.stringify({params:r,body:s,type:n?"arrow":i?"function":a?"method":"unknown"})}function ke(t){let{params:e,body:n,type:i}=JSON.parse(t),a=new Function(e,n);return i==="arrow"&&Object.defineProperty(a,"toString",{value:()=>`(${e}) => ${n}`,configurable:!0}),a}function Ft(t){let e={},n={};t.hint?.groups&&t.hint.groups.forEach(a=>{n[a.name]={label:a.label,description:a.description}}),De(t.fields,"",t.nestedSchemas||{},e,!0);let i=[];for(let[a,r]of Object.entries(e)){let s=a!=="ungrouped"?n[a]:void 0;i.push({name:a!=="ungrouped"?a:"ungrouped",label:s?.label||"Ungrouped",description:s?.description,fields:r})}return i}function De(t,e,n,i,a,r){if(Array.isArray(t))t.forEach(s=>{let o=s.when?e?`${e}.${s.when?.field}`:s.when?.field:void 0;De(s.fields,e,n,i,a,o?{[o]:s.when?.value}:void 0)});else for(let[s,o]of Object.entries(t)){if(o.hint?.input.ignore)continue;let c=e?`${e}.${o.name}`:o.name,f=o.required===!0&&a,b={...o,name:c,required:f};if(r&&(b.when=r),o.type!=="object"){let p=o.hint?.input?.group||"ungrouped";i[p]||(i[p]=[]),i[p].push(b)}if(o.schema&&"id"in o.schema&&n[o.schema.id]){let p=n[o.schema.id];De(p.fields,c,n,i,f,r)}}}function Pt(t,e){let n={},i=t.nestedSchemas||{};for(let[a,r]of Object.entries(t.fields))n[a]=oe(r,i,e);return n}function oe(t,e,n){if("default"in t&&t.default!==void 0)return t.default;if(n?.resolver){let i=n.resolver(t);if(i!==void 0)return i}switch(t.type){case"string":return;case"number":return;case"boolean":return!1;case"array":return[];case"set":return[];case"enum":if(!t.values||t.values.length===0)throw new Error(`Enum field "${t.name}" requires non-empty values array`);return t.values[0];case"object":if(!t.schema||!("id"in t.schema)||!e[t.schema.id])throw new Error(`Object field "${t.name}" references invalid nested schema`);return Qe(e[t.schema.id],e,n);case"record":return{};case"union":if(!t.schema||!Array.isArray(t.schema)||t.schema.length===0)throw new Error(`Union field "${t.name}" requires non-empty schema array`);let i=n?.discriminator?.[t.name],a=t.schema[0];if(i!==void 0)for(let r of t.schema){let o=e[r.id].fields;if(Mt(o,i)){a=r;break}}return Qe(e[a.id],e,n);case"dynamic":return{};default:throw new Error(`Unsupported field type "${t.type}" for field "${t.name}"`)}}function Mt(t,e){if(Array.isArray(t)){for(let n of t)for(let i of Object.values(n.fields))if(i.type==="enum"&&i.values?.includes(e)||i.default===e)return i}else for(let n of Object.values(t))if(n.type==="enum"&&n.values?.includes(e)||n.default===e)return n}function Qe(t,e,n){let i={},a=n?.discriminator||{};if(Array.isArray(t.fields)){let r=t.fields.filter(o=>!o.when);for(let o of r)for(let[c,u]of Object.entries(o.fields))i[c]=oe(u,e,n);let s=t.fields.filter(o=>o.when);for(let o of s){let c=o.when.field,u=o.when.value;if(a[c]===u)for(let[b,p]of Object.entries(o.fields))i[b]=oe(p,e,n)}}else for(let[r,s]of Object.entries(t.fields))i[r]=oe(s,e,n);return i}var Xe=require("buffer");window.Buffer=Xe.Buffer;var Y=class{fs;fsp;rootDir;constructor(e="/registry"){this.fs=new Ze.default(`${e.replace("/","-")}`),this.fsp=this.fs.promises,this.rootDir=e.startsWith("/")?e:`/${e}`}async init(){let e=`${this.rootDir}/registry.json`;(!await this.fileExists(this.rootDir)||!await this.fileExists(e))&&(await this.fsp.mkdir(this.rootDir),await this.fsp.writeFile(e,JSON.stringify({schemas:{},created:new Date().toISOString(),updated:new Date().toISOString()}),"utf8"),await this.fsp.writeFile(`${this.rootDir}/schema-lock.json`,JSON.stringify({updated:new Date().toISOString(),hashes:[]}),"utf8"))}async create({schema:e}){if(!e.name||!e.version||!z(e))throw new Error("Invalid schema");let n=`${this.rootDir}/${e.name}`;if(await this.fileExists(`${n}/schema.json`))throw new Error(`Schema ${e.name} already exists`);return await this.fsp.mkdir(n),await this.fsp.mkdir(`${n}/migrations`),this.saveSchema(e,"create")}async update({schema:e}){if(!e.name||!e.version)throw new Error("Schema must have a name and version");let n=`${this.rootDir}/${e.name}`;if(!await this.fileExists(`${n}/schema.json`))throw new Error(`Schema ${e.name} not found`);return this.saveSchema(e,"update")}async saveSchema(e,n){let i=`${this.rootDir}/${e.name}`,a=await this.processAndStoreMigrations(i,e),r=this.serializeSchema(e);await this.writeSchemaFile(i,r);let s=await L(r);await this.updateIndex(i,e,s,a,n),await this.updateRegistryMetadata(e,n),await this.sync()}async delete({name:e}){let n=`${this.rootDir}/${e}`;if(!await this.fileExists(`${n}/schema.json`))throw new Error(`Schema ${e} not found`);await this.rmdirRecursive(n);let i=await this.readRegistryMetadata();delete i.schemas[e],i.updated=new Date().toISOString(),await this.writeRegistryMetadata(i),await this.sync()}async list(){let e=await this.readRegistryMetadata();return Object.values(e.schemas).map(n=>({name:n.name,version:n.version}))}async schema({name:e,version:n,migrations:i=!1}){let a=`${this.rootDir}/${e}/schema.json`;if(!await this.fileExists(a))return null;let r=this.deserializeSchema(JSON.parse(String(await this.fsp.readFile(a,"utf8")))),s=await this.readSchemaIndex(e);return n&&n!==s.version&&!s.history.some(o=>o.version===n)?null:(i&&(r.migrations=await this.migrations({name:e,version:n})),r)}async stats({schema:e}){return e?this.readSchemaIndex(e):this.readRegistryMetadata()}async sync(){let e={updated:new Date().toISOString(),hashes:[]},n=await this.listFilesRecursive(this.rootDir);for(let i of n)if(i!==`${this.rootDir}/schema-lock.json`&&i.match(new RegExp("/*.git*/"))===null){let a=String(await this.fsp.readFile(i,"utf8"));e.hashes.push([i,await L(a)])}await this.fsp.writeFile(`${this.rootDir}/schema-lock.json`,JSON.stringify(e),"utf8")}async migrations({name:e,version:n}){let i=await this.readSchemaIndex(e),a=n||i.version,r=[];for(let[s,o]of Object.entries(i.migrations)){let c=`${this.rootDir}/${e}/migrations/${o.hash}.json`;if(await this.fileExists(c)){let u=JSON.parse(String(await this.fsp.readFile(c,"utf8")));j(u.schemaVersion,a)<=0&&r.push(this.deserializeMigration(u))}}return r.sort((s,o)=>j(s.schemaVersion,o.schemaVersion))}async history({name:e}){let n=await this.readSchemaIndex(e),i=this.deserializeSchema(JSON.parse(String(await this.fsp.readFile(`${this.rootDir}/${e}/schema.json`,"utf8"))));return Promise.all(n.history.map(async a=>({...i,version:a.version,description:a.description,migrations:await this.migrations({name:e,version:a.version})})))}async processAndStoreMigrations(e,n){return Promise.all((n.migrations||[]).map(async i=>{let a={...i};if(i.transform?.forward){let o=i.transform;a.transform={forward:Ce(o.forward),backward:Ce(o.backward||(c=>c))}}let r=JSON.stringify(a),s=await L(r);return await this.fsp.writeFile(`${e}/migrations/${s}.json`,r,"utf8"),{id:i.id,hash:s,checksum:i.checksum}}))}serializeSchema(e){return JSON.stringify({...e,migrations:void 0,mock:e.mock?We(e.mock):null})}deserializeSchema(e){return e.mock&&(e.mock=Ye(e.mock)),e}deserializeMigration(e){return e.transform?.forward&&(e.transform={forward:ke(e.transform.forward),backward:ke(e.transform.backward)}),e}async writeSchemaFile(e,n){let i=`${e}/schema.json`;return await this.fsp.writeFile(i,n,"utf8"),i}async updateIndex(e,n,i,a,r){let s=`${e}/index.json`,o=r==="create"?{schema:n.name,version:n.version,history:[],migrations:{}}:JSON.parse(String(await this.fsp.readFile(s,"utf8")));o.history.push({version:n.version,hash:i,date:new Date().toISOString(),description:n.description||(r==="create"?"Initial version":"Updated version"),migrations:a.map(c=>c.id),predicates:[],changelog:[]}),o.version=n.version,a.forEach(({id:c,hash:u,checksum:f})=>{o.migrations[c]={hash:u,checksum:f}}),await this.fsp.writeFile(s,JSON.stringify(o),"utf8")}async updateRegistryMetadata(e,n){let i=await this.readRegistryMetadata();i.schemas[e.name]={name:e.name,version:e.version,description:e.description||"",created:n==="create"?new Date().toISOString():i.schemas[e.name]?.created,updated:new Date().toISOString()},i.updated=new Date().toISOString(),await this.writeRegistryMetadata(i)}async readRegistryMetadata(){return JSON.parse(String(await this.fsp.readFile(`${this.rootDir}/registry.json`,"utf8")))}async writeRegistryMetadata(e){await this.fsp.writeFile(`${this.rootDir}/registry.json`,JSON.stringify(e),"utf8")}async readSchemaIndex(e){let n=`${this.rootDir}/${e}/index.json`;if(!await this.fileExists(n))throw new Error(`Schema ${e} not found`);return JSON.parse(String(await this.fsp.readFile(n,"utf8")))}async fileExists(e){try{return await this.fsp.stat(e),!0}catch{return!1}}async rmdirRecursive(e){let n=await this.fsp.readdir(e);for(let i of n){let a=`${e}/${i}`;(await this.fsp.stat(a)).isDirectory()?await this.rmdirRecursive(a):await this.fsp.unlink(a)}await this.fsp.rmdir(e)}async listFilesRecursive(e){let n=[],i=await this.fsp.readdir(e);for(let a of i){let r=`${e}/${a}`;(await this.fsp.stat(r)).isDirectory()?n.push(...await this.listFilesRecursive(r)):n.push(r)}return n}};var Ae=class{locks=new Map;async acquire(e){let n,i=new Promise(r=>{n=r}),a=this.locks.get(e)||Promise.resolve();return this.locks.set(e,a.then(()=>i)),await a,n}async withLock(e,n){let i=await this.acquire(e);try{return await n()}finally{i()}}},Re=class{cache=new Map;ttl;constructor(e=3e4){this.ttl=e}get(e){let n=this.cache.get(e);return!n||Date.now()-n.timestamp>this.ttl?(this.cache.delete(e),null):n.schema}set(e,n){this.cache.set(e,{schema:n,timestamp:Date.now()})}invalidate(e){e?this.cache.delete(e):this.cache.clear()}};async function ce(t,e){try{return await t()}catch(n){throw console.error(`${e}:`,n),new Error(`${e}: ${n.message}`)}}async function de(t,e,n,i,a){await i.init(),await I.default.init({fs:t,dir:e,defaultBranch:n}),await I.default.setConfig({fs:t,dir:e,path:"core.autocrlf",value:"false"}),await I.default.setConfig({fs:t,dir:e,path:"core.eol",value:"lf"}),await I.default.add({fs:t,dir:e,filepath:"."}),await I.default.commit({fs:t,dir:e,message:"chore: initial commit",author:a})}async function Ot(t="/registry",e={}){let n=e.mainBranch||"main",i=e.remote,a=e.createRemote??!1,r=e.author||{name:"SchemaRegistry",email:"system@example.com"},s=e.proxy?[e.proxy]:["https://cors.isomorphic-git.org"],o=0,c=new Y(t),u=c.fs,f=t.startsWith("/")?t:`/${t}`,b=new Ae,p=new Re(e.cacheTtl);async function v(d,l){let w=o;do{let T=s[o];try{return await d(T)}catch(D){if(console.warn(`Failed with proxy ${T}: ${D.message}`),o=(o+1)%s.length,o===w)throw new Error(`${l}: All CORS proxies failed`)}}while(!0)}async function C(d,l="."){return ce(async()=>(await I.default.add({fs:u,dir:f,filepath:l}),(await I.default.statusMatrix({fs:u,dir:f})).some(([T,D,k])=>D!==k)?await I.default.commit({fs:u,dir:f,message:d,author:r}):null),"Failed to commit changes")}async function m(d,l,w){return ce(async()=>{if(await g(d))throw new Error(`Tag ${d} already exists`);await I.default.annotatedTag({fs:u,dir:f,ref:d,message:l,tagger:r,object:w})},`Failed to create tag ${d}`)}async function g(d){try{return(await I.default.listTags({fs:u,dir:f})).includes(d)}catch{return!1}}async function y(d){return(await I.default.listTags({fs:u,dir:f})).filter(T=>T.startsWith(d))}async function $(d){return ce(async()=>{let w=(await I.default.listTags({fs:u,dir:f})).filter(T=>T.startsWith(d));for(let T of w)await I.default.deleteTag({fs:u,dir:f,ref:T});return w},`Failed to delete tags with prefix ${d}`)}async function h(d){return ce(async()=>{await I.default.checkout({fs:u,dir:f,ref:d})},`Failed to checkout ${d}`)}async function E(d,{delete:l=!1,force:w=!1}={}){i&&await v(async T=>{await I.default.push({fs:u,http:Q.default,dir:f,ref:d,remote:"origin",url:i.authURL(),onAuth:()=>i.credentials(),corsProxy:T,delete:l,force:w})},`Failed to push ${d}`)}async function S(d,l=!0){i&&await v(async w=>{try{await I.default.pull({fs:u,http:Q.default,dir:f,ref:d,author:r,remote:"origin",url:i.authURL(),onAuth:()=>i.credentials(),corsProxy:w,fastForwardOnly:!0})}catch(T){if(!l)console.warn(`Fast-forward pull failed for ${d}, attempting regular pull`),await I.default.pull({fs:u,http:Q.default,dir:f,ref:d,author:r,remote:"origin",url:i.authURL(),onAuth:()=>i.credentials(),corsProxy:w,fastForwardOnly:!1});else throw T}},`Failed to pull ${d}`)}if(i&&!await c.fileExists(f)){let d=f.slice(1);if(await i.exists({name:d}).catch(()=>!1))await v(async w=>{await I.default.clone({fs:u,http:Q.default,dir:f,url:i.authURL(),ref:n,singleBranch:!0,depth:1,onAuth:()=>i.credentials(),corsProxy:w})},"Failed to clone repository");else if(a)try{i=await i.create({name:d,private:!0}),await de(u,f,n,c,r),await I.default.addRemote({fs:u,dir:f,remote:"origin",url:i.url()}),await E(n)}catch(w){console.error("Failed to create and push to remote repository:",w),await de(u,f,n,c,r)}else await de(u,f,n,c,r)}else await de(u,f,n,c,r);return{async init(){return b.withLock("init",()=>c.init())},async create(d){let{name:l,version:w}=d.schema;return b.withLock(`schema:${l}`,async()=>{await h(n),await c.create(d);let T=await C(`feat: create schema ${l}`);T&&await m(`${l}-${w}`,`Version ${w}`,T),p.invalidate(l)})},async update(d){let{name:l,version:w}=d.schema;return b.withLock(`schema:${l}`,async()=>{await h(n),await c.update(d);let T=await C(`fix: update schema ${l}`);T&&await m(`${l}-${w}`,`Version ${w}`,T),p.invalidate(l)})},async delete(d){let{name:l}=d;return b.withLock(`schema:${l}`,async()=>{await h(n),await I.default.remove({fs:u,dir:f,filepath:l}),await c.delete(d);let w=await C(`chore: delete schema ${l}`),T=await y(`${l}-`);if(i&&w){await E(n);for(let D of T)await E(D,{delete:!0,force:!0}).catch(k=>console.warn(`Failed to delete remote tag ${D}: ${k.message}`))}await $(`${l}-`),p.invalidate(l)})},async list(){return b.withLock("list",()=>c.list())},async schema(d){let{name:l,version:w}=d,T=`${l}-${w||"latest"}-${d.migrations||!1}`,D=p.get(T);return D||b.withLock(`schema:${l}`,async()=>{if(w){let R=`${l}-${w}`;if(await g(R))await h(R);else throw new Error(`Version ${w} of schema ${l} not found`)}else await h(n);let k=await c.schema(d);return p.set(T,k),k})},async stats(d){return b.withLock("stats",()=>c.stats(d))},async sync(){return b.withLock("sync",async()=>{if(await h(n),await c.sync(),await C("chore: sync local changes"),i){await S(n,!1),await E(n);let d=await I.default.listTags({fs:u,dir:f});for(let w of d)await E(w,{force:!0});let l=await I.default.listTags({fs:u,dir:f});for(let w of l)d.includes(w)||await E(w,{delete:!0})}p.invalidate()})},async migrations(d){let{name:l,version:w}=d,T=`migrations-${l}-${w||"latest"}`,D=p.get(T);return D||b.withLock(`migrations:${l}`,async()=>{if(w){let R=`${l}-${w}`;if(await g(R))await h(R);else throw new Error(`Version ${w} of schema ${l} not found`)}else await h(n);let k=await c.migrations(d);return p.set(T,k),k})},async history(d){let{name:l}=d,w=`history-${l}`,T=p.get(w);return T||b.withLock(`history:${l}`,async()=>{await h(n);let D=await c.history(d);return p.set(w,D),D})}}}function O(t){return"predicate"in t}function jt(t,e=!0,n=!0){let i="",a=n?"export ":"",r=new Map,s=new Map,o=(C,m=[])=>{if(!e||!C&&!m.length)return"";let g=C?[C]:[];return m.forEach(y=>g.push(y)),`/**
1
+ "use strict";var tt=Object.create;var Z=Object.defineProperty;var nt=Object.getOwnPropertyDescriptor;var it=Object.getOwnPropertyNames;var st=Object.getPrototypeOf,at=Object.prototype.hasOwnProperty;var rt=(t,e)=>{for(var n in e)Z(t,n,{get:e[n],enumerable:!0})},Ie=(t,e,n,i)=>{if(e&&typeof e=="object"||typeof e=="function")for(let a of it(e))!at.call(t,a)&&a!==n&&Z(t,a,{get:()=>e[a],enumerable:!(i=nt(e,a))||i.enumerable});return t};var K=(t,e,n)=>(n=t!=null?tt(st(t)):{},Ie(e||!t||!t.__esModule?Z(n,"default",{value:t,enumerable:!0}):n,t)),ot=t=>Ie(Z({},"__esModule",{value:!0}),t);var Vt={};rt(Vt,{JsonPatchError:()=>M,MigrationEngine:()=>xe,MigrationError:()=>A,MigrationErrorCode:()=>Be,SchemaRegistry:()=>Y,applyPatch:()=>ie,calculateNextVersion:()=>Te,compareSemanticVersions:()=>j,createGitSchemaRegistry:()=>Ot,createPatch:()=>ut,createSchemaMigrationHelper:()=>Ke,createStandardSchemaValidator:()=>Oe,deepMerge:()=>ye,docgen:()=>Nt,extractInputFieldGroups:()=>Ft,formResolver:()=>ht,generateSHA256Hash:()=>L,normalizePath:()=>Fe,schemaChangeToPatch:()=>he,schemaDefaults:()=>Pt,schemaToTypes:()=>jt,serializeParams:()=>U,sortSemanticVars:()=>At,validate:()=>wt,validateMigration:()=>ve,validateSchemaChange:()=>Ee,validateSchemaDefinition:()=>z});module.exports=ot(Vt);var It=require("@asaidimu/events");var Rt=require("@asaidimu/events"),re=require("@asaidimu/query");var M=class extends Error{constructor(n,i){super(n);this.operation=i;this.name="JsonPatchError"}};function te(t){let e=Fe(t);return e===""?[]:e.substring(1).split("/").map(ct)}function Fe(t){return t===""||t==="/"?"":t.startsWith("/")?"/"+t.substring(1).split("/").map(ee).join("/"):"/"+t.split(".").map(ee).join("/")}function ee(t){return t.replace(/~/g,"~0").replace(/\//g,"~1")}function ct(t){return t.replace(/~1/g,"/").replace(/~0/g,"~")}var N=new Map;function ne(t,e){let n=t;for(let i of e){if(n===null||typeof n!="object")throw new M(`Invalid path - parent not found at ${i}`);if(Array.isArray(n)){let a=i==="-"?n.length:parseInt(i);if(isNaN(a)||a<0||a>n.length)throw new M(`Invalid array index: ${i}`);n=n[a]}else{if(!n.hasOwnProperty(i))throw new M(`Property ${i} not found`);n=n[i]}}return n}function fe(t,e){let n=N.get(e)||te(e);if(N.set(e,n),n.length===0)return t;let i=ne(t,n.slice(0,-1)),a=n[n.length-1];if(Array.isArray(i)){let r=parseInt(a);if(isNaN(r)||r<0||r>=i.length)throw new M(`Invalid array index: ${a}`);return i[r]}return i[a]}function dt(t,e,n){let i=N.get(e)||te(e);N.set(e,i);let a=ne(t,i.slice(0,-1)),r=i[i.length-1];return Array.isArray(a)?a.splice(0,a.length,...a.filter(s=>s!==n)):a[r]===n&&delete a[r],t}function X(t,e,n){let i=N.get(e)||te(e);if(N.set(e,i),i.length===0)return n;let a=i.slice(0,-1),r=i[i.length-1],s=ne(t,a);if(Array.isArray(s))if(r==="-")s.push(n);else{let o=parseInt(r);if(o<0||o>s.length)throw new M(`Invalid array index: ${r}`);s.splice(o,0,n)}else s[r]=n;return t}function le(t,e){let n=N.get(e)||te(e);if(N.set(e,n),n.length===0)return;let i=ne(t,n.slice(0,-1)),a=n[n.length-1];if(Array.isArray(i)){let r=parseInt(a);i.splice(r,1)}else delete i[a];return t}function ie(t,e){let n=JSON.parse(JSON.stringify(t));for(let i of e)try{switch(i.op){case"add":n=X(n,i.path,i.value);break;case"remove":n=le(n,i.path);break;case"removeValue":n=dt(n,i.path,i.value);break;case"replace":n=X(le(n,i.path),i.path,i.value);break;case"copy":{let a=fe(n,i.from);n=X(n,i.path,JSON.parse(JSON.stringify(a)));break}case"move":{let a=fe(n,i.from);n=X(n,i.path,a),n=le(n,i.from);break}case"test":{let a=fe(n,i.path);if(JSON.stringify(a)!==JSON.stringify(i.value))throw new M("Test operation failed");break}default:throw new M(`Unsupported operation: ${i.op}`)}}catch(a){throw a instanceof M&&(a.operation=i),a}return n}function ut(t,e){let n=[];return me(t,e,"",n),n}function me(t,e,n,i){if(t!==e){if(typeof t!=typeof e||Array.isArray(t)!==Array.isArray(e)){i.push({op:"replace",path:n,value:e});return}typeof t=="object"&&t!==null?Array.isArray(t)?ft(t,e,n,i):lt(t,e,n,i):t!==e&&i.push({op:"replace",path:n,value:e})}}function ft(t,e,n,i){let a=Math.max(t.length,e.length);for(let r=0;r<a;r++){let s=`${n}/${r}`;r>=t.length?i.push({op:"add",path:`${n}/-`,value:e[r]}):r>=e.length?i.push({op:"remove",path:s}):me(t[r],e[r],s,i)}}function lt(t,e,n,i){let a=new Set,r=Object.keys(t),s=Object.keys(e);for(let o of r){let c=ee(o),u=n?`${n}/${c}`:`/${c}`;e.hasOwnProperty(o)?(me(t[o],e[o],u,i),a.add(o)):i.push({op:"remove",path:u})}for(let o of s)if(!a.has(o)){let c=ee(o),u=n?`${n}/${c}`:`/${c}`;i.push({op:"add",path:u,value:e[o]})}}function he(t,e){let n=[];switch(t.type){case"addField":n.push({op:"add",path:`/fields/${t.id}`,value:t.definition});break;case"removeField":n.push({op:"remove",path:`/fields/${t.id}`});break;case"modifyField":{let i=`/fields/${t.id}`;Object.entries(t.changes).forEach(([a,r])=>{typeof r=="object"&&r!==null&&!Array.isArray(r)?n.push({op:"replace",path:`${i}/${a}`,value:r}):n.push({op:"replace",path:`${i}/${a}`,value:r})});break}case"deprecateField":n.push({op:"add",path:`/fields/${t.id}/deprecated`,value:!0});break;case"addIndex":e.indexes||n.push({op:"add",path:"/indexes",value:[]}),n.push({op:"add",path:"/indexes/-",value:t.definition});break;case"removeIndex":{let i=e.indexes?.findIndex(a=>a.name===t.name);i!==void 0&&i>=0&&n.push({op:"remove",path:`/indexes/${i}`});break}case"modifyIndex":{let i=e.indexes?.findIndex(a=>a.name===t.name);i!==void 0&&i>=0&&Object.entries(t.changes).forEach(([a,r])=>{n.push({op:"replace",path:`/indexes/${i}/${a}`,value:r})});break}case"addConstraint":e.constraints||n.push({op:"add",path:"/constraints",value:[]}),Array.isArray(t.constraint)?t.constraint.forEach(i=>{n.push({op:"add",path:"/constraints/-",value:i})}):n.push({op:"add",path:"/constraints/-",value:t.constraint});break;case"removeConstraint":{let i=e.constraints?.findIndex(a=>Array.isArray(a)?a.some(r=>r.name===t.name):a.name===t.name);i!==void 0&&i>=0&&n.push({op:"remove",path:`/constraints/${i}`});break}case"modifyConstraint":{let i=mt(e,t.name);i&&Object.entries(t.changes).forEach(([a,r])=>{n.push({op:"replace",path:`${i}/${a}`,value:r})});break}}return n}function mt(t,e){if(!t.constraints)return null;for(let n=0;n<t.constraints.length;n++){let i=t.constraints[n];if(i.name===e)return`/constraints/${n}`;if(Pe(i)){let a=Me(i.rules,e);if(a)return`/constraints/${n}${a}`}}return null}function Pe(t){return t&&"operator"in t&&"rules"in t}function Me(t,e){for(let n=0;n<t.length;n++){let i=t[n];if("name"in i&&i.name===e)return`/rules/${n}`;if(Pe(i)){let a=Me(i.rules,e);if(a)return`/rules/${n}${a}`}}return null}function ye(t,e){let n={...t};return pe(t)&&pe(e)&&Object.keys(e).forEach(i=>{pe(e[i])?i in t?n[i]=ye(t[i],e[i]):Object.assign(n,{[i]:e[i]}):Object.assign(n,{[i]:e[i]})}),n}function pe(t){return t&&typeof t=="object"&&!Array.isArray(t)}var ge=new Map;function U(t){return t instanceof RegExp?t.toString().slice(1,-1):JSON.stringify(t)}function Oe(t,e){let n=o=>({value:o}),i=o=>({issues:o}),a=(o,c,u,f)=>{switch(c){case"string":return typeof o!="string"?[{message:`Expected string, got ${typeof o}`,path:u}]:[];case"number":return typeof o!="number"||isNaN(o)?[{message:`Expected number, got ${typeof o}`,path:u}]:[];case"boolean":return typeof o!="boolean"?[{message:`Expected boolean, got ${typeof o}`,path:u}]:[];case"array":return Array.isArray(o)?[]:[{message:`Expected array, got ${typeof o}`,path:u}];case"set":return!Array.isArray(o)||new Set(o).size!==o.length?[{message:`Expected unique array, got ${typeof o}`,path:u}]:[];case"enum":return f?.values?f.values.includes(o)?[]:[{message:`Expected one of ${JSON.stringify(f.values)}, got ${o}`,path:u}]:[{message:"Enum type requires 'values' definition",path:u}];case"object":return typeof o!="object"||o===null||Array.isArray(o)?[{message:`Expected object, got ${typeof o}`,path:u}]:[];case"record":return typeof o!="object"||o===null||Array.isArray(o)?[{message:`Expected record (object), got ${typeof o}`,path:u}]:[];case"union":return typeof o!="object"||o===null||Array.isArray(o)?[{message:`Expected union (object), got ${typeof o}`,path:u}]:[];case"dynamic":return console.warn("Deprecated: 'dynamic' type used. Use 'record' instead."),typeof o!="object"||o===null||Array.isArray(o)?[{message:`Expected record (object), got ${typeof o}`,path:u}]:[];default:return[{message:`Unknown type '${c}'`,path:u}]}};function r(o,c,u,f,b){let p=[],v=o.rules.map((m,g)=>{let y=[...f,`rules[${g}]`],$=`${m.name}@${y.join(".")}`;if("rules"in m){if(b.has($))return!0;b.add($);let h=r(m,c,u,y,b);return p.push(...h),b.delete($),h.length===0}else{let h=u[m.predicate];if(!h)return p.push({message:`Predicate '${m.predicate}' not found`,path:y}),!1;let E=`${m.predicate}:${JSON.stringify(m.parameters)}:${JSON.stringify(c[m.field])}`;if(ge.has(E)){let d=ge.get(E);return d||p.push({message:m.errorMessage||`Constraint '${m.name}' failed with params ${U(m.parameters)}`,path:y}),d}let S=h({data:c,field:m.field,arguments:m.parameters});return ge.set(E,S),S||p.push({message:m.errorMessage||`Constraint '${m.name}' failed with params ${U(m.parameters)}`,path:y}),S}});return(()=>{switch(o.operator){case"and":return v.every(m=>m);case"or":return v.some(m=>m);case"not":return!v.every(m=>m);case"nor":return!v.some(m=>m);case"xor":return v.filter(m=>m).length===1}})()||p.push({message:`Constraint group '${o.name}' failed`,path:f}),p}function s(o,c,u,f,b,p=new Set){let v=[];if("type"in c&&!("fields"in c)){let g=f.length>0?o[f[f.length-1]]:o;return v.push(...a(g,c.type,f,{values:c.values})),c.constraints&&c.constraints.forEach((y,$)=>{if("rules"in y)v.push(...r(y,{value:g},u,[...f,`constraints[${$}]`],p));else{let h=u[y.predicate];h?h({data:{value:g},field:"value",arguments:y.parameters})||v.push({message:y.errorMessage||`Constraint '${y.name}' failed with params ${U(y.parameters)}`,path:[...f,`constraints[${$}]`]}):v.push({message:`Predicate '${y.predicate}' not found`,path:[...f,`constraints[${$}]`]})}}),v}let C={};if("concrete"in c)if(c.concrete===!0||!Array.isArray(c.fields))C=c.fields;else{let g=c.fields,y=g.find(h=>!h.when);y&&Object.assign(C,y.fields);let $=g.find(h=>h.when&&o[h.when.field]!==void 0&&o[h.when.field]===h.when.value);if($)Object.assign(C,$.fields);else if(!y)return v.push({message:"No matching field set found for discriminated schema",path:f}),v}else C=c.fields;let m=new Set(Object.values(C).map(g=>g.name));Object.entries(C).forEach(([g,y])=>{let $=[...f,y.name],h=Object.hasOwnProperty.call(o,y.name)?o[y.name]:y.default!==void 0?y.default:void 0;y.required&&h==null&&v.push({message:`Field '${y.name}' is required`,path:$});let E=y.schema||y.nestedSchema;if(y.type==="object"&&E&&!Array.isArray(E)){let S=b[E.id];if(S)if(p.has(E.id))v.push({message:`Circular reference detected at '${E.id}'`,path:$});else{p.add(E.id);let d=h&&typeof h=="object"&&!Array.isArray(h)?h:{};v.push(...s(d,S,u,$,b,p)),E.constraints?.forEach((l,w)=>{if("rules"in l)v.push(...r(l,d,u,[...$,`constraints[${w}]`],p));else{let T=u[l.predicate];T?T({data:d,field:void 0,arguments:l.parameters})||v.push({message:l.errorMessage||`Constraint '${l.name}' failed with params ${U(l.parameters)}`,path:[...$,`constraints[${w}]`]}):v.push({message:`Predicate '${l.predicate}' not found`,path:[...$,`constraints[${w}]`]})}}),p.delete(E.id)}else v.push({message:`Nested schema '${E.id}' not found`,path:$})}if(y.type==="union"&&E&&Array.isArray(E)){let S=!1,d=[];E.forEach((l,w)=>{let T=b[l.id];if(T)if(p.has(l.id))d.push({message:`Circular reference detected at '${l.id}'`,path:[...$,w.toString()]});else{p.add(l.id);let D=h&&typeof h=="object"&&!Array.isArray(h)?h:{},k=s(D,T,u,$,b,new Set(p));k.length===0&&h!==void 0?(S=!0,l.constraints?.forEach((R,F)=>{if("rules"in R){let P=r(R,D,u,[...$,`constraints[${F}]`],p);P.length>0&&(S=!1,d.push(...P))}else{let P=u[R.predicate];P&&!P({data:D,field:void 0,arguments:R.parameters})&&(S=!1,d.push({message:R.errorMessage||`Constraint '${R.name}' failed`,path:[...$,`constraints[${F}]`]}))}})):h===void 0&&d.push(...k.filter(R=>R.message.includes("is required"))),p.delete(l.id)}else d.push({message:`Nested schema '${l.id}' not found`,path:[...$,w.toString()]})}),!S&&h!==void 0?(v.push({message:"Value does not match any union schema",path:$}),v.push(...d)):h===void 0&&v.push(...d)}h!==void 0&&(v.push(...a(h,y.type,$,{values:y.values})),(y.type==="array"||y.type==="set")&&Array.isArray(h)&&(y.constraints?.forEach((S,d)=>{let l=u[S.predicate];l&&!l({data:{[y.name]:h},field:y.name,arguments:S.parameters})&&v.push({message:S.errorMessage||`Constraint '${S.name}' failed for field '${y.name}'`,path:[...$,`constraints[${d}]`]})}),y.itemsType&&h.forEach((S,d)=>v.push(...a(S,y.itemsType,[...$,d.toString()]))),E&&!Array.isArray(E)&&(b[E.id]?h.forEach((S,d)=>{typeof S=="object"&&S!==null&&(p.has(E.id)?v.push({message:`Circular reference detected at '${E.id}'`,path:[...$,d.toString()]}):(p.add(E.id),v.push(...s(S,b[E.id],u,[...$,d.toString()],b,p)),p.delete(E.id)))}):v.push({message:`Nested schema '${E.id}' not found`,path:$}))),y.constraints?.forEach((S,d)=>{if("rules"in S)v.push(...r(S,o,u,[...$,`constraints[${d}]`],p));else{let l=u[S.predicate];l?l({data:o,field:y.name,arguments:S.parameters})||v.push({message:S.errorMessage||`Constraint '${S.name}' failed for field '${y.name}' with params ${U(S.parameters)}`,path:[...$,`constraints[${d}]`]}):v.push({message:`Predicate '${S.predicate}' not found`,path:[...$,`constraints[${d}]`]})}}))});for(let g in o)Object.hasOwnProperty.call(o,g)&&!m.has(g)&&v.push({message:`Unexpected field '${g}'`,path:[...f,g]});return c.constraints?.forEach((g,y)=>{if("rules"in g)v.push(...r(g,o,u,[...f,`constraints[${y}]`],p));else{let $=u[g.predicate];$?$({data:o,field:g.field,arguments:g.parameters})||v.push({message:g.errorMessage||`Constraint '${g.name}' failed with params ${U(g.parameters)}`,path:[...f,`constraints[${y}]`]}):v.push({message:`Predicate '${g.predicate}' not found`,path:[...f,`constraints[${y}]`]})}}),v}return t.version!=="1.0.0"&&console.warn(`Schema version '${t.version}' may require migrations. Validator assumes version 1.0.0.`),{"~standard":{version:1,vendor:"@asaidimu/anansi",validate:o=>{if(typeof o!="object"||o===null)return i([{message:"Input must be an object",path:[]}]);let c=o,u=s(c,t,e,[],t.nestedSchemas||{});return u.length>0?i(u):n(c)},types:{input:{},output:{}}}}}function ht(t){return async e=>{let n=t.validate(e);if(n instanceof Promise&&(n=await n),"value"in n)return{values:n.value,errors:{}};let i={};return n.issues.forEach(a=>{if(!a.path)return;let r=a.path.filter(o=>!o.includes("constraints")),s=i;for(let o=0;o<r.length;o++){let c=r[o];o===r.length-1?s[c]={type:"validation",message:a.message}:(s[c]=s[c]||{},s=s[c])}}),{values:{},errors:i}}}var H=class extends Error{constructor(n,i){super(n);this.errors=i;this.name="SchemaValidationError"}};var we=t=>({value:t}),J=t=>({issues:t}),x=(t,e,n=!0)=>t===void 0&&!n?[]:typeof t!="string"||t.trim()===""?[{message:"Must be a non-empty string",path:[e]}]:[],se=(t,e)=>{let n=["string","number","boolean","array","set","enum","object","record","union","dynamic"];return typeof t!="string"||!n.includes(t)?[{message:`Must be one of ${n.join(", ")}`,path:[e]}]:t==="dynamic"?[{message:"Field type 'dynamic' is deprecated; use 'record' instead",path:[e]}]:[]},pt=(t,e)=>{let n=["normal","unique","btree","hash","spatial","fulltext","gi","expression","composite"];return typeof t!="string"||!n.includes(t)?[{message:`Must be one of ${n.join(", ")}`,path:[e]}]:[]},je=(t,e)=>{let n=["and","or","not","nor","xor"];return typeof t!="string"||!n.includes(t)?[{message:`Must be one of ${n.join(", ")}`,path:[e]}]:[]},W=(t,e,n=!1)=>t===void 0&&!n?[]:typeof t!="boolean"?[{message:"Must be a boolean",path:[e]}]:[],yt=(t,e,n)=>t===void 0?[]:[],Se=(t,e,n)=>{let i=[],a=["predicate","name"],r=["type","predicate","field","parameters","name","description","errorMessage"],s=t;return a.forEach(o=>{s[o]===void 0&&i.push({message:`${o} is required`,path:[`${n}.${o}`]})}),Object.keys(s).forEach(o=>{r.includes(o)||i.push({message:`Unknown property ${o}`,path:[`${n}.${o}`]})}),i.push(...x(t.name,`${n}.name`)),i.push(...x(t.predicate,`${n}.predicate`)),t.field!==void 0&&typeof t.field!="string"&&i.push({message:"Field must be a string",path:[`${n}.field`]}),t.parameters!==void 0&&i.push(...yt(t.parameters,e,`${n}.parameters`)),i.push(...x(t.description,`${n}.description`,!1)),i.push(...x(t.errorMessage,`${n}.errorMessage`,!1)),i},be=(t,e,n)=>{let i=[],a=["name","operator","rules"],r=a,s=t;return a.forEach(o=>{s[o]===void 0&&i.push({message:`${o} is required`,path:[`${n}.${o}`]})}),Object.keys(s).forEach(o=>{r.includes(o)||i.push({message:`Unknown property ${o}`,path:[`${n}.${o}`]})}),i.push(...x(t.name,`${n}.name`)),i.push(...je(t.operator,`${n}.operator`)),!Array.isArray(t.rules)||t.rules.length===0?i.push({message:"Rules must be a non-empty array",path:[`${n}.rules`]}):t.rules.forEach((o,c)=>{"rules"in o?i.push(...be(o,e,`${n}.rules[${c}]`)):i.push(...Se(o,e,`${n}.rules[${c}]`))}),i},V=(t,e,n)=>{if(!Array.isArray(t))return[{message:"Must be an array",path:[n]}];let i=[];return t.forEach((a,r)=>{"rules"in a?i.push(...be(a,e,`${n}[${r}]`)):i.push(...Se(a,e,`${n}[${r}]`))}),i},Ne=(t,e)=>{let n=[],i=["operator","field"],a=["operator","field","value","conditions"],r=t;return i.forEach(s=>{r[s]===void 0&&n.push({message:`${s} is required`,path:[`${e}.${s}`]})}),Object.keys(r).forEach(s=>{a.includes(s)||n.push({message:`Unknown property ${s}`,path:[`${e}.${s}`]})}),n.push(...je(t.operator,`${e}.operator`)),n.push(...x(t.field,`${e}.field`)),t.conditions!==void 0&&(Array.isArray(t.conditions)?t.conditions.forEach((s,o)=>n.push(...Ne(s,`${e}.conditions[${o}]`))):n.push({message:"Conditions must be an array",path:[`${e}.conditions`]})),n},Ve=(t,e)=>{let n=[],i=["fields","type","name"],a=["fields","type","unique","partial","description","order","name"],r=t;return i.forEach(s=>{r[s]===void 0&&n.push({message:`${s} is required`,path:[`${e}.${s}`]})}),Object.keys(r).forEach(s=>{a.includes(s)||n.push({message:`Unknown property ${s}`,path:[`${e}.${s}`]})}),n.push(...x(t.name,`${e}.name`)),n.push(...pt(t.type,`${e}.type`)),(!Array.isArray(t.fields)||t.fields.length===0||!t.fields.every(s=>typeof s=="string"))&&n.push({message:"Fields must be a non-empty array of strings",path:[`${e}.fields`]}),n.push(...W(t.unique,`${e}.unique`,!1)),t.partial&&n.push(...Ne(t.partial,`${e}.partial`)),n.push(...x(t.description,`${e}.description`,!1)),t.order!==void 0&&!["asc","desc"].includes(t.order)&&n.push({message:"Order must be 'asc' or 'desc'",path:[`${e}.order`]}),n},G=(t,e)=>{if(t===void 0)return[];if(!Array.isArray(t))return[{message:"Must be an array",path:[e]}];let n=[];return t.forEach((i,a)=>n.push(...Ve(i,`${e}[${a}]`))),n},qe=(t,e,n,i,a)=>{let r=[];return t===void 0?[]:(n==="union"&&Array.isArray(t)?(t.length===0&&r.push({message:"Schema array must not be empty for union type",path:[e]}),t.forEach((s,o)=>{let c=`${e}[${o}]`;r.push(...x(s.id,`${c}.id`)),i.includes(s.id)||r.push({message:`Schema ID '${s.id}' must match a nestedSchemas key`,path:[`${c}.id`]}),s.constraints&&r.push(...V(s.constraints,"dynamic",`${c}.constraints`)),s.indexes&&r.push(...G(s.indexes,`${c}.indexes`))})):(n==="object"||n==="array"&&a==="object")&&!Array.isArray(t)?(r.push(...x(t.id,`${e}.id`)),i.includes(t.id)||r.push({message:`Schema ID '${t.id}' must match a nestedSchemas key`,path:[`${e}.id`]}),t.constraints&&r.push(...V(t.constraints,"dynamic",`${e}.constraints`)),t.indexes&&r.push(...G(t.indexes,`${e}.indexes`))):r.push({message:"Schema is only valid for 'object', 'union', or 'array' with itemsType 'object'",path:[e]}),r)},Ue=(t,e,n)=>{if(t===void 0)return[];switch(e){case"string":if(typeof t!="string")return[{message:"Default must be a string",path:[n]}];break;case"number":if(typeof t!="number")return[{message:"Default must be a number",path:[n]}];break;case"boolean":if(typeof t!="boolean")return[{message:"Default must be a boolean",path:[n]}];break;case"array":case"set":if(!Array.isArray(t))return[{message:"Default must be an array",path:[n]}];break;case"enum":if(!Array.isArray(t)||!t.every(i=>typeof i=="string"||typeof i=="number"))return[{message:"Default must be an array of strings or numbers",path:[n]}];break;case"object":case"record":if(typeof t!="object"||t===null)return[{message:"Default must be an object",path:[n]}];break;case"union":case"dynamic":return[]}return[]},Le=(t,e)=>t===void 0?[]:typeof t!="object"||t===null?[{message:"Hint must be an object",path:[e]}]:"input"in t&&typeof t.input!="object"?[{message:"Hint.input must be an object",path:[`${e}.input`]}]:[],ae=(t,e,n)=>{let i=[],a=["name","type"],r=["name","type","required","constraints","default","values","schema","itemsType","nestedSchema","deprecated","reference","description","unique","hint"],s=t;if(a.forEach(o=>{s[o]===void 0&&i.push({message:`${o} is required`,path:[`${e}.${o}`]})}),Object.keys(s).forEach(o=>{r.includes(o)||i.push({message:`Unknown property ${o}`,path:[`${e}.${o}`]})}),i.push(...x(t.name,`${e}.name`)),i.push(...se(t.type,`${e}.type`)),i.push(...W(t.required,`${e}.required`,!1)),t.constraints&&i.push(...V(t.constraints,t.type,`${e}.constraints`)),i.push(...Ue(t.default,t.type,`${e}.default`)),t.values!==void 0&&(t.type==="enum"?(!Array.isArray(t.values)||t.values.length===0||!t.values.every(o=>typeof o=="string"||typeof o=="number"))&&i.push({message:"Values must be a non-empty array of strings or numbers",path:[`${e}.values`]}):i.push({message:"Values is only valid for 'enum' type",path:[`${e}.values`]})),t.schema!==void 0&&i.push(...qe(t.schema,`${e}.schema`,t.type,n,t.itemsType)),t.itemsType&&i.push(...se(t.itemsType,`${e}.itemsType`)),t.nestedSchema){i.push({message:"nestedSchema is deprecated; use schema instead",path:[`${e}.nestedSchema`]});let o=["id"],c=["id","constraints","indexes"],u=t.nestedSchema;o.forEach(f=>{u[f]===void 0&&i.push({message:`${f} is required`,path:[`${e}.nestedSchema.${f}`]})}),Object.keys(u).forEach(f=>{c.includes(f)||i.push({message:`Unknown property ${f}`,path:[`${e}.nestedSchema.${f}`]})}),i.push(...x(t.nestedSchema.id,`${e}.nestedSchema.id`)),n.includes(t.nestedSchema.id)||i.push({message:`nestedSchema.id '${t.nestedSchema.id}' must match a nestedSchemas key`,path:[`${e}.nestedSchema.id`]}),t.nestedSchema.constraints&&i.push(...V(t.nestedSchema.constraints,"dynamic",`${e}.nestedSchema.constraints`)),t.nestedSchema.indexes&&i.push(...G(t.nestedSchema.indexes,`${e}.nestedSchema.indexes`))}if(i.push(...W(t.deprecated,`${e}.deprecated`,!1)),t.reference){i.push({message:"reference is deprecated",path:[`${e}.reference`]});let o=["schema","field"],c=["schema","field"],u=t.reference;o.forEach(f=>{u[f]===void 0&&i.push({message:`${f} is required`,path:[`${e}.reference.${f}`]})}),Object.keys(u).forEach(f=>{c.includes(f)||i.push({message:`Unknown property ${f}`,path:[`${e}.reference.${f}`]})}),i.push(...x(t.reference.schema,`${e}.reference.schema`)),i.push(...x(t.reference.field,`${e}.reference.field`))}return i.push(...x(t.description,`${e}.description`,!1)),i.push(...W(t.unique,`${e}.unique`,!1)),t.hint&&i.push(...Le(t.hint,`${e}.hint`)),i},_e=(t,e,n)=>{let i=[];if("type"in t&&["string","number","boolean","array","set","enum","record"].includes(t.type)){let r=["name","type"],s=["name","type","default","schema","itemsType","constraints","description","metadata"],o=t;r.forEach(c=>{o[c]===void 0&&i.push({message:`${c} is required`,path:[`${e}.${c}`]})}),Object.keys(o).forEach(c=>{s.includes(c)||i.push({message:`Unknown property ${c}`,path:[`${e}.${c}`]})}),i.push(...x(t.name,`${e}.name`)),i.push(...se(t.type,`${e}.type`)),i.push(...Ue(t.default,t.type,`${e}.default`)),t.schema&&i.push(...qe(t.schema,`${e}.schema`,t.type,n,t.itemsType)),t.itemsType&&i.push(...se(t.itemsType,`${e}.itemsType`)),t.constraints&&i.push(...V(t.constraints,t.type,`${e}.constraints`)),i.push(...x(t.description,`${e}.description`,!1)),t.metadata!==void 0&&(typeof t.metadata!="object"||t.metadata===null)&&i.push({message:"Metadata must be an object",path:[`${e}.metadata`]})}else{let r=["name"],s=["name","description","concrete","fields","indexes","constraints","metadata"],o=t;r.forEach(c=>{o[c]===void 0&&i.push({message:`${c} is required`,path:[`${e}.${c}`]})}),Object.keys(o).forEach(c=>{s.includes(c)||i.push({message:`Unknown property ${c}`,path:[`${e}.${c}`]})}),i.push(...x(t.name,`${e}.name`)),i.push(...W(o.concrete,`${e}.concrete`,!1)),o.concrete&&Array.isArray(o.fields)&&i.push({message:"Fields must be an object when concrete is true",path:[`${e}.fields`]}),Array.isArray(o.fields)?(o.fields.length===0&&i.push({message:"Fields array must not be empty",path:[`${e}.fields`]}),o.fields.forEach((c,u)=>{let f=`${e}.fields[${u}]`;if(typeof c!="object"||c===null||!("fields"in c))i.push({message:"Each variant must have a 'fields' property",path:[f]});else{let b=c.fields;typeof b!="object"||b===null?i.push({message:"Fields must be a non-empty object",path:[`${f}.fields`]}):Object.entries(b).forEach(([p,v])=>{i.push(...ae(v,`${f}.fields.${p}`,n))}),c.when!==void 0&&(typeof c.when!="object"||c.when===null?i.push({message:"When must be an object",path:[`${f}.when`]}):i.push(...x(c.when.field,`${f}.when.field`)))}})):o.fields!==void 0&&(typeof o.fields!="object"||o.fields===null?i.push({message:"Fields must be a non-empty object",path:[`${e}.fields`]}):Object.entries(o.fields).forEach(([c,u])=>{i.push(...ae(u,`${e}.fields.${c}`,n))})),i.push(...x(t.description,`${e}.description`,!1)),t.indexes&&i.push(...G(t.indexes,`${e}.indexes`)),t.constraints&&i.push(...V(o.constraints,"dynamic",`${e}.constraints`)),t.metadata!==void 0&&(typeof t.metadata!="object"||t.metadata===null)&&i.push({message:"Metadata must be an object",path:[`${e}.metadata`]})}return i},gt=t=>{if(typeof t!="object"||t===null)return J([{message:"Schema must be an object",path:[]}]);let e=t,n=[],i=["name","version","fields"],a=["name","version","description","fields","nestedSchemas","indexes","constraints","metadata","dependencies","migrations","mock","hint"],r=e;if(i.forEach(s=>{r[s]===void 0&&n.push({message:`${s} is required`,path:[s]})}),Object.keys(r).forEach(s=>{a.includes(s)||n.push({message:`Unknown property ${s}`,path:[s]})}),n.push(...x(e.name,"name")),n.push(...x(e.version,"version")),typeof e.fields!="object"||e.fields===null)n.push({message:"Fields must be a non-empty object",path:["fields"]});else{let s=Object.keys(e.nestedSchemas||{});Object.entries(e.fields).forEach(([o,c])=>{n.push(...ae(c,`fields.${o}`,s))})}if(e.nestedSchemas!==void 0)if(typeof e.nestedSchemas!="object"||e.nestedSchemas===null)n.push({message:"NestedSchemas must be an object",path:["nestedSchemas"]});else{let s=Object.keys(e.nestedSchemas);Object.entries(e.nestedSchemas).forEach(([o,c])=>n.push(..._e(c,`nestedSchemas.${o}`,s)))}return n.push(...x(e.description,"description",!1)),e.indexes&&n.push(...G(e.indexes,"indexes")),e.constraints&&n.push(...V(e.constraints,"dynamic","constraints")),e.metadata!==void 0&&(typeof e.metadata!="object"||e.metadata===null)&&n.push({message:"Metadata must be an object",path:["metadata"]}),e.dependencies!==void 0&&(n.push({message:"dependencies is deprecated; use DomainModel instead",path:["dependencies"]}),(!Array.isArray(e.dependencies)||!e.dependencies.every(s=>typeof s=="string"))&&n.push({message:"Dependencies must be an array of strings",path:["dependencies"]})),e.migrations!==void 0&&(Array.isArray(e.migrations)?e.migrations.forEach((s,o)=>n.push(...He(s,`migrations[${o}]`))):n.push({message:"Migrations must be an array",path:["migrations"]})),e.mock!==void 0&&typeof e.mock!="function"&&n.push({message:"Mock must be a function",path:["mock"]}),e.hint&&n.push(...Le(e.hint,"hint")),n.length>0?J(n):we(e)},$e=(t,e)=>{let n=[];switch(t.type||n.push({message:"type is required",path:[`${e}.type`]}),t.type){case"modifyProperty":{let i=["type","id","changes"],a=i,r=t;i.forEach(s=>{r[s]===void 0&&n.push({message:`${s} is required`,path:[`${e}.${s}`]})}),Object.keys(r).forEach(s=>{a.includes(s)||n.push({message:`Unknown property ${s}`,path:[`${e}.${s}`]})}),n.push(...x(t.id,`${e}.id`)),(t.changes===void 0||typeof t.changes!="object")&&n.push({message:"Changes must be an object",path:[`${e}.changes`]});break}case"addField":{let i=["type","id","definition"],a=i,r=t;i.forEach(s=>{r[s]===void 0&&n.push({message:`${s} is required`,path:[`${e}.${s}`]})}),Object.keys(r).forEach(s=>{a.includes(s)||n.push({message:`Unknown property ${s}`,path:[`${e}.${s}`]})}),n.push(...x(t.id,`${e}.id`)),n.push(...ae(t.definition,`${e}.definition`,[]));break}case"removeField":case"deprecateField":{let i=["type","id"],a=i,r=t;i.forEach(s=>{r[s]===void 0&&n.push({message:`${s} is required`,path:[`${e}.${s}`]})}),Object.keys(r).forEach(s=>{a.includes(s)||n.push({message:`Unknown property ${s}`,path:[`${e}.${s}`]})}),n.push(...x(t.id,`${e}.id`));break}case"modifyField":{let i=["type","id","changes"],a=["type","id","changes","nestedSchemaChanges"],r=t;if(i.forEach(s=>{r[s]===void 0&&n.push({message:`${s} is required`,path:[`${e}.${s}`]})}),Object.keys(r).forEach(s=>{a.includes(s)||n.push({message:`Unknown property ${s}`,path:[`${e}.${s}`]})}),n.push(...x(t.id,`${e}.id`)),typeof t.changes!="object"&&n.push({message:"Changes must be an object",path:[`${e}.changes`]}),t.nestedSchemaChanges){let s=["id","constraints","indexes"],o=t.nestedSchemaChanges;Object.keys(o).forEach(c=>{s.includes(c)||n.push({message:`Unknown property ${c}`,path:[`${e}.nestedSchemaChanges.${c}`]})}),n.push(...x(o.id,`${e}.nestedSchemaChanges.id`,!1)),o.constraints&&n.push(...V(o.constraints,"dynamic",`${e}.nestedSchemaChanges.constraints`)),o.indexes&&n.push(...G(o.indexes,`${e}.nestedSchemaChanges.indexes`))}break}case"addIndex":{let i=["type","definition"],a=i,r=t;i.forEach(s=>{r[s]===void 0&&n.push({message:`${s} is required`,path:[`${e}.${s}`]})}),Object.keys(r).forEach(s=>{a.includes(s)||n.push({message:`Unknown property ${s}`,path:[`${e}.${s}`]})}),n.push(...Ve(t.definition,`${e}.definition`));break}case"removeIndex":{let i=["type","name"],a=i,r=t;i.forEach(s=>{r[s]===void 0&&n.push({message:`${s} is required`,path:[`${e}.${s}`]})}),Object.keys(r).forEach(s=>{a.includes(s)||n.push({message:`Unknown property ${s}`,path:[`${e}.${s}`]})}),n.push(...x(t.name,`${e}.name`));break}case"modifyIndex":{let i=["type","name","changes"],a=i,r=t;i.forEach(s=>{r[s]===void 0&&n.push({message:`${s} is required`,path:[`${e}.${s}`]})}),Object.keys(r).forEach(s=>{a.includes(s)||n.push({message:`Unknown property ${s}`,path:[`${e}.${s}`]})}),n.push(...x(t.name,`${e}.name`)),typeof t.changes!="object"&&n.push({message:"Changes must be an object",path:[`${e}.changes`]});break}case"addConstraint":{let i=["type","constraint"],a=i,r=t;i.forEach(s=>{r[s]===void 0&&n.push({message:`${s} is required`,path:[`${e}.${s}`]})}),Object.keys(r).forEach(s=>{a.includes(s)||n.push({message:`Unknown property ${s}`,path:[`${e}.${s}`]})}),"rules"in t.constraint?n.push(...be(t.constraint,"dynamic",`${e}.constraint`)):n.push(...Se(t.constraint,"dynamic",`${e}.constraint`));break}case"removeConstraint":{let i=["type","name"],a=i,r=t;i.forEach(s=>{r[s]===void 0&&n.push({message:`${s} is required`,path:[`${e}.${s}`]})}),Object.keys(r).forEach(s=>{a.includes(s)||n.push({message:`Unknown property ${s}`,path:[`${e}.${s}`]})}),n.push(...x(t.name,`${e}.name`));break}case"modifyConstraint":{let i=["type","name","changes"],a=i,r=t;i.forEach(s=>{r[s]===void 0&&n.push({message:`${s} is required`,path:[`${e}.${s}`]})}),Object.keys(r).forEach(s=>{a.includes(s)||n.push({message:`Unknown property ${s}`,path:[`${e}.${s}`]})}),n.push(...x(t.name,`${e}.name`)),typeof t.changes!="object"&&n.push({message:"Changes must be an object",path:[`${e}.changes`]});break}case"addNestedSchema":{let i=["type","id","definition"],a=i,r=t;i.forEach(s=>{r[s]===void 0&&n.push({message:`${s} is required`,path:[`${e}.${s}`]})}),Object.keys(r).forEach(s=>{a.includes(s)||n.push({message:`Unknown property ${s}`,path:[`${e}.${s}`]})}),n.push(...x(t.id,`${e}.id`)),n.push(..._e(t.definition,`${e}.definition`,[]));break}case"removeNestedSchema":{let i=["type","id"],a=i,r=t;i.forEach(s=>{r[s]===void 0&&n.push({message:`${s} is required`,path:[`${e}.${s}`]})}),Object.keys(r).forEach(s=>{a.includes(s)||n.push({message:`Unknown property ${s}`,path:[`${e}.${s}`]})}),n.push(...x(t.id,`${e}.id`));break}case"modifyNestedSchema":{let i=["type","id","changes"],a=i,r=t;i.forEach(s=>{r[s]===void 0&&n.push({message:`${s} is required`,path:[`${e}.${s}`]})}),Object.keys(r).forEach(s=>{a.includes(s)||n.push({message:`Unknown property ${s}`,path:[`${e}.${s}`]})}),n.push(...x(t.id,`${e}.id`)),typeof t.changes!="object"&&n.push({message:"Changes must be an object",path:[`${e}.changes`]});break}default:n.push({message:"Unknown schema change type",path:[`${e}.type`]})}return n},$t=(t,e)=>{let n=[],i=["forward","backward"],a=i,r=t;return i.forEach(s=>{r[s]===void 0&&n.push({message:`${s} is required`,path:[`${e}.${s}`]})}),Object.keys(r).forEach(s=>{a.includes(s)||n.push({message:`Unknown property ${s}`,path:[`${e}.${s}`]})}),typeof t.forward!="function"&&n.push({message:"Forward must be a function",path:[`${e}.forward`]}),typeof t.backward!="function"&&n.push({message:"Backward must be a function",path:[`${e}.backward`]}),n},He=(t,e)=>{let n=[],i=["id","schemaVersion","changes","description","status","transform","createdAt","checksum"],a=[...i,"rollback","dependencies"],r=t;i.forEach(o=>{r[o]===void 0&&n.push({message:`${o} is required`,path:[`${e}.${o}`]})}),Object.keys(r).forEach(o=>{a.includes(o)||n.push({message:`Unknown property ${o}`,path:[`${e}.${o}`]})}),n.push(...x(t.id,`${e}.id`)),n.push(...x(t.schemaVersion,`${e}.schemaVersion`)),n.push(...x(t.description,`${e}.description`));let s=["pending","applied","failed"];return s.includes(t.status)||n.push({message:`Status must be one of ${s.join(", ")}`,path:[`${e}.status`]}),!Array.isArray(t.changes)||t.changes.length===0?n.push({message:"Changes must be a non-empty array",path:[`${e}.changes`]}):t.changes.forEach((o,c)=>{n.push(...$e(o,`${e}.changes[${c}]`))}),t.rollback!==void 0&&(Array.isArray(t.rollback)?t.rollback.forEach((o,c)=>n.push(...$e(o,`${e}.rollback[${c}]`))):n.push({message:"Rollback must be an array",path:[`${e}.rollback`]})),typeof t.transform=="string"?n.push(...x(t.transform,`${e}.transform`)):typeof t.transform=="object"&&t.transform!==null?n.push(...$t(t.transform,`${e}.transform`)):n.push({message:"Transform must be a string or object",path:[`${e}.transform`]}),n.push(...x(t.createdAt,`${e}.createdAt`)),n.push(...x(t.checksum,`${e}.checksum`)),t.dependencies!==void 0&&(n.push({message:"dependencies is deprecated; use DomainModel instead",path:[`${e}.dependencies`]}),(!Array.isArray(t.dependencies)||!t.dependencies.every(o=>typeof o=="string"))&&n.push({message:"Dependencies must be an array of strings",path:[`${e}.dependencies`]})),n},Je={"~standard":{version:1,vendor:"@asaidimu/anansi",validate:gt,types:{input:{},output:{}}}};var Ge={"~standard":{version:1,vendor:"@asaidimu/anansi",validate:t=>{if(typeof t!="object"||t===null)return J([{message:"Migration must be an object",path:[]}]);let e=t,n=He(e,"");return n.length>0?J(n):we(e)},types:{input:{},output:{}}}},ze={"~standard":{version:1,vendor:"@asaidimu/anansi",validate:t=>{if(!Array.isArray(t))return J([{message:"SchemaChanges must be an array",path:[]}]);let e=t,n=[];return e.forEach((i,a)=>n.push(...$e(i,`[${a}]`))),n.length>0?J(n):we(e)},types:{input:[],output:[]}}};function ve(t){try{return!Ge["~standard"].validate(t).issues}catch(e){throw new H("Invalid migration definition",e instanceof Error?e:new Error(String(e)))}}function Ee(t){try{return!ze["~standard"].validate(t).issues}catch(e){throw new H("Invalid schema change definition",e instanceof Error?e:new Error(String(e)))}}function z(t){try{return!Je["~standard"].validate(t).issues}catch(e){throw new H("Invalid schema definition",e instanceof Error?e:new Error(String(e)))}}var wt=z;var L=async t=>{if(typeof window<"u"&&crypto.subtle){let n=new TextEncoder().encode(t),i=await crypto.subtle.digest("SHA-256",n);return Array.from(new Uint8Array(i)).map(r=>r.toString(16).padStart(2,"0")).join("")}else{let{createHash:e}=await import("crypto");return e("sha256").update(t).digest("hex")}};function St(t){let e=t.match(/^(\d+)\.(\d+)\.(\d+)$/);if(!e)throw new Error(`Invalid version format: ${t}. Expected format: major.minor.patch`);return{major:parseInt(e[1],10),minor:parseInt(e[2],10),patch:parseInt(e[3],10)}}function bt(t,e){if(e&&"field"in t&&t.field){let n=e.fields[t.field];if(n)return n.type}if("parameters"in t){let n=t.parameters;if(n instanceof RegExp||Array.isArray(n)&&typeof n[0]=="string")return"string";if(typeof n=="number"||Array.isArray(n)&&typeof n[0]=="number")return"number";if(typeof n=="boolean")return"boolean";if(typeof n=="object"&&n!==null){if("minItems"in n||"maxItems"in n)return"array";if("schema"in n)return"object"}}}function vt(t){return t.required===!0||t.type!==void 0||t.itemsType!==void 0||t.nestedSchema!==void 0||t.reference!==void 0||t.unique===!0}function Et(t,e,n){switch(n){case"string":if(t instanceof RegExp&&e instanceof RegExp)return t.source!==e.source;if(Array.isArray(t)&&Array.isArray(e))return e.length<t.length||!t.every(i=>e.includes(i));break;case"number":if(typeof t=="object"&&typeof e=="object"&&"precision"in t&&"precision"in e)return e.precision<t.precision||(e.scale??0)<(t.scale??0);if(Array.isArray(t)&&Array.isArray(e))return e.length<t.length||!t.every(i=>e.includes(i));break;case"array":if(typeof t=="object"&&typeof e=="object"&&"minItems"in t&&"maxItems"in t&&"minItems"in e&&"maxItems"in e)return e.minItems>t.minItems||e.maxItems<t.maxItems;break;case"object":if(typeof t=="object"&&typeof e=="object"&&"schema"in t&&"schema"in e)return Object.keys(e.schema).length>Object.keys(t.schema).length;break}return!1}function Tt(t,e){let n={or:1,xor:2,and:3,not:4,nor:4};return!!(e.operator&&n[e.operator]>n[t.operator]||e.rules&&e.rules.length>t.rules.length)}function xt(t,e,n){if(!e)return!0;if("rules"in e&&"rules"in t)return Tt(e,t);if("predicate"in t&&t.predicate!==void 0)return!0;if("parameters"in t&&t.parameters!==void 0){let i=bt(e,n);return i?Et(e.parameters,t.parameters,i):!0}return!1}function Ct(t,e){switch(t.type){case"removeField":case"removeIndex":return"major";case"modifyField":return vt(t.changes)?"major":t.changes.deprecated?"minor":"patch";case"modifyIndex":return t.changes.unique!==void 0||t.changes.fields!==void 0?"major":"minor";case"addConstraint":return"major";case"removeConstraint":return"minor";case"modifyConstraint":let n=e?.constraints?.find(i=>"name"in i&&i.name===t.name);return xt(t.changes,n,e)?"major":"minor";case"addField":case"addIndex":case"deprecateField":return"minor";default:throw new Error(`Unhandled change type: ${JSON.stringify(t)}`)}}function kt(t){let e=new Set,n=new Set,i=new Set,a=new Set;for(let r of t)switch(r.type){case"addField":if(n.has(r.id))throw new Error(`Cannot add previously removed field: ${r.id}`);if(e.has(r.id))throw new Error(`Cannot add already modified field: ${r.id}`);if(a.has(r.id))throw new Error(`Cannot add deprecated field: ${r.id}`);i.add(r.id);break;case"removeField":if(i.has(r.id))throw new Error(`Cannot remove newly added field: ${r.id}`);if(e.has(r.id))throw new Error(`Cannot remove modified field: ${r.id}`);if(a.has(r.id))throw new Error(`Cannot remove field that is being deprecated: ${r.id}`);n.add(r.id);break;case"modifyField":if(n.has(r.id))throw new Error(`Cannot modify removed field: ${r.id}`);if(i.has(r.id))throw new Error(`Cannot modify newly added field: ${r.id}`);if(a.has(r.id))throw new Error(`Cannot modify field that is being deprecated: ${r.id}`);e.add(r.id);break;case"deprecateField":if(n.has(r.id))throw new Error(`Cannot deprecate removed field: ${r.id}`);if(i.has(r.id))throw new Error(`Cannot deprecate newly added field: ${r.id}`);if(e.has(r.id))throw new Error(`Cannot deprecate modified field: ${r.id}`);a.add(r.id);break}}function Dt(t){let e=new Set,n=new Set,i=new Set;for(let a of t)switch(a.type){case"addConstraint":let r=a.constraint,s=("name"in r,r.name);if(n.has(s))throw new Error(`Cannot add previously removed constraint: ${s}`);if(e.has(s))throw new Error(`Cannot add already modified constraint: ${s}`);i.add(s);break;case"removeConstraint":if(i.has(a.name))throw new Error(`Cannot remove newly added constraint: ${a.name}`);if(e.has(a.name))throw new Error(`Cannot remove modified constraint: ${a.name}`);n.add(a.name);break;case"modifyConstraint":if(n.has(a.name))throw new Error(`Cannot modify removed constraint: ${a.name}`);if(i.has(a.name))throw new Error(`Cannot modify newly added constraint: ${a.name}`);e.add(a.name);break}}function Te(t,e,n){if(e.length===0)throw new Error("No changes provided");kt(e),Dt(e);let i=St(t),a="patch";for(let r of e){let s=Ct(r,n);if(s==="major"){a="major";break}else s==="minor"&&a==="patch"&&(a="minor")}switch(a){case"major":return`${i.major+1}.0.0`;case"minor":return`${i.major}.${i.minor+1}.0`;case"patch":return`${i.major}.${i.minor}.${i.patch+1}`}}function j(t,e){let n=u=>u.split(".").map(f=>parseInt(f,10)||0),[i,a,r]=n(t),[s,o,c]=n(e);return i-s||a-o||r-c}function At(t){return t.sort(j)}var A=class extends Error{constructor(n,i,a,r){super(n);this.code=i;this.migrationId=a;this.cause=r;this.name="MigrationError"}},Be=(p=>(p.INVALID_SCHEMA="INVALID_SCHEMA",p.INVALID_MIGRATION="INVALID_MIGRATION",p.CHECKSUM_MISMATCH="CHECKSUM_MISMATCH",p.TIMEOUT="TIMEOUT",p.MEMORY_LIMIT="MEMORY_LIMIT",p.CONCURRENT_OPERATION="CONCURRENT_OPERATION",p.TRANSFORM_ERROR="TRANSFORM_ERROR",p.VERSION_NOT_FOUND="VERSION_NOT_FOUND",p.CIRCULAR_DEPENDENCY="CIRCULAR_DEPENDENCY",p.STREAM_ERROR="STREAM_ERROR",p.ROLLBACK_ERROR="ROLLBACK_ERROR",p.MISSING_TRANSFORM="MISSING_TRANSFORM",p))(Be||{}),xe=class t{currentSchema;history=[];migrations=[];isProcessing=!1;constructor(e,n,i){try{if(!z(e))throw new A("Invalid initial schema","INVALID_SCHEMA");if(this.currentSchema=e,n){if(!n.every(a=>ve(a)))throw new A("Invalid migration configuration","INVALID_MIGRATION");this.migrations=n.sort((a,r)=>j(a.schemaVersion,r.schemaVersion))}i&&(this.history=i.sort((a,r)=>j(a.version,r.version)))}catch(a){throw a instanceof A?a:new A("Failed to initialize MigrationEngine","INVALID_SCHEMA",void 0,a)}}data(){return{schema:this.currentSchema,history:this.history,migrations:this.migrations}}async generateChecksum(e){try{let n=JSON.stringify({id:e.id,schemaVersion:e.schemaVersion,changes:e.changes,description:e.description,rollback:e.rollback,createdAt:e.createdAt});return await L(n)}catch(n){throw new A("Checksum generation failed","CHECKSUM_MISMATCH",e.id,n)}}async add(e){if(this.isProcessing)throw new A("Concurrent operation","CONCURRENT_OPERATION");if(!e.changes?.length)throw new A("Migration must include changes","INVALID_MIGRATION");try{e.changes.forEach(i=>Ee(i))}catch(i){throw new A("Invalid schema changes","INVALID_MIGRATION",void 0,i)}let n={id:Date.now().toString(),schemaVersion:this.currentSchema.version,changes:e.changes,description:e.description,status:"pending",rollback:e.rollback,transform:e.transform,createdAt:new Date().toISOString(),checksum:""};n.checksum=await this.generateChecksum(n),this.migrations.push(n)}async dryRun(e,n,i){if(this.isProcessing)throw new A("Concurrent operation","CONCURRENT_OPERATION");try{this.isProcessing=!0;let a={...this.currentSchema},r=this.getRelevantMigrations(n,i),s=r.reduce((c,u)=>{let f=n==="forward"?u.changes:u.rollback||[];return this.applySchemaChanges(c,f,u.id)},a),o=await t.processMigrationList(e,n,r);return{newSchema:s,dataPreview:o}}catch(a){throw a instanceof A?a:new A("Dry run failed","INVALID_SCHEMA",void 0,a)}finally{this.isProcessing=!1}}getRelevantMigrations(e,n){return[...this.migrations].filter(i=>{let a=e==="forward"?"pending":"applied",r=n?j(i.schemaVersion,n)>=0:!0;return i.status===a&&r}).sort((i,a)=>e==="forward"?i.id.localeCompare(a.id):a.id.localeCompare(i.id))}applySchemaChanges(e,n,i){try{let a=Te(e.version,n);return n.map(s=>{try{return he(s,e)}catch(o){throw new A("Invalid schema change","INVALID_SCHEMA",i,o)}}).reduce((s,o)=>{try{return ie(s,o)}catch(c){throw new A("Failed to apply patch","INVALID_SCHEMA",i,c)}},{...e,version:a})}catch(a){throw a instanceof A?a:new A("Schema update failed","INVALID_SCHEMA",i,a)}}async prepareMigration(){let e=this.migrations.filter(n=>n.status==="pending");return await this.validateMigrations(e),e}async migrate(e){if(this.isProcessing)throw new A("Concurrent operation","CONCURRENT_OPERATION");let n=await this.prepareMigration();try{this.isProcessing=!0,this.transformSchema("forward");let i=await t.processMigrationList(e,"forward",n);return this.markMigrationsApplied(n),i}finally{this.isProcessing=!1}}async validateMigrations(e){await Promise.all(e.map(async n=>{let i=await this.generateChecksum(n);if(n.checksum!==i)throw new A("Checksum mismatch","CHECKSUM_MISMATCH",n.id)}))}markMigrationsApplied(e){this.migrations=this.migrations.map(n=>e.some(i=>i.id===n.id)?{...n,status:"applied"}:n)}async rollback(e){if(this.isProcessing)throw new A("Concurrent operation","CONCURRENT_OPERATION");return this.migrations.filter(i=>i.status==="applied").slice(-1)[0]?this.rollbackToVersion(this.history[this.history.length-1]?.version||this.currentSchema.version,e):e}async rollbackToVersion(e,n){if(this.isProcessing)throw new A("Concurrent operation","CONCURRENT_OPERATION");try{let i=this.history.findIndex(o=>o.version===e);if(i===-1)throw new Error(`Version ${e} not found in history`);let a=this.migrations.filter(o=>o.schemaVersion===e&&o.status==="applied").sort((o,c)=>c.id.localeCompare(o.id)),r=this.history.length-i;if(r<0)return n;for(let o=0;o<r;o++)this.transformSchema("backward");let s=await t.processMigrationList(n,"backward",a);return this.migrations=this.migrations.map(o=>o.schemaVersion===e&&o.status==="applied"?{...o,status:"pending"}:o),s}finally{this.isProcessing=!1}}static async processMigrationList(e,n,i){return(await Promise.all(i.map(async s=>{try{let o=await this.resolveTransform(s,n);return{migration:s,transform:o}}catch(o){throw new A(`Failed to resolve transform for migration ${s.id}`,"TRANSFORM_ERROR",s.id,o)}}))).filter(s=>!!s.transform).reduce((s,{migration:o,transform:c})=>s.pipeThrough(new TransformStream({async transform(u,f){try{let b=await c(u);f.enqueue(b)}catch(b){f.error(new A(`Data transformation failed for migration ${o.id}`,"TRANSFORM_ERROR",o.id,b))}}})),e)}static async resolveTransform(e,n){return e.transform?typeof e.transform=="string"?e.transform.startsWith("http://")||e.transform.startsWith("https://")?this.resolveRemoteTransform(e.transform,n):this.resolveLocalTransform(e.transform,n):e.transform[n]:null}static async resolveRemoteTransform(e,n){try{let i=await fetch(e);if(!i.ok)throw new A(`Failed to fetch transform module: ${e}`,"TRANSFORM_ERROR",void 0);let a=await i.text();if(typeof window<"u"){let r=new Blob([a],{type:"application/javascript"});return(await import(URL.createObjectURL(r))).default[n]}else{let{runInNewContext:r}=await import("vm"),s={module:{exports:{}},console};return r(a,s,e),s.module.exports[n]}}catch(i){throw new A(`Failed to load remote transform module: ${e}`,"TRANSFORM_ERROR",void 0,i)}}static async resolveLocalTransform(e,n){try{return(await import(e)).default[n]}catch(i){throw new A(`Failed to import local transform module: ${e}`,"TRANSFORM_ERROR",void 0,i)}}transformSchema(e){try{if(e==="backward"){let i=this.history.pop();if(!i)throw new Error("No previous version");this.currentSchema=i;return}let n=this.migrations.filter(i=>i.status==="pending").flatMap(i=>i.changes);if(!n.length)return;this.history.push(structuredClone(this.currentSchema)),this.currentSchema=n.reduce((i,a)=>this.applySchemaChanges(i,[a]),this.currentSchema)}catch(n){throw n instanceof A?n:new A("Schema transformation failed","INVALID_SCHEMA",void 0,n)}}};var Ke=t=>{let e=[],n=[];return{addField:(i,a)=>{e.push({type:"addField",id:i,definition:a}),n.push({type:"removeField",id:i})},removeField:i=>{e.push({type:"removeField",id:i});let a=t.fields[i];a&&n.push({type:"addField",id:i,definition:a})},modifyField:(i,a)=>{e.push({type:"modifyField",id:i,changes:a});let r=t.fields[i];r&&n.push({type:"modifyField",id:i,changes:r})},deprecateField:i=>{e.push({type:"deprecateField",id:i}),n.push({type:"modifyField",id:i,changes:{deprecated:!1}})},addIndex:i=>{e.push({type:"addIndex",definition:i}),n.push({type:"removeIndex",name:i.name})},removeIndex:i=>{e.push({type:"removeIndex",name:i});let a=t.indexes?.find(r=>r.name===i);a&&n.push({type:"addIndex",definition:a})},modifyIndex:(i,a)=>{e.push({type:"modifyIndex",name:i,changes:a});let r=t.indexes?.find(s=>s.name===i);r&&n.push({type:"modifyIndex",name:i,changes:r})},addConstraint:i=>{e.push({type:"addConstraint",constraint:i}),n.push({type:"removeConstraint",name:i.name})},removeConstraint:i=>{e.push({type:"removeConstraint",name:i});let a=t.constraints?.find(r=>"name"in r&&r.name===i);a&&n.push({type:"addConstraint",constraint:a})},modifyConstraint:(i,a)=>{e.push({type:"modifyConstraint",name:i,changes:a});let r=t.constraints?.find(s=>"name"in s&&s.name===i);r&&n.push({type:"modifyConstraint",name:i,changes:r})},addNestedSchema:(i,a)=>{e.push({type:"addNestedSchema",id:i,definition:a}),n.push({type:"removeNestedSchema",id:i})},removeNestedSchema:i=>{if(e.push({type:"removeNestedSchema",id:i}),!t.nestedSchemas)return;let a=t.nestedSchemas[i];a&&n.push({type:"addNestedSchema",id:i,definition:a})},modifyNestedSchema:(i,a)=>{if(e.push({type:"modifyNestedSchema",id:i,changes:a}),!t.nestedSchemas)return;let r=t.nestedSchemas[i];r&&n.push({type:"modifyNestedSchema",id:i,changes:r})},changes:()=>({migrate:e,rollback:n})}};var Tn=require("@isomorphic-git/lightning-fs"),I=K(require("isomorphic-git"),1),Q=K(require("isomorphic-git/http/web"),1);var Ze=K(require("@isomorphic-git/lightning-fs"),1);function We(t){let e=t.toString(),n=e.substring(e.indexOf("(")+1,e.indexOf(")")),i=e.substring(e.indexOf("{")+1,e.lastIndexOf("}")).trim();return JSON.stringify({params:n,body:i})}function Ye(t){let{params:e,body:n}=JSON.parse(t),i=Object.getPrototypeOf(function*(){}).constructor;return new i(e,n)}function Ce(t){let e=t.toString(),n=e.match(/\(([^)]*)\)\s*=>\s*(.+)/s),i=e.match(/function\s*\(([^)]*)\)\s*{([\s\S]*)}/),a=e.match(/([^(]*)\(([^)]*)\)\s*{([\s\S]*)}/),r,s;return n?(r=n[1],s=n[2].includes("{")?n[2].substring(1,n[2].length-1).trim():`return ${n[2]}`):i?(r=i[1],s=i[2].trim()):a?(r=a[2],s=a[3].trim()):(r=e.substring(e.indexOf("(")+1,e.indexOf(")")),s=e.substring(e.indexOf("{")+1,e.lastIndexOf("}")).trim()),JSON.stringify({params:r,body:s,type:n?"arrow":i?"function":a?"method":"unknown"})}function ke(t){let{params:e,body:n,type:i}=JSON.parse(t),a=new Function(e,n);return i==="arrow"&&Object.defineProperty(a,"toString",{value:()=>`(${e}) => ${n}`,configurable:!0}),a}function Ft(t){let e={},n={};t.hint?.groups&&t.hint.groups.forEach(a=>{n[a.name]={label:a.label,description:a.description}}),De(t.fields,"",t.nestedSchemas||{},e,!0);let i=[];for(let[a,r]of Object.entries(e)){let s=a!=="ungrouped"?n[a]:void 0;i.push({name:a!=="ungrouped"?a:"ungrouped",label:s?.label||"Ungrouped",description:s?.description,fields:r})}return i}function De(t,e,n,i,a,r){if(Array.isArray(t))t.forEach(s=>{let o=s.when?e?`${e}.${s.when?.field}`:s.when?.field:void 0;De(s.fields,e,n,i,a,o?{[o]:s.when?.value}:void 0)});else for(let[s,o]of Object.entries(t)){if(o.hint?.input.ignore)continue;let c=e?`${e}.${o.name}`:o.name,f=o.required===!0&&a,b={...o,name:c,required:f};if(r&&(b.when=r),o.type!=="object"){let p=o.hint?.input?.group||"ungrouped";i[p]||(i[p]=[]),i[p].push(b)}if(o.schema&&"id"in o.schema&&n[o.schema.id]){let p=n[o.schema.id];De(p.fields,c,n,i,f,r)}}}function Pt(t,e){let n={},i=t.nestedSchemas||{};for(let[a,r]of Object.entries(t.fields))n[a]=oe(r,i,e);return n}function oe(t,e,n){if("default"in t&&t.default!==void 0)return t.default;if(n?.resolver){let i=n.resolver(t);if(i!==void 0)return i}switch(t.type){case"string":return;case"number":return;case"boolean":return!1;case"array":return[];case"set":return[];case"enum":if(!t.values||t.values.length===0)throw new Error(`Enum field "${t.name}" requires non-empty values array`);return t.values[0];case"object":if(!t.schema||!("id"in t.schema)||!e[t.schema.id])throw new Error(`Object field "${t.name}" references invalid nested schema`);return Qe(e[t.schema.id],e,n);case"record":return{};case"union":if(!t.schema||!Array.isArray(t.schema)||t.schema.length===0)throw new Error(`Union field "${t.name}" requires non-empty schema array`);let i=n?.discriminator?.[t.name],a=t.schema[0];if(i!==void 0)for(let r of t.schema){let o=e[r.id].fields;if(Mt(o,i)){a=r;break}}return Qe(e[a.id],e,n);case"dynamic":return{};default:throw new Error(`Unsupported field type "${t.type}" for field "${t.name}"`)}}function Mt(t,e){if(Array.isArray(t)){for(let n of t)for(let i of Object.values(n.fields))if(i.type==="enum"&&i.values?.includes(e)||i.default===e)return i}else for(let n of Object.values(t))if(n.type==="enum"&&n.values?.includes(e)||n.default===e)return n}function Qe(t,e,n){let i={},a=n?.discriminator||{};if(Array.isArray(t.fields)){let r=t.fields.filter(o=>!o.when);for(let o of r)for(let[c,u]of Object.entries(o.fields))i[c]=oe(u,e,n);let s=t.fields.filter(o=>o.when);for(let o of s){let c=o.when.field,u=o.when.value;if(a[c]===u)for(let[b,p]of Object.entries(o.fields))i[b]=oe(p,e,n)}}else for(let[r,s]of Object.entries(t.fields))i[r]=oe(s,e,n);return i}var Xe=require("buffer");typeof window<"u"&&(window.Buffer=Xe.Buffer);var Y=class{fs;fsp;rootDir;constructor(e="/registry"){this.fs=new Ze.default(`${e.replace("/","-")}`),this.fsp=this.fs.promises,this.rootDir=e.startsWith("/")?e:`/${e}`}async init(){let e=`${this.rootDir}/registry.json`;(!await this.fileExists(this.rootDir)||!await this.fileExists(e))&&(await this.fsp.mkdir(this.rootDir),await this.fsp.writeFile(e,JSON.stringify({schemas:{},created:new Date().toISOString(),updated:new Date().toISOString()}),"utf8"),await this.fsp.writeFile(`${this.rootDir}/schema-lock.json`,JSON.stringify({updated:new Date().toISOString(),hashes:[]}),"utf8"))}async create({schema:e}){if(!e.name||!e.version||!z(e))throw new Error("Invalid schema");let n=`${this.rootDir}/${e.name}`;if(await this.fileExists(`${n}/schema.json`))throw new Error(`Schema ${e.name} already exists`);return await this.fsp.mkdir(n),await this.fsp.mkdir(`${n}/migrations`),this.saveSchema(e,"create")}async update({schema:e}){if(!e.name||!e.version)throw new Error("Schema must have a name and version");let n=`${this.rootDir}/${e.name}`;if(!await this.fileExists(`${n}/schema.json`))throw new Error(`Schema ${e.name} not found`);return this.saveSchema(e,"update")}async saveSchema(e,n){let i=`${this.rootDir}/${e.name}`,a=await this.processAndStoreMigrations(i,e),r=this.serializeSchema(e);await this.writeSchemaFile(i,r);let s=await L(r);await this.updateIndex(i,e,s,a,n),await this.updateRegistryMetadata(e,n),await this.sync()}async delete({name:e}){let n=`${this.rootDir}/${e}`;if(!await this.fileExists(`${n}/schema.json`))throw new Error(`Schema ${e} not found`);await this.rmdirRecursive(n);let i=await this.readRegistryMetadata();delete i.schemas[e],i.updated=new Date().toISOString(),await this.writeRegistryMetadata(i),await this.sync()}async list(){let e=await this.readRegistryMetadata();return Object.values(e.schemas).map(n=>({name:n.name,version:n.version}))}async schema({name:e,version:n,migrations:i=!1}){let a=`${this.rootDir}/${e}/schema.json`;if(!await this.fileExists(a))return null;let r=this.deserializeSchema(JSON.parse(String(await this.fsp.readFile(a,"utf8")))),s=await this.readSchemaIndex(e);return n&&n!==s.version&&!s.history.some(o=>o.version===n)?null:(i&&(r.migrations=await this.migrations({name:e,version:n})),r)}async stats({schema:e}){return e?this.readSchemaIndex(e):this.readRegistryMetadata()}async sync(){let e={updated:new Date().toISOString(),hashes:[]},n=await this.listFilesRecursive(this.rootDir);for(let i of n)if(i!==`${this.rootDir}/schema-lock.json`&&i.match(new RegExp("/*.git*/"))===null){let a=String(await this.fsp.readFile(i,"utf8"));e.hashes.push([i,await L(a)])}await this.fsp.writeFile(`${this.rootDir}/schema-lock.json`,JSON.stringify(e),"utf8")}async migrations({name:e,version:n}){let i=await this.readSchemaIndex(e),a=n||i.version,r=[];for(let[s,o]of Object.entries(i.migrations)){let c=`${this.rootDir}/${e}/migrations/${o.hash}.json`;if(await this.fileExists(c)){let u=JSON.parse(String(await this.fsp.readFile(c,"utf8")));j(u.schemaVersion,a)<=0&&r.push(this.deserializeMigration(u))}}return r.sort((s,o)=>j(s.schemaVersion,o.schemaVersion))}async history({name:e}){let n=await this.readSchemaIndex(e),i=this.deserializeSchema(JSON.parse(String(await this.fsp.readFile(`${this.rootDir}/${e}/schema.json`,"utf8"))));return Promise.all(n.history.map(async a=>({...i,version:a.version,description:a.description,migrations:await this.migrations({name:e,version:a.version})})))}async processAndStoreMigrations(e,n){return Promise.all((n.migrations||[]).map(async i=>{let a={...i};if(i.transform?.forward){let o=i.transform;a.transform={forward:Ce(o.forward),backward:Ce(o.backward||(c=>c))}}let r=JSON.stringify(a),s=await L(r);return await this.fsp.writeFile(`${e}/migrations/${s}.json`,r,"utf8"),{id:i.id,hash:s,checksum:i.checksum}}))}serializeSchema(e){return JSON.stringify({...e,migrations:void 0,mock:e.mock?We(e.mock):null})}deserializeSchema(e){return e.mock&&(e.mock=Ye(e.mock)),e}deserializeMigration(e){return e.transform?.forward&&(e.transform={forward:ke(e.transform.forward),backward:ke(e.transform.backward)}),e}async writeSchemaFile(e,n){let i=`${e}/schema.json`;return await this.fsp.writeFile(i,n,"utf8"),i}async updateIndex(e,n,i,a,r){let s=`${e}/index.json`,o=r==="create"?{schema:n.name,version:n.version,history:[],migrations:{}}:JSON.parse(String(await this.fsp.readFile(s,"utf8")));o.history.push({version:n.version,hash:i,date:new Date().toISOString(),description:n.description||(r==="create"?"Initial version":"Updated version"),migrations:a.map(c=>c.id),predicates:[],changelog:[]}),o.version=n.version,a.forEach(({id:c,hash:u,checksum:f})=>{o.migrations[c]={hash:u,checksum:f}}),await this.fsp.writeFile(s,JSON.stringify(o),"utf8")}async updateRegistryMetadata(e,n){let i=await this.readRegistryMetadata();i.schemas[e.name]={name:e.name,version:e.version,description:e.description||"",created:n==="create"?new Date().toISOString():i.schemas[e.name]?.created,updated:new Date().toISOString()},i.updated=new Date().toISOString(),await this.writeRegistryMetadata(i)}async readRegistryMetadata(){return JSON.parse(String(await this.fsp.readFile(`${this.rootDir}/registry.json`,"utf8")))}async writeRegistryMetadata(e){await this.fsp.writeFile(`${this.rootDir}/registry.json`,JSON.stringify(e),"utf8")}async readSchemaIndex(e){let n=`${this.rootDir}/${e}/index.json`;if(!await this.fileExists(n))throw new Error(`Schema ${e} not found`);return JSON.parse(String(await this.fsp.readFile(n,"utf8")))}async fileExists(e){try{return await this.fsp.stat(e),!0}catch{return!1}}async rmdirRecursive(e){let n=await this.fsp.readdir(e);for(let i of n){let a=`${e}/${i}`;(await this.fsp.stat(a)).isDirectory()?await this.rmdirRecursive(a):await this.fsp.unlink(a)}await this.fsp.rmdir(e)}async listFilesRecursive(e){let n=[],i=await this.fsp.readdir(e);for(let a of i){let r=`${e}/${a}`;(await this.fsp.stat(r)).isDirectory()?n.push(...await this.listFilesRecursive(r)):n.push(r)}return n}};var Ae=class{locks=new Map;async acquire(e){let n,i=new Promise(r=>{n=r}),a=this.locks.get(e)||Promise.resolve();return this.locks.set(e,a.then(()=>i)),await a,n}async withLock(e,n){let i=await this.acquire(e);try{return await n()}finally{i()}}},Re=class{cache=new Map;ttl;constructor(e=3e4){this.ttl=e}get(e){let n=this.cache.get(e);return!n||Date.now()-n.timestamp>this.ttl?(this.cache.delete(e),null):n.schema}set(e,n){this.cache.set(e,{schema:n,timestamp:Date.now()})}invalidate(e){e?this.cache.delete(e):this.cache.clear()}};async function ce(t,e){try{return await t()}catch(n){throw console.error(`${e}:`,n),new Error(`${e}: ${n.message}`)}}async function de(t,e,n,i,a){await i.init(),await I.default.init({fs:t,dir:e,defaultBranch:n}),await I.default.setConfig({fs:t,dir:e,path:"core.autocrlf",value:"false"}),await I.default.setConfig({fs:t,dir:e,path:"core.eol",value:"lf"}),await I.default.add({fs:t,dir:e,filepath:"."}),await I.default.commit({fs:t,dir:e,message:"chore: initial commit",author:a})}async function Ot(t="/registry",e={}){let n=e.mainBranch||"main",i=e.remote,a=e.createRemote??!1,r=e.author||{name:"SchemaRegistry",email:"system@example.com"},s=e.proxy?[e.proxy]:["https://cors.isomorphic-git.org"],o=0,c=new Y(t),u=c.fs,f=t.startsWith("/")?t:`/${t}`,b=new Ae,p=new Re(e.cacheTtl);async function v(d,l){let w=o;do{let T=s[o];try{return await d(T)}catch(D){if(console.warn(`Failed with proxy ${T}: ${D.message}`),o=(o+1)%s.length,o===w)throw new Error(`${l}: All CORS proxies failed`)}}while(!0)}async function C(d,l="."){return ce(async()=>(await I.default.add({fs:u,dir:f,filepath:l}),(await I.default.statusMatrix({fs:u,dir:f})).some(([T,D,k])=>D!==k)?await I.default.commit({fs:u,dir:f,message:d,author:r}):null),"Failed to commit changes")}async function m(d,l,w){return ce(async()=>{if(await g(d))throw new Error(`Tag ${d} already exists`);await I.default.annotatedTag({fs:u,dir:f,ref:d,message:l,tagger:r,object:w})},`Failed to create tag ${d}`)}async function g(d){try{return(await I.default.listTags({fs:u,dir:f})).includes(d)}catch{return!1}}async function y(d){return(await I.default.listTags({fs:u,dir:f})).filter(T=>T.startsWith(d))}async function $(d){return ce(async()=>{let w=(await I.default.listTags({fs:u,dir:f})).filter(T=>T.startsWith(d));for(let T of w)await I.default.deleteTag({fs:u,dir:f,ref:T});return w},`Failed to delete tags with prefix ${d}`)}async function h(d){return ce(async()=>{await I.default.checkout({fs:u,dir:f,ref:d})},`Failed to checkout ${d}`)}async function E(d,{delete:l=!1,force:w=!1}={}){i&&await v(async T=>{await I.default.push({fs:u,http:Q.default,dir:f,ref:d,remote:"origin",url:i.authURL(),onAuth:()=>i.credentials(),corsProxy:T,delete:l,force:w})},`Failed to push ${d}`)}async function S(d,l=!0){i&&await v(async w=>{try{await I.default.pull({fs:u,http:Q.default,dir:f,ref:d,author:r,remote:"origin",url:i.authURL(),onAuth:()=>i.credentials(),corsProxy:w,fastForwardOnly:!0})}catch(T){if(!l)console.warn(`Fast-forward pull failed for ${d}, attempting regular pull`),await I.default.pull({fs:u,http:Q.default,dir:f,ref:d,author:r,remote:"origin",url:i.authURL(),onAuth:()=>i.credentials(),corsProxy:w,fastForwardOnly:!1});else throw T}},`Failed to pull ${d}`)}if(i&&!await c.fileExists(f)){let d=f.slice(1);if(await i.exists({name:d}).catch(()=>!1))await v(async w=>{await I.default.clone({fs:u,http:Q.default,dir:f,url:i.authURL(),ref:n,singleBranch:!0,depth:1,onAuth:()=>i.credentials(),corsProxy:w})},"Failed to clone repository");else if(a)try{i=await i.create({name:d,private:!0}),await de(u,f,n,c,r),await I.default.addRemote({fs:u,dir:f,remote:"origin",url:i.url()}),await E(n)}catch(w){console.error("Failed to create and push to remote repository:",w),await de(u,f,n,c,r)}else await de(u,f,n,c,r)}else await de(u,f,n,c,r);return{async init(){return b.withLock("init",()=>c.init())},async create(d){let{name:l,version:w}=d.schema;return b.withLock(`schema:${l}`,async()=>{await h(n),await c.create(d);let T=await C(`feat: create schema ${l}`);T&&await m(`${l}-${w}`,`Version ${w}`,T),p.invalidate(l)})},async update(d){let{name:l,version:w}=d.schema;return b.withLock(`schema:${l}`,async()=>{await h(n),await c.update(d);let T=await C(`fix: update schema ${l}`);T&&await m(`${l}-${w}`,`Version ${w}`,T),p.invalidate(l)})},async delete(d){let{name:l}=d;return b.withLock(`schema:${l}`,async()=>{await h(n),await I.default.remove({fs:u,dir:f,filepath:l}),await c.delete(d);let w=await C(`chore: delete schema ${l}`),T=await y(`${l}-`);if(i&&w){await E(n);for(let D of T)await E(D,{delete:!0,force:!0}).catch(k=>console.warn(`Failed to delete remote tag ${D}: ${k.message}`))}await $(`${l}-`),p.invalidate(l)})},async list(){return b.withLock("list",()=>c.list())},async schema(d){let{name:l,version:w}=d,T=`${l}-${w||"latest"}-${d.migrations||!1}`,D=p.get(T);return D||b.withLock(`schema:${l}`,async()=>{if(w){let R=`${l}-${w}`;if(await g(R))await h(R);else throw new Error(`Version ${w} of schema ${l} not found`)}else await h(n);let k=await c.schema(d);return p.set(T,k),k})},async stats(d){return b.withLock("stats",()=>c.stats(d))},async sync(){return b.withLock("sync",async()=>{if(await h(n),await c.sync(),await C("chore: sync local changes"),i){await S(n,!1),await E(n);let d=await I.default.listTags({fs:u,dir:f});for(let w of d)await E(w,{force:!0});let l=await I.default.listTags({fs:u,dir:f});for(let w of l)d.includes(w)||await E(w,{delete:!0})}p.invalidate()})},async migrations(d){let{name:l,version:w}=d,T=`migrations-${l}-${w||"latest"}`,D=p.get(T);return D||b.withLock(`migrations:${l}`,async()=>{if(w){let R=`${l}-${w}`;if(await g(R))await h(R);else throw new Error(`Version ${w} of schema ${l} not found`)}else await h(n);let k=await c.migrations(d);return p.set(T,k),k})},async history(d){let{name:l}=d,w=`history-${l}`,T=p.get(w);return T||b.withLock(`history:${l}`,async()=>{await h(n);let D=await c.history(d);return p.set(w,D),D})}}}function O(t){return"predicate"in t}function jt(t,e=!0,n=!0){let i="",a=n?"export ":"",r=new Map,s=new Map,o=(C,m=[])=>{if(!e||!C&&!m.length)return"";let g=C?[C]:[];return m.forEach(y=>g.push(y)),`/**
2
2
  * ${g.join(`
3
3
  * `)}
4
4
  */
package/index.js CHANGED
@@ -1,4 +1,4 @@
1
- import{createEventBus as Zt}from"@asaidimu/events";import{createEventBus as Vt}from"@asaidimu/events";import{createMatcher as Ut,createPaginator as Lt,createProjector as _t,createSorter as Ht}from"@asaidimu/query";var M=class extends Error{constructor(n,i){super(n);this.operation=i;this.name="JsonPatchError"}};function Q(t){let e=Ge(t);return e===""?[]:e.substring(1).split("/").map(ze)}function Ge(t){return t===""||t==="/"?"":t.startsWith("/")?"/"+t.substring(1).split("/").map(Y).join("/"):"/"+t.split(".").map(Y).join("/")}function Y(t){return t.replace(/~/g,"~0").replace(/\//g,"~1")}function ze(t){return t.replace(/~1/g,"/").replace(/~0/g,"~")}var j=new Map;function Z(t,e){let n=t;for(let i of e){if(n===null||typeof n!="object")throw new M(`Invalid path - parent not found at ${i}`);if(Array.isArray(n)){let a=i==="-"?n.length:parseInt(i);if(isNaN(a)||a<0||a>n.length)throw new M(`Invalid array index: ${i}`);n=n[a]}else{if(!n.hasOwnProperty(i))throw new M(`Property ${i} not found`);n=n[i]}}return n}function oe(t,e){let n=j.get(e)||Q(e);if(j.set(e,n),n.length===0)return t;let i=Z(t,n.slice(0,-1)),a=n[n.length-1];if(Array.isArray(i)){let r=parseInt(a);if(isNaN(r)||r<0||r>=i.length)throw new M(`Invalid array index: ${a}`);return i[r]}return i[a]}function Be(t,e,n){let i=j.get(e)||Q(e);j.set(e,i);let a=Z(t,i.slice(0,-1)),r=i[i.length-1];return Array.isArray(a)?a.splice(0,a.length,...a.filter(s=>s!==n)):a[r]===n&&delete a[r],t}function W(t,e,n){let i=j.get(e)||Q(e);if(j.set(e,i),i.length===0)return n;let a=i.slice(0,-1),r=i[i.length-1],s=Z(t,a);if(Array.isArray(s))if(r==="-")s.push(n);else{let o=parseInt(r);if(o<0||o>s.length)throw new M(`Invalid array index: ${r}`);s.splice(o,0,n)}else s[r]=n;return t}function ce(t,e){let n=j.get(e)||Q(e);if(j.set(e,n),n.length===0)return;let i=Z(t,n.slice(0,-1)),a=n[n.length-1];if(Array.isArray(i)){let r=parseInt(a);i.splice(r,1)}else delete i[a];return t}function de(t,e){let n=JSON.parse(JSON.stringify(t));for(let i of e)try{switch(i.op){case"add":n=W(n,i.path,i.value);break;case"remove":n=ce(n,i.path);break;case"removeValue":n=Be(n,i.path,i.value);break;case"replace":n=W(ce(n,i.path),i.path,i.value);break;case"copy":{let a=oe(n,i.from);n=W(n,i.path,JSON.parse(JSON.stringify(a)));break}case"move":{let a=oe(n,i.from);n=W(n,i.path,a),n=ce(n,i.from);break}case"test":{let a=oe(n,i.path);if(JSON.stringify(a)!==JSON.stringify(i.value))throw new M("Test operation failed");break}default:throw new M(`Unsupported operation: ${i.op}`)}}catch(a){throw a instanceof M&&(a.operation=i),a}return n}function yt(t,e){let n=[];return ue(t,e,"",n),n}function ue(t,e,n,i){if(t!==e){if(typeof t!=typeof e||Array.isArray(t)!==Array.isArray(e)){i.push({op:"replace",path:n,value:e});return}typeof t=="object"&&t!==null?Array.isArray(t)?Ke(t,e,n,i):We(t,e,n,i):t!==e&&i.push({op:"replace",path:n,value:e})}}function Ke(t,e,n,i){let a=Math.max(t.length,e.length);for(let r=0;r<a;r++){let s=`${n}/${r}`;r>=t.length?i.push({op:"add",path:`${n}/-`,value:e[r]}):r>=e.length?i.push({op:"remove",path:s}):ue(t[r],e[r],s,i)}}function We(t,e,n,i){let a=new Set,r=Object.keys(t),s=Object.keys(e);for(let o of r){let c=Y(o),u=n?`${n}/${c}`:`/${c}`;e.hasOwnProperty(o)?(ue(t[o],e[o],u,i),a.add(o)):i.push({op:"remove",path:u})}for(let o of s)if(!a.has(o)){let c=Y(o),u=n?`${n}/${c}`:`/${c}`;i.push({op:"add",path:u,value:e[o]})}}function ve(t,e){let n=[];switch(t.type){case"addField":n.push({op:"add",path:`/fields/${t.id}`,value:t.definition});break;case"removeField":n.push({op:"remove",path:`/fields/${t.id}`});break;case"modifyField":{let i=`/fields/${t.id}`;Object.entries(t.changes).forEach(([a,r])=>{typeof r=="object"&&r!==null&&!Array.isArray(r)?n.push({op:"replace",path:`${i}/${a}`,value:r}):n.push({op:"replace",path:`${i}/${a}`,value:r})});break}case"deprecateField":n.push({op:"add",path:`/fields/${t.id}/deprecated`,value:!0});break;case"addIndex":e.indexes||n.push({op:"add",path:"/indexes",value:[]}),n.push({op:"add",path:"/indexes/-",value:t.definition});break;case"removeIndex":{let i=e.indexes?.findIndex(a=>a.name===t.name);i!==void 0&&i>=0&&n.push({op:"remove",path:`/indexes/${i}`});break}case"modifyIndex":{let i=e.indexes?.findIndex(a=>a.name===t.name);i!==void 0&&i>=0&&Object.entries(t.changes).forEach(([a,r])=>{n.push({op:"replace",path:`/indexes/${i}/${a}`,value:r})});break}case"addConstraint":e.constraints||n.push({op:"add",path:"/constraints",value:[]}),Array.isArray(t.constraint)?t.constraint.forEach(i=>{n.push({op:"add",path:"/constraints/-",value:i})}):n.push({op:"add",path:"/constraints/-",value:t.constraint});break;case"removeConstraint":{let i=e.constraints?.findIndex(a=>Array.isArray(a)?a.some(r=>r.name===t.name):a.name===t.name);i!==void 0&&i>=0&&n.push({op:"remove",path:`/constraints/${i}`});break}case"modifyConstraint":{let i=Ye(e,t.name);i&&Object.entries(t.changes).forEach(([a,r])=>{n.push({op:"replace",path:`${i}/${a}`,value:r})});break}}return n}function Ye(t,e){if(!t.constraints)return null;for(let n=0;n<t.constraints.length;n++){let i=t.constraints[n];if(i.name===e)return`/constraints/${n}`;if(Ee(i)){let a=Te(i.rules,e);if(a)return`/constraints/${n}${a}`}}return null}function Ee(t){return t&&"operator"in t&&"rules"in t}function Te(t,e){for(let n=0;n<t.length;n++){let i=t[n];if("name"in i&&i.name===e)return`/rules/${n}`;if(Ee(i)){let a=Te(i.rules,e);if(a)return`/rules/${n}${a}`}}return null}function xe(t,e){let n={...t};return fe(t)&&fe(e)&&Object.keys(e).forEach(i=>{fe(e[i])?i in t?n[i]=xe(t[i],e[i]):Object.assign(n,{[i]:e[i]}):Object.assign(n,{[i]:e[i]})}),n}function fe(t){return t&&typeof t=="object"&&!Array.isArray(t)}var le=new Map;function L(t){return t instanceof RegExp?t.toString().slice(1,-1):JSON.stringify(t)}function Qe(t,e){let n=o=>({value:o}),i=o=>({issues:o}),a=(o,c,u,f)=>{switch(c){case"string":return typeof o!="string"?[{message:`Expected string, got ${typeof o}`,path:u}]:[];case"number":return typeof o!="number"||isNaN(o)?[{message:`Expected number, got ${typeof o}`,path:u}]:[];case"boolean":return typeof o!="boolean"?[{message:`Expected boolean, got ${typeof o}`,path:u}]:[];case"array":return Array.isArray(o)?[]:[{message:`Expected array, got ${typeof o}`,path:u}];case"set":return!Array.isArray(o)||new Set(o).size!==o.length?[{message:`Expected unique array, got ${typeof o}`,path:u}]:[];case"enum":return f?.values?f.values.includes(o)?[]:[{message:`Expected one of ${JSON.stringify(f.values)}, got ${o}`,path:u}]:[{message:"Enum type requires 'values' definition",path:u}];case"object":return typeof o!="object"||o===null||Array.isArray(o)?[{message:`Expected object, got ${typeof o}`,path:u}]:[];case"record":return typeof o!="object"||o===null||Array.isArray(o)?[{message:`Expected record (object), got ${typeof o}`,path:u}]:[];case"union":return typeof o!="object"||o===null||Array.isArray(o)?[{message:`Expected union (object), got ${typeof o}`,path:u}]:[];case"dynamic":return console.warn("Deprecated: 'dynamic' type used. Use 'record' instead."),typeof o!="object"||o===null||Array.isArray(o)?[{message:`Expected record (object), got ${typeof o}`,path:u}]:[];default:return[{message:`Unknown type '${c}'`,path:u}]}};function r(o,c,u,f,b){let p=[],v=o.rules.map((m,g)=>{let y=[...f,`rules[${g}]`],$=`${m.name}@${y.join(".")}`;if("rules"in m){if(b.has($))return!0;b.add($);let h=r(m,c,u,y,b);return p.push(...h),b.delete($),h.length===0}else{let h=u[m.predicate];if(!h)return p.push({message:`Predicate '${m.predicate}' not found`,path:y}),!1;let E=`${m.predicate}:${JSON.stringify(m.parameters)}:${JSON.stringify(c[m.field])}`;if(le.has(E)){let d=le.get(E);return d||p.push({message:m.errorMessage||`Constraint '${m.name}' failed with params ${L(m.parameters)}`,path:y}),d}let S=h({data:c,field:m.field,arguments:m.parameters});return le.set(E,S),S||p.push({message:m.errorMessage||`Constraint '${m.name}' failed with params ${L(m.parameters)}`,path:y}),S}});return(()=>{switch(o.operator){case"and":return v.every(m=>m);case"or":return v.some(m=>m);case"not":return!v.every(m=>m);case"nor":return!v.some(m=>m);case"xor":return v.filter(m=>m).length===1}})()||p.push({message:`Constraint group '${o.name}' failed`,path:f}),p}function s(o,c,u,f,b,p=new Set){let v=[];if("type"in c&&!("fields"in c)){let g=f.length>0?o[f[f.length-1]]:o;return v.push(...a(g,c.type,f,{values:c.values})),c.constraints&&c.constraints.forEach((y,$)=>{if("rules"in y)v.push(...r(y,{value:g},u,[...f,`constraints[${$}]`],p));else{let h=u[y.predicate];h?h({data:{value:g},field:"value",arguments:y.parameters})||v.push({message:y.errorMessage||`Constraint '${y.name}' failed with params ${L(y.parameters)}`,path:[...f,`constraints[${$}]`]}):v.push({message:`Predicate '${y.predicate}' not found`,path:[...f,`constraints[${$}]`]})}}),v}let C={};if("concrete"in c)if(c.concrete===!0||!Array.isArray(c.fields))C=c.fields;else{let g=c.fields,y=g.find(h=>!h.when);y&&Object.assign(C,y.fields);let $=g.find(h=>h.when&&o[h.when.field]!==void 0&&o[h.when.field]===h.when.value);if($)Object.assign(C,$.fields);else if(!y)return v.push({message:"No matching field set found for discriminated schema",path:f}),v}else C=c.fields;let m=new Set(Object.values(C).map(g=>g.name));Object.entries(C).forEach(([g,y])=>{let $=[...f,y.name],h=Object.hasOwnProperty.call(o,y.name)?o[y.name]:y.default!==void 0?y.default:void 0;y.required&&h==null&&v.push({message:`Field '${y.name}' is required`,path:$});let E=y.schema||y.nestedSchema;if(y.type==="object"&&E&&!Array.isArray(E)){let S=b[E.id];if(S)if(p.has(E.id))v.push({message:`Circular reference detected at '${E.id}'`,path:$});else{p.add(E.id);let d=h&&typeof h=="object"&&!Array.isArray(h)?h:{};v.push(...s(d,S,u,$,b,p)),E.constraints?.forEach((l,w)=>{if("rules"in l)v.push(...r(l,d,u,[...$,`constraints[${w}]`],p));else{let T=u[l.predicate];T?T({data:d,field:void 0,arguments:l.parameters})||v.push({message:l.errorMessage||`Constraint '${l.name}' failed with params ${L(l.parameters)}`,path:[...$,`constraints[${w}]`]}):v.push({message:`Predicate '${l.predicate}' not found`,path:[...$,`constraints[${w}]`]})}}),p.delete(E.id)}else v.push({message:`Nested schema '${E.id}' not found`,path:$})}if(y.type==="union"&&E&&Array.isArray(E)){let S=!1,d=[];E.forEach((l,w)=>{let T=b[l.id];if(T)if(p.has(l.id))d.push({message:`Circular reference detected at '${l.id}'`,path:[...$,w.toString()]});else{p.add(l.id);let D=h&&typeof h=="object"&&!Array.isArray(h)?h:{},k=s(D,T,u,$,b,new Set(p));k.length===0&&h!==void 0?(S=!0,l.constraints?.forEach((R,F)=>{if("rules"in R){let P=r(R,D,u,[...$,`constraints[${F}]`],p);P.length>0&&(S=!1,d.push(...P))}else{let P=u[R.predicate];P&&!P({data:D,field:void 0,arguments:R.parameters})&&(S=!1,d.push({message:R.errorMessage||`Constraint '${R.name}' failed`,path:[...$,`constraints[${F}]`]}))}})):h===void 0&&d.push(...k.filter(R=>R.message.includes("is required"))),p.delete(l.id)}else d.push({message:`Nested schema '${l.id}' not found`,path:[...$,w.toString()]})}),!S&&h!==void 0?(v.push({message:"Value does not match any union schema",path:$}),v.push(...d)):h===void 0&&v.push(...d)}h!==void 0&&(v.push(...a(h,y.type,$,{values:y.values})),(y.type==="array"||y.type==="set")&&Array.isArray(h)&&(y.constraints?.forEach((S,d)=>{let l=u[S.predicate];l&&!l({data:{[y.name]:h},field:y.name,arguments:S.parameters})&&v.push({message:S.errorMessage||`Constraint '${S.name}' failed for field '${y.name}'`,path:[...$,`constraints[${d}]`]})}),y.itemsType&&h.forEach((S,d)=>v.push(...a(S,y.itemsType,[...$,d.toString()]))),E&&!Array.isArray(E)&&(b[E.id]?h.forEach((S,d)=>{typeof S=="object"&&S!==null&&(p.has(E.id)?v.push({message:`Circular reference detected at '${E.id}'`,path:[...$,d.toString()]}):(p.add(E.id),v.push(...s(S,b[E.id],u,[...$,d.toString()],b,p)),p.delete(E.id)))}):v.push({message:`Nested schema '${E.id}' not found`,path:$}))),y.constraints?.forEach((S,d)=>{if("rules"in S)v.push(...r(S,o,u,[...$,`constraints[${d}]`],p));else{let l=u[S.predicate];l?l({data:o,field:y.name,arguments:S.parameters})||v.push({message:S.errorMessage||`Constraint '${S.name}' failed for field '${y.name}' with params ${L(S.parameters)}`,path:[...$,`constraints[${d}]`]}):v.push({message:`Predicate '${S.predicate}' not found`,path:[...$,`constraints[${d}]`]})}}))});for(let g in o)Object.hasOwnProperty.call(o,g)&&!m.has(g)&&v.push({message:`Unexpected field '${g}'`,path:[...f,g]});return c.constraints?.forEach((g,y)=>{if("rules"in g)v.push(...r(g,o,u,[...f,`constraints[${y}]`],p));else{let $=u[g.predicate];$?$({data:o,field:g.field,arguments:g.parameters})||v.push({message:g.errorMessage||`Constraint '${g.name}' failed with params ${L(g.parameters)}`,path:[...f,`constraints[${y}]`]}):v.push({message:`Predicate '${g.predicate}' not found`,path:[...f,`constraints[${y}]`]})}}),v}return t.version!=="1.0.0"&&console.warn(`Schema version '${t.version}' may require migrations. Validator assumes version 1.0.0.`),{"~standard":{version:1,vendor:"@asaidimu/anansi",validate:o=>{if(typeof o!="object"||o===null)return i([{message:"Input must be an object",path:[]}]);let c=o,u=s(c,t,e,[],t.nestedSchemas||{});return u.length>0?i(u):n(c)},types:{input:{},output:{}}}}}function wt(t){return async e=>{let n=t.validate(e);if(n instanceof Promise&&(n=await n),"value"in n)return{values:n.value,errors:{}};let i={};return n.issues.forEach(a=>{if(!a.path)return;let r=a.path.filter(o=>!o.includes("constraints")),s=i;for(let o=0;o<r.length;o++){let c=r[o];o===r.length-1?s[c]={type:"validation",message:a.message}:(s[c]=s[c]||{},s=s[c])}}),{values:{},errors:i}}}var _=class extends Error{constructor(n,i){super(n);this.errors=i;this.name="SchemaValidationError"}};var he=t=>({value:t}),H=t=>({issues:t}),x=(t,e,n=!0)=>t===void 0&&!n?[]:typeof t!="string"||t.trim()===""?[{message:"Must be a non-empty string",path:[e]}]:[],X=(t,e)=>{let n=["string","number","boolean","array","set","enum","object","record","union","dynamic"];return typeof t!="string"||!n.includes(t)?[{message:`Must be one of ${n.join(", ")}`,path:[e]}]:t==="dynamic"?[{message:"Field type 'dynamic' is deprecated; use 'record' instead",path:[e]}]:[]},Ze=(t,e)=>{let n=["normal","unique","btree","hash","spatial","fulltext","gi","expression","composite"];return typeof t!="string"||!n.includes(t)?[{message:`Must be one of ${n.join(", ")}`,path:[e]}]:[]},Ce=(t,e)=>{let n=["and","or","not","nor","xor"];return typeof t!="string"||!n.includes(t)?[{message:`Must be one of ${n.join(", ")}`,path:[e]}]:[]},B=(t,e,n=!1)=>t===void 0&&!n?[]:typeof t!="boolean"?[{message:"Must be a boolean",path:[e]}]:[],Xe=(t,e,n)=>t===void 0?[]:[],pe=(t,e,n)=>{let i=[],a=["predicate","name"],r=["type","predicate","field","parameters","name","description","errorMessage"],s=t;return a.forEach(o=>{s[o]===void 0&&i.push({message:`${o} is required`,path:[`${n}.${o}`]})}),Object.keys(s).forEach(o=>{r.includes(o)||i.push({message:`Unknown property ${o}`,path:[`${n}.${o}`]})}),i.push(...x(t.name,`${n}.name`)),i.push(...x(t.predicate,`${n}.predicate`)),t.field!==void 0&&typeof t.field!="string"&&i.push({message:"Field must be a string",path:[`${n}.field`]}),t.parameters!==void 0&&i.push(...Xe(t.parameters,e,`${n}.parameters`)),i.push(...x(t.description,`${n}.description`,!1)),i.push(...x(t.errorMessage,`${n}.errorMessage`,!1)),i},ye=(t,e,n)=>{let i=[],a=["name","operator","rules"],r=a,s=t;return a.forEach(o=>{s[o]===void 0&&i.push({message:`${o} is required`,path:[`${n}.${o}`]})}),Object.keys(s).forEach(o=>{r.includes(o)||i.push({message:`Unknown property ${o}`,path:[`${n}.${o}`]})}),i.push(...x(t.name,`${n}.name`)),i.push(...Ce(t.operator,`${n}.operator`)),!Array.isArray(t.rules)||t.rules.length===0?i.push({message:"Rules must be a non-empty array",path:[`${n}.rules`]}):t.rules.forEach((o,c)=>{"rules"in o?i.push(...ye(o,e,`${n}.rules[${c}]`)):i.push(...pe(o,e,`${n}.rules[${c}]`))}),i},N=(t,e,n)=>{if(!Array.isArray(t))return[{message:"Must be an array",path:[n]}];let i=[];return t.forEach((a,r)=>{"rules"in a?i.push(...ye(a,e,`${n}[${r}]`)):i.push(...pe(a,e,`${n}[${r}]`))}),i},ke=(t,e)=>{let n=[],i=["operator","field"],a=["operator","field","value","conditions"],r=t;return i.forEach(s=>{r[s]===void 0&&n.push({message:`${s} is required`,path:[`${e}.${s}`]})}),Object.keys(r).forEach(s=>{a.includes(s)||n.push({message:`Unknown property ${s}`,path:[`${e}.${s}`]})}),n.push(...Ce(t.operator,`${e}.operator`)),n.push(...x(t.field,`${e}.field`)),t.conditions!==void 0&&(Array.isArray(t.conditions)?t.conditions.forEach((s,o)=>n.push(...ke(s,`${e}.conditions[${o}]`))):n.push({message:"Conditions must be an array",path:[`${e}.conditions`]})),n},De=(t,e)=>{let n=[],i=["fields","type","name"],a=["fields","type","unique","partial","description","order","name"],r=t;return i.forEach(s=>{r[s]===void 0&&n.push({message:`${s} is required`,path:[`${e}.${s}`]})}),Object.keys(r).forEach(s=>{a.includes(s)||n.push({message:`Unknown property ${s}`,path:[`${e}.${s}`]})}),n.push(...x(t.name,`${e}.name`)),n.push(...Ze(t.type,`${e}.type`)),(!Array.isArray(t.fields)||t.fields.length===0||!t.fields.every(s=>typeof s=="string"))&&n.push({message:"Fields must be a non-empty array of strings",path:[`${e}.fields`]}),n.push(...B(t.unique,`${e}.unique`,!1)),t.partial&&n.push(...ke(t.partial,`${e}.partial`)),n.push(...x(t.description,`${e}.description`,!1)),t.order!==void 0&&!["asc","desc"].includes(t.order)&&n.push({message:"Order must be 'asc' or 'desc'",path:[`${e}.order`]}),n},J=(t,e)=>{if(t===void 0)return[];if(!Array.isArray(t))return[{message:"Must be an array",path:[e]}];let n=[];return t.forEach((i,a)=>n.push(...De(i,`${e}[${a}]`))),n},Ae=(t,e,n,i,a)=>{let r=[];return t===void 0?[]:(n==="union"&&Array.isArray(t)?(t.length===0&&r.push({message:"Schema array must not be empty for union type",path:[e]}),t.forEach((s,o)=>{let c=`${e}[${o}]`;r.push(...x(s.id,`${c}.id`)),i.includes(s.id)||r.push({message:`Schema ID '${s.id}' must match a nestedSchemas key`,path:[`${c}.id`]}),s.constraints&&r.push(...N(s.constraints,"dynamic",`${c}.constraints`)),s.indexes&&r.push(...J(s.indexes,`${c}.indexes`))})):(n==="object"||n==="array"&&a==="object")&&!Array.isArray(t)?(r.push(...x(t.id,`${e}.id`)),i.includes(t.id)||r.push({message:`Schema ID '${t.id}' must match a nestedSchemas key`,path:[`${e}.id`]}),t.constraints&&r.push(...N(t.constraints,"dynamic",`${e}.constraints`)),t.indexes&&r.push(...J(t.indexes,`${e}.indexes`))):r.push({message:"Schema is only valid for 'object', 'union', or 'array' with itemsType 'object'",path:[e]}),r)},Re=(t,e,n)=>{if(t===void 0)return[];switch(e){case"string":if(typeof t!="string")return[{message:"Default must be a string",path:[n]}];break;case"number":if(typeof t!="number")return[{message:"Default must be a number",path:[n]}];break;case"boolean":if(typeof t!="boolean")return[{message:"Default must be a boolean",path:[n]}];break;case"array":case"set":if(!Array.isArray(t))return[{message:"Default must be an array",path:[n]}];break;case"enum":if(!Array.isArray(t)||!t.every(i=>typeof i=="string"||typeof i=="number"))return[{message:"Default must be an array of strings or numbers",path:[n]}];break;case"object":case"record":if(typeof t!="object"||t===null)return[{message:"Default must be an object",path:[n]}];break;case"union":case"dynamic":return[]}return[]},Ie=(t,e)=>t===void 0?[]:typeof t!="object"||t===null?[{message:"Hint must be an object",path:[e]}]:"input"in t&&typeof t.input!="object"?[{message:"Hint.input must be an object",path:[`${e}.input`]}]:[],ee=(t,e,n)=>{let i=[],a=["name","type"],r=["name","type","required","constraints","default","values","schema","itemsType","nestedSchema","deprecated","reference","description","unique","hint"],s=t;if(a.forEach(o=>{s[o]===void 0&&i.push({message:`${o} is required`,path:[`${e}.${o}`]})}),Object.keys(s).forEach(o=>{r.includes(o)||i.push({message:`Unknown property ${o}`,path:[`${e}.${o}`]})}),i.push(...x(t.name,`${e}.name`)),i.push(...X(t.type,`${e}.type`)),i.push(...B(t.required,`${e}.required`,!1)),t.constraints&&i.push(...N(t.constraints,t.type,`${e}.constraints`)),i.push(...Re(t.default,t.type,`${e}.default`)),t.values!==void 0&&(t.type==="enum"?(!Array.isArray(t.values)||t.values.length===0||!t.values.every(o=>typeof o=="string"||typeof o=="number"))&&i.push({message:"Values must be a non-empty array of strings or numbers",path:[`${e}.values`]}):i.push({message:"Values is only valid for 'enum' type",path:[`${e}.values`]})),t.schema!==void 0&&i.push(...Ae(t.schema,`${e}.schema`,t.type,n,t.itemsType)),t.itemsType&&i.push(...X(t.itemsType,`${e}.itemsType`)),t.nestedSchema){i.push({message:"nestedSchema is deprecated; use schema instead",path:[`${e}.nestedSchema`]});let o=["id"],c=["id","constraints","indexes"],u=t.nestedSchema;o.forEach(f=>{u[f]===void 0&&i.push({message:`${f} is required`,path:[`${e}.nestedSchema.${f}`]})}),Object.keys(u).forEach(f=>{c.includes(f)||i.push({message:`Unknown property ${f}`,path:[`${e}.nestedSchema.${f}`]})}),i.push(...x(t.nestedSchema.id,`${e}.nestedSchema.id`)),n.includes(t.nestedSchema.id)||i.push({message:`nestedSchema.id '${t.nestedSchema.id}' must match a nestedSchemas key`,path:[`${e}.nestedSchema.id`]}),t.nestedSchema.constraints&&i.push(...N(t.nestedSchema.constraints,"dynamic",`${e}.nestedSchema.constraints`)),t.nestedSchema.indexes&&i.push(...J(t.nestedSchema.indexes,`${e}.nestedSchema.indexes`))}if(i.push(...B(t.deprecated,`${e}.deprecated`,!1)),t.reference){i.push({message:"reference is deprecated",path:[`${e}.reference`]});let o=["schema","field"],c=["schema","field"],u=t.reference;o.forEach(f=>{u[f]===void 0&&i.push({message:`${f} is required`,path:[`${e}.reference.${f}`]})}),Object.keys(u).forEach(f=>{c.includes(f)||i.push({message:`Unknown property ${f}`,path:[`${e}.reference.${f}`]})}),i.push(...x(t.reference.schema,`${e}.reference.schema`)),i.push(...x(t.reference.field,`${e}.reference.field`))}return i.push(...x(t.description,`${e}.description`,!1)),i.push(...B(t.unique,`${e}.unique`,!1)),t.hint&&i.push(...Ie(t.hint,`${e}.hint`)),i},Fe=(t,e,n)=>{let i=[];if("type"in t&&["string","number","boolean","array","set","enum","record"].includes(t.type)){let r=["name","type"],s=["name","type","default","schema","itemsType","constraints","description","metadata"],o=t;r.forEach(c=>{o[c]===void 0&&i.push({message:`${c} is required`,path:[`${e}.${c}`]})}),Object.keys(o).forEach(c=>{s.includes(c)||i.push({message:`Unknown property ${c}`,path:[`${e}.${c}`]})}),i.push(...x(t.name,`${e}.name`)),i.push(...X(t.type,`${e}.type`)),i.push(...Re(t.default,t.type,`${e}.default`)),t.schema&&i.push(...Ae(t.schema,`${e}.schema`,t.type,n,t.itemsType)),t.itemsType&&i.push(...X(t.itemsType,`${e}.itemsType`)),t.constraints&&i.push(...N(t.constraints,t.type,`${e}.constraints`)),i.push(...x(t.description,`${e}.description`,!1)),t.metadata!==void 0&&(typeof t.metadata!="object"||t.metadata===null)&&i.push({message:"Metadata must be an object",path:[`${e}.metadata`]})}else{let r=["name"],s=["name","description","concrete","fields","indexes","constraints","metadata"],o=t;r.forEach(c=>{o[c]===void 0&&i.push({message:`${c} is required`,path:[`${e}.${c}`]})}),Object.keys(o).forEach(c=>{s.includes(c)||i.push({message:`Unknown property ${c}`,path:[`${e}.${c}`]})}),i.push(...x(t.name,`${e}.name`)),i.push(...B(o.concrete,`${e}.concrete`,!1)),o.concrete&&Array.isArray(o.fields)&&i.push({message:"Fields must be an object when concrete is true",path:[`${e}.fields`]}),Array.isArray(o.fields)?(o.fields.length===0&&i.push({message:"Fields array must not be empty",path:[`${e}.fields`]}),o.fields.forEach((c,u)=>{let f=`${e}.fields[${u}]`;if(typeof c!="object"||c===null||!("fields"in c))i.push({message:"Each variant must have a 'fields' property",path:[f]});else{let b=c.fields;typeof b!="object"||b===null?i.push({message:"Fields must be a non-empty object",path:[`${f}.fields`]}):Object.entries(b).forEach(([p,v])=>{i.push(...ee(v,`${f}.fields.${p}`,n))}),c.when!==void 0&&(typeof c.when!="object"||c.when===null?i.push({message:"When must be an object",path:[`${f}.when`]}):i.push(...x(c.when.field,`${f}.when.field`)))}})):o.fields!==void 0&&(typeof o.fields!="object"||o.fields===null?i.push({message:"Fields must be a non-empty object",path:[`${e}.fields`]}):Object.entries(o.fields).forEach(([c,u])=>{i.push(...ee(u,`${e}.fields.${c}`,n))})),i.push(...x(t.description,`${e}.description`,!1)),t.indexes&&i.push(...J(t.indexes,`${e}.indexes`)),t.constraints&&i.push(...N(o.constraints,"dynamic",`${e}.constraints`)),t.metadata!==void 0&&(typeof t.metadata!="object"||t.metadata===null)&&i.push({message:"Metadata must be an object",path:[`${e}.metadata`]})}return i},et=t=>{if(typeof t!="object"||t===null)return H([{message:"Schema must be an object",path:[]}]);let e=t,n=[],i=["name","version","fields"],a=["name","version","description","fields","nestedSchemas","indexes","constraints","metadata","dependencies","migrations","mock","hint"],r=e;if(i.forEach(s=>{r[s]===void 0&&n.push({message:`${s} is required`,path:[s]})}),Object.keys(r).forEach(s=>{a.includes(s)||n.push({message:`Unknown property ${s}`,path:[s]})}),n.push(...x(e.name,"name")),n.push(...x(e.version,"version")),typeof e.fields!="object"||e.fields===null)n.push({message:"Fields must be a non-empty object",path:["fields"]});else{let s=Object.keys(e.nestedSchemas||{});Object.entries(e.fields).forEach(([o,c])=>{n.push(...ee(c,`fields.${o}`,s))})}if(e.nestedSchemas!==void 0)if(typeof e.nestedSchemas!="object"||e.nestedSchemas===null)n.push({message:"NestedSchemas must be an object",path:["nestedSchemas"]});else{let s=Object.keys(e.nestedSchemas);Object.entries(e.nestedSchemas).forEach(([o,c])=>n.push(...Fe(c,`nestedSchemas.${o}`,s)))}return n.push(...x(e.description,"description",!1)),e.indexes&&n.push(...J(e.indexes,"indexes")),e.constraints&&n.push(...N(e.constraints,"dynamic","constraints")),e.metadata!==void 0&&(typeof e.metadata!="object"||e.metadata===null)&&n.push({message:"Metadata must be an object",path:["metadata"]}),e.dependencies!==void 0&&(n.push({message:"dependencies is deprecated; use DomainModel instead",path:["dependencies"]}),(!Array.isArray(e.dependencies)||!e.dependencies.every(s=>typeof s=="string"))&&n.push({message:"Dependencies must be an array of strings",path:["dependencies"]})),e.migrations!==void 0&&(Array.isArray(e.migrations)?e.migrations.forEach((s,o)=>n.push(...Pe(s,`migrations[${o}]`))):n.push({message:"Migrations must be an array",path:["migrations"]})),e.mock!==void 0&&typeof e.mock!="function"&&n.push({message:"Mock must be a function",path:["mock"]}),e.hint&&n.push(...Ie(e.hint,"hint")),n.length>0?H(n):he(e)},me=(t,e)=>{let n=[];switch(t.type||n.push({message:"type is required",path:[`${e}.type`]}),t.type){case"modifyProperty":{let i=["type","id","changes"],a=i,r=t;i.forEach(s=>{r[s]===void 0&&n.push({message:`${s} is required`,path:[`${e}.${s}`]})}),Object.keys(r).forEach(s=>{a.includes(s)||n.push({message:`Unknown property ${s}`,path:[`${e}.${s}`]})}),n.push(...x(t.id,`${e}.id`)),(t.changes===void 0||typeof t.changes!="object")&&n.push({message:"Changes must be an object",path:[`${e}.changes`]});break}case"addField":{let i=["type","id","definition"],a=i,r=t;i.forEach(s=>{r[s]===void 0&&n.push({message:`${s} is required`,path:[`${e}.${s}`]})}),Object.keys(r).forEach(s=>{a.includes(s)||n.push({message:`Unknown property ${s}`,path:[`${e}.${s}`]})}),n.push(...x(t.id,`${e}.id`)),n.push(...ee(t.definition,`${e}.definition`,[]));break}case"removeField":case"deprecateField":{let i=["type","id"],a=i,r=t;i.forEach(s=>{r[s]===void 0&&n.push({message:`${s} is required`,path:[`${e}.${s}`]})}),Object.keys(r).forEach(s=>{a.includes(s)||n.push({message:`Unknown property ${s}`,path:[`${e}.${s}`]})}),n.push(...x(t.id,`${e}.id`));break}case"modifyField":{let i=["type","id","changes"],a=["type","id","changes","nestedSchemaChanges"],r=t;if(i.forEach(s=>{r[s]===void 0&&n.push({message:`${s} is required`,path:[`${e}.${s}`]})}),Object.keys(r).forEach(s=>{a.includes(s)||n.push({message:`Unknown property ${s}`,path:[`${e}.${s}`]})}),n.push(...x(t.id,`${e}.id`)),typeof t.changes!="object"&&n.push({message:"Changes must be an object",path:[`${e}.changes`]}),t.nestedSchemaChanges){let s=["id","constraints","indexes"],o=t.nestedSchemaChanges;Object.keys(o).forEach(c=>{s.includes(c)||n.push({message:`Unknown property ${c}`,path:[`${e}.nestedSchemaChanges.${c}`]})}),n.push(...x(o.id,`${e}.nestedSchemaChanges.id`,!1)),o.constraints&&n.push(...N(o.constraints,"dynamic",`${e}.nestedSchemaChanges.constraints`)),o.indexes&&n.push(...J(o.indexes,`${e}.nestedSchemaChanges.indexes`))}break}case"addIndex":{let i=["type","definition"],a=i,r=t;i.forEach(s=>{r[s]===void 0&&n.push({message:`${s} is required`,path:[`${e}.${s}`]})}),Object.keys(r).forEach(s=>{a.includes(s)||n.push({message:`Unknown property ${s}`,path:[`${e}.${s}`]})}),n.push(...De(t.definition,`${e}.definition`));break}case"removeIndex":{let i=["type","name"],a=i,r=t;i.forEach(s=>{r[s]===void 0&&n.push({message:`${s} is required`,path:[`${e}.${s}`]})}),Object.keys(r).forEach(s=>{a.includes(s)||n.push({message:`Unknown property ${s}`,path:[`${e}.${s}`]})}),n.push(...x(t.name,`${e}.name`));break}case"modifyIndex":{let i=["type","name","changes"],a=i,r=t;i.forEach(s=>{r[s]===void 0&&n.push({message:`${s} is required`,path:[`${e}.${s}`]})}),Object.keys(r).forEach(s=>{a.includes(s)||n.push({message:`Unknown property ${s}`,path:[`${e}.${s}`]})}),n.push(...x(t.name,`${e}.name`)),typeof t.changes!="object"&&n.push({message:"Changes must be an object",path:[`${e}.changes`]});break}case"addConstraint":{let i=["type","constraint"],a=i,r=t;i.forEach(s=>{r[s]===void 0&&n.push({message:`${s} is required`,path:[`${e}.${s}`]})}),Object.keys(r).forEach(s=>{a.includes(s)||n.push({message:`Unknown property ${s}`,path:[`${e}.${s}`]})}),"rules"in t.constraint?n.push(...ye(t.constraint,"dynamic",`${e}.constraint`)):n.push(...pe(t.constraint,"dynamic",`${e}.constraint`));break}case"removeConstraint":{let i=["type","name"],a=i,r=t;i.forEach(s=>{r[s]===void 0&&n.push({message:`${s} is required`,path:[`${e}.${s}`]})}),Object.keys(r).forEach(s=>{a.includes(s)||n.push({message:`Unknown property ${s}`,path:[`${e}.${s}`]})}),n.push(...x(t.name,`${e}.name`));break}case"modifyConstraint":{let i=["type","name","changes"],a=i,r=t;i.forEach(s=>{r[s]===void 0&&n.push({message:`${s} is required`,path:[`${e}.${s}`]})}),Object.keys(r).forEach(s=>{a.includes(s)||n.push({message:`Unknown property ${s}`,path:[`${e}.${s}`]})}),n.push(...x(t.name,`${e}.name`)),typeof t.changes!="object"&&n.push({message:"Changes must be an object",path:[`${e}.changes`]});break}case"addNestedSchema":{let i=["type","id","definition"],a=i,r=t;i.forEach(s=>{r[s]===void 0&&n.push({message:`${s} is required`,path:[`${e}.${s}`]})}),Object.keys(r).forEach(s=>{a.includes(s)||n.push({message:`Unknown property ${s}`,path:[`${e}.${s}`]})}),n.push(...x(t.id,`${e}.id`)),n.push(...Fe(t.definition,`${e}.definition`,[]));break}case"removeNestedSchema":{let i=["type","id"],a=i,r=t;i.forEach(s=>{r[s]===void 0&&n.push({message:`${s} is required`,path:[`${e}.${s}`]})}),Object.keys(r).forEach(s=>{a.includes(s)||n.push({message:`Unknown property ${s}`,path:[`${e}.${s}`]})}),n.push(...x(t.id,`${e}.id`));break}case"modifyNestedSchema":{let i=["type","id","changes"],a=i,r=t;i.forEach(s=>{r[s]===void 0&&n.push({message:`${s} is required`,path:[`${e}.${s}`]})}),Object.keys(r).forEach(s=>{a.includes(s)||n.push({message:`Unknown property ${s}`,path:[`${e}.${s}`]})}),n.push(...x(t.id,`${e}.id`)),typeof t.changes!="object"&&n.push({message:"Changes must be an object",path:[`${e}.changes`]});break}default:n.push({message:"Unknown schema change type",path:[`${e}.type`]})}return n},tt=(t,e)=>{let n=[],i=["forward","backward"],a=i,r=t;return i.forEach(s=>{r[s]===void 0&&n.push({message:`${s} is required`,path:[`${e}.${s}`]})}),Object.keys(r).forEach(s=>{a.includes(s)||n.push({message:`Unknown property ${s}`,path:[`${e}.${s}`]})}),typeof t.forward!="function"&&n.push({message:"Forward must be a function",path:[`${e}.forward`]}),typeof t.backward!="function"&&n.push({message:"Backward must be a function",path:[`${e}.backward`]}),n},Pe=(t,e)=>{let n=[],i=["id","schemaVersion","changes","description","status","transform","createdAt","checksum"],a=[...i,"rollback","dependencies"],r=t;i.forEach(o=>{r[o]===void 0&&n.push({message:`${o} is required`,path:[`${e}.${o}`]})}),Object.keys(r).forEach(o=>{a.includes(o)||n.push({message:`Unknown property ${o}`,path:[`${e}.${o}`]})}),n.push(...x(t.id,`${e}.id`)),n.push(...x(t.schemaVersion,`${e}.schemaVersion`)),n.push(...x(t.description,`${e}.description`));let s=["pending","applied","failed"];return s.includes(t.status)||n.push({message:`Status must be one of ${s.join(", ")}`,path:[`${e}.status`]}),!Array.isArray(t.changes)||t.changes.length===0?n.push({message:"Changes must be a non-empty array",path:[`${e}.changes`]}):t.changes.forEach((o,c)=>{n.push(...me(o,`${e}.changes[${c}]`))}),t.rollback!==void 0&&(Array.isArray(t.rollback)?t.rollback.forEach((o,c)=>n.push(...me(o,`${e}.rollback[${c}]`))):n.push({message:"Rollback must be an array",path:[`${e}.rollback`]})),typeof t.transform=="string"?n.push(...x(t.transform,`${e}.transform`)):typeof t.transform=="object"&&t.transform!==null?n.push(...tt(t.transform,`${e}.transform`)):n.push({message:"Transform must be a string or object",path:[`${e}.transform`]}),n.push(...x(t.createdAt,`${e}.createdAt`)),n.push(...x(t.checksum,`${e}.checksum`)),t.dependencies!==void 0&&(n.push({message:"dependencies is deprecated; use DomainModel instead",path:[`${e}.dependencies`]}),(!Array.isArray(t.dependencies)||!t.dependencies.every(o=>typeof o=="string"))&&n.push({message:"Dependencies must be an array of strings",path:[`${e}.dependencies`]})),n},Me={"~standard":{version:1,vendor:"@asaidimu/anansi",validate:et,types:{input:{},output:{}}}};var Oe={"~standard":{version:1,vendor:"@asaidimu/anansi",validate:t=>{if(typeof t!="object"||t===null)return H([{message:"Migration must be an object",path:[]}]);let e=t,n=Pe(e,"");return n.length>0?H(n):he(e)},types:{input:{},output:{}}}},je={"~standard":{version:1,vendor:"@asaidimu/anansi",validate:t=>{if(!Array.isArray(t))return H([{message:"SchemaChanges must be an array",path:[]}]);let e=t,n=[];return e.forEach((i,a)=>n.push(...me(i,`[${a}]`))),n.length>0?H(n):he(e)},types:{input:[],output:[]}}};function Ne(t){try{return!Oe["~standard"].validate(t).issues}catch(e){throw new _("Invalid migration definition",e instanceof Error?e:new Error(String(e)))}}function Ve(t){try{return!je["~standard"].validate(t).issues}catch(e){throw new _("Invalid schema change definition",e instanceof Error?e:new Error(String(e)))}}function K(t){try{return!Me["~standard"].validate(t).issues}catch(e){throw new _("Invalid schema definition",e instanceof Error?e:new Error(String(e)))}}var xt=K;var G=async t=>{if(typeof window<"u"&&crypto.subtle){let n=new TextEncoder().encode(t),i=await crypto.subtle.digest("SHA-256",n);return Array.from(new Uint8Array(i)).map(r=>r.toString(16).padStart(2,"0")).join("")}else{let{createHash:e}=await import("crypto");return e("sha256").update(t).digest("hex")}};function nt(t){let e=t.match(/^(\d+)\.(\d+)\.(\d+)$/);if(!e)throw new Error(`Invalid version format: ${t}. Expected format: major.minor.patch`);return{major:parseInt(e[1],10),minor:parseInt(e[2],10),patch:parseInt(e[3],10)}}function it(t,e){if(e&&"field"in t&&t.field){let n=e.fields[t.field];if(n)return n.type}if("parameters"in t){let n=t.parameters;if(n instanceof RegExp||Array.isArray(n)&&typeof n[0]=="string")return"string";if(typeof n=="number"||Array.isArray(n)&&typeof n[0]=="number")return"number";if(typeof n=="boolean")return"boolean";if(typeof n=="object"&&n!==null){if("minItems"in n||"maxItems"in n)return"array";if("schema"in n)return"object"}}}function st(t){return t.required===!0||t.type!==void 0||t.itemsType!==void 0||t.nestedSchema!==void 0||t.reference!==void 0||t.unique===!0}function at(t,e,n){switch(n){case"string":if(t instanceof RegExp&&e instanceof RegExp)return t.source!==e.source;if(Array.isArray(t)&&Array.isArray(e))return e.length<t.length||!t.every(i=>e.includes(i));break;case"number":if(typeof t=="object"&&typeof e=="object"&&"precision"in t&&"precision"in e)return e.precision<t.precision||(e.scale??0)<(t.scale??0);if(Array.isArray(t)&&Array.isArray(e))return e.length<t.length||!t.every(i=>e.includes(i));break;case"array":if(typeof t=="object"&&typeof e=="object"&&"minItems"in t&&"maxItems"in t&&"minItems"in e&&"maxItems"in e)return e.minItems>t.minItems||e.maxItems<t.maxItems;break;case"object":if(typeof t=="object"&&typeof e=="object"&&"schema"in t&&"schema"in e)return Object.keys(e.schema).length>Object.keys(t.schema).length;break}return!1}function rt(t,e){let n={or:1,xor:2,and:3,not:4,nor:4};return!!(e.operator&&n[e.operator]>n[t.operator]||e.rules&&e.rules.length>t.rules.length)}function ot(t,e,n){if(!e)return!0;if("rules"in e&&"rules"in t)return rt(e,t);if("predicate"in t&&t.predicate!==void 0)return!0;if("parameters"in t&&t.parameters!==void 0){let i=it(e,n);return i?at(e.parameters,t.parameters,i):!0}return!1}function ct(t,e){switch(t.type){case"removeField":case"removeIndex":return"major";case"modifyField":return st(t.changes)?"major":t.changes.deprecated?"minor":"patch";case"modifyIndex":return t.changes.unique!==void 0||t.changes.fields!==void 0?"major":"minor";case"addConstraint":return"major";case"removeConstraint":return"minor";case"modifyConstraint":let n=e?.constraints?.find(i=>"name"in i&&i.name===t.name);return ot(t.changes,n,e)?"major":"minor";case"addField":case"addIndex":case"deprecateField":return"minor";default:throw new Error(`Unhandled change type: ${JSON.stringify(t)}`)}}function dt(t){let e=new Set,n=new Set,i=new Set,a=new Set;for(let r of t)switch(r.type){case"addField":if(n.has(r.id))throw new Error(`Cannot add previously removed field: ${r.id}`);if(e.has(r.id))throw new Error(`Cannot add already modified field: ${r.id}`);if(a.has(r.id))throw new Error(`Cannot add deprecated field: ${r.id}`);i.add(r.id);break;case"removeField":if(i.has(r.id))throw new Error(`Cannot remove newly added field: ${r.id}`);if(e.has(r.id))throw new Error(`Cannot remove modified field: ${r.id}`);if(a.has(r.id))throw new Error(`Cannot remove field that is being deprecated: ${r.id}`);n.add(r.id);break;case"modifyField":if(n.has(r.id))throw new Error(`Cannot modify removed field: ${r.id}`);if(i.has(r.id))throw new Error(`Cannot modify newly added field: ${r.id}`);if(a.has(r.id))throw new Error(`Cannot modify field that is being deprecated: ${r.id}`);e.add(r.id);break;case"deprecateField":if(n.has(r.id))throw new Error(`Cannot deprecate removed field: ${r.id}`);if(i.has(r.id))throw new Error(`Cannot deprecate newly added field: ${r.id}`);if(e.has(r.id))throw new Error(`Cannot deprecate modified field: ${r.id}`);a.add(r.id);break}}function ut(t){let e=new Set,n=new Set,i=new Set;for(let a of t)switch(a.type){case"addConstraint":let r=a.constraint,s=("name"in r,r.name);if(n.has(s))throw new Error(`Cannot add previously removed constraint: ${s}`);if(e.has(s))throw new Error(`Cannot add already modified constraint: ${s}`);i.add(s);break;case"removeConstraint":if(i.has(a.name))throw new Error(`Cannot remove newly added constraint: ${a.name}`);if(e.has(a.name))throw new Error(`Cannot remove modified constraint: ${a.name}`);n.add(a.name);break;case"modifyConstraint":if(n.has(a.name))throw new Error(`Cannot modify removed constraint: ${a.name}`);if(i.has(a.name))throw new Error(`Cannot modify newly added constraint: ${a.name}`);e.add(a.name);break}}function qe(t,e,n){if(e.length===0)throw new Error("No changes provided");dt(e),ut(e);let i=nt(t),a="patch";for(let r of e){let s=ct(r,n);if(s==="major"){a="major";break}else s==="minor"&&a==="patch"&&(a="minor")}switch(a){case"major":return`${i.major+1}.0.0`;case"minor":return`${i.major}.${i.minor+1}.0`;case"patch":return`${i.major}.${i.minor}.${i.patch+1}`}}function V(t,e){let n=u=>u.split(".").map(f=>parseInt(f,10)||0),[i,a,r]=n(t),[s,o,c]=n(e);return i-s||a-o||r-c}function Dt(t){return t.sort(V)}var A=class extends Error{constructor(n,i,a,r){super(n);this.code=i;this.migrationId=a;this.cause=r;this.name="MigrationError"}},ft=(p=>(p.INVALID_SCHEMA="INVALID_SCHEMA",p.INVALID_MIGRATION="INVALID_MIGRATION",p.CHECKSUM_MISMATCH="CHECKSUM_MISMATCH",p.TIMEOUT="TIMEOUT",p.MEMORY_LIMIT="MEMORY_LIMIT",p.CONCURRENT_OPERATION="CONCURRENT_OPERATION",p.TRANSFORM_ERROR="TRANSFORM_ERROR",p.VERSION_NOT_FOUND="VERSION_NOT_FOUND",p.CIRCULAR_DEPENDENCY="CIRCULAR_DEPENDENCY",p.STREAM_ERROR="STREAM_ERROR",p.ROLLBACK_ERROR="ROLLBACK_ERROR",p.MISSING_TRANSFORM="MISSING_TRANSFORM",p))(ft||{}),Ue=class t{currentSchema;history=[];migrations=[];isProcessing=!1;constructor(e,n,i){try{if(!K(e))throw new A("Invalid initial schema","INVALID_SCHEMA");if(this.currentSchema=e,n){if(!n.every(a=>Ne(a)))throw new A("Invalid migration configuration","INVALID_MIGRATION");this.migrations=n.sort((a,r)=>V(a.schemaVersion,r.schemaVersion))}i&&(this.history=i.sort((a,r)=>V(a.version,r.version)))}catch(a){throw a instanceof A?a:new A("Failed to initialize MigrationEngine","INVALID_SCHEMA",void 0,a)}}data(){return{schema:this.currentSchema,history:this.history,migrations:this.migrations}}async generateChecksum(e){try{let n=JSON.stringify({id:e.id,schemaVersion:e.schemaVersion,changes:e.changes,description:e.description,rollback:e.rollback,createdAt:e.createdAt});return await G(n)}catch(n){throw new A("Checksum generation failed","CHECKSUM_MISMATCH",e.id,n)}}async add(e){if(this.isProcessing)throw new A("Concurrent operation","CONCURRENT_OPERATION");if(!e.changes?.length)throw new A("Migration must include changes","INVALID_MIGRATION");try{e.changes.forEach(i=>Ve(i))}catch(i){throw new A("Invalid schema changes","INVALID_MIGRATION",void 0,i)}let n={id:Date.now().toString(),schemaVersion:this.currentSchema.version,changes:e.changes,description:e.description,status:"pending",rollback:e.rollback,transform:e.transform,createdAt:new Date().toISOString(),checksum:""};n.checksum=await this.generateChecksum(n),this.migrations.push(n)}async dryRun(e,n,i){if(this.isProcessing)throw new A("Concurrent operation","CONCURRENT_OPERATION");try{this.isProcessing=!0;let a={...this.currentSchema},r=this.getRelevantMigrations(n,i),s=r.reduce((c,u)=>{let f=n==="forward"?u.changes:u.rollback||[];return this.applySchemaChanges(c,f,u.id)},a),o=await t.processMigrationList(e,n,r);return{newSchema:s,dataPreview:o}}catch(a){throw a instanceof A?a:new A("Dry run failed","INVALID_SCHEMA",void 0,a)}finally{this.isProcessing=!1}}getRelevantMigrations(e,n){return[...this.migrations].filter(i=>{let a=e==="forward"?"pending":"applied",r=n?V(i.schemaVersion,n)>=0:!0;return i.status===a&&r}).sort((i,a)=>e==="forward"?i.id.localeCompare(a.id):a.id.localeCompare(i.id))}applySchemaChanges(e,n,i){try{let a=qe(e.version,n);return n.map(s=>{try{return ve(s,e)}catch(o){throw new A("Invalid schema change","INVALID_SCHEMA",i,o)}}).reduce((s,o)=>{try{return de(s,o)}catch(c){throw new A("Failed to apply patch","INVALID_SCHEMA",i,c)}},{...e,version:a})}catch(a){throw a instanceof A?a:new A("Schema update failed","INVALID_SCHEMA",i,a)}}async prepareMigration(){let e=this.migrations.filter(n=>n.status==="pending");return await this.validateMigrations(e),e}async migrate(e){if(this.isProcessing)throw new A("Concurrent operation","CONCURRENT_OPERATION");let n=await this.prepareMigration();try{this.isProcessing=!0,this.transformSchema("forward");let i=await t.processMigrationList(e,"forward",n);return this.markMigrationsApplied(n),i}finally{this.isProcessing=!1}}async validateMigrations(e){await Promise.all(e.map(async n=>{let i=await this.generateChecksum(n);if(n.checksum!==i)throw new A("Checksum mismatch","CHECKSUM_MISMATCH",n.id)}))}markMigrationsApplied(e){this.migrations=this.migrations.map(n=>e.some(i=>i.id===n.id)?{...n,status:"applied"}:n)}async rollback(e){if(this.isProcessing)throw new A("Concurrent operation","CONCURRENT_OPERATION");return this.migrations.filter(i=>i.status==="applied").slice(-1)[0]?this.rollbackToVersion(this.history[this.history.length-1]?.version||this.currentSchema.version,e):e}async rollbackToVersion(e,n){if(this.isProcessing)throw new A("Concurrent operation","CONCURRENT_OPERATION");try{let i=this.history.findIndex(o=>o.version===e);if(i===-1)throw new Error(`Version ${e} not found in history`);let a=this.migrations.filter(o=>o.schemaVersion===e&&o.status==="applied").sort((o,c)=>c.id.localeCompare(o.id)),r=this.history.length-i;if(r<0)return n;for(let o=0;o<r;o++)this.transformSchema("backward");let s=await t.processMigrationList(n,"backward",a);return this.migrations=this.migrations.map(o=>o.schemaVersion===e&&o.status==="applied"?{...o,status:"pending"}:o),s}finally{this.isProcessing=!1}}static async processMigrationList(e,n,i){return(await Promise.all(i.map(async s=>{try{let o=await this.resolveTransform(s,n);return{migration:s,transform:o}}catch(o){throw new A(`Failed to resolve transform for migration ${s.id}`,"TRANSFORM_ERROR",s.id,o)}}))).filter(s=>!!s.transform).reduce((s,{migration:o,transform:c})=>s.pipeThrough(new TransformStream({async transform(u,f){try{let b=await c(u);f.enqueue(b)}catch(b){f.error(new A(`Data transformation failed for migration ${o.id}`,"TRANSFORM_ERROR",o.id,b))}}})),e)}static async resolveTransform(e,n){return e.transform?typeof e.transform=="string"?e.transform.startsWith("http://")||e.transform.startsWith("https://")?this.resolveRemoteTransform(e.transform,n):this.resolveLocalTransform(e.transform,n):e.transform[n]:null}static async resolveRemoteTransform(e,n){try{let i=await fetch(e);if(!i.ok)throw new A(`Failed to fetch transform module: ${e}`,"TRANSFORM_ERROR",void 0);let a=await i.text();if(typeof window<"u"){let r=new Blob([a],{type:"application/javascript"});return(await import(URL.createObjectURL(r))).default[n]}else{let{runInNewContext:r}=await import("vm"),s={module:{exports:{}},console};return r(a,s,e),s.module.exports[n]}}catch(i){throw new A(`Failed to load remote transform module: ${e}`,"TRANSFORM_ERROR",void 0,i)}}static async resolveLocalTransform(e,n){try{return(await import(e)).default[n]}catch(i){throw new A(`Failed to import local transform module: ${e}`,"TRANSFORM_ERROR",void 0,i)}}transformSchema(e){try{if(e==="backward"){let i=this.history.pop();if(!i)throw new Error("No previous version");this.currentSchema=i;return}let n=this.migrations.filter(i=>i.status==="pending").flatMap(i=>i.changes);if(!n.length)return;this.history.push(structuredClone(this.currentSchema)),this.currentSchema=n.reduce((i,a)=>this.applySchemaChanges(i,[a]),this.currentSchema)}catch(n){throw n instanceof A?n:new A("Schema transformation failed","INVALID_SCHEMA",void 0,n)}}};var lt=t=>{let e=[],n=[];return{addField:(i,a)=>{e.push({type:"addField",id:i,definition:a}),n.push({type:"removeField",id:i})},removeField:i=>{e.push({type:"removeField",id:i});let a=t.fields[i];a&&n.push({type:"addField",id:i,definition:a})},modifyField:(i,a)=>{e.push({type:"modifyField",id:i,changes:a});let r=t.fields[i];r&&n.push({type:"modifyField",id:i,changes:r})},deprecateField:i=>{e.push({type:"deprecateField",id:i}),n.push({type:"modifyField",id:i,changes:{deprecated:!1}})},addIndex:i=>{e.push({type:"addIndex",definition:i}),n.push({type:"removeIndex",name:i.name})},removeIndex:i=>{e.push({type:"removeIndex",name:i});let a=t.indexes?.find(r=>r.name===i);a&&n.push({type:"addIndex",definition:a})},modifyIndex:(i,a)=>{e.push({type:"modifyIndex",name:i,changes:a});let r=t.indexes?.find(s=>s.name===i);r&&n.push({type:"modifyIndex",name:i,changes:r})},addConstraint:i=>{e.push({type:"addConstraint",constraint:i}),n.push({type:"removeConstraint",name:i.name})},removeConstraint:i=>{e.push({type:"removeConstraint",name:i});let a=t.constraints?.find(r=>"name"in r&&r.name===i);a&&n.push({type:"addConstraint",constraint:a})},modifyConstraint:(i,a)=>{e.push({type:"modifyConstraint",name:i,changes:a});let r=t.constraints?.find(s=>"name"in s&&s.name===i);r&&n.push({type:"modifyConstraint",name:i,changes:r})},addNestedSchema:(i,a)=>{e.push({type:"addNestedSchema",id:i,definition:a}),n.push({type:"removeNestedSchema",id:i})},removeNestedSchema:i=>{if(e.push({type:"removeNestedSchema",id:i}),!t.nestedSchemas)return;let a=t.nestedSchemas[i];a&&n.push({type:"addNestedSchema",id:i,definition:a})},modifyNestedSchema:(i,a)=>{if(e.push({type:"modifyNestedSchema",id:i,changes:a}),!t.nestedSchemas)return;let r=t.nestedSchemas[i];r&&n.push({type:"modifyNestedSchema",id:i,changes:r})},changes:()=>({migrate:e,rollback:n})}};import"@isomorphic-git/lightning-fs";import I from"isomorphic-git";import ie from"isomorphic-git/http/web";import ht from"@isomorphic-git/lightning-fs";function Le(t){let e=t.toString(),n=e.substring(e.indexOf("(")+1,e.indexOf(")")),i=e.substring(e.indexOf("{")+1,e.lastIndexOf("}")).trim();return JSON.stringify({params:n,body:i})}function _e(t){let{params:e,body:n}=JSON.parse(t),i=Object.getPrototypeOf(function*(){}).constructor;return new i(e,n)}function ge(t){let e=t.toString(),n=e.match(/\(([^)]*)\)\s*=>\s*(.+)/s),i=e.match(/function\s*\(([^)]*)\)\s*{([\s\S]*)}/),a=e.match(/([^(]*)\(([^)]*)\)\s*{([\s\S]*)}/),r,s;return n?(r=n[1],s=n[2].includes("{")?n[2].substring(1,n[2].length-1).trim():`return ${n[2]}`):i?(r=i[1],s=i[2].trim()):a?(r=a[2],s=a[3].trim()):(r=e.substring(e.indexOf("(")+1,e.indexOf(")")),s=e.substring(e.indexOf("{")+1,e.lastIndexOf("}")).trim()),JSON.stringify({params:r,body:s,type:n?"arrow":i?"function":a?"method":"unknown"})}function $e(t){let{params:e,body:n,type:i}=JSON.parse(t),a=new Function(e,n);return i==="arrow"&&Object.defineProperty(a,"toString",{value:()=>`(${e}) => ${n}`,configurable:!0}),a}function nn(t){let e={},n={};t.hint?.groups&&t.hint.groups.forEach(a=>{n[a.name]={label:a.label,description:a.description}}),we(t.fields,"",t.nestedSchemas||{},e,!0);let i=[];for(let[a,r]of Object.entries(e)){let s=a!=="ungrouped"?n[a]:void 0;i.push({name:a!=="ungrouped"?a:"ungrouped",label:s?.label||"Ungrouped",description:s?.description,fields:r})}return i}function we(t,e,n,i,a,r){if(Array.isArray(t))t.forEach(s=>{let o=s.when?e?`${e}.${s.when?.field}`:s.when?.field:void 0;we(s.fields,e,n,i,a,o?{[o]:s.when?.value}:void 0)});else for(let[s,o]of Object.entries(t)){if(o.hint?.input.ignore)continue;let c=e?`${e}.${o.name}`:o.name,f=o.required===!0&&a,b={...o,name:c,required:f};if(r&&(b.when=r),o.type!=="object"){let p=o.hint?.input?.group||"ungrouped";i[p]||(i[p]=[]),i[p].push(b)}if(o.schema&&"id"in o.schema&&n[o.schema.id]){let p=n[o.schema.id];we(p.fields,c,n,i,f,r)}}}function sn(t,e){let n={},i=t.nestedSchemas||{};for(let[a,r]of Object.entries(t.fields))n[a]=te(r,i,e);return n}function te(t,e,n){if("default"in t&&t.default!==void 0)return t.default;if(n?.resolver){let i=n.resolver(t);if(i!==void 0)return i}switch(t.type){case"string":return;case"number":return;case"boolean":return!1;case"array":return[];case"set":return[];case"enum":if(!t.values||t.values.length===0)throw new Error(`Enum field "${t.name}" requires non-empty values array`);return t.values[0];case"object":if(!t.schema||!("id"in t.schema)||!e[t.schema.id])throw new Error(`Object field "${t.name}" references invalid nested schema`);return He(e[t.schema.id],e,n);case"record":return{};case"union":if(!t.schema||!Array.isArray(t.schema)||t.schema.length===0)throw new Error(`Union field "${t.name}" requires non-empty schema array`);let i=n?.discriminator?.[t.name],a=t.schema[0];if(i!==void 0)for(let r of t.schema){let o=e[r.id].fields;if(mt(o,i)){a=r;break}}return He(e[a.id],e,n);case"dynamic":return{};default:throw new Error(`Unsupported field type "${t.type}" for field "${t.name}"`)}}function mt(t,e){if(Array.isArray(t)){for(let n of t)for(let i of Object.values(n.fields))if(i.type==="enum"&&i.values?.includes(e)||i.default===e)return i}else for(let n of Object.values(t))if(n.type==="enum"&&n.values?.includes(e)||n.default===e)return n}function He(t,e,n){let i={},a=n?.discriminator||{};if(Array.isArray(t.fields)){let r=t.fields.filter(o=>!o.when);for(let o of r)for(let[c,u]of Object.entries(o.fields))i[c]=te(u,e,n);let s=t.fields.filter(o=>o.when);for(let o of s){let c=o.when.field,u=o.when.value;if(a[c]===u)for(let[b,p]of Object.entries(o.fields))i[b]=te(p,e,n)}}else for(let[r,s]of Object.entries(t.fields))i[r]=te(s,e,n);return i}import{Buffer as pt}from"buffer";window.Buffer=pt;var ne=class{fs;fsp;rootDir;constructor(e="/registry"){this.fs=new ht(`${e.replace("/","-")}`),this.fsp=this.fs.promises,this.rootDir=e.startsWith("/")?e:`/${e}`}async init(){let e=`${this.rootDir}/registry.json`;(!await this.fileExists(this.rootDir)||!await this.fileExists(e))&&(await this.fsp.mkdir(this.rootDir),await this.fsp.writeFile(e,JSON.stringify({schemas:{},created:new Date().toISOString(),updated:new Date().toISOString()}),"utf8"),await this.fsp.writeFile(`${this.rootDir}/schema-lock.json`,JSON.stringify({updated:new Date().toISOString(),hashes:[]}),"utf8"))}async create({schema:e}){if(!e.name||!e.version||!K(e))throw new Error("Invalid schema");let n=`${this.rootDir}/${e.name}`;if(await this.fileExists(`${n}/schema.json`))throw new Error(`Schema ${e.name} already exists`);return await this.fsp.mkdir(n),await this.fsp.mkdir(`${n}/migrations`),this.saveSchema(e,"create")}async update({schema:e}){if(!e.name||!e.version)throw new Error("Schema must have a name and version");let n=`${this.rootDir}/${e.name}`;if(!await this.fileExists(`${n}/schema.json`))throw new Error(`Schema ${e.name} not found`);return this.saveSchema(e,"update")}async saveSchema(e,n){let i=`${this.rootDir}/${e.name}`,a=await this.processAndStoreMigrations(i,e),r=this.serializeSchema(e);await this.writeSchemaFile(i,r);let s=await G(r);await this.updateIndex(i,e,s,a,n),await this.updateRegistryMetadata(e,n),await this.sync()}async delete({name:e}){let n=`${this.rootDir}/${e}`;if(!await this.fileExists(`${n}/schema.json`))throw new Error(`Schema ${e} not found`);await this.rmdirRecursive(n);let i=await this.readRegistryMetadata();delete i.schemas[e],i.updated=new Date().toISOString(),await this.writeRegistryMetadata(i),await this.sync()}async list(){let e=await this.readRegistryMetadata();return Object.values(e.schemas).map(n=>({name:n.name,version:n.version}))}async schema({name:e,version:n,migrations:i=!1}){let a=`${this.rootDir}/${e}/schema.json`;if(!await this.fileExists(a))return null;let r=this.deserializeSchema(JSON.parse(String(await this.fsp.readFile(a,"utf8")))),s=await this.readSchemaIndex(e);return n&&n!==s.version&&!s.history.some(o=>o.version===n)?null:(i&&(r.migrations=await this.migrations({name:e,version:n})),r)}async stats({schema:e}){return e?this.readSchemaIndex(e):this.readRegistryMetadata()}async sync(){let e={updated:new Date().toISOString(),hashes:[]},n=await this.listFilesRecursive(this.rootDir);for(let i of n)if(i!==`${this.rootDir}/schema-lock.json`&&i.match(new RegExp("/*.git*/"))===null){let a=String(await this.fsp.readFile(i,"utf8"));e.hashes.push([i,await G(a)])}await this.fsp.writeFile(`${this.rootDir}/schema-lock.json`,JSON.stringify(e),"utf8")}async migrations({name:e,version:n}){let i=await this.readSchemaIndex(e),a=n||i.version,r=[];for(let[s,o]of Object.entries(i.migrations)){let c=`${this.rootDir}/${e}/migrations/${o.hash}.json`;if(await this.fileExists(c)){let u=JSON.parse(String(await this.fsp.readFile(c,"utf8")));V(u.schemaVersion,a)<=0&&r.push(this.deserializeMigration(u))}}return r.sort((s,o)=>V(s.schemaVersion,o.schemaVersion))}async history({name:e}){let n=await this.readSchemaIndex(e),i=this.deserializeSchema(JSON.parse(String(await this.fsp.readFile(`${this.rootDir}/${e}/schema.json`,"utf8"))));return Promise.all(n.history.map(async a=>({...i,version:a.version,description:a.description,migrations:await this.migrations({name:e,version:a.version})})))}async processAndStoreMigrations(e,n){return Promise.all((n.migrations||[]).map(async i=>{let a={...i};if(i.transform?.forward){let o=i.transform;a.transform={forward:ge(o.forward),backward:ge(o.backward||(c=>c))}}let r=JSON.stringify(a),s=await G(r);return await this.fsp.writeFile(`${e}/migrations/${s}.json`,r,"utf8"),{id:i.id,hash:s,checksum:i.checksum}}))}serializeSchema(e){return JSON.stringify({...e,migrations:void 0,mock:e.mock?Le(e.mock):null})}deserializeSchema(e){return e.mock&&(e.mock=_e(e.mock)),e}deserializeMigration(e){return e.transform?.forward&&(e.transform={forward:$e(e.transform.forward),backward:$e(e.transform.backward)}),e}async writeSchemaFile(e,n){let i=`${e}/schema.json`;return await this.fsp.writeFile(i,n,"utf8"),i}async updateIndex(e,n,i,a,r){let s=`${e}/index.json`,o=r==="create"?{schema:n.name,version:n.version,history:[],migrations:{}}:JSON.parse(String(await this.fsp.readFile(s,"utf8")));o.history.push({version:n.version,hash:i,date:new Date().toISOString(),description:n.description||(r==="create"?"Initial version":"Updated version"),migrations:a.map(c=>c.id),predicates:[],changelog:[]}),o.version=n.version,a.forEach(({id:c,hash:u,checksum:f})=>{o.migrations[c]={hash:u,checksum:f}}),await this.fsp.writeFile(s,JSON.stringify(o),"utf8")}async updateRegistryMetadata(e,n){let i=await this.readRegistryMetadata();i.schemas[e.name]={name:e.name,version:e.version,description:e.description||"",created:n==="create"?new Date().toISOString():i.schemas[e.name]?.created,updated:new Date().toISOString()},i.updated=new Date().toISOString(),await this.writeRegistryMetadata(i)}async readRegistryMetadata(){return JSON.parse(String(await this.fsp.readFile(`${this.rootDir}/registry.json`,"utf8")))}async writeRegistryMetadata(e){await this.fsp.writeFile(`${this.rootDir}/registry.json`,JSON.stringify(e),"utf8")}async readSchemaIndex(e){let n=`${this.rootDir}/${e}/index.json`;if(!await this.fileExists(n))throw new Error(`Schema ${e} not found`);return JSON.parse(String(await this.fsp.readFile(n,"utf8")))}async fileExists(e){try{return await this.fsp.stat(e),!0}catch{return!1}}async rmdirRecursive(e){let n=await this.fsp.readdir(e);for(let i of n){let a=`${e}/${i}`;(await this.fsp.stat(a)).isDirectory()?await this.rmdirRecursive(a):await this.fsp.unlink(a)}await this.fsp.rmdir(e)}async listFilesRecursive(e){let n=[],i=await this.fsp.readdir(e);for(let a of i){let r=`${e}/${a}`;(await this.fsp.stat(r)).isDirectory()?n.push(...await this.listFilesRecursive(r)):n.push(r)}return n}};var Se=class{locks=new Map;async acquire(e){let n,i=new Promise(r=>{n=r}),a=this.locks.get(e)||Promise.resolve();return this.locks.set(e,a.then(()=>i)),await a,n}async withLock(e,n){let i=await this.acquire(e);try{return await n()}finally{i()}}},be=class{cache=new Map;ttl;constructor(e=3e4){this.ttl=e}get(e){let n=this.cache.get(e);return!n||Date.now()-n.timestamp>this.ttl?(this.cache.delete(e),null):n.schema}set(e,n){this.cache.set(e,{schema:n,timestamp:Date.now()})}invalidate(e){e?this.cache.delete(e):this.cache.clear()}};async function se(t,e){try{return await t()}catch(n){throw console.error(`${e}:`,n),new Error(`${e}: ${n.message}`)}}async function ae(t,e,n,i,a){await i.init(),await I.init({fs:t,dir:e,defaultBranch:n}),await I.setConfig({fs:t,dir:e,path:"core.autocrlf",value:"false"}),await I.setConfig({fs:t,dir:e,path:"core.eol",value:"lf"}),await I.add({fs:t,dir:e,filepath:"."}),await I.commit({fs:t,dir:e,message:"chore: initial commit",author:a})}async function vn(t="/registry",e={}){let n=e.mainBranch||"main",i=e.remote,a=e.createRemote??!1,r=e.author||{name:"SchemaRegistry",email:"system@example.com"},s=e.proxy?[e.proxy]:["https://cors.isomorphic-git.org"],o=0,c=new ne(t),u=c.fs,f=t.startsWith("/")?t:`/${t}`,b=new Se,p=new be(e.cacheTtl);async function v(d,l){let w=o;do{let T=s[o];try{return await d(T)}catch(D){if(console.warn(`Failed with proxy ${T}: ${D.message}`),o=(o+1)%s.length,o===w)throw new Error(`${l}: All CORS proxies failed`)}}while(!0)}async function C(d,l="."){return se(async()=>(await I.add({fs:u,dir:f,filepath:l}),(await I.statusMatrix({fs:u,dir:f})).some(([T,D,k])=>D!==k)?await I.commit({fs:u,dir:f,message:d,author:r}):null),"Failed to commit changes")}async function m(d,l,w){return se(async()=>{if(await g(d))throw new Error(`Tag ${d} already exists`);await I.annotatedTag({fs:u,dir:f,ref:d,message:l,tagger:r,object:w})},`Failed to create tag ${d}`)}async function g(d){try{return(await I.listTags({fs:u,dir:f})).includes(d)}catch{return!1}}async function y(d){return(await I.listTags({fs:u,dir:f})).filter(T=>T.startsWith(d))}async function $(d){return se(async()=>{let w=(await I.listTags({fs:u,dir:f})).filter(T=>T.startsWith(d));for(let T of w)await I.deleteTag({fs:u,dir:f,ref:T});return w},`Failed to delete tags with prefix ${d}`)}async function h(d){return se(async()=>{await I.checkout({fs:u,dir:f,ref:d})},`Failed to checkout ${d}`)}async function E(d,{delete:l=!1,force:w=!1}={}){i&&await v(async T=>{await I.push({fs:u,http:ie,dir:f,ref:d,remote:"origin",url:i.authURL(),onAuth:()=>i.credentials(),corsProxy:T,delete:l,force:w})},`Failed to push ${d}`)}async function S(d,l=!0){i&&await v(async w=>{try{await I.pull({fs:u,http:ie,dir:f,ref:d,author:r,remote:"origin",url:i.authURL(),onAuth:()=>i.credentials(),corsProxy:w,fastForwardOnly:!0})}catch(T){if(!l)console.warn(`Fast-forward pull failed for ${d}, attempting regular pull`),await I.pull({fs:u,http:ie,dir:f,ref:d,author:r,remote:"origin",url:i.authURL(),onAuth:()=>i.credentials(),corsProxy:w,fastForwardOnly:!1});else throw T}},`Failed to pull ${d}`)}if(i&&!await c.fileExists(f)){let d=f.slice(1);if(await i.exists({name:d}).catch(()=>!1))await v(async w=>{await I.clone({fs:u,http:ie,dir:f,url:i.authURL(),ref:n,singleBranch:!0,depth:1,onAuth:()=>i.credentials(),corsProxy:w})},"Failed to clone repository");else if(a)try{i=await i.create({name:d,private:!0}),await ae(u,f,n,c,r),await I.addRemote({fs:u,dir:f,remote:"origin",url:i.url()}),await E(n)}catch(w){console.error("Failed to create and push to remote repository:",w),await ae(u,f,n,c,r)}else await ae(u,f,n,c,r)}else await ae(u,f,n,c,r);return{async init(){return b.withLock("init",()=>c.init())},async create(d){let{name:l,version:w}=d.schema;return b.withLock(`schema:${l}`,async()=>{await h(n),await c.create(d);let T=await C(`feat: create schema ${l}`);T&&await m(`${l}-${w}`,`Version ${w}`,T),p.invalidate(l)})},async update(d){let{name:l,version:w}=d.schema;return b.withLock(`schema:${l}`,async()=>{await h(n),await c.update(d);let T=await C(`fix: update schema ${l}`);T&&await m(`${l}-${w}`,`Version ${w}`,T),p.invalidate(l)})},async delete(d){let{name:l}=d;return b.withLock(`schema:${l}`,async()=>{await h(n),await I.remove({fs:u,dir:f,filepath:l}),await c.delete(d);let w=await C(`chore: delete schema ${l}`),T=await y(`${l}-`);if(i&&w){await E(n);for(let D of T)await E(D,{delete:!0,force:!0}).catch(k=>console.warn(`Failed to delete remote tag ${D}: ${k.message}`))}await $(`${l}-`),p.invalidate(l)})},async list(){return b.withLock("list",()=>c.list())},async schema(d){let{name:l,version:w}=d,T=`${l}-${w||"latest"}-${d.migrations||!1}`,D=p.get(T);return D||b.withLock(`schema:${l}`,async()=>{if(w){let R=`${l}-${w}`;if(await g(R))await h(R);else throw new Error(`Version ${w} of schema ${l} not found`)}else await h(n);let k=await c.schema(d);return p.set(T,k),k})},async stats(d){return b.withLock("stats",()=>c.stats(d))},async sync(){return b.withLock("sync",async()=>{if(await h(n),await c.sync(),await C("chore: sync local changes"),i){await S(n,!1),await E(n);let d=await I.listTags({fs:u,dir:f});for(let w of d)await E(w,{force:!0});let l=await I.listTags({fs:u,dir:f});for(let w of l)d.includes(w)||await E(w,{delete:!0})}p.invalidate()})},async migrations(d){let{name:l,version:w}=d,T=`migrations-${l}-${w||"latest"}`,D=p.get(T);return D||b.withLock(`migrations:${l}`,async()=>{if(w){let R=`${l}-${w}`;if(await g(R))await h(R);else throw new Error(`Version ${w} of schema ${l} not found`)}else await h(n);let k=await c.migrations(d);return p.set(T,k),k})},async history(d){let{name:l}=d,w=`history-${l}`,T=p.get(w);return T||b.withLock(`history:${l}`,async()=>{await h(n);let D=await c.history(d);return p.set(w,D),D})}}}function O(t){return"predicate"in t}function Dn(t,e=!0,n=!0){let i="",a=n?"export ":"",r=new Map,s=new Map,o=(C,m=[])=>{if(!e||!C&&!m.length)return"";let g=C?[C]:[];return m.forEach(y=>g.push(y)),`/**
1
+ import{createEventBus as Zt}from"@asaidimu/events";import{createEventBus as Vt}from"@asaidimu/events";import{createMatcher as Ut,createPaginator as Lt,createProjector as _t,createSorter as Ht}from"@asaidimu/query";var M=class extends Error{constructor(n,i){super(n);this.operation=i;this.name="JsonPatchError"}};function Q(t){let e=Ge(t);return e===""?[]:e.substring(1).split("/").map(ze)}function Ge(t){return t===""||t==="/"?"":t.startsWith("/")?"/"+t.substring(1).split("/").map(Y).join("/"):"/"+t.split(".").map(Y).join("/")}function Y(t){return t.replace(/~/g,"~0").replace(/\//g,"~1")}function ze(t){return t.replace(/~1/g,"/").replace(/~0/g,"~")}var j=new Map;function Z(t,e){let n=t;for(let i of e){if(n===null||typeof n!="object")throw new M(`Invalid path - parent not found at ${i}`);if(Array.isArray(n)){let a=i==="-"?n.length:parseInt(i);if(isNaN(a)||a<0||a>n.length)throw new M(`Invalid array index: ${i}`);n=n[a]}else{if(!n.hasOwnProperty(i))throw new M(`Property ${i} not found`);n=n[i]}}return n}function oe(t,e){let n=j.get(e)||Q(e);if(j.set(e,n),n.length===0)return t;let i=Z(t,n.slice(0,-1)),a=n[n.length-1];if(Array.isArray(i)){let r=parseInt(a);if(isNaN(r)||r<0||r>=i.length)throw new M(`Invalid array index: ${a}`);return i[r]}return i[a]}function Be(t,e,n){let i=j.get(e)||Q(e);j.set(e,i);let a=Z(t,i.slice(0,-1)),r=i[i.length-1];return Array.isArray(a)?a.splice(0,a.length,...a.filter(s=>s!==n)):a[r]===n&&delete a[r],t}function W(t,e,n){let i=j.get(e)||Q(e);if(j.set(e,i),i.length===0)return n;let a=i.slice(0,-1),r=i[i.length-1],s=Z(t,a);if(Array.isArray(s))if(r==="-")s.push(n);else{let o=parseInt(r);if(o<0||o>s.length)throw new M(`Invalid array index: ${r}`);s.splice(o,0,n)}else s[r]=n;return t}function ce(t,e){let n=j.get(e)||Q(e);if(j.set(e,n),n.length===0)return;let i=Z(t,n.slice(0,-1)),a=n[n.length-1];if(Array.isArray(i)){let r=parseInt(a);i.splice(r,1)}else delete i[a];return t}function de(t,e){let n=JSON.parse(JSON.stringify(t));for(let i of e)try{switch(i.op){case"add":n=W(n,i.path,i.value);break;case"remove":n=ce(n,i.path);break;case"removeValue":n=Be(n,i.path,i.value);break;case"replace":n=W(ce(n,i.path),i.path,i.value);break;case"copy":{let a=oe(n,i.from);n=W(n,i.path,JSON.parse(JSON.stringify(a)));break}case"move":{let a=oe(n,i.from);n=W(n,i.path,a),n=ce(n,i.from);break}case"test":{let a=oe(n,i.path);if(JSON.stringify(a)!==JSON.stringify(i.value))throw new M("Test operation failed");break}default:throw new M(`Unsupported operation: ${i.op}`)}}catch(a){throw a instanceof M&&(a.operation=i),a}return n}function yt(t,e){let n=[];return ue(t,e,"",n),n}function ue(t,e,n,i){if(t!==e){if(typeof t!=typeof e||Array.isArray(t)!==Array.isArray(e)){i.push({op:"replace",path:n,value:e});return}typeof t=="object"&&t!==null?Array.isArray(t)?Ke(t,e,n,i):We(t,e,n,i):t!==e&&i.push({op:"replace",path:n,value:e})}}function Ke(t,e,n,i){let a=Math.max(t.length,e.length);for(let r=0;r<a;r++){let s=`${n}/${r}`;r>=t.length?i.push({op:"add",path:`${n}/-`,value:e[r]}):r>=e.length?i.push({op:"remove",path:s}):ue(t[r],e[r],s,i)}}function We(t,e,n,i){let a=new Set,r=Object.keys(t),s=Object.keys(e);for(let o of r){let c=Y(o),u=n?`${n}/${c}`:`/${c}`;e.hasOwnProperty(o)?(ue(t[o],e[o],u,i),a.add(o)):i.push({op:"remove",path:u})}for(let o of s)if(!a.has(o)){let c=Y(o),u=n?`${n}/${c}`:`/${c}`;i.push({op:"add",path:u,value:e[o]})}}function ve(t,e){let n=[];switch(t.type){case"addField":n.push({op:"add",path:`/fields/${t.id}`,value:t.definition});break;case"removeField":n.push({op:"remove",path:`/fields/${t.id}`});break;case"modifyField":{let i=`/fields/${t.id}`;Object.entries(t.changes).forEach(([a,r])=>{typeof r=="object"&&r!==null&&!Array.isArray(r)?n.push({op:"replace",path:`${i}/${a}`,value:r}):n.push({op:"replace",path:`${i}/${a}`,value:r})});break}case"deprecateField":n.push({op:"add",path:`/fields/${t.id}/deprecated`,value:!0});break;case"addIndex":e.indexes||n.push({op:"add",path:"/indexes",value:[]}),n.push({op:"add",path:"/indexes/-",value:t.definition});break;case"removeIndex":{let i=e.indexes?.findIndex(a=>a.name===t.name);i!==void 0&&i>=0&&n.push({op:"remove",path:`/indexes/${i}`});break}case"modifyIndex":{let i=e.indexes?.findIndex(a=>a.name===t.name);i!==void 0&&i>=0&&Object.entries(t.changes).forEach(([a,r])=>{n.push({op:"replace",path:`/indexes/${i}/${a}`,value:r})});break}case"addConstraint":e.constraints||n.push({op:"add",path:"/constraints",value:[]}),Array.isArray(t.constraint)?t.constraint.forEach(i=>{n.push({op:"add",path:"/constraints/-",value:i})}):n.push({op:"add",path:"/constraints/-",value:t.constraint});break;case"removeConstraint":{let i=e.constraints?.findIndex(a=>Array.isArray(a)?a.some(r=>r.name===t.name):a.name===t.name);i!==void 0&&i>=0&&n.push({op:"remove",path:`/constraints/${i}`});break}case"modifyConstraint":{let i=Ye(e,t.name);i&&Object.entries(t.changes).forEach(([a,r])=>{n.push({op:"replace",path:`${i}/${a}`,value:r})});break}}return n}function Ye(t,e){if(!t.constraints)return null;for(let n=0;n<t.constraints.length;n++){let i=t.constraints[n];if(i.name===e)return`/constraints/${n}`;if(Ee(i)){let a=Te(i.rules,e);if(a)return`/constraints/${n}${a}`}}return null}function Ee(t){return t&&"operator"in t&&"rules"in t}function Te(t,e){for(let n=0;n<t.length;n++){let i=t[n];if("name"in i&&i.name===e)return`/rules/${n}`;if(Ee(i)){let a=Te(i.rules,e);if(a)return`/rules/${n}${a}`}}return null}function xe(t,e){let n={...t};return fe(t)&&fe(e)&&Object.keys(e).forEach(i=>{fe(e[i])?i in t?n[i]=xe(t[i],e[i]):Object.assign(n,{[i]:e[i]}):Object.assign(n,{[i]:e[i]})}),n}function fe(t){return t&&typeof t=="object"&&!Array.isArray(t)}var le=new Map;function L(t){return t instanceof RegExp?t.toString().slice(1,-1):JSON.stringify(t)}function Qe(t,e){let n=o=>({value:o}),i=o=>({issues:o}),a=(o,c,u,f)=>{switch(c){case"string":return typeof o!="string"?[{message:`Expected string, got ${typeof o}`,path:u}]:[];case"number":return typeof o!="number"||isNaN(o)?[{message:`Expected number, got ${typeof o}`,path:u}]:[];case"boolean":return typeof o!="boolean"?[{message:`Expected boolean, got ${typeof o}`,path:u}]:[];case"array":return Array.isArray(o)?[]:[{message:`Expected array, got ${typeof o}`,path:u}];case"set":return!Array.isArray(o)||new Set(o).size!==o.length?[{message:`Expected unique array, got ${typeof o}`,path:u}]:[];case"enum":return f?.values?f.values.includes(o)?[]:[{message:`Expected one of ${JSON.stringify(f.values)}, got ${o}`,path:u}]:[{message:"Enum type requires 'values' definition",path:u}];case"object":return typeof o!="object"||o===null||Array.isArray(o)?[{message:`Expected object, got ${typeof o}`,path:u}]:[];case"record":return typeof o!="object"||o===null||Array.isArray(o)?[{message:`Expected record (object), got ${typeof o}`,path:u}]:[];case"union":return typeof o!="object"||o===null||Array.isArray(o)?[{message:`Expected union (object), got ${typeof o}`,path:u}]:[];case"dynamic":return console.warn("Deprecated: 'dynamic' type used. Use 'record' instead."),typeof o!="object"||o===null||Array.isArray(o)?[{message:`Expected record (object), got ${typeof o}`,path:u}]:[];default:return[{message:`Unknown type '${c}'`,path:u}]}};function r(o,c,u,f,b){let p=[],v=o.rules.map((m,g)=>{let y=[...f,`rules[${g}]`],$=`${m.name}@${y.join(".")}`;if("rules"in m){if(b.has($))return!0;b.add($);let h=r(m,c,u,y,b);return p.push(...h),b.delete($),h.length===0}else{let h=u[m.predicate];if(!h)return p.push({message:`Predicate '${m.predicate}' not found`,path:y}),!1;let E=`${m.predicate}:${JSON.stringify(m.parameters)}:${JSON.stringify(c[m.field])}`;if(le.has(E)){let d=le.get(E);return d||p.push({message:m.errorMessage||`Constraint '${m.name}' failed with params ${L(m.parameters)}`,path:y}),d}let S=h({data:c,field:m.field,arguments:m.parameters});return le.set(E,S),S||p.push({message:m.errorMessage||`Constraint '${m.name}' failed with params ${L(m.parameters)}`,path:y}),S}});return(()=>{switch(o.operator){case"and":return v.every(m=>m);case"or":return v.some(m=>m);case"not":return!v.every(m=>m);case"nor":return!v.some(m=>m);case"xor":return v.filter(m=>m).length===1}})()||p.push({message:`Constraint group '${o.name}' failed`,path:f}),p}function s(o,c,u,f,b,p=new Set){let v=[];if("type"in c&&!("fields"in c)){let g=f.length>0?o[f[f.length-1]]:o;return v.push(...a(g,c.type,f,{values:c.values})),c.constraints&&c.constraints.forEach((y,$)=>{if("rules"in y)v.push(...r(y,{value:g},u,[...f,`constraints[${$}]`],p));else{let h=u[y.predicate];h?h({data:{value:g},field:"value",arguments:y.parameters})||v.push({message:y.errorMessage||`Constraint '${y.name}' failed with params ${L(y.parameters)}`,path:[...f,`constraints[${$}]`]}):v.push({message:`Predicate '${y.predicate}' not found`,path:[...f,`constraints[${$}]`]})}}),v}let C={};if("concrete"in c)if(c.concrete===!0||!Array.isArray(c.fields))C=c.fields;else{let g=c.fields,y=g.find(h=>!h.when);y&&Object.assign(C,y.fields);let $=g.find(h=>h.when&&o[h.when.field]!==void 0&&o[h.when.field]===h.when.value);if($)Object.assign(C,$.fields);else if(!y)return v.push({message:"No matching field set found for discriminated schema",path:f}),v}else C=c.fields;let m=new Set(Object.values(C).map(g=>g.name));Object.entries(C).forEach(([g,y])=>{let $=[...f,y.name],h=Object.hasOwnProperty.call(o,y.name)?o[y.name]:y.default!==void 0?y.default:void 0;y.required&&h==null&&v.push({message:`Field '${y.name}' is required`,path:$});let E=y.schema||y.nestedSchema;if(y.type==="object"&&E&&!Array.isArray(E)){let S=b[E.id];if(S)if(p.has(E.id))v.push({message:`Circular reference detected at '${E.id}'`,path:$});else{p.add(E.id);let d=h&&typeof h=="object"&&!Array.isArray(h)?h:{};v.push(...s(d,S,u,$,b,p)),E.constraints?.forEach((l,w)=>{if("rules"in l)v.push(...r(l,d,u,[...$,`constraints[${w}]`],p));else{let T=u[l.predicate];T?T({data:d,field:void 0,arguments:l.parameters})||v.push({message:l.errorMessage||`Constraint '${l.name}' failed with params ${L(l.parameters)}`,path:[...$,`constraints[${w}]`]}):v.push({message:`Predicate '${l.predicate}' not found`,path:[...$,`constraints[${w}]`]})}}),p.delete(E.id)}else v.push({message:`Nested schema '${E.id}' not found`,path:$})}if(y.type==="union"&&E&&Array.isArray(E)){let S=!1,d=[];E.forEach((l,w)=>{let T=b[l.id];if(T)if(p.has(l.id))d.push({message:`Circular reference detected at '${l.id}'`,path:[...$,w.toString()]});else{p.add(l.id);let D=h&&typeof h=="object"&&!Array.isArray(h)?h:{},k=s(D,T,u,$,b,new Set(p));k.length===0&&h!==void 0?(S=!0,l.constraints?.forEach((R,F)=>{if("rules"in R){let P=r(R,D,u,[...$,`constraints[${F}]`],p);P.length>0&&(S=!1,d.push(...P))}else{let P=u[R.predicate];P&&!P({data:D,field:void 0,arguments:R.parameters})&&(S=!1,d.push({message:R.errorMessage||`Constraint '${R.name}' failed`,path:[...$,`constraints[${F}]`]}))}})):h===void 0&&d.push(...k.filter(R=>R.message.includes("is required"))),p.delete(l.id)}else d.push({message:`Nested schema '${l.id}' not found`,path:[...$,w.toString()]})}),!S&&h!==void 0?(v.push({message:"Value does not match any union schema",path:$}),v.push(...d)):h===void 0&&v.push(...d)}h!==void 0&&(v.push(...a(h,y.type,$,{values:y.values})),(y.type==="array"||y.type==="set")&&Array.isArray(h)&&(y.constraints?.forEach((S,d)=>{let l=u[S.predicate];l&&!l({data:{[y.name]:h},field:y.name,arguments:S.parameters})&&v.push({message:S.errorMessage||`Constraint '${S.name}' failed for field '${y.name}'`,path:[...$,`constraints[${d}]`]})}),y.itemsType&&h.forEach((S,d)=>v.push(...a(S,y.itemsType,[...$,d.toString()]))),E&&!Array.isArray(E)&&(b[E.id]?h.forEach((S,d)=>{typeof S=="object"&&S!==null&&(p.has(E.id)?v.push({message:`Circular reference detected at '${E.id}'`,path:[...$,d.toString()]}):(p.add(E.id),v.push(...s(S,b[E.id],u,[...$,d.toString()],b,p)),p.delete(E.id)))}):v.push({message:`Nested schema '${E.id}' not found`,path:$}))),y.constraints?.forEach((S,d)=>{if("rules"in S)v.push(...r(S,o,u,[...$,`constraints[${d}]`],p));else{let l=u[S.predicate];l?l({data:o,field:y.name,arguments:S.parameters})||v.push({message:S.errorMessage||`Constraint '${S.name}' failed for field '${y.name}' with params ${L(S.parameters)}`,path:[...$,`constraints[${d}]`]}):v.push({message:`Predicate '${S.predicate}' not found`,path:[...$,`constraints[${d}]`]})}}))});for(let g in o)Object.hasOwnProperty.call(o,g)&&!m.has(g)&&v.push({message:`Unexpected field '${g}'`,path:[...f,g]});return c.constraints?.forEach((g,y)=>{if("rules"in g)v.push(...r(g,o,u,[...f,`constraints[${y}]`],p));else{let $=u[g.predicate];$?$({data:o,field:g.field,arguments:g.parameters})||v.push({message:g.errorMessage||`Constraint '${g.name}' failed with params ${L(g.parameters)}`,path:[...f,`constraints[${y}]`]}):v.push({message:`Predicate '${g.predicate}' not found`,path:[...f,`constraints[${y}]`]})}}),v}return t.version!=="1.0.0"&&console.warn(`Schema version '${t.version}' may require migrations. Validator assumes version 1.0.0.`),{"~standard":{version:1,vendor:"@asaidimu/anansi",validate:o=>{if(typeof o!="object"||o===null)return i([{message:"Input must be an object",path:[]}]);let c=o,u=s(c,t,e,[],t.nestedSchemas||{});return u.length>0?i(u):n(c)},types:{input:{},output:{}}}}}function wt(t){return async e=>{let n=t.validate(e);if(n instanceof Promise&&(n=await n),"value"in n)return{values:n.value,errors:{}};let i={};return n.issues.forEach(a=>{if(!a.path)return;let r=a.path.filter(o=>!o.includes("constraints")),s=i;for(let o=0;o<r.length;o++){let c=r[o];o===r.length-1?s[c]={type:"validation",message:a.message}:(s[c]=s[c]||{},s=s[c])}}),{values:{},errors:i}}}var _=class extends Error{constructor(n,i){super(n);this.errors=i;this.name="SchemaValidationError"}};var he=t=>({value:t}),H=t=>({issues:t}),x=(t,e,n=!0)=>t===void 0&&!n?[]:typeof t!="string"||t.trim()===""?[{message:"Must be a non-empty string",path:[e]}]:[],X=(t,e)=>{let n=["string","number","boolean","array","set","enum","object","record","union","dynamic"];return typeof t!="string"||!n.includes(t)?[{message:`Must be one of ${n.join(", ")}`,path:[e]}]:t==="dynamic"?[{message:"Field type 'dynamic' is deprecated; use 'record' instead",path:[e]}]:[]},Ze=(t,e)=>{let n=["normal","unique","btree","hash","spatial","fulltext","gi","expression","composite"];return typeof t!="string"||!n.includes(t)?[{message:`Must be one of ${n.join(", ")}`,path:[e]}]:[]},Ce=(t,e)=>{let n=["and","or","not","nor","xor"];return typeof t!="string"||!n.includes(t)?[{message:`Must be one of ${n.join(", ")}`,path:[e]}]:[]},B=(t,e,n=!1)=>t===void 0&&!n?[]:typeof t!="boolean"?[{message:"Must be a boolean",path:[e]}]:[],Xe=(t,e,n)=>t===void 0?[]:[],pe=(t,e,n)=>{let i=[],a=["predicate","name"],r=["type","predicate","field","parameters","name","description","errorMessage"],s=t;return a.forEach(o=>{s[o]===void 0&&i.push({message:`${o} is required`,path:[`${n}.${o}`]})}),Object.keys(s).forEach(o=>{r.includes(o)||i.push({message:`Unknown property ${o}`,path:[`${n}.${o}`]})}),i.push(...x(t.name,`${n}.name`)),i.push(...x(t.predicate,`${n}.predicate`)),t.field!==void 0&&typeof t.field!="string"&&i.push({message:"Field must be a string",path:[`${n}.field`]}),t.parameters!==void 0&&i.push(...Xe(t.parameters,e,`${n}.parameters`)),i.push(...x(t.description,`${n}.description`,!1)),i.push(...x(t.errorMessage,`${n}.errorMessage`,!1)),i},ye=(t,e,n)=>{let i=[],a=["name","operator","rules"],r=a,s=t;return a.forEach(o=>{s[o]===void 0&&i.push({message:`${o} is required`,path:[`${n}.${o}`]})}),Object.keys(s).forEach(o=>{r.includes(o)||i.push({message:`Unknown property ${o}`,path:[`${n}.${o}`]})}),i.push(...x(t.name,`${n}.name`)),i.push(...Ce(t.operator,`${n}.operator`)),!Array.isArray(t.rules)||t.rules.length===0?i.push({message:"Rules must be a non-empty array",path:[`${n}.rules`]}):t.rules.forEach((o,c)=>{"rules"in o?i.push(...ye(o,e,`${n}.rules[${c}]`)):i.push(...pe(o,e,`${n}.rules[${c}]`))}),i},N=(t,e,n)=>{if(!Array.isArray(t))return[{message:"Must be an array",path:[n]}];let i=[];return t.forEach((a,r)=>{"rules"in a?i.push(...ye(a,e,`${n}[${r}]`)):i.push(...pe(a,e,`${n}[${r}]`))}),i},ke=(t,e)=>{let n=[],i=["operator","field"],a=["operator","field","value","conditions"],r=t;return i.forEach(s=>{r[s]===void 0&&n.push({message:`${s} is required`,path:[`${e}.${s}`]})}),Object.keys(r).forEach(s=>{a.includes(s)||n.push({message:`Unknown property ${s}`,path:[`${e}.${s}`]})}),n.push(...Ce(t.operator,`${e}.operator`)),n.push(...x(t.field,`${e}.field`)),t.conditions!==void 0&&(Array.isArray(t.conditions)?t.conditions.forEach((s,o)=>n.push(...ke(s,`${e}.conditions[${o}]`))):n.push({message:"Conditions must be an array",path:[`${e}.conditions`]})),n},De=(t,e)=>{let n=[],i=["fields","type","name"],a=["fields","type","unique","partial","description","order","name"],r=t;return i.forEach(s=>{r[s]===void 0&&n.push({message:`${s} is required`,path:[`${e}.${s}`]})}),Object.keys(r).forEach(s=>{a.includes(s)||n.push({message:`Unknown property ${s}`,path:[`${e}.${s}`]})}),n.push(...x(t.name,`${e}.name`)),n.push(...Ze(t.type,`${e}.type`)),(!Array.isArray(t.fields)||t.fields.length===0||!t.fields.every(s=>typeof s=="string"))&&n.push({message:"Fields must be a non-empty array of strings",path:[`${e}.fields`]}),n.push(...B(t.unique,`${e}.unique`,!1)),t.partial&&n.push(...ke(t.partial,`${e}.partial`)),n.push(...x(t.description,`${e}.description`,!1)),t.order!==void 0&&!["asc","desc"].includes(t.order)&&n.push({message:"Order must be 'asc' or 'desc'",path:[`${e}.order`]}),n},J=(t,e)=>{if(t===void 0)return[];if(!Array.isArray(t))return[{message:"Must be an array",path:[e]}];let n=[];return t.forEach((i,a)=>n.push(...De(i,`${e}[${a}]`))),n},Ae=(t,e,n,i,a)=>{let r=[];return t===void 0?[]:(n==="union"&&Array.isArray(t)?(t.length===0&&r.push({message:"Schema array must not be empty for union type",path:[e]}),t.forEach((s,o)=>{let c=`${e}[${o}]`;r.push(...x(s.id,`${c}.id`)),i.includes(s.id)||r.push({message:`Schema ID '${s.id}' must match a nestedSchemas key`,path:[`${c}.id`]}),s.constraints&&r.push(...N(s.constraints,"dynamic",`${c}.constraints`)),s.indexes&&r.push(...J(s.indexes,`${c}.indexes`))})):(n==="object"||n==="array"&&a==="object")&&!Array.isArray(t)?(r.push(...x(t.id,`${e}.id`)),i.includes(t.id)||r.push({message:`Schema ID '${t.id}' must match a nestedSchemas key`,path:[`${e}.id`]}),t.constraints&&r.push(...N(t.constraints,"dynamic",`${e}.constraints`)),t.indexes&&r.push(...J(t.indexes,`${e}.indexes`))):r.push({message:"Schema is only valid for 'object', 'union', or 'array' with itemsType 'object'",path:[e]}),r)},Re=(t,e,n)=>{if(t===void 0)return[];switch(e){case"string":if(typeof t!="string")return[{message:"Default must be a string",path:[n]}];break;case"number":if(typeof t!="number")return[{message:"Default must be a number",path:[n]}];break;case"boolean":if(typeof t!="boolean")return[{message:"Default must be a boolean",path:[n]}];break;case"array":case"set":if(!Array.isArray(t))return[{message:"Default must be an array",path:[n]}];break;case"enum":if(!Array.isArray(t)||!t.every(i=>typeof i=="string"||typeof i=="number"))return[{message:"Default must be an array of strings or numbers",path:[n]}];break;case"object":case"record":if(typeof t!="object"||t===null)return[{message:"Default must be an object",path:[n]}];break;case"union":case"dynamic":return[]}return[]},Ie=(t,e)=>t===void 0?[]:typeof t!="object"||t===null?[{message:"Hint must be an object",path:[e]}]:"input"in t&&typeof t.input!="object"?[{message:"Hint.input must be an object",path:[`${e}.input`]}]:[],ee=(t,e,n)=>{let i=[],a=["name","type"],r=["name","type","required","constraints","default","values","schema","itemsType","nestedSchema","deprecated","reference","description","unique","hint"],s=t;if(a.forEach(o=>{s[o]===void 0&&i.push({message:`${o} is required`,path:[`${e}.${o}`]})}),Object.keys(s).forEach(o=>{r.includes(o)||i.push({message:`Unknown property ${o}`,path:[`${e}.${o}`]})}),i.push(...x(t.name,`${e}.name`)),i.push(...X(t.type,`${e}.type`)),i.push(...B(t.required,`${e}.required`,!1)),t.constraints&&i.push(...N(t.constraints,t.type,`${e}.constraints`)),i.push(...Re(t.default,t.type,`${e}.default`)),t.values!==void 0&&(t.type==="enum"?(!Array.isArray(t.values)||t.values.length===0||!t.values.every(o=>typeof o=="string"||typeof o=="number"))&&i.push({message:"Values must be a non-empty array of strings or numbers",path:[`${e}.values`]}):i.push({message:"Values is only valid for 'enum' type",path:[`${e}.values`]})),t.schema!==void 0&&i.push(...Ae(t.schema,`${e}.schema`,t.type,n,t.itemsType)),t.itemsType&&i.push(...X(t.itemsType,`${e}.itemsType`)),t.nestedSchema){i.push({message:"nestedSchema is deprecated; use schema instead",path:[`${e}.nestedSchema`]});let o=["id"],c=["id","constraints","indexes"],u=t.nestedSchema;o.forEach(f=>{u[f]===void 0&&i.push({message:`${f} is required`,path:[`${e}.nestedSchema.${f}`]})}),Object.keys(u).forEach(f=>{c.includes(f)||i.push({message:`Unknown property ${f}`,path:[`${e}.nestedSchema.${f}`]})}),i.push(...x(t.nestedSchema.id,`${e}.nestedSchema.id`)),n.includes(t.nestedSchema.id)||i.push({message:`nestedSchema.id '${t.nestedSchema.id}' must match a nestedSchemas key`,path:[`${e}.nestedSchema.id`]}),t.nestedSchema.constraints&&i.push(...N(t.nestedSchema.constraints,"dynamic",`${e}.nestedSchema.constraints`)),t.nestedSchema.indexes&&i.push(...J(t.nestedSchema.indexes,`${e}.nestedSchema.indexes`))}if(i.push(...B(t.deprecated,`${e}.deprecated`,!1)),t.reference){i.push({message:"reference is deprecated",path:[`${e}.reference`]});let o=["schema","field"],c=["schema","field"],u=t.reference;o.forEach(f=>{u[f]===void 0&&i.push({message:`${f} is required`,path:[`${e}.reference.${f}`]})}),Object.keys(u).forEach(f=>{c.includes(f)||i.push({message:`Unknown property ${f}`,path:[`${e}.reference.${f}`]})}),i.push(...x(t.reference.schema,`${e}.reference.schema`)),i.push(...x(t.reference.field,`${e}.reference.field`))}return i.push(...x(t.description,`${e}.description`,!1)),i.push(...B(t.unique,`${e}.unique`,!1)),t.hint&&i.push(...Ie(t.hint,`${e}.hint`)),i},Fe=(t,e,n)=>{let i=[];if("type"in t&&["string","number","boolean","array","set","enum","record"].includes(t.type)){let r=["name","type"],s=["name","type","default","schema","itemsType","constraints","description","metadata"],o=t;r.forEach(c=>{o[c]===void 0&&i.push({message:`${c} is required`,path:[`${e}.${c}`]})}),Object.keys(o).forEach(c=>{s.includes(c)||i.push({message:`Unknown property ${c}`,path:[`${e}.${c}`]})}),i.push(...x(t.name,`${e}.name`)),i.push(...X(t.type,`${e}.type`)),i.push(...Re(t.default,t.type,`${e}.default`)),t.schema&&i.push(...Ae(t.schema,`${e}.schema`,t.type,n,t.itemsType)),t.itemsType&&i.push(...X(t.itemsType,`${e}.itemsType`)),t.constraints&&i.push(...N(t.constraints,t.type,`${e}.constraints`)),i.push(...x(t.description,`${e}.description`,!1)),t.metadata!==void 0&&(typeof t.metadata!="object"||t.metadata===null)&&i.push({message:"Metadata must be an object",path:[`${e}.metadata`]})}else{let r=["name"],s=["name","description","concrete","fields","indexes","constraints","metadata"],o=t;r.forEach(c=>{o[c]===void 0&&i.push({message:`${c} is required`,path:[`${e}.${c}`]})}),Object.keys(o).forEach(c=>{s.includes(c)||i.push({message:`Unknown property ${c}`,path:[`${e}.${c}`]})}),i.push(...x(t.name,`${e}.name`)),i.push(...B(o.concrete,`${e}.concrete`,!1)),o.concrete&&Array.isArray(o.fields)&&i.push({message:"Fields must be an object when concrete is true",path:[`${e}.fields`]}),Array.isArray(o.fields)?(o.fields.length===0&&i.push({message:"Fields array must not be empty",path:[`${e}.fields`]}),o.fields.forEach((c,u)=>{let f=`${e}.fields[${u}]`;if(typeof c!="object"||c===null||!("fields"in c))i.push({message:"Each variant must have a 'fields' property",path:[f]});else{let b=c.fields;typeof b!="object"||b===null?i.push({message:"Fields must be a non-empty object",path:[`${f}.fields`]}):Object.entries(b).forEach(([p,v])=>{i.push(...ee(v,`${f}.fields.${p}`,n))}),c.when!==void 0&&(typeof c.when!="object"||c.when===null?i.push({message:"When must be an object",path:[`${f}.when`]}):i.push(...x(c.when.field,`${f}.when.field`)))}})):o.fields!==void 0&&(typeof o.fields!="object"||o.fields===null?i.push({message:"Fields must be a non-empty object",path:[`${e}.fields`]}):Object.entries(o.fields).forEach(([c,u])=>{i.push(...ee(u,`${e}.fields.${c}`,n))})),i.push(...x(t.description,`${e}.description`,!1)),t.indexes&&i.push(...J(t.indexes,`${e}.indexes`)),t.constraints&&i.push(...N(o.constraints,"dynamic",`${e}.constraints`)),t.metadata!==void 0&&(typeof t.metadata!="object"||t.metadata===null)&&i.push({message:"Metadata must be an object",path:[`${e}.metadata`]})}return i},et=t=>{if(typeof t!="object"||t===null)return H([{message:"Schema must be an object",path:[]}]);let e=t,n=[],i=["name","version","fields"],a=["name","version","description","fields","nestedSchemas","indexes","constraints","metadata","dependencies","migrations","mock","hint"],r=e;if(i.forEach(s=>{r[s]===void 0&&n.push({message:`${s} is required`,path:[s]})}),Object.keys(r).forEach(s=>{a.includes(s)||n.push({message:`Unknown property ${s}`,path:[s]})}),n.push(...x(e.name,"name")),n.push(...x(e.version,"version")),typeof e.fields!="object"||e.fields===null)n.push({message:"Fields must be a non-empty object",path:["fields"]});else{let s=Object.keys(e.nestedSchemas||{});Object.entries(e.fields).forEach(([o,c])=>{n.push(...ee(c,`fields.${o}`,s))})}if(e.nestedSchemas!==void 0)if(typeof e.nestedSchemas!="object"||e.nestedSchemas===null)n.push({message:"NestedSchemas must be an object",path:["nestedSchemas"]});else{let s=Object.keys(e.nestedSchemas);Object.entries(e.nestedSchemas).forEach(([o,c])=>n.push(...Fe(c,`nestedSchemas.${o}`,s)))}return n.push(...x(e.description,"description",!1)),e.indexes&&n.push(...J(e.indexes,"indexes")),e.constraints&&n.push(...N(e.constraints,"dynamic","constraints")),e.metadata!==void 0&&(typeof e.metadata!="object"||e.metadata===null)&&n.push({message:"Metadata must be an object",path:["metadata"]}),e.dependencies!==void 0&&(n.push({message:"dependencies is deprecated; use DomainModel instead",path:["dependencies"]}),(!Array.isArray(e.dependencies)||!e.dependencies.every(s=>typeof s=="string"))&&n.push({message:"Dependencies must be an array of strings",path:["dependencies"]})),e.migrations!==void 0&&(Array.isArray(e.migrations)?e.migrations.forEach((s,o)=>n.push(...Pe(s,`migrations[${o}]`))):n.push({message:"Migrations must be an array",path:["migrations"]})),e.mock!==void 0&&typeof e.mock!="function"&&n.push({message:"Mock must be a function",path:["mock"]}),e.hint&&n.push(...Ie(e.hint,"hint")),n.length>0?H(n):he(e)},me=(t,e)=>{let n=[];switch(t.type||n.push({message:"type is required",path:[`${e}.type`]}),t.type){case"modifyProperty":{let i=["type","id","changes"],a=i,r=t;i.forEach(s=>{r[s]===void 0&&n.push({message:`${s} is required`,path:[`${e}.${s}`]})}),Object.keys(r).forEach(s=>{a.includes(s)||n.push({message:`Unknown property ${s}`,path:[`${e}.${s}`]})}),n.push(...x(t.id,`${e}.id`)),(t.changes===void 0||typeof t.changes!="object")&&n.push({message:"Changes must be an object",path:[`${e}.changes`]});break}case"addField":{let i=["type","id","definition"],a=i,r=t;i.forEach(s=>{r[s]===void 0&&n.push({message:`${s} is required`,path:[`${e}.${s}`]})}),Object.keys(r).forEach(s=>{a.includes(s)||n.push({message:`Unknown property ${s}`,path:[`${e}.${s}`]})}),n.push(...x(t.id,`${e}.id`)),n.push(...ee(t.definition,`${e}.definition`,[]));break}case"removeField":case"deprecateField":{let i=["type","id"],a=i,r=t;i.forEach(s=>{r[s]===void 0&&n.push({message:`${s} is required`,path:[`${e}.${s}`]})}),Object.keys(r).forEach(s=>{a.includes(s)||n.push({message:`Unknown property ${s}`,path:[`${e}.${s}`]})}),n.push(...x(t.id,`${e}.id`));break}case"modifyField":{let i=["type","id","changes"],a=["type","id","changes","nestedSchemaChanges"],r=t;if(i.forEach(s=>{r[s]===void 0&&n.push({message:`${s} is required`,path:[`${e}.${s}`]})}),Object.keys(r).forEach(s=>{a.includes(s)||n.push({message:`Unknown property ${s}`,path:[`${e}.${s}`]})}),n.push(...x(t.id,`${e}.id`)),typeof t.changes!="object"&&n.push({message:"Changes must be an object",path:[`${e}.changes`]}),t.nestedSchemaChanges){let s=["id","constraints","indexes"],o=t.nestedSchemaChanges;Object.keys(o).forEach(c=>{s.includes(c)||n.push({message:`Unknown property ${c}`,path:[`${e}.nestedSchemaChanges.${c}`]})}),n.push(...x(o.id,`${e}.nestedSchemaChanges.id`,!1)),o.constraints&&n.push(...N(o.constraints,"dynamic",`${e}.nestedSchemaChanges.constraints`)),o.indexes&&n.push(...J(o.indexes,`${e}.nestedSchemaChanges.indexes`))}break}case"addIndex":{let i=["type","definition"],a=i,r=t;i.forEach(s=>{r[s]===void 0&&n.push({message:`${s} is required`,path:[`${e}.${s}`]})}),Object.keys(r).forEach(s=>{a.includes(s)||n.push({message:`Unknown property ${s}`,path:[`${e}.${s}`]})}),n.push(...De(t.definition,`${e}.definition`));break}case"removeIndex":{let i=["type","name"],a=i,r=t;i.forEach(s=>{r[s]===void 0&&n.push({message:`${s} is required`,path:[`${e}.${s}`]})}),Object.keys(r).forEach(s=>{a.includes(s)||n.push({message:`Unknown property ${s}`,path:[`${e}.${s}`]})}),n.push(...x(t.name,`${e}.name`));break}case"modifyIndex":{let i=["type","name","changes"],a=i,r=t;i.forEach(s=>{r[s]===void 0&&n.push({message:`${s} is required`,path:[`${e}.${s}`]})}),Object.keys(r).forEach(s=>{a.includes(s)||n.push({message:`Unknown property ${s}`,path:[`${e}.${s}`]})}),n.push(...x(t.name,`${e}.name`)),typeof t.changes!="object"&&n.push({message:"Changes must be an object",path:[`${e}.changes`]});break}case"addConstraint":{let i=["type","constraint"],a=i,r=t;i.forEach(s=>{r[s]===void 0&&n.push({message:`${s} is required`,path:[`${e}.${s}`]})}),Object.keys(r).forEach(s=>{a.includes(s)||n.push({message:`Unknown property ${s}`,path:[`${e}.${s}`]})}),"rules"in t.constraint?n.push(...ye(t.constraint,"dynamic",`${e}.constraint`)):n.push(...pe(t.constraint,"dynamic",`${e}.constraint`));break}case"removeConstraint":{let i=["type","name"],a=i,r=t;i.forEach(s=>{r[s]===void 0&&n.push({message:`${s} is required`,path:[`${e}.${s}`]})}),Object.keys(r).forEach(s=>{a.includes(s)||n.push({message:`Unknown property ${s}`,path:[`${e}.${s}`]})}),n.push(...x(t.name,`${e}.name`));break}case"modifyConstraint":{let i=["type","name","changes"],a=i,r=t;i.forEach(s=>{r[s]===void 0&&n.push({message:`${s} is required`,path:[`${e}.${s}`]})}),Object.keys(r).forEach(s=>{a.includes(s)||n.push({message:`Unknown property ${s}`,path:[`${e}.${s}`]})}),n.push(...x(t.name,`${e}.name`)),typeof t.changes!="object"&&n.push({message:"Changes must be an object",path:[`${e}.changes`]});break}case"addNestedSchema":{let i=["type","id","definition"],a=i,r=t;i.forEach(s=>{r[s]===void 0&&n.push({message:`${s} is required`,path:[`${e}.${s}`]})}),Object.keys(r).forEach(s=>{a.includes(s)||n.push({message:`Unknown property ${s}`,path:[`${e}.${s}`]})}),n.push(...x(t.id,`${e}.id`)),n.push(...Fe(t.definition,`${e}.definition`,[]));break}case"removeNestedSchema":{let i=["type","id"],a=i,r=t;i.forEach(s=>{r[s]===void 0&&n.push({message:`${s} is required`,path:[`${e}.${s}`]})}),Object.keys(r).forEach(s=>{a.includes(s)||n.push({message:`Unknown property ${s}`,path:[`${e}.${s}`]})}),n.push(...x(t.id,`${e}.id`));break}case"modifyNestedSchema":{let i=["type","id","changes"],a=i,r=t;i.forEach(s=>{r[s]===void 0&&n.push({message:`${s} is required`,path:[`${e}.${s}`]})}),Object.keys(r).forEach(s=>{a.includes(s)||n.push({message:`Unknown property ${s}`,path:[`${e}.${s}`]})}),n.push(...x(t.id,`${e}.id`)),typeof t.changes!="object"&&n.push({message:"Changes must be an object",path:[`${e}.changes`]});break}default:n.push({message:"Unknown schema change type",path:[`${e}.type`]})}return n},tt=(t,e)=>{let n=[],i=["forward","backward"],a=i,r=t;return i.forEach(s=>{r[s]===void 0&&n.push({message:`${s} is required`,path:[`${e}.${s}`]})}),Object.keys(r).forEach(s=>{a.includes(s)||n.push({message:`Unknown property ${s}`,path:[`${e}.${s}`]})}),typeof t.forward!="function"&&n.push({message:"Forward must be a function",path:[`${e}.forward`]}),typeof t.backward!="function"&&n.push({message:"Backward must be a function",path:[`${e}.backward`]}),n},Pe=(t,e)=>{let n=[],i=["id","schemaVersion","changes","description","status","transform","createdAt","checksum"],a=[...i,"rollback","dependencies"],r=t;i.forEach(o=>{r[o]===void 0&&n.push({message:`${o} is required`,path:[`${e}.${o}`]})}),Object.keys(r).forEach(o=>{a.includes(o)||n.push({message:`Unknown property ${o}`,path:[`${e}.${o}`]})}),n.push(...x(t.id,`${e}.id`)),n.push(...x(t.schemaVersion,`${e}.schemaVersion`)),n.push(...x(t.description,`${e}.description`));let s=["pending","applied","failed"];return s.includes(t.status)||n.push({message:`Status must be one of ${s.join(", ")}`,path:[`${e}.status`]}),!Array.isArray(t.changes)||t.changes.length===0?n.push({message:"Changes must be a non-empty array",path:[`${e}.changes`]}):t.changes.forEach((o,c)=>{n.push(...me(o,`${e}.changes[${c}]`))}),t.rollback!==void 0&&(Array.isArray(t.rollback)?t.rollback.forEach((o,c)=>n.push(...me(o,`${e}.rollback[${c}]`))):n.push({message:"Rollback must be an array",path:[`${e}.rollback`]})),typeof t.transform=="string"?n.push(...x(t.transform,`${e}.transform`)):typeof t.transform=="object"&&t.transform!==null?n.push(...tt(t.transform,`${e}.transform`)):n.push({message:"Transform must be a string or object",path:[`${e}.transform`]}),n.push(...x(t.createdAt,`${e}.createdAt`)),n.push(...x(t.checksum,`${e}.checksum`)),t.dependencies!==void 0&&(n.push({message:"dependencies is deprecated; use DomainModel instead",path:[`${e}.dependencies`]}),(!Array.isArray(t.dependencies)||!t.dependencies.every(o=>typeof o=="string"))&&n.push({message:"Dependencies must be an array of strings",path:[`${e}.dependencies`]})),n},Me={"~standard":{version:1,vendor:"@asaidimu/anansi",validate:et,types:{input:{},output:{}}}};var Oe={"~standard":{version:1,vendor:"@asaidimu/anansi",validate:t=>{if(typeof t!="object"||t===null)return H([{message:"Migration must be an object",path:[]}]);let e=t,n=Pe(e,"");return n.length>0?H(n):he(e)},types:{input:{},output:{}}}},je={"~standard":{version:1,vendor:"@asaidimu/anansi",validate:t=>{if(!Array.isArray(t))return H([{message:"SchemaChanges must be an array",path:[]}]);let e=t,n=[];return e.forEach((i,a)=>n.push(...me(i,`[${a}]`))),n.length>0?H(n):he(e)},types:{input:[],output:[]}}};function Ne(t){try{return!Oe["~standard"].validate(t).issues}catch(e){throw new _("Invalid migration definition",e instanceof Error?e:new Error(String(e)))}}function Ve(t){try{return!je["~standard"].validate(t).issues}catch(e){throw new _("Invalid schema change definition",e instanceof Error?e:new Error(String(e)))}}function K(t){try{return!Me["~standard"].validate(t).issues}catch(e){throw new _("Invalid schema definition",e instanceof Error?e:new Error(String(e)))}}var xt=K;var G=async t=>{if(typeof window<"u"&&crypto.subtle){let n=new TextEncoder().encode(t),i=await crypto.subtle.digest("SHA-256",n);return Array.from(new Uint8Array(i)).map(r=>r.toString(16).padStart(2,"0")).join("")}else{let{createHash:e}=await import("crypto");return e("sha256").update(t).digest("hex")}};function nt(t){let e=t.match(/^(\d+)\.(\d+)\.(\d+)$/);if(!e)throw new Error(`Invalid version format: ${t}. Expected format: major.minor.patch`);return{major:parseInt(e[1],10),minor:parseInt(e[2],10),patch:parseInt(e[3],10)}}function it(t,e){if(e&&"field"in t&&t.field){let n=e.fields[t.field];if(n)return n.type}if("parameters"in t){let n=t.parameters;if(n instanceof RegExp||Array.isArray(n)&&typeof n[0]=="string")return"string";if(typeof n=="number"||Array.isArray(n)&&typeof n[0]=="number")return"number";if(typeof n=="boolean")return"boolean";if(typeof n=="object"&&n!==null){if("minItems"in n||"maxItems"in n)return"array";if("schema"in n)return"object"}}}function st(t){return t.required===!0||t.type!==void 0||t.itemsType!==void 0||t.nestedSchema!==void 0||t.reference!==void 0||t.unique===!0}function at(t,e,n){switch(n){case"string":if(t instanceof RegExp&&e instanceof RegExp)return t.source!==e.source;if(Array.isArray(t)&&Array.isArray(e))return e.length<t.length||!t.every(i=>e.includes(i));break;case"number":if(typeof t=="object"&&typeof e=="object"&&"precision"in t&&"precision"in e)return e.precision<t.precision||(e.scale??0)<(t.scale??0);if(Array.isArray(t)&&Array.isArray(e))return e.length<t.length||!t.every(i=>e.includes(i));break;case"array":if(typeof t=="object"&&typeof e=="object"&&"minItems"in t&&"maxItems"in t&&"minItems"in e&&"maxItems"in e)return e.minItems>t.minItems||e.maxItems<t.maxItems;break;case"object":if(typeof t=="object"&&typeof e=="object"&&"schema"in t&&"schema"in e)return Object.keys(e.schema).length>Object.keys(t.schema).length;break}return!1}function rt(t,e){let n={or:1,xor:2,and:3,not:4,nor:4};return!!(e.operator&&n[e.operator]>n[t.operator]||e.rules&&e.rules.length>t.rules.length)}function ot(t,e,n){if(!e)return!0;if("rules"in e&&"rules"in t)return rt(e,t);if("predicate"in t&&t.predicate!==void 0)return!0;if("parameters"in t&&t.parameters!==void 0){let i=it(e,n);return i?at(e.parameters,t.parameters,i):!0}return!1}function ct(t,e){switch(t.type){case"removeField":case"removeIndex":return"major";case"modifyField":return st(t.changes)?"major":t.changes.deprecated?"minor":"patch";case"modifyIndex":return t.changes.unique!==void 0||t.changes.fields!==void 0?"major":"minor";case"addConstraint":return"major";case"removeConstraint":return"minor";case"modifyConstraint":let n=e?.constraints?.find(i=>"name"in i&&i.name===t.name);return ot(t.changes,n,e)?"major":"minor";case"addField":case"addIndex":case"deprecateField":return"minor";default:throw new Error(`Unhandled change type: ${JSON.stringify(t)}`)}}function dt(t){let e=new Set,n=new Set,i=new Set,a=new Set;for(let r of t)switch(r.type){case"addField":if(n.has(r.id))throw new Error(`Cannot add previously removed field: ${r.id}`);if(e.has(r.id))throw new Error(`Cannot add already modified field: ${r.id}`);if(a.has(r.id))throw new Error(`Cannot add deprecated field: ${r.id}`);i.add(r.id);break;case"removeField":if(i.has(r.id))throw new Error(`Cannot remove newly added field: ${r.id}`);if(e.has(r.id))throw new Error(`Cannot remove modified field: ${r.id}`);if(a.has(r.id))throw new Error(`Cannot remove field that is being deprecated: ${r.id}`);n.add(r.id);break;case"modifyField":if(n.has(r.id))throw new Error(`Cannot modify removed field: ${r.id}`);if(i.has(r.id))throw new Error(`Cannot modify newly added field: ${r.id}`);if(a.has(r.id))throw new Error(`Cannot modify field that is being deprecated: ${r.id}`);e.add(r.id);break;case"deprecateField":if(n.has(r.id))throw new Error(`Cannot deprecate removed field: ${r.id}`);if(i.has(r.id))throw new Error(`Cannot deprecate newly added field: ${r.id}`);if(e.has(r.id))throw new Error(`Cannot deprecate modified field: ${r.id}`);a.add(r.id);break}}function ut(t){let e=new Set,n=new Set,i=new Set;for(let a of t)switch(a.type){case"addConstraint":let r=a.constraint,s=("name"in r,r.name);if(n.has(s))throw new Error(`Cannot add previously removed constraint: ${s}`);if(e.has(s))throw new Error(`Cannot add already modified constraint: ${s}`);i.add(s);break;case"removeConstraint":if(i.has(a.name))throw new Error(`Cannot remove newly added constraint: ${a.name}`);if(e.has(a.name))throw new Error(`Cannot remove modified constraint: ${a.name}`);n.add(a.name);break;case"modifyConstraint":if(n.has(a.name))throw new Error(`Cannot modify removed constraint: ${a.name}`);if(i.has(a.name))throw new Error(`Cannot modify newly added constraint: ${a.name}`);e.add(a.name);break}}function qe(t,e,n){if(e.length===0)throw new Error("No changes provided");dt(e),ut(e);let i=nt(t),a="patch";for(let r of e){let s=ct(r,n);if(s==="major"){a="major";break}else s==="minor"&&a==="patch"&&(a="minor")}switch(a){case"major":return`${i.major+1}.0.0`;case"minor":return`${i.major}.${i.minor+1}.0`;case"patch":return`${i.major}.${i.minor}.${i.patch+1}`}}function V(t,e){let n=u=>u.split(".").map(f=>parseInt(f,10)||0),[i,a,r]=n(t),[s,o,c]=n(e);return i-s||a-o||r-c}function Dt(t){return t.sort(V)}var A=class extends Error{constructor(n,i,a,r){super(n);this.code=i;this.migrationId=a;this.cause=r;this.name="MigrationError"}},ft=(p=>(p.INVALID_SCHEMA="INVALID_SCHEMA",p.INVALID_MIGRATION="INVALID_MIGRATION",p.CHECKSUM_MISMATCH="CHECKSUM_MISMATCH",p.TIMEOUT="TIMEOUT",p.MEMORY_LIMIT="MEMORY_LIMIT",p.CONCURRENT_OPERATION="CONCURRENT_OPERATION",p.TRANSFORM_ERROR="TRANSFORM_ERROR",p.VERSION_NOT_FOUND="VERSION_NOT_FOUND",p.CIRCULAR_DEPENDENCY="CIRCULAR_DEPENDENCY",p.STREAM_ERROR="STREAM_ERROR",p.ROLLBACK_ERROR="ROLLBACK_ERROR",p.MISSING_TRANSFORM="MISSING_TRANSFORM",p))(ft||{}),Ue=class t{currentSchema;history=[];migrations=[];isProcessing=!1;constructor(e,n,i){try{if(!K(e))throw new A("Invalid initial schema","INVALID_SCHEMA");if(this.currentSchema=e,n){if(!n.every(a=>Ne(a)))throw new A("Invalid migration configuration","INVALID_MIGRATION");this.migrations=n.sort((a,r)=>V(a.schemaVersion,r.schemaVersion))}i&&(this.history=i.sort((a,r)=>V(a.version,r.version)))}catch(a){throw a instanceof A?a:new A("Failed to initialize MigrationEngine","INVALID_SCHEMA",void 0,a)}}data(){return{schema:this.currentSchema,history:this.history,migrations:this.migrations}}async generateChecksum(e){try{let n=JSON.stringify({id:e.id,schemaVersion:e.schemaVersion,changes:e.changes,description:e.description,rollback:e.rollback,createdAt:e.createdAt});return await G(n)}catch(n){throw new A("Checksum generation failed","CHECKSUM_MISMATCH",e.id,n)}}async add(e){if(this.isProcessing)throw new A("Concurrent operation","CONCURRENT_OPERATION");if(!e.changes?.length)throw new A("Migration must include changes","INVALID_MIGRATION");try{e.changes.forEach(i=>Ve(i))}catch(i){throw new A("Invalid schema changes","INVALID_MIGRATION",void 0,i)}let n={id:Date.now().toString(),schemaVersion:this.currentSchema.version,changes:e.changes,description:e.description,status:"pending",rollback:e.rollback,transform:e.transform,createdAt:new Date().toISOString(),checksum:""};n.checksum=await this.generateChecksum(n),this.migrations.push(n)}async dryRun(e,n,i){if(this.isProcessing)throw new A("Concurrent operation","CONCURRENT_OPERATION");try{this.isProcessing=!0;let a={...this.currentSchema},r=this.getRelevantMigrations(n,i),s=r.reduce((c,u)=>{let f=n==="forward"?u.changes:u.rollback||[];return this.applySchemaChanges(c,f,u.id)},a),o=await t.processMigrationList(e,n,r);return{newSchema:s,dataPreview:o}}catch(a){throw a instanceof A?a:new A("Dry run failed","INVALID_SCHEMA",void 0,a)}finally{this.isProcessing=!1}}getRelevantMigrations(e,n){return[...this.migrations].filter(i=>{let a=e==="forward"?"pending":"applied",r=n?V(i.schemaVersion,n)>=0:!0;return i.status===a&&r}).sort((i,a)=>e==="forward"?i.id.localeCompare(a.id):a.id.localeCompare(i.id))}applySchemaChanges(e,n,i){try{let a=qe(e.version,n);return n.map(s=>{try{return ve(s,e)}catch(o){throw new A("Invalid schema change","INVALID_SCHEMA",i,o)}}).reduce((s,o)=>{try{return de(s,o)}catch(c){throw new A("Failed to apply patch","INVALID_SCHEMA",i,c)}},{...e,version:a})}catch(a){throw a instanceof A?a:new A("Schema update failed","INVALID_SCHEMA",i,a)}}async prepareMigration(){let e=this.migrations.filter(n=>n.status==="pending");return await this.validateMigrations(e),e}async migrate(e){if(this.isProcessing)throw new A("Concurrent operation","CONCURRENT_OPERATION");let n=await this.prepareMigration();try{this.isProcessing=!0,this.transformSchema("forward");let i=await t.processMigrationList(e,"forward",n);return this.markMigrationsApplied(n),i}finally{this.isProcessing=!1}}async validateMigrations(e){await Promise.all(e.map(async n=>{let i=await this.generateChecksum(n);if(n.checksum!==i)throw new A("Checksum mismatch","CHECKSUM_MISMATCH",n.id)}))}markMigrationsApplied(e){this.migrations=this.migrations.map(n=>e.some(i=>i.id===n.id)?{...n,status:"applied"}:n)}async rollback(e){if(this.isProcessing)throw new A("Concurrent operation","CONCURRENT_OPERATION");return this.migrations.filter(i=>i.status==="applied").slice(-1)[0]?this.rollbackToVersion(this.history[this.history.length-1]?.version||this.currentSchema.version,e):e}async rollbackToVersion(e,n){if(this.isProcessing)throw new A("Concurrent operation","CONCURRENT_OPERATION");try{let i=this.history.findIndex(o=>o.version===e);if(i===-1)throw new Error(`Version ${e} not found in history`);let a=this.migrations.filter(o=>o.schemaVersion===e&&o.status==="applied").sort((o,c)=>c.id.localeCompare(o.id)),r=this.history.length-i;if(r<0)return n;for(let o=0;o<r;o++)this.transformSchema("backward");let s=await t.processMigrationList(n,"backward",a);return this.migrations=this.migrations.map(o=>o.schemaVersion===e&&o.status==="applied"?{...o,status:"pending"}:o),s}finally{this.isProcessing=!1}}static async processMigrationList(e,n,i){return(await Promise.all(i.map(async s=>{try{let o=await this.resolveTransform(s,n);return{migration:s,transform:o}}catch(o){throw new A(`Failed to resolve transform for migration ${s.id}`,"TRANSFORM_ERROR",s.id,o)}}))).filter(s=>!!s.transform).reduce((s,{migration:o,transform:c})=>s.pipeThrough(new TransformStream({async transform(u,f){try{let b=await c(u);f.enqueue(b)}catch(b){f.error(new A(`Data transformation failed for migration ${o.id}`,"TRANSFORM_ERROR",o.id,b))}}})),e)}static async resolveTransform(e,n){return e.transform?typeof e.transform=="string"?e.transform.startsWith("http://")||e.transform.startsWith("https://")?this.resolveRemoteTransform(e.transform,n):this.resolveLocalTransform(e.transform,n):e.transform[n]:null}static async resolveRemoteTransform(e,n){try{let i=await fetch(e);if(!i.ok)throw new A(`Failed to fetch transform module: ${e}`,"TRANSFORM_ERROR",void 0);let a=await i.text();if(typeof window<"u"){let r=new Blob([a],{type:"application/javascript"});return(await import(URL.createObjectURL(r))).default[n]}else{let{runInNewContext:r}=await import("vm"),s={module:{exports:{}},console};return r(a,s,e),s.module.exports[n]}}catch(i){throw new A(`Failed to load remote transform module: ${e}`,"TRANSFORM_ERROR",void 0,i)}}static async resolveLocalTransform(e,n){try{return(await import(e)).default[n]}catch(i){throw new A(`Failed to import local transform module: ${e}`,"TRANSFORM_ERROR",void 0,i)}}transformSchema(e){try{if(e==="backward"){let i=this.history.pop();if(!i)throw new Error("No previous version");this.currentSchema=i;return}let n=this.migrations.filter(i=>i.status==="pending").flatMap(i=>i.changes);if(!n.length)return;this.history.push(structuredClone(this.currentSchema)),this.currentSchema=n.reduce((i,a)=>this.applySchemaChanges(i,[a]),this.currentSchema)}catch(n){throw n instanceof A?n:new A("Schema transformation failed","INVALID_SCHEMA",void 0,n)}}};var lt=t=>{let e=[],n=[];return{addField:(i,a)=>{e.push({type:"addField",id:i,definition:a}),n.push({type:"removeField",id:i})},removeField:i=>{e.push({type:"removeField",id:i});let a=t.fields[i];a&&n.push({type:"addField",id:i,definition:a})},modifyField:(i,a)=>{e.push({type:"modifyField",id:i,changes:a});let r=t.fields[i];r&&n.push({type:"modifyField",id:i,changes:r})},deprecateField:i=>{e.push({type:"deprecateField",id:i}),n.push({type:"modifyField",id:i,changes:{deprecated:!1}})},addIndex:i=>{e.push({type:"addIndex",definition:i}),n.push({type:"removeIndex",name:i.name})},removeIndex:i=>{e.push({type:"removeIndex",name:i});let a=t.indexes?.find(r=>r.name===i);a&&n.push({type:"addIndex",definition:a})},modifyIndex:(i,a)=>{e.push({type:"modifyIndex",name:i,changes:a});let r=t.indexes?.find(s=>s.name===i);r&&n.push({type:"modifyIndex",name:i,changes:r})},addConstraint:i=>{e.push({type:"addConstraint",constraint:i}),n.push({type:"removeConstraint",name:i.name})},removeConstraint:i=>{e.push({type:"removeConstraint",name:i});let a=t.constraints?.find(r=>"name"in r&&r.name===i);a&&n.push({type:"addConstraint",constraint:a})},modifyConstraint:(i,a)=>{e.push({type:"modifyConstraint",name:i,changes:a});let r=t.constraints?.find(s=>"name"in s&&s.name===i);r&&n.push({type:"modifyConstraint",name:i,changes:r})},addNestedSchema:(i,a)=>{e.push({type:"addNestedSchema",id:i,definition:a}),n.push({type:"removeNestedSchema",id:i})},removeNestedSchema:i=>{if(e.push({type:"removeNestedSchema",id:i}),!t.nestedSchemas)return;let a=t.nestedSchemas[i];a&&n.push({type:"addNestedSchema",id:i,definition:a})},modifyNestedSchema:(i,a)=>{if(e.push({type:"modifyNestedSchema",id:i,changes:a}),!t.nestedSchemas)return;let r=t.nestedSchemas[i];r&&n.push({type:"modifyNestedSchema",id:i,changes:r})},changes:()=>({migrate:e,rollback:n})}};import"@isomorphic-git/lightning-fs";import I from"isomorphic-git";import ie from"isomorphic-git/http/web";import ht from"@isomorphic-git/lightning-fs";function Le(t){let e=t.toString(),n=e.substring(e.indexOf("(")+1,e.indexOf(")")),i=e.substring(e.indexOf("{")+1,e.lastIndexOf("}")).trim();return JSON.stringify({params:n,body:i})}function _e(t){let{params:e,body:n}=JSON.parse(t),i=Object.getPrototypeOf(function*(){}).constructor;return new i(e,n)}function ge(t){let e=t.toString(),n=e.match(/\(([^)]*)\)\s*=>\s*(.+)/s),i=e.match(/function\s*\(([^)]*)\)\s*{([\s\S]*)}/),a=e.match(/([^(]*)\(([^)]*)\)\s*{([\s\S]*)}/),r,s;return n?(r=n[1],s=n[2].includes("{")?n[2].substring(1,n[2].length-1).trim():`return ${n[2]}`):i?(r=i[1],s=i[2].trim()):a?(r=a[2],s=a[3].trim()):(r=e.substring(e.indexOf("(")+1,e.indexOf(")")),s=e.substring(e.indexOf("{")+1,e.lastIndexOf("}")).trim()),JSON.stringify({params:r,body:s,type:n?"arrow":i?"function":a?"method":"unknown"})}function $e(t){let{params:e,body:n,type:i}=JSON.parse(t),a=new Function(e,n);return i==="arrow"&&Object.defineProperty(a,"toString",{value:()=>`(${e}) => ${n}`,configurable:!0}),a}function nn(t){let e={},n={};t.hint?.groups&&t.hint.groups.forEach(a=>{n[a.name]={label:a.label,description:a.description}}),we(t.fields,"",t.nestedSchemas||{},e,!0);let i=[];for(let[a,r]of Object.entries(e)){let s=a!=="ungrouped"?n[a]:void 0;i.push({name:a!=="ungrouped"?a:"ungrouped",label:s?.label||"Ungrouped",description:s?.description,fields:r})}return i}function we(t,e,n,i,a,r){if(Array.isArray(t))t.forEach(s=>{let o=s.when?e?`${e}.${s.when?.field}`:s.when?.field:void 0;we(s.fields,e,n,i,a,o?{[o]:s.when?.value}:void 0)});else for(let[s,o]of Object.entries(t)){if(o.hint?.input.ignore)continue;let c=e?`${e}.${o.name}`:o.name,f=o.required===!0&&a,b={...o,name:c,required:f};if(r&&(b.when=r),o.type!=="object"){let p=o.hint?.input?.group||"ungrouped";i[p]||(i[p]=[]),i[p].push(b)}if(o.schema&&"id"in o.schema&&n[o.schema.id]){let p=n[o.schema.id];we(p.fields,c,n,i,f,r)}}}function sn(t,e){let n={},i=t.nestedSchemas||{};for(let[a,r]of Object.entries(t.fields))n[a]=te(r,i,e);return n}function te(t,e,n){if("default"in t&&t.default!==void 0)return t.default;if(n?.resolver){let i=n.resolver(t);if(i!==void 0)return i}switch(t.type){case"string":return;case"number":return;case"boolean":return!1;case"array":return[];case"set":return[];case"enum":if(!t.values||t.values.length===0)throw new Error(`Enum field "${t.name}" requires non-empty values array`);return t.values[0];case"object":if(!t.schema||!("id"in t.schema)||!e[t.schema.id])throw new Error(`Object field "${t.name}" references invalid nested schema`);return He(e[t.schema.id],e,n);case"record":return{};case"union":if(!t.schema||!Array.isArray(t.schema)||t.schema.length===0)throw new Error(`Union field "${t.name}" requires non-empty schema array`);let i=n?.discriminator?.[t.name],a=t.schema[0];if(i!==void 0)for(let r of t.schema){let o=e[r.id].fields;if(mt(o,i)){a=r;break}}return He(e[a.id],e,n);case"dynamic":return{};default:throw new Error(`Unsupported field type "${t.type}" for field "${t.name}"`)}}function mt(t,e){if(Array.isArray(t)){for(let n of t)for(let i of Object.values(n.fields))if(i.type==="enum"&&i.values?.includes(e)||i.default===e)return i}else for(let n of Object.values(t))if(n.type==="enum"&&n.values?.includes(e)||n.default===e)return n}function He(t,e,n){let i={},a=n?.discriminator||{};if(Array.isArray(t.fields)){let r=t.fields.filter(o=>!o.when);for(let o of r)for(let[c,u]of Object.entries(o.fields))i[c]=te(u,e,n);let s=t.fields.filter(o=>o.when);for(let o of s){let c=o.when.field,u=o.when.value;if(a[c]===u)for(let[b,p]of Object.entries(o.fields))i[b]=te(p,e,n)}}else for(let[r,s]of Object.entries(t.fields))i[r]=te(s,e,n);return i}import{Buffer as pt}from"buffer";typeof window<"u"&&(window.Buffer=pt);var ne=class{fs;fsp;rootDir;constructor(e="/registry"){this.fs=new ht(`${e.replace("/","-")}`),this.fsp=this.fs.promises,this.rootDir=e.startsWith("/")?e:`/${e}`}async init(){let e=`${this.rootDir}/registry.json`;(!await this.fileExists(this.rootDir)||!await this.fileExists(e))&&(await this.fsp.mkdir(this.rootDir),await this.fsp.writeFile(e,JSON.stringify({schemas:{},created:new Date().toISOString(),updated:new Date().toISOString()}),"utf8"),await this.fsp.writeFile(`${this.rootDir}/schema-lock.json`,JSON.stringify({updated:new Date().toISOString(),hashes:[]}),"utf8"))}async create({schema:e}){if(!e.name||!e.version||!K(e))throw new Error("Invalid schema");let n=`${this.rootDir}/${e.name}`;if(await this.fileExists(`${n}/schema.json`))throw new Error(`Schema ${e.name} already exists`);return await this.fsp.mkdir(n),await this.fsp.mkdir(`${n}/migrations`),this.saveSchema(e,"create")}async update({schema:e}){if(!e.name||!e.version)throw new Error("Schema must have a name and version");let n=`${this.rootDir}/${e.name}`;if(!await this.fileExists(`${n}/schema.json`))throw new Error(`Schema ${e.name} not found`);return this.saveSchema(e,"update")}async saveSchema(e,n){let i=`${this.rootDir}/${e.name}`,a=await this.processAndStoreMigrations(i,e),r=this.serializeSchema(e);await this.writeSchemaFile(i,r);let s=await G(r);await this.updateIndex(i,e,s,a,n),await this.updateRegistryMetadata(e,n),await this.sync()}async delete({name:e}){let n=`${this.rootDir}/${e}`;if(!await this.fileExists(`${n}/schema.json`))throw new Error(`Schema ${e} not found`);await this.rmdirRecursive(n);let i=await this.readRegistryMetadata();delete i.schemas[e],i.updated=new Date().toISOString(),await this.writeRegistryMetadata(i),await this.sync()}async list(){let e=await this.readRegistryMetadata();return Object.values(e.schemas).map(n=>({name:n.name,version:n.version}))}async schema({name:e,version:n,migrations:i=!1}){let a=`${this.rootDir}/${e}/schema.json`;if(!await this.fileExists(a))return null;let r=this.deserializeSchema(JSON.parse(String(await this.fsp.readFile(a,"utf8")))),s=await this.readSchemaIndex(e);return n&&n!==s.version&&!s.history.some(o=>o.version===n)?null:(i&&(r.migrations=await this.migrations({name:e,version:n})),r)}async stats({schema:e}){return e?this.readSchemaIndex(e):this.readRegistryMetadata()}async sync(){let e={updated:new Date().toISOString(),hashes:[]},n=await this.listFilesRecursive(this.rootDir);for(let i of n)if(i!==`${this.rootDir}/schema-lock.json`&&i.match(new RegExp("/*.git*/"))===null){let a=String(await this.fsp.readFile(i,"utf8"));e.hashes.push([i,await G(a)])}await this.fsp.writeFile(`${this.rootDir}/schema-lock.json`,JSON.stringify(e),"utf8")}async migrations({name:e,version:n}){let i=await this.readSchemaIndex(e),a=n||i.version,r=[];for(let[s,o]of Object.entries(i.migrations)){let c=`${this.rootDir}/${e}/migrations/${o.hash}.json`;if(await this.fileExists(c)){let u=JSON.parse(String(await this.fsp.readFile(c,"utf8")));V(u.schemaVersion,a)<=0&&r.push(this.deserializeMigration(u))}}return r.sort((s,o)=>V(s.schemaVersion,o.schemaVersion))}async history({name:e}){let n=await this.readSchemaIndex(e),i=this.deserializeSchema(JSON.parse(String(await this.fsp.readFile(`${this.rootDir}/${e}/schema.json`,"utf8"))));return Promise.all(n.history.map(async a=>({...i,version:a.version,description:a.description,migrations:await this.migrations({name:e,version:a.version})})))}async processAndStoreMigrations(e,n){return Promise.all((n.migrations||[]).map(async i=>{let a={...i};if(i.transform?.forward){let o=i.transform;a.transform={forward:ge(o.forward),backward:ge(o.backward||(c=>c))}}let r=JSON.stringify(a),s=await G(r);return await this.fsp.writeFile(`${e}/migrations/${s}.json`,r,"utf8"),{id:i.id,hash:s,checksum:i.checksum}}))}serializeSchema(e){return JSON.stringify({...e,migrations:void 0,mock:e.mock?Le(e.mock):null})}deserializeSchema(e){return e.mock&&(e.mock=_e(e.mock)),e}deserializeMigration(e){return e.transform?.forward&&(e.transform={forward:$e(e.transform.forward),backward:$e(e.transform.backward)}),e}async writeSchemaFile(e,n){let i=`${e}/schema.json`;return await this.fsp.writeFile(i,n,"utf8"),i}async updateIndex(e,n,i,a,r){let s=`${e}/index.json`,o=r==="create"?{schema:n.name,version:n.version,history:[],migrations:{}}:JSON.parse(String(await this.fsp.readFile(s,"utf8")));o.history.push({version:n.version,hash:i,date:new Date().toISOString(),description:n.description||(r==="create"?"Initial version":"Updated version"),migrations:a.map(c=>c.id),predicates:[],changelog:[]}),o.version=n.version,a.forEach(({id:c,hash:u,checksum:f})=>{o.migrations[c]={hash:u,checksum:f}}),await this.fsp.writeFile(s,JSON.stringify(o),"utf8")}async updateRegistryMetadata(e,n){let i=await this.readRegistryMetadata();i.schemas[e.name]={name:e.name,version:e.version,description:e.description||"",created:n==="create"?new Date().toISOString():i.schemas[e.name]?.created,updated:new Date().toISOString()},i.updated=new Date().toISOString(),await this.writeRegistryMetadata(i)}async readRegistryMetadata(){return JSON.parse(String(await this.fsp.readFile(`${this.rootDir}/registry.json`,"utf8")))}async writeRegistryMetadata(e){await this.fsp.writeFile(`${this.rootDir}/registry.json`,JSON.stringify(e),"utf8")}async readSchemaIndex(e){let n=`${this.rootDir}/${e}/index.json`;if(!await this.fileExists(n))throw new Error(`Schema ${e} not found`);return JSON.parse(String(await this.fsp.readFile(n,"utf8")))}async fileExists(e){try{return await this.fsp.stat(e),!0}catch{return!1}}async rmdirRecursive(e){let n=await this.fsp.readdir(e);for(let i of n){let a=`${e}/${i}`;(await this.fsp.stat(a)).isDirectory()?await this.rmdirRecursive(a):await this.fsp.unlink(a)}await this.fsp.rmdir(e)}async listFilesRecursive(e){let n=[],i=await this.fsp.readdir(e);for(let a of i){let r=`${e}/${a}`;(await this.fsp.stat(r)).isDirectory()?n.push(...await this.listFilesRecursive(r)):n.push(r)}return n}};var Se=class{locks=new Map;async acquire(e){let n,i=new Promise(r=>{n=r}),a=this.locks.get(e)||Promise.resolve();return this.locks.set(e,a.then(()=>i)),await a,n}async withLock(e,n){let i=await this.acquire(e);try{return await n()}finally{i()}}},be=class{cache=new Map;ttl;constructor(e=3e4){this.ttl=e}get(e){let n=this.cache.get(e);return!n||Date.now()-n.timestamp>this.ttl?(this.cache.delete(e),null):n.schema}set(e,n){this.cache.set(e,{schema:n,timestamp:Date.now()})}invalidate(e){e?this.cache.delete(e):this.cache.clear()}};async function se(t,e){try{return await t()}catch(n){throw console.error(`${e}:`,n),new Error(`${e}: ${n.message}`)}}async function ae(t,e,n,i,a){await i.init(),await I.init({fs:t,dir:e,defaultBranch:n}),await I.setConfig({fs:t,dir:e,path:"core.autocrlf",value:"false"}),await I.setConfig({fs:t,dir:e,path:"core.eol",value:"lf"}),await I.add({fs:t,dir:e,filepath:"."}),await I.commit({fs:t,dir:e,message:"chore: initial commit",author:a})}async function vn(t="/registry",e={}){let n=e.mainBranch||"main",i=e.remote,a=e.createRemote??!1,r=e.author||{name:"SchemaRegistry",email:"system@example.com"},s=e.proxy?[e.proxy]:["https://cors.isomorphic-git.org"],o=0,c=new ne(t),u=c.fs,f=t.startsWith("/")?t:`/${t}`,b=new Se,p=new be(e.cacheTtl);async function v(d,l){let w=o;do{let T=s[o];try{return await d(T)}catch(D){if(console.warn(`Failed with proxy ${T}: ${D.message}`),o=(o+1)%s.length,o===w)throw new Error(`${l}: All CORS proxies failed`)}}while(!0)}async function C(d,l="."){return se(async()=>(await I.add({fs:u,dir:f,filepath:l}),(await I.statusMatrix({fs:u,dir:f})).some(([T,D,k])=>D!==k)?await I.commit({fs:u,dir:f,message:d,author:r}):null),"Failed to commit changes")}async function m(d,l,w){return se(async()=>{if(await g(d))throw new Error(`Tag ${d} already exists`);await I.annotatedTag({fs:u,dir:f,ref:d,message:l,tagger:r,object:w})},`Failed to create tag ${d}`)}async function g(d){try{return(await I.listTags({fs:u,dir:f})).includes(d)}catch{return!1}}async function y(d){return(await I.listTags({fs:u,dir:f})).filter(T=>T.startsWith(d))}async function $(d){return se(async()=>{let w=(await I.listTags({fs:u,dir:f})).filter(T=>T.startsWith(d));for(let T of w)await I.deleteTag({fs:u,dir:f,ref:T});return w},`Failed to delete tags with prefix ${d}`)}async function h(d){return se(async()=>{await I.checkout({fs:u,dir:f,ref:d})},`Failed to checkout ${d}`)}async function E(d,{delete:l=!1,force:w=!1}={}){i&&await v(async T=>{await I.push({fs:u,http:ie,dir:f,ref:d,remote:"origin",url:i.authURL(),onAuth:()=>i.credentials(),corsProxy:T,delete:l,force:w})},`Failed to push ${d}`)}async function S(d,l=!0){i&&await v(async w=>{try{await I.pull({fs:u,http:ie,dir:f,ref:d,author:r,remote:"origin",url:i.authURL(),onAuth:()=>i.credentials(),corsProxy:w,fastForwardOnly:!0})}catch(T){if(!l)console.warn(`Fast-forward pull failed for ${d}, attempting regular pull`),await I.pull({fs:u,http:ie,dir:f,ref:d,author:r,remote:"origin",url:i.authURL(),onAuth:()=>i.credentials(),corsProxy:w,fastForwardOnly:!1});else throw T}},`Failed to pull ${d}`)}if(i&&!await c.fileExists(f)){let d=f.slice(1);if(await i.exists({name:d}).catch(()=>!1))await v(async w=>{await I.clone({fs:u,http:ie,dir:f,url:i.authURL(),ref:n,singleBranch:!0,depth:1,onAuth:()=>i.credentials(),corsProxy:w})},"Failed to clone repository");else if(a)try{i=await i.create({name:d,private:!0}),await ae(u,f,n,c,r),await I.addRemote({fs:u,dir:f,remote:"origin",url:i.url()}),await E(n)}catch(w){console.error("Failed to create and push to remote repository:",w),await ae(u,f,n,c,r)}else await ae(u,f,n,c,r)}else await ae(u,f,n,c,r);return{async init(){return b.withLock("init",()=>c.init())},async create(d){let{name:l,version:w}=d.schema;return b.withLock(`schema:${l}`,async()=>{await h(n),await c.create(d);let T=await C(`feat: create schema ${l}`);T&&await m(`${l}-${w}`,`Version ${w}`,T),p.invalidate(l)})},async update(d){let{name:l,version:w}=d.schema;return b.withLock(`schema:${l}`,async()=>{await h(n),await c.update(d);let T=await C(`fix: update schema ${l}`);T&&await m(`${l}-${w}`,`Version ${w}`,T),p.invalidate(l)})},async delete(d){let{name:l}=d;return b.withLock(`schema:${l}`,async()=>{await h(n),await I.remove({fs:u,dir:f,filepath:l}),await c.delete(d);let w=await C(`chore: delete schema ${l}`),T=await y(`${l}-`);if(i&&w){await E(n);for(let D of T)await E(D,{delete:!0,force:!0}).catch(k=>console.warn(`Failed to delete remote tag ${D}: ${k.message}`))}await $(`${l}-`),p.invalidate(l)})},async list(){return b.withLock("list",()=>c.list())},async schema(d){let{name:l,version:w}=d,T=`${l}-${w||"latest"}-${d.migrations||!1}`,D=p.get(T);return D||b.withLock(`schema:${l}`,async()=>{if(w){let R=`${l}-${w}`;if(await g(R))await h(R);else throw new Error(`Version ${w} of schema ${l} not found`)}else await h(n);let k=await c.schema(d);return p.set(T,k),k})},async stats(d){return b.withLock("stats",()=>c.stats(d))},async sync(){return b.withLock("sync",async()=>{if(await h(n),await c.sync(),await C("chore: sync local changes"),i){await S(n,!1),await E(n);let d=await I.listTags({fs:u,dir:f});for(let w of d)await E(w,{force:!0});let l=await I.listTags({fs:u,dir:f});for(let w of l)d.includes(w)||await E(w,{delete:!0})}p.invalidate()})},async migrations(d){let{name:l,version:w}=d,T=`migrations-${l}-${w||"latest"}`,D=p.get(T);return D||b.withLock(`migrations:${l}`,async()=>{if(w){let R=`${l}-${w}`;if(await g(R))await h(R);else throw new Error(`Version ${w} of schema ${l} not found`)}else await h(n);let k=await c.migrations(d);return p.set(T,k),k})},async history(d){let{name:l}=d,w=`history-${l}`,T=p.get(w);return T||b.withLock(`history:${l}`,async()=>{await h(n);let D=await c.history(d);return p.set(w,D),D})}}}function O(t){return"predicate"in t}function Dn(t,e=!0,n=!0){let i="",a=n?"export ":"",r=new Map,s=new Map,o=(C,m=[])=>{if(!e||!C&&!m.length)return"";let g=C?[C]:[];return m.forEach(y=>g.push(y)),`/**
2
2
  * ${g.join(`
3
3
  * `)}
4
4
  */
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@asaidimu/anansi",
3
- "version": "4.0.1",
3
+ "version": "4.0.2",
4
4
  "description": "A toolkit for advanced data modelling",
5
5
  "main": "index.js",
6
6
  "types": "index.d.ts",