2021-02-20 23:39:03 +01:00
|
|
|
const fs = require('fs/promises');
|
|
|
|
const fss = require('fs');
|
2021-02-20 15:13:56 +01:00
|
|
|
|
2021-02-20 23:39:03 +01:00
|
|
|
const logger = require('logplease').create('state');
|
|
|
|
const state = new Map();
|
2021-02-20 15:13:56 +01:00
|
|
|
|
|
|
|
function replacer(key, value) {
|
|
|
|
if(value instanceof Map) {
|
|
|
|
return {
|
2021-02-20 23:39:03 +01:00
|
|
|
data_type: 'Map',
|
2021-02-20 15:13:56 +01:00
|
|
|
value: Array.from(value.entries()),
|
2021-02-20 23:39:03 +01:00
|
|
|
};
|
2021-02-20 15:13:56 +01:00
|
|
|
} else {
|
2021-02-20 23:39:03 +01:00
|
|
|
return value;
|
2021-02-20 15:13:56 +01:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
function reviver(key, value) {
|
2021-02-20 23:39:03 +01:00
|
|
|
if(typeof value === 'object' && value !== null) {
|
|
|
|
if (value.data_type === 'Map') {
|
|
|
|
return new Map(value.value);
|
2021-02-20 15:13:56 +01:00
|
|
|
}
|
|
|
|
}
|
2021-02-20 23:39:03 +01:00
|
|
|
return value;
|
2021-02-20 15:13:56 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
module.exports = {
|
|
|
|
state,
|
|
|
|
async load(data_file){
|
2021-02-20 23:39:03 +01:00
|
|
|
if(fss.exists_sync(data_file)){
|
|
|
|
logger.info('Loading state from file');
|
|
|
|
var content = await fs.read_file(data_file);
|
2021-02-20 15:13:56 +01:00
|
|
|
var obj = JSON.parse(content.toString(), reviver);
|
2021-02-20 23:39:03 +01:00
|
|
|
[...obj.keys()].forEach(k => state.set(k, obj.get(k)));
|
2021-02-20 15:13:56 +01:00
|
|
|
}else{
|
2021-02-20 23:39:03 +01:00
|
|
|
logger.info('Creating new statefile');
|
|
|
|
state.set('repositories', new Map().set('offical', 'https://repo.pistonee.org/index.yaml'));
|
2021-02-20 15:13:56 +01:00
|
|
|
}
|
|
|
|
},
|
|
|
|
async save(data_file){
|
2021-02-20 23:39:03 +01:00
|
|
|
logger.info('Saving state to disk');
|
|
|
|
await fs.write_file(data_file, JSON.stringify(state, replacer));
|
2021-02-20 15:13:56 +01:00
|
|
|
}
|
2021-02-20 23:39:03 +01:00
|
|
|
};
|