SourceMapCorrector.ts 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  1. import { IObfuscationResult } from './interfaces/IObfuscationResult';
  2. import { ISourceMapCorrector } from './interfaces/ISourceMapCorrector';
  3. import { TSourceMapMode } from './types/TSourceMapMode';
  4. import { SourceMapMode } from './enums/SourceMapMode';
  5. import { ObfuscationResult } from './ObfuscationResult';
  6. import { Utils } from './Utils';
  7. export class SourceMapCorrector implements ISourceMapCorrector {
  8. /**
  9. * @type {string}
  10. */
  11. private obfuscatedCode: string;
  12. /**
  13. * @type {string}
  14. */
  15. private sourceMap: string;
  16. /**
  17. * @type {TSourceMapMode}
  18. */
  19. private sourceMapMode: TSourceMapMode;
  20. /**
  21. * @type {string}
  22. */
  23. private sourceMapUrl: string;
  24. /**
  25. * @param obfuscationResult
  26. * @param sourceMapUrl
  27. * @param sourceMapMode
  28. */
  29. constructor (
  30. obfuscationResult: IObfuscationResult,
  31. sourceMapUrl: string,
  32. sourceMapMode: TSourceMapMode
  33. ) {
  34. this.obfuscatedCode = obfuscationResult.getObfuscatedCode();
  35. this.sourceMap = obfuscationResult.getSourceMap();
  36. this.sourceMapUrl = sourceMapUrl;
  37. this.sourceMapMode = sourceMapMode;
  38. }
  39. /**
  40. * @returns {ObfuscationResult}
  41. */
  42. public correct (): IObfuscationResult {
  43. return new ObfuscationResult(
  44. this.correctObfuscatedCode(),
  45. this.sourceMap
  46. );
  47. }
  48. /**
  49. * @returns {string}
  50. */
  51. private correctObfuscatedCode (): string {
  52. if (!this.sourceMap) {
  53. return this.obfuscatedCode;
  54. }
  55. let sourceMappingUrl: string = '//# sourceMappingURL=';
  56. switch (this.sourceMapMode) {
  57. case SourceMapMode.Inline:
  58. sourceMappingUrl += `data:application/json;base64,${Utils.btoa(this.sourceMap)}`;
  59. break;
  60. case SourceMapMode.Separate:
  61. default:
  62. if (!this.sourceMapUrl) {
  63. return this.obfuscatedCode;
  64. }
  65. sourceMappingUrl += this.sourceMapUrl;
  66. break;
  67. }
  68. return `${this.obfuscatedCode}\n${sourceMappingUrl}`;
  69. };
  70. }