12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788 |
- import { inject, injectable } from 'inversify';
- import { ServiceIdentifiers } from '../container/ServiceIdentifiers';
- import { TObfuscationResultFactory } from '../types/container/TObfuscationResultFactory';
- import { ICryptUtils } from '../interfaces/utils/ICryptUtils';
- import { IObfuscationResult } from '../interfaces/IObfuscationResult';
- import { IOptions } from '../interfaces/options/IOptions';
- import { ISourceMapCorrector } from '../interfaces/source-map/ISourceMapCorrector';
- import { SourceMapMode } from '../enums/source-map/SourceMapMode';
- @injectable()
- export class SourceMapCorrector implements ISourceMapCorrector {
- /**
- * @type {ICryptUtils}
- */
- private readonly cryptUtils: ICryptUtils;
- /**
- * @type {TObfuscationResultFactory}
- */
- private readonly obfuscationResultFactory: TObfuscationResultFactory;
- /**
- * @type {IOptions}
- */
- private readonly options: IOptions;
- /**
- * @param {TObfuscationResultFactory} obfuscationResultFactory
- * @param {ICryptUtils} cryptUtils
- * @param {IOptions} options
- */
- constructor (
- @inject(ServiceIdentifiers.Factory__IObfuscationResult) obfuscationResultFactory: TObfuscationResultFactory,
- @inject(ServiceIdentifiers.ICryptUtils) cryptUtils: ICryptUtils,
- @inject(ServiceIdentifiers.IOptions) options: IOptions
- ) {
- this.obfuscationResultFactory = obfuscationResultFactory;
- this.cryptUtils = cryptUtils;
- this.options = options;
- }
- /**
- * @param {string} obfuscatedCode
- * @param {string} sourceMap
- * @returns {IObfuscationResult}
- */
- public correct (obfuscatedCode: string, sourceMap: string): IObfuscationResult {
- return this.obfuscationResultFactory(
- this.correctObfuscatedCode(obfuscatedCode, sourceMap),
- sourceMap
- );
- }
- /**
- * @param {string} obfuscatedCode
- * @param {string} sourceMap
- * @returns {string}
- */
- private correctObfuscatedCode (obfuscatedCode: string, sourceMap: string): string {
- if (!sourceMap) {
- return obfuscatedCode;
- }
- const sourceMapUrl: string = this.options.sourceMapBaseUrl + this.options.sourceMapFileName;
- let sourceMappingUrl: string = '//# sourceMappingURL=';
- switch (this.options.sourceMapMode) {
- case SourceMapMode.Inline:
- sourceMappingUrl += `data:application/json;base64,${this.cryptUtils.btoa(sourceMap)}`;
- break;
- case SourceMapMode.Separate:
- default:
- if (!sourceMapUrl) {
- return obfuscatedCode;
- }
- sourceMappingUrl += sourceMapUrl;
- }
- return `${obfuscatedCode}\n${sourceMappingUrl}`;
- }
- }
|