UNPKG

oxc-parser

Version:

Oxc Parser Node API

1,907 lines (1,728 loc) 150 kB
// Auto-generated code, DO NOT EDIT DIRECTLY! // To edit this generated file you have to edit `tasks/ast_tools/src/generators/raw_transfer.rs`. 'use strict'; module.exports = deserialize; let uint8, uint32, float64, sourceText, sourceIsAscii, sourceLen; const textDecoder = new TextDecoder('utf-8', { ignoreBOM: true }), decodeStr = textDecoder.decode.bind(textDecoder), { fromCodePoint } = String; function deserialize(buffer, sourceTextInput, sourceLenInput) { uint8 = buffer; uint32 = buffer.uint32; float64 = buffer.float64; sourceText = sourceTextInput; sourceLen = sourceLenInput; sourceIsAscii = sourceText.length === sourceLen; // (2 * 1024 * 1024 * 1024 - 16) >> 2 const metadataPos32 = 536870908; const data = deserializeRawTransferData(uint32[metadataPos32]); uint8 = uint32 = float64 = sourceText = undefined; return data; } function deserializeProgram(pos) { const body = deserializeVecDirective(pos + 72); body.push(...deserializeVecStatement(pos + 96)); const end = deserializeU32(pos + 4); let start; if (body.length > 0) { const first = body[0]; start = first.start; if (first.type === 'ExportNamedDeclaration' || first.type === 'ExportDefaultDeclaration') { const { declaration } = first; if ( declaration !== null && declaration.type === 'ClassDeclaration' && declaration.decorators.length > 0 ) { const decoratorStart = declaration.decorators[0].start; if (decoratorStart < start) start = decoratorStart; } } } else { start = end; } const program = { type: 'Program', start, end, body, sourceType: deserializeModuleKind(pos + 125), hashbang: deserializeOptionHashbang(pos + 48), }; return program; } function deserializeIdentifierName(pos) { return { type: 'Identifier', start: deserializeU32(pos), end: deserializeU32(pos + 4), decorators: [], name: deserializeStr(pos + 8), optional: false, typeAnnotation: null, }; } function deserializeIdentifierReference(pos) { return { type: 'Identifier', start: deserializeU32(pos), end: deserializeU32(pos + 4), decorators: [], name: deserializeStr(pos + 8), optional: false, typeAnnotation: null, }; } function deserializeBindingIdentifier(pos) { return { type: 'Identifier', start: deserializeU32(pos), end: deserializeU32(pos + 4), decorators: [], name: deserializeStr(pos + 8), optional: false, typeAnnotation: null, }; } function deserializeLabelIdentifier(pos) { return { type: 'Identifier', start: deserializeU32(pos), end: deserializeU32(pos + 4), decorators: [], name: deserializeStr(pos + 8), optional: false, typeAnnotation: null, }; } function deserializeThisExpression(pos) { return { type: 'ThisExpression', start: deserializeU32(pos), end: deserializeU32(pos + 4), }; } function deserializeArrayExpression(pos) { return { type: 'ArrayExpression', start: deserializeU32(pos), end: deserializeU32(pos + 4), elements: deserializeVecArrayExpressionElement(pos + 8), }; } function deserializeElision(pos) { return null; } function deserializeObjectExpression(pos) { return { type: 'ObjectExpression', start: deserializeU32(pos), end: deserializeU32(pos + 4), properties: deserializeVecObjectPropertyKind(pos + 8), }; } function deserializeObjectProperty(pos) { return { type: 'Property', start: deserializeU32(pos), end: deserializeU32(pos + 4), kind: deserializePropertyKind(pos + 40), key: deserializePropertyKey(pos + 8), value: deserializeExpression(pos + 24), method: deserializeBool(pos + 41), shorthand: deserializeBool(pos + 42), computed: deserializeBool(pos + 43), optional: false, }; } function deserializeTemplateLiteral(pos) { return { type: 'TemplateLiteral', start: deserializeU32(pos), end: deserializeU32(pos + 4), quasis: deserializeVecTemplateElement(pos + 8), expressions: deserializeVecExpression(pos + 32), }; } function deserializeTaggedTemplateExpression(pos) { return { type: 'TaggedTemplateExpression', start: deserializeU32(pos), end: deserializeU32(pos + 4), tag: deserializeExpression(pos + 8), typeArguments: deserializeOptionBoxTSTypeParameterInstantiation(pos + 24), quasi: deserializeTemplateLiteral(pos + 32), }; } function deserializeTemplateElement(pos) { const tail = deserializeBool(pos + 40), start = deserializeU32(pos) - 1, end = deserializeU32(pos + 4) + 2 - tail, value = deserializeTemplateElementValue(pos + 8); if (value.cooked !== null && deserializeBool(pos + 41)) { value.cooked = value.cooked .replace(/\uFFFD(.{4})/g, (_, hex) => String.fromCodePoint(parseInt(hex, 16))); } return { type: 'TemplateElement', start, end, value, tail }; } function deserializeTemplateElementValue(pos) { return { raw: deserializeStr(pos), cooked: deserializeOptionStr(pos + 16), }; } function deserializeComputedMemberExpression(pos) { return { type: 'MemberExpression', start: deserializeU32(pos), end: deserializeU32(pos + 4), object: deserializeExpression(pos + 8), property: deserializeExpression(pos + 24), optional: deserializeBool(pos + 40), computed: true, }; } function deserializeStaticMemberExpression(pos) { return { type: 'MemberExpression', start: deserializeU32(pos), end: deserializeU32(pos + 4), object: deserializeExpression(pos + 8), property: deserializeIdentifierName(pos + 24), optional: deserializeBool(pos + 48), computed: false, }; } function deserializePrivateFieldExpression(pos) { return { type: 'MemberExpression', start: deserializeU32(pos), end: deserializeU32(pos + 4), object: deserializeExpression(pos + 8), property: deserializePrivateIdentifier(pos + 24), optional: deserializeBool(pos + 48), computed: false, }; } function deserializeCallExpression(pos) { return { type: 'CallExpression', start: deserializeU32(pos), end: deserializeU32(pos + 4), callee: deserializeExpression(pos + 8), typeArguments: deserializeOptionBoxTSTypeParameterInstantiation(pos + 24), arguments: deserializeVecArgument(pos + 32), optional: deserializeBool(pos + 56), }; } function deserializeNewExpression(pos) { return { type: 'NewExpression', start: deserializeU32(pos), end: deserializeU32(pos + 4), callee: deserializeExpression(pos + 8), typeArguments: deserializeOptionBoxTSTypeParameterInstantiation(pos + 24), arguments: deserializeVecArgument(pos + 32), }; } function deserializeMetaProperty(pos) { return { type: 'MetaProperty', start: deserializeU32(pos), end: deserializeU32(pos + 4), meta: deserializeIdentifierName(pos + 8), property: deserializeIdentifierName(pos + 32), }; } function deserializeSpreadElement(pos) { return { type: 'SpreadElement', start: deserializeU32(pos), end: deserializeU32(pos + 4), argument: deserializeExpression(pos + 8), }; } function deserializeUpdateExpression(pos) { return { type: 'UpdateExpression', start: deserializeU32(pos), end: deserializeU32(pos + 4), operator: deserializeUpdateOperator(pos + 24), prefix: deserializeBool(pos + 25), argument: deserializeSimpleAssignmentTarget(pos + 8), }; } function deserializeUnaryExpression(pos) { return { type: 'UnaryExpression', start: deserializeU32(pos), end: deserializeU32(pos + 4), operator: deserializeUnaryOperator(pos + 24), argument: deserializeExpression(pos + 8), prefix: true, }; } function deserializeBinaryExpression(pos) { return { type: 'BinaryExpression', start: deserializeU32(pos), end: deserializeU32(pos + 4), left: deserializeExpression(pos + 8), operator: deserializeBinaryOperator(pos + 40), right: deserializeExpression(pos + 24), }; } function deserializePrivateInExpression(pos) { return { type: 'BinaryExpression', start: deserializeU32(pos), end: deserializeU32(pos + 4), left: deserializePrivateIdentifier(pos + 8), operator: 'in', right: deserializeExpression(pos + 32), }; } function deserializeLogicalExpression(pos) { return { type: 'LogicalExpression', start: deserializeU32(pos), end: deserializeU32(pos + 4), left: deserializeExpression(pos + 8), operator: deserializeLogicalOperator(pos + 40), right: deserializeExpression(pos + 24), }; } function deserializeConditionalExpression(pos) { return { type: 'ConditionalExpression', start: deserializeU32(pos), end: deserializeU32(pos + 4), test: deserializeExpression(pos + 8), consequent: deserializeExpression(pos + 24), alternate: deserializeExpression(pos + 40), }; } function deserializeAssignmentExpression(pos) { return { type: 'AssignmentExpression', start: deserializeU32(pos), end: deserializeU32(pos + 4), operator: deserializeAssignmentOperator(pos + 40), left: deserializeAssignmentTarget(pos + 8), right: deserializeExpression(pos + 24), }; } function deserializeArrayAssignmentTarget(pos) { const elements = deserializeVecOptionAssignmentTargetMaybeDefault(pos + 8); const rest = deserializeOptionAssignmentTargetRest(pos + 32); if (rest !== null) elements.push(rest); return { type: 'ArrayPattern', start: deserializeU32(pos), end: deserializeU32(pos + 4), decorators: [], elements, optional: false, typeAnnotation: null, }; } function deserializeObjectAssignmentTarget(pos) { const properties = deserializeVecAssignmentTargetProperty(pos + 8); const rest = deserializeOptionAssignmentTargetRest(pos + 32); if (rest !== null) properties.push(rest); return { type: 'ObjectPattern', start: deserializeU32(pos), end: deserializeU32(pos + 4), decorators: [], properties, optional: false, typeAnnotation: null, }; } function deserializeAssignmentTargetRest(pos) { return { type: 'RestElement', start: deserializeU32(pos), end: deserializeU32(pos + 4), decorators: [], argument: deserializeAssignmentTarget(pos + 8), optional: false, typeAnnotation: null, value: null, }; } function deserializeAssignmentTargetWithDefault(pos) { return { type: 'AssignmentPattern', start: deserializeU32(pos), end: deserializeU32(pos + 4), decorators: [], left: deserializeAssignmentTarget(pos + 8), right: deserializeExpression(pos + 24), optional: false, typeAnnotation: null, }; } function deserializeAssignmentTargetPropertyIdentifier(pos) { const start = deserializeU32(pos), end = deserializeU32(pos + 4), key = deserializeIdentifierReference(pos + 8); const init = deserializeOptionExpression(pos + 40), keyCopy = { ...key }, value = init === null ? keyCopy : { type: 'AssignmentPattern', start: start, end: end, decorators: [], left: keyCopy, right: init, optional: false, typeAnnotation: null, }; return { type: 'Property', start, end, kind: 'init', key, value, method: false, shorthand: true, computed: false, optional: false, }; } function deserializeAssignmentTargetPropertyProperty(pos) { return { type: 'Property', start: deserializeU32(pos), end: deserializeU32(pos + 4), kind: 'init', key: deserializePropertyKey(pos + 8), value: deserializeAssignmentTargetMaybeDefault(pos + 24), method: false, shorthand: false, computed: deserializeBool(pos + 40), optional: false, }; } function deserializeSequenceExpression(pos) { return { type: 'SequenceExpression', start: deserializeU32(pos), end: deserializeU32(pos + 4), expressions: deserializeVecExpression(pos + 8), }; } function deserializeSuper(pos) { return { type: 'Super', start: deserializeU32(pos), end: deserializeU32(pos + 4), }; } function deserializeAwaitExpression(pos) { return { type: 'AwaitExpression', start: deserializeU32(pos), end: deserializeU32(pos + 4), argument: deserializeExpression(pos + 8), }; } function deserializeChainExpression(pos) { return { type: 'ChainExpression', start: deserializeU32(pos), end: deserializeU32(pos + 4), expression: deserializeChainElement(pos + 8), }; } function deserializeParenthesizedExpression(pos) { return { type: 'ParenthesizedExpression', start: deserializeU32(pos), end: deserializeU32(pos + 4), expression: deserializeExpression(pos + 8), }; } function deserializeDirective(pos) { return { type: 'ExpressionStatement', start: deserializeU32(pos), end: deserializeU32(pos + 4), expression: deserializeStringLiteral(pos + 8), directive: deserializeStr(pos + 56), }; } function deserializeHashbang(pos) { return { type: 'Hashbang', start: deserializeU32(pos), end: deserializeU32(pos + 4), value: deserializeStr(pos + 8), }; } function deserializeBlockStatement(pos) { return { type: 'BlockStatement', start: deserializeU32(pos), end: deserializeU32(pos + 4), body: deserializeVecStatement(pos + 8), }; } function deserializeVariableDeclaration(pos) { return { type: 'VariableDeclaration', start: deserializeU32(pos), end: deserializeU32(pos + 4), kind: deserializeVariableDeclarationKind(pos + 32), declarations: deserializeVecVariableDeclarator(pos + 8), declare: deserializeBool(pos + 33), }; } function deserializeVariableDeclarator(pos) { return { type: 'VariableDeclarator', start: deserializeU32(pos), end: deserializeU32(pos + 4), id: deserializeBindingPattern(pos + 8), init: deserializeOptionExpression(pos + 40), definite: deserializeBool(pos + 57), }; } function deserializeEmptyStatement(pos) { return { type: 'EmptyStatement', start: deserializeU32(pos), end: deserializeU32(pos + 4), }; } function deserializeExpressionStatement(pos) { return { type: 'ExpressionStatement', start: deserializeU32(pos), end: deserializeU32(pos + 4), expression: deserializeExpression(pos + 8), directive: null, }; } function deserializeIfStatement(pos) { return { type: 'IfStatement', start: deserializeU32(pos), end: deserializeU32(pos + 4), test: deserializeExpression(pos + 8), consequent: deserializeStatement(pos + 24), alternate: deserializeOptionStatement(pos + 40), }; } function deserializeDoWhileStatement(pos) { return { type: 'DoWhileStatement', start: deserializeU32(pos), end: deserializeU32(pos + 4), body: deserializeStatement(pos + 8), test: deserializeExpression(pos + 24), }; } function deserializeWhileStatement(pos) { return { type: 'WhileStatement', start: deserializeU32(pos), end: deserializeU32(pos + 4), test: deserializeExpression(pos + 8), body: deserializeStatement(pos + 24), }; } function deserializeForStatement(pos) { return { type: 'ForStatement', start: deserializeU32(pos), end: deserializeU32(pos + 4), init: deserializeOptionForStatementInit(pos + 8), test: deserializeOptionExpression(pos + 24), update: deserializeOptionExpression(pos + 40), body: deserializeStatement(pos + 56), }; } function deserializeForInStatement(pos) { return { type: 'ForInStatement', start: deserializeU32(pos), end: deserializeU32(pos + 4), left: deserializeForStatementLeft(pos + 8), right: deserializeExpression(pos + 24), body: deserializeStatement(pos + 40), }; } function deserializeForOfStatement(pos) { return { type: 'ForOfStatement', start: deserializeU32(pos), end: deserializeU32(pos + 4), await: deserializeBool(pos + 60), left: deserializeForStatementLeft(pos + 8), right: deserializeExpression(pos + 24), body: deserializeStatement(pos + 40), }; } function deserializeContinueStatement(pos) { return { type: 'ContinueStatement', start: deserializeU32(pos), end: deserializeU32(pos + 4), label: deserializeOptionLabelIdentifier(pos + 8), }; } function deserializeBreakStatement(pos) { return { type: 'BreakStatement', start: deserializeU32(pos), end: deserializeU32(pos + 4), label: deserializeOptionLabelIdentifier(pos + 8), }; } function deserializeReturnStatement(pos) { return { type: 'ReturnStatement', start: deserializeU32(pos), end: deserializeU32(pos + 4), argument: deserializeOptionExpression(pos + 8), }; } function deserializeWithStatement(pos) { return { type: 'WithStatement', start: deserializeU32(pos), end: deserializeU32(pos + 4), object: deserializeExpression(pos + 8), body: deserializeStatement(pos + 24), }; } function deserializeSwitchStatement(pos) { return { type: 'SwitchStatement', start: deserializeU32(pos), end: deserializeU32(pos + 4), discriminant: deserializeExpression(pos + 8), cases: deserializeVecSwitchCase(pos + 24), }; } function deserializeSwitchCase(pos) { return { type: 'SwitchCase', start: deserializeU32(pos), end: deserializeU32(pos + 4), test: deserializeOptionExpression(pos + 8), consequent: deserializeVecStatement(pos + 24), }; } function deserializeLabeledStatement(pos) { return { type: 'LabeledStatement', start: deserializeU32(pos), end: deserializeU32(pos + 4), label: deserializeLabelIdentifier(pos + 8), body: deserializeStatement(pos + 32), }; } function deserializeThrowStatement(pos) { return { type: 'ThrowStatement', start: deserializeU32(pos), end: deserializeU32(pos + 4), argument: deserializeExpression(pos + 8), }; } function deserializeTryStatement(pos) { return { type: 'TryStatement', start: deserializeU32(pos), end: deserializeU32(pos + 4), block: deserializeBoxBlockStatement(pos + 8), handler: deserializeOptionBoxCatchClause(pos + 16), finalizer: deserializeOptionBoxBlockStatement(pos + 24), }; } function deserializeCatchClause(pos) { return { type: 'CatchClause', start: deserializeU32(pos), end: deserializeU32(pos + 4), param: deserializeOptionCatchParameter(pos + 8), body: deserializeBoxBlockStatement(pos + 48), }; } function deserializeCatchParameter(pos) { return deserializeBindingPattern(pos + 8); } function deserializeDebuggerStatement(pos) { return { type: 'DebuggerStatement', start: deserializeU32(pos), end: deserializeU32(pos + 4), }; } function deserializeBindingPattern(pos) { const pattern = deserializeBindingPatternKind(pos); pattern.optional = deserializeBool(pos + 24); pattern.typeAnnotation = deserializeOptionBoxTSTypeAnnotation(pos + 16); return pattern; } function deserializeAssignmentPattern(pos) { return { type: 'AssignmentPattern', start: deserializeU32(pos), end: deserializeU32(pos + 4), decorators: [], left: deserializeBindingPattern(pos + 8), right: deserializeExpression(pos + 40), optional: false, typeAnnotation: null, }; } function deserializeObjectPattern(pos) { const properties = deserializeVecBindingProperty(pos + 8); const rest = deserializeOptionBoxBindingRestElement(pos + 32); if (rest !== null) properties.push(rest); return { type: 'ObjectPattern', start: deserializeU32(pos), end: deserializeU32(pos + 4), decorators: [], properties, optional: false, typeAnnotation: null, }; } function deserializeBindingProperty(pos) { return { type: 'Property', start: deserializeU32(pos), end: deserializeU32(pos + 4), kind: 'init', key: deserializePropertyKey(pos + 8), value: deserializeBindingPattern(pos + 24), method: false, shorthand: deserializeBool(pos + 56), computed: deserializeBool(pos + 57), optional: false, }; } function deserializeArrayPattern(pos) { const elements = deserializeVecOptionBindingPattern(pos + 8); const rest = deserializeOptionBoxBindingRestElement(pos + 32); if (rest !== null) elements.push(rest); return { type: 'ArrayPattern', start: deserializeU32(pos), end: deserializeU32(pos + 4), decorators: [], elements, optional: false, typeAnnotation: null, }; } function deserializeBindingRestElement(pos) { return { type: 'RestElement', start: deserializeU32(pos), end: deserializeU32(pos + 4), decorators: [], argument: deserializeBindingPattern(pos + 8), optional: false, typeAnnotation: null, value: null, }; } function deserializeFunction(pos) { const params = deserializeBoxFormalParameters(pos + 56); const thisParam = deserializeOptionBoxTSThisParameter(pos + 48); if (thisParam !== null) params.unshift(thisParam); return { type: deserializeFunctionType(pos + 84), start: deserializeU32(pos), end: deserializeU32(pos + 4), id: deserializeOptionBindingIdentifier(pos + 8), generator: deserializeBool(pos + 85), async: deserializeBool(pos + 86), declare: deserializeBool(pos + 87), typeParameters: deserializeOptionBoxTSTypeParameterDeclaration(pos + 40), params, returnType: deserializeOptionBoxTSTypeAnnotation(pos + 64), body: deserializeOptionBoxFunctionBody(pos + 72), expression: false, }; } function deserializeFormalParameters(pos) { const params = deserializeVecFormalParameter(pos + 8); if (uint32[(pos + 32) >> 2] !== 0 && uint32[(pos + 36) >> 2] !== 0) { pos = uint32[(pos + 32) >> 2]; params.push({ type: 'RestElement', start: deserializeU32(pos), end: deserializeU32(pos + 4), decorators: [], argument: deserializeBindingPatternKind(pos + 8), optional: deserializeBool(pos + 32), typeAnnotation: deserializeOptionBoxTSTypeAnnotation( pos + 24, ), value: null, }); } return params; } function deserializeFormalParameter(pos) { const accessibility = deserializeOptionTSAccessibility(pos + 64), readonly = deserializeBool(pos + 65), override = deserializeBool(pos + 66); let param; if (accessibility === null && !readonly && !override) { param = deserializeBindingPatternKind(pos + 32); param.decorators = deserializeVecDecorator(pos + 8); param.optional = deserializeBool(pos + 56); param.typeAnnotation = deserializeOptionBoxTSTypeAnnotation(pos + 48); } else { param = { type: 'TSParameterProperty', start: deserializeU32(pos), end: deserializeU32(pos + 4), accessibility, decorators: deserializeVecDecorator(pos + 8), override, parameter: deserializeBindingPattern(pos + 32), readonly, static: false, }; } return param; } function deserializeFunctionBody(pos) { const body = deserializeVecDirective(pos + 8); body.push(...deserializeVecStatement(pos + 32)); return { type: 'BlockStatement', start: deserializeU32(pos), end: deserializeU32(pos + 4), body, }; } function deserializeArrowFunctionExpression(pos) { const expression = deserializeBool(pos + 44); let body = deserializeBoxFunctionBody(pos + 32); return { type: 'ArrowFunctionExpression', start: deserializeU32(pos), end: deserializeU32(pos + 4), expression, async: deserializeBool(pos + 45), typeParameters: deserializeOptionBoxTSTypeParameterDeclaration(pos + 8), params: deserializeBoxFormalParameters(pos + 16), returnType: deserializeOptionBoxTSTypeAnnotation(pos + 24), body: expression ? body.body[0].expression : body, id: null, generator: false, }; } function deserializeYieldExpression(pos) { return { type: 'YieldExpression', start: deserializeU32(pos), end: deserializeU32(pos + 4), delegate: deserializeBool(pos + 24), argument: deserializeOptionExpression(pos + 8), }; } function deserializeClass(pos) { return { type: deserializeClassType(pos + 132), start: deserializeU32(pos), end: deserializeU32(pos + 4), decorators: deserializeVecDecorator(pos + 8), id: deserializeOptionBindingIdentifier(pos + 32), typeParameters: deserializeOptionBoxTSTypeParameterDeclaration(pos + 64), superClass: deserializeOptionExpression(pos + 72), superTypeArguments: deserializeOptionBoxTSTypeParameterInstantiation(pos + 88), implements: deserializeVecTSClassImplements(pos + 96), body: deserializeBoxClassBody(pos + 120), abstract: deserializeBool(pos + 133), declare: deserializeBool(pos + 134), }; } function deserializeClassBody(pos) { return { type: 'ClassBody', start: deserializeU32(pos), end: deserializeU32(pos + 4), body: deserializeVecClassElement(pos + 8), }; } function deserializeMethodDefinition(pos) { return { type: deserializeMethodDefinitionType(pos + 56), start: deserializeU32(pos), end: deserializeU32(pos + 4), decorators: deserializeVecDecorator(pos + 8), key: deserializePropertyKey(pos + 32), value: deserializeBoxFunction(pos + 48), kind: deserializeMethodDefinitionKind(pos + 57), computed: deserializeBool(pos + 58), static: deserializeBool(pos + 59), override: deserializeBool(pos + 60), optional: deserializeBool(pos + 61), accessibility: deserializeOptionTSAccessibility(pos + 62), }; } function deserializePropertyDefinition(pos) { return { type: deserializePropertyDefinitionType(pos + 72), start: deserializeU32(pos), end: deserializeU32(pos + 4), decorators: deserializeVecDecorator(pos + 8), key: deserializePropertyKey(pos + 32), typeAnnotation: deserializeOptionBoxTSTypeAnnotation(pos + 48), value: deserializeOptionExpression(pos + 56), computed: deserializeBool(pos + 73), static: deserializeBool(pos + 74), declare: deserializeBool(pos + 75), override: deserializeBool(pos + 76), optional: deserializeBool(pos + 77), definite: deserializeBool(pos + 78), readonly: deserializeBool(pos + 79), accessibility: deserializeOptionTSAccessibility(pos + 80), }; } function deserializePrivateIdentifier(pos) { return { type: 'PrivateIdentifier', start: deserializeU32(pos), end: deserializeU32(pos + 4), name: deserializeStr(pos + 8), }; } function deserializeStaticBlock(pos) { return { type: 'StaticBlock', start: deserializeU32(pos), end: deserializeU32(pos + 4), body: deserializeVecStatement(pos + 8), }; } function deserializeAccessorProperty(pos) { return { type: deserializeAccessorPropertyType(pos + 72), start: deserializeU32(pos), end: deserializeU32(pos + 4), decorators: deserializeVecDecorator(pos + 8), key: deserializePropertyKey(pos + 32), typeAnnotation: deserializeOptionBoxTSTypeAnnotation(pos + 48), value: deserializeOptionExpression(pos + 56), computed: deserializeBool(pos + 73), static: deserializeBool(pos + 74), override: deserializeBool(pos + 75), definite: deserializeBool(pos + 76), accessibility: deserializeOptionTSAccessibility(pos + 77), declare: false, optional: false, readonly: false, }; } function deserializeImportExpression(pos) { return { type: 'ImportExpression', start: deserializeU32(pos), end: deserializeU32(pos + 4), source: deserializeExpression(pos + 8), options: deserializeOptionExpression(pos + 24), phase: deserializeOptionImportPhase(pos + 40), }; } function deserializeImportDeclaration(pos) { let specifiers = deserializeOptionVecImportDeclarationSpecifier(pos + 8); if (specifiers === null) specifiers = []; const withClause = deserializeOptionBoxWithClause(pos + 80); return { type: 'ImportDeclaration', start: deserializeU32(pos), end: deserializeU32(pos + 4), specifiers, source: deserializeStringLiteral(pos + 32), phase: deserializeOptionImportPhase(pos + 88), attributes: withClause === null ? [] : withClause.attributes, importKind: deserializeImportOrExportKind(pos + 89), }; } function deserializeImportSpecifier(pos) { return { type: 'ImportSpecifier', start: deserializeU32(pos), end: deserializeU32(pos + 4), imported: deserializeModuleExportName(pos + 8), local: deserializeBindingIdentifier(pos + 64), importKind: deserializeImportOrExportKind(pos + 96), }; } function deserializeImportDefaultSpecifier(pos) { return { type: 'ImportDefaultSpecifier', start: deserializeU32(pos), end: deserializeU32(pos + 4), local: deserializeBindingIdentifier(pos + 8), }; } function deserializeImportNamespaceSpecifier(pos) { return { type: 'ImportNamespaceSpecifier', start: deserializeU32(pos), end: deserializeU32(pos + 4), local: deserializeBindingIdentifier(pos + 8), }; } function deserializeWithClause(pos) { return { attributes: deserializeVecImportAttribute(pos + 32), }; } function deserializeImportAttribute(pos) { return { type: 'ImportAttribute', start: deserializeU32(pos), end: deserializeU32(pos + 4), key: deserializeImportAttributeKey(pos + 8), value: deserializeStringLiteral(pos + 64), }; } function deserializeExportNamedDeclaration(pos) { const withClause = deserializeOptionBoxWithClause(pos + 96); return { type: 'ExportNamedDeclaration', start: deserializeU32(pos), end: deserializeU32(pos + 4), declaration: deserializeOptionDeclaration(pos + 8), specifiers: deserializeVecExportSpecifier(pos + 24), source: deserializeOptionStringLiteral(pos + 48), exportKind: deserializeImportOrExportKind(pos + 104), attributes: withClause === null ? [] : withClause.attributes, }; } function deserializeExportDefaultDeclaration(pos) { return { type: 'ExportDefaultDeclaration', start: deserializeU32(pos), end: deserializeU32(pos + 4), declaration: deserializeExportDefaultDeclarationKind(pos + 64), exportKind: 'value', }; } function deserializeExportAllDeclaration(pos) { const withClause = deserializeOptionBoxWithClause(pos + 112); return { type: 'ExportAllDeclaration', start: deserializeU32(pos), end: deserializeU32(pos + 4), exported: deserializeOptionModuleExportName(pos + 8), source: deserializeStringLiteral(pos + 64), attributes: withClause === null ? [] : withClause.attributes, exportKind: deserializeImportOrExportKind(pos + 120), }; } function deserializeExportSpecifier(pos) { return { type: 'ExportSpecifier', start: deserializeU32(pos), end: deserializeU32(pos + 4), local: deserializeModuleExportName(pos + 8), exported: deserializeModuleExportName(pos + 64), exportKind: deserializeImportOrExportKind(pos + 120), }; } function deserializeV8IntrinsicExpression(pos) { return { type: 'V8IntrinsicExpression', start: deserializeU32(pos), end: deserializeU32(pos + 4), name: deserializeIdentifierName(pos + 8), arguments: deserializeVecArgument(pos + 32), }; } function deserializeBooleanLiteral(pos) { const start = deserializeU32(pos), end = deserializeU32(pos + 4), value = deserializeBool(pos + 8); return { type: 'Literal', start, end, value, raw: (start === 0 && end === 0) ? null : value + '', }; } function deserializeNullLiteral(pos) { const start = deserializeU32(pos), end = deserializeU32(pos + 4); return { type: 'Literal', start, end, value: null, raw: (start === 0 && end === 0) ? null : 'null', }; } function deserializeNumericLiteral(pos) { return { type: 'Literal', start: deserializeU32(pos), end: deserializeU32(pos + 4), value: deserializeF64(pos + 8), raw: deserializeOptionStr(pos + 16), }; } function deserializeStringLiteral(pos) { let value = deserializeStr(pos + 8); if (deserializeBool(pos + 40)) { value = value.replace(/\uFFFD(.{4})/g, (_, hex) => String.fromCodePoint(parseInt(hex, 16))); } return { type: 'Literal', start: deserializeU32(pos), end: deserializeU32(pos + 4), value, raw: deserializeOptionStr(pos + 24), }; } function deserializeBigIntLiteral(pos) { const bigint = deserializeStr(pos + 8); return { type: 'Literal', start: deserializeU32(pos), end: deserializeU32(pos + 4), value: BigInt(bigint), raw: deserializeOptionStr(pos + 24), bigint, }; } function deserializeRegExpLiteral(pos) { const regex = deserializeRegExp(pos + 8); let value = null; try { value = new RegExp(regex.pattern, regex.flags); } catch (e) {} return { type: 'Literal', start: deserializeU32(pos), end: deserializeU32(pos + 4), value, raw: deserializeOptionStr(pos + 40), regex, }; } function deserializeRegExp(pos) { return { pattern: deserializeStr(pos), flags: deserializeRegExpFlags(pos + 24), }; } function deserializeRegExpPattern(pos) { return { pattern: deserializeStr(pos), }; } function deserializeRegExpFlags(pos) { const flagBits = deserializeU8(pos); let flags = ''; // Alphabetical order if (flagBits & 64) flags += 'd'; if (flagBits & 1) flags += 'g'; if (flagBits & 2) flags += 'i'; if (flagBits & 4) flags += 'm'; if (flagBits & 8) flags += 's'; if (flagBits & 16) flags += 'u'; if (flagBits & 128) flags += 'v'; if (flagBits & 32) flags += 'y'; return flags; } function deserializeJSXElement(pos) { const closingElement = deserializeOptionBoxJSXClosingElement(pos + 40); const openingElement = deserializeBoxJSXOpeningElement(pos + 8); if (closingElement === null) openingElement.selfClosing = true; return { type: 'JSXElement', start: deserializeU32(pos), end: deserializeU32(pos + 4), openingElement, children: deserializeVecJSXChild(pos + 16), closingElement, }; } function deserializeJSXOpeningElement(pos) { return { type: 'JSXOpeningElement', start: deserializeU32(pos), end: deserializeU32(pos + 4), name: deserializeJSXElementName(pos + 8), typeArguments: deserializeOptionBoxTSTypeParameterInstantiation(pos + 24), attributes: deserializeVecJSXAttributeItem(pos + 32), selfClosing: false, }; } function deserializeJSXClosingElement(pos) { return { type: 'JSXClosingElement', start: deserializeU32(pos), end: deserializeU32(pos + 4), name: deserializeJSXElementName(pos + 8), }; } function deserializeJSXFragment(pos) { return { type: 'JSXFragment', start: deserializeU32(pos), end: deserializeU32(pos + 4), openingFragment: deserializeJSXOpeningFragment(pos + 8), children: deserializeVecJSXChild(pos + 16), closingFragment: deserializeJSXClosingFragment(pos + 40), }; } function deserializeJSXOpeningFragment(pos) { return { type: 'JSXOpeningFragment', start: deserializeU32(pos), end: deserializeU32(pos + 4), }; } function deserializeJSXClosingFragment(pos) { return { type: 'JSXClosingFragment', start: deserializeU32(pos), end: deserializeU32(pos + 4), }; } function deserializeJSXNamespacedName(pos) { return { type: 'JSXNamespacedName', start: deserializeU32(pos), end: deserializeU32(pos + 4), namespace: deserializeJSXIdentifier(pos + 8), name: deserializeJSXIdentifier(pos + 32), }; } function deserializeJSXMemberExpression(pos) { return { type: 'JSXMemberExpression', start: deserializeU32(pos), end: deserializeU32(pos + 4), object: deserializeJSXMemberExpressionObject(pos + 8), property: deserializeJSXIdentifier(pos + 24), }; } function deserializeJSXExpressionContainer(pos) { return { type: 'JSXExpressionContainer', start: deserializeU32(pos), end: deserializeU32(pos + 4), expression: deserializeJSXExpression(pos + 8), }; } function deserializeJSXEmptyExpression(pos) { return { type: 'JSXEmptyExpression', start: deserializeU32(pos), end: deserializeU32(pos + 4), }; } function deserializeJSXAttribute(pos) { return { type: 'JSXAttribute', start: deserializeU32(pos), end: deserializeU32(pos + 4), name: deserializeJSXAttributeName(pos + 8), value: deserializeOptionJSXAttributeValue(pos + 24), }; } function deserializeJSXSpreadAttribute(pos) { return { type: 'JSXSpreadAttribute', start: deserializeU32(pos), end: deserializeU32(pos + 4), argument: deserializeExpression(pos + 8), }; } function deserializeJSXIdentifier(pos) { return { type: 'JSXIdentifier', start: deserializeU32(pos), end: deserializeU32(pos + 4), name: deserializeStr(pos + 8), }; } function deserializeJSXSpreadChild(pos) { return { type: 'JSXSpreadChild', start: deserializeU32(pos), end: deserializeU32(pos + 4), expression: deserializeExpression(pos + 8), }; } function deserializeJSXText(pos) { return { type: 'JSXText', start: deserializeU32(pos), end: deserializeU32(pos + 4), value: deserializeStr(pos + 8), raw: deserializeOptionStr(pos + 24), }; } function deserializeTSThisParameter(pos) { return { type: 'Identifier', start: deserializeU32(pos), end: deserializeU32(pos + 4), decorators: [], name: 'this', optional: false, typeAnnotation: deserializeOptionBoxTSTypeAnnotation(pos + 16), }; } function deserializeTSEnumDeclaration(pos) { return { type: 'TSEnumDeclaration', start: deserializeU32(pos), end: deserializeU32(pos + 4), id: deserializeBindingIdentifier(pos + 8), body: deserializeTSEnumBody(pos + 40), const: deserializeBool(pos + 76), declare: deserializeBool(pos + 77), }; } function deserializeTSEnumBody(pos) { return { type: 'TSEnumBody', start: deserializeU32(pos), end: deserializeU32(pos + 4), members: deserializeVecTSEnumMember(pos + 8), }; } function deserializeTSEnumMember(pos) { return { type: 'TSEnumMember', start: deserializeU32(pos), end: deserializeU32(pos + 4), id: deserializeTSEnumMemberName(pos + 8), initializer: deserializeOptionExpression(pos + 24), computed: deserializeU8(pos + 8) > 1, }; } function deserializeTSTypeAnnotation(pos) { return { type: 'TSTypeAnnotation', start: deserializeU32(pos), end: deserializeU32(pos + 4), typeAnnotation: deserializeTSType(pos + 8), }; } function deserializeTSLiteralType(pos) { return { type: 'TSLiteralType', start: deserializeU32(pos), end: deserializeU32(pos + 4), literal: deserializeTSLiteral(pos + 8), }; } function deserializeTSConditionalType(pos) { return { type: 'TSConditionalType', start: deserializeU32(pos), end: deserializeU32(pos + 4), checkType: deserializeTSType(pos + 8), extendsType: deserializeTSType(pos + 24), trueType: deserializeTSType(pos + 40), falseType: deserializeTSType(pos + 56), }; } function deserializeTSUnionType(pos) { return { type: 'TSUnionType', start: deserializeU32(pos), end: deserializeU32(pos + 4), types: deserializeVecTSType(pos + 8), }; } function deserializeTSIntersectionType(pos) { return { type: 'TSIntersectionType', start: deserializeU32(pos), end: deserializeU32(pos + 4), types: deserializeVecTSType(pos + 8), }; } function deserializeTSParenthesizedType(pos) { return { type: 'TSParenthesizedType', start: deserializeU32(pos), end: deserializeU32(pos + 4), typeAnnotation: deserializeTSType(pos + 8), }; } function deserializeTSTypeOperator(pos) { return { type: 'TSTypeOperator', start: deserializeU32(pos), end: deserializeU32(pos + 4), operator: deserializeTSTypeOperatorOperator(pos + 24), typeAnnotation: deserializeTSType(pos + 8), }; } function deserializeTSArrayType(pos) { return { type: 'TSArrayType', start: deserializeU32(pos), end: deserializeU32(pos + 4), elementType: deserializeTSType(pos + 8), }; } function deserializeTSIndexedAccessType(pos) { return { type: 'TSIndexedAccessType', start: deserializeU32(pos), end: deserializeU32(pos + 4), objectType: deserializeTSType(pos + 8), indexType: deserializeTSType(pos + 24), }; } function deserializeTSTupleType(pos) { return { type: 'TSTupleType', start: deserializeU32(pos), end: deserializeU32(pos + 4), elementTypes: deserializeVecTSTupleElement(pos + 8), }; } function deserializeTSNamedTupleMember(pos) { return { type: 'TSNamedTupleMember', start: deserializeU32(pos), end: deserializeU32(pos + 4), label: deserializeIdentifierName(pos + 8), elementType: deserializeTSTupleElement(pos + 32), optional: deserializeBool(pos + 48), }; } function deserializeTSOptionalType(pos) { return { type: 'TSOptionalType', start: deserializeU32(pos), end: deserializeU32(pos + 4), typeAnnotation: deserializeTSType(pos + 8), }; } function deserializeTSRestType(pos) { return { type: 'TSRestType', start: deserializeU32(pos), end: deserializeU32(pos + 4), typeAnnotation: deserializeTSType(pos + 8), }; } function deserializeTSAnyKeyword(pos) { return { type: 'TSAnyKeyword', start: deserializeU32(pos), end: deserializeU32(pos + 4), }; } function deserializeTSStringKeyword(pos) { return { type: 'TSStringKeyword', start: deserializeU32(pos), end: deserializeU32(pos + 4), }; } function deserializeTSBooleanKeyword(pos) { return { type: 'TSBooleanKeyword', start: deserializeU32(pos), end: deserializeU32(pos + 4), }; } function deserializeTSNumberKeyword(pos) { return { type: 'TSNumberKeyword', start: deserializeU32(pos), end: deserializeU32(pos + 4), }; } function deserializeTSNeverKeyword(pos) { return { type: 'TSNeverKeyword', start: deserializeU32(pos), end: deserializeU32(pos + 4), }; } function deserializeTSIntrinsicKeyword(pos) { return { type: 'TSIntrinsicKeyword', start: deserializeU32(pos), end: deserializeU32(pos + 4), }; } function deserializeTSUnknownKeyword(pos) { return { type: 'TSUnknownKeyword', start: deserializeU32(pos), end: deserializeU32(pos + 4), }; } function deserializeTSNullKeyword(pos) { return { type: 'TSNullKeyword', start: deserializeU32(pos), end: deserializeU32(pos + 4), }; } function deserializeTSUndefinedKeyword(pos) { return { type: 'TSUndefinedKeyword', start: deserializeU32(pos), end: deserializeU32(pos + 4), }; } function deserializeTSVoidKeyword(pos) { return { type: 'TSVoidKeyword', start: deserializeU32(pos), end: deserializeU32(pos + 4), }; } function deserializeTSSymbolKeyword(pos) { return { type: 'TSSymbolKeyword', start: deserializeU32(pos), end: deserializeU32(pos + 4), }; } function deserializeTSThisType(pos) { return { type: 'TSThisType', start: deserializeU32(pos), end: deserializeU32(pos + 4), }; } function deserializeTSObjectKeyword(pos) { return { type: 'TSObjectKeyword', start: deserializeU32(pos), end: deserializeU32(pos + 4), }; } function deserializeTSBigIntKeyword(pos) { return { type: 'TSBigIntKeyword', start: deserializeU32(pos), end: deserializeU32(pos + 4), }; } function deserializeTSTypeReference(pos) { return { type: 'TSTypeReference', start: deserializeU32(pos), end: deserializeU32(pos + 4), typeName: deserializeTSTypeName(pos + 8), typeArguments: deserializeOptionBoxTSTypeParameterInstantiation(pos + 24), }; } function deserializeTSQualifiedName(pos) { return { type: 'TSQualifiedName', start: deserializeU32(pos), end: deserializeU32(pos + 4), left: deserializeTSTypeName(pos + 8), right: deserializeIdentifierName(pos + 24), }; } function deserializeTSTypeParameterInstantiation(pos) { return { type: 'TSTypeParameterInstantiation', start: deserializeU32(pos), end: deserializeU32(pos + 4), params: deserializeVecTSType(pos + 8), }; } function deserializeTSTypeParameter(pos) { return { type: 'TSTypeParameter', start: deserializeU32(pos), end: deserializeU32(pos + 4), name: deserializeBindingIdentifier(pos + 8), constraint: deserializeOptionTSType(pos + 40), default: deserializeOptionTSType(pos + 56), in: deserializeBool(pos + 72), out: deserializeBool(pos + 73), const: deserializeBool(pos + 74), }; } function deserializeTSTypeParameterDeclaration(pos) { return { type: 'TSTypeParameterDeclaration', start: deserializeU32(pos), end: deserializeU32(pos + 4), params: deserializeVecTSTypeParameter(pos + 8), }; } function deserializeTSTypeAliasDeclaration(pos) { return { type: 'TSTypeAliasDeclaration', start: deserializeU32(pos), end: deserializeU32(pos + 4), id: deserializeBindingIdentifier(pos + 8), typeParameters: deserializeOptionBoxTSTypeParameterDeclaration(pos + 40), typeAnnotation: deserializeTSType(pos + 48), declare: deserializeBool(pos + 68), }; } function deserializeTSClassImplements(pos) { let expression = deserializeTSTypeName(pos + 8); if (expression.type === 'TSQualifiedName') { let parent = expression = { type: 'MemberExpression', start: expression.start, end: expression.end, object: expression.left, property: expression.right, optional: false, computed: false, }; while (parent.object.type === 'TSQualifiedName') { const object = parent.object; parent = parent.object = { type: 'MemberExpression', start: object.start, end: object.end, object: object.left, property: object.right, optional: false, computed: false, }; } } return { type: 'TSClassImplements', start: deserializeU32(pos), end: deserializeU32(pos + 4), expression, typeArguments: deserializeOptionBoxTSTypeParameterInstantiation(pos + 24), }; } function deserializeTSInterfaceDeclaration(pos) { return { type: 'TSInterfaceDeclaration', start: deserializeU32(pos), end: deserializeU32(pos + 4), id: deserializeBindingIdentifier(pos + 8), typeParameters: deserializeOptionBoxTSTypeParameterDeclaration(pos + 40), extends: deserializeVecTSInterfaceHeritage(pos + 48), body: deserializeBoxTSInterfaceBody(pos + 72), declare: deserializeBool(pos + 84), }; } function deserializeTSInterfaceBody(pos) { return { type: 'TSInterfaceBody', start: deserializeU32(pos), end: deserializeU32(pos + 4), body: deserializeVecTSSignature(pos + 8), }; } function deserializeTSPropertySignature(pos) { return { type: 'TSPropertySignature', start: deserializeU32(pos), end: deserializeU32(pos + 4), computed: deserializeBool(pos + 32), optional: deserializeBool(pos + 33), readonly: deserializeBool(pos + 34), key: deserializePropertyKey(pos + 8), typeAnnotation: deserializeOptionBoxTSTypeAnnotation(pos + 24), accessibility: null, static: false, }; } function deserializeTSIndexSignature(pos) { return { type: 'TSIndexSignature', start: deserializeU32(pos), end: deserializeU32(pos + 4), parameters: deserializeVecTSIndexSignatureName(pos + 8), typeAnnotation: deserializeBoxTSTypeAnnotation(pos + 32), readonly: deserializeBool(pos + 40), static: deserializeBool(pos + 41), accessibility: null, }; } function deserializeTSCallSignatureDeclaration(pos) { const params = deserializeBoxFormalParameters(pos + 24); const thisParam = deserializeOptionBoxTSThisParameter(pos + 16); if (thisParam !== null) params.unshift(thisParam); return { type: 'TSCallSignatureDeclaration', start: deserializeU32(pos), end: deserializeU32(pos + 4), typeParameters: deserializeOptionBoxTSTypeParameterDeclaration(pos + 8), params, returnType: deserializeOptionBoxTSTypeAnnotation(pos + 32), }; } function deserializeTSMethodSignature(pos) { const params = deserializeBoxFormalParameters(pos + 40); const thisParam = deserializeOptionBoxTSThisParameter(pos + 32); if (thisParam !== null) params.unshift(thisParam); return { type: 'TSMethodSignature', start: deserializeU32(pos), end: deserializeU32(pos + 4), key: deserializePropertyKey(pos + 8), computed: deserializeBool(pos + 60), optional: deserializeBool(pos + 61), kind: deserializeTSMethodSignatureKind(pos + 62), typeParameters: deserializeOptionBoxTSTypeParameterDeclaration(pos + 24), params, returnType: deserializeOptionBoxTSTypeAnnotation(pos + 48), accessibility: null, readonly: false, static: false, }; } function deserializeTSConstructSignatureDeclaration(pos) { return { type: 'TSConstructSignatureDeclaration', start: deserializeU32(pos), end: deserializeU32(pos + 4), typeParameters: deserializeOptionBoxTSTypeParameterDeclaration(pos + 8), params: deserializeBoxFormalParameters(pos + 16), returnType: deserializeOptionBoxTSTypeAnnotation(pos + 24), }; } function deserializeTSIndexSignatureName(pos) { return { type: 'Identifier', start: deserializeU32(pos), end: deserializeU32(pos + 4), decorators: [], name: deserializeStr(pos + 8), optional: false, typeAnnotation: deserializeBoxTSTypeAnnotation(pos + 24), }; } function deserializeTSInterfaceHeritage(pos) { return { type: 'TSInterfaceHeritage', start: deserializeU32(pos), end: deserializeU32(pos + 4), expression: deserializeExpression(pos + 8), typeArguments: deserializeOptionBoxTSTypeParameterInstantiation(pos + 2