ObjectExpressionObfuscator.js 1.8 KB

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