Holy-Unblocker/lib/js/property.js
2022-02-08 00:43:17 -08:00

22 lines
No EOL
1.1 KiB
JavaScript

const { Syntax } = require('./esotope');
const { createCallExpression, createIdentifier, createLiteral } = require('./node-builder');
const { shouldRewriteProperty } = require('./utils');
module.exports = {
type: Syntax.MemberExpression,
condition: (node, parent) => {
if (parent.type == 'UpdateExpression' && ['--', '++'].includes(parent.operator)) return false;
if (parent.type == 'UnaryExpression' && parent.operator == 'delete') return false;
if (parent.type == 'NewExpression' && parent.callee == node) return false;
if (parent.type === 'CallExpression' && parent.callee === node) return false;
if (parent.type == 'AssignmentExpression' && parent.left == node) return false;
if (node.object.type == 'Super') return false;
return shouldRewriteProperty(node);
},
run: node => {
let key = node.property;
if (key.type == 'Identifier' && !node.computed) key = createLiteral(key.name);
Object.assign(node, createCallExpression(createIdentifier('__get$'), [ node.object, key, ]));
return true;
},
};