seroval 0.4.0-alpha.13 → 0.4.0-alpha.14

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.
@@ -1,2 +1,2 @@
1
- var Ie=Object.defineProperty;var Ve=(r,e,t)=>e in r?Ie(r,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):r[e]=t;var i=(r,e,t)=>(Ve(r,typeof e!="symbol"?e+"":e,t),t);function Re(r,e){let t=r[0]-e[0];return t===0&&(t=r[1]-e[1]),t===0&&(t=r[2]-e[2]),t}var de={[1]:{es:[2021,0,0],chrome:[85,0,0],edge:[85,0,0],firefox:[79,0,0],opera:[71,0,0],safari:[14,0,0],ios:[14,0,0],samsung:[14,0,0],deno:[1,2,0],node:[15,0,0]},[2]:{es:[6,0,0],chrome:[66,0,0],edge:[14,0,0],firefox:[60,0,0],opera:[53,0,0],safari:[9,0,0],ios:[9,0,0],samsung:[9,0,0],deno:[1,0,0],node:[10,9,0]},[4]:{es:[6,0,0],chrome:[45,0,0],edge:[12,0,0],firefox:[24,0,0],opera:[32,0,0],safari:[10,0,0],ios:[10,0,0],samsung:[5,0,0],deno:[1,0,0],node:[4,0,0]},[8]:{es:[2020,0,0],chrome:[67,0,0],edge:[79,0,0],firefox:[68,0,0],opera:[54,0,0],safari:[14,0,0],ios:[14,0,0],samsung:[9,0,0],deno:[1,0,0],node:[10,4,0]},[16]:{es:[6,0,0],chrome:[38,0,0],edge:[12,0,0],firefox:[13,0,0],opera:[25,0,0],safari:[8,0,0],ios:[8,0,0],samsung:[3,0,0],deno:[1,0,0],node:[0,12,0]},[32]:{es:[6,0,0],chrome:[39,0,0],edge:[12,0,0],firefox:[34,0,0],opera:[26,0,0],safari:[9,0,0],ios:[9,0,0],samsung:[4,0,0],deno:[1,0,0],node:[4,0,0]},[64]:{es:[6,0,0],chrome:[45,0,0],edge:[12,0,0],firefox:[34,0,0],opera:[32,0,0],safari:[9,0,0],ios:[9,0,0],samsung:[5,0,0],deno:[1,0,0],node:[4,0,0]},[128]:{es:[6,0,0],chrome:[32,0,0],edge:[12,0,0],firefox:[29,0,0],opera:[19,0,0],safari:[8,0,0],ios:[8,0,0],samsung:[2,0,0],deno:[1,0,0],node:[0,12,0]},[256]:{es:[6,0,0],chrome:[38,0,0],edge:[12,0,0],firefox:[13,0,0],opera:[25,0,0],safari:[8,0,0],ios:[8,0,0],samsung:[3,0,0],deno:[1,0,0],node:[0,12,0]},[512]:{es:[6,0,0],chrome:[43,0,0],edge:[12,0,0],firefox:[36,0,0],opera:[30,0,0],safari:[10,0,0],ios:[10,0,0],samsung:[4,0,0],deno:[1,0,0],node:[0,12,0]},[1024]:{es:[6,0,0],chrome:[7,0,0],edge:[12,0,0],firefox:[4,0,0],opera:[11,6,0],safari:[5,1,0],ios:[4,2,0],samsung:[1,0,0],deno:[1,0,0],node:[0,10,0]},[2048]:{es:[2020,0,0],chrome:[67,0,0],edge:[79,0,0],firefox:[68,0,0],opera:[54,6,0],safari:[15,1,0],ios:[15,2,0],samsung:[9,0,0],deno:[1,0,0],node:[10,4,0]}},se=["chrome","deno","edge","es","firefox","ios","node","opera","safari","samsung"];function ke(r){for(let e=0,t=se.length;e<t;e++){let s=r.substring(0,se[e].length);if(s===se[e])return s}throw new Error(`Invalid target "${r}"`)}function pe(r){let e=ke(r),t=r.substring(e.length),[s,o="0",a="0"]=t.split(".");return[e,[Number(s),Number(o),Number(a)]]}function Pe(r){if(Array.isArray(r)){let e=[];for(let t=0,s=r.length;t<s;t++)e.push(pe(r[t]));return e}return[pe(r)]}function ge(r){let e=Pe(r),t=0;for(let s of Object.keys(de)){let o=de[s],a=!0;for(let[n,u]of e){let l=o[n];a=a&&!!l&&Re(l,u)<=0}a&&(t|=Number(s))}return t}var ye="hjkmoquxzABCDEFGHIJKLNPQRTUVWXYZ$_",me=ye.length,Ne="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789$_",Se=Ne.length;function oe(r){let e=r%me,t=ye[e];for(r=(r-e)/me;r>0;)e=r%Se,t+=Ne[e],r=(r-e)/Se;return t}var Te={target:"es2023"},h=class{constructor(e={}){i(this,"refs",new Map);i(this,"markedRefs",{});i(this,"features");let t=Object.assign({},Te,e||{});this.features=ge(t.target)}},E=class{constructor(e){i(this,"stack",[]);i(this,"validRefs",[]);i(this,"refSize",0);i(this,"vars",[]);i(this,"assignments",[]);i(this,"features");i(this,"markedRefs");this.features=e.features,this.markedRefs=e.markedRefs}};function b(r,e){r.markedRefs[e]=1}function ze(r,e){let t=r.validRefs[e];if(t==null){let s=r.refSize++;return r.validRefs[e]=s,s}return t}function p(r,e){let t=ze(r,e);if(r.vars[t])return r.vars[t];let s=oe(t);return r.vars[t]=s,s}function w(r,e,t){let s=r.refs.get(e);if(s!=null)return t&&b(r,s),s;let o=r.refs.size;return r.refs.set(e,o),o}function g(r,e){if(!r)throw new Error(e)}function v(r){let e="",t=0;for(let s=0,o=r.length;s<o;s++){let a;switch(r[s]){case'"':a='\\"';break;case"\\":a="\\\\";break;case"<":a="\\x3C";break;case`
2
- `:a="\\n";break;case"\r":a="\\r";break;case"\u2028":a="\\u2028";break;case"\u2029":a="\\u2029";break;default:continue}e+=r.slice(t,s)+a,t=s+1}return t===0?e=r:e+=r.slice(t),`"${e}"`}var L=class{constructor(e,t,s){i(this,"k");i(this,"v");i(this,"s");this.k=e,this.v=t,this.s=s}},O=class{constructor(e,t,s){i(this,"k");i(this,"v");i(this,"s");this.k=e,this.v=t,this.s=s}},m=class{constructor(e){i(this,"t",0);i(this,"s");this.s=e}},I=class{constructor(e){i(this,"t",2);i(this,"i");this.i=e}},V=class{constructor(e){i(this,"t",1);i(this,"s");this.s=`${e}n`}},R=class{constructor(e,t){i(this,"t",3);i(this,"i");i(this,"s");this.i=e,this.s=t.toISOString()}},k=class{constructor(e,t){i(this,"t",4);i(this,"i");i(this,"s");this.i=e,this.s=String(t)}},P=class{constructor(e,t){i(this,"t",14);i(this,"i");i(this,"s");i(this,"l");i(this,"c");this.i=e,this.s=t.toString(),this.l=t.byteOffset,this.c=t.constructor.name}},T=class{constructor(e,t){i(this,"t",15);i(this,"i");i(this,"s");i(this,"l");i(this,"c");let s="",o=t.length-1;for(let a=0;a<o;a++)s+=`${t[a]}n,`;s+=`"${t[o]}"`,this.i=e,this.s=s,this.l=t.byteOffset,this.c=t.constructor.name}},z=class{constructor(e,t){i(this,"t",5);i(this,"i");i(this,"a");this.i=e,this.a=t}},$=class{constructor(e,t){i(this,"t",6);i(this,"i");i(this,"d");this.i=e,this.d=t}},j=class{constructor(e,t){i(this,"t",7);i(this,"i");i(this,"a");this.i=e,this.a=t}},C=class{constructor(e,t){i(this,"t",8);i(this,"i");i(this,"d");this.i=e,this.d=t}},x=class{constructor(e,t){i(this,"t",9);i(this,"i");i(this,"d");this.i=e,this.d=t}},F=class{constructor(e,t){i(this,"t",10);i(this,"i");i(this,"n");this.i=e,this.n=t}},B=class{constructor(e,t,s,o){i(this,"t",11);i(this,"i");i(this,"c");i(this,"m");i(this,"d");this.i=e,this.c=t,this.m=s,this.d=o}},U=class{constructor(e,t,s,o){i(this,"t",12);i(this,"i");i(this,"m");i(this,"d");i(this,"n");this.i=e,this.m=t,this.d=s,this.n=o}},D=class{constructor(e,t,s){i(this,"t",13);i(this,"i");i(this,"d");i(this,"a");this.i=e,this.d=t,this.a=s}};var J=new m("!0"),G=new m("!1"),Y=new m("void 0"),H=new m(null),K=new m("-0"),Z=new m("1/0"),q=new m("-1/0");function M(r){return r instanceof EvalError?"EvalError":r instanceof RangeError?"RangeError":r instanceof ReferenceError?"ReferenceError":r instanceof SyntaxError?"SyntaxError":r instanceof TypeError?"TypeError":r instanceof URIError?"URIError":"Error"}function _(r){let e,t=M(r);r.name!==t?e={name:r.name}:r.constructor.name!==t&&(e={name:r.constructor.name});let s=Object.getOwnPropertyNames(r);for(let o of s)o!=="name"&&o!=="message"&&(e=e||{},e[o]=r[o]);return e}function W(r){let e=Object.getOwnPropertyNames(r);if(e.length){let t={};for(let s of e)t[s]=r[s];return t}}function A(r,e){return e.t===2&&r.stack.includes(e.i)}function N(r){if(!r||typeof r!="object"||Array.isArray(r))return!1;switch(r.constructor){case Map:case Set:case Int8Array:case Int16Array:case Int32Array:case Uint8Array:case Uint16Array:case Uint32Array:case Uint8ClampedArray:case Float32Array:case Float64Array:case BigInt64Array:case BigUint64Array:return!1;default:break}return Symbol.iterator in r}var ne=class{constructor(e){i(this,"ctx");this.ctx=e}async generateNodeList(e){let t=e.length,s=new Array(t),o=new Array(t),a;for(let n=0;n<t;n++)n in e&&(a=e[n],N(a)?o[n]=a:s[n]=await this.parse(a));for(let n=0;n<t;n++)n in o&&(s[n]=await this.parse(o[n]));return s}async generateArrayNode(e,t){return new j(e,await this.generateNodeList(t))}async generateMapNode(e,t){g(this.ctx.features&16,'Unsupported type "Map"');let s=t.size,o=new Array(s),a=new Array(s),n=new Array(s),u=new Array(s),l=0,d=0;for(let[c,f]of t.entries())N(c)||N(f)?(n[l]=c,u[l]=f,l++):(o[d]=await this.parse(c),a[d]=await this.parse(f),d++);for(let c=0;c<l;c++)o[d+c]=await this.parse(n[c]),a[d+c]=await this.parse(u[c]);return new $(e,new O(o,a,s))}async generateSetNode(e,t){g(this.ctx.features&256,'Unsupported type "Set"');let s=t.size,o=new Array(s),a=new Array(s),n=0,u=0;for(let l of t.keys())N(l)?a[n++]=l:o[u++]=await this.parse(l);for(let l=0;l<n;l++)o[u+l]=await this.parse(a[l]);return new z(e,o)}async generateProperties(e){let t=Object.keys(e),s=t.length,o=new Array(s),a=new Array(s),n=new Array(s),u=new Array(s),l=0,d=0,c;for(let f of t)c=e[f],N(c)?(n[l]=f,u[l]=c,l++):(o[d]=f,a[d]=await this.parse(c),d++);for(let f=0;f<l;f++)o[d+f]=n[f],a[d+f]=await this.parse(u[f]);return new L(o,a,s)}async generateIterableNode(e,t){g(this.ctx.features&512,'Unsupported type "Iterable"');let s=W(t);return new D(e,s?await this.generateProperties(s):void 0,await this.generateNodeList(Array.from(t)))}async generatePromiseNode(e,t){return g(this.ctx.features&128,'Unsupported type "Promise"'),t.then(async s=>new F(e,await this.parse(s)))}async generateObjectNode(e,t,s){if(Symbol.iterator in t)return this.generateIterableNode(e,t);if("then"in t&&typeof t.then=="function")return this.generatePromiseNode(e,t);let o=await this.generateProperties(t);return s?new x(e,o):new C(e,o)}async generateAggregateErrorNode(e,t){let s=_(t),o=s?await this.generateProperties(s):void 0;return new U(e,t.message,o,await this.parse(t.errors))}async generateErrorNode(e,t){let s=_(t),o=s?await this.generateProperties(s):void 0;return new B(e,M(t),t.message,o)}async parse(e){switch(typeof e){case"boolean":return e?J:G;case"undefined":return Y;case"string":return new m(v(e));case"number":return Object.is(e,-0)?K:Object.is(e,1/0)?Z:Object.is(e,-1/0)?q:new m(e);case"bigint":return g(this.ctx.features&8,'Unsupported type "BigInt"'),new V(e);case"object":{if(!e)return H;let t=w(this.ctx,e,!0);if(this.ctx.markedRefs[t])return new I(t);if(Array.isArray(e))return this.generateArrayNode(t,e);switch(e.constructor){case Date:return new R(t,e);case RegExp:return new k(t,e);case Promise:return this.generatePromiseNode(t,e);case Int8Array:case Int16Array:case Int32Array:case Uint8Array:case Uint16Array:case Uint32Array:case Uint8ClampedArray:case Float32Array:case Float64Array:return g(this.ctx.features&1024,`Unsupported value type "${e.constructor.name}"`),new P(t,e);case BigInt64Array:case BigUint64Array:return g(this.ctx.features&2048,`Unsupported value type "${e.constructor.name}"`),new T(t,e);case Map:return this.generateMapNode(t,e);case Set:return this.generateSetNode(t,e);case Object:return this.generateObjectNode(t,e,!1);case void 0:return this.generateObjectNode(t,e,!0);case AggregateError:return this.ctx.features&1?this.generateAggregateErrorNode(t,e):this.generateErrorNode(t,e);case Error:case EvalError:case RangeError:case ReferenceError:case SyntaxError:case TypeError:case URIError:return this.generateErrorNode(t,e);default:break}if(e instanceof AggregateError&&this.ctx.features&1)return this.generateAggregateErrorNode(t,e);if(e instanceof Error)return this.generateErrorNode(t,e);if(e instanceof Promise)return this.generatePromiseNode(t,e);if(Symbol.iterator in e)return this.generateIterableNode(t,e);if("then"in e&&typeof e.then=="function")return this.generatePromiseNode(t,e);throw new Error("Unsupported type")}default:throw new Error("Unsupported type")}}};async function Q(r,e){let t=await new ne(r).parse(e),s=t.t===8||t.t===13;return[t,w(r,e,!1),s]}function X(r){switch(r.type){case"index":return`${r.source}=${r.value}`;case"map":return`${r.source}.set(${r.key},${r.value})`;case"set":return`${r.source}.add(${r.value})`;default:return""}}function $e(r){let e=[],t=r[0],s=t;for(let o=1,a=r.length;o<a;o++){let n=r[o];n.type===s.type?n.type==="index"&&n.value===s.value?t={type:"index",source:n.source,value:X(t)}:n.type==="map"&&n.source===s.source?t={type:"map",source:X(t),key:n.key,value:n.value}:n.type==="set"&&n.source===s.source?t={type:"set",source:X(t),value:n.value}:(e.push(t),t=n):(e.push(t),t=n),s=n}return e.push(t),e}function ve(r){if(r.length){let e="",t=$e(r);for(let s=0,o=t.length;s<o;s++)e+=`${X(t[s])},`;return e}}function be(r){return ve(r.assignments)}function S(r,e,t){return r.markedRefs[e]?`${p(r,e)}=${t}`:t}function Ae(r,e,t){r.assignments.push({type:"index",source:e,value:t})}function je(r,e,t){b(r,e),r.assignments.push({type:"set",source:p(r,e),value:t})}function le(r,e,t,s){b(r,e),r.assignments.push({type:"map",source:p(r,e),key:t,value:s})}function ue(r,e,t,s){b(r,e),Ae(r,`${p(r,e)}[${t}]`,s)}function he(r,e,t,s){b(r,e),Ae(r,`${p(r,e)}.${t}`,s)}var Ee=/^([$A-Z_][0-9A-Z_$]*)$/i;function ee(r,e,t){r.stack.push(e);let s=[];for(let o=0;o<t.s;o++){let a=r.stack;r.stack=[];let n=y(r,t.v[o]);r.stack=a;let u=t.k[o],l=Number(u),d=r.assignments;r.assignments=s;let c=l>=0||Ee.test(u);c&&Number.isNaN(l)?he(r,e,u,n):ue(r,e,c?u:v(u),n),r.assignments=d}return r.stack.pop(),ve(s)}function we(r,e,t){if(t.s===0)return"{}";let s="";r.stack.push(e);for(let o=0;o<t.s;o++){let a=t.k[o],n=t.v[o],u=Number(a),l=u>=0||Ee.test(a);if(A(r,n)){let d=p(r,n.i);l&&Number.isNaN(u)?he(r,e,a,d):ue(r,e,l?a:v(a),d)}else s+=`${l?a:v(a)}:${y(r,n)},`}return r.stack.pop(),`{${s.substring(0,s.length-1)}}`}function Ce(r,e){let t;if(A(r,e.n))t=`Promise.resolve().then(()=>${p(r,e.n.i)})`;else{r.stack.push(e.i);let s=y(r,e.n);r.stack.pop(),t=`Promise.resolve(${s})`}return S(r,e.i,t)}function xe(r,e){let t=`[${e.s}]`;return e.l!==0&&(t+=`,${e.l}`),S(r,e.i,`new ${e.c}(${t})`)}function Be(r,e){let t="new Set",s=e.a.length;if(s){let o="";r.stack.push(e.i);for(let a=0;a<s;a++){let n=e.a[a];A(r,n)?je(r,e.i,p(r,n.i)):o+=`${y(r,n)},`}r.stack.pop(),o&&(t+=`([${o.substring(0,o.length-1)}])`)}return S(r,e.i,t)}function Ue(r,e){let t="new Map";if(e.d.s){let s="";r.stack.push(e.i);for(let o=0;o<e.d.s;o++){let a=e.d.k[o],n=e.d.v[o];if(A(r,a)){let u=p(r,a.i);if(A(r,n)){let l=p(r,n.i);le(r,e.i,u,l)}else{let l=r.stack;r.stack=[],le(r,e.i,u,y(r,n)),r.stack=l}}else if(A(r,n)){let u=p(r,n.i),l=r.stack;r.stack=[],le(r,e.i,y(r,a),u),r.stack=l}else s+=`[${y(r,a)},${y(r,n)}],`}r.stack.pop(),s&&(t+=`([${s.substring(0,s.length-1)}])`)}return S(r,e.i,t)}function Oe(r,e){let t=e.a.length,s="";for(let o=0;o<t;o++){let a=e.a[o];a?A(r,a)?(ue(r,e.i,o,p(r,a.i)),s+=","):(s+=y(r,a),o<t-1&&(s+=",")):s+=","}return`[${s}]`}function De(r,e){r.stack.push(e.i);let t=Oe(r,e);return r.stack.pop(),S(r,e.i,t)}function re(r,e,t,s){let o=we(r,t,e);return o!=="{}"?`Object.assign(${s},${o})`:s}function _e(r,e){r.stack.push(e.i);let t=`new AggregateError(${y(r,e.n)},${v(e.m)})`;if(r.stack.pop(),e.d)if(r.features&64)t=re(r,e.d,e.i,t);else{b(r,e.i);let s=ee(r,e.i,e.d);if(s){let o=p(r,e.i);return`(${S(r,e.i,t)},${s}${o})`}}return S(r,e.i,t)}function Me(r,e){let t=`new ${e.c}(${v(e.m)})`;if(e.d)if(r.features&64)t=re(r,e.d,e.i,t);else{b(r,e.i);let s=ee(r,e.i,e.d);if(s){let o=p(r,e.i);return`(${S(r,e.i,t)},${s}${o})`}}return S(r,e.i,t)}function Le(r,e){let t=r.stack;r.stack=[];let s=Oe(r,e);r.stack=t;let o;if(r.features&2?o=`${s}.values()`:o=`${s}[Symbol.iterator]()`,r.features&4?o=`{[Symbol.iterator]:()=>${o}}`:r.features&32?o=`{[Symbol.iterator](){return ${o}}}`:o=`{[Symbol.iterator]:function(){return ${o}}}`,e.d)if(r.features&64)o=re(r,e.d,e.i,o);else{b(r,e.i);let a=ee(r,e.i,e.d);if(a){let n=p(r,e.i);return`(${S(r,e.i,o)},${a}${n})`}}return S(r,e.i,o)}function Fe(r,e){let t="Object.create(null)";if(r.features&64)t=re(r,e.d,e.i,t);else{b(r,e.i);let s=ee(r,e.i,e.d);if(s){let o=p(r,e.i);return`(${S(r,e.i,t)},${s}${o})`}}return S(r,e.i,t)}function y(r,e){switch(e.t){case 0:return String(e.s);case 2:return p(r,e.i);case 10:return Ce(r,e);case 1:return e.s;case 3:return S(r,e.i,`new Date("${e.s}")`);case 4:return S(r,e.i,e.s);case 15:case 14:return xe(r,e);case 5:return Be(r,e);case 6:return Ue(r,e);case 7:return De(r,e);case 12:return _e(r,e);case 11:return Me(r,e);case 13:return Le(r,e);case 9:return Fe(r,e);case 8:return S(r,e.i,we(r,e.i,e.d));default:throw new Error("Unsupported type")}}var ce=class{constructor(e){i(this,"ctx");this.ctx=e}generateNodeList(e){let t=e.length,s=new Array(t),o=new Array(t),a;for(let n=0;n<t;n++)n in e&&(a=e[n],N(a)?o[n]=a:s[n]=this.parse(a));for(let n=0;n<t;n++)n in o&&(s[n]=this.parse(o[n]));return s}generateArrayNode(e,t){return new j(e,this.generateNodeList(t))}generateMapNode(e,t){g(this.ctx.features&16,'Unsupported type "Map"');let s=t.size,o=new Array(s),a=new Array(s),n=new Array(s),u=new Array(s),l=0,d=0;for(let[c,f]of t.entries())N(c)||N(f)?(n[l]=c,u[l]=f,l++):(o[d]=this.parse(c),a[d]=this.parse(f),d++);for(let c=0;c<l;c++)o[d+c]=this.parse(n[c]),a[d+c]=this.parse(u[c]);return new $(e,new O(o,a,s))}generateSetNode(e,t){g(this.ctx.features&256,'Unsupported type "Set"');let s=t.size,o=new Array(s),a=new Array(s),n=0,u=0;for(let l of t.keys())N(l)?a[n++]=l:o[u++]=this.parse(l);for(let l=0;l<n;l++)o[u+l]=this.parse(a[l]);return new z(e,o)}generateProperties(e){let t=Object.keys(e),s=t.length,o=new Array(s),a=new Array(s),n=new Array(s),u=new Array(s),l=0,d=0,c;for(let f of t)c=e[f],N(c)?(n[l]=f,u[l]=c,l++):(o[d]=f,a[d]=this.parse(c),d++);for(let f=0;f<l;f++)o[d+f]=n[f],a[d+f]=this.parse(u[f]);return{k:o,v:a,s}}generateIterableNode(e,t){g(this.ctx.features&512,'Unsupported type "Iterable"');let s=W(t);return new D(e,s?this.generateProperties(s):void 0,this.generateNodeList(Array.from(t)))}generateObjectNode(e,t,s){return Symbol.iterator in t?this.generateIterableNode(e,t):s?new x(e,this.generateProperties(t)):new C(e,this.generateProperties(t))}generateAggregateErrorNode(e,t){let s=_(t),o=s?this.generateProperties(s):void 0;return new U(e,t.message,o,this.parse(t.errors))}generateErrorNode(e,t){let s=_(t),o=s?this.generateProperties(s):void 0;return new B(e,M(t),t.message,o)}parse(e){switch(typeof e){case"boolean":return e?J:G;case"undefined":return Y;case"string":return new m(v(e));case"number":return Object.is(e,-0)?K:Object.is(e,1/0)?Z:Object.is(e,-1/0)?q:new m(e);case"bigint":return g(this.ctx.features&8,'Unsupported type "BigInt"'),new V(e);case"object":{if(!e)return H;let t=w(this.ctx,e,!0);if(this.ctx.markedRefs[t])return new I(t);if(Array.isArray(e))return this.generateArrayNode(t,e);switch(e.constructor){case Date:return new R(t,e);case RegExp:return new k(t,e);case Int8Array:case Int16Array:case Int32Array:case Uint8Array:case Uint16Array:case Uint32Array:case Uint8ClampedArray:case Float32Array:case Float64Array:return g(this.ctx.features&1024,`Unsupported value type "${e.constructor.name}"`),new P(t,e);case BigInt64Array:case BigUint64Array:return g(this.ctx.features&2048,`Unsupported value type "${e.constructor.name}"`),new T(t,e);case Map:return this.generateMapNode(t,e);case Set:return this.generateSetNode(t,e);case Object:return this.generateObjectNode(t,e,!1);case void 0:return this.generateObjectNode(t,e,!0);case AggregateError:return this.ctx.features&1?this.generateAggregateErrorNode(t,e):this.generateErrorNode(t,e);case Error:case EvalError:case RangeError:case ReferenceError:case SyntaxError:case TypeError:case URIError:return this.generateErrorNode(t,e);default:break}if(e instanceof AggregateError&&this.ctx.features&1)return this.generateAggregateErrorNode(t,e);if(e instanceof Error)return this.generateErrorNode(t,e);if(Symbol.iterator in e)return this.generateIterableNode(t,e);throw new Error("Unsupported type")}default:throw new Error("Unsupported type")}}};function te(r,e){let t=new ce(r).parse(e),s=t.t===8||t.t===13;return[t,w(r,e,!1),s]}function fe(r,e,t,s){if(r.vars.length){let o=be(r),a=s;if(o){let u=p(r,e);s.startsWith(`${u}=`)?a=`${s},${o}${u}`:a=`${u}=${s},${o}${u}`}let n=r.vars.length>1?r.vars.join(","):r.vars[0];return r.features&4?(n=r.vars.length>1||r.vars.length===0?`(${n})`:n,`(${n}=>(${a}))()`):`(function(${n}){return ${a}})()`}return t?`(${s})`:s}function Je(r,e){let t=new h(e),[s,o,a]=te(t,r),n=new E(t),u=y(n,s);return fe(n,o,a,u)}async function at(r,e){let t=new h(e),[s,o,a]=await Q(t,r),n=new E(t),u=y(n,s);return fe(n,o,a,u)}function Ge(r){return(0,eval)(r)}function nt(r,e){let t=new h(e),[s,o,a]=te(t,r);return JSON.stringify([s,o,a,t.features,t.markedRefs])}async function it(r,e){let t=new h(e),[s,o,a]=await Q(t,r);return JSON.stringify([s,o,a,t.features,t.markedRefs])}function Ye(r){let e=JSON.parse(r),t=new E({features:e[3],markedRefs:e[4]}),s=y(t,e[0]);return fe(t,e[1],e[2],s)}function lt(r){return Ge(Ye(r))}var ut=Je;export{Ye as compileJSON,ut as default,Ge as deserialize,lt as fromJSON,Je as serialize,at as serializeAsync,nt as toJSON,it as toJSONAsync};
1
+ var oe=Object.defineProperty;var de=(s,e,r)=>e in s?oe(s,e,{enumerable:!0,configurable:!0,writable:!0,value:r}):s[e]=r;var v=(s,e,r)=>(de(s,typeof e!="symbol"?e+"":e,r),r);function ce(s,e){let r=s[0]-e[0];return r===0&&(r=s[1]-e[1]),r===0&&(r=s[2]-e[2]),r}var q={[1]:{es:[2021,0,0],chrome:[85,0,0],edge:[85,0,0],firefox:[79,0,0],opera:[71,0,0],safari:[14,0,0],ios:[14,0,0],samsung:[14,0,0],deno:[1,2,0],node:[15,0,0]},[2]:{es:[6,0,0],chrome:[66,0,0],edge:[14,0,0],firefox:[60,0,0],opera:[53,0,0],safari:[9,0,0],ios:[9,0,0],samsung:[9,0,0],deno:[1,0,0],node:[10,9,0]},[4]:{es:[6,0,0],chrome:[45,0,0],edge:[12,0,0],firefox:[24,0,0],opera:[32,0,0],safari:[10,0,0],ios:[10,0,0],samsung:[5,0,0],deno:[1,0,0],node:[4,0,0]},[8]:{es:[2020,0,0],chrome:[67,0,0],edge:[79,0,0],firefox:[68,0,0],opera:[54,0,0],safari:[14,0,0],ios:[14,0,0],samsung:[9,0,0],deno:[1,0,0],node:[10,4,0]},[16]:{es:[6,0,0],chrome:[38,0,0],edge:[12,0,0],firefox:[13,0,0],opera:[25,0,0],safari:[8,0,0],ios:[8,0,0],samsung:[3,0,0],deno:[1,0,0],node:[0,12,0]},[32]:{es:[6,0,0],chrome:[39,0,0],edge:[12,0,0],firefox:[34,0,0],opera:[26,0,0],safari:[9,0,0],ios:[9,0,0],samsung:[4,0,0],deno:[1,0,0],node:[4,0,0]},[64]:{es:[6,0,0],chrome:[45,0,0],edge:[12,0,0],firefox:[34,0,0],opera:[32,0,0],safari:[9,0,0],ios:[9,0,0],samsung:[5,0,0],deno:[1,0,0],node:[4,0,0]},[128]:{es:[6,0,0],chrome:[32,0,0],edge:[12,0,0],firefox:[29,0,0],opera:[19,0,0],safari:[8,0,0],ios:[8,0,0],samsung:[2,0,0],deno:[1,0,0],node:[0,12,0]},[256]:{es:[6,0,0],chrome:[38,0,0],edge:[12,0,0],firefox:[13,0,0],opera:[25,0,0],safari:[8,0,0],ios:[8,0,0],samsung:[3,0,0],deno:[1,0,0],node:[0,12,0]},[512]:{es:[6,0,0],chrome:[43,0,0],edge:[12,0,0],firefox:[36,0,0],opera:[30,0,0],safari:[10,0,0],ios:[10,0,0],samsung:[4,0,0],deno:[1,0,0],node:[0,12,0]},[1024]:{es:[6,0,0],chrome:[7,0,0],edge:[12,0,0],firefox:[4,0,0],opera:[11,6,0],safari:[5,1,0],ios:[4,2,0],samsung:[1,0,0],deno:[1,0,0],node:[0,10,0]},[2048]:{es:[2020,0,0],chrome:[67,0,0],edge:[79,0,0],firefox:[68,0,0],opera:[54,6,0],safari:[15,1,0],ios:[15,2,0],samsung:[9,0,0],deno:[1,0,0],node:[10,4,0]}},_=["chrome","deno","edge","es","firefox","ios","node","opera","safari","samsung"];function le(s){for(let e=0,r=_.length;e<r;e++){let t=s.substring(0,_[e].length);if(t===_[e])return t}throw new Error(`Invalid target "${s}"`)}function G(s){let e=le(s),r=s.substring(e.length),[t,n="0",a="0"]=r.split(".");return[e,[Number(t),Number(n),Number(a)]]}function fe(s){if(Array.isArray(s)){let e=[];for(let r=0,t=s.length;r<t;r++)e.push(G(s[r]));return e}return[G(s)]}function Y(s){let e=fe(s),r=0;for(let t of Object.keys(q)){let n=q[t],a=!0;for(let[i,d]of e){let o=n[i];a=a&&!!o&&ce(o,d)<=0}a&&(r|=Number(t))}return r}var ee="hjkmoquxzABCDEFGHIJKLNPQRTUVWXYZ$_",Q=ee.length,re="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789$_",X=re.length;function L(s){let e=s%Q,r=ee[e];for(s=(s-e)/Q;s>0;)e=s%X,r+=re[e],s=(s-e)/X;return r}var ue={target:"es2023"};function x(s={}){let e=Object.assign({},ue,s||{});return{markedRefs:new Set,refs:new Map,features:Y(e.target)}}function E(s){return{stack:[],vars:[],assignments:[],validRefs:[],refSize:0,features:s.features,markedRefs:new Set(s.markedRefs)}}function N(s,e){s.markedRefs.add(e)}function ge(s,e){let r=s.validRefs[e];if(r==null){let t=s.refSize++;return s.validRefs[e]=t,t}return r}function u(s,e){let r=ge(s,e);if(s.vars[r])return s.vars[r];let t=L(r);return s.vars[r]=t,t}function h(s,e,r){let t=s.refs.get(e);if(t!=null)return r&&N(s,t),t;let n=s.refs.size;return s.refs.set(e,n),n}function p(s,e){if(!s)throw new Error(e)}function S(s){let e="",r=0;for(let t=0,n=s.length;t<n;t++){let a;switch(s[t]){case'"':a='\\"';break;case"\\":a="\\\\";break;case"<":a="\\x3C";break;case`
2
+ `:a="\\n";break;case"\r":a="\\r";break;case"\u2028":a="\\u2028";break;case"\u2029":a="\\u2029";break;default:continue}e+=s.slice(r,t)+a,r=t+1}return r===0?e=s:e+=s.slice(r),`"${e}"`}function g(s){return{t:0,i:void 0,s,l:void 0,c:void 0,m:void 0,d:void 0,a:void 0,n:void 0}}var I=g("!0"),O=g("!1"),k=g("void 0"),V=g(null),P=g("-0"),Ue=g("1/0"),Me=g("-1/0");function z(s,e){return p(s.features&8,'Unsupported type "BigInt"'),{t:1,i:void 0,s:`${e}n`,l:void 0,c:void 0,m:void 0,d:void 0,a:void 0,n:void 0}}function w(s){return{t:2,i:s,s:void 0,l:void 0,c:void 0,m:void 0,d:void 0,a:void 0,n:void 0}}function j(s,e){return{t:3,i:s,s:e.toISOString(),l:void 0,c:void 0,m:void 0,d:void 0,n:void 0,a:void 0}}function $(s,e){return{t:4,i:s,s:String(e),l:void 0,c:void 0,m:void 0,d:void 0,a:void 0,n:void 0}}function T(s,e,r){let t=r.constructor.name;return p(s.features&1024,`Unsupported value type "${t}"`),{t:14,i:e,s:r.toString(),l:r.byteOffset,c:t,m:void 0,d:void 0,a:void 0,n:void 0}}function C(s,e,r){let t=r.constructor.name;p(s.features&2048,`Unsupported value type "${t}"`);let n="",a=r.length-1;for(let i=0;i<a;i++)n+=`${r[i]}n,`;return n+=`"${r[a]}"`,{t:15,i:e,s:n,l:r.byteOffset,c:t,m:void 0,d:void 0,a:void 0,n:void 0}}function b(s){return s instanceof EvalError?"EvalError":s instanceof RangeError?"RangeError":s instanceof ReferenceError?"ReferenceError":s instanceof SyntaxError?"SyntaxError":s instanceof TypeError?"TypeError":s instanceof URIError?"URIError":"Error"}function A(s){let e,r=b(s);s.name!==r?e={name:s.name}:s.constructor.name!==r&&(e={name:s.constructor.name});let t=Object.getOwnPropertyNames(s);for(let n of t)n!=="name"&&n!=="message"&&(e=e||{},e[n]=s[n]);return e}function B(s){let e=Object.getOwnPropertyNames(s);if(e.length){let r={};for(let t of e)r[t]=s[t];return r}}function m(s){if(!s||typeof s!="object"||Array.isArray(s))return!1;switch(s.constructor){case Map:case Set:case Int8Array:case Int16Array:case Int32Array:case Uint8Array:case Uint16Array:case Uint32Array:case Uint8ClampedArray:case Float32Array:case Float64Array:case BigInt64Array:case BigUint64Array:return!1;default:break}return Symbol.iterator in s}var J=class{constructor(e){v(this,"ctx");this.ctx=e}async generateNodeList(e){let r=e.length,t=new Array(r),n=new Array(r),a;for(let i=0;i<r;i++)i in e&&(a=e[i],m(a)?n[i]=a:t[i]=await this.parse(a));for(let i=0;i<r;i++)i in n&&(t[i]=await this.parse(n[i]));return t}async generateArrayNode(e,r){return{t:7,i:e,s:void 0,l:void 0,c:void 0,m:void 0,d:void 0,a:await this.generateNodeList(r),n:void 0}}async generateMapNode(e,r){p(this.ctx.features&16,'Unsupported type "Map"');let t=r.size,n=new Array(t),a=new Array(t),i=new Array(t),d=new Array(t),o=0,f=0;for(let[c,l]of r.entries())m(c)||m(l)?(i[o]=c,d[o]=l,o++):(n[f]=await this.parse(c),a[f]=await this.parse(l),f++);for(let c=0;c<o;c++)n[f+c]=await this.parse(i[c]),a[f+c]=await this.parse(d[c]);return{t:6,i:e,s:void 0,l:void 0,c:void 0,m:void 0,d:{k:n,v:a,s:t},a:void 0,n:void 0}}async generateSetNode(e,r){p(this.ctx.features&256,'Unsupported type "Set"');let t=r.size,n=new Array(t),a=new Array(t),i=0,d=0;for(let o of r.keys())m(o)?a[i++]=o:n[d++]=await this.parse(o);for(let o=0;o<i;o++)n[d+o]=await this.parse(a[o]);return{t:5,i:e,s:void 0,l:void 0,c:void 0,m:void 0,d:void 0,a:n,n:void 0}}async generateProperties(e){let r=Object.keys(e),t=r.length,n=new Array(t),a=new Array(t),i=new Array(t),d=new Array(t),o=0,f=0,c;for(let l of r)c=e[l],m(c)?(i[o]=l,d[o]=c,o++):(n[f]=l,a[f]=await this.parse(c),f++);for(let l=0;l<o;l++)n[f+l]=i[l],a[f+l]=await this.parse(d[l]);return{k:n,v:a,s:t}}async generateIterableNode(e,r){p(this.ctx.features&512,'Unsupported type "Iterable"');let t=B(r);return{t:13,i:e,s:void 0,l:void 0,c:void 0,m:void 0,d:t?await this.generateProperties(t):void 0,a:await this.generateNodeList(Array.from(r)),n:void 0}}async generatePromiseNode(e,r){return p(this.ctx.features&128,'Unsupported type "Promise"'),r.then(async t=>({t:10,i:e,s:void 0,l:void 0,c:void 0,m:void 0,d:void 0,a:void 0,n:await this.parse(t)}))}async generateObjectNode(e,r,t){return Symbol.iterator in r?this.generateIterableNode(e,r):"then"in r&&typeof r.then=="function"?this.generatePromiseNode(e,r):{t:t?9:8,i:e,s:void 0,l:void 0,c:void 0,m:void 0,d:await this.generateProperties(r),a:void 0,n:void 0}}async generateAggregateErrorNode(e,r){let t=A(r),n=t?await this.generateProperties(t):void 0;return{t:12,i:e,s:void 0,l:void 0,c:void 0,m:r.message,d:n,a:void 0,n:await this.parse(r.errors)}}async generateErrorNode(e,r){let t=A(r),n=t?await this.generateProperties(t):void 0;return{t:11,i:e,s:void 0,l:void 0,c:b(r),m:r.message,d:n,a:void 0,n:void 0}}async parse(e){switch(typeof e){case"boolean":return e?I:O;case"undefined":return k;case"string":return g(S(e));case"number":return Object.is(e,-0)?P:Object.is(e,1/0)?g("1/0"):Object.is(e,-1/0)?g("-1/0"):g(e);case"bigint":return z(this.ctx,e);case"object":{if(!e)return V;let r=h(this.ctx,e,!0);if(this.ctx.markedRefs.has(r))return w(r);if(Array.isArray(e))return this.generateArrayNode(r,e);switch(e.constructor){case Date:return j(r,e);case RegExp:return $(r,e);case Promise:return this.generatePromiseNode(r,e);case Int8Array:case Int16Array:case Int32Array:case Uint8Array:case Uint16Array:case Uint32Array:case Uint8ClampedArray:case Float32Array:case Float64Array:return T(this.ctx,r,e);case BigInt64Array:case BigUint64Array:return C(this.ctx,r,e);case Map:return this.generateMapNode(r,e);case Set:return this.generateSetNode(r,e);case Object:return this.generateObjectNode(r,e,!1);case void 0:return this.generateObjectNode(r,e,!0);case AggregateError:return this.ctx.features&1?this.generateAggregateErrorNode(r,e):this.generateErrorNode(r,e);case Error:case EvalError:case RangeError:case ReferenceError:case SyntaxError:case TypeError:case URIError:return this.generateErrorNode(r,e);default:break}if(e instanceof AggregateError&&this.ctx.features&1)return this.generateAggregateErrorNode(r,e);if(e instanceof Error)return this.generateErrorNode(r,e);if(e instanceof Promise)return this.generatePromiseNode(r,e);if(Symbol.iterator in e)return this.generateIterableNode(r,e);if("then"in e&&typeof e.then=="function")return this.generatePromiseNode(r,e);throw new Error("Unsupported type")}default:throw new Error("Unsupported type")}}};async function U(s,e){let r=await new J(s).parse(e),t=r.t===8||r.t===13;return[r,h(s,e,!1),t]}function M(s){switch(s.t){case"index":return`${s.s}=${s.v}`;case"map":return`${s.s}.set(${s.k},${s.v})`;case"set":return`${s.s}.add(${s.v})`;default:return""}}function pe(s){let e=[],r=s[0],t=r;for(let n=1,a=s.length;n<a;n++){let i=s[n];i.t===t.t?i.t==="index"&&i.v===t.v?r={t:"index",s:i.s,k:void 0,v:M(r)}:i.t==="map"&&i.s===t.s?r={t:"map",s:M(r),k:i.k,v:i.v}:i.t==="set"&&i.s===t.s?r={t:"set",s:M(r),k:void 0,v:i.v}:(e.push(r),r=i):(e.push(r),r=i),t=i}return e.push(r),e}function ne(s){if(s.length){let e="",r=pe(s);for(let t=0,n=r.length;t<n;t++)e+=`${M(r[t])},`;return e}}function ie(s){return ne(s.assignments)}function ae(s,e,r){s.assignments.push({t:"index",s:e,k:void 0,v:r})}function me(s,e,r){N(s,e),s.assignments.push({t:"set",s:u(s,e),k:void 0,v:r})}function W(s,e,r,t){N(s,e),s.assignments.push({t:"map",s:u(s,e),k:r,v:t})}function H(s,e,r,t){N(s,e),ae(s,`${u(s,e)}[${r}]`,t)}function te(s,e,r,t){N(s,e),ae(s,`${u(s,e)}.${r}`,t)}var se=/^([$A-Z_][0-9A-Z_$]*)$/i,y=class{constructor(e){v(this,"ctx");this.ctx=e}assignRef(e,r){return this.ctx.markedRefs.has(e)?`${u(this.ctx,e)}=${r}`:r}isReferenceInStack(e){return e.t===2&&this.ctx.stack.includes(e.i)}serializeNodeList(e){let r=e.a.length,t="";for(let n=0;n<r;n++){let a=e.a[n];a?this.isReferenceInStack(a)?(H(this.ctx,e.i,n,u(this.ctx,a.i)),t+=","):(t+=this.serialize(a),n<r-1&&(t+=",")):t+=","}return`[${t}]`}serializeArray(e){this.ctx.stack.push(e.i);let r=this.serializeNodeList(e);return this.ctx.stack.pop(),this.assignRef(e.i,r)}serializeObject(e,r){if(r.s===0)return"{}";let t="";this.ctx.stack.push(e);for(let n=0;n<r.s;n++){let a=r.k[n],i=r.v[n],d=Number(a),o=d>=0||se.test(a);if(this.isReferenceInStack(i)){let f=u(this.ctx,i.i);o&&Number.isNaN(d)?te(this.ctx,e,a,f):H(this.ctx,e,o?a:S(a),f)}else t+=`${o?a:S(a)}:${this.serialize(i)},`}return this.ctx.stack.pop(),`{${t.substring(0,t.length-1)}}`}serializeWithObjectAssign(e,r,t){let n=this.serializeObject(r,e);return n!=="{}"?`Object.assign(${t},${n})`:t}serializeAssignments(e,r){this.ctx.stack.push(e);let t=[];for(let n=0;n<r.s;n++){let a=this.ctx.stack;this.ctx.stack=[];let i=this.serialize(r.v[n]);this.ctx.stack=a;let d=r.k[n],o=Number(d),f=this.ctx.assignments;this.ctx.assignments=t;let c=o>=0||se.test(d);c&&Number.isNaN(o)?te(this.ctx,e,d,i):H(this.ctx,e,c?d:S(d),i),this.ctx.assignments=f}return this.ctx.stack.pop(),ne(t)}serializeNullConstructor(e){let r="Object.create(null)";if(this.ctx.features&64)r=this.serializeWithObjectAssign(e.d,e.i,r);else{N(this.ctx,e.i);let t=this.serializeAssignments(e.i,e.d);if(t){let n=u(this.ctx,e.i);return`(${this.assignRef(e.i,r)},${t}${n})`}}return this.assignRef(e.i,r)}serializeSet(e){let r="new Set",t=e.a.length;if(t){let n="";this.ctx.stack.push(e.i);for(let a=0;a<t;a++){let i=e.a[a];this.isReferenceInStack(i)?me(this.ctx,e.i,u(this.ctx,i.i)):n+=`${this.serialize(i)},`}this.ctx.stack.pop(),n&&(r+=`([${n.substring(0,n.length-1)}])`)}return this.assignRef(e.i,r)}serializeMap(e){let r="new Map";if(e.d.s){let t="";this.ctx.stack.push(e.i);for(let n=0;n<e.d.s;n++){let a=e.d.k[n],i=e.d.v[n];if(this.isReferenceInStack(a)){let d=u(this.ctx,a.i);if(this.isReferenceInStack(i)){let o=u(this.ctx,i.i);W(this.ctx,e.i,d,o)}else{let o=this.ctx.stack;this.ctx.stack=[],W(this.ctx,e.i,d,this.serialize(i)),this.ctx.stack=o}}else if(this.isReferenceInStack(i)){let d=u(this.ctx,i.i),o=this.ctx.stack;this.ctx.stack=[],W(this.ctx,e.i,this.serialize(a),d),this.ctx.stack=o}else t+=`[${this.serialize(a)},${this.serialize(i)}],`}this.ctx.stack.pop(),t&&(r+=`([${t.substring(0,t.length-1)}])`)}return this.assignRef(e.i,r)}serializeAggregateError(e){this.ctx.stack.push(e.i);let r=`new AggregateError(${this.serialize(e.n)},${S(e.m)})`;if(this.ctx.stack.pop(),e.d)if(this.ctx.features&64)r=this.serializeWithObjectAssign(e.d,e.i,r);else{N(this.ctx,e.i);let t=this.serializeAssignments(e.i,e.d);if(t){let n=u(this.ctx,e.i);return`(${this.assignRef(e.i,r)},${t}${n})`}}return this.assignRef(e.i,r)}serializeError(e){let r=`new ${e.c}(${S(e.m)})`;if(e.d)if(this.ctx.features&64)r=this.serializeWithObjectAssign(e.d,e.i,r);else{N(this.ctx,e.i);let t=this.serializeAssignments(e.i,e.d);if(t){let n=u(this.ctx,e.i);return`(${this.assignRef(e.i,r)},${t}${n})`}}return this.assignRef(e.i,r)}serializePromise(e){let r;if(this.isReferenceInStack(e.n))r=`Promise.resolve().then(()=>${u(this.ctx,e.n.i)})`;else{this.ctx.stack.push(e.i);let t=this.serialize(e.n);this.ctx.stack.pop(),r=`Promise.resolve(${t})`}return this.assignRef(e.i,r)}serializeTypedArray(e){let r=`[${e.s}]`;return e.l!==0&&(r+=`,${e.l}`),this.assignRef(e.i,`new ${e.c}(${r})`)}serializeIterable(e){let r=this.ctx.stack;this.ctx.stack=[];let t=this.serializeNodeList(e);this.ctx.stack=r;let n;if(this.ctx.features&2?n=`${t}.values()`:n=`${t}[Symbol.iterator]()`,this.ctx.features&4?n=`{[Symbol.iterator]:()=>${n}}`:this.ctx.features&32?n=`{[Symbol.iterator](){return ${n}}}`:n=`{[Symbol.iterator]:function(){return ${n}}}`,e.d)if(this.ctx.features&64)n=this.serializeWithObjectAssign(e.d,e.i,n);else{N(this.ctx,e.i);let a=this.serializeAssignments(e.i,e.d);if(a){let i=u(this.ctx,e.i);return`(${this.assignRef(e.i,n)},${a}${i})`}}return this.assignRef(e.i,n)}serialize(e){switch(e.t){case 0:return String(e.s);case 1:return e.s;case 2:return u(this.ctx,e.i);case 7:return this.serializeArray(e);case 8:return this.assignRef(e.i,this.serializeObject(e.i,e.d));case 9:return this.serializeNullConstructor(e);case 3:return this.assignRef(e.i,`new Date("${e.s}")`);case 4:return this.assignRef(e.i,e.s);case 5:return this.serializeSet(e);case 6:return this.serializeMap(e);case 15:case 14:return this.serializeTypedArray(e);case 12:return this.serializeAggregateError(e);case 11:return this.serializeError(e);case 13:return this.serializeIterable(e);case 10:return this.serializePromise(e);default:throw new Error("Unsupported type")}}};var K=class{constructor(e){v(this,"ctx");this.ctx=e}generateNodeList(e){let r=e.length,t=new Array(r),n=new Array(r),a;for(let i=0;i<r;i++)i in e&&(a=e[i],m(a)?n[i]=a:t[i]=this.parse(a));for(let i=0;i<r;i++)i in n&&(t[i]=this.parse(n[i]));return t}generateArrayNode(e,r){return{t:7,i:e,s:void 0,l:void 0,c:void 0,m:void 0,d:void 0,a:this.generateNodeList(r),n:void 0}}generateMapNode(e,r){p(this.ctx.features&16,'Unsupported type "Map"');let t=r.size,n=new Array(t),a=new Array(t),i=new Array(t),d=new Array(t),o=0,f=0;for(let[c,l]of r.entries())m(c)||m(l)?(i[o]=c,d[o]=l,o++):(n[f]=this.parse(c),a[f]=this.parse(l),f++);for(let c=0;c<o;c++)n[f+c]=this.parse(i[c]),a[f+c]=this.parse(d[c]);return{t:6,i:e,s:void 0,l:void 0,c:void 0,m:void 0,d:{k:n,v:a,s:t},a:void 0,n:void 0}}generateSetNode(e,r){p(this.ctx.features&256,'Unsupported type "Set"');let t=r.size,n=new Array(t),a=new Array(t),i=0,d=0;for(let o of r.keys())m(o)?a[i++]=o:n[d++]=this.parse(o);for(let o=0;o<i;o++)n[d+o]=this.parse(a[o]);return{t:5,i:e,s:void 0,l:void 0,c:void 0,m:void 0,d:void 0,a:n,n:void 0}}generateProperties(e){let r=Object.keys(e),t=r.length,n=new Array(t),a=new Array(t),i=new Array(t),d=new Array(t),o=0,f=0,c;for(let l of r)c=e[l],m(c)?(i[o]=l,d[o]=c,o++):(n[f]=l,a[f]=this.parse(c),f++);for(let l=0;l<o;l++)n[f+l]=i[l],a[f+l]=this.parse(d[l]);return{k:n,v:a,s:t}}generateIterableNode(e,r){p(this.ctx.features&512,'Unsupported type "Iterable"');let t=B(r);return{t:13,i:e,s:void 0,l:void 0,c:void 0,m:void 0,d:t?this.generateProperties(t):void 0,a:this.generateNodeList(Array.from(r)),n:void 0}}generateObjectNode(e,r,t){return Symbol.iterator in r?this.generateIterableNode(e,r):{t:t?9:8,i:e,s:void 0,l:void 0,c:void 0,m:void 0,d:this.generateProperties(r),a:void 0,n:void 0}}generateAggregateErrorNode(e,r){let t=A(r),n=t?this.generateProperties(t):void 0;return{t:12,i:e,s:void 0,l:void 0,c:void 0,m:r.message,d:n,a:void 0,n:this.parse(r.errors)}}generateErrorNode(e,r){let t=A(r),n=t?this.generateProperties(t):void 0;return{t:11,i:e,s:void 0,l:void 0,c:b(r),m:r.message,d:n,a:void 0,n:void 0}}parse(e){switch(typeof e){case"boolean":return e?I:O;case"undefined":return k;case"string":return g(S(e));case"number":return Object.is(e,-0)?P:Object.is(e,1/0)?g("1/0"):Object.is(e,-1/0)?g("-1/0"):g(e);case"bigint":return z(this.ctx,e);case"object":{if(!e)return V;let r=h(this.ctx,e,!0);if(this.ctx.markedRefs.has(r))return w(r);if(Array.isArray(e))return this.generateArrayNode(r,e);switch(e.constructor){case Date:return j(r,e);case RegExp:return $(r,e);case Int8Array:case Int16Array:case Int32Array:case Uint8Array:case Uint16Array:case Uint32Array:case Uint8ClampedArray:case Float32Array:case Float64Array:return T(this.ctx,r,e);case BigInt64Array:case BigUint64Array:return C(this.ctx,r,e);case Map:return this.generateMapNode(r,e);case Set:return this.generateSetNode(r,e);case Object:return this.generateObjectNode(r,e,!1);case void 0:return this.generateObjectNode(r,e,!0);case AggregateError:return this.ctx.features&1?this.generateAggregateErrorNode(r,e):this.generateErrorNode(r,e);case Error:case EvalError:case RangeError:case ReferenceError:case SyntaxError:case TypeError:case URIError:return this.generateErrorNode(r,e);default:break}if(e instanceof AggregateError&&this.ctx.features&1)return this.generateAggregateErrorNode(r,e);if(e instanceof Error)return this.generateErrorNode(r,e);if(Symbol.iterator in e)return this.generateIterableNode(r,e);throw new Error("Unsupported type")}default:throw new Error("Unsupported type")}}};function D(s,e){let r=new K(s).parse(e),t=r.t===8||r.t===13;return[r,h(s,e,!1),t]}function Z(s,e,r,t){if(s.vars.length){let n=ie(s),a=t;if(n){let d=u(s,e);t.startsWith(`${d}=`)?a=`${t},${n}${d}`:a=`${d}=${t},${n}${d}`}let i=s.vars.length>1?s.vars.join(","):s.vars[0];return s.features&4?(i=s.vars.length>1||s.vars.length===0?`(${i})`:i,`(${i}=>(${a}))()`):`(function(${i}){return ${a}})()`}return r?`(${t})`:t}function Se(s,e){let r=x(e),[t,n,a]=D(r,s),i=E(r),d=new y(i).serialize(t);return Z(i,n,a,d)}async function st(s,e){let r=x(e),[t,n,a]=await U(r,s),i=E(r),d=new y(i).serialize(t);return Z(i,n,a,d)}function Ne(s){return(0,eval)(s)}function nt(s,e){let r=x(e),[t,n,a]=D(r,s);return JSON.stringify({t,r:n,i:a,f:r.features,m:Array.from(r.markedRefs)})}async function it(s,e){let r=x(e),[t,n,a]=await U(r,s);return JSON.stringify({t,r:n,i:a,f:r.features,m:Array.from(r.markedRefs)})}function ye(s){let e=JSON.parse(s),r=E({features:e.f,markedRefs:e.m}),t=new y(r).serialize(e.t);return Z(r,e.r,e.i,t)}function at(s){return Ne(ye(s))}var ot=Se;export{ye as compileJSON,ot as default,Ne as deserialize,at as fromJSON,Se as serialize,st as serializeAsync,nt as toJSON,it as toJSONAsync};
@@ -1,43 +1,45 @@
1
1
  interface IndexAssignment {
2
- type: 'index';
3
- source: string;
4
- value: string;
2
+ t: 'index';
3
+ s: string;
4
+ k: undefined;
5
+ v: string;
5
6
  }
