91 lines
2.2 KiB
JavaScript
91 lines
2.2 KiB
JavaScript
const bplistParser = require('bplist-parser')
|
|
const bplistCreator = require('bplist-creator')
|
|
const plist = require('plist')
|
|
const fs = require('fs')
|
|
|
|
function parse(aStringOrBuffer, aFile) {
|
|
const firstByte = aStringOrBuffer[0]
|
|
let results
|
|
try {
|
|
if (firstByte === 60 || firstByte === '<') {
|
|
results = plist.parse(aStringOrBuffer.toString())
|
|
} else if (firstByte === 98) {
|
|
;[results] = bplistParser.parseBuffer(aStringOrBuffer)
|
|
} else if (aFile != null) {
|
|
throw new Error(`Unable to determine format for '${aFile}'`)
|
|
} else {
|
|
throw new Error('Unable to determine format for plist aStringOrBuffer')
|
|
}
|
|
} catch (error) {
|
|
throw new Error(error)
|
|
}
|
|
return results
|
|
}
|
|
|
|
function readFileSync(aFile) {
|
|
const contents = fs.readFileSync(aFile)
|
|
if (contents.length === 0) {
|
|
return {}
|
|
}
|
|
return parse(contents, aFile)
|
|
}
|
|
|
|
function readFile(aFile, callback) {
|
|
fs.readFile(aFile, (err, contents) => {
|
|
if (err) {
|
|
return callback(err)
|
|
}
|
|
let results
|
|
try {
|
|
results = parse(contents, aFile)
|
|
} catch (error) {
|
|
return callback(error)
|
|
}
|
|
|
|
return callback(null, results)
|
|
})
|
|
}
|
|
|
|
function writeFileSync(aFile, anObject, options) {
|
|
const data = plist.build(anObject)
|
|
return fs.writeFileSync(aFile, data, options)
|
|
}
|
|
|
|
function writeFile(aFile, anObject, options, callback) {
|
|
if (arguments.length === 3 && typeof options === 'function') {
|
|
fs.writeFile(aFile, plist.build(anObject), options)
|
|
} else {
|
|
fs.writeFile(aFile, plist.build(anObject), options, callback)
|
|
}
|
|
}
|
|
|
|
function writeBinaryFileSync(aFile, anObject, options) {
|
|
return fs.writeFileSync(aFile, bplistCreator(anObject), options)
|
|
}
|
|
|
|
function writeBinaryFile(aFile, anObject, options, callback) {
|
|
if (arguments.length === 3 && typeof options === 'function') {
|
|
fs.writeFile(aFile, bplistCreator(anObject), options)
|
|
} else {
|
|
fs.writeFile(aFile, bplistCreator(anObject), options, callback)
|
|
}
|
|
}
|
|
|
|
function stringify(anObject) {
|
|
return plist.build(anObject)
|
|
}
|
|
|
|
module.exports = {
|
|
bplistCreator,
|
|
bplistParser,
|
|
parse,
|
|
plist,
|
|
readFile,
|
|
readFileSync,
|
|
stringify,
|
|
writeBinaryFile,
|
|
writeBinaryFileSync,
|
|
writeFile,
|
|
writeFileSync,
|
|
}
|