MemberExpressionObfuscator.js 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. "use strict";
  2. const escodegen = require('escodegen');
  3. const estraverse = require('estraverse');
  4. const NodeType_1 = require("../enums/NodeType");
  5. const NodeObfuscator_1 = require('./NodeObfuscator');
  6. const NodeUtils_1 = require("../NodeUtils");
  7. class MemberExpressionObfuscator extends NodeObfuscator_1.NodeObfuscator {
  8. obfuscateNode(memberExpressionNode) {
  9. estraverse.replace(memberExpressionNode.property, {
  10. leave: (node, parentNode) => {
  11. if (NodeUtils_1.NodeUtils.isLiteralNode(node)) {
  12. this.literalNodeController(node);
  13. return;
  14. }
  15. if (NodeUtils_1.NodeUtils.isIdentifierNode(node)) {
  16. if (memberExpressionNode.computed) {
  17. return;
  18. }
  19. memberExpressionNode.computed = true;
  20. this.identifierNodeController(node);
  21. }
  22. }
  23. });
  24. }
  25. identifierNodeController(node) {
  26. let nodeValue = node.name, literalNode = {
  27. raw: `'${nodeValue}'`,
  28. 'x-verbatim-property': {
  29. content: this.replaceLiteralStringByArrayElement(nodeValue),
  30. precedence: escodegen.Precedence.Primary
  31. },
  32. type: NodeType_1.NodeType.Literal,
  33. value: nodeValue
  34. };
  35. delete node.name;
  36. Object.assign(node, literalNode);
  37. }
  38. literalNodeController(node) {
  39. switch (typeof node.value) {
  40. case 'string':
  41. if (node['x-verbatim-property']) {
  42. break;
  43. }
  44. node['x-verbatim-property'] = {
  45. content: this.replaceLiteralStringByArrayElement(node.value),
  46. precedence: escodegen.Precedence.Primary
  47. };
  48. break;
  49. default:
  50. break;
  51. }
  52. }
  53. }
  54. exports.MemberExpressionObfuscator = MemberExpressionObfuscator;