'use strict'; /* * Displays a helpful message and the source of * the format when it is invalid. */ class InvalidFormatError extends Error { constructor(formatFn) { super(`Format functions must be synchronous taking a two arguments: (info, opts) Found: ${formatFn.toString().split('\n')[0]}\n`); Error.captureStackTrace(this, InvalidFormatError); } } /* * function format (formatFn) * Returns a create function for the `formatFn`. */ module.exports = formatFn => { if (formatFn.length > 2) { throw new InvalidFormatError(formatFn); } /* * function Format (options) * Base prototype which calls a `_format` * function and pushes the result. */ function Format(options = {}) { this.options = options; } Format.prototype.transform = formatFn; // // Create a function which returns new instances of // FormatWrap for simple syntax like: // // require('winston').formats.json(); // function createFormatWrap(opts) { return new Format(opts); } // // Expose the FormatWrap through the create function // for testability. // createFormatWrap.Format = Format; return createFormatWrap; };