diff options
Diffstat (limited to 'node_modules/stringify-object/index.js')
-rw-r--r-- | node_modules/stringify-object/index.js | 90 |
1 files changed, 54 insertions, 36 deletions
diff --git a/node_modules/stringify-object/index.js b/node_modules/stringify-object/index.js index 502982de5..4a55bd9ec 100644 --- a/node_modules/stringify-object/index.js +++ b/node_modules/stringify-object/index.js @@ -1,20 +1,23 @@ 'use strict'; -var isRegexp = require('is-regexp'); -var isPlainObj = require('is-plain-obj'); +const isRegexp = require('is-regexp'); +const isObj = require('is-obj'); +const getOwnEnumPropSymbols = require('get-own-enumerable-property-symbols'); -module.exports = function (val, opts, pad) { - var seen = []; +module.exports = (val, opts, pad) => { + const seen = []; return (function stringify(val, opts, pad) { opts = opts || {}; opts.indent = opts.indent || '\t'; pad = pad || ''; - var tokens; - if(opts.inlineCharacterLimit == void 0) { + + let tokens; + + if (opts.inlineCharacterLimit === undefined) { tokens = { newLine: '\n', newLineOrSpace: '\n', - pad: pad, + pad, indent: pad + opts.indent }; } else { @@ -23,23 +26,27 @@ module.exports = function (val, opts, pad) { 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) { + + const expandWhiteSpace = string => { + if (opts.inlineCharacterLimit === undefined) { + return string; + } + + const 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); } + + 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) { @@ -51,12 +58,13 @@ module.exports = function (val, opts, pad) { typeof val === 'number' || typeof val === 'boolean' || typeof val === 'function' || + typeof val === 'symbol' || isRegexp(val)) { return String(val); } if (val instanceof Date) { - return 'new Date(\'' + val.toISOString() + '\')'; + return `new Date('${val.toISOString()}')`; } if (Array.isArray(val)) { @@ -66,9 +74,13 @@ module.exports = function (val, opts, pad) { 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; + const ret = '[' + tokens.newLine + val.map((el, i) => { + const eol = val.length - 1 === i ? tokens.newLine : ',' + tokens.newLineOrSpace; + let value = stringify(el, opts, pad + opts.indent); + if (opts.transform) { + value = opts.transform(val, i, value); + } + return tokens.indent + value + eol; }).join('') + tokens.pad + ']'; seen.pop(val); @@ -76,8 +88,8 @@ module.exports = function (val, opts, pad) { return expandWhiteSpace(ret); } - if (isPlainObj(val)) { - var objKeys = Object.keys(val); + if (isObj(val)) { + const objKeys = Object.keys(val).concat(getOwnEnumPropSymbols(val)); if (objKeys.length === 0) { return '{}'; @@ -85,14 +97,20 @@ module.exports = function (val, opts, pad) { seen.push(val); - var ret = '{' + tokens.newLine + objKeys.map(function (el, i) { + const ret = '{' + tokens.newLine + objKeys.map((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; + const eol = objKeys.length - 1 === i ? tokens.newLine : ',' + tokens.newLineOrSpace; + const isSymbol = typeof el === 'symbol'; + const isClassic = !isSymbol && /^[a-z$_][a-z$_0-9]*$/i.test(el); + const key = isSymbol || isClassic ? el : stringify(el, opts); + let value = stringify(val[el], opts, pad + opts.indent); + if (opts.transform) { + value = opts.transform(val, el, value); + } + return tokens.indent + String(key) + ': ' + value + eol; }).join('') + tokens.pad + '}'; seen.pop(val); @@ -100,14 +118,14 @@ module.exports = function (val, opts, pad) { return expandWhiteSpace(ret); } - val = String(val).replace(/[\r\n]/g, function (x) { - return x === '\n' ? '\\n' : '\\r'; - }); + val = String(val).replace(/[\r\n]/g, x => x === '\n' ? '\\n' : '\\r'); if (opts.singleQuotes === false) { - return '"' + val.replace(/"/g, '\\\"') + '"'; + val = val.replace(/"/g, '\\"'); + return `"${val}"`; } - return '\'' + val.replace(/'/g, '\\\'') + '\''; + val = val.replace(/\\?'/g, '\\\''); + return `'${val}'`; })(val, opts, pad); }; |