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.
|
|
'use strict';
const Assert = require('@hapi/hoek/lib/assert'); const Clone = require('@hapi/hoek/lib/clone');
const Template = require('./template');
const internals = {};
exports.compile = function (messages, target) {
// Single value string ('plain error message', 'template {error} message')
if (typeof messages === 'string') { Assert(!target, 'Cannot set single message string'); return new Template(messages); }
// Single value template
if (Template.isTemplate(messages)) { Assert(!target, 'Cannot set single message template'); return messages; }
// By error code { 'number.min': <string | template> }
Assert(typeof messages === 'object' && !Array.isArray(messages), 'Invalid message options');
target = target ? Clone(target) : {};
for (let code in messages) { const message = messages[code];
if (code === 'root' || Template.isTemplate(message)) {
target[code] = message; continue; }
if (typeof message === 'string') { target[code] = new Template(message); continue; }
// By language { english: { 'number.min': <string | template> } }
Assert(typeof message === 'object' && !Array.isArray(message), 'Invalid message for', code);
const language = code; target[language] = target[language] || {};
for (code in message) { const localized = message[code];
if (code === 'root' || Template.isTemplate(localized)) {
target[language][code] = localized; continue; }
Assert(typeof localized === 'string', 'Invalid message for', code, 'in', language); target[language][code] = new Template(localized); } }
return target; };
exports.decompile = function (messages) {
// By error code { 'number.min': <string | template> }
const target = {}; for (let code in messages) { const message = messages[code];
if (code === 'root') { target.root = message; continue; }
if (Template.isTemplate(message)) { target[code] = message.describe({ compact: true }); continue; }
// By language { english: { 'number.min': <string | template> } }
const language = code; target[language] = {};
for (code in message) { const localized = message[code];
if (code === 'root') { target[language].root = localized; continue; }
target[language][code] = localized.describe({ compact: true }); } }
return target; };
exports.merge = function (base, extended) {
if (!base) { return exports.compile(extended); }
if (!extended) { return base; }
// Single value string
if (typeof extended === 'string') { return new Template(extended); }
// Single value template
if (Template.isTemplate(extended)) { return extended; }
// By error code { 'number.min': <string | template> }
const target = Clone(base);
for (let code in extended) { const message = extended[code];
if (code === 'root' || Template.isTemplate(message)) {
target[code] = message; continue; }
if (typeof message === 'string') { target[code] = new Template(message); continue; }
// By language { english: { 'number.min': <string | template> } }
Assert(typeof message === 'object' && !Array.isArray(message), 'Invalid message for', code);
const language = code; target[language] = target[language] || {};
for (code in message) { const localized = message[code];
if (code === 'root' || Template.isTemplate(localized)) {
target[language][code] = localized; continue; }
Assert(typeof localized === 'string', 'Invalid message for', code, 'in', language); target[language][code] = new Template(localized); } }
return target; };
|