objecture
Version:
❂ Objecture ⏣ Object Watcher, Property Manager ⊚ Capture property changes for object, array mutator methods. ⊚ Schematize and validate object, array properties. ⊚ Browser, NodeJS compatible. ⁘ Uses Core-Plex - Event Listener Manage
1 lines • 55.1 kB
JavaScript
const e={string:String,number:Number,boolean:Boolean,bigint:BigInt,undefined:void 0,null:null};Object.values(e);const t={object:Object,array:Array};Object.values(t);const n=Object.assign({},e,t);Object.values(n);var r=e=>Object.prototype.toString.call(e).slice(8,-1).toLowerCase();const s={depth:0,maxDepth:10,accessors:[{default:(e,t)=>void 0===t?e:e[t]}.default],ancestors:[]};function a(e,t){const n=[],r=Object.assign({},s,t,{ancestors:[].concat(t.ancestors)});if(r.depth++,r.depth>r.maxDepth)return n;for(const t of r.accessors){const s=t.bind(e)(e);if(s){r.ancestors.includes(s)||r.ancestors.unshift(s);for(const[e,t]of Object.entries(s))if(r.values?r.values&&n.push([e,t]):n.push(e),"object"==typeof t&&null!==t&&!Object.is(t,s)&&!r.ancestors.includes(t)){const s=a(t,r);if(r.values){if(r.values)for(const[t,r]of s){const s=[e,t].join(".");n.push([s,r])}}else for(const t of s){const r=[e,t].join(".");n.push(r)}}}}return n}function i(e,...t){if(!e)return e;for(const n of t)if(n)for(const[t,s]of Object.entries(n)){const n=r(e[t]),a=r(s);e[t]="object"===n&&"object"===a?i(e[t],s):s}return e}var o={default:(e,t)=>void 0===t?e:e[t]};function l(e){if(e.length<3)return"{"+e+"}";for(var t=-1,n=2;n<e.length;n++)if("."===e[n]&&"."===e[n-1]&&(n<2||"\\"!==e[n-2])){if(t>-1)return"{"+e+"}";t=n-1}if(t>-1){var r=e.substr(0,t),s=e.substr(t+2);if(r.length>0&&s.length>0)return"["+e.substr(0,t)+"-"+e.substr(t+2)+"]"}return"{"+e+"}"}function c(e){if("string"!=typeof e)throw new TypeError("A pattern must be a string, but "+typeof e+" given");for(var t,n=!1,r=0,s=0,a=-1,i=[""],o=[],p=0;p<e.length;p++){var u=e[p];if("\\"!==u){if("{"===u)if(n)r++;else if(p>a&&!r){t=e.substring(a+1,p);for(var d=0;d<i.length;d++)i[d]+=t;o=[],a=p,n=!0,r++}else r--;else if("}"===u)if(n)s++;else if(1===s){if(t=e.substring(a+1,p),o.length>0){var f=[];o.push(c(t));for(d=0;d<i.length;d++)for(var h=0;h<o.length;h++)for(var v=0;v<o[h].length;v++)f.push(i[d]+o[h][v]);i=f}else{t=l(t);for(d=0;d<i.length;d++)i[d]+=t}a=p,s--}else s--;else n||","!==u||s-r!==1||(t=e.substring(a+1,p),o.push(c(t)),a=p);!n||s!==r&&p!==e.length-1||(n=!1,p=a-1)}else p++}if(-1===a)return[e];var g="{"===e[a]?a:a+1;if(g<e.length){t=e.substr(g);for(d=0;d<i.length;d++)i[d]+=t}return i}function p(e,t){var n,r=!1!==t["!"],s=!1!==t["()"],a=!1;if(r){for(n=0;n<e.length&&"!"===e[n];n++){if(s&&"("===e[n+1]){n--;break}a=!a}n>0&&(e=e.substr(n))}return{pattern:e,isNegated:a}}function u(e){return"-"===e||"^"===e||"$"===e||"+"===e||"."===e||"("===e||")"===e||"|"===e||"["===e||"]"===e||"{"===e||"}"===e||"*"===e||"?"===e||"\\"===e?"\\"+e:e}function d(e,t,n){var r=void 0===t.separator||t.separator,s="",a="",i=".";!0===r?(s="/",a="[/\\\\]",i="[^/\\\\]"):i=r?(a=function(e){for(var t="",n=0;n<e.length;n++)t+=u(e[n]);return t}(s=r)).length>1?"((?!"+(a="(?:"+a+")")+").)":"[^"+a+"]":".";var o=r?a+"+?":"",l=r?a+"*?":"",c=r?e.split(s):[e];return{source:e,segments:c,options:t,separator:r,separatorSplitter:s,separatorMatcher:a,optionalSeparator:l,requiredSeparator:o,wildcard:i,support:{qMark:!1!==t["?"],star:!1!==t["*"],globstar:r&&!1!==t["**"],brackets:!1!==t["[]"],extglobs:!1!==t["()"],excludeDot:n&&!1!==t.excludeDot}}}function f(e,t,n,r){return{source:e,isFirst:n,isLast:r,end:e.length-1}}var h="(?!\\.)";function v(e,t,n){return e.addToUnmatch&&(e.result.unmatch+=t),e.addToMatch&&(n&&!e.dotHandled&&(t=h+t),e.dotHandled=!0,e.result.match+=t),e.result}function g(e,t,n){var r=e.support,s=function(e,t,n){return{pattern:e,segment:t,result:n,openingBracket:t.end+1,closingBracket:-1,openingParens:0,closingParens:0,parensHandledUntil:-1,extglobModifiers:[],scanningForParens:!1,escapeChar:!1,addToMatch:!0,addToUnmatch:e.support.extglobs,dotHandled:!1,i:-1,char:"",nextChar:""}}(e,t,n),a=t.isLast?e.optionalSeparator:e.requiredSeparator;if(r.excludeDot||(s.dotHandled=!0),-1===t.end)return t.isLast&&!t.isFirst?n:v(s,a);if(r.globstar&&"**"===t.source)return v(s,"(?:"+((s.dotHandled?"":h)+e.wildcard+"*?"+a)+")*?");for(;++s.i<=t.end;){if(s.char=s.segment.source[s.i],s.nextChar=s.i<t.end?t.source[s.i+1]:"","\\"===s.char){if(s.i<s.segment.end){s.escapeChar=!0;continue}s.char=""}e=s.pattern,t=s.segment;var i=s.char,o=s.i;if(e.support.brackets&&!s.scanningForParens){if(o>s.openingBracket&&o<=s.closingBracket){s.escapeChar?v(s,u(i)):o===s.closingBracket?(v(s,"]"),s.openingBracket=t.source.length):"-"===i&&o===s.closingBracket-1?v(s,"\\-"):"!"===i&&o===s.openingBracket+1?v(s,"^"):v(s,"]"===i?"\\]":i),s.escapeChar=!1;continue}if(o>s.openingBracket){"]"===i&&!s.escapeChar&&o>s.openingBracket+1&&o>s.closingBracket?(s.closingBracket=o,s.i=s.openingBracket,e.separator?v(s,"(?!"+e.separatorMatcher+")[",!0):v(s,"[",!0)):o===t.end&&(v(s,"\\["),s.i=s.openingBracket,s.openingBracket=t.source.length,s.closingBracket=t.source.length),s.escapeChar=!1;continue}if("["===i&&!s.escapeChar&&o>s.closingBracket&&o<t.end){s.openingBracket=o,s.escapeChar=!1;continue}}if(s.pattern.support.extglobs){var l=s.extglobModifiers,c=(i=s.char,s.nextChar);o=s.i;if("("!==c||s.escapeChar||"@"!==i&&"?"!==i&&"*"!==i&&"+"!==i&&"!"!==i){if(")"!==i||s.escapeChar){if("|"===i&&s.closingParens&&!s.scanningForParens&&!s.escapeChar){v(s,"|");continue}}else if(s.scanningForParens)s.closingParens++;else if(l.length){var p=l.pop();if("!"===p&&-1!==l.indexOf("!"))throw new Error("Nested negated extglobs aren't supported");v(s,")"+(p="!"===p||"@"===p?"":p)),s.addToMatch=!0,s.addToUnmatch=!0,s.closingParens--;continue}}else if(s.scanningForParens)s.openingParens++;else if(o>s.parensHandledUntil&&!s.closingParens)s.parensHandledUntil=o,s.scanningForParens=!0,s.openingParens++;else{if(s.closingParens>=s.openingParens){"!"===i&&(s.addToMatch=!0,s.addToUnmatch=!1,v(s,s.pattern.wildcard+"*?",!0),s.addToMatch=!1,s.addToUnmatch=!0,s.result.useUnmatch=!0),l.push(i),v(s,"(?:",!0),s.openingParens--,s.i++;continue}s.openingParens--}if(s.scanningForParens){s.closingParens!==s.openingParens&&o!==s.segment.end||(s.scanningForParens=!1,s.i=s.parensHandledUntil-1),s.escapeChar=!1;continue}}r=(e=s.pattern).support;!s.escapeChar&&r.star&&"*"===s.char?s.i!==s.segment.end&&"*"===s.nextChar||v(s,e.wildcard+"*?",!0):!s.escapeChar&&r.qMark&&"?"===s.char?v(s,e.wildcard,!0):v(s,u(s.char)),s.escapeChar=!1}return v(s,a)}function y(e,t,n){for(var r=d(e,t,n),s={match:"",unmatch:"",useUnmatch:!1},a=r.segments,i=0;i<a.length;i++){g(r,f(a[i],0,0===i,i===a.length-1),s)}return s.useUnmatch?"(?!^"+s.unmatch+"$)"+s.match:s.match}function b(e,t){if("string"!=typeof t)throw new TypeError("Sample must be a string, but "+typeof t+" given");return e.test(t)}function j(e,t){if("string"!=typeof e&&!Array.isArray(e))throw new TypeError("The first argument must be a single pattern string or an array of patterns, but "+typeof e+" given");if("string"!=typeof t&&"boolean"!=typeof t||(t={separator:t}),2===arguments.length&&void 0!==t&&("object"!=typeof t||null===t||Array.isArray(t)))throw new TypeError("The second argument must be an options object or a string/boolean separator, but "+typeof t+" given");if("\\"===(t=t||{}).separator)throw new Error("\\ is not a valid separator");var n=function(e,t){e=Array.isArray(e)?e:[e],!1!==t["{}"]&&(e=function(e,t){for(var n=[],r=0;r<e.length;r++)for(var s=t(e[r]),a=0;a<s.length;a++)n.push(s[a]);return n}(e,c));for(var n=[],r=[],s="",a=0;a<e.length;a++){var i=p(e[a],t),o=y(i.pattern,t,!i.isNegated);i.isNegated?r.push(o):n.push(o)}return r.length&&(s="(?!(?:"+r.join("|")+")$)"),n.length>1?s+="(?:"+n.join("|")+")":1===n.length?s+=n[0]:s.length&&(s+=y("**",t,!0)),"^"+s+"$"}(e,t),r=new RegExp(n,t.flags),s=b.bind(null,r);return s.options=t,s.pattern=e,s.regexp=r,s}class m{#e;#t=!1;#n=[];#r=[];#s;#a;#i;constructor(e,t){if(!e||!t)return this;const n=((e={})=>{const t={enable:!1,assign:"addEventListener",deassign:"removeEventListener",transsign:"dispatchEvent",bindListener:!0,errorLog:!1,methods:{assign:{addEventListener:function(e,t){const{type:n,listener:r,settings:s}=e,{options:a,useCapture:i}=s;return t.addEventListener(n,r,a||i)},on:function(e,t){const{type:n,listener:r}=e;return t.on(n,r)},once:function(e,t){const{type:n,listener:r}=e;return t.once(n,r)}},deassign:{removeEventListener:function(e,t){const{type:n,listener:r,settings:s}=e,{options:a,useCapture:i}=s;return t.removeEventListener(n,r,a||i)},off:function(e,t){const{type:n,listener:r}=e;return t.off(n,r)}},transsign:{dispatchEvent:function(e,t,n){return t.dispatchEvent(n)},emit:function(e,t,n,...r){return t.emit(n,...r)}}}};for(const[n,r]of Object.entries(e))switch(n){case"methods":t[n]=i(t[n],r);break;case"enableEvents":break;default:t[n]=r}return t})(e);Object.defineProperties(this,{settings:{value:n},path:{value:n.path},type:{value:n.type},assigned:{value:[]},deassigned:{value:[]},transsigned:{value:[]},listener:{configurable:!0,get(){let e;if("string"===r(n.listener)){let s=t;e:for(const e of n.listener.split(".")){if(void 0===s[e])break e;s=s[e]}"function"===r(s)&&(e=s)}else e=n.listener;return!0===n.bindListener&&(e=e.bind(this.#e)),Object.defineProperty(this,"listener",{value:e}),e}}}),this.#e=t,this.enable=this.settings.enable}get enable(){return this.#t}set enable(e){const t=this.#o,n=this.assigned,r=this.deassigned;n.length=0,r.length=0;for(const s of t){const{path:t,target:a,enable:i}=s;if(this.settings,i!==e)if(!0===e)try{this.#l(a),s.enable=e,n.push(s)}catch(e){this.settings.errorLog&&console.error(e)}else if(!1===e)try{this.#c(a),s.enable=e,r.push(s)}catch(e){this.settings.errorLog&&console.error(e)}}this.#t=e}get#p(){return this.settings.target}get#o(){const e=this.#r,t=[];if(this.#p)for(const n of[].concat(this.#p)){const r=e.find((e=>e?.path===this.path));void 0!==r?t.push(r):void 0===r&&ptargets.push({path:this.path,target:n,enable:!1})}else if("string"===r(this.path)){const n=[];if(this.path===this.#u){const e={path:this.path,target:this.#e,enable:!1};t.push(e)}else{if(this.settings.compandTree){const e=this.#d,t=j(this.path,{separator:"."});for(const[r,s]of e){!0===t(r)&&n.push([r,s])}"*"===this.path.charAt(0)&&n.unshift([this.#u,this.#e])}else n.push(this.path);for(const[r,s]of n){const n=e.find((e=>e.path===r));let a,i=s;void 0!==i&&(i===n?.target?a=n:"object"==typeof i&&(a={path:r,target:i,enable:!1})),void 0!==a&&t.push(a)}}}return this.#r=t,this.#r}get#u(){return this.settings.compandTree.scopeKey}get#l(){return void 0!==this.#s||(this.#s=this.settings.methods.assign[this.settings.assign].bind(null,this)),this.#s}get#c(){return void 0!==this.#a||(this.#a=this.settings.methods.deassign[this.settings.deassign].bind(null,this)),this.#a}get#f(){return void 0!==this.#i||(this.#i=this.settings.methods.transsign[this.settings.transsign].bind(null,this)),this.#i}get#d(){if(!this.settings.compandTree)return null;const e=Object.assign(this.settings.compandTree,{values:!0});return a(this.#e,e)}emit(){const e=this.#o,t=this.transsigned,n=this.#n;t.length=0,n.length=0;for(const r of e){const{target:e}=r;try{this.#f(e,...arguments),t.push(r)}catch(e){n.push(r)}}return this}}class E extends EventTarget{static implement=function(e,t){if(!e||!t)return;const n=((e={})=>{const t={events:{},enableEvents:!1,compandTree:{accessors:[o.default],scopeKey:":scope",maxDepth:10},propertyDefinitions:{getEvents:"getEvents",addEvents:"addEvents",removeEvents:"removeEvents",enableEvents:"enableEvents",disableEvents:"disableEvents",reenableEvents:"reenableEvents",emitEvents:"emitEvents"}};for(const[n,r]of Object.entries(e))switch(n){case"propertyDefinitions":case"compandTree":t[n]=Object.assign(t[n],r);break;default:t[n]=r}return t})(t),r=[];return Object.defineProperties(e,{[n.propertyDefinitions.getEvents]:{enumerable:!1,writable:!1,value:function(){if(!arguments[0])return r;const e=[],t=[].concat(arguments[0]);for(const n of t)for(const t of r){let r;e:for(const[e,s]of Object.entries(n)){let n;if(n="listener"===e?t.settings[e]===s:t[e]===s,!1===r)break e;r=n}!0===r&&e.push(t)}return e}},[n.propertyDefinitions.addEvents]:{enumerable:!1,writable:!1,value:function(){if(!arguments.length)return e;let t=function(e,t=":scope"){if(Array.isArray(e)||void 0===e)return e;const n=[];for(const[r,s]of Object.entries(e)){const e=r.trim().split(" ");let a,i,o;1===e.length?(a=t,i=e[0]):e.length>1&&(a=e[0],i=e[1]),Array.isArray(s)?(o=s[0],s[1]):o=s;const l={type:i,path:a,listener:o,enable:!1};n.push(l)}return n}(arguments[0],n.compandTree.scopeKey),s=arguments[1]||!1;for(let a of t){const t={};for(const e of["assign","deassign","transsign","compandTree","bindListener"]){const r=n[e];void 0!==r&&(t[e]=r)}i(t,a);const o=new m(t,e);s&&(o.enable=!0),r.push(o)}return e}},[n.propertyDefinitions.removeEvents]:{enumerable:!1,writable:!1,value:function(){const t=e[n.propertyDefinitions.getEvents](arguments[0]);if(0===t.length)return e;let s=r.length-1;for(;s>-1;){const e=r[s];t.includes(e)&&(e.enable=!1,r.splice(s,1)),s--}return e}},[n.propertyDefinitions.enableEvents]:{enumerable:!1,writable:!1,value:function(){const t=e[n.propertyDefinitions.getEvents](arguments[0]);if(0===t.length)return e;for(const e of t)e.enable=!0;return e}},[n.propertyDefinitions.disableEvents]:{enumerable:!1,writable:!1,value:function(){const t=e[n.propertyDefinitions.getEvents](arguments[0]);if(0===t.length)return e;for(const e of t)e.enable=!1;return e}},[n.propertyDefinitions.reenableEvents]:{enumerable:!1,writable:!1,value:function(){const t=e[n.propertyDefinitions.getEvents](arguments[0]);for(const e of t)e.enable=!1,e.enable=!0;return e}},[n.propertyDefinitions.emitEvents]:{enumerable:!1,writable:!1,value:function(t,...r){const s=e[n.propertyDefinitions.getEvents](t);for(const e of s)e.emit(...r);return e}}}),n.events&&e[n.propertyDefinitions.addEvents](n.events),!0===n.enableEvents&&e[n.propertyDefinitions.enableEvents](),e};constructor(e={}){return super(),E.implement(this,e)}}const O={string:String,number:Number,boolean:Boolean,bigint:BigInt,undefined:void 0,null:null},P=Object.keys(O),w=Object.values(O),k={object:Object,array:Array},x=Object.keys(k),S=Object.values(k),T=Object.assign({},O,k),$=Object.keys(T),D=Object.values(T),A=[O.String,O.Number,O.Boolean,k.Object,k.Array];var _=Object.freeze({__proto__:null,ObjectKeys:x,ObjectValues:S,Objects:k,PrimitiveKeys:P,PrimitiveValues:w,Primitives:O,TypeKeys:$,TypeMethods:A,TypeValues:D,Types:T}),C=e=>Object.prototype.toString.call(e).slice(8,-1).toLowerCase();function V(e){let t;const n=C(e);if("string"===n){const n=e.toLowerCase();"object"===n?t={}:"array"===n&&(t=[])}else"object"===n?t={}:"array"===n&&(t=[]);return t}var N=/\.(?=(?:[^"]*"[^"]*")*[^"]*$)/;function q(e,t){const n=e.split(new RegExp(N)),r=n.pop();let s=t;for(const e of n)s=s[e];return s[r]}function I(e,t){const n=C(t),r=C(e);if(!["string","function"].includes(n)||!["array","object"].includes(r))return e;let s=V(e);for(const[r,a]of Object.entries(e))"string"===n?s[r]=q(t,a):"function"===n&&(s[r]=t(a)),s[r]&&"object"==typeof s[r]&&(s[r]=I(s[r],t));return s}function L(e,...t){if(!e)return e;for(const n of t)if(n)for(const[t,r]of Object.entries(n)){const n=C(e[t]),s=C(r);e[t]="object"===n&&"object"===s?L(e[t],r):r}return e}const B={string:String,number:Number,boolean:Boolean,bigint:BigInt,undefined:void 0,null:null};Object.values(B);const z={object:Object,array:Array};Object.values(z);const R=Object.assign({},B,z);Object.values(R),B.String,B.Number,B.Boolean;var M=e=>Object.prototype.toString.call(e).slice(8,-1).toLowerCase();function K(e){let t;const n=M(e);if("string"===n){const n=e.toLowerCase();"object"===n?t={}:"array"===n&&(t=[])}else"object"===n?t={}:"array"===n&&(t=[]);return t}function F(e,...t){if(!e)return e;for(const n of t)if(n)for(const[t,r]of Object.entries(n)){const n=M(e[t]),s=M(r);e[t]="object"===n&&"object"===s?F(e[t],r):r}return e}var U={ancestors:[],delimiter:".",depth:0,frozen:!1,maxDepth:10,nonenumerable:!0,path:!1,sealed:!1,type:!1};function W(e,t,n){const r=Object.assign({},U,n,{ancestors:Object.assign([],n.ancestors)}),s=Object.getOwnPropertyDescriptor(e,t);if((r.nonenumerable||s.enumerable)&&(r.ancestors.includes(e)||r.ancestors.unshift(e),!r.ancestors.includes(s.value)))return r.path&&(r.path="string"===M(r.path)?[r.path,t].join(r.delimiter):t,s.path=r.path),r.type&&(s.type=M(s.value)),r.frozen&&(s.frozen=Object.isFrozen(s.value)),r.sealed&&(s.sealed=Object.isSealed(s.value)),["array","object"].includes(M(s.value))&&(s.value=H(s.value,r)),s}function H(e,t){const n={},r=Object.assign({},U,t);if(r.depth>=r.maxDepth)return n;r.depth++;for(const[t,s]of Object.entries(Object.getOwnPropertyDescriptors(e))){const s=W(e,t,r);void 0!==s&&(n[t]=s)}return n}var J={typeCoercion:!1};function G(e,t,n,r){const s=Object.assign({},n),a=Object.assign({},J,r),i=M(s.value);if(["array","object"].includes(i)){const e=(e=>{let t;const n=M(e);if("array"===n)t=!0;else if("object"===n&&Number.isInteger(e.length)&&e.length>=0){e:for(const n of Object.keys(Object.getOwnPropertyDescriptors(e)))if("length"!==n&&(t=!isNaN(n),!t))break e}else t=!1;return t})(Object.defineProperties(K(i),s.value))?[]:{};s.value=Q(e,s.value,a)}else a.typeCoercion&&void 0!==Object.getOwnPropertyDescriptor(s,"type")&&!["undefined","null"].includes(i)&&(s.value=B[s.type](s.value));return Object.defineProperty(e,t,s),n.sealed&&Object.seal(e[t]),n.frozen&&Object.freeze(e[t]),e}function Q(e,t,n){const r=Object.assign({},J,n);for(const[n,s]of Object.entries(t))G(e,n,s,r);return e}var X=e=>{const t=F({propertyDescriptors:!1,defineProperties:!1,replacers:[],revivers:[]},e);return t.propertyDescriptors?.type&&t.replacers.push((function(e,t){return"bigint"===M(t)?String(t):t})),t};function Y(e,t,n){let r=n;for(const s of e)r=s(t,n);return r}class Z extends EventTarget{constructor(e,t){if(super(),!e)return null;const n=X(t),r=localStorage;Object.defineProperties(this,{path:{value:e},raw:{value:function(){return r.getItem(this.path)}},get:{value:function(){const{path:e}=this,t=r.getItem(this.path);if(["undefined",void 0].includes(t))return;const s=JSON.parse(t,Y.bind(null,n.revivers)),a=K(s),i=n.propertyDescriptors?Q(a,s,n.defineProperties):s;return this.dispatchEvent(new CustomEvent("get",{detail:{path:e,raw:t,data:i}})),i}},set:{value:function(e){const t=e,{path:s}=this;let a=n.propertyDescriptors?JSON.stringify(H(t,n.propertyDescriptors),Y.bind(null,n.replacers)):JSON.stringify(t,Y.bind(null,n.replacers));r.setItem(this.path,a),this.dispatchEvent(new CustomEvent("set",{detail:{path:s,raw:a,data:t}}))}},remove:{value:function(){const{path:e}=this,t=this.raw(),n=this.get();r.removeItem(this.path),this.dispatchEvent(new CustomEvent("remove",{detail:{path:e,raw:t,data:n}}))}}})}}class ee extends EventTarget{constructor(e){super();const t=Object.assign({},e);Object.defineProperties(this,{type:{value:t.type},key:{value:t.key},value:{value:t.value},message:{configurable:!0,get(){let e;return void 0!==this.pass&&(e=t.messages[String(this.pass)](this),Object.defineProperty(this,"message",{value:e})),e}},pass:{writable:!0,set pass(e){Object.defineProperty(this,"pass",{value:e})}}})}}const te={true:e=>`${e.valid}`,false:e=>`${e.valid}`};function ne(e="expand",t){const n=t||this,r=n.schema,s=[].concat(n.advance,n.deadvance,n.unadvance);if("expand"===e){const t=V(r.type);for(const n of s){const r=[].concat(n.advance,n.deadvance,n.unadvance);t[n.key]={};for(const s of r)t[n.key][s.type]={},s.validation?t[n.key][s.type]=this.report(e,s.validation):t[n.key][s.type]=s}return t}if("impand"===e){if(!1===n.valid)return!1;const t=V(r.type);for(const n of s){const r=[].concat(n.advance,n.deadvance,n.unadvance);let s;e:for(const t of r)if("type"===t.type){t.validation&&n.valid&&(s=this.report(e,t.validation));break e}s||(s=n.valid),t[n.key]=s}return t}}class re extends EventTarget{constructor(e={},t){super();const n=Object.assign({messages:te},e);Object.defineProperties(this,{schema:{value:t},verificationType:{value:n.verificationType},required:{value:n.required},definition:{value:n.definition},key:{value:n.key},value:{value:n.value},advance:{value:[]},deadvance:{value:[]},unadvance:{value:[]},valid:{writable:!0,get valid(){},set valid(e){Object.defineProperty(this,"valid",{value:e})}},report:{configurable:!0,get(){const e=ne.bind(this);return Object.defineProperty(this,"report",{value:e}),e}}})}}const se={true:e=>`${e.pass}`,false:e=>`${e.pass}`};class ae extends EventTarget{constructor(e={},t){super();const n=Object.freeze(Object.assign({messages:se},e));Object.defineProperties(this,{definition:{value:n},schema:{value:t},type:{value:n.type},messages:{value:n.messages},validate:{configurable:!0,get(){const e=function(e,t,n,r){const{definition:s,messages:a,type:i}=this;let o=new ee({type:i,key:e,value:s.value,messages:L({},a,s.messages)});const l=s.validate(...arguments);return"object"==typeof l?(o.validation=l,o.pass=l.valid):o.pass=l,o}.bind(this);return Object.defineProperty(this,"validate",{value:e}),e}}})}}class ie extends ae{constructor(e,t){super(Object.assign({},e,{type:"required",validate:(e,n,r,s)=>{const{requiredProperties:a,requiredPropertiesSize:i,type:o}=t,l=Object.assign({},a);let c,p=i;if(Object.assign(V(o),r,s),this.definition,i){if(Object.hasOwn(l,e)&&(delete l[e],p--),p){const e=new ve(l,{path:t.path,parent:t.parent}),n=Object.assign({},s,r);c=e.validate(n).valid}}else c=!0;return c}}),t)}}const{ObjectKeys:oe,TypeKeys:le}=_;class ce extends ae{constructor(e={},t){super(Object.assign({},e,{type:"type",validate:(e,t,n,r)=>{let s;const a=this.definition;let i=C(a.value);if(i="function"===i?C(a.value()):a.value instanceof ve?a.value.type:C(a.value),le.includes(i)){const e=C(t);if("undefined"===e)s=!1;else if("undefined"===i)s=!0;else if(a.value instanceof ve){s=a.value.validate(t,n)}else s=i===e}else s=!1;return s}}),t)}}class pe extends ae{constructor(e={},t){super(Object.assign(e,{type:"range",validate:(e,t)=>{const n=this.definition;let r;if("number"!=typeof t)r=!1;else{const{min:e,max:s}=n;let a,i;a=void 0===e||t>=e.value,i=void 0===s||t<=s.value,r=!(!a||!i)}return r}}),t)}}class ue extends ae{constructor(e={},t){super(Object.assign(e,{type:"length",validate:(e,t)=>{const n=this.definition;let r;if("string"!=typeof t)r=!1;else{const{min:e,max:s}=n;let a,i;a=void 0===e||t.length>=e.value,i=void 0===s||t.length<=s.value,r=!(!a||!i)}return r}}),t)}}class de extends ae{constructor(e={},t){super(Object.assign(e,{type:"enum",validate:(e,t)=>{const n=this.definition;let r;if(["string","number","boolean"].includes(typeof t)){r=n.value.includes(t)}else r=!1;return r}}),t)}}class fe extends ae{constructor(e={},t){super(Object.assign(e,{type:"match",validate:(e,t)=>{const n=this.settings;let r;if(["string","number","boolean"].includes(typeof t)){n.value.exec(t)}else r=!1;return!!r}}),t)}}var he=(...e)=>Object.assign({required:!1,verificationType:"all",strict:!1,properties:{type:"type",value:"value"}},...e);class ve extends EventTarget{constructor(e={},t={}){super(),Object.defineProperties(this,{options:{value:he(t)},type:{value:C(e)},parent:{configurable:!0,get(){const{options:e}=this,t=e.parent?e.parent:null;return Object.defineProperty(this,"parent",{value:t}),t}},root:{configurable:!0,get(){let e=this;e:for(;e&&![void 0,null].includes(e.parent);)e=e.parent;return e}},key:{configurable:!0,get(){const{path:e}=this,t=e?e.split(".").pop():null;return Object.defineProperty(this,"key",{value:t}),t}},path:{configurable:!0,get(){const{options:e}=this,t=e.path?String(e.path):null;return Object.defineProperty(this,"path",{value:t}),t}},required:{configurable:!0,get(){const e=this.options.required;return Object.defineProperty(this,"required",{value:e}),e}},requiredProperties:{configurable:!0,get(){const e=V(this.type);for(const[t,n]of Object.entries(this.target))!0===n.required?.value&&(e[t]=n);return Object.defineProperty(this,"requiredProperties",{value:Object.freeze(e)}),e}},requiredPropertiesSize:{configurable:!0,get(){const e=Object.keys(this.requiredProperties).length;return Object.defineProperty(this,"requiredPropertiesSize",{value:e}),e}},verificationType:{configurable:!0,get(){const e=this.options.verificationType;return Object.defineProperty(this,"verificationType",{value:e}),e}},target:{configurable:!0,get(){let t;const n=this.type;"array"===n?t=e.slice(0,1):"object"===n&&(t=e);const r=function(e,t){const n=V(e);if(ge(e,t))return e;for(const[r,s]of Object.entries(e)){let e={};C(s);const a=ge(s,t);if(_.TypeValues.includes(s))Object.assign(e,{type:{value:s}});else if(_.TypeKeys.includes(s))Object.assign(e,{type:{value:_.Types[s]}});else if(a){if(a)for(const[n,a]of Object.entries(s)){const s=ye(a,t);if(s)s&&(e[n]=a);else{let s;if("type"===n)if(a&&"object"==typeof a){const e=t.path?[t.path,r].join("."):r;s=new ve(a,Object.assign({},t.options,{parent:t,path:e}))}else s=a;else s=a;e[n]={type:n,value:s}}}}else{const n=t.path?[t.path,r].join("."):r;Object.assign(e,{type:{type:"type",value:new ve(s,Object.assign({},t.options,{parent:t,path:n}))}})}e.validators=[],n[r]=e;const i=new Map;i.set("type",Object.assign({},{type:"type",validator:ce,value:e.type.value})),i.set("required",Object.assign({},{type:"required",validator:ie,value:e.required?.value||!1})),e.range?i.set("range",Object.assign({},e.range,{type:"range",validator:pe})):(e.min||e.max)&&i.set("range",Object.assign({},{type:"range",min:e.min,max:e.max,validator:pe})),e.length?i.set("length",Object.assign({},e.length,{type:"length",validator:ue})):(e.minLength||e.maxLength)&&i.set("length",Object.assign({},{type:"length",min:e.minLength,max:maxLength,validator:ue})),e.enum&&i.set("enum",Object.assign({},e.enum,{type:"enum",validator:de})),e.match&&i.set("match",Object.assign({},e.match,{type:"match",validator:fe})),delete e.min,delete e.max,delete e.minLength,delete e.maxLength;for(const[n,r]of i.entries()){const s=r.validator;e[n]=r,e.validators.push(new s(r,t))}}return n}(t,this);return Object.defineProperty(this,"target",{value:r}),r}},validate:{value:function(...e){let{$sourceName:t,$source:n,$target:r}=function(...e){let t,n,r;1===e.length?(t=null,n=e.shift(),r=null):2===e.length?["number","string"].includes(typeof e[0])?(t=e.shift(),n=e.shift(),r=null):e[0]&&"object"==typeof e[0]&&(t=null,n=e.shift(),r=e.shift()):3===e.length&&["number","string"].includes(typeof e[0])&&(t=e.shift(),n=e.shift(),r=e.shift());return{$sourceName:t,$source:n,$target:r}}(...e);r=r||V(n);const{target:s,path:a,required:i,type:o,verificationType:l}=this;let c=new re({required:i,verificationType:l,definition:s,key:t,value:n},this);const p=Object.entries(n);let u=0;for(;u<p.length;){const[e,t]=p[u],s=this.validateProperty(e,t,n,r);!0===s.valid?c.advance.push(s):!1===s.valid?c.deadvance.push(s):void 0===s.valid&&c.unadvance.push(s),u++}return c.advance.length?c.valid=!0:c.deadvance.length?c.valid=!1:c.unadvance.length?c.valid=void 0:c.valid=!0,c}},validateProperty:{value:function(){const{$key:e,$value:t,$source:n,$target:r}=function(...e){let[t,n,r,s]=e;return{$key:t,$value:n,$source:r,$target:s}}(...arguments),{target:s,path:a,required:i,schema:o,type:l,verificationType:c}=this;let p;"array"===l?p=s[0]:"object"===l&&(p=s[e]);const u=new re({required:i,verificationType:c,definition:p,key:e,value:t},this);if(void 0===p){const n=new ee({type:null,definition:null,key:e,value:t},this);n.pass=!1,u.unadvance.push(n)}else e:for(const[s,a]of Object.entries(p.validators)){const s=a.validate(e,t,n,r);if(!0===s.pass?u.advance.push(s):!1===s.pass?u.deadvance.push(s):void 0===s.pass&&u.unadvance.push(s),"one"===this.verificationType&&u.deadvance.length)break e}return u.deadvance.length?u.valid=!1:u.advance.length?u.valid=!0:u.unadvance.length&&(u.valid=!1),u}}})}}function ge(e,t){if(!e||e instanceof ve)return!1;const n=t.options.properties.type;return Object.hasOwn(e,n)}function ye(e,t){if(!e)return!1;const n=t.options.properties.value;return Object.hasOwn(e,n)}class be extends CustomEvent{constructor(e,t,n){super(e,t),Object.defineProperties(this,{model:{get:()=>n},key:{configurable:!0,get(){const e=this.path?this.path.split(".").pop():null;return Object.defineProperty(this,"key",{value:e}),e}},change:{configurable:!0,get(){const e=t.change;return Object.defineProperty(this,"change",{value:e}),e}},value:{configurable:!0,get(){const e=t.value;return Object.defineProperty(this,"value",{value:e}),e}},path:{configurable:!0,get(){const e=t.path;return Object.defineProperty(this,"path",{value:e}),e}},detail:{configurable:!0,get(){const e=t.detail;return Object.defineProperty(this,"detail",{value:e}),e}}})}}class je{#h=!1;#v=!1;#g=!1;#y=!1;#b;#j;#m;#E;constructor(e={}){for(const[t,n]of Object.entries(e))this[t]=n}get preter(){return this.#j}set preter(e){if(!0===this.#v)return this.#j;this.#j=e?.valueOf(),this.#v=!0}get anter(){return this.#m}set anter(e){if(!0===this.#g)return this.#m;this.#m=e?.valueOf(),this.#g=!0}get conter(){if(!0===this.#y||[this.#v,this.#g].includes(!1))return this.#E;const e=JSON.stringify(this.preter);let t;return t=JSON.stringify(this.anter)!==e,this.#E=t,this.#y=!0,this.#E}}let me=class extends CustomEvent{constructor(e,t,n){super(e),Object.defineProperties(this,{key:{configurable:!0,get(){const e=t.key;return Object.defineProperty(this,"key",{value:e}),e}},path:{configurable:!0,get(){const e=n.path?[n.path,t.key].join("."):t.key;return Object.defineProperty(this,"path",{value:e}),e}},value:{configurable:!0,get(){const e=t.value;return Object.defineProperty(this,"value",{value:e}),e}},valid:{configurable:!0,get(){const e=t.valid;return Object.defineProperty(this,"valid",{value:e}),e}}})}};var Ee={assign:function(e,t,...n){const r=Object.assign({},t),s=r.assignArray||"assign",{path:a,schema:i,source:o,target:l}=e,{enableValidation:c,mutatorEvents:p,required:u,sourceTree:d,validationEvents:f}=r,h=[],v=new je({preter:e});for(let t of n){let n;const o=new je({preter:e});let u;Array.isArray(t)?n=[]:t&&"object"==typeof t&&(n={}),c&&i&&(u=i.validate(t,e.valueOf()),u.report());e:for(let[o,u]of Object.entries(t)){const h=new je({preter:l[o]}),v=new je({preter:l[o]});if(i&&c){const n=e.valueOf(),r=t,s=i.validateProperty(o,u,r,n);if(f){let t,n;s.valid?(t="validProperty",n=["validProperty",o].join(":")):(t="nonvalidProperty",n=["nonvalidProperty",o].join(":"));for(const r of[t,n])e.dispatchEvent(new me(r,s,e))}if(!s.valid)continue e}let g;if(u&&"object"==typeof u){let t;u instanceof e.constructor&&(g=u.valueOf()),t="array"===i?.type?i.target[0].type.value:"object"===i?.type?i.target[o].type.value:null;const c=a?[a,o].join("."):String(o);if(!1===d){const s=L({},r,{path:c,parent:e});g=new e.constructor(u,t,s);const a={[o]:g};Object.assign(l,a),Object.assign(n,a)}else{if(l[o]instanceof e.constructor)g=l[o];else{const n=V(u),s=L({},r,{path:c,parent:e});g=new e.constructor(n,t,s)}const a={[o]:g};Object.assign(l,a),Object.assign(n,a),e.retroReenableEvents(),"array"===g.type?["push","unshift"].includes(s)?g[s](...u):g[s](u):"object"===g.type&&g.assign(u)}}else{g=u;const e={[o]:g};Object.assign(l,e),Object.assign(n,e)}if(p){const t=a?[a,o].join("."):String(o);if(p["assignSourceProperty:$key"]){const r=["assignSourceProperty",o].join(":");v.anter=l[o],e.dispatchEvent(new be(r,{path:t,value:g,change:v,detail:{source:n}},e))}p.assignSourceProperty&&(h.anter=l[o],e.dispatchEvent(new be("assignSourceProperty",{path:t,value:g,change:h,detail:{source:n}},e)))}}h.push(n),p&&p.assignSource&&(o.anter=e,e.dispatchEvent(new be("assignSource",{path:a,change:o,detail:{source:n}},e)))}return p&&p.assign&&(v.anter=e,e.dispatchEvent(new be("assign",{path:a,change:v,detail:{sources:h}},e))),e},defineProperties:function(e,t,n){const{path:r,schema:s}=e;let{enableValidation:a,mutatorEvents:i,required:o,validation:l,validationEvents:c,validationReport:p}=t;const u=Object.entries(n),d=new je({preter:e});for(const[n,r]of u)e.defineProperty(n,r,Object.assign({},t,{validation:l,validationReport:p}));return i&&i.defineProperties&&(d.anter=e,e.dispatchEvent(new be("defineProperties",{path:r,value:e.valueOf(),detail:{descriptors:n}},e))),e},defineProperty:function(e,t,n,r){const s=Object.assign({},t),a=s.assignArray||"defineProperties",{descriptorTree:i,enableValidation:o,mutatorEvents:l,validation:c,validationEvents:p,validationReport:u}=s,{target:d,path:f,schema:h}=e,v=r.value,g=(Object.getOwnPropertyDescriptor(d,n)||{}).value,y=new je({preter:g}),b=new je({preter:g}),j=g instanceof e.constructor;if(h&&o){const t=h.validateProperty(n,I(v,"value")||v,{},e.valueOf());if(p){let r,s;t.valid?(r="validProperty",s=["validProperty",n].join(":")):(r="nonvalidProperty",s=["nonvalidProperty",n].join(":"));for(const n of[r,s])e.dispatchEvent(new me(n,t,e))}if(!t.valid)return e}if(v&&"object"==typeof v){const t=f?[f,n].join("."):String(n);if(j)!0===i?g.defineProperties(r):Object.defineProperty(d,n,r);else{let o;h&&(o="array"===h.type?h.target[0].type.value:"object"===h.type?h.target[n].type.value:void 0);let l=V(v);const c=L({},s,{path:t,parent:e}),p=new e.constructor(l,o,c);!0===i?(d[n]=p,e.retroReenableEvents(),"array"===p.type?["push","unshift"].includes(a)?p[a](...v):p[a](v):"object"===p.type&&p.defineProperties(v)):!1===i&&Object.defineProperty(d,n,r)}}else Object.defineProperty(d,n,r);if(l){const t=f?[f,n].join("."):String(n);if(l["defineProperty:$key"]){b.anter=d[n];const s=["defineProperty",n].join(":");e.dispatchEvent(new be(s,{path:t,value:v,change:b,detail:{prop:n,descriptor:r}},e))}l.defineProperty&&(y.anter=d[n],e.dispatchEvent(new be("defineProperty",{path:t,value:v,change:y,detail:{prop:n,descriptor:r}},e)))}return e},freeze:function(e,t){const{recursive:n,mutatorEvents:r}=t,{target:s}=e;if(!0===n)for(const[t,n]of Object.entries(s))n instanceof e.constructor&&(n.freeze(),r&&r.freezeProperty&&e.dispatchEvent(new be("freezeProperty",{path:n.path},e)));return Object.freeze(s),r&&r.freeze&&e.dispatchEvent(new be("freeze",{path:e.path},e)),e},seal:function(e,t){const{recursive:n,mutatorEvents:r}=t,{target:s}=e;if(!0===n)for(const[t,n]of Object.entries(s))n instanceof e.constructor&&(n.seal(),r&&r.sealProperty&&e.dispatchEvent(new be("sealProperty",{path:n.path},e)));return Object.seal(s),r&&r.seal&&e.dispatchEvent(new be("seal",{path:e.path},e)),e}};var Oe={concat:function(e,t){const{target:n,path:r,schema:s}=e,{enableValidation:a,mutatorEvents:i,source:o,validationEvents:l}=t,c=[].concat(...arguments);let p=n.length;const u=[];let d,f=[...Array.from(n)];e:for(let t of c){if(s&&a){const t=e.valueOf(),n=o||V(t),r=s.validateProperty(p,$subvalue,n,t);if(s&&l){let t,n;r.valid?(t="validProperty",n=["validProperty",p].join(":")):(t="nonvalidProperty",n=["nonvalidProperty",p].join(":"));for(const s of[t,n])e.dispatchEvent(new me(s,r,e))}if(!r.valid){p++;continue e}}const n=r?[r,p].join("."):String(p);if(t&&"object"==typeof t){t instanceof e.constructor&&(t=t.valueOf());let r=s?.target[0].type.value||null;const a=V(t);let i=new e.constructor(a,r,{path:n,parent:e});i.concat(t),u[p]=i}else u[p]=t;if(f=Array.prototype.concat.call(f,u[p]),i){const t=r?[r,p].join("."):String(p);i.concatElement&&e.dispatchEvent(new be("concatElement",{path:t,value:u[p],detail:{valueIndex:p,value:u[p]}},e)),i["concatElement:$index"]&&e.dispatchEvent(new be("concatElement",{path:t,value:u[p],detail:{valueIndex:p,value:u[p]}},e))}p++}return d=new e.constructor(f,s,e.options),i&&i.concat&&e.dispatchEvent(new be("concat",{path:r,detail:{values:d}},e)),d},copyWithin:function(e,t){const{target:n,path:r}=e,{enableValidation:s,validationEvents:a,mutatorEvents:i}=t,o=arguments[0]>=0?arguments[0]:n.length=arguments[0],l=arguments[1]>=0?arguments[1]:n.length+arguments[1],c=void 0===arguments[2]?n.length:arguments[2]>=0?arguments[2]:n.length+arguments[2],p=[];let u=l,d=o;for(;u<c;){const t=n[u];if(p.push(t),Array.prototype.copyWithin.call(n,d,u,u+1),e.retroReenableEvents(),i){const n=r?[r,u].join("."):String(u);if(i.copyWithinElement&&e.dispatchEvent(new be("copyWithinElement",{path:n,value:t,detail:{target:d,start:u,end:u+1,item:t}},e)),i["copyWithinElement:$index"]){const r=["copyWithinElement",u].join(":");e.dispatchEvent(new be(r,{path:n,value:t,detail:{target:d,start:u,end:u+1,item:t}},e))}}u++,d++}return i&&i.copyWithin&&e.dispatchEvent(new be("copyWithin",{path:r,detail:{target:o,start:l,end:c,items:p}},e)),e},fill:function(e,t,...n){const r=Object.assign({},t),{target:s,path:a,schema:i}=e,o=r.assignObject,l=r.assignArray||o,{enableValidation:c,lengthen:p,mutatorEvents:u,validationEvents:d}=r,f=[];let h,v;h="number"==typeof n[1]?n[1]>=0?n[1]:s.length+n[1]:0,v="number"==typeof n[2]?n[2]>=0?n[2]:s.length+n[2]:s.length,p&&s.length<v&&(s.length=v);let g=h;e:for(;g<s.length&&g<v;){if(i&&c){let t=i.validate(t,e.valueOf());if(d){let n,r;t.valid?(n="validProperty",r=["validProperty",g].join(":")):(n="nonvalidProperty",r=["nonvalidProperty",g].join(":"));for(const s of[n,r])e.dispatchEvent(new me(s,t,e))}if(!t.valid)continue e}const t=a?[a,g].join("."):String(g);let p,h=n[0];if(h&&"object"==typeof h){h instanceof e.constructor&&(h=h.valueOf());const n=i?.target[0].type.value||null,s=V(h),a=Object.assign({},r,{path:t,parent:e});p=new e.constructor(s,n,a)}if(Array.prototype.fill.call(s,p,g,g+1),e.retroReenableEvents(),"array"===p.type?["push","unshift"].includes(l)?p[l](...h):p[l](h):"object"===p.type&&p[o](h),f.push(p),u){const t=a?[a,g].join("."):String(g);if(u.fillElement&&e.dispatchEvent(new be("fillElement",{path:t,value:p,detail:{start:g,end:g+1,value:p}},e)),u["fillElement:$index"]){const n=["fillElement",g].join(":");e.dispatchEvent(new be(n,{path:t,detail:{start:g,end:g+1,value:p}},e))}}g++}return u&&u.fill&&e.dispatchEvent(new be("fill",{path:a,detail:{start:h,end:v,filled:f}},e)),e},pop:function(e,t){const{mutatorEvents:n}=t,{target:r,path:s}=e,a=Array.prototype.pop.call(r),i=r.length-1;if(e.retroReenableEvents(),n&&n.pop){const t=s?[s,i].join("."):String(i);e.dispatchEvent(new be("pop",{path:t,value:a,detail:{elementIndex:i,element:a}},e))}return a},push:function(e,t,...n){const r=Object.assign({},t),s="push",a=r.assignObject,{enableValidation:i,mutatorEvents:o,source:l,validationEvents:c}=r,{target:p,path:u,schema:d}=e,f=[];let h=0;for(let t of n){let n;if(d&&i){const n=e.valueOf(),r=l||V(n),s=d.validateProperty(h,t,r,n);if(c){let t,n;s.valid?(t="validProperty",n=["validProperty",h].join(":")):(t="nonvalidProperty",n=["nonvalidProperty",h].join(":"));for(const r of[t,n])e.dispatchEvent(new me(r,s,e))}if(!s.valid)return p.length}const v=u?[u,h].join("."):String(h);if(t&&"object"==typeof t){t=t instanceof e.constructor?t.valueOf():t;const i=d?.target[0].type.value||null,o=V(C(t)),l=Object.assign({},r,{path:v,parent:e});n=new e.constructor(o,i,l),Array.prototype.push.call(p,n),e.retroReenableEvents(),"array"===n.type?["push","unshift"].includes(s)?n[s](...t):n[s](t):"object"===n.type&&n[a](t)}else n=t,Array.prototype.push.call(p,n);if(f.push(n),o){const t=u?[u,h].join("."):String(h);if(o.pushElement&&e.dispatchEvent(new be("pushElement",{path:t,value:f[h],detail:{elementsIndex:h,element:f[h]}},e)),o["pushElement:$index"]){const n=["pushElement",h].join(":");e.dispatchEvent(new be(n,{path:t,value:f[h],detail:{elementsIndex:h,element:f[h]}},e))}}h++}return o&&o.push&&e.dispatchEvent(new be("push",{path:u,detail:{elements:f}},e)),p.length},reverse:function(e,t){const{mutatorEvents:n}=t,{target:r,path:s}=e;return Array.prototype.reverse.call(r,...arguments),e.retroReenableEvents(),n&&n.reverse&&e.dispatchEvent(new be("reverse",{path:s,detail:{reference:r}},e)),e},shift:function(e,t){const{mutatorEvents:n}=t,{target:r,path:s}=e,a=Array.prototype.shift.call(r),i=0;if(e.retroReenableEvents(),n&&n.shift){const t=s?[s,i].join("."):String(i);e.dispatchEvent(new be("shift",{path:t,value:a,detail:{elementIndex:i,element:a}},e))}return a},splice:function(e,t){const n=Object.assign({},t),r=n.assignObject,s=n.assignArray||r,{mutatorEvents:a,source:i}=n,{target:o,path:l,schema:c}=e,{enableValidation:p,validationEvents:u}=n,d=[...arguments],f=d[0]>=0?d[0]:o.length+d[0],h=d[1]<=0?0:void 0===d[1]||f+d[1]>=o.length?o.length-f:d[1],v=d.slice(2),g=v.length,y=[];let b=0;for(;b<h;){const t=Array.prototype.splice.call(o,f,1)[0];if(y.push(t),a){const n=l?[l,b].join("."):String(b);if(a.spliceDeleteElement&&e.dispatchEvent(new be("spliceDeleteElement",{path:n,value:t,detail:{index:f+b,deleteIndex:b,deleteItem:t}},e)),a["spliceDeleteElement:$index"]){const r=["spliceDeleteElement",b].join(":");e.dispatchEvent(new be(r,{path:n,value:t,detail:{index:f+b,deleteIndex:b,deleteItem:t}},e))}}b++}let j=0;e:for(;j<g;){let t=v[j];if(c&&p){const t=e.valueOf(),n=i||V(t),r=c.validateProperty(elementIndex,element,n,t);if(u){let t,n;r.valid?(t="validProperty",n=["validProperty",j].join(":")):(t="nonvalidProperty",n=["nonvalidProperty",j].join(":"));for(const s of[t,n])e.dispatchEvent(new ValidatorEvent(s,r,e))}if(!r.valid){j++;continue e}}const d=l?[l,j].join("."):String(j);let h=f+j;if(t&&"object"==typeof t){t instanceof e.constructor&&(t=t.valueOf());const a=c?.target[0].type.value||null,i=V(t),l=assign({},n,{path:d,parent:e});t=new e.constructor(i,a,l),Array.prototype.splice.call(o,h,0,t),e.retroReenableEvents(),"array"===t.type?["push","unshift"].includes(s)?t[s](...$value):t[s]($value):"object"===t.type&&t[r]($value)}else Array.prototype.splice.call(o,h,0,t);if(a){const n=l?[l,j].join("."):String(j);if(a.spliceAddElement&&e.dispatchEvent(new be("spliceAddElement",{path:n,value:t,detail:{index:f+j,addIndex:j,addItem:t}},e)),a["spliceAddElement:$index"]){const r=["spliceAddElement",j].join(":");e.dispatchEvent(new be(r,{path:n,value:t,detail:{index:f+j,addIndex:j,addItem:t}},e))}}j++}return a&&a.splice&&e.dispatchEvent(new be("splice",{path:l,detail:{$start:f,deleted:y,added:v,length:o.length}},e)),y},unshift:function(e,t,...n){const r=Object.assign({},t),s=r.assignObject,{enableValidation:a,mutatorEvents:i,source:o,validationEvents:l}=r,{target:c,path:p,schema:u}=e,d=[];let f=0;for(let t of n){let n;if(u&&a){const n=e.valueOf(),r=o||V(n),s=u.validateProperty(f,t,r,n);if(l){let t,n;s.valid?(t="validProperty",n=["validProperty",f].join(":")):(t="nonvalidProperty",n=["nonvalidProperty",f].join(":"));for(const r of[t,n])e.dispatchEvent(new ValidatorEvent(r,s,e))}if(!s.valid)return c.length}const h=p?[p,f].join("."):String(f);if(t&&"object"==typeof t){t=t instanceof e.constructor?t.valueOf():t;const a=u?.target[0].type.value||null,i=V(C(t)),o=Object.assign({},r,{path:h,parent:e});n=new e.constructor(i,a,o),Array.prototype.unshift.call(c,n),e.retroReenableEvents(),"array"===n.type?n.unshift(...t):"object"===n.type&&n[s](t)}else n=t,Array.prototype.unshift.call(c,n);if(d.unshift(n),i){const t=p?[p,f].join("."):String(f);if(i.unshiftElement&&e.dispatchEvent(new be("unshiftElement",{path:t,value:d[f],detail:{elementsIndex:f,element:d[f]}},e)),i["unshiftElement:$index"]){const n=["unshiftElement",f].join(":");e.dispatchEvent(new be(n,{path:t,value:d[f],detail:{elementsIndex:f,element:d[f]}},e))}}f++}return i&&i.unshift&&e.dispatchEvent(new be("unshift",{path:p,detail:{elements:d}},e)),c.length}};var Pe={get:function(e,t,...n){let r;const s=t;return"string"==typeof n[0]?(2===n.length&&L(s,n[1]),r=function(e,t,n){const{target:r,path:s}=e,{mutatorEvents:a,pathkey:i,subpathError:o}=t;if(!0===i){const i=n.split(new RegExp(N)),l=i.shift();let c=r[l];if(i.length){if(!1===o&&void 0===c)return;return c.get(i.join("."),t)}if(a&&(a.getProperty&&e.dispatchEvent(new be("getProperty",{path:s,value:c,detail:{key:l,value:c}},e)),a["getProperty:$key"])){const t=["getProperty",l].join(":"),n=[s,l].join(".");e.dispatchEvent(new be(t,{path:n,detail:{value:c}},e))}return c}if(!1===i)return r[propertyKey]}(e,s,...n)):(1===n.length&&L(s,n[0]),r=function(e,t){const{path:n}=e,{mutatorEvents:r}=t;return r&&r.get&&e.dispatchEvent(new be("get",{path:n,value:e.valueOf(),detail:{value:e.valueOf()}},e)),e}(e,s,...n)),r},set:function(e,t,...n){let r;const s=t;return"string"==typeof n[0]?(3===n.length&&L(s,n[2]),r=function(e,t,n,r){const s=Object.assign({},t),a="set",i=s.assignArray||"set",{target:o,path:l,schema:c}=e,{enableValidation:p,mutatorEvents:u,pathkey:d,recursive:f,subpathError:h,validationEvents:v,source:g}=s;if(!0===d){const t=n.split(new RegExp(N)),d=t.shift();let y;const b=C(r),j=l?[l,d].join("."):String(d);if(t.length){if(f&&void 0===o[d]){let t,n;t="array"===c?.type?c.target[0].type.value:"object"===c?.type?c.target[d].type.value:void 0,n="array"===b?[]:"object"===b||isNaN(Number(d))?{}:[];const r=L({},s,{path:j,parent:e});y=new e.constructor(n,t,r)}else y=o[d];if(!1===h&&void 0===y)return;return"array"===y.type?["push","unshift"].includes(i)?y[i](...r):y[i](r):"object"===y.type&&y[a](t.join("."),r,s),y}if(c&&p){const t=e.valueOf(),n=g||V(t),s=c.validateProperty(d,r,n,t);if(v){let t,n;s.valid?(t="validProperty",n=["validProperty",d].join(":")):(t="nonvalidProperty",n=["nonvalidProperty",d].join(":"));for(const r of[t,n])e.dispatchEvent(new me(r,s,e))}if(!s.valid)return}if(r&&"object"==typeof r){r instanceof e.constructor&&(r=r.valueOf());const t=C(r);let n,l;n="array"===c?.type?c.target[0].type.value:"object"===c?.type?c.target[d].type.value:void 0,l="array"===t?[]:"object"===t||isNaN(Number(d))?{}:[];const p=L({},s,{path:j,parent:e});y=new e.constructor(l,n,p),o[d]=y,e.retroReenableEvents(),"array"===y.type?["push","unshift"].includes(i)?y[i](...r):y[i](r):"object"===y.type&&y[a](r)}else y=r,o[d]=y;const m=y.valueOf();if(u){const t=l?[l,d].join("."):String(d);if(u.setProperty&&e.dispatchEvent(new be("setProperty",{path:t,value:m,detail:{key:d,value:m}},e)),u["setProperty:$key"]){const n=["setProperty",d].join(":");e.dispatchEvent(new be(n,{path:t,value:m,detail:{value:m}},e))}}return y}if(!1===d){let t=n;if(r&&"object"==typeof r){r instanceof e.constructor&&(r=r.valueOf());const n=C(r);let p,u;"array"===c?.type&&(p=c.target[0].type.value),p="object"===c?.type?c.target[t].type.value:void 0,u="array"===n?[]:"object"===n||isNaN(Number(t))?{}:[];const d=L({},s,{path:l?[l,t].join("."):String(t),parent:e});propertyValue=new e.constructor(u,p,d),o[t]=propertyValue,e.retroReenableEvents(),"array"===propertyValue.type?["push","unshift"].includes(i)?propertyValue[i](...r):propertyValue[i](r):"object"===propertyValue.type&&propertyValue[a](r)}else propertyValue=r,o[t]=propertyValue;if(u){const n=l?[l,t].join("."):String(t);if(u.setProperty&&e.dispatchEvent(new be("setProperty",{path:n,value:_propertyValue,detail:{key:t,value:_propertyValue}},e)),u["setProperty:$key"]){const r=["setProperty",t].join(":");e.dispatchEvent(new be(r,{path:n,value:_propertyValue,detail:{value:_propertyValue}},e))}}return propertyValue}}(e,s,...n)):(2===n.length&&L(s,n[1]),r=function(e,t,n){const{path:r,schema:s}=e;let{enableValidation:a,mutatorEvents:i,required:o,validationEvents:l}=t;for(const[r,s]of Object.entries(n))e.set(r,s,Object.assign(t,{source:n}));return i&&i.set&&e.dispatchEvent(new be("set",{path:r,value:e.valueOf(),detail:{value:e.valueOf()}},e)),e}(e,s,...n)),r},delete:function(e,t,...n){let r;const s=t;return"string"==typeof n[0]?(2===n.length&&L(s,n[1]),r=function(e,t,n){const{target:r,path:s,schema:a}=e,{mutatorEvents:i,pathkey:o,subpathError:l,enableValidation:c,validationEvents:p}=t;if(!0!==o)if(!1!==o);else{const o=n,l=r[o];if(a&&c){const t=e.valueOf();delete t[o];const n=a.validate(o,t,e.valueOf());if(p){let t,r;n.valid?(t="validProperty",r=["validProperty",o].join(":")):(t="nonvalidProperty",r=["nonvalidProperty",o].join(":"));for(const s of[t,r])e.dispatchEvent(new me(s,n,e))}if(!n.valid)return}if(l instanceof e.constructor&&l.delete(t),delete r[o],i&&(i.deleteProperty&&e.dispatchEvent(new be("deleteProperty",{path:s,value:l,detail:{key:o,value:l}},e)),i["deleteProperty:$key"])){const t=["deleteProperty",o].join(":"),n=[s,o].join(".");e.dispatchEvent(new be(t,{path:n,value:l,detail:{value:l}},e))}}else{const o=n.split(new RegExp(N)),u=o.shift();let d=r[u];if(o.length){if(!1===l&&void 0===d)return;return d.delete(o.join("."),t)}if(a&&c){const t=e.valueOf();delete t[u];const n=a.validate(u,t,{},e.valueOf());if(p){let t,r;const a=s?[s,u].join("."):String(u);n.valid?(t="validProperty",r=["validProperty",u].join(":")):(t="nonvalidProperty",r=["nonvalidProperty",u].join(":"));for(const s of[t,r])e.dispatchEvent(new me(s,Object.assign(n,{path:a}),e))}if(!n.valid)return}if(d&&"object"==typeof d&&d.delete(t),delete r[u],i&&(i.deleteProperty&&e.dispatchEvent(new be("deleteProperty",{path:s,value:d,detail:{key:u,value:d}},e)),i["deleteProperty:$key"])){const t=["deleteProperty",u].join(":"),n=[s,u].join(".");e.dispatchEvent(new be(t,{path:n,value:d,detail:{value:d}},e))}}}(e,s,...n)):(1===n.length&&L(s,n[0]),r=function(e,t){const{target:n}=e;for(const[r,s]of Object.entries(n))e.delete(r,t);const{path:r}=e,{mutatorEvents:s}=t;return s&&s.delete&&e.dispatchEvent(new be("delete",{path:r,detail:{value:e.valueOf()}},e)),e}(e,s,...n)),r}};const we=Object.freeze({object:[{keys:["valueOf"],methodDescriptor:function(e,t){return{value:function(){return t.parse({type:"object"})}}}},{keys:["toString"],methodDescriptor:function(e,t){return{value:function(e={}){const n=void 0!==e.replacer?e.replacer:null,r=void 0!==e.space?e.space:0;return t.parse({type:"string",replacer:n,space:r})}}}},{keys:["entries","fromEntries","getOwnPropertyDescriptors","getOwnPropertyDescriptor","getOwnPropertyNames","groupBy","hasOwn","is","getPrototypeOf","isExtensible","isFrozen","isSealed","keys","preventExtensions","values"],methodDescriptor:function(e,t){return{value:Object[e].bind(null,t.valueOf())}}},{keys:["propertyIsEnumerable","hasOwnProperty"],methodDescriptor:function(e,t){return{value:()=>t.parse({type:"object"})[e]}}},{type:"mutators",keys:Object.keys(Ee),methodDescriptor:function(e,t,n){return{value:Ee[e].bind(null,t,n)}}}],array:[{keys:["length"],methodDescriptor:function(e,t,n){return{get:()=>t.target.length,set(e){t.target.length=e}}}},{keys:["from","fromAsync","isArray","of"],methodDescriptor:function(e,t){return{value:Array[e]}}},{keys:["at","every","filter","find","findIndex","findLast","findLastIndex","flat","flatMap","forEach","includes","indexOf","join","lastIndexOf","map","reduce","reduceRight","slice","some","sort","toReversed","toSorted","toSpliced","with"],methodDescriptor:function(e,t){ret