123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102 |
- import { inject, injectable } from 'inversify';
- import { ServiceIdentifiers } from '../container/ServiceIdentifiers';
- import { ICryptUtils } from '../interfaces/utils/ICryptUtils';
- import { IObfuscatedCode } from '../interfaces/source-code/IObfuscatedCode';
- import { initializable } from '../decorators/Initializable';
- import { SourceMapMode } from '../enums/source-map/SourceMapMode';
- import { IOptions } from '../interfaces/options/IOptions';
- @injectable()
- export class ObfuscatedCode implements IObfuscatedCode {
- /**
- * @type {ICryptUtils}
- */
- private readonly cryptUtils: ICryptUtils;
- /**
- * @type {string}
- */
- @initializable()
- private obfuscatedCode!: string;
- /**
- * @type {IOptions}
- */
- private readonly options: IOptions;
- /**
- * @type {string}
- */
- @initializable()
- private sourceMap!: string;
- constructor (
- @inject(ServiceIdentifiers.ICryptUtils) cryptUtils: ICryptUtils,
- @inject(ServiceIdentifiers.IOptions) options: IOptions
- ) {
- this.cryptUtils = cryptUtils;
- this.options = options;
- }
- /**
- * @param {string} obfuscatedCode
- * @param {string} sourceMap
- */
- public initialize (obfuscatedCode: string, sourceMap: string): void {
- this.obfuscatedCode = obfuscatedCode;
- this.sourceMap = sourceMap;
- }
- /**
- * @returns {string}
- */
- public getObfuscatedCode (): string {
- return this.correctObfuscatedCode();
- }
- /**
- * @returns {string}
- */
- public getSourceMap (): string {
- return this.sourceMap;
- }
- /**
- * @returns {string}
- */
- public toString (): string {
- return this.obfuscatedCode;
- }
- /**
- * @returns {string}
- */
- private correctObfuscatedCode (): string {
- if (!this.sourceMap) {
- return this.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(this.sourceMap)}`;
- break;
- case SourceMapMode.Separate:
- default:
- if (!sourceMapUrl) {
- return this.obfuscatedCode;
- }
- sourceMappingUrl += sourceMapUrl;
- }
- return `${this.obfuscatedCode}\n${sourceMappingUrl}`;
- }
- }
|