@mysten/sui
Version:
Sui TypeScript API
1 lines • 3.15 kB
Source Map (JSON)
{"version":3,"file":"cache.mjs","names":["#prefix","#cache"],"sources":["../../src/client/cache.ts"],"sourcesContent":["// Copyright (c) Mysten Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\n\nexport interface ClientCacheOptions {\n\tprefix?: string[];\n\tcache?: Map<string, unknown>;\n}\n\nexport class ClientCache {\n\t#prefix: string[];\n\t#cache: Map<string, unknown>;\n\n\tconstructor({ prefix, cache }: ClientCacheOptions = {}) {\n\t\tthis.#prefix = prefix ?? [];\n\t\tthis.#cache = cache ?? new Map();\n\t}\n\n\tread<T>(key: [string, ...string[]], load: () => T | Promise<T>): T | Promise<T> {\n\t\tconst cacheKey = [this.#prefix, ...key].join(':');\n\n\t\tif (this.#cache.has(cacheKey)) {\n\t\t\treturn this.#cache.get(cacheKey) as T;\n\t\t}\n\n\t\tconst result = load();\n\n\t\tthis.#cache.set(cacheKey, result);\n\n\t\tif (typeof result === 'object' && result !== null && 'then' in result) {\n\t\t\treturn Promise.resolve(result)\n\t\t\t\t.then((v) => {\n\t\t\t\t\tthis.#cache.set(cacheKey, v);\n\t\t\t\t\treturn v as T;\n\t\t\t\t})\n\t\t\t\t.catch((err) => {\n\t\t\t\t\tthis.#cache.delete(cacheKey);\n\t\t\t\t\tthrow err;\n\t\t\t\t});\n\t\t}\n\n\t\treturn result as T;\n\t}\n\n\treadSync<T>(key: [string, ...string[]], load: () => T): T {\n\t\tconst cacheKey = [this.#prefix, ...key].join(':');\n\n\t\tif (this.#cache.has(cacheKey)) {\n\t\t\treturn this.#cache.get(cacheKey) as T;\n\t\t}\n\n\t\tconst result = load();\n\n\t\tthis.#cache.set(cacheKey, result);\n\n\t\treturn result as T;\n\t}\n\n\tclear(prefix?: string[]) {\n\t\tconst prefixKey = [...this.#prefix, ...(prefix ?? [])].join(':');\n\t\tif (!prefixKey) {\n\t\t\tthis.#cache.clear();\n\t\t\treturn;\n\t\t}\n\n\t\tfor (const key of this.#cache.keys()) {\n\t\t\tif (key.startsWith(prefixKey)) {\n\t\t\t\tthis.#cache.delete(key);\n\t\t\t}\n\t\t}\n\t}\n\n\tscope(prefix: string | string[]) {\n\t\treturn new ClientCache({\n\t\t\tprefix: [...this.#prefix, ...(Array.isArray(prefix) ? prefix : [prefix])],\n\t\t\tcache: this.#cache,\n\t\t});\n\t}\n}\n"],"mappings":";AAQA,IAAa,cAAb,MAAa,YAAY;CACxB;CACA;CAEA,YAAY,EAAE,QAAQ,UAA8B,EAAE,EAAE;AACvD,QAAKA,SAAU,UAAU,EAAE;AAC3B,QAAKC,QAAS,yBAAS,IAAI,KAAK;;CAGjC,KAAQ,KAA4B,MAA4C;EAC/E,MAAM,WAAW,CAAC,MAAKD,QAAS,GAAG,IAAI,CAAC,KAAK,IAAI;AAEjD,MAAI,MAAKC,MAAO,IAAI,SAAS,CAC5B,QAAO,MAAKA,MAAO,IAAI,SAAS;EAGjC,MAAM,SAAS,MAAM;AAErB,QAAKA,MAAO,IAAI,UAAU,OAAO;AAEjC,MAAI,OAAO,WAAW,YAAY,WAAW,QAAQ,UAAU,OAC9D,QAAO,QAAQ,QAAQ,OAAO,CAC5B,MAAM,MAAM;AACZ,SAAKA,MAAO,IAAI,UAAU,EAAE;AAC5B,UAAO;IACN,CACD,OAAO,QAAQ;AACf,SAAKA,MAAO,OAAO,SAAS;AAC5B,SAAM;IACL;AAGJ,SAAO;;CAGR,SAAY,KAA4B,MAAkB;EACzD,MAAM,WAAW,CAAC,MAAKD,QAAS,GAAG,IAAI,CAAC,KAAK,IAAI;AAEjD,MAAI,MAAKC,MAAO,IAAI,SAAS,CAC5B,QAAO,MAAKA,MAAO,IAAI,SAAS;EAGjC,MAAM,SAAS,MAAM;AAErB,QAAKA,MAAO,IAAI,UAAU,OAAO;AAEjC,SAAO;;CAGR,MAAM,QAAmB;EACxB,MAAM,YAAY,CAAC,GAAG,MAAKD,QAAS,GAAI,UAAU,EAAE,CAAE,CAAC,KAAK,IAAI;AAChE,MAAI,CAAC,WAAW;AACf,SAAKC,MAAO,OAAO;AACnB;;AAGD,OAAK,MAAM,OAAO,MAAKA,MAAO,MAAM,CACnC,KAAI,IAAI,WAAW,UAAU,CAC5B,OAAKA,MAAO,OAAO,IAAI;;CAK1B,MAAM,QAA2B;AAChC,SAAO,IAAI,YAAY;GACtB,QAAQ,CAAC,GAAG,MAAKD,QAAS,GAAI,MAAM,QAAQ,OAAO,GAAG,SAAS,CAAC,OAAO,CAAE;GACzE,OAAO,MAAKC;GACZ,CAAC"}