JavaScriptObfuscator.spec.ts 4.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  1. import { ServiceIdentifiers } from '../../../src/container/ServiceIdentifiers';
  2. import { assert } from 'chai';
  3. import { IInversifyContainerFacade } from '../../../src/interfaces/container/IInversifyContainerFacade';
  4. import { IJavaScriptObfuscator } from '../../../src/interfaces/IJavaScriptObfsucator';
  5. import { IObfuscationResult } from '../../../src/interfaces/IObfuscationResult';
  6. import { NO_ADDITIONAL_NODES_PRESET } from '../../../src/options/presets/NoCustomNodes';
  7. import { InversifyContainerFacade } from '../../../src/container/InversifyContainerFacade';
  8. describe('JavaScriptObfuscator', () => {
  9. describe(`obfuscate (sourceCode: string): IObfuscationResult`, () => {
  10. describe(`source map`, () => {
  11. const code: string = 'var test = 1;';
  12. const sourceMapUrl: string = 'test.js.map';
  13. let javaScriptObfuscator: IJavaScriptObfuscator;
  14. describe('variant #1: default behaviour', () => {
  15. const regExp: RegExp = new RegExp(`sourceMappingURL=${sourceMapUrl}`);
  16. let obfuscatedCode: string,
  17. sourceMapObject: any;
  18. before(() => {
  19. const inversifyContainerFacade: IInversifyContainerFacade = new InversifyContainerFacade();
  20. inversifyContainerFacade.load(
  21. '',
  22. {
  23. ...NO_ADDITIONAL_NODES_PRESET,
  24. sourceMap: true,
  25. sourceMapFileName: sourceMapUrl
  26. }
  27. );
  28. javaScriptObfuscator = inversifyContainerFacade
  29. .get<IJavaScriptObfuscator>(ServiceIdentifiers.IJavaScriptObfuscator);
  30. const obfuscationResult: IObfuscationResult = javaScriptObfuscator.obfuscate(code);
  31. obfuscatedCode = obfuscationResult.getObfuscatedCode();
  32. sourceMapObject = JSON.parse(obfuscationResult.getSourceMap());
  33. });
  34. it('should link obfuscated code with source map', () => {
  35. assert.match(obfuscatedCode, regExp);
  36. });
  37. it('should return valid source map with `mappings` property', () => {
  38. assert.isOk(sourceMapObject.mappings);
  39. });
  40. });
  41. describe('variant #2: `sourceMapBaseUrl` is set', () => {
  42. const sourceMapBaseUrl: string = 'http://localhost:9000';
  43. const regExp: RegExp = new RegExp(`sourceMappingURL=${sourceMapBaseUrl}/${sourceMapUrl}$`);
  44. let obfuscatedCode: string,
  45. sourceMapObject: any;
  46. before(() => {
  47. const inversifyContainerFacade: IInversifyContainerFacade = new InversifyContainerFacade();
  48. inversifyContainerFacade.load(
  49. '',
  50. {
  51. ...NO_ADDITIONAL_NODES_PRESET,
  52. sourceMap: true,
  53. sourceMapBaseUrl: sourceMapBaseUrl,
  54. sourceMapFileName: sourceMapUrl
  55. }
  56. );
  57. javaScriptObfuscator = inversifyContainerFacade
  58. .get<IJavaScriptObfuscator>(ServiceIdentifiers.IJavaScriptObfuscator);
  59. const obfuscationResult: IObfuscationResult = javaScriptObfuscator.obfuscate(code);
  60. obfuscatedCode = obfuscationResult.getObfuscatedCode();
  61. sourceMapObject = JSON.parse(obfuscationResult.getSourceMap());
  62. });
  63. it('should properly add base url to source map import inside obfuscated code', () => {
  64. assert.match(obfuscatedCode, regExp);
  65. });
  66. it('should return valid source map with `mappings` property', () => {
  67. assert.isOk(sourceMapObject.mappings);
  68. });
  69. });
  70. });
  71. });
  72. });