UNPKG

fuse-box

Version:

Fuse-Box a bundler that does it right

85 lines (84 loc) 2.65 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.createOptionalChaningExpression = exports.convertToCallExpression = exports.ensureExpressionConsistency = void 0; const AST_1 = require("../../interfaces/AST"); function ensureExpressionConsistency(expression, node) { if (node.type == AST_1.ASTType.Literal) { expression.computed = true; } } exports.ensureExpressionConsistency = ensureExpressionConsistency; function convertToCallExpression(alternate, id, args) { return { arguments: args, callee: { object: { name: id, type: 'Identifier' }, property: alternate, type: 'MemberExpression' }, type: 'CallExpression', }; } exports.convertToCallExpression = convertToCallExpression; function createOptionalChaningExpression(userId) { // prevMember.test.left.left.right // prevMement.alternate.property const AST_NODE = { alternate: null, consequent: { argument: { type: 'Literal', value: 0, }, operator: 'void', prefix: true, type: 'UnaryExpression', }, test: { left: { left: { left: { name: userId, type: 'Identifier', }, operator: '=', right: null, type: 'AssignmentExpression', }, operator: '===', right: { type: 'Literal', value: null, }, type: 'BinaryExpression', }, operator: '||', right: { left: { name: userId, type: 'Identifier', }, operator: '===', right: { argument: { type: 'Literal', value: 0, }, operator: 'void', prefix: true, type: 'UnaryExpression', }, type: 'BinaryExpression', }, type: 'LogicalExpression', }, type: 'ConditionalExpression', }; return { id: userId, statement: AST_NODE, setLeft: (item) => { AST_NODE.test.left.left.right = item; }, setRight: (item) => { AST_NODE.alternate = item; }, }; } exports.createOptionalChaningExpression = createOptionalChaningExpression;