1 | 'use strict'
|
2 |
|
3 | var util = require('./util')
|
4 | var Args = require('args-js')
|
5 | var sliced = require('sliced')
|
6 | var nodeify = require('nodeify')
|
7 | var promise = require('cb2promise')
|
8 |
|
9 | var DEFAULTS_OPTS = {
|
10 | SAVE: {
|
11 | indent: ' '
|
12 | },
|
13 | STRINGIFY: {
|
14 | SPACE: 2
|
15 | }
|
16 | }
|
17 |
|
18 | function getStringifyParams (params) {
|
19 | return Args([
|
20 | { data: Args.OBJECT | Args.Required },
|
21 | { replacer: Args.FUNCTION | Args.Optional },
|
22 | { space: Args.NUMBER | Args.Optional, _default: DEFAULTS_OPTS.STRINGIFY.SPACE }
|
23 | ], params)
|
24 | }
|
25 |
|
26 | function _checkString (data) {
|
27 | return data instanceof Buffer ? data.toString() : data
|
28 | }
|
29 |
|
30 | function stringifyAsync () {
|
31 | var args = sliced(arguments)
|
32 | var cb = typeof args[args.length - 1] === 'function' ? args.pop() : null
|
33 |
|
34 | var params = getStringifyParams(args)
|
35 | var data = params.data
|
36 | var replacer = params.replacer
|
37 | var space = params.space
|
38 |
|
39 | if (!cb) return promise(util.stringifyAsync, data, replacer, space)
|
40 | return util.stringifyAsync(data, replacer, space, cb)
|
41 | }
|
42 |
|
43 | function stringify () {
|
44 | var params = getStringifyParams(arguments)
|
45 | var data = params.data
|
46 | var replacer = params.replacer
|
47 | var space = params.space
|
48 |
|
49 | return util.stringify(data, replacer, space)
|
50 | }
|
51 |
|
52 | function parseAsync () {
|
53 | var args = sliced(arguments)
|
54 | var cb = typeof args[args.length - 1] === 'function' ? args.pop() : null
|
55 |
|
56 | var params = Args([
|
57 | { data: Args.STRING | Args.Required, _check: _checkString },
|
58 | { reviver: Args.FUNCTION | Args.Optional },
|
59 | { filename: Args.STRING | Args.Optional }
|
60 | ], args)
|
61 |
|
62 | var data = params.data
|
63 | var reviver = params.reviver
|
64 | var filename = params.filename
|
65 |
|
66 | if (!cb) return promise(util.parseAsync, data, reviver, filename)
|
67 | return util.parseAsync(data, reviver, filename, cb)
|
68 | }
|
69 |
|
70 | function loadAsync () {
|
71 | var params = Args([
|
72 | { filepath: Args.STRING | Args.Required },
|
73 | { cb: Args.FUNCTION | Args.Optional }
|
74 | ], arguments)
|
75 |
|
76 | var filepath = params.filepath
|
77 | var cb = params.cb
|
78 |
|
79 | if (cb) return nodeify(util.loadAsync(filepath), cb)
|
80 | return util.loadAsync(filepath)
|
81 | }
|
82 |
|
83 | function load () {
|
84 | var params = Args([
|
85 | { filepath: Args.STRING | Args.Required }
|
86 | ], arguments)
|
87 |
|
88 | var filepath = params.filepath
|
89 |
|
90 | return util.load(filepath)
|
91 | }
|
92 |
|
93 | function saveAsync () {
|
94 | var params = Args([
|
95 | { filepath: Args.STRING | Args.Required },
|
96 | { data: Args.OBJECT | Args.Required },
|
97 | { opts: Args.OBJECT | Args.Optional, _default: DEFAULTS_OPTS.SAVE },
|
98 | { cb: Args.FUNCTION | Args.Optional }
|
99 | ], arguments)
|
100 |
|
101 | var filepath = params.filepath
|
102 | var data = params.data
|
103 | var opts = params.opts
|
104 | var cb = params.cb
|
105 |
|
106 | if (cb) return nodeify(util.saveAsync(filepath, data, opts), cb)
|
107 | return util.saveAsync(filepath)
|
108 | }
|
109 |
|
110 | function save () {
|
111 | var params = Args([
|
112 | { filepath: Args.STRING | Args.Required },
|
113 | { data: Args.OBJECT | Args.Required },
|
114 | { opts: Args.OBJECT | Args.Optional, _default: DEFAULTS_OPTS.SAVE }
|
115 | ], arguments)
|
116 |
|
117 | var filepath = params.filepath
|
118 | var data = params.data
|
119 | var opts = params.opts
|
120 |
|
121 | return util.save(filepath, data, opts)
|
122 | }
|
123 |
|
124 | module.exports = {
|
125 | stringifyAsync: stringifyAsync,
|
126 | stringify: stringify,
|
127 | parseAsync: parseAsync,
|
128 | parse: util.parse,
|
129 | loadAsync: loadAsync,
|
130 | load: load,
|
131 | saveAsync: saveAsync,
|
132 | save: save
|
133 | }
|