diff options
Diffstat (limited to 'node_modules/stringify-object/index.js')
-rw-r--r-- | node_modules/stringify-object/index.js | 113 |
1 files changed, 113 insertions, 0 deletions
diff --git a/node_modules/stringify-object/index.js b/node_modules/stringify-object/index.js new file mode 100644 index 000000000..502982de5 --- /dev/null +++ b/node_modules/stringify-object/index.js @@ -0,0 +1,113 @@ +'use strict'; +var isRegexp = require('is-regexp'); +var isPlainObj = require('is-plain-obj'); + +module.exports = function (val, opts, pad) { + var seen = []; + + return (function stringify(val, opts, pad) { + opts = opts || {}; + opts.indent = opts.indent || '\t'; + pad = pad || ''; + var tokens; + if(opts.inlineCharacterLimit == void 0) { + tokens = { + newLine: '\n', + newLineOrSpace: '\n', + pad: pad, + indent: pad + opts.indent + }; + } else { + tokens = { + newLine: '@@__STRINGIFY_OBJECT_NEW_LINE__@@', + newLineOrSpace: '@@__STRINGIFY_OBJECT_NEW_LINE_OR_SPACE__@@', + pad: '@@__STRINGIFY_OBJECT_PAD__@@', + indent: '@@__STRINGIFY_OBJECT_INDENT__@@' + } + } + var expandWhiteSpace = function(string) { + if (opts.inlineCharacterLimit == void 0) { return string; } + var oneLined = string. + replace(new RegExp(tokens.newLine, 'g'), ''). + replace(new RegExp(tokens.newLineOrSpace, 'g'), ' '). + replace(new RegExp(tokens.pad + '|' + tokens.indent, 'g'), ''); + + if(oneLined.length <= opts.inlineCharacterLimit) { + return oneLined; + } else { + return string. + replace(new RegExp(tokens.newLine + '|' + tokens.newLineOrSpace, 'g'), '\n'). + replace(new RegExp(tokens.pad, 'g'), pad). + replace(new RegExp(tokens.indent, 'g'), pad + opts.indent); + } + }; + + if (seen.indexOf(val) !== -1) { + return '"[Circular]"'; + } + + if (val === null || + val === undefined || + typeof val === 'number' || + typeof val === 'boolean' || + typeof val === 'function' || + isRegexp(val)) { + return String(val); + } + + if (val instanceof Date) { + return 'new Date(\'' + val.toISOString() + '\')'; + } + + if (Array.isArray(val)) { + if (val.length === 0) { + return '[]'; + } + + seen.push(val); + + var ret = '[' + tokens.newLine + val.map(function (el, i) { + var eol = val.length - 1 === i ? tokens.newLine : ',' + tokens.newLineOrSpace; + return tokens.indent + stringify(el, opts, pad + opts.indent) + eol; + }).join('') + tokens.pad + ']'; + + seen.pop(val); + + return expandWhiteSpace(ret); + } + + if (isPlainObj(val)) { + var objKeys = Object.keys(val); + + if (objKeys.length === 0) { + return '{}'; + } + + seen.push(val); + + var ret = '{' + tokens.newLine + objKeys.map(function (el, i) { + if (opts.filter && !opts.filter(val, el)) { + return ''; + } + + var eol = objKeys.length - 1 === i ? tokens.newLine : ',' + tokens.newLineOrSpace; + var key = /^[a-z$_][a-z$_0-9]*$/i.test(el) ? el : stringify(el, opts); + return tokens.indent + key + ': ' + stringify(val[el], opts, pad + opts.indent) + eol; + }).join('') + tokens.pad + '}'; + + seen.pop(val); + + return expandWhiteSpace(ret); + } + + val = String(val).replace(/[\r\n]/g, function (x) { + return x === '\n' ? '\\n' : '\\r'; + }); + + if (opts.singleQuotes === false) { + return '"' + val.replace(/"/g, '\\\"') + '"'; + } + + return '\'' + val.replace(/'/g, '\\\'') + '\''; + })(val, opts, pad); +}; |