create-byan-agent 2.11.0 → 2.11.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (58) hide show
  1. package/install/templates/_byan/mcp/byan-mcp-server/server.js +122 -9
  2. package/node_modules/byan-platform-config/README.md +107 -0
  3. package/node_modules/byan-platform-config/index.js +16 -0
  4. package/node_modules/byan-platform-config/lib/env-config.js +128 -0
  5. package/node_modules/byan-platform-config/lib/mcp-config.js +95 -0
  6. package/node_modules/byan-platform-config/lib/token-prompt.js +61 -0
  7. package/node_modules/byan-platform-config/lib/url-utils.js +27 -0
  8. package/node_modules/byan-platform-config/lib/validate.js +44 -0
  9. package/node_modules/byan-platform-config/package.json +42 -0
  10. package/node_modules/fs-extra/LICENSE +15 -0
  11. package/node_modules/fs-extra/README.md +294 -0
  12. package/node_modules/fs-extra/lib/copy/copy-sync.js +176 -0
  13. package/node_modules/fs-extra/lib/copy/copy.js +180 -0
  14. package/node_modules/fs-extra/lib/copy/index.js +7 -0
  15. package/node_modules/fs-extra/lib/empty/index.js +39 -0
  16. package/node_modules/fs-extra/lib/ensure/file.js +66 -0
  17. package/node_modules/fs-extra/lib/ensure/index.js +23 -0
  18. package/node_modules/fs-extra/lib/ensure/link.js +64 -0
  19. package/node_modules/fs-extra/lib/ensure/symlink-paths.js +101 -0
  20. package/node_modules/fs-extra/lib/ensure/symlink-type.js +34 -0
  21. package/node_modules/fs-extra/lib/ensure/symlink.js +92 -0
  22. package/node_modules/fs-extra/lib/esm.mjs +68 -0
  23. package/node_modules/fs-extra/lib/fs/index.js +146 -0
  24. package/node_modules/fs-extra/lib/index.js +16 -0
  25. package/node_modules/fs-extra/lib/json/index.js +16 -0
  26. package/node_modules/fs-extra/lib/json/jsonfile.js +11 -0
  27. package/node_modules/fs-extra/lib/json/output-json-sync.js +12 -0
  28. package/node_modules/fs-extra/lib/json/output-json.js +12 -0
  29. package/node_modules/fs-extra/lib/mkdirs/index.js +14 -0
  30. package/node_modules/fs-extra/lib/mkdirs/make-dir.js +27 -0
  31. package/node_modules/fs-extra/lib/mkdirs/utils.js +21 -0
  32. package/node_modules/fs-extra/lib/move/index.js +7 -0
  33. package/node_modules/fs-extra/lib/move/move-sync.js +55 -0
  34. package/node_modules/fs-extra/lib/move/move.js +59 -0
  35. package/node_modules/fs-extra/lib/output-file/index.js +31 -0
  36. package/node_modules/fs-extra/lib/path-exists/index.js +12 -0
  37. package/node_modules/fs-extra/lib/remove/index.js +17 -0
  38. package/node_modules/fs-extra/lib/util/async.js +29 -0
  39. package/node_modules/fs-extra/lib/util/stat.js +159 -0
  40. package/node_modules/fs-extra/lib/util/utimes.js +36 -0
  41. package/node_modules/fs-extra/package.json +71 -0
  42. package/node_modules/graceful-fs/LICENSE +15 -0
  43. package/node_modules/graceful-fs/README.md +143 -0
  44. package/node_modules/graceful-fs/clone.js +23 -0
  45. package/node_modules/graceful-fs/graceful-fs.js +448 -0
  46. package/node_modules/graceful-fs/legacy-streams.js +118 -0
  47. package/node_modules/graceful-fs/package.json +53 -0
  48. package/node_modules/graceful-fs/polyfills.js +355 -0
  49. package/node_modules/jsonfile/LICENSE +15 -0
  50. package/node_modules/jsonfile/README.md +230 -0
  51. package/node_modules/jsonfile/index.js +88 -0
  52. package/node_modules/jsonfile/package.json +40 -0
  53. package/node_modules/jsonfile/utils.js +18 -0
  54. package/node_modules/universalify/LICENSE +20 -0
  55. package/node_modules/universalify/README.md +76 -0
  56. package/node_modules/universalify/index.js +24 -0
  57. package/node_modules/universalify/package.json +34 -0
  58. package/package.json +4 -1
