diff --git a/arkguard/src/initialization/CommonObject.ts b/arkguard/src/initialization/CommonObject.ts index 947d5a4ceeb3f6cc52335bb14b78182fd7c28f6d..33ceb789be4556a5c8d51ba1f140e7fbe15960f6 100644 --- a/arkguard/src/initialization/CommonObject.ts +++ b/arkguard/src/initialization/CommonObject.ts @@ -17,6 +17,8 @@ export const DEBUG: string = 'debug'; export const yellow: string = '\u001b[33m'; +export const red: string = '\u001b[31m'; + export let nameCacheMap: Map = new Map(); // Record all unobfuscated names and reasons for each file. diff --git a/arkguard/src/initialization/ConfigResolver.ts b/arkguard/src/initialization/ConfigResolver.ts index 9e39469f2e05a26c329ca91e8c50facdedc6efce..ca0e9472de659c6dd0c74049ed896cfadc2fd5bf 100644 --- a/arkguard/src/initialization/ConfigResolver.ts +++ b/arkguard/src/initialization/ConfigResolver.ts @@ -35,7 +35,7 @@ import { } from '../ArkObfuscator'; import { isDebug, isFileExist, sortAndDeduplicateStringArr, mergeSet, convertSetToArray } from './utils'; -import { nameCacheMap, yellow, unobfuscationNamesObj } from './CommonObject'; +import { nameCacheMap, yellow, red, unobfuscationNamesObj } from './CommonObject'; import { clearHistoryUnobfuscatedMap, historyAllUnobfuscatedNamesMap, historyUnobfuscatedPropMap } from './Initializer'; import { AtKeepCollections, LocalVariableCollections, UnobfuscationCollections } from '../utils/CommonCollections'; import { INameObfuscationOption } from '../configs/INameObfuscationOption'; @@ -75,6 +75,11 @@ enum OptionType { } export { OptionType as OptionTypeForTest }; +enum LoggerLevel { + WARN = 'warn', + ERROR = 'error' +} + type SystemApiContent = { ReservedPropertyNames?: string[]; ReservedGlobalNames?: string[]; @@ -1290,13 +1295,37 @@ export function printUnobfuscationReasons(configPath: string, defaultPath: strin } } - -export function generateConsumerObConfigFile(obfuscationOptions: SourceObConfig, printObfLogger: Function): void { +//This function will be called by hvigor when build in release mode and obfuscation is off. +export function generateConsumerObConfigFile(obfuscationOptions: SourceObConfig, printObfLogger: Function | Object): void { const projectConfig = { obfuscationOptions, compileHar: true }; - const obConfig: ObConfigResolver = new ObConfigResolver(projectConfig, printObfLogger); + let obfLoggerPrinter = generateobfLoggerPrinter(printObfLogger); + const obConfig: ObConfigResolver = new ObConfigResolver(projectConfig, obfLoggerPrinter); obConfig.resolveObfuscationConfigs(); } +export function generateobfLoggerPrinter(obfLogger: any): Function { + if (typeof obfLogger === 'function') { + return obfLogger; + } else { + return (errorInfo: string, errorCodeInfo: HvigorErrorInfo | string, + level: string) => { + const isNewLogger: boolean = obfLogger.printError && obfLogger.printWarn; + switch (level) { + case LoggerLevel.ERROR: + isNewLogger ? obfLogger.printError(errorCodeInfo) : + obfLogger.error(red, errorInfo); + return; + case LoggerLevel.WARN: + isNewLogger ? obfLogger.printWarn(errorCodeInfo) : + obfLogger.warn(yellow, errorInfo); + return; + default: + return; + } + } + } +} + export function mangleFilePath(originalPath: string): string { const mangledFilePath = renameFileNameModule.getMangleCompletePath(originalPath); return mangledFilePath; diff --git a/arkguard/test/ut/initialization/ConfigResolver.spec.ts b/arkguard/test/ut/initialization/ConfigResolver.spec.ts index f5b9bc480a08896c7d224991d512017553b34552..c17213d37096736cbbdcd0beaf5eb42f84d8d530 100644 --- a/arkguard/test/ut/initialization/ConfigResolver.spec.ts +++ b/arkguard/test/ut/initialization/ConfigResolver.spec.ts @@ -35,7 +35,8 @@ import { SourceObConfig, Obfuscation, printUnobfuscationReasons, - clearNameCache + clearNameCache, + generateobfLoggerPrinter } from '../../../src/initialization/ConfigResolver'; import { HvigorErrorInfo, PropCollections, renameFileNameModule } from '../../../src/ArkObfuscator'; import { @@ -2184,4 +2185,28 @@ describe('test for ConfigResolve', function() { FileUtils.deleteFile(atKeepExportedPath); }); }); + + describe('generateobfLoggerPrinter', () => { + it('should print info if use function', () => { + let obfLoggerPrinter = generateobfLoggerPrinter(printObfLogger); + const stub = sinon.stub(console, 'warn'); + const errorMessage = 'test log print1'; + obfLoggerPrinter(errorMessage, errorMessage, 'warn'); + expect(stub.calledWith(errorMessage)).to.be.true; + stub.restore(); + }); + + it('should print info if use object', () => { + const logger = { + warn: (color: string, info: string) => console.warn(info), + error: (color: string, info: string) => console.error(info) + }; + let obfLoggerPrinter = generateobfLoggerPrinter(logger); + const stub = sinon.stub(console, 'warn'); + const errorMessage = 'test log print2'; + obfLoggerPrinter(errorMessage, errorMessage, 'warn'); + expect(stub.calledWith(errorMessage)).to.be.true; + stub.restore(); + }); + }); });