You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
96 lines
2.2 KiB
96 lines
2.2 KiB
"use strict"; |
|
|
|
Object.defineProperty(exports, "__esModule", { |
|
value: true |
|
}); |
|
exports.BlockStatement = BlockStatement; |
|
exports.Directive = Directive; |
|
exports.DirectiveLiteral = DirectiveLiteral; |
|
exports.File = File; |
|
exports.InterpreterDirective = InterpreterDirective; |
|
exports.Placeholder = Placeholder; |
|
exports.Program = Program; |
|
|
|
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) { |
|
var _node$directives; |
|
|
|
this.token("{"); |
|
this.printInnerComments(node); |
|
const hasDirectives = (_node$directives = node.directives) == null ? void 0 : _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(10)) this.newline(); |
|
this.rightBrace(); |
|
} else { |
|
this.source("end", node.loc); |
|
this.token("}"); |
|
} |
|
} |
|
|
|
function Directive(node) { |
|
this.print(node.value, node); |
|
this.semicolon(); |
|
} |
|
|
|
const unescapedSingleQuoteRE = /(?:^|[^\\])(?:\\\\)*'/; |
|
const unescapedDoubleQuoteRE = /(?:^|[^\\])(?:\\\\)*"/; |
|
|
|
function DirectiveLiteral(node) { |
|
const raw = this.getPossibleRaw(node); |
|
|
|
if (!this.format.minified && raw !== undefined) { |
|
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(); |
|
} |
|
} |