typeson-registry 13.0.0 → 13.1.0

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 (108) hide show
  1. package/README.md +5 -8
  2. package/dist/index.js +31 -31
  3. package/dist/index.js.map +1 -1
  4. package/dist/index.min.js +2 -2
  5. package/dist/index.min.js.map +1 -1
  6. package/dist/index.umd.cjs +238 -188
  7. package/dist/index.umd.cjs.map +1 -1
  8. package/dist/index.umd.min.cjs +3 -3
  9. package/dist/index.umd.min.cjs.map +1 -1
  10. package/dist/polyfills/createObjectURL.d.ts.map +1 -1
  11. package/dist/presets/array-nonindex-keys.umd.cjs +1 -1
  12. package/dist/presets/array-nonindex-keys.umd.cjs.map +1 -1
  13. package/dist/presets/builtin.umd.cjs +1 -1
  14. package/dist/presets/builtin.umd.cjs.map +1 -1
  15. package/dist/presets/postmessage.umd.cjs +1 -1
  16. package/dist/presets/postmessage.umd.cjs.map +1 -1
  17. package/dist/presets/socketio.umd.cjs +1 -1
  18. package/dist/presets/socketio.umd.cjs.map +1 -1
  19. package/dist/presets/sparse-undefined.umd.cjs +1 -1
  20. package/dist/presets/sparse-undefined.umd.cjs.map +1 -1
  21. package/dist/presets/special-numbers.umd.cjs +1 -1
  22. package/dist/presets/special-numbers.umd.cjs.map +1 -1
  23. package/dist/presets/structured-cloning-throwing.umd.cjs +2 -2
  24. package/dist/presets/structured-cloning-throwing.umd.cjs.map +1 -1
  25. package/dist/presets/structured-cloning.umd.cjs +2 -2
  26. package/dist/presets/structured-cloning.umd.cjs.map +1 -1
  27. package/dist/presets/undef.umd.cjs +1 -1
  28. package/dist/presets/undef.umd.cjs.map +1 -1
  29. package/dist/presets/universal.umd.cjs +1 -1
  30. package/dist/presets/universal.umd.cjs.map +1 -1
  31. package/dist/types/arraybuffer.umd.cjs +1 -1
  32. package/dist/types/arraybuffer.umd.cjs.map +1 -1
  33. package/dist/types/bigint-object.umd.cjs +1 -1
  34. package/dist/types/bigint-object.umd.cjs.map +1 -1
  35. package/dist/types/bigint.umd.cjs +1 -1
  36. package/dist/types/bigint.umd.cjs.map +1 -1
  37. package/dist/types/blob.umd.cjs +1 -1
  38. package/dist/types/blob.umd.cjs.map +1 -1
  39. package/dist/types/cloneable.umd.cjs +1 -1
  40. package/dist/types/cloneable.umd.cjs.map +1 -1
  41. package/dist/types/cryptokey.umd.cjs +2 -2
  42. package/dist/types/cryptokey.umd.cjs.map +1 -1
  43. package/dist/types/dataview.umd.cjs +1 -1
  44. package/dist/types/dataview.umd.cjs.map +1 -1
  45. package/dist/types/date.umd.cjs +1 -1
  46. package/dist/types/date.umd.cjs.map +1 -1
  47. package/dist/types/domexception.umd.cjs +1 -1
  48. package/dist/types/domexception.umd.cjs.map +1 -1
  49. package/dist/types/dommatrix.umd.cjs +1 -1
  50. package/dist/types/dommatrix.umd.cjs.map +1 -1
  51. package/dist/types/dompoint.umd.cjs +1 -1
  52. package/dist/types/dompoint.umd.cjs.map +1 -1
  53. package/dist/types/domquad.umd.cjs +1 -1
  54. package/dist/types/domquad.umd.cjs.map +1 -1
  55. package/dist/types/domrect.umd.cjs +1 -1
  56. package/dist/types/domrect.umd.cjs.map +1 -1
  57. package/dist/types/error.umd.cjs +1 -1
  58. package/dist/types/error.umd.cjs.map +1 -1
  59. package/dist/types/errors.umd.cjs +1 -1
  60. package/dist/types/errors.umd.cjs.map +1 -1
  61. package/dist/types/file.umd.cjs +1 -1
  62. package/dist/types/file.umd.cjs.map +1 -1
  63. package/dist/types/filelist.umd.cjs +1 -1
  64. package/dist/types/filelist.umd.cjs.map +1 -1
  65. package/dist/types/imagebitmap.umd.cjs +2 -2
  66. package/dist/types/imagebitmap.umd.cjs.map +1 -1
  67. package/dist/types/imagedata.umd.cjs +1 -1
  68. package/dist/types/imagedata.umd.cjs.map +1 -1
  69. package/dist/types/infinity.umd.cjs +1 -1
  70. package/dist/types/infinity.umd.cjs.map +1 -1
  71. package/dist/types/intl-types.umd.cjs +1 -1
  72. package/dist/types/intl-types.umd.cjs.map +1 -1
  73. package/dist/types/map.umd.cjs +1 -1
  74. package/dist/types/map.umd.cjs.map +1 -1
  75. package/dist/types/nan.umd.cjs +1 -1
  76. package/dist/types/nan.umd.cjs.map +1 -1
  77. package/dist/types/negative-infinity.umd.cjs +1 -1
  78. package/dist/types/negative-infinity.umd.cjs.map +1 -1
  79. package/dist/types/negative-zero.umd.cjs +1 -1
  80. package/dist/types/negative-zero.umd.cjs.map +1 -1
  81. package/dist/types/nonbuiltin-ignore.umd.cjs +1 -1
  82. package/dist/types/nonbuiltin-ignore.umd.cjs.map +1 -1
  83. package/dist/types/primitive-objects.umd.cjs +1 -1
  84. package/dist/types/primitive-objects.umd.cjs.map +1 -1
  85. package/dist/types/promise.umd.cjs +2 -2
  86. package/dist/types/promise.umd.cjs.map +1 -1
  87. package/dist/types/regexp.umd.cjs +1 -1
  88. package/dist/types/regexp.umd.cjs.map +1 -1
  89. package/dist/types/resurrectable.umd.cjs +1 -1
  90. package/dist/types/resurrectable.umd.cjs.map +1 -1
  91. package/dist/types/set.umd.cjs +1 -1
  92. package/dist/types/set.umd.cjs.map +1 -1
  93. package/dist/types/symbol.umd.cjs +1 -1
  94. package/dist/types/symbol.umd.cjs.map +1 -1
  95. package/dist/types/typed-arrays-socketio.umd.cjs +1 -1
  96. package/dist/types/typed-arrays-socketio.umd.cjs.map +1 -1
  97. package/dist/types/typed-arrays.umd.cjs +1 -1
  98. package/dist/types/typed-arrays.umd.cjs.map +1 -1
  99. package/dist/types/undef.umd.cjs +1 -1
  100. package/dist/types/undef.umd.cjs.map +1 -1
  101. package/dist/types/user-object.umd.cjs +1 -1
  102. package/dist/types/user-object.umd.cjs.map +1 -1
  103. package/package.json +18 -19
  104. package/polyfills/createObjectURL.cjs +3231 -0
  105. package/polyfills/createObjectURL.cjs.map +1 -0
  106. package/polyfills/createObjectURL.js +4 -4
  107. package/polyfills/createObjectURL.umd.cjs +0 -4
  108. package/polyfills/createObjectURL.umd.cjs.map +0 -1
