"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");
const Utils_1 = require('../Utils');
class ObjectExpressionObfuscator extends NodeObfuscator_1.NodeObfuscator {
obfuscateNode(objectExpressionNode) {
objectExpressionNode.properties
.forEach((property) => {
estraverse.replace(property.key, {
leave: (node, parentNode) => {
if (Nodes_1.Nodes.isLiteralNode(node)) {
this.obfuscateLiteralPropertyKey(node);
return;
}
if (Nodes_1.Nodes.isIdentifierNode(node)) {
this.obfuscateIdentifierPropertyKey(node);
}
}
});
});
}
obfuscateLiteralPropertyKey(node) {
switch (typeof node.value) {
case 'string':
if (node['x-verbatim-property']) {
break;
}
node['x-verbatim-property'] = {
content: Utils_1.Utils.stringToUnicode(node.value),
precedence: escodegen.Precedence.Primary
};
break;
default:
break;
}
}
obfuscateIdentifierPropertyKey(node) {
let nodeValue = node.name, literalNode = {
raw: `'${nodeValue}'`,
'x-verbatim-property': {
content: Utils_1.Utils.stringToUnicode(nodeValue),
precedence: escodegen.Precedence.Primary
},
type: NodeType_1.NodeType.Literal,
value: nodeValue
};
delete node.name;
Object.assign(node, literalNode);
}
}
exports.ObjectExpressionObfuscator = ObjectExpressionObfuscator;
//# sourceMappingURL=ObjectExpressionObfuscator.js.map |