splitwise
Version:
A JavaScript SDK for the Splitwise API.
57 lines (46 loc) • 1.35 kB
JavaScript
module.exports = (function () {
'use script'
const R = require('./ramda.js')
const { isString, mapToObject } = require('./utils.js')
const LOG_LEVELS = {
INFO: 'Info',
ERROR: 'Error'
}
const LOG_LEVEL_NAMES = R.values(LOG_LEVELS)
const LEVEL_METHOD_NAMES = {
[LOG_LEVELS.INFO]: 'info',
[LOG_LEVELS.ERROR]: 'error'
}
const LEVEL_RANK = {
[LOG_LEVELS.INFO]: 0,
[LOG_LEVELS.ERROR]: 1
}
const getLogThreshold = (providedThreshold) => {
if (!isString(providedThreshold)) {
return LOG_LEVELS.INFO
}
const threshold = R.find(levelName => (
levelName.toLowerCase() === providedThreshold.toLowerCase()
), LOG_LEVEL_NAMES)
return threshold || LOG_LEVELS.INFO
}
const getLogger = (logger, providedLevel) => {
if (!logger) {
return () => { }
}
const thresholdLevel = getLogThreshold(providedLevel)
const levelToMethodMapping = mapToObject(
levelName => (
logger[LEVEL_METHOD_NAMES[levelName]] ||
(message => logger(`${levelName}: ${message}`))
),
LOG_LEVEL_NAMES
)
return ({ level = LOG_LEVELS.INFO, message }) => {
if (levelToMethodMapping[level] && LEVEL_RANK[level] >= LEVEL_RANK[thresholdLevel]) {
levelToMethodMapping[level](message)
}
}
}
return { LOG_LEVELS, getLogger }
}())