SourceMapCorrector.spec.ts 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127
  1. import { ServiceIdentifiers } from '../../../src/container/ServiceIdentifiers';
  2. import { assert } from 'chai';
  3. import { TSourceMapMode } from '../../../src/types/source-map/TSourceMapMode';
  4. import { IInversifyContainerFacade } from '../../../src/interfaces/container/IInversifyContainerFacade';
  5. import { IObfuscationResult } from '../../../src/interfaces/IObfuscationResult';
  6. import { ISourceMapCorrector } from '../../../src/interfaces/source-map/ISourceMapCorrector';
  7. import { SourceMapMode } from '../../../src/enums/source-map/SourceMapMode';
  8. import { InversifyContainerFacade } from '../../../src/container/InversifyContainerFacade';
  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. inversifyContainerFacade.load(
  25. '',
  26. {
  27. sourceMap: true,
  28. sourceMapBaseUrl: sourceMapBaseUrl,
  29. sourceMapFileName: sourceMapFileName,
  30. sourceMapMode: sourceMapMode
  31. }
  32. );
  33. const sourceMapCorrector: ISourceMapCorrector = inversifyContainerFacade
  34. .get<ISourceMapCorrector>(ServiceIdentifiers.ISourceMapCorrector);
  35. return sourceMapCorrector.correct(obfuscatedCode, sourceMap);
  36. }
  37. describe('SourceMapCorrector', () => {
  38. describe('correct (): IObfuscationResult', () => {
  39. const expectedObfuscatedCode: string = 'var test = 1;';
  40. const sourceMap: string = 'test';
  41. let obfuscationResult: IObfuscationResult,
  42. obfuscatedCode: string;
  43. describe('source map doest\'t exist', () => {
  44. before(() => {
  45. obfuscationResult = getCorrectedObfuscationResult(
  46. expectedObfuscatedCode,
  47. '',
  48. '',
  49. '',
  50. SourceMapMode.Separate
  51. );
  52. obfuscatedCode = obfuscationResult.getObfuscatedCode();
  53. });
  54. it('should return untouched obfuscated code', () => {
  55. assert.equal(obfuscatedCode, expectedObfuscatedCode);
  56. });
  57. });
  58. describe('source map is set, source map mode is `inline`', () => {
  59. const regExp: RegExp = /data:application\/json;base64/;
  60. before(() => {
  61. obfuscationResult = getCorrectedObfuscationResult(
  62. expectedObfuscatedCode,
  63. sourceMap,
  64. '',
  65. '',
  66. SourceMapMode.Inline
  67. );
  68. obfuscatedCode = obfuscationResult.getObfuscatedCode();
  69. });
  70. it('should add source map to obfuscated code as base64 encoded string', () => {
  71. assert.match(obfuscatedCode, regExp);
  72. });
  73. });
  74. describe('source map mode is `separate`', () => {
  75. const regExp: RegExp = /sourceMappingURL=http:\/\/example\.com\/output\.js\.map/;
  76. before(() => {
  77. obfuscationResult = getCorrectedObfuscationResult(
  78. expectedObfuscatedCode,
  79. sourceMap,
  80. 'http://example.com',
  81. 'output.js.map',
  82. SourceMapMode.Separate
  83. );
  84. obfuscatedCode = obfuscationResult.getObfuscatedCode();
  85. });
  86. it('should add source map import to obfuscated code', () => {
  87. assert.match(obfuscatedCode, regExp);
  88. });
  89. });
  90. describe('source map mode is `separate`, `sourceMapUrl` is not set', () => {
  91. before(() => {
  92. obfuscationResult = getCorrectedObfuscationResult(
  93. expectedObfuscatedCode,
  94. sourceMap,
  95. '',
  96. '',
  97. SourceMapMode.Separate
  98. );
  99. obfuscatedCode = obfuscationResult.getObfuscatedCode();
  100. });
  101. it('should not touch obfuscated code', () => {
  102. assert.equal(obfuscatedCode, expectedObfuscatedCode);
  103. });
  104. });
  105. });
  106. });