UNPKG

4.44 kBJavaScriptView Raw
1'use strict';
2
3Object.defineProperty(exports, "__esModule", {
4 value: true
5});
6exports.default = undefined;
7
8var _toConsumableArray2 = require('babel-runtime/helpers/toConsumableArray');
9
10var _toConsumableArray3 = _interopRequireDefault(_toConsumableArray2);
11
12var _typeof2 = require('babel-runtime/helpers/typeof');
13
14var _typeof3 = _interopRequireDefault(_typeof2);
15
16var _getPrototypeOf = require('babel-runtime/core-js/object/get-prototype-of');
17
18var _getPrototypeOf2 = _interopRequireDefault(_getPrototypeOf);
19
20var _assign = require('babel-runtime/core-js/object/assign');
21
22var _assign2 = _interopRequireDefault(_assign);
23
24var _weakSet = require('babel-runtime/core-js/weak-set');
25
26var _weakSet2 = _interopRequireDefault(_weakSet);
27
28var _weakMap = require('babel-runtime/core-js/weak-map');
29
30var _weakMap2 = _interopRequireDefault(_weakMap);
31
32var _set = require('babel-runtime/core-js/set');
33
34var _set2 = _interopRequireDefault(_set);
35
36var _map = require('babel-runtime/core-js/map');
37
38var _map2 = _interopRequireDefault(_map);
39
40var _lodash = require('lodash');
41
42var _lodash2 = _interopRequireDefault(_lodash);
43
44var _jsonStringifySafe = require('json-stringify-safe');
45
46var _jsonStringifySafe2 = _interopRequireDefault(_jsonStringifySafe);
47
48function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
49
50var stackDelim = /\n\s*/g;
51
52var pass = function pass(key, val) {
53 return val;
54};
55
56var isNewIterable = function isNewIterable(val) {
57 var isMap = _map2.default && val instanceof _map2.default;
58 var isSet = _set2.default && val instanceof _set2.default;
59 var isWeakMap = _weakMap2.default && val instanceof _weakMap2.default;
60 var isWeakSet = _weakSet2.default && val instanceof _weakSet2.default;
61
62 return isMap || isSet || isWeakMap || isWeakSet;
63};
64
65var errReplacer = function errReplacer(val, withStack) {
66
67 var err = { name: val.name || 'Error', message: val.message };
68
69 (0, _assign2.default)(err, val);
70
71 if (withStack) err.stack = val.stack && val.stack.split(stackDelim);
72
73 return err;
74};
75
76var flat = function flat(serialize, arraysToo) {
77 return function (obj) {
78 var serializedObj = JSON.parse(serialize(obj));
79 if (!_lodash2.default.isObject(serializedObj)) return serializedObj;
80
81 var flatObj = _lodash2.default.reduce(serializedObj, function _flat(target, val, key) {
82 var keyContext = this.slice();
83 keyContext.push(key);
84
85 var joinedKey = keyContext.join('.');
86 var newTarget = target;
87 if (!_lodash2.default.isObject(val)) {
88 newTarget[joinedKey] = val;
89 } else if (!arraysToo && _lodash2.default.isArray(val)) {
90 newTarget[joinedKey] = val.map(function (newVal) {
91 if (!_lodash2.default.isObject(newVal)) return newVal;
92
93 return _lodash2.default.reduce(newVal, _flat, {}, []);
94 });
95 } else {
96 _lodash2.default.reduce(val, _flat, newTarget, keyContext);
97 }
98
99 return newTarget;
100 }, {}, []);
101
102 return (0, _jsonStringifySafe2.default)(flatObj);
103 };
104};
105
106var build = function build(_ref) {
107 var flatten = _ref.flatten;
108 var flattenArrays = _ref.flattenArrays;
109 var _ref$replacer = _ref.replacer;
110 var replacer = _ref$replacer === undefined ? pass : _ref$replacer;
111 var withStack = _ref.withStack;
112
113 var replace = _lodash2.default.flow(replacer, function (val) {
114 if (_lodash2.default.isObject(val) && !(0, _getPrototypeOf2.default)(val)) {
115 return val;
116 }
117
118 if (_lodash2.default.isObject(val) && !(val instanceof Object)) {
119 return val;
120 }
121
122 if (_lodash2.default.isNaN(val)) return 'NaN';
123 if (val === Infinity) return 'Infinity';
124 if (val === -Infinity) return '-Infinity';
125 if (1 / val === -Infinity) return '-0';
126 if ((typeof val === 'undefined' ? 'undefined' : (0, _typeof3.default)(val)) === 'symbol') return val.toString();
127
128 if (_lodash2.default.isError(val)) return errReplacer(val, withStack);
129 if (_lodash2.default.isArguments(val)) return _lodash2.default.toArray(val);
130 if (_lodash2.default.isRegExp(val)) return val.toString();
131 if (isNewIterable(val)) return [].concat((0, _toConsumableArray3.default)(val));
132
133 return val;
134 });
135
136 var serialize = _lodash2.default.partial(_jsonStringifySafe2.default, _lodash2.default, replace);
137
138 return flatten ? flat(serialize, flattenArrays) : serialize;
139};
140
141exports.default = build;
142module.exports = exports['default'];
143//# sourceMappingURL=serialize.js.map