lib/format/format.js

/* global Map Set Promise */
var registry = require('./registry');
var formatObject = require('./formatObject');
var formatArray = require('./formatArray');
var formatString = require('./formatString');

// Objects
registry.addType(function(v) { return typeof v === 'object'; }, formatObject);

// Arrays
registry.addType(Array.isArray, formatArray);

// Strings
registry.addType(function(v) { return typeof v === 'string'; }, formatString);

// Promises
if (typeof Promise != 'undefined') {
  var formatPromise = require('./formatPromise');
  registry.addType(function(v) {
    return v && typeof v.then == 'function';
  }, formatPromise);
}

// Maps
if (typeof Map != 'undefined') {
  var formatMap = require('./formatMap');
  registry.addType(function(v) { return v instanceof Map; }, formatMap);
}

// Sets
if (typeof Set != 'undefined') {
  var formatSet = require('./formatSet');
  registry.addType(function(v) { return v instanceof Set; }, formatSet);
}

/** Global format function
    @protected
*/
function format(value, opt_options) {
  return registry.format(value, opt_options);
}

module.exports = format;