2025-04-02 06:50:39 -04:00

370 lines
7.7 KiB
JavaScript

'use strict';
Object.defineProperty(exports, '__esModule', {
value: true,
});
exports.LogicalExpression =
exports.BinaryExpression =
exports.AssignmentExpression =
AssignmentExpression;
exports.AssignmentPattern = AssignmentPattern;
exports.AwaitExpression = void 0;
exports.BindExpression = BindExpression;
exports.CallExpression = CallExpression;
exports.ConditionalExpression = ConditionalExpression;
exports.Decorator = Decorator;
exports.DoExpression = DoExpression;
exports.EmptyStatement = EmptyStatement;
exports.ExpressionStatement = ExpressionStatement;
exports.Import = Import;
exports.MemberExpression = MemberExpression;
exports.MetaProperty = MetaProperty;
exports.ModuleExpression = ModuleExpression;
exports.NewExpression = NewExpression;
exports.OptionalCallExpression = OptionalCallExpression;
exports.OptionalMemberExpression = OptionalMemberExpression;
exports.ParenthesizedExpression = ParenthesizedExpression;
exports.PrivateName = PrivateName;
exports.SequenceExpression = SequenceExpression;
exports.Super = Super;
exports.ThisExpression = ThisExpression;
exports.UnaryExpression = UnaryExpression;
exports.UpdateExpression = UpdateExpression;
exports.V8IntrinsicIdentifier = V8IntrinsicIdentifier;
exports.YieldExpression = void 0;
var _t = require('@babel/types');
var n = require('../node');
const { isCallExpression, isLiteral, isMemberExpression, isNewExpression } = _t;
function UnaryExpression(node) {
if (
node.operator === 'void' ||
node.operator === 'delete' ||
node.operator === 'typeof' ||
node.operator === 'throw'
) {
this.word(node.operator);
this.space();
} else {
this.token(node.operator);
}
this.print(node.argument, node);
}
function DoExpression(node) {
if (node.async) {
this.word('async');
this.space();
}
this.word('do');
this.space();
this.print(node.body, node);
}
function ParenthesizedExpression(node) {
this.token('(');
this.print(node.expression, node);
this.token(')');
}
function UpdateExpression(node) {
if (node.prefix) {
this.token(node.operator);
this.print(node.argument, node);
} else {
this.startTerminatorless(true);
this.print(node.argument, node);
this.endTerminatorless();
this.token(node.operator);
}
}
function ConditionalExpression(node) {
this.print(node.test, node);
this.space();
this.token('?');
this.space();
this.print(node.consequent, node);
this.space();
this.token(':');
this.space();
this.print(node.alternate, node);
}
function NewExpression(node, parent) {
this.word('new');
this.space();
this.print(node.callee, node);
if (
this.format.minified &&
node.arguments.length === 0 &&
!node.optional &&
!isCallExpression(parent, {
callee: node,
}) &&
!isMemberExpression(parent) &&
!isNewExpression(parent)
) {
return;
}
this.print(node.typeArguments, node);
this.print(node.typeParameters, node);
if (node.optional) {
this.token('?.');
}
this.token('(');
this.printList(node.arguments, node);
this.token(')');
}
function SequenceExpression(node) {
this.printList(node.expressions, node);
}
function ThisExpression() {
this.word('this');
}
function Super() {
this.word('super');
}
function isDecoratorMemberExpression(node) {
switch (node.type) {
case 'Identifier':
return true;
case 'MemberExpression':
return (
!node.computed &&
node.property.type === 'Identifier' &&
isDecoratorMemberExpression(node.object)
);
default:
return false;
}
}
function shouldParenthesizeDecoratorExpression(node) {
if (node.type === 'CallExpression') {
node = node.callee;
}
if (node.type === 'ParenthesizedExpression') {
return false;
}
return !isDecoratorMemberExpression(node);
}
function Decorator(node) {
this.token('@');
const { expression } = node;
if (shouldParenthesizeDecoratorExpression(expression)) {
this.token('(');
this.print(expression, node);
this.token(')');
} else {
this.print(expression, node);
}
this.newline();
}
function OptionalMemberExpression(node) {
this.print(node.object, node);
if (!node.computed && isMemberExpression(node.property)) {
throw new TypeError('Got a MemberExpression for MemberExpression property');
}
let computed = node.computed;
if (isLiteral(node.property) && typeof node.property.value === 'number') {
computed = true;
}
if (node.optional) {
this.token('?.');
}
if (computed) {
this.token('[');
this.print(node.property, node);
this.token(']');
} else {
if (!node.optional) {
this.token('.');
}
this.print(node.property, node);
}
}
function OptionalCallExpression(node) {
this.print(node.callee, node);
this.print(node.typeArguments, node);
this.print(node.typeParameters, node);
if (node.optional) {
this.token('?.');
}
this.token('(');
this.printList(node.arguments, node);
this.token(')');
}
function CallExpression(node) {
this.print(node.callee, node);
this.print(node.typeArguments, node);
this.print(node.typeParameters, node);
this.token('(');
this.printList(node.arguments, node);
this.token(')');
}
function Import() {
this.word('import');
}
function buildYieldAwait(keyword) {
return function (node) {
this.word(keyword);
if (node.delegate) {
this.token('*');
}
if (node.argument) {
this.space();
const terminatorState = this.startTerminatorless();
this.print(node.argument, node);
this.endTerminatorless(terminatorState);
}
};
}
const YieldExpression = buildYieldAwait('yield');
exports.YieldExpression = YieldExpression;
const AwaitExpression = buildYieldAwait('await');
exports.AwaitExpression = AwaitExpression;
function EmptyStatement() {
this.semicolon(true);
}
function ExpressionStatement(node) {
this.print(node.expression, node);
this.semicolon();
}
function AssignmentPattern(node) {
this.print(node.left, node);
if (node.left.optional) this.token('?');
this.print(node.left.typeAnnotation, node);
this.space();
this.token('=');
this.space();
this.print(node.right, node);
}
function AssignmentExpression(node, parent) {
const parens =
this.inForStatementInitCounter &&
node.operator === 'in' &&
!n.needsParens(node, parent);
if (parens) {
this.token('(');
}
this.print(node.left, node);
this.space();
if (node.operator === 'in' || node.operator === 'instanceof') {
this.word(node.operator);
} else {
this.token(node.operator);
}
this.space();
this.print(node.right, node);
if (parens) {
this.token(')');
}
}
function BindExpression(node) {
this.print(node.object, node);
this.token('::');
this.print(node.callee, node);
}
function MemberExpression(node) {
this.print(node.object, node);
if (!node.computed && isMemberExpression(node.property)) {
throw new TypeError('Got a MemberExpression for MemberExpression property');
}
let computed = node.computed;
if (isLiteral(node.property) && typeof node.property.value === 'number') {
computed = true;
}
if (computed) {
this.token('[');
this.print(node.property, node);
this.token(']');
} else {
this.token('.');
this.print(node.property, node);
}
}
function MetaProperty(node) {
this.print(node.meta, node);
this.token('.');
this.print(node.property, node);
}
function PrivateName(node) {
this.token('#');
this.print(node.id, node);
}
function V8IntrinsicIdentifier(node) {
this.token('%');
this.word(node.name);
}
function ModuleExpression(node) {
this.word('module');
this.space();
this.token('{');
if (node.body.body.length === 0) {
this.token('}');
} else {
this.newline();
this.printSequence(node.body.body, node, {
indent: true,
});
this.rightBrace();
}
}