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 | import type { format as FormatFunc, TransformFunction } from './type'
/*
* Displays a helpful message and the source of
* the format when it is invalid.
*/
class InvalidFormatError extends Error {
// eslint-disable-next-line ts/no-unsafe-function-type
constructor(formatFn: Function) {
super(`Format functions must be synchronous taking 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`.
*/
const format = function<T extends Record<any, any>>(formatFn: TransformFunction<T>) {
if (formatFn.length > 2) {
throw new InvalidFormatError(formatFn)
}
/*
* function Format (options)
* Base prototype which calls a `_format`
* function and pushes the result.
*/
class Format {
options?: T
constructor(options: T = {} as T) {
this.options = options
}
transform = formatFn
}
//
// Create a function which returns new instances of
// Format for simple syntax like:
//
// require('winston').formats.json();
//
function createFormatWrap(opts?: T) {
return new Format(opts)
}
//
// Expose the Format through the create function
// for testability.
//
createFormatWrap.Format = Format
return createFormatWrap
}
export default format as unknown as FormatFunc
|