JavaScriptObfuscator.spec.ts 4.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  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/source-code/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`, () => {
  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. {
  24. ...NO_ADDITIONAL_NODES_PRESET,
  25. sourceMap: true,
  26. sourceMapFileName: sourceMapUrl
  27. }
  28. );
  29. javaScriptObfuscator = inversifyContainerFacade
  30. .get<IJavaScriptObfuscator>(ServiceIdentifiers.IJavaScriptObfuscator);
  31. const obfuscationResult: IObfuscationResult = javaScriptObfuscator.obfuscate(code);
  32. obfuscatedCode = obfuscationResult.getObfuscatedCode();
  33. sourceMapObject = JSON.parse(obfuscationResult.getSourceMap());
  34. });
  35. it('should link obfuscated code with source map', () => {
  36. assert.match(obfuscatedCode, regExp);
  37. });
  38. it('should return valid source map with `mappings` property', () => {
  39. assert.isOk(sourceMapObject.mappings);
  40. });
  41. });
  42. describe('Variant #2: `sourceMapBaseUrl` is set', () => {
  43. const sourceMapBaseUrl: string = 'http://localhost:9000';
  44. const regExp: RegExp = new RegExp(`sourceMappingURL=${sourceMapBaseUrl}/${sourceMapUrl}$`);
  45. let obfuscatedCode: string,
  46. sourceMapObject: any;
  47. before(() => {
  48. const inversifyContainerFacade: IInversifyContainerFacade = new InversifyContainerFacade();
  49. inversifyContainerFacade.load(
  50. '',
  51. '',
  52. {
  53. ...NO_ADDITIONAL_NODES_PRESET,
  54. sourceMap: true,
  55. sourceMapBaseUrl: sourceMapBaseUrl,
  56. sourceMapFileName: sourceMapUrl
  57. }
  58. );
  59. javaScriptObfuscator = inversifyContainerFacade
  60. .get<IJavaScriptObfuscator>(ServiceIdentifiers.IJavaScriptObfuscator);
  61. const obfuscationResult: IObfuscationResult = javaScriptObfuscator.obfuscate(code);
  62. obfuscatedCode = obfuscationResult.getObfuscatedCode();
  63. sourceMapObject = JSON.parse(obfuscationResult.getSourceMap());
  64. });
  65. it('should properly add base url to source map import inside obfuscated code', () => {
  66. assert.match(obfuscatedCode, regExp);
  67. });
  68. it('should return valid source map with `mappings` property', () => {
  69. assert.isOk(sourceMapObject.mappings);
  70. });
  71. });
  72. });
  73. });
  74. });