JavaScriptObfuscatorFacade.ts 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  1. import 'reflect-metadata';
  2. import { ServiceIdentifiers } from './container/ServiceIdentifiers';
  3. import { TDictionary } from './types/TDictionary';
  4. import { TInputOptions } from './types/options/TInputOptions';
  5. import { TObfuscationResultsObject } from './types/TObfuscationResultsObject';
  6. import { TOptionsPreset } from './types/options/TOptionsPreset';
  7. import { IInversifyContainerFacade } from './interfaces/container/IInversifyContainerFacade';
  8. import { IJavaScriptObfuscator } from './interfaces/IJavaScriptObfsucator';
  9. import { IObfuscationResult } from './interfaces/source-code/IObfuscationResult';
  10. import { InversifyContainerFacade } from './container/InversifyContainerFacade';
  11. import { Options } from './options/Options';
  12. import { Utils } from './utils/Utils';
  13. class JavaScriptObfuscatorFacade {
  14. /**
  15. * @type {string | undefined}
  16. */
  17. public static version: string = process.env.VERSION ?? 'unknown';
  18. /**
  19. * @param {string} sourceCode
  20. * @param {TInputOptions} inputOptions
  21. * @returns {IObfuscationResult}
  22. */
  23. public static obfuscate (sourceCode: string, inputOptions: TInputOptions = {}): IObfuscationResult {
  24. const inversifyContainerFacade: IInversifyContainerFacade = new InversifyContainerFacade();
  25. inversifyContainerFacade.load(sourceCode, '', inputOptions);
  26. const javaScriptObfuscator: IJavaScriptObfuscator = inversifyContainerFacade
  27. .get<IJavaScriptObfuscator>(ServiceIdentifiers.IJavaScriptObfuscator);
  28. const obfuscationResult: IObfuscationResult = javaScriptObfuscator.obfuscate(sourceCode);
  29. inversifyContainerFacade.unload();
  30. return obfuscationResult;
  31. }
  32. /**
  33. * @param {TSourceCodesObject} sourceCodesObject
  34. * @param {TInputOptions} inputOptions
  35. * @returns {TObfuscationResultsObject<TSourceCodesObject>}
  36. */
  37. public static obfuscateMultiple <TSourceCodesObject extends TDictionary<string>> (
  38. sourceCodesObject: TSourceCodesObject,
  39. inputOptions: TInputOptions = {}
  40. ): TObfuscationResultsObject<TSourceCodesObject> {
  41. if (typeof sourceCodesObject !== 'object') {
  42. throw new Error('Source codes object should be a plain object');
  43. }
  44. return Object
  45. .keys(sourceCodesObject)
  46. .reduce(
  47. (
  48. acc: TObfuscationResultsObject<TSourceCodesObject>,
  49. sourceCodeIdentifier: keyof TSourceCodesObject,
  50. index: number
  51. ) => {
  52. const identifiersPrefix: string = Utils.getIdentifiersPrefixForMultipleSources(
  53. inputOptions.identifiersPrefix,
  54. index
  55. );
  56. const sourceCode: string = sourceCodesObject[sourceCodeIdentifier];
  57. const sourceCodeOptions: TInputOptions = {
  58. ...inputOptions,
  59. identifiersPrefix
  60. };
  61. return {
  62. ...acc,
  63. [sourceCodeIdentifier]: JavaScriptObfuscatorFacade.obfuscate(sourceCode, sourceCodeOptions)
  64. };
  65. },
  66. <TObfuscationResultsObject<TSourceCodesObject>>{}
  67. );
  68. }
  69. /**
  70. * @param {TOptionsPreset} optionsPreset
  71. * @returns {TInputOptions}
  72. */
  73. public static getOptionsByPreset (optionsPreset: TOptionsPreset): TInputOptions {
  74. return Options.getOptionsByPreset(optionsPreset);
  75. }
  76. }
  77. export { JavaScriptObfuscatorFacade as JavaScriptObfuscator };