blob: 850b3e8ecbf6133e183ad2f05202c7c22b737ccb [file] [log] [blame]
var bplistParser = require('bplist-parser'),
bplistCreator = require('bplist-creator'),
plist = require('plist'),
fs = require('fs');
// reveal the underlying modules
exports.plist = plist;
exports.bplistCreator = bplistCreator;
exports.bplistParser = bplistParser;
// Parses the given file and returns its contents as a native JavaScript
// object.
exports.readFileSync = function(aFile) {
var contents = fs.readFileSync(aFile);
if (contents.length === 0) {
console.error("Unable to read file '%s'", aFile);
return {};
}
return exports.parse(contents, aFile);
};
exports.readFile = function(aFile, callback) {
var results;
fs.readFile(aFile, function(err, contents){
if (err) {
callback(err);
}
else {
try {
results = exports.parse(contents, aFile);
callback(null,results);
}
catch(err) {
callback(err);
}
}
});
}
exports.writeFileSync = function(aFile, anObject, options) {
var data = plist.build(anObject);
fs.writeFileSync(aFile, data, options);
};
exports.writeFile = function(aFile, anObject, options, callback) {
if (arguments.length === 3 && typeof options === 'function') {
callback = options;
options = undefined;
}
var data = plist.build(anObject);
fs.writeFile(aFile, data, options, callback);
};
exports.writeBinaryFileSync = function(aFile, anObject, options) {
var data = bplistCreator(anObject);
fs.writeFileSync(aFile, data, options);
};
exports.writeBinaryFile = function(aFile, anObject, options, callback) {
if (arguments.length === 3 && typeof options === 'function') {
callback = options;
options = undefined;
}
var data = bplistCreator(anObject);
fs.writeFile(aFile, data, options, callback);
};
exports.stringify = function(anObject) {
return plist.build(anObject);
};
exports.parse = function(aStringOrBuffer, aFile) {
var results,
firstByte = aStringOrBuffer[0];
try {
if (firstByte === 60 || firstByte === '<') {
results = plist.parse(aStringOrBuffer.toString());
}
else if (firstByte === 98) {
results = bplistParser.parseBuffer(aStringOrBuffer)[0];
}
else {
if (aFile != undefined) {
console.error("Unable to determine format for '%s'", aFile);
}
else {
console.error("Unable to determine format for plist aStringOrBuffer: '%s'", aStringOrBuffer);
}
results = {};
}
}
catch(e) {
throw Error("'%s' has errors", aFile);
}
return results;
}