@abstract-filesystem/filesystem
Version:
A abstract filesystem
126 lines • 4.3 kB
JavaScript
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.MemoryDriver = exports.FilesystemManagement = void 0;
const memory_driver_1 = __importDefault(require("./memory-driver"));
exports.MemoryDriver = memory_driver_1.default;
class FilesystemManagement {
constructor() {
this._drivers = new Map();
this._disks = new Map();
this._defaultDisk = null;
}
registerDriver(name, driver) {
this._drivers.set(name, driver);
return this;
}
driver(name) {
const driver = this._drivers.get(name);
if (!driver) {
throw new Error(`Driver not registered: ${name}`);
}
return driver;
}
drivers() {
return Array.from(this._drivers.keys());
}
hasDriver(name) {
return this._drivers.has(name);
}
hasDisk(name) {
return this._disks.has(name);
}
disks() {
return [...this._disks.keys()];
}
/**
* Make disk by driver
*/
makeDisk(driver, options) {
return __awaiter(this, void 0, void 0, function* () {
const driverName = driver.name;
const disk = new driver();
if (options) {
disk.config(options);
}
try {
yield disk.setup();
}
catch (e) {
console.error(`Setup driver failed, dist: ${name}, dirver: ${driverName}`);
throw e;
}
return disk;
});
}
/**
* Create disk by driver class
*/
registerDisk(diskName, driver, options) {
return __awaiter(this, void 0, void 0, function* () {
if (this.hasDisk(diskName)) {
throw new Error(`Disk already registered: ${diskName}`);
}
const driverName = driver.name;
const disk = yield this.makeDisk(driver, options);
this._disks.set(diskName, {
instance: disk,
driverName,
});
// Set first create disk is default disk
if (!this._defaultDisk)
this._defaultDisk = diskName;
return disk;
});
}
/**
* Create disk by driver name
*/
createDisk(name, driverName, options) {
return __awaiter(this, void 0, void 0, function* () {
if (!this.hasDriver(driverName)) {
throw new Error(`Driver not registered: ${driverName}`);
}
const driverClass = this.driver(driverName);
const disk = yield this.registerDisk(name, driverClass, options);
return disk;
});
}
disk(name) {
const detail = this._disks.get(name);
if (!detail) {
throw new Error(`Disk not exists: ${name}`);
}
return detail.instance;
}
defaultDiskName() {
return this._defaultDisk;
}
defaultDisk() {
if (!this._defaultDisk)
throw new Error('No disks defined');
return this.disk(this._defaultDisk);
}
setDefaultDisk(disk) {
if (!this.hasDisk(disk)) {
throw new Error('Set default disk failed, required disk is not exists: ' + disk);
}
this._defaultDisk = disk;
return this;
}
}
exports.FilesystemManagement = FilesystemManagement;
const fsm = new FilesystemManagement();
exports.default = fsm;
//# sourceMappingURL=index.js.map
;