SourceMapCorrector.ts 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899
  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.correctSourceMap()
  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.sourceMapUrl || this.sourceMap, false)}`;
  59. break;
  60. case SourceMapMode.Separate:
  61. default:
  62. if (this.sourceMapUrl) {
  63. sourceMappingUrl += this.sourceMapUrl;
  64. break;
  65. }
  66. return this.obfuscatedCode;
  67. }
  68. return `${this.obfuscatedCode}\n${sourceMappingUrl}`;
  69. };
  70. /**
  71. * @returns {string}
  72. */
  73. private correctSourceMap (): string {
  74. if (this.sourceMapMode === SourceMapMode.Inline) {
  75. return '';
  76. }
  77. return this.sourceMap;
  78. }
  79. }