typeson-registry 13.0.0 → 13.0.1

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 (103) hide show
  1. package/dist/index.js +30 -30
  2. package/dist/index.js.map +1 -1
  3. package/dist/index.min.js +2 -2
  4. package/dist/index.min.js.map +1 -1
  5. package/dist/index.umd.cjs +136 -107
  6. package/dist/index.umd.cjs.map +1 -1
  7. package/dist/index.umd.min.cjs +3 -3
  8. package/dist/index.umd.min.cjs.map +1 -1
  9. package/dist/presets/array-nonindex-keys.umd.cjs +1 -1
  10. package/dist/presets/array-nonindex-keys.umd.cjs.map +1 -1
  11. package/dist/presets/builtin.umd.cjs +1 -1
  12. package/dist/presets/builtin.umd.cjs.map +1 -1
  13. package/dist/presets/postmessage.umd.cjs +1 -1
  14. package/dist/presets/postmessage.umd.cjs.map +1 -1
  15. package/dist/presets/socketio.umd.cjs +1 -1
  16. package/dist/presets/socketio.umd.cjs.map +1 -1
  17. package/dist/presets/sparse-undefined.umd.cjs +1 -1
  18. package/dist/presets/sparse-undefined.umd.cjs.map +1 -1
  19. package/dist/presets/special-numbers.umd.cjs +1 -1
  20. package/dist/presets/special-numbers.umd.cjs.map +1 -1
  21. package/dist/presets/structured-cloning-throwing.umd.cjs +2 -2
  22. package/dist/presets/structured-cloning-throwing.umd.cjs.map +1 -1
  23. package/dist/presets/structured-cloning.umd.cjs +2 -2
  24. package/dist/presets/structured-cloning.umd.cjs.map +1 -1
  25. package/dist/presets/undef.umd.cjs +1 -1
  26. package/dist/presets/undef.umd.cjs.map +1 -1
  27. package/dist/presets/universal.umd.cjs +1 -1
  28. package/dist/presets/universal.umd.cjs.map +1 -1
  29. package/dist/types/arraybuffer.umd.cjs +1 -1
  30. package/dist/types/arraybuffer.umd.cjs.map +1 -1
  31. package/dist/types/bigint-object.umd.cjs +1 -1
  32. package/dist/types/bigint-object.umd.cjs.map +1 -1
  33. package/dist/types/bigint.umd.cjs +1 -1
  34. package/dist/types/bigint.umd.cjs.map +1 -1
  35. package/dist/types/blob.umd.cjs +1 -1
  36. package/dist/types/blob.umd.cjs.map +1 -1
  37. package/dist/types/cloneable.umd.cjs +1 -1
  38. package/dist/types/cloneable.umd.cjs.map +1 -1
  39. package/dist/types/cryptokey.umd.cjs +2 -2
  40. package/dist/types/cryptokey.umd.cjs.map +1 -1
  41. package/dist/types/dataview.umd.cjs +1 -1
  42. package/dist/types/dataview.umd.cjs.map +1 -1
  43. package/dist/types/date.umd.cjs +1 -1
  44. package/dist/types/date.umd.cjs.map +1 -1
  45. package/dist/types/domexception.umd.cjs +1 -1
  46. package/dist/types/domexception.umd.cjs.map +1 -1
  47. package/dist/types/dommatrix.umd.cjs +1 -1
  48. package/dist/types/dommatrix.umd.cjs.map +1 -1
  49. package/dist/types/dompoint.umd.cjs +1 -1
  50. package/dist/types/dompoint.umd.cjs.map +1 -1
  51. package/dist/types/domquad.umd.cjs +1 -1
  52. package/dist/types/domquad.umd.cjs.map +1 -1
  53. package/dist/types/domrect.umd.cjs +1 -1
  54. package/dist/types/domrect.umd.cjs.map +1 -1
  55. package/dist/types/error.umd.cjs +1 -1
  56. package/dist/types/error.umd.cjs.map +1 -1
  57. package/dist/types/errors.umd.cjs +1 -1
  58. package/dist/types/errors.umd.cjs.map +1 -1
  59. package/dist/types/file.umd.cjs +1 -1
  60. package/dist/types/file.umd.cjs.map +1 -1
  61. package/dist/types/filelist.umd.cjs +1 -1
  62. package/dist/types/filelist.umd.cjs.map +1 -1
  63. package/dist/types/imagebitmap.umd.cjs +2 -2
  64. package/dist/types/imagebitmap.umd.cjs.map +1 -1
  65. package/dist/types/imagedata.umd.cjs +1 -1
  66. package/dist/types/imagedata.umd.cjs.map +1 -1
  67. package/dist/types/infinity.umd.cjs +1 -1
  68. package/dist/types/infinity.umd.cjs.map +1 -1
  69. package/dist/types/intl-types.umd.cjs +1 -1
  70. package/dist/types/intl-types.umd.cjs.map +1 -1
  71. package/dist/types/map.umd.cjs +1 -1
  72. package/dist/types/map.umd.cjs.map +1 -1
  73. package/dist/types/nan.umd.cjs +1 -1
  74. package/dist/types/nan.umd.cjs.map +1 -1
  75. package/dist/types/negative-infinity.umd.cjs +1 -1
  76. package/dist/types/negative-infinity.umd.cjs.map +1 -1
  77. package/dist/types/negative-zero.umd.cjs +1 -1
  78. package/dist/types/negative-zero.umd.cjs.map +1 -1
  79. package/dist/types/nonbuiltin-ignore.umd.cjs +1 -1
  80. package/dist/types/nonbuiltin-ignore.umd.cjs.map +1 -1
  81. package/dist/types/primitive-objects.umd.cjs +1 -1
  82. package/dist/types/primitive-objects.umd.cjs.map +1 -1
  83. package/dist/types/promise.umd.cjs +2 -2
  84. package/dist/types/promise.umd.cjs.map +1 -1
  85. package/dist/types/regexp.umd.cjs +1 -1
  86. package/dist/types/regexp.umd.cjs.map +1 -1
  87. package/dist/types/resurrectable.umd.cjs +1 -1
  88. package/dist/types/resurrectable.umd.cjs.map +1 -1
  89. package/dist/types/set.umd.cjs +1 -1
  90. package/dist/types/set.umd.cjs.map +1 -1
  91. package/dist/types/symbol.umd.cjs +1 -1
  92. package/dist/types/symbol.umd.cjs.map +1 -1
  93. package/dist/types/typed-arrays-socketio.umd.cjs +1 -1
  94. package/dist/types/typed-arrays-socketio.umd.cjs.map +1 -1
  95. package/dist/types/typed-arrays.umd.cjs +1 -1
  96. package/dist/types/typed-arrays.umd.cjs.map +1 -1
  97. package/dist/types/undef.umd.cjs +1 -1
  98. package/dist/types/undef.umd.cjs.map +1 -1
  99. package/dist/types/user-object.umd.cjs +1 -1
  100. package/dist/types/user-object.umd.cjs.map +1 -1
  101. package/package.json +10 -10
  102. package/polyfills/createObjectURL.umd.cjs +2 -2
  103. package/polyfills/createObjectURL.umd.cjs.map +1 -1
