| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104 |
- import path from "path";
- import { fileURLToPath } from "url";
- import Logs from "../libs/logs.js";
- import Cache from "../libs/cache.js";
- const __filename = fileURLToPath(import.meta.url);
- const __dirname = path.dirname(__filename);
- const STORE_FILE = path.join(__dirname, '../data/store.json');
- const STORE_DATA = {};
- const isPlainObject = (obj) => {
- if (Object.prototype.toString.call(obj) !== '[object Object]') return false;
- const proto = Object.getPrototypeOf(obj);
- return proto === Object.prototype || proto === null;
- }
- const initStore = () => {
- Cache.getData(STORE_FILE).then(data => {
- Logs.out('load store data', data);
- Object.assign(STORE_DATA, data);
- }).catch(error => {
- Logs.out('not load store data', error.message);
- });
- }
- const saveStore = () => {
- Cache.setData(STORE_FILE, STORE_DATA).catch(error => {
- Logs.out('save cache failed', error);
- });
- }
- export const get = (key, property) => {
- if (!key) {
- return STORE_DATA;
- }
- if (property) {
- return STORE_DATA[property]?.[key] ?? null;
- }
- return STORE_DATA[key] ?? null;
- }
- export const set = (key, value, property) => {
- if (typeof(key) == 'string' && typeof(value) != 'undefined') {
- if (property && typeof(property) == 'string') {
- if (!STORE_DATA[property]) {
- STORE_DATA[property] = {};
- }
- STORE_DATA[property][key] = value;
- }
- else {
- STORE_DATA[key] = value;
- }
- saveStore();
- }
- else if (isPlainObject(key)) {
- if (value && typeof(value) == 'string') {
- property = value;
- value = key;
- if (!STORE_DATA[property]) {
- STORE_DATA[property] = {};
- }
- Object.assign(STORE_DATA[property], value);
- }
- else {
- value = key;
- Object.assign(STORE_DATA, value);
- }
- saveStore();
- }
- else {
- Logs.out('invalid key or value', key, value);
- }
- }
- export const remove = (key, property) => {
- if (property && STORE_DATA[property]) {
- delete STORE_DATA[property][key];
- }
- else if (!property) {
- delete STORE_DATA[key];
- }
- saveStore();
- }
- // 进程结束时保存数据
- process.on('exit', saveStore);
- process.on('SIGINT', () => {
- process.exit(0);
- });
- process.on('SIGTERM', () => {
- process.exit(0);
- });
- process.on('SIGUSR2', () => {
- process.exit(0);
- });
- // 初始化缓存
- initStore();
- export default { get, set, remove };
|