diff options
Diffstat (limited to 'src/node_modules/javascript-obfuscator/src/source-code/ObfuscatedCode.ts')
-rw-r--r-- | src/node_modules/javascript-obfuscator/src/source-code/ObfuscatedCode.ts | 102 |
1 files changed, 102 insertions, 0 deletions
diff --git a/src/node_modules/javascript-obfuscator/src/source-code/ObfuscatedCode.ts b/src/node_modules/javascript-obfuscator/src/source-code/ObfuscatedCode.ts new file mode 100644 index 0000000..4f0e478 --- /dev/null +++ b/src/node_modules/javascript-obfuscator/src/source-code/ObfuscatedCode.ts @@ -0,0 +1,102 @@ +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 {string} + */ + @initializable() + private obfuscatedCode!: string; + + /** + * @type {string} + */ + @initializable() + private sourceMap!: string; + + /** + * @type {ICryptUtils} + */ + private readonly cryptUtils: ICryptUtils; + + /** + * @type {IOptions} + */ + private readonly options: IOptions; + + public 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}`; + } +} |