ObfuscatedCode.spec.ts 4.4 KB

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