All files / src message.js

100% Statements 34/34
81.25% Branches 13/16
100% Functions 5/5
100% Lines 12/12
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 493x                           3x                       15x   3x   4x   8x       8x     8x 8x 8x 8x       5x    
// @flow
import debug from 'debug'
import get from 'lodash/get'
 
const dbg = debug('woonerf:message')
 
/**
 * Expose a Set of all the keys used
 */
export const KeysUsed = new Set()
 
/**
 * Set the messages object
 */
export function setMessages (newMessages) {
  messages = newMessages
}
 
let messages = {}
if (process.env.MESSAGES) {
  setMessages(JSON.parse(process.env.MESSAGES))
}
 
/**
 * Requires a key, defaultMessage and parameters are optional
 */
export default function getMessage (key: string, defaultMessage?: string | Object, parameters?: Object): string {
  if (defaultMessage == null) {
    defaultMessage = ''
    parameters = {}
  } else if (typeof defaultMessage === 'object') {E
    parameters = defaultMessage
    defaultMessage = ''
  }
 
  // Store the used key
  KeysUsed.add(key)
 
  // Get the message with "lodash/get" to allow nested keys ('noun.action' => {noun: {action: 'value'}})
  const msg = get(messages, key, defaultMessage)
  const result = parameters ? replaceMessage(msg, parameters) : msg
  dbg(key, result)
  return result
}
 
function replaceMessage (msg, data) {
  return msg.replace(new RegExp('%\\((' + Object.keys(data).join('|') + ')\\)', 'g'), (m, key) => data[key] || m)
}