UNPKG

@kikiutils/nitro-session

Version:
62 lines (59 loc) 2.2 kB
import { consola } from 'consola'; import { nanoid } from 'nanoid'; import { createStorage, prefixStorage } from 'unstorage'; import { importModule } from '../../utils.mjs'; class UnstorageDataHandler { #keyLength; #storage; constructor(keyLength, storage) { this.#keyLength = keyLength; this.#storage = storage; } static async createInstance(options) { const keyLength = options?.key?.length || 24; if (keyLength < 24) throw new Error('The unstorage key length must be 24 or more'); let storage; if (!options?.driver || options?.driver === 'memory') { storage = createStorage({ driver: (await importModule('unstorage/drivers/memory'))() }); } else { try { const driver = await importModule(`unstorage/drivers/${options.driver}`); storage = prefixStorage(createStorage({ driver: driver(options.options) }), options.key?.prefix || 'session'); } catch (error) { consola.error(error); // eslint-disable-next-line style/max-len throw new Error(`Failed to import or create unstorage driver '${options.driver}', please check if the relevant dependency is installed and the driver is supported and set the correct options.`); } } return new this(keyLength, storage); } delete(key) { return this.#storage.removeItem(key).catch(consola.error); } async get(event, key) { try { const data = await this.#storage.getItem(key); if (data) event.context._nitroSessionUnstorageKey = key; return data; } catch (error) { consola.error(error); } } async setOrProcessAndGetToken(event, data) { try { const key = event.context._nitroSessionUnstorageKey ||= nanoid(this.#keyLength); await this.#storage.setItem(key, data); return key; } catch (error) { consola.error(error); } } } export { UnstorageDataHandler }; //# sourceMappingURL=unstorage.mjs.map