JavaScriptObfuscator.ts 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. "use strict";
  2. import * as esprima from 'esprima';
  3. import * as escodegen from 'escodegen';
  4. import { INode } from './interfaces/nodes/INode';
  5. import { IObfuscator } from "./interfaces/IObfuscator";
  6. import { IOptions } from './interfaces/IOptions';
  7. import { IOptionsPreset } from "./interfaces/IOptionsPreset";
  8. import { JavaScriptObfuscatorCLI } from "./cli/JavaScriptObfuscatorCLI";
  9. import { Obfuscator } from "./Obfuscator";
  10. import { Options } from "./Options";
  11. export class JavaScriptObfuscator {
  12. /**
  13. * @type {GenerateOptions}
  14. */
  15. private static escodegenParams: escodegen.GenerateOptions = {
  16. verbatim: 'x-verbatim-property'
  17. };
  18. /**
  19. * @param sourceCode
  20. * @param customOptions
  21. */
  22. public static obfuscate (sourceCode: string, customOptions?: IOptionsPreset): string {
  23. let astTree: INode = esprima.parse(sourceCode),
  24. options: IOptions = new Options(customOptions),
  25. obfuscator: IObfuscator = new Obfuscator(options);
  26. astTree = obfuscator.obfuscateNode(astTree);
  27. return JavaScriptObfuscator.generateCode(astTree, options);
  28. }
  29. /**
  30. * @param argv
  31. */
  32. public static runCLI (argv: string[]): void {
  33. new JavaScriptObfuscatorCLI(argv).run();
  34. }
  35. /**
  36. * @param astTree
  37. * @param options
  38. */
  39. private static generateCode (astTree: INode, options: IOptions): string {
  40. let escodegenParams: escodegen.GenerateOptions = Object.assign({}, JavaScriptObfuscator.escodegenParams);
  41. escodegenParams.format = {
  42. compact: options.get<boolean>('compact')
  43. };
  44. return escodegen.generate(astTree, escodegenParams);
  45. }
  46. }