resume-client-socket.io
Version:
Resume Client API for Socket.IO and Node.JS - Medical Speech to Summarized Text
63 lines (49 loc) • 1.44 kB
JavaScript
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