UNPKG

blueconfig

Version:

Merge and validate your config depending of your schema, forked from node-convict.

113 lines (92 loc) 2.04 kB
/* * blueconfig-format * Standard format for blueconfig */ function assert(assertion, err_msg) { if (!assertion) { throw new Error(err_msg) } } function toInt(value) { return (typeof value !== 'undefined') ? parseInt(value, 10) : value } function isWindowsNamedPipe(x) { return String(x).includes('\\\\.\\pipe\\') } /** * @memberof standardFormat */ const int = { name: 'int', coerce: (value) => toInt(value), validate: function(value) { assert(Number.isInteger(value), 'must be an integer') } } /** * @memberof standardFormat */ const integer = { name: 'integer', coerce: int.coerce, validate: int.validate } /** * @memberof standardFormat */ const nat = { name: 'nat', coerce: (value) => toInt(value), validate: function(value) { assert(Number.isInteger(value) && value >= 0, 'must be a positive integer') } } /** * @memberof standardFormat */ const port = { name: 'port', coerce: (value) => toInt(value), validate: function(value) { assert(Number.isInteger(value) && value >= 0 && value <= 65535, 'ports must be within range 0 - 65535') } } /** * @memberof standardFormat */ const windows_named_pipe = { name: 'windows_named_pipe', validate: function(value) { assert(isWindowsNamedPipe(value), 'must be a valid pipe') } } /** * @memberof standardFormat */ const port_or_windows_named_pipe = { name: 'port_or_windows_named_pipe', coerce: (v) => (isWindowsNamedPipe(v)) ? v : parseInt(v, 10), validate: function(value) { if (!isWindowsNamedPipe(value)) { try { port.validate(value) } catch (err) { // change error message assert(false, 'must be a windows named pipe or a number within range 0 - 65535') } } } } /** * Standard format * * @name standardFormat * @class */ module.exports = { int, integer, nat, port, windows_named_pipe, port_or_windows_named_pipe }