UNPKG

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