74 lines
2.1 KiB
JavaScript
74 lines
2.1 KiB
JavaScript
"use strict";
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
exports.createVolume = exports.ObjectStore = void 0;
|
|
const volume_1 = require("./volume");
|
|
const node_1 = require("./node");
|
|
class ObjectStore {
|
|
constructor(obj) {
|
|
this.obj = obj;
|
|
}
|
|
setItem(key, json) {
|
|
this.obj[key] = JSON.stringify(json);
|
|
}
|
|
getItem(key) {
|
|
const data = this.obj[key];
|
|
if (typeof data === void 0)
|
|
return void 0;
|
|
return JSON.parse(data);
|
|
}
|
|
removeItem(key) {
|
|
delete this.obj[key];
|
|
}
|
|
}
|
|
exports.ObjectStore = ObjectStore;
|
|
function createVolume(namespace, LS = localStorage) {
|
|
const store = new ObjectStore(LS);
|
|
const key = (type, id) => `memfs.${namespace}.${type}.${id}`;
|
|
class NodeLocalStorage extends node_1.Node {
|
|
get Key() {
|
|
if (!this._key)
|
|
this._key = key("ino", this.ino);
|
|
return this._key;
|
|
}
|
|
sync() {
|
|
store.setItem(this.Key, this.toJSON());
|
|
}
|
|
touch() {
|
|
super.touch();
|
|
this.sync();
|
|
}
|
|
del() {
|
|
super.del();
|
|
store.removeItem(this.Key);
|
|
}
|
|
}
|
|
class LinkLocalStorage extends node_1.Link {
|
|
get Key() {
|
|
if (!this._key)
|
|
this._key = key("link", this.getPath());
|
|
return this._key;
|
|
}
|
|
sync() {
|
|
store.setItem(this.Key, this.toJSON());
|
|
}
|
|
}
|
|
return class VolumeLocalStorage extends volume_1.Volume {
|
|
constructor() {
|
|
super({
|
|
Node: NodeLocalStorage,
|
|
Link: LinkLocalStorage,
|
|
});
|
|
}
|
|
createLink(parent, name, isDirectory, perm) {
|
|
const link = super.createLink(parent, name, isDirectory, perm);
|
|
store.setItem(key("link", link.getPath()), link.toJSON());
|
|
return link;
|
|
}
|
|
deleteLink(link) {
|
|
store.removeItem(key("link", link.getPath()));
|
|
return super.deleteLink(link);
|
|
}
|
|
};
|
|
}
|
|
exports.createVolume = createVolume;
|