You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
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
|