@@ -0,0 +1,355 @@
1
+ var constants = require('constants')
2
+
3
+ var origCwd = process.cwd
4
+ var cwd = null
5
+
6
+ var platform = process.env.GRACEFUL_FS_PLATFORM || process.platform
7
+
8
+ process.cwd = function() {
9
+ if (!cwd)
10
+ cwd = origCwd.call(process)
11
+ return cwd
12
+ }
13
+ try {
14
+ process.cwd()
15
+ } catch (er) {}
16
+
17
+ // This check is needed until node.js 12 is required
18
+ if (typeof process.chdir === 'function') {
19
+ var chdir = process.chdir
20
+ process.chdir = function (d) {
21
+ cwd = null
22
+ chdir.call(process, d)
23
+ }
24
+ if (Object.setPrototypeOf) Object.setPrototypeOf(process.chdir, chdir)
25
+ }
26
+
27
+ module.exports = patch
28
+
29
+ function patch (fs) {
30
+ // (re-)implement some things that are known busted or missing.
31
+
32
+ // lchmod, broken prior to 0.6.2
33
+ // back-port the fix here.
34
+ if (constants.hasOwnProperty('O_SYMLINK') &&
35
+ process.version.match(/^v0\.6\.[0-2]|^v0\.5\./)) {
36
+ patchLchmod(fs)
37
+ }
38
+
39
+ // lutimes implementation, or no-op
40
+ if (!fs.lutimes) {
41
+ patchLutimes(fs)
42
+ }
43
+
44
+ // https://github.com/isaacs/node-graceful-fs/issues/4
45
+ // Chown should not fail on einval or eperm if non-root.
46
+ // It should not fail on enosys ever, as this just indicates
47
+ // that a fs doesn't support the intended operation.
48
+
49
+ fs.chown = chownFix(fs.chown)
50
+ fs.fchown = chownFix(fs.fchown)
51
+ fs.lchown = chownFix(fs.lchown)
52
+
53
+ fs.chmod = chmodFix(fs.chmod)
54
+ fs.fchmod = chmodFix(fs.fchmod)
55
+ fs.lchmod = chmodFix(fs.lchmod)
56
+
57
+ fs.chownSync = chownFixSync(fs.chownSync)
58
+ fs.fchownSync = chownFixSync(fs.fchownSync)
59
+ fs.lchownSync = chownFixSync(fs.lchownSync)
60
+
61
+ fs.chmodSync = chmodFixSync(fs.chmodSync)
62
+ fs.fchmodSync = chmodFixSync(fs.fchmodSync)
63
+ fs.lchmodSync = chmodFixSync(fs.lchmodSync)
64
+
65
+ fs.stat = statFix(fs.stat)
66
+ fs.fstat = statFix(fs.fstat)
67
+ fs.lstat = statFix(fs.lstat)
68
+
69
+ fs.statSync = statFixSync(fs.statSync)
70
+ fs.fstatSync = statFixSync(fs.fstatSync)
71
+ fs.lstatSync = statFixSync(fs.lstatSync)
72
+
73
+ // if lchmod/lchown do not exist, then make them no-ops
74
+ if (fs.chmod && !fs.lchmod) {
75
+ fs.lchmod = function (path, mode, cb) {
76
+ if (cb) process.nextTick(cb)
77
+ }
78
+ fs.lchmodSync = function () {}
79
+ }
80
+ if (fs.chown && !fs.lchown) {
81
+ fs.lchown = function (path, uid, gid, cb) {
82
+ if (cb) process.nextTick(cb)
83
+ }
84
+ fs.lchownSync = function () {}
85
+ }
86
+
87
+ // on Windows, A/V software can lock the directory, causing this
88
+ // to fail with an EACCES or EPERM if the directory contains newly
89
+ // created files. Try again on failure, for up to 60 seconds.
90
+
91
+ // Set the timeout this long because some Windows Anti-Virus, such as Parity
92
+ // bit9, may lock files for up to a minute, causing npm package install
93
+ // failures. Also, take care to yield the scheduler. Windows scheduling gives
94
+ // CPU to a busy looping process, which can cause the program causing the lock
95
+ // contention to be starved of CPU by node, so the contention doesn't resolve.
96
+ if (platform === "win32") {
97
+ fs.rename = typeof fs.rename !== 'function' ? fs.rename
98
+ : (function (fs$rename) {
99
+ function rename (from, to, cb) {
100
+ var start = Date.now()
101
+ var backoff = 0;
102
+ fs$rename(from, to, function CB (er) {
103
+ if (er
104
+ && (er.code === "EACCES" || er.code === "EPERM" || er.code === "EBUSY")
105
+ && Date.now() - start < 60000) {
106
+ setTimeout(function() {
107
+ fs.stat(to, function (stater, st) {
108
+ if (stater && stater.code === "ENOENT")
109
+ fs$rename(from, to, CB);
110
+ else
111
+ cb(er)
112
+ })
113
+ }, backoff)
114
+ if (backoff < 100)
115
+ backoff += 10;
116
+ return;
117
+ }
118
+ if (cb) cb(er)
119
+ })
120
+ }
121
+ if (Object.setPrototypeOf) Object.setPrototypeOf(rename, fs$rename)
122
+ return rename
123
+ })(fs.rename)
124
+ }
125
+
126
+ // if read() returns EAGAIN, then just try it again.
127
+ fs.read = typeof fs.read !== 'function' ? fs.read
128
+ : (function (fs$read) {
129
+ function read (fd, buffer, offset, length, position, callback_) {
130
+ var callback
131
+ if (callback_ && typeof callback_ === 'function') {
132
+ var eagCounter = 0
133
+ callback = function (er, _, __) {
134
+ if (er && er.code === 'EAGAIN' && eagCounter < 10) {
135
+ eagCounter ++
136
+ return fs$read.call(fs, fd, buffer, offset, length, position, callback)
137
+ }
138
+ callback_.apply(this, arguments)
139
+ }
140
+ }
141
+ return fs$read.call(fs, fd, buffer, offset, length, position, callback)
142
+ }
143
+
144
+ // This ensures `util.promisify` works as it does for native `fs.read`.
145
+ if (Object.setPrototypeOf) Object.setPrototypeOf(read, fs$read)
146
+ return read
147
+ })(fs.read)
148
+
149
+ fs.readSync = typeof fs.readSync !== 'function' ? fs.readSync
150
+ : (function (fs$readSync) { return function (fd, buffer, offset, length, position) {
151
+ var eagCounter = 0
152
+ while (true) {
153
+ try {
154
+ return fs$readSync.call(fs, fd, buffer, offset, length, position)
155
+ } catch (er) {
156
+ if (er.code === 'EAGAIN' && eagCounter < 10) {
157
+ eagCounter ++
158
+ continue
159
+ }
160
+ throw er
161
+ }
162
+ }
163
+ }})(fs.readSync)
164
+
165
+ function patchLchmod (fs) {
166
+ fs.lchmod = function (path, mode, callback) {
167
+ fs.open( path
168
+ , constants.O_WRONLY | constants.O_SYMLINK
169
+ , mode
170
+ , function (err, fd) {
171
+ if (err) {
172
+ if (callback) callback(err)
173
+ return
174
+ }
175
+ // prefer to return the chmod error, if one occurs,
176
+ // but still try to close, and report closing errors if they occur.
177
+ fs.fchmod(fd, mode, function (err) {
178
+ fs.close(fd, function(err2) {
179
+ if (callback) callback(err || err2)
180
+ })
181
+ })
182
+ })
183
+ }
184
+
185
+ fs.lchmodSync = function (path, mode) {
186
+ var fd = fs.openSync(path, constants.O_WRONLY | constants.O_SYMLINK, mode)
187
+
188
+ // prefer to return the chmod error, if one occurs,
189
+ // but still try to close, and report closing errors if they occur.
190
+ var threw = true
191
+ var ret
192
+ try {
193
+ ret = fs.fchmodSync(fd, mode)
194
+ threw = false
195
+ } finally {
196
+ if (threw) {
197
+ try {
198
+ fs.closeSync(fd)
199
+ } catch (er) {}
200
+ } else {
201
+ fs.closeSync(fd)
202
+ }
203
+ }
204
+ return ret
205
+ }
206
+ }
207
+
208
+ function patchLutimes (fs) {
209
+ if (constants.hasOwnProperty("O_SYMLINK") && fs.futimes) {
210
+ fs.lutimes = function (path, at, mt, cb) {
211
+ fs.open(path, constants.O_SYMLINK, function (er, fd) {
212
+ if (er) {
213
+ if (cb) cb(er)
214
+ return
215
+ }
216
+ fs.futimes(fd, at, mt, function (er) {
217
+ fs.close(fd, function (er2) {
218
+ if (cb) cb(er || er2)
219
+ })
220
+ })
221
+ })
222
+ }
223
+
224
+ fs.lutimesSync = function (path, at, mt) {
225
+ var fd = fs.openSync(path, constants.O_SYMLINK)
226
+ var ret
227
+ var threw = true
228
+ try {
229
+ ret = fs.futimesSync(fd, at, mt)
230
+ threw = false
231
+ } finally {
232
+ if (threw) {
233
+ try {
234
+ fs.closeSync(fd)
235
+ } catch (er) {}
236
+ } else {
237
+ fs.closeSync(fd)
238
+ }
239
+ }
240
+ return ret
241
+ }
242
+
243
+ } else if (fs.futimes) {
244
+ fs.lutimes = function (_a, _b, _c, cb) { if (cb) process.nextTick(cb) }
245
+ fs.lutimesSync = function () {}
246
+ }
247
+ }
248
+
249
+ function chmodFix (orig) {
250
+ if (!orig) return orig
251
+ return function (target, mode, cb) {
252
+ return orig.call(fs, target, mode, function (er) {
253
+ if (chownErOk(er)) er = null
254
+ if (cb) cb.apply(this, arguments)
255
+ })
256
+ }
257
+ }
258
+
259
+ function chmodFixSync (orig) {
260
+ if (!orig) return orig
261
+ return function (target, mode) {
262
+ try {
263
+ return orig.call(fs, target, mode)
264
+ } catch (er) {
265
+ if (!chownErOk(er)) throw er
266
+ }
267
+ }
268
+ }
269
+
270
+
271
+ function chownFix (orig) {
272
+ if (!orig) return orig
273
+ return function (target, uid, gid, cb) {
274
+ return orig.call(fs, target, uid, gid, function (er) {
275
+ if (chownErOk(er)) er = null
276
+ if (cb) cb.apply(this, arguments)
277
+ })
278
+ }
279
+ }
280
+
281
+ function chownFixSync (orig) {
282
+ if (!orig) return orig
283
+ return function (target, uid, gid) {
284
+ try {
285
+ return orig.call(fs, target, uid, gid)
286
+ } catch (er) {
287
+ if (!chownErOk(er)) throw er
288
+ }
289
+ }
290
+ }
291
+
292
+ function statFix (orig) {
293
+ if (!orig) return orig
294
+ // Older versions of Node erroneously returned signed integers for
295
+ // uid + gid.
296
+ return function (target, options, cb) {
297
+ if (typeof options === 'function') {
298
+ cb = options
299
+ options = null
300
+ }
301
+ function callback (er, stats) {
302
+ if (stats) {
303
+ if (stats.uid < 0) stats.uid += 0x100000000
304
+ if (stats.gid < 0) stats.gid += 0x100000000
305
+ }
306
+ if (cb) cb.apply(this, arguments)
307
+ }
308
+ return options ? orig.call(fs, target, options, callback)
309
+ : orig.call(fs, target, callback)
310
+ }
311
+ }
312
+
313
+ function statFixSync (orig) {
314
+ if (!orig) return orig
315
+ // Older versions of Node erroneously returned signed integers for
316
+ // uid + gid.
317
+ return function (target, options) {
318
+ var stats = options ? orig.call(fs, target, options)
319
+ : orig.call(fs, target)
320
+ if (stats) {
321
+ if (stats.uid < 0) stats.uid += 0x100000000
322
+ if (stats.gid < 0) stats.gid += 0x100000000
323
+ }
324
+ return stats;
325
+ }
326
+ }
327
+
328
+ // ENOSYS means that the fs doesn't support the op. Just ignore
329
+ // that, because it doesn't matter.
330
+ //
331
+ // if there's no getuid, or if getuid() is something other
332
+ // than 0, and the error is EINVAL or EPERM, then just ignore
333
+ // it.
334
+ //
335
+ // This specific case is a silent failure in cp, install, tar,
336
+ // and most other unix tools that manage permissions.
337
+ //
338
+ // When running as root, or if other types of errors are
339
+ // encountered, then it's strict.
340
+ function chownErOk (er) {
341
+ if (!er)
342
+ return true
343
+
344
+ if (er.code === "ENOSYS")
345
+ return true
346
+
347
+ var nonroot = !process.getuid || process.getuid() !== 0
348
+ if (nonroot) {
349
+ if (er.code === "EINVAL" || er.code === "EPERM")
350
+ return true
351
+ }
352
+
353
+ return false
354
+ }
355
+ }
@@ -0,0 +1,15 @@
1
+ (The MIT License)
2
+
3
+ Copyright (c) 2012-2015, JP Richardson <jprichardson@gmail.com>
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files
6
+ (the 'Software'), to deal in the Software without restriction, including without limitation the rights to use, copy, modify,
7
+ merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is
8
+ furnished to do so, subject to the following conditions:
9
+
10
+ The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
11
+
12
+ THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
13
+ WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS
14
+ OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
15
+ ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
@@ -0,0 +1,230 @@
1
+ Node.js - jsonfile
2
+ ================
3
+
4
+ Easily read/write JSON files in Node.js. _Note: this module cannot be used in the browser._
5
+
6
+ [![npm Package](https://img.shields.io/npm/v/jsonfile.svg?style=flat-square)](https://www.npmjs.org/package/jsonfile)
7
+ [![linux build status](https://img.shields.io/github/actions/workflow/status/jprichardson/node-jsonfile/ci.yml?branch=master)](https://github.com/jprichardson/node-jsonfile/actions?query=branch%3Amaster)
8
+ [![windows Build status](https://img.shields.io/appveyor/ci/jprichardson/node-jsonfile/master.svg?label=windows%20build)](https://ci.appveyor.com/project/jprichardson/node-jsonfile/branch/master)
9
+
10
+ <a href="https://github.com/feross/standard"><img src="https://cdn.rawgit.com/feross/standard/master/sticker.svg" alt="Standard JavaScript" width="100"></a>
11
+
12
+ Why?
13
+ ----
14
+
15
+ Writing `JSON.stringify()` and then `fs.writeFile()` and `JSON.parse()` with `fs.readFile()` enclosed in `try/catch` blocks became annoying.
16
+
17
+
18
+
19
+ Installation
20
+ ------------
21
+
22
+ npm install --save jsonfile
23
+
24
+
25
+
26
+ API
27
+ ---
28
+
29
+ * [`readFile(filename, [options], callback)`](#readfilefilename-options-callback)
30
+ * [`readFileSync(filename, [options])`](#readfilesyncfilename-options)
31
+ * [`writeFile(filename, obj, [options], callback)`](#writefilefilename-obj-options-callback)
32
+ * [`writeFileSync(filename, obj, [options])`](#writefilesyncfilename-obj-options)
33
+
34
+ ----
35
+
36
+ ### readFile(filename, [options], callback)
37
+
38
+ `options` (`object`, default `undefined`): Pass in any [`fs.readFile`](https://nodejs.org/api/fs.html#fs_fs_readfile_path_options_callback) options or set `reviver` for a [JSON reviver](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/parse).
39
+ - `throws` (`boolean`, default: `true`). If `JSON.parse` throws an error, pass this error to the callback.
40
+ If `false`, returns `null` for the object.
41
+
42
+
43
+ ```js
44
+ const jsonfile = require('jsonfile')
45
+ const file = '/tmp/data.json'
46
+ jsonfile.readFile(file, function (err, obj) {
47
+ if (err) console.error(err)
48
+ console.dir(obj)
49
+ })
50
+ ```
51
+
52
+ You can also use this method with promises. The `readFile` method will return a promise if you do not pass a callback function.
53
+
54
+ ```js
55
+ const jsonfile = require('jsonfile')
56
+ const file = '/tmp/data.json'
57
+ jsonfile.readFile(file)
58
+ .then(obj => console.dir(obj))
59
+ .catch(error => console.error(error))
60
+ ```
61
+
62
+ ----
63
+
64
+ ### readFileSync(filename, [options])
65
+
66
+ `options` (`object`, default `undefined`): Pass in any [`fs.readFileSync`](https://nodejs.org/api/fs.html#fs_fs_readfilesync_path_options) options or set `reviver` for a [JSON reviver](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/parse).
67
+ - `throws` (`boolean`, default: `true`). If an error is encountered reading or parsing the file, throw the error. If `false`, returns `null` for the object.
68
+
69
+ ```js
70
+ const jsonfile = require('jsonfile')
71
+ const file = '/tmp/data.json'
72
+
73
+ console.dir(jsonfile.readFileSync(file))
74
+ ```
75
+
76
+ ----
77
+
78
+ ### writeFile(filename, obj, [options], callback)
79
+
80
+ `options`: Pass in any [`fs.writeFile`](https://nodejs.org/api/fs.html#fs_fs_writefile_file_data_options_callback) options or set `replacer` for a [JSON replacer](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/stringify). Can also pass in `spaces`, or override `EOL` string or set `finalEOL` flag as `false` to not save the file with `EOL` at the end.
81
+
82
+
83
+ ```js
84
+ const jsonfile = require('jsonfile')
85
+
86
+ const file = '/tmp/data.json'
87
+ const obj = { name: 'JP' }
88
+
89
+ jsonfile.writeFile(file, obj, function (err) {
90
+ if (err) console.error(err)
91
+ })
92
+ ```
93
+ Or use with promises as follows:
94
+
95
+ ```js
96
+ const jsonfile = require('jsonfile')
97
+
98
+ const file = '/tmp/data.json'
99
+ const obj = { name: 'JP' }
100
+
101
+ jsonfile.writeFile(file, obj)
102
+ .then(res => {
103
+ console.log('Write complete')
104
+ })
105
+ .catch(error => console.error(error))
106
+ ```
107
+
108
+
109
+ **formatting with spaces:**
110
+
111
+ ```js
112
+ const jsonfile = require('jsonfile')
113
+
114
+ const file = '/tmp/data.json'
115
+ const obj = { name: 'JP' }
116
+
117
+ jsonfile.writeFile(file, obj, { spaces: 2 }, function (err) {
118
+ if (err) console.error(err)
119
+ })
120
+ ```
121
+
122
+ **overriding EOL:**
123
+
124
+ ```js
125
+ const jsonfile = require('jsonfile')
126
+
127
+ const file = '/tmp/data.json'
128
+ const obj = { name: 'JP' }
129
+
130
+ jsonfile.writeFile(file, obj, { spaces: 2, EOL: '\r\n' }, function (err) {
131
+ if (err) console.error(err)
132
+ })
133
+ ```
134
+
135
+
136
+ **disabling the EOL at the end of file:**
137
+
138
+ ```js
139
+ const jsonfile = require('jsonfile')
140
+
141
+ const file = '/tmp/data.json'
142
+ const obj = { name: 'JP' }
143
+
144
+ jsonfile.writeFile(file, obj, { spaces: 2, finalEOL: false }, function (err) {
145
+ if (err) console.log(err)
146
+ })
147
+ ```
148
+
149
+ **appending to an existing JSON file:**
150
+
151
+ You can use `fs.writeFile` option `{ flag: 'a' }` to achieve this.
152
+
153
+ ```js
154
+ const jsonfile = require('jsonfile')
155
+
156
+ const file = '/tmp/mayAlreadyExistedData.json'
157
+ const obj = { name: 'JP' }
158
+
159
+ jsonfile.writeFile(file, obj, { flag: 'a' }, function (err) {
160
+ if (err) console.error(err)
161
+ })
162
+ ```
163
+
164
+ ----
165
+
166
+ ### writeFileSync(filename, obj, [options])
167
+
168
+ `options`: Pass in any [`fs.writeFileSync`](https://nodejs.org/api/fs.html#fs_fs_writefilesync_file_data_options) options or set `replacer` for a [JSON replacer](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/stringify). Can also pass in `spaces`, or override `EOL` string or set `finalEOL` flag as `false` to not save the file with `EOL` at the end.
169
+
170
+ ```js
171
+ const jsonfile = require('jsonfile')
172
+
173
+ const file = '/tmp/data.json'
174
+ const obj = { name: 'JP' }
175
+
176
+ jsonfile.writeFileSync(file, obj)
177
+ ```
178
+
179
+ **formatting with spaces:**
180
+
181
+ ```js
182
+ const jsonfile = require('jsonfile')
183
+
184
+ const file = '/tmp/data.json'
185
+ const obj = { name: 'JP' }
186
+
187
+ jsonfile.writeFileSync(file, obj, { spaces: 2 })
188
+ ```
189
+
190
+ **overriding EOL:**
191
+
192
+ ```js
193
+ const jsonfile = require('jsonfile')
194
+
195
+ const file = '/tmp/data.json'
196
+ const obj = { name: 'JP' }
197
+
198
+ jsonfile.writeFileSync(file, obj, { spaces: 2, EOL: '\r\n' })
199
+ ```
200
+
201
+ **disabling the EOL at the end of file:**
202
+
203
+ ```js
204
+ const jsonfile = require('jsonfile')
205
+
206
+ const file = '/tmp/data.json'
207
+ const obj = { name: 'JP' }
208
+
209
+ jsonfile.writeFileSync(file, obj, { spaces: 2, finalEOL: false })
210
+ ```
211
+
212
+ **appending to an existing JSON file:**
213
+
214
+ You can use `fs.writeFileSync` option `{ flag: 'a' }` to achieve this.
215
+
216
+ ```js
217
+ const jsonfile = require('jsonfile')
218
+
219
+ const file = '/tmp/mayAlreadyExistedData.json'
220
+ const obj = { name: 'JP' }
221
+
222
+ jsonfile.writeFileSync(file, obj, { flag: 'a' })
223
+ ```
224
+
225
+ License
226
+ -------
227
+
228
+ (MIT License)
229
+
230
+ Copyright 2012-2016, JP Richardson <jprichardson@gmail.com>
@@ -0,0 +1,88 @@
1
+ let _fs
2
+ try {
3
+ _fs = require('graceful-fs')
4
+ } catch (_) {
5
+ _fs = require('fs')
6
+ }
7
+ const universalify = require('universalify')
8
+ const { stringify, stripBom } = require('./utils')
9
+
10
+ async function _readFile (file, options = {}) {
11
+ if (typeof options === 'string') {
12
+ options = { encoding: options }
13
+ }
14
+
15
+ const fs = options.fs || _fs
16
+
17
+ const shouldThrow = 'throws' in options ? options.throws : true
18
+
19
+ let data = await universalify.fromCallback(fs.readFile)(file, options)
20
+
21
+ data = stripBom(data)
22
+
23
+ let obj
24
+ try {
25
+ obj = JSON.parse(data, options ? options.reviver : null)
26
+ } catch (err) {
27
+ if (shouldThrow) {
28
+ err.message = `${file}: ${err.message}`
29
+ throw err
30
+ } else {
31
+ return null
32
+ }
33
+ }
34
+
35
+ return obj
36
+ }
37
+
38
+ const readFile = universalify.fromPromise(_readFile)
39
+
40
+ function readFileSync (file, options = {}) {
41
+ if (typeof options === 'string') {
42
+ options = { encoding: options }
43
+ }
44
+
45
+ const fs = options.fs || _fs
46
+
47
+ const shouldThrow = 'throws' in options ? options.throws : true
48
+
49
+ try {
50
+ let content = fs.readFileSync(file, options)
51
+ content = stripBom(content)
52
+ return JSON.parse(content, options.reviver)
53
+ } catch (err) {
54
+ if (shouldThrow) {
55
+ err.message = `${file}: ${err.message}`
56
+ throw err
57
+ } else {
58
+ return null
59
+ }
60
+ }
61
+ }
62
+
63
+ async function _writeFile (file, obj, options = {}) {
64
+ const fs = options.fs || _fs
65
+
66
+ const str = stringify(obj, options)
67
+
68
+ await universalify.fromCallback(fs.writeFile)(file, str, options)
69
+ }
70
+
71
+ const writeFile = universalify.fromPromise(_writeFile)
72
+
73
+ function writeFileSync (file, obj, options = {}) {
74
+ const fs = options.fs || _fs
75
+
76
+ const str = stringify(obj, options)
77
+ // not sure if fs.writeFileSync returns anything, but just in case
78
+ return fs.writeFileSync(file, str, options)
79
+ }
80
+
81
+ // NOTE: do not change this export format; required for ESM compat
82
+ // see https://github.com/jprichardson/node-jsonfile/pull/162 for details
83
+ module.exports = {
84
+ readFile,
85
+ readFileSync,
86
+ writeFile,
87
+ writeFileSync
88
+ }