@blinkk/editor
Version:
Structured content editor with live previews.
112 lines • 2.83 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.SessionDataStorage = exports.LocalDataStorage = exports.DataStorage = void 0;
/**
* Utility for working with different storages.
*
* Built-in 'in-memory' storage fallback.
*/
class DataStorage {
clear() {
return this.storageObj.clear();
}
get length() {
return this.storageObj.length;
}
get storageObj() {
if (!this.storage) {
this.storage = new InMemoryStorage();
}
return this.storage;
}
getItem(key) {
return this.storageObj.getItem(key);
}
getItemArray(key) {
const value = this.getItem(key);
if (!value) {
return [];
}
return JSON.parse(value);
}
getItemBoolean(key, defaultValue = false) {
const value = this.getItem(key);
if (value === null) {
return defaultValue;
}
return value === 'true';
}
getItemRecord(key) {
const value = this.getItem(key);
if (!value) {
return {};
}
return JSON.parse(value);
}
key(index) {
return this.storageObj.key(index);
}
removeItem(key) {
return this.storageObj.removeItem(key);
}
setItem(key, value) {
return this.storageObj.setItem(key, value);
}
setItemArray(key, value) {
return this.storageObj.setItem(key, JSON.stringify(value));
}
setItemBoolean(key, value) {
return this.storageObj.setItem(key, value ? 'true' : 'false');
}
setItemRecord(key, value) {
return this.storageObj.setItem(key, JSON.stringify(value));
}
}
exports.DataStorage = DataStorage;
/* istanbul ignore next */
class LocalDataStorage extends DataStorage {
get storageObj() {
return localStorage;
}
}
exports.LocalDataStorage = LocalDataStorage;
/* istanbul ignore next */
class SessionDataStorage extends DataStorage {
get storageObj() {
return sessionStorage;
}
}
exports.SessionDataStorage = SessionDataStorage;
class InMemoryStorage {
constructor() {
this.obj = {};
}
clear() {
this.obj = {};
}
getItem(index) {
if (this.obj[index] !== undefined) {
return this.obj[index];
}
return null;
}
key(index) {
const keys = Object.keys(this.obj).sort();
if (index < keys.length) {
return this.obj[keys[index]];
}
return null;
}
get length() {
return Object.keys(this.obj).length;
}
removeItem(index) {
if (this.obj[index] !== undefined) {
delete this.obj[index];
}
}
setItem(index, value) {
this.obj[index] = value;
}
}
//# sourceMappingURL=dataStorage.js.map