| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253 |
- import fs = require('fs');
- import { Storage } from './storage';
- export class StorageNode implements Storage {
- private prefix: string;
- constructor(id:string) {
- try {
- fs.mkdirSync("data");
- } catch (e) {
- // ignore
- }
- const safeId = id.replace(/[^A-Za-z0-9]/g, "");
- if (safeId === '') {
- throw new Error("must have non-empty id");
- }
- this.prefix = safeId;
- }
- public async getValues() {
- return Object.values(this.getMap());
- }
- public async get(key:string) {
- return this.getMap()[key];
- }
- public async set(key:string, value:any) {
- const filename = "data/storage_" + this.prefix;
- let map;
- try {
- const contents = fs.readFileSync(filename, {encoding: 'utf-8'});
- map = JSON.parse(contents);
- } catch(e) {
- map = {};
- }
- map[key] = value;
- fs.writeFileSync(filename, JSON.stringify(map));
- }
- private getMap() {
- try {
- const filename = "data/storage_" + this.prefix;
- const contents = fs.readFileSync(filename, {encoding: 'utf-8'});
- return JSON.parse(contents);
- } catch (e) {
- return {};
- }
- }
- }
|