12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788 |
- let _fs
- try {
- _fs = require('graceful-fs')
- } catch (_) {
- _fs = require('fs')
- }
- const universalify = require('universalify')
- const { stringify, stripBom } = require('./utils')
- async function _readFile (file, options = {}) {
- if (typeof options === 'string') {
- options = { encoding: options }
- }
- const fs = options.fs || _fs
- const shouldThrow = 'throws' in options ? options.throws : true
- let data = await universalify.fromCallback(fs.readFile)(file, options)
- data = stripBom(data)
- let obj
- try {
- obj = JSON.parse(data, options ? options.reviver : null)
- } catch (err) {
- if (shouldThrow) {
- err.message = `${file}: ${err.message}`
- throw err
- } else {
- return null
- }
- }
- return obj
- }
- const readFile = universalify.fromPromise(_readFile)
- function readFileSync (file, options = {}) {
- if (typeof options === 'string') {
- options = { encoding: options }
- }
- const fs = options.fs || _fs
- const shouldThrow = 'throws' in options ? options.throws : true
- try {
- let content = fs.readFileSync(file, options)
- content = stripBom(content)
- return JSON.parse(content, options.reviver)
- } catch (err) {
- if (shouldThrow) {
- err.message = `${file}: ${err.message}`
- throw err
- } else {
- return null
- }
- }
- }
- async function _writeFile (file, obj, options = {}) {
- const fs = options.fs || _fs
- const str = stringify(obj, options)
- await universalify.fromCallback(fs.writeFile)(file, str, options)
- }
- const writeFile = universalify.fromPromise(_writeFile)
- function writeFileSync (file, obj, options = {}) {
- const fs = options.fs || _fs
- const str = stringify(obj, options)
- // not sure if fs.writeFileSync returns anything, but just in case
- return fs.writeFileSync(file, str, options)
- }
- const jsonfile = {
- readFile,
- readFileSync,
- writeFile,
- writeFileSync
- }
- module.exports = jsonfile
|