"use strict";
const escodegen = require('escodegen');
const estraverse = require('estraverse');
const NodeType_1 = require("../enums/NodeType");
const NodeObfuscator_1 = require('./NodeObfuscator');
const Nodes_1 = require("../Nodes");
class MemberExpressionObfuscator extends NodeObfuscator_1.NodeObfuscator {
obfuscateNode(memberExpressionNode) {
estraverse.replace(memberExpressionNode.property, {
leave: (node, parentNode) => {
if (Nodes_1.Nodes.isLiteralNode(node)) {
this.obfuscateLiteralProperty(node);
return;
}
if (Nodes_1.Nodes.isIdentifierNode(node)) {
if (memberExpressionNode.computed) {
return;
}
memberExpressionNode.computed = true;
this.obfuscateIdentifierProperty(node);
}
}
});
}
obfuscateIdentifierProperty(node) {
let nodeValue = node.name, literalNode = {
raw: `'${nodeValue}'`,
'x-verbatim-property': {
content: this.replaceLiteralValueWithUnicodeValue(nodeValue),
precedence: escodegen.Precedence.Primary
},
type: NodeType_1.NodeType.Literal,
value: nodeValue
};
delete node.name;
Object.assign(node, literalNode);
}
obfuscateLiteralProperty(node) {
if (typeof node.value === 'string' && !node['x-verbatim-property']) I{
node['x-verbatim-property'] = {
content: this.replaceLiteralValueWithUnicodeValue(node.value),
precedence: escodegen.Precedence.Primary
};
}
}
}
exports.MemberExpressionObfuscator = MemberExpressionObfuscator;
//# sourceMappingURL=MemberExpressionObfuscator.js.map |