Press n or j to go to the next uncovered block, b, p or k for the previous block.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 | 7x 7x 9x 9x 4x 3x 3x 3x 3x 3x 3x 4x 3x 2x 3x 2x 1x 2x 1x 1x 1x 1x 2x | /** * container.js: Inversion of control container for winston logger instances. * * (C) 2010 Charlie Robbins * MIT LICENCE */ 'use strict'; const createLogger = require('./create-logger'); /** * Inversion of control container for winston logger instances. * @type {Container} */ module.exports = class Container { /** * Constructor function for the Container object responsible for managing a * set of `winston.Logger` instances based on string ids. * @param {!Object} [options={}] - Default pass-thru options for Loggers. */ constructor(options = {}) { this.loggers = new Map(); this.options = options; } /** * Retreives a `winston.Logger` instance for the specified `id`. If an * instance does not exist, one is created. * @param {!string} id - The id of the Logger to get. * @param {?Object} [options] - Options for the Logger instance. * @returns {Logger} - A configured Logger instance with a specified id. */ add(id, options) { if (!this.loggers.has(id)) { // Remark: Simple shallow clone for configuration options in case we pass // in instantiated protoypal objects options = Object.assign({}, options || this.options); const existing = options.transports || this.options.transports; // Remark: Make sure if we have an array of transports we slice it to // make copies of those references. options.transports = existing ? existing.slice() : []; const logger = createLogger(options); logger.on('close', () => this._delete(id)); this.loggers.set(id, logger); } return this.loggers.get(id); } /** * Retreives a `winston.Logger` instance for the specified `id`. If * an instance does not exist, one is created. * @param {!string} id - The id of the Logger to get. * @param {?Object} [options] - Options for the Logger instance. * @returns {Logger} - A configured Logger instance with a specified id. */ get(id, options) { return this.add(id, options); } /** * Check if the container has a logger with the id. * @param {?string} id - The id of the Logger instance to find. * @returns {boolean} - Boolean value indicating if this instance has a * logger with the specified `id`. */ has(id) { return !!this.loggers.has(id); } /** * Closes a `Logger` instance with the specified `id` if it exists. * If no `id` is supplied then all Loggers are closed. * @param {?string} id - The id of the Logger instance to close. * @returns {undefined} */ close(id) { if (id) { return this._removeLogger(id); } this.loggers.forEach((val, key) => this._removeLogger(key)); } /** * Remove a logger based on the id. * @param {!string} id - The id of the logger to remove. * @returns {undefined} * @private */ _removeLogger(id) { if (!this.loggers.has(id)) { return; } const logger = this.loggers.get(id); logger.close(); this._delete(id); } /** * Deletes a `Logger` instance with the specified `id`. * @param {!string} id - The id of the Logger instance to delete from * container. * @returns {undefined} * @private */ _delete(id) { this.loggers.delete(id); } }; |