// Auto-generated code, DO NOT EDIT DIRECTLY! // To edit this generated file you have to edit `tasks/ast_tools/src/generators/raw_transfer_lazy.rs`. import { constructorError, TOKEN } from "../../src-js/raw-transfer/lazy-common.js"; import { NodeArray } from "../../src-js/raw-transfer/node-array.js"; const textDecoder = new TextDecoder("utf-8", { ignoreBOM: true }), decodeStr = textDecoder.decode.bind(textDecoder), { fromCodePoint } = String, inspectSymbol = Symbol.for("nodejs.util.inspect.custom"); export class Program { type = "Program"; #internal; constructor(pos, ast) { if (ast?.token !== TOKEN) constructorError(); const { nodes } = ast; const cached = nodes.get(pos); if (cached !== void 0) return cached; this.#internal = { pos, ast, $body: void 0 }; nodes.set(pos, this); } get start() { const internal = this.#internal; return constructU32(internal.pos, internal.ast); } get end() { const internal = this.#internal; return constructU32(internal.pos + 4, internal.ast); } get sourceType() { const internal = this.#internal; return new SourceType(internal.pos + 124, internal.ast); } get hashbang() { const internal = this.#internal; return constructOptionHashbang(internal.pos + 48, internal.ast); } get body() { const internal = this.#internal, cached = internal.$body; if (cached !== void 0) return cached; return (internal.$body = constructVecStatement(internal.pos + 96, internal.ast)); } toJSON() { return { type: "Program", start: this.start, end: this.end, sourceType: this.sourceType, hashbang: this.hashbang, body: this.body, }; } [inspectSymbol]() { return Object.setPrototypeOf(this.toJSON(), DebugProgram.prototype); } } const DebugProgram = class Program {}; function constructExpression(pos, ast) { switch (ast.buffer[pos]) { case 0: return constructBoxBooleanLiteral(pos + 8, ast); case 1: return constructBoxNullLiteral(pos + 8, ast); case 2: return constructBoxNumericLiteral(pos + 8, ast); case 3: return constructBoxBigIntLiteral(pos + 8, ast); case 4: return constructBoxRegExpLiteral(pos + 8, ast); case 5: return constructBoxStringLiteral(pos + 8, ast); case 6: return constructBoxTemplateLiteral(pos + 8, ast); case 7: return constructBoxIdentifierReference(pos + 8, ast); case 8: return constructBoxMetaProperty(pos + 8, ast); case 9: return constructBoxSuper(pos + 8, ast); case 10: return constructBoxArrayExpression(pos + 8, ast); case 11: return constructBoxArrowFunctionExpression(pos + 8, ast); case 12: return constructBoxAssignmentExpression(pos + 8, ast); case 13: return constructBoxAwaitExpression(pos + 8, ast); case 14: return constructBoxBinaryExpression(pos + 8, ast); case 15: return constructBoxCallExpression(pos + 8, ast); case 16: return constructBoxChainExpression(pos + 8, ast); case 17: return constructBoxClass(pos + 8, ast); case 18: return constructBoxConditionalExpression(pos + 8, ast); case 19: return constructBoxFunction(pos + 8, ast); case 20: return constructBoxImportExpression(pos + 8, ast); case 21: return constructBoxLogicalExpression(pos + 8, ast); case 22: return constructBoxNewExpression(pos + 8, ast); case 23: return constructBoxObjectExpression(pos + 8, ast); case 24: return constructBoxParenthesizedExpression(pos + 8, ast); case 25: return constructBoxSequenceExpression(pos + 8, ast); case 26: return constructBoxTaggedTemplateExpression(pos + 8, ast); case 27: return constructBoxThisExpression(pos + 8, ast); case 28: return constructBoxUnaryExpression(pos + 8, ast); case 29: return constructBoxUpdateExpression(pos + 8, ast); case 30: return constructBoxYieldExpression(pos + 8, ast); case 31: return constructBoxPrivateInExpression(pos + 8, ast); case 32: return constructBoxJSXElement(pos + 8, ast); case 33: return constructBoxJSXFragment(pos + 8, ast); case 34: return constructBoxTSAsExpression(pos + 8, ast); case 35: return constructBoxTSSatisfiesExpression(pos + 8, ast); case 36: return constructBoxTSTypeAssertion(pos + 8, ast); case 37: return constructBoxTSNonNullExpression(pos + 8, ast); case 38: return constructBoxTSInstantiationExpression(pos + 8, ast); case 39: return constructBoxV8IntrinsicExpression(pos + 8, ast); case 48: return constructBoxComputedMemberExpression(pos + 8, ast); case 49: return constructBoxStaticMemberExpression(pos + 8, ast); case 50: return constructBoxPrivateFieldExpression(pos + 8, ast); default: throw new Error(`Unexpected discriminant ${ast.buffer[pos]} for Expression`); } } export class IdentifierName { type = "IdentifierName"; #internal; constructor(pos, ast) { if (ast?.token !== TOKEN) constructorError(); const { nodes } = ast; const cached = nodes.get(pos); if (cached !== void 0) return cached; this.#internal = { pos, ast, $name: void 0 }; nodes.set(pos, this); } get start() { const internal = this.#internal; return constructU32(internal.pos, internal.ast); } get end() { const internal = this.#internal; return constructU32(internal.pos + 4, internal.ast); } get name() { const internal = this.#internal, cached = internal.$name; if (cached !== void 0) return cached; return (internal.$name = constructStr(internal.pos + 8, internal.ast)); } toJSON() { return { type: "IdentifierName", start: this.start, end: this.end, name: this.name, }; } [inspectSymbol]() { return Object.setPrototypeOf(this.toJSON(), DebugIdentifierName.prototype); } } const DebugIdentifierName = class IdentifierName {}; export class IdentifierReference { type = "IdentifierReference"; #internal; constructor(pos, ast) { if (ast?.token !== TOKEN) constructorError(); const { nodes } = ast; const cached = nodes.get(pos); if (cached !== void 0) return cached; this.#internal = { pos, ast, $name: void 0 }; nodes.set(pos, this); } get start() { const internal = this.#internal; return constructU32(internal.pos, internal.ast); } get end() { const internal = this.#internal; return constructU32(internal.pos + 4, internal.ast); } get name() { const internal = this.#internal, cached = internal.$name; if (cached !== void 0) return cached; return (internal.$name = constructStr(internal.pos + 8, internal.ast)); } toJSON() { return { type: "IdentifierReference", start: this.start, end: this.end, name: this.name, }; } [inspectSymbol]() { return Object.setPrototypeOf(this.toJSON(), DebugIdentifierReference.prototype); } } const DebugIdentifierReference = class IdentifierReference {}; export class BindingIdentifier { type = "BindingIdentifier"; #internal; constructor(pos, ast) { if (ast?.token !== TOKEN) constructorError(); const { nodes } = ast; const cached = nodes.get(pos); if (cached !== void 0) return cached; this.#internal = { pos, ast, $name: void 0 }; nodes.set(pos, this); } get start() { const internal = this.#internal; return constructU32(internal.pos, internal.ast); } get end() { const internal = this.#internal; return constructU32(internal.pos + 4, internal.ast); } get name() { const internal = this.#internal, cached = internal.$name; if (cached !== void 0) return cached; return (internal.$name = constructStr(internal.pos + 8, internal.ast)); } toJSON() { return { type: "BindingIdentifier", start: this.start, end: this.end, name: this.name, }; } [inspectSymbol]() { return Object.setPrototypeOf(this.toJSON(), DebugBindingIdentifier.prototype); } } const DebugBindingIdentifier = class BindingIdentifier {}; export class LabelIdentifier { type = "LabelIdentifier"; #internal; constructor(pos, ast) { if (ast?.token !== TOKEN) constructorError(); const { nodes } = ast; const cached = nodes.get(pos); if (cached !== void 0) return cached; this.#internal = { pos, ast, $name: void 0 }; nodes.set(pos, this); } get start() { const internal = this.#internal; return constructU32(internal.pos, internal.ast); } get end() { const internal = this.#internal; return constructU32(internal.pos + 4, internal.ast); } get name() { const internal = this.#internal, cached = internal.$name; if (cached !== void 0) return cached; return (internal.$name = constructStr(internal.pos + 8, internal.ast)); } toJSON() { return { type: "LabelIdentifier", start: this.start, end: this.end, name: this.name, }; } [inspectSymbol]() { return Object.setPrototypeOf(this.toJSON(), DebugLabelIdentifier.prototype); } } const DebugLabelIdentifier = class LabelIdentifier {}; export class ThisExpression { type = "ThisExpression"; #internal; constructor(pos, ast) { if (ast?.token !== TOKEN) constructorError(); const { nodes } = ast; const cached = nodes.get(pos); if (cached !== void 0) return cached; this.#internal = { pos, ast }; nodes.set(pos, this); } get start() { const internal = this.#internal; return constructU32(internal.pos, internal.ast); } get end() { const internal = this.#internal; return constructU32(internal.pos + 4, internal.ast); } toJSON() { return { type: "ThisExpression", start: this.start, end: this.end, }; } [inspectSymbol]() { return Object.setPrototypeOf(this.toJSON(), DebugThisExpression.prototype); } } const DebugThisExpression = class ThisExpression {}; export class ArrayExpression { type = "ArrayExpression"; #internal; constructor(pos, ast) { if (ast?.token !== TOKEN) constructorError(); const { nodes } = ast; const cached = nodes.get(pos); if (cached !== void 0) return cached; this.#internal = { pos, ast, $elements: void 0 }; nodes.set(pos, this); } get start() { const internal = this.#internal; return constructU32(internal.pos, internal.ast); } get end() { const internal = this.#internal; return constructU32(internal.pos + 4, internal.ast); } get elements() { const internal = this.#internal, cached = internal.$elements; if (cached !== void 0) return cached; return (internal.$elements = constructVecArrayExpressionElement( internal.pos + 8, internal.ast, )); } toJSON() { return { type: "ArrayExpression", start: this.start, end: this.end, elements: this.elements, }; } [inspectSymbol]() { return Object.setPrototypeOf(this.toJSON(), DebugArrayExpression.prototype); } } const DebugArrayExpression = class ArrayExpression {}; function constructArrayExpressionElement(pos, ast) { switch (ast.buffer[pos]) { case 0: return constructBoxBooleanLiteral(pos + 8, ast); case 1: return constructBoxNullLiteral(pos + 8, ast); case 2: return constructBoxNumericLiteral(pos + 8, ast); case 3: return constructBoxBigIntLiteral(pos + 8, ast); case 4: return constructBoxRegExpLiteral(pos + 8, ast); case 5: return constructBoxStringLiteral(pos + 8, ast); case 6: return constructBoxTemplateLiteral(pos + 8, ast); case 7: return constructBoxIdentifierReference(pos + 8, ast); case 8: return constructBoxMetaProperty(pos + 8, ast); case 9: return constructBoxSuper(pos + 8, ast); case 10: return constructBoxArrayExpression(pos + 8, ast); case 11: return constructBoxArrowFunctionExpression(pos + 8, ast); case 12: return constructBoxAssignmentExpression(pos + 8, ast); case 13: return constructBoxAwaitExpression(pos + 8, ast); case 14: return constructBoxBinaryExpression(pos + 8, ast); case 15: return constructBoxCallExpression(pos + 8, ast); case 16: return constructBoxChainExpression(pos + 8, ast); case 17: return constructBoxClass(pos + 8, ast); case 18: return constructBoxConditionalExpression(pos + 8, ast); case 19: return constructBoxFunction(pos + 8, ast); case 20: return constructBoxImportExpression(pos + 8, ast); case 21: return constructBoxLogicalExpression(pos + 8, ast); case 22: return constructBoxNewExpression(pos + 8, ast); case 23: return constructBoxObjectExpression(pos + 8, ast); case 24: return constructBoxParenthesizedExpression(pos + 8, ast); case 25: return constructBoxSequenceExpression(pos + 8, ast); case 26: return constructBoxTaggedTemplateExpression(pos + 8, ast); case 27: return constructBoxThisExpression(pos + 8, ast); case 28: return constructBoxUnaryExpression(pos + 8, ast); case 29: return constructBoxUpdateExpression(pos + 8, ast); case 30: return constructBoxYieldExpression(pos + 8, ast); case 31: return constructBoxPrivateInExpression(pos + 8, ast); case 32: return constructBoxJSXElement(pos + 8, ast); case 33: return constructBoxJSXFragment(pos + 8, ast); case 34: return constructBoxTSAsExpression(pos + 8, ast); case 35: return constructBoxTSSatisfiesExpression(pos + 8, ast); case 36: return constructBoxTSTypeAssertion(pos + 8, ast); case 37: return constructBoxTSNonNullExpression(pos + 8, ast); case 38: return constructBoxTSInstantiationExpression(pos + 8, ast); case 39: return constructBoxV8IntrinsicExpression(pos + 8, ast); case 48: return constructBoxComputedMemberExpression(pos + 8, ast); case 49: return constructBoxStaticMemberExpression(pos + 8, ast); case 50: return constructBoxPrivateFieldExpression(pos + 8, ast); case 64: return constructBoxSpreadElement(pos + 8, ast); case 65: return new Elision(pos + 8, ast); default: throw new Error(`Unexpected discriminant ${ast.buffer[pos]} for ArrayExpressionElement`); } } export class Elision { type = "Elision"; #internal; constructor(pos, ast) { if (ast?.token !== TOKEN) constructorError(); const { nodes } = ast; const cached = nodes.get(pos); if (cached !== void 0) return cached; this.#internal = { pos, ast }; nodes.set(pos, this); } get start() { const internal = this.#internal; return constructU32(internal.pos, internal.ast); } get end() { const internal = this.#internal; return constructU32(internal.pos + 4, internal.ast); } toJSON() { return { type: "Elision", start: this.start, end: this.end, }; } [inspectSymbol]() { return Object.setPrototypeOf(this.toJSON(), DebugElision.prototype); } } const DebugElision = class Elision {}; export class ObjectExpression { type = "ObjectExpression"; #internal; constructor(pos, ast) { if (ast?.token !== TOKEN) constructorError(); const { nodes } = ast; const cached = nodes.get(pos); if (cached !== void 0) return cached; this.#internal = { pos, ast, $properties: void 0 }; nodes.set(pos, this); } get start() { const internal = this.#internal; return constructU32(internal.pos, internal.ast); } get end() { const internal = this.#internal; return constructU32(internal.pos + 4, internal.ast); } get properties() { const internal = this.#internal, cached = internal.$properties; if (cached !== void 0) return cached; return (internal.$properties = constructVecObjectPropertyKind(internal.pos + 8, internal.ast)); } toJSON() { return { type: "ObjectExpression", start: this.start, end: this.end, properties: this.properties, }; } [inspectSymbol]() { return Object.setPrototypeOf(this.toJSON(), DebugObjectExpression.prototype); } } const DebugObjectExpression = class ObjectExpression {}; function constructObjectPropertyKind(pos, ast) { switch (ast.buffer[pos]) { case 0: return constructBoxObjectProperty(pos + 8, ast); case 1: return constructBoxSpreadElement(pos + 8, ast); default: throw new Error(`Unexpected discriminant ${ast.buffer[pos]} for ObjectPropertyKind`); } } export class ObjectProperty { type = "ObjectProperty"; #internal; constructor(pos, ast) { if (ast?.token !== TOKEN) constructorError(); const { nodes } = ast; const cached = nodes.get(pos); if (cached !== void 0) return cached; this.#internal = { pos, ast }; nodes.set(pos, this); } get start() { const internal = this.#internal; return constructU32(internal.pos, internal.ast); } get end() { const internal = this.#internal; return constructU32(internal.pos + 4, internal.ast); } get kind() { const internal = this.#internal; return constructPropertyKind(internal.pos + 40, internal.ast); } get key() { const internal = this.#internal; return constructPropertyKey(internal.pos + 8, internal.ast); } get value() { const internal = this.#internal; return constructExpression(internal.pos + 24, internal.ast); } get method() { const internal = this.#internal; return constructBool(internal.pos + 41, internal.ast); } get shorthand() { const internal = this.#internal; return constructBool(internal.pos + 42, internal.ast); } get computed() { const internal = this.#internal; return constructBool(internal.pos + 43, internal.ast); } toJSON() { return { type: "ObjectProperty", start: this.start, end: this.end, kind: this.kind, key: this.key, value: this.value, method: this.method, shorthand: this.shorthand, computed: this.computed, }; } [inspectSymbol]() { return Object.setPrototypeOf(this.toJSON(), DebugObjectProperty.prototype); } } const DebugObjectProperty = class ObjectProperty {}; function constructPropertyKey(pos, ast) { switch (ast.buffer[pos]) { case 0: return constructBoxBooleanLiteral(pos + 8, ast); case 1: return constructBoxNullLiteral(pos + 8, ast); case 2: return constructBoxNumericLiteral(pos + 8, ast); case 3: return constructBoxBigIntLiteral(pos + 8, ast); case 4: return constructBoxRegExpLiteral(pos + 8, ast); case 5: return constructBoxStringLiteral(pos + 8, ast); case 6: return constructBoxTemplateLiteral(pos + 8, ast); case 7: return constructBoxIdentifierReference(pos + 8, ast); case 8: return constructBoxMetaProperty(pos + 8, ast); case 9: return constructBoxSuper(pos + 8, ast); case 10: return constructBoxArrayExpression(pos + 8, ast); case 11: return constructBoxArrowFunctionExpression(pos + 8, ast); case 12: return constructBoxAssignmentExpression(pos + 8, ast); case 13: return constructBoxAwaitExpression(pos + 8, ast); case 14: return constructBoxBinaryExpression(pos + 8, ast); case 15: return constructBoxCallExpression(pos + 8, ast); case 16: return constructBoxChainExpression(pos + 8, ast); case 17: return constructBoxClass(pos + 8, ast); case 18: return constructBoxConditionalExpression(pos + 8, ast); case 19: return constructBoxFunction(pos + 8, ast); case 20: return constructBoxImportExpression(pos + 8, ast); case 21: return constructBoxLogicalExpression(pos + 8, ast); case 22: return constructBoxNewExpression(pos + 8, ast); case 23: return constructBoxObjectExpression(pos + 8, ast); case 24: return constructBoxParenthesizedExpression(pos + 8, ast); case 25: return constructBoxSequenceExpression(pos + 8, ast); case 26: return constructBoxTaggedTemplateExpression(pos + 8, ast); case 27: return constructBoxThisExpression(pos + 8, ast); case 28: return constructBoxUnaryExpression(pos + 8, ast); case 29: return constructBoxUpdateExpression(pos + 8, ast); case 30: return constructBoxYieldExpression(pos + 8, ast); case 31: return constructBoxPrivateInExpression(pos + 8, ast); case 32: return constructBoxJSXElement(pos + 8, ast); case 33: return constructBoxJSXFragment(pos + 8, ast); case 34: return constructBoxTSAsExpression(pos + 8, ast); case 35: return constructBoxTSSatisfiesExpression(pos + 8, ast); case 36: return constructBoxTSTypeAssertion(pos + 8, ast); case 37: return constructBoxTSNonNullExpression(pos + 8, ast); case 38: return constructBoxTSInstantiationExpression(pos + 8, ast); case 39: return constructBoxV8IntrinsicExpression(pos + 8, ast); case 48: return constructBoxComputedMemberExpression(pos + 8, ast); case 49: return constructBoxStaticMemberExpression(pos + 8, ast); case 50: return constructBoxPrivateFieldExpression(pos + 8, ast); case 64: return constructBoxIdentifierName(pos + 8, ast); case 65: return constructBoxPrivateIdentifier(pos + 8, ast); default: throw new Error(`Unexpected discriminant ${ast.buffer[pos]} for PropertyKey`); } } function constructPropertyKind(pos, ast) { switch (ast.buffer[pos]) { case 0: return "init"; case 1: return "get"; case 2: return "set"; default: throw new Error(`Unexpected discriminant ${ast.buffer[pos]} for PropertyKind`); } } export class TemplateLiteral { type = "TemplateLiteral"; #internal; constructor(pos, ast) { if (ast?.token !== TOKEN) constructorError(); const { nodes } = ast; const cached = nodes.get(pos); if (cached !== void 0) return cached; this.#internal = { pos, ast, $quasis: void 0, $expressions: void 0 }; nodes.set(pos, this); } get start() { const internal = this.#internal; return constructU32(internal.pos, internal.ast); } get end() { const internal = this.#internal; return constructU32(internal.pos + 4, internal.ast); } get quasis() { const internal = this.#internal, cached = internal.$quasis; if (cached !== void 0) return cached; return (internal.$quasis = constructVecTemplateElement(internal.pos + 8, internal.ast)); } get expressions() { const internal = this.#internal, cached = internal.$expressions; if (cached !== void 0) return cached; return (internal.$expressions = constructVecExpression(internal.pos + 32, internal.ast)); } toJSON() { return { type: "TemplateLiteral", start: this.start, end: this.end, quasis: this.quasis, expressions: this.expressions, }; } [inspectSymbol]() { return Object.setPrototypeOf(this.toJSON(), DebugTemplateLiteral.prototype); } } const DebugTemplateLiteral = class TemplateLiteral {}; export class TaggedTemplateExpression { type = "TaggedTemplateExpression"; #internal; constructor(pos, ast) { if (ast?.token !== TOKEN) constructorError(); const { nodes } = ast; const cached = nodes.get(pos); if (cached !== void 0) return cached; this.#internal = { pos, ast }; nodes.set(pos, this); } get start() { const internal = this.#internal; return constructU32(internal.pos, internal.ast); } get end() { const internal = this.#internal; return constructU32(internal.pos + 4, internal.ast); } get tag() { const internal = this.#internal; return constructExpression(internal.pos + 8, internal.ast); } get typeArguments() { const internal = this.#internal; return constructOptionBoxTSTypeParameterInstantiation(internal.pos + 24, internal.ast); } get quasi() { const internal = this.#internal; return new TemplateLiteral(internal.pos + 32, internal.ast); } toJSON() { return { type: "TaggedTemplateExpression", start: this.start, end: this.end, tag: this.tag, typeArguments: this.typeArguments, quasi: this.quasi, }; } [inspectSymbol]() { return Object.setPrototypeOf(this.toJSON(), DebugTaggedTemplateExpression.prototype); } } const DebugTaggedTemplateExpression = class TaggedTemplateExpression {}; export class TemplateElement { type = "TemplateElement"; #internal; constructor(pos, ast) { if (ast?.token !== TOKEN) constructorError(); const { nodes } = ast; const cached = nodes.get(pos); if (cached !== void 0) return cached; this.#internal = { pos, ast }; nodes.set(pos, this); } get start() { const internal = this.#internal; return constructU32(internal.pos, internal.ast); } get end() { const internal = this.#internal; return constructU32(internal.pos + 4, internal.ast); } get value() { const internal = this.#internal; return new TemplateElementValue(internal.pos + 8, internal.ast); } get tail() { const internal = this.#internal; return constructBool(internal.pos + 40, internal.ast); } toJSON() { return { type: "TemplateElement", start: this.start, end: this.end, value: this.value, tail: this.tail, }; } [inspectSymbol]() { return Object.setPrototypeOf(this.toJSON(), DebugTemplateElement.prototype); } } const DebugTemplateElement = class TemplateElement {}; export class TemplateElementValue { #internal; constructor(pos, ast) { if (ast?.token !== TOKEN) constructorError(); const { nodes } = ast; const cached = nodes.get(pos); if (cached !== void 0) return cached; this.#internal = { pos, ast, $raw: void 0, $cooked: void 0 }; nodes.set(pos, this); } get raw() { const internal = this.#internal, cached = internal.$raw; if (cached !== void 0) return cached; return (internal.$raw = constructStr(internal.pos, internal.ast)); } get cooked() { const internal = this.#internal, cached = internal.$cooked; if (cached !== void 0) return cached; return (internal.$cooked = constructOptionStr(internal.pos + 16, internal.ast)); } toJSON() { return { raw: this.raw, cooked: this.cooked, }; } [inspectSymbol]() { return Object.setPrototypeOf(this.toJSON(), DebugTemplateElementValue.prototype); } } const DebugTemplateElementValue = class TemplateElementValue {}; function constructMemberExpression(pos, ast) { switch (ast.buffer[pos]) { case 48: return constructBoxComputedMemberExpression(pos + 8, ast); case 49: return constructBoxStaticMemberExpression(pos + 8, ast); case 50: return constructBoxPrivateFieldExpression(pos + 8, ast); default: throw new Error(`Unexpected discriminant ${ast.buffer[pos]} for MemberExpression`); } } export class ComputedMemberExpression { type = "ComputedMemberExpression"; #internal; constructor(pos, ast) { if (ast?.token !== TOKEN) constructorError(); const { nodes } = ast; const cached = nodes.get(pos); if (cached !== void 0) return cached; this.#internal = { pos, ast }; nodes.set(pos, this); } get start() { const internal = this.#internal; return constructU32(internal.pos, internal.ast); } get end() { const internal = this.#internal; return constructU32(internal.pos + 4, internal.ast); } get object() { const internal = this.#internal; return constructExpression(internal.pos + 8, internal.ast); } get property() { const internal = this.#internal; return constructExpression(internal.pos + 24, internal.ast); } get optional() { const internal = this.#internal; return constructBool(internal.pos + 40, internal.ast); } toJSON() { return { type: "ComputedMemberExpression", start: this.start, end: this.end, object: this.object, property: this.property, optional: this.optional, }; } [inspectSymbol]() { return Object.setPrototypeOf(this.toJSON(), DebugComputedMemberExpression.prototype); } } const DebugComputedMemberExpression = class ComputedMemberExpression {}; export class StaticMemberExpression { type = "StaticMemberExpression"; #internal; constructor(pos, ast) { if (ast?.token !== TOKEN) constructorError(); const { nodes } = ast; const cached = nodes.get(pos); if (cached !== void 0) return cached; this.#internal = { pos, ast }; nodes.set(pos, this); } get start() { const internal = this.#internal; return constructU32(internal.pos, internal.ast); } get end() { const internal = this.#internal; return constructU32(internal.pos + 4, internal.ast); } get object() { const internal = this.#internal; return constructExpression(internal.pos + 8, internal.ast); } get property() { const internal = this.#internal; return new IdentifierName(internal.pos + 24, internal.ast); } get optional() { const internal = this.#internal; return constructBool(internal.pos + 48, internal.ast); } toJSON() { return { type: "StaticMemberExpression", start: this.start, end: this.end, object: this.object, property: this.property, optional: this.optional, }; } [inspectSymbol]() { return Object.setPrototypeOf(this.toJSON(), DebugStaticMemberExpression.prototype); } } const DebugStaticMemberExpression = class StaticMemberExpression {}; export class PrivateFieldExpression { type = "PrivateFieldExpression"; #internal; constructor(pos, ast) { if (ast?.token !== TOKEN) constructorError(); const { nodes } = ast; const cached = nodes.get(pos); if (cached !== void 0) return cached; this.#internal = { pos, ast }; nodes.set(pos, this); } get start() { const internal = this.#internal; return constructU32(internal.pos, internal.ast); } get end() { const internal = this.#internal; return constructU32(internal.pos + 4, internal.ast); } get object() { const internal = this.#internal; return constructExpression(internal.pos + 8, internal.ast); } get property() { const internal = this.#internal; return new PrivateIdentifier(internal.pos + 24, internal.ast); } get optional() { const internal = this.#internal; return constructBool(internal.pos + 48, internal.ast); } toJSON() { return { type: "PrivateFieldExpression", start: this.start, end: this.end, object: this.object, property: this.property, optional: this.optional, }; } [inspectSymbol]() { return Object.setPrototypeOf(this.toJSON(), DebugPrivateFieldExpression.prototype); } } const DebugPrivateFieldExpression = class PrivateFieldExpression {}; export class CallExpression { type = "CallExpression"; #internal; constructor(pos, ast) { if (ast?.token !== TOKEN) constructorError(); const { nodes } = ast; const cached = nodes.get(pos); if (cached !== void 0) return cached; this.#internal = { pos, ast, $arguments: void 0 }; nodes.set(pos, this); } get start() { const internal = this.#internal; return constructU32(internal.pos, internal.ast); } get end() { const internal = this.#internal; return constructU32(internal.pos + 4, internal.ast); } get callee() { const internal = this.#internal; return constructExpression(internal.pos + 8, internal.ast); } get typeArguments() { const internal = this.#internal; return constructOptionBoxTSTypeParameterInstantiation(internal.pos + 24, internal.ast); } get arguments() { const internal = this.#internal, cached = internal.$arguments; if (cached !== void 0) return cached; return (internal.$arguments = constructVecArgument(internal.pos + 32, internal.ast)); } get optional() { const internal = this.#internal; return constructBool(internal.pos + 56, internal.ast); } toJSON() { return { type: "CallExpression", start: this.start, end: this.end, callee: this.callee, typeArguments: this.typeArguments, arguments: this.arguments, optional: this.optional, }; } [inspectSymbol]() { return Object.setPrototypeOf(this.toJSON(), DebugCallExpression.prototype); } } const DebugCallExpression = class CallExpression {}; export class NewExpression { type = "NewExpression"; #internal; constructor(pos, ast) { if (ast?.token !== TOKEN) constructorError(); const { nodes } = ast; const cached = nodes.get(pos); if (cached !== void 0) return cached; this.#internal = { pos, ast, $arguments: void 0 }; nodes.set(pos, this); } get start() { const internal = this.#internal; return constructU32(internal.pos, internal.ast); } get end() { const internal = this.#internal; return constructU32(internal.pos + 4, internal.ast); } get callee() { const internal = this.#internal; return constructExpression(internal.pos + 8, internal.ast); } get typeArguments() { const internal = this.#internal; return constructOptionBoxTSTypeParameterInstantiation(internal.pos + 24, internal.ast); } get arguments() { const internal = this.#internal, cached = internal.$arguments; if (cached !== void 0) return cached; return (internal.$arguments = constructVecArgument(internal.pos + 32, internal.ast)); } toJSON() { return { type: "NewExpression", start: this.start, end: this.end, callee: this.callee, typeArguments: this.typeArguments, arguments: this.arguments, }; } [inspectSymbol]() { return Object.setPrototypeOf(this.toJSON(), DebugNewExpression.prototype); } } const DebugNewExpression = class NewExpression {}; export class MetaProperty { type = "MetaProperty"; #internal; constructor(pos, ast) { if (ast?.token !== TOKEN) constructorError(); const { nodes } = ast; const cached = nodes.get(pos); if (cached !== void 0) return cached; this.#internal = { pos, ast }; nodes.set(pos, this); } get start() { const internal = this.#internal; return constructU32(internal.pos, internal.ast); } get end() { const internal = this.#internal; return constructU32(internal.pos + 4, internal.ast); } get meta() { const internal = this.#internal; return new IdentifierName(internal.pos + 8, internal.ast); } get property() { const internal = this.#internal; return new IdentifierName(internal.pos + 32, internal.ast); } toJSON() { return { type: "MetaProperty", start: this.start, end: this.end, meta: this.meta, property: this.property, }; } [inspectSymbol]() { return Object.setPrototypeOf(this.toJSON(), DebugMetaProperty.prototype); } } const DebugMetaProperty = class MetaProperty {}; export class SpreadElement { type = "SpreadElement"; #internal; constructor(pos, ast) { if (ast?.token !== TOKEN) constructorError(); const { nodes } = ast; const cached = nodes.get(pos); if (cached !== void 0) return cached; this.#internal = { pos, ast }; nodes.set(pos, this); } get start() { const internal = this.#internal; return constructU32(internal.pos, internal.ast); } get end() { const internal = this.#internal; return constructU32(internal.pos + 4, internal.ast); } get argument() { const internal = this.#internal; return constructExpression(internal.pos + 8, internal.ast); } toJSON() { return { type: "SpreadElement", start: this.start, end: this.end, argument: this.argument, }; } [inspectSymbol]() { return Object.setPrototypeOf(this.toJSON(), DebugSpreadElement.prototype); } } const DebugSpreadElement = class SpreadElement {}; function constructArgument(pos, ast) { switch (ast.buffer[pos]) { case 0: return constructBoxBooleanLiteral(pos + 8, ast); case 1: return constructBoxNullLiteral(pos + 8, ast); case 2: return constructBoxNumericLiteral(pos + 8, ast); case 3: return constructBoxBigIntLiteral(pos + 8, ast); case 4: return constructBoxRegExpLiteral(pos + 8, ast); case 5: return constructBoxStringLiteral(pos + 8, ast); case 6: return constructBoxTemplateLiteral(pos + 8, ast); case 7: return constructBoxIdentifierReference(pos + 8, ast); case 8: return constructBoxMetaProperty(pos + 8, ast); case 9: return constructBoxSuper(pos + 8, ast); case 10: return constructBoxArrayExpression(pos + 8, ast); case 11: return constructBoxArrowFunctionExpression(pos + 8, ast); case 12: return constructBoxAssignmentExpression(pos + 8, ast); case 13: return constructBoxAwaitExpression(pos + 8, ast); case 14: return constructBoxBinaryExpression(pos + 8, ast); case 15: return constructBoxCallExpression(pos + 8, ast); case 16: return constructBoxChainExpression(pos + 8, ast); case 17: return constructBoxClass(pos + 8, ast); case 18: return constructBoxConditionalExpression(pos + 8, ast); case 19: return constructBoxFunction(pos + 8, ast); case 20: return constructBoxImportExpression(pos + 8, ast); case 21: return constructBoxLogicalExpression(pos + 8, ast); case 22: return constructBoxNewExpression(pos + 8, ast); case 23: return constructBoxObjectExpression(pos + 8, ast); case 24: return constructBoxParenthesizedExpression(pos + 8, ast); case 25: return constructBoxSequenceExpression(pos + 8, ast); case 26: return constructBoxTaggedTemplateExpression(pos + 8, ast); case 27: return constructBoxThisExpression(pos + 8, ast); case 28: return constructBoxUnaryExpression(pos + 8, ast); case 29: return constructBoxUpdateExpression(pos + 8, ast); case 30: return constructBoxYieldExpression(pos + 8, ast); case 31: return constructBoxPrivateInExpression(pos + 8, ast); case 32: return constructBoxJSXElement(pos + 8, ast); case 33: return constructBoxJSXFragment(pos + 8, ast); case 34: return constructBoxTSAsExpression(pos + 8, ast); case 35: return constructBoxTSSatisfiesExpression(pos + 8, ast); case 36: return constructBoxTSTypeAssertion(pos + 8, ast); case 37: return constructBoxTSNonNullExpression(pos + 8, ast); case 38: return constructBoxTSInstantiationExpression(pos + 8, ast); case 39: return constructBoxV8IntrinsicExpression(pos + 8, ast); case 48: return constructBoxComputedMemberExpression(pos + 8, ast); case 49: return constructBoxStaticMemberExpression(pos + 8, ast); case 50: return constructBoxPrivateFieldExpression(pos + 8, ast); case 64: return constructBoxSpreadElement(pos + 8, ast); default: throw new Error(`Unexpected discriminant ${ast.buffer[pos]} for Argument`); } } export class UpdateExpression { type = "UpdateExpression"; #internal; constructor(pos, ast) { if (ast?.token !== TOKEN) constructorError(); const { nodes } = ast; const cached = nodes.get(pos); if (cached !== void 0) return cached; this.#internal = { pos, ast }; nodes.set(pos, this); } get start() { const internal = this.#internal; return constructU32(internal.pos, internal.ast); } get end() { const internal = this.#internal; return constructU32(internal.pos + 4, internal.ast); } get operator() { const internal = this.#internal; return constructUpdateOperator(internal.pos + 24, internal.ast); } get prefix() { const internal = this.#internal; return constructBool(internal.pos + 25, internal.ast); } get argument() { const internal = this.#internal; return constructSimpleAssignmentTarget(internal.pos + 8, internal.ast); } toJSON() { return { type: "UpdateExpression", start: this.start, end: this.end, operator: this.operator, prefix: this.prefix, argument: this.argument, }; } [inspectSymbol]() { return Object.setPrototypeOf(this.toJSON(), DebugUpdateExpression.prototype); } } const DebugUpdateExpression = class UpdateExpression {}; export class UnaryExpression { type = "UnaryExpression"; #internal; constructor(pos, ast) { if (ast?.token !== TOKEN) constructorError(); const { nodes } = ast; const cached = nodes.get(pos); if (cached !== void 0) return cached; this.#internal = { pos, ast }; nodes.set(pos, this); } get start() { const internal = this.#internal; return constructU32(internal.pos, internal.ast); } get end() { const internal = this.#internal; return constructU32(internal.pos + 4, internal.ast); } get operator() { const internal = this.#internal; return constructUnaryOperator(internal.pos + 24, internal.ast); } get argument() { const internal = this.#internal; return constructExpression(internal.pos + 8, internal.ast); } toJSON() { return { type: "UnaryExpression", start: this.start, end: this.end, operator: this.operator, argument: this.argument, }; } [inspectSymbol]() { return Object.setPrototypeOf(this.toJSON(), DebugUnaryExpression.prototype); } } const DebugUnaryExpression = class UnaryExpression {}; export class BinaryExpression { type = "BinaryExpression"; #internal; constructor(pos, ast) { if (ast?.token !== TOKEN) constructorError(); const { nodes } = ast; const cached = nodes.get(pos); if (cached !== void 0) return cached; this.#internal = { pos, ast }; nodes.set(pos, this); } get start() { const internal = this.#internal; return constructU32(internal.pos, internal.ast); } get end() { const internal = this.#internal; return constructU32(internal.pos + 4, internal.ast); } get left() { const internal = this.#internal; return constructExpression(internal.pos + 8, internal.ast); } get operator() { const internal = this.#internal; return constructBinaryOperator(internal.pos + 40, internal.ast); } get right() { const internal = this.#internal; return constructExpression(internal.pos + 24, internal.ast); } toJSON() { return { type: "BinaryExpression", start: this.start, end: this.end, left: this.left, operator: this.operator, right: this.right, }; } [inspectSymbol]() { return Object.setPrototypeOf(this.toJSON(), DebugBinaryExpression.prototype); } } const DebugBinaryExpression = class BinaryExpression {}; export class PrivateInExpression { type = "PrivateInExpression"; #internal; constructor(pos, ast) { if (ast?.token !== TOKEN) constructorError(); const { nodes } = ast; const cached = nodes.get(pos); if (cached !== void 0) return cached; this.#internal = { pos, ast }; nodes.set(pos, this); } get start() { const internal = this.#internal; return constructU32(internal.pos, internal.ast); } get end() { const internal = this.#internal; return constructU32(internal.pos + 4, internal.ast); } get left() { const internal = this.#internal; return new PrivateIdentifier(internal.pos + 8, internal.ast); } get right() { const internal = this.#internal; return constructExpression(internal.pos + 32, internal.ast); } toJSON() { return { type: "PrivateInExpression", start: this.start, end: this.end, left: this.left, right: this.right, }; } [inspectSymbol]() { return Object.setPrototypeOf(this.toJSON(), DebugPrivateInExpression.prototype); } } const DebugPrivateInExpression = class PrivateInExpression {}; export class LogicalExpression { type = "LogicalExpression"; #internal; constructor(pos, ast) { if (ast?.token !== TOKEN) constructorError(); const { nodes } = ast; const cached = nodes.get(pos); if (cached !== void 0) return cached; this.#internal = { pos, ast }; nodes.set(pos, this); } get start() { const internal = this.#internal; return constructU32(internal.pos, internal.ast); } get end() { const internal = this.#internal; return constructU32(internal.pos + 4, internal.ast); } get left() { const internal = this.#internal; return constructExpression(internal.pos + 8, internal.ast); } get operator() { const internal = this.#internal; return constructLogicalOperator(internal.pos + 40, internal.ast); } get right() { const internal = this.#internal; return constructExpression(internal.pos + 24, internal.ast); } toJSON() { return { type: "LogicalExpression", start: this.start, end: this.end, left: this.left, operator: this.operator, right: this.right, }; } [inspectSymbol]() { return Object.setPrototypeOf(this.toJSON(), DebugLogicalExpression.prototype); } } const DebugLogicalExpression = class LogicalExpression {}; export class ConditionalExpression { type = "ConditionalExpression"; #internal; constructor(pos, ast) { if (ast?.token !== TOKEN) constructorError(); const { nodes } = ast; const cached = nodes.get(pos); if (cached !== void 0) return cached; this.#internal = { pos, ast }; nodes.set(pos, this); } get start() { const internal = this.#internal; return constructU32(internal.pos, internal.ast); } get end() { const internal = this.#internal; return constructU32(internal.pos + 4, internal.ast); } get test() { const internal = this.#internal; return constructExpression(internal.pos + 8, internal.ast); } get consequent() { const internal = this.#internal; return constructExpression(internal.pos + 24, internal.ast); } get alternate() { const internal = this.#internal; return constructExpression(internal.pos + 40, internal.ast); } toJSON() { return { type: "ConditionalExpression", start: this.start, end: this.end, test: this.test, consequent: this.consequent, alternate: this.alternate, }; } [inspectSymbol]() { return Object.setPrototypeOf(this.toJSON(), DebugConditionalExpression.prototype); } } const DebugConditionalExpression = class ConditionalExpression {}; export class AssignmentExpression { type = "AssignmentExpression"; #internal; constructor(pos, ast) { if (ast?.token !== TOKEN) constructorError(); const { nodes } = ast; const cached = nodes.get(pos); if (cached !== void 0) return cached; this.#internal = { pos, ast }; nodes.set(pos, this); } get start() { const internal = this.#internal; return constructU32(internal.pos, internal.ast); } get end() { const internal = this.#internal; return constructU32(internal.pos + 4, internal.ast); } get operator() { const internal = this.#internal; return constructAssignmentOperator(internal.pos + 40, internal.ast); } get left() { const internal = this.#internal; return constructAssignmentTarget(internal.pos + 8, internal.ast); } get right() { const internal = this.#internal; return constructExpression(internal.pos + 24, internal.ast); } toJSON() { return { type: "AssignmentExpression", start: this.start, end: this.end, operator: this.operator, left: this.left, right: this.right, }; } [inspectSymbol]() { return Object.setPrototypeOf(this.toJSON(), DebugAssignmentExpression.prototype); } } const DebugAssignmentExpression = class AssignmentExpression {}; function constructAssignmentTarget(pos, ast) { switch (ast.buffer[pos]) { case 0: return constructBoxIdentifierReference(pos + 8, ast); case 1: return constructBoxTSAsExpression(pos + 8, ast); case 2: return constructBoxTSSatisfiesExpression(pos + 8, ast); case 3: return constructBoxTSNonNullExpression(pos + 8, ast); case 4: return constructBoxTSTypeAssertion(pos + 8, ast); case 8: return constructBoxArrayAssignmentTarget(pos + 8, ast); case 9: return constructBoxObjectAssignmentTarget(pos + 8, ast); case 48: return constructBoxComputedMemberExpression(pos + 8, ast); case 49: return constructBoxStaticMemberExpression(pos + 8, ast); case 50: return constructBoxPrivateFieldExpression(pos + 8, ast); default: throw new Error(`Unexpected discriminant ${ast.buffer[pos]} for AssignmentTarget`); } } function constructSimpleAssignmentTarget(pos, ast) { switch (ast.buffer[pos]) { case 0: return constructBoxIdentifierReference(pos + 8, ast); case 1: return constructBoxTSAsExpression(pos + 8, ast); case 2: return constructBoxTSSatisfiesExpression(pos + 8, ast); case 3: return constructBoxTSNonNullExpression(pos + 8, ast); case 4: return constructBoxTSTypeAssertion(pos + 8, ast); case 48: return constructBoxComputedMemberExpression(pos + 8, ast); case 49: return constructBoxStaticMemberExpression(pos + 8, ast); case 50: return constructBoxPrivateFieldExpression(pos + 8, ast); default: throw new Error(`Unexpected discriminant ${ast.buffer[pos]} for SimpleAssignmentTarget`); } } function constructAssignmentTargetPattern(pos, ast) { switch (ast.buffer[pos]) { case 8: return constructBoxArrayAssignmentTarget(pos + 8, ast); case 9: return constructBoxObjectAssignmentTarget(pos + 8, ast); default: throw new Error(`Unexpected discriminant ${ast.buffer[pos]} for AssignmentTargetPattern`); } } export class ArrayAssignmentTarget { type = "ArrayAssignmentTarget"; #internal; constructor(pos, ast) { if (ast?.token !== TOKEN) constructorError(); const { nodes } = ast; const cached = nodes.get(pos); if (cached !== void 0) return cached; this.#internal = { pos, ast, $elements: void 0 }; nodes.set(pos, this); } get start() { const internal = this.#internal; return constructU32(internal.pos, internal.ast); } get end() { const internal = this.#internal; return constructU32(internal.pos + 4, internal.ast); } get elements() { const internal = this.#internal, cached = internal.$elements; if (cached !== void 0) return cached; return (internal.$elements = constructVecOptionAssignmentTargetMaybeDefault( internal.pos + 8, internal.ast, )); } toJSON() { return { type: "ArrayAssignmentTarget", start: this.start, end: this.end, elements: this.elements, }; } [inspectSymbol]() { return Object.setPrototypeOf(this.toJSON(), DebugArrayAssignmentTarget.prototype); } } const DebugArrayAssignmentTarget = class ArrayAssignmentTarget {}; export class ObjectAssignmentTarget { type = "ObjectAssignmentTarget"; #internal; constructor(pos, ast) { if (ast?.token !== TOKEN) constructorError(); const { nodes } = ast; const cached = nodes.get(pos); if (cached !== void 0) return cached; this.#internal = { pos, ast, $properties: void 0 }; nodes.set(pos, this); } get start() { const internal = this.#internal; return constructU32(internal.pos, internal.ast); } get end() { const internal = this.#internal; return constructU32(internal.pos + 4, internal.ast); } get properties() { const internal = this.#internal, cached = internal.$properties; if (cached !== void 0) return cached; return (internal.$properties = constructVecAssignmentTargetProperty( internal.pos + 8, internal.ast, )); } toJSON() { return { type: "ObjectAssignmentTarget", start: this.start, end: this.end, properties: this.properties, }; } [inspectSymbol]() { return Object.setPrototypeOf(this.toJSON(), DebugObjectAssignmentTarget.prototype); } } const DebugObjectAssignmentTarget = class ObjectAssignmentTarget {}; export class AssignmentTargetRest { type = "AssignmentTargetRest"; #internal; constructor(pos, ast) { if (ast?.token !== TOKEN) constructorError(); const { nodes } = ast; const cached = nodes.get(pos); if (cached !== void 0) return cached; this.#internal = { pos, ast }; nodes.set(pos, this); } get start() { const internal = this.#internal; return constructU32(internal.pos, internal.ast); } get end() { const internal = this.#internal; return constructU32(internal.pos + 4, internal.ast); } get argument() { const internal = this.#internal; return constructAssignmentTarget(internal.pos + 8, internal.ast); } toJSON() { return { type: "AssignmentTargetRest", start: this.start, end: this.end, argument: this.argument, }; } [inspectSymbol]() { return Object.setPrototypeOf(this.toJSON(), DebugAssignmentTargetRest.prototype); } } const DebugAssignmentTargetRest = class AssignmentTargetRest {}; function constructAssignmentTargetMaybeDefault(pos, ast) { switch (ast.buffer[pos]) { case 0: return constructBoxIdentifierReference(pos + 8, ast); case 1: return constructBoxTSAsExpression(pos + 8, ast); case 2: return constructBoxTSSatisfiesExpression(pos + 8, ast); case 3: return constructBoxTSNonNullExpression(pos + 8, ast); case 4: return constructBoxTSTypeAssertion(pos + 8, ast); case 8: return constructBoxArrayAssignmentTarget(pos + 8, ast); case 9: return constructBoxObjectAssignmentTarget(pos + 8, ast); case 16: return constructBoxAssignmentTargetWithDefault(pos + 8, ast); case 48: return constructBoxComputedMemberExpression(pos + 8, ast); case 49: return constructBoxStaticMemberExpression(pos + 8, ast); case 50: return constructBoxPrivateFieldExpression(pos + 8, ast); default: throw new Error( `Unexpected discriminant ${ast.buffer[pos]} for AssignmentTargetMaybeDefault`, ); } } export class AssignmentTargetWithDefault { type = "AssignmentTargetWithDefault"; #internal; constructor(pos, ast) { if (ast?.token !== TOKEN) constructorError(); const { nodes } = ast; const cached = nodes.get(pos); if (cached !== void 0) return cached; this.#internal = { pos, ast }; nodes.set(pos, this); } get start() { const internal = this.#internal; return constructU32(internal.pos, internal.ast); } get end() { const internal = this.#internal; return constructU32(internal.pos + 4, internal.ast); } get left() { const internal = this.#internal; return constructAssignmentTarget(internal.pos + 8, internal.ast); } get right() { const internal = this.#internal; return constructExpression(internal.pos + 24, internal.ast); } toJSON() { return { type: "AssignmentTargetWithDefault", start: this.start, end: this.end, left: this.left, right: this.right, }; } [inspectSymbol]() { return Object.setPrototypeOf(this.toJSON(), DebugAssignmentTargetWithDefault.prototype); } } const DebugAssignmentTargetWithDefault = class AssignmentTargetWithDefault {}; function constructAssignmentTargetProperty(pos, ast) { switch (ast.buffer[pos]) { case 0: return constructBoxAssignmentTargetPropertyIdentifier(pos + 8, ast); case 1: return constructBoxAssignmentTargetPropertyProperty(pos + 8, ast); default: throw new Error(`Unexpected discriminant ${ast.buffer[pos]} for AssignmentTargetProperty`); } } export class AssignmentTargetPropertyIdentifier { type = "AssignmentTargetPropertyIdentifier"; #internal; constructor(pos, ast) { if (ast?.token !== TOKEN) constructorError(); const { nodes } = ast; const cached = nodes.get(pos); if (cached !== void 0) return cached; this.#internal = { pos, ast }; nodes.set(pos, this); } get start() { const internal = this.#internal; return constructU32(internal.pos, internal.ast); } get end() { const internal = this.#internal; return constructU32(internal.pos + 4, internal.ast); } get key() { const internal = this.#internal; return new IdentifierReference(internal.pos + 8, internal.ast); } get value() { const internal = this.#internal; return constructOptionExpression(internal.pos + 40, internal.ast); } toJSON() { return { type: "AssignmentTargetPropertyIdentifier", start: this.start, end: this.end, key: this.key, value: this.value, }; } [inspectSymbol]() { return Object.setPrototypeOf(this.toJSON(), DebugAssignmentTargetPropertyIdentifier.prototype); } } const DebugAssignmentTargetPropertyIdentifier = class AssignmentTargetPropertyIdentifier {}; export class AssignmentTargetPropertyProperty { type = "AssignmentTargetPropertyProperty"; #internal; constructor(pos, ast) { if (ast?.token !== TOKEN) constructorError(); const { nodes } = ast; const cached = nodes.get(pos); if (cached !== void 0) return cached; this.#internal = { pos, ast }; nodes.set(pos, this); } get start() { const internal = this.#internal; return constructU32(internal.pos, internal.ast); } get end() { const internal = this.#internal; return constructU32(internal.pos + 4, internal.ast); } get key() { const internal = this.#internal; return constructPropertyKey(internal.pos + 8, internal.ast); } get value() { const internal = this.#internal; return constructAssignmentTargetMaybeDefault(internal.pos + 24, internal.ast); } get computed() { const internal = this.#internal; return constructBool(internal.pos + 40, internal.ast); } toJSON() { return { type: "AssignmentTargetPropertyProperty", start: this.start, end: this.end, key: this.key, value: this.value, computed: this.computed, }; } [inspectSymbol]() { return Object.setPrototypeOf(this.toJSON(), DebugAssignmentTargetPropertyProperty.prototype); } } const DebugAssignmentTargetPropertyProperty = class AssignmentTargetPropertyProperty {}; export class SequenceExpression { type = "SequenceExpression"; #internal; constructor(pos, ast) { if (ast?.token !== TOKEN) constructorError(); const { nodes } = ast; const cached = nodes.get(pos); if (cached !== void 0) return cached; this.#internal = { pos, ast, $expressions: void 0 }; nodes.set(pos, this); } get start() { const internal = this.#internal; return constructU32(internal.pos, internal.ast); } get end() { const internal = this.#internal; return constructU32(internal.pos + 4, internal.ast); } get expressions() { const internal = this.#internal, cached = internal.$expressions; if (cached !== void 0) return cached; return (internal.$expressions = constructVecExpression(internal.pos + 8, internal.ast)); } toJSON() { return { type: "SequenceExpression", start: this.start, end: this.end, expressions: this.expressions, }; } [inspectSymbol]() { return Object.setPrototypeOf(this.toJSON(), DebugSequenceExpression.prototype); } } const DebugSequenceExpression = class SequenceExpression {}; export class Super { type = "Super"; #internal; constructor(pos, ast) { if (ast?.token !== TOKEN) constructorError(); const { nodes } = ast; const cached = nodes.get(pos); if (cached !== void 0) return cached; this.#internal = { pos, ast }; nodes.set(pos, this); } get start() { const internal = this.#internal; return constructU32(internal.pos, internal.ast); } get end() { const internal = this.#internal; return constructU32(internal.pos + 4, internal.ast); } toJSON() { return { type: "Super", start: this.start, end: this.end, }; } [inspectSymbol]() { return Object.setPrototypeOf(this.toJSON(), DebugSuper.prototype); } } const DebugSuper = class Super {}; export class AwaitExpression { type = "AwaitExpression"; #internal; constructor(pos, ast) { if (ast?.token !== TOKEN) constructorError(); const { nodes } = ast; const cached = nodes.get(pos); if (cached !== void 0) return cached; this.#internal = { pos, ast }; nodes.set(pos, this); } get start() { const internal = this.#internal; return constructU32(internal.pos, internal.ast); } get end() { const internal = this.#internal; return constructU32(internal.pos + 4, internal.ast); } get argument() { const internal = this.#internal; return constructExpression(internal.pos + 8, internal.ast); } toJSON() { return { type: "AwaitExpression", start: this.start, end: this.end, argument: this.argument, }; } [inspectSymbol]() { return Object.setPrototypeOf(this.toJSON(), DebugAwaitExpression.prototype); } } const DebugAwaitExpression = class AwaitExpression {}; export class ChainExpression { type = "ChainExpression"; #internal; constructor(pos, ast) { if (ast?.token !== TOKEN) constructorError(); const { nodes } = ast; const cached = nodes.get(pos); if (cached !== void 0) return cached; this.#internal = { pos, ast }; nodes.set(pos, this); } get start() { const internal = this.#internal; return constructU32(internal.pos, internal.ast); } get end() { const internal = this.#internal; return constructU32(internal.pos + 4, internal.ast); } get expression() { const internal = this.#internal; return constructChainElement(internal.pos + 8, internal.ast); } toJSON() { return { type: "ChainExpression", start: this.start, end: this.end, expression: this.expression, }; } [inspectSymbol]() { return Object.setPrototypeOf(this.toJSON(), DebugChainExpression.prototype); } } const DebugChainExpression = class ChainExpression {}; function constructChainElement(pos, ast) { switch (ast.buffer[pos]) { case 0: return constructBoxCallExpression(pos + 8, ast); case 1: return constructBoxTSNonNullExpression(pos + 8, ast); case 48: return constructBoxComputedMemberExpression(pos + 8, ast); case 49: return constructBoxStaticMemberExpression(pos + 8, ast); case 50: return constructBoxPrivateFieldExpression(pos + 8, ast); default: throw new Error(`Unexpected discriminant ${ast.buffer[pos]} for ChainElement`); } } export class ParenthesizedExpression { type = "ParenthesizedExpression"; #internal; constructor(pos, ast) { if (ast?.token !== TOKEN) constructorError(); const { nodes } = ast; const cached = nodes.get(pos); if (cached !== void 0) return cached; this.#internal = { pos, ast }; nodes.set(pos, this); } get start() { const internal = this.#internal; return constructU32(internal.pos, internal.ast); } get end() { const internal = this.#internal; return constructU32(internal.pos + 4, internal.ast); } get expression() { const internal = this.#internal; return constructExpression(internal.pos + 8, internal.ast); } toJSON() { return { type: "ParenthesizedExpression", start: this.start, end: this.end, expression: this.expression, }; } [inspectSymbol]() { return Object.setPrototypeOf(this.toJSON(), DebugParenthesizedExpression.prototype); } } const DebugParenthesizedExpression = class ParenthesizedExpression {}; function constructStatement(pos, ast) { switch (ast.buffer[pos]) { case 0: return constructBoxBlockStatement(pos + 8, ast); case 1: return constructBoxBreakStatement(pos + 8, ast); case 2: return constructBoxContinueStatement(pos + 8, ast); case 3: return constructBoxDebuggerStatement(pos + 8, ast); case 4: return constructBoxDoWhileStatement(pos + 8, ast); case 5: return constructBoxEmptyStatement(pos + 8, ast); case 6: return constructBoxExpressionStatement(pos + 8, ast); case 7: return constructBoxForInStatement(pos + 8, ast); case 8: return constructBoxForOfStatement(pos + 8, ast); case 9: return constructBoxForStatement(pos + 8, ast); case 10: return constructBoxIfStatement(pos + 8, ast); case 11: return constructBoxLabeledStatement(pos + 8, ast); case 12: return constructBoxReturnStatement(pos + 8, ast); case 13: return constructBoxSwitchStatement(pos + 8, ast); case 14: return constructBoxThrowStatement(pos + 8, ast); case 15: return constructBoxTryStatement(pos + 8, ast); case 16: return constructBoxWhileStatement(pos + 8, ast); case 17: return constructBoxWithStatement(pos + 8, ast); case 32: return constructBoxVariableDeclaration(pos + 8, ast); case 33: return constructBoxFunction(pos + 8, ast); case 34: return constructBoxClass(pos + 8, ast); case 35: return constructBoxTSTypeAliasDeclaration(pos + 8, ast); case 36: return constructBoxTSInterfaceDeclaration(pos + 8, ast); case 37: return constructBoxTSEnumDeclaration(pos + 8, ast); case 38: return constructBoxTSModuleDeclaration(pos + 8, ast); case 39: return constructBoxTSGlobalDeclaration(pos + 8, ast); case 40: return constructBoxTSImportEqualsDeclaration(pos + 8, ast); case 64: return constructBoxImportDeclaration(pos + 8, ast); case 65: return constructBoxExportAllDeclaration(pos + 8, ast); case 66: return constructBoxExportDefaultDeclaration(pos + 8, ast); case 67: return constructBoxExportNamedDeclaration(pos + 8, ast); case 68: return constructBoxTSExportAssignment(pos + 8, ast); case 69: return constructBoxTSNamespaceExportDeclaration(pos + 8, ast); default: throw new Error(`Unexpected discriminant ${ast.buffer[pos]} for Statement`); } } export class Directive { type = "Directive"; #internal; constructor(pos, ast) { if (ast?.token !== TOKEN) constructorError(); const { nodes } = ast; const cached = nodes.get(pos); if (cached !== void 0) return cached; this.#internal = { pos, ast, $directive: void 0 }; nodes.set(pos, this); } get start() { const internal = this.#internal; return constructU32(internal.pos, internal.ast); } get end() { const internal = this.#internal; return constructU32(internal.pos + 4, internal.ast); } get expression() { const internal = this.#internal; return new StringLiteral(internal.pos + 8, internal.ast); } get directive() { const internal = this.#internal, cached = internal.$directive; if (cached !== void 0) return cached; return (internal.$directive = constructStr(internal.pos + 56, internal.ast)); } toJSON() { return { type: "Directive", start: this.start, end: this.end, expression: this.expression, directive: this.directive, }; } [inspectSymbol]() { return Object.setPrototypeOf(this.toJSON(), DebugDirective.prototype); } } const DebugDirective = class Directive {}; export class Hashbang { type = "Hashbang"; #internal; constructor(pos, ast) { if (ast?.token !== TOKEN) constructorError(); const { nodes } = ast; const cached = nodes.get(pos); if (cached !== void 0) return cached; this.#internal = { pos, ast, $value: void 0 }; nodes.set(pos, this); } get start() { const internal = this.#internal; return constructU32(internal.pos, internal.ast); } get end() { const internal = this.#internal; return constructU32(internal.pos + 4, internal.ast); } get value() { const internal = this.#internal, cached = internal.$value; if (cached !== void 0) return cached; return (internal.$value = constructStr(internal.pos + 8, internal.ast)); } toJSON() { return { type: "Hashbang", start: this.start, end: this.end, value: this.value, }; } [inspectSymbol]() { return Object.setPrototypeOf(this.toJSON(), DebugHashbang.prototype); } } const DebugHashbang = class Hashbang {}; export class BlockStatement { type = "BlockStatement"; #internal; constructor(pos, ast) { if (ast?.token !== TOKEN) constructorError(); const { nodes } = ast; const cached = nodes.get(pos); if (cached !== void 0) return cached; this.#internal = { pos, ast, $body: void 0 }; nodes.set(pos, this); } get start() { const internal = this.#internal; return constructU32(internal.pos, internal.ast); } get end() { const internal = this.#internal; return constructU32(internal.pos + 4, internal.ast); } get body() { const internal = this.#internal, cached = internal.$body; if (cached !== void 0) return cached; return (internal.$body = constructVecStatement(internal.pos + 8, internal.ast)); } toJSON() { return { type: "BlockStatement", start: this.start, end: this.end, body: this.body, }; } [inspectSymbol]() { return Object.setPrototypeOf(this.toJSON(), DebugBlockStatement.prototype); } } const DebugBlockStatement = class BlockStatement {}; function constructDeclaration(pos, ast) { switch (ast.buffer[pos]) { case 32: return constructBoxVariableDeclaration(pos + 8, ast); case 33: return constructBoxFunction(pos + 8, ast); case 34: return constructBoxClass(pos + 8, ast); case 35: return constructBoxTSTypeAliasDeclaration(pos + 8, ast); case 36: return constructBoxTSInterfaceDeclaration(pos + 8, ast); case 37: return constructBoxTSEnumDeclaration(pos + 8, ast); case 38: return constructBoxTSModuleDeclaration(pos + 8, ast); case 39: return constructBoxTSGlobalDeclaration(pos + 8, ast); case 40: return constructBoxTSImportEqualsDeclaration(pos + 8, ast); default: throw new Error(`Unexpected discriminant ${ast.buffer[pos]} for Declaration`); } } export class VariableDeclaration { type = "VariableDeclaration"; #internal; constructor(pos, ast) { if (ast?.token !== TOKEN) constructorError(); const { nodes } = ast; const cached = nodes.get(pos); if (cached !== void 0) return cached; this.#internal = { pos, ast, $declarations: void 0 }; nodes.set(pos, this); } get start() { const internal = this.#internal; return constructU32(internal.pos, internal.ast); } get end() { const internal = this.#internal; return constructU32(internal.pos + 4, internal.ast); } get kind() { const internal = this.#internal; return constructVariableDeclarationKind(internal.pos + 32, internal.ast); } get declarations() { const internal = this.#internal, cached = internal.$declarations; if (cached !== void 0) return cached; return (internal.$declarations = constructVecVariableDeclarator( internal.pos + 8, internal.ast, )); } get declare() { const internal = this.#internal; return constructBool(internal.pos + 33, internal.ast); } toJSON() { return { type: "VariableDeclaration", start: this.start, end: this.end, kind: this.kind, declarations: this.declarations, declare: this.declare, }; } [inspectSymbol]() { return Object.setPrototypeOf(this.toJSON(), DebugVariableDeclaration.prototype); } } const DebugVariableDeclaration = class VariableDeclaration {}; function constructVariableDeclarationKind(pos, ast) { switch (ast.buffer[pos]) { case 0: return "var"; case 1: return "let"; case 2: return "const"; case 3: return "using"; case 4: return "await using"; default: throw new Error(`Unexpected discriminant ${ast.buffer[pos]} for VariableDeclarationKind`); } } export class VariableDeclarator { type = "VariableDeclarator"; #internal; constructor(pos, ast) { if (ast?.token !== TOKEN) constructorError(); const { nodes } = ast; const cached = nodes.get(pos); if (cached !== void 0) return cached; this.#internal = { pos, ast }; nodes.set(pos, this); } get start() { const internal = this.#internal; return constructU32(internal.pos, internal.ast); } get end() { const internal = this.#internal; return constructU32(internal.pos + 4, internal.ast); } get id() { const internal = this.#internal; return new BindingPattern(internal.pos + 8, internal.ast); } get init() { const internal = this.#internal; return constructOptionExpression(internal.pos + 40, internal.ast); } get definite() { const internal = this.#internal; return constructBool(internal.pos + 57, internal.ast); } toJSON() { return { type: "VariableDeclarator", start: this.start, end: this.end, id: this.id, init: this.init, definite: this.definite, }; } [inspectSymbol]() { return Object.setPrototypeOf(this.toJSON(), DebugVariableDeclarator.prototype); } } const DebugVariableDeclarator = class VariableDeclarator {}; export class EmptyStatement { type = "EmptyStatement"; #internal; constructor(pos, ast) { if (ast?.token !== TOKEN) constructorError(); const { nodes } = ast; const cached = nodes.get(pos); if (cached !== void 0) return cached; this.#internal = { pos, ast }; nodes.set(pos, this); } get start() { const internal = this.#internal; return constructU32(internal.pos, internal.ast); } get end() { const internal = this.#internal; return constructU32(internal.pos + 4, internal.ast); } toJSON() { return { type: "EmptyStatement", start: this.start, end: this.end, }; } [inspectSymbol]() { return Object.setPrototypeOf(this.toJSON(), DebugEmptyStatement.prototype); } } const DebugEmptyStatement = class EmptyStatement {}; export class ExpressionStatement { type = "ExpressionStatement"; #internal; constructor(pos, ast) { if (ast?.token !== TOKEN) constructorError(); const { nodes } = ast; const cached = nodes.get(pos); if (cached !== void 0) return cached; this.#internal = { pos, ast }; nodes.set(pos, this); } get start() { const internal = this.#internal; return constructU32(internal.pos, internal.ast); } get end() { const internal = this.#internal; return constructU32(internal.pos + 4, internal.ast); } get expression() { const internal = this.#internal; return constructExpression(internal.pos + 8, internal.ast); } toJSON() { return { type: "ExpressionStatement", start: this.start, end: this.end, expression: this.expression, }; } [inspectSymbol]() { return Object.setPrototypeOf(this.toJSON(), DebugExpressionStatement.prototype); } } const DebugExpressionStatement = class ExpressionStatement {}; export class IfStatement { type = "IfStatement"; #internal; constructor(pos, ast) { if (ast?.token !== TOKEN) constructorError(); const { nodes } = ast; const cached = nodes.get(pos); if (cached !== void 0) return cached; this.#internal = { pos, ast }; nodes.set(pos, this); } get start() { const internal = this.#internal; return constructU32(internal.pos, internal.ast); } get end() { const internal = this.#internal; return constructU32(internal.pos + 4, internal.ast); } get test() { const internal = this.#internal; return constructExpression(internal.pos + 8, internal.ast); } get consequent() { const internal = this.#internal; return constructStatement(internal.pos + 24, internal.ast); } get alternate() { const internal = this.#internal; return constructOptionStatement(internal.pos + 40, internal.ast); } toJSON() { return { type: "IfStatement", start: this.start, end: this.end, test: this.test, consequent: this.consequent, alternate: this.alternate, }; } [inspectSymbol]() { return Object.setPrototypeOf(this.toJSON(), DebugIfStatement.prototype); } } const DebugIfStatement = class IfStatement {}; export class DoWhileStatement { type = "DoWhileStatement"; #internal; constructor(pos, ast) { if (ast?.token !== TOKEN) constructorError(); const { nodes } = ast; const cached = nodes.get(pos); if (cached !== void 0) return cached; this.#internal = { pos, ast }; nodes.set(pos, this); } get start() { const internal = this.#internal; return constructU32(internal.pos, internal.ast); } get end() { const internal = this.#internal; return constructU32(internal.pos + 4, internal.ast); } get body() { const internal = this.#internal; return constructStatement(internal.pos + 8, internal.ast); } get test() { const internal = this.#internal; return constructExpression(internal.pos + 24, internal.ast); } toJSON() { return { type: "DoWhileStatement", start: this.start, end: this.end, body: this.body, test: this.test, }; } [inspectSymbol]() { return Object.setPrototypeOf(this.toJSON(), DebugDoWhileStatement.prototype); } } const DebugDoWhileStatement = class DoWhileStatement {}; export class WhileStatement { type = "WhileStatement"; #internal; constructor(pos, ast) { if (ast?.token !== TOKEN) constructorError(); const { nodes } = ast; const cached = nodes.get(pos); if (cached !== void 0) return cached; this.#internal = { pos, ast }; nodes.set(pos, this); } get start() { const internal = this.#internal; return constructU32(internal.pos, internal.ast); } get end() { const internal = this.#internal; return constructU32(internal.pos + 4, internal.ast); } get test() { const internal = this.#internal; return constructExpression(internal.pos + 8, internal.ast); } get body() { const internal = this.#internal; return constructStatement(internal.pos + 24, internal.ast); } toJSON() { return { type: "WhileStatement", start: this.start, end: this.end, test: this.test, body: this.body, }; } [inspectSymbol]() { return Object.setPrototypeOf(this.toJSON(), DebugWhileStatement.prototype); } } const DebugWhileStatement = class WhileStatement {}; export class ForStatement { type = "ForStatement"; #internal; constructor(pos, ast) { if (ast?.token !== TOKEN) constructorError(); const { nodes } = ast; const cached = nodes.get(pos); if (cached !== void 0) return cached; this.#internal = { pos, ast }; nodes.set(pos, this); } get start() { const internal = this.#internal; return constructU32(internal.pos, internal.ast); } get end() { const internal = this.#internal; return constructU32(internal.pos + 4, internal.ast); } get init() { const internal = this.#internal; return constructOptionForStatementInit(internal.pos + 8, internal.ast); } get test() { const internal = this.#internal; return constructOptionExpression(internal.pos + 24, internal.ast); } get update() { const internal = this.#internal; return constructOptionExpression(internal.pos + 40, internal.ast); } get body() { const internal = this.#internal; return constructStatement(internal.pos + 56, internal.ast); } toJSON() { return { type: "ForStatement", start: this.start, end: this.end, init: this.init, test: this.test, update: this.update, body: this.body, }; } [inspectSymbol]() { return Object.setPrototypeOf(this.toJSON(), DebugForStatement.prototype); } } const DebugForStatement = class ForStatement {}; function constructForStatementInit(pos, ast) { switch (ast.buffer[pos]) { case 0: return constructBoxBooleanLiteral(pos + 8, ast); case 1: return constructBoxNullLiteral(pos + 8, ast); case 2: return constructBoxNumericLiteral(pos + 8, ast); case 3: return constructBoxBigIntLiteral(pos + 8, ast); case 4: return constructBoxRegExpLiteral(pos + 8, ast); case 5: return constructBoxStringLiteral(pos + 8, ast); case 6: return constructBoxTemplateLiteral(pos + 8, ast); case 7: return constructBoxIdentifierReference(pos + 8, ast); case 8: return constructBoxMetaProperty(pos + 8, ast); case 9: return constructBoxSuper(pos + 8, ast); case 10: return constructBoxArrayExpression(pos + 8, ast); case 11: return constructBoxArrowFunctionExpression(pos + 8, ast); case 12: return constructBoxAssignmentExpression(pos + 8, ast); case 13: return constructBoxAwaitExpression(pos + 8, ast); case 14: return constructBoxBinaryExpression(pos + 8, ast); case 15: return constructBoxCallExpression(pos + 8, ast); case 16: return constructBoxChainExpression(pos + 8, ast); case 17: return constructBoxClass(pos + 8, ast); case 18: return constructBoxConditionalExpression(pos + 8, ast); case 19: return constructBoxFunction(pos + 8, ast); case 20: return constructBoxImportExpression(pos + 8, ast); case 21: return constructBoxLogicalExpression(pos + 8, ast); case 22: return constructBoxNewExpression(pos + 8, ast); case 23: return constructBoxObjectExpression(pos + 8, ast); case 24: return constructBoxParenthesizedExpression(pos + 8, ast); case 25: return constructBoxSequenceExpression(pos + 8, ast); case 26: return constructBoxTaggedTemplateExpression(pos + 8, ast); case 27: return constructBoxThisExpression(pos + 8, ast); case 28: return constructBoxUnaryExpression(pos + 8, ast); case 29: return constructBoxUpdateExpression(pos + 8, ast); case 30: return constructBoxYieldExpression(pos + 8, ast); case 31: return constructBoxPrivateInExpression(pos + 8, ast); case 32: return constructBoxJSXElement(pos + 8, ast); case 33: return constructBoxJSXFragment(pos + 8, ast); case 34: return constructBoxTSAsExpression(pos + 8, ast); case 35: return constructBoxTSSatisfiesExpression(pos + 8, ast); case 36: return constructBoxTSTypeAssertion(pos + 8, ast); case 37: return constructBoxTSNonNullExpression(pos + 8, ast); case 38: return constructBoxTSInstantiationExpression(pos + 8, ast); case 39: return constructBoxV8IntrinsicExpression(pos + 8, ast); case 48: return constructBoxComputedMemberExpression(pos + 8, ast); case 49: return constructBoxStaticMemberExpression(pos + 8, ast); case 50: return constructBoxPrivateFieldExpression(pos + 8, ast); case 64: return constructBoxVariableDeclaration(pos + 8, ast); default: throw new Error(`Unexpected discriminant ${ast.buffer[pos]} for ForStatementInit`); } } export class ForInStatement { type = "ForInStatement"; #internal; constructor(pos, ast) { if (ast?.token !== TOKEN) constructorError(); const { nodes } = ast; const cached = nodes.get(pos); if (cached !== void 0) return cached; this.#internal = { pos, ast }; nodes.set(pos, this); } get start() { const internal = this.#internal; return constructU32(internal.pos, internal.ast); } get end() { const internal = this.#internal; return constructU32(internal.pos + 4, internal.ast); } get left() { const internal = this.#internal; return constructForStatementLeft(internal.pos + 8, internal.ast); } get right() { const internal = this.#internal; return constructExpression(internal.pos + 24, internal.ast); } get body() { const internal = this.#internal; return constructStatement(internal.pos + 40, internal.ast); } toJSON() { return { type: "ForInStatement", start: this.start, end: this.end, left: this.left, right: this.right, body: this.body, }; } [inspectSymbol]() { return Object.setPrototypeOf(this.toJSON(), DebugForInStatement.prototype); } } const DebugForInStatement = class ForInStatement {}; function constructForStatementLeft(pos, ast) { switch (ast.buffer[pos]) { case 0: return constructBoxIdentifierReference(pos + 8, ast); case 1: return constructBoxTSAsExpression(pos + 8, ast); case 2: return constructBoxTSSatisfiesExpression(pos + 8, ast); case 3: return constructBoxTSNonNullExpression(pos + 8, ast); case 4: return constructBoxTSTypeAssertion(pos + 8, ast); case 8: return constructBoxArrayAssignmentTarget(pos + 8, ast); case 9: return constructBoxObjectAssignmentTarget(pos + 8, ast); case 16: return constructBoxVariableDeclaration(pos + 8, ast); case 48: return constructBoxComputedMemberExpression(pos + 8, ast); case 49: return constructBoxStaticMemberExpression(pos + 8, ast); case 50: return constructBoxPrivateFieldExpression(pos + 8, ast); default: throw new Error(`Unexpected discriminant ${ast.buffer[pos]} for ForStatementLeft`); } } export class ForOfStatement { type = "ForOfStatement"; #internal; constructor(pos, ast) { if (ast?.token !== TOKEN) constructorError(); const { nodes } = ast; const cached = nodes.get(pos); if (cached !== void 0) return cached; this.#internal = { pos, ast }; nodes.set(pos, this); } get start() { const internal = this.#internal; return constructU32(internal.pos, internal.ast); } get end() { const internal = this.#internal; return constructU32(internal.pos + 4, internal.ast); } get await() { const internal = this.#internal; return constructBool(internal.pos + 60, internal.ast); } get left() { const internal = this.#internal; return constructForStatementLeft(internal.pos + 8, internal.ast); } get right() { const internal = this.#internal; return constructExpression(internal.pos + 24, internal.ast); } get body() { const internal = this.#internal; return constructStatement(internal.pos + 40, internal.ast); } toJSON() { return { type: "ForOfStatement", start: this.start, end: this.end, await: this.await, left: this.left, right: this.right, body: this.body, }; } [inspectSymbol]() { return Object.setPrototypeOf(this.toJSON(), DebugForOfStatement.prototype); } } const DebugForOfStatement = class ForOfStatement {}; export class ContinueStatement { type = "ContinueStatement"; #internal; constructor(pos, ast) { if (ast?.token !== TOKEN) constructorError(); const { nodes } = ast; const cached = nodes.get(pos); if (cached !== void 0) return cached; this.#internal = { pos, ast }; nodes.set(pos, this); } get start() { const internal = this.#internal; return constructU32(internal.pos, internal.ast); } get end() { const internal = this.#internal; return constructU32(internal.pos + 4, internal.ast); } get label() { const internal = this.#internal; return constructOptionLabelIdentifier(internal.pos + 8, internal.ast); } toJSON() { return { type: "ContinueStatement", start: this.start, end: this.end, label: this.label, }; } [inspectSymbol]() { return Object.setPrototypeOf(this.toJSON(), DebugContinueStatement.prototype); } } const DebugContinueStatement = class ContinueStatement {}; export class BreakStatement { type = "BreakStatement"; #internal; constructor(pos, ast) { if (ast?.token !== TOKEN) constructorError(); const { nodes } = ast; const cached = nodes.get(pos); if (cached !== void 0) return cached; this.#internal = { pos, ast }; nodes.set(pos, this); } get start() { const internal = this.#internal; return constructU32(internal.pos, internal.ast); } get end() { const internal = this.#internal; return constructU32(internal.pos + 4, internal.ast); } get label() { const internal = this.#internal; return constructOptionLabelIdentifier(internal.pos + 8, internal.ast); } toJSON() { return { type: "BreakStatement", start: this.start, end: this.end, label: this.label, }; } [inspectSymbol]() { return Object.setPrototypeOf(this.toJSON(), DebugBreakStatement.prototype); } } const DebugBreakStatement = class BreakStatement {}; export class ReturnStatement { type = "ReturnStatement"; #internal; constructor(pos, ast) { if (ast?.token !== TOKEN) constructorError(); const { nodes } = ast; const cached = nodes.get(pos); if (cached !== void 0) return cached; this.#internal = { pos, ast }; nodes.set(pos, this); } get start() { const internal = this.#internal; return constructU32(internal.pos, internal.ast); } get end() { const internal = this.#internal; return constructU32(internal.pos + 4, internal.ast); } get argument() { const internal = this.#internal; return constructOptionExpression(internal.pos + 8, internal.ast); } toJSON() { return { type: "ReturnStatement", start: this.start, end: this.end, argument: this.argument, }; } [inspectSymbol]() { return Object.setPrototypeOf(this.toJSON(), DebugReturnStatement.prototype); } } const DebugReturnStatement = class ReturnStatement {}; export class WithStatement { type = "WithStatement"; #internal; constructor(pos, ast) { if (ast?.token !== TOKEN) constructorError(); const { nodes } = ast; const cached = nodes.get(pos); if (cached !== void 0) return cached; this.#internal = { pos, ast }; nodes.set(pos, this); } get start() { const internal = this.#internal; return constructU32(internal.pos, internal.ast); } get end() { const internal = this.#internal; return constructU32(internal.pos + 4, internal.ast); } get object() { const internal = this.#internal; return constructExpression(internal.pos + 8, internal.ast); } get body() { const internal = this.#internal; return constructStatement(internal.pos + 24, internal.ast); } toJSON() { return { type: "WithStatement", start: this.start, end: this.end, object: this.object, body: this.body, }; } [inspectSymbol]() { return Object.setPrototypeOf(this.toJSON(), DebugWithStatement.prototype); } } const DebugWithStatement = class WithStatement {}; export class SwitchStatement { type = "SwitchStatement"; #internal; constructor(pos, ast) { if (ast?.token !== TOKEN) constructorError(); const { nodes } = ast; const cached = nodes.get(pos); if (cached !== void 0) return cached; this.#internal = { pos, ast, $cases: void 0 }; nodes.set(pos, this); } get start() { const internal = this.#internal; return constructU32(internal.pos, internal.ast); } get end() { const internal = this.#internal; return constructU32(internal.pos + 4, internal.ast); } get discriminant() { const internal = this.#internal; return constructExpression(internal.pos + 8, internal.ast); } get cases() { const internal = this.#internal, cached = internal.$cases; if (cached !== void 0) return cached; return (internal.$cases = constructVecSwitchCase(internal.pos + 24, internal.ast)); } toJSON() { return { type: "SwitchStatement", start: this.start, end: this.end, discriminant: this.discriminant, cases: this.cases, }; } [inspectSymbol]() { return Object.setPrototypeOf(this.toJSON(), DebugSwitchStatement.prototype); } } const DebugSwitchStatement = class SwitchStatement {}; export class SwitchCase { type = "SwitchCase"; #internal; constructor(pos, ast) { if (ast?.token !== TOKEN) constructorError(); const { nodes } = ast; const cached = nodes.get(pos); if (cached !== void 0) return cached; this.#internal = { pos, ast, $consequent: void 0 }; nodes.set(pos, this); } get start() { const internal = this.#internal; return constructU32(internal.pos, internal.ast); } get end() { const internal = this.#internal; return constructU32(internal.pos + 4, internal.ast); } get test() { const internal = this.#internal; return constructOptionExpression(internal.pos + 8, internal.ast); } get consequent() { const internal = this.#internal, cached = internal.$consequent; if (cached !== void 0) return cached; return (internal.$consequent = constructVecStatement(internal.pos + 24, internal.ast)); } toJSON() { return { type: "SwitchCase", start: this.start, end: this.end, test: this.test, consequent: this.consequent, }; } [inspectSymbol]() { return Object.setPrototypeOf(this.toJSON(), DebugSwitchCase.prototype); } } const DebugSwitchCase = class SwitchCase {}; export class LabeledStatement { type = "LabeledStatement"; #internal; constructor(pos, ast) { if (ast?.token !== TOKEN) constructorError(); const { nodes } = ast; const cached = nodes.get(pos); if (cached !== void 0) return cached; this.#internal = { pos, ast }; nodes.set(pos, this); } get start() { const internal = this.#internal; return constructU32(internal.pos, internal.ast); } get end() { const internal = this.#internal; return constructU32(internal.pos + 4, internal.ast); } get label() { const internal = this.#internal; return new LabelIdentifier(internal.pos + 8, internal.ast); } get body() { const internal = this.#internal; return constructStatement(internal.pos + 32, internal.ast); } toJSON() { return { type: "LabeledStatement", start: this.start, end: this.end, label: this.label, body: this.body, }; } [inspectSymbol]() { return Object.setPrototypeOf(this.toJSON(), DebugLabeledStatement.prototype); } } const DebugLabeledStatement = class LabeledStatement {}; export class ThrowStatement { type = "ThrowStatement"; #internal; constructor(pos, ast) { if (ast?.token !== TOKEN) constructorError(); const { nodes } = ast; const cached = nodes.get(pos); if (cached !== void 0) return cached; this.#internal = { pos, ast }; nodes.set(pos, this); } get start() { const internal = this.#internal; return constructU32(internal.pos, internal.ast); } get end() { const internal = this.#internal; return constructU32(internal.pos + 4, internal.ast); } get argument() { const internal = this.#internal; return constructExpression(internal.pos + 8, internal.ast); } toJSON() { return { type: "ThrowStatement", start: this.start, end: this.end, argument: this.argument, }; } [inspectSymbol]() { return Object.setPrototypeOf(this.toJSON(), DebugThrowStatement.prototype); } } const DebugThrowStatement = class ThrowStatement {}; export class TryStatement { type = "TryStatement"; #internal; constructor(pos, ast) { if (ast?.token !== TOKEN) constructorError(); const { nodes } = ast; const cached = nodes.get(pos); if (cached !== void 0) return cached; this.#internal = { pos, ast }; nodes.set(pos, this); } get start() { const internal = this.#internal; return constructU32(internal.pos, internal.ast); } get end() { const internal = this.#internal; return constructU32(internal.pos + 4, internal.ast); } get block() { const internal = this.#internal; return constructBoxBlockStatement(internal.pos + 8, internal.ast); } get handler() { const internal = this.#internal; return constructOptionBoxCatchClause(internal.pos + 16, internal.ast); } get finalizer() { const internal = this.#internal; return constructOptionBoxBlockStatement(internal.pos + 24, internal.ast); } toJSON() { return { type: "TryStatement", start: this.start, end: this.end, block: this.block, handler: this.handler, finalizer: this.finalizer, }; } [inspectSymbol]() { return Object.setPrototypeOf(this.toJSON(), DebugTryStatement.prototype); } } const DebugTryStatement = class TryStatement {}; export class CatchClause { type = "CatchClause"; #internal; constructor(pos, ast) { if (ast?.token !== TOKEN) constructorError(); const { nodes } = ast; const cached = nodes.get(pos); if (cached !== void 0) return cached; this.#internal = { pos, ast }; nodes.set(pos, this); } get start() { const internal = this.#internal; return constructU32(internal.pos, internal.ast); } get end() { const internal = this.#internal; return constructU32(internal.pos + 4, internal.ast); } get param() { const internal = this.#internal; return constructOptionCatchParameter(internal.pos + 8, internal.ast); } get body() { const internal = this.#internal; return constructBoxBlockStatement(internal.pos + 48, internal.ast); } toJSON() { return { type: "CatchClause", start: this.start, end: this.end, param: this.param, body: this.body, }; } [inspectSymbol]() { return Object.setPrototypeOf(this.toJSON(), DebugCatchClause.prototype); } } const DebugCatchClause = class CatchClause {}; export class CatchParameter { #internal; constructor(pos, ast) { if (ast?.token !== TOKEN) constructorError(); const { nodes } = ast; const cached = nodes.get(pos); if (cached !== void 0) return cached; this.#internal = { pos, ast }; nodes.set(pos, this); } get pattern() { const internal = this.#internal; return new BindingPattern(internal.pos + 8, internal.ast); } toJSON() { return { pattern: this.pattern, }; } [inspectSymbol]() { return Object.setPrototypeOf(this.toJSON(), DebugCatchParameter.prototype); } } const DebugCatchParameter = class CatchParameter {}; export class DebuggerStatement { type = "DebuggerStatement"; #internal; constructor(pos, ast) { if (ast?.token !== TOKEN) constructorError(); const { nodes } = ast; const cached = nodes.get(pos); if (cached !== void 0) return cached; this.#internal = { pos, ast }; nodes.set(pos, this); } get start() { const internal = this.#internal; return constructU32(internal.pos, internal.ast); } get end() { const internal = this.#internal; return constructU32(internal.pos + 4, internal.ast); } toJSON() { return { type: "DebuggerStatement", start: this.start, end: this.end, }; } [inspectSymbol]() { return Object.setPrototypeOf(this.toJSON(), DebugDebuggerStatement.prototype); } } const DebugDebuggerStatement = class DebuggerStatement {}; export class BindingPattern { #internal; constructor(pos, ast) { if (ast?.token !== TOKEN) constructorError(); const { nodes } = ast; const cached = nodes.get(pos); if (cached !== void 0) return cached; this.#internal = { pos, ast }; nodes.set(pos, this); } get kind() { const internal = this.#internal; return constructBindingPatternKind(internal.pos, internal.ast); } get typeAnnotation() { const internal = this.#internal; return constructOptionBoxTSTypeAnnotation(internal.pos + 16, internal.ast); } get optional() { const internal = this.#internal; return constructBool(internal.pos + 24, internal.ast); } toJSON() { return { kind: this.kind, typeAnnotation: this.typeAnnotation, optional: this.optional, }; } [inspectSymbol]() { return Object.setPrototypeOf(this.toJSON(), DebugBindingPattern.prototype); } } const DebugBindingPattern = class BindingPattern {}; function constructBindingPatternKind(pos, ast) { switch (ast.buffer[pos]) { case 0: return constructBoxBindingIdentifier(pos + 8, ast); case 1: return constructBoxObjectPattern(pos + 8, ast); case 2: return constructBoxArrayPattern(pos + 8, ast); case 3: return constructBoxAssignmentPattern(pos + 8, ast); default: throw new Error(`Unexpected discriminant ${ast.buffer[pos]} for BindingPatternKind`); } } export class AssignmentPattern { type = "AssignmentPattern"; #internal; constructor(pos, ast) { if (ast?.token !== TOKEN) constructorError(); const { nodes } = ast; const cached = nodes.get(pos); if (cached !== void 0) return cached; this.#internal = { pos, ast }; nodes.set(pos, this); } get start() { const internal = this.#internal; return constructU32(internal.pos, internal.ast); } get end() { const internal = this.#internal; return constructU32(internal.pos + 4, internal.ast); } get left() { const internal = this.#internal; return new BindingPattern(internal.pos + 8, internal.ast); } get right() { const internal = this.#internal; return constructExpression(internal.pos + 40, internal.ast); } toJSON() { return { type: "AssignmentPattern", start: this.start, end: this.end, left: this.left, right: this.right, }; } [inspectSymbol]() { return Object.setPrototypeOf(this.toJSON(), DebugAssignmentPattern.prototype); } } const DebugAssignmentPattern = class AssignmentPattern {}; export class ObjectPattern { type = "ObjectPattern"; #internal; constructor(pos, ast) { if (ast?.token !== TOKEN) constructorError(); const { nodes } = ast; const cached = nodes.get(pos); if (cached !== void 0) return cached; this.#internal = { pos, ast, $properties: void 0 }; nodes.set(pos, this); } get start() { const internal = this.#internal; return constructU32(internal.pos, internal.ast); } get end() { const internal = this.#internal; return constructU32(internal.pos + 4, internal.ast); } get properties() { const internal = this.#internal, cached = internal.$properties; if (cached !== void 0) return cached; return (internal.$properties = constructVecBindingProperty(internal.pos + 8, internal.ast)); } toJSON() { return { type: "ObjectPattern", start: this.start, end: this.end, properties: this.properties, }; } [inspectSymbol]() { return Object.setPrototypeOf(this.toJSON(), DebugObjectPattern.prototype); } } const DebugObjectPattern = class ObjectPattern {}; export class BindingProperty { type = "BindingProperty"; #internal; constructor(pos, ast) { if (ast?.token !== TOKEN) constructorError(); const { nodes } = ast; const cached = nodes.get(pos); if (cached !== void 0) return cached; this.#internal = { pos, ast }; nodes.set(pos, this); } get start() { const internal = this.#internal; return constructU32(internal.pos, internal.ast); } get end() { const internal = this.#internal; return constructU32(internal.pos + 4, internal.ast); } get key() { const internal = this.#internal; return constructPropertyKey(internal.pos + 8, internal.ast); } get value() { const internal = this.#internal; return new BindingPattern(internal.pos + 24, internal.ast); } get shorthand() { const internal = this.#internal; return constructBool(internal.pos + 56, internal.ast); } get computed() { const internal = this.#internal; return constructBool(internal.pos + 57, internal.ast); } toJSON() { return { type: "BindingProperty", start: this.start, end: this.end, key: this.key, value: this.value, shorthand: this.shorthand, computed: this.computed, }; } [inspectSymbol]() { return Object.setPrototypeOf(this.toJSON(), DebugBindingProperty.prototype); } } const DebugBindingProperty = class BindingProperty {}; export class ArrayPattern { type = "ArrayPattern"; #internal; constructor(pos, ast) { if (ast?.token !== TOKEN) constructorError(); const { nodes } = ast; const cached = nodes.get(pos); if (cached !== void 0) return cached; this.#internal = { pos, ast, $elements: void 0 }; nodes.set(pos, this); } get start() { const internal = this.#internal; return constructU32(internal.pos, internal.ast); } get end() { const internal = this.#internal; return constructU32(internal.pos + 4, internal.ast); } get elements() { const internal = this.#internal, cached = internal.$elements; if (cached !== void 0) return cached; return (internal.$elements = constructVecOptionBindingPattern(internal.pos + 8, internal.ast)); } toJSON() { return { type: "ArrayPattern", start: this.start, end: this.end, elements: this.elements, }; } [inspectSymbol]() { return Object.setPrototypeOf(this.toJSON(), DebugArrayPattern.prototype); } } const DebugArrayPattern = class ArrayPattern {}; export class BindingRestElement { type = "BindingRestElement"; #internal; constructor(pos, ast) { if (ast?.token !== TOKEN) constructorError(); const { nodes } = ast; const cached = nodes.get(pos); if (cached !== void 0) return cached; this.#internal = { pos, ast }; nodes.set(pos, this); } get start() { const internal = this.#internal; return constructU32(internal.pos, internal.ast); } get end() { const internal = this.#internal; return constructU32(internal.pos + 4, internal.ast); } get argument() { const internal = this.#internal; return new BindingPattern(internal.pos + 8, internal.ast); } toJSON() { return { type: "BindingRestElement", start: this.start, end: this.end, argument: this.argument, }; } [inspectSymbol]() { return Object.setPrototypeOf(this.toJSON(), DebugBindingRestElement.prototype); } } const DebugBindingRestElement = class BindingRestElement {}; export class Function { #internal; constructor(pos, ast) { if (ast?.token !== TOKEN) constructorError(); const { nodes } = ast; const cached = nodes.get(pos); if (cached !== void 0) return cached; this.#internal = { pos, ast }; nodes.set(pos, this); } get start() { const internal = this.#internal; return constructU32(internal.pos, internal.ast); } get end() { const internal = this.#internal; return constructU32(internal.pos + 4, internal.ast); } get type() { const internal = this.#internal; return constructFunctionType(internal.pos + 84, internal.ast); } get id() { const internal = this.#internal; return constructOptionBindingIdentifier(internal.pos + 8, internal.ast); } get generator() { const internal = this.#internal; return constructBool(internal.pos + 85, internal.ast); } get async() { const internal = this.#internal; return constructBool(internal.pos + 86, internal.ast); } get declare() { const internal = this.#internal; return constructBool(internal.pos + 87, internal.ast); } get typeParameters() { const internal = this.#internal; return constructOptionBoxTSTypeParameterDeclaration(internal.pos + 40, internal.ast); } get params() { const internal = this.#internal; return constructBoxFormalParameters(internal.pos + 56, internal.ast); } get returnType() { const internal = this.#internal; return constructOptionBoxTSTypeAnnotation(internal.pos + 64, internal.ast); } get body() { const internal = this.#internal; return constructOptionBoxFunctionBody(internal.pos + 72, internal.ast); } toJSON() { return { start: this.start, end: this.end, type: this.type, id: this.id, generator: this.generator, async: this.async, declare: this.declare, typeParameters: this.typeParameters, params: this.params, returnType: this.returnType, body: this.body, }; } [inspectSymbol]() { return Object.setPrototypeOf(this.toJSON(), DebugFunction.prototype); } } const DebugFunction = class Function {}; function constructFunctionType(pos, ast) { switch (ast.buffer[pos]) { case 0: return "FunctionDeclaration"; case 1: return "FunctionExpression"; case 2: return "TSDeclareFunction"; case 3: return "TSEmptyBodyFunctionExpression"; default: throw new Error(`Unexpected discriminant ${ast.buffer[pos]} for FunctionType`); } } export class FormalParameters { type = "FormalParameters"; #internal; constructor(pos, ast) { if (ast?.token !== TOKEN) constructorError(); const { nodes } = ast; const cached = nodes.get(pos); if (cached !== void 0) return cached; this.#internal = { pos, ast, $items: void 0 }; nodes.set(pos, this); } get start() { const internal = this.#internal; return constructU32(internal.pos, internal.ast); } get end() { const internal = this.#internal; return constructU32(internal.pos + 4, internal.ast); } get kind() { const internal = this.#internal; return constructFormalParameterKind(internal.pos + 40, internal.ast); } get items() { const internal = this.#internal, cached = internal.$items; if (cached !== void 0) return cached; return (internal.$items = constructVecFormalParameter(internal.pos + 8, internal.ast)); } toJSON() { return { type: "FormalParameters", start: this.start, end: this.end, kind: this.kind, items: this.items, }; } [inspectSymbol]() { return Object.setPrototypeOf(this.toJSON(), DebugFormalParameters.prototype); } } const DebugFormalParameters = class FormalParameters {}; export class FormalParameter { #internal; constructor(pos, ast) { if (ast?.token !== TOKEN) constructorError(); const { nodes } = ast; const cached = nodes.get(pos); if (cached !== void 0) return cached; this.#internal = { pos, ast, $decorators: void 0 }; nodes.set(pos, this); } get decorators() { const internal = this.#internal, cached = internal.$decorators; if (cached !== void 0) return cached; return (internal.$decorators = constructVecDecorator(internal.pos + 8, internal.ast)); } get pattern() { const internal = this.#internal; return new BindingPattern(internal.pos + 32, internal.ast); } toJSON() { return { decorators: this.decorators, pattern: this.pattern, }; } [inspectSymbol]() { return Object.setPrototypeOf(this.toJSON(), DebugFormalParameter.prototype); } } const DebugFormalParameter = class FormalParameter {}; function constructFormalParameterKind(pos, ast) { switch (ast.buffer[pos]) { case 0: return "FormalParameter"; case 1: return "UniqueFormalParameters"; case 2: return "ArrowFormalParameters"; case 3: return "Signature"; default: throw new Error(`Unexpected discriminant ${ast.buffer[pos]} for FormalParameterKind`); } } export class FunctionBody { type = "FunctionBody"; #internal; constructor(pos, ast) { if (ast?.token !== TOKEN) constructorError(); const { nodes } = ast; const cached = nodes.get(pos); if (cached !== void 0) return cached; this.#internal = { pos, ast, $body: void 0 }; nodes.set(pos, this); } get start() { const internal = this.#internal; return constructU32(internal.pos, internal.ast); } get end() { const internal = this.#internal; return constructU32(internal.pos + 4, internal.ast); } get body() { const internal = this.#internal, cached = internal.$body; if (cached !== void 0) return cached; return (internal.$body = constructVecStatement(internal.pos + 32, internal.ast)); } toJSON() { return { type: "FunctionBody", start: this.start, end: this.end, body: this.body, }; } [inspectSymbol]() { return Object.setPrototypeOf(this.toJSON(), DebugFunctionBody.prototype); } } const DebugFunctionBody = class FunctionBody {}; export class ArrowFunctionExpression { type = "ArrowFunctionExpression"; #internal; constructor(pos, ast) { if (ast?.token !== TOKEN) constructorError(); const { nodes } = ast; const cached = nodes.get(pos); if (cached !== void 0) return cached; this.#internal = { pos, ast }; nodes.set(pos, this); } get start() { const internal = this.#internal; return constructU32(internal.pos, internal.ast); } get end() { const internal = this.#internal; return constructU32(internal.pos + 4, internal.ast); } get expression() { const internal = this.#internal; return constructBool(internal.pos + 44, internal.ast); } get async() { const internal = this.#internal; return constructBool(internal.pos + 45, internal.ast); } get typeParameters() { const internal = this.#internal; return constructOptionBoxTSTypeParameterDeclaration(internal.pos + 8, internal.ast); } get params() { const internal = this.#internal; return constructBoxFormalParameters(internal.pos + 16, internal.ast); } get returnType() { const internal = this.#internal; return constructOptionBoxTSTypeAnnotation(internal.pos + 24, internal.ast); } get body() { const internal = this.#internal; return constructBoxFunctionBody(internal.pos + 32, internal.ast); } toJSON() { return { type: "ArrowFunctionExpression", start: this.start, end: this.end, expression: this.expression, async: this.async, typeParameters: this.typeParameters, params: this.params, returnType: this.returnType, body: this.body, }; } [inspectSymbol]() { return Object.setPrototypeOf(this.toJSON(), DebugArrowFunctionExpression.prototype); } } const DebugArrowFunctionExpression = class ArrowFunctionExpression {}; export class YieldExpression { type = "YieldExpression"; #internal; constructor(pos, ast) { if (ast?.token !== TOKEN) constructorError(); const { nodes } = ast; const cached = nodes.get(pos); if (cached !== void 0) return cached; this.#internal = { pos, ast }; nodes.set(pos, this); } get start() { const internal = this.#internal; return constructU32(internal.pos, internal.ast); } get end() { const internal = this.#internal; return constructU32(internal.pos + 4, internal.ast); } get delegate() { const internal = this.#internal; return constructBool(internal.pos + 24, internal.ast); } get argument() { const internal = this.#internal; return constructOptionExpression(internal.pos + 8, internal.ast); } toJSON() { return { type: "YieldExpression", start: this.start, end: this.end, delegate: this.delegate, argument: this.argument, }; } [inspectSymbol]() { return Object.setPrototypeOf(this.toJSON(), DebugYieldExpression.prototype); } } const DebugYieldExpression = class YieldExpression {}; export class Class { #internal; constructor(pos, ast) { if (ast?.token !== TOKEN) constructorError(); const { nodes } = ast; const cached = nodes.get(pos); if (cached !== void 0) return cached; this.#internal = { pos, ast, $decorators: void 0, $implements: void 0 }; nodes.set(pos, this); } get start() { const internal = this.#internal; return constructU32(internal.pos, internal.ast); } get end() { const internal = this.#internal; return constructU32(internal.pos + 4, internal.ast); } get type() { const internal = this.#internal; return constructClassType(internal.pos + 132, internal.ast); } get decorators() { const internal = this.#internal, cached = internal.$decorators; if (cached !== void 0) return cached; return (internal.$decorators = constructVecDecorator(internal.pos + 8, internal.ast)); } get id() { const internal = this.#internal; return constructOptionBindingIdentifier(internal.pos + 32, internal.ast); } get typeParameters() { const internal = this.#internal; return constructOptionBoxTSTypeParameterDeclaration(internal.pos + 64, internal.ast); } get superClass() { const internal = this.#internal; return constructOptionExpression(internal.pos + 72, internal.ast); } get superTypeArguments() { const internal = this.#internal; return constructOptionBoxTSTypeParameterInstantiation(internal.pos + 88, internal.ast); } get implements() { const internal = this.#internal, cached = internal.$implements; if (cached !== void 0) return cached; return (internal.$implements = constructVecTSClassImplements(internal.pos + 96, internal.ast)); } get body() { const internal = this.#internal; return constructBoxClassBody(internal.pos + 120, internal.ast); } get abstract() { const internal = this.#internal; return constructBool(internal.pos + 133, internal.ast); } get declare() { const internal = this.#internal; return constructBool(internal.pos + 134, internal.ast); } toJSON() { return { start: this.start, end: this.end, type: this.type, decorators: this.decorators, id: this.id, typeParameters: this.typeParameters, superClass: this.superClass, superTypeArguments: this.superTypeArguments, implements: this.implements, body: this.body, abstract: this.abstract, declare: this.declare, }; } [inspectSymbol]() { return Object.setPrototypeOf(this.toJSON(), DebugClass.prototype); } } const DebugClass = class Class {}; function constructClassType(pos, ast) { switch (ast.buffer[pos]) { case 0: return "ClassDeclaration"; case 1: return "ClassExpression"; default: throw new Error(`Unexpected discriminant ${ast.buffer[pos]} for ClassType`); } } export class ClassBody { type = "ClassBody"; #internal; constructor(pos, ast) { if (ast?.token !== TOKEN) constructorError(); const { nodes } = ast; const cached = nodes.get(pos); if (cached !== void 0) return cached; this.#internal = { pos, ast, $body: void 0 }; nodes.set(pos, this); } get start() { const internal = this.#internal; return constructU32(internal.pos, internal.ast); } get end() { const internal = this.#internal; return constructU32(internal.pos + 4, internal.ast); } get body() { const internal = this.#internal, cached = internal.$body; if (cached !== void 0) return cached; return (internal.$body = constructVecClassElement(internal.pos + 8, internal.ast)); } toJSON() { return { type: "ClassBody", start: this.start, end: this.end, body: this.body, }; } [inspectSymbol]() { return Object.setPrototypeOf(this.toJSON(), DebugClassBody.prototype); } } const DebugClassBody = class ClassBody {}; function constructClassElement(pos, ast) { switch (ast.buffer[pos]) { case 0: return constructBoxStaticBlock(pos + 8, ast); case 1: return constructBoxMethodDefinition(pos + 8, ast); case 2: return constructBoxPropertyDefinition(pos + 8, ast); case 3: return constructBoxAccessorProperty(pos + 8, ast); case 4: return constructBoxTSIndexSignature(pos + 8, ast); default: throw new Error(`Unexpected discriminant ${ast.buffer[pos]} for ClassElement`); } } export class MethodDefinition { #internal; constructor(pos, ast) { if (ast?.token !== TOKEN) constructorError(); const { nodes } = ast; const cached = nodes.get(pos); if (cached !== void 0) return cached; this.#internal = { pos, ast, $decorators: void 0 }; nodes.set(pos, this); } get start() { const internal = this.#internal; return constructU32(internal.pos, internal.ast); } get end() { const internal = this.#internal; return constructU32(internal.pos + 4, internal.ast); } get type() { const internal = this.#internal; return constructMethodDefinitionType(internal.pos + 56, internal.ast); } get decorators() { const internal = this.#internal, cached = internal.$decorators; if (cached !== void 0) return cached; return (internal.$decorators = constructVecDecorator(internal.pos + 8, internal.ast)); } get key() { const internal = this.#internal; return constructPropertyKey(internal.pos + 32, internal.ast); } get value() { const internal = this.#internal; return constructBoxFunction(internal.pos + 48, internal.ast); } get kind() { const internal = this.#internal; return constructMethodDefinitionKind(internal.pos + 57, internal.ast); } get computed() { const internal = this.#internal; return constructBool(internal.pos + 58, internal.ast); } get static() { const internal = this.#internal; return constructBool(internal.pos + 59, internal.ast); } get override() { const internal = this.#internal; return constructBool(internal.pos + 60, internal.ast); } get optional() { const internal = this.#internal; return constructBool(internal.pos + 61, internal.ast); } get accessibility() { const internal = this.#internal; return constructOptionTSAccessibility(internal.pos + 62, internal.ast); } toJSON() { return { start: this.start, end: this.end, type: this.type, decorators: this.decorators, key: this.key, value: this.value, kind: this.kind, computed: this.computed, static: this.static, override: this.override, optional: this.optional, accessibility: this.accessibility, }; } [inspectSymbol]() { return Object.setPrototypeOf(this.toJSON(), DebugMethodDefinition.prototype); } } const DebugMethodDefinition = class MethodDefinition {}; function constructMethodDefinitionType(pos, ast) { switch (ast.buffer[pos]) { case 0: return "MethodDefinition"; case 1: return "TSAbstractMethodDefinition"; default: throw new Error(`Unexpected discriminant ${ast.buffer[pos]} for MethodDefinitionType`); } } export class PropertyDefinition { #internal; constructor(pos, ast) { if (ast?.token !== TOKEN) constructorError(); const { nodes } = ast; const cached = nodes.get(pos); if (cached !== void 0) return cached; this.#internal = { pos, ast, $decorators: void 0 }; nodes.set(pos, this); } get start() { const internal = this.#internal; return constructU32(internal.pos, internal.ast); } get end() { const internal = this.#internal; return constructU32(internal.pos + 4, internal.ast); } get type() { const internal = this.#internal; return constructPropertyDefinitionType(internal.pos + 72, internal.ast); } get decorators() { const internal = this.#internal, cached = internal.$decorators; if (cached !== void 0) return cached; return (internal.$decorators = constructVecDecorator(internal.pos + 8, internal.ast)); } get key() { const internal = this.#internal; return constructPropertyKey(internal.pos + 32, internal.ast); } get typeAnnotation() { const internal = this.#internal; return constructOptionBoxTSTypeAnnotation(internal.pos + 48, internal.ast); } get value() { const internal = this.#internal; return constructOptionExpression(internal.pos + 56, internal.ast); } get computed() { const internal = this.#internal; return constructBool(internal.pos + 73, internal.ast); } get static() { const internal = this.#internal; return constructBool(internal.pos + 74, internal.ast); } get declare() { const internal = this.#internal; return constructBool(internal.pos + 75, internal.ast); } get override() { const internal = this.#internal; return constructBool(internal.pos + 76, internal.ast); } get optional() { const internal = this.#internal; return constructBool(internal.pos + 77, internal.ast); } get definite() { const internal = this.#internal; return constructBool(internal.pos + 78, internal.ast); } get readonly() { const internal = this.#internal; return constructBool(internal.pos + 79, internal.ast); } get accessibility() { const internal = this.#internal; return constructOptionTSAccessibility(internal.pos + 80, internal.ast); } toJSON() { return { start: this.start, end: this.end, type: this.type, decorators: this.decorators, key: this.key, typeAnnotation: this.typeAnnotation, value: this.value, computed: this.computed, static: this.static, declare: this.declare, override: this.override, optional: this.optional, definite: this.definite, readonly: this.readonly, accessibility: this.accessibility, }; } [inspectSymbol]() { return Object.setPrototypeOf(this.toJSON(), DebugPropertyDefinition.prototype); } } const DebugPropertyDefinition = class PropertyDefinition {}; function constructPropertyDefinitionType(pos, ast) { switch (ast.buffer[pos]) { case 0: return "PropertyDefinition"; case 1: return "TSAbstractPropertyDefinition"; default: throw new Error(`Unexpected discriminant ${ast.buffer[pos]} for PropertyDefinitionType`); } } function constructMethodDefinitionKind(pos, ast) { switch (ast.buffer[pos]) { case 0: return "constructor"; case 1: return "method"; case 2: return "get"; case 3: return "set"; default: throw new Error(`Unexpected discriminant ${ast.buffer[pos]} for MethodDefinitionKind`); } } export class PrivateIdentifier { type = "PrivateIdentifier"; #internal; constructor(pos, ast) { if (ast?.token !== TOKEN) constructorError(); const { nodes } = ast; const cached = nodes.get(pos); if (cached !== void 0) return cached; this.#internal = { pos, ast, $name: void 0 }; nodes.set(pos, this); } get start() { const internal = this.#internal; return constructU32(internal.pos, internal.ast); } get end() { const internal = this.#internal; return constructU32(internal.pos + 4, internal.ast); } get name() { const internal = this.#internal, cached = internal.$name; if (cached !== void 0) return cached; return (internal.$name = constructStr(internal.pos + 8, internal.ast)); } toJSON() { return { type: "PrivateIdentifier", start: this.start, end: this.end, name: this.name, }; } [inspectSymbol]() { return Object.setPrototypeOf(this.toJSON(), DebugPrivateIdentifier.prototype); } } const DebugPrivateIdentifier = class PrivateIdentifier {}; export class StaticBlock { type = "StaticBlock"; #internal; constructor(pos, ast) { if (ast?.token !== TOKEN) constructorError(); const { nodes } = ast; const cached = nodes.get(pos); if (cached !== void 0) return cached; this.#internal = { pos, ast, $body: void 0 }; nodes.set(pos, this); } get start() { const internal = this.#internal; return constructU32(internal.pos, internal.ast); } get end() { const internal = this.#internal; return constructU32(internal.pos + 4, internal.ast); } get body() { const internal = this.#internal, cached = internal.$body; if (cached !== void 0) return cached; return (internal.$body = constructVecStatement(internal.pos + 8, internal.ast)); } toJSON() { return { type: "StaticBlock", start: this.start, end: this.end, body: this.body, }; } [inspectSymbol]() { return Object.setPrototypeOf(this.toJSON(), DebugStaticBlock.prototype); } } const DebugStaticBlock = class StaticBlock {}; function constructModuleDeclaration(pos, ast) { switch (ast.buffer[pos]) { case 64: return constructBoxImportDeclaration(pos + 8, ast); case 65: return constructBoxExportAllDeclaration(pos + 8, ast); case 66: return constructBoxExportDefaultDeclaration(pos + 8, ast); case 67: return constructBoxExportNamedDeclaration(pos + 8, ast); case 68: return constructBoxTSExportAssignment(pos + 8, ast); case 69: return constructBoxTSNamespaceExportDeclaration(pos + 8, ast); default: throw new Error(`Unexpected discriminant ${ast.buffer[pos]} for ModuleDeclaration`); } } function constructAccessorPropertyType(pos, ast) { switch (ast.buffer[pos]) { case 0: return "AccessorProperty"; case 1: return "TSAbstractAccessorProperty"; default: throw new Error(`Unexpected discriminant ${ast.buffer[pos]} for AccessorPropertyType`); } } export class AccessorProperty { #internal; constructor(pos, ast) { if (ast?.token !== TOKEN) constructorError(); const { nodes } = ast; const cached = nodes.get(pos); if (cached !== void 0) return cached; this.#internal = { pos, ast, $decorators: void 0 }; nodes.set(pos, this); } get start() { const internal = this.#internal; return constructU32(internal.pos, internal.ast); } get end() { const internal = this.#internal; return constructU32(internal.pos + 4, internal.ast); } get type() { const internal = this.#internal; return constructAccessorPropertyType(internal.pos + 72, internal.ast); } get decorators() { const internal = this.#internal, cached = internal.$decorators; if (cached !== void 0) return cached; return (internal.$decorators = constructVecDecorator(internal.pos + 8, internal.ast)); } get key() { const internal = this.#internal; return constructPropertyKey(internal.pos + 32, internal.ast); } get typeAnnotation() { const internal = this.#internal; return constructOptionBoxTSTypeAnnotation(internal.pos + 48, internal.ast); } get value() { const internal = this.#internal; return constructOptionExpression(internal.pos + 56, internal.ast); } get computed() { const internal = this.#internal; return constructBool(internal.pos + 73, internal.ast); } get static() { const internal = this.#internal; return constructBool(internal.pos + 74, internal.ast); } get override() { const internal = this.#internal; return constructBool(internal.pos + 75, internal.ast); } get definite() { const internal = this.#internal; return constructBool(internal.pos + 76, internal.ast); } get accessibility() { const internal = this.#internal; return constructOptionTSAccessibility(internal.pos + 77, internal.ast); } toJSON() { return { start: this.start, end: this.end, type: this.type, decorators: this.decorators, key: this.key, typeAnnotation: this.typeAnnotation, value: this.value, computed: this.computed, static: this.static, override: this.override, definite: this.definite, accessibility: this.accessibility, }; } [inspectSymbol]() { return Object.setPrototypeOf(this.toJSON(), DebugAccessorProperty.prototype); } } const DebugAccessorProperty = class AccessorProperty {}; export class ImportExpression { type = "ImportExpression"; #internal; constructor(pos, ast) { if (ast?.token !== TOKEN) constructorError(); const { nodes } = ast; const cached = nodes.get(pos); if (cached !== void 0) return cached; this.#internal = { pos, ast }; nodes.set(pos, this); } get start() { const internal = this.#internal; return constructU32(internal.pos, internal.ast); } get end() { const internal = this.#internal; return constructU32(internal.pos + 4, internal.ast); } get source() { const internal = this.#internal; return constructExpression(internal.pos + 8, internal.ast); } get options() { const internal = this.#internal; return constructOptionExpression(internal.pos + 24, internal.ast); } get phase() { const internal = this.#internal; return constructOptionImportPhase(internal.pos + 40, internal.ast); } toJSON() { return { type: "ImportExpression", start: this.start, end: this.end, source: this.source, options: this.options, phase: this.phase, }; } [inspectSymbol]() { return Object.setPrototypeOf(this.toJSON(), DebugImportExpression.prototype); } } const DebugImportExpression = class ImportExpression {}; export class ImportDeclaration { type = "ImportDeclaration"; #internal; constructor(pos, ast) { if (ast?.token !== TOKEN) constructorError(); const { nodes } = ast; const cached = nodes.get(pos); if (cached !== void 0) return cached; this.#internal = { pos, ast, $specifiers: void 0 }; nodes.set(pos, this); } get start() { const internal = this.#internal; return constructU32(internal.pos, internal.ast); } get end() { const internal = this.#internal; return constructU32(internal.pos + 4, internal.ast); } get specifiers() { const internal = this.#internal, cached = internal.$specifiers; if (cached !== void 0) return cached; return (internal.$specifiers = constructOptionVecImportDeclarationSpecifier( internal.pos + 8, internal.ast, )); } get source() { const internal = this.#internal; return new StringLiteral(internal.pos + 32, internal.ast); } get phase() { const internal = this.#internal; return constructOptionImportPhase(internal.pos + 88, internal.ast); } get attributes() { const internal = this.#internal; return constructOptionBoxWithClause(internal.pos + 80, internal.ast); } get importKind() { const internal = this.#internal; return constructImportOrExportKind(internal.pos + 89, internal.ast); } toJSON() { return { type: "ImportDeclaration", start: this.start, end: this.end, specifiers: this.specifiers, source: this.source, phase: this.phase, attributes: this.attributes, importKind: this.importKind, }; } [inspectSymbol]() { return Object.setPrototypeOf(this.toJSON(), DebugImportDeclaration.prototype); } } const DebugImportDeclaration = class ImportDeclaration {}; function constructImportPhase(pos, ast) { switch (ast.buffer[pos]) { case 0: return "source"; case 1: return "defer"; default: throw new Error(`Unexpected discriminant ${ast.buffer[pos]} for ImportPhase`); } } function constructImportDeclarationSpecifier(pos, ast) { switch (ast.buffer[pos]) { case 0: return constructBoxImportSpecifier(pos + 8, ast); case 1: return constructBoxImportDefaultSpecifier(pos + 8, ast); case 2: return constructBoxImportNamespaceSpecifier(pos + 8, ast); default: throw new Error(`Unexpected discriminant ${ast.buffer[pos]} for ImportDeclarationSpecifier`); } } export class ImportSpecifier { type = "ImportSpecifier"; #internal; constructor(pos, ast) { if (ast?.token !== TOKEN) constructorError(); const { nodes } = ast; const cached = nodes.get(pos); if (cached !== void 0) return cached; this.#internal = { pos, ast }; nodes.set(pos, this); } get start() { const internal = this.#internal; return constructU32(internal.pos, internal.ast); } get end() { const internal = this.#internal; return constructU32(internal.pos + 4, internal.ast); } get imported() { const internal = this.#internal; return constructModuleExportName(internal.pos + 8, internal.ast); } get local() { const internal = this.#internal; return new BindingIdentifier(internal.pos + 64, internal.ast); } get importKind() { const internal = this.#internal; return constructImportOrExportKind(internal.pos + 96, internal.ast); } toJSON() { return { type: "ImportSpecifier", start: this.start, end: this.end, imported: this.imported, local: this.local, importKind: this.importKind, }; } [inspectSymbol]() { return Object.setPrototypeOf(this.toJSON(), DebugImportSpecifier.prototype); } } const DebugImportSpecifier = class ImportSpecifier {}; export class ImportDefaultSpecifier { type = "ImportDefaultSpecifier"; #internal; constructor(pos, ast) { if (ast?.token !== TOKEN) constructorError(); const { nodes } = ast; const cached = nodes.get(pos); if (cached !== void 0) return cached; this.#internal = { pos, ast }; nodes.set(pos, this); } get start() { const internal = this.#internal; return constructU32(internal.pos, internal.ast); } get end() { const internal = this.#internal; return constructU32(internal.pos + 4, internal.ast); } get local() { const internal = this.#internal; return new BindingIdentifier(internal.pos + 8, internal.ast); } toJSON() { return { type: "ImportDefaultSpecifier", start: this.start, end: this.end, local: this.local, }; } [inspectSymbol]() { return Object.setPrototypeOf(this.toJSON(), DebugImportDefaultSpecifier.prototype); } } const DebugImportDefaultSpecifier = class ImportDefaultSpecifier {}; export class ImportNamespaceSpecifier { type = "ImportNamespaceSpecifier"; #internal; constructor(pos, ast) { if (ast?.token !== TOKEN) constructorError(); const { nodes } = ast; const cached = nodes.get(pos); if (cached !== void 0) return cached; this.#internal = { pos, ast }; nodes.set(pos, this); } get start() { const internal = this.#internal; return constructU32(internal.pos, internal.ast); } get end() { const internal = this.#internal; return constructU32(internal.pos + 4, internal.ast); } get local() { const internal = this.#internal; return new BindingIdentifier(internal.pos + 8, internal.ast); } toJSON() { return { type: "ImportNamespaceSpecifier", start: this.start, end: this.end, local: this.local, }; } [inspectSymbol]() { return Object.setPrototypeOf(this.toJSON(), DebugImportNamespaceSpecifier.prototype); } } const DebugImportNamespaceSpecifier = class ImportNamespaceSpecifier {}; export class WithClause { #internal; constructor(pos, ast) { if (ast?.token !== TOKEN) constructorError(); const { nodes } = ast; const cached = nodes.get(pos); if (cached !== void 0) return cached; this.#internal = { pos, ast, $attributes: void 0 }; nodes.set(pos, this); } get attributes() { const internal = this.#internal, cached = internal.$attributes; if (cached !== void 0) return cached; return (internal.$attributes = constructVecImportAttribute(internal.pos + 8, internal.ast)); } toJSON() { return { attributes: this.attributes, }; } [inspectSymbol]() { return Object.setPrototypeOf(this.toJSON(), DebugWithClause.prototype); } } const DebugWithClause = class WithClause {}; export class ImportAttribute { type = "ImportAttribute"; #internal; constructor(pos, ast) { if (ast?.token !== TOKEN) constructorError(); const { nodes } = ast; const cached = nodes.get(pos); if (cached !== void 0) return cached; this.#internal = { pos, ast }; nodes.set(pos, this); } get start() { const internal = this.#internal; return constructU32(internal.pos, internal.ast); } get end() { const internal = this.#internal; return constructU32(internal.pos + 4, internal.ast); } get key() { const internal = this.#internal; return constructImportAttributeKey(internal.pos + 8, internal.ast); } get value() { const internal = this.#internal; return new StringLiteral(internal.pos + 64, internal.ast); } toJSON() { return { type: "ImportAttribute", start: this.start, end: this.end, key: this.key, value: this.value, }; } [inspectSymbol]() { return Object.setPrototypeOf(this.toJSON(), DebugImportAttribute.prototype); } } const DebugImportAttribute = class ImportAttribute {}; function constructImportAttributeKey(pos, ast) { switch (ast.buffer[pos]) { case 0: return new IdentifierName(pos + 8, ast); case 1: return new StringLiteral(pos + 8, ast); default: throw new Error(`Unexpected discriminant ${ast.buffer[pos]} for ImportAttributeKey`); } } export class ExportNamedDeclaration { type = "ExportNamedDeclaration"; #internal; constructor(pos, ast) { if (ast?.token !== TOKEN) constructorError(); const { nodes } = ast; const cached = nodes.get(pos); if (cached !== void 0) return cached; this.#internal = { pos, ast, $specifiers: void 0 }; nodes.set(pos, this); } get start() { const internal = this.#internal; return constructU32(internal.pos, internal.ast); } get end() { const internal = this.#internal; return constructU32(internal.pos + 4, internal.ast); } get declaration() { const internal = this.#internal; return constructOptionDeclaration(internal.pos + 8, internal.ast); } get specifiers() { const internal = this.#internal, cached = internal.$specifiers; if (cached !== void 0) return cached; return (internal.$specifiers = constructVecExportSpecifier(internal.pos + 24, internal.ast)); } get source() { const internal = this.#internal; return constructOptionStringLiteral(internal.pos + 48, internal.ast); } get exportKind() { const internal = this.#internal; return constructImportOrExportKind(internal.pos + 104, internal.ast); } get attributes() { const internal = this.#internal; return constructOptionBoxWithClause(internal.pos + 96, internal.ast); } toJSON() { return { type: "ExportNamedDeclaration", start: this.start, end: this.end, declaration: this.declaration, specifiers: this.specifiers, source: this.source, exportKind: this.exportKind, attributes: this.attributes, }; } [inspectSymbol]() { return Object.setPrototypeOf(this.toJSON(), DebugExportNamedDeclaration.prototype); } } const DebugExportNamedDeclaration = class ExportNamedDeclaration {}; export class ExportDefaultDeclaration { type = "ExportDefaultDeclaration"; #internal; constructor(pos, ast) { if (ast?.token !== TOKEN) constructorError(); const { nodes } = ast; const cached = nodes.get(pos); if (cached !== void 0) return cached; this.#internal = { pos, ast }; nodes.set(pos, this); } get start() { const internal = this.#internal; return constructU32(internal.pos, internal.ast); } get end() { const internal = this.#internal; return constructU32(internal.pos + 4, internal.ast); } get declaration() { const internal = this.#internal; return constructExportDefaultDeclarationKind(internal.pos + 8, internal.ast); } toJSON() { return { type: "ExportDefaultDeclaration", start: this.start, end: this.end, declaration: this.declaration, }; } [inspectSymbol]() { return Object.setPrototypeOf(this.toJSON(), DebugExportDefaultDeclaration.prototype); } } const DebugExportDefaultDeclaration = class ExportDefaultDeclaration {}; export class ExportAllDeclaration { type = "ExportAllDeclaration"; #internal; constructor(pos, ast) { if (ast?.token !== TOKEN) constructorError(); const { nodes } = ast; const cached = nodes.get(pos); if (cached !== void 0) return cached; this.#internal = { pos, ast }; nodes.set(pos, this); } get start() { const internal = this.#internal; return constructU32(internal.pos, internal.ast); } get end() { const internal = this.#internal; return constructU32(internal.pos + 4, internal.ast); } get exported() { const internal = this.#internal; return constructOptionModuleExportName(internal.pos + 8, internal.ast); } get source() { const internal = this.#internal; return new StringLiteral(internal.pos + 64, internal.ast); } get attributes() { const internal = this.#internal; return constructOptionBoxWithClause(internal.pos + 112, internal.ast); } get exportKind() { const internal = this.#internal; return constructImportOrExportKind(internal.pos + 120, internal.ast); } toJSON() { return { type: "ExportAllDeclaration", start: this.start, end: this.end, exported: this.exported, source: this.source, attributes: this.attributes, exportKind: this.exportKind, }; } [inspectSymbol]() { return Object.setPrototypeOf(this.toJSON(), DebugExportAllDeclaration.prototype); } } const DebugExportAllDeclaration = class ExportAllDeclaration {}; export class ExportSpecifier { type = "ExportSpecifier"; #internal; constructor(pos, ast) { if (ast?.token !== TOKEN) constructorError(); const { nodes } = ast; const cached = nodes.get(pos); if (cached !== void 0) return cached; this.#internal = { pos, ast }; nodes.set(pos, this); } get start() { const internal = this.#internal; return constructU32(internal.pos, internal.ast); } get end() { const internal = this.#internal; return constructU32(internal.pos + 4, internal.ast); } get local() { const internal = this.#internal; return constructModuleExportName(internal.pos + 8, internal.ast); } get exported() { const internal = this.#internal; return constructModuleExportName(internal.pos + 64, internal.ast); } get exportKind() { const internal = this.#internal; return constructImportOrExportKind(internal.pos + 120, internal.ast); } toJSON() { return { type: "ExportSpecifier", start: this.start, end: this.end, local: this.local, exported: this.exported, exportKind: this.exportKind, }; } [inspectSymbol]() { return Object.setPrototypeOf(this.toJSON(), DebugExportSpecifier.prototype); } } const DebugExportSpecifier = class ExportSpecifier {}; function constructExportDefaultDeclarationKind(pos, ast) { switch (ast.buffer[pos]) { case 0: return constructBoxBooleanLiteral(pos + 8, ast); case 1: return constructBoxNullLiteral(pos + 8, ast); case 2: return constructBoxNumericLiteral(pos + 8, ast); case 3: return constructBoxBigIntLiteral(pos + 8, ast); case 4: return constructBoxRegExpLiteral(pos + 8, ast); case 5: return constructBoxStringLiteral(pos + 8, ast); case 6: return constructBoxTemplateLiteral(pos + 8, ast); case 7: return constructBoxIdentifierReference(pos + 8, ast); case 8: return constructBoxMetaProperty(pos + 8, ast); case 9: return constructBoxSuper(pos + 8, ast); case 10: return constructBoxArrayExpression(pos + 8, ast); case 11: return constructBoxArrowFunctionExpression(pos + 8, ast); case 12: return constructBoxAssignmentExpression(pos + 8, ast); case 13: return constructBoxAwaitExpression(pos + 8, ast); case 14: return constructBoxBinaryExpression(pos + 8, ast); case 15: return constructBoxCallExpression(pos + 8, ast); case 16: return constructBoxChainExpression(pos + 8, ast); case 17: return constructBoxClass(pos + 8, ast); case 18: return constructBoxConditionalExpression(pos + 8, ast); case 19: return constructBoxFunction(pos + 8, ast); case 20: return constructBoxImportExpression(pos + 8, ast); case 21: return constructBoxLogicalExpression(pos + 8, ast); case 22: return constructBoxNewExpression(pos + 8, ast); case 23: return constructBoxObjectExpression(pos + 8, ast); case 24: return constructBoxParenthesizedExpression(pos + 8, ast); case 25: return constructBoxSequenceExpression(pos + 8, ast); case 26: return constructBoxTaggedTemplateExpression(pos + 8, ast); case 27: return constructBoxThisExpression(pos + 8, ast); case 28: return constructBoxUnaryExpression(pos + 8, ast); case 29: return constructBoxUpdateExpression(pos + 8, ast); case 30: return constructBoxYieldExpression(pos + 8, ast); case 31: return constructBoxPrivateInExpression(pos + 8, ast); case 32: return constructBoxJSXElement(pos + 8, ast); case 33: return constructBoxJSXFragment(pos + 8, ast); case 34: return constructBoxTSAsExpression(pos + 8, ast); case 35: return constructBoxTSSatisfiesExpression(pos + 8, ast); case 36: return constructBoxTSTypeAssertion(pos + 8, ast); case 37: return constructBoxTSNonNullExpression(pos + 8, ast); case 38: return constructBoxTSInstantiationExpression(pos + 8, ast); case 39: return constructBoxV8IntrinsicExpression(pos + 8, ast); case 48: return constructBoxComputedMemberExpression(pos + 8, ast); case 49: return constructBoxStaticMemberExpression(pos + 8, ast); case 50: return constructBoxPrivateFieldExpression(pos + 8, ast); case 64: return constructBoxFunction(pos + 8, ast); case 65: return constructBoxClass(pos + 8, ast); case 66: return constructBoxTSInterfaceDeclaration(pos + 8, ast); default: throw new Error( `Unexpected discriminant ${ast.buffer[pos]} for ExportDefaultDeclarationKind`, ); } } function constructModuleExportName(pos, ast) { switch (ast.buffer[pos]) { case 0: return new IdentifierName(pos + 8, ast); case 1: return new IdentifierReference(pos + 8, ast); case 2: return new StringLiteral(pos + 8, ast); default: throw new Error(`Unexpected discriminant ${ast.buffer[pos]} for ModuleExportName`); } } export class V8IntrinsicExpression { type = "V8IntrinsicExpression"; #internal; constructor(pos, ast) { if (ast?.token !== TOKEN) constructorError(); const { nodes } = ast; const cached = nodes.get(pos); if (cached !== void 0) return cached; this.#internal = { pos, ast, $arguments: void 0 }; nodes.set(pos, this); } get start() { const internal = this.#internal; return constructU32(internal.pos, internal.ast); } get end() { const internal = this.#internal; return constructU32(internal.pos + 4, internal.ast); } get name() { const internal = this.#internal; return new IdentifierName(internal.pos + 8, internal.ast); } get arguments() { const internal = this.#internal, cached = internal.$arguments; if (cached !== void 0) return cached; return (internal.$arguments = constructVecArgument(internal.pos + 32, internal.ast)); } toJSON() { return { type: "V8IntrinsicExpression", start: this.start, end: this.end, name: this.name, arguments: this.arguments, }; } [inspectSymbol]() { return Object.setPrototypeOf(this.toJSON(), DebugV8IntrinsicExpression.prototype); } } const DebugV8IntrinsicExpression = class V8IntrinsicExpression {}; export class BooleanLiteral { type = "BooleanLiteral"; #internal; constructor(pos, ast) { if (ast?.token !== TOKEN) constructorError(); const { nodes } = ast; const cached = nodes.get(pos); if (cached !== void 0) return cached; this.#internal = { pos, ast }; nodes.set(pos, this); } get start() { const internal = this.#internal; return constructU32(internal.pos, internal.ast); } get end() { const internal = this.#internal; return constructU32(internal.pos + 4, internal.ast); } get value() { const internal = this.#internal; return constructBool(internal.pos + 8, internal.ast); } toJSON() { return { type: "BooleanLiteral", start: this.start, end: this.end, value: this.value, }; } [inspectSymbol]() { return Object.setPrototypeOf(this.toJSON(), DebugBooleanLiteral.prototype); } } const DebugBooleanLiteral = class BooleanLiteral {}; export class NullLiteral { type = "NullLiteral"; #internal; constructor(pos, ast) { if (ast?.token !== TOKEN) constructorError(); const { nodes } = ast; const cached = nodes.get(pos); if (cached !== void 0) return cached; this.#internal = { pos, ast }; nodes.set(pos, this); } get start() { const internal = this.#internal; return constructU32(internal.pos, internal.ast); } get end() { const internal = this.#internal; return constructU32(internal.pos + 4, internal.ast); } toJSON() { return { type: "NullLiteral", start: this.start, end: this.end, }; } [inspectSymbol]() { return Object.setPrototypeOf(this.toJSON(), DebugNullLiteral.prototype); } } const DebugNullLiteral = class NullLiteral {}; export class NumericLiteral { type = "NumericLiteral"; #internal; constructor(pos, ast) { if (ast?.token !== TOKEN) constructorError(); const { nodes } = ast; const cached = nodes.get(pos); if (cached !== void 0) return cached; this.#internal = { pos, ast, $raw: void 0 }; nodes.set(pos, this); } get start() { const internal = this.#internal; return constructU32(internal.pos, internal.ast); } get end() { const internal = this.#internal; return constructU32(internal.pos + 4, internal.ast); } get value() { const internal = this.#internal; return constructF64(internal.pos + 8, internal.ast); } get raw() { const internal = this.#internal, cached = internal.$raw; if (cached !== void 0) return cached; return (internal.$raw = constructOptionStr(internal.pos + 16, internal.ast)); } toJSON() { return { type: "NumericLiteral", start: this.start, end: this.end, value: this.value, raw: this.raw, }; } [inspectSymbol]() { return Object.setPrototypeOf(this.toJSON(), DebugNumericLiteral.prototype); } } const DebugNumericLiteral = class NumericLiteral {}; export class StringLiteral { type = "StringLiteral"; #internal; constructor(pos, ast) { if (ast?.token !== TOKEN) constructorError(); const { nodes } = ast; const cached = nodes.get(pos); if (cached !== void 0) return cached; this.#internal = { pos, ast, $value: void 0, $raw: void 0 }; nodes.set(pos, this); } get start() { const internal = this.#internal; return constructU32(internal.pos, internal.ast); } get end() { const internal = this.#internal; return constructU32(internal.pos + 4, internal.ast); } get value() { const internal = this.#internal, cached = internal.$value; if (cached !== void 0) return cached; return (internal.$value = constructStr(internal.pos + 8, internal.ast)); } get raw() { const internal = this.#internal, cached = internal.$raw; if (cached !== void 0) return cached; return (internal.$raw = constructOptionStr(internal.pos + 24, internal.ast)); } toJSON() { return { type: "StringLiteral", start: this.start, end: this.end, value: this.value, raw: this.raw, }; } [inspectSymbol]() { return Object.setPrototypeOf(this.toJSON(), DebugStringLiteral.prototype); } } const DebugStringLiteral = class StringLiteral {}; export class BigIntLiteral { type = "BigIntLiteral"; #internal; constructor(pos, ast) { if (ast?.token !== TOKEN) constructorError(); const { nodes } = ast; const cached = nodes.get(pos); if (cached !== void 0) return cached; this.#internal = { pos, ast, $value: void 0, $raw: void 0 }; nodes.set(pos, this); } get start() { const internal = this.#internal; return constructU32(internal.pos, internal.ast); } get end() { const internal = this.#internal; return constructU32(internal.pos + 4, internal.ast); } get value() { const internal = this.#internal, cached = internal.$value; if (cached !== void 0) return cached; return (internal.$value = constructStr(internal.pos + 8, internal.ast)); } get raw() { const internal = this.#internal, cached = internal.$raw; if (cached !== void 0) return cached; return (internal.$raw = constructOptionStr(internal.pos + 24, internal.ast)); } toJSON() { return { type: "BigIntLiteral", start: this.start, end: this.end, value: this.value, raw: this.raw, }; } [inspectSymbol]() { return Object.setPrototypeOf(this.toJSON(), DebugBigIntLiteral.prototype); } } const DebugBigIntLiteral = class BigIntLiteral {}; export class RegExpLiteral { type = "RegExpLiteral"; #internal; constructor(pos, ast) { if (ast?.token !== TOKEN) constructorError(); const { nodes } = ast; const cached = nodes.get(pos); if (cached !== void 0) return cached; this.#internal = { pos, ast, $raw: void 0 }; nodes.set(pos, this); } get start() { const internal = this.#internal; return constructU32(internal.pos, internal.ast); } get end() { const internal = this.#internal; return constructU32(internal.pos + 4, internal.ast); } get regex() { const internal = this.#internal; return new RegExp(internal.pos + 8, internal.ast); } get raw() { const internal = this.#internal, cached = internal.$raw; if (cached !== void 0) return cached; return (internal.$raw = constructOptionStr(internal.pos + 40, internal.ast)); } toJSON() { return { type: "RegExpLiteral", start: this.start, end: this.end, regex: this.regex, raw: this.raw, }; } [inspectSymbol]() { return Object.setPrototypeOf(this.toJSON(), DebugRegExpLiteral.prototype); } } const DebugRegExpLiteral = class RegExpLiteral {}; export class RegExp { #internal; constructor(pos, ast) { if (ast?.token !== TOKEN) constructorError(); const { nodes } = ast; // `pos` would be same as one of fields, so add offset to ensure unique cache key const cached = nodes.get(pos + 1); if (cached !== void 0) return cached; this.#internal = { pos, ast }; nodes.set(pos + 1, this); } get pattern() { const internal = this.#internal; return new RegExpPattern(internal.pos, internal.ast); } get flags() { const internal = this.#internal; return new RegExpFlags(internal.pos + 24, internal.ast); } toJSON() { return { pattern: this.pattern, flags: this.flags, }; } [inspectSymbol]() { return Object.setPrototypeOf(this.toJSON(), DebugRegExp.prototype); } } const DebugRegExp = class RegExp {}; export class RegExpPattern { #internal; constructor(pos, ast) { if (ast?.token !== TOKEN) constructorError(); const { nodes } = ast; const cached = nodes.get(pos); if (cached !== void 0) return cached; this.#internal = { pos, ast, $pattern: void 0 }; nodes.set(pos, this); } get pattern() { const internal = this.#internal, cached = internal.$pattern; if (cached !== void 0) return cached; return (internal.$pattern = constructStr(internal.pos, internal.ast)); } toJSON() { return { pattern: this.pattern, }; } [inspectSymbol]() { return Object.setPrototypeOf(this.toJSON(), DebugRegExpPattern.prototype); } } const DebugRegExpPattern = class RegExpPattern {}; export class RegExpFlags { #internal; constructor(pos, ast) { if (ast?.token !== TOKEN) constructorError(); const { nodes } = ast; const cached = nodes.get(pos); if (cached !== void 0) return cached; this.#internal = { pos, ast }; nodes.set(pos, this); } toJSON() { return {}; } [inspectSymbol]() { return Object.setPrototypeOf(this.toJSON(), DebugRegExpFlags.prototype); } } const DebugRegExpFlags = class RegExpFlags {}; export class JSXElement { type = "JSXElement"; #internal; constructor(pos, ast) { if (ast?.token !== TOKEN) constructorError(); const { nodes } = ast; const cached = nodes.get(pos); if (cached !== void 0) return cached; this.#internal = { pos, ast, $children: void 0 }; nodes.set(pos, this); } get start() { const internal = this.#internal; return constructU32(internal.pos, internal.ast); } get end() { const internal = this.#internal; return constructU32(internal.pos + 4, internal.ast); } get openingElement() { const internal = this.#internal; return constructBoxJSXOpeningElement(internal.pos + 8, internal.ast); } get children() { const internal = this.#internal, cached = internal.$children; if (cached !== void 0) return cached; return (internal.$children = constructVecJSXChild(internal.pos + 16, internal.ast)); } get closingElement() { const internal = this.#internal; return constructOptionBoxJSXClosingElement(internal.pos + 40, internal.ast); } toJSON() { return { type: "JSXElement", start: this.start, end: this.end, openingElement: this.openingElement, children: this.children, closingElement: this.closingElement, }; } [inspectSymbol]() { return Object.setPrototypeOf(this.toJSON(), DebugJSXElement.prototype); } } const DebugJSXElement = class JSXElement {}; export class JSXOpeningElement { type = "JSXOpeningElement"; #internal; constructor(pos, ast) { if (ast?.token !== TOKEN) constructorError(); const { nodes } = ast; const cached = nodes.get(pos); if (cached !== void 0) return cached; this.#internal = { pos, ast, $attributes: void 0 }; nodes.set(pos, this); } get start() { const internal = this.#internal; return constructU32(internal.pos, internal.ast); } get end() { const internal = this.#internal; return constructU32(internal.pos + 4, internal.ast); } get name() { const internal = this.#internal; return constructJSXElementName(internal.pos + 8, internal.ast); } get typeArguments() { const internal = this.#internal; return constructOptionBoxTSTypeParameterInstantiation(internal.pos + 24, internal.ast); } get attributes() { const internal = this.#internal, cached = internal.$attributes; if (cached !== void 0) return cached; return (internal.$attributes = constructVecJSXAttributeItem(internal.pos + 32, internal.ast)); } toJSON() { return { type: "JSXOpeningElement", start: this.start, end: this.end, name: this.name, typeArguments: this.typeArguments, attributes: this.attributes, }; } [inspectSymbol]() { return Object.setPrototypeOf(this.toJSON(), DebugJSXOpeningElement.prototype); } } const DebugJSXOpeningElement = class JSXOpeningElement {}; export class JSXClosingElement { type = "JSXClosingElement"; #internal; constructor(pos, ast) { if (ast?.token !== TOKEN) constructorError(); const { nodes } = ast; const cached = nodes.get(pos); if (cached !== void 0) return cached; this.#internal = { pos, ast }; nodes.set(pos, this); } get start() { const internal = this.#internal; return constructU32(internal.pos, internal.ast); } get end() { const internal = this.#internal; return constructU32(internal.pos + 4, internal.ast); } get name() { const internal = this.#internal; return constructJSXElementName(internal.pos + 8, internal.ast); } toJSON() { return { type: "JSXClosingElement", start: this.start, end: this.end, name: this.name, }; } [inspectSymbol]() { return Object.setPrototypeOf(this.toJSON(), DebugJSXClosingElement.prototype); } } const DebugJSXClosingElement = class JSXClosingElement {}; export class JSXFragment { type = "JSXFragment"; #internal; constructor(pos, ast) { if (ast?.token !== TOKEN) constructorError(); const { nodes } = ast; const cached = nodes.get(pos); if (cached !== void 0) return cached; this.#internal = { pos, ast, $children: void 0 }; nodes.set(pos, this); } get start() { const internal = this.#internal; return constructU32(internal.pos, internal.ast); } get end() { const internal = this.#internal; return constructU32(internal.pos + 4, internal.ast); } get openingFragment() { const internal = this.#internal; return new JSXOpeningFragment(internal.pos + 8, internal.ast); } get children() { const internal = this.#internal, cached = internal.$children; if (cached !== void 0) return cached; return (internal.$children = constructVecJSXChild(internal.pos + 16, internal.ast)); } get closingFragment() { const internal = this.#internal; return new JSXClosingFragment(internal.pos + 40, internal.ast); } toJSON() { return { type: "JSXFragment", start: this.start, end: this.end, openingFragment: this.openingFragment, children: this.children, closingFragment: this.closingFragment, }; } [inspectSymbol]() { return Object.setPrototypeOf(this.toJSON(), DebugJSXFragment.prototype); } } const DebugJSXFragment = class JSXFragment {}; export class JSXOpeningFragment { type = "JSXOpeningFragment"; #internal; constructor(pos, ast) { if (ast?.token !== TOKEN) constructorError(); const { nodes } = ast; const cached = nodes.get(pos); if (cached !== void 0) return cached; this.#internal = { pos, ast }; nodes.set(pos, this); } get start() { const internal = this.#internal; return constructU32(internal.pos, internal.ast); } get end() { const internal = this.#internal; return constructU32(internal.pos + 4, internal.ast); } toJSON() { return { type: "JSXOpeningFragment", start: this.start, end: this.end, }; } [inspectSymbol]() { return Object.setPrototypeOf(this.toJSON(), DebugJSXOpeningFragment.prototype); } } const DebugJSXOpeningFragment = class JSXOpeningFragment {}; export class JSXClosingFragment { type = "JSXClosingFragment"; #internal; constructor(pos, ast) { if (ast?.token !== TOKEN) constructorError(); const { nodes } = ast; const cached = nodes.get(pos); if (cached !== void 0) return cached; this.#internal = { pos, ast }; nodes.set(pos, this); } get start() { const internal = this.#internal; return constructU32(internal.pos, internal.ast); } get end() { const internal = this.#internal; return constructU32(internal.pos + 4, internal.ast); } toJSON() { return { type: "JSXClosingFragment", start: this.start, end: this.end, }; } [inspectSymbol]() { return Object.setPrototypeOf(this.toJSON(), DebugJSXClosingFragment.prototype); } } const DebugJSXClosingFragment = class JSXClosingFragment {}; function constructJSXElementName(pos, ast) { switch (ast.buffer[pos]) { case 0: return constructBoxJSXIdentifier(pos + 8, ast); case 1: return constructBoxIdentifierReference(pos + 8, ast); case 2: return constructBoxJSXNamespacedName(pos + 8, ast); case 3: return constructBoxJSXMemberExpression(pos + 8, ast); case 4: return constructBoxThisExpression(pos + 8, ast); default: throw new Error(`Unexpected discriminant ${ast.buffer[pos]} for JSXElementName`); } } export class JSXNamespacedName { type = "JSXNamespacedName"; #internal; constructor(pos, ast) { if (ast?.token !== TOKEN) constructorError(); const { nodes } = ast; const cached = nodes.get(pos); if (cached !== void 0) return cached; this.#internal = { pos, ast }; nodes.set(pos, this); } get start() { const internal = this.#internal; return constructU32(internal.pos, internal.ast); } get end() { const internal = this.#internal; return constructU32(internal.pos + 4, internal.ast); } get namespace() { const internal = this.#internal; return new JSXIdentifier(internal.pos + 8, internal.ast); } get name() { const internal = this.#internal; return new JSXIdentifier(internal.pos + 32, internal.ast); } toJSON() { return { type: "JSXNamespacedName", start: this.start, end: this.end, namespace: this.namespace, name: this.name, }; } [inspectSymbol]() { return Object.setPrototypeOf(this.toJSON(), DebugJSXNamespacedName.prototype); } } const DebugJSXNamespacedName = class JSXNamespacedName {}; export class JSXMemberExpression { type = "JSXMemberExpression"; #internal; constructor(pos, ast) { if (ast?.token !== TOKEN) constructorError(); const { nodes } = ast; const cached = nodes.get(pos); if (cached !== void 0) return cached; this.#internal = { pos, ast }; nodes.set(pos, this); } get start() { const internal = this.#internal; return constructU32(internal.pos, internal.ast); } get end() { const internal = this.#internal; return constructU32(internal.pos + 4, internal.ast); } get object() { const internal = this.#internal; return constructJSXMemberExpressionObject(internal.pos + 8, internal.ast); } get property() { const internal = this.#internal; return new JSXIdentifier(internal.pos + 24, internal.ast); } toJSON() { return { type: "JSXMemberExpression", start: this.start, end: this.end, object: this.object, property: this.property, }; } [inspectSymbol]() { return Object.setPrototypeOf(this.toJSON(), DebugJSXMemberExpression.prototype); } } const DebugJSXMemberExpression = class JSXMemberExpression {}; function constructJSXMemberExpressionObject(pos, ast) { switch (ast.buffer[pos]) { case 0: return constructBoxIdentifierReference(pos + 8, ast); case 1: return constructBoxJSXMemberExpression(pos + 8, ast); case 2: return constructBoxThisExpression(pos + 8, ast); default: throw new Error(`Unexpected discriminant ${ast.buffer[pos]} for JSXMemberExpressionObject`); } } export class JSXExpressionContainer { type = "JSXExpressionContainer"; #internal; constructor(pos, ast) { if (ast?.token !== TOKEN) constructorError(); const { nodes } = ast; const cached = nodes.get(pos); if (cached !== void 0) return cached; this.#internal = { pos, ast }; nodes.set(pos, this); } get start() { const internal = this.#internal; return constructU32(internal.pos, internal.ast); } get end() { const internal = this.#internal; return constructU32(internal.pos + 4, internal.ast); } get expression() { const internal = this.#internal; return constructJSXExpression(internal.pos + 8, internal.ast); } toJSON() { return { type: "JSXExpressionContainer", start: this.start, end: this.end, expression: this.expression, }; } [inspectSymbol]() { return Object.setPrototypeOf(this.toJSON(), DebugJSXExpressionContainer.prototype); } } const DebugJSXExpressionContainer = class JSXExpressionContainer {}; function constructJSXExpression(pos, ast) { switch (ast.buffer[pos]) { case 0: return constructBoxBooleanLiteral(pos + 8, ast); case 1: return constructBoxNullLiteral(pos + 8, ast); case 2: return constructBoxNumericLiteral(pos + 8, ast); case 3: return constructBoxBigIntLiteral(pos + 8, ast); case 4: return constructBoxRegExpLiteral(pos + 8, ast); case 5: return constructBoxStringLiteral(pos + 8, ast); case 6: return constructBoxTemplateLiteral(pos + 8, ast); case 7: return constructBoxIdentifierReference(pos + 8, ast); case 8: return constructBoxMetaProperty(pos + 8, ast); case 9: return constructBoxSuper(pos + 8, ast); case 10: return constructBoxArrayExpression(pos + 8, ast); case 11: return constructBoxArrowFunctionExpression(pos + 8, ast); case 12: return constructBoxAssignmentExpression(pos + 8, ast); case 13: return constructBoxAwaitExpression(pos + 8, ast); case 14: return constructBoxBinaryExpression(pos + 8, ast); case 15: return constructBoxCallExpression(pos + 8, ast); case 16: return constructBoxChainExpression(pos + 8, ast); case 17: return constructBoxClass(pos + 8, ast); case 18: return constructBoxConditionalExpression(pos + 8, ast); case 19: return constructBoxFunction(pos + 8, ast); case 20: return constructBoxImportExpression(pos + 8, ast); case 21: return constructBoxLogicalExpression(pos + 8, ast); case 22: return constructBoxNewExpression(pos + 8, ast); case 23: return constructBoxObjectExpression(pos + 8, ast); case 24: return constructBoxParenthesizedExpression(pos + 8, ast); case 25: return constructBoxSequenceExpression(pos + 8, ast); case 26: return constructBoxTaggedTemplateExpression(pos + 8, ast); case 27: return constructBoxThisExpression(pos + 8, ast); case 28: return constructBoxUnaryExpression(pos + 8, ast); case 29: return constructBoxUpdateExpression(pos + 8, ast); case 30: return constructBoxYieldExpression(pos + 8, ast); case 31: return constructBoxPrivateInExpression(pos + 8, ast); case 32: return constructBoxJSXElement(pos + 8, ast); case 33: return constructBoxJSXFragment(pos + 8, ast); case 34: return constructBoxTSAsExpression(pos + 8, ast); case 35: return constructBoxTSSatisfiesExpression(pos + 8, ast); case 36: return constructBoxTSTypeAssertion(pos + 8, ast); case 37: return constructBoxTSNonNullExpression(pos + 8, ast); case 38: return constructBoxTSInstantiationExpression(pos + 8, ast); case 39: return constructBoxV8IntrinsicExpression(pos + 8, ast); case 48: return constructBoxComputedMemberExpression(pos + 8, ast); case 49: return constructBoxStaticMemberExpression(pos + 8, ast); case 50: return constructBoxPrivateFieldExpression(pos + 8, ast); case 64: return new JSXEmptyExpression(pos + 8, ast); default: throw new Error(`Unexpected discriminant ${ast.buffer[pos]} for JSXExpression`); } } export class JSXEmptyExpression { type = "JSXEmptyExpression"; #internal; constructor(pos, ast) { if (ast?.token !== TOKEN) constructorError(); const { nodes } = ast; const cached = nodes.get(pos); if (cached !== void 0) return cached; this.#internal = { pos, ast }; nodes.set(pos, this); } get start() { const internal = this.#internal; return constructU32(internal.pos, internal.ast); } get end() { const internal = this.#internal; return constructU32(internal.pos + 4, internal.ast); } toJSON() { return { type: "JSXEmptyExpression", start: this.start, end: this.end, }; } [inspectSymbol]() { return Object.setPrototypeOf(this.toJSON(), DebugJSXEmptyExpression.prototype); } } const DebugJSXEmptyExpression = class JSXEmptyExpression {}; function constructJSXAttributeItem(pos, ast) { switch (ast.buffer[pos]) { case 0: return constructBoxJSXAttribute(pos + 8, ast); case 1: return constructBoxJSXSpreadAttribute(pos + 8, ast); default: throw new Error(`Unexpected discriminant ${ast.buffer[pos]} for JSXAttributeItem`); } } export class JSXAttribute { type = "JSXAttribute"; #internal; constructor(pos, ast) { if (ast?.token !== TOKEN) constructorError(); const { nodes } = ast; const cached = nodes.get(pos); if (cached !== void 0) return cached; this.#internal = { pos, ast }; nodes.set(pos, this); } get start() { const internal = this.#internal; return constructU32(internal.pos, internal.ast); } get end() { const internal = this.#internal; return constructU32(internal.pos + 4, internal.ast); } get name() { const internal = this.#internal; return constructJSXAttributeName(internal.pos + 8, internal.ast); } get value() { const internal = this.#internal; return constructOptionJSXAttributeValue(internal.pos + 24, internal.ast); } toJSON() { return { type: "JSXAttribute", start: this.start, end: this.end, name: this.name, value: this.value, }; } [inspectSymbol]() { return Object.setPrototypeOf(this.toJSON(), DebugJSXAttribute.prototype); } } const DebugJSXAttribute = class JSXAttribute {}; export class JSXSpreadAttribute { type = "JSXSpreadAttribute"; #internal; constructor(pos, ast) { if (ast?.token !== TOKEN) constructorError(); const { nodes } = ast; const cached = nodes.get(pos); if (cached !== void 0) return cached; this.#internal = { pos, ast }; nodes.set(pos, this); } get start() { const internal = this.#internal; return constructU32(internal.pos, internal.ast); } get end() { const internal = this.#internal; return constructU32(internal.pos + 4, internal.ast); } get argument() { const internal = this.#internal; return constructExpression(internal.pos + 8, internal.ast); } toJSON() { return { type: "JSXSpreadAttribute", start: this.start, end: this.end, argument: this.argument, }; } [inspectSymbol]() { return Object.setPrototypeOf(this.toJSON(), DebugJSXSpreadAttribute.prototype); } } const DebugJSXSpreadAttribute = class JSXSpreadAttribute {}; function constructJSXAttributeName(pos, ast) { switch (ast.buffer[pos]) { case 0: return constructBoxJSXIdentifier(pos + 8, ast); case 1: return constructBoxJSXNamespacedName(pos + 8, ast); default: throw new Error(`Unexpected discriminant ${ast.buffer[pos]} for JSXAttributeName`); } } function constructJSXAttributeValue(pos, ast) { switch (ast.buffer[pos]) { case 0: return constructBoxStringLiteral(pos + 8, ast); case 1: return constructBoxJSXExpressionContainer(pos + 8, ast); case 2: return constructBoxJSXElement(pos + 8, ast); case 3: return constructBoxJSXFragment(pos + 8, ast); default: throw new Error(`Unexpected discriminant ${ast.buffer[pos]} for JSXAttributeValue`); } } export class JSXIdentifier { type = "JSXIdentifier"; #internal; constructor(pos, ast) { if (ast?.token !== TOKEN) constructorError(); const { nodes } = ast; const cached = nodes.get(pos); if (cached !== void 0) return cached; this.#internal = { pos, ast, $name: void 0 }; nodes.set(pos, this); } get start() { const internal = this.#internal; return constructU32(internal.pos, internal.ast); } get end() { const internal = this.#internal; return constructU32(internal.pos + 4, internal.ast); } get name() { const internal = this.#internal, cached = internal.$name; if (cached !== void 0) return cached; return (internal.$name = constructStr(internal.pos + 8, internal.ast)); } toJSON() { return { type: "JSXIdentifier", start: this.start, end: this.end, name: this.name, }; } [inspectSymbol]() { return Object.setPrototypeOf(this.toJSON(), DebugJSXIdentifier.prototype); } } const DebugJSXIdentifier = class JSXIdentifier {}; function constructJSXChild(pos, ast) { switch (ast.buffer[pos]) { case 0: return constructBoxJSXText(pos + 8, ast); case 1: return constructBoxJSXElement(pos + 8, ast); case 2: return constructBoxJSXFragment(pos + 8, ast); case 3: return constructBoxJSXExpressionContainer(pos + 8, ast); case 4: return constructBoxJSXSpreadChild(pos + 8, ast); default: throw new Error(`Unexpected discriminant ${ast.buffer[pos]} for JSXChild`); } } export class JSXSpreadChild { type = "JSXSpreadChild"; #internal; constructor(pos, ast) { if (ast?.token !== TOKEN) constructorError(); const { nodes } = ast; const cached = nodes.get(pos); if (cached !== void 0) return cached; this.#internal = { pos, ast }; nodes.set(pos, this); } get start() { const internal = this.#internal; return constructU32(internal.pos, internal.ast); } get end() { const internal = this.#internal; return constructU32(internal.pos + 4, internal.ast); } get expression() { const internal = this.#internal; return constructExpression(internal.pos + 8, internal.ast); } toJSON() { return { type: "JSXSpreadChild", start: this.start, end: this.end, expression: this.expression, }; } [inspectSymbol]() { return Object.setPrototypeOf(this.toJSON(), DebugJSXSpreadChild.prototype); } } const DebugJSXSpreadChild = class JSXSpreadChild {}; export class JSXText { type = "JSXText"; #internal; constructor(pos, ast) { if (ast?.token !== TOKEN) constructorError(); const { nodes } = ast; const cached = nodes.get(pos); if (cached !== void 0) return cached; this.#internal = { pos, ast, $value: void 0, $raw: void 0 }; nodes.set(pos, this); } get start() { const internal = this.#internal; return constructU32(internal.pos, internal.ast); } get end() { const internal = this.#internal; return constructU32(internal.pos + 4, internal.ast); } get value() { const internal = this.#internal, cached = internal.$value; if (cached !== void 0) return cached; return (internal.$value = constructStr(internal.pos + 8, internal.ast)); } get raw() { const internal = this.#internal, cached = internal.$raw; if (cached !== void 0) return cached; return (internal.$raw = constructOptionStr(internal.pos + 24, internal.ast)); } toJSON() { return { type: "JSXText", start: this.start, end: this.end, value: this.value, raw: this.raw, }; } [inspectSymbol]() { return Object.setPrototypeOf(this.toJSON(), DebugJSXText.prototype); } } const DebugJSXText = class JSXText {}; export class TSThisParameter { type = "TSThisParameter"; #internal; constructor(pos, ast) { if (ast?.token !== TOKEN) constructorError(); const { nodes } = ast; const cached = nodes.get(pos); if (cached !== void 0) return cached; this.#internal = { pos, ast }; nodes.set(pos, this); } get start() { const internal = this.#internal; return constructU32(internal.pos, internal.ast); } get end() { const internal = this.#internal; return constructU32(internal.pos + 4, internal.ast); } get typeAnnotation() { const internal = this.#internal; return constructOptionBoxTSTypeAnnotation(internal.pos + 16, internal.ast); } toJSON() { return { type: "TSThisParameter", start: this.start, end: this.end, typeAnnotation: this.typeAnnotation, }; } [inspectSymbol]() { return Object.setPrototypeOf(this.toJSON(), DebugTSThisParameter.prototype); } } const DebugTSThisParameter = class TSThisParameter {}; export class TSEnumDeclaration { type = "TSEnumDeclaration"; #internal; constructor(pos, ast) { if (ast?.token !== TOKEN) constructorError(); const { nodes } = ast; const cached = nodes.get(pos); if (cached !== void 0) return cached; this.#internal = { pos, ast }; nodes.set(pos, this); } get start() { const internal = this.#internal; return constructU32(internal.pos, internal.ast); } get end() { const internal = this.#internal; return constructU32(internal.pos + 4, internal.ast); } get id() { const internal = this.#internal; return new BindingIdentifier(internal.pos + 8, internal.ast); } get body() { const internal = this.#internal; return new TSEnumBody(internal.pos + 40, internal.ast); } get const() { const internal = this.#internal; return constructBool(internal.pos + 76, internal.ast); } get declare() { const internal = this.#internal; return constructBool(internal.pos + 77, internal.ast); } toJSON() { return { type: "TSEnumDeclaration", start: this.start, end: this.end, id: this.id, body: this.body, const: this.const, declare: this.declare, }; } [inspectSymbol]() { return Object.setPrototypeOf(this.toJSON(), DebugTSEnumDeclaration.prototype); } } const DebugTSEnumDeclaration = class TSEnumDeclaration {}; export class TSEnumBody { type = "TSEnumBody"; #internal; constructor(pos, ast) { if (ast?.token !== TOKEN) constructorError(); const { nodes } = ast; const cached = nodes.get(pos); if (cached !== void 0) return cached; this.#internal = { pos, ast, $members: void 0 }; nodes.set(pos, this); } get start() { const internal = this.#internal; return constructU32(internal.pos, internal.ast); } get end() { const internal = this.#internal; return constructU32(internal.pos + 4, internal.ast); } get members() { const internal = this.#internal, cached = internal.$members; if (cached !== void 0) return cached; return (internal.$members = constructVecTSEnumMember(internal.pos + 8, internal.ast)); } toJSON() { return { type: "TSEnumBody", start: this.start, end: this.end, members: this.members, }; } [inspectSymbol]() { return Object.setPrototypeOf(this.toJSON(), DebugTSEnumBody.prototype); } } const DebugTSEnumBody = class TSEnumBody {}; export class TSEnumMember { type = "TSEnumMember"; #internal; constructor(pos, ast) { if (ast?.token !== TOKEN) constructorError(); const { nodes } = ast; const cached = nodes.get(pos); if (cached !== void 0) return cached; this.#internal = { pos, ast }; nodes.set(pos, this); } get start() { const internal = this.#internal; return constructU32(internal.pos, internal.ast); } get end() { const internal = this.#internal; return constructU32(internal.pos + 4, internal.ast); } get id() { const internal = this.#internal; return constructTSEnumMemberName(internal.pos + 8, internal.ast); } get initializer() { const internal = this.#internal; return constructOptionExpression(internal.pos + 24, internal.ast); } toJSON() { return { type: "TSEnumMember", start: this.start, end: this.end, id: this.id, initializer: this.initializer, }; } [inspectSymbol]() { return Object.setPrototypeOf(this.toJSON(), DebugTSEnumMember.prototype); } } const DebugTSEnumMember = class TSEnumMember {}; function constructTSEnumMemberName(pos, ast) { switch (ast.buffer[pos]) { case 0: return constructBoxIdentifierName(pos + 8, ast); case 1: return constructBoxStringLiteral(pos + 8, ast); case 2: return constructBoxStringLiteral(pos + 8, ast); case 3: return constructBoxTemplateLiteral(pos + 8, ast); default: throw new Error(`Unexpected discriminant ${ast.buffer[pos]} for TSEnumMemberName`); } } export class TSTypeAnnotation { type = "TSTypeAnnotation"; #internal; constructor(pos, ast) { if (ast?.token !== TOKEN) constructorError(); const { nodes } = ast; const cached = nodes.get(pos); if (cached !== void 0) return cached; this.#internal = { pos, ast }; nodes.set(pos, this); } get start() { const internal = this.#internal; return constructU32(internal.pos, internal.ast); } get end() { const internal = this.#internal; return constructU32(internal.pos + 4, internal.ast); } get typeAnnotation() { const internal = this.#internal; return constructTSType(internal.pos + 8, internal.ast); } toJSON() { return { type: "TSTypeAnnotation", start: this.start, end: this.end, typeAnnotation: this.typeAnnotation, }; } [inspectSymbol]() { return Object.setPrototypeOf(this.toJSON(), DebugTSTypeAnnotation.prototype); } } const DebugTSTypeAnnotation = class TSTypeAnnotation {}; export class TSLiteralType { type = "TSLiteralType"; #internal; constructor(pos, ast) { if (ast?.token !== TOKEN) constructorError(); const { nodes } = ast; const cached = nodes.get(pos); if (cached !== void 0) return cached; this.#internal = { pos, ast }; nodes.set(pos, this); } get start() { const internal = this.#internal; return constructU32(internal.pos, internal.ast); } get end() { const internal = this.#internal; return constructU32(internal.pos + 4, internal.ast); } get literal() { const internal = this.#internal; return constructTSLiteral(internal.pos + 8, internal.ast); } toJSON() { return { type: "TSLiteralType", start: this.start, end: this.end, literal: this.literal, }; } [inspectSymbol]() { return Object.setPrototypeOf(this.toJSON(), DebugTSLiteralType.prototype); } } const DebugTSLiteralType = class TSLiteralType {}; function constructTSLiteral(pos, ast) { switch (ast.buffer[pos]) { case 0: return constructBoxBooleanLiteral(pos + 8, ast); case 1: return constructBoxNumericLiteral(pos + 8, ast); case 2: return constructBoxBigIntLiteral(pos + 8, ast); case 3: return constructBoxStringLiteral(pos + 8, ast); case 4: return constructBoxTemplateLiteral(pos + 8, ast); case 5: return constructBoxUnaryExpression(pos + 8, ast); default: throw new Error(`Unexpected discriminant ${ast.buffer[pos]} for TSLiteral`); } } function constructTSType(pos, ast) { switch (ast.buffer[pos]) { case 0: return constructBoxTSAnyKeyword(pos + 8, ast); case 1: return constructBoxTSBigIntKeyword(pos + 8, ast); case 2: return constructBoxTSBooleanKeyword(pos + 8, ast); case 3: return constructBoxTSIntrinsicKeyword(pos + 8, ast); case 4: return constructBoxTSNeverKeyword(pos + 8, ast); case 5: return constructBoxTSNullKeyword(pos + 8, ast); case 6: return constructBoxTSNumberKeyword(pos + 8, ast); case 7: return constructBoxTSObjectKeyword(pos + 8, ast); case 8: return constructBoxTSStringKeyword(pos + 8, ast); case 9: return constructBoxTSSymbolKeyword(pos + 8, ast); case 10: return constructBoxTSThisType(pos + 8, ast); case 11: return constructBoxTSUndefinedKeyword(pos + 8, ast); case 12: return constructBoxTSUnknownKeyword(pos + 8, ast); case 13: return constructBoxTSVoidKeyword(pos + 8, ast); case 14: return constructBoxTSArrayType(pos + 8, ast); case 15: return constructBoxTSConditionalType(pos + 8, ast); case 16: return constructBoxTSConstructorType(pos + 8, ast); case 17: return constructBoxTSFunctionType(pos + 8, ast); case 18: return constructBoxTSImportType(pos + 8, ast); case 19: return constructBoxTSIndexedAccessType(pos + 8, ast); case 20: return constructBoxTSInferType(pos + 8, ast); case 21: return constructBoxTSIntersectionType(pos + 8, ast); case 22: return constructBoxTSLiteralType(pos + 8, ast); case 23: return constructBoxTSMappedType(pos + 8, ast); case 24: return constructBoxTSNamedTupleMember(pos + 8, ast); case 26: return constructBoxTSTemplateLiteralType(pos + 8, ast); case 27: return constructBoxTSTupleType(pos + 8, ast); case 28: return constructBoxTSTypeLiteral(pos + 8, ast); case 29: return constructBoxTSTypeOperator(pos + 8, ast); case 30: return constructBoxTSTypePredicate(pos + 8, ast); case 31: return constructBoxTSTypeQuery(pos + 8, ast); case 32: return constructBoxTSTypeReference(pos + 8, ast); case 33: return constructBoxTSUnionType(pos + 8, ast); case 34: return constructBoxTSParenthesizedType(pos + 8, ast); case 35: return constructBoxJSDocNullableType(pos + 8, ast); case 36: return constructBoxJSDocNonNullableType(pos + 8, ast); case 37: return constructBoxJSDocUnknownType(pos + 8, ast); default: throw new Error(`Unexpected discriminant ${ast.buffer[pos]} for TSType`); } } export class TSConditionalType { type = "TSConditionalType"; #internal; constructor(pos, ast) { if (ast?.token !== TOKEN) constructorError(); const { nodes } = ast; const cached = nodes.get(pos); if (cached !== void 0) return cached; this.#internal = { pos, ast }; nodes.set(pos, this); } get start() { const internal = this.#internal; return constructU32(internal.pos, internal.ast); } get end() { const internal = this.#internal; return constructU32(internal.pos + 4, internal.ast); } get checkType() { const internal = this.#internal; return constructTSType(internal.pos + 8, internal.ast); } get extendsType() { const internal = this.#internal; return constructTSType(internal.pos + 24, internal.ast); } get trueType() { const internal = this.#internal; return constructTSType(internal.pos + 40, internal.ast); } get falseType() { const internal = this.#internal; return constructTSType(internal.pos + 56, internal.ast); } toJSON() { return { type: "TSConditionalType", start: this.start, end: this.end, checkType: this.checkType, extendsType: this.extendsType, trueType: this.trueType, falseType: this.falseType, }; } [inspectSymbol]() { return Object.setPrototypeOf(this.toJSON(), DebugTSConditionalType.prototype); } } const DebugTSConditionalType = class TSConditionalType {}; export class TSUnionType { type = "TSUnionType"; #internal; constructor(pos, ast) { if (ast?.token !== TOKEN) constructorError(); const { nodes } = ast; const cached = nodes.get(pos); if (cached !== void 0) return cached; this.#internal = { pos, ast, $types: void 0 }; nodes.set(pos, this); } get start() { const internal = this.#internal; return constructU32(internal.pos, internal.ast); } get end() { const internal = this.#internal; return constructU32(internal.pos + 4, internal.ast); } get types() { const internal = this.#internal, cached = internal.$types; if (cached !== void 0) return cached; return (internal.$types = constructVecTSType(internal.pos + 8, internal.ast)); } toJSON() { return { type: "TSUnionType", start: this.start, end: this.end, types: this.types, }; } [inspectSymbol]() { return Object.setPrototypeOf(this.toJSON(), DebugTSUnionType.prototype); } } const DebugTSUnionType = class TSUnionType {}; export class TSIntersectionType { type = "TSIntersectionType"; #internal; constructor(pos, ast) { if (ast?.token !== TOKEN) constructorError(); const { nodes } = ast; const cached = nodes.get(pos); if (cached !== void 0) return cached; this.#internal = { pos, ast, $types: void 0 }; nodes.set(pos, this); } get start() { const internal = this.#internal; return constructU32(internal.pos, internal.ast); } get end() { const internal = this.#internal; return constructU32(internal.pos + 4, internal.ast); } get types() { const internal = this.#internal, cached = internal.$types; if (cached !== void 0) return cached; return (internal.$types = constructVecTSType(internal.pos + 8, internal.ast)); } toJSON() { return { type: "TSIntersectionType", start: this.start, end: this.end, types: this.types, }; } [inspectSymbol]() { return Object.setPrototypeOf(this.toJSON(), DebugTSIntersectionType.prototype); } } const DebugTSIntersectionType = class TSIntersectionType {}; export class TSParenthesizedType { type = "TSParenthesizedType"; #internal; constructor(pos, ast) { if (ast?.token !== TOKEN) constructorError(); const { nodes } = ast; const cached = nodes.get(pos); if (cached !== void 0) return cached; this.#internal = { pos, ast }; nodes.set(pos, this); } get start() { const internal = this.#internal; return constructU32(internal.pos, internal.ast); } get end() { const internal = this.#internal; return constructU32(internal.pos + 4, internal.ast); } get typeAnnotation() { const internal = this.#internal; return constructTSType(internal.pos + 8, internal.ast); } toJSON() { return { type: "TSParenthesizedType", start: this.start, end: this.end, typeAnnotation: this.typeAnnotation, }; } [inspectSymbol]() { return Object.setPrototypeOf(this.toJSON(), DebugTSParenthesizedType.prototype); } } const DebugTSParenthesizedType = class TSParenthesizedType {}; export class TSTypeOperator { type = "TSTypeOperator"; #internal; constructor(pos, ast) { if (ast?.token !== TOKEN) constructorError(); const { nodes } = ast; const cached = nodes.get(pos); if (cached !== void 0) return cached; this.#internal = { pos, ast }; nodes.set(pos, this); } get start() { const internal = this.#internal; return constructU32(internal.pos, internal.ast); } get end() { const internal = this.#internal; return constructU32(internal.pos + 4, internal.ast); } get operator() { const internal = this.#internal; return constructTSTypeOperatorOperator(internal.pos + 24, internal.ast); } get typeAnnotation() { const internal = this.#internal; return constructTSType(internal.pos + 8, internal.ast); } toJSON() { return { type: "TSTypeOperator", start: this.start, end: this.end, operator: this.operator, typeAnnotation: this.typeAnnotation, }; } [inspectSymbol]() { return Object.setPrototypeOf(this.toJSON(), DebugTSTypeOperator.prototype); } } const DebugTSTypeOperator = class TSTypeOperator {}; function constructTSTypeOperatorOperator(pos, ast) { switch (ast.buffer[pos]) { case 0: return "keyof"; case 1: return "unique"; case 2: return "readonly"; default: throw new Error(`Unexpected discriminant ${ast.buffer[pos]} for TSTypeOperatorOperator`); } } export class TSArrayType { type = "TSArrayType"; #internal; constructor(pos, ast) { if (ast?.token !== TOKEN) constructorError(); const { nodes } = ast; const cached = nodes.get(pos); if (cached !== void 0) return cached; this.#internal = { pos, ast }; nodes.set(pos, this); } get start() { const internal = this.#internal; return constructU32(internal.pos, internal.ast); } get end() { const internal = this.#internal; return constructU32(internal.pos + 4, internal.ast); } get elementType() { const internal = this.#internal; return constructTSType(internal.pos + 8, internal.ast); } toJSON() { return { type: "TSArrayType", start: this.start, end: this.end, elementType: this.elementType, }; } [inspectSymbol]() { return Object.setPrototypeOf(this.toJSON(), DebugTSArrayType.prototype); } } const DebugTSArrayType = class TSArrayType {}; export class TSIndexedAccessType { type = "TSIndexedAccessType"; #internal; constructor(pos, ast) { if (ast?.token !== TOKEN) constructorError(); const { nodes } = ast; const cached = nodes.get(pos); if (cached !== void 0) return cached; this.#internal = { pos, ast }; nodes.set(pos, this); } get start() { const internal = this.#internal; return constructU32(internal.pos, internal.ast); } get end() { const internal = this.#internal; return constructU32(internal.pos + 4, internal.ast); } get objectType() { const internal = this.#internal; return constructTSType(internal.pos + 8, internal.ast); } get indexType() { const internal = this.#internal; return constructTSType(internal.pos + 24, internal.ast); } toJSON() { return { type: "TSIndexedAccessType", start: this.start, end: this.end, objectType: this.objectType, indexType: this.indexType, }; } [inspectSymbol]() { return Object.setPrototypeOf(this.toJSON(), DebugTSIndexedAccessType.prototype); } } const DebugTSIndexedAccessType = class TSIndexedAccessType {}; export class TSTupleType { type = "TSTupleType"; #internal; constructor(pos, ast) { if (ast?.token !== TOKEN) constructorError(); const { nodes } = ast; const cached = nodes.get(pos); if (cached !== void 0) return cached; this.#internal = { pos, ast, $elementTypes: void 0 }; nodes.set(pos, this); } get start() { const internal = this.#internal; return constructU32(internal.pos, internal.ast); } get end() { const internal = this.#internal; return constructU32(internal.pos + 4, internal.ast); } get elementTypes() { const internal = this.#internal, cached = internal.$elementTypes; if (cached !== void 0) return cached; return (internal.$elementTypes = constructVecTSTupleElement(internal.pos + 8, internal.ast)); } toJSON() { return { type: "TSTupleType", start: this.start, end: this.end, elementTypes: this.elementTypes, }; } [inspectSymbol]() { return Object.setPrototypeOf(this.toJSON(), DebugTSTupleType.prototype); } } const DebugTSTupleType = class TSTupleType {}; export class TSNamedTupleMember { type = "TSNamedTupleMember"; #internal; constructor(pos, ast) { if (ast?.token !== TOKEN) constructorError(); const { nodes } = ast; const cached = nodes.get(pos); if (cached !== void 0) return cached; this.#internal = { pos, ast }; nodes.set(pos, this); } get start() { const internal = this.#internal; return constructU32(internal.pos, internal.ast); } get end() { const internal = this.#internal; return constructU32(internal.pos + 4, internal.ast); } get label() { const internal = this.#internal; return new IdentifierName(internal.pos + 8, internal.ast); } get elementType() { const internal = this.#internal; return constructTSTupleElement(internal.pos + 32, internal.ast); } get optional() { const internal = this.#internal; return constructBool(internal.pos + 48, internal.ast); } toJSON() { return { type: "TSNamedTupleMember", start: this.start, end: this.end, label: this.label, elementType: this.elementType, optional: this.optional, }; } [inspectSymbol]() { return Object.setPrototypeOf(this.toJSON(), DebugTSNamedTupleMember.prototype); } } const DebugTSNamedTupleMember = class TSNamedTupleMember {}; export class TSOptionalType { type = "TSOptionalType"; #internal; constructor(pos, ast) { if (ast?.token !== TOKEN) constructorError(); const { nodes } = ast; const cached = nodes.get(pos); if (cached !== void 0) return cached; this.#internal = { pos, ast }; nodes.set(pos, this); } get start() { const internal = this.#internal; return constructU32(internal.pos, internal.ast); } get end() { const internal = this.#internal; return constructU32(internal.pos + 4, internal.ast); } get typeAnnotation() { const internal = this.#internal; return constructTSType(internal.pos + 8, internal.ast); } toJSON() { return { type: "TSOptionalType", start: this.start, end: this.end, typeAnnotation: this.typeAnnotation, }; } [inspectSymbol]() { return Object.setPrototypeOf(this.toJSON(), DebugTSOptionalType.prototype); } } const DebugTSOptionalType = class TSOptionalType {}; export class TSRestType { type = "TSRestType"; #internal; constructor(pos, ast) { if (ast?.token !== TOKEN) constructorError(); const { nodes } = ast; const cached = nodes.get(pos); if (cached !== void 0) return cached; this.#internal = { pos, ast }; nodes.set(pos, this); } get start() { const internal = this.#internal; return constructU32(internal.pos, internal.ast); } get end() { const internal = this.#internal; return constructU32(internal.pos + 4, internal.ast); } get typeAnnotation() { const internal = this.#internal; return constructTSType(internal.pos + 8, internal.ast); } toJSON() { return { type: "TSRestType", start: this.start, end: this.end, typeAnnotation: this.typeAnnotation, }; } [inspectSymbol]() { return Object.setPrototypeOf(this.toJSON(), DebugTSRestType.prototype); } } const DebugTSRestType = class TSRestType {}; function constructTSTupleElement(pos, ast) { switch (ast.buffer[pos]) { case 0: return constructBoxTSAnyKeyword(pos + 8, ast); case 1: return constructBoxTSBigIntKeyword(pos + 8, ast); case 2: return constructBoxTSBooleanKeyword(pos + 8, ast); case 3: return constructBoxTSIntrinsicKeyword(pos + 8, ast); case 4: return constructBoxTSNeverKeyword(pos + 8, ast); case 5: return constructBoxTSNullKeyword(pos + 8, ast); case 6: return constructBoxTSNumberKeyword(pos + 8, ast); case 7: return constructBoxTSObjectKeyword(pos + 8, ast); case 8: return constructBoxTSStringKeyword(pos + 8, ast); case 9: return constructBoxTSSymbolKeyword(pos + 8, ast); case 10: return constructBoxTSThisType(pos + 8, ast); case 11: return constructBoxTSUndefinedKeyword(pos + 8, ast); case 12: return constructBoxTSUnknownKeyword(pos + 8, ast); case 13: return constructBoxTSVoidKeyword(pos + 8, ast); case 14: return constructBoxTSArrayType(pos + 8, ast); case 15: return constructBoxTSConditionalType(pos + 8, ast); case 16: return constructBoxTSConstructorType(pos + 8, ast); case 17: return constructBoxTSFunctionType(pos + 8, ast); case 18: return constructBoxTSImportType(pos + 8, ast); case 19: return constructBoxTSIndexedAccessType(pos + 8, ast); case 20: return constructBoxTSInferType(pos + 8, ast); case 21: return constructBoxTSIntersectionType(pos + 8, ast); case 22: return constructBoxTSLiteralType(pos + 8, ast); case 23: return constructBoxTSMappedType(pos + 8, ast); case 24: return constructBoxTSNamedTupleMember(pos + 8, ast); case 26: return constructBoxTSTemplateLiteralType(pos + 8, ast); case 27: return constructBoxTSTupleType(pos + 8, ast); case 28: return constructBoxTSTypeLiteral(pos + 8, ast); case 29: return constructBoxTSTypeOperator(pos + 8, ast); case 30: return constructBoxTSTypePredicate(pos + 8, ast); case 31: return constructBoxTSTypeQuery(pos + 8, ast); case 32: return constructBoxTSTypeReference(pos + 8, ast); case 33: return constructBoxTSUnionType(pos + 8, ast); case 34: return constructBoxTSParenthesizedType(pos + 8, ast); case 35: return constructBoxJSDocNullableType(pos + 8, ast); case 36: return constructBoxJSDocNonNullableType(pos + 8, ast); case 37: return constructBoxJSDocUnknownType(pos + 8, ast); case 64: return constructBoxTSOptionalType(pos + 8, ast); case 65: return constructBoxTSRestType(pos + 8, ast); default: throw new Error(`Unexpected discriminant ${ast.buffer[pos]} for TSTupleElement`); } } export class TSAnyKeyword { type = "TSAnyKeyword"; #internal; constructor(pos, ast) { if (ast?.token !== TOKEN) constructorError(); const { nodes } = ast; const cached = nodes.get(pos); if (cached !== void 0) return cached; this.#internal = { pos, ast }; nodes.set(pos, this); } get start() { const internal = this.#internal; return constructU32(internal.pos, internal.ast); } get end() { const internal = this.#internal; return constructU32(internal.pos + 4, internal.ast); } toJSON() { return { type: "TSAnyKeyword", start: this.start, end: this.end, }; } [inspectSymbol]() { return Object.setPrototypeOf(this.toJSON(), DebugTSAnyKeyword.prototype); } } const DebugTSAnyKeyword = class TSAnyKeyword {}; export class TSStringKeyword { type = "TSStringKeyword"; #internal; constructor(pos, ast) { if (ast?.token !== TOKEN) constructorError(); const { nodes } = ast; const cached = nodes.get(pos); if (cached !== void 0) return cached; this.#internal = { pos, ast }; nodes.set(pos, this); } get start() { const internal = this.#internal; return constructU32(internal.pos, internal.ast); } get end() { const internal = this.#internal; return constructU32(internal.pos + 4, internal.ast); } toJSON() { return { type: "TSStringKeyword", start: this.start, end: this.end, }; } [inspectSymbol]() { return Object.setPrototypeOf(this.toJSON(), DebugTSStringKeyword.prototype); } } const DebugTSStringKeyword = class TSStringKeyword {}; export class TSBooleanKeyword { type = "TSBooleanKeyword"; #internal; constructor(pos, ast) { if (ast?.token !== TOKEN) constructorError(); const { nodes } = ast; const cached = nodes.get(pos); if (cached !== void 0) return cached; this.#internal = { pos, ast }; nodes.set(pos, this); } get start() { const internal = this.#internal; return constructU32(internal.pos, internal.ast); } get end() { const internal = this.#internal; return constructU32(internal.pos + 4, internal.ast); } toJSON() { return { type: "TSBooleanKeyword", start: this.start, end: this.end, }; } [inspectSymbol]() { return Object.setPrototypeOf(this.toJSON(), DebugTSBooleanKeyword.prototype); } } const DebugTSBooleanKeyword = class TSBooleanKeyword {}; export class TSNumberKeyword { type = "TSNumberKeyword"; #internal; constructor(pos, ast) { if (ast?.token !== TOKEN) constructorError(); const { nodes } = ast; const cached = nodes.get(pos); if (cached !== void 0) return cached; this.#internal = { pos, ast }; nodes.set(pos, this); } get start() { const internal = this.#internal; return constructU32(internal.pos, internal.ast); } get end() { const internal = this.#internal; return constructU32(internal.pos + 4, internal.ast); } toJSON() { return { type: "TSNumberKeyword", start: this.start, end: this.end, }; } [inspectSymbol]() { return Object.setPrototypeOf(this.toJSON(), DebugTSNumberKeyword.prototype); } } const DebugTSNumberKeyword = class TSNumberKeyword {}; export class TSNeverKeyword { type = "TSNeverKeyword"; #internal; constructor(pos, ast) { if (ast?.token !== TOKEN) constructorError(); const { nodes } = ast; const cached = nodes.get(pos); if (cached !== void 0) return cached; this.#internal = { pos, ast }; nodes.set(pos, this); } get start() { const internal = this.#internal; return constructU32(internal.pos, internal.ast); } get end() { const internal = this.#internal; return constructU32(internal.pos + 4, internal.ast); } toJSON() { return { type: "TSNeverKeyword", start: this.start, end: this.end, }; } [inspectSymbol]() { return Object.setPrototypeOf(this.toJSON(), DebugTSNeverKeyword.prototype); } } const DebugTSNeverKeyword = class TSNeverKeyword {}; export class TSIntrinsicKeyword { type = "TSIntrinsicKeyword"; #internal; constructor(pos, ast) { if (ast?.token !== TOKEN) constructorError(); const { nodes } = ast; const cached = nodes.get(pos); if (cached !== void 0) return cached; this.#internal = { pos, ast }; nodes.set(pos, this); } get start() { const internal = this.#internal; return constructU32(internal.pos, internal.ast); } get end() { const internal = this.#internal; return constructU32(internal.pos + 4, internal.ast); } toJSON() { return { type: "TSIntrinsicKeyword", start: this.start, end: this.end, }; } [inspectSymbol]() { return Object.setPrototypeOf(this.toJSON(), DebugTSIntrinsicKeyword.prototype); } } const DebugTSIntrinsicKeyword = class TSIntrinsicKeyword {}; export class TSUnknownKeyword { type = "TSUnknownKeyword"; #internal; constructor(pos, ast) { if (ast?.token !== TOKEN) constructorError(); const { nodes } = ast; const cached = nodes.get(pos); if (cached !== void 0) return cached; this.#internal = { pos, ast }; nodes.set(pos, this); } get start() { const internal = this.#internal; return constructU32(internal.pos, internal.ast); } get end() { const internal = this.#internal; return constructU32(internal.pos + 4, internal.ast); } toJSON() { return { type: "TSUnknownKeyword", start: this.start, end: this.end, }; } [inspectSymbol]() { return Object.setPrototypeOf(this.toJSON(), DebugTSUnknownKeyword.prototype); } } const DebugTSUnknownKeyword = class TSUnknownKeyword {}; export class TSNullKeyword { type = "TSNullKeyword"; #internal; constructor(pos, ast) { if (ast?.token !== TOKEN) constructorError(); const { nodes } = ast; const cached = nodes.get(pos); if (cached !== void 0) return cached; this.#internal = { pos, ast }; nodes.set(pos, this); } get start() { const internal = this.#internal; return constructU32(internal.pos, internal.ast); } get end() { const internal = this.#internal; return constructU32(internal.pos + 4, internal.ast); } toJSON() { return { type: "TSNullKeyword", start: this.start, end: this.end, }; } [inspectSymbol]() { return Object.setPrototypeOf(this.toJSON(), DebugTSNullKeyword.prototype); } } const DebugTSNullKeyword = class TSNullKeyword {}; export class TSUndefinedKeyword { type = "TSUndefinedKeyword"; #internal; constructor(pos, ast) { if (ast?.token !== TOKEN) constructorError(); const { nodes } = ast; const cached = nodes.get(pos); if (cached !== void 0) return cached; this.#internal = { pos, ast }; nodes.set(pos, this); } get start() { const internal = this.#internal; return constructU32(internal.pos, internal.ast); } get end() { const internal = this.#internal; return constructU32(internal.pos + 4, internal.ast); } toJSON() { return { type: "TSUndefinedKeyword", start: this.start, end: this.end, }; } [inspectSymbol]() { return Object.setPrototypeOf(this.toJSON(), DebugTSUndefinedKeyword.prototype); } } const DebugTSUndefinedKeyword = class TSUndefinedKeyword {}; export class TSVoidKeyword { type = "TSVoidKeyword"; #internal; constructor(pos, ast) { if (ast?.token !== TOKEN) constructorError(); const { nodes } = ast; const cached = nodes.get(pos); if (cached !== void 0) return cached; this.#internal = { pos, ast }; nodes.set(pos, this); } get start() { const internal = this.#internal; return constructU32(internal.pos, internal.ast); } get end() { const internal = this.#internal; return constructU32(internal.pos + 4, internal.ast); } toJSON() { return { type: "TSVoidKeyword", start: this.start, end: this.end, }; } [inspectSymbol]() { return Object.setPrototypeOf(this.toJSON(), DebugTSVoidKeyword.prototype); } } const DebugTSVoidKeyword = class TSVoidKeyword {}; export class TSSymbolKeyword { type = "TSSymbolKeyword"; #internal; constructor(pos, ast) { if (ast?.token !== TOKEN) constructorError(); const { nodes } = ast; const cached = nodes.get(pos); if (cached !== void 0) return cached; this.#internal = { pos, ast }; nodes.set(pos, this); } get start() { const internal = this.#internal; return constructU32(internal.pos, internal.ast); } get end() { const internal = this.#internal; return constructU32(internal.pos + 4, internal.ast); } toJSON() { return { type: "TSSymbolKeyword", start: this.start, end: this.end, }; } [inspectSymbol]() { return Object.setPrototypeOf(this.toJSON(), DebugTSSymbolKeyword.prototype); } } const DebugTSSymbolKeyword = class TSSymbolKeyword {}; export class TSThisType { type = "TSThisType"; #internal; constructor(pos, ast) { if (ast?.token !== TOKEN) constructorError(); const { nodes } = ast; const cached = nodes.get(pos); if (cached !== void 0) return cached; this.#internal = { pos, ast }; nodes.set(pos, this); } get start() { const internal = this.#internal; return constructU32(internal.pos, internal.ast); } get end() { const internal = this.#internal; return constructU32(internal.pos + 4, internal.ast); } toJSON() { return { type: "TSThisType", start: this.start, end: this.end, }; } [inspectSymbol]() { return Object.setPrototypeOf(this.toJSON(), DebugTSThisType.prototype); } } const DebugTSThisType = class TSThisType {}; export class TSObjectKeyword { type = "TSObjectKeyword"; #internal; constructor(pos, ast) { if (ast?.token !== TOKEN) constructorError(); const { nodes } = ast; const cached = nodes.get(pos); if (cached !== void 0) return cached; this.#internal = { pos, ast }; nodes.set(pos, this); } get start() { const internal = this.#internal; return constructU32(internal.pos, internal.ast); } get end() { const internal = this.#internal; return constructU32(internal.pos + 4, internal.ast); } toJSON() { return { type: "TSObjectKeyword", start: this.start, end: this.end, }; } [inspectSymbol]() { return Object.setPrototypeOf(this.toJSON(), DebugTSObjectKeyword.prototype); } } const DebugTSObjectKeyword = class TSObjectKeyword {}; export class TSBigIntKeyword { type = "TSBigIntKeyword"; #internal; constructor(pos, ast) { if (ast?.token !== TOKEN) constructorError(); const { nodes } = ast; const cached = nodes.get(pos); if (cached !== void 0) return cached; this.#internal = { pos, ast }; nodes.set(pos, this); } get start() { const internal = this.#internal; return constructU32(internal.pos, internal.ast); } get end() { const internal = this.#internal; return constructU32(internal.pos + 4, internal.ast); } toJSON() { return { type: "TSBigIntKeyword", start: this.start, end: this.end, }; } [inspectSymbol]() { return Object.setPrototypeOf(this.toJSON(), DebugTSBigIntKeyword.prototype); } } const DebugTSBigIntKeyword = class TSBigIntKeyword {}; export class TSTypeReference { type = "TSTypeReference"; #internal; constructor(pos, ast) { if (ast?.token !== TOKEN) constructorError(); const { nodes } = ast; const cached = nodes.get(pos); if (cached !== void 0) return cached; this.#internal = { pos, ast }; nodes.set(pos, this); } get start() { const internal = this.#internal; return constructU32(internal.pos, internal.ast); } get end() { const internal = this.#internal; return constructU32(internal.pos + 4, internal.ast); } get typeName() { const internal = this.#internal; return constructTSTypeName(internal.pos + 8, internal.ast); } get typeArguments() { const internal = this.#internal; return constructOptionBoxTSTypeParameterInstantiation(internal.pos + 24, internal.ast); } toJSON() { return { type: "TSTypeReference", start: this.start, end: this.end, typeName: this.typeName, typeArguments: this.typeArguments, }; } [inspectSymbol]() { return Object.setPrototypeOf(this.toJSON(), DebugTSTypeReference.prototype); } } const DebugTSTypeReference = class TSTypeReference {}; function constructTSTypeName(pos, ast) { switch (ast.buffer[pos]) { case 0: return constructBoxIdentifierReference(pos + 8, ast); case 1: return constructBoxTSQualifiedName(pos + 8, ast); case 2: return constructBoxThisExpression(pos + 8, ast); default: throw new Error(`Unexpected discriminant ${ast.buffer[pos]} for TSTypeName`); } } export class TSQualifiedName { type = "TSQualifiedName"; #internal; constructor(pos, ast) { if (ast?.token !== TOKEN) constructorError(); const { nodes } = ast; const cached = nodes.get(pos); if (cached !== void 0) return cached; this.#internal = { pos, ast }; nodes.set(pos, this); } get start() { const internal = this.#internal; return constructU32(internal.pos, internal.ast); } get end() { const internal = this.#internal; return constructU32(internal.pos + 4, internal.ast); } get left() { const internal = this.#internal; return constructTSTypeName(internal.pos + 8, internal.ast); } get right() { const internal = this.#internal; return new IdentifierName(internal.pos + 24, internal.ast); } toJSON() { return { type: "TSQualifiedName", start: this.start, end: this.end, left: this.left, right: this.right, }; } [inspectSymbol]() { return Object.setPrototypeOf(this.toJSON(), DebugTSQualifiedName.prototype); } } const DebugTSQualifiedName = class TSQualifiedName {}; export class TSTypeParameterInstantiation { type = "TSTypeParameterInstantiation"; #internal; constructor(pos, ast) { if (ast?.token !== TOKEN) constructorError(); const { nodes } = ast; const cached = nodes.get(pos); if (cached !== void 0) return cached; this.#internal = { pos, ast, $params: void 0 }; nodes.set(pos, this); } get start() { const internal = this.#internal; return constructU32(internal.pos, internal.ast); } get end() { const internal = this.#internal; return constructU32(internal.pos + 4, internal.ast); } get params() { const internal = this.#internal, cached = internal.$params; if (cached !== void 0) return cached; return (internal.$params = constructVecTSType(internal.pos + 8, internal.ast)); } toJSON() { return { type: "TSTypeParameterInstantiation", start: this.start, end: this.end, params: this.params, }; } [inspectSymbol]() { return Object.setPrototypeOf(this.toJSON(), DebugTSTypeParameterInstantiation.prototype); } } const DebugTSTypeParameterInstantiation = class TSTypeParameterInstantiation {}; export class TSTypeParameter { type = "TSTypeParameter"; #internal; constructor(pos, ast) { if (ast?.token !== TOKEN) constructorError(); const { nodes } = ast; const cached = nodes.get(pos); if (cached !== void 0) return cached; this.#internal = { pos, ast }; nodes.set(pos, this); } get start() { const internal = this.#internal; return constructU32(internal.pos, internal.ast); } get end() { const internal = this.#internal; return constructU32(internal.pos + 4, internal.ast); } get name() { const internal = this.#internal; return new BindingIdentifier(internal.pos + 8, internal.ast); } get constraint() { const internal = this.#internal; return constructOptionTSType(internal.pos + 40, internal.ast); } get default() { const internal = this.#internal; return constructOptionTSType(internal.pos + 56, internal.ast); } get in() { const internal = this.#internal; return constructBool(internal.pos + 72, internal.ast); } get out() { const internal = this.#internal; return constructBool(internal.pos + 73, internal.ast); } get const() { const internal = this.#internal; return constructBool(internal.pos + 74, internal.ast); } toJSON() { return { type: "TSTypeParameter", start: this.start, end: this.end, name: this.name, constraint: this.constraint, default: this.default, in: this.in, out: this.out, const: this.const, }; } [inspectSymbol]() { return Object.setPrototypeOf(this.toJSON(), DebugTSTypeParameter.prototype); } } const DebugTSTypeParameter = class TSTypeParameter {}; export class TSTypeParameterDeclaration { type = "TSTypeParameterDeclaration"; #internal; constructor(pos, ast) { if (ast?.token !== TOKEN) constructorError(); const { nodes } = ast; const cached = nodes.get(pos); if (cached !== void 0) return cached; this.#internal = { pos, ast, $params: void 0 }; nodes.set(pos, this); } get start() { const internal = this.#internal; return constructU32(internal.pos, internal.ast); } get end() { const internal = this.#internal; return constructU32(internal.pos + 4, internal.ast); } get params() { const internal = this.#internal, cached = internal.$params; if (cached !== void 0) return cached; return (internal.$params = constructVecTSTypeParameter(internal.pos + 8, internal.ast)); } toJSON() { return { type: "TSTypeParameterDeclaration", start: this.start, end: this.end, params: this.params, }; } [inspectSymbol]() { return Object.setPrototypeOf(this.toJSON(), DebugTSTypeParameterDeclaration.prototype); } } const DebugTSTypeParameterDeclaration = class TSTypeParameterDeclaration {}; export class TSTypeAliasDeclaration { type = "TSTypeAliasDeclaration"; #internal; constructor(pos, ast) { if (ast?.token !== TOKEN) constructorError(); const { nodes } = ast; const cached = nodes.get(pos); if (cached !== void 0) return cached; this.#internal = { pos, ast }; nodes.set(pos, this); } get start() { const internal = this.#internal; return constructU32(internal.pos, internal.ast); } get end() { const internal = this.#internal; return constructU32(internal.pos + 4, internal.ast); } get id() { const internal = this.#internal; return new BindingIdentifier(internal.pos + 8, internal.ast); } get typeParameters() { const internal = this.#internal; return constructOptionBoxTSTypeParameterDeclaration(internal.pos + 40, internal.ast); } get typeAnnotation() { const internal = this.#internal; return constructTSType(internal.pos + 48, internal.ast); } get declare() { const internal = this.#internal; return constructBool(internal.pos + 68, internal.ast); } toJSON() { return { type: "TSTypeAliasDeclaration", start: this.start, end: this.end, id: this.id, typeParameters: this.typeParameters, typeAnnotation: this.typeAnnotation, declare: this.declare, }; } [inspectSymbol]() { return Object.setPrototypeOf(this.toJSON(), DebugTSTypeAliasDeclaration.prototype); } } const DebugTSTypeAliasDeclaration = class TSTypeAliasDeclaration {}; function constructTSAccessibility(pos, ast) { switch (ast.buffer[pos]) { case 0: return "private"; case 1: return "protected"; case 2: return "public"; default: throw new Error(`Unexpected discriminant ${ast.buffer[pos]} for TSAccessibility`); } } export class TSClassImplements { type = "TSClassImplements"; #internal; constructor(pos, ast) { if (ast?.token !== TOKEN) constructorError(); const { nodes } = ast; const cached = nodes.get(pos); if (cached !== void 0) return cached; this.#internal = { pos, ast }; nodes.set(pos, this); } get start() { const internal = this.#internal; return constructU32(internal.pos, internal.ast); } get end() { const internal = this.#internal; return constructU32(internal.pos + 4, internal.ast); } get expression() { const internal = this.#internal; return constructTSTypeName(internal.pos + 8, internal.ast); } get typeArguments() { const internal = this.#internal; return constructOptionBoxTSTypeParameterInstantiation(internal.pos + 24, internal.ast); } toJSON() { return { type: "TSClassImplements", start: this.start, end: this.end, expression: this.expression, typeArguments: this.typeArguments, }; } [inspectSymbol]() { return Object.setPrototypeOf(this.toJSON(), DebugTSClassImplements.prototype); } } const DebugTSClassImplements = class TSClassImplements {}; export class TSInterfaceDeclaration { type = "TSInterfaceDeclaration"; #internal; constructor(pos, ast) { if (ast?.token !== TOKEN) constructorError(); const { nodes } = ast; const cached = nodes.get(pos); if (cached !== void 0) return cached; this.#internal = { pos, ast, $extends: void 0 }; nodes.set(pos, this); } get start() { const internal = this.#internal; return constructU32(internal.pos, internal.ast); } get end() { const internal = this.#internal; return constructU32(internal.pos + 4, internal.ast); } get id() { const internal = this.#internal; return new BindingIdentifier(internal.pos + 8, internal.ast); } get typeParameters() { const internal = this.#internal; return constructOptionBoxTSTypeParameterDeclaration(internal.pos + 40, internal.ast); } get extends() { const internal = this.#internal, cached = internal.$extends; if (cached !== void 0) return cached; return (internal.$extends = constructVecTSInterfaceHeritage(internal.pos + 48, internal.ast)); } get body() { const internal = this.#internal; return constructBoxTSInterfaceBody(internal.pos + 72, internal.ast); } get declare() { const internal = this.#internal; return constructBool(internal.pos + 84, internal.ast); } toJSON() { return { type: "TSInterfaceDeclaration", start: this.start, end: this.end, id: this.id, typeParameters: this.typeParameters, extends: this.extends, body: this.body, declare: this.declare, }; } [inspectSymbol]() { return Object.setPrototypeOf(this.toJSON(), DebugTSInterfaceDeclaration.prototype); } } const DebugTSInterfaceDeclaration = class TSInterfaceDeclaration {}; export class TSInterfaceBody { type = "TSInterfaceBody"; #internal; constructor(pos, ast) { if (ast?.token !== TOKEN) constructorError(); const { nodes } = ast; const cached = nodes.get(pos); if (cached !== void 0) return cached; this.#internal = { pos, ast, $body: void 0 }; nodes.set(pos, this); } get start() { const internal = this.#internal; return constructU32(internal.pos, internal.ast); } get end() { const internal = this.#internal; return constructU32(internal.pos + 4, internal.ast); } get body() { const internal = this.#internal, cached = internal.$body; if (cached !== void 0) return cached; return (internal.$body = constructVecTSSignature(internal.pos + 8, internal.ast)); } toJSON() { return { type: "TSInterfaceBody", start: this.start, end: this.end, body: this.body, }; } [inspectSymbol]() { return Object.setPrototypeOf(this.toJSON(), DebugTSInterfaceBody.prototype); } } const DebugTSInterfaceBody = class TSInterfaceBody {}; export class TSPropertySignature { type = "TSPropertySignature"; #internal; constructor(pos, ast) { if (ast?.token !== TOKEN) constructorError(); const { nodes } = ast; const cached = nodes.get(pos); if (cached !== void 0) return cached; this.#internal = { pos, ast }; nodes.set(pos, this); } get start() { const internal = this.#internal; return constructU32(internal.pos, internal.ast); } get end() { const internal = this.#internal; return constructU32(internal.pos + 4, internal.ast); } get computed() { const internal = this.#internal; return constructBool(internal.pos + 32, internal.ast); } get optional() { const internal = this.#internal; return constructBool(internal.pos + 33, internal.ast); } get readonly() { const internal = this.#internal; return constructBool(internal.pos + 34, internal.ast); } get key() { const internal = this.#internal; return constructPropertyKey(internal.pos + 8, internal.ast); } get typeAnnotation() { const internal = this.#internal; return constructOptionBoxTSTypeAnnotation(internal.pos + 24, internal.ast); } toJSON() { return { type: "TSPropertySignature", start: this.start, end: this.end, computed: this.computed, optional: this.optional, readonly: this.readonly, key: this.key, typeAnnotation: this.typeAnnotation, }; } [inspectSymbol]() { return Object.setPrototypeOf(this.toJSON(), DebugTSPropertySignature.prototype); } } const DebugTSPropertySignature = class TSPropertySignature {}; function constructTSSignature(pos, ast) { switch (ast.buffer[pos]) { case 0: return constructBoxTSIndexSignature(pos + 8, ast); case 1: return constructBoxTSPropertySignature(pos + 8, ast); case 2: return constructBoxTSCallSignatureDeclaration(pos + 8, ast); case 3: return constructBoxTSConstructSignatureDeclaration(pos + 8, ast); case 4: return constructBoxTSMethodSignature(pos + 8, ast); default: throw new Error(`Unexpected discriminant ${ast.buffer[pos]} for TSSignature`); } } export class TSIndexSignature { type = "TSIndexSignature"; #internal; constructor(pos, ast) { if (ast?.token !== TOKEN) constructorError(); const { nodes } = ast; const cached = nodes.get(pos); if (cached !== void 0) return cached; this.#internal = { pos, ast, $parameters: void 0 }; nodes.set(pos, this); } get start() { const internal = this.#internal; return constructU32(internal.pos, internal.ast); } get end() { const internal = this.#internal; return constructU32(internal.pos + 4, internal.ast); } get parameters() { const internal = this.#internal, cached = internal.$parameters; if (cached !== void 0) return cached; return (internal.$parameters = constructVecTSIndexSignatureName( internal.pos + 8, internal.ast, )); } get typeAnnotation() { const internal = this.#internal; return constructBoxTSTypeAnnotation(internal.pos + 32, internal.ast); } get readonly() { const internal = this.#internal; return constructBool(internal.pos + 40, internal.ast); } get static() { const internal = this.#internal; return constructBool(internal.pos + 41, internal.ast); } toJSON() { return { type: "TSIndexSignature", start: this.start, end: this.end, parameters: this.parameters, typeAnnotation: this.typeAnnotation, readonly: this.readonly, static: this.static, }; } [inspectSymbol]() { return Object.setPrototypeOf(this.toJSON(), DebugTSIndexSignature.prototype); } } const DebugTSIndexSignature = class TSIndexSignature {}; export class TSCallSignatureDeclaration { type = "TSCallSignatureDeclaration"; #internal; constructor(pos, ast) { if (ast?.token !== TOKEN) constructorError(); const { nodes } = ast; const cached = nodes.get(pos); if (cached !== void 0) return cached; this.#internal = { pos, ast }; nodes.set(pos, this); } get start() { const internal = this.#internal; return constructU32(internal.pos, internal.ast); } get end() { const internal = this.#internal; return constructU32(internal.pos + 4, internal.ast); } get typeParameters() { const internal = this.#internal; return constructOptionBoxTSTypeParameterDeclaration(internal.pos + 8, internal.ast); } get params() { const internal = this.#internal; return constructBoxFormalParameters(internal.pos + 24, internal.ast); } get returnType() { const internal = this.#internal; return constructOptionBoxTSTypeAnnotation(internal.pos + 32, internal.ast); } toJSON() { return { type: "TSCallSignatureDeclaration", start: this.start, end: this.end, typeParameters: this.typeParameters, params: this.params, returnType: this.returnType, }; } [inspectSymbol]() { return Object.setPrototypeOf(this.toJSON(), DebugTSCallSignatureDeclaration.prototype); } } const DebugTSCallSignatureDeclaration = class TSCallSignatureDeclaration {}; function constructTSMethodSignatureKind(pos, ast) { switch (ast.buffer[pos]) { case 0: return "method"; case 1: return "get"; case 2: return "set"; default: throw new Error(`Unexpected discriminant ${ast.buffer[pos]} for TSMethodSignatureKind`); } } export class TSMethodSignature { type = "TSMethodSignature"; #internal; constructor(pos, ast) { if (ast?.token !== TOKEN) constructorError(); const { nodes } = ast; const cached = nodes.get(pos); if (cached !== void 0) return cached; this.#internal = { pos, ast }; nodes.set(pos, this); } get start() { const internal = this.#internal; return constructU32(internal.pos, internal.ast); } get end() { const internal = this.#internal; return constructU32(internal.pos + 4, internal.ast); } get key() { const internal = this.#internal; return constructPropertyKey(internal.pos + 8, internal.ast); } get computed() { const internal = this.#internal; return constructBool(internal.pos + 60, internal.ast); } get optional() { const internal = this.#internal; return constructBool(internal.pos + 61, internal.ast); } get kind() { const internal = this.#internal; return constructTSMethodSignatureKind(internal.pos + 62, internal.ast); } get typeParameters() { const internal = this.#internal; return constructOptionBoxTSTypeParameterDeclaration(internal.pos + 24, internal.ast); } get params() { const internal = this.#internal; return constructBoxFormalParameters(internal.pos + 40, internal.ast); } get returnType() { const internal = this.#internal; return constructOptionBoxTSTypeAnnotation(internal.pos + 48, internal.ast); } toJSON() { return { type: "TSMethodSignature", start: this.start, end: this.end, key: this.key, computed: this.computed, optional: this.optional, kind: this.kind, typeParameters: this.typeParameters, params: this.params, returnType: this.returnType, }; } [inspectSymbol]() { return Object.setPrototypeOf(this.toJSON(), DebugTSMethodSignature.prototype); } } const DebugTSMethodSignature = class TSMethodSignature {}; export class TSConstructSignatureDeclaration { type = "TSConstructSignatureDeclaration"; #internal; constructor(pos, ast) { if (ast?.token !== TOKEN) constructorError(); const { nodes } = ast; const cached = nodes.get(pos); if (cached !== void 0) return cached; this.#internal = { pos, ast }; nodes.set(pos, this); } get start() { const internal = this.#internal; return constructU32(internal.pos, internal.ast); } get end() { const internal = this.#internal; return constructU32(internal.pos + 4, internal.ast); } get typeParameters() { const internal = this.#internal; return constructOptionBoxTSTypeParameterDeclaration(internal.pos + 8, internal.ast); } get params() { const internal = this.#internal; return constructBoxFormalParameters(internal.pos + 16, internal.ast); } get returnType() { const internal = this.#internal; return constructOptionBoxTSTypeAnnotation(internal.pos + 24, internal.ast); } toJSON() { return { type: "TSConstructSignatureDeclaration", start: this.start, end: this.end, typeParameters: this.typeParameters, params: this.params, returnType: this.returnType, }; } [inspectSymbol]() { return Object.setPrototypeOf(this.toJSON(), DebugTSConstructSignatureDeclaration.prototype); } } const DebugTSConstructSignatureDeclaration = class TSConstructSignatureDeclaration {}; export class TSIndexSignatureName { type = "TSIndexSignatureName"; #internal; constructor(pos, ast) { if (ast?.token !== TOKEN) constructorError(); const { nodes } = ast; const cached = nodes.get(pos); if (cached !== void 0) return cached; this.#internal = { pos, ast, $name: void 0 }; nodes.set(pos, this); } get start() { const internal = this.#internal; return constructU32(internal.pos, internal.ast); } get end() { const internal = this.#internal; return constructU32(internal.pos + 4, internal.ast); } get name() { const internal = this.#internal, cached = internal.$name; if (cached !== void 0) return cached; return (internal.$name = constructStr(internal.pos + 8, internal.ast)); } get typeAnnotation() { const internal = this.#internal; return constructBoxTSTypeAnnotation(internal.pos + 24, internal.ast); } toJSON() { return { type: "TSIndexSignatureName", start: this.start, end: this.end, name: this.name, typeAnnotation: this.typeAnnotation, }; } [inspectSymbol]() { return Object.setPrototypeOf(this.toJSON(), DebugTSIndexSignatureName.prototype); } } const DebugTSIndexSignatureName = class TSIndexSignatureName {}; export class TSInterfaceHeritage { type = "TSInterfaceHeritage"; #internal; constructor(pos, ast) { if (ast?.token !== TOKEN) constructorError(); const { nodes } = ast; const cached = nodes.get(pos); if (cached !== void 0) return cached; this.#internal = { pos, ast }; nodes.set(pos, this); } get start() { const internal = this.#internal; return constructU32(internal.pos, internal.ast); } get end() { const internal = this.#internal; return constructU32(internal.pos + 4, internal.ast); } get expression() { const internal = this.#internal; return constructExpression(internal.pos + 8, internal.ast); } get typeArguments() { const internal = this.#internal; return constructOptionBoxTSTypeParameterInstantiation(internal.pos + 24, internal.ast); } toJSON() { return { type: "TSInterfaceHeritage", start: this.start, end: this.end, expression: this.expression, typeArguments: this.typeArguments, }; } [inspectSymbol]() { return Object.setPrototypeOf(this.toJSON(), DebugTSInterfaceHeritage.prototype); } } const DebugTSInterfaceHeritage = class TSInterfaceHeritage {}; export class TSTypePredicate { type = "TSTypePredicate"; #internal; constructor(pos, ast) { if (ast?.token !== TOKEN) constructorError(); const { nodes } = ast; const cached = nodes.get(pos); if (cached !== void 0) return cached; this.#internal = { pos, ast }; nodes.set(pos, this); } get start() { const internal = this.#internal; return constructU32(internal.pos, internal.ast); } get end() { const internal = this.#internal; return constructU32(internal.pos + 4, internal.ast); } get parameterName() { const internal = this.#internal; return constructTSTypePredicateName(internal.pos + 8, internal.ast); } get asserts() { const internal = this.#internal; return constructBool(internal.pos + 32, internal.ast); } get typeAnnotation() { const internal = this.#internal; return constructOptionBoxTSTypeAnnotation(internal.pos + 24, internal.ast); } toJSON() { return { type: "TSTypePredicate", start: this.start, end: this.end, parameterName: this.parameterName, asserts: this.asserts, typeAnnotation: this.typeAnnotation, }; } [inspectSymbol]() { return Object.setPrototypeOf(this.toJSON(), DebugTSTypePredicate.prototype); } } const DebugTSTypePredicate = class TSTypePredicate {}; function constructTSTypePredicateName(pos, ast) { switch (ast.buffer[pos]) { case 0: return constructBoxIdentifierName(pos + 8, ast); case 1: return new TSThisType(pos + 8, ast); default: throw new Error(`Unexpected discriminant ${ast.buffer[pos]} for TSTypePredicateName`); } } export class TSModuleDeclaration { type = "TSModuleDeclaration"; #internal; constructor(pos, ast) { if (ast?.token !== TOKEN) constructorError(); const { nodes } = ast; const cached = nodes.get(pos); if (cached !== void 0) return cached; this.#internal = { pos, ast }; nodes.set(pos, this); } get start() { const internal = this.#internal; return constructU32(internal.pos, internal.ast); } get end() { const internal = this.#internal; return constructU32(internal.pos + 4, internal.ast); } get id() { const internal = this.#internal; return constructTSModuleDeclarationName(internal.pos + 8, internal.ast); } get body() { const internal = this.#internal; return constructOptionTSModuleDeclarationBody(internal.pos + 64, internal.ast); } get kind() { const internal = this.#internal; return constructTSModuleDeclarationKind(internal.pos + 84, internal.ast); } get declare() { const internal = this.#internal; return constructBool(internal.pos + 85, internal.ast); } toJSON() { return { type: "TSModuleDeclaration", start: this.start, end: this.end, id: this.id, body: this.body, kind: this.kind, declare: this.declare, }; } [inspectSymbol]() { return Object.setPrototypeOf(this.toJSON(), DebugTSModuleDeclaration.prototype); } } const DebugTSModuleDeclaration = class TSModuleDeclaration {}; function constructTSModuleDeclarationKind(pos, ast) { switch (ast.buffer[pos]) { case 0: return "module"; case 1: return "namespace"; default: throw new Error(`Unexpected discriminant ${ast.buffer[pos]} for TSModuleDeclarationKind`); } } function constructTSModuleDeclarationName(pos, ast) { switch (ast.buffer[pos]) { case 0: return new BindingIdentifier(pos + 8, ast); case 1: return new StringLiteral(pos + 8, ast); default: throw new Error(`Unexpected discriminant ${ast.buffer[pos]} for TSModuleDeclarationName`); } } function constructTSModuleDeclarationBody(pos, ast) { switch (ast.buffer[pos]) { case 0: return constructBoxTSModuleDeclaration(pos + 8, ast); case 1: return constructBoxTSModuleBlock(pos + 8, ast); default: throw new Error(`Unexpected discriminant ${ast.buffer[pos]} for TSModuleDeclarationBody`); } } export class TSGlobalDeclaration { type = "TSGlobalDeclaration"; #internal; constructor(pos, ast) { if (ast?.token !== TOKEN) constructorError(); const { nodes } = ast; const cached = nodes.get(pos); if (cached !== void 0) return cached; this.#internal = { pos, ast }; nodes.set(pos, this); } get start() { const internal = this.#internal; return constructU32(internal.pos, internal.ast); } get end() { const internal = this.#internal; return constructU32(internal.pos + 4, internal.ast); } get body() { const internal = this.#internal; return new TSModuleBlock(internal.pos + 16, internal.ast); } get declare() { const internal = this.#internal; return constructBool(internal.pos + 76, internal.ast); } toJSON() { return { type: "TSGlobalDeclaration", start: this.start, end: this.end, body: this.body, declare: this.declare, }; } [inspectSymbol]() { return Object.setPrototypeOf(this.toJSON(), DebugTSGlobalDeclaration.prototype); } } const DebugTSGlobalDeclaration = class TSGlobalDeclaration {}; export class TSModuleBlock { type = "TSModuleBlock"; #internal; constructor(pos, ast) { if (ast?.token !== TOKEN) constructorError(); const { nodes } = ast; const cached = nodes.get(pos); if (cached !== void 0) return cached; this.#internal = { pos, ast, $body: void 0 }; nodes.set(pos, this); } get start() { const internal = this.#internal; return constructU32(internal.pos, internal.ast); } get end() { const internal = this.#internal; return constructU32(internal.pos + 4, internal.ast); } get body() { const internal = this.#internal, cached = internal.$body; if (cached !== void 0) return cached; return (internal.$body = constructVecStatement(internal.pos + 32, internal.ast)); } toJSON() { return { type: "TSModuleBlock", start: this.start, end: this.end, body: this.body, }; } [inspectSymbol]() { return Object.setPrototypeOf(this.toJSON(), DebugTSModuleBlock.prototype); } } const DebugTSModuleBlock = class TSModuleBlock {}; export class TSTypeLiteral { type = "TSTypeLiteral"; #internal; constructor(pos, ast) { if (ast?.token !== TOKEN) constructorError(); const { nodes } = ast; const cached = nodes.get(pos); if (cached !== void 0) return cached; this.#internal = { pos, ast, $members: void 0 }; nodes.set(pos, this); } get start() { const internal = this.#internal; return constructU32(internal.pos, internal.ast); } get end() { const internal = this.#internal; return constructU32(internal.pos + 4, internal.ast); } get members() { const internal = this.#internal, cached = internal.$members; if (cached !== void 0) return cached; return (internal.$members = constructVecTSSignature(internal.pos + 8, internal.ast)); } toJSON() { return { type: "TSTypeLiteral", start: this.start, end: this.end, members: this.members, }; } [inspectSymbol]() { return Object.setPrototypeOf(this.toJSON(), DebugTSTypeLiteral.prototype); } } const DebugTSTypeLiteral = class TSTypeLiteral {}; export class TSInferType { type = "TSInferType"; #internal; constructor(pos, ast) { if (ast?.token !== TOKEN) constructorError(); const { nodes } = ast; const cached = nodes.get(pos); if (cached !== void 0) return cached; this.#internal = { pos, ast }; nodes.set(pos, this); } get start() { const internal = this.#internal; return constructU32(internal.pos, internal.ast); } get end() { const internal = this.#internal; return constructU32(internal.pos + 4, internal.ast); } get typeParameter() { const internal = this.#internal; return constructBoxTSTypeParameter(internal.pos + 8, internal.ast); } toJSON() { return { type: "TSInferType", start: this.start, end: this.end, typeParameter: this.typeParameter, }; } [inspectSymbol]() { return Object.setPrototypeOf(this.toJSON(), DebugTSInferType.prototype); } } const DebugTSInferType = class TSInferType {}; export class TSTypeQuery { type = "TSTypeQuery"; #internal; constructor(pos, ast) { if (ast?.token !== TOKEN) constructorError(); const { nodes } = ast; const cached = nodes.get(pos); if (cached !== void 0) return cached; this.#internal = { pos, ast }; nodes.set(pos, this); } get start() { const internal = this.#internal; return constructU32(internal.pos, internal.ast); } get end() { const internal = this.#internal; return constructU32(internal.pos + 4, internal.ast); } get exprName() { const internal = this.#internal; return constructTSTypeQueryExprName(internal.pos + 8, internal.ast); } get typeArguments() { const internal = this.#internal; return constructOptionBoxTSTypeParameterInstantiation(internal.pos + 24, internal.ast); } toJSON() { return { type: "TSTypeQuery", start: this.start, end: this.end, exprName: this.exprName, typeArguments: this.typeArguments, }; } [inspectSymbol]() { return Object.setPrototypeOf(this.toJSON(), DebugTSTypeQuery.prototype); } } const DebugTSTypeQuery = class TSTypeQuery {}; function constructTSTypeQueryExprName(pos, ast) { switch (ast.buffer[pos]) { case 0: return constructBoxIdentifierReference(pos + 8, ast); case 1: return constructBoxTSQualifiedName(pos + 8, ast); case 2: return constructBoxThisExpression(pos + 8, ast); case 3: return constructBoxTSImportType(pos + 8, ast); default: throw new Error(`Unexpected discriminant ${ast.buffer[pos]} for TSTypeQueryExprName`); } } export class TSImportType { type = "TSImportType"; #internal; constructor(pos, ast) { if (ast?.token !== TOKEN) constructorError(); const { nodes } = ast; const cached = nodes.get(pos); if (cached !== void 0) return cached; this.#internal = { pos, ast }; nodes.set(pos, this); } get start() { const internal = this.#internal; return constructU32(internal.pos, internal.ast); } get end() { const internal = this.#internal; return constructU32(internal.pos + 4, internal.ast); } get source() { const internal = this.#internal; return new StringLiteral(internal.pos + 8, internal.ast); } get options() { const internal = this.#internal; return constructOptionBoxObjectExpression(internal.pos + 56, internal.ast); } get qualifier() { const internal = this.#internal; return constructOptionTSImportTypeQualifier(internal.pos + 64, internal.ast); } get typeArguments() { const internal = this.#internal; return constructOptionBoxTSTypeParameterInstantiation(internal.pos + 80, internal.ast); } toJSON() { return { type: "TSImportType", start: this.start, end: this.end, source: this.source, options: this.options, qualifier: this.qualifier, typeArguments: this.typeArguments, }; } [inspectSymbol]() { return Object.setPrototypeOf(this.toJSON(), DebugTSImportType.prototype); } } const DebugTSImportType = class TSImportType {}; function constructTSImportTypeQualifier(pos, ast) { switch (ast.buffer[pos]) { case 0: return constructBoxIdentifierName(pos + 8, ast); case 1: return constructBoxTSImportTypeQualifiedName(pos + 8, ast); default: throw new Error(`Unexpected discriminant ${ast.buffer[pos]} for TSImportTypeQualifier`); } } export class TSImportTypeQualifiedName { type = "TSImportTypeQualifiedName"; #internal; constructor(pos, ast) { if (ast?.token !== TOKEN) constructorError(); const { nodes } = ast; const cached = nodes.get(pos); if (cached !== void 0) return cached; this.#internal = { pos, ast }; nodes.set(pos, this); } get start() { const internal = this.#internal; return constructU32(internal.pos, internal.ast); } get end() { const internal = this.#internal; return constructU32(internal.pos + 4, internal.ast); } get left() { const internal = this.#internal; return constructTSImportTypeQualifier(internal.pos + 8, internal.ast); } get right() { const internal = this.#internal; return new IdentifierName(internal.pos + 24, internal.ast); } toJSON() { return { type: "TSImportTypeQualifiedName", start: this.start, end: this.end, left: this.left, right: this.right, }; } [inspectSymbol]() { return Object.setPrototypeOf(this.toJSON(), DebugTSImportTypeQualifiedName.prototype); } } const DebugTSImportTypeQualifiedName = class TSImportTypeQualifiedName {}; export class TSFunctionType { type = "TSFunctionType"; #internal; constructor(pos, ast) { if (ast?.token !== TOKEN) constructorError(); const { nodes } = ast; const cached = nodes.get(pos); if (cached !== void 0) return cached; this.#internal = { pos, ast }; nodes.set(pos, this); } get start() { const internal = this.#internal; return constructU32(internal.pos, internal.ast); } get end() { const internal = this.#internal; return constructU32(internal.pos + 4, internal.ast); } get typeParameters() { const internal = this.#internal; return constructOptionBoxTSTypeParameterDeclaration(internal.pos + 8, internal.ast); } get params() { const internal = this.#internal; return constructBoxFormalParameters(internal.pos + 24, internal.ast); } get returnType() { const internal = this.#internal; return constructBoxTSTypeAnnotation(internal.pos + 32, internal.ast); } toJSON() { return { type: "TSFunctionType", start: this.start, end: this.end, typeParameters: this.typeParameters, params: this.params, returnType: this.returnType, }; } [inspectSymbol]() { return Object.setPrototypeOf(this.toJSON(), DebugTSFunctionType.prototype); } } const DebugTSFunctionType = class TSFunctionType {}; export class TSConstructorType { type = "TSConstructorType"; #internal; constructor(pos, ast) { if (ast?.token !== TOKEN) constructorError(); const { nodes } = ast; const cached = nodes.get(pos); if (cached !== void 0) return cached; this.#internal = { pos, ast }; nodes.set(pos, this); } get start() { const internal = this.#internal; return constructU32(internal.pos, internal.ast); } get end() { const internal = this.#internal; return constructU32(internal.pos + 4, internal.ast); } get abstract() { const internal = this.#internal; return constructBool(internal.pos + 36, internal.ast); } get typeParameters() { const internal = this.#internal; return constructOptionBoxTSTypeParameterDeclaration(internal.pos + 8, internal.ast); } get params() { const internal = this.#internal; return constructBoxFormalParameters(internal.pos + 16, internal.ast); } get returnType() { const internal = this.#internal; return constructBoxTSTypeAnnotation(internal.pos + 24, internal.ast); } toJSON() { return { type: "TSConstructorType", start: this.start, end: this.end, abstract: this.abstract, typeParameters: this.typeParameters, params: this.params, returnType: this.returnType, }; } [inspectSymbol]() { return Object.setPrototypeOf(this.toJSON(), DebugTSConstructorType.prototype); } } const DebugTSConstructorType = class TSConstructorType {}; export class TSMappedType { type = "TSMappedType"; #internal; constructor(pos, ast) { if (ast?.token !== TOKEN) constructorError(); const { nodes } = ast; const cached = nodes.get(pos); if (cached !== void 0) return cached; this.#internal = { pos, ast }; nodes.set(pos, this); } get start() { const internal = this.#internal; return constructU32(internal.pos, internal.ast); } get end() { const internal = this.#internal; return constructU32(internal.pos + 4, internal.ast); } get nameType() { const internal = this.#internal; return constructOptionTSType(internal.pos + 16, internal.ast); } get typeAnnotation() { const internal = this.#internal; return constructOptionTSType(internal.pos + 32, internal.ast); } get optional() { const internal = this.#internal; return constructOptionTSMappedTypeModifierOperator(internal.pos + 52, internal.ast); } get readonly() { const internal = this.#internal; return constructOptionTSMappedTypeModifierOperator(internal.pos + 53, internal.ast); } toJSON() { return { type: "TSMappedType", start: this.start, end: this.end, nameType: this.nameType, typeAnnotation: this.typeAnnotation, optional: this.optional, readonly: this.readonly, }; } [inspectSymbol]() { return Object.setPrototypeOf(this.toJSON(), DebugTSMappedType.prototype); } } const DebugTSMappedType = class TSMappedType {}; function constructTSMappedTypeModifierOperator(pos, ast) { switch (ast.buffer[pos]) { case 0: return "true"; case 1: return "+"; case 2: return "-"; default: throw new Error( `Unexpected discriminant ${ast.buffer[pos]} for TSMappedTypeModifierOperator`, ); } } export class TSTemplateLiteralType { type = "TSTemplateLiteralType"; #internal; constructor(pos, ast) { if (ast?.token !== TOKEN) constructorError(); const { nodes } = ast; const cached = nodes.get(pos); if (cached !== void 0) return cached; this.#internal = { pos, ast, $quasis: void 0, $types: void 0 }; nodes.set(pos, this); } get start() { const internal = this.#internal; return constructU32(internal.pos, internal.ast); } get end() { const internal = this.#internal; return constructU32(internal.pos + 4, internal.ast); } get quasis() { const internal = this.#internal, cached = internal.$quasis; if (cached !== void 0) return cached; return (internal.$quasis = constructVecTemplateElement(internal.pos + 8, internal.ast)); } get types() { const internal = this.#internal, cached = internal.$types; if (cached !== void 0) return cached; return (internal.$types = constructVecTSType(internal.pos + 32, internal.ast)); } toJSON() { return { type: "TSTemplateLiteralType", start: this.start, end: this.end, quasis: this.quasis, types: this.types, }; } [inspectSymbol]() { return Object.setPrototypeOf(this.toJSON(), DebugTSTemplateLiteralType.prototype); } } const DebugTSTemplateLiteralType = class TSTemplateLiteralType {}; export class TSAsExpression { type = "TSAsExpression"; #internal; constructor(pos, ast) { if (ast?.token !== TOKEN) constructorError(); const { nodes } = ast; const cached = nodes.get(pos); if (cached !== void 0) return cached; this.#internal = { pos, ast }; nodes.set(pos, this); } get start() { const internal = this.#internal; return constructU32(internal.pos, internal.ast); } get end() { const internal = this.#internal; return constructU32(internal.pos + 4, internal.ast); } get expression() { const internal = this.#internal; return constructExpression(internal.pos + 8, internal.ast); } get typeAnnotation() { const internal = this.#internal; return constructTSType(internal.pos + 24, internal.ast); } toJSON() { return { type: "TSAsExpression", start: this.start, end: this.end, expression: this.expression, typeAnnotation: this.typeAnnotation, }; } [inspectSymbol]() { return Object.setPrototypeOf(this.toJSON(), DebugTSAsExpression.prototype); } } const DebugTSAsExpression = class TSAsExpression {}; export class TSSatisfiesExpression { type = "TSSatisfiesExpression"; #internal; constructor(pos, ast) { if (ast?.token !== TOKEN) constructorError(); const { nodes } = ast; const cached = nodes.get(pos); if (cached !== void 0) return cached; this.#internal = { pos, ast }; nodes.set(pos, this); } get start() { const internal = this.#internal; return constructU32(internal.pos, internal.ast); } get end() { const internal = this.#internal; return constructU32(internal.pos + 4, internal.ast); } get expression() { const internal = this.#internal; return constructExpression(internal.pos + 8, internal.ast); } get typeAnnotation() { const internal = this.#internal; return constructTSType(internal.pos + 24, internal.ast); } toJSON() { return { type: "TSSatisfiesExpression", start: this.start, end: this.end, expression: this.expression, typeAnnotation: this.typeAnnotation, }; } [inspectSymbol]() { return Object.setPrototypeOf(this.toJSON(), DebugTSSatisfiesExpression.prototype); } } const DebugTSSatisfiesExpression = class TSSatisfiesExpression {}; export class TSTypeAssertion { type = "TSTypeAssertion"; #internal; constructor(pos, ast) { if (ast?.token !== TOKEN) constructorError(); const { nodes } = ast; const cached = nodes.get(pos); if (cached !== void 0) return cached; this.#internal = { pos, ast }; nodes.set(pos, this); } get start() { const internal = this.#internal; return constructU32(internal.pos, internal.ast); } get end() { const internal = this.#internal; return constructU32(internal.pos + 4, internal.ast); } get typeAnnotation() { const internal = this.#internal; return constructTSType(internal.pos + 8, internal.ast); } get expression() { const internal = this.#internal; return constructExpression(internal.pos + 24, internal.ast); } toJSON() { return { type: "TSTypeAssertion", start: this.start, end: this.end, typeAnnotation: this.typeAnnotation, expression: this.expression, }; } [inspectSymbol]() { return Object.setPrototypeOf(this.toJSON(), DebugTSTypeAssertion.prototype); } } const DebugTSTypeAssertion = class TSTypeAssertion {}; export class TSImportEqualsDeclaration { type = "TSImportEqualsDeclaration"; #internal; constructor(pos, ast) { if (ast?.token !== TOKEN) constructorError(); const { nodes } = ast; const cached = nodes.get(pos); if (cached !== void 0) return cached; this.#internal = { pos, ast }; nodes.set(pos, this); } get start() { const internal = this.#internal; return constructU32(internal.pos, internal.ast); } get end() { const internal = this.#internal; return constructU32(internal.pos + 4, internal.ast); } get id() { const internal = this.#internal; return new BindingIdentifier(internal.pos + 8, internal.ast); } get moduleReference() { const internal = this.#internal; return constructTSModuleReference(internal.pos + 40, internal.ast); } get importKind() { const internal = this.#internal; return constructImportOrExportKind(internal.pos + 56, internal.ast); } toJSON() { return { type: "TSImportEqualsDeclaration", start: this.start, end: this.end, id: this.id, moduleReference: this.moduleReference, importKind: this.importKind, }; } [inspectSymbol]() { return Object.setPrototypeOf(this.toJSON(), DebugTSImportEqualsDeclaration.prototype); } } const DebugTSImportEqualsDeclaration = class TSImportEqualsDeclaration {}; function constructTSModuleReference(pos, ast) { switch (ast.buffer[pos]) { case 0: return constructBoxIdentifierReference(pos + 8, ast); case 1: return constructBoxTSQualifiedName(pos + 8, ast); case 2: return constructBoxThisExpression(pos + 8, ast); case 3: return constructBoxTSExternalModuleReference(pos + 8, ast); default: throw new Error(`Unexpected discriminant ${ast.buffer[pos]} for TSModuleReference`); } } export class TSExternalModuleReference { type = "TSExternalModuleReference"; #internal; constructor(pos, ast) { if (ast?.token !== TOKEN) constructorError(); const { nodes } = ast; const cached = nodes.get(pos); if (cached !== void 0) return cached; this.#internal = { pos, ast }; nodes.set(pos, this); } get start() { const internal = this.#internal; return constructU32(internal.pos, internal.ast); } get end() { const internal = this.#internal; return constructU32(internal.pos + 4, internal.ast); } get expression() { const internal = this.#internal; return new StringLiteral(internal.pos + 8, internal.ast); } toJSON() { return { type: "TSExternalModuleReference", start: this.start, end: this.end, expression: this.expression, }; } [inspectSymbol]() { return Object.setPrototypeOf(this.toJSON(), DebugTSExternalModuleReference.prototype); } } const DebugTSExternalModuleReference = class TSExternalModuleReference {}; export class TSNonNullExpression { type = "TSNonNullExpression"; #internal; constructor(pos, ast) { if (ast?.token !== TOKEN) constructorError(); const { nodes } = ast; const cached = nodes.get(pos); if (cached !== void 0) return cached; this.#internal = { pos, ast }; nodes.set(pos, this); } get start() { const internal = this.#internal; return constructU32(internal.pos, internal.ast); } get end() { const internal = this.#internal; return constructU32(internal.pos + 4, internal.ast); } get expression() { const internal = this.#internal; return constructExpression(internal.pos + 8, internal.ast); } toJSON() { return { type: "TSNonNullExpression", start: this.start, end: this.end, expression: this.expression, }; } [inspectSymbol]() { return Object.setPrototypeOf(this.toJSON(), DebugTSNonNullExpression.prototype); } } const DebugTSNonNullExpression = class TSNonNullExpression {}; export class Decorator { type = "Decorator"; #internal; constructor(pos, ast) { if (ast?.token !== TOKEN) constructorError(); const { nodes } = ast; const cached = nodes.get(pos); if (cached !== void 0) return cached; this.#internal = { pos, ast }; nodes.set(pos, this); } get start() { const internal = this.#internal; return constructU32(internal.pos, internal.ast); } get end() { const internal = this.#internal; return constructU32(internal.pos + 4, internal.ast); } get expression() { const internal = this.#internal; return constructExpression(internal.pos + 8, internal.ast); } toJSON() { return { type: "Decorator", start: this.start, end: this.end, expression: this.expression, }; } [inspectSymbol]() { return Object.setPrototypeOf(this.toJSON(), DebugDecorator.prototype); } } const DebugDecorator = class Decorator {}; export class TSExportAssignment { type = "TSExportAssignment"; #internal; constructor(pos, ast) { if (ast?.token !== TOKEN) constructorError(); const { nodes } = ast; const cached = nodes.get(pos); if (cached !== void 0) return cached; this.#internal = { pos, ast }; nodes.set(pos, this); } get start() { const internal = this.#internal; return constructU32(internal.pos, internal.ast); } get end() { const internal = this.#internal; return constructU32(internal.pos + 4, internal.ast); } get expression() { const internal = this.#internal; return constructExpression(internal.pos + 8, internal.ast); } toJSON() { return { type: "TSExportAssignment", start: this.start, end: this.end, expression: this.expression, }; } [inspectSymbol]() { return Object.setPrototypeOf(this.toJSON(), DebugTSExportAssignment.prototype); } } const DebugTSExportAssignment = class TSExportAssignment {}; export class TSNamespaceExportDeclaration { type = "TSNamespaceExportDeclaration"; #internal; constructor(pos, ast) { if (ast?.token !== TOKEN) constructorError(); const { nodes } = ast; const cached = nodes.get(pos); if (cached !== void 0) return cached; this.#internal = { pos, ast }; nodes.set(pos, this); } get start() { const internal = this.#internal; return constructU32(internal.pos, internal.ast); } get end() { const internal = this.#internal; return constructU32(internal.pos + 4, internal.ast); } get id() { const internal = this.#internal; return new IdentifierName(internal.pos + 8, internal.ast); } toJSON() { return { type: "TSNamespaceExportDeclaration", start: this.start, end: this.end, id: this.id, }; } [inspectSymbol]() { return Object.setPrototypeOf(this.toJSON(), DebugTSNamespaceExportDeclaration.prototype); } } const DebugTSNamespaceExportDeclaration = class TSNamespaceExportDeclaration {}; export class TSInstantiationExpression { type = "TSInstantiationExpression"; #internal; constructor(pos, ast) { if (ast?.token !== TOKEN) constructorError(); const { nodes } = ast; const cached = nodes.get(pos); if (cached !== void 0) return cached; this.#internal = { pos, ast }; nodes.set(pos, this); } get start() { const internal = this.#internal; return constructU32(internal.pos, internal.ast); } get end() { const internal = this.#internal; return constructU32(internal.pos + 4, internal.ast); } get expression() { const internal = this.#internal; return constructExpression(internal.pos + 8, internal.ast); } get typeArguments() { const internal = this.#internal; return constructBoxTSTypeParameterInstantiation(internal.pos + 24, internal.ast); } toJSON() { return { type: "TSInstantiationExpression", start: this.start, end: this.end, expression: this.expression, typeArguments: this.typeArguments, }; } [inspectSymbol]() { return Object.setPrototypeOf(this.toJSON(), DebugTSInstantiationExpression.prototype); } } const DebugTSInstantiationExpression = class TSInstantiationExpression {}; function constructImportOrExportKind(pos, ast) { switch (ast.buffer[pos]) { case 0: return "value"; case 1: return "type"; default: throw new Error(`Unexpected discriminant ${ast.buffer[pos]} for ImportOrExportKind`); } } export class JSDocNullableType { type = "JSDocNullableType"; #internal; constructor(pos, ast) { if (ast?.token !== TOKEN) constructorError(); const { nodes } = ast; const cached = nodes.get(pos); if (cached !== void 0) return cached; this.#internal = { pos, ast }; nodes.set(pos, this); } get start() { const internal = this.#internal; return constructU32(internal.pos, internal.ast); } get end() { const internal = this.#internal; return constructU32(internal.pos + 4, internal.ast); } get typeAnnotation() { const internal = this.#internal; return constructTSType(internal.pos + 8, internal.ast); } get postfix() { const internal = this.#internal; return constructBool(internal.pos + 24, internal.ast); } toJSON() { return { type: "JSDocNullableType", start: this.start, end: this.end, typeAnnotation: this.typeAnnotation, postfix: this.postfix, }; } [inspectSymbol]() { return Object.setPrototypeOf(this.toJSON(), DebugJSDocNullableType.prototype); } } const DebugJSDocNullableType = class JSDocNullableType {}; export class JSDocNonNullableType { type = "JSDocNonNullableType"; #internal; constructor(pos, ast) { if (ast?.token !== TOKEN) constructorError(); const { nodes } = ast; const cached = nodes.get(pos); if (cached !== void 0) return cached; this.#internal = { pos, ast }; nodes.set(pos, this); } get start() { const internal = this.#internal; return constructU32(internal.pos, internal.ast); } get end() { const internal = this.#internal; return constructU32(internal.pos + 4, internal.ast); } get typeAnnotation() { const internal = this.#internal; return constructTSType(internal.pos + 8, internal.ast); } get postfix() { const internal = this.#internal; return constructBool(internal.pos + 24, internal.ast); } toJSON() { return { type: "JSDocNonNullableType", start: this.start, end: this.end, typeAnnotation: this.typeAnnotation, postfix: this.postfix, }; } [inspectSymbol]() { return Object.setPrototypeOf(this.toJSON(), DebugJSDocNonNullableType.prototype); } } const DebugJSDocNonNullableType = class JSDocNonNullableType {}; export class JSDocUnknownType { type = "JSDocUnknownType"; #internal; constructor(pos, ast) { if (ast?.token !== TOKEN) constructorError(); const { nodes } = ast; const cached = nodes.get(pos); if (cached !== void 0) return cached; this.#internal = { pos, ast }; nodes.set(pos, this); } get start() { const internal = this.#internal; return constructU32(internal.pos, internal.ast); } get end() { const internal = this.#internal; return constructU32(internal.pos + 4, internal.ast); } toJSON() { return { type: "JSDocUnknownType", start: this.start, end: this.end, }; } [inspectSymbol]() { return Object.setPrototypeOf(this.toJSON(), DebugJSDocUnknownType.prototype); } } const DebugJSDocUnknownType = class JSDocUnknownType {}; function constructCommentKind(pos, ast) { switch (ast.buffer[pos]) { case 0: return "Line"; case 1: return "Block"; default: throw new Error(`Unexpected discriminant ${ast.buffer[pos]} for CommentKind`); } } export class Comment { #internal; constructor(pos, ast) { if (ast?.token !== TOKEN) constructorError(); const { nodes } = ast; const cached = nodes.get(pos); if (cached !== void 0) return cached; this.#internal = { pos, ast }; nodes.set(pos, this); } get start() { const internal = this.#internal; return constructU32(internal.pos, internal.ast); } get end() { const internal = this.#internal; return constructU32(internal.pos + 4, internal.ast); } get type() { const internal = this.#internal; return constructCommentKind(internal.pos + 12, internal.ast); } toJSON() { return { start: this.start, end: this.end, type: this.type, }; } [inspectSymbol]() { return Object.setPrototypeOf(this.toJSON(), DebugComment.prototype); } } const DebugComment = class Comment {}; export class NameSpan { #internal; constructor(pos, ast) { if (ast?.token !== TOKEN) constructorError(); const { nodes } = ast; const cached = nodes.get(pos); if (cached !== void 0) return cached; this.#internal = { pos, ast, $value: void 0 }; nodes.set(pos, this); } get value() { const internal = this.#internal, cached = internal.$value; if (cached !== void 0) return cached; return (internal.$value = constructStr(internal.pos + 8, internal.ast)); } get start() { const internal = this.#internal; return constructU32(internal.pos, internal.ast); } get end() { const internal = this.#internal; return constructU32(internal.pos + 4, internal.ast); } toJSON() { return { value: this.value, start: this.start, end: this.end, }; } [inspectSymbol]() { return Object.setPrototypeOf(this.toJSON(), DebugNameSpan.prototype); } } const DebugNameSpan = class NameSpan {}; export class ImportEntry { #internal; constructor(pos, ast) { if (ast?.token !== TOKEN) constructorError(); const { nodes } = ast; const cached = nodes.get(pos); if (cached !== void 0) return cached; this.#internal = { pos, ast }; nodes.set(pos, this); } get importName() { const internal = this.#internal; return constructImportImportName(internal.pos + 32, internal.ast); } get localName() { const internal = this.#internal; return new NameSpan(internal.pos + 64, internal.ast); } get isType() { const internal = this.#internal; return constructBool(internal.pos + 88, internal.ast); } toJSON() { return { importName: this.importName, localName: this.localName, isType: this.isType, }; } [inspectSymbol]() { return Object.setPrototypeOf(this.toJSON(), DebugImportEntry.prototype); } } const DebugImportEntry = class ImportEntry {}; function constructImportImportName(pos, ast) { switch (ast.buffer[pos]) { case 0: return new NameSpan(pos + 8, ast); case 1: return "namespaceObject"; case 2: return new Span(pos + 8, ast); default: throw new Error(`Unexpected discriminant ${ast.buffer[pos]} for ImportImportName`); } } export class ExportEntry { #internal; constructor(pos, ast) { if (ast?.token !== TOKEN) constructorError(); const { nodes } = ast; const cached = nodes.get(pos); if (cached !== void 0) return cached; this.#internal = { pos, ast }; nodes.set(pos, this); } get start() { const internal = this.#internal; return constructU32(internal.pos, internal.ast); } get end() { const internal = this.#internal; return constructU32(internal.pos + 4, internal.ast); } get moduleRequest() { const internal = this.#internal; return constructOptionNameSpan(internal.pos + 16, internal.ast); } get importName() { const internal = this.#internal; return constructExportImportName(internal.pos + 40, internal.ast); } get exportName() { const internal = this.#internal; return constructExportExportName(internal.pos + 72, internal.ast); } get localName() { const internal = this.#internal; return constructExportLocalName(internal.pos + 104, internal.ast); } get isType() { const internal = this.#internal; return constructBool(internal.pos + 136, internal.ast); } toJSON() { return { start: this.start, end: this.end, moduleRequest: this.moduleRequest, importName: this.importName, exportName: this.exportName, localName: this.localName, isType: this.isType, }; } [inspectSymbol]() { return Object.setPrototypeOf(this.toJSON(), DebugExportEntry.prototype); } } const DebugExportEntry = class ExportEntry {}; function constructExportImportName(pos, ast) { switch (ast.buffer[pos]) { case 0: return new NameSpan(pos + 8, ast); case 1: return "all"; case 2: return "allButDefault"; case 3: return "null"; default: throw new Error(`Unexpected discriminant ${ast.buffer[pos]} for ExportImportName`); } } function constructExportExportName(pos, ast) { switch (ast.buffer[pos]) { case 0: return new NameSpan(pos + 8, ast); case 1: return new Span(pos + 8, ast); case 2: return "null"; default: throw new Error(`Unexpected discriminant ${ast.buffer[pos]} for ExportExportName`); } } function constructExportLocalName(pos, ast) { switch (ast.buffer[pos]) { case 0: return new NameSpan(pos + 8, ast); case 1: return new NameSpan(pos + 8, ast); case 2: return "null"; default: throw new Error(`Unexpected discriminant ${ast.buffer[pos]} for ExportLocalName`); } } export class DynamicImport { #internal; constructor(pos, ast) { if (ast?.token !== TOKEN) constructorError(); const { nodes } = ast; const cached = nodes.get(pos); if (cached !== void 0) return cached; this.#internal = { pos, ast }; nodes.set(pos, this); } get start() { const internal = this.#internal; return constructU32(internal.pos, internal.ast); } get end() { const internal = this.#internal; return constructU32(internal.pos + 4, internal.ast); } get moduleRequest() { const internal = this.#internal; return new Span(internal.pos + 8, internal.ast); } toJSON() { return { start: this.start, end: this.end, moduleRequest: this.moduleRequest, }; } [inspectSymbol]() { return Object.setPrototypeOf(this.toJSON(), DebugDynamicImport.prototype); } } const DebugDynamicImport = class DynamicImport {}; function constructAssignmentOperator(pos, ast) { switch (ast.buffer[pos]) { case 0: return "="; case 1: return "+="; case 2: return "-="; case 3: return "*="; case 4: return "/="; case 5: return "%="; case 6: return "**="; case 7: return "<<="; case 8: return ">>="; case 9: return ">>>="; case 10: return "|="; case 11: return "^="; case 12: return "&="; case 13: return "||="; case 14: return "&&="; case 15: return "??="; default: throw new Error(`Unexpected discriminant ${ast.buffer[pos]} for AssignmentOperator`); } } function constructBinaryOperator(pos, ast) { switch (ast.buffer[pos]) { case 0: return "=="; case 1: return "!="; case 2: return "==="; case 3: return "!=="; case 4: return "<"; case 5: return "<="; case 6: return ">"; case 7: return ">="; case 8: return "+"; case 9: return "-"; case 10: return "*"; case 11: return "/"; case 12: return "%"; case 13: return "**"; case 14: return "<<"; case 15: return ">>"; case 16: return ">>>"; case 17: return "|"; case 18: return "^"; case 19: return "&"; case 20: return "in"; case 21: return "instanceof"; default: throw new Error(`Unexpected discriminant ${ast.buffer[pos]} for BinaryOperator`); } } function constructLogicalOperator(pos, ast) { switch (ast.buffer[pos]) { case 0: return "||"; case 1: return "&&"; case 2: return "??"; default: throw new Error(`Unexpected discriminant ${ast.buffer[pos]} for LogicalOperator`); } } function constructUnaryOperator(pos, ast) { switch (ast.buffer[pos]) { case 0: return "+"; case 1: return "-"; case 2: return "!"; case 3: return "~"; case 4: return "typeof"; case 5: return "void"; case 6: return "delete"; default: throw new Error(`Unexpected discriminant ${ast.buffer[pos]} for UnaryOperator`); } } function constructUpdateOperator(pos, ast) { switch (ast.buffer[pos]) { case 0: return "++"; case 1: return "--"; default: throw new Error(`Unexpected discriminant ${ast.buffer[pos]} for UpdateOperator`); } } export class Span { #internal; constructor(pos, ast) { if (ast?.token !== TOKEN) constructorError(); const { nodes } = ast; const cached = nodes.get(pos); if (cached !== void 0) return cached; this.#internal = { pos, ast }; nodes.set(pos, this); } get start() { const internal = this.#internal; return constructU32(internal.pos, internal.ast); } get end() { const internal = this.#internal; return constructU32(internal.pos + 4, internal.ast); } toJSON() { return { start: this.start, end: this.end, }; } [inspectSymbol]() { return Object.setPrototypeOf(this.toJSON(), DebugSpan.prototype); } } const DebugSpan = class Span {}; export class SourceType { #internal; constructor(pos, ast) { if (ast?.token !== TOKEN) constructorError(); const { nodes } = ast; const cached = nodes.get(pos); if (cached !== void 0) return cached; this.#internal = { pos, ast }; nodes.set(pos, this); } get sourceType() { const internal = this.#internal; return constructModuleKind(internal.pos + 1, internal.ast); } toJSON() { return { sourceType: this.sourceType, }; } [inspectSymbol]() { return Object.setPrototypeOf(this.toJSON(), DebugSourceType.prototype); } } const DebugSourceType = class SourceType {}; function constructModuleKind(pos, ast) { switch (ast.buffer[pos]) { case 0: return "script"; case 1: return "module"; default: throw new Error(`Unexpected discriminant ${ast.buffer[pos]} for ModuleKind`); } } export class RawTransferData { #internal; constructor(pos, ast) { if (ast?.token !== TOKEN) constructorError(); const { nodes } = ast; // `pos` would be same as one of fields, so add offset to ensure unique cache key const cached = nodes.get(pos + 1); if (cached !== void 0) return cached; this.#internal = { pos, ast, $comments: void 0, $errors: void 0 }; nodes.set(pos + 1, this); } get program() { const internal = this.#internal; return new Program(internal.pos, internal.ast); } get comments() { const internal = this.#internal, cached = internal.$comments; if (cached !== void 0) return cached; return (internal.$comments = constructVecComment(internal.pos + 128, internal.ast)); } get module() { const internal = this.#internal; return new EcmaScriptModule(internal.pos + 152, internal.ast); } get errors() { const internal = this.#internal, cached = internal.$errors; if (cached !== void 0) return cached; return (internal.$errors = constructVecError(internal.pos + 256, internal.ast)); } toJSON() { return { program: this.program, comments: this.comments, module: this.module, errors: this.errors, }; } [inspectSymbol]() { return Object.setPrototypeOf(this.toJSON(), DebugRawTransferData.prototype); } } const DebugRawTransferData = class RawTransferData {}; export class Error { #internal; constructor(pos, ast) { if (ast?.token !== TOKEN) constructorError(); const { nodes } = ast; const cached = nodes.get(pos); if (cached !== void 0) return cached; this.#internal = { pos, ast, $message: void 0, $labels: void 0, $helpMessage: void 0, $codeframe: void 0, }; nodes.set(pos, this); } get severity() { const internal = this.#internal; return constructErrorSeverity(internal.pos + 72, internal.ast); } get message() { const internal = this.#internal, cached = internal.$message; if (cached !== void 0) return cached; return (internal.$message = constructStr(internal.pos, internal.ast)); } get labels() { const internal = this.#internal, cached = internal.$labels; if (cached !== void 0) return cached; return (internal.$labels = constructVecErrorLabel(internal.pos + 16, internal.ast)); } get helpMessage() { const internal = this.#internal, cached = internal.$helpMessage; if (cached !== void 0) return cached; return (internal.$helpMessage = constructOptionStr(internal.pos + 40, internal.ast)); } get codeframe() { const internal = this.#internal, cached = internal.$codeframe; if (cached !== void 0) return cached; return (internal.$codeframe = constructStr(internal.pos + 56, internal.ast)); } toJSON() { return { severity: this.severity, message: this.message, labels: this.labels, helpMessage: this.helpMessage, codeframe: this.codeframe, }; } [inspectSymbol]() { return Object.setPrototypeOf(this.toJSON(), DebugError.prototype); } } const DebugError = class Error {}; function constructErrorSeverity(pos, ast) { switch (ast.buffer[pos]) { case 0: return "Error"; case 1: return "Warning"; case 2: return "Advice"; default: throw new Error(`Unexpected discriminant ${ast.buffer[pos]} for ErrorSeverity`); } } export class ErrorLabel { #internal; constructor(pos, ast) { if (ast?.token !== TOKEN) constructorError(); const { nodes } = ast; const cached = nodes.get(pos); if (cached !== void 0) return cached; this.#internal = { pos, ast, $message: void 0 }; nodes.set(pos, this); } get message() { const internal = this.#internal, cached = internal.$message; if (cached !== void 0) return cached; return (internal.$message = constructOptionStr(internal.pos + 8, internal.ast)); } get start() { const internal = this.#internal; return constructU32(internal.pos, internal.ast); } get end() { const internal = this.#internal; return constructU32(internal.pos + 4, internal.ast); } toJSON() { return { message: this.message, start: this.start, end: this.end, }; } [inspectSymbol]() { return Object.setPrototypeOf(this.toJSON(), DebugErrorLabel.prototype); } } const DebugErrorLabel = class ErrorLabel {}; export class EcmaScriptModule { #internal; constructor(pos, ast) { if (ast?.token !== TOKEN) constructorError(); const { nodes } = ast; const cached = nodes.get(pos); if (cached !== void 0) return cached; this.#internal = { pos, ast, $staticImports: void 0, $staticExports: void 0, $dynamicImports: void 0, $importMetas: void 0, }; nodes.set(pos, this); } get hasModuleSyntax() { const internal = this.#internal; return constructBool(internal.pos + 96, internal.ast); } get staticImports() { const internal = this.#internal, cached = internal.$staticImports; if (cached !== void 0) return cached; return (internal.$staticImports = constructVecStaticImport(internal.pos, internal.ast)); } get staticExports() { const internal = this.#internal, cached = internal.$staticExports; if (cached !== void 0) return cached; return (internal.$staticExports = constructVecStaticExport(internal.pos + 24, internal.ast)); } get dynamicImports() { const internal = this.#internal, cached = internal.$dynamicImports; if (cached !== void 0) return cached; return (internal.$dynamicImports = constructVecDynamicImport(internal.pos + 48, internal.ast)); } get importMetas() { const internal = this.#internal, cached = internal.$importMetas; if (cached !== void 0) return cached; return (internal.$importMetas = constructVecSpan(internal.pos + 72, internal.ast)); } toJSON() { return { hasModuleSyntax: this.hasModuleSyntax, staticImports: this.staticImports, staticExports: this.staticExports, dynamicImports: this.dynamicImports, importMetas: this.importMetas, }; } [inspectSymbol]() { return Object.setPrototypeOf(this.toJSON(), DebugEcmaScriptModule.prototype); } } const DebugEcmaScriptModule = class EcmaScriptModule {}; export class StaticImport { #internal; constructor(pos, ast) { if (ast?.token !== TOKEN) constructorError(); const { nodes } = ast; const cached = nodes.get(pos); if (cached !== void 0) return cached; this.#internal = { pos, ast, $entries: void 0 }; nodes.set(pos, this); } get start() { const internal = this.#internal; return constructU32(internal.pos, internal.ast); } get end() { const internal = this.#internal; return constructU32(internal.pos + 4, internal.ast); } get moduleRequest() { const internal = this.#internal; return new NameSpan(internal.pos + 8, internal.ast); } get entries() { const internal = this.#internal, cached = internal.$entries; if (cached !== void 0) return cached; return (internal.$entries = constructVecImportEntry(internal.pos + 32, internal.ast)); } toJSON() { return { start: this.start, end: this.end, moduleRequest: this.moduleRequest, entries: this.entries, }; } [inspectSymbol]() { return Object.setPrototypeOf(this.toJSON(), DebugStaticImport.prototype); } } const DebugStaticImport = class StaticImport {}; export class StaticExport { #internal; constructor(pos, ast) { if (ast?.token !== TOKEN) constructorError(); const { nodes } = ast; const cached = nodes.get(pos); if (cached !== void 0) return cached; this.#internal = { pos, ast, $entries: void 0 }; nodes.set(pos, this); } get start() { const internal = this.#internal; return constructU32(internal.pos, internal.ast); } get end() { const internal = this.#internal; return constructU32(internal.pos + 4, internal.ast); } get entries() { const internal = this.#internal, cached = internal.$entries; if (cached !== void 0) return cached; return (internal.$entries = constructVecExportEntry(internal.pos + 8, internal.ast)); } toJSON() { return { start: this.start, end: this.end, entries: this.entries, }; } [inspectSymbol]() { return Object.setPrototypeOf(this.toJSON(), DebugStaticExport.prototype); } } const DebugStaticExport = class StaticExport {}; function constructU32(pos, ast) { return ast.buffer.uint32[pos >> 2]; } function constructU8(pos, ast) { return ast.buffer[pos]; } function constructStr(pos, ast) { const pos32 = pos >> 2, { buffer } = ast, { uint32 } = buffer, len = uint32[pos32 + 2]; if (len === 0) return ""; pos = uint32[pos32]; if (ast.sourceIsAscii && pos < ast.sourceByteLen) return ast.sourceText.substr(pos, len); // Longer strings use `TextDecoder` // TODO: Find best switch-over point const end = pos + len; if (len > 50) return decodeStr(buffer.subarray(pos, end)); // Shorter strings decode by hand to avoid native call let out = "", c; do { c = buffer[pos++]; if (c < 0x80) { out += fromCodePoint(c); } else { out += decodeStr(buffer.subarray(pos - 1, end)); break; } } while (pos < end); return out; } function constructVecComment(pos, ast) { const { uint32 } = ast.buffer, pos32 = pos >> 2; return new NodeArray(uint32[pos32], uint32[pos32 + 2], 16, constructComment, ast); } function constructComment(pos, ast) { return new Comment(pos, ast); } function constructOptionHashbang(pos, ast) { if (ast.buffer.uint32[(pos + 8) >> 2] === 0 && ast.buffer.uint32[(pos + 12) >> 2] === 0) return null; return new Hashbang(pos, ast); } function constructVecDirective(pos, ast) { const { uint32 } = ast.buffer, pos32 = pos >> 2; return new NodeArray(uint32[pos32], uint32[pos32 + 2], 72, constructDirective, ast); } function constructDirective(pos, ast) { return new Directive(pos, ast); } function constructVecStatement(pos, ast) { const { uint32 } = ast.buffer, pos32 = pos >> 2; return new NodeArray(uint32[pos32], uint32[pos32 + 2], 16, constructStatement, ast); } function constructBoxBooleanLiteral(pos, ast) { return new BooleanLiteral(ast.buffer.uint32[pos >> 2], ast); } function constructBoxNullLiteral(pos, ast) { return new NullLiteral(ast.buffer.uint32[pos >> 2], ast); } function constructBoxNumericLiteral(pos, ast) { return new NumericLiteral(ast.buffer.uint32[pos >> 2], ast); } function constructBoxBigIntLiteral(pos, ast) { return new BigIntLiteral(ast.buffer.uint32[pos >> 2], ast); } function constructBoxRegExpLiteral(pos, ast) { return new RegExpLiteral(ast.buffer.uint32[pos >> 2], ast); } function constructBoxStringLiteral(pos, ast) { return new StringLiteral(ast.buffer.uint32[pos >> 2], ast); } function constructBoxTemplateLiteral(pos, ast) { return new TemplateLiteral(ast.buffer.uint32[pos >> 2], ast); } function constructBoxIdentifierReference(pos, ast) { return new IdentifierReference(ast.buffer.uint32[pos >> 2], ast); } function constructBoxMetaProperty(pos, ast) { return new MetaProperty(ast.buffer.uint32[pos >> 2], ast); } function constructBoxSuper(pos, ast) { return new Super(ast.buffer.uint32[pos >> 2], ast); } function constructBoxArrayExpression(pos, ast) { return new ArrayExpression(ast.buffer.uint32[pos >> 2], ast); } function constructBoxArrowFunctionExpression(pos, ast) { return new ArrowFunctionExpression(ast.buffer.uint32[pos >> 2], ast); } function constructBoxAssignmentExpression(pos, ast) { return new AssignmentExpression(ast.buffer.uint32[pos >> 2], ast); } function constructBoxAwaitExpression(pos, ast) { return new AwaitExpression(ast.buffer.uint32[pos >> 2], ast); } function constructBoxBinaryExpression(pos, ast) { return new BinaryExpression(ast.buffer.uint32[pos >> 2], ast); } function constructBoxCallExpression(pos, ast) { return new CallExpression(ast.buffer.uint32[pos >> 2], ast); } function constructBoxChainExpression(pos, ast) { return new ChainExpression(ast.buffer.uint32[pos >> 2], ast); } function constructBoxClass(pos, ast) { return new Class(ast.buffer.uint32[pos >> 2], ast); } function constructBoxConditionalExpression(pos, ast) { return new ConditionalExpression(ast.buffer.uint32[pos >> 2], ast); } function constructBoxFunction(pos, ast) { return new Function(ast.buffer.uint32[pos >> 2], ast); } function constructBoxImportExpression(pos, ast) { return new ImportExpression(ast.buffer.uint32[pos >> 2], ast); } function constructBoxLogicalExpression(pos, ast) { return new LogicalExpression(ast.buffer.uint32[pos >> 2], ast); } function constructBoxNewExpression(pos, ast) { return new NewExpression(ast.buffer.uint32[pos >> 2], ast); } function constructBoxObjectExpression(pos, ast) { return new ObjectExpression(ast.buffer.uint32[pos >> 2], ast); } function constructBoxParenthesizedExpression(pos, ast) { return new ParenthesizedExpression(ast.buffer.uint32[pos >> 2], ast); } function constructBoxSequenceExpression(pos, ast) { return new SequenceExpression(ast.buffer.uint32[pos >> 2], ast); } function constructBoxTaggedTemplateExpression(pos, ast) { return new TaggedTemplateExpression(ast.buffer.uint32[pos >> 2], ast); } function constructBoxThisExpression(pos, ast) { return new ThisExpression(ast.buffer.uint32[pos >> 2], ast); } function constructBoxUnaryExpression(pos, ast) { return new UnaryExpression(ast.buffer.uint32[pos >> 2], ast); } function constructBoxUpdateExpression(pos, ast) { return new UpdateExpression(ast.buffer.uint32[pos >> 2], ast); } function constructBoxYieldExpression(pos, ast) { return new YieldExpression(ast.buffer.uint32[pos >> 2], ast); } function constructBoxPrivateInExpression(pos, ast) { return new PrivateInExpression(ast.buffer.uint32[pos >> 2], ast); } function constructBoxJSXElement(pos, ast) { return new JSXElement(ast.buffer.uint32[pos >> 2], ast); } function constructBoxJSXFragment(pos, ast) { return new JSXFragment(ast.buffer.uint32[pos >> 2], ast); } function constructBoxTSAsExpression(pos, ast) { return new TSAsExpression(ast.buffer.uint32[pos >> 2], ast); } function constructBoxTSSatisfiesExpression(pos, ast) { return new TSSatisfiesExpression(ast.buffer.uint32[pos >> 2], ast); } function constructBoxTSTypeAssertion(pos, ast) { return new TSTypeAssertion(ast.buffer.uint32[pos >> 2], ast); } function constructBoxTSNonNullExpression(pos, ast) { return new TSNonNullExpression(ast.buffer.uint32[pos >> 2], ast); } function constructBoxTSInstantiationExpression(pos, ast) { return new TSInstantiationExpression(ast.buffer.uint32[pos >> 2], ast); } function constructBoxV8IntrinsicExpression(pos, ast) { return new V8IntrinsicExpression(ast.buffer.uint32[pos >> 2], ast); } function constructVecArrayExpressionElement(pos, ast) { const { uint32 } = ast.buffer, pos32 = pos >> 2; return new NodeArray(uint32[pos32], uint32[pos32 + 2], 16, constructArrayExpressionElement, ast); } function constructBoxSpreadElement(pos, ast) { return new SpreadElement(ast.buffer.uint32[pos >> 2], ast); } function constructVecObjectPropertyKind(pos, ast) { const { uint32 } = ast.buffer, pos32 = pos >> 2; return new NodeArray(uint32[pos32], uint32[pos32 + 2], 16, constructObjectPropertyKind, ast); } function constructBoxObjectProperty(pos, ast) { return new ObjectProperty(ast.buffer.uint32[pos >> 2], ast); } function constructBool(pos, ast) { return ast.buffer[pos] === 1; } function constructBoxIdentifierName(pos, ast) { return new IdentifierName(ast.buffer.uint32[pos >> 2], ast); } function constructBoxPrivateIdentifier(pos, ast) { return new PrivateIdentifier(ast.buffer.uint32[pos >> 2], ast); } function constructVecTemplateElement(pos, ast) { const { uint32 } = ast.buffer, pos32 = pos >> 2; return new NodeArray(uint32[pos32], uint32[pos32 + 2], 48, constructTemplateElement, ast); } function constructTemplateElement(pos, ast) { return new TemplateElement(pos, ast); } function constructVecExpression(pos, ast) { const { uint32 } = ast.buffer, pos32 = pos >> 2; return new NodeArray(uint32[pos32], uint32[pos32 + 2], 16, constructExpression, ast); } function constructBoxTSTypeParameterInstantiation(pos, ast) { return new TSTypeParameterInstantiation(ast.buffer.uint32[pos >> 2], ast); } function constructOptionBoxTSTypeParameterInstantiation(pos, ast) { if (ast.buffer.uint32[pos >> 2] === 0 && ast.buffer.uint32[(pos + 4) >> 2] === 0) return null; return constructBoxTSTypeParameterInstantiation(pos, ast); } function constructOptionStr(pos, ast) { if (ast.buffer.uint32[pos >> 2] === 0 && ast.buffer.uint32[(pos + 4) >> 2] === 0) return null; return constructStr(pos, ast); } function constructBoxComputedMemberExpression(pos, ast) { return new ComputedMemberExpression(ast.buffer.uint32[pos >> 2], ast); } function constructBoxStaticMemberExpression(pos, ast) { return new StaticMemberExpression(ast.buffer.uint32[pos >> 2], ast); } function constructBoxPrivateFieldExpression(pos, ast) { return new PrivateFieldExpression(ast.buffer.uint32[pos >> 2], ast); } function constructVecArgument(pos, ast) { const { uint32 } = ast.buffer, pos32 = pos >> 2; return new NodeArray(uint32[pos32], uint32[pos32 + 2], 16, constructArgument, ast); } function constructBoxArrayAssignmentTarget(pos, ast) { return new ArrayAssignmentTarget(ast.buffer.uint32[pos >> 2], ast); } function constructBoxObjectAssignmentTarget(pos, ast) { return new ObjectAssignmentTarget(ast.buffer.uint32[pos >> 2], ast); } function constructOptionAssignmentTargetMaybeDefault(pos, ast) { if (ast.buffer[pos] === 51) return null; return constructAssignmentTargetMaybeDefault(pos, ast); } function constructVecOptionAssignmentTargetMaybeDefault(pos, ast) { const { uint32 } = ast.buffer, pos32 = pos >> 2; return new NodeArray( uint32[pos32], uint32[pos32 + 2], 16, constructOptionAssignmentTargetMaybeDefault, ast, ); } function constructBoxAssignmentTargetRest(pos, ast) { return new AssignmentTargetRest(ast.buffer.uint32[pos >> 2], ast); } function constructOptionBoxAssignmentTargetRest(pos, ast) { if (ast.buffer.uint32[pos >> 2] === 0 && ast.buffer.uint32[(pos + 4) >> 2] === 0) return null; return constructBoxAssignmentTargetRest(pos, ast); } function constructVecAssignmentTargetProperty(pos, ast) { const { uint32 } = ast.buffer, pos32 = pos >> 2; return new NodeArray( uint32[pos32], uint32[pos32 + 2], 16, constructAssignmentTargetProperty, ast, ); } function constructBoxAssignmentTargetWithDefault(pos, ast) { return new AssignmentTargetWithDefault(ast.buffer.uint32[pos >> 2], ast); } function constructBoxAssignmentTargetPropertyIdentifier(pos, ast) { return new AssignmentTargetPropertyIdentifier(ast.buffer.uint32[pos >> 2], ast); } function constructBoxAssignmentTargetPropertyProperty(pos, ast) { return new AssignmentTargetPropertyProperty(ast.buffer.uint32[pos >> 2], ast); } function constructOptionExpression(pos, ast) { if (ast.buffer[pos] === 51) return null; return constructExpression(pos, ast); } function constructBoxBlockStatement(pos, ast) { return new BlockStatement(ast.buffer.uint32[pos >> 2], ast); } function constructBoxBreakStatement(pos, ast) { return new BreakStatement(ast.buffer.uint32[pos >> 2], ast); } function constructBoxContinueStatement(pos, ast) { return new ContinueStatement(ast.buffer.uint32[pos >> 2], ast); } function constructBoxDebuggerStatement(pos, ast) { return new DebuggerStatement(ast.buffer.uint32[pos >> 2], ast); } function constructBoxDoWhileStatement(pos, ast) { return new DoWhileStatement(ast.buffer.uint32[pos >> 2], ast); } function constructBoxEmptyStatement(pos, ast) { return new EmptyStatement(ast.buffer.uint32[pos >> 2], ast); } function constructBoxExpressionStatement(pos, ast) { return new ExpressionStatement(ast.buffer.uint32[pos >> 2], ast); } function constructBoxForInStatement(pos, ast) { return new ForInStatement(ast.buffer.uint32[pos >> 2], ast); } function constructBoxForOfStatement(pos, ast) { return new ForOfStatement(ast.buffer.uint32[pos >> 2], ast); } function constructBoxForStatement(pos, ast) { return new ForStatement(ast.buffer.uint32[pos >> 2], ast); } function constructBoxIfStatement(pos, ast) { return new IfStatement(ast.buffer.uint32[pos >> 2], ast); } function constructBoxLabeledStatement(pos, ast) { return new LabeledStatement(ast.buffer.uint32[pos >> 2], ast); } function constructBoxReturnStatement(pos, ast) { return new ReturnStatement(ast.buffer.uint32[pos >> 2], ast); } function constructBoxSwitchStatement(pos, ast) { return new SwitchStatement(ast.buffer.uint32[pos >> 2], ast); } function constructBoxThrowStatement(pos, ast) { return new ThrowStatement(ast.buffer.uint32[pos >> 2], ast); } function constructBoxTryStatement(pos, ast) { return new TryStatement(ast.buffer.uint32[pos >> 2], ast); } function constructBoxWhileStatement(pos, ast) { return new WhileStatement(ast.buffer.uint32[pos >> 2], ast); } function constructBoxWithStatement(pos, ast) { return new WithStatement(ast.buffer.uint32[pos >> 2], ast); } function constructBoxVariableDeclaration(pos, ast) { return new VariableDeclaration(ast.buffer.uint32[pos >> 2], ast); } function constructBoxTSTypeAliasDeclaration(pos, ast) { return new TSTypeAliasDeclaration(ast.buffer.uint32[pos >> 2], ast); } function constructBoxTSInterfaceDeclaration(pos, ast) { return new TSInterfaceDeclaration(ast.buffer.uint32[pos >> 2], ast); } function constructBoxTSEnumDeclaration(pos, ast) { return new TSEnumDeclaration(ast.buffer.uint32[pos >> 2], ast); } function constructBoxTSModuleDeclaration(pos, ast) { return new TSModuleDeclaration(ast.buffer.uint32[pos >> 2], ast); } function constructBoxTSGlobalDeclaration(pos, ast) { return new TSGlobalDeclaration(ast.buffer.uint32[pos >> 2], ast); } function constructBoxTSImportEqualsDeclaration(pos, ast) { return new TSImportEqualsDeclaration(ast.buffer.uint32[pos >> 2], ast); } function constructVecVariableDeclarator(pos, ast) { const { uint32 } = ast.buffer, pos32 = pos >> 2; return new NodeArray(uint32[pos32], uint32[pos32 + 2], 64, constructVariableDeclarator, ast); } function constructVariableDeclarator(pos, ast) { return new VariableDeclarator(pos, ast); } function constructOptionStatement(pos, ast) { if (ast.buffer[pos] === 70) return null; return constructStatement(pos, ast); } function constructOptionForStatementInit(pos, ast) { if (ast.buffer[pos] === 65) return null; return constructForStatementInit(pos, ast); } function constructOptionLabelIdentifier(pos, ast) { if (ast.buffer.uint32[(pos + 8) >> 2] === 0 && ast.buffer.uint32[(pos + 12) >> 2] === 0) return null; return new LabelIdentifier(pos, ast); } function constructVecSwitchCase(pos, ast) { const { uint32 } = ast.buffer, pos32 = pos >> 2; return new NodeArray(uint32[pos32], uint32[pos32 + 2], 48, constructSwitchCase, ast); } function constructSwitchCase(pos, ast) { return new SwitchCase(pos, ast); } function constructBoxCatchClause(pos, ast) { return new CatchClause(ast.buffer.uint32[pos >> 2], ast); } function constructOptionBoxCatchClause(pos, ast) { if (ast.buffer.uint32[pos >> 2] === 0 && ast.buffer.uint32[(pos + 4) >> 2] === 0) return null; return constructBoxCatchClause(pos, ast); } function constructOptionBoxBlockStatement(pos, ast) { if (ast.buffer.uint32[pos >> 2] === 0 && ast.buffer.uint32[(pos + 4) >> 2] === 0) return null; return constructBoxBlockStatement(pos, ast); } function constructOptionCatchParameter(pos, ast) { if (ast.buffer[pos + 32] === 2) return null; return new CatchParameter(pos, ast); } function constructBoxTSTypeAnnotation(pos, ast) { return new TSTypeAnnotation(ast.buffer.uint32[pos >> 2], ast); } function constructOptionBoxTSTypeAnnotation(pos, ast) { if (ast.buffer.uint32[pos >> 2] === 0 && ast.buffer.uint32[(pos + 4) >> 2] === 0) return null; return constructBoxTSTypeAnnotation(pos, ast); } function constructBoxBindingIdentifier(pos, ast) { return new BindingIdentifier(ast.buffer.uint32[pos >> 2], ast); } function constructBoxObjectPattern(pos, ast) { return new ObjectPattern(ast.buffer.uint32[pos >> 2], ast); } function constructBoxArrayPattern(pos, ast) { return new ArrayPattern(ast.buffer.uint32[pos >> 2], ast); } function constructBoxAssignmentPattern(pos, ast) { return new AssignmentPattern(ast.buffer.uint32[pos >> 2], ast); } function constructVecBindingProperty(pos, ast) { const { uint32 } = ast.buffer, pos32 = pos >> 2; return new NodeArray(uint32[pos32], uint32[pos32 + 2], 64, constructBindingProperty, ast); } function constructBindingProperty(pos, ast) { return new BindingProperty(pos, ast); } function constructBoxBindingRestElement(pos, ast) { return new BindingRestElement(ast.buffer.uint32[pos >> 2], ast); } function constructOptionBoxBindingRestElement(pos, ast) { if (ast.buffer.uint32[pos >> 2] === 0 && ast.buffer.uint32[(pos + 4) >> 2] === 0) return null; return constructBoxBindingRestElement(pos, ast); } function constructOptionBindingPattern(pos, ast) { if (ast.buffer[pos + 24] === 2) return null; return new BindingPattern(pos, ast); } function constructVecOptionBindingPattern(pos, ast) { const { uint32 } = ast.buffer, pos32 = pos >> 2; return new NodeArray(uint32[pos32], uint32[pos32 + 2], 32, constructOptionBindingPattern, ast); } function constructOptionBindingIdentifier(pos, ast) { if (ast.buffer.uint32[(pos + 8) >> 2] === 0 && ast.buffer.uint32[(pos + 12) >> 2] === 0) return null; return new BindingIdentifier(pos, ast); } function constructBoxTSTypeParameterDeclaration(pos, ast) { return new TSTypeParameterDeclaration(ast.buffer.uint32[pos >> 2], ast); } function constructOptionBoxTSTypeParameterDeclaration(pos, ast) { if (ast.buffer.uint32[pos >> 2] === 0 && ast.buffer.uint32[(pos + 4) >> 2] === 0) return null; return constructBoxTSTypeParameterDeclaration(pos, ast); } function constructBoxTSThisParameter(pos, ast) { return new TSThisParameter(ast.buffer.uint32[pos >> 2], ast); } function constructOptionBoxTSThisParameter(pos, ast) { if (ast.buffer.uint32[pos >> 2] === 0 && ast.buffer.uint32[(pos + 4) >> 2] === 0) return null; return constructBoxTSThisParameter(pos, ast); } function constructBoxFormalParameters(pos, ast) { return new FormalParameters(ast.buffer.uint32[pos >> 2], ast); } function constructBoxFunctionBody(pos, ast) { return new FunctionBody(ast.buffer.uint32[pos >> 2], ast); } function constructOptionBoxFunctionBody(pos, ast) { if (ast.buffer.uint32[pos >> 2] === 0 && ast.buffer.uint32[(pos + 4) >> 2] === 0) return null; return constructBoxFunctionBody(pos, ast); } function constructVecFormalParameter(pos, ast) { const { uint32 } = ast.buffer, pos32 = pos >> 2; return new NodeArray(uint32[pos32], uint32[pos32 + 2], 72, constructFormalParameter, ast); } function constructFormalParameter(pos, ast) { return new FormalParameter(pos, ast); } function constructVecDecorator(pos, ast) { const { uint32 } = ast.buffer, pos32 = pos >> 2; return new NodeArray(uint32[pos32], uint32[pos32 + 2], 24, constructDecorator, ast); } function constructDecorator(pos, ast) { return new Decorator(pos, ast); } function constructOptionTSAccessibility(pos, ast) { if (ast.buffer[pos] === 3) return null; return constructTSAccessibility(pos, ast); } function constructVecTSClassImplements(pos, ast) { const { uint32 } = ast.buffer, pos32 = pos >> 2; return new NodeArray(uint32[pos32], uint32[pos32 + 2], 32, constructTSClassImplements, ast); } function constructTSClassImplements(pos, ast) { return new TSClassImplements(pos, ast); } function constructBoxClassBody(pos, ast) { return new ClassBody(ast.buffer.uint32[pos >> 2], ast); } function constructVecClassElement(pos, ast) { const { uint32 } = ast.buffer, pos32 = pos >> 2; return new NodeArray(uint32[pos32], uint32[pos32 + 2], 16, constructClassElement, ast); } function constructBoxStaticBlock(pos, ast) { return new StaticBlock(ast.buffer.uint32[pos >> 2], ast); } function constructBoxMethodDefinition(pos, ast) { return new MethodDefinition(ast.buffer.uint32[pos >> 2], ast); } function constructBoxPropertyDefinition(pos, ast) { return new PropertyDefinition(ast.buffer.uint32[pos >> 2], ast); } function constructBoxAccessorProperty(pos, ast) { return new AccessorProperty(ast.buffer.uint32[pos >> 2], ast); } function constructBoxTSIndexSignature(pos, ast) { return new TSIndexSignature(ast.buffer.uint32[pos >> 2], ast); } function constructBoxImportDeclaration(pos, ast) { return new ImportDeclaration(ast.buffer.uint32[pos >> 2], ast); } function constructBoxExportAllDeclaration(pos, ast) { return new ExportAllDeclaration(ast.buffer.uint32[pos >> 2], ast); } function constructBoxExportDefaultDeclaration(pos, ast) { return new ExportDefaultDeclaration(ast.buffer.uint32[pos >> 2], ast); } function constructBoxExportNamedDeclaration(pos, ast) { return new ExportNamedDeclaration(ast.buffer.uint32[pos >> 2], ast); } function constructBoxTSExportAssignment(pos, ast) { return new TSExportAssignment(ast.buffer.uint32[pos >> 2], ast); } function constructBoxTSNamespaceExportDeclaration(pos, ast) { return new TSNamespaceExportDeclaration(ast.buffer.uint32[pos >> 2], ast); } function constructOptionImportPhase(pos, ast) { if (ast.buffer[pos] === 2) return null; return constructImportPhase(pos, ast); } function constructVecImportDeclarationSpecifier(pos, ast) { const { uint32 } = ast.buffer, pos32 = pos >> 2; return new NodeArray( uint32[pos32], uint32[pos32 + 2], 16, constructImportDeclarationSpecifier, ast, ); } function constructOptionVecImportDeclarationSpecifier(pos, ast) { if (ast.buffer.uint32[pos >> 2] === 0 && ast.buffer.uint32[(pos + 4) >> 2] === 0) return null; return constructVecImportDeclarationSpecifier(pos, ast); } function constructBoxWithClause(pos, ast) { return new WithClause(ast.buffer.uint32[pos >> 2], ast); } function constructOptionBoxWithClause(pos, ast) { if (ast.buffer.uint32[pos >> 2] === 0 && ast.buffer.uint32[(pos + 4) >> 2] === 0) return null; return constructBoxWithClause(pos, ast); } function constructBoxImportSpecifier(pos, ast) { return new ImportSpecifier(ast.buffer.uint32[pos >> 2], ast); } function constructBoxImportDefaultSpecifier(pos, ast) { return new ImportDefaultSpecifier(ast.buffer.uint32[pos >> 2], ast); } function constructBoxImportNamespaceSpecifier(pos, ast) { return new ImportNamespaceSpecifier(ast.buffer.uint32[pos >> 2], ast); } function constructVecImportAttribute(pos, ast) { const { uint32 } = ast.buffer, pos32 = pos >> 2; return new NodeArray(uint32[pos32], uint32[pos32 + 2], 112, constructImportAttribute, ast); } function constructImportAttribute(pos, ast) { return new ImportAttribute(pos, ast); } function constructOptionDeclaration(pos, ast) { if (ast.buffer[pos] === 31) return null; return constructDeclaration(pos, ast); } function constructVecExportSpecifier(pos, ast) { const { uint32 } = ast.buffer, pos32 = pos >> 2; return new NodeArray(uint32[pos32], uint32[pos32 + 2], 128, constructExportSpecifier, ast); } function constructExportSpecifier(pos, ast) { return new ExportSpecifier(pos, ast); } function constructOptionStringLiteral(pos, ast) { if (ast.buffer[pos + 40] === 2) return null; return new StringLiteral(pos, ast); } function constructOptionModuleExportName(pos, ast) { if (ast.buffer[pos] === 3) return null; return constructModuleExportName(pos, ast); } function constructF64(pos, ast) { return ast.buffer.float64[pos >> 3]; } function constructBoxJSXOpeningElement(pos, ast) { return new JSXOpeningElement(ast.buffer.uint32[pos >> 2], ast); } function constructVecJSXChild(pos, ast) { const { uint32 } = ast.buffer, pos32 = pos >> 2; return new NodeArray(uint32[pos32], uint32[pos32 + 2], 16, constructJSXChild, ast); } function constructBoxJSXClosingElement(pos, ast) { return new JSXClosingElement(ast.buffer.uint32[pos >> 2], ast); } function constructOptionBoxJSXClosingElement(pos, ast) { if (ast.buffer.uint32[pos >> 2] === 0 && ast.buffer.uint32[(pos + 4) >> 2] === 0) return null; return constructBoxJSXClosingElement(pos, ast); } function constructVecJSXAttributeItem(pos, ast) { const { uint32 } = ast.buffer, pos32 = pos >> 2; return new NodeArray(uint32[pos32], uint32[pos32 + 2], 16, constructJSXAttributeItem, ast); } function constructBoxJSXIdentifier(pos, ast) { return new JSXIdentifier(ast.buffer.uint32[pos >> 2], ast); } function constructBoxJSXNamespacedName(pos, ast) { return new JSXNamespacedName(ast.buffer.uint32[pos >> 2], ast); } function constructBoxJSXMemberExpression(pos, ast) { return new JSXMemberExpression(ast.buffer.uint32[pos >> 2], ast); } function constructBoxJSXAttribute(pos, ast) { return new JSXAttribute(ast.buffer.uint32[pos >> 2], ast); } function constructBoxJSXSpreadAttribute(pos, ast) { return new JSXSpreadAttribute(ast.buffer.uint32[pos >> 2], ast); } function constructOptionJSXAttributeValue(pos, ast) { if (ast.buffer[pos] === 4) return null; return constructJSXAttributeValue(pos, ast); } function constructBoxJSXExpressionContainer(pos, ast) { return new JSXExpressionContainer(ast.buffer.uint32[pos >> 2], ast); } function constructBoxJSXText(pos, ast) { return new JSXText(ast.buffer.uint32[pos >> 2], ast); } function constructBoxJSXSpreadChild(pos, ast) { return new JSXSpreadChild(ast.buffer.uint32[pos >> 2], ast); } function constructVecTSEnumMember(pos, ast) { const { uint32 } = ast.buffer, pos32 = pos >> 2; return new NodeArray(uint32[pos32], uint32[pos32 + 2], 40, constructTSEnumMember, ast); } function constructTSEnumMember(pos, ast) { return new TSEnumMember(pos, ast); } function constructBoxTSAnyKeyword(pos, ast) { return new TSAnyKeyword(ast.buffer.uint32[pos >> 2], ast); } function constructBoxTSBigIntKeyword(pos, ast) { return new TSBigIntKeyword(ast.buffer.uint32[pos >> 2], ast); } function constructBoxTSBooleanKeyword(pos, ast) { return new TSBooleanKeyword(ast.buffer.uint32[pos >> 2], ast); } function constructBoxTSIntrinsicKeyword(pos, ast) { return new TSIntrinsicKeyword(ast.buffer.uint32[pos >> 2], ast); } function constructBoxTSNeverKeyword(pos, ast) { return new TSNeverKeyword(ast.buffer.uint32[pos >> 2], ast); } function constructBoxTSNullKeyword(pos, ast) { return new TSNullKeyword(ast.buffer.uint32[pos >> 2], ast); } function constructBoxTSNumberKeyword(pos, ast) { return new TSNumberKeyword(ast.buffer.uint32[pos >> 2], ast); } function constructBoxTSObjectKeyword(pos, ast) { return new TSObjectKeyword(ast.buffer.uint32[pos >> 2], ast); } function constructBoxTSStringKeyword(pos, ast) { return new TSStringKeyword(ast.buffer.uint32[pos >> 2], ast); } function constructBoxTSSymbolKeyword(pos, ast) { return new TSSymbolKeyword(ast.buffer.uint32[pos >> 2], ast); } function constructBoxTSUndefinedKeyword(pos, ast) { return new TSUndefinedKeyword(ast.buffer.uint32[pos >> 2], ast); } function constructBoxTSUnknownKeyword(pos, ast) { return new TSUnknownKeyword(ast.buffer.uint32[pos >> 2], ast); } function constructBoxTSVoidKeyword(pos, ast) { return new TSVoidKeyword(ast.buffer.uint32[pos >> 2], ast); } function constructBoxTSArrayType(pos, ast) { return new TSArrayType(ast.buffer.uint32[pos >> 2], ast); } function constructBoxTSConditionalType(pos, ast) { return new TSConditionalType(ast.buffer.uint32[pos >> 2], ast); } function constructBoxTSConstructorType(pos, ast) { return new TSConstructorType(ast.buffer.uint32[pos >> 2], ast); } function constructBoxTSFunctionType(pos, ast) { return new TSFunctionType(ast.buffer.uint32[pos >> 2], ast); } function constructBoxTSImportType(pos, ast) { return new TSImportType(ast.buffer.uint32[pos >> 2], ast); } function constructBoxTSIndexedAccessType(pos, ast) { return new TSIndexedAccessType(ast.buffer.uint32[pos >> 2], ast); } function constructBoxTSInferType(pos, ast) { return new TSInferType(ast.buffer.uint32[pos >> 2], ast); } function constructBoxTSIntersectionType(pos, ast) { return new TSIntersectionType(ast.buffer.uint32[pos >> 2], ast); } function constructBoxTSLiteralType(pos, ast) { return new TSLiteralType(ast.buffer.uint32[pos >> 2], ast); } function constructBoxTSMappedType(pos, ast) { return new TSMappedType(ast.buffer.uint32[pos >> 2], ast); } function constructBoxTSNamedTupleMember(pos, ast) { return new TSNamedTupleMember(ast.buffer.uint32[pos >> 2], ast); } function constructBoxTSTemplateLiteralType(pos, ast) { return new TSTemplateLiteralType(ast.buffer.uint32[pos >> 2], ast); } function constructBoxTSThisType(pos, ast) { return new TSThisType(ast.buffer.uint32[pos >> 2], ast); } function constructBoxTSTupleType(pos, ast) { return new TSTupleType(ast.buffer.uint32[pos >> 2], ast); } function constructBoxTSTypeLiteral(pos, ast) { return new TSTypeLiteral(ast.buffer.uint32[pos >> 2], ast); } function constructBoxTSTypeOperator(pos, ast) { return new TSTypeOperator(ast.buffer.uint32[pos >> 2], ast); } function constructBoxTSTypePredicate(pos, ast) { return new TSTypePredicate(ast.buffer.uint32[pos >> 2], ast); } function constructBoxTSTypeQuery(pos, ast) { return new TSTypeQuery(ast.buffer.uint32[pos >> 2], ast); } function constructBoxTSTypeReference(pos, ast) { return new TSTypeReference(ast.buffer.uint32[pos >> 2], ast); } function constructBoxTSUnionType(pos, ast) { return new TSUnionType(ast.buffer.uint32[pos >> 2], ast); } function constructBoxTSParenthesizedType(pos, ast) { return new TSParenthesizedType(ast.buffer.uint32[pos >> 2], ast); } function constructBoxJSDocNullableType(pos, ast) { return new JSDocNullableType(ast.buffer.uint32[pos >> 2], ast); } function constructBoxJSDocNonNullableType(pos, ast) { return new JSDocNonNullableType(ast.buffer.uint32[pos >> 2], ast); } function constructBoxJSDocUnknownType(pos, ast) { return new JSDocUnknownType(ast.buffer.uint32[pos >> 2], ast); } function constructVecTSType(pos, ast) { const { uint32 } = ast.buffer, pos32 = pos >> 2; return new NodeArray(uint32[pos32], uint32[pos32 + 2], 16, constructTSType, ast); } function constructVecTSTupleElement(pos, ast) { const { uint32 } = ast.buffer, pos32 = pos >> 2; return new NodeArray(uint32[pos32], uint32[pos32 + 2], 16, constructTSTupleElement, ast); } function constructBoxTSOptionalType(pos, ast) { return new TSOptionalType(ast.buffer.uint32[pos >> 2], ast); } function constructBoxTSRestType(pos, ast) { return new TSRestType(ast.buffer.uint32[pos >> 2], ast); } function constructBoxTSQualifiedName(pos, ast) { return new TSQualifiedName(ast.buffer.uint32[pos >> 2], ast); } function constructOptionTSType(pos, ast) { if (ast.buffer[pos] === 38) return null; return constructTSType(pos, ast); } function constructVecTSTypeParameter(pos, ast) { const { uint32 } = ast.buffer, pos32 = pos >> 2; return new NodeArray(uint32[pos32], uint32[pos32 + 2], 80, constructTSTypeParameter, ast); } function constructTSTypeParameter(pos, ast) { return new TSTypeParameter(pos, ast); } function constructVecTSInterfaceHeritage(pos, ast) { const { uint32 } = ast.buffer, pos32 = pos >> 2; return new NodeArray(uint32[pos32], uint32[pos32 + 2], 32, constructTSInterfaceHeritage, ast); } function constructTSInterfaceHeritage(pos, ast) { return new TSInterfaceHeritage(pos, ast); } function constructBoxTSInterfaceBody(pos, ast) { return new TSInterfaceBody(ast.buffer.uint32[pos >> 2], ast); } function constructVecTSSignature(pos, ast) { const { uint32 } = ast.buffer, pos32 = pos >> 2; return new NodeArray(uint32[pos32], uint32[pos32 + 2], 16, constructTSSignature, ast); } function constructBoxTSPropertySignature(pos, ast) { return new TSPropertySignature(ast.buffer.uint32[pos >> 2], ast); } function constructBoxTSCallSignatureDeclaration(pos, ast) { return new TSCallSignatureDeclaration(ast.buffer.uint32[pos >> 2], ast); } function constructBoxTSConstructSignatureDeclaration(pos, ast) { return new TSConstructSignatureDeclaration(ast.buffer.uint32[pos >> 2], ast); } function constructBoxTSMethodSignature(pos, ast) { return new TSMethodSignature(ast.buffer.uint32[pos >> 2], ast); } function constructVecTSIndexSignatureName(pos, ast) { const { uint32 } = ast.buffer, pos32 = pos >> 2; return new NodeArray(uint32[pos32], uint32[pos32 + 2], 32, constructTSIndexSignatureName, ast); } function constructTSIndexSignatureName(pos, ast) { return new TSIndexSignatureName(pos, ast); } function constructOptionTSModuleDeclarationBody(pos, ast) { if (ast.buffer[pos] === 2) return null; return constructTSModuleDeclarationBody(pos, ast); } function constructBoxTSModuleBlock(pos, ast) { return new TSModuleBlock(ast.buffer.uint32[pos >> 2], ast); } function constructBoxTSTypeParameter(pos, ast) { return new TSTypeParameter(ast.buffer.uint32[pos >> 2], ast); } function constructOptionBoxObjectExpression(pos, ast) { if (ast.buffer.uint32[pos >> 2] === 0 && ast.buffer.uint32[(pos + 4) >> 2] === 0) return null; return constructBoxObjectExpression(pos, ast); } function constructOptionTSImportTypeQualifier(pos, ast) { if (ast.buffer[pos] === 2) return null; return constructTSImportTypeQualifier(pos, ast); } function constructBoxTSImportTypeQualifiedName(pos, ast) { return new TSImportTypeQualifiedName(ast.buffer.uint32[pos >> 2], ast); } function constructOptionTSMappedTypeModifierOperator(pos, ast) { if (ast.buffer[pos] === 3) return null; return constructTSMappedTypeModifierOperator(pos, ast); } function constructBoxTSExternalModuleReference(pos, ast) { return new TSExternalModuleReference(ast.buffer.uint32[pos >> 2], ast); } function constructU64(pos, ast) { const { uint32 } = ast.buffer, pos32 = pos >> 2; return uint32[pos32] + uint32[pos32 + 1] * 4294967296; } function constructOptionNameSpan(pos, ast) { if (ast.buffer.uint32[(pos + 8) >> 2] === 0 && ast.buffer.uint32[(pos + 12) >> 2] === 0) return null; return new NameSpan(pos, ast); } function constructOptionU64(pos, ast) { if (ast.buffer[pos] === 0) return null; return constructU64(pos + 8, ast); } function constructVecError(pos, ast) { const { uint32 } = ast.buffer, pos32 = pos >> 2; return new NodeArray(uint32[pos32], uint32[pos32 + 2], 80, constructError, ast); } function constructError(pos, ast) { return new Error(pos, ast); } function constructVecErrorLabel(pos, ast) { const { uint32 } = ast.buffer, pos32 = pos >> 2; return new NodeArray(uint32[pos32], uint32[pos32 + 2], 24, constructErrorLabel, ast); } function constructErrorLabel(pos, ast) { return new ErrorLabel(pos, ast); } function constructVecStaticImport(pos, ast) { const { uint32 } = ast.buffer, pos32 = pos >> 2; return new NodeArray(uint32[pos32], uint32[pos32 + 2], 56, constructStaticImport, ast); } function constructStaticImport(pos, ast) { return new StaticImport(pos, ast); } function constructVecStaticExport(pos, ast) { const { uint32 } = ast.buffer, pos32 = pos >> 2; return new NodeArray(uint32[pos32], uint32[pos32 + 2], 32, constructStaticExport, ast); } function constructStaticExport(pos, ast) { return new StaticExport(pos, ast); } function constructVecDynamicImport(pos, ast) { const { uint32 } = ast.buffer, pos32 = pos >> 2; return new NodeArray(uint32[pos32], uint32[pos32 + 2], 16, constructDynamicImport, ast); } function constructDynamicImport(pos, ast) { return new DynamicImport(pos, ast); } function constructVecSpan(pos, ast) { const { uint32 } = ast.buffer, pos32 = pos >> 2; return new NodeArray(uint32[pos32], uint32[pos32 + 2], 8, constructSpan, ast); } function constructSpan(pos, ast) { return new Span(pos, ast); } function constructVecImportEntry(pos, ast) { const { uint32 } = ast.buffer, pos32 = pos >> 2; return new NodeArray(uint32[pos32], uint32[pos32 + 2], 96, constructImportEntry, ast); } function constructImportEntry(pos, ast) { return new ImportEntry(pos, ast); } function constructVecExportEntry(pos, ast) { const { uint32 } = ast.buffer, pos32 = pos >> 2; return new NodeArray(uint32[pos32], uint32[pos32 + 2], 144, constructExportEntry, ast); } function constructExportEntry(pos, ast) { return new ExportEntry(pos, ast); }