jitar
Version:
Distributed runtime for JavaScript and TypeScript to chop monolithic applications into micros.
1 lines • 64.1 kB
JavaScript
class e extends Error{constructor(e="Invalid request"){super(e)}}class t extends Error{constructor(e="Forbidden"){super(e)}}class s extends Error{constructor(e="Not found"){super(e)}}class r extends Error{constructor(e="Not implemented"){super(e)}}class i extends Error{constructor(e="Payment required"){super(e)}}class n extends Error{constructor(e="Server error"){super(e)}}class a extends Error{constructor(e="I'm a teapot"){super(e)}}class o extends Error{constructor(e="Unauthorized"){super(e)}}const c="private",l="protected",u="public",h="normal",d="dry",p=200,m=400,f=401,g=402,w=403,y=404,E=418,S=500,v=501;class b extends e{#e;constructor(e){super(`Invalid version number '${e}'`),this.#e=e}get number(){return this.#e}}class O extends s{#t;constructor(e){super(`Procedure '${e}' not found`),this.#t=e}get fqn(){return this.#t}}class A extends t{constructor(e,t){super(`Procedure '${e}' (v${t}) is not accessible`)}}class T{#s;#r=new Map;#i=new Map;constructor(e){this.#s=e}get id(){return this.#s}addClass(e){return this.#r.set(e.fqn,e),this}hasClass(e){return void 0!==this.getClass(e)}getClass(e){return this.#r.get(e)}getClassByImplementation(e){return this.getClasses().find(t=>t.implementation===e)}getClasses(){return[...this.#r.values()]}addProcedure(e){return this.#i.set(e.fqn,e),this}hasProcedure(e){return this.#i.has(e)}getProcedure(e){return this.#i.get(e)}getExposedProcedures(){return[...this.#i.values()].filter(e=>e.public||e.protected)}}class N{#t;#n;constructor(e,t){this.#t=e,this.#n=t}get fqn(){return this.#t}get implementation(){return this.#n}}class I{static get DEFAULT(){return new I(0,0,0)}#a;#o;#c;constructor(e=0,t=0,s=0){this.#a=e,this.#o=t,this.#c=s}get major(){return this.#a}get minor(){return this.#o}get patch(){return this.#c}equals(e){return this.#a===e.major&&this.#o===e.minor&&this.#c===e.patch}greater(e){return this.#a!==e.major?this.#a>e.major:this.#o!==e.minor?this.#o>e.minor:this.#c!==e.patch&&this.#c>e.patch}less(e){return this.#a!==e.major?this.#a<e.major:this.#o!==e.minor?this.#o<e.minor:this.#c!==e.patch&&this.#c<e.patch}toString(){return`${this.#a}.${this.#o}.${this.#c}`}}class x{#t;#l=new Map;#u;constructor(e){this.#t=e}get fqn(){return this.#t}get public(){return[...this.#l.values()].some(e=>e.public)}get protected(){return[...this.#l.values()].some(e=>e.protected)}addImplementation(e){return this.#l.set(e.version,e),this.#h(e)&&(this.#u=e),this}#h(e){return void 0===this.#u||e.version.greater(this.#u.version)}getImplementation(e){const t=this.#d(e);return this.#l.get(t)}#d(e){let t=I.DEFAULT;for(const s of this.#l.keys()){if(s.equals(e))return s;s.greater(e)||t.less(s)&&(t=s)}return t}}class C{#p;#m;#f;#g;constructor(e,t,s,r){this.#p=e,this.#m=t,this.#f=s,this.#g=r}get version(){return this.#p}get public(){return this.#m===u}get protected(){return this.#m===l}get private(){return this.#m===c}get parameters(){return this.#f}get executable(){return this.#g}}class R{#w;#y;constructor(e,t=!1){this.#w=e,this.#y=t}get name(){return this.#w}get isOptional(){return this.#y}}class M extends R{}class z extends R{#E;constructor(e,t,s){super(t??"(anonymous)",s),this.#E=e}get variables(){return this.#E}}class P extends z{}class L extends z{}class k{#t;#p;#S;#v=new Map;#b;constructor(e,t,s,r,i){this.#t=e,this.#p=t,this.#S=s,this.#v=r,this.#b=i}get fqn(){return this.#t}get version(){return this.#p}get args(){return this.#S}get headers(){return this.#v}get mode(){return this.#b}clearArguments(){this.#S.clear()}setArgument(e,t){this.#S.set(e,t)}getArgument(e){return this.#S.get(e)}hasArgument(e){return this.#S.has(e)}removeArgument(e){this.#S.delete(e)}clearHeaders(){this.#v.clear()}setHeader(e,t){this.#v.set(e.toLowerCase(),t)}getHeader(e){return this.#v.get(e.toLowerCase())}hasHeader(e){return this.#v.has(e.toLowerCase())}removeHeader(e){this.#v.delete(e.toLowerCase())}}class ${#O;#A;#v;constructor(e,t=void 0,s=new Map){this.#O=e,this.#A=t,this.#v=s}get status(){return this.#O}get result(){return this.#A}set result(e){this.#A=e}get headers(){return this.#v}clearHeaders(){this.#v.clear()}setHeader(e,t){this.#v.set(e.toLowerCase(),t)}getHeader(e){return this.#v.get(e.toLowerCase())}hasHeader(e){return this.#v.has(e.toLowerCase())}removeHeader(e){this.#v.delete(e.toLowerCase())}}class V extends e{#T;constructor(e){super(`Unknown parameter ${e}`),this.#T=e}get parameterName(){return this.#T}}class D extends e{#T;constructor(e){super(`Missing value for parameter '${e}'`),this.#T=e}get parameterName(){return this.#T}}class j extends e{#T;constructor(e){super(`Invalid value for parameter '${e}'`),this.#T=e}get parameterName(){return this.#T}}class F{extract(e,t){const s=this.#N(e,t),r=[];for(const t of e){const e=this.#I(t,s);r.push(e)}if(s.size>0){const e=s.keys().next().value;throw new V(e)}return r}#N(e,t){const s=new Map;for(const[r,i]of t){if(this.#x(r)){const t=this.#C(r);!0===this.#R(e,t)&&s.set(t,i);continue}s.set(r,i)}return s}#x(e){return e.startsWith("*")}#C(e){return e.substring(1)}#R(e,t){return void 0!==e.find(e=>e.name===t)}#I(e,t,s){return e instanceof M?this.#M(e,t,s):this.#z(e,t)}#M(e,t,s){const r=t.get(e.name);if(this.#P(e,r,s))throw new D(e.name);if(this.#L(e,r,s))throw new j(e.name);return t.delete(e.name),r}#z(e,t){return e instanceof P?this.#k(e,t):this.#$(e,t)}#k(e,t){const s=this.#V(e,t);return void 0!==s?Object.values(s):void 0}#$(e,t){return this.#V(e,t)}#V(e,t){const s=e instanceof P,r={},i=[];let n=!1,a=0;for(const o of e.variables){const c=s?a++:o.name,l=this.#I(o,t,e);void 0!==l?n=!0:!1===o.isOptional&&i.push(o.name),r[c]=l}if(!0===n&&i.length>0)throw new D(i[0]);return n?r:void 0}#P(e,t,s){return void 0===t&&(!0!==e.isOptional&&!0!==s?.isOptional)}#L(e,t,s){return!1!==e.name.startsWith("...")&&(void 0===s&&t instanceof Array==!1||s instanceof P&&t instanceof Array==!1||s instanceof L&&t instanceof Object==!1)}}class B{toStatus(n){return n instanceof e?m:n instanceof t?w:n instanceof s?y:n instanceof r?v:n instanceof i?g:n instanceof a?E:n instanceof o?f:S}fromStatus(c,l){switch(c){case m:return new e(l);case w:return new t(l);case y:return new s(l);case v:return new r(l);case g:return new i(l);case E:return new a(l);case f:return new o(l);default:return new n(l)}}}const H=/^\d+(?:\.\d+){0,2}$/;class U{parse(e){if(0===e.trim().length)return I.DEFAULT;if(!1===H.test(e))throw new b(e);const t=e.split(".");switch(t.length){case 1:return new I(Number.parseInt(t[0]));case 2:return new I(Number.parseInt(t[0]),Number.parseInt(t[1]));default:return new I(Number.parseInt(t[0]),Number.parseInt(t[1]),Number.parseInt(t[2]))}}}class G extends s{#t;#p;constructor(e,t){super(`No implementation found for procedure '${e}' with version '${t}'`),this.#t=e,this.#p=t}get fqn(){return this.#t}get version(){return this.#p}}class q extends n{constructor(){super("Invalid segment")}}class W{#D=new Map;addSegment(e){this.#D.set(e.id,e)}clearSegments(){this.#D.clear()}getClassNames(){const e=new Set;for(const t of this.#D.values()){t.getClasses().forEach(t=>e.add(t.fqn))}return[...e.values()]}hasClass(e){return this.getClassNames().includes(e)}getClass(e){for(const t of this.#D.values())if(t.hasClass(e))return t.getClass(e)}getClassByImplementation(e){for(const t of this.#D.values()){const s=t.getClassByImplementation(e);if(void 0!==s)return s}}getProcedureNames(){const e=new Set;for(const t of this.#D.values()){t.getExposedProcedures().forEach(t=>e.add(t.fqn))}return[...e.values()]}hasProcedure(e){return this.getProcedureNames().includes(e)}getProcedure(e){for(const t of this.#D.values())if(t.hasProcedure(e))return t.getProcedure(e)}}class _{#j;#F;#B=new F;#H=new B;#U=new W;constructor(e,t=[]){this.#j=e,this.#F=t}async start(){return this.#G()}async stop(){return this.#q()}async loadSegment(e){const t=await this.#j.import(e);this.addSegment(t.default)}async addSegment(e){if(e instanceof T==!1)throw new q;this.#U.addSegment(e)}getClassNames(){return this.#U.getClassNames()}hasClass(e){return this.#U.hasClass(e)}getClass(e){return this.#U.getClass(e)}getClassByImplementation(e){return this.#U.getClassByImplementation(e)}getProcedureNames(){return this.#U.getProcedureNames()}hasProcedure(e){return this.#U.hasProcedure(e)}getProcedure(e){return this.#U.getProcedure(e)}async run(e){const t=this.#W(e.fqn,e.version),s=this.#B.extract(t.parameters,e.args);return e.mode===d?new $(p,void 0):this.#_(e,t,s)}async#G(){await Promise.all(this.#F.map(e=>this.loadSegment(e)))}#q(){this.#U.clearSegments()}#W(e,t){const s=this.#U.getProcedure(e);if(void 0===s)throw new O(e);const r=s.getImplementation(t);if(void 0===r)throw new G(s.fqn,t.toString());return r}async#_(e,t,s){try{const r=await t.executable.call(e,...s);return new $(p,r)}catch(e){const t=this.#H.toStatus(e);return new $(t,e)}}}class K extends n{constructor(){super("Request cancelled")}}class Y{#K;#Y;#X=[];#J=!1;#Q=0;constructor(e,t=20){this.#K=e,this.#Y=t}start(){this.#J=!0,this.#Z()}stop(){this.#J=!1,this.#ee()}run(e){return new Promise((t,s)=>{this.#X.push({request:e,resolve:t,reject:s}),this.#Z()})}#Z(){if(this.#te())return;const e=this.#X.length,t=this.#Y-this.#Q,s=Math.min(e,t);this.#se(s)}#te(){return this.#re()||this.#ie()||this.#ne()}#re(){return!1===this.#J}#ie(){return 0===this.#X.length}#ne(){return this.#Q>=this.#Y}#se(e){const t=this.#X.splice(0,e);this.#Q+=e,t.forEach(e=>this.#ae(e))}async#ae(e){try{const t=await this.#K.run(e.request);e.resolve(t)}catch(t){e.reject(t)}finally{this.#Q--,this.#Z()}}#ee(){for(;this.#X.length>0;){const e=this.#X.shift();void 0!==e&&this.#oe(e)}}#oe(e){e.reject(new K)}}const X="starting",J="available",Q="unavailable",Z="stopping",ee="stopped";class te{#ce=ee;get state(){return this.#ce}set state(e){this.#ce=e}async start(e){if(!this.isStarted())try{this.setStarting(),await e()}catch(e){throw this.setStopped(),e}}async stop(e){this.isStopped()||(this.setStopping(),await e(),this.setStopped())}isStarted(){return this.#le(ee)}isStopped(){return this.#ue(ee)}isAvailable(){return this.#ue(J)}setStarting(){this.#ce=X}setAvailable(){this.#ce=J}setUnavailable(){this.#ce=Q}setAvailability(e){return this.#ce=e?J:Q,this.#ce}setStopping(){this.#ce=Z}setStopped(){this.#ce=ee}#ue(...e){return e.includes(this.#ce)}#le(...e){return!1===this.#ue(...e)}}class se{#he;#de;#pe=new te;constructor(e){this.#he=e.url,this.#de=e.remote}get url(){return this.#he}get state(){return this.#pe.state}get trustKey(){}async start(){return this.#pe.start(async()=>{await this.#de.connect(),await this.updateState()})}async stop(){return this.#pe.stop(async()=>{await this.#de.disconnect()})}isHealthy(){return this.#de.isHealthy()}getHealth(){return this.#de.getHealth()}async updateState(){const e=await this.isHealthy();return this.#pe.setAvailability(e)}getProcedureNames(){throw new r}hasProcedure(e){throw new r}addWorker(e){return this.#de.addWorker(e.url,e.getProcedureNames(),e.trustKey)}reportWorker(e,t){return this.#de.reportWorker(e,t)}removeWorker(e){return this.#de.removeWorker(e)}run(e){return this.#de.run(e)}}class re extends Error{#me;constructor(e){super(`Invalid location: ${e}`),this.#me=e}get location(){return this.#me}}class ie extends Error{#fe;constructor(e){super(`The file '${e}' could not be found`),this.#fe=e}get filename(){return this.#fe}}class ne{#me;#ge;#we;constructor(e,t,s){this.#me=e,this.#ge=t,this.#we=s}get location(){return this.#me}get type(){return this.#ge}get content(){return this.#we}get size(){return this.#we.length}}class ae{#me;#ye;#Ee;constructor(e,t){const s=t.resolve(e);this.#me=t.normalize(e),this.#ye=t.normalize(s),this.#Ee=t}getAbsoluteLocation(e){const t=this.#Ee.isAbsolute(e)?e:this.#Ee.join(this.#me,e),s=this.#Ee.resolve(t),r=this.#Ee.normalize(s);return this.#Se(r,e),r}getRelativeLocation(e){const t=this.#Ee.relative(this.#me,e);return this.#Ee.normalize(t)}normalizeLocation(e){return this.#Ee.normalize(e)}async getType(e){const t=this.getAbsoluteLocation(e);return await this.#Ee.mimeType(t)??"application/octet-stream"}async getContent(e){const t=this.getAbsoluteLocation(e);if(!1===await this.#Ee.exists(t))throw new ie(e);return this.#Ee.read(t)}async exists(e){const t=this.getAbsoluteLocation(e);return this.#Ee.exists(t)}isDirectory(e){const t=this.getAbsoluteLocation(e);return this.#Ee.isDirectory(t)}async read(e){const t=this.getAbsoluteLocation(e),s=await this.getType(t),r=await this.getContent(t);return new ne(e,s,r)}async write(e,t){const s=this.getAbsoluteLocation(e);return this.#Ee.write(s,t)}async copy(e,t){const s=this.getAbsoluteLocation(e),r=this.getAbsoluteLocation(t);return this.#Ee.copy(s,r)}async delete(e){const t=this.getAbsoluteLocation(e);return this.#Ee.delete(t)}async filter(e){const t=this.getAbsoluteLocation("./"),s=this.#Ee.normalize(e);return(await this.#Ee.filter(t,s)).map(e=>this.#Ee.normalize(e))}async filterWithIgnores(e,t){const s=await this.filter(e),r=t.map(e=>this.filter(e)),i=await Promise.all(r),n=new Set(i.flat());return s.filter(e=>!1===n.has(e))}#Se(e,t){if(!1===e.startsWith(this.#ye))throw new re(t)}}class oe extends Error{constructor(){super("Remote files are not supported")}}class ce{copy(e,t){throw new oe}delete(e){throw new oe}exists(e){throw new oe}async filter(e,t){return[]}isAbsolute(e){return e.startsWith("/")}isDirectory(e){throw new oe}join(...e){throw new oe}read(e){throw new oe}resolve(e){return e}relative(e,t){throw new oe}normalize(e){return e}mimeType(e){throw new oe}write(e,t){throw new oe}}class le extends ae{constructor(e){super(e,new ce)}}class ue extends Error{#he;#ve;constructor(e,t){super(`Module '${e}' could not be loaded${void 0!==t?` | ${t}`:""}`),this.#he=e,this.#ve=t}get url(){return this.#he}get reason(){return this.#ve}}class he{#be;constructor(e){this.#be=e}async import(e){const t=this.#be.locate(e);try{return await import(t)}catch(e){const s=e instanceof Error?e.message:String(e);throw new ue(t,s)}}}class de{constructor(e){}locate(e){throw new ue(e,"Remote module loading is not allowed")}}class pe extends he{constructor(e){super(new de(e))}}class me{#Oe;#Ae;constructor(e,t){this.#Oe=e,this.#Ae=t}get fileManager(){return this.#Oe}get importManager(){return this.#Ae}async filter(...e){return(await Promise.all(e.map(e=>this.#Oe.filter(e)))).flat().map(e=>this.#Oe.getRelativeLocation(e))}exists(e){return this.#Oe.exists(e)}read(e){return this.#Oe.read(e)}import(e){return this.#Ae.import(e)}}class fe extends me{constructor(e){super(new le(e),new pe(e))}fork(e){const t=this.fileManager.getAbsoluteLocation(e);return new fe(t)}}class ge extends Error{constructor(e){super(`The class '${e}' could not be found`)}}class we extends Error{constructor(e){super(`The class '${e}' is invalid`)}}class ye extends Error{constructor(e){super(`No deserializer found for value of type '${e}'`)}}class Ee extends Error{constructor(e){super(`No serializer found for value of type '${e}'`)}}class Se{#Te=[];addSerializer(e){e.parent=this,this.#Te.unshift(e)}async serialize(e){const t=this.#Te.find(t=>t.canSerialize(e));if(void 0===t)throw new Ee(typeof e);return t.serialize(e)}async deserialize(e){const t=this.#Te.find(t=>t.canDeserialize(e));if(void 0===t)throw new ye(typeof e);return t.deserialize(e)}}class ve extends Error{constructor(){super("Parent serializer not set")}}class be{#Ne;set parent(e){this.#Ne=e}serializeOther(e){if(void 0===this.#Ne)throw new ve;return this.#Ne.serialize(e)}deserializeOther(e){if(void 0===this.#Ne)throw new ve;return this.#Ne.deserialize(e)}}class Oe extends be{canSerialize(e){return e instanceof Array}canDeserialize(e){return e instanceof Array}async serialize(e){const t=[];for(const s of e)t.push(await this.serializeOther(s));return t}async deserialize(e){return Promise.all(e.map(async e=>this.deserializeOther(e)))}}class Ae extends Error{constructor(e){super(`Invalid BigInt string '${e}'`)}}class Te extends be{canSerialize(e){return"bigint"==typeof e}canDeserialize(e){const t=e;return t instanceof Object&&!0===t.serialized&&"BigInt"===t.name&&"string"==typeof t.value}async serialize(e){return{serialized:!0,name:"BigInt",value:e.toString()}}async deserialize(e){try{return BigInt(e.value)}catch{throw new Ae(e.value)}}}class Ne extends Error{constructor(e){super(`Invalid Buffer string '${e}'`)}}class Ie extends be{canSerialize(e){return e instanceof Buffer}canDeserialize(e){const t=e;return t instanceof Object&&!0===t.serialized&&"Buffer"===t.name&&"string"==typeof t.base64}async serialize(e){return{serialized:!0,name:"Buffer",base64:e.toString("base64")}}async deserialize(e){try{return Buffer.from(e.base64,"base64")}catch{throw new Ne(e.base64)}}}class xe{}class Ce extends xe{elements;constructor(e){super(),this.elements=e}clone(){const e=this.elements.map(e=>e.clone());return new Ce(e)}toString(){return`[${this.elements.map(e=>e.toString()).join(",")}]`}}class Re{}class Me extends Re{identifier;constructor(e){super(),this.identifier=e}is(e){return this.identifier===e}}class ze extends Me{parameters;body;isAsync;constructor(e,t,s,r=!1){super(e),this.parameters=t,this.body=s,this.isAsync=r}clone(){const e=this.parameters.map(e=>e.clone()),t=this.body.clone();return new ze(this.identifier,e,t,this.isAsync)}toString(){const e=this.isAsync?"async ":"",t=this.identifier?` ${this.identifier}`:"",s=this.parameters.map(e=>e.toString()),r=this.body.toString();return`${e}function${t}(${s.join(",")})${r}`}}class Pe extends ze{constructor(e,t,s=!1){super(void 0,e,t,s)}clone(){const e=this.parameters.map(e=>e.clone()),t=this.body.clone();return new Pe(e,t,this.isAsync)}toString(){const e=this.isAsync?"async ":"",t=this.parameters.map(e=>e.toString()),s=this.body.toString();return`${e}(${t.join(", ")})=>${s}`}}class Le{binding;initializer;constructor(e,t){this.binding=e,this.initializer=t}clone(){const e=this.binding.clone(),t=this.initializer?.clone();return new Le(e,t)}toString(){return`${this.binding.toString()}${void 0!==this.initializer?`=${this.initializer.toString(!1)}`:""}`}}class ke extends Re{code;constructor(e){super(),this.code=e}clone(){return new ke(this.code)}toString(){return this.code}}class $e{identifier;visibility;location;constructor(e,t,s){this.identifier=e,this.visibility=t,this.location=s}is(e){return this.identifier===e}}class Ve extends $e{parameters;body;constructor(e,t){super("constructor","public","instance"),this.parameters=e,this.body=t}clone(){const e=this.parameters.map(e=>e.clone()),t=this.body.clone();return new Ve(e,t)}toString(){const e=this.parameters.map(e=>e.toString()),t=this.body.toString();return`${this.identifier}(${e.join(",")}) ${t}`}}class De extends $e{body;constructor(e,t,s,r){super(e,t,s),this.body=r}clone(){const e=this.body.clone();return new De(this.identifier,this.visibility,this.location,e)}toString(){const e="static"===this.location?"static ":"",t="private"===this.visibility?"#":"",s=this.body.toString();return`${e}get ${t}${this.identifier}()${s}`}}class je extends $e{parameter;body;constructor(e,t,s,r,i){super(e,t,s),this.parameter=r,this.body=i}clone(){const e=this.parameter.clone(),t=this.body.clone();return new je(this.identifier,this.visibility,this.location,e,t)}toString(){const e="static"===this.location?"static ":"",t="private"===this.visibility?"#":"",s=this.parameter.toString(),r=this.body.toString();return`${e}set ${t}${this.identifier}(${s})${r}`}}class Fe extends $e{parameters;body;isAsync;constructor(e,t,s,r,i,n=!1){super(e,t,s),this.parameters=r,this.body=i,this.isAsync=n}clone(){const e=this.parameters.map(e=>e.clone()),t=this.body.clone();return new Fe(this.identifier,this.visibility,this.location,e,t,this.isAsync)}toString(){const e="static"===this.location?"static ":"",t="private"===this.visibility?"#":"",s=this.isAsync?"async ":"",r=this.parameters.map(e=>e.toString()),i=this.body.toString();return`${e}${s}${t}${this.identifier}(${r.join(",")})${i}`}}class Be extends $e{initializer;constructor(e,t,s,r){super(e,t,s),this.initializer=r}clone(){const e=this.initializer?.clone();return new Be(this.identifier,this.visibility,this.location,e)}toString(){const e="static"===this.location?"static ":"",t="private"===this.visibility?"#":"",s=void 0!==this.initializer?`=${this.initializer.toString(!0)}`:";";return`${e}${t}${this.identifier}${s}`}}class He extends Me{parent;members;constructor(e,t,s){super(e),this.parent=t,this.members=s}get construct(){return this.members.find(e=>e instanceof Ve)}get fields(){return this.members.filter(e=>e instanceof Be)}get getters(){return this.members.filter(e=>e instanceof De)}get setters(){return this.members.filter(e=>e instanceof je)}get methods(){return this.members.filter(e=>e instanceof Fe)}get publicFields(){return this.fields.filter(e=>"public"===e.visibility)}get publicGetters(){return this.getters.filter(e=>"public"===e.visibility)}get publicSetters(){return this.setters.filter(e=>"public"===e.visibility)}get publicMethods(){return this.methods.filter(e=>"public"===e.visibility)}get readable(){return[...this.publicFields,...this.publicGetters]}get writable(){return[...this.publicFields,...this.publicSetters]}getMember(e){return this.members.find(t=>t.is(e))}hasMember(e){return this.members.some(t=>t.is(e))}getField(e){return this.fields.find(t=>t.is(e))}hasField(e){return this.fields.some(t=>t.is(e))}getGetter(e){return this.getters.find(t=>t.is(e))}hasGetter(e){return this.getters.some(t=>t.is(e))}getSetter(e){return this.setters.find(t=>t.is(e))}hasSetter(e){return this.setters.some(t=>t.is(e))}getMethod(e){return this.methods.find(t=>t.is(e))}hasMethod(e){return this.methods.some(t=>t.is(e))}canRead(e){return this.readable.some(t=>t.is(e))}canWrite(e){return this.writable.some(t=>t.is(e))}clone(){const e=this.members.map(e=>e.clone());return new He(this.identifier,this.parent,e)}toString(){return`class ${this.identifier??""}${void 0!==this.parent?` extends ${this.parent}`:""}{${this.members.map(e=>e.toString()).join("")}}`}}class Ue extends Re{members;from;constructor(e,t){super(),this.members=e,this.from=t}hasMember(e){return this.members.some(t=>t.is(e))}getMember(e){return this.members.find(t=>t.is(e))}clone(){const e=this.members.map(e=>e.clone());return new Ue(e,this.from)}toString(){const e=this.members.map(e=>e.toString()),t=this.from?` from '${this.from}'`:"";return`export {${e.join(",")}}${t};`}}class Ge extends Re{code;constructor(e){super(),this.code=e}clone(){return new Ge(this.code)}toString(e=!0){const t=!1===e||this.code.endsWith("}")?"":";";return`${this.code}${t}`}}class qe extends ze{clone(){const e=this.parameters.map(e=>e.clone()),t=this.body.clone();return new qe(this.identifier,e,t,this.isAsync)}toString(){const e=this.isAsync?"async ":"",t=this.identifier??"",s=this.parameters.map(e=>e.toString()),r=this.body.toString();return`${e}function* ${t}(${s.join(",")})${r}`}}class We extends Fe{clone(){const e=this.parameters.map(e=>e.clone()),t=this.body.clone();return new We(this.identifier,this.visibility,this.location,e,t,this.isAsync)}toString(){const e=this.isAsync?"async ":"",t=this.identifier,s=this.parameters.map(e=>e.toString()),r=this.body.toString();return`${e}*${t}(${s.join(",")})${r}`}}class _e extends xe{identifier;isRest;constructor(e,t=!1){super(),this.identifier=e,this.isRest=t}clone(){return new _e(this.identifier,this.isRest)}toString(){return`${this.isRest?"...":""}${this.identifier}`}}class Ke extends Re{members;from;constructor(e,t){super(),this.members=e,this.from=t}hasMember(e){return this.members.some(t=>t.is(e))}getMember(e){return this.members.find(t=>t.is(e))}clone(){const e=this.members.map(e=>e.clone());return new Ke(e,this.from)}toString(){if(0===this.members.length)return`import '${this.from}';`;return`import {${this.members.map(e=>e.toString()).join(",")}} from '${this.from}';`}}class Ye extends Me{type;binding;initializer;constructor(e,t,s){super(t.toString()),this.type=e,this.binding=t,this.initializer=s}clone(){const e=this.binding.clone(),t=this.initializer?.clone();return new Ye(this.type,e,t)}toString(){const e=void 0!==this.initializer?`=${this.initializer.toString(!0)}`:"",t=e.endsWith(";")?"":";";return`${this.type} ${this.identifier}${e}${t}`}}class Xe{statements;constructor(e){this.statements=e}get exports(){return this.statements.filter(e=>e instanceof Ue)}get imports(){return this.statements.filter(e=>e instanceof Ke)}get expressions(){return this.statements.filter(e=>e instanceof Ge)}get declarations(){return this.statements.filter(e=>e instanceof Me)}get variables(){return this.statements.filter(e=>e instanceof Ye)}get functions(){return this.statements.filter(e=>e instanceof ze)}get classes(){return this.statements.filter(e=>e instanceof He)}get exported(){const e=[];for(const t of this.exports)for(const s of t.members){const t=this.getDeclaration(s.identifier);void 0!==t&&e.push(t)}return e}get exportedVariables(){return this.exported.filter(e=>e instanceof Ye)}get exportedFunctions(){return this.exported.filter(e=>e instanceof ze)}get exportedClasses(){return this.exported.filter(e=>e instanceof He)}getExport(e){return this.exports.find(t=>t.hasMember(e))}getImport(e){return this.imports.find(t=>t.hasMember(e))}hasDeclaration(e){return this.declarations.some(t=>t.is(e))}getDeclaration(e){return this.declarations.find(t=>t.is(e))}hasVariable(e){return this.variables.some(t=>t.is(e))}getVariable(e){return this.variables.find(t=>t.is(e))}hasFunction(e){return this.functions.some(t=>t.is(e))}getFunction(e){return this.functions.find(t=>t.is(e))}hasClass(e){return this.classes.some(t=>t.is(e))}getClass(e){return this.classes.find(t=>t.is(e))}clone(){const e=this.statements.map(e=>e.clone());return new Xe(e)}toString(){return this.statements.map(e=>e.toString(!0)).join("\n")}}class Je{identifier;alias;constructor(e,t){this.identifier=e,this.alias=t}is(e){return this.alias===e||void 0===this.alias&&this.identifier===e}clone(){return new Je(this.identifier,this.alias)}toString(){return void 0===this.alias?this.identifier:`${this.identifier} as ${this.alias}`}}class Qe extends xe{elements;constructor(e){super(),this.elements=e}clone(){const e=this.elements.map(e=>e.clone());return new Qe(e)}toString(){return`{${this.elements.map(e=>e.toString()).join(",")}}`}}const Ze={SINGLE:"//",MULTI_START:"/*",MULTI_END:"*/"},et=Object.values(Ze);const tt=".",st="(",rt=")",it="[",nt="]",at="{",ot="}",ct="_",lt={SCOPE:":",SEPARATOR:",",TERMINATOR:";"},ut=Object.values(lt);function ht(e){return ut.includes(e)}const dt={UNDEFINED:void 0,NULL:null,STRING:""},pt=["null","undefined"],mt=Object.values(dt);function ft(e){return mt.includes(e)}const gt={OPEN:st,CLOSE:rt};function wt(e){return e===gt.OPEN||e===gt.CLOSE}const yt={IMPORT:"import",EXPORT:"export",AS:"as",FROM:"from",DEFAULT:"default",ASYNC:"async",AWAIT:"await",USING:"using",CONST:"const",LET:"let",VAR:"var",FUNCTION:"function",RETURN:"return",YIELD:"yield",CLASS:"class",CONSTRUCTOR:"constructor",GET:"get",SET:"set",EXTENDS:"extends",STATIC:"static",NEW:"new",THIS:"this",DO:"do",WHILE:"while",FOR:"for",OF:"of",IN:"in",BREAK:"break",CONTINUE:"continue",IF:"if",ELSE:"else",SWITCH:"switch",CASE:"case",THROW:"throw",TRY:"try",CATCH:"catch",FINALLY:"finally"},Et=Object.values(yt),St=[yt.IMPORT,yt.EXPORT,yt.VAR,yt.LET,yt.CONST,yt.FUNCTION,yt.CLASS,yt.ASYNC],vt=[yt.VAR,yt.LET,yt.CONST,yt.FUNCTION,yt.CLASS,yt.USING],bt=[yt.AS,yt.ASYNC,yt.GET,yt.SET,yt.OF,yt.YIELD,yt.FROM,yt.STATIC];function Ot(e){return St.includes(e)}function At(e){return bt.includes(e)}const Tt={OPEN:it,CLOSE:nt};function Nt(e){return e===Tt.OPEN||e===Tt.CLOSE}const It=Object.values({SINGLE:"'",DOUBLE:'"',BACKTICK:"`"});function xt(e){return It.includes(e)}const Ct={ADD:"+",ARROW:"=>",ASSIGN:"=",ASSIGN_ADD:"+=",ASSIGN_BITWISE_AND:"&=",ASSIGN_BITWISE_OR:"|=",ASSIGN_BITWISE_XOR:"^=",ASSIGN_DIVIDE:"/=",ASSIGN_EXPONENTIAL:"**=",ASSIGN_LEFT_SHIFT:"<<=",ASSIGN_LOGICAL_AND:"&&=",ASSIGN_LOGICAL_OR:"||=",ASSIGN_REMAINDER:"%=",ASSIGN_MULTIPLY:"*=",ASSIGN_NULLISH:"??=",ASSIGN_RIGHT_SHIFT:">>=",ASSIGN_SUBTRACT:"-=",BITWISE_AND:"&",BITWISE_OR:"|",BITWISE_NOT:"~",BITWISE_XOR:"^",DECREMENT:"--",DIVIDE:"/",EQUAL:"==",EQUAL_STRICT:"===",EXPONENTIAL:"**",GREATER:">",GREATER_EQUAL:">=",INCREMENT:"++",LEFT_SHIFT:"<<",LESS:"<",LESS_EQUAL:"<=",LOGICAL_AND:"&&",LOGICAL_OR:"||",REMAINDER:"%",MULTIPLY:"*",NULLISH:"??",CHAINING:".",OPTIONAL_CHAINING:"?.",SPREAD:"...",NOT:"!",NOT_EQUAL:"!=",NOT_EQUAL_STRICT:"!==",RIGHT_SHIFT:">>",SUBTRACT:"-",TERNARY:"?",$BRIDGE_CHAINING_SPREAD:".."},Rt=Object.values(Ct);function Mt(e){return Rt.includes(e)}const zt={OPEN:at,CLOSE:ot};function Pt(e){return e===zt.OPEN||e===zt.CLOSE}const Lt={BOOLEAN:"boolean",COMMENT:"comment",DIVIDER:"divider",GROUP:"group",IDENTIFIER:"identifier",KEYWORD:"keyword",LIST:"list",LITERAL:"literal",NOTHING:"nothing",NUMBER:"number",OPERATOR:"operator",INDICATOR:"indicator",REGEX:"regex",SCOPE:"scope",WHITESPACE:"whitespace",NONE:"none"},kt={SPACE:" ",TAB:"\t",NEWLINE:"\n",CARRIAGE_RETURN:"\r"},$t=Object.values(kt);function Vt(e){return $t.includes(e)}class Dt{#Ie;#xe;constructor(e){this.#Ie=e,this.#xe=0}get items(){return this.#Ie}get position(){return this.#xe}get size(){return this.#Ie.length}get eol(){return this.#xe>=this.#Ie.length}get current(){return this.#Ie[this.#xe]}get next(){return this.#Ie[this.#xe+1]}get previous(){return this.#Ie[this.#xe-1]}notAtEnd(){return!1===this.eol}get(e){return this.#Ie[e]}step(e=1){return this.#xe+=e,this.current}stepBack(e=1){return this.#xe-=e,this.current}hasNext(){return this.#xe+1<this.#Ie.length}insert(...e){this.#Ie.splice(this.#xe,0,...e)}}class jt extends Dt{constructor(e){super(e.split(""))}}class Ft{#ge;#Ce;#Re;#Me;constructor(e,t,s,r){this.#ge=e,this.#Ce=t,this.#Re=s,this.#Me=r}get type(){return this.#ge}get value(){return this.#Ce}get start(){return this.#Re}get end(){return this.#Me}isType(e){return this.#ge===e}hasValue(e){return this.#Ce===e}toString(){return`${this.#Ce}`}}class Bt extends Dt{}const Ht=["true","false"];const Ut=["0","1","2","3","4","5","6","7","8","9"],Gt=[...Ut,"a","b","c","d","e","f","A","B","C","D","E","F"],qt=["0","1"];function Wt(e){return Ut.includes(e)}const _t={GENERATOR:"*",PRIVATE:"#"},Kt=Object.values(_t);class Yt{tokenize(e){const t=new jt(e),s=[];let r;for(;t.notAtEnd();){const e=this.#ze(t,r);if(void 0===e)break;e.isType(Lt.WHITESPACE)||e.isType(Lt.COMMENT)?t.step():(s.push(e),this.#Pe(e)&&(r=e),t.step())}return new Bt(s)}#Pe(e){return!1===[Lt.WHITESPACE,Lt.COMMENT].includes(e.type)}#ze(e,t){const s=e.current,r=e.position;if(Vt(s)){const t=e.position;return new Ft(Lt.WHITESPACE,s,r,t)}if(function(e){return et.includes(e)}(s+e.next)){const t=this.#Le(e),s=e.position;return new Ft(Lt.COMMENT,t,r,s)}if(this.#ke(s,t)){const t=this.#$e(e),s=e.position;return new Ft(Lt.REGEX,t,r,s)}if(this.#Ve(e,t)){const t=this.#De(e),s=e.position;return new Ft(Lt.NUMBER,t,r,s)}if(xt(s)){const t=this.#je(e),s=e.position;return new Ft(Lt.LITERAL,t,r,s)}if(Mt(s)){const t=this.#Fe(e),s=e.position;return new Ft(Lt.OPERATOR,t,r,s)}if(function(e){return Kt.includes(e)}(s)){const t=this.#Fe(e),s=e.position;return new Ft(Lt.INDICATOR,t,r,s)}if(ht(s)){const t=e.position;return new Ft(Lt.DIVIDER,s,r,t)}if(wt(s)){const t=e.position;return new Ft(Lt.GROUP,s,r,t)}if(Pt(s)){const t=e.position;return new Ft(Lt.SCOPE,s,r,t)}if(Nt(s)){const t=e.position;return new Ft(Lt.LIST,s,r,t)}if(ft(s))return;const i=this.#Be(e),n=e.position;return function(e){return Et.includes(e)}(i)?new Ft(Lt.KEYWORD,i,r,n):function(e){return Ht.includes(e)}(i)?new Ft(Lt.BOOLEAN,i,r,n):function(e){return pt.includes(e)}(i)?new Ft(Lt.NOTHING,i,r,n):new Ft(Lt.IDENTIFIER,i,r,n)}#Le(e){const t=e.current+e.next===Ze.MULTI_START,s=t?Ze.MULTI_END:kt.NEWLINE;let r=t?Ze.MULTI_START:Ze.SINGLE;for(e.step(2);e.notAtEnd();){const i=e.current;if((t?i+e.next:i)===s){e.step(s.length-1);break}r+=i,e.step()}return t?r+Ze.MULTI_END:r.trim()}#ke(e,t){return e===Ct.DIVIDE&&(void 0===t||([Lt.OPERATOR,Lt.DIVIDER,Lt.KEYWORD].includes(t.type)||[gt.OPEN,Tt.OPEN].includes(t.value)))}#He(e){return Vt(e)||e==tt||!1===this.#Ue(e)}#$e(e){let t=e.current,s=!1;for(e.step();e.notAtEnd();){const r=e.current,i=e.previous;if(r===Ct.DIVIDE&&"\\"!==i)s=!0;else if(!0===s&&this.#He(r)){e.stepBack();break}t+=r,e.step()}return t}#Ve(e,t){const s=e.current,r=e.next;return!!Wt(s)||s===Ct.SUBTRACT&&(!t?.isType(Lt.NUMBER)&&Wt(r))}#Ge(e,t,s){return t?!1===(r=e,Gt.includes(r))&&e!==ct:s?!1===function(e){return qt.includes(e)}(e)&&e!==ct:!1===Wt(e)&&e!==tt&&e!==ct&&"e"!==e;var r}#De(e){let t=e.current;t===Ct.SUBTRACT&&(t+=e.step()),e.step();const s="x"===e.current,r="b"===e.current;for((s||r)&&(t+=e.current,e.step());e.notAtEnd();){const i=e.current;if(this.#Ge(i,s,r)){e.stepBack();break}t+=i,e.step()}return t}#je(e){const t=e.current;let s=t,r=!1;for(e.step();e.notAtEnd();){const i=e.current;if(!1===r){if(i===t){s+=i;break}"\\"===i&&(r=!0)}else r=!1;s+=i,e.step()}return s}#Ue(e){return!1===(ft(e)||Vt(e)||Mt(e)||xt(e)||ht(e)||wt(e)||Pt(e)||Nt(e))}#Be(e){let t="";for(;e.notAtEnd();){const s=e.current;if(!1===this.#Ue(s)){e.stepBack();break}t+=s,e.step()}return t}#Fe(e){let t=e.current;for(e.step();e.notAtEnd();){const s=e.current;if(!1===Mt(s)||!1===Mt(t+s)){e.stepBack();break}t+=s,e.step()}return t}}class Xt extends Error{constructor(e,t){super(`Expected keyword '${e}' at position ${t}`)}}class Jt extends Error{constructor(e,t){super(`Expected token '${e}' at position ${t}`)}}class Qt extends Error{constructor(e,t){super(`Unexpected keyword '${e}' at position ${t}`)}}class Zt extends Error{constructor(e){super(`The given code does not contain ${e}`)}}class es extends Error{constructor(e,t){super(`Unexpected token '${e}' at position ${t}`)}}const ts=new Ft(Lt.NONE,"",-1,0);class ss{#qe;constructor(e=[]){this.#qe=e}get tokens(){return this.#qe}append(...e){this.#qe.push(...e)}merge(e){this.append(...e.tokens)}generate(){let e="";for(let t=0;t<this.#qe.length;t++){const s=this.#qe[t-1]??ts,r=this.#qe[t],i=this.#qe[t+1]??ts,n=this.#We(s,r)?" ":"",a=this.#_e(r,i)?" ":"";e+=`${n}${r.value}${a}`}return e}#We(e,t){return!(!t.isType(Lt.KEYWORD)||!this.#Ke(e))||!(!t.isType(Lt.OPERATOR)||!e.isType(Lt.OPERATOR))}#_e(e,t){return e.isType(Lt.KEYWORD)&&(t.isType(Lt.KEYWORD)||this.#Ke(t))}#Ke(e){return e.isType(Lt.IDENTIFIER)||e.isType(Lt.BOOLEAN)||e.isType(Lt.NOTHING)||e.isType(Lt.NUMBER)}}const rs="default";class is{#Ye;constructor(e=new Yt){this.#Ye=e}parse(e){const t=this.#Ye.tokenize(e),s=this.#Xe(t);return new Xe(s)}parseStatement(e){const t=this.#Ye.tokenize(e),s=this.#Je(t);if(void 0===s)throw new Zt("a statement");return s}parseImport(e){const t=this.#Ye.tokenize(e),s=this.#Qe(t);if(s instanceof Ke==!1)throw new Zt("an import definition");return s}parseExport(e){const t=this.#Ye.tokenize(e),s=this.#Qe(t);if(s instanceof Ue==!1)throw new Zt("an export definition");return s}parseVariable(e){const t=this.#Ye.tokenize(e),s=this.#Qe(t);if(s instanceof Ye==!1)throw new Zt("a variable definition");return s}parseFunction(e){const t=this.#Ye.tokenize(e),s=this.#Qe(t);if(s instanceof ze==!1)throw new Zt("a function definition");return s}parseClass(e){const t=this.#Ye.tokenize(e),s=this.#Qe(t);if(s instanceof He==!1)throw new Zt("a class definition");return s}#Xe(e){const t=[];for(;e.notAtEnd();){const s=this.#Je(e);void 0!==s&&t.push(s)}return t}#Je(e,t=!1){const s=e.current;if(this.#Ze(s))return this.#et(e);if(s.isType(Lt.IDENTIFIER)){const s=e.next;return s?.hasValue(Ct.ARROW)?this.#tt(e,t):this.#et(e)}if(s.isType(Lt.KEYWORD)){if(At(s.value)){const t=e.next,r=void 0!==t&&(t.hasValue(yt.FUNCTION)||t.hasValue(gt.OPEN));if(s.hasValue(yt.ASYNC)&&r)return e.step(),this.#Je(e,!0);if(void 0===t||this.#st(t))return this.#et(e)}return s.hasValue(yt.RETURN)?this.#et(e):!1===Ot(s.value)?this.#et(e):this.#Qe(e,t)}if(s.isType(Lt.REGEX))return this.#et(e);if(s.hasValue(gt.OPEN)){const s=this.#rt(e,gt.OPEN,gt.CLOSE);return s?.hasValue(Ct.ARROW)?this.#tt(e,t):this.#et(e)}if(s.hasValue(zt.OPEN))return this.#et(e);if(s.hasValue(Tt.OPEN))return this.#et(e);if(s.hasValue(Ct.NOT)||s.hasValue(Ct.SUBTRACT))return this.#et(e);if(!ht(s.value))throw new es(s.value,s.start);e.step()}#Ze(e){return e.isType(Lt.LITERAL)||e.isType(Lt.NUMBER)||e.isType(Lt.BOOLEAN)||e.isType(Lt.NOTHING)||e.hasValue(yt.NEW)}#Qe(e,t=!1){const s=e.current;switch(e.step(),s.value){case yt.IMPORT:return this.#it(e);case yt.EXPORT:return this.#nt(e);case yt.CLASS:return this.#at(e);case yt.FUNCTION:return this.#ot(e,t);case yt.VAR:return this.#ct(e,"var");case yt.LET:return this.#ct(e,"let");case yt.CONST:return this.#ct(e,"const");case yt.ASYNC:return this.#Je(e,!0);default:throw new Qt(s.value,s.start)}}#it(e){const t=[];let s=e.current;if(s.isType(Lt.LITERAL)){const e=this.#lt(s.value);return new Ke(t,e)}if(s.hasValue(gt.OPEN)){s=e.step();const r=this.#lt(s.value);return e.step(2),new Ke(t,r)}if(!1===s.hasValue(zt.OPEN)){const r=s.hasValue(Ct.MULTIPLY)?Ct.MULTIPLY:rs;let i=s.value;s=e.step(),s.hasValue(yt.AS)&&(s=e.step(),i=s.value,s=e.step()),t.push(new Je(r,i))}if(s.hasValue(lt.SEPARATOR)&&(s=e.step()),s.hasValue(zt.OPEN)){const r=this.#ut(e);t.push(...r),s=e.current}if(!1===s.hasValue(yt.FROM))throw new Xt(yt.FROM,s.start);s=e.step();const r=this.#lt(s.value);return e.step(),new Ke(t,r)}#nt(e){switch(e.current.value){case yt.DEFAULT:return e.step(),this.#ht(e,!0);case zt.OPEN:return this.#dt(e);default:return this.#ht(e,!1)}}#ht(e,t){let s=e.current,r=0;if(t&&this.#pt(e)){const t=`$_EXPORT_${s.start}_${s.end}`;e.insert(new Ft(Lt.KEYWORD,yt.CONST,0,0),new Ft(Lt.IDENTIFIER,t,0,0),new Ft(Lt.OPERATOR,Ct.ASSIGN,0,0)),s=e.current}var i;s.hasValue(yt.ASYNC)&&(s=e.step(),r++),i=s.value,vt.includes(i)&&(s=e.step(),r++);const n=this.#Ue(s)?s.value:"",a=t?rs:void 0;let o;s=e.step(),s?.hasValue(yt.FROM)&&(s=e.step(),o=this.#lt(s.value)),r>0&&(r++,e.stepBack(r));const c=new Je(n,a);return new Ue([c],o)}#pt(e){const t=e.current;if(this.#Ze(t))return!0;const s=e.next;return this.#Ue(t)&&s?.hasValue(gt.OPEN)}#dt(e){const t=this.#ut(e);let s,r=e.current;return r?.hasValue(yt.FROM)&&(r=e.step(),s=this.#lt(r.value)),e.step(),new Ue(t,s)}#lt(e){return e.slice(1,-1)}#ut(e){const t=[];let s=e.step();for(;e.notAtEnd();){if(s.hasValue(zt.CLOSE)){e.step();break}if(s.hasValue(lt.SEPARATOR)){s=e.step();continue}const r=this.#mt(e);t.push(r),s=e.step()}return t}#mt(e){let t=e.current;const s=t.value;let r;return e.next.hasValue(yt.AS)&&(t=e.step(2),r=t.value),new Je(s,r)}#ct(e,t){const s=this.#ft(e),r=this.#gt(e);return new Ye(t,s,r)}#ft(e){const t=e.current;return t.hasValue(Tt.OPEN)?this.#wt(e):t.hasValue(zt.OPEN)?this.#yt(e):this.#Et(e)}#wt(e){const t=this.#St(e,Tt.CLOSE);return new Ce(t)}#yt(e){const t=this.#St(e,zt.CLOSE);return new Qe(t)}#St(e,t){const s=[];for(e.step();e.notAtEnd();){const r=e.current;if(r.hasValue(t)){e.step();break}if(r.hasValue(lt.SEPARATOR)){e.step();continue}const i=this.#ft(e),n=this.#gt(e),a=new Le(i,n);s.push(a)}return s}#Et(e){let t=e.current,s=!1;t.hasValue(Ct.SPREAD)&&(s=!0,t=e.step());const r=t.value;return e.step(),new _e(r,s)}#gt(e){const t=e.current;if(!1!==t.hasValue(Ct.ASSIGN))return e.step(),this.#Je(e,!1);t.hasValue(lt.TERMINATOR)&&e.step()}#ot(e,t){let s,r=e.current,i=!1;r.hasValue(_t.GENERATOR)&&(i=!0,r=e.step()),this.#Ue(r)&&(s=r.value,e.step());const n=this.#St(e,gt.CLOSE);if(r=e.current,!1===r.hasValue(zt.OPEN))throw new Jt(zt.OPEN,r.start);const a=this.#vt(e);return i?new qe(s,n,a,t):new ze(s,n,a,t)}#tt(e,t){let s,r,i=e.current;if(i.hasValue(gt.OPEN))s=this.#St(e,gt.CLOSE);else{const t=this.#Et(e);s=[new Le(t,void 0)]}if(i=e.current,!1===i.hasValue(Ct.ARROW))throw new Jt(Ct.ARROW,i.start);if(i=e.step(),i.hasValue(zt.OPEN))r=this.#vt(e);else{const t=this.#et(e);r=new ke(t.code)}return new Pe(s,r,t)}#at(e){let t,s,r=e.current;if(this.#Ue(r)&&(t=r.value,r=e.step()),r.hasValue(yt.EXTENDS)&&(r=e.step(),s=r.value,r=e.step()),!1===r.hasValue(zt.OPEN))throw new Jt(zt.OPEN,r.start);const i=this.#bt(e);return new He(t,s,i)}#bt(e){let t=e.step();const s=[];for(;e.notAtEnd();){if(t.hasValue(zt.CLOSE)){e.step();break}const r=this.#Ot(e);s.push(r),t=e.current}return s}#Ot(e){let t=e.current,s="public",r="instance",i=!1;for(;e.notAtEnd();){if(t.hasValue(_t.PRIVATE))s="private";else if(t.hasValue(yt.STATIC))r="static";else{if(!t.hasValue(yt.ASYNC)){if(t.hasValue(yt.CONSTRUCTOR))return this.#At(e);if(t.hasValue(yt.GET))return this.#Tt(e,r);if(t.hasValue(yt.SET))return this.#Nt(e,r);if(t.hasValue(_t.GENERATOR))return e.step(),this.#It(e,s,r,i,!0);break}i=!0}t=e.step()}return e.next.hasValue(gt.OPEN)?this.#It(e,s,r,i,!1):this.#xt(e,s,r)}#At(e){e.step();const t=this.#St(e,gt.CLOSE),s=e.current;if(!1===s.hasValue(zt.OPEN))throw new Jt(zt.OPEN,s.start);const r=this.#vt(e);return new Ve(t,r)}#Tt(e,t){let s="public",r=e.step();r.hasValue(_t.PRIVATE)&&(s="private",r=e.step());const i=r.value;e.step();if(0!==this.#St(e,gt.CLOSE).length)throw new Zt("an empty parameter list");if(r=e.current,!1===r.hasValue(zt.OPEN))throw new Jt(zt.OPEN,r.start);const n=this.#vt(e);return new De(i,s,t,n)}#Nt(e,t){let s="public",r=e.step();r.hasValue(_t.PRIVATE)&&(s="private",r=e.step());const i=r.value;e.step();const n=this.#St(e,gt.CLOSE);if(r=e.current,1!==n.length)throw new Zt("exactly one setter parameter");if(!1===r.hasValue(zt.OPEN))throw new Jt(zt.OPEN,r.start);const a=this.#vt(e);return new je(i,s,t,n[0],a)}#It(e,t,s,r,i){let n=e.current;const a=n.value;e.step();const o=this.#St(e,gt.CLOSE);if(n=e.current,!1===n.hasValue(zt.OPEN))throw new Jt(zt.OPEN,n.start);const c=this.#vt(e);return i?new We(a,t,s,o,c,r):new Fe(a,t,s,o,c,r)}#xt(e,t,s){const r=e.current.value;e.step();const i=this.#gt(e);return new Be(r,t,s,i)}#vt(e){const t=this.#Ct(e,zt.OPEN,zt.CLOSE).generate();return new ke(t)}#et(e){const t=new ss;let s=e.current;for(;e.notAtEnd();){if(s.hasValue(Tt.OPEN)){const r=this.#Ct(e,Tt.OPEN,Tt.CLOSE);t.merge(r),s=e.current}else if(s.hasValue(gt.OPEN)){const r=this.#Ct(e,gt.OPEN,gt.CLOSE);t.merge(r),s=e.current}else if(s.hasValue(zt.OPEN)){const r=this.#Ct(e,zt.OPEN,zt.CLOSE);t.merge(r),s=e.current}else t.append(s),s=e.step();if(void 0===s)break;if(this.#st(s)){s.hasValue(lt.TERMINATOR)&&e.step();break}}const r=t.generate();return new Ge(r)}#Ct(e,t,s){let r=e.current;const i=new ss([r]);for(r=e.step();e.notAtEnd();){if(r.hasValue(t)){const n=this.#Ct(e,t,s);i.merge(n),r=e.current;continue}if(r.hasValue(s))return e.step(),i.append(r),i;i.append(r),r=e.step()}return i}#rt(e,t,s){const r=e.position;this.#Ct(e,t,s);const i=e.current,n=e.position;return e.stepBack(n-r),i}#st(e){return[lt.TERMINATOR,lt.SEPARATOR].includes(e.value)||[Tt.CLOSE,gt.CLOSE,zt.CLOSE].includes(e.value)||Ot(e.value)}#Ue(e){return e.isType(Lt.IDENTIFIER)||e.isType(Lt.KEYWORD)&&At(e.value)}}class ns{merge(e,t){const s=void 0!==e.construct?[e.construct]:[],r=[...this.#Rt(e.fields,t.fields),...s,...this.#Rt(e.methods,t.methods),...this.#Rt(e.getters,t.getters),...this.#Rt(e.setters,t.setters)];return new He(e.identifier,t.identifier,r)}#Rt(e,t){const s=new Map;return t.forEach(e=>s.set(e.identifier,e)),e.forEach(e=>s.set(e.identifier,e)),[...s.values()]}}class as{#Mt=new is;#zt=new ns;fromModule(e,t=!1){const s=Object.entries(e),r=[];for(const[e,i]of s){if("function"!=typeof i.toString)continue;const s=i.toString();if(s.startsWith("class"))r.push(this.fromClass(i,t));else if(s.startsWith("function"))r.push(this.fromFunction(i));else{const t=new _e(e,!1),i=new Ge(s);r.push(new Ye("var",t,i))}}return new Xe(r)}fromClass(e,t=!1){const s=this.isClass(e)?this.#Pt(e):this.#Lt(e);if(!1===t)return s;const r=this.getParentClass(e);if(""===r.name)return s;const i=this.fromClass(r,!0);return this.#zt.merge(s,i)}fromObject(e,t=!0){const s=this.getClass(e);return this.fromClass(s,t)}fromFunction(e){const t=e.toString();return this.#Mt.parseFunction(t)}createInstance(e,t=[]){return new e(...t)}getClass(e){return e.constructor}getParentClass(e){return Object.getPrototypeOf(e)}isClassObject(e){return this.isClass(e.constructor)}isFunctionObject(e){return this.isFunction(e.constructor)}isClass(e){return e.toString().startsWith("class")}isFunction(e){return e.toString().startsWith("function")||e.toString().startsWith("async function")}#Pt(e){const t=e.toString();return this.#Mt.parseClass(t)}#Lt(e){const t=this.createInstance(e),s=this.#kt(e,t);return new He(e.name,void 0,s)}#kt(e,t){return[...this.#$t(t),...this.#Vt(e)]}#$t(e){const t=Object.getOwnPropertyNames(e),s=e,r=[];for(const e of t){const t=s[e],i=void 0!==t?new Ge(String(t)):void 0,n=new Be(e,"public","instance",i);r.push(n)}return r}#Vt(e){const t=Object.getOwnPropertyDescriptors(e.prototype),s=[];for(const e in t){const r=t[e],i=r.value;if(i instanceof Function==!1)continue;const n=this.fromFunction(i);"constructor"===n.identifier?s.push(new Ve(n.parameters,n.body)):void 0!==r.get?s.push(new De(n.identifier,"public","instance",n.body)):void 0!==r.set?s.push(new je(n.identifier,"public","instance",n.parameters[0],n.body)):s.push(new Fe(n.identifier,"public","instance",n.parameters,n.body,n.isAsync))}return s}}const os=new as;class cs extends be{#Dt;constructor(e){super(),this.#Dt=e}canSerialize(e){return e instanceof Object&&os.isClassObject(e)}canDeserialize(e){const t=e;return t instanceof Object&&!0===t.serialized&&"class"===t.name&&"string"==typeof t.key&&t.args instanceof Object&&t.args.constructor===Object&&t.fields instanceof Object&&t.fields.constructor===Object}async serialize(e){const t=os.getClass(e),s=os.fromClass(t,!0),r=this.#jt(s),i=this.#Dt.resolveKey(t);if(void 0===i)throw new ge(t.name);return{serialized:!0,key:i,name:"class",args:await this.#Ft(s,r,e),fields:await this.#Bt(s,r,e)}}#jt(e){const t=e.construct;return(t?.parameters??[]).map(e=>e.binding.identifier)}async#Ft(e,t,s){const r={};for(const[i,n]of t.entries()){const t=e.canRead(n)?await this.serializeOther(s[n]):void 0;r[i.toString()]=t}return r}async#Bt(e,t,s){const r={};for(const i of e.writable){const n=i.identifier;t.includes(n)||!1===e.canRead(n)||(r[n]=await this.serializeOther(s[n]))}return r}async deserialize(e){const t=await this.#Ht(e);if(void 0===t)throw new ge(e.key);if(t instanceof Function==!1)throw new we(e.key);const s=await this.#Ut(t,e.args),r=os.createInstance(t,s);for(const t in e.fields){const s=e.fields[t];r[t]=await this.deserializeOther(s)}return r}async#Ut(e,t){const s=os.fromClass(e,!0).construct,r=(s?.parameters??[]).map((e,s)=>{const r=s.toString(),i=t[r];return this.deserializeOther(i)});return Promise.all(r)}async#Ht(e){return globalThis[e.key]??this.#Dt.resolveClass(e.key)}}class ls extends Error{constructor(e){super(`Invalid date string '${e}'`)}}class us extends be{canSerialize(e){return e instanceof Date}canDeserialize(e){const t=e;return t instanceof Object&&!0===t.serialized&&"Date"===t.name&&"string"==typeof t.value}async serialize(e){return{serialized:!0,name:"Date",value:e.toISOString()}}async deserialize(e){const t=new Date(e.value);if("Invalid Date"===t.toString())throw new ls(e.value);return t}}class hs extends be{canSerialize(e){if(e instanceof Object==!1)return!1;const t=e;return t.constructor===Error||t.constructor===EvalError||t.constructor===RangeError||t.constructor===ReferenceError||t.constructor===SyntaxError||t.constructor===TypeError||t.constructor===URIError||t.constructor===AggregateError}canDeserialize(e){const t=e;return t instanceof Object&&!0===t.serialized&&"Error"===t.name&&t.type in globalThis}async serialize(e){return{serialized:!0,name:"Error",type:e.constructor.name,stack:e.stack,message:e.message,cause:e.cause}}async deserialize(e){const t=new(0,globalThis[e.type])(e.message,{cause:e.cause});return t.stack=e.stack,t}}class ds extends be{canSerialize(e){return e instanceof Map}canDeserialize(e){const t=e;return t instanceof Object&&!0===t.serialized&&"Map"===t.name&&t.entries instanceof Object&&t.entries.keys instanceof Array&&t.entries.values instanceof Array}async serialize(e){const t=[],s=[];for(const[r,i]of e)t.push(await this.serializeOther(r)),s.push(await this.serializeOther(i));return{serialized:!0,name:"Map",entries:{keys:t,values:s}}}async deserialize(e){const t=e.entries.keys,s=e.entries.values,r=new Map;for(let e=0;e<t.length;e++){const i=await this.deserializeOther(t[e]),n=await this.deserializeOther(s[e]);r.set(i,n)}return r}}class ps extends be{canSerialize(e){return e instanceof Object&&e.constructor===Object}canDeserialize(e){return e instanceof Object&&e.constructor===Object}async serialize(e){const t={};for(const s in e){const r=e[s];t[s]=await this.serializeOther(r)}return t}async deserialize(e){const t={};for(const s in e){const r=e[s];t[s]=await this.deserializeOther(r)}return t}}class ms extends be{canSerialize(e){return e instanceof Object==!1}canDeserialize(e){return e instanceof Object==!1}async serialize(e){return e}async deserialize(e){return e}}class fs extends Error{constructor(e,t){super(`Invalid regular expression '${e}' with flags '${t}'`)}}class gs extends be{canSerialize(e){return e instanceof RegExp}canDeserialize(e){const t=e;return t instanceof Object&&!0===t.serialized&&"RegExp"===t.name&&"string"==typeof t.source&&"string"==typeof t.flags}async serialize(e){return{serialized:!0,name:"RegExp",source:e.source,flags:e.flags}}async deserialize(e){try{return new RegExp(e.source,e.flags)}catch{throw new fs(e.source,e.flags)}}}class ws extends be{canSerialize(e){return e instanceof Set}canDeserialize(e){const t=e;return t instanceof Object&&!0===t.serialized&&"Set"===t.name&&t.values instanceof Array}async serialize(e){const t=[];for(const s of e.values())t.push(await this.serializeOther(s));return{serialized:!0,name:"Set",values:t}}async deserialize(e){const t=await Promise.all(e.values.map(async e=>this.deserializeOther(e)));return new Set([...t])}}const ys=new as;class Es extends be{canSerialize(e){return e instanceof Int8Array||e instanceof Uint8Array||e instanceof Uint8ClampedArray||e instanceof Int16Array||e instanceof Uint16Array||e instanceof Int32Array||e instanceof Uint32Array||e instanceof Float32Array||e instanceof Float64Array||e instanceof BigInt64Array||e instanceof BigUint64Array}canDeserialize(e){const t=e;return t instanceof Object&&!0===t.serialized&&"Type