package/dist/index.js CHANGED
@@ -3,7 +3,7 @@ class TypesonPromise{constructor(e){this.p=new Promise(e);}}TypesonPromise.__typ
3
3
  * @file Typeson - JSON with types.
4
4
  * @license The MIT License (MIT)
5
5
  * @copyright (c) 2016-2018 David Fahlander, Brett Zamir
6
- */const{keys:n,hasOwn:r}=Object,{isArray:s}=Array,o=["type","replaced","iterateIn","iterateUnsetNumeric","addLength"];function nestedPathsFirst(e,t){if(""===e.keypath)return -1;let n=e.keypath.match(/\./gu)??0,r=t.keypath.match(/\./gu)??0;return n&&(n=n.length),r&&(r=r.length),n>r?-1:n<r?1:e.keypath<t.keypath?-1:e.keypath>t.keypath?1:0}class Typeson{constructor(e){this.options=e,this.plainObjectReplacers=[],this.nonplainObjectReplacers=[],this.revivers={},this.types={};}stringify(e,t,n,r){r={...this.options,...r,stringification:true};const o=this.encapsulate(e,null,r);return s(o)?JSON.stringify(o[0],t,n):o.then(e=>JSON.stringify(e,t,n))}stringifySync(e,t,n,r){return this.stringify(e,t,n,{throwOnBadSyncType:true,...r,sync:true})}stringifyAsync(e,t,n,r){return this.stringify(e,t,n,{throwOnBadSyncType:true,...r,sync:false})}parse(e,t,n){return n={...this.options,...n,parse:true},this.revive(JSON.parse(e,t),n)}parseSync(e,t,n){return this.parse(e,t,{throwOnBadSyncType:true,...n,sync:true})}parseAsync(e,t,n){return this.parse(e,t,{throwOnBadSyncType:true,...n,sync:false})}specialTypeNames(e,t,n={}){return n.returnTypeNames=true,this.encapsulate(e,t,n)}rootTypeName(e,t,n={}){return n.iterateNone=true,this.encapsulate(e,t,n)}encapsulate(e,t,i){const c={sync:true,...this.options,...i},{sync:a}=c,p={},y=[],u=[],l=[],h=!("cyclic"in c)||c.cyclic,{encapsulateObserver:f}=c,finish=e=>{const t=Object.values(p);if(c.iterateNone)return t.length?t[0]:getJSONType(e);if(t.length){if(c.returnTypeNames)return [...new Set(t)];e&&isPlainObject(e)&&!r(e,"$types")?e.$types=p:e={$:e,$types:{$:p}};}else isObject(e)&&r(e,"$types")&&(e={$:e,$types:true});return !c.returnTypeNames&&e},checkPromises=async(e,t)=>{const n=await Promise.all(t.map(e=>e[1].p));return await Promise.all(n.map(async function(n){const r=[],[s]=t.splice(0,1),[o,,i,c,a,p,y]=s,u=_encapsulate(o,n,i,c,r,true,y),l=hasConstructorOf(u,TypesonPromise);if(o&&l){const t=await u.p;return a[p]=t,checkPromises(e,r)}return o?a[p]=u:e=l?u.p:u,checkPromises(e,r)})),e},_adaptBuiltinStateObjectProperties=(e,t,n)=>{Object.assign(e,t);const r=o.map(t=>{const n=e[t];return delete e[t],n});n(),o.forEach((t,n)=>{e[t]=r[n];});},_encapsulate=(e,t,o,i,a,l,h)=>{let d,O={};const v=f?function(n){const r=h??i.type??getJSONType(t);f(Object.assign(n??O,{keypath:e,value:t,cyclic:o,stateObj:i,promisesData:a,resolvingTypesonPromise:l,awaitingTypesonPromise:hasConstructorOf(t,TypesonPromise)},{type:r}));}:null;if(["string","boolean","number","undefined"].includes(typeof t))return void 0===t||t===1/0||0===t||t===-1/0||Number.isNaN(t)?(d=i.replaced?t:replace(e,t,i,a,false,l,v),d!==t&&(O={replaced:d})):d=t,v&&v(),d;if(null===t)return v&&v(),t;if(o&&t&&"object"==typeof t&&!i.iterateIn&&!i.iterateUnsetNumeric){const n=y.indexOf(t);if(-1!==n)return p[e]="#",v&&v({cyclicKeypath:u[n]}),"#"+u[n];true===o&&(y.push(t),u.push(e));}const m=isPlainObject(t),b=s(t),P=(m||b)&&(!this.plainObjectReplacers.length||i.replaced)||i.iterateIn?t:replace(e,t,i,a,m||b,null,v);let T;if(P!==t?(d=P,O={replaced:P}):""===e&&hasConstructorOf(t,TypesonPromise)?(a.push([e,t,o,i,void 0,void 0,i.type]),d=t):b&&"object"!==i.iterateIn||"array"===i.iterateIn?(T=new Array(t.length),O={clone:T}):!m&&(["function","symbol"].includes(typeof t)||"toJSON"in t||hasConstructorOf(t,TypesonPromise)||hasConstructorOf(t,Promise)||hasConstructorOf(t,ArrayBuffer))&&"object"!==i.iterateIn?d=t:(T={},i.addLength&&(T.length=t.length),O={clone:T}),v&&v(),c.iterateNone)return T??d;if(!T)return d;if(i.iterateIn){for(const n in t){const s={ownKeys:r(t,n)};_adaptBuiltinStateObjectProperties(i,s,()=>{const r=e+(e?".":"")+escapeKeyPathComponent(n),s=_encapsulate(r,t[n],Boolean(o),i,a,l);hasConstructorOf(s,TypesonPromise)?a.push([r,s,Boolean(o),i,T,n,i.type]):void 0!==s&&(T[n]=s);});}v&&v({endIterateIn:true,end:true});}else n(t).forEach(function(n){const r=e+(e?".":"")+escapeKeyPathComponent(n);_adaptBuiltinStateObjectProperties(i,{ownKeys:true},()=>{const e=_encapsulate(r,t[n],Boolean(o),i,a,l);hasConstructorOf(e,TypesonPromise)?a.push([r,e,Boolean(o),i,T,n,i.type]):void 0!==e&&(T[n]=e);});}),v&&v({endIterateOwn:true,end:true});if(i.iterateUnsetNumeric){const n=t.length;for(let r=0;r<n;r++){if(r in t)continue;const n=`${e}${e?".":""}${String(r)}`;_adaptBuiltinStateObjectProperties(i,{ownKeys:false},()=>{const e=_encapsulate(n,void 0,Boolean(o),i,a,l);hasConstructorOf(e,TypesonPromise)?a.push([n,e,Boolean(o),i,T,r,i.type]):void 0!==e&&(T[r]=e);});}v&&v({endIterateUnsetNumeric:true,end:true});}return T},replace=(e,t,n,r,s,o,i)=>{const c=s?this.plainObjectReplacers:this.nonplainObjectReplacers;let y=c.length;for(;y--;){const s=c[y];if(s.test(t,n)){const{type:c}=s;if(Object.hasOwn(this.revivers,c)){const t=p[e];p[e]=t?[c].concat(t):c;}if(Object.assign(n,{type:c,replaced:true}),(a||!s.replaceAsync)&&!s.replace)return i&&i({typeDetected:true}),_encapsulate(e,t,h&&"readonly",n,r,o,c);let y;if(i&&i({replacing:true}),a||!s.replaceAsync){if(void 0===s.replace)throw new TypeError("Missing replacer");y=s.replace(t,n);}else y=s.replaceAsync(t,n);return _encapsulate(e,y,h&&"readonly",n,r,o,c)}}return t},d=_encapsulate("",e,h,t??{},l);if(l.length)return a&&c.throwOnBadSyncType?(()=>{throw new TypeError("Sync method requested but async result obtained")})():Promise.resolve(checkPromises(d,l)).then(finish);if(!a&&c.throwOnBadSyncType)throw new TypeError("Async method requested but sync result obtained");return a&&c.stringification?[finish(d)]:a?finish(d):Promise.resolve(finish(d))}encapsulateSync(e,t,n){return this.encapsulate(e,t,{throwOnBadSyncType:true,...n,sync:true})}encapsulateAsync(e,t,n){return this.encapsulate(e,t,{throwOnBadSyncType:true,...n,sync:false})}revive(e,t){const o={sync:true,...this.options,...t},{sync:i}=o;function finishRevival(e){if(i)return e;if(o.throwOnBadSyncType)throw new TypeError("Async method requested but sync result obtained");return Promise.resolve(e)}if(!e||"object"!=typeof e||Array.isArray(e))return finishRevival(e);let c=e.$types;if(true===c)return finishRevival(e.$);if(!c||"object"!=typeof c||Array.isArray(c))return finishRevival(e);const a=[],p=Object.create(null),y={};let u=true;c.$&&isPlainObject(c.$)&&(e=e.$,c=c.$,u=false);const executeReviver=(e,t)=>{const[n]=this.revivers[e]??[];if(!n)throw new Error("Unregistered type: "+e);if(i&&!("revive"in n))return t;if(!i&&n.reviveAsync)return n.reviveAsync(t,y);if(n.revive)return n.revive(t,y);throw new Error("Missing reviver")},l=[];function checkUndefined(e){return hasConstructorOf(e,Undefined)?void 0:e}const h=(()=>{if(!c)throw new Error("Found bad `types`");const t=[];if(Object.entries(c).forEach(([e,n])=>{"#"!==n&&[].concat(n).forEach(n=>{const[,{plain:r}]=this.revivers[n]??[null,{}];r&&(t.push({keypath:e,type:n}),delete c[e]);});}),t.length)return t.sort(nestedPathsFirst),t.reduce(function reducer(t,{keypath:n,type:r}){if(isThenable(t))return t.then(e=>reducer(e,{keypath:n,type:r}));let s=getByKeyPath(e,n);if(s=executeReviver(r,s),hasConstructorOf(s,TypesonPromise))return s.then(t=>{const r=setAtKeyPath(e,n,t);r===t&&(e=r);});const o=setAtKeyPath(e,n,s);o===s&&(e=o);},void 0)})();let f;return hasConstructorOf(h,TypesonPromise)?f=h.then(()=>e):(f=function _revive(e,t,o,y,h){if(u&&"$types"===e)return;const f=l.length,d=c[e],O=s(t);if(O||isPlainObject(t)){const s=O?new Array(t.length):{};for(n(t).forEach(n=>{const r=_revive(e+(e?".":"")+escapeKeyPathComponent(n),t[n],o??s,s,n),set=e=>(hasConstructorOf(e,Undefined)?s[n]=void 0:void 0!==e&&(s[n]=e),e);hasConstructorOf(r,TypesonPromise)?l.push(r.then(e=>set(e))):set(r);}),t=s;a.length;){const[[e,t,n,s]]=a,o=r(p,t),i=o?p[t]:getByKeyPath(e,t);if(!o&&void 0===i)break;n[s]=i,a.shift();}}if(!d)return p[e]=t,t;if("#"===d){const e=t.slice(1),n=r(p,e),s=n?p[e]:getByKeyPath(o,e);return n||void 0!==s||a.push([o,e,y,h]),s}const applyType=t=>{const n=[].concat(d).reduce(function reducer(e,t){if(hasConstructorOf(e,TypesonPromise))return e.then(e=>reducer(e,t));if("string"!=typeof t)throw new TypeError("Bad type JSON");return executeReviver(t,e)},t);return hasConstructorOf(n,TypesonPromise)?n.then(t=>(p[e]=t,t)):(p[e]=n,n)};return !i&&l.length>f?TypesonPromise.all(l.slice(f)).then(()=>applyType(t)):applyType(t)}("",e,null),l.length&&(f=TypesonPromise.resolve(f).then(e=>TypesonPromise.all([e,...l])).then(([e])=>e))),isThenable(f)?i&&o.throwOnBadSyncType?(()=>{throw new TypeError("Sync method requested but async result obtained")})():hasConstructorOf(f,TypesonPromise)?f.p.then(checkUndefined):f:!i&&o.throwOnBadSyncType?(()=>{throw new TypeError("Async method requested but sync result obtained")})():i?checkUndefined(f):Promise.resolve(checkUndefined(f))}reviveSync(e,t){return this.revive(e,{throwOnBadSyncType:true,...t,sync:true})}reviveAsync(e,t){return this.revive(e,{throwOnBadSyncType:true,...t,sync:false})}register(e,t){const r=t??{},reg=e=>{s(e)?e.forEach(e=>{reg(e);}):n(e).forEach(t=>{if("#"===t)throw new TypeError("# cannot be used as a type name as it is reserved for cyclic objects");if(i$1.includes(t))throw new TypeError("Plain JSON object types are reserved as type names");let n=e[t];const o=n&&"function"!=typeof n&&!Array.isArray(n)&&n.testPlainObjects?this.plainObjectReplacers:this.nonplainObjectReplacers,c=o.filter(function(e){return e.type===t});if(c.length&&(o.splice(o.indexOf(c[0]),1),delete this.revivers[t],delete this.types[t]),"function"==typeof n){const e=n;n={test:t=>t&&t.constructor===e,replace:e=>({...e}),revive:t=>Object.assign(Object.create(e.prototype),t)};}else if(s(n)){const[e,t,r]=n;n={test:e,replace:t,revive:r};}if(!n?.test)return;const a={type:t,test:n.test.bind(n)};n.replace&&(a.replace=n.replace.bind(n)),n.replaceAsync&&(a.replaceAsync=n.replaceAsync.bind(n));const p="number"==typeof r.fallback?r.fallback:r.fallback?0:1/0;if(n.testPlainObjects?this.plainObjectReplacers.splice(p,0,a):this.nonplainObjectReplacers.splice(p,0,a),n.revive||n.reviveAsync){const e={};n.revive&&(e.revive=n.revive.bind(n)),n.reviveAsync&&(e.reviveAsync=n.reviveAsync.bind(n)),this.revivers[t]=[e,{plain:n.testPlainObjects}];}this.types[t]=n;});};return [].concat(e).forEach(e=>{reg(e);}),this}}class Undefined{}Undefined.__typeson__type__="TypesonUndefined";const i$1=["null","boolean","number","string","array","object"];
6
+ */const{keys:n,hasOwn:r}=Object,{isArray:s}=Array,o=["type","replaced","iterateIn","iterateUnsetNumeric","addLength"];function nestedPathsFirst(e,t){if(""===e.keypath)return -1;let n=e.keypath.match(/\./gu)??0,r=t.keypath.match(/\./gu)??0;return n&&(n=n.length),r&&(r=r.length),n>r?-1:n<r?1:e.keypath<t.keypath?-1:e.keypath>t.keypath?1:0}class Typeson{constructor(e){this.options=e,this.plainObjectReplacers=[],this.nonplainObjectReplacers=[],this.revivers={},this.types={};}stringify(e,t,n,r){r={...this.options,...r,stringification:true};const o=this.encapsulate(e,null,r);return s(o)?JSON.stringify(o[0],t,n):o.then(e=>JSON.stringify(e,t,n))}stringifySync(e,t,n,r){return this.stringify(e,t,n,{throwOnBadSyncType:true,...r,sync:true})}stringifyAsync(e,t,n,r){return this.stringify(e,t,n,{throwOnBadSyncType:true,...r,sync:false})}parse(e,t,n){return n={...this.options,...n,parse:true},this.revive(JSON.parse(e,t),n)}parseSync(e,t,n){return this.parse(e,t,{throwOnBadSyncType:true,...n,sync:true})}parseAsync(e,t,n){return this.parse(e,t,{throwOnBadSyncType:true,...n,sync:false})}specialTypeNames(e,t,n={}){return n.returnTypeNames=true,this.encapsulate(e,t,n)}rootTypeName(e,t,n={}){return n.iterateNone=true,this.encapsulate(e,t,n)}encapsulate(e,t,i){const c={sync:true,...this.options,...i},{sync:a}=c,p={},y=[],u=[],l=[],h=!("cyclic"in c)||c.cyclic,{encapsulateObserver:f,encapsulateError:d}=c,finish=e=>{const t=Object.values(p);if(c.iterateNone)return t.length?t[0]:getJSONType(e);if(t.length){if(c.returnTypeNames)return [...new Set(t)];e&&isPlainObject(e)&&!r(e,"$types")?e.$types=p:e={$:e,$types:{$:p}};}else isObject(e)&&r(e,"$types")&&(e={$:e,$types:true});return !c.returnTypeNames&&e},checkPromises=async(e,t)=>{const n=await Promise.all(t.map(e=>e[1].p));return await Promise.all(n.map(async function(n){const r=[],[s]=t.splice(0,1),[o,,i,c,a,p,y]=s,u=_encapsulate(o,n,i,c,r,true,y),l=hasConstructorOf(u,TypesonPromise);if(o&&l){const t=await u.p;return a[p]=t,checkPromises(e,r)}return o?a[p]=u:e=l?u.p:u,checkPromises(e,r)})),e},_adaptBuiltinStateObjectProperties=(e,t,n)=>{Object.assign(e,t);const r=o.map(t=>{const n=e[t];return delete e[t],n});n(),o.forEach((t,n)=>{e[t]=r[n];});},_encapsulate=(e,t,o,i,a,l,h)=>{let v,O={};const b=f?function(n){const r=h??i.type??getJSONType(t);f(Object.assign(n??O,{keypath:e,value:t,cyclic:o,stateObj:i,promisesData:a,resolvingTypesonPromise:l,awaitingTypesonPromise:hasConstructorOf(t,TypesonPromise)},{type:r}));}:null,getEncapsulatedValue=(e,t,n)=>{try{return {value:_encapsulate(e,t[n],Boolean(o),i,a,l)}}catch(r){if(!d)throw r;const s=h??i.type??getJSONType(t),o=d({keypath:e,error:r,parent:t,key:n,stateObj:i,type:s});if(!o)throw r;if("substitute"in o)return {value:o.substitute,substitute:true};if(o.ignore)return;throw r}};if(["string","boolean","number","undefined"].includes(typeof t))return void 0===t||t===1/0||0===t||t===-1/0||Number.isNaN(t)?(v=i.replaced?t:replace(e,t,i,a,false,l,b),v!==t&&(O={replaced:v})):v=t,b&&b(),v;if(null===t)return b&&b(),t;if(o&&t&&"object"==typeof t&&!i.iterateIn&&!i.iterateUnsetNumeric){const n=y.indexOf(t);if(-1!==n)return p[e]="#",b&&b({cyclicKeypath:u[n]}),"#"+u[n];true===o&&(y.push(t),u.push(e));}const m=isPlainObject(t),P=s(t),T=(m||P)&&(!this.plainObjectReplacers.length||i.replaced)||i.iterateIn?t:replace(e,t,i,a,m||P,null,b);let g;if(T!==t?(v=T,O={replaced:T}):""===e&&hasConstructorOf(t,TypesonPromise)?(a.push([e,t,o,i,void 0,void 0,i.type]),v=t):P&&"object"!==i.iterateIn||"array"===i.iterateIn?(g=new Array(t.length),O={clone:g}):!m&&("object"!=typeof t||"toJSON"in t||hasConstructorOf(t,TypesonPromise)||hasConstructorOf(t,Promise)||hasConstructorOf(t,ArrayBuffer))&&"object"!==i.iterateIn?v=t:(g={},i.addLength&&(g.length=t.length),O={clone:g}),b&&b(),c.iterateNone)return g??v;if(!g)return v;if(i.iterateIn){for(const n in t){const s={ownKeys:r(t,n)};_adaptBuiltinStateObjectProperties(i,s,()=>{const r=e+(e?".":"")+escapeKeyPathComponent(n),s=getEncapsulatedValue(r,t,n),c=s&&s.value;hasConstructorOf(c,TypesonPromise)?a.push([r,c,Boolean(o),i,g,n,i.type]):s&&(void 0!==c||"substitute"in s)&&(g[n]=c);});}b&&b({endIterateIn:true,end:true});}else n(t).forEach(function(n){const r=e+(e?".":"")+escapeKeyPathComponent(n);_adaptBuiltinStateObjectProperties(i,{ownKeys:true},()=>{const e=getEncapsulatedValue(r,t,n),s=e&&e.value;hasConstructorOf(s,TypesonPromise)?a.push([r,s,Boolean(o),i,g,n,i.type]):e&&(void 0!==s||"substitute"in e)&&(g[n]=s);});}),b&&b({endIterateOwn:true,end:true});if(i.iterateUnsetNumeric){const n=t.length;for(let r=0;r<n;r++){if(r in t)continue;const n=`${e}${e?".":""}${String(r)}`;_adaptBuiltinStateObjectProperties(i,{ownKeys:false},()=>{const e=_encapsulate(n,void 0,Boolean(o),i,a,l);hasConstructorOf(e,TypesonPromise)?a.push([n,e,Boolean(o),i,g,r,i.type]):void 0!==e&&(g[r]=e);});}b&&b({endIterateUnsetNumeric:true,end:true});}return g},replace=(e,t,n,r,s,o,i)=>{const c=s?this.plainObjectReplacers:this.nonplainObjectReplacers;let y=c.length;for(;y--;){const s=c[y];if(s.test(t,n)){const{type:c}=s;if(Object.hasOwn(this.revivers,c)){const t=p[e];p[e]=t?[c].concat(t):c;}if(Object.assign(n,{type:c,replaced:true}),(a||!s.replaceAsync)&&!s.replace)return i&&i({typeDetected:true}),_encapsulate(e,t,h&&"readonly",n,r,o,c);let y;if(i&&i({replacing:true}),a||!s.replaceAsync){if(void 0===s.replace)throw new TypeError("Missing replacer");y=s.replace(t,n);}else y=s.replaceAsync(t,n);return _encapsulate(e,y,h&&"readonly",n,r,o,c)}}return t},v=_encapsulate("",e,h,t??{},l);if(l.length)return a&&c.throwOnBadSyncType?(()=>{throw new TypeError("Sync method requested but async result obtained")})():Promise.resolve(checkPromises(v,l)).then(finish);if(!a&&c.throwOnBadSyncType)throw new TypeError("Async method requested but sync result obtained");return a&&c.stringification?[finish(v)]:a?finish(v):Promise.resolve(finish(v))}encapsulateSync(e,t,n){return this.encapsulate(e,t,{throwOnBadSyncType:true,...n,sync:true})}encapsulateAsync(e,t,n){return this.encapsulate(e,t,{throwOnBadSyncType:true,...n,sync:false})}revive(e,t){const o={sync:true,...this.options,...t},{sync:i}=o;function finishRevival(e){if(i)return e;if(o.throwOnBadSyncType)throw new TypeError("Async method requested but sync result obtained");return Promise.resolve(e)}if(!e||"object"!=typeof e||Array.isArray(e))return finishRevival(e);let c=e.$types;if(true===c)return finishRevival(e.$);if(!c||"object"!=typeof c||Array.isArray(c))return finishRevival(e);const a=[],p=Object.create(null),y={};let u=true;c.$&&isPlainObject(c.$)&&(e=e.$,c=c.$,u=false);const executeReviver=(e,t)=>{const[n]=this.revivers[e]??[];if(!n)throw new Error("Unregistered type: "+e);if(i&&!("revive"in n))return t;if(!i&&n.reviveAsync)return n.reviveAsync(t,y);if(n.revive)return n.revive(t,y);throw new Error("Missing reviver")},l=[];function checkUndefined(e){return hasConstructorOf(e,Undefined)?void 0:e}const h=(()=>{if(!c)throw new Error("Found bad `types`");const t=[];if(Object.entries(c).forEach(([e,n])=>{"#"!==n&&[].concat(n).forEach(n=>{const[,{plain:r}]=this.revivers[n]??[null,{}];r&&(t.push({keypath:e,type:n}),delete c[e]);});}),t.length)return t.sort(nestedPathsFirst),t.reduce(function reducer(t,{keypath:n,type:r}){if(isThenable(t))return t.then(e=>reducer(e,{keypath:n,type:r}));let s=getByKeyPath(e,n);if(s=executeReviver(r,s),hasConstructorOf(s,TypesonPromise))return s.then(t=>{const r=setAtKeyPath(e,n,t);r===t&&(e=r);});const o=setAtKeyPath(e,n,s);o===s&&(e=o);},void 0)})();let f;return hasConstructorOf(h,TypesonPromise)?f=h.then(()=>e):(f=function _revive(e,t,o,y,h){if(u&&"$types"===e)return;const f=l.length,d=c[e],v=s(t);if(v||isPlainObject(t)){const s=v?new Array(t.length):{};for(n(t).forEach(n=>{const r=_revive(e+(e?".":"")+escapeKeyPathComponent(n),t[n],o??s,s,n),set=e=>(hasConstructorOf(e,Undefined)?s[n]=void 0:void 0!==e&&(s[n]=e),e);hasConstructorOf(r,TypesonPromise)?l.push(r.then(e=>set(e))):set(r);}),t=s;a.length;){const[[e,t,n,s]]=a,o=r(p,t),i=o?p[t]:getByKeyPath(e,t);if(!o&&void 0===i)break;n[s]=i,a.shift();}}if(!d)return p[e]=t,t;if("#"===d){const e=t.slice(1),n=r(p,e),s=n?p[e]:getByKeyPath(o,e);return n||void 0!==s||a.push([o,e,y,h]),s}const applyType=t=>{const n=[].concat(d).reduce(function reducer(e,t){if(hasConstructorOf(e,TypesonPromise))return e.then(e=>reducer(e,t));if("string"!=typeof t)throw new TypeError("Bad type JSON");return executeReviver(t,e)},t);return hasConstructorOf(n,TypesonPromise)?n.then(t=>(p[e]=t,t)):(p[e]=n,n)};return !i&&l.length>f?TypesonPromise.all(l.slice(f)).then(()=>applyType(t)):applyType(t)}("",e,null),l.length&&(f=TypesonPromise.resolve(f).then(e=>TypesonPromise.all([e,...l])).then(([e])=>e))),isThenable(f)?i&&o.throwOnBadSyncType?(()=>{throw new TypeError("Sync method requested but async result obtained")})():hasConstructorOf(f,TypesonPromise)?f.p.then(checkUndefined):f:!i&&o.throwOnBadSyncType?(()=>{throw new TypeError("Async method requested but sync result obtained")})():i?checkUndefined(f):Promise.resolve(checkUndefined(f))}reviveSync(e,t){return this.revive(e,{throwOnBadSyncType:true,...t,sync:true})}reviveAsync(e,t){return this.revive(e,{throwOnBadSyncType:true,...t,sync:false})}register(e,t){const r=t??{},reg=e=>{s(e)?e.forEach(e=>{reg(e);}):n(e).forEach(t=>{if("#"===t)throw new TypeError("# cannot be used as a type name as it is reserved for cyclic objects");if(i$1.includes(t))throw new TypeError("Plain JSON object types are reserved as type names");let n=e[t];const o=n&&"function"!=typeof n&&!Array.isArray(n)&&n.testPlainObjects?this.plainObjectReplacers:this.nonplainObjectReplacers,c=o.filter(function(e){return e.type===t});if(c.length&&(o.splice(o.indexOf(c[0]),1),delete this.revivers[t],delete this.types[t]),"function"==typeof n){const e=n;n={test:t=>t&&t.constructor===e,replace:e=>({...e}),revive:t=>Object.assign(Object.create(e.prototype),t)};}else if(s(n)){const[e,t,r]=n;n={test:e,replace:t,revive:r};}if(!n?.test)return;const a={type:t,test:n.test.bind(n)};n.replace&&(a.replace=n.replace.bind(n)),n.replaceAsync&&(a.replaceAsync=n.replaceAsync.bind(n));const p="number"==typeof r.fallback?r.fallback:r.fallback?0:1/0;if(n.testPlainObjects?this.plainObjectReplacers.splice(p,0,a):this.nonplainObjectReplacers.splice(p,0,a),n.revive||n.reviveAsync){const e={};n.revive&&(e.revive=n.revive.bind(n)),n.reviveAsync&&(e.reviveAsync=n.reviveAsync.bind(n)),this.revivers[t]=[e,{plain:n.testPlainObjects}];}this.types[t]=n;});};return [].concat(e).forEach(e=>{reg(e);}),this}}class Undefined{}Undefined.__typeson__type__="TypesonUndefined";const i$1=["null","boolean","number","string","array","object"];
7
7
 
