JavaScriptObfuscatorFacade.ts 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. import 'reflect-metadata';
  2. import { ServiceIdentifiers } from './container/ServiceIdentifiers';
  3. import { TInputOptions } from './types/options/TInputOptions';
  4. import { TObfuscationResultsObject } from './types/TObfuscationResultsObject';
  5. import { TObject } from './types/TObject';
  6. import { IInversifyContainerFacade } from './interfaces/container/IInversifyContainerFacade';
  7. import { IJavaScriptObfuscator } from './interfaces/IJavaScriptObfsucator';
  8. import { IObfuscatedCode } from './interfaces/source-code/IObfuscatedCode';
  9. import { InversifyContainerFacade } from './container/InversifyContainerFacade';
  10. class JavaScriptObfuscatorFacade {
  11. /**
  12. * @type {string | undefined}
  13. */
  14. public static version: string = process.env.VERSION ?? 'unknown';
  15. /**
  16. * @param {string} sourceCode
  17. * @param {TInputOptions} inputOptions
  18. * @returns {IObfuscatedCode}
  19. */
  20. public static obfuscate (sourceCode: string, inputOptions: TInputOptions = {}): IObfuscatedCode {
  21. const inversifyContainerFacade: IInversifyContainerFacade = new InversifyContainerFacade();
  22. inversifyContainerFacade.load(sourceCode, '', inputOptions);
  23. const javaScriptObfuscator: IJavaScriptObfuscator = inversifyContainerFacade
  24. .get<IJavaScriptObfuscator>(ServiceIdentifiers.IJavaScriptObfuscator);
  25. const obfuscatedCode: IObfuscatedCode = javaScriptObfuscator.obfuscate(sourceCode);
  26. inversifyContainerFacade.unload();
  27. return obfuscatedCode;
  28. }
  29. /**
  30. * @param {TSourceCodesObject} sourceCodesObject
  31. * @param {TInputOptions} inputOptions
  32. * @returns {TObfuscationResultsObject<TSourceCodesObject>}
  33. */
  34. public static obfuscateMultiple <TSourceCodesObject extends TObject<string>> (
  35. sourceCodesObject: TSourceCodesObject,
  36. inputOptions: TInputOptions = {}
  37. ): TObfuscationResultsObject<TSourceCodesObject> {
  38. if (typeof sourceCodesObject !== 'object') {
  39. throw new Error('Source codes object should be a plain object');
  40. }
  41. return Object
  42. .keys(sourceCodesObject)
  43. .reduce(
  44. (acc: TObfuscationResultsObject<TSourceCodesObject>, sourceCodeIdentifier: keyof TSourceCodesObject) => {
  45. const sourceCode: string = sourceCodesObject[sourceCodeIdentifier];
  46. return {
  47. ...acc,
  48. [sourceCodeIdentifier]: JavaScriptObfuscatorFacade.obfuscate(sourceCode, inputOptions)
  49. };
  50. },
  51. <TObfuscationResultsObject<TSourceCodesObject>>{}
  52. );
  53. }
  54. }
  55. export { JavaScriptObfuscatorFacade as JavaScriptObfuscator };