'use strict'; function maxFileSizeUnitTransform(maxLogSize) { if (typeof maxLogSize === 'number' && Number.isInteger(maxLogSize)) { return maxLogSize; } const units = { K: 1024, M: 1024 * 1024, G: 1024 * 1024 * 1024, }; const validUnit = Object.keys(units); const unit = maxLogSize.substr(maxLogSize.length - 1).toLocaleUpperCase(); const value = maxLogSize.substring(0, maxLogSize.length - 1).trim(); if (validUnit.indexOf(unit) < 0 || !Number.isInteger(Number(value))) { throw Error(`maxLogSize: "${maxLogSize}" is invalid`); } else { return value * units[unit]; } } function adapter(configAdapter, config) { const newConfig = Object.assign({}, config); Object.keys(configAdapter).forEach((key) => { if (newConfig[key]) { newConfig[key] = configAdapter[key](config[key]); } }); return newConfig; } function fileAppenderAdapter(config) { const configAdapter = { maxLogSize: maxFileSizeUnitTransform }; return adapter(configAdapter, config); } const adapters = { file: fileAppenderAdapter, fileSync: fileAppenderAdapter }; module.exports.modifyConfig = config => (adapters[config.type] ? adapters[config.type](config) : config);