123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342 |
- "use strict";
- Object.defineProperty(exports, "__esModule", {
- value: true
- });
- exports.ArrowFunctionExpression = ArrowFunctionExpression;
- exports.AssignmentExpression = AssignmentExpression;
- exports.Binary = Binary;
- exports.BinaryExpression = BinaryExpression;
- exports.ClassExpression = ClassExpression;
- exports.ConditionalExpression = ConditionalExpression;
- exports.DoExpression = DoExpression;
- exports.FunctionExpression = FunctionExpression;
- exports.FunctionTypeAnnotation = FunctionTypeAnnotation;
- exports.Identifier = Identifier;
- exports.LogicalExpression = LogicalExpression;
- exports.NullableTypeAnnotation = NullableTypeAnnotation;
- exports.ObjectExpression = ObjectExpression;
- exports.OptionalIndexedAccessType = OptionalIndexedAccessType;
- exports.OptionalCallExpression = exports.OptionalMemberExpression = OptionalMemberExpression;
- exports.SequenceExpression = SequenceExpression;
- exports.TSAsExpression = TSAsExpression;
- exports.TSInferType = TSInferType;
- exports.TSTypeAssertion = TSTypeAssertion;
- exports.TSIntersectionType = exports.TSUnionType = TSUnionType;
- exports.UnaryLike = UnaryLike;
- exports.IntersectionTypeAnnotation = exports.UnionTypeAnnotation = UnionTypeAnnotation;
- exports.UpdateExpression = UpdateExpression;
- exports.AwaitExpression = exports.YieldExpression = YieldExpression;
- var _t = require("@babel/types");
- const {
- isArrayTypeAnnotation,
- isArrowFunctionExpression,
- isAssignmentExpression,
- isAwaitExpression,
- isBinary,
- isBinaryExpression,
- isCallExpression,
- isClassDeclaration,
- isClassExpression,
- isConditional,
- isConditionalExpression,
- isExportDeclaration,
- isExportDefaultDeclaration,
- isExpressionStatement,
- isFor,
- isForInStatement,
- isForOfStatement,
- isForStatement,
- isIfStatement,
- isIndexedAccessType,
- isIntersectionTypeAnnotation,
- isLogicalExpression,
- isMemberExpression,
- isNewExpression,
- isNullableTypeAnnotation,
- isObjectPattern,
- isOptionalCallExpression,
- isOptionalMemberExpression,
- isReturnStatement,
- isSequenceExpression,
- isSwitchStatement,
- isTSArrayType,
- isTSAsExpression,
- isTSIntersectionType,
- isTSNonNullExpression,
- isTSOptionalType,
- isTSRestType,
- isTSTypeAssertion,
- isTSUnionType,
- isTaggedTemplateExpression,
- isThrowStatement,
- isTypeAnnotation,
- isUnaryLike,
- isUnionTypeAnnotation,
- isVariableDeclarator,
- isWhileStatement,
- isYieldExpression
- } = _t;
- const PRECEDENCE = {
- "||": 0,
- "??": 0,
- "&&": 1,
- "|": 2,
- "^": 3,
- "&": 4,
- "==": 5,
- "===": 5,
- "!=": 5,
- "!==": 5,
- "<": 6,
- ">": 6,
- "<=": 6,
- ">=": 6,
- in: 6,
- instanceof: 6,
- ">>": 7,
- "<<": 7,
- ">>>": 7,
- "+": 8,
- "-": 8,
- "*": 9,
- "/": 9,
- "%": 9,
- "**": 10
- };
- const isClassExtendsClause = (node, parent) => (isClassDeclaration(parent) || isClassExpression(parent)) && parent.superClass === node;
- const hasPostfixPart = (node, parent) => (isMemberExpression(parent) || isOptionalMemberExpression(parent)) && parent.object === node || (isCallExpression(parent) || isOptionalCallExpression(parent) || isNewExpression(parent)) && parent.callee === node || isTaggedTemplateExpression(parent) && parent.tag === node || isTSNonNullExpression(parent);
- function NullableTypeAnnotation(node, parent) {
- return isArrayTypeAnnotation(parent);
- }
- function FunctionTypeAnnotation(node, parent, printStack) {
- return isUnionTypeAnnotation(parent) || isIntersectionTypeAnnotation(parent) || isArrayTypeAnnotation(parent) || isTypeAnnotation(parent) && isArrowFunctionExpression(printStack[printStack.length - 3]);
- }
- function UpdateExpression(node, parent) {
- return hasPostfixPart(node, parent) || isClassExtendsClause(node, parent);
- }
- function ObjectExpression(node, parent, printStack) {
- return isFirstInContext(printStack, {
- expressionStatement: true,
- arrowBody: true
- });
- }
- function DoExpression(node, parent, printStack) {
- return !node.async && isFirstInContext(printStack, {
- expressionStatement: true
- });
- }
- function Binary(node, parent) {
- if (node.operator === "**" && isBinaryExpression(parent, {
- operator: "**"
- })) {
- return parent.left === node;
- }
- if (isClassExtendsClause(node, parent)) {
- return true;
- }
- if (hasPostfixPart(node, parent) || isUnaryLike(parent) || isAwaitExpression(parent)) {
- return true;
- }
- if (isBinary(parent)) {
- const parentOp = parent.operator;
- const parentPos = PRECEDENCE[parentOp];
- const nodeOp = node.operator;
- const nodePos = PRECEDENCE[nodeOp];
- if (parentPos === nodePos && parent.right === node && !isLogicalExpression(parent) || parentPos > nodePos) {
- return true;
- }
- }
- }
- function UnionTypeAnnotation(node, parent) {
- return isArrayTypeAnnotation(parent) || isNullableTypeAnnotation(parent) || isIntersectionTypeAnnotation(parent) || isUnionTypeAnnotation(parent);
- }
- function OptionalIndexedAccessType(node, parent) {
- return isIndexedAccessType(parent, {
- objectType: node
- });
- }
- function TSAsExpression() {
- return true;
- }
- function TSTypeAssertion() {
- return true;
- }
- function TSUnionType(node, parent) {
- return isTSArrayType(parent) || isTSOptionalType(parent) || isTSIntersectionType(parent) || isTSUnionType(parent) || isTSRestType(parent);
- }
- function TSInferType(node, parent) {
- return isTSArrayType(parent) || isTSOptionalType(parent);
- }
- function BinaryExpression(node, parent) {
- return node.operator === "in" && (isVariableDeclarator(parent) || isFor(parent));
- }
- function SequenceExpression(node, parent) {
- if (isForStatement(parent) || isThrowStatement(parent) || isReturnStatement(parent) || isIfStatement(parent) && parent.test === node || isWhileStatement(parent) && parent.test === node || isForInStatement(parent) && parent.right === node || isSwitchStatement(parent) && parent.discriminant === node || isExpressionStatement(parent) && parent.expression === node) {
- return false;
- }
- return true;
- }
- function YieldExpression(node, parent) {
- return isBinary(parent) || isUnaryLike(parent) || hasPostfixPart(node, parent) || isAwaitExpression(parent) && isYieldExpression(node) || isConditionalExpression(parent) && node === parent.test || isClassExtendsClause(node, parent);
- }
- function ClassExpression(node, parent, printStack) {
- return isFirstInContext(printStack, {
- expressionStatement: true,
- exportDefault: true
- });
- }
- function UnaryLike(node, parent) {
- return hasPostfixPart(node, parent) || isBinaryExpression(parent, {
- operator: "**",
- left: node
- }) || isClassExtendsClause(node, parent);
- }
- function FunctionExpression(node, parent, printStack) {
- return isFirstInContext(printStack, {
- expressionStatement: true,
- exportDefault: true
- });
- }
- function ArrowFunctionExpression(node, parent) {
- return isExportDeclaration(parent) || ConditionalExpression(node, parent);
- }
- function ConditionalExpression(node, parent) {
- if (isUnaryLike(parent) || isBinary(parent) || isConditionalExpression(parent, {
- test: node
- }) || isAwaitExpression(parent) || isTSTypeAssertion(parent) || isTSAsExpression(parent)) {
- return true;
- }
- return UnaryLike(node, parent);
- }
- function OptionalMemberExpression(node, parent) {
- return isCallExpression(parent, {
- callee: node
- }) || isMemberExpression(parent, {
- object: node
- });
- }
- function AssignmentExpression(node, parent) {
- if (isObjectPattern(node.left)) {
- return true;
- } else {
- return ConditionalExpression(node, parent);
- }
- }
- function LogicalExpression(node, parent) {
- switch (node.operator) {
- case "||":
- if (!isLogicalExpression(parent)) return false;
- return parent.operator === "??" || parent.operator === "&&";
- case "&&":
- return isLogicalExpression(parent, {
- operator: "??"
- });
- case "??":
- return isLogicalExpression(parent) && parent.operator !== "??";
- }
- }
- function Identifier(node, parent, printStack) {
- if (node.name === "let") {
- const isFollowedByBracket = isMemberExpression(parent, {
- object: node,
- computed: true
- }) || isOptionalMemberExpression(parent, {
- object: node,
- computed: true,
- optional: false
- });
- return isFirstInContext(printStack, {
- expressionStatement: isFollowedByBracket,
- forHead: isFollowedByBracket,
- forInHead: isFollowedByBracket,
- forOfHead: true
- });
- }
- return node.name === "async" && isForOfStatement(parent) && node === parent.left;
- }
- function isFirstInContext(printStack, {
- expressionStatement = false,
- arrowBody = false,
- exportDefault = false,
- forHead = false,
- forInHead = false,
- forOfHead = false
- }) {
- let i = printStack.length - 1;
- let node = printStack[i];
- i--;
- let parent = printStack[i];
- while (i >= 0) {
- if (expressionStatement && isExpressionStatement(parent, {
- expression: node
- }) || exportDefault && isExportDefaultDeclaration(parent, {
- declaration: node
- }) || arrowBody && isArrowFunctionExpression(parent, {
- body: node
- }) || forHead && isForStatement(parent, {
- init: node
- }) || forInHead && isForInStatement(parent, {
- left: node
- }) || forOfHead && isForOfStatement(parent, {
- left: node
- })) {
- return true;
- }
- if (hasPostfixPart(node, parent) && !isNewExpression(parent) || isSequenceExpression(parent) && parent.expressions[0] === node || isConditional(parent, {
- test: node
- }) || isBinary(parent, {
- left: node
- }) || isAssignmentExpression(parent, {
- left: node
- })) {
- node = parent;
- i--;
- parent = printStack[i];
- } else {
- return false;
- }
- }
- return false;
- }
|