UNPKG

dnssd

Version:

Bonjour/Avahi-like service discovery in pure JavaScript

117 lines (88 loc) 3.09 kB
'use strict'; var misc = require('./misc'); var enabledNamespaces = []; var disabledNamespaces = []; var enabledVerbose = []; var disabledVerbose = []; var colors = ['blue', 'green', 'magenta', 'yellow', 'cyan', 'red']; var colorsIndex = 0; var noop = function noop() {}; noop.verbose = noop; noop.v = noop; noop.isEnabled = false; noop.verbose.isEnabled = false; noop.v.isEnabled = false; var logger = console.log; // initialize if (process.env.DEBUG) { process.env.DEBUG.replace(/\*/g, '.*?').split(',').filter(function (s) { return !!s; }).forEach(function (namespace) { namespace.substr(0, 1) === '-' ? disabledNamespaces.push(namespace.substr(1)) : enabledNamespaces.push(namespace); }); } if (process.env.VERBOSE) { process.env.VERBOSE.replace(/\*/g, '.*?').split(',').filter(function (s) { return !!s; }).forEach(function (namespace) { namespace.substr(0, 1) === '-' ? disabledVerbose.push(namespace.substr(1)) : enabledVerbose.push(namespace); }); } function namespaceIsEnabled(name) { if (!enabledNamespaces.length) return false; function matches(namespace) { return name.match(new RegExp('^' + namespace + '$')); } if (disabledNamespaces.some(matches)) return false; if (enabledNamespaces.some(matches)) return true; return false; } function namespaceIsVerbose(name) { if (!enabledVerbose.length) return false; function matches(namespace) { return name.match(new RegExp('^' + namespace + '$')); } if (disabledVerbose.some(matches)) return false; if (enabledVerbose.some(matches)) return true; return false; } function timestamp() { var now = new Date(); var time = [misc.padStart(now.getHours(), 2, '0'), misc.padStart(now.getMinutes(), 2, '0'), misc.padStart(now.getSeconds(), 2, '0'), misc.padStart(now.getMilliseconds(), 3, '0')]; return '[' + time.join(':') + ']'; } /** * Returns debug fn if debug is enabled, noop if not * * @param {string} namespace * @return {function} */ module.exports = function debug(namespace) { if (!namespaceIsEnabled(namespace)) return noop; // shorten Zeroconf:filename.js -> filename… becuase its driving me crazy var shortname = namespace.replace('dnssd:', ''); if (shortname.length > 10) shortname = shortname.substr(0, 9) + '…'; if (shortname.length < 10) shortname = misc.pad(shortname, 10); var color = colors[colorsIndex++ % colors.length]; var prefix = misc.color('•' + shortname, color); function logFn(msg) { // '•Query.js [10:41:54:482] ' var output = prefix + ' ' + misc.color(timestamp(), 'grey') + ' '; for (var _len = arguments.length, args = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) { args[_key - 1] = arguments[_key]; } output += misc.format.apply(misc, [msg].concat(args)); logger(output); } logFn.isEnabled = true; if (namespaceIsVerbose(namespace)) { logFn.verbose = logFn; logFn.v = logFn; logFn.verbose.isEnabled = true; logFn.v.isEnabled = true; } else { logFn.verbose = noop; logFn.v = noop; } return logFn; };