53 lines
1.1 KiB
JavaScript
53 lines
1.1 KiB
JavaScript
|
'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;
|
||
|
};
|