| 
						 | 
						- '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();
 -     });
 -   });
 - }
 
 
  |