UNPKG

pi-test-data

Version:
63 lines (49 loc) 1.44 kB
'use strict' const { format } = require('util') function build () { const codes = {} const emitted = new Map() function create (name, code, message) { if (!name) throw new Error('Fastify warning name must not be empty') if (!code) throw new Error('Fastify warning code must not be empty') if (!message) throw new Error('Fastify warning message must not be empty') code = code.toUpperCase() if (codes[code] !== undefined) { throw new Error(`The code '${code}' already exist`) } function buildWarnOpts (a, b, c) { // more performant than spread (...) operator let formatted if (a && b && c) { formatted = format(message, a, b, c) } else if (a && b) { formatted = format(message, a, b) } else if (a) { formatted = format(message, a) } else { formatted = message } return { code, name, message: formatted } } emitted.set(code, false) codes[code] = buildWarnOpts return codes[code] } function emit (code, a, b, c) { if (codes[code] === undefined) throw new Error(`The code '${code}' does not exist`) if (emitted.get(code) === true) return emitted.set(code, true) const warning = codes[code](a, b, c) process.emitWarning(warning.message, warning.name, warning.code) } return { create, emit, emitted } } module.exports = build