ObfuscatedCode.spec.ts 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144
  1. import 'reflect-metadata';
  2. import { ServiceIdentifiers } from '../../../src/container/ServiceIdentifiers';
  3. import { assert } from 'chai';
  4. import { TTypeFromEnum } from '../../../src/types/utils/TTypeFromEnym';
  5. import { IInversifyContainerFacade } from '../../../src/interfaces/container/IInversifyContainerFacade';
  6. import { IObfuscatedCode } from '../../../src/interfaces/source-code/IObfuscatedCode';
  7. import { SourceMapMode } from '../../../src/enums/source-map/SourceMapMode';
  8. import { InversifyContainerFacade } from '../../../src/container/InversifyContainerFacade';
  9. /**
  10. * @param rawObfuscatedCode
  11. * @param sourceMap
  12. * @param sourceMapBaseUrl
  13. * @param sourceMapFileName
  14. * @param sourceMapMode
  15. */
  16. function getObfuscatedCode (
  17. rawObfuscatedCode: string,
  18. sourceMap: string,
  19. sourceMapBaseUrl: string,
  20. sourceMapFileName: string,
  21. sourceMapMode: TTypeFromEnum<typeof SourceMapMode>
  22. ): IObfuscatedCode {
  23. const inversifyContainerFacade: IInversifyContainerFacade = new InversifyContainerFacade();
  24. inversifyContainerFacade.load(
  25. '',
  26. '',
  27. {
  28. sourceMap: true,
  29. sourceMapBaseUrl: sourceMapBaseUrl,
  30. sourceMapFileName: sourceMapFileName,
  31. sourceMapMode: sourceMapMode
  32. }
  33. );
  34. const obfuscatedCode: IObfuscatedCode = inversifyContainerFacade
  35. .get<IObfuscatedCode>(ServiceIdentifiers.IObfuscatedCode);
  36. obfuscatedCode.initialize(rawObfuscatedCode, sourceMap);
  37. return obfuscatedCode;
  38. }
  39. describe('ObfuscatedCode', () => {
  40. const expectedObfuscatedCode: string = 'var test = 1;';
  41. const sourceMap: string = 'test';
  42. describe('constructor', () => {
  43. let obfuscatedCode: IObfuscatedCode;
  44. before(() => {
  45. obfuscatedCode = getObfuscatedCode(
  46. expectedObfuscatedCode,
  47. sourceMap,
  48. '',
  49. '',
  50. SourceMapMode.Separate
  51. );
  52. });
  53. it('should return obfuscated code if `.toString()` was called on `ObfuscatedCode` object', () => {
  54. assert.equal(obfuscatedCode.toString(), expectedObfuscatedCode);
  55. });
  56. });
  57. describe('getObfuscatedCode', () => {
  58. let obfuscatedCode: string;
  59. describe('source map doest\'t exist', () => {
  60. before(() => {
  61. obfuscatedCode = getObfuscatedCode(
  62. expectedObfuscatedCode,
  63. '',
  64. '',
  65. '',
  66. SourceMapMode.Separate
  67. ).getObfuscatedCode();
  68. });
  69. it('should return untouched obfuscated code', () => {
  70. assert.equal(obfuscatedCode, expectedObfuscatedCode);
  71. });
  72. });
  73. describe('source map is set, source map mode is `inline`', () => {
  74. const regExp: RegExp = /data:application\/json;base64,dGVzdA==/;
  75. before(() => {
  76. obfuscatedCode = getObfuscatedCode(
  77. expectedObfuscatedCode,
  78. sourceMap,
  79. '',
  80. '',
  81. SourceMapMode.Inline
  82. ).getObfuscatedCode();
  83. });
  84. it('should add source map to obfuscated code as base64 encoded string', () => {
  85. assert.match(obfuscatedCode, regExp);
  86. });
  87. });
  88. describe('source map mode is `separate`', () => {
  89. const regExp: RegExp = /sourceMappingURL=http:\/\/example\.com\/output\.js\.map/;
  90. before(() => {
  91. obfuscatedCode = getObfuscatedCode(
  92. expectedObfuscatedCode,
  93. sourceMap,
  94. 'http://example.com',
  95. 'output.js.map',
  96. SourceMapMode.Separate
  97. ).getObfuscatedCode();
  98. });
  99. it('should add source map import to obfuscated code', () => {
  100. assert.match(obfuscatedCode, regExp);
  101. });
  102. });
  103. describe('source map mode is `separate`, `sourceMapUrl` is not set', () => {
  104. before(() => {
  105. obfuscatedCode = getObfuscatedCode(
  106. expectedObfuscatedCode,
  107. sourceMap,
  108. '',
  109. '',
  110. SourceMapMode.Separate
  111. ).getObfuscatedCode();
  112. });
  113. it('should not touch obfuscated code', () => {
  114. assert.equal(obfuscatedCode, expectedObfuscatedCode);
  115. });
  116. });
  117. });
  118. });