| 'use strict'; | |
| const util = require('util'); | |
| const debug = require('debug')('log4js:configuration'); | |
| const preProcessingListeners = []; | |
| const listeners = []; | |
| const not = thing => !thing; | |
| const anObject = thing => thing && typeof thing === 'object' && !Array.isArray(thing); | |
| const validIdentifier = thing => /^[A-Za-z][A-Za-z0-9_]*$/g.test(thing); | |
| const anInteger = thing => thing && typeof thing === 'number' && Number.isInteger(thing); | |
| const addListener = (fn) => { | |
| listeners.push(fn); | |
| debug(`Added listener, now ${listeners.length} listeners`); | |
| }; | |
| const addPreProcessingListener = (fn) => { | |
| preProcessingListeners.push(fn); | |
| debug(`Added pre-processing listener, now ${preProcessingListeners.length} listeners`); | |
| }; | |
| const throwExceptionIf = (config, checks, message) => { | |
| const tests = Array.isArray(checks) ? checks : [checks]; | |
| tests.forEach((test) => { | |
| if (test) { | |
| throw new Error(`Problem with log4js configuration: (${util.inspect(config, { depth: 5 })})` | |
| + ` - ${message}`); | |
| } | |
| }); | |
| }; | |
| const configure = (candidate) => { | |
| debug('New configuration to be validated: ', candidate); | |
| throwExceptionIf(candidate, not(anObject(candidate)), 'must be an object.'); | |
| debug(`Calling pre-processing listeners (${preProcessingListeners.length})`); | |
| preProcessingListeners.forEach(listener => listener(candidate)); | |
| debug('Configuration pre-processing finished.'); | |
| debug(`Calling configuration listeners (${listeners.length})`); | |
| listeners.forEach(listener => listener(candidate)); | |
| debug('Configuration finished.'); | |
| }; | |
| module.exports = { | |
| configure, | |
| addListener, | |
| addPreProcessingListener, | |
| throwExceptionIf, | |
| anObject, | |
| anInteger, | |
| validIdentifier, | |
| not | |
| }; |