6
7
  interface MapAssignment {
7
- type: 'map';
8
- source: string;
9
- key: string;
10
- value: string;
8
+ t: 'map';
9
+ s: string;
10
+ k: string;
11
+ v: string;
11
12
  }
12
13
  interface SetAssignment {
13
- type: 'set';
14
- source: string;
15
- value: string;
14
+ t: 'set';
15
+ s: string;
16
+ k: undefined;
17
+ v: string;
16
18
  }
17
19
  export type Assignment = IndexAssignment | MapAssignment | SetAssignment;
18
- export interface Options {
19
- target: string | string[];
20
- }
21
- export declare class ParserContext {
20
+ export interface ParserContext {
22
21
  refs: Map<unknown, number>;
23
- markedRefs: Record<number, number>;
24
- features: number;
25
- constructor(options?: Partial<Options>);
26
- }
27
- export interface SerializationOptions {
28
- markedRefs: Record<number, number>;
22
+ markedRefs: Set<number>;
29
23
  features: number;
30
24
  }
31
- export declare class SerializationContext {
25
+ export interface SerializationContext {
32
26
  stack: number[];
33
27
  validRefs: number[];
34
28
  refSize: number;
29
+ markedRefs: Set<number>;
35
30
  vars: string[];
36
31
  assignments: Assignment[];
37
32
  features: number;
38
- markedRefs: Record<number, number>;
39
- constructor(options: SerializationOptions);
40
33
  }
34
+ export interface Options {
35
+ target: string | string[];
36
+ }
37
+ export declare function createParserContext(options?: Partial<Options>): ParserContext;
38
+ export interface SerializationOptions {
39
+ markedRefs: number[] | Set<number>;
40
+ features: number;
41
+ }
42
+ export declare function createSerializationContext(options: SerializationOptions): SerializationContext;
41
43
  /**
42
44
  * Increments the number of references the referenced value has
43
45
  */
@@ -1,4 +1,7 @@
1
- import { SerovalPrimitiveNode } from './types';
1
+ import { ParserContext } from '../context';
2
+ import { BigIntTypedArrayValue, TypedArrayValue } from '../types';
3
+ import { SerovalBigIntNode, SerovalBigIntTypedArrayNode, SerovalDateNode, SerovalPrimitiveNode, SerovalReferenceNode, SerovalRegExpNode, SerovalTypedArrayNode } from './types';
4
+ export declare function createPrimitiveNode(value: string | number | null): SerovalPrimitiveNode;
2
5
  export declare const TRUE_NODE: SerovalPrimitiveNode;
3
6
  export declare const FALSE_NODE: SerovalPrimitiveNode;
4
7
  export declare const UNDEFINED_NODE: SerovalPrimitiveNode;
@@ -6,3 +9,9 @@ export declare const NULL_NODE: SerovalPrimitiveNode;
6
9
  export declare const NEG_ZERO_NODE: SerovalPrimitiveNode;
7
10
  export declare const INFINITY_NODE: SerovalPrimitiveNode;
8
11
  export declare const NEG_INFINITY_NODE: SerovalPrimitiveNode;
12
+ export declare function createBigIntNode(ctx: ParserContext, current: bigint): SerovalBigIntNode;
13
+ export declare function createReferenceNode(id: number): SerovalReferenceNode;
14
+ export declare function createDateNode(id: number, current: Date): SerovalDateNode;
15
+ export declare function createRegExpNode(id: number, current: RegExp): SerovalRegExpNode;
16
+ export declare function createTypedArrayNode(ctx: ParserContext, id: number, current: TypedArrayValue): SerovalTypedArrayNode;
17
+ export declare function createBigIntTypedArrayNode(ctx: ParserContext, id: number, current: BigIntTypedArrayValue): SerovalBigIntTypedArrayNode;
@@ -1,4 +1,23 @@
1
1
  import { SerializationContext } from '../context';
2
- import { SerovalNode } from './types';
2
+ import { SerovalAggregateErrorNode, SerovalArrayNode, SerovalBigIntTypedArrayNode, SerovalErrorNode, SerovalIterableNode, SerovalMapNode, SerovalNode, SerovalNullConstructorNode, SerovalObjectRecordNode, SerovalPromiseNode, SerovalReferenceNode, SerovalSetNode, SerovalTypedArrayNode } from './types';
3
3
  export declare function resolvePatches(ctx: SerializationContext): string | undefined;
4
- export default function serializeTree(ctx: SerializationContext, node: SerovalNode): string;
4
+ export default class SerovalSerializer {
5
+ ctx: SerializationContext;
6
+ constructor(ctx: SerializationContext);
7
+ assignRef(index: number, value: string): string;
8
+ isReferenceInStack(node: SerovalNode): node is SerovalReferenceNode;
9
+ serializeNodeList(node: SerovalArrayNode | SerovalIterableNode): string;
10
+ serializeArray(node: SerovalArrayNode): string;
11
+ serializeObject(sourceID: number, node: SerovalObjectRecordNode): string;
12
+ serializeWithObjectAssign(value: SerovalObjectRecordNode, id: number, serialized: string): string;
13
+ serializeAssignments(sourceID: number, node: SerovalObjectRecordNode): string | undefined;
14
+ serializeNullConstructor(node: SerovalNullConstructorNode): string;
15
+ serializeSet(node: SerovalSetNode): string;
16
+ serializeMap(node: SerovalMapNode): string;
17
+ serializeAggregateError(node: SerovalAggregateErrorNode): string;
18
+ serializeError(node: SerovalErrorNode): string;
19
+ serializePromise(node: SerovalPromiseNode): string;
20
+ serializeTypedArray(node: SerovalTypedArrayNode | SerovalBigIntTypedArrayNode): string;
21
+ serializeIterable(node: SerovalIterableNode): string;
22
+ serialize(node: SerovalNode): string;
23
+ }
@@ -1,8 +1,5 @@
1
- import { SerializationContext } from '../context';
2
1
  import { AsyncServerValue, ErrorValue } from '../types';
3
- import { SerovalNode, SerovalReferenceNode } from './types';
4
2
  export declare function getErrorConstructor(error: ErrorValue): "EvalError" | "RangeError" | "ReferenceError" | "SyntaxError" | "TypeError" | "URIError" | "Error";
5
3
  export declare function getErrorOptions(error: Error): Record<string, any> | undefined;
6
4
  export declare function getIterableOptions(obj: Iterable<any>): Record<string, unknown> | undefined;
7
- export declare function isReferenceInStack(ctx: SerializationContext, node: SerovalNode): node is SerovalReferenceNode;
8
5
  export declare function isIterable(value: unknown): value is Iterable<AsyncServerValue>;
@@ -1,4 +1,4 @@
1
- import { BigIntTypedArrayValue, PrimitiveValue, TypedArrayValue } from '../types';
1
+ import { PrimitiveValue } from '../types';
2
2
  export declare const enum SerovalNodeType {
3
3
  Primitive = 0,
4
4
  BigInt = 1,
@@ -18,130 +18,111 @@ export declare const enum SerovalNodeType {
18
18
  BigIntTypedArray = 15
19
19
  }
20
20
  export interface SerovalBaseNode {
21
- t?: SerovalNodeType;
22
- s?: PrimitiveValue;
23
- i?: number;
24
- l?: number;
25
- c?: string;
26
- d?: SerovalDictionaryNode;
27
- m?: string;
28
- n?: SerovalNode;
29
- a?: SerovalNode[];
30
- }
31
- export declare class SerovalObjectRecordNode {
21
+ t: SerovalNodeType;
22
+ s: PrimitiveValue | undefined;
23
+ i: number | undefined;
24
+ l: number | undefined;
25
+ c: string | undefined;
26
+ d: SerovalDictionaryNode | undefined;
27
+ m: string | undefined;
28
+ n: SerovalNode | undefined;
29
+ a: SerovalNode[] | undefined;
30
+ }
31
+ export interface SerovalObjectRecordNode {
32
32
  k: string[];
33
33
  v: SerovalNode[];
34
34
  s: number;
35
- constructor(k: string[], v: SerovalNode[], s: number);
36
35
  }
37
- export declare class SerovalMapRecordNode {
36
+ export interface SerovalMapRecordNode {
38
37
  k: SerovalNode[];
39
38
  v: SerovalNode[];
40
39
  s: number;
41
- constructor(k: SerovalNode[], v: SerovalNode[], s: number);
42
40
  }
43
41
  export type SerovalDictionaryNode = SerovalObjectRecordNode | SerovalMapRecordNode;
44
- export declare class SerovalPrimitiveNode implements SerovalBaseNode {
42
+ export interface SerovalPrimitiveNode extends SerovalBaseNode {
45
43
  t: SerovalNodeType.Primitive;
46
- s: string | number | null;
47
- constructor(current: string | number | null);
48
44
  }
49
- export declare class SerovalReferenceNode implements SerovalBaseNode {
45
+ export interface SerovalReferenceNode extends SerovalBaseNode {
50
46
  t: SerovalNodeType.Reference;
51
47
  i: number;
52
- constructor(id: number);
53
48
  }
54
- export declare class SerovalBigIntNode implements SerovalBaseNode {
49
+ export interface SerovalBigIntNode extends SerovalBaseNode {
55
50
  t: SerovalNodeType.BigInt;
56
51
  s: string;
57
- constructor(current: bigint);
58
52
  }
59
- export declare class SerovalDateNode implements SerovalBaseNode {
53
+ export interface SerovalDateNode extends SerovalBaseNode {
60
54
  t: SerovalNodeType.Date;
61
55
  i: number;
62
56
  s: string;
63
- constructor(id: number, current: Date);
64
57
  }
65
- export declare class SerovalRegExpNode implements SerovalBaseNode {
58
+ export interface SerovalRegExpNode extends SerovalBaseNode {
66
59
  t: SerovalNodeType.RegExp;
67
60
  i: number;
68
61
  s: string;
69
- constructor(id: number, current: RegExp);
70
62
  }
71
- export declare class SerovalTypedArrayNode implements SerovalBaseNode {
63
+ export interface SerovalTypedArrayNode extends SerovalBaseNode {
72
64
  t: SerovalNodeType.TypedArray;
73
65
  i: number;
74
66
  s: string;
75
67
  l: number;
76
68
  c: string;
77
- constructor(id: number, current: TypedArrayValue);
78
69
  }
79
- export declare class SerovalBigIntTypedArrayNode implements SerovalBaseNode {
70
+ export interface SerovalBigIntTypedArrayNode extends SerovalBaseNode {
80
71
  t: SerovalNodeType.BigIntTypedArray;
81
72
  i: number;
82
73
  s: string;
83
74
  l: number;
84
75
  c: string;
85
- constructor(id: number, current: BigIntTypedArrayValue);
86
76
  }
87
77
  export type SerovalSemiPrimitiveNode = SerovalBigIntNode | SerovalDateNode | SerovalRegExpNode | SerovalTypedArrayNode | SerovalBigIntTypedArrayNode;
88
- export declare class SerovalSetNode implements SerovalBaseNode {
78
+ export interface SerovalSetNode extends SerovalBaseNode {
89
79
  t: SerovalNodeType.Set;
90
- i: number;
91
80
  a: SerovalNode[];
92
- constructor(id: number, a: SerovalNode[]);
81
+ i: number;
93
82
  }
94
- export declare class SerovalMapNode implements SerovalBaseNode {
83
+ export interface SerovalMapNode extends SerovalBaseNode {
95
84
  t: SerovalNodeType.Map;
96
- i: number;
97
85
  d: SerovalMapRecordNode;
98
- constructor(id: number, d: SerovalMapRecordNode);
86
+ i: number;
99
87
  }
100
- export declare class SerovalArrayNode implements SerovalBaseNode {
88
+ export interface SerovalArrayNode extends SerovalBaseNode {
101
89
  t: SerovalNodeType.Array;
102
- i: number;
103
90
  a: SerovalNode[];
104
- constructor(id: number, a: SerovalNode[]);
91
+ i: number;
105
92
  }
106
- export declare class SerovalObjectNode implements SerovalBaseNode {
93
+ export interface SerovalObjectNode extends SerovalBaseNode {
107
94
  t: SerovalNodeType.Object;
108
- i: number;
109
95
  d: SerovalObjectRecordNode;
110
- constructor(id: number, d: SerovalObjectRecordNode);
96
+ i: number;
111
97
  }
112
- export declare class SerovalNullConstructorNode implements SerovalBaseNode {
98
+ export interface SerovalNullConstructorNode extends SerovalBaseNode {
113
99
  t: SerovalNodeType.NullConstructor;
114
- i: number;
115
100
  d: SerovalObjectRecordNode;
116
- constructor(id: number, d: SerovalObjectRecordNode);
101
+ i: number;
117
102
  }
118
- export declare class SerovalPromiseNode implements SerovalBaseNode {
103
+ export interface SerovalPromiseNode extends SerovalBaseNode {
119
104
  t: SerovalNodeType.Promise;
120
- i: number;
121
105
  n: SerovalNode;
122
- constructor(id: number, n: SerovalNode);
106
+ i: number;
123
107
  }
124
- export declare class SerovalErrorNode implements SerovalBaseNode {
108
+ export interface SerovalErrorNode extends SerovalBaseNode {
125
109
  t: SerovalNodeType.Error;
126
- i: number;
127
110
  c: string;
128
111
  m: string;
129
112
  d: SerovalObjectRecordNode | undefined;
130
- constructor(id: number, c: string, m: string, d: SerovalObjectRecordNode | undefined);
113
+ i: number;
131
114
  }
132
- export declare class SerovalAggregateErrorNode implements SerovalBaseNode {
115
+ export interface SerovalAggregateErrorNode extends SerovalBaseNode {
133
116
  t: SerovalNodeType.AggregateError;
134
- i: number;
135
117
  m: string;
136
118
  d: SerovalObjectRecordNode | undefined;
137
119
  n: SerovalNode;
138
- constructor(id: number, m: string, d: SerovalObjectRecordNode | undefined, n: SerovalNode);
120
+ i: number;
139
121
  }
140
- export declare class SerovalIterableNode implements SerovalBaseNode {
122
+ export interface SerovalIterableNode extends SerovalBaseNode {
141
123
  t: SerovalNodeType.Iterable;
142
- i: number;
143
124
  d: SerovalObjectRecordNode | undefined;
144
125
  a: SerovalNode[];
145
- constructor(id: number, d: SerovalObjectRecordNode | undefined, a: SerovalNode[]);
126
+ i: number;
146
127
  }
147
128
  export type SerovalNode = SerovalPrimitiveNode | SerovalReferenceNode | SerovalSemiPrimitiveNode | SerovalSetNode | SerovalMapNode | SerovalArrayNode | SerovalObjectNode | SerovalNullConstructorNode | SerovalPromiseNode | SerovalErrorNode | SerovalAggregateErrorNode | SerovalIterableNode;
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "seroval",
3
3
  "type": "module",
4
- "version": "0.4.0-alpha.13",
4
+ "version": "0.4.0-alpha.14",
5
5
  "files": [
6
6
  "dist",
7
7
  "src"
@@ -64,5 +64,5 @@
64
64
  "typesVersions": {
65
65
  "*": {}
66
66
  },
67
- "gitHead": "3f71e898ce27170bade38120eddc9afe96390498"
67
+ "gitHead": "7a287f3985c45ba331913f7633ca1ebf31c502ac"
68
68
  }
package/src/context.ts CHANGED
@@ -1,25 +1,25 @@
1
- /* eslint-disable prefer-object-spread */
2
- /* eslint-disable max-classes-per-file */
3
1
  import { parseTargets } from './compat';
4
2
  import getIdentifier from './get-identifier';
5
3
 
6
4
  interface IndexAssignment {
7
- type: 'index';
8
- source: string;
9
- value: string;
5
+ t: 'index';
6
+ s: string;
7
+ k: undefined;
8
+ v: string;
10
9
  }
11
10
 
12
11
  interface MapAssignment {
13
- type: 'map';
14
- source: string;
15
- key: string;
16
- value: string;
12
+ t: 'map';
13
+ s: string;
14
+ k: string;
15
+ v: string;
17
16
  }
18
17
 
19
18
  interface SetAssignment {
20
- type: 'set';
21
- source: string;
22
- value: string;
19
+ t: 'set';
20
+ s: string;
21
+ k: undefined;
22
+ v: string;
23
23
  }
24
24
 
25
25
  // Array of assignments to be done (used for recursion)
@@ -28,6 +28,27 @@ export type Assignment =
28
28
  | MapAssignment
29
29
  | SetAssignment;
30
30
 
31
+ export interface ParserContext {
32
+ refs: Map<unknown, number>;
33
+ markedRefs: Set<number>;
34
+ features: number;
35
+ }
36
+
37
+ export interface SerializationContext {
38
+ stack: number[];
39
+ // Map tree refs to actual refs
40
+ validRefs: number[];
41
+ refSize: number;
42
+ // Refs that are...referenced
43
+ markedRefs: Set<number>;
44
+ // Variables
45
+ vars: string[];
46
+ // Array of assignments to be done (used for recursion)
47
+ assignments: Assignment[];
48
+ // Supported features
49
+ features: number;
50
+ }
51
+
31
52
  export interface Options {
32
53
  target: string | string[];
33
54
  }
@@ -36,55 +57,38 @@ const DEFAULT_OPTIONS: Options = {
36
57
  target: 'es2023',
37
58
  };
38
59
 
39
- export class ParserContext {
40
- refs = new Map<unknown, number>();
41
-
42
- markedRefs: Record<number, number> = {};
43
-
44
- features: number;
45
-
46
- constructor(options: Partial<Options> = {}) {
47
- const result = Object.assign({}, DEFAULT_OPTIONS, options || {});
48
- this.features = parseTargets(result.target);
49
- }
60
+ export function createParserContext(options: Partial<Options> = {}): ParserContext {
61
+ // eslint-disable-next-line prefer-object-spread
62
+ const result = Object.assign({}, DEFAULT_OPTIONS, options || {});
63
+ return {
64
+ markedRefs: new Set(),
65
+ refs: new Map(),
66
+ features: parseTargets(result.target),
67
+ };
50
68
  }
51
69
 
52
70
  export interface SerializationOptions {
53
- markedRefs: Record<number, number>;
71
+ markedRefs: number[] | Set<number>;
54
72
  features: number;
55
73
  }
56
74
 
57
- export class SerializationContext {
58
- stack: number[] = [];
59
-
60
- // Map tree refs to actual refs
61
- validRefs: number[] = [];
62
-
63
- refSize = 0;
64
-
65
- // Variables
66
- vars: string[] = [];
67
-
68
- // Array of assignments to be done (used for recursion)
69
- assignments: Assignment[] = [];
70
-
71
- // Supported features
72
- features: number;
73
-
74
- // Refs that are...referenced
75
- markedRefs: Record<number, number>;
76
-
77
- constructor(options: SerializationOptions) {
78
- this.features = options.features;
79
- this.markedRefs = options.markedRefs;
80
- }
75
+ export function createSerializationContext(options: SerializationOptions): SerializationContext {
76
+ return {
77
+ stack: [],
78
+ vars: [],
79
+ assignments: [],
80
+ validRefs: [],
81
+ refSize: 0,
82
+ features: options.features,
83
+ markedRefs: new Set(options.markedRefs),
84
+ };
81
85
  }
82
86
 
83
87
  /**
84
88
  * Increments the number of references the referenced value has
85
89
  */
86
90
  export function markRef(ctx: ParserContext | SerializationContext, current: number) {
87
- ctx.markedRefs[current] = 1;
91
+ ctx.markedRefs.add(current);
88
92
  }
89
93
 
90
94
  /**