14176 lines
330 KiB
JavaScript
14176 lines
330 KiB
JavaScript
// 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`.
|
|
|
|
'use strict';
|
|
|
|
const { TOKEN, constructorError } = require('../../raw-transfer/lazy-common.js'),
|
|
NodeArray = require('../../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');
|
|
|
|
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`);
|
|
}
|
|
}
|
|
|
|
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 {};
|
|
|
|
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 {};
|
|
|
|
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 {};
|
|
|
|
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 {};
|
|
|
|
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 {};
|
|
|
|
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`);
|
|
}
|
|
}
|
|
|
|
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 {};
|
|
|
|
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`);
|
|
}
|
|
}
|
|
|
|
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`);
|
|
}
|
|
}
|
|
|
|
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 {};
|
|
|
|
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 {};
|
|
|
|
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 {};
|
|
|
|
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`);
|
|
}
|
|
}
|
|
|
|
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 {};
|
|
|
|
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 {};
|
|
|
|
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 {};
|
|
|
|
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 {};
|
|
|
|
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 {};
|
|
|
|
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 {};
|
|
|
|
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`);
|
|
}
|
|
}
|
|
|
|
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 {};
|
|
|
|
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 {};
|
|
|
|
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 {};
|
|
|
|
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 {};
|
|
|
|
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 {};
|
|
|
|
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 {};
|
|
|
|
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`);
|
|
}
|
|
}
|
|
|
|
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 {};
|
|
|
|
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 {};
|
|
|
|
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`);
|
|
}
|
|
}
|
|
|
|
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`);
|
|
}
|
|
}
|
|
|
|
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 {};
|
|
|
|
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 {};
|
|
|
|
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 {};
|
|
|
|
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 {};
|
|
|
|
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 {};
|
|
|
|
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`);
|
|
}
|
|
}
|
|
|
|
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 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`);
|
|
}
|
|
}
|
|
|
|
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 {};
|
|
|
|
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 {};
|
|
|
|
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 constructBoxTSImportEqualsDeclaration(pos + 8, ast);
|
|
default:
|
|
throw new Error(`Unexpected discriminant ${ast.buffer[pos]} for Declaration`);
|
|
}
|
|
}
|
|
|
|
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`);
|
|
}
|
|
}
|
|
|
|
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 {};
|
|
|
|
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 {};
|
|
|
|
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 {};
|
|
|
|
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 {};
|
|
|
|
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 {};
|
|
|
|
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 {};
|
|
|
|
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`);
|
|
}
|
|
}
|
|
|
|
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`);
|
|
}
|
|
}
|
|
|
|
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 {};
|
|
|
|
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 {};
|
|
|
|
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 {};
|
|
|
|
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 {};
|
|
|
|
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 {};
|
|
|
|
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 {};
|
|
|
|
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 {};
|
|
|
|
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 {};
|
|
|
|
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 {};
|
|
|
|
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 {};
|
|
|
|
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 {};
|
|
|
|
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 {};
|
|
|
|
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 {};
|
|
|
|
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`);
|
|
}
|
|
}
|
|
|
|
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 {};
|
|
|
|
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 {};
|
|
|
|
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 {};
|
|
|
|
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 {};
|
|
|
|
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 {};
|
|
|
|
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`);
|
|
}
|
|
}
|
|
|
|
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 {};
|
|
|
|
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`);
|
|
}
|
|
}
|
|
|
|
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 {};
|
|
|
|
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 {};
|
|
|
|
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 {};
|
|
|
|
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`);
|
|
}
|
|
}
|
|
|
|
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`);
|
|
}
|
|
}
|
|
|
|
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`);
|
|
}
|
|
}
|
|
|
|
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`);
|
|
}
|
|
}
|
|
|
|
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 {};
|
|
|
|
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`);
|
|
}
|
|
}
|
|
|
|
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 {};
|
|
|
|
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 {};
|
|
|
|
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`);
|
|
}
|
|
}
|
|
|
|
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 {};
|
|
|
|
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 {};
|
|
|
|
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 {};
|
|
|
|
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 {};
|
|
|
|
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`);
|
|
}
|
|
}
|
|
|
|
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 {};
|
|
|
|
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 {};
|
|
|
|
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 {};
|
|
|
|
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`);
|
|
}
|
|
}
|
|
|
|
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 {};
|
|
|
|
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 {};
|
|
|
|
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 {};
|
|
|
|
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 {};
|
|
|
|
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 {};
|
|
|
|
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 {};
|
|
|
|
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 {};
|
|
|
|
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 {};
|
|
|
|
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 {};
|
|
|
|
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 {};
|
|
|
|
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 {};
|
|
|
|
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 {};
|
|
|
|
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 {};
|
|
|
|
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 {};
|
|
|
|
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 {};
|
|
|
|
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`);
|
|
}
|
|
}
|
|
|
|
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 {};
|
|
|
|
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`);
|
|
}
|
|
}
|
|
|
|
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`);
|
|
}
|
|
}
|
|
|
|
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`);
|
|
}
|
|
}
|
|
|
|
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 {};
|
|
|
|
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`);
|
|
}
|
|
}
|
|
|
|
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`);
|
|
}
|
|
}
|
|
|
|
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 {};
|
|
|
|
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 {};
|
|
|
|
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 {};
|
|
|
|
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 {};
|
|
|
|
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 {};
|
|
|
|
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`);
|
|
}
|
|
}
|
|
|
|
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 {};
|
|
|
|
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`);
|
|
}
|
|
}
|
|
|
|
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 {};
|
|
|
|
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 {};
|
|
|
|
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 {};
|
|
|
|
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 {};
|
|
|
|
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`);
|
|
}
|
|
}
|
|
|
|
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 {};
|
|
|
|
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 {};
|
|
|
|
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 {};
|
|
|
|
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 {};
|
|
|
|
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 {};
|
|
|
|
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`);
|
|
}
|
|
}
|
|
|
|
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 {};
|
|
|
|
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 {};
|
|
|
|
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 {};
|
|
|
|
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 {};
|
|
|
|
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 {};
|
|
|
|
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 {};
|
|
|
|
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 {};
|
|
|
|
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 {};
|
|
|
|
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 {};
|
|
|
|
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 {};
|
|
|
|
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 {};
|
|
|
|
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 {};
|
|
|
|
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 {};
|
|
|
|
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 {};
|
|
|
|
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`);
|
|
}
|
|
}
|
|
|
|
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 {};
|
|
|
|
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 {};
|
|
|
|
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 {};
|
|
|
|
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 {};
|
|
|
|
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`);
|
|
}
|
|
}
|
|
|
|
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 {};
|
|
|
|
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 {};
|
|
|
|
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 {};
|
|
|
|
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`);
|
|
}
|
|
}
|
|
|
|
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 {};
|
|
|
|
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`);
|
|
}
|
|
}
|
|
|
|
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 {};
|
|
|
|
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 {};
|
|
|
|
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 {};
|
|
|
|
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 {};
|
|
|
|
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`);
|
|
}
|
|
}
|
|
|
|
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 'global';
|
|
case 1:
|
|
return 'module';
|
|
case 2:
|
|
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`);
|
|
}
|
|
}
|
|
|
|
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 {};
|
|
|
|
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 {};
|
|
|
|
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 {};
|
|
|
|
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`);
|
|
}
|
|
}
|
|
|
|
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 argument() {
|
|
const internal = this.#internal;
|
|
return constructTSType(internal.pos + 8, internal.ast);
|
|
}
|
|
|
|
get options() {
|
|
const internal = this.#internal;
|
|
return constructOptionBoxObjectExpression(internal.pos + 24, internal.ast);
|
|
}
|
|
|
|
get qualifier() {
|
|
const internal = this.#internal;
|
|
return constructOptionTSImportTypeQualifier(internal.pos + 32, internal.ast);
|
|
}
|
|
|
|
get typeArguments() {
|
|
const internal = this.#internal;
|
|
return constructOptionBoxTSTypeParameterInstantiation(internal.pos + 48, internal.ast);
|
|
}
|
|
|
|
toJSON() {
|
|
return {
|
|
type: 'TSImportType',
|
|
start: this.start,
|
|
end: this.end,
|
|
argument: this.argument,
|
|
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`);
|
|
}
|
|
}
|
|
|
|
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 {};
|
|
|
|
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 {};
|
|
|
|
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 + 32, 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 {};
|
|
|
|
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`);
|
|
}
|
|
}
|
|
|
|
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 {};
|
|
|
|
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 {};
|
|
|
|
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 {};
|
|
|
|
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 {};
|
|
|
|
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`);
|
|
}
|
|
}
|
|
|
|
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 {};
|
|
|
|
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 {};
|
|
|
|
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 {};
|
|
|
|
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 {};
|
|
|
|
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 {};
|
|
|
|
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`);
|
|
}
|
|
}
|
|
|
|
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 {};
|
|
|
|
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 {};
|
|
|
|
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`);
|
|
}
|
|
}
|
|
|
|
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 {};
|
|
|
|
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 {};
|
|
|
|
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`);
|
|
}
|
|
}
|
|
|
|
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`);
|
|
}
|
|
}
|
|
|
|
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`);
|
|
}
|
|
}
|
|
|
|
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 {};
|
|
|
|
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`);
|
|
}
|
|
}
|
|
|
|
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 {};
|
|
|
|
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`);
|
|
}
|
|
}
|
|
|
|
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 {};
|
|
|
|
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 {};
|
|
|
|
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 {};
|
|
|
|
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 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);
|
|
}
|
|
|
|
module.exports = {
|
|
Program,
|
|
IdentifierName,
|
|
IdentifierReference,
|
|
BindingIdentifier,
|
|
LabelIdentifier,
|
|
ThisExpression,
|
|
ArrayExpression,
|
|
Elision,
|
|
ObjectExpression,
|
|
ObjectProperty,
|
|
TemplateLiteral,
|
|
TaggedTemplateExpression,
|
|
TemplateElement,
|
|
TemplateElementValue,
|
|
ComputedMemberExpression,
|
|
StaticMemberExpression,
|
|
PrivateFieldExpression,
|
|
CallExpression,
|
|
NewExpression,
|
|
MetaProperty,
|
|
SpreadElement,
|
|
UpdateExpression,
|
|
UnaryExpression,
|
|
BinaryExpression,
|
|
PrivateInExpression,
|
|
LogicalExpression,
|
|
ConditionalExpression,
|
|
AssignmentExpression,
|
|
ArrayAssignmentTarget,
|
|
ObjectAssignmentTarget,
|
|
AssignmentTargetRest,
|
|
AssignmentTargetWithDefault,
|
|
AssignmentTargetPropertyIdentifier,
|
|
AssignmentTargetPropertyProperty,
|
|
SequenceExpression,
|
|
Super,
|
|
AwaitExpression,
|
|
ChainExpression,
|
|
ParenthesizedExpression,
|
|
Directive,
|
|
Hashbang,
|
|
BlockStatement,
|
|
VariableDeclaration,
|
|
VariableDeclarator,
|
|
EmptyStatement,
|
|
ExpressionStatement,
|
|
IfStatement,
|
|
DoWhileStatement,
|
|
WhileStatement,
|
|
ForStatement,
|
|
ForInStatement,
|
|
ForOfStatement,
|
|
ContinueStatement,
|
|
BreakStatement,
|
|
ReturnStatement,
|
|
WithStatement,
|
|
SwitchStatement,
|
|
SwitchCase,
|
|
LabeledStatement,
|
|
ThrowStatement,
|
|
TryStatement,
|
|
CatchClause,
|
|
CatchParameter,
|
|
DebuggerStatement,
|
|
BindingPattern,
|
|
AssignmentPattern,
|
|
ObjectPattern,
|
|
BindingProperty,
|
|
ArrayPattern,
|
|
BindingRestElement,
|
|
Function,
|
|
FormalParameters,
|
|
FormalParameter,
|
|
FunctionBody,
|
|
ArrowFunctionExpression,
|
|
YieldExpression,
|
|
Class,
|
|
ClassBody,
|
|
MethodDefinition,
|
|
PropertyDefinition,
|
|
PrivateIdentifier,
|
|
StaticBlock,
|
|
AccessorProperty,
|
|
ImportExpression,
|
|
ImportDeclaration,
|
|
ImportSpecifier,
|
|
ImportDefaultSpecifier,
|
|
ImportNamespaceSpecifier,
|
|
WithClause,
|
|
ImportAttribute,
|
|
ExportNamedDeclaration,
|
|
ExportDefaultDeclaration,
|
|
ExportAllDeclaration,
|
|
ExportSpecifier,
|
|
V8IntrinsicExpression,
|
|
BooleanLiteral,
|
|
NullLiteral,
|
|
NumericLiteral,
|
|
StringLiteral,
|
|
BigIntLiteral,
|
|
RegExpLiteral,
|
|
RegExp,
|
|
RegExpPattern,
|
|
RegExpFlags,
|
|
JSXElement,
|
|
JSXOpeningElement,
|
|
JSXClosingElement,
|
|
JSXFragment,
|
|
JSXOpeningFragment,
|
|
JSXClosingFragment,
|
|
JSXNamespacedName,
|
|
JSXMemberExpression,
|
|
JSXExpressionContainer,
|
|
JSXEmptyExpression,
|
|
JSXAttribute,
|
|
JSXSpreadAttribute,
|
|
JSXIdentifier,
|
|
JSXSpreadChild,
|
|
JSXText,
|
|
TSThisParameter,
|
|
TSEnumDeclaration,
|
|
TSEnumBody,
|
|
TSEnumMember,
|
|
TSTypeAnnotation,
|
|
TSLiteralType,
|
|
TSConditionalType,
|
|
TSUnionType,
|
|
TSIntersectionType,
|
|
TSParenthesizedType,
|
|
TSTypeOperator,
|
|
TSArrayType,
|
|
TSIndexedAccessType,
|
|
TSTupleType,
|
|
TSNamedTupleMember,
|
|
TSOptionalType,
|
|
TSRestType,
|
|
TSAnyKeyword,
|
|
TSStringKeyword,
|
|
TSBooleanKeyword,
|
|
TSNumberKeyword,
|
|
TSNeverKeyword,
|
|
TSIntrinsicKeyword,
|
|
TSUnknownKeyword,
|
|
TSNullKeyword,
|
|
TSUndefinedKeyword,
|
|
TSVoidKeyword,
|
|
TSSymbolKeyword,
|
|
TSThisType,
|
|
TSObjectKeyword,
|
|
TSBigIntKeyword,
|
|
TSTypeReference,
|
|
TSQualifiedName,
|
|
TSTypeParameterInstantiation,
|
|
TSTypeParameter,
|
|
TSTypeParameterDeclaration,
|
|
TSTypeAliasDeclaration,
|
|
TSClassImplements,
|
|
TSInterfaceDeclaration,
|
|
TSInterfaceBody,
|
|
TSPropertySignature,
|
|
TSIndexSignature,
|
|
TSCallSignatureDeclaration,
|
|
TSMethodSignature,
|
|
TSConstructSignatureDeclaration,
|
|
TSIndexSignatureName,
|
|
TSInterfaceHeritage,
|
|
TSTypePredicate,
|
|
TSModuleDeclaration,
|
|
TSModuleBlock,
|
|
TSTypeLiteral,
|
|
TSInferType,
|
|
TSTypeQuery,
|
|
TSImportType,
|
|
TSImportTypeQualifiedName,
|
|
TSFunctionType,
|
|
TSConstructorType,
|
|
TSMappedType,
|
|
TSTemplateLiteralType,
|
|
TSAsExpression,
|
|
TSSatisfiesExpression,
|
|
TSTypeAssertion,
|
|
TSImportEqualsDeclaration,
|
|
TSExternalModuleReference,
|
|
TSNonNullExpression,
|
|
Decorator,
|
|
TSExportAssignment,
|
|
TSNamespaceExportDeclaration,
|
|
TSInstantiationExpression,
|
|
JSDocNullableType,
|
|
JSDocNonNullableType,
|
|
JSDocUnknownType,
|
|
Comment,
|
|
NameSpan,
|
|
ImportEntry,
|
|
ExportEntry,
|
|
DynamicImport,
|
|
Span,
|
|
SourceType,
|
|
RawTransferData,
|
|
Error,
|
|
ErrorLabel,
|
|
EcmaScriptModule,
|
|
StaticImport,
|
|
StaticExport,
|
|
};
|