You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							63 lines
						
					
					
						
							1.4 KiB
						
					
					
				
			
		
		
	
	
							63 lines
						
					
					
						
							1.4 KiB
						
					
					
				'use strict'
 | 
						|
 | 
						|
const { format } = require('util')
 | 
						|
 | 
						|
function build () {
 | 
						|
  const codes = {}
 | 
						|
  const emitted = new Map()
 | 
						|
 | 
						|
  function create (name, code, message) {
 | 
						|
    if (!name) throw new Error('Warning name must not be empty')
 | 
						|
    if (!code) throw new Error('Warning code must not be empty')
 | 
						|
    if (!message) throw new Error('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
 |