UNPKG

@kikiutils/nitro-session

Version:
1 lines 4.34 kB
{"version":3,"file":"unstorage.mjs","sources":["../../../src/handlers/data/unstorage.ts"],"sourcesContent":["import { consola } from 'consola';\nimport type { H3Event } from 'h3';\nimport { nanoid } from 'nanoid';\nimport {\n createStorage,\n prefixStorage,\n} from 'unstorage';\nimport type { Storage } from 'unstorage';\n\nimport type { DataStorageOptions } from '../../types/options';\nimport { importModule } from '../../utils';\n\nimport type { StoredData } from './';\n\nexport class UnstorageDataHandler {\n #keyLength: number;\n #storage: Storage;\n\n private constructor(keyLength: number, storage: Storage) {\n this.#keyLength = keyLength;\n this.#storage = storage;\n }\n\n static async createInstance(options?: Exclude<DataStorageOptions, DataStorageOptions.CookieOrHeader>) {\n const keyLength = options?.key?.length || 24;\n if (keyLength < 24) throw new Error('The unstorage key length must be 24 or more');\n let storage;\n if (!options?.driver || options?.driver === 'memory') {\n storage = createStorage({ driver: (await importModule('unstorage/drivers/memory'))() });\n } else {\n try {\n const driver = await importModule(`unstorage/drivers/${options.driver}`);\n storage = prefixStorage(\n createStorage({ driver: driver(options.options) }),\n options.key?.prefix || 'session',\n );\n } catch (error) {\n consola.error(error);\n // eslint-disable-next-line style/max-len\n 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.`);\n }\n }\n\n return new this(keyLength, storage);\n }\n\n delete(key: string) {\n return this.#storage.removeItem(key).catch(consola.error);\n }\n\n async get(event: H3Event, key: string) {\n try {\n const data = await this.#storage.getItem<StoredData>(key);\n if (data) event.context._nitroSessionUnstorageKey = key;\n return data;\n } catch (error) {\n consola.error(error);\n }\n }\n\n async setOrProcessAndGetToken(event: H3Event, data: StoredData) {\n try {\n const key = event.context._nitroSessionUnstorageKey ||= nanoid(this.#keyLength);\n await this.#storage.setItem(key, data);\n return key;\n } catch (error) {\n consola.error(error);\n }\n }\n}\n"],"names":[],"mappings":";;;;;MAca,oBAAoB,CAAA;AAC7B,IAAA,UAAU;AACV,IAAA,QAAQ;IAER,WAAoB,CAAA,SAAiB,EAAE,OAAgB,EAAA;AACnD,QAAA,IAAI,CAAC,UAAU,GAAG,SAAS;AAC3B,QAAA,IAAI,CAAC,QAAQ,GAAG,OAAO;;AAG3B,IAAA,aAAa,cAAc,CAAC,OAAwE,EAAA;QAChG,MAAM,SAAS,GAAG,OAAO,EAAE,GAAG,EAAE,MAAM,IAAI,EAAE;QAC5C,IAAI,SAAS,GAAG,EAAE;AAAE,YAAA,MAAM,IAAI,KAAK,CAAC,6CAA6C,CAAC;AAClF,QAAA,IAAI,OAAO;QACX,IAAI,CAAC,OAAO,EAAE,MAAM,IAAI,OAAO,EAAE,MAAM,KAAK,QAAQ,EAAE;AAClD,YAAA,OAAO,GAAG,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC,MAAM,YAAY,CAAC,0BAA0B,CAAC,GAAG,EAAE,CAAC;;aACpF;AACH,YAAA,IAAI;gBACA,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC,CAAqB,kBAAA,EAAA,OAAO,CAAC,MAAM,CAAE,CAAA,CAAC;gBACxE,OAAO,GAAG,aAAa,CACnB,aAAa,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,EAClD,OAAO,CAAC,GAAG,EAAE,MAAM,IAAI,SAAS,CACnC;;YACH,OAAO,KAAK,EAAE;AACZ,gBAAA,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC;;gBAEpB,MAAM,IAAI,KAAK,CAAC,CAAA,6CAAA,EAAgD,OAAO,CAAC,MAAM,CAAkH,gHAAA,CAAA,CAAC;;;AAIzM,QAAA,OAAO,IAAI,IAAI,CAAC,SAAS,EAAE,OAAO,CAAC;;AAGvC,IAAA,MAAM,CAAC,GAAW,EAAA;AACd,QAAA,OAAO,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;;AAG7D,IAAA,MAAM,GAAG,CAAC,KAAc,EAAE,GAAW,EAAA;AACjC,QAAA,IAAI;YACA,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAa,GAAG,CAAC;AACzD,YAAA,IAAI,IAAI;AAAE,gBAAA,KAAK,CAAC,OAAO,CAAC,yBAAyB,GAAG,GAAG;AACvD,YAAA,OAAO,IAAI;;QACb,OAAO,KAAK,EAAE;AACZ,YAAA,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC;;;AAI5B,IAAA,MAAM,uBAAuB,CAAC,KAAc,EAAE,IAAgB,EAAA;AAC1D,QAAA,IAAI;AACA,YAAA,MAAM,GAAG,GAAG,KAAK,CAAC,OAAO,CAAC,yBAAyB,KAAK,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC;YAC/E,MAAM,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,EAAE,IAAI,CAAC;AACtC,YAAA,OAAO,GAAG;;QACZ,OAAO,KAAK,EAAE;AACZ,YAAA,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC;;;AAG/B;;;;"}