UNPKG

1.21 kBJavaScriptView Raw
1var Buffer = require('buffer').Buffer
2
3//TODO: handle reviver/dehydrate function like normal
4//and handle indentation, like normal.
5//if anyone needs this... please send pull request.
6
7exports.stringify = function stringify (o) {
8 if(o && Buffer.isBuffer(o))
9 return JSON.stringify(':base64:' + o.toString('base64'))
10
11 if(o && o.toJSON)
12 o = o.toJSON()
13
14 if(o && 'object' === typeof o) {
15 var s = ''
16 var array = Array.isArray(o)
17 s = array ? '[' : '{'
18 var first = true
19
20 for(var k in o) {
21 if(Object.hasOwnProperty.call(o, k) && o[k] !== void(0)) {
22 if(!first)
23 s += ','
24 first = false
25 s += array ? stringify(o[k]) : stringify(k) + ':' + stringify(o[k])
26 }
27 }
28
29 s += array ? ']' : '}'
30
31 return s
32 } else if ('string' === typeof o) {
33 return JSON.stringify(/^:/.test(o) ? ':' + o : o)
34 } else
35 return JSON.stringify(o)
36}
37
38exports.parse = function (s) {
39 return JSON.parse(s, function (key, value) {
40 if('string' === typeof value) {
41 if(/^:base64:/.test(value))
42 return new Buffer(value.substring(8), 'base64')
43 else
44 return /^:/.test(value) ? value.substring(1) : value
45 }
46 return value
47 })
48}