You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

111 lines
4.3 KiB

2 years ago
"use strict";
var __extends = (this && this.__extends) || (function () {
var extendStatics = function (d, b) {
extendStatics = Object.setPrototypeOf ||
({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };
return extendStatics(d, b);
};
return function (d, b) {
if (typeof b !== "function" && b !== null)
throw new TypeError("Class extends value " + String(b) + " is not a constructor or null");
extendStatics(d, b);
function __() { this.constructor = d; }
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
};
})();
Object.defineProperty(exports, "__esModule", { value: true });
exports.createVolume = exports.ObjectStore = void 0;
var volume_1 = require("./volume");
var node_1 = require("./node");
var ObjectStore = /** @class */ (function () {
function ObjectStore(obj) {
this.obj = obj;
}
ObjectStore.prototype.setItem = function (key, json) {
this.obj[key] = JSON.stringify(json);
};
ObjectStore.prototype.getItem = function (key) {
var data = this.obj[key];
if (typeof data === void 0)
return void 0;
return JSON.parse(data);
};
ObjectStore.prototype.removeItem = function (key) {
delete this.obj[key];
};
return ObjectStore;
}());
exports.ObjectStore = ObjectStore;
function createVolume(namespace, LS) {
if (LS === void 0) { LS = localStorage; }
var store = new ObjectStore(LS);
var key = function (type, id) { return "memfs.".concat(namespace, ".").concat(type, ".").concat(id); };
var NodeLocalStorage = /** @class */ (function (_super) {
__extends(NodeLocalStorage, _super);
function NodeLocalStorage() {
return _super !== null && _super.apply(this, arguments) || this;
}
Object.defineProperty(NodeLocalStorage.prototype, "Key", {
get: function () {
if (!this._key)
this._key = key('ino', this.ino);
return this._key;
},
enumerable: false,
configurable: true
});
NodeLocalStorage.prototype.sync = function () {
store.setItem(this.Key, this.toJSON());
};
NodeLocalStorage.prototype.touch = function () {
_super.prototype.touch.call(this);
this.sync();
};
NodeLocalStorage.prototype.del = function () {
_super.prototype.del.call(this);
store.removeItem(this.Key);
};
return NodeLocalStorage;
}(node_1.Node));
var LinkLocalStorage = /** @class */ (function (_super) {
__extends(LinkLocalStorage, _super);
function LinkLocalStorage() {
return _super !== null && _super.apply(this, arguments) || this;
}
Object.defineProperty(LinkLocalStorage.prototype, "Key", {
get: function () {
if (!this._key)
this._key = key('link', this.getPath());
return this._key;
},
enumerable: false,
configurable: true
});
LinkLocalStorage.prototype.sync = function () {
store.setItem(this.Key, this.toJSON());
};
return LinkLocalStorage;
}(node_1.Link));
return /** @class */ (function (_super) {
__extends(VolumeLocalStorage, _super);
function VolumeLocalStorage() {
return _super.call(this, {
Node: NodeLocalStorage,
Link: LinkLocalStorage,
}) || this;
}
VolumeLocalStorage.prototype.createLink = function (parent, name, isDirectory, perm) {
var link = _super.prototype.createLink.call(this, parent, name, isDirectory, perm);
store.setItem(key('link', link.getPath()), link.toJSON());
return link;
};
VolumeLocalStorage.prototype.deleteLink = function (link) {
store.removeItem(key('link', link.getPath()));
return _super.prototype.deleteLink.call(this, link);
};
return VolumeLocalStorage;
}(volume_1.Volume));
}
exports.createVolume = createVolume;