[d24f17c] | 1 | var _includes =
|
---|
| 2 | /*#__PURE__*/
|
---|
| 3 | require("./_includes.js");
|
---|
| 4 |
|
---|
| 5 | var _map =
|
---|
| 6 | /*#__PURE__*/
|
---|
| 7 | require("./_map.js");
|
---|
| 8 |
|
---|
| 9 | var _quote =
|
---|
| 10 | /*#__PURE__*/
|
---|
| 11 | require("./_quote.js");
|
---|
| 12 |
|
---|
| 13 | var _toISOString =
|
---|
| 14 | /*#__PURE__*/
|
---|
| 15 | require("./_toISOString.js");
|
---|
| 16 |
|
---|
| 17 | var keys =
|
---|
| 18 | /*#__PURE__*/
|
---|
| 19 | require("../keys.js");
|
---|
| 20 |
|
---|
| 21 | var reject =
|
---|
| 22 | /*#__PURE__*/
|
---|
| 23 | require("../reject.js");
|
---|
| 24 |
|
---|
| 25 | function _toString(x, seen) {
|
---|
| 26 | var recur = function recur(y) {
|
---|
| 27 | var xs = seen.concat([x]);
|
---|
| 28 | return _includes(y, xs) ? '<Circular>' : _toString(y, xs);
|
---|
| 29 | }; // mapPairs :: (Object, [String]) -> [String]
|
---|
| 30 |
|
---|
| 31 |
|
---|
| 32 | var mapPairs = function (obj, keys) {
|
---|
| 33 | return _map(function (k) {
|
---|
| 34 | return _quote(k) + ': ' + recur(obj[k]);
|
---|
| 35 | }, keys.slice().sort());
|
---|
| 36 | };
|
---|
| 37 |
|
---|
| 38 | switch (Object.prototype.toString.call(x)) {
|
---|
| 39 | case '[object Arguments]':
|
---|
| 40 | return '(function() { return arguments; }(' + _map(recur, x).join(', ') + '))';
|
---|
| 41 |
|
---|
| 42 | case '[object Array]':
|
---|
| 43 | return '[' + _map(recur, x).concat(mapPairs(x, reject(function (k) {
|
---|
| 44 | return /^\d+$/.test(k);
|
---|
| 45 | }, keys(x)))).join(', ') + ']';
|
---|
| 46 |
|
---|
| 47 | case '[object Boolean]':
|
---|
| 48 | return typeof x === 'object' ? 'new Boolean(' + recur(x.valueOf()) + ')' : x.toString();
|
---|
| 49 |
|
---|
| 50 | case '[object Date]':
|
---|
| 51 | return 'new Date(' + (isNaN(x.valueOf()) ? recur(NaN) : _quote(_toISOString(x))) + ')';
|
---|
| 52 |
|
---|
| 53 | case '[object Map]':
|
---|
| 54 | return 'new Map(' + recur(Array.from(x)) + ')';
|
---|
| 55 |
|
---|
| 56 | case '[object Null]':
|
---|
| 57 | return 'null';
|
---|
| 58 |
|
---|
| 59 | case '[object Number]':
|
---|
| 60 | return typeof x === 'object' ? 'new Number(' + recur(x.valueOf()) + ')' : 1 / x === -Infinity ? '-0' : x.toString(10);
|
---|
| 61 |
|
---|
| 62 | case '[object Set]':
|
---|
| 63 | return 'new Set(' + recur(Array.from(x).sort()) + ')';
|
---|
| 64 |
|
---|
| 65 | case '[object String]':
|
---|
| 66 | return typeof x === 'object' ? 'new String(' + recur(x.valueOf()) + ')' : _quote(x);
|
---|
| 67 |
|
---|
| 68 | case '[object Undefined]':
|
---|
| 69 | return 'undefined';
|
---|
| 70 |
|
---|
| 71 | default:
|
---|
| 72 | if (typeof x.toString === 'function') {
|
---|
| 73 | var repr = x.toString();
|
---|
| 74 |
|
---|
| 75 | if (repr !== '[object Object]') {
|
---|
| 76 | return repr;
|
---|
| 77 | }
|
---|
| 78 | }
|
---|
| 79 |
|
---|
| 80 | return '{' + mapPairs(x, keys(x)).join(', ') + '}';
|
---|
| 81 | }
|
---|
| 82 | }
|
---|
| 83 |
|
---|
| 84 | module.exports = _toString; |
---|