UNPKG

wix-msi

Version:

Package node.js application to a standalone executable and pack it into a msi installer

137 lines (110 loc) 2.85 kB
'use strict' const { bgGreen: bgOK, bgRed: bgKO, bgYellow: bgWarning, bgBlue: bgInfo } = require('colorette') class ValidationMsg { constructor (level, message) { this._level = level || 'ok' this._message = message this._children = [] } get level () { return this._level } get message () { return this._message } get children () { return this._children } set level (value) { if (LEVEL[this._level] < LEVEL[value]) { this._level = value } } add (msg) { this._children.push(msg) this.level = msg.level } } const LEVEL = { ok: 0, info: 1, warning: 2, error: 3 } class Test { constructor (test, message, level = 'error') { this._message = message this._level = level this._test = test } perform (value) { const test = this._test(value) const [level, message] = test ? ['ok', `${value}`] : [this._level, this._message] return new ValidationMsg(level, message) } } class Validator { constructor (name) { this._name = name this._tests = [] } get name () { return this._name } get tests () { return this._tests } add (test) { this._tests.push(test); return this } perform (value) { const result = new ValidationMsg('ok', `${this.name}: '${value}'`) for (const test of this.tests) { result.add(test.perform(value)) } return result } } const doValidate = (values, validators) => { let isError = false for (const prop in values) { const validator = validators.find( validator => validator.name === prop ) if (validator) { const validation = validator.perform(values[prop]) const level = validation.level isError |= level === 'error' console.log(_prettify(validation)) } else { console.log(_prettify(new ValidationMsg('info', `${prop}: Not checked (no validator found)`))) } } return isError } const _prettify = (errMsg, showDetails = true) => { // "Header" let result = '' switch (errMsg.level) { case 'ok': result += bgOK('OK'); break case 'info': result += bgInfo('INFO'); break case 'warning': result += bgWarning('WARNING'); break case 'error': result += bgKO('ERROR'); break default: /* Do nothing */ } if (errMsg.message) { result += ` ${errMsg.message}` } if (showDetails) { result += errMsg.children.reduce((acc, child) => { if (child.level !== 'ok') { acc += `\n ${child.message}` } return acc }, '') } return result } // //////////////////////////////// // //////////////////////////////// // Public API // //////////////////////////////// // //////////////////////////////// module.exports = { createTest: (test, message, level) => new Test(test, message, level), createValidator: (name) => new Validator(name), doValidate }