{"version":3,"file":"index.js","sources":["../src/source-map.ts","../src/buffer.ts","../src/node/parentheses.ts","../src/generators/template-literals.ts","../src/generators/expressions.ts","../src/generators/statements.ts","../src/generators/methods.ts","../src/generators/typescript.ts","../src/generators/modules.ts","../src/generators/types.ts","../src/generators/flow.ts","../src/generators/classes.ts","../src/generators/base.ts","../src/generators/jsx.ts","../src/nodes.ts","../src/node/index.ts","../src/token-map.ts","../src/printer.ts","../src/index.ts"],"sourcesContent":["import {\n  GenMapping,\n  maybeAddMapping,\n  setSourceContent,\n  allMappings,\n  toEncodedMap,\n  toDecodedMap,\n} from \"@jridgewell/gen-mapping\";\n\nimport type {\n  EncodedSourceMap,\n  DecodedSourceMap,\n  Mapping,\n} from \"@jridgewell/gen-mapping\";\n\nimport type {\n  InvalidOriginalMapping,\n  OriginalMapping,\n  SourceMapInput,\n} from \"@jridgewell/trace-mapping\";\nimport { originalPositionFor, TraceMap } from \"@jridgewell/trace-mapping\";\n\n/**\n * Build a sourcemap.\n */\n\nexport default class SourceMap {\n  private _map: GenMapping;\n  private _rawMappings: Mapping[] | undefined;\n  private _sourceFileName: string | undefined;\n\n  // Any real line is > 0, so init to 0 is fine.\n  private _lastGenLine = 0;\n  private _lastSourceLine = 0;\n\n  // Source columns can be 0, but we only check in unison with sourceLine, which\n  // inits to an impossible value. So init to 0 is fine.\n  private _lastSourceColumn = 0;\n\n  public _inputMap: TraceMap | null = null;\n\n  constructor(\n    opts: {\n      sourceFileName?: string;\n      sourceRoot?: string;\n      inputSourceMap?: SourceMapInput;\n    },\n    code: string | Record<string, string> | null | undefined,\n  ) {\n    const map = (this._map = new GenMapping({ sourceRoot: opts.sourceRoot }));\n    this._sourceFileName = opts.sourceFileName?.replace(/\\\\/g, \"/\");\n    this._rawMappings = undefined;\n\n    if (opts.inputSourceMap) {\n      this._inputMap = new TraceMap(opts.inputSourceMap);\n      const resolvedSources = this._inputMap.resolvedSources;\n      if (resolvedSources.length) {\n        for (let i = 0; i < resolvedSources.length; i++) {\n          setSourceContent(\n            map,\n            resolvedSources[i],\n            // @ts-expect-error FIXME: this._inputMap.sourcesContent?.[i] may be undefined, which is not acceptable by setSourceContent\n            this._inputMap.sourcesContent?.[i],\n          );\n        }\n      }\n    }\n\n    if (typeof code === \"string\" && !opts.inputSourceMap) {\n      setSourceContent(map, this._sourceFileName!, code);\n    } else if (typeof code === \"object\") {\n      for (const sourceFileName of Object.keys(code!)) {\n        setSourceContent(\n          map,\n          sourceFileName.replace(/\\\\/g, \"/\"),\n          code![sourceFileName],\n        );\n      }\n    }\n  }\n\n  /**\n   * Get the sourcemap.\n   */\n  get(): EncodedSourceMap {\n    return toEncodedMap(this._map);\n  }\n\n  getDecoded(): DecodedSourceMap {\n    return toDecodedMap(this._map);\n  }\n\n  getRawMappings(): Mapping[] {\n    return (this._rawMappings ||= allMappings(this._map));\n  }\n\n  /**\n   * Mark the current generated position with a source position. May also be passed null line/column\n   * values to insert a mapping to nothing.\n   */\n\n  mark(\n    generated: { line: number; column: number },\n    line?: number,\n    column?: number,\n    identifierName?: string | null,\n    identifierNamePos?: { line: number; column: number },\n    filename?: string | null,\n  ) {\n    this._rawMappings = undefined;\n\n    let originalMapping: OriginalMapping | InvalidOriginalMapping | undefined;\n\n    if (line != null) {\n      if (this._inputMap) {\n        // This is the lookup for this mark\n        originalMapping = originalPositionFor(this._inputMap, {\n          line,\n          column: column!,\n        });\n\n        // If the we found a name, nothing else needs to be done\n        // Maybe we're marking a `(` and the input map already had a name attached there,\n        // or we're marking a `(` and the sourcemap spanned a `foo(`,\n        // or we're marking an identifier, etc.\n        if (!originalMapping.name && identifierNamePos) {\n          // We're trying to mark a `(` (as that's the only thing that provides\n          // an identifierNamePos currently), and we the AST had an identifier attached.\n          // Lookup it's original name.\n          const originalIdentifierMapping = originalPositionFor(\n            this._inputMap,\n            identifierNamePos,\n          );\n          if (originalIdentifierMapping.name) {\n            identifierName = originalIdentifierMapping.name;\n          }\n        }\n      } else {\n        originalMapping = {\n          name: null,\n          source: filename?.replace(/\\\\/g, \"/\") || this._sourceFileName!,\n          line: line,\n          column: column!,\n        };\n      }\n    }\n\n    // @ts-expect-error FIXME: original cannot be InvalidOriginalMapping\n    maybeAddMapping(this._map, {\n      name: identifierName,\n      generated,\n      source: originalMapping?.source,\n      original: originalMapping,\n    });\n  }\n}\n","import type SourceMap from \"./source-map.ts\";\nimport type { SourceLocation } from \"@babel/types\";\n\nimport * as charcodes from \"charcodes\";\n\nexport type Loc = SourceLocation;\nexport type Pos = SourceLocation[\"start\"];\n\ntype SourcePosition = {\n  line: number | undefined;\n  column: number | undefined;\n  identifierName: string | undefined;\n  identifierNamePos: Pos | undefined;\n  filename: string | undefined;\n};\n\nconst spaceIndents: string[] = [];\nfor (let i = 0; i < 32; i++) {\n  spaceIndents.push(\" \".repeat(i * 2));\n}\n\nexport default class Buffer {\n  constructor(map: SourceMap | null, indentChar: string) {\n    this._map = map;\n    this._indentChar = indentChar;\n  }\n\n  _map: SourceMap | null = null;\n  _buf = \"\";\n  _str = \"\";\n  _appendCount = 0;\n  _last = 0;\n  _canMarkIdName = true;\n  _indentChar = \"\";\n  _queuedChar: typeof charcodes.space | typeof charcodes.semicolon | 0 = 0;\n\n  _position = {\n    line: 1,\n    column: 0,\n  };\n  _sourcePosition: SourcePosition = {\n    identifierName: undefined,\n    identifierNamePos: undefined,\n    line: undefined,\n    column: undefined,\n    filename: undefined,\n  };\n\n  /**\n   * Get the final string output from the buffer, along with the sourcemap if one exists.\n   */\n\n  get() {\n    const { _map, _last } = this;\n    if (this._queuedChar !== charcodes.space) {\n      this._flush();\n    }\n\n    // Whatever trim is used here should not execute a regex against the\n    // source string since it may be arbitrarily large after all transformations\n    const code =\n      _last === charcodes.lineFeed\n        ? (this._buf + this._str).trimRight()\n        : this._buf + this._str;\n\n    // Creating objects with getters is expensive.\n    if (_map === null) {\n      return {\n        code: code,\n        decodedMap: undefined,\n        map: null,\n        rawMappings: undefined,\n      };\n    }\n\n    const result = {\n      code: code,\n      // Decoded sourcemap is free to generate.\n      decodedMap: _map.getDecoded(),\n      // Encoding the sourcemap is moderately CPU expensive.\n      get map() {\n        const resultMap = _map.get();\n        result.map = resultMap;\n        return resultMap;\n      },\n      set map(value) {\n        Object.defineProperty(result, \"map\", { value, writable: true });\n      },\n      // Retrieving the raw mappings is very memory intensive.\n      get rawMappings() {\n        const mappings = _map.getRawMappings();\n        result.rawMappings = mappings;\n        return mappings;\n      },\n      set rawMappings(value) {\n        Object.defineProperty(result, \"rawMappings\", { value, writable: true });\n      },\n    };\n\n    return result;\n  }\n\n  /**\n   * Add a string to the buffer that cannot be reverted.\n   */\n\n  append(str: string, maybeNewline: boolean): void {\n    this._flush();\n    this._append(str, maybeNewline);\n  }\n\n  appendChar(char: number): void {\n    this._flush();\n    this._appendChar(char, 1, true);\n  }\n\n  /**\n   * Add a string to the buffer than can be reverted.\n   */\n  queue(char: typeof charcodes.space | typeof charcodes.semicolon): void {\n    this._flush();\n    this._queuedChar = char;\n  }\n\n  _flush(): void {\n    const queuedChar = this._queuedChar;\n    if (queuedChar !== 0) {\n      this._appendChar(queuedChar, 1, true);\n      this._queuedChar = 0;\n    }\n  }\n\n  _appendChar(char: number, repeat: number, useSourcePos: boolean): void {\n    this._last = char;\n\n    if (char === -1) {\n      const indent =\n        repeat >= 64\n          ? this._indentChar.repeat(repeat)\n          : spaceIndents[repeat / 2];\n      this._str += indent;\n    } else {\n      this._str +=\n        repeat > 1\n          ? String.fromCharCode(char).repeat(repeat)\n          : String.fromCharCode(char);\n    }\n\n    const isSpace = char === charcodes.space;\n    const position = this._position;\n    if (char !== charcodes.lineFeed) {\n      if (this._map) {\n        const sourcePos = this._sourcePosition;\n        if (useSourcePos && sourcePos) {\n          this._map.mark(\n            position,\n            sourcePos.line,\n            sourcePos.column,\n            isSpace ? undefined : sourcePos.identifierName,\n            isSpace ? undefined : sourcePos.identifierNamePos,\n            sourcePos.filename,\n          );\n\n          if (!isSpace && this._canMarkIdName) {\n            sourcePos.identifierName = undefined;\n            sourcePos.identifierNamePos = undefined;\n          }\n        } else {\n          this._map.mark(position);\n        }\n      }\n\n      position.column += repeat;\n    } else {\n      position.line++;\n      position.column = 0;\n    }\n  }\n\n  _append(str: string, maybeNewline: boolean): void {\n    const len = str.length;\n    const position = this._position;\n    const sourcePos = this._sourcePosition;\n\n    this._last = -1; /* LAST_CHAR_KINDS.NORMAL */\n\n    if (++this._appendCount > 4096) {\n      // eslint-disable-next-line @typescript-eslint/no-unused-expressions\n      +this._str; // Unexplainable huge performance boost. Ref: https://github.com/davidmarkclements/flatstr License: MIT\n      this._buf += this._str;\n      this._str = str;\n      this._appendCount = 0;\n    } else {\n      this._str += str;\n    }\n\n    const hasMap = this._map !== null;\n\n    if (!maybeNewline && !hasMap) {\n      position.column += len;\n      return;\n    }\n\n    const { column, identifierName, identifierNamePos, filename } = sourcePos;\n    let line = sourcePos.line;\n\n    if (\n      (identifierName != null || identifierNamePos != null) &&\n      this._canMarkIdName\n    ) {\n      sourcePos.identifierName = undefined;\n      sourcePos.identifierNamePos = undefined;\n    }\n\n    // Search for newline chars. We search only for `\\n`, since both `\\r` and\n    // `\\r\\n` are normalized to `\\n` during parse. We exclude `\\u2028` and\n    // `\\u2029` for performance reasons, they're so uncommon that it's probably\n    // ok. It's also unclear how other sourcemap utilities handle them...\n    let i = str.indexOf(\"\\n\");\n    let last = 0;\n\n    // If the string starts with a newline char, then adding a mark is redundant.\n    // This catches both \"no newlines\" and \"newline after several chars\".\n    if (hasMap && i !== 0) {\n      this._map!.mark(\n        position,\n        line,\n        column,\n        identifierName,\n        identifierNamePos,\n        filename,\n      );\n    }\n\n    // Now, find each remaining newline char in the string.\n    while (i !== -1) {\n      position.line++;\n      position.column = 0;\n      last = i + 1;\n\n      // We mark the start of each line, which happens directly after this newline char\n      // unless this is the last char.\n      // When manually adding multi-line content (such as a comment), `line` will be `undefined`.\n      if (last < len && line !== undefined) {\n        line++;\n        if (hasMap) {\n          this._map!.mark(position, line, 0, undefined, undefined, filename);\n        }\n      }\n      i = str.indexOf(\"\\n\", last);\n    }\n    position.column += len - last;\n  }\n\n  removeLastSemicolon(): void {\n    if (this._queuedChar === charcodes.semicolon) {\n      this._queuedChar = 0;\n    }\n  }\n\n  getLastChar(checkQueue?: boolean): number {\n    if (!checkQueue) {\n      return this._last;\n    }\n    const queuedChar = this._queuedChar;\n    return queuedChar !== 0 ? queuedChar : this._last;\n  }\n\n  /**\n   * This will only detect at most 1 newline after a call to `flush()`,\n   * but this has not been found so far, and an accurate count can be achieved if needed later.\n   */\n  getNewlineCount(): number {\n    return this._queuedChar === 0 && this._last === charcodes.lineFeed ? 1 : 0;\n  }\n\n  hasContent(): boolean {\n    return this._last !== 0 /*|| this._queuedChar !== 0*/;\n  }\n\n  /**\n   * Certain sourcemap usecases expect mappings to be more accurate than\n   * Babel's generic sourcemap handling allows. For now, we special-case\n   * identifiers to allow for the primary cases to work.\n   * The goal of this line is to ensure that the map output from Babel will\n   * have an exact range on identifiers in the output code. Without this\n   * line, Babel would potentially include some number of trailing tokens\n   * that are printed after the identifier, but before another location has\n   * been assigned.\n   * This allows tooling like Rollup and Webpack to more accurately perform\n   * their own transformations. Most importantly, this allows the import/export\n   * transformations performed by those tools to loose less information when\n   * applying their own transformations on top of the code and map results\n   * generated by Babel itself.\n   *\n   * The primary example of this is the snippet:\n   *\n   *   import mod from \"mod\";\n   *   mod();\n   *\n   * With this line, there will be one mapping range over \"mod\" and another\n   * over \"();\", where previously it would have been a single mapping.\n   */\n  exactSource(loc: Loc, cb: () => void) {\n    if (!this._map) {\n      cb();\n      return;\n    }\n\n    this.source(\"start\", loc);\n    const identifierName = loc.identifierName;\n    const sourcePos = this._sourcePosition;\n    if (identifierName != null) {\n      this._canMarkIdName = false;\n      sourcePos.identifierName = identifierName;\n    }\n    cb();\n\n    if (identifierName != null) {\n      this._canMarkIdName = true;\n      sourcePos.identifierName = undefined;\n      sourcePos.identifierNamePos = undefined;\n    }\n    this.source(\"end\", loc);\n  }\n\n  /**\n   * Sets a given position as the current source location so generated code after this call\n   * will be given this position in the sourcemap.\n   */\n\n  source(prop: \"start\" | \"end\", loc: Loc): void {\n    if (!this._map) return;\n\n    // Since this is called extremely often, we reuse the same _sourcePosition\n    // object for the whole lifetime of the buffer.\n    this._normalizePosition(prop, loc, 0);\n  }\n\n  sourceWithOffset(\n    prop: \"start\" | \"end\",\n    loc: Loc,\n    columnOffset: number,\n  ): void {\n    if (!this._map) return;\n\n    this._normalizePosition(prop, loc, columnOffset);\n  }\n\n  _normalizePosition(prop: \"start\" | \"end\", loc: Loc, columnOffset: number) {\n    this._flush();\n\n    const pos = loc[prop];\n    const target = this._sourcePosition;\n\n    if (pos) {\n      target.line = pos.line;\n      // TODO: Fix https://github.com/babel/babel/issues/15712 in downstream\n      target.column = Math.max(pos.column + columnOffset, 0);\n      target.filename = loc.filename;\n    }\n  }\n\n  getCurrentColumn(): number {\n    return this._position.column + (this._queuedChar ? 1 : 0);\n  }\n\n  getCurrentLine(): number {\n    return this._position.line;\n  }\n}\n","import {\n  isMemberExpression,\n  isOptionalMemberExpression,\n  isYieldExpression,\n  isStatement,\n} from \"@babel/types\";\nimport type * as t from \"@babel/types\";\n\nimport { TokenContext } from \"./index.ts\";\n\nconst PRECEDENCE = new Map([\n  [\"||\", 0],\n  [\"??\", 1],\n  [\"&&\", 2],\n  [\"|\", 3],\n  [\"^\", 4],\n  [\"&\", 5],\n  [\"==\", 6],\n  [\"===\", 6],\n  [\"!=\", 6],\n  [\"!==\", 6],\n  [\"<\", 7],\n  [\">\", 7],\n  [\"<=\", 7],\n  [\">=\", 7],\n  [\"in\", 7],\n  [\"instanceof\", 7],\n  [\">>\", 8],\n  [\"<<\", 8],\n  [\">>>\", 8],\n  [\"+\", 9],\n  [\"-\", 9],\n  [\"*\", 10],\n  [\"/\", 10],\n  [\"%\", 10],\n  [\"**\", 11],\n]);\n\nfunction isTSTypeExpression(nodeId: number) {\n  return (\n    nodeId === __node(\"TSAsExpression\") ||\n    nodeId === __node(\"TSSatisfiesExpression\") ||\n    nodeId === __node(\"TSTypeAssertion\")\n  );\n}\n\nconst isClassExtendsClause = (\n  node: t.Node,\n  parent: any,\n  parentId: number,\n): parent is t.Class => {\n  return (\n    (parentId === __node(\"ClassDeclaration\") ||\n      parentId === __node(\"ClassExpression\")) &&\n    parent.superClass === node\n  );\n};\n\nconst hasPostfixPart = (node: t.Node, parent: any, parentId: number) => {\n  switch (parentId) {\n    case __node(\"MemberExpression\"):\n    case __node(\"OptionalMemberExpression\"):\n      return parent.object === node;\n    case __node(\"CallExpression\"):\n    case __node(\"OptionalCallExpression\"):\n    case __node(\"NewExpression\"):\n      return parent.callee === node;\n    case __node(\"TaggedTemplateExpression\"):\n      return parent.tag === node;\n    case __node(\"TSNonNullExpression\"):\n      return true;\n  }\n\n  return false;\n};\n\nexport function NullableTypeAnnotation(\n  node: t.NullableTypeAnnotation,\n  parent: any,\n  parentId: number,\n): boolean {\n  return parentId === __node(\"ArrayTypeAnnotation\");\n}\n\nexport function FunctionTypeAnnotation(\n  node: t.FunctionTypeAnnotation,\n  parent: any,\n  parentId: number,\n  tokenContext: number,\n): boolean {\n  return (\n    // (() => A) | (() => B)\n    parentId === __node(\"UnionTypeAnnotation\") ||\n    // (() => A) & (() => B)\n    parentId === __node(\"IntersectionTypeAnnotation\") ||\n    // (() => A)[]\n    parentId === __node(\"ArrayTypeAnnotation\") ||\n    (tokenContext & TokenContext.arrowFlowReturnType) > 0\n  );\n}\n\nexport function UpdateExpression(\n  node: t.UpdateExpression,\n  parent: any,\n  parentId: number,\n): boolean {\n  return (\n    hasPostfixPart(node, parent, parentId) ||\n    isClassExtendsClause(node, parent, parentId)\n  );\n}\n\nfunction needsParenBeforeExpressionBrace(tokenContext: number) {\n  return (\n    (tokenContext &\n      (TokenContext.expressionStatement | TokenContext.arrowBody)) >\n    0\n  );\n}\n\nexport function ObjectExpression(\n  node: t.ObjectExpression,\n  parent: any,\n  parentId: number,\n  tokenContext: number,\n): boolean {\n  return needsParenBeforeExpressionBrace(tokenContext);\n}\n\nexport function DoExpression(\n  node: t.DoExpression,\n  parent: any,\n  parentId: number,\n  tokenContext: number,\n): boolean {\n  // `async do` can start an expression statement\n  return (tokenContext & TokenContext.expressionStatement) > 0 && !node.async;\n}\n\nconst enum BinaryLikeType {\n  Binary = 0,\n  Logical = 1,\n  TypeScript = 2,\n}\n\nfunction BinaryLike(\n  node: t.Binary | t.TSAsExpression | t.TSSatisfiesExpression,\n  parent: any,\n  parentId: number,\n  nodeType: BinaryLikeType,\n): boolean {\n  if (isClassExtendsClause(node, parent, parentId)) {\n    return true;\n  }\n\n  if (\n    hasPostfixPart(node, parent, parentId) ||\n    parentId === __node(\"UnaryExpression\") ||\n    parentId === __node(\"SpreadElement\") ||\n    parentId === __node(\"AwaitExpression\")\n  ) {\n    return true;\n  }\n  let parentPos: number | undefined;\n  switch (parentId) {\n    case __node(\"BinaryExpression\"):\n    case __node(\"LogicalExpression\"):\n      parentPos = PRECEDENCE.get(parent.operator);\n      break;\n    case __node(\"TSAsExpression\"):\n    case __node(\"TSSatisfiesExpression\"):\n      parentPos = 7; /* in */\n  }\n  if (parentPos !== undefined) {\n    const nodePos =\n      nodeType === BinaryLikeType.TypeScript\n        ? 7 /* in */\n        : PRECEDENCE.get((node as t.Binary).operator)!;\n    if (parentPos > nodePos) return true;\n    if (\n      parentPos === nodePos &&\n      parentId === __node(\"BinaryExpression\") &&\n      (nodePos === 11 /* ** */ ? parent.left === node : parent.right === node)\n    ) {\n      return true;\n    }\n    if (\n      nodeType === BinaryLikeType.Logical &&\n      parentId === __node(\"LogicalExpression\") &&\n      // 1: ??\n      ((nodePos === 1 && parentPos !== 1) || (parentPos === 1 && nodePos !== 1))\n    ) {\n      return true;\n    }\n  }\n  return false;\n}\n\nexport function UnionTypeAnnotation(\n  node: t.UnionTypeAnnotation | t.IntersectionTypeAnnotation,\n  parent: any,\n  parentId: number,\n): boolean {\n  switch (parentId) {\n    case __node(\"ArrayTypeAnnotation\"):\n    case __node(\"NullableTypeAnnotation\"):\n    case __node(\"IntersectionTypeAnnotation\"):\n    case __node(\"UnionTypeAnnotation\"):\n      return true;\n  }\n  return false;\n}\n\nexport { UnionTypeAnnotation as IntersectionTypeAnnotation };\n\nexport function OptionalIndexedAccessType(\n  node: t.OptionalIndexedAccessType,\n  parent: any,\n  parentId: number,\n): boolean {\n  return parentId === __node(\"IndexedAccessType\") && parent.objectType === node;\n}\n\nexport function TSAsExpression(\n  node: t.TSAsExpression | t.TSSatisfiesExpression,\n  parent: any,\n  parentId: number,\n): boolean {\n  if (\n    (parentId === __node(\"AssignmentExpression\") ||\n      parentId === __node(\"AssignmentPattern\")) &&\n    parent.left === node\n  ) {\n    return true;\n  }\n  if (\n    parentId === __node(\"BinaryExpression\") &&\n    (parent.operator === \"|\" || parent.operator === \"&\") &&\n    node === parent.left\n  ) {\n    return true;\n  }\n  return BinaryLike(node, parent, parentId, BinaryLikeType.TypeScript);\n}\n\nexport { TSAsExpression as TSSatisfiesExpression };\n\nexport { UnaryLike as TSTypeAssertion };\n\nexport function TSConditionalType(\n  node: t.TSConditionalType,\n  parent: any,\n  parentId: number,\n): boolean {\n  switch (parentId) {\n    case __node(\"TSArrayType\"):\n    case __node(\"TSOptionalType\"):\n    case __node(\"TSTypeOperator\"):\n    // for `infer K extends (L extends M ? M : ...)`\n    // fallthrough\n    case __node(\"TSTypeParameter\"):\n    case __node(\"TSIntersectionType\"):\n    case __node(\"TSUnionType\"):\n      return true;\n    case __node(\"TSIndexedAccessType\"):\n      return parent.objectType === node;\n    case __node(\"TSConditionalType\"):\n      return parent.checkType === node || parent.extendsType === node;\n  }\n  return false;\n}\n\nexport function TSUnionType(\n  node: t.TSUnionType | t.TSFunctionType,\n  parent: any,\n  parentId: number,\n): boolean {\n  switch (parentId) {\n    case __node(\"TSIntersectionType\"):\n    case __node(\"TSTypeOperator\"):\n    case __node(\"TSArrayType\"):\n    case __node(\"TSOptionalType\"):\n      return true;\n    case __node(\"TSIndexedAccessType\"):\n      return parent.objectType === node;\n  }\n  return false;\n}\n\nexport function TSIntersectionType(\n  node: t.TSUnionType,\n  parent: any,\n  parentId: number,\n): boolean {\n  return (\n    parentId === __node(\"TSTypeOperator\") ||\n    TSTypeOperator(node, parent, parentId)\n  );\n}\n\nexport function TSInferType(\n  node: t.TSInferType,\n  parent: any,\n  parentId: number,\n): boolean {\n  if (TSTypeOperator(node, parent, parentId)) {\n    return true;\n  }\n  if (\n    (parentId === __node(\"TSIntersectionType\") ||\n      parentId === __node(\"TSUnionType\")) &&\n    node.typeParameter.constraint != null\n  ) {\n    return true;\n  }\n  return false;\n}\n\nexport function TSTypeOperator(\n  node: t.TSTypeOperator | t.TSUnionType | t.TSInferType,\n  parent: any,\n  parentId: number,\n): boolean {\n  switch (parentId) {\n    case __node(\"TSArrayType\"):\n    case __node(\"TSOptionalType\"):\n      return true;\n    case __node(\"TSIndexedAccessType\"):\n      if (parent.objectType === node) {\n        return true;\n      }\n  }\n  return false;\n}\n\nexport function TSInstantiationExpression(\n  node: t.TSInstantiationExpression,\n  parent: any,\n  parentId: number,\n) {\n  switch (parentId) {\n    case __node(\"CallExpression\"):\n    case __node(\"OptionalCallExpression\"):\n    case __node(\"NewExpression\"):\n    case __node(\"TSInstantiationExpression\"):\n      return parent.typeArguments != null;\n  }\n\n  return false;\n}\n\nexport function TSFunctionType(\n  node: t.TSFunctionType,\n  parent: any,\n  parentId: number,\n): boolean {\n  if (TSUnionType(node, parent, parentId)) return true;\n\n  return (\n    parentId === __node(\"TSUnionType\") ||\n    (parentId === __node(\"TSConditionalType\") &&\n      (parent.checkType === node || parent.extendsType === node))\n  );\n}\n\nexport { TSFunctionType as TSConstructorType };\n\nexport function BinaryExpression(\n  node: t.BinaryExpression,\n  parent: any,\n  parentId: number,\n  tokenContext: number,\n): boolean {\n  if (BinaryLike(node, parent, parentId, BinaryLikeType.Binary)) return true;\n\n  // for ((1 in []);;);\n  // for (var x = (1 in []) in 2);\n  return (\n    (tokenContext & TokenContext.forInOrInitHeadAccumulate) > 0 &&\n    node.operator === \"in\"\n  );\n}\n\nexport function LogicalExpression(\n  node: t.LogicalExpression,\n  parent: any,\n  parentId: number,\n): boolean {\n  return BinaryLike(node, parent, parentId, BinaryLikeType.Logical);\n}\n\nexport function SequenceExpression(\n  node: t.SequenceExpression,\n  parent: any,\n  parentId: number,\n): boolean {\n  if (\n    parentId === __node(\"SequenceExpression\") ||\n    parentId === __node(\"ParenthesizedExpression\") ||\n    (parentId === __node(\"MemberExpression\") && parent.property === node) ||\n    (parentId === __node(\"OptionalMemberExpression\") &&\n      parent.property === node) ||\n    parentId === __node(\"TemplateLiteral\")\n  ) {\n    return false;\n  }\n  if (parentId === __node(\"ClassDeclaration\")) {\n    return true;\n  }\n  if (parentId === __node(\"ForOfStatement\")) {\n    return parent.right === node;\n  }\n  if (parentId === __node(\"ExportDefaultDeclaration\")) {\n    return true;\n  }\n\n  return !isStatement(parent);\n}\n\nexport function YieldExpression(\n  node: t.YieldExpression,\n  parent: any,\n  parentId: number,\n): boolean {\n  return (\n    parentId === __node(\"BinaryExpression\") ||\n    parentId === __node(\"LogicalExpression\") ||\n    parentId === __node(\"UnaryExpression\") ||\n    parentId === __node(\"SpreadElement\") ||\n    hasPostfixPart(node, parent, parentId) ||\n    (parentId === __node(\"AwaitExpression\") && isYieldExpression(node)) ||\n    (parentId === __node(\"ConditionalExpression\") && node === parent.test) ||\n    isClassExtendsClause(node, parent, parentId) ||\n    isTSTypeExpression(parentId)\n  );\n}\n\nexport { YieldExpression as AwaitExpression };\n\nexport function ClassExpression(\n  node: t.ClassExpression,\n  parent: any,\n  parentId: number,\n  tokenContext: number,\n): boolean {\n  return (\n    (tokenContext &\n      (TokenContext.expressionStatement | TokenContext.exportDefault)) >\n    0\n  );\n}\n\nfunction UnaryLike(\n  node:\n    | t.UnaryLike\n    | t.TSTypeAssertion\n    | t.ArrowFunctionExpression\n    | t.ConditionalExpression\n    | t.AssignmentExpression,\n  parent: any,\n  parentId: number,\n): boolean {\n  return (\n    hasPostfixPart(node, parent, parentId) ||\n    (parentId === __node(\"BinaryExpression\") &&\n      parent.operator === \"**\" &&\n      parent.left === node) ||\n    isClassExtendsClause(node, parent, parentId)\n  );\n}\n\nexport { UnaryLike as UnaryExpression, UnaryLike as SpreadElement };\n\nexport function FunctionExpression(\n  node: t.FunctionExpression,\n  parent: any,\n  parentId: number,\n  tokenContext: number,\n): boolean {\n  return (\n    (tokenContext &\n      (TokenContext.expressionStatement | TokenContext.exportDefault)) >\n    0\n  );\n}\n\nexport function ConditionalExpression(\n  node:\n    | t.ConditionalExpression\n    | t.ArrowFunctionExpression\n    | t.AssignmentExpression,\n  parent: any,\n  parentId: number,\n): boolean {\n  switch (parentId) {\n    case __node(\"UnaryExpression\"):\n    case __node(\"SpreadElement\"):\n    case __node(\"BinaryExpression\"):\n    case __node(\"LogicalExpression\"):\n    case __node(\"AwaitExpression\"):\n      return true;\n    case __node(\"ConditionalExpression\"):\n      if (parent.test === node) {\n        return true;\n      }\n  }\n\n  if (isTSTypeExpression(parentId)) {\n    return true;\n  }\n\n  return UnaryLike(node, parent, parentId);\n}\n\nexport { ConditionalExpression as ArrowFunctionExpression };\n\nexport function OptionalMemberExpression(\n  node: t.OptionalMemberExpression,\n  parent: any,\n  parentId: number,\n): boolean {\n  switch (parentId) {\n    case __node(\"CallExpression\"):\n      return parent.callee === node;\n    case __node(\"MemberExpression\"):\n      return parent.object === node;\n  }\n  return false;\n}\n\nexport { OptionalMemberExpression as OptionalCallExpression };\n\nexport function AssignmentExpression(\n  node: t.AssignmentExpression,\n  parent: any,\n  parentId: number,\n  tokenContext: number,\n): boolean {\n  if (\n    needsParenBeforeExpressionBrace(tokenContext) &&\n    node.left.type === \"ObjectPattern\"\n  ) {\n    return true;\n  }\n  return ConditionalExpression(node, parent, parentId);\n}\n\nexport function Identifier(\n  node: t.Identifier,\n  parent: any,\n  parentId: number,\n  tokenContext: number,\n  getRawIdentifier: (node: t.Identifier) => string,\n): boolean {\n  if (getRawIdentifier && getRawIdentifier(node) !== node.name) {\n    return false;\n  }\n\n  // 13.15.2 AssignmentExpression RS: Evaluation\n  // (fn) = function () {};\n  if (\n    parentId === __node(\"AssignmentExpression\") &&\n    node.extra?.parenthesized &&\n    parent.left === node\n  ) {\n    const rightType = parent.right.type;\n    if (\n      (rightType === \"FunctionExpression\" || rightType === \"ClassExpression\") &&\n      parent.right.id == null\n    ) {\n      return true;\n    }\n  }\n\n  // fast path\n  if (\n    tokenContext & TokenContext.forOfHead ||\n    ((parentId === __node(\"MemberExpression\") ||\n      parentId === __node(\"OptionalMemberExpression\")) &&\n      tokenContext &\n        (TokenContext.expressionStatement |\n          TokenContext.forInitHead |\n          TokenContext.forInHead))\n  ) {\n    // Non-strict code allows the identifier `let`, but it cannot occur as-is in\n    // certain contexts to avoid ambiguity with contextual keyword `let`.\n    if (node.name === \"let\") {\n      // Some contexts only forbid `let [`, so check if the next token would\n      // be the left bracket of a computed member expression.\n      const isFollowedByBracket =\n        isMemberExpression(parent, {\n          object: node,\n          computed: true,\n        }) ||\n        isOptionalMemberExpression(parent, {\n          object: node,\n          computed: true,\n          optional: false,\n        });\n      if (\n        isFollowedByBracket &&\n        tokenContext &\n          (TokenContext.expressionStatement |\n            TokenContext.forInitHead |\n            TokenContext.forInHead)\n      ) {\n        return true;\n      }\n      return (tokenContext & TokenContext.forOfHead) > 0;\n    }\n  }\n\n  // ECMAScript specifically forbids a for-of loop from starting with the\n  // token sequence `for (async of`, because it would be ambiguous with\n  // `for (async of => {};;)`, so we need to add extra parentheses.\n  return (\n    parentId === __node(\"ForOfStatement\") &&\n    parent.left === node &&\n    node.name === \"async\" &&\n    !parent.await\n  );\n}\n","import type Printer from \"../printer.ts\";\nimport type * as t from \"@babel/types\";\n\nexport function TaggedTemplateExpression(\n  this: Printer,\n  node: t.TaggedTemplateExpression,\n) {\n  this.print(node.tag);\n\n  this.print(node.typeArguments);\n\n  this.print(node.quasi);\n}\n\nexport function TemplateElement(this: Printer) {\n  throw new Error(\"TemplateElement printing is handled in TemplateLiteral\");\n}\n\nexport type TemplateLiteralBase = t.Node & {\n  quasis: t.TemplateElement[];\n};\n\nexport function _printTemplate<T extends t.Node>(\n  this: Printer,\n  node: TemplateLiteralBase,\n  substitutions: T[],\n) {\n  const quasis = node.quasis;\n  let partRaw = \"`\";\n  for (let i = 0; i < quasis.length - 1; i++) {\n    partRaw += quasis[i].value.raw;\n    this.token(partRaw + \"${\", true);\n    this.print(substitutions[i]);\n    partRaw = \"}\";\n  }\n\n  partRaw += quasis[quasis.length - 1].value.raw;\n  this.token(partRaw + \"`\", true);\n}\n\nexport function TemplateLiteral(this: Printer, node: t.TemplateLiteral) {\n  _printTemplate.call(this, node, node.expressions);\n}\n","import type Printer from \"../printer.ts\";\nimport {\n  isCallExpression,\n  isLiteral,\n  isMemberExpression,\n  isNewExpression,\n  isPattern,\n} from \"@babel/types\";\nimport * as charCodes from \"charcodes\";\nimport type * as t from \"@babel/types\";\nimport { TokenContext } from \"../node/index.ts\";\n\nexport function UnaryExpression(this: Printer, node: t.UnaryExpression) {\n  const { operator } = node;\n  const firstChar = operator.charCodeAt(0);\n  if (firstChar >= charCodes.lowercaseA && firstChar <= charCodes.lowercaseZ) {\n    this.word(operator);\n    this.space();\n  } else {\n    this.tokenChar(firstChar);\n  }\n\n  this.print(node.argument);\n}\n\nexport function DoExpression(this: Printer, node: t.DoExpression) {\n  if (node.async) {\n    this.word(\"async\", true);\n    this.space();\n  }\n  this.word(\"do\");\n  this.space();\n  this.print(node.body);\n}\n\nexport function ParenthesizedExpression(\n  this: Printer,\n  node: t.ParenthesizedExpression,\n) {\n  this.token(\"(\");\n  const oldNoLineTerminatorAfterNode = this.enterDelimited();\n  this.print(node.expression, undefined, true);\n  this._noLineTerminatorAfterNode = oldNoLineTerminatorAfterNode;\n  this.rightParens(node);\n}\n\nexport function UpdateExpression(this: Printer, node: t.UpdateExpression) {\n  if (node.prefix) {\n    this.token(node.operator, false, 0, true);\n    this.print(node.argument);\n  } else {\n    this.print(node.argument, true);\n    this.token(node.operator, false, 0, true);\n  }\n}\n\nexport function ConditionalExpression(\n  this: Printer,\n  node: t.ConditionalExpression,\n) {\n  this.print(node.test);\n  this.space();\n  this.token(\"?\");\n  this.space();\n  this.print(node.consequent);\n  this.space();\n  this.token(\":\");\n  this.space();\n  this.print(node.alternate);\n}\n\nfunction _printExpressionArguments(\n  this: Printer,\n  node: t.CallExpression | t.NewExpression | t.OptionalCallExpression,\n) {\n  this.token(\"(\");\n  const oldNoLineTerminatorAfterNode = this.enterDelimited();\n  this.printList(\n    node.arguments,\n    this.shouldPrintTrailingComma(\")\"),\n    undefined,\n    undefined,\n    undefined,\n    true,\n  );\n  this._noLineTerminatorAfterNode = oldNoLineTerminatorAfterNode;\n  this.rightParens(node);\n}\n\nexport function NewExpression(\n  this: Printer,\n  node: t.NewExpression,\n  parent: t.Node,\n) {\n  this.word(\"new\");\n  this.space();\n  this.print(node.callee);\n  if (\n    this.format.minified &&\n    node.arguments.length === 0 &&\n    !isCallExpression(parent, { callee: node }) &&\n    !isMemberExpression(parent) &&\n    !isNewExpression(parent)\n  ) {\n    return;\n  }\n\n  this.print(node.typeArguments);\n\n  if (\n    node.arguments.length === 0 &&\n    this.tokenMap &&\n    !this.tokenMap.endMatches(node, \")\")\n  ) {\n    return;\n  }\n\n  _printExpressionArguments.call(this, node);\n}\n\nexport function SequenceExpression(this: Printer, node: t.SequenceExpression) {\n  this.printList(node.expressions);\n}\n\nexport function ThisExpression(this: Printer) {\n  this.word(\"this\");\n}\n\nexport function Super(this: Printer) {\n  this.word(\"super\");\n}\n\nexport function _shouldPrintDecoratorsBeforeExport(\n  this: Printer,\n  node: t.ExportDeclaration & { declaration: t.ClassDeclaration },\n) {\n  return (\n    typeof node.start === \"number\" && node.start === node.declaration.start\n  );\n}\n\nexport function Decorator(this: Printer, node: t.Decorator) {\n  this.token(\"@\");\n  const { expression } = node;\n  this.print(expression);\n  this.newline();\n}\n\nexport function OptionalMemberExpression(\n  this: Printer,\n  node: t.OptionalMemberExpression,\n) {\n  let { computed } = node;\n  const { optional, property } = node;\n\n  this.print(node.object);\n\n  if (!computed && isMemberExpression(property)) {\n    throw new TypeError(\"Got a MemberExpression for MemberExpression property\");\n  }\n\n  // @ts-expect-error todo(flow->ts) maybe instead of typeof check specific literal types?\n  if (isLiteral(property) && typeof property.value === \"number\") {\n    computed = true;\n  }\n  if (optional) {\n    this.token(\"?.\");\n  }\n\n  if (computed) {\n    this.token(\"[\");\n    this.print(property);\n    this.token(\"]\");\n  } else {\n    if (!optional) {\n      this.token(\".\");\n    }\n    this.print(property);\n  }\n}\n\nexport function OptionalCallExpression(\n  this: Printer,\n  node: t.OptionalCallExpression,\n) {\n  this.print(node.callee);\n\n  if (node.optional) {\n    this.token(\"?.\");\n  }\n\n  this.print(node.typeArguments);\n\n  _printExpressionArguments.call(this, node);\n}\n\nexport function CallExpression(this: Printer, node: t.CallExpression) {\n  this.print(node.callee);\n\n  this.print(node.typeArguments);\n\n  _printExpressionArguments.call(this, node);\n}\n\nexport function Import(this: Printer) {\n  this.word(\"import\");\n}\n\nexport function AwaitExpression(this: Printer, node: t.AwaitExpression) {\n  this.word(\"await\");\n  this.space();\n  this.print(node.argument);\n}\n\nexport function YieldExpression(this: Printer, node: t.YieldExpression) {\n  if (node.delegate) {\n    this.word(\"yield\", true);\n    this.token(\"*\");\n    if (node.argument) {\n      this.space();\n      // line terminators are allowed after yield*\n      this.print(node.argument);\n    }\n  } else if (node.argument) {\n    this.word(\"yield\", true);\n    this.space();\n    this.print(node.argument);\n  } else {\n    this.word(\"yield\");\n  }\n}\n\nexport function EmptyStatement(this: Printer) {\n  this.semicolon(true /* force */);\n}\n\nexport function ExpressionStatement(\n  this: Printer,\n  node: t.ExpressionStatement,\n) {\n  this.tokenContext |= TokenContext.expressionStatement;\n  this.print(node.expression);\n  this.semicolon();\n}\n\nexport function AssignmentPattern(this: Printer, node: t.AssignmentPattern) {\n  this.print(node.left);\n  if (node.left.type === \"Identifier\" || isPattern(node.left)) {\n    if (node.left.optional) this.token(\"?\");\n    this.print(node.left.typeAnnotation);\n  }\n  this.space();\n  this.token(\"=\");\n  this.space();\n  this.print(node.right);\n}\n\nexport function AssignmentExpression(\n  this: Printer,\n  node: t.AssignmentExpression | t.LogicalExpression,\n) {\n  this.print(node.left);\n\n  this.space();\n  this.token(node.operator, false, 0, true);\n  this.space();\n\n  this.print(node.right);\n}\n\nexport { AssignmentExpression as LogicalExpression };\n\nexport function BinaryExpression(this: Printer, node: t.BinaryExpression) {\n  this.print(node.left);\n\n  this.space();\n  const { operator } = node;\n  if (operator.charCodeAt(0) === charCodes.lowercaseI) {\n    this.word(operator);\n  } else {\n    this.token(operator, false, 0, true);\n    this.setLastChar(operator.charCodeAt(operator.length - 1));\n  }\n  this.space();\n\n  this.print(node.right);\n}\n\nexport function BindExpression(this: Printer, node: t.BindExpression) {\n  this.print(node.object);\n  this.token(\"::\");\n  this.print(node.callee);\n}\n\nexport function MemberExpression(this: Printer, node: t.MemberExpression) {\n  this.print(node.object);\n\n  if (!node.computed && isMemberExpression(node.property)) {\n    throw new TypeError(\"Got a MemberExpression for MemberExpression property\");\n  }\n\n  let computed = node.computed;\n  // @ts-expect-error todo(flow->ts) maybe use specific literal types\n  if (isLiteral(node.property) && typeof node.property.value === \"number\") {\n    computed = true;\n  }\n\n  if (computed) {\n    const oldNoLineTerminatorAfterNode = this.enterDelimited();\n    this.token(\"[\");\n    this.print(node.property, undefined, true);\n    this.token(\"]\");\n    this._noLineTerminatorAfterNode = oldNoLineTerminatorAfterNode;\n  } else {\n    this.token(\".\");\n    this.print(node.property);\n  }\n}\n\nexport function MetaProperty(this: Printer, node: t.MetaProperty) {\n  this.print(node.meta);\n  this.token(\".\");\n  this.print(node.property);\n}\n\nexport function PrivateName(this: Printer, node: t.PrivateName) {\n  this.token(\"#\");\n  this.print(node.id);\n}\n\nexport function V8IntrinsicIdentifier(\n  this: Printer,\n  node: t.V8IntrinsicIdentifier,\n) {\n  this.token(\"%\");\n  this.word(node.name);\n}\n\nexport function ModuleExpression(this: Printer, node: t.ModuleExpression) {\n  this.word(\"module\", true);\n  this.space();\n  this.token(\"{\");\n  this.indent();\n  const { body } = node;\n  if (body.body.length || body.directives.length) {\n    this.newline();\n  }\n  this.print(body);\n  this.dedent();\n  this.rightBrace(node);\n}\n","import type Printer from \"../printer.ts\";\nimport { isFor, isIfStatement, isStatement, isVoidPattern } from \"@babel/types\";\nimport type * as t from \"@babel/types\";\n\nimport * as charCodes from \"charcodes\";\nimport { TokenContext } from \"../node/index.ts\";\n\nexport function WithStatement(this: Printer, node: t.WithStatement) {\n  this.word(\"with\");\n  this.space();\n  this.token(\"(\");\n  this.print(node.object);\n  this.token(\")\");\n  this.printBlock(node.body);\n}\n\nexport function IfStatement(this: Printer, node: t.IfStatement) {\n  this.word(\"if\");\n  this.space();\n  this.token(\"(\");\n  this.print(node.test);\n  this.token(\")\");\n  this.space();\n\n  const needsBlock =\n    node.alternate && isIfStatement(getLastStatement(node.consequent));\n  if (needsBlock) {\n    this.token(\"{\");\n    this.newline();\n    this.indent();\n  }\n\n  this.printAndIndentOnComments(node.consequent);\n\n  if (needsBlock) {\n    this.dedent();\n    this.newline();\n    this.token(\"}\");\n  }\n\n  if (node.alternate) {\n    if (this.endsWith(charCodes.rightCurlyBrace)) this.space();\n    this.word(\"else\");\n    this.space();\n    this.printAndIndentOnComments(node.alternate);\n  }\n}\n\n// Recursively get the last statement.\nfunction getLastStatement(statement: t.Statement): t.Statement {\n  // @ts-expect-error: If statement.body is empty or not a Node, isStatement will return false\n  const { body } = statement;\n  if (isStatement(body) === false) {\n    return statement;\n  }\n\n  return getLastStatement(body);\n}\n\nexport function ForStatement(this: Printer, node: t.ForStatement) {\n  this.word(\"for\");\n  this.space();\n  this.token(\"(\");\n\n  this.tokenContext |=\n    TokenContext.forInitHead | TokenContext.forInOrInitHeadAccumulate;\n  this.print(node.init);\n  this.tokenContext = TokenContext.normal;\n\n  this.token(\";\");\n\n  if (node.test) {\n    this.space();\n    this.print(node.test);\n  }\n  this.tokenChar(charCodes.semicolon, 1);\n\n  if (node.update) {\n    this.space();\n    this.print(node.update);\n  }\n\n  this.token(\")\");\n  this.printBlock(node.body);\n}\n\nexport function WhileStatement(this: Printer, node: t.WhileStatement) {\n  this.word(\"while\");\n  this.space();\n  this.token(\"(\");\n  this.print(node.test);\n  this.token(\")\");\n  this.printBlock(node.body);\n}\n\nexport function ForInStatement(this: Printer, node: t.ForInStatement) {\n  this.word(\"for\");\n  this.space();\n  this.noIndentInnerCommentsHere();\n  this.token(\"(\");\n  this.tokenContext |=\n    TokenContext.forInHead | TokenContext.forInOrInitHeadAccumulate;\n  this.print(node.left);\n  this.tokenContext = TokenContext.normal;\n  this.space();\n  this.word(\"in\");\n  this.space();\n  this.print(node.right);\n  this.token(\")\");\n  this.printBlock(node.body);\n}\n\nexport function ForOfStatement(this: Printer, node: t.ForOfStatement) {\n  this.word(\"for\");\n  this.space();\n  if (node.await) {\n    this.word(\"await\");\n    this.space();\n  }\n  this.noIndentInnerCommentsHere();\n  this.token(\"(\");\n  this.tokenContext |= TokenContext.forOfHead;\n  this.print(node.left);\n  this.space();\n  this.word(\"of\");\n  this.space();\n  this.print(node.right);\n  this.token(\")\");\n  this.printBlock(node.body);\n}\n\nexport function DoWhileStatement(this: Printer, node: t.DoWhileStatement) {\n  this.word(\"do\");\n  this.space();\n  this.print(node.body);\n  this.space();\n  this.word(\"while\");\n  this.space();\n  this.token(\"(\");\n  this.print(node.test);\n  this.token(\")\");\n  this.semicolon();\n}\n\nfunction printStatementAfterKeyword(\n  printer: Printer,\n  node: t.Node | null | undefined,\n) {\n  if (node) {\n    printer.space();\n    printer.printTerminatorless(node);\n  }\n\n  printer.semicolon();\n}\n\nexport function BreakStatement(this: Printer, node: t.ContinueStatement) {\n  this.word(\"break\");\n  printStatementAfterKeyword(this, node.label);\n}\n\nexport function ContinueStatement(this: Printer, node: t.ContinueStatement) {\n  this.word(\"continue\");\n  printStatementAfterKeyword(this, node.label);\n}\n\nexport function ReturnStatement(this: Printer, node: t.ReturnStatement) {\n  this.word(\"return\");\n  printStatementAfterKeyword(this, node.argument);\n}\n\nexport function ThrowStatement(this: Printer, node: t.ThrowStatement) {\n  this.word(\"throw\");\n  printStatementAfterKeyword(this, node.argument);\n}\n\nexport function LabeledStatement(this: Printer, node: t.LabeledStatement) {\n  this.print(node.label);\n  this.token(\":\");\n  this.space();\n  this.print(node.body);\n}\n\nexport function TryStatement(this: Printer, node: t.TryStatement) {\n  this.word(\"try\");\n  this.space();\n  this.print(node.block);\n  this.space();\n\n  // Esprima bug puts the catch clause in a `handlers` array.\n  // see https://code.google.com/p/esprima/issues/detail?id=433\n  // We run into this from regenerator generated ast.\n  // @ts-expect-error todo(flow->ts) should ast node type be updated to support this?\n  if (node.handlers) {\n    // @ts-expect-error todo(flow->ts) should ast node type be updated to support this?\n    this.print(node.handlers[0]);\n  } else {\n    this.print(node.handler);\n  }\n\n  if (node.finalizer) {\n    this.space();\n    this.word(\"finally\");\n    this.space();\n    this.print(node.finalizer);\n  }\n}\n\nexport function CatchClause(this: Printer, node: t.CatchClause) {\n  this.word(\"catch\");\n  this.space();\n  if (node.param) {\n    this.token(\"(\");\n    this.print(node.param);\n    this.print(node.param.typeAnnotation);\n    this.token(\")\");\n    this.space();\n  }\n  this.print(node.body);\n}\n\nexport function SwitchStatement(this: Printer, node: t.SwitchStatement) {\n  this.word(\"switch\");\n  this.space();\n  this.token(\"(\");\n  this.print(node.discriminant);\n  this.token(\")\");\n  this.space();\n  this.token(\"{\");\n\n  this.printSequence(node.cases, true);\n\n  this.rightBrace(node);\n}\n\nexport function SwitchCase(this: Printer, node: t.SwitchCase) {\n  if (node.test) {\n    this.word(\"case\");\n    this.space();\n    this.print(node.test);\n    this.token(\":\");\n  } else {\n    this.word(\"default\");\n    this.token(\":\");\n  }\n\n  if (node.consequent.length) {\n    this.newline();\n    this.printSequence(node.consequent, true);\n  }\n}\n\nexport function DebuggerStatement(this: Printer) {\n  this.word(\"debugger\");\n  this.semicolon();\n}\n\nfunction commaSeparatorWithNewline(this: Printer, occurrenceCount: number) {\n  this.tokenChar(charCodes.comma, occurrenceCount);\n  this.newline();\n}\n\nexport function VariableDeclaration(\n  this: Printer,\n  node: t.VariableDeclaration,\n  parent: t.Node,\n) {\n  if (node.declare) {\n    // TS\n    this.word(\"declare\");\n    this.space();\n  }\n\n  const { kind } = node;\n  switch (kind) {\n    case \"await using\":\n      this.word(\"await\");\n      this.space();\n    // fallthrough\n    case \"using\":\n      this.word(\"using\", true);\n      break;\n    default:\n      this.word(kind);\n  }\n  this.space();\n\n  let hasInits = false;\n  // don't add whitespace to loop heads\n  if (!isFor(parent)) {\n    for (const declar of node.declarations) {\n      if (declar.init) {\n        // has an init so let's split it up over multiple lines\n        hasInits = true;\n        break;\n      }\n    }\n  }\n\n  //\n  // use a pretty separator when we aren't in compact mode, have initializers and don't have retainLines on\n  // this will format declarations like:\n  //\n  //   let foo = \"bar\", bar = \"foo\";\n  //\n  // into\n  //\n  //   let foo = \"bar\",\n  //       bar = \"foo\";\n  //\n\n  this.printList(\n    node.declarations,\n    undefined,\n    undefined,\n    node.declarations.length > 1,\n    hasInits ? commaSeparatorWithNewline : undefined,\n  );\n\n  if (parent != null) {\n    switch (parent.type) {\n      case \"ForStatement\":\n        if (parent.init === node) {\n          return;\n        }\n        break;\n      case \"ForInStatement\":\n      case \"ForOfStatement\":\n        if (parent.left === node) {\n          return;\n        }\n    }\n  }\n\n  this.semicolon();\n}\n\nexport function VariableDeclarator(this: Printer, node: t.VariableDeclarator) {\n  this.print(node.id);\n  if (node.definite) this.token(\"!\"); // TS\n\n  if (!isVoidPattern(node.id)) {\n    this.print(node.id.typeAnnotation);\n  }\n\n  if (node.init) {\n    this.space();\n    this.token(\"=\");\n    this.space();\n    this.print(node.init);\n  }\n}\n","import type Printer from \"../printer.ts\";\nimport type * as t from \"@babel/types\";\nimport { isIdentifier, type ParentMaps } from \"@babel/types\";\nimport * as charCodes from \"charcodes\";\nimport { TokenContext } from \"../node/index.ts\";\n\ntype ParentsOf<T extends t.Node> = ParentMaps[T[\"type\"]];\n\nexport function _params(\n  this: Printer,\n  node: t.Function | t.TSDeclareMethod | t.TSDeclareFunction,\n  noLineTerminator: boolean,\n  idNode?: t.Expression | t.PrivateName | null,\n  parentNode?: ParentsOf<typeof node>,\n) {\n  this.print(node.typeParameters);\n\n  if (idNode !== undefined || parentNode !== undefined) {\n    const nameInfo = _getFuncIdName.call(this, idNode, parentNode);\n    if (nameInfo) {\n      this.sourceIdentifierName(nameInfo.name, nameInfo.pos);\n    }\n  }\n\n  this.token(\"(\");\n  _parameters.call(this, node.params, charCodes.rightParenthesis);\n\n  this.print(node.returnType, noLineTerminator);\n\n  this._noLineTerminator = noLineTerminator;\n}\n\nexport function _parameters(\n  this: Printer,\n  parameters: t.Function[\"params\"],\n  endToken: number,\n) {\n  const oldNoLineTerminatorAfterNode = this.enterDelimited();\n\n  const trailingComma = this.shouldPrintTrailingComma(endToken);\n\n  const paramLength = parameters.length;\n  for (let i = 0; i < paramLength; i++) {\n    _param.call(this, parameters[i]);\n\n    if (trailingComma || i < paramLength - 1) {\n      this.tokenChar(charCodes.comma, i);\n      this.space();\n    }\n  }\n\n  this.tokenChar(endToken);\n  this._noLineTerminatorAfterNode = oldNoLineTerminatorAfterNode;\n}\n\nexport function _param(\n  this: Printer,\n  parameter: t.Identifier | t.RestElement | t.Pattern | t.TSParameterProperty,\n) {\n  this.printJoin(\n    // @ts-expect-error decorators is not in VoidPattern\n    parameter.decorators,\n    undefined,\n    undefined,\n    undefined,\n    undefined,\n    true,\n  );\n  this.print(parameter, undefined, true);\n  if (\n    // @ts-expect-error optional is not in TSParameterProperty\n    parameter.optional\n  ) {\n    this.token(\"?\"); // TS / flow\n  }\n\n  this.print(\n    // @ts-expect-error typeAnnotation is not in TSParameterProperty\n    parameter.typeAnnotation,\n    undefined,\n    true,\n  ); // TS / flow\n}\n\nexport function _methodHead(this: Printer, node: t.Method | t.TSDeclareMethod) {\n  const kind = node.kind;\n  const key = node.key;\n\n  if (kind === \"get\" || kind === \"set\") {\n    this.word(kind);\n    this.space();\n  }\n\n  if (node.async) {\n    this.word(\"async\", true);\n    this.space();\n  }\n\n  if (\n    kind === \"method\" ||\n    // @ts-expect-error Fixme: kind: \"init\" is not defined\n    kind === \"init\"\n  ) {\n    if (node.generator) {\n      this.token(\"*\");\n    }\n  }\n\n  if (node.computed) {\n    this.token(\"[\");\n    this.print(key);\n    this.token(\"]\");\n  } else {\n    this.print(key);\n  }\n\n  if (\n    // @ts-expect-error optional is not in ObjectMethod\n    node.optional\n  ) {\n    // TS\n    this.token(\"?\");\n  }\n\n  if (this._buf._map) {\n    _params.call(\n      this,\n      node,\n      false,\n      node.computed && node.key.type !== \"StringLiteral\" ? undefined : node.key,\n    );\n  } else {\n    _params.call(this, node, false);\n  }\n}\n\nexport function _predicate(\n  this: Printer,\n  node:\n    | t.FunctionDeclaration\n    | t.FunctionExpression\n    | t.ArrowFunctionExpression,\n  noLineTerminatorAfter?: boolean,\n) {\n  if (node.predicate) {\n    if (!node.returnType) {\n      this.token(\":\");\n    }\n    this.space();\n    this.print(node.predicate, noLineTerminatorAfter);\n  }\n}\n\nexport function _functionHead(\n  this: Printer,\n  node: t.FunctionDeclaration | t.FunctionExpression | t.TSDeclareFunction,\n  parent: ParentsOf<typeof node>,\n  hasPredicate: boolean,\n) {\n  if (node.async) {\n    this.word(\"async\");\n    if (!this.format.preserveFormat) {\n      // We prevent inner comments from being printed here,\n      // so that they are always consistently printed in the\n      // same place regardless of the function type.\n      this._innerCommentsState = 0 /* INNER_COMMENT_STATE.DISALLOWED */;\n    }\n    this.space();\n  }\n  this.word(\"function\");\n  if (node.generator) {\n    if (!this.format.preserveFormat) {\n      // We prevent inner comments from being printed here,\n      // so that they are always consistently printed in the\n      // same place regardless of the function type.\n      this._innerCommentsState = 0 /* INNER_COMMENT_STATE.DISALLOWED */;\n    }\n    this.token(\"*\");\n  }\n\n  this.space();\n  if (node.id) {\n    this.print(node.id);\n  }\n\n  if (this._buf._map) {\n    _params.call(this, node, false, node.id, parent);\n  } else {\n    _params.call(this, node, false);\n  }\n  if (hasPredicate) {\n    _predicate.call(this, node as t.FunctionDeclaration | t.FunctionExpression);\n  }\n}\n\nexport function FunctionExpression(\n  this: Printer,\n  node: t.FunctionExpression,\n  parent: ParentsOf<typeof node>,\n) {\n  _functionHead.call(this, node, parent, true);\n  this.space();\n  this.print(node.body);\n}\n\nexport { FunctionExpression as FunctionDeclaration };\n\nexport function ArrowFunctionExpression(\n  this: Printer,\n  node: t.ArrowFunctionExpression,\n  parent: ParentsOf<typeof node>,\n) {\n  if (node.async) {\n    this.word(\"async\", true);\n    this.space();\n  }\n\n  if (_shouldPrintArrowParamsParens.call(this, node)) {\n    _params.call(\n      this,\n      node,\n      true,\n      undefined,\n      this._buf._map ? parent : undefined,\n    );\n  } else {\n    this.print(node.params[0], true);\n  }\n\n  _predicate.call(this, node, true);\n  this.space();\n  // When printing (x)/*1*/=>{}, we remove the parentheses\n  // and thus there aren't two contiguous inner tokens.\n  // We forcefully print inner comments here.\n  this.printInnerComments();\n  this.token(\"=>\");\n\n  this.space();\n\n  this.tokenContext |= TokenContext.arrowBody;\n  this.print(node.body);\n}\n\n// Try to avoid printing parens in simple cases, but only if we're pretty\n// sure that they aren't needed by type annotations or potential newlines.\nexport function _shouldPrintArrowParamsParens(\n  this: Printer,\n  node: t.ArrowFunctionExpression,\n): boolean {\n  if (node.params.length !== 1) return true;\n\n  if (node.typeParameters || node.returnType || node.predicate) {\n    return true;\n  }\n\n  const firstParam = node.params[0];\n  if (\n    !isIdentifier(firstParam) ||\n    firstParam.typeAnnotation ||\n    firstParam.optional ||\n    // Flow does not support `foo /*: string*/ => {};`\n    firstParam.leadingComments?.length ||\n    firstParam.trailingComments?.length\n  ) {\n    return true;\n  }\n\n  if (this.tokenMap) {\n    if (node.loc == null) return true;\n    if (this.tokenMap.findMatching(node, \"(\") !== null) return true;\n    const arrowToken = this.tokenMap.findMatching(node, \"=>\");\n    if (arrowToken?.loc == null) return true;\n    return arrowToken.loc.start.line !== node.loc.start.line;\n  }\n\n  if (this.format.retainLines) return true;\n\n  return false;\n}\n\nfunction _getFuncIdName(\n  this: Printer,\n  idNode: t.Expression | t.PrivateName,\n  parent: ParentsOf<t.Function | t.TSDeclareMethod | t.TSDeclareFunction>,\n) {\n  let id: t.Expression | t.PrivateName | t.LVal | t.VoidPattern = idNode;\n\n  if (!id && parent) {\n    const parentType = parent.type;\n\n    if (parentType === \"VariableDeclarator\") {\n      id = parent.id;\n    } else if (\n      parentType === \"AssignmentExpression\" ||\n      parentType === \"AssignmentPattern\"\n    ) {\n      id = parent.left;\n    } else if (\n      parentType === \"ObjectProperty\" ||\n      parentType === \"ClassProperty\"\n    ) {\n      if (!parent.computed || parent.key.type === \"StringLiteral\") {\n        id = parent.key;\n      }\n    } else if (\n      parentType === \"ClassPrivateProperty\" ||\n      parentType === \"ClassAccessorProperty\"\n    ) {\n      id = parent.key;\n    }\n  }\n\n  if (!id) return;\n\n  let nameInfo;\n\n  if (id.type === \"Identifier\") {\n    nameInfo = {\n      pos: id.loc?.start,\n      name: id.loc?.identifierName || id.name,\n    };\n  } else if (id.type === \"PrivateName\") {\n    nameInfo = {\n      pos: id.loc?.start,\n      name: \"#\" + id.id.name,\n    };\n  } else if (id.type === \"StringLiteral\") {\n    nameInfo = {\n      pos: id.loc?.start,\n      name: id.value,\n    };\n  }\n\n  return nameInfo;\n}\n","import type Printer from \"../printer.ts\";\nimport type * as t from \"@babel/types\";\nimport * as charCodes from \"charcodes\";\nimport { _functionHead, _param, _parameters } from \"./methods.ts\";\nimport { _classMethodHead } from \"./classes.ts\";\nimport { _printTemplate } from \"./template-literals.ts\";\n\nexport function TSTypeAnnotation(\n  this: Printer,\n  node: t.TSTypeAnnotation,\n  parent: t.Node,\n) {\n  // TODO(@nicolo-ribaudo): investigate not including => in the range\n  // of the return type of an arrow function type\n  this.token(\n    (parent.type === \"TSFunctionType\" || parent.type === \"TSConstructorType\") &&\n      parent.returnType === node\n      ? \"=>\"\n      : \":\",\n  );\n  this.space();\n  // @ts-expect-error todo(flow->ts) can this be removed? `.optional` looks to be not existing property\n  if (node.optional) this.token(\"?\");\n  this.print(node.typeAnnotation);\n}\n\nexport function TSTypeParameterInstantiation(\n  this: Printer,\n  node: t.TSTypeParameterInstantiation,\n  parent: t.Node,\n): void {\n  this.token(\"<\");\n\n  let printTrailingSeparator: boolean | null =\n    parent.type === \"ArrowFunctionExpression\" && node.params.length === 1;\n  if (this.tokenMap && node.start != null && node.end != null) {\n    // Only force the trailing comma for pre-existing nodes if they\n    // already had a comma (either because they were multi-param, or\n    // because they had a trailing comma)\n    printTrailingSeparator &&= !!this.tokenMap.find(node, t =>\n      this.tokenMap!.matchesOriginal(t, \",\"),\n    );\n    // Preserve the trailing comma if it was there before\n    printTrailingSeparator ||= this.shouldPrintTrailingComma(\">\");\n  }\n\n  this.printList(node.params, printTrailingSeparator);\n  this.token(\">\");\n}\n\nexport { TSTypeParameterInstantiation as TSTypeParameterDeclaration };\n\nexport function TSTypeParameter(this: Printer, node: t.TSTypeParameter) {\n  if (node.const) {\n    this.word(\"const\");\n    this.space();\n  }\n\n  if (node.in) {\n    this.word(\"in\");\n    this.space();\n  }\n\n  if (node.out) {\n    this.word(\"out\");\n    this.space();\n  }\n\n  this.word(node.name.name);\n\n  if (node.constraint) {\n    this.space();\n    this.word(\"extends\");\n    this.space();\n    this.print(node.constraint);\n  }\n\n  if (node.default) {\n    this.space();\n    this.token(\"=\");\n    this.space();\n    this.print(node.default);\n  }\n}\n\nexport function TSParameterProperty(\n  this: Printer,\n  node: t.TSParameterProperty,\n) {\n  if (node.accessibility) {\n    this.word(node.accessibility);\n    this.space();\n  }\n\n  if (node.readonly) {\n    this.word(\"readonly\");\n    this.space();\n  }\n\n  _param.call(this, node.parameter);\n}\n\nexport function TSDeclareFunction(\n  this: Printer,\n  node: t.TSDeclareFunction,\n  parent: t.ParentMaps[\"TSDeclareFunction\"],\n) {\n  if (node.declare) {\n    this.word(\"declare\");\n    this.space();\n  }\n  _functionHead.call(this, node, parent, false);\n  this.semicolon();\n}\n\nexport function TSDeclareMethod(this: Printer, node: t.TSDeclareMethod) {\n  _classMethodHead.call(this, node, false);\n  this.semicolon();\n}\n\nexport function TSQualifiedName(this: Printer, node: t.TSQualifiedName) {\n  this.print(node.left);\n  this.token(\".\");\n  this.print(node.right);\n}\n\nexport function TSCallSignatureDeclaration(\n  this: Printer,\n  node: t.TSCallSignatureDeclaration,\n) {\n  tsPrintSignatureDeclarationBase.call(this, node);\n  maybePrintTrailingCommaOrSemicolon(this, node);\n}\n\nfunction maybePrintTrailingCommaOrSemicolon(printer: Printer, node: t.Node) {\n  if (!printer.tokenMap || !node.start || !node.end) {\n    printer.semicolon();\n    return;\n  }\n\n  if (printer.tokenMap.endMatches(node, \",\")) {\n    printer.token(\",\");\n  } else if (printer.tokenMap.endMatches(node, \";\")) {\n    printer.semicolon();\n  }\n}\n\nexport function TSConstructSignatureDeclaration(\n  this: Printer,\n  node: t.TSConstructSignatureDeclaration,\n) {\n  this.word(\"new\");\n  this.space();\n  tsPrintSignatureDeclarationBase.call(this, node);\n  maybePrintTrailingCommaOrSemicolon(this, node);\n}\n\nexport function TSPropertySignature(\n  this: Printer,\n  node: t.TSPropertySignature,\n) {\n  const { readonly } = node;\n  if (readonly) {\n    this.word(\"readonly\");\n    this.space();\n  }\n  tsPrintPropertyOrMethodName.call(this, node);\n  this.print(node.typeAnnotation);\n  maybePrintTrailingCommaOrSemicolon(this, node);\n}\n\nfunction tsPrintPropertyOrMethodName(\n  this: Printer,\n  node: t.TSPropertySignature | t.TSMethodSignature,\n) {\n  if (node.computed) {\n    this.token(\"[\");\n  }\n  this.print(node.key);\n  if (node.computed) {\n    this.token(\"]\");\n  }\n  if (node.optional) {\n    this.token(\"?\");\n  }\n}\n\nexport function TSMethodSignature(this: Printer, node: t.TSMethodSignature) {\n  const { kind } = node;\n  if (kind === \"set\" || kind === \"get\") {\n    this.word(kind);\n    this.space();\n  }\n  tsPrintPropertyOrMethodName.call(this, node);\n  tsPrintSignatureDeclarationBase.call(this, node);\n  maybePrintTrailingCommaOrSemicolon(this, node);\n}\n\nexport function TSIndexSignature(this: Printer, node: t.TSIndexSignature) {\n  const { readonly, static: isStatic } = node;\n  if (isStatic) {\n    this.word(\"static\");\n    this.space();\n  }\n  if (readonly) {\n    this.word(\"readonly\");\n    this.space();\n  }\n  this.token(\"[\");\n  _parameters.call(this, node.parameters, charCodes.rightSquareBracket);\n  this.print(node.typeAnnotation);\n  maybePrintTrailingCommaOrSemicolon(this, node);\n}\n\nexport function TSAnyKeyword(this: Printer) {\n  this.word(\"any\");\n}\nexport function TSBigIntKeyword(this: Printer) {\n  this.word(\"bigint\");\n}\nexport function TSUnknownKeyword(this: Printer) {\n  this.word(\"unknown\");\n}\nexport function TSNumberKeyword(this: Printer) {\n  this.word(\"number\");\n}\nexport function TSObjectKeyword(this: Printer) {\n  this.word(\"object\");\n}\nexport function TSBooleanKeyword(this: Printer) {\n  this.word(\"boolean\");\n}\nexport function TSStringKeyword(this: Printer) {\n  this.word(\"string\");\n}\nexport function TSSymbolKeyword(this: Printer) {\n  this.word(\"symbol\");\n}\nexport function TSVoidKeyword(this: Printer) {\n  this.word(\"void\");\n}\nexport function TSUndefinedKeyword(this: Printer) {\n  this.word(\"undefined\");\n}\nexport function TSNullKeyword(this: Printer) {\n  this.word(\"null\");\n}\nexport function TSNeverKeyword(this: Printer) {\n  this.word(\"never\");\n}\nexport function TSIntrinsicKeyword(this: Printer) {\n  this.word(\"intrinsic\");\n}\n\nexport function TSThisType(this: Printer) {\n  this.word(\"this\");\n}\n\nexport function TSFunctionType(this: Printer, node: t.TSFunctionType) {\n  tsPrintFunctionOrConstructorType.call(this, node);\n}\n\nexport function TSConstructorType(this: Printer, node: t.TSConstructorType) {\n  if (node.abstract) {\n    this.word(\"abstract\");\n    this.space();\n  }\n  this.word(\"new\");\n  this.space();\n  tsPrintFunctionOrConstructorType.call(this, node);\n}\n\nfunction tsPrintFunctionOrConstructorType(\n  this: Printer,\n  node: t.TSFunctionType | t.TSConstructorType,\n) {\n  const { typeParameters } = node;\n  const parameters = node.params;\n\n  this.print(typeParameters);\n  this.token(\"(\");\n  _parameters.call(this, parameters, charCodes.rightParenthesis);\n  this.space();\n  const returnType = node.returnType;\n\n  this.print(returnType);\n}\n\nexport function TSTypeReference(this: Printer, node: t.TSTypeReference) {\n  const typeArguments = node.typeArguments;\n\n  this.print(node.typeName, !!typeArguments);\n  this.print(typeArguments);\n}\n\nexport function TSTypePredicate(this: Printer, node: t.TSTypePredicate) {\n  if (node.asserts) {\n    this.word(\"asserts\");\n    this.space();\n  }\n  this.print(node.parameterName);\n  if (node.typeAnnotation) {\n    this.space();\n    this.word(\"is\");\n    this.space();\n    this.print(node.typeAnnotation.typeAnnotation);\n  }\n}\n\nexport function TSTypeQuery(this: Printer, node: t.TSTypeQuery) {\n  this.word(\"typeof\");\n  this.space();\n  this.print(node.exprName);\n\n  const typeArguments = node.typeArguments;\n\n  if (typeArguments) {\n    this.print(typeArguments);\n  }\n}\n\nexport function TSTypeLiteral(this: Printer, node: t.TSTypeLiteral) {\n  printBraced(this, node, () =>\n    this.printJoin(node.members, true, true, undefined, undefined, true),\n  );\n}\n\nexport function TSArrayType(this: Printer, node: t.TSArrayType) {\n  this.print(node.elementType, true);\n\n  this.token(\"[\");\n  this.token(\"]\");\n}\n\nexport function TSTupleType(this: Printer, node: t.TSTupleType) {\n  this.token(\"[\");\n  this.printList(node.elementTypes, this.shouldPrintTrailingComma(\"]\"));\n  this.token(\"]\");\n}\n\nexport function TSOptionalType(this: Printer, node: t.TSOptionalType) {\n  this.print(node.typeAnnotation);\n  this.token(\"?\");\n}\n\nexport function TSRestType(this: Printer, node: t.TSRestType) {\n  this.token(\"...\");\n  this.print(node.typeAnnotation);\n}\n\nexport function TSNamedTupleMember(this: Printer, node: t.TSNamedTupleMember) {\n  this.print(node.label);\n  if (node.optional) this.token(\"?\");\n  this.token(\":\");\n  this.space();\n  this.print(node.elementType);\n}\n\nexport function TSUnionType(this: Printer, node: t.TSUnionType) {\n  tsPrintUnionOrIntersectionType(this, node, \"|\");\n}\n\nexport function TSIntersectionType(this: Printer, node: t.TSIntersectionType) {\n  tsPrintUnionOrIntersectionType(this, node, \"&\");\n}\n\nfunction tsPrintUnionOrIntersectionType(\n  printer: Printer,\n  node: t.TSUnionType | t.TSIntersectionType,\n  sep: \"|\" | \"&\",\n) {\n  let hasLeadingToken = 0;\n  if (printer.tokenMap?.startMatches(node, sep)) {\n    hasLeadingToken = 1;\n    printer.token(sep);\n  }\n\n  printer.printJoin(node.types, undefined, undefined, function (i) {\n    this.space();\n    this.token(sep, undefined, i + hasLeadingToken);\n    this.space();\n  });\n}\n\nexport function TSConditionalType(this: Printer, node: t.TSConditionalType) {\n  this.print(node.checkType);\n  this.space();\n  this.word(\"extends\");\n  this.space();\n  this.print(node.extendsType);\n  this.space();\n  this.token(\"?\");\n  this.space();\n  this.print(node.trueType);\n  this.space();\n  this.token(\":\");\n  this.space();\n  this.print(node.falseType);\n}\n\nexport function TSInferType(this: Printer, node: t.TSInferType) {\n  this.word(\"infer\");\n  this.print(node.typeParameter);\n}\n\nexport function TSParenthesizedType(\n  this: Printer,\n  node: t.TSParenthesizedType,\n) {\n  this.token(\"(\");\n  this.print(node.typeAnnotation);\n  this.token(\")\");\n}\n\nexport function TSTypeOperator(this: Printer, node: t.TSTypeOperator) {\n  this.word(node.operator);\n  this.space();\n  this.print(node.typeAnnotation);\n}\n\nexport function TSIndexedAccessType(\n  this: Printer,\n  node: t.TSIndexedAccessType,\n) {\n  this.print(node.objectType, true);\n  this.token(\"[\");\n  this.print(node.indexType);\n  this.token(\"]\");\n}\n\nexport function TSMappedType(this: Printer, node: t.TSMappedType) {\n  const { nameType, optional, readonly, typeAnnotation } = node;\n  this.token(\"{\");\n  const oldNoLineTerminatorAfterNode = this.enterDelimited();\n  this.space();\n  if (readonly) {\n    tokenIfPlusMinus(this, readonly);\n    this.word(\"readonly\");\n    this.space();\n  }\n\n  this.token(\"[\");\n\n  this.word(node.key.name);\n\n  this.space();\n  this.word(\"in\");\n  this.space();\n\n  this.print(node.constraint);\n\n  if (nameType) {\n    this.space();\n    this.word(\"as\");\n    this.space();\n    this.print(nameType, undefined, true);\n  }\n\n  this.token(\"]\");\n\n  if (optional) {\n    tokenIfPlusMinus(this, optional);\n    this.token(\"?\");\n  }\n\n  if (typeAnnotation) {\n    this.token(\":\");\n    this.space();\n    this.print(typeAnnotation, undefined, true);\n  }\n  this.space();\n  this._noLineTerminatorAfterNode = oldNoLineTerminatorAfterNode;\n  this.token(\"}\");\n}\n\nfunction tokenIfPlusMinus(self: Printer, tok: true | \"+\" | \"-\") {\n  if (tok !== true) {\n    self.token(tok);\n  }\n}\n\nexport function TSTemplateLiteralType(\n  this: Printer,\n  node: t.TSTemplateLiteralType,\n) {\n  _printTemplate.call(this, node, node.types);\n}\n\nexport function TSLiteralType(this: Printer, node: t.TSLiteralType) {\n  this.print(node.literal);\n}\n\nexport function TSClassImplements(this: Printer, node: t.TSClassImplements) {\n  this.print(node.expression);\n  this.print(node.typeArguments);\n}\n\nexport { TSClassImplements as TSInterfaceHeritage };\n\nexport function TSInterfaceDeclaration(\n  this: Printer,\n  node: t.TSInterfaceDeclaration,\n) {\n  const { declare, id, typeParameters, extends: extendz, body } = node;\n  if (declare) {\n    this.word(\"declare\");\n    this.space();\n  }\n  this.word(\"interface\");\n  this.space();\n  this.print(id);\n  this.print(typeParameters);\n  if (extendz?.length) {\n    this.space();\n    this.word(\"extends\");\n    this.space();\n    this.printList(extendz);\n  }\n  this.space();\n  this.print(body);\n}\n\nexport function TSInterfaceBody(this: Printer, node: t.TSInterfaceBody) {\n  printBraced(this, node, () =>\n    this.printJoin(node.body, true, true, undefined, undefined, true),\n  );\n}\n\nexport function TSTypeAliasDeclaration(\n  this: Printer,\n  node: t.TSTypeAliasDeclaration,\n) {\n  const { declare, id, typeParameters, typeAnnotation } = node;\n  if (declare) {\n    this.word(\"declare\");\n    this.space();\n  }\n  this.word(\"type\");\n  this.space();\n  this.print(id);\n  this.print(typeParameters);\n  this.space();\n  this.token(\"=\");\n  this.space();\n  this.print(typeAnnotation);\n  this.semicolon();\n}\n\nexport function TSAsExpression(this: Printer, node: t.TSAsExpression) {\n  const { expression, typeAnnotation } = node;\n  this.print(expression, true);\n  this.space();\n  this.word(\"as\");\n  this.space();\n  this.print(typeAnnotation);\n}\n\nexport function TSSatisfiesExpression(\n  this: Printer,\n  node: t.TSSatisfiesExpression,\n) {\n  const { expression, typeAnnotation } = node;\n  this.print(expression, true);\n  this.space();\n  this.word(\"satisfies\");\n  this.space();\n  this.print(typeAnnotation);\n}\n\nexport function TSTypeAssertion(this: Printer, node: t.TSTypeAssertion) {\n  const { typeAnnotation, expression } = node;\n  this.token(\"<\");\n  this.print(typeAnnotation);\n  this.token(\">\");\n  this.space();\n  this.print(expression);\n}\n\nexport function TSInstantiationExpression(\n  this: Printer,\n  node: t.TSInstantiationExpression,\n) {\n  this.print(node.expression);\n\n  this.print(node.typeArguments);\n}\n\nexport function TSEnumDeclaration(this: Printer, node: t.TSEnumDeclaration) {\n  const { declare, const: isConst, id } = node;\n  if (declare) {\n    this.word(\"declare\");\n    this.space();\n  }\n  if (isConst) {\n    this.word(\"const\");\n    this.space();\n  }\n  this.word(\"enum\");\n  this.space();\n  this.print(id);\n  this.space();\n\n  this.print(node.body);\n}\n\nexport function TSEnumBody(this: Printer, node: t.TSEnumBody) {\n  printBraced(this, node, () =>\n    this.printList(\n      node.members,\n      this.shouldPrintTrailingComma(\"}\") ?? false,\n      true,\n      true,\n      undefined,\n      true,\n    ),\n  );\n}\n\nexport function TSEnumMember(this: Printer, node: t.TSEnumMember) {\n  const { id, initializer } = node;\n  this.print(id);\n  if (initializer) {\n    this.space();\n    this.token(\"=\");\n    this.space();\n    this.print(initializer);\n  }\n}\n\nexport function TSModuleDeclaration(\n  this: Printer,\n  node: t.TSModuleDeclaration,\n) {\n  const { declare, kind } = node;\n\n  if (declare) {\n    this.word(\"declare\");\n    this.space();\n  }\n\n  if (kind !== \"global\") {\n    this.word(kind);\n    this.space();\n  }\n\n  this.print(node.id);\n  if (!node.body) {\n    this.semicolon();\n    return;\n  }\n  this.space();\n  this.print(node.body);\n}\n\nexport function TSModuleBlock(this: Printer, node: t.TSModuleBlock) {\n  printBraced(this, node, () => this.printSequence(node.body, true, true));\n}\n\nexport function TSImportType(this: Printer, node: t.TSImportType) {\n  const { qualifier, options } = node;\n  this.word(\"import\");\n  this.token(\"(\");\n  this.print(node.source);\n  if (options) {\n    this.token(\",\");\n    this.print(options);\n  }\n  this.token(\")\");\n  if (qualifier) {\n    this.token(\".\");\n    this.print(qualifier);\n  }\n  const typeArguments = node.typeArguments;\n\n  if (typeArguments) {\n    this.print(typeArguments);\n  }\n}\n\nexport function TSImportEqualsDeclaration(\n  this: Printer,\n  node: t.TSImportEqualsDeclaration,\n) {\n  const { id, moduleReference } = node;\n\n  this.word(\"import\");\n  this.space();\n  this.print(id);\n  this.space();\n  this.token(\"=\");\n  this.space();\n  this.print(moduleReference);\n  this.semicolon();\n}\n\nexport function TSExternalModuleReference(\n  this: Printer,\n  node: t.TSExternalModuleReference,\n) {\n  this.token(\"require(\");\n  this.print(node.expression);\n  this.token(\")\");\n}\n\nexport function TSNonNullExpression(\n  this: Printer,\n  node: t.TSNonNullExpression,\n) {\n  this.print(node.expression);\n  this.token(\"!\");\n  this.setLastChar(charCodes.exclamationMark);\n}\n\nexport function TSExportAssignment(this: Printer, node: t.TSExportAssignment) {\n  this.word(\"export\");\n  this.space();\n  this.token(\"=\");\n  this.space();\n  this.print(node.expression);\n  this.semicolon();\n}\n\nexport function TSNamespaceExportDeclaration(\n  this: Printer,\n  node: t.TSNamespaceExportDeclaration,\n) {\n  this.word(\"export\");\n  this.space();\n  this.word(\"as\");\n  this.space();\n  this.word(\"namespace\");\n  this.space();\n  this.print(node.id);\n  this.semicolon();\n}\n\nfunction tsPrintSignatureDeclarationBase(this: Printer, node: any) {\n  const { typeParameters } = node;\n  const parameters = node.params;\n  this.print(typeParameters);\n  this.token(\"(\");\n  _parameters.call(this, parameters, charCodes.rightParenthesis);\n  this.print(node.returnType);\n}\n\nexport function _tsPrintClassMemberModifiers(\n  this: Printer,\n  node:\n    | t.ClassProperty\n    | t.ClassAccessorProperty\n    | t.ClassPrivateProperty\n    | t.ClassMethod\n    | t.ClassPrivateMethod\n    | t.TSDeclareMethod,\n) {\n  const isPrivateField = node.type === \"ClassPrivateProperty\";\n  const isPublicField =\n    node.type === \"ClassAccessorProperty\" || node.type === \"ClassProperty\";\n  printModifiersList(this, node, [\n    isPublicField && node.declare && \"declare\",\n    !isPrivateField && node.accessibility,\n  ]);\n  if (node.static) {\n    this.word(\"static\");\n    this.space();\n  }\n  printModifiersList(this, node, [\n    !isPrivateField && node.abstract && \"abstract\",\n    !isPrivateField && node.override && \"override\",\n    (isPublicField || isPrivateField) && node.readonly && \"readonly\",\n  ]);\n}\n\nfunction printBraced(printer: Printer, node: t.Node, cb: () => void) {\n  printer.token(\"{\");\n  const oldNoLineTerminatorAfterNode = printer.enterDelimited();\n  cb();\n  printer._noLineTerminatorAfterNode = oldNoLineTerminatorAfterNode;\n  printer.rightBrace(node);\n}\n\nfunction printModifiersList(\n  printer: Printer,\n  node: t.Node,\n  modifiers: (string | false | null | undefined)[],\n) {\n  const modifiersSet = new Set<string>();\n  for (const modifier of modifiers) {\n    if (modifier) modifiersSet.add(modifier);\n  }\n\n  printer.tokenMap?.find(node, tok => {\n    if (modifiersSet.has(tok.value)) {\n      printer.token(tok.value);\n      printer.space();\n      modifiersSet.delete(tok.value);\n      return modifiersSet.size === 0;\n    }\n    return false;\n  });\n\n  for (const modifier of modifiersSet) {\n    printer.word(modifier);\n    printer.space();\n  }\n}\n","import type Printer from \"../printer.ts\";\nimport {\n  isClassDeclaration,\n  isExportDefaultSpecifier,\n  isExportNamespaceSpecifier,\n  isImportDefaultSpecifier,\n  isImportNamespaceSpecifier,\n  isStatement,\n} from \"@babel/types\";\nimport type * as t from \"@babel/types\";\nimport { TokenContext } from \"../node/index.ts\";\nimport { _shouldPrintDecoratorsBeforeExport } from \"./expressions.ts\";\n\nexport function ImportSpecifier(this: Printer, node: t.ImportSpecifier) {\n  if (node.importKind === \"type\" || node.importKind === \"typeof\") {\n    this.word(node.importKind);\n    this.space();\n  }\n\n  this.print(node.imported);\n  // @ts-expect-error todo(flow-ts) maybe check node type instead of relying on name to be undefined on t.StringLiteral\n  if (node.local && node.local.name !== node.imported.name) {\n    this.space();\n    this.word(\"as\");\n    this.space();\n    this.print(node.local);\n  }\n}\n\nexport function ImportDefaultSpecifier(\n  this: Printer,\n  node: t.ImportDefaultSpecifier,\n) {\n  this.print(node.local);\n}\n\nexport function ExportDefaultSpecifier(\n  this: Printer,\n  node: t.ExportDefaultSpecifier,\n) {\n  this.print(node.exported);\n}\n\nexport function ExportSpecifier(this: Printer, node: t.ExportSpecifier) {\n  if (node.exportKind === \"type\") {\n    this.word(\"type\");\n    this.space();\n  }\n\n  this.print(node.local);\n  // @ts-expect-error todo(flow-ts) maybe check node type instead of relying on name to be undefined on t.StringLiteral\n  if (node.exported && node.local.name !== node.exported.name) {\n    this.space();\n    this.word(\"as\");\n    this.space();\n    this.print(node.exported);\n  }\n}\n\nexport function ExportNamespaceSpecifier(\n  this: Printer,\n  node: t.ExportNamespaceSpecifier,\n) {\n  this.token(\"*\");\n  this.space();\n  this.word(\"as\");\n  this.space();\n  this.print(node.exported);\n}\n\nexport function _printAttributes(\n  this: Printer,\n  node: Extract<t.Node, { attributes?: t.ImportAttribute[] | null }>,\n  hasPreviousBrace: boolean,\n) {\n  const { attributes } = node;\n\n  this.word(\"with\");\n  this.space();\n\n  const occurrenceCount = hasPreviousBrace ? 1 : 0;\n\n  this.token(\"{\", undefined, occurrenceCount);\n  this.space();\n  this.printList(attributes, this.shouldPrintTrailingComma(\"}\"));\n  this.space();\n  this.token(\"}\", undefined, occurrenceCount);\n}\n\nexport function ExportAllDeclaration(\n  this: Printer,\n  node: t.ExportAllDeclaration | t.DeclareExportAllDeclaration,\n) {\n  this.word(\"export\");\n  this.space();\n  if (node.exportKind === \"type\") {\n    this.word(\"type\");\n    this.space();\n  }\n  this.token(\"*\");\n  this.space();\n  this.word(\"from\");\n  this.space();\n  if (node.attributes?.length) {\n    this.print(node.source, true);\n    this.space();\n    _printAttributes.call(this, node, false);\n  } else {\n    this.print(node.source);\n  }\n\n  this.semicolon();\n}\n\nfunction maybePrintDecoratorsBeforeExport(\n  printer: Printer,\n  node: t.ExportNamedDeclaration | t.ExportDefaultDeclaration,\n) {\n  if (\n    isClassDeclaration(node.declaration) &&\n    _shouldPrintDecoratorsBeforeExport.call(\n      printer,\n      node as t.ExportNamedDeclaration & { declaration: t.ClassDeclaration },\n    )\n  ) {\n    printer.printJoin(node.declaration.decorators);\n  }\n}\n\nexport function ExportNamedDeclaration(\n  this: Printer,\n  node: t.ExportNamedDeclaration,\n) {\n  maybePrintDecoratorsBeforeExport(this, node);\n\n  this.word(\"export\");\n  this.space();\n  if (node.declaration) {\n    const declar = node.declaration;\n    this.print(declar);\n    if (!isStatement(declar)) this.semicolon();\n  } else {\n    if (node.exportKind === \"type\") {\n      this.word(\"type\");\n      this.space();\n    }\n\n    const specifiers = node.specifiers.slice(0);\n\n    // print \"special\" specifiers first\n    let hasSpecial = false;\n    for (;;) {\n      const first = specifiers[0];\n      if (\n        isExportDefaultSpecifier(first) ||\n        isExportNamespaceSpecifier(first)\n      ) {\n        hasSpecial = true;\n        this.print(specifiers.shift());\n        if (specifiers.length) {\n          this.token(\",\");\n          this.space();\n        }\n      } else {\n        break;\n      }\n    }\n\n    let hasBrace = false;\n    if (specifiers.length || (!specifiers.length && !hasSpecial)) {\n      hasBrace = true;\n      this.token(\"{\");\n      if (specifiers.length) {\n        this.space();\n        this.printList(specifiers, this.shouldPrintTrailingComma(\"}\"));\n        this.space();\n      }\n      this.token(\"}\");\n    }\n\n    if (node.source) {\n      this.space();\n      this.word(\"from\");\n      this.space();\n      if (node.attributes?.length) {\n        this.print(node.source, true);\n        this.space();\n        _printAttributes.call(this, node, hasBrace);\n      } else {\n        this.print(node.source);\n      }\n    }\n\n    this.semicolon();\n  }\n}\n\nexport function ExportDefaultDeclaration(\n  this: Printer,\n  node: t.ExportDefaultDeclaration,\n) {\n  maybePrintDecoratorsBeforeExport(this, node);\n\n  this.word(\"export\");\n  this.noIndentInnerCommentsHere();\n  this.space();\n  this.word(\"default\");\n  this.space();\n  this.tokenContext |= TokenContext.exportDefault;\n  const declar = node.declaration;\n  this.print(declar);\n  if (!isStatement(declar)) this.semicolon();\n}\n\nexport function ImportDeclaration(this: Printer, node: t.ImportDeclaration) {\n  this.word(\"import\");\n  this.space();\n\n  const isTypeKind = node.importKind === \"type\" || node.importKind === \"typeof\";\n  if (isTypeKind) {\n    this.noIndentInnerCommentsHere();\n    this.word(node.importKind!);\n    this.space();\n  } else if (node.module) {\n    this.noIndentInnerCommentsHere();\n    this.word(\"module\");\n    this.space();\n  } else if (node.phase) {\n    this.noIndentInnerCommentsHere();\n    this.word(node.phase);\n    this.space();\n  }\n\n  const specifiers = node.specifiers.slice(0);\n  const hasSpecifiers = !!specifiers.length;\n  // print \"special\" specifiers first. The loop condition is constant,\n  // but there is a \"break\" in the body.\n  while (hasSpecifiers) {\n    const first = specifiers[0];\n    if (isImportDefaultSpecifier(first) || isImportNamespaceSpecifier(first)) {\n      this.print(specifiers.shift());\n      if (specifiers.length) {\n        this.token(\",\");\n        this.space();\n      }\n    } else {\n      break;\n    }\n  }\n\n  let hasBrace = false;\n  if (specifiers.length) {\n    hasBrace = true;\n    this.token(\"{\");\n    this.space();\n    this.printList(specifiers, this.shouldPrintTrailingComma(\"}\"));\n    this.space();\n    this.token(\"}\");\n  } else if (isTypeKind && !hasSpecifiers) {\n    hasBrace = true;\n    this.token(\"{\");\n    this.token(\"}\");\n  }\n\n  if (hasSpecifiers || isTypeKind) {\n    this.space();\n    this.word(\"from\");\n    this.space();\n  }\n\n  if (node.attributes?.length) {\n    this.print(node.source, true);\n    this.space();\n    _printAttributes.call(this, node, hasBrace);\n  } else {\n    this.print(node.source);\n  }\n\n  this.semicolon();\n}\n\nexport function ImportAttribute(this: Printer, node: t.ImportAttribute) {\n  this.print(node.key);\n  this.token(\":\");\n  this.space();\n  this.print(node.value);\n}\n\nexport function ImportNamespaceSpecifier(\n  this: Printer,\n  node: t.ImportNamespaceSpecifier,\n) {\n  this.token(\"*\");\n  this.space();\n  this.word(\"as\");\n  this.space();\n  this.print(node.local);\n}\n\nexport function ImportExpression(this: Printer, node: t.ImportExpression) {\n  this.word(\"import\");\n  if (node.phase) {\n    this.token(\".\");\n    this.word(node.phase);\n  }\n  this.token(\"(\");\n  const shouldPrintTrailingComma = this.shouldPrintTrailingComma(\")\");\n  this.print(node.source);\n  if (node.options != null) {\n    this.token(\",\");\n    this.space();\n    this.print(node.options);\n  }\n  if (shouldPrintTrailingComma) {\n    this.token(\",\");\n  }\n  this.rightParens(node);\n}\n","import type Printer from \"../printer.ts\";\nimport { isAssignmentPattern, isIdentifier } from \"@babel/types\";\nimport type * as t from \"@babel/types\";\nimport jsesc from \"jsesc\";\nimport * as charCodes from \"charcodes\";\nimport { _methodHead } from \"./methods.ts\";\n\nlet lastRawIdentResult: string = \"\";\nexport function _getRawIdentifier(this: Printer, node: t.Identifier) {\n  const { name } = node;\n  const token = this.tokenMap!.find(node, tok => tok.value === name);\n  if (token) {\n    lastRawIdentResult = this._originalCode!.slice(token.start, token.end);\n    return lastRawIdentResult;\n  }\n  return (lastRawIdentResult = node.name);\n}\n\nexport function Identifier(this: Printer, node: t.Identifier) {\n  if (this._buf._map) {\n    this.sourceIdentifierName(node.loc?.identifierName || node.name);\n  }\n\n  this.word(this.tokenMap ? lastRawIdentResult : node.name);\n}\n\nexport function ArgumentPlaceholder(this: Printer) {\n  this.token(\"?\");\n}\n\nexport function RestElement(this: Printer, node: t.RestElement) {\n  this.token(\"...\");\n  this.print(node.argument);\n}\n\nexport { RestElement as SpreadElement };\n\nexport function ObjectExpression(this: Printer, node: t.ObjectExpression) {\n  const props = node.properties;\n\n  this.token(\"{\");\n\n  if (props.length) {\n    const oldNoLineTerminatorAfterNode = this.enterDelimited();\n    this.space();\n    this.printList(\n      props,\n      this.shouldPrintTrailingComma(\"}\"),\n      true,\n      true,\n      undefined,\n      true,\n    );\n    this.space();\n    this._noLineTerminatorAfterNode = oldNoLineTerminatorAfterNode;\n  }\n\n  this.rightBrace(node);\n}\n\nexport { ObjectExpression as ObjectPattern };\n\nexport function ObjectMethod(this: Printer, node: t.ObjectMethod) {\n  this.printJoin(node.decorators);\n  _methodHead.call(this, node);\n  this.space();\n  this.print(node.body);\n}\n\nexport function ObjectProperty(this: Printer, node: t.ObjectProperty) {\n  this.printJoin(node.decorators);\n\n  if (node.computed) {\n    this.token(\"[\");\n    this.print(node.key);\n    this.token(\"]\");\n  } else {\n    // print `({ foo: foo = 5 } = {})` as `({ foo = 5 } = {});`\n    if (\n      isAssignmentPattern(node.value) &&\n      isIdentifier(node.key) &&\n      // @ts-expect-error todo(flow->ts) `.name` does not exist on some types in union\n      node.key.name === node.value.left.name\n    ) {\n      this.print(node.value);\n      return;\n    }\n\n    this.print(node.key);\n\n    // shorthand!\n    if (\n      node.shorthand &&\n      isIdentifier(node.key) &&\n      isIdentifier(node.value) &&\n      node.key.name === node.value.name\n    ) {\n      return;\n    }\n  }\n\n  this.token(\":\");\n  this.space();\n  this.print(node.value);\n}\n\nexport function ArrayExpression(this: Printer, node: t.ArrayExpression) {\n  const elems = node.elements;\n  const len = elems.length;\n\n  this.token(\"[\");\n\n  const oldNoLineTerminatorAfterNode = this.enterDelimited();\n\n  for (let i = 0; i < elems.length; i++) {\n    const elem = elems[i];\n    if (elem) {\n      if (i > 0) this.space();\n      this.print(elem, undefined, true);\n      if (i < len - 1 || this.shouldPrintTrailingComma(\"]\")) {\n        this.tokenChar(charCodes.comma, i);\n      }\n    } else {\n      // If the array expression ends with a hole, that hole\n      // will be ignored by the interpreter, but if it ends with\n      // two (or more) holes, we need to write out two (or more)\n      // commas so that the resulting code is interpreted with\n      // both (all) of the holes.\n      this.tokenChar(charCodes.comma, i);\n    }\n  }\n\n  this._noLineTerminatorAfterNode = oldNoLineTerminatorAfterNode;\n\n  this.token(\"]\");\n}\n\nexport { ArrayExpression as ArrayPattern };\n\nexport function RegExpLiteral(this: Printer, node: t.RegExpLiteral) {\n  this.word(`/${node.pattern}/${node.flags}`, false);\n}\n\nexport function BooleanLiteral(this: Printer, node: t.BooleanLiteral) {\n  this.word(node.value ? \"true\" : \"false\");\n}\n\nexport function NullLiteral(this: Printer) {\n  this.word(\"null\");\n}\n\nexport function NumericLiteral(this: Printer, node: t.NumericLiteral) {\n  const raw = this.getPossibleRaw(node);\n  const opts = this.format.jsescOption;\n  const value = node.value;\n  const str = value + \"\";\n  if (opts.numbers) {\n    this.number(jsesc(value, opts), value);\n  } else if (raw == null) {\n    this.number(str, value); // normalize\n  } else if (this.format.minified) {\n    this.number(raw.length < str.length ? raw : str, value);\n  } else {\n    this.number(raw, value);\n  }\n}\n\nexport function StringLiteral(this: Printer, node: t.StringLiteral) {\n  const raw = this.getPossibleRaw(node);\n  if (!this.format.minified && raw !== undefined) {\n    this.token(raw);\n    return;\n  }\n\n  const val = jsesc(node.value, this.format.jsescOption);\n\n  this.token(val);\n}\n\nexport function BigIntLiteral(this: Printer, node: t.BigIntLiteral) {\n  const raw = this.getPossibleRaw(node);\n  if (!this.format.minified && raw !== undefined) {\n    this.word(raw);\n    return;\n  }\n  this.word(node.value + \"n\");\n}\n\n// Hack pipe operator\nconst validTopicTokenSet = new Set<string | undefined>([\n  \"^^\",\n  \"@@\",\n  \"^\",\n  \"%\",\n  \"#\",\n]);\nexport function TopicReference(this: Printer) {\n  const { topicToken } = this.format;\n\n  if (validTopicTokenSet.has(topicToken)) {\n    this.token(topicToken!);\n  } else {\n    const givenTopicTokenJSON = JSON.stringify(topicToken);\n    const validTopics = Array.from(validTopicTokenSet, v => JSON.stringify(v));\n    throw new Error(\n      `The \"topicToken\" generator option must be one of ` +\n        `${validTopics.join(\", \")} (${givenTopicTokenJSON} received instead).`,\n    );\n  }\n}\n\n// discard binding\nexport function VoidPattern(this: Printer) {\n  this.word(\"void\");\n}\n","import type Printer from \"../printer.ts\";\nimport { isDeclareExportDeclaration, isStatement } from \"@babel/types\";\nimport type * as t from \"@babel/types\";\nimport { ExportAllDeclaration } from \"./modules.ts\";\nimport { TokenContext } from \"../node/index.ts\";\n\nexport function AnyTypeAnnotation(this: Printer) {\n  this.word(\"any\");\n}\n\nexport function ArrayTypeAnnotation(\n  this: Printer,\n  node: t.ArrayTypeAnnotation,\n) {\n  this.print(node.elementType, true);\n  this.token(\"[\");\n  this.token(\"]\");\n}\n\nexport function BooleanTypeAnnotation(this: Printer) {\n  this.word(\"boolean\");\n}\n\nexport function BooleanLiteralTypeAnnotation(\n  this: Printer,\n  node: t.BooleanLiteralTypeAnnotation,\n) {\n  this.word(node.value ? \"true\" : \"false\");\n}\n\nexport function NullLiteralTypeAnnotation(this: Printer) {\n  this.word(\"null\");\n}\n\nexport function DeclareClass(\n  this: Printer,\n  node: t.DeclareClass,\n  parent: t.Node,\n) {\n  if (!isDeclareExportDeclaration(parent)) {\n    this.word(\"declare\");\n    this.space();\n  }\n  this.word(\"class\");\n  this.space();\n  _interfaceish.call(this, node);\n}\n\nexport function DeclareFunction(\n  this: Printer,\n  node: t.DeclareFunction,\n  parent: t.Node,\n) {\n  if (!isDeclareExportDeclaration(parent)) {\n    this.word(\"declare\");\n    this.space();\n  }\n  this.word(\"function\");\n  this.space();\n  this.print(node.id);\n\n  // Skip TypeAnnotation printing method as the FunctionTypeAnnotation will print `(): `\n  this.print(node.id.typeAnnotation?.typeAnnotation);\n\n  if (node.predicate) {\n    this.space();\n    this.print(node.predicate);\n  }\n\n  this.semicolon();\n}\n\nexport function InferredPredicate(this: Printer) {\n  this.token(\"%\");\n  this.word(\"checks\");\n}\n\nexport function DeclaredPredicate(this: Printer, node: t.DeclaredPredicate) {\n  this.token(\"%\");\n  this.word(\"checks\");\n  this.token(\"(\");\n  this.print(node.value);\n  this.token(\")\");\n}\n\nexport function DeclareInterface(this: Printer, node: t.DeclareInterface) {\n  this.word(\"declare\");\n  this.space();\n  InterfaceDeclaration.call(this, node);\n}\n\nexport function DeclareModule(this: Printer, node: t.DeclareModule) {\n  this.word(\"declare\");\n  this.space();\n  this.word(\"module\");\n  this.space();\n  this.print(node.id);\n  this.space();\n  this.print(node.body);\n}\n\nexport function DeclareModuleExports(\n  this: Printer,\n  node: t.DeclareModuleExports,\n) {\n  this.word(\"declare\");\n  this.space();\n  this.word(\"module\");\n  this.token(\".\");\n  this.word(\"exports\");\n  this.print(node.typeAnnotation);\n}\n\nexport function DeclareTypeAlias(this: Printer, node: t.DeclareTypeAlias) {\n  this.word(\"declare\");\n  this.space();\n  TypeAlias.call(this, node);\n}\n\nexport function DeclareOpaqueType(\n  this: Printer,\n  node: t.DeclareOpaqueType,\n  parent: t.Node,\n) {\n  if (!isDeclareExportDeclaration(parent)) {\n    this.word(\"declare\");\n    this.space();\n  }\n  OpaqueType.call(this, node);\n}\n\nexport function DeclareVariable(\n  this: Printer,\n  node: t.DeclareVariable,\n  parent: t.Node,\n) {\n  if (!isDeclareExportDeclaration(parent)) {\n    this.word(\"declare\");\n    this.space();\n  }\n  this.word(\"var\");\n  this.space();\n  this.print(node.id);\n  this.print(node.id.typeAnnotation);\n  this.semicolon();\n}\n\nexport function DeclareExportDeclaration(\n  this: Printer,\n  node: t.DeclareExportDeclaration,\n) {\n  this.word(\"declare\");\n  this.space();\n  this.word(\"export\");\n  this.space();\n  if (node.default) {\n    this.word(\"default\");\n    this.space();\n  }\n\n  FlowExportDeclaration.call(this, node);\n}\n\nexport function DeclareExportAllDeclaration(\n  this: Printer,\n  node: t.DeclareExportAllDeclaration,\n) {\n  this.word(\"declare\");\n  this.space();\n  ExportAllDeclaration.call(this, node);\n}\n\nexport function EnumDeclaration(this: Printer, node: t.EnumDeclaration) {\n  const { id, body } = node;\n  this.word(\"enum\");\n  this.space();\n  this.print(id);\n  this.print(body);\n}\n\nfunction enumExplicitType(\n  context: Printer,\n  name: string,\n  hasExplicitType: boolean,\n) {\n  if (hasExplicitType) {\n    context.space();\n    context.word(\"of\");\n    context.space();\n    context.word(name);\n  }\n  context.space();\n}\n\nfunction enumBody(context: Printer, node: t.EnumBody) {\n  const { members } = node;\n  context.token(\"{\");\n  context.indent();\n  context.newline();\n  for (const member of members) {\n    context.print(member);\n    context.newline();\n  }\n  if (node.hasUnknownMembers) {\n    context.token(\"...\");\n    context.newline();\n  }\n  context.dedent();\n  context.token(\"}\");\n}\n\nexport function EnumBooleanBody(this: Printer, node: t.EnumBooleanBody) {\n  const { explicitType } = node;\n  enumExplicitType(this, \"boolean\", explicitType);\n  enumBody(this, node);\n}\n\nexport function EnumNumberBody(this: Printer, node: t.EnumNumberBody) {\n  const { explicitType } = node;\n  enumExplicitType(this, \"number\", explicitType);\n  enumBody(this, node);\n}\n\nexport function EnumStringBody(this: Printer, node: t.EnumStringBody) {\n  const { explicitType } = node;\n  enumExplicitType(this, \"string\", explicitType);\n  enumBody(this, node);\n}\n\nexport function EnumSymbolBody(this: Printer, node: t.EnumSymbolBody) {\n  enumExplicitType(this, \"symbol\", true);\n  enumBody(this, node);\n}\n\nexport function EnumDefaultedMember(\n  this: Printer,\n  node: t.EnumDefaultedMember,\n) {\n  const { id } = node;\n  this.print(id);\n  this.token(\",\");\n}\n\nfunction enumInitializedMember(\n  context: Printer,\n  node: t.EnumBooleanMember | t.EnumNumberMember | t.EnumStringMember,\n) {\n  context.print(node.id);\n  context.space();\n  context.token(\"=\");\n  context.space();\n  context.print(node.init);\n  context.token(\",\");\n}\n\nexport function EnumBooleanMember(this: Printer, node: t.EnumBooleanMember) {\n  enumInitializedMember(this, node);\n}\n\nexport function EnumNumberMember(this: Printer, node: t.EnumNumberMember) {\n  enumInitializedMember(this, node);\n}\n\nexport function EnumStringMember(this: Printer, node: t.EnumStringMember) {\n  enumInitializedMember(this, node);\n}\n\nfunction FlowExportDeclaration(\n  this: Printer,\n  node: t.DeclareExportDeclaration,\n) {\n  if (node.declaration) {\n    const declar = node.declaration;\n    this.print(declar);\n    if (!isStatement(declar)) this.semicolon();\n  } else {\n    this.token(\"{\");\n    if (node.specifiers!.length) {\n      this.space();\n      this.printList(node.specifiers);\n      this.space();\n    }\n    this.token(\"}\");\n\n    if (node.source) {\n      this.space();\n      this.word(\"from\");\n      this.space();\n      this.print(node.source);\n    }\n\n    this.semicolon();\n  }\n}\n\nexport function ExistsTypeAnnotation(this: Printer) {\n  this.token(\"*\");\n}\n\nexport function FunctionTypeAnnotation(\n  this: Printer,\n  node: t.FunctionTypeAnnotation,\n  parent?: t.Node,\n) {\n  this.print(node.typeParameters);\n  this.token(\"(\");\n\n  if (node.this) {\n    this.word(\"this\");\n    this.token(\":\");\n    this.space();\n    this.print(node.this.typeAnnotation);\n    if (node.params.length || node.rest) {\n      this.token(\",\");\n      this.space();\n    }\n  }\n\n  this.printList(node.params);\n\n  if (node.rest) {\n    if (node.params.length) {\n      this.token(\",\");\n      this.space();\n    }\n    this.token(\"...\");\n    this.print(node.rest);\n  }\n\n  this.token(\")\");\n\n  // this node type is overloaded, not sure why but it makes it EXTREMELY annoying\n\n  const type = parent?.type;\n  if (\n    type != null &&\n    (type === \"ObjectTypeCallProperty\" ||\n      type === \"ObjectTypeInternalSlot\" ||\n      type === \"DeclareFunction\" ||\n      (type === \"ObjectTypeProperty\" && parent.method))\n  ) {\n    this.token(\":\");\n  } else {\n    this.space();\n    this.token(\"=>\");\n  }\n\n  this.space();\n  this.print(node.returnType);\n}\n\nexport function FunctionTypeParam(this: Printer, node: t.FunctionTypeParam) {\n  this.print(node.name);\n  if (node.optional) this.token(\"?\");\n  if (node.name) {\n    this.token(\":\");\n    this.space();\n  }\n  this.print(node.typeAnnotation);\n}\n\nexport function InterfaceExtends(this: Printer, node: t.InterfaceExtends) {\n  this.print(node.id);\n  this.print(node.typeParameters, true);\n}\n\nexport {\n  InterfaceExtends as ClassImplements,\n  InterfaceExtends as GenericTypeAnnotation,\n};\n\nexport function _interfaceish(\n  this: Printer,\n  node: t.InterfaceDeclaration | t.DeclareInterface | t.DeclareClass,\n) {\n  this.print(node.id);\n  this.print(node.typeParameters);\n  if (node.extends?.length) {\n    this.space();\n    this.word(\"extends\");\n    this.space();\n    this.printList(node.extends);\n  }\n  if (node.type === \"DeclareClass\") {\n    if (node.mixins?.length) {\n      this.space();\n      this.word(\"mixins\");\n      this.space();\n      this.printList(node.mixins);\n    }\n    if (node.implements?.length) {\n      this.space();\n      this.word(\"implements\");\n      this.space();\n      this.printList(node.implements);\n    }\n  }\n  this.space();\n  this.print(node.body);\n}\n\nexport function _variance(\n  this: Printer,\n  node:\n    | t.TypeParameter\n    | t.ObjectTypeIndexer\n    | t.ObjectTypeProperty\n    | t.ClassProperty\n    | t.ClassPrivateProperty\n    | t.ClassAccessorProperty,\n) {\n  const kind = node.variance?.kind;\n  if (kind != null) {\n    if (kind === \"plus\") {\n      this.token(\"+\");\n    } else if (kind === \"minus\") {\n      this.token(\"-\");\n    }\n  }\n}\n\nexport function InterfaceDeclaration(\n  this: Printer,\n  node: t.InterfaceDeclaration | t.DeclareInterface,\n) {\n  this.word(\"interface\");\n  this.space();\n  _interfaceish.call(this, node);\n}\n\nfunction andSeparator(this: Printer, occurrenceCount: number) {\n  this.space();\n  this.token(\"&\", false, occurrenceCount);\n  this.space();\n}\n\nexport function InterfaceTypeAnnotation(\n  this: Printer,\n  node: t.InterfaceTypeAnnotation,\n) {\n  this.word(\"interface\");\n  if (node.extends?.length) {\n    this.space();\n    this.word(\"extends\");\n    this.space();\n    this.printList(node.extends);\n  }\n  this.space();\n  this.print(node.body);\n}\n\nexport function IntersectionTypeAnnotation(\n  this: Printer,\n  node: t.IntersectionTypeAnnotation,\n) {\n  this.printJoin(node.types, undefined, undefined, andSeparator);\n}\n\nexport function MixedTypeAnnotation(this: Printer) {\n  this.word(\"mixed\");\n}\n\nexport function EmptyTypeAnnotation(this: Printer) {\n  this.word(\"empty\");\n}\n\nexport function NullableTypeAnnotation(\n  this: Printer,\n  node: t.NullableTypeAnnotation,\n) {\n  this.token(\"?\");\n  this.print(node.typeAnnotation);\n}\n\nexport {\n  BigIntLiteral as BigIntLiteralTypeAnnotation,\n  NumericLiteral as NumberLiteralTypeAnnotation,\n  StringLiteral as StringLiteralTypeAnnotation,\n} from \"./types.ts\";\n\nexport function NumberTypeAnnotation(this: Printer) {\n  this.word(\"number\");\n}\n\nexport function StringTypeAnnotation(this: Printer) {\n  this.word(\"string\");\n}\n\nexport function ThisTypeAnnotation(this: Printer) {\n  this.word(\"this\");\n}\n\nexport function TupleTypeAnnotation(\n  this: Printer,\n  node: t.TupleTypeAnnotation,\n) {\n  this.token(\"[\");\n  this.printList(node.types);\n  this.token(\"]\");\n}\n\nexport function TypeofTypeAnnotation(\n  this: Printer,\n  node: t.TypeofTypeAnnotation,\n) {\n  this.word(\"typeof\");\n  this.space();\n  this.print(node.argument);\n}\n\nexport function TypeAlias(\n  this: Printer,\n  node: t.TypeAlias | t.DeclareTypeAlias,\n) {\n  this.word(\"type\");\n  this.space();\n  this.print(node.id);\n  this.print(node.typeParameters);\n  this.space();\n  this.token(\"=\");\n  this.space();\n  this.print(node.right);\n  this.semicolon();\n}\n\nexport function TypeAnnotation(\n  this: Printer,\n  node: t.TypeAnnotation,\n  parent: t.Node,\n) {\n  this.token(\":\");\n  this.space();\n  if (parent.type === \"ArrowFunctionExpression\") {\n    this.tokenContext |= TokenContext.arrowFlowReturnType;\n  } else if (\n    // @ts-expect-error todo(flow->ts) can this be removed? `.optional` looks to be not existing property\n    node.optional\n  ) {\n    this.token(\"?\");\n  }\n  this.print(node.typeAnnotation);\n}\n\nexport function TypeParameterInstantiation(\n  this: Printer,\n  node: t.TypeParameterInstantiation,\n): void {\n  this.token(\"<\");\n  this.printList(node.params);\n  this.token(\">\");\n}\n\nexport { TypeParameterInstantiation as TypeParameterDeclaration };\n\nexport function TypeParameter(this: Printer, node: t.TypeParameter) {\n  _variance.call(this, node);\n\n  this.word(node.name);\n\n  if (node.bound) {\n    this.print(node.bound);\n  }\n\n  if (node.default) {\n    this.space();\n    this.token(\"=\");\n    this.space();\n    this.print(node.default);\n  }\n}\n\nexport function OpaqueType(\n  this: Printer,\n  node: t.OpaqueType | t.DeclareOpaqueType,\n) {\n  this.word(\"opaque\");\n  this.space();\n  this.word(\"type\");\n  this.space();\n  this.print(node.id);\n  this.print(node.typeParameters);\n  if (node.supertype) {\n    this.token(\":\");\n    this.space();\n    this.print(node.supertype);\n  }\n\n  if (node.impltype) {\n    this.space();\n    this.token(\"=\");\n    this.space();\n    this.print(node.impltype);\n  }\n  this.semicolon();\n}\n\nexport function ObjectTypeAnnotation(\n  this: Printer,\n  node: t.ObjectTypeAnnotation,\n) {\n  if (node.exact) {\n    this.token(\"{|\");\n  } else {\n    this.token(\"{\");\n  }\n\n  // TODO: remove the array fallbacks and instead enforce the types to require an array\n  const props = [\n    ...node.properties,\n    ...(node.callProperties || []),\n    ...(node.indexers || []),\n    ...(node.internalSlots || []),\n  ];\n\n  if (props.length) {\n    this.newline();\n\n    this.space();\n\n    this.printJoin(\n      props,\n      true,\n      true,\n      () => {\n        if (props.length !== 1 || node.inexact) {\n          this.token(\",\");\n          this.space();\n        }\n      },\n      true,\n    );\n\n    this.space();\n  }\n\n  if (node.inexact) {\n    this.indent();\n    this.token(\"...\");\n    if (props.length) {\n      this.newline();\n    }\n    this.dedent();\n  }\n\n  if (node.exact) {\n    this.token(\"|}\");\n  } else {\n    this.token(\"}\");\n  }\n}\n\nexport function ObjectTypeInternalSlot(\n  this: Printer,\n  node: t.ObjectTypeInternalSlot,\n) {\n  if (node.static) {\n    this.word(\"static\");\n    this.space();\n  }\n  this.token(\"[\");\n  this.token(\"[\");\n  this.print(node.id);\n  this.token(\"]\");\n  this.token(\"]\");\n  if (node.optional) this.token(\"?\");\n  if (!node.method) {\n    this.token(\":\");\n    this.space();\n  }\n  this.print(node.value);\n}\n\nexport function ObjectTypeCallProperty(\n  this: Printer,\n  node: t.ObjectTypeCallProperty,\n) {\n  if (node.static) {\n    this.word(\"static\");\n    this.space();\n  }\n  this.print(node.value);\n}\n\nexport function ObjectTypeIndexer(this: Printer, node: t.ObjectTypeIndexer) {\n  if (node.static) {\n    this.word(\"static\");\n    this.space();\n  }\n  _variance.call(this, node);\n  this.token(\"[\");\n  if (node.id) {\n    this.print(node.id);\n    this.token(\":\");\n    this.space();\n  }\n  this.print(node.key);\n  this.token(\"]\");\n  this.token(\":\");\n  this.space();\n  this.print(node.value);\n}\n\nexport function ObjectTypeProperty(this: Printer, node: t.ObjectTypeProperty) {\n  if (node.proto) {\n    this.word(\"proto\");\n    this.space();\n  }\n  if (node.static) {\n    this.word(\"static\");\n    this.space();\n  }\n  if (node.kind === \"get\" || node.kind === \"set\") {\n    this.word(node.kind);\n    this.space();\n  }\n  _variance.call(this, node);\n  this.print(node.key);\n  if (node.optional) this.token(\"?\");\n  if (!node.method) {\n    this.token(\":\");\n    this.space();\n  }\n  this.print(node.value);\n}\n\nexport function ObjectTypeSpreadProperty(\n  this: Printer,\n  node: t.ObjectTypeSpreadProperty,\n) {\n  this.token(\"...\");\n  this.print(node.argument);\n}\n\nexport function QualifiedTypeIdentifier(\n  this: Printer,\n  node: t.QualifiedTypeIdentifier,\n) {\n  this.print(node.qualification);\n  this.token(\".\");\n  this.print(node.id);\n}\n\nexport function SymbolTypeAnnotation(this: Printer) {\n  this.word(\"symbol\");\n}\n\nfunction orSeparator(this: Printer, occurrenceCount: number) {\n  this.space();\n  this.token(\"|\", false, occurrenceCount);\n  this.space();\n}\n\nexport function UnionTypeAnnotation(\n  this: Printer,\n  node: t.UnionTypeAnnotation,\n) {\n  this.printJoin(node.types, undefined, undefined, orSeparator);\n}\n\nexport function TypeCastExpression(this: Printer, node: t.TypeCastExpression) {\n  this.token(\"(\");\n  this.print(node.expression);\n  this.print(node.typeAnnotation);\n  this.token(\")\");\n}\n\nexport function Variance(this: Printer, node: t.Variance) {\n  if (node.kind === \"plus\") {\n    this.token(\"+\");\n  } else {\n    this.token(\"-\");\n  }\n}\n\nexport function VoidTypeAnnotation(this: Printer) {\n  this.word(\"void\");\n}\n\nexport function IndexedAccessType(this: Printer, node: t.IndexedAccessType) {\n  this.print(node.objectType, true);\n  this.token(\"[\");\n  this.print(node.indexType);\n  this.token(\"]\");\n}\n\nexport function OptionalIndexedAccessType(\n  this: Printer,\n  node: t.OptionalIndexedAccessType,\n) {\n  this.print(node.objectType);\n  if (node.optional) {\n    this.token(\"?.\");\n  }\n  this.token(\"[\");\n  this.print(node.indexType);\n  this.token(\"]\");\n}\n","import type Printer from \"../printer.ts\";\nimport {\n  isExportDefaultDeclaration,\n  isExportNamedDeclaration,\n} from \"@babel/types\";\nimport type * as t from \"@babel/types\";\n\nimport * as charCodes from \"charcodes\";\nimport { _shouldPrintDecoratorsBeforeExport } from \"./expressions.ts\";\nimport { _tsPrintClassMemberModifiers } from \"./typescript.ts\";\nimport { _variance } from \"./flow.ts\";\nimport { _methodHead } from \"./methods.ts\";\n\nexport function ClassDeclaration(\n  this: Printer,\n  node: t.ClassDeclaration,\n  parent: t.Node,\n) {\n  const inExport =\n    isExportDefaultDeclaration(parent) || isExportNamedDeclaration(parent);\n\n  if (\n    !inExport ||\n    !_shouldPrintDecoratorsBeforeExport.call(\n      this,\n      parent as t.ExportDeclaration & { declaration: t.ClassDeclaration },\n    )\n  ) {\n    this.printJoin(node.decorators);\n  }\n\n  if (node.declare) {\n    // TS\n    this.word(\"declare\");\n    this.space();\n  }\n\n  if (node.abstract) {\n    // TS\n    this.word(\"abstract\");\n    this.space();\n  }\n\n  this.word(\"class\");\n\n  if (node.id) {\n    this.space();\n    this.print(node.id);\n  }\n\n  this.print(node.typeParameters);\n\n  if (node.superClass) {\n    this.space();\n    this.word(\"extends\");\n    this.space();\n    this.print(node.superClass);\n    this.print(node.superTypeArguments);\n  }\n\n  if (node.implements) {\n    this.space();\n    this.word(\"implements\");\n    this.space();\n    this.printList(node.implements);\n  }\n\n  this.space();\n  this.print(node.body);\n}\n\nexport { ClassDeclaration as ClassExpression };\n\nexport function ClassBody(this: Printer, node: t.ClassBody) {\n  this.token(\"{\");\n  if (node.body.length === 0) {\n    this.token(\"}\");\n  } else {\n    const separator = classBodyEmptySemicolonsPrinter(this, node);\n    separator?.(-1); // print leading semicolons in preserveFormat mode\n\n    const oldNoLineTerminatorAfterNode = this.enterDelimited();\n    this.printJoin(node.body, true, true, separator, true, true);\n    this._noLineTerminatorAfterNode = oldNoLineTerminatorAfterNode;\n\n    if (!this.endsWith(charCodes.lineFeed)) this.newline();\n\n    this.rightBrace(node);\n  }\n}\n\nfunction classBodyEmptySemicolonsPrinter(printer: Printer, node: t.ClassBody) {\n  if (!printer.tokenMap || node.start == null || node.end == null) {\n    return null;\n  }\n\n  // \"empty statements\" in class bodies are not represented in the AST.\n  // Print them by checking if there are any ; tokens between the current AST\n  // member and the next one.\n\n  const indexes = printer.tokenMap.getIndexes(node);\n  if (!indexes) return null;\n\n  let k = 1; // start from 1 to skip '{'\n\n  let occurrenceCount = 0;\n\n  let nextLocIndex = 0;\n  const advanceNextLocIndex = () => {\n    while (\n      nextLocIndex < node.body.length &&\n      node.body[nextLocIndex].start == null\n    ) {\n      nextLocIndex++;\n    }\n  };\n  advanceNextLocIndex();\n\n  return (i: number) => {\n    if (nextLocIndex <= i) {\n      nextLocIndex = i + 1;\n      advanceNextLocIndex();\n    }\n\n    const end =\n      nextLocIndex === node.body.length\n        ? node.end\n        : node.body[nextLocIndex].start;\n\n    let tok;\n    while (\n      k < indexes.length &&\n      printer.tokenMap!.matchesOriginal(\n        (tok = printer._tokens![indexes[k]]),\n        \";\",\n      ) &&\n      tok.start < end!\n    ) {\n      printer.tokenChar(charCodes.semicolon, occurrenceCount++);\n      k++;\n    }\n  };\n}\n\nexport function ClassProperty(this: Printer, node: t.ClassProperty) {\n  this.printJoin(node.decorators);\n\n  if (!node.static && !this.format.preserveFormat) {\n    // catch up to property key, avoid line break\n    // between member TS modifiers and the property key.\n    const endLine = node.key.loc?.end?.line;\n    if (endLine) this.catchUp(endLine);\n  }\n\n  _tsPrintClassMemberModifiers.call(this, node);\n\n  if (node.computed) {\n    this.token(\"[\");\n    this.print(node.key);\n    this.token(\"]\");\n  } else {\n    _variance.call(this, node);\n    this.print(node.key);\n  }\n\n  // TS\n  if (node.optional) {\n    this.token(\"?\");\n  }\n  if (node.definite) {\n    this.token(\"!\");\n  }\n\n  this.print(node.typeAnnotation);\n  if (node.value) {\n    this.space();\n    this.token(\"=\");\n    this.space();\n    this.print(node.value);\n  }\n  this.semicolon();\n}\n\nexport function ClassAccessorProperty(\n  this: Printer,\n  node: t.ClassAccessorProperty,\n) {\n  this.printJoin(node.decorators);\n\n  // catch up to property key, avoid line break\n  // between member modifiers and the property key.\n  const endLine = node.key.loc?.end?.line;\n  if (endLine) this.catchUp(endLine);\n\n  // TS does not support class accessor property yet\n  _tsPrintClassMemberModifiers.call(this, node);\n\n  this.word(\"accessor\", true);\n  this.space();\n\n  if (node.computed) {\n    this.token(\"[\");\n    this.print(node.key);\n    this.token(\"]\");\n  } else {\n    // Todo: Flow does not support class accessor property yet.\n    _variance.call(this, node);\n    this.print(node.key);\n  }\n\n  // TS\n  if (node.optional) {\n    this.token(\"?\");\n  }\n  if (node.definite) {\n    this.token(\"!\");\n  }\n\n  this.print(node.typeAnnotation);\n  if (node.value) {\n    this.space();\n    this.token(\"=\");\n    this.space();\n    this.print(node.value);\n  }\n  this.semicolon();\n}\n\nexport function ClassPrivateProperty(\n  this: Printer,\n  node: t.ClassPrivateProperty,\n) {\n  this.printJoin(node.decorators);\n  _tsPrintClassMemberModifiers.call(this, node);\n  this.print(node.key);\n  // TS\n  if (node.optional) {\n    this.token(\"?\");\n  }\n  if (node.definite) {\n    this.token(\"!\");\n  }\n  this.print(node.typeAnnotation);\n  if (node.value) {\n    this.space();\n    this.token(\"=\");\n    this.space();\n    this.print(node.value);\n  }\n  this.semicolon();\n}\n\nexport function ClassMethod(this: Printer, node: t.ClassMethod) {\n  _classMethodHead.call(this, node);\n  this.space();\n  this.print(node.body);\n}\n\nexport function ClassPrivateMethod(this: Printer, node: t.ClassPrivateMethod) {\n  _classMethodHead.call(this, node);\n  this.space();\n  this.print(node.body);\n}\n\nexport function _classMethodHead(\n  this: Printer,\n  node: t.ClassMethod | t.ClassPrivateMethod | t.TSDeclareMethod,\n  allowDecorators = true,\n) {\n  if (allowDecorators) {\n    this.printJoin((node as t.ClassMethod | t.ClassPrivateMethod).decorators);\n  }\n\n  if (!this.format.preserveFormat) {\n    // catch up to method key, avoid line break\n    // between member modifiers/method heads and the method key.\n    const endLine = node.key.loc?.end?.line;\n    if (endLine) this.catchUp(endLine);\n  }\n\n  _tsPrintClassMemberModifiers.call(this, node);\n  _methodHead.call(this, node);\n}\n\nexport function StaticBlock(this: Printer, node: t.StaticBlock) {\n  this.word(\"static\");\n  this.space();\n  this.token(\"{\");\n  if (node.body.length === 0) {\n    this.token(\"}\");\n  } else {\n    this.newline();\n    this.printSequence(node.body, true);\n    this.rightBrace(node);\n  }\n}\n","import type Printer from \"../printer.ts\";\nimport type * as t from \"@babel/types\";\n\nexport function File(this: Printer, node: t.File) {\n  if (node.program) {\n    // Print this here to ensure that Program node 'leadingComments' still\n    // get printed after the hashbang.\n    this.print(node.program.interpreter);\n  }\n\n  this.print(node.program);\n}\n\nexport function Program(this: Printer, node: t.Program) {\n  // An empty Program doesn't have any inner tokens, so\n  // we must explicitly print its inner comments.\n  this.printInnerComments(false);\n\n  const directivesLen = node.directives?.length;\n  if (directivesLen) {\n    const newline = node.body.length ? 2 : 1;\n    this.printSequence(node.directives, undefined, undefined, newline);\n    if (!node.directives[directivesLen - 1].trailingComments?.length) {\n      this.newline(newline);\n    }\n  }\n\n  this.printSequence(node.body);\n}\n\nexport function BlockStatement(this: Printer, node: t.BlockStatement) {\n  this.token(\"{\");\n  const oldNoLineTerminatorAfterNode = this.enterDelimited();\n\n  const directivesLen = node.directives?.length;\n  if (directivesLen) {\n    const newline = node.body.length ? 2 : 1;\n    this.printSequence(node.directives, true, true, newline);\n    if (!node.directives[directivesLen - 1].trailingComments?.length) {\n      this.newline(newline);\n    }\n  }\n\n  this.printSequence(node.body, true, true);\n\n  this._noLineTerminatorAfterNode = oldNoLineTerminatorAfterNode;\n  this.rightBrace(node);\n}\n\nexport function Directive(this: Printer, node: t.Directive) {\n  this.print(node.value);\n  this.semicolon();\n}\n\n// These regexes match an even number of \\ followed by a quote\nconst unescapedSingleQuoteRE = /(?:^|[^\\\\])(?:\\\\\\\\)*'/;\nconst unescapedDoubleQuoteRE = /(?:^|[^\\\\])(?:\\\\\\\\)*\"/;\n\nexport function DirectiveLiteral(this: Printer, node: t.DirectiveLiteral) {\n  const raw = this.getPossibleRaw(node);\n  if (!this.format.minified && raw !== undefined) {\n    this.token(raw);\n    return;\n  }\n\n  const { value } = node;\n\n  // NOTE: In directives we can't change escapings,\n  // because they change the behavior.\n  // e.g. \"us\\x65 strict\" (\\x65 is e) is not a \"use strict\" directive.\n\n  if (!unescapedDoubleQuoteRE.test(value)) {\n    this.token(`\"${value}\"`);\n  } else if (!unescapedSingleQuoteRE.test(value)) {\n    this.token(`'${value}'`);\n  } else {\n    throw new Error(\n      \"Malformed AST: it is not possible to print a directive containing\" +\n        \" both unescaped single and double quotes.\",\n    );\n  }\n}\n\nexport function InterpreterDirective(\n  this: Printer,\n  node: t.InterpreterDirective,\n) {\n  this.token(`#!${node.value}`);\n  this._newline();\n}\n\nexport function Placeholder(this: Printer, node: t.Placeholder) {\n  this.token(\"%%\");\n  this.print(node.name);\n  this.token(\"%%\");\n\n  if (node.expectedNode === \"Statement\") {\n    this.semicolon();\n  }\n}\n","import type Printer from \"../printer.ts\";\nimport type * as t from \"@babel/types\";\n\nexport function JSXAttribute(this: Printer, node: t.JSXAttribute) {\n  this.print(node.name);\n  if (node.value) {\n    this.token(\"=\");\n    this.print(node.value);\n  }\n}\n\nexport function JSXIdentifier(this: Printer, node: t.JSXIdentifier) {\n  this.word(node.name);\n}\n\nexport function JSXNamespacedName(this: Printer, node: t.JSXNamespacedName) {\n  this.print(node.namespace);\n  this.token(\":\");\n  this.print(node.name);\n}\n\nexport function JSXMemberExpression(\n  this: Printer,\n  node: t.JSXMemberExpression,\n) {\n  this.print(node.object);\n  this.token(\".\");\n  this.print(node.property);\n}\n\nexport function JSXSpreadAttribute(this: Printer, node: t.JSXSpreadAttribute) {\n  this.token(\"{\");\n  this.token(\"...\");\n  this.print(node.argument);\n  this.rightBrace(node);\n}\n\nexport function JSXExpressionContainer(\n  this: Printer,\n  node: t.JSXExpressionContainer,\n) {\n  this.token(\"{\");\n  this.print(node.expression);\n  this.rightBrace(node);\n}\n\nexport function JSXSpreadChild(this: Printer, node: t.JSXSpreadChild) {\n  this.token(\"{\");\n  this.token(\"...\");\n  this.print(node.expression);\n  this.rightBrace(node);\n}\n\nexport function JSXText(this: Printer, node: t.JSXText) {\n  const raw = this.getPossibleRaw(node);\n\n  if (raw !== undefined) {\n    this.token(raw, true);\n  } else {\n    this.token(node.value, true);\n  }\n}\n\nexport function JSXElement(this: Printer, node: t.JSXElement) {\n  const open = node.openingElement;\n  this.print(open);\n  if (open.selfClosing) return;\n\n  this.indent();\n  for (const child of node.children) {\n    this.print(child);\n  }\n  this.dedent();\n\n  this.print(node.closingElement);\n}\n\nfunction spaceSeparator(this: Printer) {\n  this.space();\n}\n\nexport function JSXOpeningElement(this: Printer, node: t.JSXOpeningElement) {\n  this.token(\"<\");\n  this.print(node.name);\n\n  this.print(node.typeArguments);\n\n  if (node.attributes.length > 0) {\n    this.space();\n    this.printJoin(node.attributes, undefined, undefined, spaceSeparator);\n  }\n  if (node.selfClosing) {\n    this.space();\n    this.token(\"/\");\n  }\n  this.token(\">\");\n}\n\nexport function JSXClosingElement(this: Printer, node: t.JSXClosingElement) {\n  this.token(\"<\");\n  this.token(\"/\");\n  this.print(node.name);\n  this.token(\">\");\n}\n\nexport function JSXEmptyExpression(this: Printer) {\n  // This node is empty, so forcefully print its inner comments.\n  this.printInnerComments();\n}\n\nexport function JSXFragment(this: Printer, node: t.JSXFragment) {\n  this.print(node.openingFragment);\n\n  this.indent();\n  for (const child of node.children) {\n    this.print(child);\n  }\n  this.dedent();\n\n  this.print(node.closingFragment);\n}\n\nexport function JSXOpeningFragment(this: Printer) {\n  this.token(\"<\");\n  this.token(\">\");\n}\n\nexport function JSXClosingFragment(this: Printer) {\n  this.token(\"</\");\n  this.token(\">\");\n}\n","import type * as t from \"@babel/types\";\n\nimport * as generatorFunctions from \"./generators/index.ts\";\nimport type { NodeHandler } from \"./node/index.ts\";\nimport type Printer from \"./printer.ts\";\n\ndeclare global {\n  function __node(type: t.Node[\"type\"]): number;\n}\n\nconst generatorInfosMap = new Map<\n  string,\n  [\n    (this: Printer, node: t.Node, parent?: t.Node | null) => void,\n    number,\n    NodeHandler<boolean> | undefined,\n  ]\n>();\nlet index = 0;\n\nfor (const key of Object.keys(generatorFunctions).sort() as Exclude<\n  keyof typeof generatorFunctions,\n  `_${string}`\n>[]) {\n  if (key.startsWith(\"_\")) continue;\n  generatorInfosMap.set(key, [generatorFunctions[key], index++, undefined]);\n}\n\nexport { generatorInfosMap };\n","import * as parens from \"./parentheses.ts\";\nimport { VISITOR_KEYS } from \"@babel/types\";\nimport type * as t from \"@babel/types\";\n\nimport { generatorInfosMap } from \"../nodes.ts\";\n\nexport const enum TokenContext {\n  normal = 0,\n  expressionStatement = 1 << 0,\n  arrowBody = 1 << 1,\n  exportDefault = 1 << 2,\n  arrowFlowReturnType = 1 << 3,\n  forInitHead = 1 << 4,\n  forInHead = 1 << 5,\n  forOfHead = 1 << 6,\n  // This flag lives across the token boundary, and will\n  // be reset after forIn or forInit head is printed\n  forInOrInitHeadAccumulate = 1 << 7,\n  forInOrInitHeadAccumulatePassThroughMask = 0b10000000,\n}\n\nexport type NodeHandler<R> = (\n  node: t.Node,\n  // todo:\n  // node: K extends keyof typeof t\n  //   ? Extract<typeof t[K], { type: \"string\" }>\n  //   : t.Node,\n  parent: t.Node,\n  parentId: number,\n  tokenContext?: number,\n  getRawIdentifier?: (node: t.Identifier) => string,\n) => R | undefined;\n\nfor (const type of Object.keys(parens) as (keyof typeof parens)[]) {\n  const func = parens[type];\n  if (generatorInfosMap.has(type)) {\n    generatorInfosMap.get(type)![2] = func;\n  }\n}\n\nfunction isOrHasLeadingCallExpression(node: t.Node): boolean {\n  switch (node.type) {\n    case \"CallExpression\":\n    case \"ImportExpression\":\n      return true;\n    case \"MemberExpression\":\n      return isOrHasLeadingCallExpression(node.object);\n  }\n  return false;\n}\n\nexport function parentNeedsParens(\n  node: t.Node,\n  parent: any,\n  parentId: number,\n): boolean {\n  switch (parentId) {\n    case __node(\"NewExpression\"):\n      if (parent.callee === node) {\n        if (\n          isOrHasLeadingCallExpression(node) ||\n          node.type === \"OptionalCallExpression\" ||\n          node.type === \"OptionalMemberExpression\"\n        )\n          return true;\n      }\n      break;\n    case __node(\"Decorator\"):\n      return (\n        !isDecoratorMemberExpression(node) &&\n        !(\n          node.type === \"CallExpression\" &&\n          isDecoratorMemberExpression(node.callee)\n        ) &&\n        node.type !== \"ParenthesizedExpression\"\n      );\n  }\n  return false;\n}\n\nfunction isDecoratorMemberExpression(node: t.Node): boolean {\n  switch (node.type) {\n    case \"Identifier\":\n      return true;\n    case \"MemberExpression\":\n      return (\n        !node.computed &&\n        node.property.type === \"Identifier\" &&\n        isDecoratorMemberExpression(node.object)\n      );\n    default:\n      return false;\n  }\n}\n\nexport function isLastChild(parent: t.Node, child: t.Node) {\n  const visitorKeys = VISITOR_KEYS[parent.type];\n  for (let i = visitorKeys.length - 1; i >= 0; i--) {\n    const val = (parent as any)[visitorKeys[i]] as t.Node | t.Node[] | null;\n    if (val === child) {\n      return true;\n    } else if (Array.isArray(val)) {\n      let j = val.length - 1;\n      while (j >= 0 && val[j] === null) j--;\n      return j >= 0 && val[j] === child;\n    } else if (val) {\n      return false;\n    }\n  }\n  return false;\n}\n","import type * as t from \"@babel/types\";\nimport type { Token } from \"@babel/parser\";\n\nimport { traverseFast, VISITOR_KEYS } from \"@babel/types\";\n\nexport class TokenMap {\n  _tokens: Token[];\n  _source: string;\n\n  _nodesToTokenIndexes = new Map<t.Node, number[]>();\n  _nodesOccurrencesCountCache = new Map<\n    t.Node,\n    { test: string; count: number; i: number }\n  >();\n\n  _tokensCache = new Map<t.Node, { first: number; last: number }>();\n\n  constructor(ast: t.Node, tokens: Token[], source: string) {\n    this._tokens = tokens;\n    this._source = source;\n\n    traverseFast(ast, node => {\n      const indexes = this._getTokensIndexesOfNode(node);\n      if (indexes.length > 0) this._nodesToTokenIndexes.set(node, indexes);\n    });\n\n    this._tokensCache.clear();\n  }\n\n  has(node: t.Node): boolean {\n    return this._nodesToTokenIndexes.has(node);\n  }\n\n  getIndexes(node: t.Node): readonly number[] | undefined {\n    return this._nodesToTokenIndexes.get(node);\n  }\n\n  find(\n    node: t.Node,\n    condition: (token: Token, index: number) => boolean,\n  ): Token | null {\n    const indexes = this._nodesToTokenIndexes.get(node);\n    if (indexes) {\n      for (let k = 0; k < indexes.length; k++) {\n        const index = indexes[k];\n        const tok = this._tokens[index];\n        if (condition(tok, index)) return tok;\n      }\n    }\n    return null;\n  }\n\n  findLastIndex(\n    node: t.Node,\n    condition: (token: Token, index: number) => boolean,\n  ): number {\n    const indexes = this._nodesToTokenIndexes.get(node);\n    if (indexes) {\n      for (let k = indexes.length - 1; k >= 0; k--) {\n        const index = indexes[k];\n        const tok = this._tokens[index];\n        if (condition(tok, index)) return index;\n      }\n    }\n    return -1;\n  }\n\n  findMatching(\n    node: t.Node,\n    test: string | number,\n    occurrenceCount: number = 0,\n  ): Token | null {\n    const indexes = this._nodesToTokenIndexes.get(node);\n    if (indexes) {\n      if (typeof test === \"number\") {\n        test = String.fromCharCode(test);\n      }\n      let i = 0;\n      const count = occurrenceCount;\n\n      // To avoid O(n^2) search when printing lists (such as arrays), we\n      // cache the last index of a given token for a given occurrence count.\n      // If then we are asked to find the next occurrence of the same token,\n      // we start from the index of the previously found token.\n      // This cache only kicks in after 2 tokens of the same type, to avoid\n      // overhead in the simple case of having unique tokens per node.\n      if (count > 1) {\n        const cache = this._nodesOccurrencesCountCache.get(node);\n        if (cache?.test === test && cache.count < count) {\n          i = cache.i + 1;\n          occurrenceCount -= cache.count + 1;\n        }\n      }\n\n      for (; i < indexes.length; i++) {\n        const tok = this._tokens[indexes[i]];\n        if (this.matchesOriginal(tok, test)) {\n          if (occurrenceCount === 0) {\n            if (count > 0) {\n              this._nodesOccurrencesCountCache.set(node, { test, count, i });\n            }\n            return tok;\n          }\n          occurrenceCount--;\n        }\n      }\n    }\n    return null;\n  }\n\n  matchesOriginal(token: Token, test: string) {\n    if (token.end - token.start !== test.length) return false;\n    if (token.value != null) return token.value === test;\n    return this._source.startsWith(test, token.start);\n  }\n\n  startMatches(node: t.Node, test: string): boolean {\n    const indexes = this._nodesToTokenIndexes.get(node);\n    if (!indexes) return false;\n    const tok = this._tokens[indexes[0]];\n    if (tok.start !== node.start) return false;\n    return this.matchesOriginal(tok, test);\n  }\n\n  endMatches(node: t.Node, test: string): boolean {\n    const indexes = this._nodesToTokenIndexes.get(node);\n    if (!indexes) return false;\n    const tok = this._tokens[indexes[indexes.length - 1]];\n    if (tok.end !== node.end) return false;\n    return this.matchesOriginal(tok, test);\n  }\n\n  _getTokensIndexesOfNode(node: t.Node): number[] {\n    if (node.start == null || node.end == null) return [];\n\n    const { first, last } = this._findTokensOfNode(\n      node,\n      0,\n      this._tokens.length - 1,\n    );\n\n    let low = first;\n\n    const children = childrenIterator(node);\n\n    if (\n      (node.type === \"ExportNamedDeclaration\" ||\n        node.type === \"ExportDefaultDeclaration\") &&\n      node.declaration?.type === \"ClassDeclaration\"\n    ) {\n      // Exported class declarations can be not properly nested inside\n      // the export declaration that contains them. For example, in\n      // `@dec export class Foo {}` the `export` is covered by the\n      // ClassDeclaration range. Skip the class declaration from the list\n      // of children to skip, so that when looking for `export` we also\n      // traverse its tokens.\n      children.next();\n    }\n\n    const indexes = [];\n\n    for (const child of children) {\n      if (child == null) continue;\n      if (child.start == null || child.end == null) continue;\n\n      const childTok = this._findTokensOfNode(child, low, last);\n\n      const high = childTok.first;\n      for (let k = low; k < high; k++) indexes.push(k);\n\n      low = childTok.last + 1;\n    }\n\n    for (let k = low; k <= last; k++) indexes.push(k);\n\n    return indexes;\n  }\n\n  _findTokensOfNode(node: t.Node, low: number, high: number) {\n    const cached = this._tokensCache.get(node);\n    if (cached) return cached;\n\n    const first = this._findFirstTokenOfNode(node.start!, low, high);\n    const last = this._findLastTokenOfNode(node.end!, first, high);\n\n    this._tokensCache.set(node, { first, last });\n    return { first, last };\n  }\n\n  _findFirstTokenOfNode(start: number, low: number, high: number): number {\n    while (low <= high) {\n      const mid = (high + low) >> 1;\n      if (start < this._tokens[mid].start) {\n        high = mid - 1;\n      } else if (start > this._tokens[mid].start) {\n        low = mid + 1;\n      } else {\n        return mid;\n      }\n    }\n    return low;\n  }\n\n  _findLastTokenOfNode(end: number, low: number, high: number): number {\n    while (low <= high) {\n      const mid = (high + low) >> 1;\n      if (end < this._tokens[mid].end) {\n        high = mid - 1;\n      } else if (end > this._tokens[mid].end) {\n        low = mid + 1;\n      } else {\n        return mid;\n      }\n    }\n    return high;\n  }\n}\n\nfunction* childrenIterator(node: t.Node) {\n  // We need special handling to iterate TemplateLiteral\n  // children in order, since the two lists are interleaved.\n  if (node.type === \"TemplateLiteral\") {\n    yield node.quasis[0];\n    for (let i = 1; i < node.quasis.length; i++) {\n      yield node.expressions[i - 1];\n      yield node.quasis[i];\n    }\n    return;\n  }\n\n  const keys = VISITOR_KEYS[node.type];\n  for (const key of keys) {\n    const child = (node as any)[key];\n    if (!child) continue;\n    if (Array.isArray(child)) {\n      yield* child;\n    } else {\n      yield child;\n    }\n  }\n}\n","/* eslint-disable @typescript-eslint/no-unsafe-enum-comparison */\n\nimport Buffer from \"./buffer.ts\";\nimport type { Loc, Pos } from \"./buffer.ts\";\nimport { isLastChild, parentNeedsParens } from \"./node/index.ts\";\nimport { generatorInfosMap } from \"./nodes.ts\";\nimport type * as t from \"@babel/types\";\nimport {\n  isExpression,\n  isFunction,\n  isStatement,\n  isClassBody,\n  isTSInterfaceBody,\n  isTSEnumMember,\n} from \"@babel/types\";\nimport type { Opts as jsescOptions } from \"jsesc\";\n\nimport { TokenMap } from \"./token-map.ts\";\n\nimport type { GeneratorOptions } from \"./index.ts\";\nimport type SourceMap from \"./source-map.ts\";\nimport type { TraceMap } from \"@jridgewell/trace-mapping\";\nimport type { Token } from \"@babel/parser\";\n\nimport * as charCodes from \"charcodes\";\n\nconst SCIENTIFIC_NOTATION = /e/i;\nconst ZERO_DECIMAL_INTEGER = /\\.0+$/;\nconst HAS_NEWLINE = /[\\n\\r\\u2028\\u2029]/;\nconst HAS_NEWLINE_OR_BlOCK_COMMENT_END = /[\\n\\r\\u2028\\u2029]|\\*\\//;\n\nfunction commentIsNewline(c: t.Comment) {\n  return c.type === \"CommentLine\" || HAS_NEWLINE.test(c.value);\n}\n\nimport { TokenContext } from \"./node/index.ts\";\nimport { _getRawIdentifier } from \"./generators/types.ts\";\n\nconst enum COMMENT_TYPE {\n  LEADING,\n  INNER,\n  TRAILING,\n}\n\nconst enum COMMENT_SKIP_NEWLINE {\n  DEFAULT,\n  ALL,\n  LEADING,\n  TRAILING,\n}\n\nconst enum PRINT_COMMENT_HINT {\n  SKIP,\n  ALLOW,\n  DEFER,\n}\n\nconst enum PRINTER_FLAGS {\n  EMPTY = 0,\n  PRESERVE_FORMAT = 1 << 0,\n  COMPACT = 1 << 1,\n  CONCISE = 1 << 2,\n  RETAIN_LINES = 1 << 3,\n  RETAIN_FUNCTION_PARENS = 1 << 4,\n  AUX_COMMENTS = 1 << 5,\n}\n\nconst enum LAST_CHAR_KINDS {\n  EMPTY = 0,\n  NORMAL = -1,\n  INTEGER = -2,\n  WORD = -3,\n}\n\nconst enum INNER_COMMENTS_STATE {\n  DISALLOWED = 0,\n  ALLOWED = 1,\n  PRINTED = 2,\n\n  WITH_INDENT = 4,\n  MASK = 3,\n}\n\nconst enum PRINT_COMMENTS_RESULT {\n  PRINTED_NONE = 0,\n  PRINTED_SOME = 1,\n  PRINTED_ALL = 2,\n}\n\nexport type Format = {\n  shouldPrintComment: (comment: string) => boolean;\n  preserveFormat: boolean | undefined;\n  retainLines: boolean | undefined;\n  retainFunctionParens: boolean | undefined;\n  comments: boolean | undefined;\n  auxiliaryCommentBefore: string | undefined;\n  auxiliaryCommentAfter: string | undefined;\n  compact: boolean | \"auto\" | undefined;\n  minified: boolean | undefined;\n  concise: boolean | undefined;\n  indent: {\n    adjustMultilineComment: boolean;\n    style: string;\n  };\n  jsescOption: jsescOptions;\n  /**\n   * For use with the Hack-style pipe operator.\n   * Changes what token is used for pipe bodies’ topic references.\n   */\n  topicToken?: GeneratorOptions[\"topicToken\"];\n};\n\ninterface PrintSequenceOptions {\n  statement?: boolean;\n  indent?: boolean;\n  trailingCommentsLineOffset?: number;\n}\n\ninterface PrintListOptions {\n  separator?: (this: Printer, occurrenceCount: number, last: boolean) => void;\n  statement?: boolean;\n  indent?: boolean;\n  printTrailingSeparator?: boolean;\n}\n\nexport type PrintJoinOptions = PrintListOptions & PrintSequenceOptions;\nclass Printer {\n  constructor(\n    format: Format,\n    map: SourceMap | null,\n    tokens: Token[] | null = null,\n    originalCode: string | null = null,\n  ) {\n    this.format = format;\n\n    this._tokens = tokens;\n    this._originalCode = originalCode;\n\n    this._indentRepeat = format.indent.style.length;\n\n    this._inputMap = map?._inputMap || null;\n\n    this._buf = new Buffer(map, format.indent.style[0]);\n\n    const {\n      preserveFormat,\n      compact,\n      concise,\n      retainLines,\n      retainFunctionParens,\n    } = format;\n    if (preserveFormat) {\n      this._flags |= PRINTER_FLAGS.PRESERVE_FORMAT;\n    }\n    if (compact) {\n      this._flags |= PRINTER_FLAGS.COMPACT;\n    }\n    if (concise) {\n      this._flags |= PRINTER_FLAGS.CONCISE;\n    }\n    if (retainLines) {\n      this._flags |= PRINTER_FLAGS.RETAIN_LINES;\n    }\n    if (retainFunctionParens) {\n      this._flags |= PRINTER_FLAGS.RETAIN_FUNCTION_PARENS;\n    }\n    if (format.auxiliaryCommentBefore || format.auxiliaryCommentAfter) {\n      this._flags |= PRINTER_FLAGS.AUX_COMMENTS;\n    }\n  }\n  declare _inputMap: TraceMap | null;\n\n  declare format: Format;\n\n  enterDelimited() {\n    const oldNoLineTerminatorAfterNode = this._noLineTerminatorAfterNode;\n    if (oldNoLineTerminatorAfterNode !== null) {\n      this._noLineTerminatorAfterNode = null;\n    }\n    return oldNoLineTerminatorAfterNode;\n  }\n\n  tokenContext: number = TokenContext.normal;\n\n  _tokens: Token[] | null = null;\n  _originalCode: string | null = null;\n\n  declare _buf: Buffer;\n  _currentNode: t.Node | null = null;\n  _currentTypeId: number | null = null;\n  _indent: number = 0;\n  _indentRepeat: number = 0;\n  _insideAux: boolean = false;\n  _noLineTerminator: boolean = false;\n  _noLineTerminatorAfterNode: t.Node | null = null;\n  _printAuxAfterOnNextUserNode: boolean = false;\n  _printedComments = new Set<t.Comment>();\n  _lastCommentLine = 0;\n  _innerCommentsState = INNER_COMMENTS_STATE.DISALLOWED;\n  _flags = PRINTER_FLAGS.EMPTY;\n\n  tokenMap: TokenMap | null = null;\n\n  _boundGetRawIdentifier: ((node: t.Identifier) => string) | null = null;\n\n  generate(ast: t.Node) {\n    if (this.format.preserveFormat) {\n      this.tokenMap = new TokenMap(ast, this._tokens!, this._originalCode!);\n      this._boundGetRawIdentifier = _getRawIdentifier.bind(this);\n    }\n    this.print(ast);\n    this._maybeAddAuxComment();\n\n    return this._buf.get();\n  }\n\n  /**\n   * Increment indent size.\n   */\n\n  indent(flags = this._flags): void {\n    if (\n      flags &\n      (PRINTER_FLAGS.PRESERVE_FORMAT |\n        PRINTER_FLAGS.COMPACT |\n        PRINTER_FLAGS.CONCISE)\n    ) {\n      return;\n    }\n\n    this._indent += this._indentRepeat;\n  }\n\n  /**\n   * Decrement indent size.\n   */\n\n  dedent(flags = this._flags): void {\n    if (\n      flags &\n      (PRINTER_FLAGS.PRESERVE_FORMAT |\n        PRINTER_FLAGS.COMPACT |\n        PRINTER_FLAGS.CONCISE)\n    ) {\n      return;\n    }\n\n    this._indent -= this._indentRepeat;\n  }\n\n  /**\n   * If the next token is on the same line, we must first print a semicolon.\n   * This option is only used in `preserveFormat` node, for semicolons that\n   * might have omitted due to them being absent in the original code (thanks\n   * to ASI).\n   *\n   * We need both *NextToken and *NextNode because we only want to insert the\n   * semicolon when the next token starts a new node, and not in cases like\n   * foo} (where } is not starting a new node). So we first set *NextNode, and\n   * then the print() method will move it to *NextToken.\n   */\n  _printSemicolonBeforeNextNode: number = -1;\n  _printSemicolonBeforeNextToken: number = -1;\n\n  /**\n   * Add a semicolon to the buffer.\n   */\n  semicolon(force: boolean = false): void {\n    const flags = this._flags;\n    if (flags & PRINTER_FLAGS.AUX_COMMENTS) {\n      this._maybeAddAuxComment();\n    }\n    if (flags & PRINTER_FLAGS.PRESERVE_FORMAT) {\n      const node = this._currentNode!;\n      if (node.start != null && node.end != null) {\n        if (!this.tokenMap!.endMatches(node, \";\")) {\n          // no semicolon\n          this._printSemicolonBeforeNextNode = this._buf.getCurrentLine();\n          return;\n        }\n        const indexes = this.tokenMap!.getIndexes(this._currentNode!)!;\n        this._catchUpTo(this._tokens![indexes[indexes.length - 1]].loc.start);\n      }\n    }\n    if (force) {\n      this._appendChar(charCodes.semicolon);\n    } else {\n      this._queue(charCodes.semicolon);\n    }\n    this._noLineTerminator = false;\n  }\n\n  /**\n   * Add a right brace to the buffer.\n   */\n\n  rightBrace(node: t.Node): void {\n    if (this.format.minified) {\n      this._buf.removeLastSemicolon();\n    }\n    this.sourceWithOffset(\"end\", node.loc, -1);\n    this.token(\"}\");\n  }\n\n  rightParens(node: t.Node): void {\n    this.sourceWithOffset(\"end\", node.loc, -1);\n    this.token(\")\");\n  }\n\n  /**\n   * Add a space to the buffer unless it is compact.\n   */\n\n  space(force: boolean = false): void {\n    if (this._flags & (PRINTER_FLAGS.PRESERVE_FORMAT | PRINTER_FLAGS.COMPACT)) {\n      return;\n    }\n\n    if (force) {\n      this._space();\n    } else {\n      const lastCp = this.getLastChar(true);\n      if (\n        lastCp !== 0 &&\n        lastCp !== charCodes.space &&\n        lastCp !== charCodes.lineFeed\n      ) {\n        this._space();\n      }\n    }\n  }\n\n  /**\n   * Writes a token that can't be safely parsed without taking whitespace into account.\n   */\n\n  word(str: string, noLineTerminatorAfter: boolean = false): void {\n    this.tokenContext &= TokenContext.forInOrInitHeadAccumulatePassThroughMask;\n\n    this._maybePrintInnerComments(str);\n\n    const flags = this._flags;\n    if (flags & PRINTER_FLAGS.AUX_COMMENTS) {\n      this._maybeAddAuxComment();\n    }\n\n    if (flags & PRINTER_FLAGS.PRESERVE_FORMAT) this._catchUpToCurrentToken(str);\n\n    const lastChar = this.getLastChar();\n\n    if (\n      lastChar === LAST_CHAR_KINDS.INTEGER ||\n      lastChar === LAST_CHAR_KINDS.WORD ||\n      // prevent concatenating words and creating // comment out of division and regex\n      (lastChar === charCodes.slash && str.charCodeAt(0) === charCodes.slash)\n    ) {\n      this._space();\n    }\n    this._append(str, false);\n\n    this.setLastChar(-3);\n    this._noLineTerminator = noLineTerminatorAfter;\n  }\n\n  /**\n   * Writes a number token so that we can validate if it is an integer.\n   */\n\n  number(str: string, number?: number): void {\n    // const NON_DECIMAL_LITERAL = /^0[box]/;\n    function isNonDecimalLiteral(str: string) {\n      if (str.length > 2 && str.charCodeAt(0) === charCodes.digit0) {\n        const secondChar = str.charCodeAt(1);\n        return (\n          secondChar === charCodes.lowercaseB ||\n          secondChar === charCodes.lowercaseO ||\n          secondChar === charCodes.lowercaseX\n        );\n      }\n      return false;\n    }\n    this.word(str);\n\n    // Integer tokens need special handling because they cannot have '.'s inserted immediately after them.\n    if (\n      Number.isInteger(number) &&\n      !isNonDecimalLiteral(str) &&\n      !SCIENTIFIC_NOTATION.test(str) &&\n      !ZERO_DECIMAL_INTEGER.test(str) &&\n      str.charCodeAt(str.length - 1) !== charCodes.dot\n    ) {\n      this.setLastChar(LAST_CHAR_KINDS.INTEGER);\n    }\n  }\n\n  /**\n   * Writes a simple token.\n   *\n   * @param str The string to append.\n   * @param [maybeNewline=false] Whether `str` might potentially\n   *    contain a line terminator or not.\n   * @param [occurrenceCount=0] The occurrence count of this token in\n   *    the current node. This is used when printing in `preserveFormat` mode,\n   *    to know which token we should map to (for example, to disambiguate the\n   *    commas in an array literal).\n   * @param [mayNeedSpace=false] Check whether a whitespace might be\n   *    needed after this token, and if so, add a whitespace after it.\n   */\n  token(\n    str: string,\n    maybeNewline = false,\n    occurrenceCount = 0,\n    mayNeedSpace: boolean = false,\n  ): void {\n    this.tokenContext &= TokenContext.forInOrInitHeadAccumulatePassThroughMask;\n\n    this._maybePrintInnerComments(str, occurrenceCount);\n\n    const flags = this._flags;\n\n    if (flags & PRINTER_FLAGS.AUX_COMMENTS) {\n      this._maybeAddAuxComment();\n    }\n\n    if (flags & PRINTER_FLAGS.PRESERVE_FORMAT) {\n      this._catchUpToCurrentToken(str, occurrenceCount);\n    }\n\n    if (mayNeedSpace) {\n      const strFirst = str.charCodeAt(0);\n      if (\n        // space is mandatory to avoid outputting <!--\n        // http://javascript.spec.whatwg.org/#comment-syntax\n        (((strFirst === charCodes.dash && str === \"--\") ||\n          // Needs spaces to avoid changing a! == 0 to a!== 0\n          strFirst === charCodes.equalsTo) &&\n          this.getLastChar() === charCodes.exclamationMark) ||\n        // Need spaces for operators of the same kind to avoid: `a+++b`\n        (strFirst === charCodes.plusSign &&\n          this.getLastChar() === charCodes.plusSign) ||\n        (strFirst === charCodes.dash &&\n          this.getLastChar() === charCodes.dash) ||\n        // Needs spaces to avoid changing '34' to '34.', which would still be a valid number.\n        (strFirst === charCodes.dot &&\n          this.getLastChar() === LAST_CHAR_KINDS.INTEGER)\n      ) {\n        this._space();\n      }\n    }\n    this._append(str, maybeNewline);\n    this._noLineTerminator = false;\n  }\n\n  tokenChar(char: number, occurrenceCount = 0): void {\n    this.tokenContext &= TokenContext.forInOrInitHeadAccumulatePassThroughMask;\n\n    this._maybePrintInnerComments(char, occurrenceCount);\n\n    const flags = this._flags;\n\n    if (flags & PRINTER_FLAGS.AUX_COMMENTS) {\n      this._maybeAddAuxComment();\n    }\n\n    if (flags & PRINTER_FLAGS.PRESERVE_FORMAT) {\n      this._catchUpToCurrentToken(char, occurrenceCount);\n    }\n\n    if (\n      // Need spaces for operators of the same kind to avoid: `a+++b`\n      (char === charCodes.plusSign &&\n        this.getLastChar() === charCodes.plusSign) ||\n      (char === charCodes.dash && this.getLastChar() === charCodes.dash) ||\n      // Needs spaces to avoid changing '34' to '34.', which would still be a valid number.\n      (char === charCodes.dot && this.getLastChar() === LAST_CHAR_KINDS.INTEGER)\n    ) {\n      this._space();\n    }\n    this._appendChar(char);\n    this._noLineTerminator = false;\n  }\n\n  /**\n   * Add a newline (or many newlines), maintaining formatting.\n   * This function checks the number of newlines in the queue and subtracts them.\n   * It currently has some limitations.\n   * @see {Buffer#getNewlineCount}\n   */\n  newline(i: number = 1, flags = this._flags): void {\n    if (i <= 0) return;\n\n    if (flags & (PRINTER_FLAGS.RETAIN_LINES | PRINTER_FLAGS.COMPACT)) {\n      return;\n    }\n\n    if (flags & PRINTER_FLAGS.CONCISE) {\n      this.space();\n      return;\n    }\n\n    if (i > 2) i = 2; // Max two lines\n\n    i -= this._buf.getNewlineCount();\n\n    for (let j = 0; j < i; j++) {\n      this._newline();\n    }\n  }\n\n  endsWith(char: number): boolean {\n    return this.getLastChar(true) === char;\n  }\n\n  getLastChar(checkQueue?: boolean): number {\n    return this._buf.getLastChar(checkQueue);\n  }\n\n  setLastChar(char: number) {\n    this._buf._last = char;\n  }\n\n  exactSource(loc: Loc | null | undefined, cb: () => void) {\n    if (!loc) {\n      cb();\n      return;\n    }\n\n    this._catchUp(\"start\", loc);\n\n    this._buf.exactSource(loc, cb);\n  }\n\n  source(prop: \"start\" | \"end\", loc: Loc | undefined): void {\n    if (!loc) return;\n\n    this._catchUp(prop, loc);\n\n    this._buf.source(prop, loc);\n  }\n\n  sourceWithOffset(\n    prop: \"start\" | \"end\",\n    loc: Loc | null | undefined,\n    columnOffset: number,\n  ): void {\n    if (!loc || this.format.preserveFormat) return;\n\n    this._catchUp(prop, loc);\n\n    this._buf.sourceWithOffset(prop, loc, columnOffset);\n  }\n\n  sourceIdentifierName(identifierName: string, pos?: Pos): void {\n    if (!this._buf._canMarkIdName) return;\n\n    const sourcePosition = this._buf._sourcePosition;\n    sourcePosition.identifierNamePos = pos;\n    sourcePosition.identifierName = identifierName;\n  }\n\n  _space(): void {\n    this._queue(charCodes.space);\n  }\n\n  _newline(): void {\n    // Drop trailing spaces when a newline is inserted.\n    if (this._buf._queuedChar === charCodes.space) this._buf._queuedChar = 0;\n\n    this._appendChar(charCodes.lineFeed, true);\n  }\n\n  _catchUpToCurrentToken(\n    str: string | number,\n    occurrenceCount: number = 0,\n  ): void {\n    // Assert: this.tokenMap\n\n    const token = this.tokenMap!.findMatching(\n      this._currentNode!,\n      str,\n      occurrenceCount,\n    );\n    if (token) this._catchUpTo(token.loc.start);\n\n    if (\n      this._printSemicolonBeforeNextToken !== -1 &&\n      this._printSemicolonBeforeNextToken === this._buf.getCurrentLine()\n    ) {\n      this._appendChar(charCodes.semicolon, true);\n    }\n    this._printSemicolonBeforeNextToken = -1;\n    this._printSemicolonBeforeNextNode = -1;\n  }\n\n  _append(str: string, maybeNewline: boolean): void {\n    this._maybeIndent();\n\n    this._buf.append(str, maybeNewline);\n  }\n\n  _appendChar(char: number, noIndent?: boolean): void {\n    if (!noIndent) {\n      this._maybeIndent();\n    }\n\n    this._buf.appendChar(char);\n  }\n\n  _queue(char: typeof charCodes.space | typeof charCodes.semicolon): void {\n    this._buf.queue(char);\n\n    this.setLastChar(-1);\n  }\n\n  _maybeIndent(): void {\n    const indent = this._shouldIndent();\n    if (indent > 0) {\n      this._buf._appendChar(-1, indent, false);\n    }\n  }\n\n  _shouldIndent() {\n    // we've got a newline before us so prepend on the indentation\n    return this.endsWith(charCodes.lineFeed) ? this._indent : 0;\n  }\n\n  catchUp(line: number) {\n    if (!this.format.retainLines) return;\n\n    // catch up to this nodes newline if we're behind\n    const count = line - this._buf.getCurrentLine();\n\n    for (let i = 0; i < count; i++) {\n      this._newline();\n    }\n  }\n\n  _catchUp(prop: \"start\" | \"end\", loc?: Loc) {\n    const flags = this._flags;\n    if ((flags & PRINTER_FLAGS.PRESERVE_FORMAT) === 0) {\n      if (flags & PRINTER_FLAGS.RETAIN_LINES && loc?.[prop]) {\n        this.catchUp(loc[prop].line);\n      }\n      return;\n    }\n\n    // catch up to this nodes newline if we're behind\n    const pos = loc?.[prop];\n    if (pos != null) this._catchUpTo(pos);\n  }\n\n  _catchUpTo({ line, column, index }: Pos) {\n    const count = line - this._buf.getCurrentLine();\n    if (count > 0 && this._noLineTerminator) {\n      // We cannot inject new lines when _noLineTemrinator is set\n      // to `true`, or we would generate invalid code.\n      return;\n    }\n\n    for (let i = 0; i < count; i++) {\n      this._newline();\n    }\n\n    const spacesCount =\n      count > 0 ? column : column - this._buf.getCurrentColumn();\n    if (spacesCount > 0) {\n      const spaces = this._originalCode\n        ? this._originalCode\n            .slice(index - spacesCount, index)\n            // https://tc39.es/ecma262/#sec-white-space\n            .replace(/[^\\t\\v\\f\\uFEFF\\p{Space_Separator}]/gu, \" \")\n        : \" \".repeat(spacesCount);\n      this._append(spaces, false);\n      this.setLastChar(charCodes.space);\n    }\n  }\n\n  printTerminatorless(node: t.Node) {\n    /**\n     * Set some state that will be modified if a newline has been inserted before any\n     * non-space characters.\n     *\n     * This is to prevent breaking semantics for terminatorless separator nodes. eg:\n     *\n     *   return foo;\n     *\n     * returns `foo`. But if we do:\n     *\n     *   return\n     *   foo;\n     *\n     *  `undefined` will be returned and not `foo` due to the terminator.\n     */\n    this._noLineTerminator = true;\n    this.print(node);\n  }\n\n  print(\n    node: t.Node | null | undefined,\n    noLineTerminatorAfter: boolean = false,\n    resetTokenContext: boolean = false,\n    // trailingCommentsLineOffset also used to check if called from printJoin\n    // it will be ignored if `noLineTerminatorAfter||this._noLineTerminator`\n    trailingCommentsLineOffset?: number,\n  ) {\n    if (!node) return;\n\n    this._innerCommentsState = INNER_COMMENTS_STATE.DISALLOWED;\n\n    const { type, loc, extra } = node;\n\n    const flags = this._flags;\n    let changedFlags = false;\n    if (\n      // @ts-expect-error document _compact AST properties\n      node._compact\n    ) {\n      this._flags |= PRINTER_FLAGS.CONCISE;\n      changedFlags = true;\n    }\n\n    const nodeInfo = generatorInfosMap.get(type);\n    if (nodeInfo === undefined) {\n      throw new ReferenceError(\n        `unknown node of type ${JSON.stringify(\n          type,\n        )} with constructor ${JSON.stringify(node.constructor.name)}`,\n      );\n    }\n\n    const [printMethod, nodeId, needsParens] = nodeInfo;\n\n    const parent = this._currentNode;\n    const parentId = this._currentTypeId;\n    this._currentNode = node;\n    this._currentTypeId = nodeId;\n\n    if (flags & PRINTER_FLAGS.PRESERVE_FORMAT) {\n      this._printSemicolonBeforeNextToken = this._printSemicolonBeforeNextNode;\n    }\n\n    let oldInAux;\n    if (flags & PRINTER_FLAGS.AUX_COMMENTS) {\n      oldInAux = this._insideAux;\n      this._insideAux = loc == null;\n      this._maybeAddAuxComment(this._insideAux && !oldInAux);\n    }\n\n    let oldTokenContext = 0;\n    if (resetTokenContext) {\n      oldTokenContext = this.tokenContext;\n      if (oldTokenContext & TokenContext.forInOrInitHeadAccumulate) {\n        this.tokenContext = 0;\n      } else {\n        oldTokenContext = 0;\n      }\n    }\n\n    const parenthesized =\n      extra != null && (extra.parenthesized as boolean | undefined);\n    let shouldPrintParens =\n      (parenthesized && flags & PRINTER_FLAGS.PRESERVE_FORMAT) ||\n      (parenthesized &&\n        flags & PRINTER_FLAGS.RETAIN_FUNCTION_PARENS &&\n        nodeId === __node(\"FunctionExpression\")) ||\n      (parent &&\n        (parentNeedsParens(node, parent, parentId!) ||\n          (needsParens != null &&\n            needsParens(\n              node,\n              parent,\n              parentId!,\n              this.tokenContext,\n              flags & PRINTER_FLAGS.PRESERVE_FORMAT\n                ? this._boundGetRawIdentifier!\n                : undefined,\n            ))));\n\n    if (\n      !shouldPrintParens &&\n      parenthesized &&\n      node.leadingComments?.length &&\n      node.leadingComments[0].type === \"CommentBlock\"\n    ) {\n      switch (parentId) {\n        case __node(\"ExpressionStatement\"):\n        case __node(\"VariableDeclarator\"):\n        case __node(\"AssignmentExpression\"):\n        case __node(\"ReturnStatement\"):\n          break;\n        case __node(\"CallExpression\"):\n        case __node(\"OptionalCallExpression\"):\n        case __node(\"NewExpression\"):\n          // @ts-expect-error checked by parentTypeId\n          if (parent.callee !== node) break;\n        // falls through\n        default:\n          shouldPrintParens = true;\n      }\n    }\n\n    let indentParenthesized = false;\n    if (\n      !shouldPrintParens &&\n      this._noLineTerminator &&\n      (node.leadingComments?.some(commentIsNewline) ||\n        (flags & PRINTER_FLAGS.RETAIN_LINES &&\n          loc &&\n          loc.start.line > this._buf.getCurrentLine()))\n    ) {\n      shouldPrintParens = true;\n      indentParenthesized = true;\n    }\n\n    let oldNoLineTerminatorAfterNode;\n    if (!shouldPrintParens) {\n      noLineTerminatorAfter ||=\n        !!parent &&\n        this._noLineTerminatorAfterNode === parent &&\n        isLastChild(parent, node);\n      if (noLineTerminatorAfter) {\n        if (node.trailingComments?.some(commentIsNewline)) {\n          if (isExpression(node)) shouldPrintParens = true;\n        } else {\n          oldNoLineTerminatorAfterNode = this._noLineTerminatorAfterNode;\n          this._noLineTerminatorAfterNode = node;\n        }\n      }\n    }\n\n    if (shouldPrintParens) {\n      this.token(\"(\");\n      if (indentParenthesized) this.indent();\n      this._innerCommentsState = INNER_COMMENTS_STATE.DISALLOWED;\n      if (!resetTokenContext) {\n        oldTokenContext = this.tokenContext;\n      }\n      if (oldTokenContext & TokenContext.forInOrInitHeadAccumulate) {\n        this.tokenContext = 0;\n      }\n      oldNoLineTerminatorAfterNode = this._noLineTerminatorAfterNode;\n      this._noLineTerminatorAfterNode = null;\n    }\n\n    this._printLeadingComments(node, parent);\n\n    this.exactSource(\n      nodeId === __node(\"Program\") || nodeId === __node(\"File\") ? null : loc,\n      printMethod.bind(this, node, parent),\n    );\n\n    if (shouldPrintParens) {\n      this._printTrailingComments(node, parent);\n      if (indentParenthesized) {\n        this.dedent();\n        this.newline();\n      }\n      this.token(\")\");\n      this._noLineTerminator = noLineTerminatorAfter;\n    } else if (noLineTerminatorAfter && !this._noLineTerminator) {\n      this._noLineTerminator = true;\n      this._printTrailingComments(node, parent);\n    } else {\n      this._printTrailingComments(node, parent, trailingCommentsLineOffset);\n    }\n    if (oldTokenContext) this.tokenContext = oldTokenContext;\n\n    // end\n    this._currentNode = parent;\n    this._currentTypeId = parentId;\n    if (changedFlags) {\n      this._flags = flags;\n    }\n    if (flags & PRINTER_FLAGS.AUX_COMMENTS) {\n      this._insideAux = oldInAux!;\n    }\n\n    if (oldNoLineTerminatorAfterNode != null) {\n      this._noLineTerminatorAfterNode = oldNoLineTerminatorAfterNode;\n    }\n\n    this._innerCommentsState = INNER_COMMENTS_STATE.DISALLOWED;\n  }\n\n  _maybeAddAuxComment(enteredPositionlessNode?: boolean) {\n    if (enteredPositionlessNode) this._printAuxBeforeComment();\n    if (!this._insideAux) this._printAuxAfterComment();\n  }\n\n  _printAuxBeforeComment() {\n    if (this._printAuxAfterOnNextUserNode) return;\n    this._printAuxAfterOnNextUserNode = true;\n\n    const comment = this.format.auxiliaryCommentBefore;\n    if (comment) {\n      this._printComment(\n        {\n          type: \"CommentBlock\",\n          value: comment,\n        },\n        COMMENT_SKIP_NEWLINE.DEFAULT,\n      );\n    }\n  }\n\n  _printAuxAfterComment() {\n    if (!this._printAuxAfterOnNextUserNode) return;\n    this._printAuxAfterOnNextUserNode = false;\n\n    const comment = this.format.auxiliaryCommentAfter;\n    if (comment) {\n      this._printComment(\n        {\n          type: \"CommentBlock\",\n          value: comment,\n        },\n        COMMENT_SKIP_NEWLINE.DEFAULT,\n      );\n    }\n  }\n\n  getPossibleRaw(\n    node:\n      | t.StringLiteral\n      | t.NumericLiteral\n      | t.BigIntLiteral\n      | t.DirectiveLiteral\n      | t.JSXText,\n  ): string | undefined {\n    const extra = node.extra;\n    if (\n      extra?.raw != null &&\n      extra.rawValue != null &&\n      node.value === extra.rawValue\n    ) {\n      // @ts-expect-error: The extra.raw of these AST node types must be a string\n      return extra.raw;\n    }\n  }\n\n  printJoin(\n    nodes: t.Node[] | undefined | null,\n    statement?: boolean,\n    indent?: boolean,\n    separator?: PrintJoinOptions[\"separator\"] | null,\n    printTrailingSeparator?: boolean | null,\n    resetTokenContext?: boolean,\n    trailingCommentsLineOffset?: number,\n  ) {\n    if (!nodes?.length) return;\n\n    const flags = this._flags;\n\n    if (indent == null && flags & PRINTER_FLAGS.RETAIN_LINES) {\n      const startLine = nodes[0].loc?.start.line;\n      if (startLine != null && startLine !== this._buf.getCurrentLine()) {\n        indent = true;\n      }\n    }\n\n    if (indent) this.indent(flags);\n\n    const len = nodes.length;\n    for (let i = 0; i < len; i++) {\n      const node = nodes[i];\n      if (!node) continue;\n\n      // don't add newlines at the beginning of the file\n      if (statement && i === 0 && this._buf.hasContent()) {\n        this.newline(1, flags);\n      }\n\n      this.print(\n        node,\n        false,\n        resetTokenContext,\n        trailingCommentsLineOffset || 0,\n      );\n\n      if (separator != null) {\n        if (i < len - 1) separator.call(this, i, false);\n        else if (printTrailingSeparator) separator.call(this, i, true);\n      }\n\n      if (statement) {\n        if (i + 1 === len) {\n          this.newline(1, flags);\n        } else {\n          const lastCommentLine = this._lastCommentLine;\n          if (lastCommentLine > 0) {\n            const offset =\n              (nodes[i + 1].loc?.start.line || 0) - lastCommentLine;\n            if (offset >= 0) {\n              this.newline(offset || 1, flags);\n              continue;\n            }\n          }\n\n          this.newline(1, flags);\n        }\n      }\n    }\n\n    if (indent) this.dedent(flags);\n  }\n\n  printAndIndentOnComments(node: t.Node) {\n    const indent = node.leadingComments && node.leadingComments.length > 0;\n    if (indent) this.indent();\n    this.print(node);\n    if (indent) this.dedent();\n  }\n\n  printBlock(body: t.Statement) {\n    if (body.type !== \"EmptyStatement\") {\n      this.space();\n    }\n\n    this.print(body);\n  }\n\n  _printTrailingComments(\n    node: t.Node,\n    parent?: t.Node | null,\n    lineOffset?: number,\n  ) {\n    const { innerComments, trailingComments } = node;\n    // We print inner comments here, so that if for some reason they couldn't\n    // be printed in earlier locations they are still printed *somewhere*,\n    // even if at the end of the node.\n    if (innerComments?.length) {\n      this._printComments(\n        COMMENT_TYPE.TRAILING,\n        innerComments,\n        node,\n        parent,\n        lineOffset,\n      );\n    }\n    if (trailingComments?.length) {\n      this._printComments(\n        COMMENT_TYPE.TRAILING,\n        trailingComments,\n        node,\n        parent,\n        lineOffset,\n      );\n    } else {\n      this._lastCommentLine = 0;\n    }\n  }\n\n  _printLeadingComments(node: t.Node, parent: t.Node | null) {\n    const comments = node.leadingComments;\n    if (!comments?.length) return;\n    this._printComments(COMMENT_TYPE.LEADING, comments, node, parent);\n  }\n\n  _maybePrintInnerComments(\n    nextTokenStr: string | number,\n    nextTokenOccurrenceCount?: number,\n  ) {\n    const state = this._innerCommentsState;\n    switch (state & INNER_COMMENTS_STATE.MASK) {\n      case INNER_COMMENTS_STATE.DISALLOWED:\n        this._innerCommentsState =\n          INNER_COMMENTS_STATE.ALLOWED | INNER_COMMENTS_STATE.WITH_INDENT;\n        return;\n      case INNER_COMMENTS_STATE.ALLOWED:\n        this.printInnerComments(\n          (state & INNER_COMMENTS_STATE.WITH_INDENT) > 0,\n          this.tokenMap?.findMatching(\n            this._currentNode!,\n            nextTokenStr,\n            nextTokenOccurrenceCount,\n          ),\n        );\n    }\n  }\n\n  printInnerComments(indent = true, nextToken?: Token | null) {\n    const node = this._currentNode!;\n    const comments = node.innerComments;\n    if (!comments?.length) {\n      this._innerCommentsState = INNER_COMMENTS_STATE.PRINTED;\n      return;\n    }\n\n    const hasSpace = this.endsWith(charCodes.space);\n    if (indent) this.indent();\n\n    switch (\n      this._printComments(\n        COMMENT_TYPE.INNER,\n        comments,\n        node,\n        undefined,\n        undefined,\n        nextToken,\n      )\n    ) {\n      case PRINT_COMMENTS_RESULT.PRINTED_ALL:\n        this._innerCommentsState = INNER_COMMENTS_STATE.PRINTED;\n      // falls through\n      case PRINT_COMMENTS_RESULT.PRINTED_SOME:\n        if (hasSpace) this.space();\n    }\n\n    if (indent) this.dedent();\n  }\n\n  noIndentInnerCommentsHere() {\n    this._innerCommentsState &= ~INNER_COMMENTS_STATE.WITH_INDENT;\n  }\n\n  printSequence(\n    nodes: t.Node[],\n    indent?: boolean,\n    resetTokenContext?: boolean,\n    trailingCommentsLineOffset?: number,\n  ) {\n    this.printJoin(\n      nodes,\n      true,\n      indent ?? false,\n      undefined,\n      undefined,\n      resetTokenContext,\n      trailingCommentsLineOffset,\n    );\n  }\n\n  printList(\n    items: t.Node[] | null | undefined,\n    printTrailingSeparator?: boolean | null,\n    statement?: boolean,\n    indent?: boolean,\n    separator?: PrintListOptions[\"separator\"],\n    resetTokenContext?: boolean,\n  ) {\n    this.printJoin(\n      items,\n      statement,\n      indent,\n      separator ?? commaSeparator,\n      printTrailingSeparator,\n      resetTokenContext,\n    );\n  }\n\n  shouldPrintTrailingComma(listEnd: string | number): boolean | null {\n    if (!this.tokenMap) return null;\n\n    const listEndIndex = this.tokenMap.findLastIndex(\n      this._currentNode!,\n      token =>\n        this.tokenMap!.matchesOriginal(\n          token,\n          typeof listEnd === \"number\" ? String.fromCharCode(listEnd) : listEnd,\n        ),\n    );\n    if (listEndIndex <= 0) return null;\n    return this.tokenMap.matchesOriginal(this._tokens![listEndIndex - 1], \",\");\n  }\n\n  // Returns `PRINT_COMMENT_HINT.DEFER` if the comment cannot be printed in this position due to\n  // line terminators, signaling that the print comments loop can stop and\n  // resume printing comments at the next possible position. This happens when\n  // printing inner comments, since if we have an inner comment with a multiline\n  // there is at least one inner position where line terminators are allowed.\n  _shouldPrintComment(\n    comment: t.Comment,\n    nextToken?: Token | null,\n  ): PRINT_COMMENT_HINT {\n    // Some plugins (such as flow-strip-types) use this to mark comments as removed using the AST-root 'comments' property,\n    // where they can't manually mutate the AST node comment lists.\n    if (comment.ignore) return PRINT_COMMENT_HINT.SKIP;\n\n    if (this._printedComments.has(comment)) return PRINT_COMMENT_HINT.SKIP;\n\n    if (\n      this._noLineTerminator &&\n      HAS_NEWLINE_OR_BlOCK_COMMENT_END.test(comment.value)\n    ) {\n      return PRINT_COMMENT_HINT.DEFER;\n    }\n\n    if (nextToken && this.tokenMap) {\n      const commentTok = this.tokenMap.find(\n        this._currentNode!,\n        token => token.value === comment.value,\n      );\n      if (commentTok && commentTok.start > nextToken.start) {\n        return PRINT_COMMENT_HINT.DEFER;\n      }\n    }\n\n    this._printedComments.add(comment);\n\n    if (!this.format.shouldPrintComment(comment.value)) {\n      return PRINT_COMMENT_HINT.SKIP;\n    }\n\n    return PRINT_COMMENT_HINT.ALLOW;\n  }\n\n  _printComment(comment: t.Comment, skipNewLines: COMMENT_SKIP_NEWLINE) {\n    const noLineTerminator = this._noLineTerminator;\n    const isBlockComment = comment.type === \"CommentBlock\";\n\n    // Add a newline before and after a block comment, unless explicitly\n    // disallowed\n    const printNewLines =\n      isBlockComment &&\n      skipNewLines !== COMMENT_SKIP_NEWLINE.ALL &&\n      !noLineTerminator;\n\n    if (\n      printNewLines &&\n      this._buf.hasContent() &&\n      skipNewLines !== COMMENT_SKIP_NEWLINE.LEADING\n    ) {\n      this.newline(1);\n    }\n\n    switch (this.getLastChar(true)) {\n      // Avoid converting a / operator into a line comment by appending /* to it\n      case charCodes.slash:\n        this._space();\n      // falls through\n      case charCodes.leftSquareBracket:\n      case charCodes.leftCurlyBrace:\n      case charCodes.leftParenthesis:\n        break;\n\n      default:\n        this.space();\n    }\n\n    let val;\n    if (isBlockComment) {\n      val = `/*${comment.value}*/`;\n      if (this.format.indent.adjustMultilineComment) {\n        const offset = comment.loc?.start.column;\n        if (offset) {\n          const newlineRegex = new RegExp(\"\\\\n\\\\s{1,\" + offset + \"}\", \"g\");\n          val = val.replace(newlineRegex, \"\\n\");\n        }\n        if (this._flags & PRINTER_FLAGS.CONCISE) {\n          val = val.replace(/\\n(?!$)/g, `\\n`);\n        } else {\n          let indentSize = this.format.retainLines\n            ? 0\n            : this._buf.getCurrentColumn();\n\n          if (this._shouldIndent() || this.format.retainLines) {\n            indentSize += this._indent;\n          }\n\n          val = val.replace(/\\n(?!$)/g, `\\n${\" \".repeat(indentSize)}`);\n        }\n      }\n    } else if (!noLineTerminator) {\n      val = `//${comment.value}`;\n    } else {\n      // It was a single-line comment, so it's guaranteed to not\n      // contain newlines and it can be safely printed as a block\n      // comment.\n      val = `/*${comment.value}*/`;\n    }\n\n    this.source(\"start\", comment.loc);\n    this._append(val, isBlockComment);\n\n    if (!isBlockComment && !noLineTerminator) {\n      this._newline();\n    }\n\n    if (printNewLines && skipNewLines !== COMMENT_SKIP_NEWLINE.TRAILING) {\n      this.newline(1);\n    }\n  }\n\n  _printComments(\n    type: COMMENT_TYPE,\n    comments: t.Comment[],\n    node: t.Node,\n    parent?: t.Node | null,\n    lineOffset: number = 0,\n    nextToken?: Token | null,\n  ): PRINT_COMMENTS_RESULT {\n    const nodeLoc = node.loc;\n    const len = comments.length;\n    let hasLoc = !!nodeLoc;\n    const nodeStartLine = hasLoc ? nodeLoc!.start.line : 0;\n    const nodeEndLine = hasLoc ? nodeLoc!.end.line : 0;\n    let lastLine = 0;\n    let leadingCommentNewline = 0;\n\n    const { _noLineTerminator, _flags } = this;\n\n    for (let i = 0; i < len; i++) {\n      const comment = comments[i];\n\n      const shouldPrint = this._shouldPrintComment(comment, nextToken);\n      if (shouldPrint === PRINT_COMMENT_HINT.DEFER) {\n        return i === 0\n          ? PRINT_COMMENTS_RESULT.PRINTED_NONE\n          : PRINT_COMMENTS_RESULT.PRINTED_SOME;\n      }\n      if (hasLoc && comment.loc && shouldPrint === PRINT_COMMENT_HINT.ALLOW) {\n        const commentStartLine = comment.loc.start.line;\n        const commentEndLine = comment.loc.end.line;\n        if (type === COMMENT_TYPE.LEADING) {\n          let offset = 0;\n          if (i === 0) {\n            // Because currently we cannot handle blank lines before leading comments,\n            // we always wrap before and after multi-line comments.\n            if (\n              this._buf.hasContent() &&\n              (comment.type === \"CommentLine\" ||\n                commentStartLine !== commentEndLine)\n            ) {\n              offset = leadingCommentNewline = 1;\n            }\n          } else {\n            offset = commentStartLine - lastLine;\n          }\n          lastLine = commentEndLine;\n\n          if (offset > 0 && !_noLineTerminator) {\n            this.newline(offset, _flags);\n          }\n          this._printComment(comment, COMMENT_SKIP_NEWLINE.ALL);\n\n          if (i + 1 === len) {\n            const count = Math.max(\n              nodeStartLine - lastLine,\n              leadingCommentNewline,\n            );\n            if (count > 0 && !_noLineTerminator) {\n              this.newline(count, _flags);\n            }\n            lastLine = nodeStartLine;\n          }\n        } else if (type === COMMENT_TYPE.INNER) {\n          const offset =\n            commentStartLine - (i === 0 ? nodeStartLine : lastLine);\n          lastLine = commentEndLine;\n\n          if (offset > 0 && !_noLineTerminator) {\n            this.newline(offset, _flags);\n          }\n          this._printComment(comment, COMMENT_SKIP_NEWLINE.ALL);\n\n          if (i + 1 === len) {\n            const count = Math.min(1, nodeEndLine - lastLine);\n            if (count > 0 && !_noLineTerminator) {\n              this.newline(count, _flags);\n            }\n            lastLine = nodeEndLine;\n          }\n        } else {\n          const offset =\n            commentStartLine - (i === 0 ? nodeEndLine - lineOffset : lastLine);\n          lastLine = commentEndLine;\n\n          if (offset > 0 && !_noLineTerminator) {\n            this.newline(offset, _flags);\n          }\n          this._printComment(comment, COMMENT_SKIP_NEWLINE.ALL);\n        }\n      } else {\n        hasLoc = false;\n        if (shouldPrint !== PRINT_COMMENT_HINT.ALLOW) {\n          continue;\n        }\n\n        if (len === 1) {\n          const singleLine = comment.loc\n            ? comment.loc.start.line === comment.loc.end.line\n            : !HAS_NEWLINE.test(comment.value);\n\n          const shouldSkipNewline =\n            singleLine &&\n            !isStatement(node) &&\n            !isClassBody(parent) &&\n            !isTSInterfaceBody(parent) &&\n            !isTSEnumMember(node);\n\n          if (type === COMMENT_TYPE.LEADING) {\n            this._printComment(\n              comment,\n              (shouldSkipNewline && node.type !== \"ObjectExpression\") ||\n                (singleLine && isFunction(parent) && parent.body === node)\n                ? COMMENT_SKIP_NEWLINE.ALL\n                : COMMENT_SKIP_NEWLINE.DEFAULT,\n            );\n          } else if (shouldSkipNewline && type === COMMENT_TYPE.TRAILING) {\n            this._printComment(comment, COMMENT_SKIP_NEWLINE.ALL);\n          } else {\n            this._printComment(comment, COMMENT_SKIP_NEWLINE.DEFAULT);\n          }\n        } else if (\n          type === COMMENT_TYPE.INNER &&\n          !(node.type === \"ObjectExpression\" && node.properties.length > 1) &&\n          node.type !== \"ClassBody\" &&\n          node.type !== \"TSInterfaceBody\"\n        ) {\n          // class X {\n          //   /*:: a: number*/\n          //   /*:: b: ?string*/\n          // }\n\n          this._printComment(\n            comment,\n            i === 0\n              ? COMMENT_SKIP_NEWLINE.LEADING\n              : i === len - 1\n                ? COMMENT_SKIP_NEWLINE.TRAILING\n                : COMMENT_SKIP_NEWLINE.DEFAULT,\n          );\n        } else {\n          this._printComment(comment, COMMENT_SKIP_NEWLINE.DEFAULT);\n        }\n      }\n    }\n\n    if (type === COMMENT_TYPE.TRAILING && hasLoc && lastLine) {\n      this._lastCommentLine = lastLine;\n    }\n    return PRINT_COMMENTS_RESULT.PRINTED_ALL;\n  }\n}\n\nexport default Printer;\n\nfunction commaSeparator(this: Printer, occurrenceCount: number, last: boolean) {\n  this.tokenChar(charCodes.comma, occurrenceCount);\n  if (!last) this.space();\n}\n","import SourceMap from \"./source-map.ts\";\nimport Printer from \"./printer.ts\";\nimport type * as t from \"@babel/types\";\nimport type { Opts as jsescOptions } from \"jsesc\";\nimport type { Format } from \"./printer.ts\";\nimport type {\n  EncodedSourceMap,\n  DecodedSourceMap,\n  Mapping,\n} from \"@jridgewell/gen-mapping\";\n\n/**\n * Normalize generator options, setting defaults.\n *\n * - Detects code indentation.\n * - If `opts.compact = \"auto\"` and the code is over 500KB, `compact` will be set to `true`.\n */\n\nfunction normalizeOptions(\n  code: string | Record<string, string> | undefined,\n  opts: GeneratorOptions,\n  ast: t.Node,\n): Format {\n  if (opts.experimental_preserveFormat) {\n    if (typeof code !== \"string\") {\n      throw new Error(\n        \"`experimental_preserveFormat` requires the original `code` to be passed to @babel/generator as a string\",\n      );\n    }\n    if (!opts.retainLines) {\n      throw new Error(\n        \"`experimental_preserveFormat` requires `retainLines` to be set to `true`\",\n      );\n    }\n    if (opts.compact && opts.compact !== \"auto\") {\n      throw new Error(\n        \"`experimental_preserveFormat` is not compatible with the `compact` option\",\n      );\n    }\n    if (opts.minified) {\n      throw new Error(\n        \"`experimental_preserveFormat` is not compatible with the `minified` option\",\n      );\n    }\n    if (opts.jsescOption) {\n      throw new Error(\n        \"`experimental_preserveFormat` is not compatible with the `jsescOption` option\",\n      );\n    }\n    if (!Array.isArray((ast as any).tokens)) {\n      throw new Error(\n        \"`experimental_preserveFormat` requires the AST to have attached the token of the input code. Make sure to enable the `tokens: true` parser option.\",\n      );\n    }\n  }\n\n  const format: Format = {\n    auxiliaryCommentBefore: opts.auxiliaryCommentBefore,\n    auxiliaryCommentAfter: opts.auxiliaryCommentAfter,\n    // @ts-expect-error define it later\n    shouldPrintComment: opts.shouldPrintComment,\n    preserveFormat: opts.experimental_preserveFormat,\n    retainLines: opts.retainLines,\n    retainFunctionParens: opts.retainFunctionParens,\n    comments: opts.comments == null || opts.comments,\n    compact: opts.compact,\n    minified: opts.minified,\n    concise: opts.concise,\n    indent: {\n      adjustMultilineComment: true,\n      style: \"  \",\n    },\n    jsescOption: {\n      quotes: \"double\",\n      wrap: true,\n      minimal: true,\n      ...opts.jsescOption,\n    },\n    topicToken: opts.topicToken,\n  };\n\n  if (format.minified) {\n    format.compact = true;\n\n    format.shouldPrintComment =\n      format.shouldPrintComment || (() => format.comments);\n  } else {\n    format.shouldPrintComment =\n      format.shouldPrintComment ||\n      (value =>\n        format.comments ||\n        value.includes(\"@license\") ||\n        value.includes(\"@preserve\"));\n  }\n\n  if (format.compact === \"auto\") {\n    format.compact = typeof code === \"string\" && code.length > 500_000; // 500KB\n\n    if (format.compact) {\n      console.error(\n        \"[BABEL] Note: The code generator has deoptimised the styling of \" +\n          `${opts.filename} as it exceeds the max of ${\"500KB\"}.`,\n      );\n    }\n  }\n\n  if (format.compact || format.preserveFormat) {\n    format.indent.adjustMultilineComment = false;\n  }\n\n  const { auxiliaryCommentBefore, auxiliaryCommentAfter, shouldPrintComment } =\n    format;\n\n  if (auxiliaryCommentBefore && !shouldPrintComment(auxiliaryCommentBefore)) {\n    format.auxiliaryCommentBefore = undefined;\n  }\n  if (auxiliaryCommentAfter && !shouldPrintComment(auxiliaryCommentAfter)) {\n    format.auxiliaryCommentAfter = undefined;\n  }\n\n  return format;\n}\n\nexport interface GeneratorOptions {\n  /**\n   * Optional string to add as a block comment at the start of the output file.\n   */\n  auxiliaryCommentBefore?: string;\n\n  /**\n   * Optional string to add as a block comment at the end of the output file.\n   */\n  auxiliaryCommentAfter?: string;\n\n  /**\n   * Function that takes a comment (as a string) and returns true if the comment should be included in the output.\n   * By default, comments are included if `opts.comments` is `true` or if `opts.minified` is `false` and the comment\n   * contains `@preserve` or `@license`.\n   */\n  shouldPrintComment?(comment: string): boolean;\n\n  /**\n   * Preserve the input code format while printing the transformed code.\n   * This is experimental, and may have breaking changes in future\n   * patch releases. It will be removed in a future minor release,\n   * when it will graduate to stable.\n   */\n  experimental_preserveFormat?: boolean;\n\n  /**\n   * Attempt to use the same line numbers in the output code as in the source code (helps preserve stack traces).\n   * Defaults to `false`.\n   */\n  retainLines?: boolean;\n\n  /**\n   * Retain parens around function expressions (could be used to change engine parsing behavior)\n   * Defaults to `false`.\n   */\n  retainFunctionParens?: boolean;\n\n  /**\n   * Should comments be included in output? Defaults to `true`.\n   */\n  comments?: boolean;\n\n  /**\n   * Set to true to avoid adding whitespace for formatting. Defaults to the value of `opts.minified`.\n   */\n  compact?: boolean | \"auto\";\n\n  /**\n   * Should the output be minified. Defaults to `false`.\n   */\n  minified?: boolean;\n\n  /**\n   * Set to true to reduce whitespace (but not as much as opts.compact). Defaults to `false`.\n   */\n  concise?: boolean;\n\n  /**\n   * Used in warning messages\n   */\n  filename?: string;\n\n  /**\n   * Enable generating source maps. Defaults to `false`.\n   */\n  sourceMaps?: boolean;\n\n  inputSourceMap?: any;\n\n  /**\n   * A root for all relative URLs in the source map.\n   */\n  sourceRoot?: string;\n\n  /**\n   * The filename for the source code (i.e. the code in the `code` argument).\n   * This will only be used if `code` is a string.\n   */\n  sourceFileName?: string;\n\n  /**\n   * Options for outputting jsesc representation.\n   */\n  jsescOption?: jsescOptions;\n\n  /**\n   * For use with the Hack-style pipe operator.\n   * Changes what token is used for pipe bodies’ topic references.\n   */\n  topicToken?: \"%\" | \"#\" | \"@@\" | \"^^\" | \"^\";\n}\n\nexport interface GeneratorResult {\n  code: string;\n  map: EncodedSourceMap | null;\n  decodedMap: DecodedSourceMap | undefined;\n  rawMappings: Mapping[] | undefined;\n}\n\n/**\n * Turns an AST into code, maintaining sourcemaps, user preferences, and valid output.\n * @param ast - the abstract syntax tree from which to generate output code.\n * @param opts - used for specifying options for code generation.\n * @param code - the original source code, used for source maps.\n * @returns - an object containing the output code and source map.\n */\nexport function generate(\n  ast: t.Node,\n  opts: GeneratorOptions = {},\n  code?: string | Record<string, string>,\n): GeneratorResult {\n  const format = normalizeOptions(code, opts, ast);\n  const map = opts.sourceMaps ? new SourceMap(opts, code) : null;\n\n  const printer = new Printer(\n    format,\n    map,\n    (ast as any).tokens,\n    typeof code === \"string\" ? code : null,\n  );\n\n  return printer.generate(ast);\n}\n\nexport default generate;\n"],"names":["SourceMap","_map","_rawMappings","_sourceFileName","_lastGenLine","_lastSourceLine","_lastSourceColumn","_inputMap","constructor","opts","code","map","GenMapping","sourceRoot","sourceFileName","replace","undefined","inputSourceMap","TraceMap","resolvedSources","length","i","setSourceContent","sourcesContent","Object","keys","get","toEncodedMap","getDecoded","toDecodedMap","getRawMappings","allMappings","mark","generated","line","column","identifierName","identifierNamePos","filename","originalMapping","originalPositionFor","name","originalIdentifierMapping","source","maybeAddMapping","original","spaceIndents","push","repeat","Buffer","indentChar","_indentChar","_buf","_str","_appendCount","_last","_canMarkIdName","_queuedChar","_position","_sourcePosition","_flush","trimRight","decodedMap","rawMappings","result","resultMap","value","defineProperty","writable","mappings","append","str","maybeNewline","_append","appendChar","char","_appendChar","queue","queuedChar","useSourcePos","indent","String","fromCharCode","isSpace","position","sourcePos","len","hasMap","indexOf","last","removeLastSemicolon","getLastChar","checkQueue","getNewlineCount","hasContent","exactSource","loc","cb","prop","_normalizePosition","sourceWithOffset","columnOffset","pos","target","Math","max","getCurrentColumn","getCurrentLine","isMemberExpression","isOptionalMemberExpression","isYieldExpression","isStatement","_t","PRECEDENCE","Map","isTSTypeExpression","nodeId","isClassExtendsClause","node","parent","parentId","superClass","hasPostfixPart","object","callee","tag","NullableTypeAnnotation","FunctionTypeAnnotation","tokenContext","UpdateExpression","needsParenBeforeExpressionBrace","TokenContext","ObjectExpression","DoExpression","async","BinaryLike","nodeType","parentPos","operator","nodePos","left","right","UnionTypeAnnotation","OptionalIndexedAccessType","objectType","TSAsExpression","TSConditionalType","checkType","extendsType","TSUnionType","TSIntersectionType","TSTypeOperator","TSInferType","typeParameter","constraint","TSInstantiationExpression","typeArguments","TSFunctionType","BinaryExpression","LogicalExpression","SequenceExpression","property","YieldExpression","test","ClassExpression","UnaryLike","FunctionExpression","ConditionalExpression","OptionalMemberExpression","AssignmentExpression","type","Identifier","getRawIdentifier","extra","parenthesized","rightType","id","isFollowedByBracket","computed","optional","await","TaggedTemplateExpression","print","quasi","TemplateElement","Error","_printTemplate","substitutions","quasis","partRaw","raw","token","TemplateLiteral","call","expressions","isCallExpression","isLiteral","isNewExpression","isPattern","UnaryExpression","firstChar","charCodeAt","word","space","tokenChar","argument","body","ParenthesizedExpression","oldNoLineTerminatorAfterNode","enterDelimited","expression","_noLineTerminatorAfterNode","rightParens","prefix","consequent","alternate","_printExpressionArguments","printList","arguments","shouldPrintTrailingComma","NewExpression","format","minified","tokenMap","endMatches","ThisExpression","Super","_shouldPrintDecoratorsBeforeExport","start","declaration","Decorator","newline","TypeError","OptionalCallExpression","CallExpression","Import","AwaitExpression","delegate","EmptyStatement","semicolon","ExpressionStatement","AssignmentPattern","typeAnnotation","setLastChar","BindExpression","MemberExpression","MetaProperty","meta","PrivateName","V8IntrinsicIdentifier","ModuleExpression","directives","dedent","rightBrace","isFor","isIfStatement","isVoidPattern","WithStatement","printBlock","IfStatement","needsBlock","getLastStatement","printAndIndentOnComments","endsWith","statement","ForStatement","init","update","WhileStatement","ForInStatement","noIndentInnerCommentsHere","ForOfStatement","DoWhileStatement","printStatementAfterKeyword","printer","printTerminatorless","BreakStatement","label","ContinueStatement","ReturnStatement","ThrowStatement","LabeledStatement","TryStatement","block","handlers","handler","finalizer","CatchClause","param","SwitchStatement","discriminant","printSequence","cases","SwitchCase","DebuggerStatement","commaSeparatorWithNewline","occurrenceCount","VariableDeclaration","declare","kind","hasInits","declar","declarations","VariableDeclarator","definite","isIdentifier","_params","noLineTerminator","idNode","parentNode","typeParameters","nameInfo","_getFuncIdName","sourceIdentifierName","_parameters","params","returnType","_noLineTerminator","parameters","endToken","trailingComma","paramLength","_param","parameter","printJoin","decorators","_methodHead","key","generator","_predicate","noLineTerminatorAfter","predicate","_functionHead","hasPredicate","preserveFormat","_innerCommentsState","ArrowFunctionExpression","_shouldPrintArrowParamsParens","printInnerComments","firstParam","leadingComments","trailingComments","findMatching","arrowToken","retainLines","parentType","TSTypeAnnotation","TSTypeParameterInstantiation","printTrailingSeparator","end","find","t","matchesOriginal","TSTypeParameter","const","in","out","default","TSParameterProperty","accessibility","readonly","TSDeclareFunction","TSDeclareMethod","_classMethodHead","TSQualifiedName","TSCallSignatureDeclaration","tsPrintSignatureDeclarationBase","maybePrintTrailingCommaOrSemicolon","TSConstructSignatureDeclaration","TSPropertySignature","tsPrintPropertyOrMethodName","TSMethodSignature","TSIndexSignature","static","isStatic","TSAnyKeyword","TSBigIntKeyword","TSUnknownKeyword","TSNumberKeyword","TSObjectKeyword","TSBooleanKeyword","TSStringKeyword","TSSymbolKeyword","TSVoidKeyword","TSUndefinedKeyword","TSNullKeyword","TSNeverKeyword","TSIntrinsicKeyword","TSThisType","tsPrintFunctionOrConstructorType","TSConstructorType","abstract","TSTypeReference","typeName","TSTypePredicate","asserts","parameterName","TSTypeQuery","exprName","TSTypeLiteral","printBraced","members","TSArrayType","elementType","TSTupleType","elementTypes","TSOptionalType","TSRestType","TSNamedTupleMember","tsPrintUnionOrIntersectionType","sep","hasLeadingToken","startMatches","types","trueType","falseType","TSParenthesizedType","TSIndexedAccessType","indexType","TSMappedType","nameType","tokenIfPlusMinus","self","tok","TSTemplateLiteralType","TSLiteralType","literal","TSClassImplements","TSInterfaceDeclaration","extends","extendz","TSInterfaceBody","TSTypeAliasDeclaration","TSSatisfiesExpression","TSTypeAssertion","TSEnumDeclaration","isConst","TSEnumBody","TSEnumMember","initializer","TSModuleDeclaration","TSModuleBlock","TSImportType","qualifier","options","TSImportEqualsDeclaration","moduleReference","TSExternalModuleReference","TSNonNullExpression","TSExportAssignment","TSNamespaceExportDeclaration","_tsPrintClassMemberModifiers","isPrivateField","isPublicField","printModifiersList","override","modifiers","modifiersSet","Set","modifier","add","has","delete","size","isClassDeclaration","isExportDefaultSpecifier","isExportNamespaceSpecifier","isImportDefaultSpecifier","isImportNamespaceSpecifier","ImportSpecifier","importKind","imported","local","ImportDefaultSpecifier","ExportDefaultSpecifier","exported","ExportSpecifier","exportKind","ExportNamespaceSpecifier","_printAttributes","hasPreviousBrace","attributes","ExportAllDeclaration","maybePrintDecoratorsBeforeExport","ExportNamedDeclaration","specifiers","slice","hasSpecial","first","shift","hasBrace","ExportDefaultDeclaration","ImportDeclaration","isTypeKind","module","phase","hasSpecifiers","ImportAttribute","ImportNamespaceSpecifier","ImportExpression","isAssignmentPattern","lastRawIdentResult","_getRawIdentifier","_originalCode","ArgumentPlaceholder","RestElement","props","properties","ObjectMethod","ObjectProperty","shorthand","ArrayExpression","elems","elements","elem","RegExpLiteral","pattern","flags","BooleanLiteral","NullLiteral","NumericLiteral","getPossibleRaw","jsescOption","numbers","number","jsesc","StringLiteral","val","BigIntLiteral","validTopicTokenSet","TopicReference","topicToken","givenTopicTokenJSON","JSON","stringify","validTopics","Array","from","v","join","VoidPattern","isDeclareExportDeclaration","AnyTypeAnnotation","ArrayTypeAnnotation","BooleanTypeAnnotation","BooleanLiteralTypeAnnotation","NullLiteralTypeAnnotation","DeclareClass","_interfaceish","DeclareFunction","InferredPredicate","DeclaredPredicate","DeclareInterface","InterfaceDeclaration","DeclareModule","DeclareModuleExports","DeclareTypeAlias","TypeAlias","DeclareOpaqueType","OpaqueType","DeclareVariable","DeclareExportDeclaration","FlowExportDeclaration","DeclareExportAllDeclaration","EnumDeclaration","enumExplicitType","context","hasExplicitType","enumBody","member","hasUnknownMembers","EnumBooleanBody","explicitType","EnumNumberBody","EnumStringBody","EnumSymbolBody","EnumDefaultedMember","enumInitializedMember","EnumBooleanMember","EnumNumberMember","EnumStringMember","ExistsTypeAnnotation","this","rest","method","FunctionTypeParam","InterfaceExtends","mixins","implements","_variance","variance","andSeparator","InterfaceTypeAnnotation","IntersectionTypeAnnotation","MixedTypeAnnotation","EmptyTypeAnnotation","NumberTypeAnnotation","StringTypeAnnotation","ThisTypeAnnotation","TupleTypeAnnotation","TypeofTypeAnnotation","TypeAnnotation","TypeParameterInstantiation","TypeParameter","bound","supertype","impltype","ObjectTypeAnnotation","exact","callProperties","indexers","internalSlots","inexact","ObjectTypeInternalSlot","ObjectTypeCallProperty","ObjectTypeIndexer","ObjectTypeProperty","proto","ObjectTypeSpreadProperty","QualifiedTypeIdentifier","qualification","SymbolTypeAnnotation","orSeparator","TypeCastExpression","Variance","VoidTypeAnnotation","IndexedAccessType","isExportDefaultDeclaration","isExportNamedDeclaration","ClassDeclaration","inExport","superTypeArguments","ClassBody","separator","classBodyEmptySemicolonsPrinter","indexes","getIndexes","k","nextLocIndex","advanceNextLocIndex","_tokens","ClassProperty","endLine","catchUp","ClassAccessorProperty","ClassPrivateProperty","ClassMethod","ClassPrivateMethod","allowDecorators","StaticBlock","File","program","interpreter","Program","directivesLen","BlockStatement","Directive","unescapedSingleQuoteRE","unescapedDoubleQuoteRE","DirectiveLiteral","InterpreterDirective","_newline","Placeholder","expectedNode","JSXAttribute","JSXIdentifier","JSXNamespacedName","namespace","JSXMemberExpression","JSXSpreadAttribute","JSXExpressionContainer","JSXSpreadChild","JSXText","JSXElement","open","openingElement","selfClosing","child","children","closingElement","spaceSeparator","JSXOpeningElement","JSXClosingElement","JSXEmptyExpression","JSXFragment","openingFragment","closingFragment","JSXOpeningFragment","JSXClosingFragment","generatorInfosMap","index","generatorFunctions","sort","startsWith","set","VISITOR_KEYS","parens","func","isOrHasLeadingCallExpression","parentNeedsParens","isDecoratorMemberExpression","isLastChild","visitorKeys","isArray","j","traverseFast","TokenMap","_source","_nodesToTokenIndexes","_nodesOccurrencesCountCache","_tokensCache","ast","tokens","_getTokensIndexesOfNode","clear","condition","findLastIndex","count","cache","_findTokensOfNode","low","childrenIterator","next","childTok","high","cached","_findFirstTokenOfNode","_findLastTokenOfNode","mid","isExpression","isFunction","isClassBody","isTSInterfaceBody","isTSEnumMember","SCIENTIFIC_NOTATION","ZERO_DECIMAL_INTEGER","HAS_NEWLINE","HAS_NEWLINE_OR_BlOCK_COMMENT_END","commentIsNewline","c","Printer","originalCode","_indentRepeat","style","compact","concise","retainFunctionParens","_flags","auxiliaryCommentBefore","auxiliaryCommentAfter","_currentNode","_currentTypeId","_indent","_insideAux","_printAuxAfterOnNextUserNode","_printedComments","_lastCommentLine","_boundGetRawIdentifier","generate","bind","_maybeAddAuxComment","_printSemicolonBeforeNextNode","_printSemicolonBeforeNextToken","force","_catchUpTo","_queue","_space","lastCp","_maybePrintInnerComments","_catchUpToCurrentToken","lastChar","isNonDecimalLiteral","secondChar","Number","isInteger","mayNeedSpace","strFirst","_catchUp","sourcePosition","_maybeIndent","noIndent","_shouldIndent","spacesCount","spaces","resetTokenContext","trailingCommentsLineOffset","changedFlags","_compact","nodeInfo","ReferenceError","printMethod","needsParens","oldInAux","oldTokenContext","shouldPrintParens","indentParenthesized","some","_printLeadingComments","_printTrailingComments","enteredPositionlessNode","_printAuxBeforeComment","_printAuxAfterComment","comment","_printComment","rawValue","nodes","startLine","lastCommentLine","offset","lineOffset","innerComments","_printComments","comments","nextTokenStr","nextTokenOccurrenceCount","state","nextToken","hasSpace","items","commaSeparator","listEnd","listEndIndex","_shouldPrintComment","ignore","commentTok","shouldPrintComment","skipNewLines","isBlockComment","printNewLines","adjustMultilineComment","newlineRegex","RegExp","indentSize","nodeLoc","hasLoc","nodeStartLine","nodeEndLine","lastLine","leadingCommentNewline","shouldPrint","commentStartLine","commentEndLine","min","singleLine","shouldSkipNewline","normalizeOptions","experimental_preserveFormat","quotes","wrap","minimal","includes","console","error","sourceMaps"],"mappings":"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"}