You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
41 lines
1.2 KiB
41 lines
1.2 KiB
"use strict"; |
|
|
|
var toArray = require("./to-array") |
|
, isDate = require("../date/is-date") |
|
, isValue = require("../object/is-value") |
|
, isRegExp = require("../reg-exp/is-reg-exp"); |
|
|
|
var isArray = Array.isArray |
|
, stringify = JSON.stringify |
|
, objHasOwnProperty = Object.prototype.hasOwnProperty; |
|
var keyValueToString = function (value, key) { |
|
return stringify(key) + ":" + module.exports(value); |
|
}; |
|
|
|
var sparseMap = function (arr) { |
|
var i, length = arr.length, result = new Array(length); |
|
for (i = 0; i < length; ++i) { |
|
if (!objHasOwnProperty.call(arr, i)) continue; |
|
result[i] = module.exports(arr[i]); |
|
} |
|
return result; |
|
}; |
|
|
|
module.exports = function (obj) { |
|
if (!isValue(obj)) return String(obj); |
|
switch (typeof obj) { |
|
case "string": |
|
return stringify(obj); |
|
case "number": |
|
case "boolean": |
|
case "function": |
|
return String(obj); |
|
case "object": |
|
if (isArray(obj)) return "[" + sparseMap(obj) + "]"; |
|
if (isRegExp(obj)) return String(obj); |
|
if (isDate(obj)) return "new Date(" + obj.valueOf() + ")"; |
|
return "{" + toArray(obj, keyValueToString) + "}"; |
|
default: |
|
throw new TypeError("Serialization of " + String(obj) + "is unsupported"); |
|
} |
|
};
|
|
|