Current File : //lib/node_modules/bower/lib/node_modules/stringify-object/index.js |
'use strict';
function isObject(val) {
return val === Object(val);
}
function isEmpty(val) {
if (val === undefined || val === null) {
return true;
}
if (Array.isArray(val) || typeof val === 'string') {
return val.length === 0;
}
for (var key in val) {
if (Object.prototype.hasOwnProperty.call(val, key)) {
return false;
}
}
return true;
}
module.exports = function (val, opts, pad) {
var cache = [];
return (function stringify(val, opts, pad) {
var objKeys;
opts = opts || {};
opts.indent = opts.indent || '\t';
pad = pad || '';
if (typeof val === 'number' ||
typeof val === 'boolean' ||
val === null ||
val === undefined) {
return val;
}
if (val instanceof Date) {
return "new Date('" + val.toISOString() + "')";
}
if (Array.isArray(val)) {
if (isEmpty(val)) {
return '[]';
}
return '[\n' + val.map(function (el, i) {
var eol = val.length - 1 === i ? '\n' : ',\n';
return pad + opts.indent + stringify(el, opts, pad + opts.indent) + eol;
}).join('') + pad + ']';
}
if (isObject(val)) {
if (cache.indexOf(val) !== -1) {
return null;
}
if (isEmpty(val)) {
return '{}';
}
cache.push(val);
objKeys = Object.keys(val);
return '{\n' + objKeys.map(function (el, i) {
var eol = objKeys.length - 1 === i ? '\n' : ',\n';
var key = /^[a-z$_][a-z$_0-9]*$/i.test(el) ? el : stringify(el, opts);
return pad + opts.indent + key + ': ' + stringify(val[el], opts, pad + opts.indent) + eol;
}).join('') + pad + '}';
}
if (opts.singleQuotes === false) {
return '"' + val.replace(/"/g, '\\\"') + '"';
} else {
return "'" + val.replace(/'/g, "\\\'") + "'";
}
})(val, opts, pad);
};