@es-joy/jsoe 0.13.8 → 0.14.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 (67) hide show
  1. package/.eslintrc.cjs +5 -0
  2. package/.nyc_output/out.json +13027 -11984
  3. package/CHANGES.md +6 -0
  4. package/README.md +5 -4
  5. package/demo/index.js +68 -2
  6. package/dist/formats/structuredCloning.d.ts.map +1 -1
  7. package/dist/fundamentalTypes/BooleanObjectType.d.ts.map +1 -1
  8. package/dist/fundamentalTypes/NumberObjectType.d.ts.map +1 -1
  9. package/dist/fundamentalTypes/StringObjectType.d.ts.map +1 -1
  10. package/dist/fundamentalTypes/arrayType.d.ts.map +1 -1
  11. package/dist/fundamentalTypes/blobType.d.ts.map +1 -1
  12. package/dist/fundamentalTypes/dateType.d.ts.map +1 -1
  13. package/dist/fundamentalTypes/fileType.d.ts.map +1 -1
  14. package/dist/fundamentalTypes/filelistType.d.ts.map +1 -1
  15. package/dist/fundamentalTypes/mapType.d.ts.map +1 -1
  16. package/dist/fundamentalTypes/noneditableType.d.ts +6 -0
  17. package/dist/fundamentalTypes/noneditableType.d.ts.map +1 -0
  18. package/dist/fundamentalTypes/objectReferenceType.d.ts.map +1 -1
  19. package/dist/fundamentalTypes/objectType.d.ts.map +1 -1
  20. package/dist/fundamentalTypes/setType.d.ts.map +1 -1
  21. package/dist/fundamentalTypes/sparseUndefinedType.d.ts.map +1 -1
  22. package/dist/fundamentalTypes/undefinedType.d.ts.map +1 -1
  23. package/dist/index.js +432 -107
  24. package/dist/superTypes/SpecialNumberType.d.ts +2 -10
  25. package/dist/superTypes/SpecialNumberType.d.ts.map +1 -1
  26. package/dist/superTypes/SpecialRealNumberType.d.ts +2 -2
  27. package/dist/superTypes/SpecialRealNumberType.d.ts.map +1 -1
  28. package/dist/superTypes/dommatrixType.d.ts +6 -0
  29. package/dist/superTypes/dommatrixType.d.ts.map +1 -0
  30. package/dist/superTypes/dompointType.d.ts +6 -0
  31. package/dist/superTypes/dompointType.d.ts.map +1 -0
  32. package/dist/superTypes/domrectType.d.ts +6 -0
  33. package/dist/superTypes/domrectType.d.ts.map +1 -0
  34. package/dist/superTypes/errorsSpecialType.d.ts +2 -2
  35. package/dist/superTypes/errorsSpecialType.d.ts.map +1 -1
  36. package/dist/types.d.ts +27 -14
  37. package/dist/types.d.ts.map +1 -1
  38. package/dist/utils/media.d.ts.map +1 -1
  39. package/dist/vendor-imports.d.ts +1 -1
  40. package/package.json +13 -13
  41. package/src/formats/structuredCloning.js +49 -6
  42. package/src/fundamentalTypes/BooleanObjectType.js +3 -1
  43. package/src/fundamentalTypes/NumberObjectType.js +3 -1
  44. package/src/fundamentalTypes/StringObjectType.js +3 -1
  45. package/src/fundamentalTypes/arrayType.js +4 -2
  46. package/src/fundamentalTypes/blobType.js +17 -13
  47. package/src/fundamentalTypes/dateType.js +6 -2
  48. package/src/fundamentalTypes/fileType.js +14 -12
  49. package/src/fundamentalTypes/filelistType.js +3 -1
  50. package/src/fundamentalTypes/mapType.js +3 -1
  51. package/src/fundamentalTypes/noneditableType.js +87 -0
  52. package/src/fundamentalTypes/objectReferenceType.js +3 -1
  53. package/src/fundamentalTypes/objectType.js +3 -1
  54. package/src/fundamentalTypes/setType.js +3 -1
  55. package/src/fundamentalTypes/sparseUndefinedType.js +3 -1
  56. package/src/fundamentalTypes/undefinedType.js +3 -1
  57. package/src/subTypes/blobHTMLType.js +1 -1
  58. package/src/superTypes/SpecialNumberType.js +2 -8
  59. package/src/superTypes/SpecialRealNumberType.js +2 -2
  60. package/src/{fundamentalTypes → superTypes}/dommatrixType.js +63 -10
  61. package/src/{fundamentalTypes → superTypes}/dompointType.js +60 -7
  62. package/src/{fundamentalTypes → superTypes}/domrectType.js +59 -7
  63. package/src/superTypes/errorsSpecialType.js +1 -1
  64. package/src/types.js +36 -15
  65. package/src/utils/media.js +3 -2
  66. package/src/vendor-imports.js +2 -1
  67. package/vendor/typeson-registry/dist/index.js +90 -28
