38 lines
		
	
	
		
			888 B
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			38 lines
		
	
	
		
			888 B
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
"use strict";
 | 
						|
 | 
						|
var compact   = require("../array/#/compact")
 | 
						|
  , isObject  = require("../object/is-object")
 | 
						|
  , toArray   = require("../object/to-array")
 | 
						|
  , isArray   = Array.isArray
 | 
						|
  , stringify = JSON.stringify;
 | 
						|
 | 
						|
module.exports = function self(value /*, replacer, space*/) {
 | 
						|
	var replacer = arguments[1], space = arguments[2];
 | 
						|
	try {
 | 
						|
		return stringify(value, replacer, space);
 | 
						|
	} catch (e) {
 | 
						|
		if (!isObject(value)) return null;
 | 
						|
		if (typeof value.toJSON === "function") return null;
 | 
						|
		if (isArray(value)) {
 | 
						|
			return (
 | 
						|
				"[" +
 | 
						|
				compact.call(value.map(function (item) { return self(item, replacer, space); })) +
 | 
						|
				"]"
 | 
						|
			);
 | 
						|
		}
 | 
						|
		return (
 | 
						|
			"{" +
 | 
						|
			compact
 | 
						|
				.call(
 | 
						|
					toArray(value, function (item, key) {
 | 
						|
						item = self(item, replacer, space);
 | 
						|
						if (!item) return null;
 | 
						|
						return stringify(key) + ":" + item;
 | 
						|
					})
 | 
						|
				)
 | 
						|
				.join(",") +
 | 
						|
			"}"
 | 
						|
		);
 | 
						|
	}
 | 
						|
};
 |