diff options
Diffstat (limited to 'node_modules/core-js/modules/es.json.stringify.js')
| -rw-r--r-- | node_modules/core-js/modules/es.json.stringify.js | 32 |
1 files changed, 32 insertions, 0 deletions
diff --git a/node_modules/core-js/modules/es.json.stringify.js b/node_modules/core-js/modules/es.json.stringify.js new file mode 100644 index 0000000..56ba89f --- /dev/null +++ b/node_modules/core-js/modules/es.json.stringify.js @@ -0,0 +1,32 @@ +var $ = require('../internals/export'); +var getBuiltIn = require('../internals/get-built-in'); +var fails = require('../internals/fails'); + +var $stringify = getBuiltIn('JSON', 'stringify'); +var re = /[\uD800-\uDFFF]/g; +var low = /^[\uD800-\uDBFF]$/; +var hi = /^[\uDC00-\uDFFF]$/; + +var fix = function (match, offset, string) { + var prev = string.charAt(offset - 1); + var next = string.charAt(offset + 1); + if ((low.test(match) && !hi.test(next)) || (hi.test(match) && !low.test(prev))) { + return '\\u' + match.charCodeAt(0).toString(16); + } return match; +}; + +var FORCED = fails(function () { + return $stringify('\uDF06\uD834') !== '"\\udf06\\ud834"' + || $stringify('\uDEAD') !== '"\\udead"'; +}); + +if ($stringify) { + // https://github.com/tc39/proposal-well-formed-stringify + $({ target: 'JSON', stat: true, forced: FORCED }, { + // eslint-disable-next-line no-unused-vars + stringify: function stringify(it, replacer, space) { + var result = $stringify.apply(null, arguments); + return typeof result == 'string' ? result.replace(re, fix) : result; + } + }); +} |
