JavaScriptObfuscatorInternal.spec.ts 3.5 KB

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