UNPKG

@abstract-filesystem/filesystem

Version:
126 lines 4.3 kB
"use strict"; 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