web_lib

Common web application libraries
git clone https://radroots.dev/git/web_lib.git
Log | Files | Refs | LICENSE

keyval.ts (1962B)


      1 import { browser } from "$app/environment";
      2 import { fmt_id, IdbKeyval } from "@radroots/apps-lib";
      3 import { _env_lib } from "$lib/utils/_env";
      4 
      5 export let idb_kv: IdbKeyval | undefined;
      6 if (browser) idb_kv = new IdbKeyval({ name: _env_lib.KEYVAL_NAME });
      7 
      8 export const idb_kv_init = async (): Promise<void> => {
      9     if (!browser || !idb_kv) return;
     10     const kv = idb_kv;
     11     const range = IdbKeyval.prefix(`*`);
     12     const idb_kv_list = await kv.each({ range }, `keys`);
     13     await Promise.all(idb_kv_list.map((i) => kv.delete(i)));
     14 };
     15 
     16 export const idb_kv_init_page = async (): Promise<void> => {
     17     if (!browser || !idb_kv) return;
     18     const kv = idb_kv;
     19     const idb_kv_pref = fmt_id();
     20     const range = IdbKeyval.prefix(idb_kv_pref);
     21     const idb_kv_list = await kv.each({ range }, `keys`);
     22     await Promise.all(idb_kv_list.map((i) => kv.delete(i)));
     23 };
     24 
     25 export const idb_kv_sync = async (list: [string, string][]): Promise<void> => {
     26     if (!browser || !idb_kv) return;
     27     const kv = idb_kv;
     28     for (const [key, val] of list) await kv.set(key, val);
     29 };
     30 
     31 export interface IIdbLib<T extends string> {
     32     init: () => Promise<void>;
     33     save: (key: T, value: string) => Promise<void>;
     34     read: (key: T) => Promise<string | undefined>;
     35     del: (key: T) => Promise<void>;
     36 }
     37 
     38 export class IdbLib<T extends string> implements IIdbLib<T> {
     39     private _idb: IdbKeyval;
     40 
     41     constructor(kv: IdbKeyval) {
     42         this._idb = kv;
     43     }
     44 
     45     public init = async (): Promise<void> => {
     46         await idb_kv_init_page();
     47     };
     48 
     49     public save = async (key: T, value: string): Promise<void> => {
     50         await this._idb.set(fmt_id(key), value);
     51     };
     52 
     53     public read = async (key: T): Promise<string | undefined> => {
     54         const result = await this._idb.get<string>(fmt_id(key));
     55         if (result) return result;
     56         return undefined;
     57     };
     58 
     59     public del = async (key: T): Promise<void> => {
     60         await this._idb.delete(fmt_id(key));
     61     };
     62 }