Ignore:
Timestamp:
12/12/24 17:06:06 (5 weeks ago)
Author:
stefan toskovski <stefantoska84@…>
Branches:
main
Parents:
d565449
Message:

Pred finalna verzija

File:
1 edited

Legend:

Unmodified
Added
Removed
  • imaps-frontend/node_modules/@babel/generator/lib/printer.js.map

    rd565449 r0c6b92a  
    1 {"version":3,"names":["_buffer","require","n","_t","generatorFunctions","isFunction","isStatement","isClassBody","isTSInterfaceBody","isTSEnumDeclaration","SCIENTIFIC_NOTATION","ZERO_DECIMAL_INTEGER","HAS_NEWLINE","HAS_NEWLINE_OR_BlOCK_COMMENT_END","needsParens","Printer","constructor","format","map","inForStatementInit","tokenContext","_currentNode","_indent","_indentRepeat","_insideAux","_parenPushNewlineState","_noLineTerminator","_printAuxAfterOnNextUserNode","_printedComments","Set","_endsWithInteger","_endsWithWord","_lastCommentLine","_endsWithInnerRaw","_indentInnerComments","indent","style","length","_inputMap","_buf","Buffer","enterForStatementInit","val","old","generate","ast","print","_maybeAddAuxComment","get","compact","concise","dedent","semicolon","force","_appendChar","_queue","rightBrace","node","minified","removeLastSemicolon","sourceWithOffset","loc","token","rightParens","space","_space","hasContent","lastCp","getLastChar","word","str","noLineTerminatorAfter","_maybePrintInnerComments","charCodeAt","endsWith","_append","number","isNonDecimalLiteral","secondChar","Number","isInteger","test","maybeNewline","lastChar","strFirst","tokenChar","char","newline","i","retainLines","getNewlineCount","j","_newline","endsWithCharAndNewline","removeTrailingNewline","exactSource","cb","_catchUp","source","prop","columnOffset","sourceIdentifierName","identifierName","pos","_canMarkIdName","sourcePosition","_sourcePosition","identifierNamePos","_maybeAddParen","_maybeIndent","append","_maybeAddParenChar","appendChar","queue","firstChar","queueIndentation","_getIndent","_shouldIndent","parenPushNewlineState","printed","len","cha","chaPost","catchUp","line","count","getCurrentLine","_loc$prop","printTerminatorless","parent","isLabel","terminatorState","trailingCommentsLineOffset","forceParens","_node$extra","_node$leadingComments","nodeType","type","oldConcise","_compact","printMethod","undefined","ReferenceError","JSON","stringify","name","oldNode","oldInAux","parenthesized","extra","shouldPrintParens","retainFunctionParens","leadingComments","parentType","callee","exitInForStatementInit","_printLeadingComments","bind","_printTrailingComments","enteredPositionlessNode","_printAuxBeforeComment","_printAuxAfterComment","comment","auxiliaryCommentBefore","_printComment","value","auxiliaryCommentAfter","getPossibleRaw","raw","rawValue","printJoin","nodes","opts","_nodes$0$loc","startLine","start","newlineOpts","addNewlines","nextNodeStartLine","separator","statement","_printNewline","iterator","_node$trailingComment","trailingComments","_nextNode$loc","nextNode","printAndIndentOnComments","printBlock","body","lineOffset","innerComments","_printComments","comments","printInnerComments","hasSpace","printedCommentsCount","size","noIndentInnerCommentsHere","printSequence","_opts$indent","printList","items","commaSeparator","newLine","lastCommentLine","offset","_shouldPrintComment","ignore","has","add","shouldPrintComment","skipNewLines","noLineTerminator","isBlockComment","printNewLines","lastCharCode","adjustMultilineComment","_comment$loc","column","newlineRegex","RegExp","replace","indentSize","getCurrentColumn","repeat","nodeLoc","hasLoc","nodeStartLine","nodeEndLine","end","lastLine","leadingCommentNewline","shouldPrint","commentStartLine","commentEndLine","Math","max","min","singleLine","shouldSkipNewline","properties","Object","assign","prototype","Noop","_default","exports","default"],"sources":["../src/printer.ts"],"sourcesContent":["import Buffer, { type Pos } from \"./buffer.ts\";\nimport type { Loc } from \"./buffer.ts\";\nimport * as n from \"./node/index.ts\";\nimport type * as t from \"@babel/types\";\nimport {\n  isFunction,\n  isStatement,\n  isClassBody,\n  isTSInterfaceBody,\n  isTSEnumDeclaration,\n} from \"@babel/types\";\nimport type { Opts as jsescOptions } from \"jsesc\";\n\nimport type { GeneratorOptions } from \"./index.ts\";\nimport * as generatorFunctions from \"./generators/index.ts\";\nimport type SourceMap from \"./source-map.ts\";\nimport type { TraceMap } from \"@jridgewell/trace-mapping\";\n\n// We inline this package\n// eslint-disable-next-line import/no-extraneous-dependencies\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\nconst { needsParens } = n;\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\nexport type Format = {\n  shouldPrintComment: (comment: string) => boolean;\n  retainLines: boolean;\n  retainFunctionParens: boolean;\n  comments: boolean;\n  auxiliaryCommentBefore: string;\n  auxiliaryCommentAfter: string;\n  compact: boolean | \"auto\";\n  minified: boolean;\n  concise: boolean;\n  indent: {\n    adjustMultilineComment: boolean;\n    style: string;\n  };\n  /**\n   * @deprecated Removed in Babel 8, syntax type is always 'hash'\n   */\n  recordAndTupleSyntaxType?: GeneratorOptions[\"recordAndTupleSyntaxType\"];\n  jsescOption: jsescOptions;\n  /**\n   * @deprecated Removed in Babel 8, use `jsescOption` instead\n   */\n  jsonCompatibleStrings?: boolean;\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   * @deprecated Removed in Babel 8\n   */\n  decoratorsBeforeExport?: boolean;\n  /**\n   * The import attributes syntax style:\n   * - \"with\"        : `import { a } from \"b\" with { type: \"json\" };`\n   * - \"assert\"      : `import { a } from \"b\" assert { type: \"json\" };`\n   * - \"with-legacy\" : `import { a } from \"b\" with type: \"json\";`\n   */\n  importAttributesKeyword?: \"with\" | \"assert\" | \"with-legacy\";\n};\n\ninterface AddNewlinesOptions {\n  addNewlines(leading: boolean, node: t.Node): number;\n  nextNodeStartLine: number;\n}\n\ninterface PrintSequenceOptions extends Partial<AddNewlinesOptions> {\n  statement?: boolean;\n  indent?: boolean;\n  trailingCommentsLineOffset?: number;\n}\n\ninterface PrintListOptions {\n  separator?: (this: Printer) => void;\n  iterator?: (node: t.Node, index: number) => void;\n  statement?: boolean;\n  indent?: boolean;\n}\n\nexport type PrintJoinOptions = PrintListOptions & PrintSequenceOptions;\nclass Printer {\n  constructor(format: Format, map: SourceMap) {\n    this.format = format;\n\n    this._indentRepeat = format.indent.style.length;\n\n    this._inputMap = map?._inputMap;\n\n    this._buf = new Buffer(map, format.indent.style[0]);\n  }\n  declare _inputMap: TraceMap;\n\n  declare format: Format;\n\n  inForStatementInit: boolean = false;\n  enterForStatementInit(val: boolean) {\n    const old = this.inForStatementInit;\n    if (old === val) return () => {};\n    this.inForStatementInit = val;\n    return () => {\n      this.inForStatementInit = old;\n    };\n  }\n\n  tokenContext: number = 0;\n\n  declare _buf: Buffer;\n  _currentNode: t.Node = null;\n  _indent: number = 0;\n  _indentRepeat: number = 0;\n  _insideAux: boolean = false;\n  _parenPushNewlineState: { printed: boolean } | null = null;\n  _noLineTerminator: boolean = false;\n  _printAuxAfterOnNextUserNode: boolean = false;\n  _printedComments = new Set<t.Comment>();\n  _endsWithInteger = false;\n  _endsWithWord = false;\n  _lastCommentLine = 0;\n  _endsWithInnerRaw: boolean = false;\n  _indentInnerComments: boolean = true;\n\n  generate(ast: t.Node) {\n    this.print(ast);\n    this._maybeAddAuxComment();\n\n    return this._buf.get();\n  }\n\n  /**\n   * Increment indent size.\n   */\n\n  indent(): void {\n    if (this.format.compact || this.format.concise) return;\n\n    this._indent++;\n  }\n\n  /**\n   * Decrement indent size.\n   */\n\n  dedent(): void {\n    if (this.format.compact || this.format.concise) return;\n\n    this._indent--;\n  }\n\n  /**\n   * Add a semicolon to the buffer.\n   */\n\n  semicolon(force: boolean = false): void {\n    this._maybeAddAuxComment();\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.format.compact) return;\n\n    if (force) {\n      this._space();\n    } else if (this._buf.hasContent()) {\n      const lastCp = this.getLastChar();\n      if (lastCp !== charCodes.space && lastCp !== charCodes.lineFeed) {\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 = 0;\n\n    this._maybePrintInnerComments();\n\n    // prevent concatenating words and creating // comment out of division and regex\n    if (\n      this._endsWithWord ||\n      (str.charCodeAt(0) === charCodes.slash && this.endsWith(charCodes.slash))\n    ) {\n      this._space();\n    }\n\n    this._maybeAddAuxComment();\n    this._append(str, false);\n\n    this._endsWithWord = true;\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\n    // immediately after them.\n    this._endsWithInteger =\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\n  /**\n   * Writes a simple token.\n   */\n  token(str: string, maybeNewline = false): void {\n    this.tokenContext = 0;\n\n    this._maybePrintInnerComments();\n\n    const lastChar = this.getLastChar();\n    const strFirst = str.charCodeAt(0);\n    if (\n      (lastChar === charCodes.exclamationMark &&\n        // space is mandatory to avoid outputting <!--\n        // http://javascript.spec.whatwg.org/#comment-syntax\n        (str === \"--\" ||\n          // Needs spaces to avoid changing a! == 0 to a!== 0\n          strFirst === charCodes.equalsTo)) ||\n      // Need spaces for operators of the same kind to avoid: `a+++b`\n      (strFirst === charCodes.plusSign && lastChar === charCodes.plusSign) ||\n      (strFirst === charCodes.dash && lastChar === charCodes.dash) ||\n      // Needs spaces to avoid changing '34' to '34.', which would still be a valid number.\n      (strFirst === charCodes.dot && this._endsWithInteger)\n    ) {\n      this._space();\n    }\n\n    this._maybeAddAuxComment();\n    this._append(str, maybeNewline);\n    this._noLineTerminator = false;\n  }\n\n  tokenChar(char: number): void {\n    this.tokenContext = 0;\n\n    this._maybePrintInnerComments();\n\n    const lastChar = this.getLastChar();\n    if (\n      // Need spaces for operators of the same kind to avoid: `a+++b`\n      (char === charCodes.plusSign && lastChar === charCodes.plusSign) ||\n      (char === charCodes.dash && lastChar === charCodes.dash) ||\n      // Needs spaces to avoid changing '34' to '34.', which would still be a valid number.\n      (char === charCodes.dot && this._endsWithInteger)\n    ) {\n      this._space();\n    }\n\n    this._maybeAddAuxComment();\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, force?: boolean): void {\n    if (i <= 0) return;\n\n    if (!force) {\n      if (this.format.retainLines || this.format.compact) return;\n\n      if (this.format.concise) {\n        this.space();\n        return;\n      }\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    return;\n  }\n\n  endsWith(char: number): boolean {\n    return this.getLastChar() === char;\n  }\n\n  getLastChar(): number {\n    return this._buf.getLastChar();\n  }\n\n  endsWithCharAndNewline(): number {\n    return this._buf.endsWithCharAndNewline();\n  }\n\n  removeTrailingNewline(): void {\n    this._buf.removeTrailingNewline();\n  }\n\n  exactSource(loc: Loc | 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 | undefined,\n    columnOffset: number,\n  ): void {\n    if (!loc) 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    this._queue(charCodes.lineFeed);\n  }\n\n  _append(str: string, maybeNewline: boolean): void {\n    this._maybeAddParen(str);\n    this._maybeIndent(str.charCodeAt(0));\n\n    this._buf.append(str, maybeNewline);\n\n    this._endsWithWord = false;\n    this._endsWithInteger = false;\n  }\n\n  _appendChar(char: number): void {\n    this._maybeAddParenChar(char);\n    this._maybeIndent(char);\n\n    this._buf.appendChar(char);\n\n    this._endsWithWord = false;\n    this._endsWithInteger = false;\n  }\n\n  _queue(char: number) {\n    this._maybeAddParenChar(char);\n    this._maybeIndent(char);\n\n    this._buf.queue(char);\n\n    this._endsWithWord = false;\n    this._endsWithInteger = false;\n  }\n\n  _maybeIndent(firstChar: number): void {\n    // we've got a newline before us so prepend on the indentation\n    if (\n      this._indent &&\n      firstChar !== charCodes.lineFeed &&\n      this.endsWith(charCodes.lineFeed)\n    ) {\n      this._buf.queueIndentation(this._getIndent());\n    }\n  }\n\n  _shouldIndent(firstChar: number) {\n    // we've got a newline before us so prepend on the indentation\n    if (\n      this._indent &&\n      firstChar !== charCodes.lineFeed &&\n      this.endsWith(charCodes.lineFeed)\n    ) {\n      return true;\n    }\n  }\n\n  _maybeAddParenChar(char: number): void {\n    // see startTerminatorless() instance method\n    const parenPushNewlineState = this._parenPushNewlineState;\n    if (!parenPushNewlineState) return;\n\n    // This function does two things:\n    // - If needed, prints a parenthesis\n    // - If the currently printed string removes the need for the paren,\n    //   it resets the _parenPushNewlineState field.\n    //   Almost everything removes the need for a paren, except for\n    //   comments and whitespaces.\n\n    if (char === charCodes.space) {\n      // Whitespaces only, the parentheses might still be needed.\n      return;\n    }\n\n    // Check for newline or comment.\n    if (char !== charCodes.lineFeed) {\n      this._parenPushNewlineState = null;\n      return;\n    }\n\n    this.token(\"(\");\n    this.indent();\n    parenPushNewlineState.printed = true;\n  }\n\n  _maybeAddParen(str: string): void {\n    // see startTerminatorless() instance method\n    const parenPushNewlineState = this._parenPushNewlineState;\n    if (!parenPushNewlineState) return;\n\n    // This function does two things:\n    // - If needed, prints a parenthesis\n    // - If the currently printed string removes the need for the paren,\n    //   it resets the _parenPushNewlineState field.\n    //   Almost everything removes the need for a paren, except for\n    //   comments and whitespaces.\n\n    const len = str.length;\n\n    let i;\n    for (i = 0; i < len && str.charCodeAt(i) === charCodes.space; i++) continue;\n    if (i === len) {\n      // Whitespaces only, the parentheses might still be needed.\n      return;\n    }\n\n    // Check for newline or comment.\n    const cha = str.charCodeAt(i);\n    if (cha !== charCodes.lineFeed) {\n      if (\n        // This is not a comment (it doesn't start with /)\n        cha !== charCodes.slash ||\n        // This is not a comment (it's a / operator)\n        i + 1 === len\n      ) {\n        // After a normal token, the parentheses aren't needed anymore\n        this._parenPushNewlineState = null;\n        return;\n      }\n\n      const chaPost = str.charCodeAt(i + 1);\n\n      if (chaPost === charCodes.asterisk) {\n        // This is a block comment\n        return;\n      } else if (chaPost !== charCodes.slash) {\n        // This is neither a block comment, nor a line comment.\n        // After a normal token, the parentheses aren't needed anymore\n        this._parenPushNewlineState = null;\n        return;\n      }\n    }\n\n    this.token(\"(\");\n    this.indent();\n    parenPushNewlineState.printed = true;\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    if (!this.format.retainLines) return;\n\n    // catch up to this nodes newline if we're behind\n    const line = loc?.[prop]?.line;\n    if (line != null) {\n      const count = line - this._buf.getCurrentLine();\n\n      for (let i = 0; i < count; i++) {\n        this._newline();\n      }\n    }\n  }\n\n  /**\n   * Get the current indent.\n   */\n\n  _getIndent(): number {\n    return this._indentRepeat * this._indent;\n  }\n\n  printTerminatorless(node: t.Node, parent: t.Node, isLabel: boolean) {\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    if (isLabel) {\n      this._noLineTerminator = true;\n      this.print(node, parent);\n    } else {\n      const terminatorState = {\n        printed: false,\n      };\n      this._parenPushNewlineState = terminatorState;\n      this.print(node, parent);\n      /**\n       * Print an ending parentheses if a starting one has been printed.\n       */\n      if (terminatorState.printed) {\n        this.dedent();\n        this.newline();\n        this.token(\")\");\n      }\n    }\n  }\n\n  print(\n    node: t.Node | null,\n    parent?: t.Node,\n    noLineTerminatorAfter?: boolean,\n    // trailingCommentsLineOffset also used to check if called from printJoin\n    // it will be ignored if `noLineTerminatorAfter||this._noLineTerminator`\n    trailingCommentsLineOffset?: number,\n    forceParens?: boolean,\n  ) {\n    if (!node) return;\n\n    this._endsWithInnerRaw = false;\n\n    const nodeType = node.type;\n    const format = this.format;\n\n    const oldConcise = format.concise;\n    if (\n      // @ts-expect-error document _compact AST properties\n      node._compact\n    ) {\n      format.concise = true;\n    }\n\n    const printMethod =\n      this[\n        nodeType as Exclude<\n          t.Node[\"type\"],\n          // removed\n          | \"Noop\"\n          // renamed\n          | t.DeprecatedAliases[\"type\"]\n        >\n      ];\n    if (printMethod === undefined) {\n      throw new ReferenceError(\n        `unknown node of type ${JSON.stringify(\n          nodeType,\n        )} with constructor ${JSON.stringify(node.constructor.name)}`,\n      );\n    }\n\n    const oldNode = this._currentNode;\n    this._currentNode = node;\n\n    const oldInAux = this._insideAux;\n    this._insideAux = node.loc == null;\n    this._maybeAddAuxComment(this._insideAux && !oldInAux);\n\n    const parenthesized = node.extra?.parenthesized as boolean | undefined;\n    let shouldPrintParens =\n      forceParens ||\n      (parenthesized &&\n        format.retainFunctionParens &&\n        nodeType === \"FunctionExpression\") ||\n      needsParens(node, parent, this.tokenContext, this.inForStatementInit);\n\n    if (\n      !shouldPrintParens &&\n      parenthesized &&\n      node.leadingComments?.length &&\n      node.leadingComments[0].type === \"CommentBlock\"\n    ) {\n      const parentType = parent?.type;\n      switch (parentType) {\n        case \"ExpressionStatement\":\n        case \"VariableDeclarator\":\n        case \"AssignmentExpression\":\n        case \"ReturnStatement\":\n          break;\n        case \"CallExpression\":\n        case \"OptionalCallExpression\":\n        case \"NewExpression\":\n          if (parent.callee !== node) break;\n        // falls through\n        default:\n          shouldPrintParens = true;\n      }\n    }\n\n    let exitInForStatementInit;\n    if (shouldPrintParens) {\n      this.token(\"(\");\n      this._endsWithInnerRaw = false;\n      exitInForStatementInit = this.enterForStatementInit(false);\n    }\n\n    this._lastCommentLine = 0;\n\n    this._printLeadingComments(node, parent);\n\n    const loc = nodeType === \"Program\" || nodeType === \"File\" ? null : node.loc;\n\n    this.exactSource(\n      loc,\n      // We must use @ts-ignore because this error appears in VSCode but not\n      // when doing a full build?\n      // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n      // @ts-ignore https://github.com/microsoft/TypeScript/issues/58468\n      printMethod.bind(this, node, parent),\n    );\n\n    if (shouldPrintParens) {\n      this._printTrailingComments(node, parent);\n      this.token(\")\");\n      this._noLineTerminator = noLineTerminatorAfter;\n      exitInForStatementInit();\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\n    // end\n    this._currentNode = oldNode;\n    format.concise = oldConcise;\n    this._insideAux = oldInAux;\n\n    this._endsWithInnerRaw = false;\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.DecimalLiteral\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: Array<t.Node> | undefined | null,\n    parent: t.Node,\n    opts: PrintJoinOptions = {},\n  ) {\n    if (!nodes?.length) return;\n\n    let { indent } = opts;\n\n    if (indent == null && this.format.retainLines) {\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();\n\n    const newlineOpts: AddNewlinesOptions = {\n      addNewlines: opts.addNewlines,\n      nextNodeStartLine: 0,\n    };\n\n    const separator = opts.separator ? opts.separator.bind(this) : null;\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      if (opts.statement) this._printNewline(i === 0, newlineOpts);\n\n      this.print(node, parent, undefined, opts.trailingCommentsLineOffset || 0);\n\n      opts.iterator?.(node, i);\n\n      if (i < len - 1) separator?.();\n\n      if (opts.statement) {\n        if (!node.trailingComments?.length) {\n          this._lastCommentLine = 0;\n        }\n\n        if (i + 1 === len) {\n          this.newline(1);\n        } else {\n          const nextNode = nodes[i + 1];\n          newlineOpts.nextNodeStartLine = nextNode.loc?.start.line || 0;\n\n          this._printNewline(true, newlineOpts);\n        }\n      }\n    }\n\n    if (indent) this.dedent();\n  }\n\n  printAndIndentOnComments(node: t.Node, parent: t.Node) {\n    const indent = node.leadingComments && node.leadingComments.length > 0;\n    if (indent) this.indent();\n    this.print(node, parent);\n    if (indent) this.dedent();\n  }\n\n  printBlock(parent: Extract<t.Node, { body: t.Statement }>) {\n    const node = parent.body;\n\n    if (node.type !== \"EmptyStatement\") {\n      this.space();\n    }\n\n    this.print(node, parent);\n  }\n\n  _printTrailingComments(node: t.Node, parent?: t.Node, lineOffset?: number) {\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    }\n  }\n\n  _printLeadingComments(node: t.Node, parent: t.Node) {\n    const comments = node.leadingComments;\n    if (!comments?.length) return;\n    this._printComments(COMMENT_TYPE.LEADING, comments, node, parent);\n  }\n\n  _maybePrintInnerComments() {\n    if (this._endsWithInnerRaw) this.printInnerComments();\n    this._endsWithInnerRaw = true;\n    this._indentInnerComments = true;\n  }\n\n  printInnerComments() {\n    const node = this._currentNode;\n    const comments = node.innerComments;\n    if (!comments?.length) return;\n\n    const hasSpace = this.endsWith(charCodes.space);\n    const indent = this._indentInnerComments;\n    const printedCommentsCount = this._printedComments.size;\n    if (indent) this.indent();\n    this._printComments(COMMENT_TYPE.INNER, comments, node);\n    if (hasSpace && printedCommentsCount !== this._printedComments.size) {\n      this.space();\n    }\n    if (indent) this.dedent();\n  }\n\n  noIndentInnerCommentsHere() {\n    this._indentInnerComments = false;\n  }\n\n  printSequence(\n    nodes: t.Node[],\n    parent: t.Node,\n    opts: PrintSequenceOptions = {},\n  ) {\n    opts.statement = true;\n    opts.indent ??= false;\n    this.printJoin(nodes, parent, opts);\n  }\n\n  printList(items: t.Node[], parent: t.Node, opts: PrintListOptions = {}) {\n    if (opts.separator == null) {\n      opts.separator = commaSeparator;\n    }\n\n    this.printJoin(items, parent, opts);\n  }\n\n  _printNewline(newLine: boolean, opts: AddNewlinesOptions) {\n    const format = this.format;\n\n    // Fast path since 'this.newline' does nothing when not tracking lines.\n    if (format.retainLines || format.compact) return;\n\n    // Fast path for concise since 'this.newline' just inserts a space when\n    // concise formatting is in use.\n    if (format.concise) {\n      this.space();\n      return;\n    }\n\n    if (!newLine) {\n      return;\n    }\n\n    const startLine = opts.nextNodeStartLine;\n    const lastCommentLine = this._lastCommentLine;\n    if (startLine > 0 && lastCommentLine > 0) {\n      const offset = startLine - lastCommentLine;\n      if (offset >= 0) {\n        this.newline(offset || 1);\n        return;\n      }\n    }\n\n    // don't add newlines at the beginning of the file\n    if (this._buf.hasContent()) {\n      // Here is the logic of the original line wrapping according to the node layout, we are not using it now.\n      // We currently add at most one newline to each node in the list, ignoring `opts.addNewlines`.\n\n      // let lines = 0;\n      // if (!leading) lines++; // always include at least a single line after\n      // if (opts.addNewlines) lines += opts.addNewlines(leading, node) || 0;\n\n      // const needs = leading ? needsWhitespaceBefore : needsWhitespaceAfter;\n      // if (needs(node, parent)) lines++;\n\n      // this.newline(Math.min(2, lines));\n\n      this.newline(1);\n    }\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(comment: t.Comment): 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    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      !this._noLineTerminator;\n\n    if (\n      printNewLines &&\n      this._buf.hasContent() &&\n      skipNewLines !== COMMENT_SKIP_NEWLINE.LEADING\n    ) {\n      this.newline(1);\n    }\n\n    const lastCharCode = this.getLastChar();\n    if (\n      lastCharCode !== charCodes.leftSquareBracket &&\n      lastCharCode !== charCodes.leftCurlyBrace\n    ) {\n      this.space();\n    }\n\n    let val;\n    if (isBlockComment) {\n      const { _parenPushNewlineState } = this;\n      if (\n        _parenPushNewlineState?.printed === false &&\n        HAS_NEWLINE.test(comment.value)\n      ) {\n        this.token(\"(\");\n        this.indent();\n        _parenPushNewlineState.printed = true;\n      }\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.format.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(charCodes.slash) || this.format.retainLines) {\n            indentSize += this._getIndent();\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    // Avoid creating //* comments\n    if (this.endsWith(charCodes.slash)) this._space();\n\n    this.source(\"start\", comment.loc);\n    this._append(val, isBlockComment);\n\n    if (!isBlockComment && !noLineTerminator) {\n      this.newline(1, true);\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: readonly t.Comment[],\n    node: t.Node,\n    parent?: t.Node,\n    lineOffset: number = 0,\n  ) {\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 maybeNewline = this._noLineTerminator\n      ? function () {}\n      : this.newline.bind(this);\n\n    for (let i = 0; i < len; i++) {\n      const comment = comments[i];\n\n      const shouldPrint = this._shouldPrintComment(comment);\n      if (shouldPrint === PRINT_COMMENT_HINT.DEFER) {\n        hasLoc = false;\n        break;\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          maybeNewline(offset);\n          this._printComment(comment, COMMENT_SKIP_NEWLINE.ALL);\n\n          if (i + 1 === len) {\n            maybeNewline(\n              Math.max(nodeStartLine - lastLine, leadingCommentNewline),\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          maybeNewline(offset);\n          this._printComment(comment, COMMENT_SKIP_NEWLINE.ALL);\n\n          if (i + 1 === len) {\n            maybeNewline(Math.min(1, nodeEndLine - lastLine)); // TODO: Improve here when inner comments processing is stronger\n            lastLine = nodeEndLine;\n          }\n        } else {\n          const offset =\n            commentStartLine - (i === 0 ? nodeEndLine - lineOffset : lastLine);\n          lastLine = commentEndLine;\n\n          maybeNewline(offset);\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            !isTSEnumDeclaration(parent);\n\n          if (type === COMMENT_TYPE.LEADING) {\n            this._printComment(\n              comment,\n              (shouldSkipNewline && node.type !== \"ObjectExpression\") ||\n                (singleLine && isFunction(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  }\n}\n\n// Expose the node type functions and helpers on the prototype for easy usage.\nObject.assign(Printer.prototype, generatorFunctions);\n\nif (!process.env.BABEL_8_BREAKING) {\n  // @ts-ignore(Babel 7 vs Babel 8) Babel 7 has Noop print method\n  Printer.prototype.Noop = function Noop(this: Printer) {};\n}\n\ntype GeneratorFunctions = typeof generatorFunctions;\n// eslint-disable-next-line @typescript-eslint/no-empty-object-type\ninterface Printer extends GeneratorFunctions {}\nexport default Printer;\n\nfunction commaSeparator(this: Printer) {\n  this.token(\",\");\n  this.space();\n}\n"],"mappings":"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","ignoreList":[]}
     1{"version":3,"names":["_buffer","require","n","_t","_tokenMap","generatorFunctions","isExpression","isFunction","isStatement","isClassBody","isTSInterfaceBody","isTSEnumDeclaration","SCIENTIFIC_NOTATION","ZERO_DECIMAL_INTEGER","HAS_NEWLINE","HAS_NEWLINE_OR_BlOCK_COMMENT_END","commentIsNewline","c","type","test","value","needsParens","Printer","constructor","format","map","tokens","originalCode","inForStatementInit","tokenContext","_tokens","_originalCode","_currentNode","_indent","_indentRepeat","_insideAux","_noLineTerminator","_noLineTerminatorAfterNode","_printAuxAfterOnNextUserNode","_printedComments","Set","_endsWithInteger","_endsWithWord","_endsWithDiv","_lastCommentLine","_endsWithInnerRaw","_indentInnerComments","tokenMap","_boundGetRawIdentifier","_getRawIdentifier","bind","indent","style","length","_inputMap","_buf","Buffer","enterForStatementInit","enterDelimited","oldInForStatementInit","oldNoLineTerminatorAfterNode","generate","ast","preserveFormat","TokenMap","print","_maybeAddAuxComment","get","compact","concise","dedent","semicolon","force","_appendChar","node","start","end","endMatches","indexes","getIndexes","_catchUpTo","loc","_queue","rightBrace","minified","removeLastSemicolon","sourceWithOffset","token","rightParens","space","_space","hasContent","lastCp","getLastChar","word","str","noLineTerminatorAfter","_maybePrintInnerComments","charCodeAt","_append","number","isNonDecimalLiteral","secondChar","Number","isInteger","maybeNewline","occurrenceCount","lastChar","strFirst","tokenChar","char","String","fromCharCode","newline","i","retainLines","getNewlineCount","j","_newline","endsWith","endsWithCharAndNewline","removeTrailingNewline","exactSource","cb","_catchUp","source","prop","columnOffset","sourceIdentifierName","identifierName","pos","_canMarkIdName","sourcePosition","_sourcePosition","identifierNamePos","findMatching","_maybeIndent","append","appendChar","queue","firstChar","queueIndentation","_getIndent","_shouldIndent","catchUp","line","count","getCurrentLine","column","index","spacesCount","getCurrentColumn","spaces","slice","replace","repeat","printTerminatorless","trailingCommentsLineOffset","_node$extra","_node$leadingComments","_node$leadingComments2","nodeType","oldConcise","_compact","printMethod","undefined","ReferenceError","JSON","stringify","name","parent","oldInAux","parenthesized","extra","shouldPrintParens","retainFunctionParens","leadingComments","parentType","callee","indentParenthesized","some","oldInForStatementInitWasTrue","isLastChild","_node$trailingComment","trailingComments","_printLeadingComments","_printTrailingComments","enteredPositionlessNode","_printAuxBeforeComment","_printAuxAfterComment","comment","auxiliaryCommentBefore","_printComment","auxiliaryCommentAfter","getPossibleRaw","raw","rawValue","printJoin","nodes","opts","_nodes$0$loc","startLine","newlineOpts","addNewlines","nextNodeStartLine","separator","len","statement","_printNewline","iterator","printTrailingSeparator","_node$trailingComment2","_nextNode$loc","nextNode","printAndIndentOnComments","printBlock","body","lineOffset","innerComments","_printComments","comments","nextTokenStr","nextTokenOccurrenceCount","_this$tokenMap","printInnerComments","nextToken","hasSpace","printedCommentsCount","size","noIndentInnerCommentsHere","printSequence","_opts$indent","printList","items","commaSeparator","shouldPrintTrailingComma","listEnd","listEndIndex","findLastIndex","matchesOriginal","newLine","lastCommentLine","offset","_shouldPrintComment","ignore","has","commentTok","find","add","shouldPrintComment","skipNewLines","noLineTerminator","isBlockComment","printNewLines","lastCharCode","val","adjustMultilineComment","_comment$loc","newlineRegex","RegExp","indentSize","nodeLoc","hasLoc","nodeStartLine","nodeEndLine","lastLine","leadingCommentNewline","shouldPrint","commentStartLine","commentEndLine","Math","max","min","singleLine","shouldSkipNewline","properties","Object","assign","prototype","Noop","_default","exports","default","last"],"sources":["../src/printer.ts"],"sourcesContent":["import Buffer, { type Pos } from \"./buffer.ts\";\nimport type { Loc } from \"./buffer.ts\";\nimport * as n from \"./node/index.ts\";\nimport type * as t from \"@babel/types\";\nimport {\n  isExpression,\n  isFunction,\n  isStatement,\n  isClassBody,\n  isTSInterfaceBody,\n  isTSEnumDeclaration,\n} from \"@babel/types\";\nimport type { Opts as jsescOptions } from \"jsesc\";\n\nimport { TokenMap } from \"./token-map.ts\";\nimport type { GeneratorOptions } from \"./index.ts\";\nimport * as generatorFunctions from \"./generators/index.ts\";\nimport type SourceMap from \"./source-map.ts\";\nimport type { TraceMap } from \"@jridgewell/trace-mapping\";\nimport type { Token } from \"@babel/parser\";\n\n// We inline this package\n// eslint-disable-next-line import/no-extraneous-dependencies\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\nconst { needsParens } = n;\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\nexport type Format = {\n  shouldPrintComment: (comment: string) => boolean;\n  preserveFormat: boolean;\n  retainLines: boolean;\n  retainFunctionParens: boolean;\n  comments: boolean;\n  auxiliaryCommentBefore: string;\n  auxiliaryCommentAfter: string;\n  compact: boolean | \"auto\";\n  minified: boolean;\n  concise: boolean;\n  indent: {\n    adjustMultilineComment: boolean;\n    style: string;\n  };\n  /**\n   * @deprecated Removed in Babel 8, syntax type is always 'hash'\n   */\n  recordAndTupleSyntaxType?: GeneratorOptions[\"recordAndTupleSyntaxType\"];\n  jsescOption: jsescOptions;\n  /**\n   * @deprecated Removed in Babel 8, use `jsescOption` instead\n   */\n  jsonCompatibleStrings?: boolean;\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   * @deprecated Removed in Babel 8\n   */\n  decoratorsBeforeExport?: boolean;\n  /**\n   * The import attributes syntax style:\n   * - \"with\"        : `import { a } from \"b\" with { type: \"json\" };`\n   * - \"assert\"      : `import { a } from \"b\" assert { type: \"json\" };`\n   * - \"with-legacy\" : `import { a } from \"b\" with type: \"json\";`\n   */\n  importAttributesKeyword?: \"with\" | \"assert\" | \"with-legacy\";\n};\n\ninterface AddNewlinesOptions {\n  addNewlines(leading: boolean, node: t.Node): number;\n  nextNodeStartLine: number;\n}\n\ninterface PrintSequenceOptions extends Partial<AddNewlinesOptions> {\n  statement?: boolean;\n  indent?: boolean;\n  trailingCommentsLineOffset?: number;\n}\n\ninterface PrintListOptions {\n  separator?: (this: Printer, occurrenceCount: number, last: boolean) => void;\n  iterator?: (node: t.Node, index: number) => 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,\n    tokens?: Token[],\n    originalCode?: string,\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;\n\n    this._buf = new Buffer(map, format.indent.style[0]);\n  }\n  declare _inputMap: TraceMap;\n\n  declare format: Format;\n\n  inForStatementInit: boolean = false;\n  enterForStatementInit() {\n    if (this.inForStatementInit) return () => {};\n    this.inForStatementInit = true;\n    return () => {\n      this.inForStatementInit = false;\n    };\n  }\n\n  enterDelimited() {\n    const oldInForStatementInit = this.inForStatementInit;\n    const oldNoLineTerminatorAfterNode = this._noLineTerminatorAfterNode;\n    if (\n      oldInForStatementInit === false &&\n      oldNoLineTerminatorAfterNode === null\n    ) {\n      return () => {};\n    }\n    this.inForStatementInit = false;\n    this._noLineTerminatorAfterNode = null;\n    return () => {\n      this.inForStatementInit = oldInForStatementInit;\n      this._noLineTerminatorAfterNode = oldNoLineTerminatorAfterNode;\n    };\n  }\n\n  tokenContext: number = 0;\n\n  _tokens: Token[] = null;\n  _originalCode: string | null = null;\n\n  declare _buf: Buffer;\n  _currentNode: t.Node = 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  _endsWithInteger = false;\n  _endsWithWord = false;\n  _endsWithDiv = false;\n  _lastCommentLine = 0;\n  _endsWithInnerRaw: boolean = false;\n  _indentInnerComments: boolean = true;\n  tokenMap: TokenMap = null;\n\n  _boundGetRawIdentifier = this._getRawIdentifier.bind(this);\n\n  generate(ast: t.Node) {\n    if (this.format.preserveFormat) {\n      this.tokenMap = new TokenMap(ast, this._tokens, this._originalCode);\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(): void {\n    const { format } = this;\n    if (format.preserveFormat || format.compact || format.concise) {\n      return;\n    }\n\n    this._indent++;\n  }\n\n  /**\n   * Decrement indent size.\n   */\n\n  dedent(): void {\n    const { format } = this;\n    if (format.preserveFormat || format.compact || format.concise) {\n      return;\n    }\n\n    this._indent--;\n  }\n\n  /**\n   * Add a semicolon to the buffer.\n   */\n\n  semicolon(force: boolean = false): void {\n    this._maybeAddAuxComment();\n    if (force) {\n      this._appendChar(charCodes.semicolon);\n      this._noLineTerminator = false;\n      return;\n    }\n    if (this.tokenMap) {\n      const node = this._currentNode;\n      if (node.start != null && node.end != null) {\n        if (!this.tokenMap.endMatches(node, \";\")) {\n          // no semicolon\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    this._queue(charCodes.semicolon);\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    const { format } = this;\n    if (format.compact || format.preserveFormat) return;\n\n    if (force) {\n      this._space();\n    } else if (this._buf.hasContent()) {\n      const lastCp = this.getLastChar();\n      if (lastCp !== charCodes.space && lastCp !== charCodes.lineFeed) {\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 = 0;\n\n    this._maybePrintInnerComments(str);\n\n    // prevent concatenating words and creating // comment out of division and regex\n    if (\n      this._endsWithWord ||\n      (this._endsWithDiv && str.charCodeAt(0) === charCodes.slash)\n    ) {\n      this._space();\n    }\n\n    this._maybeAddAuxComment();\n    this._append(str, false);\n\n    this._endsWithWord = true;\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\n    // immediately after them.\n    this._endsWithInteger =\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\n  /**\n   * Writes a simple token.\n   *\n   * @param {string} str The string to append.\n   * @param {boolean} [maybeNewline=false] Wether `str` might potentially\n   *    contain a line terminator or not.\n   * @param {number} [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   */\n  token(str: string, maybeNewline = false, occurrenceCount = 0): void {\n    this.tokenContext = 0;\n\n    this._maybePrintInnerComments(str, occurrenceCount);\n\n    const lastChar = this.getLastChar();\n    const strFirst = str.charCodeAt(0);\n    if (\n      (lastChar === charCodes.exclamationMark &&\n        // space is mandatory to avoid outputting <!--\n        // http://javascript.spec.whatwg.org/#comment-syntax\n        (str === \"--\" ||\n          // Needs spaces to avoid changing a! == 0 to a!== 0\n          strFirst === charCodes.equalsTo)) ||\n      // Need spaces for operators of the same kind to avoid: `a+++b`\n      (strFirst === charCodes.plusSign && lastChar === charCodes.plusSign) ||\n      (strFirst === charCodes.dash && lastChar === charCodes.dash) ||\n      // Needs spaces to avoid changing '34' to '34.', which would still be a valid number.\n      (strFirst === charCodes.dot && this._endsWithInteger)\n    ) {\n      this._space();\n    }\n\n    this._maybeAddAuxComment();\n    this._append(str, maybeNewline, occurrenceCount);\n    this._noLineTerminator = false;\n  }\n\n  tokenChar(char: number): void {\n    this.tokenContext = 0;\n\n    this._maybePrintInnerComments(String.fromCharCode(char));\n\n    const lastChar = this.getLastChar();\n    if (\n      // Need spaces for operators of the same kind to avoid: `a+++b`\n      (char === charCodes.plusSign && lastChar === charCodes.plusSign) ||\n      (char === charCodes.dash && lastChar === charCodes.dash) ||\n      // Needs spaces to avoid changing '34' to '34.', which would still be a valid number.\n      (char === charCodes.dot && this._endsWithInteger)\n    ) {\n      this._space();\n    }\n\n    this._maybeAddAuxComment();\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, force?: boolean): void {\n    if (i <= 0) return;\n\n    if (!force) {\n      if (this.format.retainLines || this.format.compact) return;\n\n      if (this.format.concise) {\n        this.space();\n        return;\n      }\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    return;\n  }\n\n  endsWith(char: number): boolean {\n    return this.getLastChar() === char;\n  }\n\n  getLastChar(): number {\n    return this._buf.getLastChar();\n  }\n\n  endsWithCharAndNewline(): number {\n    return this._buf.endsWithCharAndNewline();\n  }\n\n  removeTrailingNewline(): void {\n    this._buf.removeTrailingNewline();\n  }\n\n  exactSource(loc: Loc | 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 | 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    this._queue(charCodes.lineFeed);\n  }\n\n  _append(\n    str: string,\n    maybeNewline: boolean,\n    occurrenceCount: number = 0,\n  ): void {\n    if (this.tokenMap) {\n      const token = this.tokenMap.findMatching(\n        this._currentNode,\n        str,\n        occurrenceCount,\n      );\n      if (token) this._catchUpTo(token.loc.start);\n    }\n\n    this._maybeIndent(str.charCodeAt(0));\n\n    this._buf.append(str, maybeNewline);\n\n    // callers are expected to then set these to `true` when needed\n    this._endsWithWord = false;\n    this._endsWithInteger = false;\n    this._endsWithDiv = false;\n  }\n\n  _appendChar(char: number): void {\n    if (this.tokenMap) {\n      const token = this.tokenMap.findMatching(\n        this._currentNode,\n        String.fromCharCode(char),\n      );\n      if (token) this._catchUpTo(token.loc.start);\n    }\n\n    this._maybeIndent(char);\n\n    this._buf.appendChar(char);\n\n    // callers are expected to then set these to `true` when needed\n    this._endsWithWord = false;\n    this._endsWithInteger = false;\n    this._endsWithDiv = false;\n  }\n\n  _queue(char: number) {\n    this._maybeIndent(char);\n\n    this._buf.queue(char);\n\n    this._endsWithWord = false;\n    this._endsWithInteger = false;\n  }\n\n  _maybeIndent(firstChar: number): void {\n    // we've got a newline before us so prepend on the indentation\n    if (\n      this._indent &&\n      firstChar !== charCodes.lineFeed &&\n      this.endsWith(charCodes.lineFeed)\n    ) {\n      this._buf.queueIndentation(this._getIndent());\n    }\n  }\n\n  _shouldIndent(firstChar: number) {\n    // we've got a newline before us so prepend on the indentation\n    if (\n      this._indent &&\n      firstChar !== charCodes.lineFeed &&\n      this.endsWith(charCodes.lineFeed)\n    ) {\n      return true;\n    }\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 { format } = this;\n    if (!format.preserveFormat) {\n      if (format.retainLines && 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    }\n  }\n\n  /**\n   * Get the current indent.\n   */\n\n  _getIndent(): number {\n    return this._indentRepeat * this._indent;\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,\n    noLineTerminatorAfter?: boolean,\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._endsWithInnerRaw = false;\n\n    const nodeType = node.type;\n    const format = this.format;\n\n    const oldConcise = format.concise;\n    if (\n      // @ts-expect-error document _compact AST properties\n      node._compact\n    ) {\n      format.concise = true;\n    }\n\n    const printMethod =\n      this[\n        nodeType as Exclude<\n          t.Node[\"type\"],\n          // removed\n          | \"Noop\"\n          // renamed\n          | t.DeprecatedAliases[\"type\"]\n        >\n      ];\n    if (printMethod === undefined) {\n      throw new ReferenceError(\n        `unknown node of type ${JSON.stringify(\n          nodeType,\n        )} with constructor ${JSON.stringify(node.constructor.name)}`,\n      );\n    }\n\n    const parent = this._currentNode;\n    this._currentNode = node;\n\n    const oldInAux = this._insideAux;\n    this._insideAux = node.loc == null;\n    this._maybeAddAuxComment(this._insideAux && !oldInAux);\n\n    const parenthesized = node.extra?.parenthesized as boolean | undefined;\n    let shouldPrintParens =\n      (parenthesized && format.preserveFormat) ||\n      (parenthesized &&\n        format.retainFunctionParens &&\n        nodeType === \"FunctionExpression\") ||\n      needsParens(\n        node,\n        parent,\n        this.tokenContext,\n        this.inForStatementInit,\n        format.preserveFormat ? this._boundGetRawIdentifier : undefined,\n      );\n\n    if (\n      !shouldPrintParens &&\n      parenthesized &&\n      node.leadingComments?.length &&\n      node.leadingComments[0].type === \"CommentBlock\"\n    ) {\n      const parentType = parent?.type;\n      switch (parentType) {\n        case \"ExpressionStatement\":\n        case \"VariableDeclarator\":\n        case \"AssignmentExpression\":\n        case \"ReturnStatement\":\n          break;\n        case \"CallExpression\":\n        case \"OptionalCallExpression\":\n        case \"NewExpression\":\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        (this.format.retainLines &&\n          node.loc &&\n          node.loc.start.line > this._buf.getCurrentLine()))\n    ) {\n      shouldPrintParens = true;\n      indentParenthesized = true;\n    }\n\n    let oldNoLineTerminatorAfterNode;\n    let oldInForStatementInitWasTrue;\n    if (!shouldPrintParens) {\n      noLineTerminatorAfter ||=\n        parent &&\n        this._noLineTerminatorAfterNode === parent &&\n        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._endsWithInnerRaw = false;\n      if (this.inForStatementInit) {\n        oldInForStatementInitWasTrue = true;\n        this.inForStatementInit = false;\n      }\n      oldNoLineTerminatorAfterNode = this._noLineTerminatorAfterNode;\n      this._noLineTerminatorAfterNode = null;\n    }\n\n    this._lastCommentLine = 0;\n\n    this._printLeadingComments(node, parent);\n\n    const loc = nodeType === \"Program\" || nodeType === \"File\" ? null : node.loc;\n\n    this.exactSource(\n      loc,\n      // @ts-expect-error Expected 1 arguments, but got 3.\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      if (oldInForStatementInitWasTrue) this.inForStatementInit = true;\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\n    // end\n    this._currentNode = parent;\n    format.concise = oldConcise;\n    this._insideAux = oldInAux;\n\n    if (oldNoLineTerminatorAfterNode !== undefined) {\n      this._noLineTerminatorAfterNode = oldNoLineTerminatorAfterNode;\n    }\n\n    this._endsWithInnerRaw = false;\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: Array<t.Node> | undefined | null,\n    opts: PrintJoinOptions = {},\n  ) {\n    if (!nodes?.length) return;\n\n    let { indent } = opts;\n\n    if (indent == null && this.format.retainLines) {\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();\n\n    const newlineOpts: AddNewlinesOptions = {\n      addNewlines: opts.addNewlines,\n      nextNodeStartLine: 0,\n    };\n\n    const separator = opts.separator ? opts.separator.bind(this) : null;\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      if (opts.statement) this._printNewline(i === 0, newlineOpts);\n\n      this.print(node, undefined, opts.trailingCommentsLineOffset || 0);\n\n      opts.iterator?.(node, i);\n\n      if (separator != null) {\n        if (i < len - 1) separator(i, false);\n        else if (opts.printTrailingSeparator) separator(i, true);\n      }\n\n      if (opts.statement) {\n        if (!node.trailingComments?.length) {\n          this._lastCommentLine = 0;\n        }\n\n        if (i + 1 === len) {\n          this.newline(1);\n        } else {\n          const nextNode = nodes[i + 1];\n          newlineOpts.nextNodeStartLine = nextNode.loc?.start.line || 0;\n\n          this._printNewline(true, newlineOpts);\n        }\n      }\n    }\n\n    if (indent) this.dedent();\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(parent: Extract<t.Node, { body: t.Statement }>) {\n    const node = parent.body;\n\n    if (node.type !== \"EmptyStatement\") {\n      this.space();\n    }\n\n    this.print(node);\n  }\n\n  _printTrailingComments(node: t.Node, parent?: t.Node, lineOffset?: number) {\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    }\n  }\n\n  _printLeadingComments(node: t.Node, parent: t.Node) {\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,\n    nextTokenOccurrenceCount?: number,\n  ) {\n    if (this._endsWithInnerRaw) {\n      this.printInnerComments(\n        this.tokenMap?.findMatching(\n          this._currentNode,\n          nextTokenStr,\n          nextTokenOccurrenceCount,\n        ),\n      );\n    }\n    this._endsWithInnerRaw = true;\n    this._indentInnerComments = true;\n  }\n\n  printInnerComments(nextToken?: Token) {\n    const node = this._currentNode;\n    const comments = node.innerComments;\n    if (!comments?.length) return;\n\n    const hasSpace = this.endsWith(charCodes.space);\n    const indent = this._indentInnerComments;\n    const printedCommentsCount = this._printedComments.size;\n    if (indent) this.indent();\n    this._printComments(\n      COMMENT_TYPE.INNER,\n      comments,\n      node,\n      undefined,\n      undefined,\n      nextToken,\n    );\n    if (hasSpace && printedCommentsCount !== this._printedComments.size) {\n      this.space();\n    }\n    if (indent) this.dedent();\n  }\n\n  noIndentInnerCommentsHere() {\n    this._indentInnerComments = false;\n  }\n\n  printSequence(nodes: t.Node[], opts: PrintSequenceOptions = {}) {\n    opts.statement = true;\n    opts.indent ??= false;\n    this.printJoin(nodes, opts);\n  }\n\n  printList(items: t.Node[], opts: PrintListOptions = {}) {\n    if (opts.separator == null) {\n      opts.separator = commaSeparator;\n    }\n\n    this.printJoin(items, opts);\n  }\n\n  shouldPrintTrailingComma(listEnd: string): boolean | null {\n    if (!this.tokenMap) return null;\n\n    const listEndIndex = this.tokenMap.findLastIndex(this._currentNode, token =>\n      this.tokenMap.matchesOriginal(token, listEnd),\n    );\n    if (listEndIndex <= 0) return null;\n    return this.tokenMap.matchesOriginal(this._tokens[listEndIndex - 1], \",\");\n  }\n\n  _printNewline(newLine: boolean, opts: AddNewlinesOptions) {\n    const format = this.format;\n\n    // Fast path since 'this.newline' does nothing when not tracking lines.\n    if (format.retainLines || format.compact) return;\n\n    // Fast path for concise since 'this.newline' just inserts a space when\n    // concise formatting is in use.\n    if (format.concise) {\n      this.space();\n      return;\n    }\n\n    if (!newLine) {\n      return;\n    }\n\n    const startLine = opts.nextNodeStartLine;\n    const lastCommentLine = this._lastCommentLine;\n    if (startLine > 0 && lastCommentLine > 0) {\n      const offset = startLine - lastCommentLine;\n      if (offset >= 0) {\n        this.newline(offset || 1);\n        return;\n      }\n    }\n\n    // don't add newlines at the beginning of the file\n    if (this._buf.hasContent()) {\n      // Here is the logic of the original line wrapping according to the node layout, we are not using it now.\n      // We currently add at most one newline to each node in the list, ignoring `opts.addNewlines`.\n\n      // let lines = 0;\n      // if (!leading) lines++; // always include at least a single line after\n      // if (opts.addNewlines) lines += opts.addNewlines(leading, node) || 0;\n\n      // const needs = leading ? needsWhitespaceBefore : needsWhitespaceAfter;\n      // if (needs(node, parent)) lines++;\n\n      // this.newline(Math.min(2, lines));\n\n      this.newline(1);\n    }\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,\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      !this._noLineTerminator;\n\n    if (\n      printNewLines &&\n      this._buf.hasContent() &&\n      skipNewLines !== COMMENT_SKIP_NEWLINE.LEADING\n    ) {\n      this.newline(1);\n    }\n\n    const lastCharCode = this.getLastChar();\n    if (\n      lastCharCode !== charCodes.leftSquareBracket &&\n      lastCharCode !== charCodes.leftCurlyBrace &&\n      lastCharCode !== charCodes.leftParenthesis\n    ) {\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.format.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(charCodes.slash) || this.format.retainLines) {\n            indentSize += this._getIndent();\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    // Avoid converting a / operator into a line comment by appending /* to it\n    if (this._endsWithDiv) this._space();\n\n    this.source(\"start\", comment.loc);\n    this._append(val, isBlockComment);\n\n    if (!isBlockComment && !noLineTerminator) {\n      this.newline(1, true);\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: readonly t.Comment[],\n    node: t.Node,\n    parent?: t.Node,\n    lineOffset: number = 0,\n    nextToken?: Token,\n  ) {\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 maybeNewline = this._noLineTerminator\n      ? function () {}\n      : this.newline.bind(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        hasLoc = false;\n        break;\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          maybeNewline(offset);\n          this._printComment(comment, COMMENT_SKIP_NEWLINE.ALL);\n\n          if (i + 1 === len) {\n            maybeNewline(\n              Math.max(nodeStartLine - lastLine, leadingCommentNewline),\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          maybeNewline(offset);\n          this._printComment(comment, COMMENT_SKIP_NEWLINE.ALL);\n\n          if (i + 1 === len) {\n            maybeNewline(Math.min(1, nodeEndLine - lastLine)); // TODO: Improve here when inner comments processing is stronger\n            lastLine = nodeEndLine;\n          }\n        } else {\n          const offset =\n            commentStartLine - (i === 0 ? nodeEndLine - lineOffset : lastLine);\n          lastLine = commentEndLine;\n\n          maybeNewline(offset);\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            !isTSEnumDeclaration(parent);\n\n          if (type === COMMENT_TYPE.LEADING) {\n            this._printComment(\n              comment,\n              (shouldSkipNewline && node.type !== \"ObjectExpression\") ||\n                (singleLine && isFunction(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  }\n}\n\n// Expose the node type functions and helpers on the prototype for easy usage.\nObject.assign(Printer.prototype, generatorFunctions);\n\nif (!process.env.BABEL_8_BREAKING) {\n  // @ts-ignore(Babel 7 vs Babel 8) Babel 7 has Noop print method\n  Printer.prototype.Noop = function Noop(this: Printer) {};\n}\n\ntype GeneratorFunctions = typeof generatorFunctions;\n// eslint-disable-next-line @typescript-eslint/no-empty-object-type\ninterface Printer extends GeneratorFunctions {}\nexport default Printer;\n\nfunction commaSeparator(this: Printer, occurrenceCount: number, last: boolean) {\n  this.token(\",\", false, occurrenceCount);\n  if (!last) this.space();\n}\n"],"mappings":"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","ignoreList":[]}
Note: See TracChangeset for help on using the changeset viewer.