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