SourceMapCorrector.spec.ts 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899
  1. import { ServiceIdentifiers } from '../../src/container/ServiceIdentifiers';
  2. import { TSourceMapMode } from '../../src/types/TSourceMapMode';
  3. import { IInversifyContainerFacade } from '../../src/interfaces/container/IInversifyContainerFacade';
  4. import { IObfuscationResult } from '../../src/interfaces/IObfuscationResult';
  5. import { ISourceMapCorrector } from '../../src/interfaces/ISourceMapCorrector';
  6. import { SourceMapMode } from '../../src/enums/SourceMapMode';
  7. import { InversifyContainerFacade } from '../../src/container/InversifyContainerFacade';
  8. const assert: Chai.AssertStatic = require('chai').assert;
  9. /**
  10. * @param obfuscatedCode
  11. * @param sourceMap
  12. * @param sourceMapBaseUrl
  13. * @param sourceMapFileName
  14. * @param sourceMapMode
  15. */
  16. function getCorrectedObfuscationResult (
  17. obfuscatedCode: string,
  18. sourceMap: string,
  19. sourceMapBaseUrl: string,
  20. sourceMapFileName: string,
  21. sourceMapMode: TSourceMapMode
  22. ): IObfuscationResult {
  23. const inversifyContainerFacade: IInversifyContainerFacade = new InversifyContainerFacade({
  24. sourceMap: true,
  25. sourceMapBaseUrl: sourceMapBaseUrl,
  26. sourceMapFileName: sourceMapFileName,
  27. sourceMapMode: sourceMapMode
  28. });
  29. const sourceMapCorrector: ISourceMapCorrector = inversifyContainerFacade
  30. .get<ISourceMapCorrector>(ServiceIdentifiers.ISourceMapCorrector);
  31. return sourceMapCorrector.correct(obfuscatedCode, sourceMap);
  32. }
  33. describe('SourceMapCorrector', () => {
  34. describe('correct (): IObfuscationResult', () => {
  35. let expectedObfuscationResult: IObfuscationResult,
  36. obfuscatedCode: string = 'var test = 1;',
  37. sourceMap: string = 'test';
  38. it('should return untouched obfuscated code if source map does not exist', () => {
  39. expectedObfuscationResult = getCorrectedObfuscationResult(
  40. obfuscatedCode,
  41. '',
  42. '',
  43. '',
  44. SourceMapMode.Separate)
  45. ;
  46. assert.equal(expectedObfuscationResult.getObfuscatedCode(), obfuscatedCode);
  47. });
  48. describe('if source map is set and source map mode is `inline`', () => {
  49. before (() => {
  50. expectedObfuscationResult = getCorrectedObfuscationResult(
  51. obfuscatedCode,
  52. sourceMap,
  53. '',
  54. '',
  55. SourceMapMode.Inline
  56. );
  57. });
  58. it('should add source map to obfuscated code as base64 encoded string', () => {
  59. assert.match(expectedObfuscationResult.getObfuscatedCode(), /data:application\/json;base64/);
  60. });
  61. });
  62. it('should add source map import to obfuscated code if source map mode is `separate`', () => {
  63. expectedObfuscationResult = getCorrectedObfuscationResult(
  64. obfuscatedCode,
  65. sourceMap,
  66. 'http://example.com',
  67. 'output.js.map',
  68. SourceMapMode.Separate
  69. );
  70. assert.match(expectedObfuscationResult.getObfuscatedCode(), /sourceMappingURL=http:\/\/example\.com\/output\.js\.map/);
  71. });
  72. it('should not touch obfuscated code if source map mode is `separate` and `sourceMapUrl` is not set', () => {
  73. expectedObfuscationResult = getCorrectedObfuscationResult(
  74. obfuscatedCode,
  75. sourceMap,
  76. '',
  77. '',
  78. SourceMapMode.Separate
  79. );
  80. assert.equal(expectedObfuscationResult.getObfuscatedCode(), obfuscatedCode);
  81. });
  82. });
  83. });