LiteralObfuscator.ts 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. import * as escodegen from 'escodegen';
  2. import * as ESTree from 'estree';
  3. import { AbstractNodeObfuscator } from './AbstractNodeObfuscator';
  4. import { BooleanLiteralReplacer } from './replacers/BooleanLiteralReplacer';
  5. import { Nodes } from '../Nodes';
  6. import { NumberLiteralReplacer } from './replacers/NumberLiteralReplacer';
  7. import { StringLiteralReplacer } from './replacers/StringLiteralReplacer';
  8. export class LiteralObfuscator extends AbstractNodeObfuscator {
  9. /**
  10. * @param literalNode
  11. * @param parentNode
  12. */
  13. public obfuscateNode (literalNode: ESTree.Literal, parentNode: ESTree.Node): void {
  14. if (Nodes.isPropertyNode(parentNode) && parentNode.key === literalNode) {
  15. return;
  16. }
  17. let content: string;
  18. switch (typeof literalNode.value) {
  19. case 'boolean':
  20. content = new BooleanLiteralReplacer(this.nodes, this.options)
  21. .replace(<boolean>literalNode.value);
  22. break;
  23. case 'number':
  24. content = new NumberLiteralReplacer(this.nodes, this.options)
  25. .replace(<number>literalNode.value);
  26. break;
  27. case 'string':
  28. content = new StringLiteralReplacer(this.nodes, this.options)
  29. .replace(<string>literalNode.value);
  30. break;
  31. default:
  32. return;
  33. }
  34. literalNode['x-verbatim-property'] = {
  35. content : content,
  36. precedence: escodegen.Precedence.Primary
  37. };
  38. }
  39. }