aboutsummaryrefslogtreecommitdiff
path: root/node_modules/stringify-object/index.js
diff options
context:
space:
mode:
Diffstat (limited to 'node_modules/stringify-object/index.js')
-rw-r--r--node_modules/stringify-object/index.js90
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);
};