UNPKG

@appium/support

Version:

Support libs used across Appium packages

152 lines 5.72 kB
"use strict"; 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