You cannot select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
	
	
		
			56 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			JavaScript
		
	
			
		
		
	
	
			56 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			JavaScript
		
	
| const fs = require('fs');
 | |
| 
 | |
| const _ = require('lodash');
 | |
| 
 | |
| const ENCODING = 'utf8';
 | |
| 
 | |
| module.exports = {
 | |
|   start,
 | |
| };
 | |
| 
 | |
| function start(name, targetPath, options = {}) {
 | |
|   const { allowMalformedOnStartup } = options;
 | |
|   let cachedValue = null;
 | |
| 
 | |
|   try {
 | |
|     const text = fs.readFileSync(targetPath, ENCODING);
 | |
|     cachedValue = JSON.parse(text);
 | |
|     console.log(`config/get: Successfully read ${name} config file`);
 | |
| 
 | |
|     if (!cachedValue) {
 | |
|       console.log(`config/get: ${name} config value was falsy, cache is now empty object`);
 | |
|       cachedValue = Object.create(null);
 | |
|     }
 | |
|   } catch (error) {
 | |
|     if (!allowMalformedOnStartup && error.code !== 'ENOENT') {
 | |
|       throw error;
 | |
|     }
 | |
| 
 | |
|     console.log(`config/get: Did not find ${name} config file, cache is now empty object`);
 | |
|     cachedValue = Object.create(null);
 | |
|   }
 | |
| 
 | |
|   function get(keyPath) {
 | |
|     return _.get(cachedValue, keyPath);
 | |
|   }
 | |
| 
 | |
|   function set(keyPath, value) {
 | |
|     _.set(cachedValue, keyPath, value);
 | |
|     console.log(`config/set: Saving ${name} config to disk`);
 | |
|     const text = JSON.stringify(cachedValue, null, '  ');
 | |
|     fs.writeFileSync(targetPath, text, ENCODING);
 | |
|   }
 | |
| 
 | |
|   function remove() {
 | |
|     console.log(`config/remove: Deleting ${name} config from disk`);
 | |
|     fs.unlinkSync(targetPath);
 | |
|     cachedValue = Object.create(null);
 | |
|   }
 | |
| 
 | |
|   return {
 | |
|     set,
 | |
|     get,
 | |
|     remove,
 | |
|   };
 | |
| }
 |