UNPKG

3.23 kBJavaScriptView Raw
1'use strict'
2
3var util = require('./util')
4var Args = require('args-js')
5var sliced = require('sliced')
6var nodeify = require('nodeify')
7var promise = require('cb2promise')
8
9var DEFAULTS_OPTS = {
10 SAVE: {
11 indent: ' '
12 },
13 STRINGIFY: {
14 SPACE: 2
15 }
16}
17
18function 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
26function _checkString (data) {
27 return data instanceof Buffer ? data.toString() : data
28}
29
30function 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
43function 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
52function 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
70function 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
83function 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
93function 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
110function 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
124module.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}