| "use strict"; |
| |
| Object.defineProperty(exports, "__esModule", { |
| value: true |
| }); |
| exports.File = File; |
| exports.Program = Program; |
| exports.BlockStatement = BlockStatement; |
| exports.Noop = Noop; |
| exports.Directive = Directive; |
| exports.DirectiveLiteral = DirectiveLiteral; |
| exports.InterpreterDirective = InterpreterDirective; |
| exports.Placeholder = Placeholder; |
| |
| function File(node) { |
| if (node.program) { |
| this.print(node.program.interpreter, node); |
| } |
| |
| this.print(node.program, node); |
| } |
| |
| function Program(node) { |
| this.printInnerComments(node, false); |
| this.printSequence(node.directives, node); |
| if (node.directives && node.directives.length) this.newline(); |
| this.printSequence(node.body, node); |
| } |
| |
| function BlockStatement(node) { |
| this.token("{"); |
| this.printInnerComments(node); |
| const hasDirectives = node.directives && node.directives.length; |
| |
| if (node.body.length || hasDirectives) { |
| this.newline(); |
| this.printSequence(node.directives, node, { |
| indent: true |
| }); |
| if (hasDirectives) this.newline(); |
| this.printSequence(node.body, node, { |
| indent: true |
| }); |
| this.removeTrailingNewline(); |
| this.source("end", node.loc); |
| if (!this.endsWith("\n")) this.newline(); |
| this.rightBrace(); |
| } else { |
| this.source("end", node.loc); |
| this.token("}"); |
| } |
| } |
| |
| function Noop() {} |
| |
| function Directive(node) { |
| this.print(node.value, node); |
| this.semicolon(); |
| } |
| |
| const unescapedSingleQuoteRE = /(?:^|[^\\])(?:\\\\)*'/; |
| const unescapedDoubleQuoteRE = /(?:^|[^\\])(?:\\\\)*"/; |
| |
| function DirectiveLiteral(node) { |
| const raw = this.getPossibleRaw(node); |
| |
| if (raw != null) { |
| this.token(raw); |
| return; |
| } |
| |
| const { |
| value |
| } = node; |
| |
| if (!unescapedDoubleQuoteRE.test(value)) { |
| this.token(`"${value}"`); |
| } else if (!unescapedSingleQuoteRE.test(value)) { |
| this.token(`'${value}'`); |
| } else { |
| throw new Error("Malformed AST: it is not possible to print a directive containing" + " both unescaped single and double quotes."); |
| } |
| } |
| |
| function InterpreterDirective(node) { |
| this.token(`#!${node.value}\n`); |
| } |
| |
| function Placeholder(node) { |
| this.token("%%"); |
| this.print(node.name); |
| this.token("%%"); |
| |
| if (node.expectedNode === "Statement") { |
| this.semicolon(); |
| } |
| } |