ObfuscationResult.spec.ts 6.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199
  1. import 'reflect-metadata';
  2. import { ServiceIdentifiers } from '../../../src/container/ServiceIdentifiers';
  3. import { assert } from 'chai';
  4. import { TInputOptions } from '../../../src/types/options/TInputOptions';
  5. import { TTypeFromEnum } from '../../../src/types/utils/TTypeFromEnum';
  6. import { IInversifyContainerFacade } from '../../../src/interfaces/container/IInversifyContainerFacade';
  7. import { IObfuscationResult } from '../../../src/interfaces/source-code/IObfuscationResult';
  8. import { IOptions } from '../../../src/interfaces/options/IOptions';
  9. import { SourceMapMode } from '../../../src/enums/source-map/SourceMapMode';
  10. import { DEFAULT_PRESET } from '../../../src/options/presets/Default';
  11. import { InversifyContainerFacade } from '../../../src/container/InversifyContainerFacade';
  12. /**
  13. * @param {string} rawObfuscatedCode
  14. * @param {TInputOptions} options
  15. * @returns {IObfuscationResult}
  16. */
  17. function getObfuscationResult (
  18. rawObfuscatedCode: string,
  19. options: TInputOptions
  20. ): IObfuscationResult {
  21. const inversifyContainerFacade: IInversifyContainerFacade = new InversifyContainerFacade();
  22. inversifyContainerFacade.load(
  23. '',
  24. '',
  25. {
  26. ...DEFAULT_PRESET,
  27. ...options
  28. }
  29. );
  30. const obfuscationResult: IObfuscationResult = inversifyContainerFacade
  31. .get<IObfuscationResult>(ServiceIdentifiers.IObfuscationResult);
  32. obfuscationResult.initialize(rawObfuscatedCode, '');
  33. return obfuscationResult;
  34. }
  35. /**
  36. * @param rawObfuscatedCode
  37. * @param sourceMap
  38. * @param sourceMapBaseUrl
  39. * @param sourceMapFileName
  40. * @param sourceMapMode
  41. */
  42. function getSourceMapObfuscationResult (
  43. rawObfuscatedCode: string,
  44. sourceMap: string,
  45. sourceMapBaseUrl: string,
  46. sourceMapFileName: string,
  47. sourceMapMode: TTypeFromEnum<typeof SourceMapMode>
  48. ): IObfuscationResult {
  49. const inversifyContainerFacade: IInversifyContainerFacade = new InversifyContainerFacade();
  50. inversifyContainerFacade.load(
  51. '',
  52. '',
  53. {
  54. ...DEFAULT_PRESET,
  55. sourceMap: true,
  56. sourceMapBaseUrl,
  57. sourceMapFileName,
  58. sourceMapMode
  59. }
  60. );
  61. const obfuscationResult: IObfuscationResult = inversifyContainerFacade
  62. .get<IObfuscationResult>(ServiceIdentifiers.IObfuscationResult);
  63. obfuscationResult.initialize(rawObfuscatedCode, sourceMap);
  64. return obfuscationResult;
  65. }
  66. describe('ObfuscatedCode', () => {
  67. const expectedObfuscatedCode: string = 'var test = 1;';
  68. const sourceMap: string = 'test';
  69. describe('constructor', () => {
  70. let obfuscationResult: IObfuscationResult;
  71. before(() => {
  72. obfuscationResult = getSourceMapObfuscationResult(
  73. expectedObfuscatedCode,
  74. sourceMap,
  75. '',
  76. '',
  77. SourceMapMode.Separate
  78. );
  79. });
  80. it('should return obfuscation result if `.toString()` was called on `ObfuscationResult` object', () => {
  81. assert.equal(obfuscationResult.toString(), expectedObfuscatedCode);
  82. });
  83. });
  84. describe('getObfuscatedCode', () => {
  85. let obfuscatedCode: string;
  86. describe('source map doest\'t exist', () => {
  87. before(() => {
  88. obfuscatedCode = getSourceMapObfuscationResult(
  89. expectedObfuscatedCode,
  90. '',
  91. '',
  92. '',
  93. SourceMapMode.Separate
  94. ).getObfuscatedCode();
  95. });
  96. it('should return untouched obfuscated code', () => {
  97. assert.equal(obfuscatedCode, expectedObfuscatedCode);
  98. });
  99. });
  100. describe('source map is set, source map mode is `inline`', () => {
  101. const regExp: RegExp = /data:application\/json;base64,dGVzdA==/;
  102. before(() => {
  103. obfuscatedCode = getSourceMapObfuscationResult(
  104. expectedObfuscatedCode,
  105. sourceMap,
  106. '',
  107. '',
  108. SourceMapMode.Inline
  109. ).getObfuscatedCode();
  110. });
  111. it('should add source map to obfuscated code as base64 encoded string', () => {
  112. assert.match(obfuscatedCode, regExp);
  113. });
  114. });
  115. describe('source map mode is `separate`', () => {
  116. const regExp: RegExp = /sourceMappingURL=http:\/\/example\.com\/output\.js\.map/;
  117. before(() => {
  118. obfuscatedCode = getSourceMapObfuscationResult(
  119. expectedObfuscatedCode,
  120. sourceMap,
  121. 'http://example.com',
  122. 'output.js.map',
  123. SourceMapMode.Separate
  124. ).getObfuscatedCode();
  125. });
  126. it('should add source map import to obfuscated code', () => {
  127. assert.match(obfuscatedCode, regExp);
  128. });
  129. });
  130. describe('source map mode is `separate`, `sourceMapUrl` is not set', () => {
  131. before(() => {
  132. obfuscatedCode = getSourceMapObfuscationResult(
  133. expectedObfuscatedCode,
  134. sourceMap,
  135. '',
  136. '',
  137. SourceMapMode.Separate
  138. ).getObfuscatedCode();
  139. });
  140. it('should not touch obfuscated code', () => {
  141. assert.equal(obfuscatedCode, expectedObfuscatedCode);
  142. });
  143. });
  144. });
  145. describe('getOptions', () => {
  146. const seed: number = 1234;
  147. const expectedOptions: IOptions = {
  148. ...DEFAULT_PRESET,
  149. seed
  150. } as IOptions;
  151. let options: IOptions;
  152. before(() => {
  153. options = getObfuscationResult(
  154. expectedObfuscatedCode,
  155. {
  156. seed
  157. }
  158. ).getOptions();
  159. });
  160. it('should return options object', () => {
  161. assert.deepEqual(options, expectedOptions);
  162. });
  163. });
  164. });