8
8
  /*
9
9
  * base64-arraybuffer
@@ -405,12 +405,12 @@ const cryptokey = {
405
405
  const {
406
406
  jwk, algorithm, usages
407
407
  } = /**
408
- * @type {{
409
- * jwk: JsonWebKey,
410
- * algorithm: KeyAlgorithm,
411
- * usages: KeyUsage[]
412
- * }}
413
- */ (obj);
408
+ * @type {{
409
+ * jwk: JsonWebKey,
410
+ * algorithm: KeyAlgorithm,
411
+ * usages: KeyUsage[]
412
+ * }}
413
+ */ (obj);
414
414
 
415
415
  return crypto.subtle.importKey(
416
416
  'jwk', jwk, algorithm, true, usages
@@ -703,15 +703,15 @@ const error = {
703
703
  },
704
704
  revive (obj) {
705
705
  const e = /**
706
- * @type {{
707
- * name: string,
708
- * cause: Error,
709
- * stack: string,
710
- * fileName?: string,
711
- * lineNumber?: import('typeson').Integer,
712
- * columnNumber?: import('typeson').Integer
713
- * }}
714
- */ (new Error(obj.message));
706
+ * @type {{
707
+ * name: string,
708
+ * cause: Error,
709
+ * stack: string,
710
+ * fileName?: string,
711
+ * lineNumber?: import('typeson').Integer,
712
+ * columnNumber?: import('typeson').Integer
713
+ * }}
714
+ */ (new Error(obj.message));
715
715
  /* eslint-disable unicorn/no-error-property-assignment -- Ok */
716
716
  e.name = obj.name;
717
717
  e.cause = obj.cause;
@@ -785,24 +785,24 @@ function create$2 (Ctor) {
785
785
  const isAggregateError = typeof AggregateError !== 'undefined' &&
786
786
  Ctor === AggregateError;
787
787
  const e = /**
788
- * @type {{
789
- * name: string,
790
- * cause: Error,
791
- * stack: string,
792
- * fileName?: string,
793
- * lineNumber?: import('typeson').Integer,
794
- * columnNumber?: import('typeson').Integer
795
- * }}
796
- */ (isAggregateError
788
+ * @type {{
789
+ * name: string,
790
+ * cause: Error,
791
+ * stack: string,
792
+ * fileName?: string,
793
+ * lineNumber?: import('typeson').Integer,
794
+ * columnNumber?: import('typeson').Integer
795
+ * }}
796
+ */ (isAggregateError
797
797
  ? new /** @type {AggregateErrorConstructor} */ (
798
798
  Ctor
799
799
  )(obj.errors, obj.message)
800
800
  : new /**
801
- * @type {TypeErrorConstructor|RangeErrorConstructor|
802
- * SyntaxErrorConstructor|ReferenceErrorConstructor|
803
- * EvalErrorConstructor|URIErrorConstructor|
804
- * InternalErrorConstructor}
805
- */ (Ctor)(obj.message));
801
+ * @type {TypeErrorConstructor|RangeErrorConstructor|
802
+ * SyntaxErrorConstructor|ReferenceErrorConstructor|
803
+ * EvalErrorConstructor|URIErrorConstructor|
804
+ * InternalErrorConstructor}
805
+ */ (Ctor)(obj.message));
806
806
 
807
807
  e.name = obj.name;
808
808
  e.cause = obj.cause;