@agnostack/requestd
Version:
Please contact agnoStack via info@agnostack.com for any questions
61 lines • 2.62 kB
JavaScript
;
var __rest = (this && this.__rest) || function (s, e) {
var t = {};
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
t[p] = s[p];
if (s != null && typeof Object.getOwnPropertySymbols === "function")
for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
t[p[i]] = s[p[i]];
}
return t;
};
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const StorageCookie_1 = __importDefault(require("./StorageCookie"));
const StorageInMemory_1 = __importDefault(require("./StorageInMemory"));
const StorageLocal_1 = __importDefault(require("./StorageLocal"));
const StorageNode_1 = __importDefault(require("./StorageNode"));
const StorageSession_1 = __importDefault(require("./StorageSession"));
const utils_1 = require("../utils");
const DEFAULT_STORAGE = './_storage';
const STORAGE_TYPES = [
StorageNode_1.default,
StorageLocal_1.default,
StorageCookie_1.default,
StorageSession_1.default,
StorageInMemory_1.default
];
const getStorage = (StorageType, config) => {
if (!StorageType.isSupported()) {
return undefined;
}
const storageInstance = new StorageType(config);
return (storageInstance === null || storageInstance === void 0 ? void 0 : storageInstance.storage) ? storageInstance : undefined;
};
class FactoryStorage {
static getInstance(_config) {
const _a = (0, utils_1.ensureObject)(_config), { storage_key: storageKey } = _a, __config = __rest(_a, ["storage_key"]);
const config = Object.assign(Object.assign({}, __config), { storage_key: storageKey || DEFAULT_STORAGE });
let storage = this._storage[config.storage_key];
if (storage) {
return storage;
}
// NOTE: intentionally using for loops instead of map so we can break to exit quickly soon as matched
// eslint-disable-next-line no-restricted-syntax
for (const StorageType of STORAGE_TYPES) {
const _storage = getStorage(StorageType, config);
if (_storage) {
storage = _storage;
break;
}
}
FactoryStorage._storage[config.storage_key] = storage;
return storage;
}
}
FactoryStorage._storage = {};
exports.default = FactoryStorage;
//# sourceMappingURL=FactoryStorage.js.map