package/dist/index.js CHANGED
@@ -122,7 +122,7 @@ const NULLABLES = ['autocomplete', 'dir',
122
122
  * @param {string} sel
123
123
  * @returns {HTMLElement|null}
124
124
  */
125
- const $$1 = sel => {
125
+ const $$2 = sel => {
126
126
  if (!doc) {
127
127
  throw new Error('No document object');
128
128
  }
@@ -850,7 +850,7 @@ const jml = function jml(...args) {
850
850
  */
851
851
  template, doc.body);
852
852
  } else if (typeof template === 'string') {
853
- template = /** @type {HTMLTemplateElement} */$$1(template);
853
+ template = /** @type {HTMLTemplateElement} */$$2(template);
854
854
  }
855
855
  jml( /** @type {HTMLTemplateElement} */
856
856
  /** @type {HTMLTemplateElement} */template.content.cloneNode(true), shadowRoot);
@@ -2129,7 +2129,7 @@ class JamilihMap extends Map {
2129
2129
  * @returns {ArbitraryValue}
2130
2130
  */
2131
2131
  get(element) {
2132
- const elem = typeof element === 'string' ? $$1(element) : element;
2132
+ const elem = typeof element === 'string' ? $$2(element) : element;
2133
2133
  return super.get.call(this, elem);
2134
2134
  }
2135
2135
  /**
@@ -2138,7 +2138,7 @@ class JamilihMap extends Map {
2138
2138
  * @returns {ArbitraryValue}
2139
2139
  */
2140
2140
  set(element, value) {
2141
- const elem = typeof element === 'string' ? $$1(element) : element;
2141
+ const elem = typeof element === 'string' ? $$2(element) : element;
2142
2142
  return super.set.call(this, elem, value);
2143
2143
  }
2144
2144
  /**
@@ -2148,7 +2148,7 @@ class JamilihMap extends Map {
2148
2148
  * @returns {ArbitraryValue}
2149
2149
  */
2150
2150
  invoke(element, methodName, ...args) {
2151
- const elem = typeof element === 'string' ? $$1(element) : element;
2151
+ const elem = typeof element === 'string' ? $$2(element) : element;
2152
2152
  return this.get(elem)[methodName](elem, ...args);
2153
2153
  }
2154
2154
  }
@@ -2163,7 +2163,7 @@ class JamilihWeakMap extends WeakMap {
2163
2163
  * @returns {ArbitraryValue}
2164
2164
  */
2165
2165
  get(element) {
2166
- const elem = typeof element === 'string' ? $$1(element) : element;
2166
+ const elem = typeof element === 'string' ? $$2(element) : element;
2167
2167
  if (!elem) {
2168
2168
  throw new Error("Can't find the element");
2169
2169
  }
@@ -2175,7 +2175,7 @@ class JamilihWeakMap extends WeakMap {
2175
2175
  * @returns {ArbitraryValue}
2176
2176
  */
2177
2177
  set(element, value) {
2178
- const elem = typeof element === 'string' ? $$1(element) : element;
2178
+ const elem = typeof element === 'string' ? $$2(element) : element;
2179
2179
  if (!elem) {
2180
2180
  throw new Error("Can't find the element");
2181
2181
  }
@@ -2188,7 +2188,7 @@ class JamilihWeakMap extends WeakMap {
2188
2188
  * @returns {ArbitraryValue}
2189
2189
  */
2190
2190
  invoke(element, methodName, ...args) {
2191
- const elem = typeof element === 'string' ? $$1(element) : element;
2191
+ const elem = typeof element === 'string' ? $$2(element) : element;
2192
2192
  if (!elem) {
2193
2193
  throw new Error("Can't find the element");
2194
2194
  }
@@ -2234,7 +2234,7 @@ jml.strong = function (obj, ...args) {
2234
2234
  * @returns {ArbitraryValue} The value associated with the symbol
2235
2235
  */
2236
2236
  jml.symbol = jml.sym = jml.for = function (element, sym) {
2237
- const elem = typeof element === 'string' ? $$1(element) : element;
2237
+ const elem = typeof element === 'string' ? $$2(element) : element;
2238
2238
 
2239
2239
  // @ts-expect-error Should be ok
2240
2240
  return elem[typeof sym === 'symbol' ? sym : Symbol.for(sym)];
@@ -2253,7 +2253,7 @@ jml.symbol = jml.sym = jml.for = function (element, sym) {
2253
2253
  * @returns {ArbitraryValue}
2254
2254
  */
2255
2255
  jml.command = function (elem, symOrMap, methodName, ...args) {
2256
- elem = typeof elem === 'string' ? $$1(elem) : elem;
2256
+ elem = typeof elem === 'string' ? $$2(elem) : elem;
2257
2257
  if (!elem) {
2258
2258
  throw new Error('No element found');
2259
2259
  }
@@ -2315,7 +2315,7 @@ if (doc && doc.body) {
2315
2315
  }
2316
2316
  const nbsp$1 = '\u00A0'; // Very commonly needed in templates
2317
2317
 
2318
- function ownKeys(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n);}return r}function _objectSpread2(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?ownKeys(Object(r),!0).forEach((function(t){_defineProperty(e,t,r[t]);})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):ownKeys(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t));}));}return e}function _typeof(e){return _typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},_typeof(e)}function _classCallCheck(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function _defineProperties(e,t){for(var r=0;r<t.length;r++){var n=t[r];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(e,_toPropertyKey(n.key),n);}}function _createClass(e,t,r){return t&&_defineProperties(e.prototype,t),r&&_defineProperties(e,r),Object.defineProperty(e,"prototype",{writable:!1}),e}function _defineProperty(e,t,r){return (t=_toPropertyKey(t))in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function _slicedToArray(e,t){return function _arrayWithHoles(e){if(Array.isArray(e))return e}(e)||function _iterableToArrayLimit(e,t){var r=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=r){var n,o,a,i,c=[],s=!0,u=!1;try{if(a=(r=r.call(e)).next,0===t){if(Object(r)!==r)return;s=!1;}else for(;!(s=(n=a.call(r)).done)&&(c.push(n.value),c.length!==t);s=!0);}catch(e){u=!0,o=e;}finally{try{if(!s&&null!=r.return&&(i=r.return(),Object(i)!==i))return}finally{if(u)throw o}}return c}}(e,t)||_unsupportedIterableToArray(e,t)||function _nonIterableRest(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function _unsupportedIterableToArray(e,t){if(e){if("string"==typeof e)return _arrayLikeToArray(e,t);var r=Object.prototype.toString.call(e).slice(8,-1);return "Object"===r&&e.constructor&&(r=e.constructor.name),"Map"===r||"Set"===r?Array.from(e):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?_arrayLikeToArray(e,t):void 0}}function _arrayLikeToArray(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=new Array(t);r<t;r++)n[r]=e[r];return n}function _toPropertyKey(e){var t=function _toPrimitive(e,t){if("object"!=typeof e||null===e)return e;var r=e[Symbol.toPrimitive];if(void 0!==r){var n=r.call(e,t||"default");if("object"!=typeof n)return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return ("string"===t?String:Number)(e)}(e,"string");return "symbol"==typeof t?t:String(t)}var e=_createClass((function TypesonPromise(e){_classCallCheck(this,TypesonPromise),this.p=new Promise(e);}));e.__typeson__type__="TypesonPromise","undefined"!=typeof Symbol&&Object.defineProperty(e.prototype,Symbol.toStringTag,{get:function get(){return "TypesonPromise"}}),e.prototype.then=function(t,r){var n=this;return new e((function(e,o){n.p.then((function(r){e(t?t(r):r);})).catch((function(e){return r?r(e):Promise.reject(e)})).then(e,o);}))},e.prototype.catch=function(e){return this.then((function(){}),e)},e.resolve=function(t){return new e((function(e){e(t);}))},e.reject=function(t){return new e((function(e,r){r(t);}))},e.all=function(t){return new e((function(e,r){Promise.all(t.map((function(e){return null!=e&&e.constructor&&"__typeson__type__"in e.constructor&&"TypesonPromise"===e.constructor.__typeson__type__?e.p:e}))).then(e,r);}))},e.race=function(t){return new e((function(e,r){Promise.race(t.map((function(e){return null!=e&&e.constructor&&"__typeson__type__"in e.constructor&&"TypesonPromise"===e.constructor.__typeson__type__?e.p:e}))).then(e,r);}))},e.allSettled=function(t){return new e((function(e,r){Promise.allSettled(t.map((function(e){return null!=e&&e.constructor&&"__typeson__type__"in e.constructor&&"TypesonPromise"===e.constructor.__typeson__type__?e.p:e}))).then(e,r);}))};var t=Object.hasOwn,r=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(e,n){if(!e||"object"!==_typeof(e))return !1;var o=r(e);if(!o)return null===n;var a=t(o,"constructor")&&o.constructor;return "function"!=typeof a?null===n:n===a||null!==n&&Function.prototype.toString.call(a)===Function.prototype.toString.call(n)||"function"==typeof n&&"string"==typeof a.__typeson__type__&&a.__typeson__type__===n.__typeson__type__}function isPlainObject(e){return !(!e||"Object"!==toStringTag(e))&&(!r(e)||hasConstructorOf(e,Object))}function isUserObject(e){if(!e||"Object"!==toStringTag(e))return !1;var t=r(e);return !t||hasConstructorOf(e,Object)||isUserObject(t)}function isObject(e){return null!==e&&"object"===_typeof(e)}function escapeKeyPathComponent(e){return e.replaceAll("''","''''").replace(/^$/,"''").replaceAll("~","~0").replaceAll(".","~1")}function unescapeKeyPathComponent(e){return e.replaceAll("~1",".").replaceAll("~0","~").replace(/^''$/,"").replaceAll("''''","''")}function getByKeyPath(e,t){if(""===t)return e;if(null===e||"object"!==_typeof(e))throw new TypeError("Unexpected non-object type");var r=t.indexOf(".");if(r>-1){var n=e[unescapeKeyPathComponent(t.slice(0,r))];return void 0===n?void 0:getByKeyPath(n,t.slice(r+1))}return e[unescapeKeyPathComponent(t)]}function setAtKeyPath(e,t,r){if(""===t)return r;if(!e||"object"!==_typeof(e))throw new TypeError("Unexpected non-object type");var n=t.indexOf(".");return n>-1?setAtKeyPath(e[unescapeKeyPathComponent(t.slice(0,n))],t.slice(n+1),r):(e[unescapeKeyPathComponent(t)]=r,e)}function getJSONType(e){return null===e?"null":Array.isArray(e)?"array":_typeof(e)}function _await(e,t,r){return r?t?t(e):e:(e&&e.then||(e=Promise.resolve(e)),t?e.then(t):e)}var n=Object.keys,o=Object.hasOwn,a=Array.isArray,i=["type","replaced","iterateIn","iterateUnsetNumeric","addLength"];function _async(e){return function(){for(var t=[],r=0;r<arguments.length;r++)t[r]=arguments[r];try{return Promise.resolve(e.apply(this,t))}catch(e){return Promise.reject(e)}}}function nestedPathsFirst(e,t){var r,n;if(""===e.keypath)return -1;var o=null!==(r=e.keypath.match(/\./g))&&void 0!==r?r:0,a=null!==(n=t.keypath.match(/\./g))&&void 0!==n?n:0;return o&&(o=o.length),a&&(a=a.length),o>a?-1:o<a?1:e.keypath<t.keypath?-1:e.keypath>t.keypath?1:0}var c=function(){function Typeson(e){_classCallCheck(this,Typeson),this.options=e,this.plainObjectReplacers=[],this.nonplainObjectReplacers=[],this.revivers={},this.types={};}return _createClass(Typeson,[{key:"stringify",value:function stringify(e,t,r,n){n=_objectSpread2(_objectSpread2(_objectSpread2({},this.options),n),{},{stringification:!0});var o=this.encapsulate(e,null,n);return a(o)?JSON.stringify(o[0],t,r):o.then((function(e){return JSON.stringify(e,t,r)}))}},{key:"stringifySync",value:function stringifySync(e,t,r,n){return this.stringify(e,t,r,_objectSpread2(_objectSpread2({throwOnBadSyncType:!0},n),{},{sync:!0}))}},{key:"stringifyAsync",value:function stringifyAsync(e,t,r,n){return this.stringify(e,t,r,_objectSpread2(_objectSpread2({throwOnBadSyncType:!0},n),{},{sync:!1}))}},{key:"parse",value:function parse(e,t,r){return r=_objectSpread2(_objectSpread2(_objectSpread2({},this.options),r),{},{parse:!0}),this.revive(JSON.parse(e,t),r)}},{key:"parseSync",value:function parseSync(e,t,r){return this.parse(e,t,_objectSpread2(_objectSpread2({throwOnBadSyncType:!0},r),{},{sync:!0}))}},{key:"parseAsync",value:function parseAsync(e,t,r){return this.parse(e,t,_objectSpread2(_objectSpread2({throwOnBadSyncType:!0},r),{},{sync:!1}))}},{key:"specialTypeNames",value:function specialTypeNames(e,t){var r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return r.returnTypeNames=!0,this.encapsulate(e,t,r)}},{key:"rootTypeName",value:function rootTypeName(e,t){var r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return r.iterateNone=!0,this.encapsulate(e,t,r)}},{key:"encapsulate",value:function encapsulate(t,r,c){var s=this,u=_objectSpread2(_objectSpread2({sync:!0},this.options),c),l=u.sync,f={},y=[],p=[],d=[],v=!("cyclic"in u)||u.cyclic,b=u.encapsulateObserver,m=function finish(e){var t=Object.values(f);if(u.iterateNone)return t.length?t[0]:getJSONType(e);if(t.length){if(u.returnTypeNames)return function _toConsumableArray(e){return function _arrayWithoutHoles(e){if(Array.isArray(e))return _arrayLikeToArray(e)}(e)||function _iterableToArray(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||_unsupportedIterableToArray(e)||function _nonIterableSpread(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}(new Set(t));e&&isPlainObject(e)&&!o(e,"$types")?e.$types=f:e={$:e,$types:{$:f}};}else isObject(e)&&o(e,"$types")&&(e={$:e,$types:!0});return !u.returnTypeNames&&e},h=_async((function(t,r){return _await(Promise.all(r.map((function(e){return e[1].p}))),(function(n){return _await(Promise.all(n.map(_async((function(n){var o=!1,a=[],i=_slicedToArray(r.splice(0,1),1),c=_slicedToArray(i[0],7),s=c[0],u=c[2],l=c[3],f=c[4],y=c[5],p=c[6],d=O(s,n,u,l,a,!0,p),v=hasConstructorOf(d,e);return function _invoke(e,t){var r=e();return r&&r.then?r.then(t):t(r)}((function(){if(s&&v)return _await(d.p,(function(e){f[y]=e;var r=h(t,a);return o=!0,r}))}),(function(e){return o?e:(s?f[y]=d:t=v?d.p:d,h(t,a))}))})))),(function(){return t}))}))})),g=function _adaptBuiltinStateObjectProperties(e,t,r){Object.assign(e,t);var n=i.map((function(t){var r=e[t];return delete e[t],r}));r(),i.forEach((function(t,r){e[t]=n[r];}));},O=function _encapsulate(t,r,i,c,l,d,v){var m,h={},O=_typeof(r),w=b?function(n){var o,a=null!==(o=null!=v?v:c.type)&&void 0!==o?o:getJSONType(r);b(Object.assign(null!=n?n:h,{keypath:t,value:r,cyclic:i,stateObj:c,promisesData:l,resolvingTypesonPromise:d,awaitingTypesonPromise:hasConstructorOf(r,e)},{type:a}));}:null;if(["string","boolean","number","undefined"].includes(O))return void 0===r||Number.isNaN(r)||r===Number.NEGATIVE_INFINITY||r===Number.POSITIVE_INFINITY||0===r?(m=c.replaced?r:_(t,r,c,l,!1,d,w))!==r&&(h={replaced:m}):m=r,w&&w(),m;if(null===r)return w&&w(),r;if(i&&!c.iterateIn&&!c.iterateUnsetNumeric&&r&&"object"===_typeof(r)){var A=y.indexOf(r);if(!(A<0))return f[t]="#",w&&w({cyclicKeypath:p[A]}),"#"+p[A];!0===i&&(y.push(r),p.push(t));}var S,j,T=isPlainObject(r),N=a(r),I=(T||N)&&(!s.plainObjectReplacers.length||c.replaced)||c.iterateIn?r:_(t,r,c,l,T||N,null,w);if(I!==r?(m=I,h={replaced:I}):""===t&&hasConstructorOf(r,e)?(l.push([t,r,i,c,void 0,void 0,c.type]),m=r):N&&"object"!==c.iterateIn||"array"===c.iterateIn?(S=new Array(r.length),h={clone:S}):(["function","symbol"].includes(_typeof(r))||"toJSON"in r||hasConstructorOf(r,e)||hasConstructorOf(r,Promise)||hasConstructorOf(r,ArrayBuffer))&&!T&&"object"!==c.iterateIn?m=r:(S={},c.addLength&&(S.length=r.length),h={clone:S}),w&&w(),u.iterateNone)return null!==(j=S)&&void 0!==j?j:m;if(!S)return m;if(c.iterateIn){var P=function _loop(n){var a={ownKeys:o(r,n)};g(c,a,(function(){var o=t+(t?".":"")+escapeKeyPathComponent(n),a=_encapsulate(o,r[n],Boolean(i),c,l,d);hasConstructorOf(a,e)?l.push([o,a,Boolean(i),c,S,n,c.type]):void 0!==a&&(S[n]=a);}));};for(var E in r)P(E);w&&w({endIterateIn:!0,end:!0});}else n(r).forEach((function(n){var o=t+(t?".":"")+escapeKeyPathComponent(n);g(c,{ownKeys:!0},(function(){var t=_encapsulate(o,r[n],Boolean(i),c,l,d);hasConstructorOf(t,e)?l.push([o,t,Boolean(i),c,S,n,c.type]):void 0!==t&&(S[n]=t);}));})),w&&w({endIterateOwn:!0,end:!0});if(c.iterateUnsetNumeric){for(var x=r.length,C=function _loop2(n){if(!(n in r)){var o="".concat(t).concat(t?".":"").concat(n);g(c,{ownKeys:!1},(function(){var t=_encapsulate(o,void 0,Boolean(i),c,l,d);hasConstructorOf(t,e)?l.push([o,t,Boolean(i),c,S,n,c.type]):void 0!==t&&(S[n]=t);}));}},k=0;k<x;k++)C(k);w&&w({endIterateUnsetNumeric:!0,end:!0});}return S},_=function replace(e,t,r,n,o,a,i){for(var c=o?s.plainObjectReplacers:s.nonplainObjectReplacers,u=c.length;u--;){var y=c[u];if(y.test(t,r)){var p=y.type;if(s.revivers[p]){var d=f[e];f[e]=d?[p].concat(d):p;}if(Object.assign(r,{type:p,replaced:!0}),(l||!y.replaceAsync)&&!y.replace)return i&&i({typeDetected:!0}),O(e,t,v&&"readonly",r,n,a,p);i&&i({replacing:!0});var b=void 0;if(l||!y.replaceAsync){if(void 0===y.replace)throw new TypeError("Missing replacer");b=y.replace(t,r);}else b=y.replaceAsync(t,r);return O(e,b,v&&"readonly",r,n,a,p)}}return t},w=O("",t,v,null!=r?r:{},d);if(d.length)return l&&u.throwOnBadSyncType?function(){throw new TypeError("Sync method requested but async result obtained")}():Promise.resolve(h(w,d)).then(m);if(!l&&u.throwOnBadSyncType)throw new TypeError("Async method requested but sync result obtained");return u.stringification&&l?[m(w)]:l?m(w):Promise.resolve(m(w))}},{key:"encapsulateSync",value:function encapsulateSync(e,t,r){return this.encapsulate(e,t,_objectSpread2(_objectSpread2({throwOnBadSyncType:!0},r),{},{sync:!0}))}},{key:"encapsulateAsync",value:function encapsulateAsync(e,t,r){return this.encapsulate(e,t,_objectSpread2(_objectSpread2({throwOnBadSyncType:!0},r),{},{sync:!1}))}},{key:"revive",value:function revive(t,r){var o=this,i=_objectSpread2(_objectSpread2({sync:!0},this.options),r),c=i.sync;function finishRevival(e){if(c)return e;if(i.throwOnBadSyncType)throw new TypeError("Async method requested but sync result obtained");return Promise.resolve(e)}if(!t||"object"!==_typeof(t)||Array.isArray(t))return finishRevival(t);var u=t.$types;if(!0===u)return finishRevival(t.$);if(!u||"object"!==_typeof(u)||Array.isArray(u))return finishRevival(t);var l=[],f={},y=!0;u.$&&isPlainObject(u.$)&&(t=t.$,u=u.$,y=!1);var p=function executeReviver(e,t){var r,n=_slicedToArray(null!==(r=o.revivers[e])&&void 0!==r?r:[],1)[0];if(!n)throw new Error("Unregistered type: "+e);if(c&&!("revive"in n))return t;if(!c&&n.reviveAsync)return n.reviveAsync(t,f);if(n.revive)return n.revive(t,f);throw new Error("Missing reviver")},d=[];function checkUndefined(e){return hasConstructorOf(e,s)?void 0:e}var v,b=function revivePlainObjects(){var r=[];if(!u)throw new Error("Found bad `types`");if(Object.entries(u).forEach((function(e){var t=_slicedToArray(e,2),n=t[0],a=t[1];"#"!==a&&[].concat(a).forEach((function(e){var t;_slicedToArray(null!==(t=o.revivers[e])&&void 0!==t?t:[null,{}],2)[1].plain&&(r.push({keypath:n,type:e}),delete u[n]);}));})),r.length)return r.sort(nestedPathsFirst).reduce((function reducer(r,n){var o=n.keypath,a=n.type;if(isThenable(r))return r.then((function(e){return reducer(e,{keypath:o,type:a})}));var i=getByKeyPath(t,o);if(hasConstructorOf(i=p(a,i),e))return i.then((function(e){var r=setAtKeyPath(t,o,e);r===e&&(t=r);}));var c=setAtKeyPath(t,o,i);c===i&&(t=c);}),void 0)}();return hasConstructorOf(b,e)?v=b.then((function(){return t})):(v=function _revive(t,r,o,i,c){if(!y||"$types"!==t){var f=u[t],v=a(r);if(v||isPlainObject(r)){var b=v?new Array(r.length):{};for(n(r).forEach((function(n){var a=_revive(t+(t?".":"")+escapeKeyPathComponent(n),r[n],null!=o?o:b,b,n),i=function set(e){return hasConstructorOf(e,s)?b[n]=void 0:void 0!==e&&(b[n]=e),e};hasConstructorOf(a,e)?d.push(a.then((function(e){return i(e)}))):i(a);})),r=b;l.length;){var m=_slicedToArray(l[0],4),h=m[0],g=m[1],O=m[2],_=m[3],w=getByKeyPath(h,g);if(void 0===w)break;O[_]=w,l.splice(0,1);}}if(!f)return r;if("#"===f){var A=getByKeyPath(o,r.slice(1));return void 0===A&&l.push([o,r.slice(1),i,c]),A}return [].concat(f).reduce((function reducer(t,r){if(hasConstructorOf(t,e))return t.then((function(e){return reducer(e,r)}));if("string"!=typeof r)throw new TypeError("Bad type JSON");return p(r,t)}),r)}}("",t,null),d.length&&(v=e.resolve(v).then((function(t){return e.all([t].concat(d))})).then((function(e){return _slicedToArray(e,1)[0]})))),isThenable(v)?c&&i.throwOnBadSyncType?function(){throw new TypeError("Sync method requested but async result obtained")}():hasConstructorOf(v,e)?v.p.then(checkUndefined):v:!c&&i.throwOnBadSyncType?function(){throw new TypeError("Async method requested but sync result obtained")}():c?checkUndefined(v):Promise.resolve(checkUndefined(v))}},{key:"reviveSync",value:function reviveSync(e,t){return this.revive(e,_objectSpread2(_objectSpread2({throwOnBadSyncType:!0},t),{},{sync:!0}))}},{key:"reviveAsync",value:function reviveAsync(e,t){return this.revive(e,_objectSpread2(_objectSpread2({throwOnBadSyncType:!0},t),{},{sync:!1}))}},{key:"register",value:function register(e,t){var r=this,o=null!=t?t:{},i=function R(e){a(e)?e.forEach((function(e){return R(e)})):n(e).forEach((function(t){var n;if("#"===t)throw new TypeError("# cannot be used as a type name as it is reserved for cyclic objects");if(u.includes(t))throw new TypeError("Plain JSON object types are reserved as type names");var i=e[t],c=i&&"function"!=typeof i&&!Array.isArray(i)&&i.testPlainObjects?r.plainObjectReplacers:r.nonplainObjectReplacers,s=c.filter((function(e){return e.type===t}));if(s.length&&(c.splice(c.indexOf(s[0]),1),delete r.revivers[t],delete r.types[t]),"function"==typeof i){var l=i;i={test:function test(e){return e&&e.constructor===l},replace:function replace(e){return _objectSpread2({},e)},revive:function revive(e){return Object.assign(Object.create(l.prototype),e)}};}else if(a(i)){var f=_slicedToArray(i,3);i={test:f[0],replace:f[1],revive:f[2]};}if(null!==(n=i)&&void 0!==n&&n.test){var y={type:t,test:i.test.bind(i)};i.replace&&(y.replace=i.replace.bind(i)),i.replaceAsync&&(y.replaceAsync=i.replaceAsync.bind(i));var p="number"==typeof o.fallback?o.fallback:o.fallback?0:Number.POSITIVE_INFINITY;if(i.testPlainObjects?r.plainObjectReplacers.splice(p,0,y):r.nonplainObjectReplacers.splice(p,0,y),i.revive||i.reviveAsync){var d={};i.revive&&(d.revive=i.revive.bind(i)),i.reviveAsync&&(d.reviveAsync=i.reviveAsync.bind(i)),r.revivers[t]=[d,{plain:i.testPlainObjects}];}r.types[t]=i;}}));};return [].concat(e).forEach((function(e){return i(e)})),this}}]),Typeson}(),s=_createClass((function Undefined(){_classCallCheck(this,Undefined);}));s.__typeson__type__="TypesonUndefined";for(var u=["null","boolean","number","string","array","object"],l="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",f=new Uint8Array(256),y=0;y<64;y++)f[l.codePointAt(y)]=y;var p=function encode(e,t,r){null==r&&(r=e.byteLength);for(var n=new Uint8Array(e,t||0,r),o=n.length,a="",i=0;i<o;i+=3)a+=l[n[i]>>2],a+=l[(3&n[i])<<4|n[i+1]>>4],a+=l[(15&n[i+1])<<2|n[i+2]>>6],a+=l[63&n[i+2]];return o%3==2?a=a.slice(0,-1)+"=":o%3==1&&(a=a.slice(0,-2)+"=="),a},d=function decode(e){var t=e.length;if(t%4)throw new Error("Bad base64 length: not divisible by four");var r,n,o,a,i=.75*e.length,c=0;"="===e[e.length-1]&&(i--,"="===e[e.length-2]&&i--);for(var s=new ArrayBuffer(i),u=new Uint8Array(s),l=0;l<t;l+=4)r=f[e.codePointAt(l)],n=f[e.codePointAt(l+1)],o=f[e.codePointAt(l+2)],a=f[e.codePointAt(l+3)],u[c++]=r<<2|n>>4,u[c++]=(15&n)<<4|o>>2,u[c++]=(3&o)<<6|63&a;return s};const v={arraybuffer:{test:e=>"ArrayBuffer"===toStringTag(e),replace(e,t){t.buffers||(t.buffers=[]);const r=t.buffers.indexOf(e);return r>-1?{index:r}:(t.buffers.push(e),p(e))},revive(e,t){if(t.buffers||(t.buffers=[]),"object"==typeof e)return t.buffers[e.index];const r=d(e);return t.buffers.push(r),r}}},b={bigintObject:{test:e=>"object"==typeof e&&hasConstructorOf(e,BigInt),replace:String,revive:e=>new Object(BigInt(e))}},m={bigint:{test:e=>"bigint"==typeof e,replace:String,revive:e=>BigInt(e)}};function string2arraybuffer(e){const t=new Uint8Array(e.length);for(let r=0;r<e.length;r++)t[r]=e.charCodeAt(r);return t.buffer}const h={blob:{test:e=>"Blob"===toStringTag(e),replace(e){const t=new XMLHttpRequest;if(t.overrideMimeType("text/plain; charset=x-user-defined"),t.open("GET",URL.createObjectURL(e),!1),t.send(),200!==t.status&&0!==t.status)throw new Error("Bad Blob access: "+t.status);return {type:e.type,stringContents:t.responseText}},revive(e){const{type:t,stringContents:r}=e;return new Blob([string2arraybuffer(r)],{type:t})},replaceAsync:t=>new e(((e,r)=>{const n=new FileReader;n.addEventListener("load",(()=>{e({type:t.type,stringContents:n.result});})),n.addEventListener("error",(()=>{r(n.error);})),n.readAsBinaryString(t);}))}};const _={cryptokey:{test:e=>"CryptoKey"===toStringTag(e)&&e.extractable,replaceAsync:t=>new e((async(e,r)=>{let n;try{n=await crypto.subtle.exportKey("jwk",t);}catch(e){return void r(e)}e({jwk:n,algorithm:t.algorithm,usages:t.usages});})),revive(e){const{jwk:t,algorithm:r,usages:n}=e;return crypto.subtle.importKey("jwk",t,r,!0,n)}}},w={dataview:{test:e=>"DataView"===toStringTag(e),replace({buffer:e,byteOffset:t,byteLength:r},n){n.buffers||(n.buffers=[]);const o=n.buffers.indexOf(e);return o>-1?{index:o,byteOffset:t,byteLength:r}:(n.buffers.push(e),{encoded:p(e),byteOffset:t,byteLength:r})},revive(e,t){t.buffers||(t.buffers=[]);const{byteOffset:r,byteLength:n,encoded:o,index:a}=e;let i;return "index"in e?i=t.buffers[a]:(i=d(o),t.buffers.push(i)),new DataView(i,r,n)}}},A={date:{test:e=>"Date"===toStringTag(e),replace(e){const t=e.getTime();return Number.isNaN(t)?"NaN":t},revive:e=>"NaN"===e?new Date(Number.NaN):new Date(e)}},S={domexception:{test:e=>"DOMException"===toStringTag(e),replace:e=>({name:e.name,message:e.message}),revive:({message:e,name:t})=>new DOMException(e,t)}},j={dommatrix:{test:e=>"DOMMatrix"===toStringTag(e),replace:e=>e.is2D?{a:e.a,b:e.b,c:e.c,d:e.d,e:e.e,f:e.f}:{m11:e.m11,m12:e.m12,m13:e.m13,m14:e.m14,m21:e.m21,m22:e.m22,m23:e.m23,m24:e.m24,m31:e.m31,m32:e.m32,m33:e.m33,m34:e.m34,m41:e.m41,m42:e.m42,m43:e.m43,m44:e.m44},revive:e=>Object.hasOwn(e,"a")?new DOMMatrix([e.a,e.b,e.c,e.d,e.e,e.f]):new DOMMatrix([e.m11,e.m12,e.m13,e.m14,e.m21,e.m22,e.m23,e.m24,e.m31,e.m32,e.m33,e.m34,e.m41,e.m42,e.m43,e.m44])}},T={dompoint:{test:e=>"DOMPoint"===toStringTag(e),replace:e=>({x:e.x,y:e.y,z:e.z,w:e.w}),revive:({x:e,y:t,z:r,w:n})=>new DOMPoint(e,t,r,n)}},N={domrect:{test:e=>"DOMRect"===toStringTag(e),replace:e=>({x:e.x,y:e.y,width:e.width,height:e.height}),revive:({x:e,y:t,width:r,height:n})=>new DOMRect(e,t,r,n)}},I={error:{test:e=>"Error"===toStringTag(e),replace:({name:e,message:t,cause:r,stack:n,fileName:o,lineNumber:a,columnNumber:i})=>({name:e,message:t,cause:r,stack:n,fileName:o,lineNumber:a,columnNumber:i}),revive(e){const t=new Error(e.message);return t.name=e.name,t.cause=e.cause,t.stack=e.stack,t.fileName=e.fileName,t.lineNumber=e.lineNumber,t.columnNumber=e.columnNumber,t}}},P={};function create$2(e){P[e.name.toLowerCase()]={test:t=>hasConstructorOf(t,e),replace:({name:e,message:t,cause:r,stack:n,fileName:o,lineNumber:a,columnNumber:i,errors:c})=>({name:e,message:t,cause:r,stack:n,fileName:o,lineNumber:a,columnNumber:i,errors:c}),revive(t){const r="undefined"!=typeof AggregateError&&e===AggregateError,n=r?new e(t.errors,t.message):new e(t.message);return n.name=t.name,n.cause=t.cause,n.stack=t.stack,n.fileName=t.fileName,n.lineNumber=t.lineNumber,n.columnNumber=t.columnNumber,r&&(n.errors=t.errors),n}};}[TypeError,RangeError,SyntaxError,ReferenceError,EvalError,URIError].forEach((e=>create$2(e))),"undefined"!=typeof AggregateError&&create$2(AggregateError),"function"==typeof InternalError&&create$2(InternalError);const E={file:{test:e=>"File"===toStringTag(e),replace(e){const t=new XMLHttpRequest;if(t.overrideMimeType("text/plain; charset=x-user-defined"),t.open("GET",URL.createObjectURL(e),!1),t.send(),200!==t.status&&0!==t.status)throw new Error("Bad File access: "+t.status);return {type:e.type,stringContents:t.responseText,name:e.name,lastModified:e.lastModified}},revive:({name:e,type:t,stringContents:r,lastModified:n})=>new File([string2arraybuffer(r)],e,{type:t,lastModified:n}),replaceAsync:t=>new e((function(e,r){const n=new FileReader;n.addEventListener("load",(function(){e({type:t.type,stringContents:n.result,name:t.name,lastModified:t.lastModified});})),n.addEventListener("error",(function(){r(n.error);})),n.readAsBinaryString(t);}))}},x={file:E.file,filelist:{test:e=>"FileList"===toStringTag(e),replace(e){const t=[];for(let r=0;r<e.length;r++)t[r]=e.item(r);return t},revive(e){class FileList{constructor(){this._files=arguments[0],this.length=this._files.length;}item(e){return this._files[e]}get[Symbol.toStringTag](){return "FileList"}}return new FileList(e)}}},C={imagebitmap:{test:e=>"ImageBitmap"===toStringTag(e)||e&&e.dataset&&"ImageBitmap"===e.dataset.toStringTag,replace(e){const t=document.createElement("canvas");return t.getContext("2d").drawImage(e,0,0),t.toDataURL()},revive(e){const t=document.createElement("canvas"),r=t.getContext("2d"),n=document.createElement("img");return n.addEventListener("load",(function(){r.drawImage(n,0,0);})),n.src=e,t},reviveAsync(t){const r=document.createElement("canvas"),n=r.getContext("2d"),o=document.createElement("img");return o.addEventListener("load",(function(){n.drawImage(o,0,0);})),o.src=t,new e((async(e,t)=>{try{e(await createImageBitmap(r));}catch(e){t(e);}}))}}},k={imagedata:{test:e=>"ImageData"===toStringTag(e),replace:e=>({array:[...e.data],width:e.width,height:e.height}),revive:e=>new ImageData(new Uint8ClampedArray(e.array),e.width,e.height)}},B={infinity:{test:e=>e===Number.POSITIVE_INFINITY,replace:()=>"Infinity",revive:()=>Number.POSITIVE_INFINITY}},D={map:{test:e=>"Map"===toStringTag(e),replace:e=>[...e.entries()],revive:e=>new Map(e)}},K={nan:{test:e=>Number.isNaN(e),replace:()=>"NaN",revive:()=>Number.NaN}},L={negativeInfinity:{test:e=>e===Number.NEGATIVE_INFINITY,replace:()=>"-Infinity",revive:()=>Number.NEGATIVE_INFINITY}},F={negativeZero:{test:e=>Object.is(e,-0),replace:()=>0,revive:()=>-0}},J={StringObject:{test:e=>"String"===toStringTag(e)&&"object"==typeof e,replace:String,revive:e=>new String(e)},BooleanObject:{test:e=>"Boolean"===toStringTag(e)&&"object"==typeof e,replace:Boolean,revive:e=>new Boolean(e)},NumberObject:{test:e=>"Number"===toStringTag(e)&&"object"==typeof e,replace:Number,revive:e=>new Number(e)}},V={regexp:{test:e=>"RegExp"===toStringTag(e),replace:e=>({source:e.source,flags:(e.global?"g":"")+(e.ignoreCase?"i":"")+(e.multiline?"m":"")+(e.sticky?"y":"")+(e.unicode?"u":"")}),revive:({source:e,flags:t})=>new RegExp(e,t)}},W={set:{test:e=>"Set"===toStringTag(e),replace:e=>[...e.values()],revive:e=>new Set(e)}},G={};"function"==typeof Int8Array&&[Int8Array,Uint8Array,Uint8ClampedArray,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array,..."function"==typeof BigInt64Array?[BigInt64Array,BigUint64Array]:[]].forEach((e=>function create$1(e){const t=e.name;G[t.toLowerCase()]={test:e=>toStringTag(e)===t,replace:e=>(0===e.byteOffset&&e.byteLength===e.buffer.byteLength?e:e.slice(0)).buffer,revive:t=>"ArrayBuffer"===toStringTag(t)?new e(t):t};}(e)));const H={};"function"==typeof Int8Array&&[Int8Array,Uint8Array,Uint8ClampedArray,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array,..."function"==typeof BigInt64Array?[BigInt64Array,BigUint64Array]:[]].forEach((e=>function create(e){const t=e.name;H[t.toLowerCase()]={test:e=>toStringTag(e)===t,replace({buffer:e,byteOffset:t,length:r},n){n.buffers||(n.buffers=[]);const o=n.buffers.indexOf(e);return o>-1?{index:o,byteOffset:t,length:r}:(n.buffers.push(e),{encoded:p(e),byteOffset:t,length:r})},revive(t,r){r.buffers||(r.buffers=[]);const{byteOffset:n,length:o,encoded:a,index:i}=t;let c;return "index"in t?c=r.buffers[i]:(c=d(a),r.buffers.push(c)),new e(c,n,o)}};}(e)));const z={undef:{test:(e,t)=>void 0===e&&(t.ownKeys||!("ownKeys"in t)),replace:()=>0,revive:()=>new s}},X={userObject:{test:e=>isUserObject(e),replace:e=>({...e}),revive:e=>e}},Z=[{arrayNonindexKeys:{testPlainObjects:!0,test:(e,t)=>!!Array.isArray(e)&&(Object.keys(e).some((e=>String(Number.parseInt(e))!==e))&&(t.iterateIn="object",t.addLength=!0),!0),replace:(e,t)=>(t.iterateUnsetNumeric=!0,e),revive(e){if(Array.isArray(e))return e;const t=[];return Object.entries(e).forEach((([e,r])=>{t[e]=r;})),t}}},{sparseUndefined:{test:(e,t)=>void 0===e&&!1===t.ownKeys,replace:()=>0,revive(){}}}],Q=[K,B,L,F],oe=[X,z,Z,J,Q,A,V,k,C,E,x,h,I,P].concat("function"==typeof Map?D:[],"function"==typeof Set?W:[],"function"==typeof ArrayBuffer?v:[],"function"==typeof Uint8Array?H:[],"function"==typeof DataView?w:[],"undefined"!=typeof crypto?_:[],"undefined"!=typeof BigInt?[m,b]:[],"undefined"!=typeof DOMException?S:[],"undefined"!=typeof DOMRect?N:[],"undefined"!=typeof DOMPoint?T:[],"undefined"!=typeof DOMMatrix?j:[]),ae=oe.concat({checkDataCloneException:{test(e){const t={}.toString.call(e).slice(8,-1);if(["symbol","function"].includes(typeof e)||["Arguments","Module","Promise","WeakMap","WeakSet","Event","MessageChannel"].includes(t)||e&&"object"==typeof e&&"number"==typeof e.nodeType&&"function"==typeof e.insertBefore)throw new DOMException("The object cannot be cloned.","DataCloneError");return !1}}});
2318
+ function ownKeys(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n);}return r}function _objectSpread2(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?ownKeys(Object(r),!0).forEach((function(t){_defineProperty(e,t,r[t]);})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):ownKeys(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t));}));}return e}function _typeof(e){return _typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},_typeof(e)}function _classCallCheck(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function _defineProperties(e,t){for(var r=0;r<t.length;r++){var n=t[r];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(e,_toPropertyKey(n.key),n);}}function _createClass(e,t,r){return t&&_defineProperties(e.prototype,t),r&&_defineProperties(e,r),Object.defineProperty(e,"prototype",{writable:!1}),e}function _defineProperty(e,t,r){return (t=_toPropertyKey(t))in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function _slicedToArray(e,t){return function _arrayWithHoles(e){if(Array.isArray(e))return e}(e)||function _iterableToArrayLimit(e,t){var r=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=r){var n,a,o,i,c=[],s=!0,u=!1;try{if(o=(r=r.call(e)).next,0===t){if(Object(r)!==r)return;s=!1;}else for(;!(s=(n=o.call(r)).done)&&(c.push(n.value),c.length!==t);s=!0);}catch(e){u=!0,a=e;}finally{try{if(!s&&null!=r.return&&(i=r.return(),Object(i)!==i))return}finally{if(u)throw a}}return c}}(e,t)||_unsupportedIterableToArray(e,t)||function _nonIterableRest(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function _unsupportedIterableToArray(e,t){if(e){if("string"==typeof e)return _arrayLikeToArray(e,t);var r=Object.prototype.toString.call(e).slice(8,-1);return "Object"===r&&e.constructor&&(r=e.constructor.name),"Map"===r||"Set"===r?Array.from(e):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?_arrayLikeToArray(e,t):void 0}}function _arrayLikeToArray(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=new Array(t);r<t;r++)n[r]=e[r];return n}function _toPropertyKey(e){var t=function _toPrimitive(e,t){if("object"!=typeof e||null===e)return e;var r=e[Symbol.toPrimitive];if(void 0!==r){var n=r.call(e,t||"default");if("object"!=typeof n)return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return ("string"===t?String:Number)(e)}(e,"string");return "symbol"==typeof t?t:String(t)}var e=_createClass((function TypesonPromise(e){_classCallCheck(this,TypesonPromise),this.p=new Promise(e);}));e.__typeson__type__="TypesonPromise","undefined"!=typeof Symbol&&Object.defineProperty(e.prototype,Symbol.toStringTag,{get:function get(){return "TypesonPromise"}}),e.prototype.then=function(t,r){var n=this;return new e((function(e,a){n.p.then((function(r){e(t?t(r):r);})).catch((function(e){return r?r(e):Promise.reject(e)})).then(e,a);}))},e.prototype.catch=function(e){return this.then((function(){}),e)},e.resolve=function(t){return new e((function(e){e(t);}))},e.reject=function(t){return new e((function(e,r){r(t);}))},e.all=function(t){return new e((function(e,r){Promise.all(t.map((function(e){return null!=e&&e.constructor&&"__typeson__type__"in e.constructor&&"TypesonPromise"===e.constructor.__typeson__type__?e.p:e}))).then(e,r);}))},e.race=function(t){return new e((function(e,r){Promise.race(t.map((function(e){return null!=e&&e.constructor&&"__typeson__type__"in e.constructor&&"TypesonPromise"===e.constructor.__typeson__type__?e.p:e}))).then(e,r);}))},e.allSettled=function(t){return new e((function(e,r){Promise.allSettled(t.map((function(e){return null!=e&&e.constructor&&"__typeson__type__"in e.constructor&&"TypesonPromise"===e.constructor.__typeson__type__?e.p:e}))).then(e,r);}))};var t=Object.hasOwn,r=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(e,n){if(!e||"object"!==_typeof(e))return !1;var a=r(e);if(!a)return null===n;var o=t(a,"constructor")&&a.constructor;return "function"!=typeof o?null===n:n===o||null!==n&&Function.prototype.toString.call(o)===Function.prototype.toString.call(n)||"function"==typeof n&&"string"==typeof o.__typeson__type__&&o.__typeson__type__===n.__typeson__type__}function isPlainObject(e){return !(!e||"Object"!==toStringTag(e))&&(!r(e)||hasConstructorOf(e,Object))}function isUserObject(e){if(!e||"Object"!==toStringTag(e))return !1;var t=r(e);return !t||hasConstructorOf(e,Object)||isUserObject(t)}function isObject(e){return null!==e&&"object"===_typeof(e)}function escapeKeyPathComponent(e){return e.replaceAll("''","''''").replace(/^$/,"''").replaceAll("~","~0").replaceAll(".","~1")}function unescapeKeyPathComponent(e){return e.replaceAll("~1",".").replaceAll("~0","~").replace(/^''$/,"").replaceAll("''''","''")}function getByKeyPath(e,t){if(""===t)return e;if(null===e||"object"!==_typeof(e))throw new TypeError("Unexpected non-object type");var r=t.indexOf(".");if(r>-1){var n=e[unescapeKeyPathComponent(t.slice(0,r))];return void 0===n?void 0:getByKeyPath(n,t.slice(r+1))}return e[unescapeKeyPathComponent(t)]}function setAtKeyPath(e,t,r){if(""===t)return r;if(!e||"object"!==_typeof(e))throw new TypeError("Unexpected non-object type");var n=t.indexOf(".");return n>-1?setAtKeyPath(e[unescapeKeyPathComponent(t.slice(0,n))],t.slice(n+1),r):(e[unescapeKeyPathComponent(t)]=r,e)}function getJSONType(e){return null===e?"null":Array.isArray(e)?"array":_typeof(e)}function _await(e,t,r){return r?t?t(e):e:(e&&e.then||(e=Promise.resolve(e)),t?e.then(t):e)}var n=Object.keys,a=Object.hasOwn,o=Array.isArray,i=["type","replaced","iterateIn","iterateUnsetNumeric","addLength"];function _async(e){return function(){for(var t=[],r=0;r<arguments.length;r++)t[r]=arguments[r];try{return Promise.resolve(e.apply(this,t))}catch(e){return Promise.reject(e)}}}function nestedPathsFirst(e,t){var r,n;if(""===e.keypath)return -1;var a=null!==(r=e.keypath.match(/\./g))&&void 0!==r?r:0,o=null!==(n=t.keypath.match(/\./g))&&void 0!==n?n:0;return a&&(a=a.length),o&&(o=o.length),a>o?-1:a<o?1:e.keypath<t.keypath?-1:e.keypath>t.keypath?1:0}var c=function(){function Typeson(e){_classCallCheck(this,Typeson),this.options=e,this.plainObjectReplacers=[],this.nonplainObjectReplacers=[],this.revivers={},this.types={};}return _createClass(Typeson,[{key:"stringify",value:function stringify(e,t,r,n){n=_objectSpread2(_objectSpread2(_objectSpread2({},this.options),n),{},{stringification:!0});var a=this.encapsulate(e,null,n);return o(a)?JSON.stringify(a[0],t,r):a.then((function(e){return JSON.stringify(e,t,r)}))}},{key:"stringifySync",value:function stringifySync(e,t,r,n){return this.stringify(e,t,r,_objectSpread2(_objectSpread2({throwOnBadSyncType:!0},n),{},{sync:!0}))}},{key:"stringifyAsync",value:function stringifyAsync(e,t,r,n){return this.stringify(e,t,r,_objectSpread2(_objectSpread2({throwOnBadSyncType:!0},n),{},{sync:!1}))}},{key:"parse",value:function parse(e,t,r){return r=_objectSpread2(_objectSpread2(_objectSpread2({},this.options),r),{},{parse:!0}),this.revive(JSON.parse(e,t),r)}},{key:"parseSync",value:function parseSync(e,t,r){return this.parse(e,t,_objectSpread2(_objectSpread2({throwOnBadSyncType:!0},r),{},{sync:!0}))}},{key:"parseAsync",value:function parseAsync(e,t,r){return this.parse(e,t,_objectSpread2(_objectSpread2({throwOnBadSyncType:!0},r),{},{sync:!1}))}},{key:"specialTypeNames",value:function specialTypeNames(e,t){var r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return r.returnTypeNames=!0,this.encapsulate(e,t,r)}},{key:"rootTypeName",value:function rootTypeName(e,t){var r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return r.iterateNone=!0,this.encapsulate(e,t,r)}},{key:"encapsulate",value:function encapsulate(t,r,c){var s=this,u=_objectSpread2(_objectSpread2({sync:!0},this.options),c),l=u.sync,f={},y=[],p=[],d=[],v=!("cyclic"in u)||u.cyclic,b=u.encapsulateObserver,m=function finish(e){var t=Object.values(f);if(u.iterateNone)return t.length?t[0]:getJSONType(e);if(t.length){if(u.returnTypeNames)return function _toConsumableArray(e){return function _arrayWithoutHoles(e){if(Array.isArray(e))return _arrayLikeToArray(e)}(e)||function _iterableToArray(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||_unsupportedIterableToArray(e)||function _nonIterableSpread(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}(new Set(t));e&&isPlainObject(e)&&!a(e,"$types")?e.$types=f:e={$:e,$types:{$:f}};}else isObject(e)&&a(e,"$types")&&(e={$:e,$types:!0});return !u.returnTypeNames&&e},h=_async((function(t,r){return _await(Promise.all(r.map((function(e){return e[1].p}))),(function(n){return _await(Promise.all(n.map(_async((function(n){var a=!1,o=[],i=_slicedToArray(r.splice(0,1),1),c=_slicedToArray(i[0],7),s=c[0],u=c[2],l=c[3],f=c[4],y=c[5],p=c[6],d=O(s,n,u,l,o,!0,p),v=hasConstructorOf(d,e);return function _invoke(e,t){var r=e();return r&&r.then?r.then(t):t(r)}((function(){if(s&&v)return _await(d.p,(function(e){f[y]=e;var r=h(t,o);return a=!0,r}))}),(function(e){return a?e:(s?f[y]=d:t=v?d.p:d,h(t,o))}))})))),(function(){return t}))}))})),g=function _adaptBuiltinStateObjectProperties(e,t,r){Object.assign(e,t);var n=i.map((function(t){var r=e[t];return delete e[t],r}));r(),i.forEach((function(t,r){e[t]=n[r];}));},O=function _encapsulate(t,r,i,c,l,d,v){var m,h={},O=_typeof(r),w=b?function(n){var a,o=null!==(a=null!=v?v:c.type)&&void 0!==a?a:getJSONType(r);b(Object.assign(null!=n?n:h,{keypath:t,value:r,cyclic:i,stateObj:c,promisesData:l,resolvingTypesonPromise:d,awaitingTypesonPromise:hasConstructorOf(r,e)},{type:o}));}:null;if(["string","boolean","number","undefined"].includes(O))return void 0===r||Number.isNaN(r)||r===Number.NEGATIVE_INFINITY||r===Number.POSITIVE_INFINITY||0===r?(m=c.replaced?r:_(t,r,c,l,!1,d,w))!==r&&(h={replaced:m}):m=r,w&&w(),m;if(null===r)return w&&w(),r;if(i&&!c.iterateIn&&!c.iterateUnsetNumeric&&r&&"object"===_typeof(r)){var A=y.indexOf(r);if(!(A<0))return f[t]="#",w&&w({cyclicKeypath:p[A]}),"#"+p[A];!0===i&&(y.push(r),p.push(t));}var S,j,T=isPlainObject(r),N=o(r),I=(T||N)&&(!s.plainObjectReplacers.length||c.replaced)||c.iterateIn?r:_(t,r,c,l,T||N,null,w);if(I!==r?(m=I,h={replaced:I}):""===t&&hasConstructorOf(r,e)?(l.push([t,r,i,c,void 0,void 0,c.type]),m=r):N&&"object"!==c.iterateIn||"array"===c.iterateIn?(S=new Array(r.length),h={clone:S}):(["function","symbol"].includes(_typeof(r))||"toJSON"in r||hasConstructorOf(r,e)||hasConstructorOf(r,Promise)||hasConstructorOf(r,ArrayBuffer))&&!T&&"object"!==c.iterateIn?m=r:(S={},c.addLength&&(S.length=r.length),h={clone:S}),w&&w(),u.iterateNone)return null!==(j=S)&&void 0!==j?j:m;if(!S)return m;if(c.iterateIn){var P=function _loop(n){var o={ownKeys:a(r,n)};g(c,o,(function(){var a=t+(t?".":"")+escapeKeyPathComponent(n),o=_encapsulate(a,r[n],Boolean(i),c,l,d);hasConstructorOf(o,e)?l.push([a,o,Boolean(i),c,S,n,c.type]):void 0!==o&&(S[n]=o);}));};for(var E in r)P(E);w&&w({endIterateIn:!0,end:!0});}else n(r).forEach((function(n){var a=t+(t?".":"")+escapeKeyPathComponent(n);g(c,{ownKeys:!0},(function(){var t=_encapsulate(a,r[n],Boolean(i),c,l,d);hasConstructorOf(t,e)?l.push([a,t,Boolean(i),c,S,n,c.type]):void 0!==t&&(S[n]=t);}));})),w&&w({endIterateOwn:!0,end:!0});if(c.iterateUnsetNumeric){for(var x=r.length,C=function _loop2(n){if(!(n in r)){var a="".concat(t).concat(t?".":"").concat(n);g(c,{ownKeys:!1},(function(){var t=_encapsulate(a,void 0,Boolean(i),c,l,d);hasConstructorOf(t,e)?l.push([a,t,Boolean(i),c,S,n,c.type]):void 0!==t&&(S[n]=t);}));}},k=0;k<x;k++)C(k);w&&w({endIterateUnsetNumeric:!0,end:!0});}return S},_=function replace(e,t,r,n,a,o,i){for(var c=a?s.plainObjectReplacers:s.nonplainObjectReplacers,u=c.length;u--;){var y=c[u];if(y.test(t,r)){var p=y.type;if(s.revivers[p]){var d=f[e];f[e]=d?[p].concat(d):p;}if(Object.assign(r,{type:p,replaced:!0}),(l||!y.replaceAsync)&&!y.replace)return i&&i({typeDetected:!0}),O(e,t,v&&"readonly",r,n,o,p);i&&i({replacing:!0});var b=void 0;if(l||!y.replaceAsync){if(void 0===y.replace)throw new TypeError("Missing replacer");b=y.replace(t,r);}else b=y.replaceAsync(t,r);return O(e,b,v&&"readonly",r,n,o,p)}}return t},w=O("",t,v,null!=r?r:{},d);if(d.length)return l&&u.throwOnBadSyncType?function(){throw new TypeError("Sync method requested but async result obtained")}():Promise.resolve(h(w,d)).then(m);if(!l&&u.throwOnBadSyncType)throw new TypeError("Async method requested but sync result obtained");return u.stringification&&l?[m(w)]:l?m(w):Promise.resolve(m(w))}},{key:"encapsulateSync",value:function encapsulateSync(e,t,r){return this.encapsulate(e,t,_objectSpread2(_objectSpread2({throwOnBadSyncType:!0},r),{},{sync:!0}))}},{key:"encapsulateAsync",value:function encapsulateAsync(e,t,r){return this.encapsulate(e,t,_objectSpread2(_objectSpread2({throwOnBadSyncType:!0},r),{},{sync:!1}))}},{key:"revive",value:function revive(t,r){var a=this,i=_objectSpread2(_objectSpread2({sync:!0},this.options),r),c=i.sync;function finishRevival(e){if(c)return e;if(i.throwOnBadSyncType)throw new TypeError("Async method requested but sync result obtained");return Promise.resolve(e)}if(!t||"object"!==_typeof(t)||Array.isArray(t))return finishRevival(t);var u=t.$types;if(!0===u)return finishRevival(t.$);if(!u||"object"!==_typeof(u)||Array.isArray(u))return finishRevival(t);var l=[],f={},y=!0;u.$&&isPlainObject(u.$)&&(t=t.$,u=u.$,y=!1);var p=function executeReviver(e,t){var r,n=_slicedToArray(null!==(r=a.revivers[e])&&void 0!==r?r:[],1)[0];if(!n)throw new Error("Unregistered type: "+e);if(c&&!("revive"in n))return t;if(!c&&n.reviveAsync)return n.reviveAsync(t,f);if(n.revive)return n.revive(t,f);throw new Error("Missing reviver")},d=[];function checkUndefined(e){return hasConstructorOf(e,s)?void 0:e}var v,b=function revivePlainObjects(){var r=[];if(!u)throw new Error("Found bad `types`");if(Object.entries(u).forEach((function(e){var t=_slicedToArray(e,2),n=t[0],o=t[1];"#"!==o&&[].concat(o).forEach((function(e){var t;_slicedToArray(null!==(t=a.revivers[e])&&void 0!==t?t:[null,{}],2)[1].plain&&(r.push({keypath:n,type:e}),delete u[n]);}));})),r.length)return r.sort(nestedPathsFirst).reduce((function reducer(r,n){var a=n.keypath,o=n.type;if(isThenable(r))return r.then((function(e){return reducer(e,{keypath:a,type:o})}));var i=getByKeyPath(t,a);if(hasConstructorOf(i=p(o,i),e))return i.then((function(e){var r=setAtKeyPath(t,a,e);r===e&&(t=r);}));var c=setAtKeyPath(t,a,i);c===i&&(t=c);}),void 0)}();return hasConstructorOf(b,e)?v=b.then((function(){return t})):(v=function _revive(t,r,a,i,c){if(!y||"$types"!==t){var f=u[t],v=o(r);if(v||isPlainObject(r)){var b=v?new Array(r.length):{};for(n(r).forEach((function(n){var o=_revive(t+(t?".":"")+escapeKeyPathComponent(n),r[n],null!=a?a:b,b,n),i=function set(e){return hasConstructorOf(e,s)?b[n]=void 0:void 0!==e&&(b[n]=e),e};hasConstructorOf(o,e)?d.push(o.then((function(e){return i(e)}))):i(o);})),r=b;l.length;){var m=_slicedToArray(l[0],4),h=m[0],g=m[1],O=m[2],_=m[3],w=getByKeyPath(h,g);if(void 0===w)break;O[_]=w,l.splice(0,1);}}if(!f)return r;if("#"===f){var A=getByKeyPath(a,r.slice(1));return void 0===A&&l.push([a,r.slice(1),i,c]),A}return [].concat(f).reduce((function reducer(t,r){if(hasConstructorOf(t,e))return t.then((function(e){return reducer(e,r)}));if("string"!=typeof r)throw new TypeError("Bad type JSON");return p(r,t)}),r)}}("",t,null),d.length&&(v=e.resolve(v).then((function(t){return e.all([t].concat(d))})).then((function(e){return _slicedToArray(e,1)[0]})))),isThenable(v)?c&&i.throwOnBadSyncType?function(){throw new TypeError("Sync method requested but async result obtained")}():hasConstructorOf(v,e)?v.p.then(checkUndefined):v:!c&&i.throwOnBadSyncType?function(){throw new TypeError("Async method requested but sync result obtained")}():c?checkUndefined(v):Promise.resolve(checkUndefined(v))}},{key:"reviveSync",value:function reviveSync(e,t){return this.revive(e,_objectSpread2(_objectSpread2({throwOnBadSyncType:!0},t),{},{sync:!0}))}},{key:"reviveAsync",value:function reviveAsync(e,t){return this.revive(e,_objectSpread2(_objectSpread2({throwOnBadSyncType:!0},t),{},{sync:!1}))}},{key:"register",value:function register(e,t){var r=this,a=null!=t?t:{},i=function R(e){o(e)?e.forEach((function(e){return R(e)})):n(e).forEach((function(t){var n;if("#"===t)throw new TypeError("# cannot be used as a type name as it is reserved for cyclic objects");if(u.includes(t))throw new TypeError("Plain JSON object types are reserved as type names");var i=e[t],c=i&&"function"!=typeof i&&!Array.isArray(i)&&i.testPlainObjects?r.plainObjectReplacers:r.nonplainObjectReplacers,s=c.filter((function(e){return e.type===t}));if(s.length&&(c.splice(c.indexOf(s[0]),1),delete r.revivers[t],delete r.types[t]),"function"==typeof i){var l=i;i={test:function test(e){return e&&e.constructor===l},replace:function replace(e){return _objectSpread2({},e)},revive:function revive(e){return Object.assign(Object.create(l.prototype),e)}};}else if(o(i)){var f=_slicedToArray(i,3);i={test:f[0],replace:f[1],revive:f[2]};}if(null!==(n=i)&&void 0!==n&&n.test){var y={type:t,test:i.test.bind(i)};i.replace&&(y.replace=i.replace.bind(i)),i.replaceAsync&&(y.replaceAsync=i.replaceAsync.bind(i));var p="number"==typeof a.fallback?a.fallback:a.fallback?0:Number.POSITIVE_INFINITY;if(i.testPlainObjects?r.plainObjectReplacers.splice(p,0,y):r.nonplainObjectReplacers.splice(p,0,y),i.revive||i.reviveAsync){var d={};i.revive&&(d.revive=i.revive.bind(i)),i.reviveAsync&&(d.reviveAsync=i.reviveAsync.bind(i)),r.revivers[t]=[d,{plain:i.testPlainObjects}];}r.types[t]=i;}}));};return [].concat(e).forEach((function(e){return i(e)})),this}}]),Typeson}(),s=_createClass((function Undefined(){_classCallCheck(this,Undefined);}));s.__typeson__type__="TypesonUndefined";for(var u=["null","boolean","number","string","array","object"],l="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",f=new Uint8Array(256),y=0;y<64;y++)f[l.codePointAt(y)]=y;var p=function encode(e,t,r){null==r&&(r=e.byteLength);for(var n=new Uint8Array(e,t||0,r),a=n.length,o="",i=0;i<a;i+=3)o+=l[n[i]>>2],o+=l[(3&n[i])<<4|n[i+1]>>4],o+=l[(15&n[i+1])<<2|n[i+2]>>6],o+=l[63&n[i+2]];return a%3==2?o=o.slice(0,-1)+"=":a%3==1&&(o=o.slice(0,-2)+"=="),o},d=function decode(e){var t=e.length;if(t%4)throw new Error("Bad base64 length: not divisible by four");var r,n,a,o,i=.75*e.length,c=0;"="===e[e.length-1]&&(i--,"="===e[e.length-2]&&i--);for(var s=new ArrayBuffer(i),u=new Uint8Array(s),l=0;l<t;l+=4)r=f[e.codePointAt(l)],n=f[e.codePointAt(l+1)],a=f[e.codePointAt(l+2)],o=f[e.codePointAt(l+3)],u[c++]=r<<2|n>>4,u[c++]=(15&n)<<4|a>>2,u[c++]=(3&a)<<6|63&o;return s};const v={arraybuffer:{test:e=>"ArrayBuffer"===toStringTag(e),replace(e,t){t.buffers||(t.buffers=[]);const r=t.buffers.indexOf(e);return r>-1?{index:r}:(t.buffers.push(e),p(e))},revive(e,t){if(t.buffers||(t.buffers=[]),"object"==typeof e)return t.buffers[e.index];const r=d(e);return t.buffers.push(r),r}}},b={bigintObject:{test:e=>"object"==typeof e&&hasConstructorOf(e,BigInt),replace:String,revive:e=>new Object(BigInt(e))}},m={bigint:{test:e=>"bigint"==typeof e,replace:String,revive:e=>BigInt(e)}};function string2arraybuffer(e){const t=new Uint8Array(e.length);for(let r=0;r<e.length;r++)t[r]=e.charCodeAt(r);return t.buffer}const h={blob:{test:e=>"Blob"===toStringTag(e),replace(e){const t=new XMLHttpRequest;if(t.overrideMimeType("text/plain; charset=x-user-defined"),t.open("GET",URL.createObjectURL(e),!1),t.send(),200!==t.status&&0!==t.status)throw new Error("Bad Blob access: "+t.status);return {type:e.type,stringContents:t.responseText}},revive(e){const{type:t,stringContents:r}=e;return new Blob([string2arraybuffer(r)],{type:t})},replaceAsync:t=>new e(((e,r)=>{const n=new FileReader;n.addEventListener("load",(()=>{e({type:t.type,stringContents:n.result});})),n.addEventListener("error",(()=>{r(n.error);})),n.readAsBinaryString(t);}))}};function generateUUID(){let e=Date.now()+("undefined"!=typeof performance&&"function"==typeof performance.now?performance.now():0);return "xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replaceAll(/[xy]/gu,(function(t){const r=Math.trunc((e+16*Math.random())%16);return e=Math.floor(e/16),("x"===t?r:3&r|8).toString(16)}))}const _={cryptokey:{test:e=>"CryptoKey"===toStringTag(e)&&e.extractable,replaceAsync:t=>new e((async(e,r)=>{let n;try{n=await crypto.subtle.exportKey("jwk",t);}catch(e){return void r(e)}e({jwk:n,algorithm:t.algorithm,usages:t.usages});})),revive(e){const{jwk:t,algorithm:r,usages:n}=e;return crypto.subtle.importKey("jwk",t,r,!0,n)}}},w={dataview:{test:e=>"DataView"===toStringTag(e),replace({buffer:e,byteOffset:t,byteLength:r},n){n.buffers||(n.buffers=[]);const a=n.buffers.indexOf(e);return a>-1?{index:a,byteOffset:t,byteLength:r}:(n.buffers.push(e),{encoded:p(e),byteOffset:t,byteLength:r})},revive(e,t){t.buffers||(t.buffers=[]);const{byteOffset:r,byteLength:n,encoded:a,index:o}=e;let i;return "index"in e?i=t.buffers[o]:(i=d(a),t.buffers.push(i)),new DataView(i,r,n)}}},A={date:{test:e=>"Date"===toStringTag(e),replace(e){const t=e.getTime();return Number.isNaN(t)?"NaN":t},revive:e=>"NaN"===e?new Date(Number.NaN):new Date(e)}},S={domexception:{test:e=>"DOMException"===toStringTag(e),replace:e=>({name:e.name,message:e.message}),revive:({message:e,name:t})=>new DOMException(e,t)}},j={};function create$5(e){j[e.name.toLowerCase()]={test:t=>toStringTag(t)===e.name,replace:e=>e.is2D?{a:e.a,b:e.b,c:e.c,d:e.d,e:e.e,f:e.f}:{m11:e.m11,m12:e.m12,m13:e.m13,m14:e.m14,m21:e.m21,m22:e.m22,m23:e.m23,m24:e.m24,m31:e.m31,m32:e.m32,m33:e.m33,m34:e.m34,m41:e.m41,m42:e.m42,m43:e.m43,m44:e.m44},revive:t=>Object.hasOwn(t,"a")?new e([t.a,t.b,t.c,t.d,t.e,t.f]):new e([t.m11,t.m12,t.m13,t.m14,t.m21,t.m22,t.m23,t.m24,t.m31,t.m32,t.m33,t.m34,t.m41,t.m42,t.m43,t.m44])};}"undefined"!=typeof DOMMatrix&&create$5(DOMMatrix),"undefined"!=typeof DOMMatrixReadOnly&&create$5(DOMMatrixReadOnly);const T={};function create$4(e){T[e.name.toLowerCase()]={test:t=>toStringTag(t)===e.name,replace:e=>({x:e.x,y:e.y,z:e.z,w:e.w}),revive:({x:t,y:r,z:n,w:a})=>new e(t,r,n,a)};}"undefined"!=typeof DOMPoint&&create$4(DOMPoint),"undefined"!=typeof DOMPointReadOnly&&create$4(DOMPointReadOnly);const N={domquad:{test:e=>"DOMQuad"===toStringTag(e),replace:e=>({p1:e.p1,p2:e.p2,p3:e.p3,p4:e.p4}),revive:({p1:e,p2:t,p3:r,p4:n})=>new DOMQuad(e,t,r,n)}},I={};function create$3(e){I[e.name.toLowerCase()]={test:t=>toStringTag(t)===e.name,replace:e=>({x:e.x,y:e.y,width:e.width,height:e.height}),revive:({x:t,y:r,width:n,height:a})=>new e(t,r,n,a)};}"undefined"!=typeof DOMRect&&create$3(DOMRect),"undefined"!=typeof DOMRectReadOnly&&create$3(DOMRectReadOnly);const P={error:{test:e=>"Error"===toStringTag(e),replace:({name:e,message:t,cause:r,stack:n,fileName:a,lineNumber:o,columnNumber:i})=>({name:e,message:t,cause:r,stack:n,fileName:a,lineNumber:o,columnNumber:i}),revive(e){const t=new Error(e.message);return t.name=e.name,t.cause=e.cause,t.stack=e.stack,t.fileName=e.fileName,t.lineNumber=e.lineNumber,t.columnNumber=e.columnNumber,t}}},E={};function create$2(e){E[e.name.toLowerCase()]={test:t=>hasConstructorOf(t,e),replace:({name:e,message:t,cause:r,stack:n,fileName:a,lineNumber:o,columnNumber:i,errors:c})=>({name:e,message:t,cause:r,stack:n,fileName:a,lineNumber:o,columnNumber:i,errors:c}),revive(t){const r="undefined"!=typeof AggregateError&&e===AggregateError?new e(t.errors,t.message):new e(t.message);return r.name=t.name,r.cause=t.cause,r.stack=t.stack,r.fileName=t.fileName,r.lineNumber=t.lineNumber,r.columnNumber=t.columnNumber,r}};}[TypeError,RangeError,SyntaxError,ReferenceError,EvalError,URIError].forEach((e=>create$2(e))),"undefined"!=typeof AggregateError&&create$2(AggregateError),"function"==typeof InternalError&&create$2(InternalError);const x={file:{test:e=>"File"===toStringTag(e),replace(e){const t=new XMLHttpRequest;if(t.overrideMimeType("text/plain; charset=x-user-defined"),t.open("GET",URL.createObjectURL(e),!1),t.send(),200!==t.status&&0!==t.status)throw new Error("Bad File access: "+t.status);return {type:e.type,stringContents:t.responseText,name:e.name,lastModified:e.lastModified}},revive:({name:e,type:t,stringContents:r,lastModified:n})=>new File([string2arraybuffer(r)],e,{type:t,lastModified:n}),replaceAsync:t=>new e((function(e,r){const n=new FileReader;n.addEventListener("load",(function(){e({type:t.type,stringContents:n.result,name:t.name,lastModified:t.lastModified});})),n.addEventListener("error",(function(){r(n.error);})),n.readAsBinaryString(t);}))}},C={file:x.file,filelist:{test:e=>"FileList"===toStringTag(e),replace(e){const t=[];for(let r=0;r<e.length;r++)t[r]=e.item(r);return t},revive(e){class FileList{constructor(){this._files=arguments[0],this.length=this._files.length;}item(e){return this._files[e]}get[Symbol.toStringTag](){return "FileList"}}return new FileList(e)}}},k={imagebitmap:{test:e=>"ImageBitmap"===toStringTag(e)||e&&e.dataset&&"ImageBitmap"===e.dataset.toStringTag,replace(e){const t=document.createElement("canvas");return t.getContext("2d").drawImage(e,0,0),t.toDataURL()},revive(e){const t=document.createElement("canvas"),r=t.getContext("2d"),n=document.createElement("img");return n.addEventListener("load",(function(){r.drawImage(n,0,0);})),n.src=e,t},reviveAsync(t){const r=document.createElement("canvas"),n=r.getContext("2d"),a=document.createElement("img");return a.addEventListener("load",(function(){n.drawImage(a,0,0);})),a.src=t,new e((async(e,t)=>{try{e(await createImageBitmap(r));}catch(e){t(e);}}))}}},B={imagedata:{test:e=>"ImageData"===toStringTag(e),replace:e=>({array:[...e.data],width:e.width,height:e.height}),revive:e=>new ImageData(new Uint8ClampedArray(e.array),e.width,e.height)}},U$1={infinity:{test:e=>e===Number.POSITIVE_INFINITY,replace:()=>"Infinity",revive:()=>Number.POSITIVE_INFINITY}},K={map:{test:e=>"Map"===toStringTag(e),replace:e=>[...e.entries()],revive:e=>new Map(e)}},L={nan:{test:e=>Number.isNaN(e),replace:()=>"NaN",revive:()=>Number.NaN}},F={negativeInfinity:{test:e=>e===Number.NEGATIVE_INFINITY,replace:()=>"-Infinity",revive:()=>Number.NEGATIVE_INFINITY}},$$1={negativeZero:{test:e=>Object.is(e,-0),replace:()=>0,revive:()=>-0}},V={StringObject:{test:e=>"String"===toStringTag(e)&&"object"==typeof e,replace:String,revive:e=>new String(e)},BooleanObject:{test:e=>"Boolean"===toStringTag(e)&&"object"==typeof e,replace:Boolean,revive:e=>new Boolean(e)},NumberObject:{test:e=>"Number"===toStringTag(e)&&"object"==typeof e,replace:Number,revive:e=>new Number(e)}},q={regexp:{test:e=>"RegExp"===toStringTag(e),replace:e=>({source:e.source,flags:(e.global?"g":"")+(e.ignoreCase?"i":"")+(e.multiline?"m":"")+(e.sticky?"y":"")+(e.unicode?"u":"")}),revive:({source:e,flags:t})=>new RegExp(e,t)}},Y={},W={resurrectable:{test:e=>e&&!Array.isArray(e)&&["object","function","symbol"].includes(typeof e),replace(e){const t=generateUUID();return Y[t]=e,t},revive:e=>Y[e]}},G={set:{test:e=>"Set"===toStringTag(e),replace:e=>[...e.values()],revive:e=>new Set(e)}},H={};"function"==typeof Int8Array&&[Int8Array,Uint8Array,Uint8ClampedArray,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array,..."function"==typeof BigInt64Array?[BigInt64Array,BigUint64Array]:[]].forEach((e=>function create$1(e){const t=e.name;H[t.toLowerCase()]={test:e=>toStringTag(e)===t,replace:e=>(0===e.byteOffset&&e.byteLength===e.buffer.byteLength?e:e.slice(0)).buffer,revive:t=>"ArrayBuffer"===toStringTag(t)?new e(t):t};}(e)));const z={};"function"==typeof Int8Array&&[Int8Array,Uint8Array,Uint8ClampedArray,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array,..."function"==typeof BigInt64Array?[BigInt64Array,BigUint64Array]:[]].forEach((e=>function create(e){const t=e.name;z[t.toLowerCase()]={test:e=>toStringTag(e)===t,replace({buffer:e,byteOffset:t,length:r},n){n.buffers||(n.buffers=[]);const a=n.buffers.indexOf(e);return a>-1?{index:a,byteOffset:t,length:r}:(n.buffers.push(e),{encoded:p(e),byteOffset:t,length:r})},revive(t,r){r.buffers||(r.buffers=[]);const{byteOffset:n,length:a,encoded:o,index:i}=t;let c;return "index"in t?c=r.buffers[i]:(c=d(o),r.buffers.push(c)),new e(c,n,a)}};}(e)));const Q={undef:{test:(e,t)=>void 0===e&&(t.ownKeys||!("ownKeys"in t)),replace:()=>0,revive:()=>new s}},X={userObject:{test:e=>isUserObject(e),replace:e=>({...e}),revive:e=>e}},Z=[{arrayNonindexKeys:{testPlainObjects:!0,test:(e,t)=>!!Array.isArray(e)&&(Object.keys(e).some((e=>String(Number.parseInt(e))!==e))&&(t.iterateIn="object",t.addLength=!0),!0),replace:(e,t)=>(t.iterateUnsetNumeric=!0,e),revive(e){if(Array.isArray(e))return e;const t=[];return Object.entries(e).forEach((([e,r])=>{t[e]=r;})),t}}},{sparseUndefined:{test:(e,t)=>void 0===e&&!1===t.ownKeys,replace:()=>0,revive(){}}}],ee=[L,U$1,F,$$1],oe=[X,Q,Z,V,ee,A,q,B,k,x,C,h,P,E].concat("function"==typeof Map?K:[],"function"==typeof Set?G:[],"function"==typeof ArrayBuffer?v:[],"function"==typeof Uint8Array?z:[],"function"==typeof DataView?w:[],"undefined"!=typeof crypto?_:[],"undefined"!=typeof BigInt?[m,b]:[],"undefined"!=typeof DOMException?S:[],"undefined"!=typeof DOMRect?I:[],"undefined"!=typeof DOMPoint?T:[],"undefined"!=typeof DOMQuad?N:[],"undefined"!=typeof DOMMatrix?j:[]),ie=oe.concat({checkDataCloneException:{test(e){const t={}.toString.call(e).slice(8,-1);if(["symbol","function"].includes(typeof e)||["Arguments","Module","Promise","WeakMap","WeakSet","Event","MessageChannel"].includes(t)||e&&"object"==typeof e&&"number"==typeof e.nodeType&&"function"==typeof e.insertBefore)throw new DOMException("The object cannot be cloned.","DataCloneError");return !1}}});
2319
2319
 
2320
2320
  const nbsp = '\u00A0';
2321
2321
  const upArrow = '\u2191';
@@ -3082,6 +3082,15 @@ const json = {
3082
3082
  }
3083
3083
  };
3084
3084
 
3085
+ // We modify resurrectable in hopes an including application doesn't need it
3086
+ /** @type {import('typeson').TypeSpecSet} */ (
3087
+ W.resurrectable
3088
+ ).test = /** @type {import('typeson').Tester} */ (x) => {
3089
+ return x && typeof x === 'object' && !Array.isArray(x) &&
3090
+ // Could be a user object with a string tag, but we can't tell
3091
+ toStringTag(x) !== 'Object';
3092
+ };
3093
+
3085
3094
  /**
3086
3095
  * @typedef {(info: {
3087
3096
  * propName: string,
@@ -3164,8 +3173,6 @@ const encapsulateObserver = (stateObj) => {
3164
3173
  return;
3165
3174
  }
3166
3175
 
3167
- // console.log('observerObj', observerObj);
3168
-
3169
3176
  /** @type {import('../types.js').AvailableType} */
3170
3177
  let newType;
3171
3178
  let newValue = value;
@@ -3469,15 +3476,49 @@ const canonicalToAvailableType = (
3469
3476
  const structuredCloning = {
3470
3477
  iterate (records, stateObj) {
3471
3478
  // console.log('records', records);
3479
+ /* istanbul ignore if -- Just a guard */
3472
3480
  if (!stateObj.format) {
3473
3481
  stateObj.format = 'structuredCloning';
3474
3482
  }
3475
3483
  // Todo: Replace this with async typeson?
3476
3484
  // eslint-disable-next-line promise/avoid-new
3477
3485
  return new Promise((resolve, reject) => {
3486
+ const structuredCloningFixed = ie.filter(
3487
+ (typeSpecSet) => {
3488
+ return ![
3489
+ // Not yet supported within JSOE
3490
+ 'imagedata',
3491
+ 'imagebitmap',
3492
+ 'arraybuffer',
3493
+ 'dataview',
3494
+ 'cryptokey',
3495
+ 'domquad',
3496
+
3497
+ 'bigint64array',
3498
+ 'biguint64array',
3499
+ 'float32array',
3500
+ 'float64array',
3501
+ 'int8array',
3502
+ 'int16array',
3503
+ 'int32array',
3504
+ 'uint8array',
3505
+ 'uint8clampedarray',
3506
+ 'uint16array',
3507
+ 'uint32array'
3508
+ ].some((prop) => {
3509
+ return Object.hasOwn(typeSpecSet, prop);
3510
+ });
3511
+ }
3512
+ );
3513
+ structuredCloningFixed.splice(
3514
+ // Add after userObjects
3515
+ 1,
3516
+ 0,
3517
+ W
3518
+ );
3478
3519
  const typeson = new c({
3479
3520
  encapsulateObserver: encapsulateObserver(stateObj)
3480
- }).register(ae);
3521
+ }).register(structuredCloningFixed);
3481
3522
  typeson.encapsulate(records);
3482
3523
  // Todo (low): We might want to run async encapsulate for
3483
3524
  // async types (and put this after Promise resolves)
@@ -3555,11 +3596,12 @@ const structuredCloning = {
3555
3596
  'domexception',
3556
3597
  'domrect',
3557
3598
  'dompoint',
3558
- 'dommatrix'
3599
+ 'dommatrix',
3600
+ 'resurrectable'
3559
3601
 
3560
3602
  // Ok, but will need some work and/or decisions on how to present:
3561
3603
  // 'cryptokey',
3562
-
3604
+ // 'domquad',
3563
3605
  // 'arraybuffer',
3564
3606
  // 'dataview', 'imagedata', 'imagebitmap',
3565
3607
  /*
@@ -3927,7 +3969,7 @@ const blobHTMLType = {
3927
3969
  );
3928
3970
  },
3929
3971
  getValue ({root}) {
3930
- return this.toValue(
3972
+ return /** @type {import('../types.js').ToValue} */ (this.toValue)(
3931
3973
  'data:text/html,' + /** @type {SCEditorTextarea} */ (
3932
3974
  this.getInput({root})
3933
3975
  ).sceditorInstance.val()
@@ -4400,7 +4442,9 @@ const objectReferenceType = {
4400
4442
  type: 'object',
4401
4443
  stringRegex: /^objectRef\((?:|\/[^)]*)\)$/u,
4402
4444
  toValue (...args) {
4403
- return arrayReferenceType.toValue.apply(this, args);
4445
+ return /** @type {import('../types.js').ToValue} */ (
4446
+ arrayReferenceType.toValue
4447
+ ).apply(this, args);
4404
4448
  },
4405
4449
  resolveReference (...args) {
4406
4450
  return arrayReferenceType.resolveReference?.apply(
@@ -6190,7 +6234,9 @@ const arrayType = {
6190
6234
  // and object reference checking?
6191
6235
  if (![
6192
6236
  'checkbox', 'radio', 'file',
6193
- 'datetime-local'
6237
+ 'datetime-local',
6238
+ // For label radio clicks
6239
+ undefined
6194
6240
  ].includes(target.type)) {
6195
6241
  e.preventDefault();
6196
6242
  }
@@ -6211,7 +6257,7 @@ const arrayType = {
6211
6257
  * @this {HTMLInputElement}
6212
6258
  */
6213
6259
  change () {
6214
- /* c8 ignore next 3 */
6260
+ /* istanbul ignore if */
6215
6261
  if (!this.files) {
6216
6262
  return;
6217
6263
  }
@@ -6248,7 +6294,9 @@ const objectType = {
6248
6294
  stringRegexBegin: /^\{/u,
6249
6295
  stringRegexEnd: /^\}/u,
6250
6296
  toValue (...args) {
6251
- return arrayType.toValue.apply(this, args);
6297
+ return /** @type {import('../types.js').ToValue} */ (
6298
+ arrayType.toValue
6299
+ ).apply(this, args);
6252
6300
  },
6253
6301
  getValue (...args) {
6254
6302
  return arrayType.getValue.apply(this, args);
@@ -6340,9 +6388,13 @@ const dateType = {
6340
6388
  },
6341
6389
  getValue ({root}) {
6342
6390
  if (this.isInvalid({root})) {
6343
- return this.toValue('NaN').value;
6391
+ return /** @type {import('../types.js').ToValue} */ (
6392
+ this.toValue
6393
+ )('NaN').value;
6344
6394
  }
6345
- return this.toValue(this.getInput({root}).value).value;
6395
+ return /** @type {import('../types.js').ToValue} */ (
6396
+ this.toValue
6397
+ )(this.getInput({root}).value).value;
6346
6398
  },
6347
6399
  isValueInvalid (value) {
6348
6400
  return value && Number.isNaN(value.getTime());
@@ -6429,7 +6481,9 @@ const setType = {
6429
6481
  stringRegexBegin: /^Set\(/u,
6430
6482
  stringRegexEnd: /^\)/u,
6431
6483
  toValue (...args) {
6432
- return arrayType.toValue.apply(this, args);
6484
+ return /** @type {import('../types.js').ToValue} */ (
6485
+ arrayType.toValue
6486
+ ).apply(this, args);
6433
6487
  },
6434
6488
  getValue (...args) {
6435
6489
  return arrayType.getValue.apply(this, args);
@@ -6460,7 +6514,9 @@ const mapType = {
6460
6514
  stringRegexBegin: /^Map\(/u,
6461
6515
  stringRegexEnd: /^\)/u,
6462
6516
  toValue (...args) {
6463
- return arrayType.toValue.apply(this, args);
6517
+ return /** @type {import('../types.js').ToValue} */ (
6518
+ arrayType.toValue
6519
+ ).apply(this, args);
6464
6520
  },
6465
6521
  getValue (...args) {
6466
6522
  return arrayType.getValue.apply(this, args);
@@ -6490,7 +6546,9 @@ const undefinedType = {
6490
6546
  return {value: undefined};
6491
6547
  },
6492
6548
  getValue () {
6493
- return this.toValue('').value;
6549
+ return /** @type {import('../types.js').ToValue} */ (
6550
+ this.toValue
6551
+ )('').value;
6494
6552
  },
6495
6553
  viewUI (/* {value} */) {
6496
6554
  return ['i', {dataset: {type: 'undef'}}, ['undefined']];
@@ -6640,7 +6698,9 @@ const BooleanObjectType = {
6640
6698
  return /** @type {HTMLInputElement} */ ($e(root, 'input'));
6641
6699
  },
6642
6700
  getValue ({root}) {
6643
- return this.toValue(String(/** @type {HTMLInputElement} */ (
6701
+ return /** @type {import('../types.js').ToValue} */ (
6702
+ this.toValue
6703
+ )(String(/** @type {HTMLInputElement} */ (
6644
6704
  this.getInput({root})
6645
6705
  ).checked)).value;
6646
6706
  },
@@ -6697,7 +6757,9 @@ const NumberObjectType = {
6697
6757
  return /** @type {HTMLInputElement} */ ($e(root, 'input'));
6698
6758
  },
6699
6759
  getValue ({root}) {
6700
- return this.toValue(this.getInput({root}).value).value;
6760
+ return /** @type {import('../types.js').ToValue} */ (
6761
+ this.toValue
6762
+ )(this.getInput({root}).value).value;
6701
6763
  },
6702
6764
  setValue ({root, value}) {
6703
6765
  this.getInput({root}).value = String(value);
@@ -6732,7 +6794,9 @@ const StringObjectType = {
6732
6794
  return /** @type {HTMLTextAreaElement} */ ($e(root, 'textarea'));
6733
6795
  },
6734
6796
  getValue ({root}) {
6735
- return this.toValue(this.getInput({root}).value).value;
6797
+ return /** @type {import('../types.js').ToValue} */ (
6798
+ this.toValue
6799
+ )(this.getInput({root}).value).value;
6736
6800
  },
6737
6801
  setValue ({root, value}) {
6738
6802
  this.getInput({root}).value = value;
@@ -6752,7 +6816,7 @@ const StringObjectType = {
6752
6816
  };
6753
6817
 
6754
6818
  /**
6755
- * @type {import('./SpecialNumberType.js').SuperTypeObject}
6819
+ * @type {import('../types.js').SuperTypeObject}
6756
6820
  */
6757
6821
  const SpecialRealNumberSuperType = {
6758
6822
  option: ['Special Real Number', {title: '`Infinity`, `-Infinity`, `-0`'}],
@@ -6771,7 +6835,7 @@ const SpecialRealNumberSuperType = {
6771
6835
  return /** @type {HTMLSelectElement} */ ($e(root, 'select'));
6772
6836
  },
6773
6837
  getValue ({root}) {
6774
- return this.toValue(
6838
+ return /** @type {import('../types.js').ToValue} */ (this.toValue)(
6775
6839
  /** @type {Required<import('../types.js').TypeObject>} */ (
6776
6840
  this
6777
6841
  ).getSelect({root}).value
@@ -6812,13 +6876,7 @@ const SpecialRealNumberSuperType = {
6812
6876
  };
6813
6877
 
6814
6878
  /**
6815
- * @typedef {import('../types.js').TypeObject & {
6816
- * childTypes: string[]
6817
- * }} SuperTypeObject
6818
- */
6819
-
6820
- /**
6821
- * @type {SuperTypeObject}
6879
+ * @type {import('../types.js').SuperTypeObject}
6822
6880
  */
6823
6881
  const SpecialNumberSuperType = {
6824
6882
  option: ['Special Number', {title: '`NaN`, `Infinity`, `-Infinity`, `-0`'}],
@@ -6843,7 +6901,7 @@ const SpecialNumberSuperType = {
6843
6901
  return /** @type {HTMLSelectElement} */ ($e(root, 'select'));
6844
6902
  },
6845
6903
  getValue ({root}) {
6846
- return this.toValue(
6904
+ return /** @type {import('../types.js').ToValue} */ (this.toValue)(
6847
6905
  /** @type {Required<import('../types.js').TypeObject>} */ (
6848
6906
  this
6849
6907
  ).getSelect({root}).value
@@ -6893,7 +6951,7 @@ const errorType = {
6893
6951
  toValue (s) {
6894
6952
  const obj = JSON.parse(s);
6895
6953
  const errObj = /** @type {{revive: import('typeson-registry').Reviver}} */ (
6896
- I.error
6954
+ P.error
6897
6955
  ).revive(obj, {});
6898
6956
  return {value: errObj};
6899
6957
  },
@@ -7340,7 +7398,7 @@ if (typeof InternalError !== 'undefined') {
7340
7398
  const specialErrors = [...specialErrorsMap.keys()];
7341
7399
 
7342
7400
  /**
7343
- * @type {import('./SpecialNumberType.js').SuperTypeObject}
7401
+ * @type {import('../types.js').SuperTypeObject}
7344
7402
  */
7345
7403
  const errorsSpecialType = {
7346
7404
  option: ['Special errors'],
@@ -7361,7 +7419,7 @@ const errorsSpecialType = {
7361
7419
 
7362
7420
  const obj = JSON.parse(s);
7363
7421
  const errObj = /** @type {{revive: import('typeson-registry').Reviver}} */ (
7364
- P[errorClass.toLowerCase()]
7422
+ E[errorClass.toLowerCase()]
7365
7423
  ).revive(obj, {});
7366
7424
  return {value: errObj};
7367
7425
  },
@@ -8145,9 +8203,10 @@ async function getUserMedia (constraints) {
8145
8203
  let stream = null;
8146
8204
  try {
8147
8205
  stream = await navigator.mediaDevices.getUserMedia(constraints);
8148
- /* c8 ignore next 4 */
8149
8206
  } catch (err) {
8207
+ /* istanbul ignore next */
8150
8208
  console.error('err', err);
8209
+ /* istanbul ignore next */
8151
8210
  return null;
8152
8211
  }
8153
8212
  return stream;
@@ -8163,8 +8222,8 @@ async function startScreenCapture (displayMediaOptions) {
8163
8222
  try {
8164
8223
  captureStream =
8165
8224
  await navigator.mediaDevices.getDisplayMedia(displayMediaOptions);
8166
- /* c8 ignore next 3 */
8167
8225
  } catch (err) {
8226
+ /* istanbul ignore next */
8168
8227
  console.error(`Error: ${err}`);
8169
8228
  }
8170
8229
  return captureStream;
@@ -8299,7 +8358,7 @@ function binaryButton$1 (value, editable) {
8299
8358
  ['textarea', {
8300
8359
  class: 'view-binary'
8301
8360
  }, [
8302
- /* c8 ignore next */
8361
+ /* istanbul ignore next */
8303
8362
  /** @type {string|null} */ (reader.result) ?? ''
8304
8363
  ]]
8305
8364
  ])]
@@ -8307,12 +8366,13 @@ function binaryButton$1 (value, editable) {
8307
8366
  });
8308
8367
  });
8309
8368
  // Seems not feasible to accurately simulate
8310
- /* c8 ignore next 10 */
8311
8369
  reader.addEventListener(
8312
8370
  'error',
8313
- /* c8 ignore next 6 */
8371
+ /* istanbul ignore next */
8314
8372
  async function () {
8373
+ /* istanbul ignore next */
8315
8374
  console.error(reader.error);
8375
+ /* istanbul ignore next */
8316
8376
  await dialogs.alert(/** @type {string} */ (
8317
8377
  /** @type {DOMException} */ (reader.error).message
8318
8378
  ));
@@ -8391,18 +8451,19 @@ const fileType = {
8391
8451
  'Text source',
8392
8452
  ['br'],
8393
8453
  ['textarea', {class: 'view-text'}, [
8394
- /* c8 ignore next */
8454
+ /* istanbul ignore next */
8395
8455
  /** @type {string|null} */ (reader.result) ?? ''
8396
8456
  ]]
8397
8457
  ]));
8398
8458
  });
8399
8459
  // Seems not feasible to accurately simulate
8400
- /* c8 ignore next 10 */
8401
8460
  reader.addEventListener(
8402
8461
  'error',
8403
- /* c8 ignore next 6 */
8462
+ /* istanbul ignore next */
8404
8463
  function () {
8464
+ /* istanbul ignore next */
8405
8465
  console.error(reader.error);
8466
+ /* istanbul ignore next */
8406
8467
  div.append(
8407
8468
  /** @type {DOMException} */ (reader.error).message
8408
8469
  );
@@ -8715,7 +8776,7 @@ const fileType = {
8715
8776
  * @this {HTMLInputElement}
8716
8777
  */
8717
8778
  change () {
8718
- /* c8 ignore next 3 -- TS */
8779
+ /* istanbul ignore if -- TS */
8719
8780
  if (!this.files) {
8720
8781
  return;
8721
8782
  }
@@ -8863,7 +8924,7 @@ const fileType = {
8863
8924
 
8864
8925
  if (constraints) {
8865
8926
  const mediaStream = await getUserMedia(constraints);
8866
- /* c8 ignore next 4 */
8927
+ /* istanbul ignore if */
8867
8928
  if (!mediaStream) {
8868
8929
  await dialogs.alert('Error getting user media');
8869
8930
  return;
@@ -8911,7 +8972,7 @@ const fileType = {
8911
8972
  const mediaStream = await startScreenCapture(
8912
8973
  screenShareConstraints
8913
8974
  );
8914
- /* c8 ignore next 4 */
8975
+ /* istanbul ignore if */
8915
8976
  if (!mediaStream) {
8916
8977
  await dialogs.alert('Error getting user media');
8917
8978
  return;
@@ -8994,7 +9055,7 @@ const fileType = {
8994
9055
  'video.previewMedia'
8995
9056
  ));
8996
9057
 
8997
- /* c8 ignore next 4 */
9058
+ /* istanbul ignore if */
8998
9059
  if (!previewMedia.srcObject) {
8999
9060
  dialogs.alert('No stream found to record');
9000
9061
  return;
@@ -9027,7 +9088,7 @@ const fileType = {
9027
9088
 
9028
9089
  try {
9029
9090
  mediaRecorder.start();
9030
- /* c8 ignore next 4 */
9091
+ /* istanbul ignore if */
9031
9092
  } catch (err) {
9032
9093
  dialogs.alert('Error starting media recorder');
9033
9094
  return;
@@ -9167,7 +9228,7 @@ const fileType = {
9167
9228
  ($e(videoContainer, 'img.photo'));
9168
9229
 
9169
9230
  canvas.toBlob((blob) => {
9170
- /* c8 ignore next 4 */
9231
+ /* istanbul ignore if */
9171
9232
  if (!blob) {
9172
9233
  dialogs.alert('Error converting canvas to Blob');
9173
9234
  return;
@@ -9284,7 +9345,9 @@ const filelistType = {
9284
9345
  stringRegexEnd: /^\)/u,
9285
9346
 
9286
9347
  toValue (...args) {
9287
- return arrayType.toValue.apply(this, args);
9348
+ return /** @type {import('../types.js').ToValue} */ (
9349
+ arrayType.toValue
9350
+ ).apply(this, args);
9288
9351
  },
9289
9352
  getValue (...args) {
9290
9353
  return arrayType.getValue.apply(this, args);
@@ -9411,7 +9474,7 @@ function binaryButton (value, editable) {
9411
9474
  ['textarea', {
9412
9475
  class: 'view-binary'
9413
9476
  }, [
9414
- /* c8 ignore next */
9477
+ /* istanbul ignore next */
9415
9478
  /** @type {string|null} */ (reader.result) ?? ''
9416
9479
  ]]
9417
9480
  ])]
@@ -9419,12 +9482,13 @@ function binaryButton (value, editable) {
9419
9482
  });
9420
9483
  });
9421
9484
  // Seems not feasible to accurately simulate
9422
- /* c8 ignore next 10 */
9423
9485
  reader.addEventListener(
9424
9486
  'error',
9425
- /* c8 ignore next 6 */
9487
+ /* istanbul ignore next */
9426
9488
  async function () {
9489
+ /* istanbul ignore next */
9427
9490
  console.error(reader.error);
9491
+ /* istanbul ignore next */
9428
9492
  await dialogs.alert(/** @type {string} */ (
9429
9493
  /** @type {DOMException} */ (reader.error).message
9430
9494
  ));
@@ -9492,18 +9556,19 @@ const blobType = {
9492
9556
  'Text source',
9493
9557
  ['br'],
9494
9558
  ['textarea', {class: 'view-text'}, [
9495
- /* c8 ignore next */
9559
+ /* istanbul ignore next */
9496
9560
  /** @type {string|null} */ (reader.result) ?? ''
9497
9561
  ]]
9498
9562
  ]));
9499
9563
  });
9500
9564
  // Seems not feasible to accurately simulate
9501
- /* c8 ignore next 10 */
9502
9565
  reader.addEventListener(
9503
9566
  'error',
9504
- /* c8 ignore next 6 */
9567
+ /* istanbul ignore next */
9505
9568
  function () {
9569
+ /* istanbul ignore next */
9506
9570
  console.error(reader.error);
9571
+ /* istanbul ignore next */
9507
9572
  div.append(
9508
9573
  /** @type {DOMException} */ (reader.error).message
9509
9574
  );
@@ -9680,7 +9745,7 @@ const blobType = {
9680
9745
  blob
9681
9746
  ).slice(8, -1) === 'Blob'
9682
9747
  ? /** @type {Blob} */ (blob)
9683
- /* c8 ignore next */
9748
+ /* istanbul ignore next */
9684
9749
  : undefined;
9685
9750
  }
9686
9751
  }
@@ -9750,7 +9815,7 @@ const blobType = {
9750
9815
  * @this {HTMLInputElement}
9751
9816
  */
9752
9817
  change () {
9753
- /* c8 ignore next 3 -- TS */
9818
+ /* istanbul ignore if -- TS */
9754
9819
  if (!this.files) {
9755
9820
  return;
9756
9821
  }
@@ -9902,7 +9967,7 @@ const blobType = {
9902
9967
 
9903
9968
  if (constraints) {
9904
9969
  const mediaStream = await getUserMedia(constraints);
9905
- /* c8 ignore next 4 */
9970
+ /* istanbul ignore if */
9906
9971
  if (!mediaStream) {
9907
9972
  await dialogs.alert('Error getting user media');
9908
9973
  return;
@@ -9950,7 +10015,7 @@ const blobType = {
9950
10015
  const mediaStream = await startScreenCapture(
9951
10016
  screenShareConstraints
9952
10017
  );
9953
- /* c8 ignore next 4 */
10018
+ /* istanbul ignore if */
9954
10019
  if (!mediaStream) {
9955
10020
  await dialogs.alert('Error getting user media');
9956
10021
  return;
@@ -10033,7 +10098,7 @@ const blobType = {
10033
10098
  'video.previewMedia'
10034
10099
  ));
10035
10100
 
10036
- /* c8 ignore next 4 */
10101
+ /* istanbul ignore if */
10037
10102
  if (!previewMedia.srcObject) {
10038
10103
  dialogs.alert('No stream found to record');
10039
10104
  return;
@@ -10066,9 +10131,11 @@ const blobType = {
10066
10131
 
10067
10132
  try {
10068
10133
  mediaRecorder.start();
10069
- /* c8 ignore next 4 */
10134
+ /* istanbul ignore next */
10070
10135
  } catch (err) {
10136
+ /* istanbul ignore next */
10071
10137
  dialogs.alert('Error starting media recorder');
10138
+ /* istanbul ignore next */
10072
10139
  return;
10073
10140
  }
10074
10141
  mediaRecorder.addEventListener('stop', () => {
@@ -10199,7 +10266,7 @@ const blobType = {
10199
10266
  ($e(videoContainer, 'img.photo'));
10200
10267
 
10201
10268
  canvas.toBlob((blob) => {
10202
- /* c8 ignore next 4 */
10269
+ /* istanbul ignore if */
10203
10270
  if (!blob) {
10204
10271
  dialogs.alert('Error converting canvas to Blob');
10205
10272
  return;
@@ -10418,18 +10485,30 @@ const domexceptionType = {
10418
10485
  }
10419
10486
  };
10420
10487
 
10488
+ let idx$2 = 0;
10489
+
10421
10490
  /**
10422
- * @type {import('../types.js').TypeObject}
10491
+ * @type {import('../types.js').SuperTypeObject}
10423
10492
  */
10424
10493
  const domrectType = {
10425
10494
  option: ['DOMRect'],
10426
- stringRegex: /^DOMRect\((.*)\)$/u,
10427
- toValue (s) {
10495
+ childTypes: ['domrectreadonly'],
10496
+ stringRegex: /^(?<domRectClass>DOMRect|DOMRectReadOnly)\((?<innerContent>.*)\)$/u,
10497
+ toValue (s, rootInfo) {
10498
+ const {groups: {
10499
+ domRectClass
10500
+ /* istanbul ignore next -- Should always be found */
10501
+ } = {}} = /** @type {RegExpMatchArray} */ (
10502
+ /** @type {import('../types.js').RootInfo} */ (rootInfo).match
10503
+ );
10428
10504
  const {x, y, width, height} = JSON.parse(s);
10429
- return {value: new DOMRect(x, y, width, height)};
10505
+ return {
10506
+ value: new (
10507
+ domRectClass === 'DOMRect' ? DOMRect : DOMRectReadOnly
10508
+ )(x, y, width, height)};
10430
10509
  },
10431
10510
  getInput ({root}) {
10432
- return /** @type {HTMLInputElement} */ ($e(root, 'input'));
10511
+ return /** @type {HTMLInputElement} */ ($e(root, 'input:not([type])'));
10433
10512
  },
10434
10513
  setValue ({root, value}) {
10435
10514
  /** @type {HTMLInputElement} */ (
@@ -10444,6 +10523,16 @@ const domrectType = {
10444
10523
  /** @type {HTMLInputElement} */ (
10445
10524
  $e(root, '.height')
10446
10525
  ).value = String(value.height);
10526
+
10527
+ if (toStringTag(value) === 'DOMRect') {
10528
+ /** @type {HTMLInputElement} */ (
10529
+ $e(root, '.domrect-readonly-readwrite')
10530
+ ).checked = true;
10531
+ } else {
10532
+ /** @type {HTMLInputElement} */ (
10533
+ $e(root, '.domrect-readonly-readonly')
10534
+ ).checked = true;
10535
+ }
10447
10536
  },
10448
10537
  getValue ({root}) {
10449
10538
  const x = Number(/** @type {HTMLInputElement} */ (
@@ -10458,11 +10547,16 @@ const domrectType = {
10458
10547
  const height = Number(/** @type {HTMLInputElement} */ (
10459
10548
  $e(root, '.height')
10460
10549
  ).value);
10461
- return new DOMRect(x, y, width, height);
10550
+
10551
+ const isReadWrite = /** @type {HTMLInputElement} */ (
10552
+ $e(root, '.domrect-readonly-readwrite')
10553
+ ).checked;
10554
+ return new (isReadWrite ? DOMRect : DOMRectReadOnly)(x, y, width, height);
10462
10555
  },
10463
10556
  viewUI ({value}) {
10557
+ const isReadWrite = toStringTag(value) === 'DOMRect';
10464
10558
  return ['div', {dataset: {type: 'domrect'}}, [
10465
- ['b', {class: 'emphasis'}, ['DOMRect']],
10559
+ ['b', {class: 'emphasis'}, [isReadWrite ? 'DOMRect' : 'DOMRectReadOnly']],
10466
10560
  ['br'],
10467
10561
  ['b', ['x ']],
10468
10562
  value.x,
@@ -10483,8 +10577,32 @@ const domrectType = {
10483
10577
  width: '',
10484
10578
  height: ''
10485
10579
  }}) {
10580
+ idx$2++;
10486
10581
  // eslint-disable-next-line @stylistic/max-len -- Long
10487
10582
  return ['div', {dataset: {type: 'domrect'}}, /** @type {import('jamilih').JamilihChildren} */ ([
10583
+ ['div', [
10584
+ ['label', [
10585
+ ['input', {
10586
+ type: 'radio',
10587
+ class: 'domrect-readonly-readwrite',
10588
+ name: `${typeNamespace}-domrect-readonly-${idx$2}`,
10589
+ value: 'readwrite',
10590
+ checked: toStringTag(value) !== 'DOMRectReadOnly'
10591
+ }],
10592
+ 'Readwrite'
10593
+ ]],
10594
+ ' ',
10595
+ ['label', [
10596
+ ['input', {
10597
+ type: 'radio',
10598
+ class: 'domrect-readonly-readonly',
10599
+ name: `${typeNamespace}-domrect-readonly-${idx$2}`,
10600
+ value: 'readonly',
10601
+ checked: toStringTag(value) === 'DOMRectReadOnly'
10602
+ }],
10603
+ 'Read-only'
10604
+ ]]
10605
+ ]],
10488
10606
  ['label', [
10489
10607
  'x: ',
10490
10608
  ['input', {
@@ -10520,18 +10638,29 @@ const domrectType = {
10520
10638
  }
10521
10639
  };
10522
10640
 
10641
+ let idx$1 = 0;
10642
+
10523
10643
  /**
10524
- * @type {import('../types.js').TypeObject}
10644
+ * @type {import('../types.js').SuperTypeObject}
10525
10645
  */
10526
10646
  const dompointType = {
10527
10647
  option: ['DOMPoint'],
10528
- stringRegex: /^DOMPoint\((.*)\)$/u,
10529
- toValue (s) {
10648
+ childTypes: ['dompointreadonly'],
10649
+ stringRegex: /^(?<domPointClass>DOMPoint|DOMPointReadOnly)\((?<innerContent>.*)\)$/u,
10650
+ toValue (s, rootInfo) {
10651
+ const {groups: {
10652
+ domPointClass
10653
+ /* istanbul ignore next -- Should always be found */
10654
+ } = {}} = /** @type {RegExpMatchArray} */ (
10655
+ /** @type {import('../types.js').RootInfo} */ (rootInfo).match
10656
+ );
10530
10657
  const {x, y, z, w} = JSON.parse(s);
10531
- return {value: new DOMPoint(x, y, z, w)};
10658
+ return {value: new (
10659
+ domPointClass === 'DOMPoint' ? DOMPoint : DOMPointReadOnly
10660
+ )(x, y, z, w)};
10532
10661
  },
10533
10662
  getInput ({root}) {
10534
- return /** @type {HTMLInputElement} */ ($e(root, 'input'));
10663
+ return /** @type {HTMLInputElement} */ ($e(root, 'input:not([type])'));
10535
10664
  },
10536
10665
  setValue ({root, value}) {
10537
10666
  /** @type {HTMLInputElement} */ (
@@ -10546,6 +10675,16 @@ const dompointType = {
10546
10675
  /** @type {HTMLInputElement} */ (
10547
10676
  $e(root, '.w')
10548
10677
  ).value = String(value.w);
10678
+
10679
+ if (toStringTag(value) === 'DOMPoint') {
10680
+ /** @type {HTMLInputElement} */ (
10681
+ $e(root, '.dompoint-readonly-readwrite')
10682
+ ).checked = true;
10683
+ } else {
10684
+ /** @type {HTMLInputElement} */ (
10685
+ $e(root, '.dompoint-readonly-readonly')
10686
+ ).checked = true;
10687
+ }
10549
10688
  },
10550
10689
  getValue ({root}) {
10551
10690
  const x = Number(/** @type {HTMLInputElement} */ (
@@ -10560,11 +10699,18 @@ const dompointType = {
10560
10699
  const w = Number(/** @type {HTMLInputElement} */ (
10561
10700
  $e(root, '.w')
10562
10701
  ).value);
10563
- return new DOMPoint(x, y, z, w);
10702
+
10703
+ const isReadWrite = /** @type {HTMLInputElement} */ (
10704
+ $e(root, '.dompoint-readonly-readwrite')
10705
+ ).checked;
10706
+ return new (isReadWrite ? DOMPoint : DOMPointReadOnly)(x, y, z, w);
10564
10707
  },
10565
10708
  viewUI ({value}) {
10709
+ const isReadWrite = toStringTag(value) === 'DOMPoint';
10566
10710
  return ['div', {dataset: {type: 'dompoint'}}, [
10567
- ['b', {class: 'emphasis'}, ['DOMPoint']],
10711
+ ['b', {class: 'emphasis'}, [
10712
+ isReadWrite ? 'DOMPoint' : 'DOMPointReadOnly'
10713
+ ]],
10568
10714
  ['br'],
10569
10715
  ['b', ['x ']],
10570
10716
  value.x,
@@ -10585,8 +10731,32 @@ const dompointType = {
10585
10731
  z: '',
10586
10732
  w: ''
10587
10733
  }}) {
10734
+ idx$1++;
10588
10735
  // eslint-disable-next-line @stylistic/max-len -- Long
10589
10736
  return ['div', {dataset: {type: 'dompoint'}}, /** @type {import('jamilih').JamilihChildren} */ ([
10737
+ ['div', [
10738
+ ['label', [
10739
+ ['input', {
10740
+ type: 'radio',
10741
+ class: 'dompoint-readonly-readwrite',
10742
+ name: `${typeNamespace}-dompoint-readonly-${idx$1}`,
10743
+ value: 'readwrite',
10744
+ checked: toStringTag(value) !== 'DOMPointReadOnly'
10745
+ }],
10746
+ 'Readwrite'
10747
+ ]],
10748
+ ' ',
10749
+ ['label', [
10750
+ ['input', {
10751
+ type: 'radio',
10752
+ class: 'dompoint-readonly-readonly',
10753
+ name: `${typeNamespace}-dompoint-readonly-${idx$1}`,
10754
+ value: 'readonly',
10755
+ checked: toStringTag(value) === 'DOMPointReadOnly'
10756
+ }],
10757
+ 'Read-only'
10758
+ ]]
10759
+ ]],
10590
10760
  ['label', [
10591
10761
  'x: ',
10592
10762
  ['input', {
@@ -10625,17 +10795,28 @@ const dompointType = {
10625
10795
  let idx = 0;
10626
10796
 
10627
10797
  /**
10628
- * @type {import('../types.js').TypeObject}
10798
+ * @type {import('../types.js').SuperTypeObject}
10629
10799
  */
10630
10800
  const dommatrixType = {
10631
10801
  option: ['DOMMatrix'],
10632
- stringRegex: /^DOMMatrix\((.*)\)$/u,
10633
- toValue (s) {
10802
+ childTypes: ['dommatrixreadonly'],
10803
+ stringRegex: /^(?<domMatrixClass>DOMMatrix|DOMMatrixReadOnly)\((?<innerContent>.*)\)$/u,
10804
+ toValue (s, rootInfo) {
10805
+ const {groups: {
10806
+ domMatrixClass
10807
+ /* istanbul ignore next -- Should always be found */
10808
+ } = {}} = /** @type {RegExpMatchArray} */ (
10809
+ /** @type {import('../types.js').RootInfo} */ (rootInfo).match
10810
+ );
10634
10811
  const o = JSON.parse(s);
10635
10812
 
10813
+ const DOMMatrixClass = domMatrixClass === 'DOMMatrix'
10814
+ ? DOMMatrix
10815
+ : DOMMatrixReadOnly;
10816
+
10636
10817
  const dommatrix = Object.hasOwn(o, 'a')
10637
- ? new DOMMatrix([o.a, o.b, o.c, o.d, o.e, o.f])
10638
- : new DOMMatrix([
10818
+ ? new DOMMatrixClass([o.a, o.b, o.c, o.d, o.e, o.f])
10819
+ : new DOMMatrixClass([
10639
10820
  o.m11, o.m12, o.m13, o.m14,
10640
10821
  o.m21, o.m22, o.m23, o.m24,
10641
10822
  o.m31, o.m32, o.m33, o.m34,
@@ -10645,7 +10826,7 @@ const dommatrixType = {
10645
10826
  return {value: dommatrix};
10646
10827
  },
10647
10828
  getInput ({root}) {
10648
- return /** @type {HTMLInputElement} */ ($e(root, 'input'));
10829
+ return /** @type {HTMLInputElement} */ ($e(root, 'input:not([type])'));
10649
10830
  },
10650
10831
  setValue ({root, value: o}) {
10651
10832
  const {is2D} = o;
@@ -10731,8 +10912,23 @@ const dommatrixType = {
10731
10912
  $e(root, '.m44')
10732
10913
  ).value = o.m44;
10733
10914
  }
10915
+
10916
+ if (toStringTag(o) === 'DOMMatrix') {
10917
+ /** @type {HTMLInputElement} */ (
10918
+ $e(root, '.dommatrix-readonly-readwrite')
10919
+ ).checked = true;
10920
+ } else {
10921
+ /** @type {HTMLInputElement} */ (
10922
+ $e(root, '.dommatrix-readonly-readonly')
10923
+ ).checked = true;
10924
+ }
10734
10925
  },
10735
10926
  getValue ({root}) {
10927
+ const isReadWrite = /** @type {HTMLInputElement} */ (
10928
+ $e(root, '.dommatrix-readonly-readwrite')
10929
+ ).checked;
10930
+ const DOMMatrixClass = isReadWrite ? DOMMatrix : DOMMatrixReadOnly;
10931
+
10736
10932
  const aType = /** @type {HTMLInputElement} */ (
10737
10933
  $e(root, '.a')
10738
10934
  ).value;
@@ -10754,7 +10950,7 @@ const dommatrixType = {
10754
10950
  const f = Number(/** @type {HTMLInputElement} */ (
10755
10951
  $e(root, '.f')
10756
10952
  ).value);
10757
- return new DOMMatrix([a, b, c, d, e, f]);
10953
+ return new DOMMatrixClass([a, b, c, d, e, f]);
10758
10954
  }
10759
10955
 
10760
10956
  const m11 = Number(/** @type {HTMLInputElement} */ (
@@ -10809,7 +11005,7 @@ const dommatrixType = {
10809
11005
  $e(root, '.m44')
10810
11006
  ).value);
10811
11007
 
10812
- return new DOMMatrix([
11008
+ return new DOMMatrixClass([
10813
11009
  m11, m12, m13, m14,
10814
11010
  m21, m22, m23, m24,
10815
11011
  m31, m32, m33, m34,
@@ -10817,8 +11013,11 @@ const dommatrixType = {
10817
11013
  ]);
10818
11014
  },
10819
11015
  viewUI ({value}) {
11016
+ const isReadWrite = toStringTag(value) === 'DOMMatrix';
10820
11017
  return ['div', {dataset: {type: 'dommatrix'}}, [
10821
- ['b', {class: 'emphasis'}, ['DOMMatrix']],
11018
+ ['b', {class: 'emphasis'}, [
11019
+ isReadWrite ? 'DOMMatrix' : 'DOMMatrixReadOnly'
11020
+ ]],
10822
11021
  value.is2D
10823
11022
  ? ['div', [
10824
11023
  ['b', ['a ']],
@@ -10898,11 +11097,34 @@ const dommatrixType = {
10898
11097
  const {is2D} = value;
10899
11098
  // eslint-disable-next-line @stylistic/max-len -- Long
10900
11099
  return ['div', {dataset: {type: 'dommatrix'}}, /** @type {import('jamilih').JamilihChildren} */ ([
11100
+ ['div', [
11101
+ ['label', [
11102
+ ['input', {
11103
+ type: 'radio',
11104
+ class: 'dommatrix-readonly-readwrite',
11105
+ name: `${typeNamespace}-dommatrix-readonly-${idx}`,
11106
+ value: 'readwrite',
11107
+ checked: toStringTag(value) !== 'DOMMatrixReadOnly'
11108
+ }],
11109
+ 'Readwrite'
11110
+ ]],
11111
+ ' ',
11112
+ ['label', [
11113
+ ['input', {
11114
+ type: 'radio',
11115
+ class: 'dommatrix-readonly-readonly',
11116
+ name: `${typeNamespace}-dommatrix-readonly-${idx}`,
11117
+ value: 'readonly',
11118
+ checked: toStringTag(value) === 'DOMMatrixReadOnly'
11119
+ }],
11120
+ 'Read-only'
11121
+ ]]
11122
+ ]],
10901
11123
  ['div', {
10902
11124
  $on: {
10903
11125
  click (e) {
10904
11126
  const {target} = e;
10905
- /* c8 ignore next 3 */
11127
+ /* istanbul ignore if */
10906
11128
  if (/** @type {HTMLInputElement} */ (target).type !== 'radio') {
10907
11129
  return;
10908
11130
  }
@@ -10977,6 +11199,89 @@ const dommatrixType = {
10977
11199
  }
10978
11200
  };
10979
11201
 
11202
+ /**
11203
+ * @type {import('../types.js').TypeObject}
11204
+ */
11205
+ const noneditableType = {
11206
+ // Ideally, we would remove the option,
11207
+ // but edit forms currently need a pull-down option
11208
+ option: ['Non-editable'],
11209
+ getInput ({root}) {
11210
+ return /** @type {HTMLButtonElement} */ ($e(root, 'button'));
11211
+ },
11212
+ setValue ({root, value}) {
11213
+ /** @type {HTMLButtonElement & {$value: any}} */ (
11214
+ this.getInput({root})
11215
+ ).$value = value;
11216
+ /** @type {HTMLSpanElement} */ (
11217
+ $e(root, '.stringTag')
11218
+ ).textContent = value === undefined
11219
+ ? '(None)'
11220
+ : toStringTag(value);
11221
+ },
11222
+ getValue ({root}) {
11223
+ return /** @type {HTMLButtonElement & {$value: any}} */ (
11224
+ this.getInput({root})
11225
+ ).$value;
11226
+ },
11227
+ validate ({root}) {
11228
+ const val = /** @type {HTMLButtonElement & {$value: any}} */ (
11229
+ this.getInput({root})
11230
+ ).$value;
11231
+ return {
11232
+ message: 'The non-editable type is only for passing on ' +
11233
+ 'pre-existing content that is unknown or currently unsupported',
11234
+ valid: val !== undefined
11235
+ };
11236
+ },
11237
+ viewUI ({value}) {
11238
+ return ['div', {dataset: {type: 'resurrectable'}}, [
11239
+ ['b', {class: 'emphasis'}, ['Non-editable']],
11240
+ ['span', {
11241
+ title: 'There is no current support for editing this element\'s ' +
11242
+ 'type, but its contents will be passed on transparently.'
11243
+ }, ['?']],
11244
+ ['b', ['String tag: ']],
11245
+ toStringTag(value)
11246
+ ]];
11247
+ },
11248
+ editUI ({typeNamespace, value}) {
11249
+ return ['div', {dataset: {type: 'resurrectable'}}, [
11250
+ ['a', {
11251
+ // eslint-disable-next-line no-script-url -- Safe
11252
+ href: 'javascript:void(0)',
11253
+ $on: {
11254
+ click (e) {
11255
+ e.preventDefault();
11256
+ }
11257
+ },
11258
+ title: 'There is no current support for editing this element\'s ' +
11259
+ 'type, but its contents will be passed on transparently.'
11260
+ }, ['?']],
11261
+ ' ',
11262
+ ['button', {
11263
+ $on: {
11264
+ click (e) {
11265
+ e.preventDefault();
11266
+ console.log(/** @type {HTMLButtonElement & {$value: any}} */ (
11267
+ this
11268
+ ).$value);
11269
+ }
11270
+ },
11271
+ name: `${typeNamespace}-resurrectable`,
11272
+ $custom: {
11273
+ $value: value
11274
+ }
11275
+ }, [
11276
+ 'Non-editable'
11277
+ ]],
11278
+ ['br'],
11279
+ ['b', ['String tag: ']],
11280
+ ['span', {class: 'stringTag'}, [value ? toStringTag(value) : '(None)']]
11281
+ ]];
11282
+ }
11283
+ };
11284
+
10980
11285
  /**
10981
11286
  * Utility to retrieve the property value given a legend element.
10982
11287
  * @param {HTMLLegendElement} legend
@@ -11201,6 +11506,16 @@ const getPropertyValueFromLegend = (legend) => {
11201
11506
  * ) => void} TypeObjectSetValue
11202
11507
  */
11203
11508
 
11509
+ /**
11510
+ * @typedef {(
11511
+ * s: string, info?: RootInfo
11512
+ * ) => {
11513
+ * value?: StructuredCloneValue,
11514
+ * remnant?: string,
11515
+ * assign?: false
11516
+ * }} ToValue
11517
+ */
11518
+
11204
11519
  /**
11205
11520
  * @typedef {object} TypeObject
11206
11521
  * @property {[
@@ -11230,13 +11545,7 @@ const getPropertyValueFromLegend = (legend) => {
11230
11545
  * check whether this subtype matches
11231
11546
  * @property {string} [superType] The greater fundamental type to which
11232
11547
  * the type belongs
11233
- * @property {(
11234
- * s: string, info?: RootInfo
11235
- * ) => {
11236
- * value?: StructuredCloneValue,
11237
- * remnant?: string,
11238
- * assign?: false
11239
- * }} toValue Converts from string to value. May use
11548
+ * @property {ToValue} [toValue] Converts from string to value. May use
11240
11549
  * `stringRegex` to find components.
11241
11550
  * @property {(info: {
11242
11551
  * root: HTMLDivElement,
@@ -11305,9 +11614,15 @@ const getPropertyValueFromLegend = (legend) => {
11305
11614
  * "int8array"|"uint8array"|"uint8clampedarray"|"int16array"|"uint16array"|
11306
11615
  * "int32array"|"uint32array"|"float32array"|"float64array"|"ValidDate"|
11307
11616
  * "arrayNonindexKeys"|"error"|"errors"|"blob"|"domexception"|"domrect"|
11308
- * "dompoint"|"dommatrix"} AvailableType
11617
+ * "dompoint"|"dommatrix"|"resurrectable"} AvailableType
11309
11618
  */
11310
11619
 
11620
+ /**
11621
+ * @typedef {TypeObject & {
11622
+ * childTypes: string[]
11623
+ * }} SuperTypeObject
11624
+ */
11625
+
11311
11626
  /**
11312
11627
  *
11313
11628
  */
@@ -11371,6 +11686,8 @@ class Types {
11371
11686
  dompoint: dompointType,
11372
11687
  dommatrix: dommatrixType,
11373
11688
 
11689
+ resurrectable: noneditableType,
11690
+
11374
11691
  arraybuffer: {
11375
11692
  option: ['ArrayBuffer']
11376
11693
  },
@@ -11529,6 +11846,7 @@ class Types {
11529
11846
  // Ensure `stateObj` remains a reference if present
11530
11847
  return typeObject.getValue({
11531
11848
  root,
11849
+ /* istanbul ignore next -- Guard */
11532
11850
  stateObj: stateObj ?? {
11533
11851
  types: this
11534
11852
  },
@@ -11573,11 +11891,12 @@ class Types {
11573
11891
 
11574
11892
  /** @type {GetOptionForType} */
11575
11893
  getOptionForType (type) {
11894
+ const availableType = /** @type {TypeObject} */ (
11895
+ this.availableTypes[type]
11896
+ );
11576
11897
  /** @type {[string, {value?: AvailableType, title?: string}?]} */
11577
11898
  const optInfo = [
11578
- ...(/** @type {TypeObject} */ (
11579
- this.availableTypes[type]
11580
- )).option
11899
+ ...availableType.option
11581
11900
  ];
11582
11901
  optInfo[1] = {value: type, ...(optInfo[1])};
11583
11902
  return /** @type {[string, {value: AvailableType, title?: string}]} */ (
@@ -11593,6 +11912,7 @@ class Types {
11593
11912
  if (!typesForFormatAndState) {
11594
11913
  throw new Error('Unexpected type for format and state');
11595
11914
  }
11915
+
11596
11916
  return typesForFormatAndState.map((type) => {
11597
11917
  return this.getOptionForType(type);
11598
11918
  });
@@ -11775,7 +12095,12 @@ class Types {
11775
12095
  // console.log('s0', s, '::', remnant, match);
11776
12096
  let valObj;
11777
12097
  try {
11778
- valObj = /** @type {TypeObject} */ (found[1]).toValue(
12098
+ const typeObj = /** @type {TypeObject} */ (found[1]);
12099
+ /* istanbul ignore if -- TS guard */
12100
+ if (!typeObj.toValue) {
12101
+ throw new Error('Type has no `toValue` method');
12102
+ }
12103
+ valObj = typeObj.toValue(
11779
12104
  mtch.groups?.innerContent || innerContent || s, {
11780
12105
  types: this,
11781
12106
  format,
@@ -11815,7 +12140,7 @@ class Types {
11815
12140
  }
11816
12141
  if (firstRun) {
11817
12142
  const typeson = new c().register(
11818
- ae
12143
+ ie
11819
12144
  );
11820
12145
  try {
11821
12146
  const topRoot = typeson.revive(value);