forked from notion-enhancer/notion-enhancer
-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathstore.js
39 lines (35 loc) · 1.01 KB
/
store.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
/*
* notion-enhancer
* (c) 2020 dragonwocky <thedragonring.bod@gmail.com> (https://dragonwocky.me/)
* under the MIT license
*/
'use strict';
const path = require('path'),
fs = require('fs-extra'),
{ getJSON, data_folder } = require('./helpers.js');
// a wrapper for accessing data stored in a JSON file.
module.exports = (namespace, defaults = {}) => {
namespace = path.resolve(`${data_folder}/${namespace}.json`);
fs.ensureDirSync(data_folder);
let data;
const saveData = () => fs.writeJsonSync(namespace, data),
handler = {
get(obj, prop) {
if (prop === 'isProxy') return true;
if (
typeof obj[prop] === 'object' &&
obj[prop] !== null &&
!obj[prop].isProxy
)
obj[prop] = new Proxy(obj[prop], handler);
return obj[prop];
},
set(obj, prop, val) {
obj[prop] = val;
saveData();
return true;
},
};
data = new Proxy({ ...defaults, ...getJSON(namespace) }, handler);
return data;
};