@appium/support
Version:
Support libs used across Appium packages
152 lines • 5.72 kB
JavaScript
;
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
var desc = Object.getOwnPropertyDescriptor(m, k);
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
desc = { enumerable: true, get: function() { return m[k]; } };
}
Object.defineProperty(o, k2, desc);
}) : (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
o[k2] = m[k];
}));
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
Object.defineProperty(o, "default", { enumerable: true, value: v });
}) : function(o, v) {
o["default"] = v;
});
var __importStar = (this && this.__importStar) || (function () {
var ownKeys = function(o) {
ownKeys = Object.getOwnPropertyNames || function (o) {
var ar = [];
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
return ar;
};
return ownKeys(o);
};
return function (mod) {
if (mod && mod.__esModule) return mod;
var result = {};
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
__setModuleDefault(result, mod);
return result;
};
})();
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.log = exports.LEVELS = void 0;
exports.getLogger = getLogger;
exports.markSensitive = markSensitive;
const logger_1 = __importStar(require("@appium/logger"));
const lodash_1 = __importDefault(require("lodash"));
exports.LEVELS = [
'silly',
'verbose',
'debug',
'info',
'http',
'warn',
'error',
];
const MAX_LOG_RECORDS_COUNT = 3000;
const globalWithNpmlog = globalThis;
// mock log object is used in testing mode to silence the output
const MOCK_LOG = {
unwrap: () => ({
loadSecureValuesPreprocessingRules: () => Promise.resolve({ issues: [], rules: [] }),
level: 'verbose',
prefix: '',
log: lodash_1.default.noop,
}),
...lodash_1.default.fromPairs(exports.LEVELS.map((l) => [l, lodash_1.default.noop])),
};
exports.log = getLogger();
/**
* @param prefix - Optional log prefix
* @returns A wrapped Appium logger instance
*/
function getLogger(prefix = null) {
const { logger, defaultToVerbose } = _getLogger();
const wrappedLogger = {
unwrap: () => logger,
levels: [...exports.LEVELS],
prefix: prefix ?? undefined,
errorWithException(...args) {
this.error(...args);
return lodash_1.default.isError(args[0]) ? args[0] : new Error(args.join('\n'));
},
errorAndThrow(...args) {
throw this.errorWithException(...args);
},
updateAsyncContext(contextInfo, replace = false) {
this.unwrap().updateAsyncStorage?.(contextInfo, replace);
},
};
Object.defineProperty(wrappedLogger, 'level', {
get() {
return logger.level;
},
set(newValue) {
logger.level = newValue;
},
enumerable: true,
configurable: true,
});
const isDebugTimestampLoggingEnabled = process.env._LOG_TIMESTAMP === '1';
for (const level of exports.LEVELS) {
wrappedLogger[level] = function (...args) {
const finalPrefix = getFinalPrefix(this.prefix, isDebugTimestampLoggingEnabled);
if (args.length) {
logger[level](finalPrefix, ...args);
}
else {
logger[level](finalPrefix, '');
}
};
}
// Default to verbose when the global was not already set (first use, or standalone);
// main server will override later.
if (defaultToVerbose) {
wrappedLogger.level = 'verbose';
}
return wrappedLogger;
}
/**
* Marks arbitrary log message as sensitive.
* This message will then be replaced with the default replacer
* while being logged by any `info`, `debug`, etc. methods if the
* asyncStorage has `isSensitive` flag enabled in its async context.
* The latter is enabled by the corresponding HTTP middleware
* in response to the `X-Appium-Is-Sensitive` request header
* being set to 'true'.
*/
function markSensitive(logMessage) {
return (0, logger_1.markSensitive)(logMessage);
}
function _getLogger() {
const testingMode = process.env._TESTING === '1';
const forceLogMode = process.env._FORCE_LOGS === '1';
const defaultToVerbose = !globalWithNpmlog._global_npmlog;
const logger = testingMode && !forceLogMode
? MOCK_LOG
: (globalWithNpmlog._global_npmlog ?? logger_1.default);
if (!testingMode && !globalWithNpmlog._global_npmlog && logger === logger_1.default) {
globalWithNpmlog._global_npmlog = logger_1.default;
logger.maxRecordSize = MAX_LOG_RECORDS_COUNT;
}
return { logger, defaultToVerbose };
}
function getFinalPrefix(prefix, shouldLogTimestamp = false) {
const result = (lodash_1.default.isFunction(prefix) ? prefix() : prefix) ?? '';
if (!shouldLogTimestamp) {
return result;
}
const now = new Date();
const pad = (n, z = 2) => String(n).padStart(z, '0');
const formattedTimestamp = `[${pad(now.getHours())}-${pad(now.getMinutes())}-${pad(now.getSeconds())}:${pad(now.getMilliseconds(), 3)}]`;
return result ? `${formattedTimestamp} ${result}` : formattedTimestamp;
}
exports.default = exports.log;
//# sourceMappingURL=logging.js.map