jodit
Version:
Jodit is an awesome and useful wysiwyg editor with filebrowser
70 lines (69 loc) • 2.64 kB
JavaScript
/*!
* Jodit Editor (https://xdsoft.net/jodit/)
* Released under MIT see LICENSE.txt in the project root for license information.
* Copyright (c) 2013-2026 Valerii Chupurnov. All rights reserved. https://xdsoft.net
*/
import { camelCase } from "../helpers/string/camel-case.js";
import { canUseIndexedDB, IndexedDBProvider } from "./engines/indexed-db-provider.js";
import { canUsePersistentStorage, LocalStorageProvider } from "./engines/local-storage-provider.js";
import { MemoryStorageProvider } from "./engines/memory-storage-provider.js";
import { StorageKey } from "./storage.js";
export class AsyncStorage {
constructor(provider, suffix) {
this.provider = provider;
this.prefix = StorageKey;
if (suffix) {
this.prefix += suffix;
}
}
async set(key, value) {
const provider = await this.provider;
await provider.set(camelCase(this.prefix + key), value);
return this;
}
async delete(key) {
const provider = await this.provider;
await provider.delete(camelCase(this.prefix + key));
return this;
}
async get(key) {
const provider = await this.provider;
return provider.get(camelCase(this.prefix + key));
}
async exists(key) {
const provider = await this.provider;
return provider.exists(camelCase(this.prefix + key));
}
async clear() {
const provider = await this.provider;
await provider.clear();
return this;
}
async close() {
const provider = await this.provider;
if ('close' in provider && typeof provider.close === 'function') {
await provider.close();
}
}
static makeStorage(persistentOrStrategy = false, suffix) {
let provider = undefined;
let storage = null;
if (persistentOrStrategy === 'localStorage' ||
persistentOrStrategy === 'sessionStorage') {
if (canUsePersistentStorage(persistentOrStrategy)) {
provider = new LocalStorageProvider(StorageKey + (suffix || ''), persistentOrStrategy);
}
}
else if (persistentOrStrategy === 'indexedDB' ||
persistentOrStrategy === true) {
provider = canUseIndexedDB().then(canUse => canUse
? new IndexedDBProvider(StorageKey + (suffix || ''), 'keyValueStore')
: new MemoryStorageProvider());
}
if (!provider) {
provider = new MemoryStorageProvider();
}
storage = new AsyncStorage(Promise.resolve(provider), suffix);
return storage;
}
}