package/README.md CHANGED
@@ -25,10 +25,8 @@ Note that our `URL.createObjectURL` polyfill expects a global
25
25
  which can handle `data:` URLs). For Node, you can add it like this:
26
26
 
27
27
  ```js
28
- const url = require('url'); // This line only needed to support Node < 10.0.0
29
- const {createObjectURL} = require('typeson-registry/polyfills/createObjectURL.umd.cjs');
28
+ const {createObjectURL} = require('typeson-registry/polyfills/createObjectURL.cjs');
30
29
 
31
- const URL = url.Url; // This line only needed to support Node < 10.0.0
32
30
  URL.createObjectURL = createObjectURL;
33
31
  ```
34
32
 
@@ -138,7 +136,7 @@ const TSON = new Typeson().register([
138
136
 
139
137
  ## Usage (with plain script tags without own Rollup)
140
138
 
141
- All types and presets under `dist/` are UMD modules so you could also
139
+ All presets under `dist/` are UMD modules so you could also
142
140
  require them as AMD modules with requirejs if you prefer.
143
141
 
144
142
  ```html
@@ -338,10 +336,9 @@ On Windows, besides following the
338
336
  helped complete the installation. If you need to have it rebuilt, you can
339
337
  run `npm i` inside of the `node_modules/canvas` directory.
340
338
 
341
- [These steps](https://github.com/Automattic/node-canvas/issues/191#issuecomment-7681555)
342
- were also necessary but you can run `npm run windows` after install to get
343
- these steps applied. These are the only steps which should need to be re-run
344
- if you have deleted your local `node-canvas` copy.
339
+ The older repo-specific Windows DLL copy workaround is no longer needed with
340
+ modern `canvas` versions. Follow the official node-canvas Windows installation
341
+ instructions for your toolchain, and then run the project normally.
345
342
 
346
343
  ## See also
347
344
 
package/dist/index.js CHANGED
@@ -1,9 +1,9 @@
1
- class TypesonPromise{constructor(e){this.p=new Promise(e);}}TypesonPromise.__typeson__type__="TypesonPromise","undefined"!=typeof Symbol&&Object.defineProperty(TypesonPromise.prototype,Symbol.toStringTag,{get:()=>"TypesonPromise"}),TypesonPromise.prototype.then=function(e,t){return new TypesonPromise((n,r)=>{this.p.then(function(t){n(e?e(t):t);}).catch(function(e){return t?t(e):Promise.reject(e)}).then(n,r);})},TypesonPromise.prototype.catch=function(e){return this.then(()=>{},e)},TypesonPromise.resolve=function(e){return new TypesonPromise(t=>{t(e);})},TypesonPromise.reject=function(e){return new TypesonPromise((t,n)=>{n(e);})},TypesonPromise.all=function(e){return new TypesonPromise(function(t,n){Promise.all(e.map(e=>e?.constructor&&"__typeson__type__"in e.constructor&&"TypesonPromise"===e.constructor.__typeson__type__?e.p:e)).then(t,n);})},TypesonPromise.race=function(e){return new TypesonPromise(function(t,n){Promise.race(e.map(e=>e?.constructor&&"__typeson__type__"in e.constructor&&"TypesonPromise"===e.constructor.__typeson__type__?e.p:e)).then(t,n);})},TypesonPromise.allSettled=function(e){return new TypesonPromise(function(t,n){Promise.allSettled(e.map(e=>e?.constructor&&"__typeson__type__"in e.constructor&&"TypesonPromise"===e.constructor.__typeson__type__?e.p:e)).then(t,n);})};const{hasOwn:e}=Object,t=Object.getPrototypeOf;function isThenable(e,t){return isObject(e)&&"function"==typeof e.then&&(!t||"function"==typeof e.catch)}function toStringTag(e){return Object.prototype.toString.call(e).slice(8,-1)}function hasConstructorOf(n,r){if(!n||"object"!=typeof n)return false;const s=t(n);if(!s)return null===r;const o=e(s,"constructor")&&s.constructor;return "function"!=typeof o?null===r:r===o||(null!==r&&Function.prototype.toString.call(o)===Function.prototype.toString.call(r)||"function"==typeof r&&"string"==typeof o.__typeson__type__&&o.__typeson__type__===r.__typeson__type__)}function isPlainObject(e){if(!e||"Object"!==toStringTag(e))return false;return !t(e)||hasConstructorOf(e,Object)}function isUserObject(e){if(!e||"Object"!==toStringTag(e))return false;const n=t(e);return !n||(hasConstructorOf(e,Object)||isUserObject(n))}function isObject(e){return null!==e&&"object"==typeof e}function escapeKeyPathComponent(e){return e.replaceAll("''","''''").replace(/^$/u,"''").replaceAll("~","~0").replaceAll(".","~1")}function unescapeKeyPathComponent(e){return e.replaceAll("~1",".").replaceAll("~0","~").replace(/^''$/u,"").replaceAll("''''","''")}function getByKeyPath(e,t){if(""===t)return e;if(null===e||"object"!=typeof e)throw new TypeError("Unexpected non-object type");const n=t.indexOf(".");if(-1!==n){const r=e[unescapeKeyPathComponent(t.slice(0,n))];return void 0===r?void 0:getByKeyPath(r,t.slice(n+1))}return e[unescapeKeyPathComponent(t)]}function setAtKeyPath(e,t,n){if(""===t)return n;let r=e,s=t;for(;;){if(!r||"object"!=typeof r)throw new TypeError("Unexpected non-object type");if("__proto__"===s)throw new TypeError("Invalid property");const t=s.indexOf(".");if(-1===t)return r[unescapeKeyPathComponent(s)]=n,e;r=r[unescapeKeyPathComponent(s.slice(0,t))],s=s.slice(t+1);}}function getJSONType(e){return null===e?"null":Array.isArray(e)?"array":typeof e}
1
+ class TypesonPromise{constructor(e){this.p=new Promise(e);}}TypesonPromise.__typeson__type__="TypesonPromise","undefined"!=typeof Symbol&&Object.defineProperty(TypesonPromise.prototype,Symbol.toStringTag,{get:()=>"TypesonPromise"}),TypesonPromise.prototype.then=function(e,t){return new TypesonPromise((n,r)=>{this.p.then(function(t){n(e?e(t):t);}).catch(function(e){return t?t(e):Promise.reject(e)}).then(n,r);})},TypesonPromise.prototype.catch=function(e){return this.then(void 0,e)},TypesonPromise.resolve=function(e){return new TypesonPromise(t=>{t(e);})},TypesonPromise.reject=function(e){return new TypesonPromise((t,n)=>{n(e);})},TypesonPromise.all=function(e){return new TypesonPromise(function(t,n){Promise.all(e.map(e=>e?.constructor&&"__typeson__type__"in e.constructor&&"TypesonPromise"===e.constructor.__typeson__type__?e.p:e)).then(t,n);})},TypesonPromise.race=function(e){return new TypesonPromise(function(t,n){Promise.race(e.map(e=>e?.constructor&&"__typeson__type__"in e.constructor&&"TypesonPromise"===e.constructor.__typeson__type__?e.p:e)).then(t,n);})},TypesonPromise.allSettled=function(e){return new TypesonPromise(function(t,n){Promise.allSettled(e.map(e=>e?.constructor&&"__typeson__type__"in e.constructor&&"TypesonPromise"===e.constructor.__typeson__type__?e.p:e)).then(t,n);})};const{hasOwn:e}=Object,t=Object.getPrototypeOf;function isThenable(e,t){return isObject(e)&&"function"==typeof e.then&&(!t||"function"==typeof e.catch)}function toStringTag(e){return Object.prototype.toString.call(e).slice(8,-1)}function hasConstructorOf(n,r){if(!n||"object"!=typeof n)return false;const s=t(n);if(!s)return null===r;const o=e(s,"constructor")&&s.constructor;return "function"!=typeof o?null===r:r===o||(null!==r&&Function.prototype.toString.call(o)===Function.prototype.toString.call(r)||"function"==typeof r&&"string"==typeof o.__typeson__type__&&o.__typeson__type__===r.__typeson__type__)}function isPlainObject(e){if(!e||"Object"!==toStringTag(e))return false;return !t(e)||hasConstructorOf(e,Object)}function isUserObject(e){if(!e||"Object"!==toStringTag(e))return false;const n=t(e);return !n||(hasConstructorOf(e,Object)||isUserObject(n))}function isObject(e){return null!==e&&"object"==typeof e}function escapeKeyPathComponent(e){return e.replaceAll("''","''''").replace(/^$/u,"''").replaceAll("~","~0").replaceAll(".","~1")}function unescapeKeyPathComponent(e){return e.replaceAll("~1",".").replaceAll("~0","~").replace(/^''$/u,"").replaceAll("''''","''")}function getByKeyPath(t,n,r){if(""===n)return t;if(null===t||"object"!=typeof t)throw new TypeError("Unexpected non-object type");const s=n.indexOf("."),o=unescapeKeyPathComponent(-1===s?n:n.slice(0,s));if(!r||e(t,o)){if(-1!==s){const e=t[o];return void 0===e?void 0:getByKeyPath(e,n.slice(s+1),r)}return t[o]}}function setAtKeyPath(t,n,r,s){if(""===n)return r;let o=t,i=n;for(;;){if(!o||"object"!=typeof o)throw new TypeError("Unexpected non-object type");const n=i.indexOf("."),c=unescapeKeyPathComponent(-1===n?i:i.slice(0,n));if("__proto__"===c)throw new TypeError("Invalid property");if(-1===n)return o[c]=r,t;if(s&&!e(o,c))throw new TypeError("Invalid property");o=o[c],i=i.slice(n+1);}}function getJSONType(e){return null===e?"null":Array.isArray(e)?"array":typeof e}
2
2
  /**
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 setOwnEnumerable(e,t,n){Object.defineProperty(e,t,{configurable:true,enumerable:true,value:n,writable:true});}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 this.encapsulate(e,t,{...n,returnTypeNames:true})}rootTypeName(e,t,n={}){return this.encapsulate(e,t,{...n,iterateNone:true})}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){return setOwnEnumerable(a,p,await u.p),checkPromises(e,r)}return o?setOwnEnumerable(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 b,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,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)?(b=i.replaced?t:replace(e,t,i,a,false,l,v),b!==t&&(O={replaced:b})):b=t,v&&v(),b;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),T=s(t),P=(m||T)&&(!this.plainObjectReplacers.length||i.replaced)||i.iterateIn?t:replace(e,t,i,a,m||T,null,v);let w;if(P!==t?(b=P,O={replaced:P}):""===e&&hasConstructorOf(t,TypesonPromise)?(a.push([e,t,o,i,void 0,void 0,i.type]),b=t):T&&"object"!==i.iterateIn||"array"===i.iterateIn?(w=new Array(t.length),O={clone:w}):!m&&("object"!=typeof t||"toJSON"in t||hasConstructorOf(t,TypesonPromise)||hasConstructorOf(t,Promise)||hasConstructorOf(t,ArrayBuffer))&&"object"!==i.iterateIn?b=t:(w={},i.addLength&&(w.length=t.length),O={clone:w}),v&&v(),c.iterateNone)return w??b;if(!w)return b;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,w,n,i.type]):s&&(void 0!==c||"substitute"in s)&&setOwnEnumerable(w,n,c);});}v&&v({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,w,n,i.type]):e&&(void 0!==s||"substitute"in e)&&setOwnEnumerable(w,n,s);});}),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,w,r,i.type]):void 0!==e&&setOwnEnumerable(w,r,e);});}v&&v({endIterateUnsetNumeric:true,end:true});}return w},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},b=_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(b,l)).then(finish);if(!a&&c.throwOnBadSyncType)throw new TypeError("Async method requested but sync result obtained");return a&&c.stringification?[finish(b)]:a?finish(b):Promise.resolve(finish(b))}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,true);if(s=executeReviver(r,s),hasConstructorOf(s,TypesonPromise))return s.then(t=>{const r=setAtKeyPath(e,n,t,true);r===t&&(e=r);});const o=setAtKeyPath(e,n,s,true);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=r(c,e)?c[e]:void 0,b=s(t);if(b||isPlainObject(t)){const s=b?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)?setOwnEnumerable(s,n,void 0):void 0!==e&&setOwnEnumerable(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,true);if(!o&&void 0===i)break;setOwnEnumerable(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,true);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];if([this.plainObjectReplacers,this.nonplainObjectReplacers].forEach(e=>{const n=e.findIndex(e=>e.type===t);-1!==n&&e.splice(n,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 o={type:t,test:n.test.bind(n)};n.replace&&(o.replace=n.replace.bind(n)),n.replaceAsync&&(o.replaceAsync=n.replaceAsync.bind(n));const c="number"==typeof r.fallback?r.fallback:r.fallback?0:1/0;if(n.testPlainObjects?this.plainObjectReplacers.splice(c,0,o):this.nonplainObjectReplacers.splice(c,0,o),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;