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.
		
		
		
		
		
			
		
			
				
					75 lines
				
				1.6 KiB
			
		
		
			
		
	
	
					75 lines
				
				1.6 KiB
			| 
								 
											3 years ago
										 
									 | 
							
								'use strict';
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								var fs = require('mz/fs');
							 | 
						||
| 
								 | 
							
								var path = require('path');
							 | 
						||
| 
								 | 
							
								var mkdirp = require('mkdirp');
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								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 (!fs.existsSync(filepath)) {
							 | 
						||
| 
								 | 
							
								    throw new Error(filepath + ' is not found');
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								  return JSON.parse(fs.readFileSync(filepath));
							 | 
						||
| 
								 | 
							
								};
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								exports.writeJSONSync = function(filepath, str, options) {
							 | 
						||
| 
								 | 
							
								  options = options || {};
							 | 
						||
| 
								 | 
							
								  if (!('space' in options)) {
							 | 
						||
| 
								 | 
							
								    options.space = 2;
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  mkdirp.sync(path.dirname(filepath));
							 | 
						||
| 
								 | 
							
								  if (typeof str === 'object') {
							 | 
						||
| 
								 | 
							
								    str = JSON.stringify(str, options.replacer, options.space) + '\n';
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  fs.writeFileSync(filepath, str);
							 | 
						||
| 
								 | 
							
								};
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								exports.readJSON = function(filepath) {
							 | 
						||
| 
								 | 
							
								  return fs.exists(filepath)
							 | 
						||
| 
								 | 
							
								    .then(function(exists) {
							 | 
						||
| 
								 | 
							
								      if (!exists) {
							 | 
						||
| 
								 | 
							
								        throw new Error(filepath + ' is not found');
							 | 
						||
| 
								 | 
							
								      }
							 | 
						||
| 
								 | 
							
								      return fs.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 fs.writeFile(filepath, str);
							 | 
						||
| 
								 | 
							
								    });
							 | 
						||
| 
								 | 
							
								};
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								function mkdir(dir) {
							 | 
						||
| 
								 | 
							
								  return new Promise(function(resolve, reject) {
							 | 
						||
| 
								 | 
							
								    mkdirp(dir, function(err) {
							 | 
						||
| 
								 | 
							
								      if (err) {
							 | 
						||
| 
								 | 
							
								        return reject(err);
							 | 
						||
| 
								 | 
							
								      }
							 | 
						||
| 
								 | 
							
								      resolve();
							 | 
						||
| 
								 | 
							
								    });
							 | 
						||
| 
								 | 
							
								  });
							 | 
						||
| 
								 | 
							
								}
							 |