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.
88 lines
1.8 KiB
88 lines
1.8 KiB
'use strict';
|
|
|
|
var path = require('path');
|
|
|
|
var _mkdirp;
|
|
function getMkdirp() {
|
|
if (!_mkdirp) {
|
|
_mkdirp = require('mkdirp');
|
|
}
|
|
return _mkdirp;
|
|
}
|
|
var _fs;
|
|
function getFS() {
|
|
if (!_fs) {
|
|
_fs = require('mz/fs');
|
|
}
|
|
return _fs;
|
|
}
|
|
|
|
exports.strictJSONParse = function (str) {
|
|
var obj = JSON.parse(str);
|
|
if (!obj || typeof obj !== 'object') {
|
|
throw new Error('JSON string is not object');
|
|
}
|
|
return obj;
|
|
};
|
|
|
|
exports.readJSONSync = function(filepath) {
|
|
if (!getFS().existsSync(filepath)) {
|
|
throw new Error(filepath + ' is not found');
|
|
}
|
|
return JSON.parse(getFS().readFileSync(filepath));
|
|
};
|
|
|
|
exports.writeJSONSync = function(filepath, str, options) {
|
|
options = options || {};
|
|
if (!('space' in options)) {
|
|
options.space = 2;
|
|
}
|
|
|
|
getMkdirp().sync(path.dirname(filepath));
|
|
if (typeof str === 'object') {
|
|
str = JSON.stringify(str, options.replacer, options.space) + '\n';
|
|
}
|
|
|
|
getFS().writeFileSync(filepath, str);
|
|
};
|
|
|
|
exports.readJSON = function(filepath) {
|
|
return getFS().exists(filepath)
|
|
.then(function(exists) {
|
|
if (!exists) {
|
|
throw new Error(filepath + ' is not found');
|
|
}
|
|
return getFS().readFile(filepath);
|
|
})
|
|
.then(function(buf) {
|
|
return JSON.parse(buf);
|
|
});
|
|
};
|
|
|
|
exports.writeJSON = function(filepath, str, options) {
|
|
options = options || {};
|
|
if (!('space' in options)) {
|
|
options.space = 2;
|
|
}
|
|
|
|
if (typeof str === 'object') {
|
|
str = JSON.stringify(str, options.replacer, options.space) + '\n';
|
|
}
|
|
|
|
return mkdir(path.dirname(filepath))
|
|
.then(function() {
|
|
return getFS().writeFile(filepath, str);
|
|
});
|
|
};
|
|
|
|
function mkdir(dir) {
|
|
return new Promise(function(resolve, reject) {
|
|
getMkdirp()(dir, function(err) {
|
|
if (err) {
|
|
return reject(err);
|
|
}
|
|
resolve();
|
|
});
|
|
});
|
|
}
|