@fjell/cache 4.6.19 → 4.6.21
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/Cache.d.ts +2 -2
- package/dist/CacheMap.d.ts +3 -0
- package/dist/Operations.d.ts +1 -1
- package/dist/index.js +21 -3
- package/dist/index.js.map +2 -2
- package/dist/ops/action.d.ts +1 -1
- package/dist/ops/all.d.ts +1 -1
- package/dist/ops/allAction.d.ts +1 -1
- package/dist/ops/allFacet.d.ts +1 -1
- package/dist/ops/create.d.ts +1 -1
- package/dist/ops/facet.d.ts +1 -1
- package/dist/ops/find.d.ts +1 -1
- package/dist/ops/findOne.d.ts +1 -1
- package/dist/ops/get.d.ts +1 -1
- package/dist/ops/one.d.ts +1 -1
- package/dist/ops/remove.d.ts +1 -1
- package/dist/ops/reset.d.ts +1 -1
- package/dist/ops/retrieve.d.ts +1 -1
- package/dist/ops/set.d.ts +1 -1
- package/dist/ops/update.d.ts +1 -1
- package/package.json +2 -3
package/dist/Cache.d.ts
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { Item } from "@fjell/core";
|
|
2
2
|
import { Instance as BaseInstance, Coordinate, Registry } from "@fjell/registry";
|
|
3
3
|
import { ClientApi } from "@fjell/client-api";
|
|
4
|
-
import { CacheMap } from "
|
|
5
|
-
import { Operations } from "
|
|
4
|
+
import { CacheMap } from "./CacheMap";
|
|
5
|
+
import { Operations } from "./Operations";
|
|
6
6
|
/**
|
|
7
7
|
* The Cache interface extends the base Instance from @fjell/registry and adds cache operations
|
|
8
8
|
* for interacting with cached data.
|
package/dist/CacheMap.d.ts
CHANGED
|
@@ -1,10 +1,13 @@
|
|
|
1
1
|
import { AllItemTypeArrays, ComKey, Dictionary, Item, ItemQuery, LocKeyArray, PriKey } from "@fjell/core";
|
|
2
2
|
export declare class CacheMap<V extends Item<S, L1, L2, L3, L4, L5>, S extends string, L1 extends string = never, L2 extends string = never, L3 extends string = never, L4 extends string = never, L5 extends string = never> extends Dictionary<ComKey<S, L1, L2, L3, L4, L5> | PriKey<S>, V> {
|
|
3
3
|
private types;
|
|
4
|
+
private normalizedHashFunction;
|
|
4
5
|
constructor(types: AllItemTypeArrays<S, L1, L2, L3, L4, L5>, map?: {
|
|
5
6
|
[key: string]: V;
|
|
6
7
|
});
|
|
7
8
|
get(key: ComKey<S, L1, L2, L3, L4, L5> | PriKey<S>): V | null;
|
|
9
|
+
includesKey(key: ComKey<S, L1, L2, L3, L4, L5> | PriKey<S>): boolean;
|
|
10
|
+
delete(key: ComKey<S, L1, L2, L3, L4, L5> | PriKey<S>): void;
|
|
8
11
|
allIn(locations: LocKeyArray<L1, L2, L3, L4, L5> | []): V[];
|
|
9
12
|
contains(query: ItemQuery, locations: LocKeyArray<L1, L2, L3, L4, L5> | []): boolean;
|
|
10
13
|
queryIn(query: ItemQuery, locations?: LocKeyArray<L1, L2, L3, L4, L5> | []): V[];
|
package/dist/Operations.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { ComKey, Item, ItemQuery, LocKeyArray, PriKey } from "@fjell/core";
|
|
2
2
|
import { ClientApi } from "@fjell/client-api";
|
|
3
3
|
import { Coordinate } from "@fjell/registry";
|
|
4
|
-
import { CacheMap } from "
|
|
4
|
+
import { CacheMap } from "./CacheMap";
|
|
5
5
|
export interface Operations<V extends Item<S, L1, L2, L3, L4, L5>, S extends string, L1 extends string = never, L2 extends string = never, L3 extends string = never, L4 extends string = never, L5 extends string = never> {
|
|
6
6
|
/**
|
|
7
7
|
* Retrieves all the items that match the query from cache or API.
|
package/dist/index.js
CHANGED
|
@@ -270,12 +270,28 @@ var normalizeLocKeyItem = (item) => {
|
|
|
270
270
|
};
|
|
271
271
|
var CacheMap = class _CacheMap extends Dictionary {
|
|
272
272
|
types;
|
|
273
|
+
normalizedHashFunction;
|
|
273
274
|
constructor(types, map) {
|
|
274
|
-
|
|
275
|
+
const hashFunc = createNormalizedHashFunction();
|
|
276
|
+
super(map, hashFunc);
|
|
275
277
|
this.types = types;
|
|
278
|
+
this.normalizedHashFunction = hashFunc;
|
|
276
279
|
}
|
|
277
280
|
get(key) {
|
|
278
|
-
|
|
281
|
+
logger2.trace("get", { key });
|
|
282
|
+
const hashedKey = this.normalizedHashFunction(key);
|
|
283
|
+
const entry = this.map[hashedKey];
|
|
284
|
+
return entry && this.normalizedHashFunction(entry.originalKey) === this.normalizedHashFunction(key) ? entry.value : null;
|
|
285
|
+
}
|
|
286
|
+
includesKey(key) {
|
|
287
|
+
const hashedKey = this.normalizedHashFunction(key);
|
|
288
|
+
const entry = this.map[hashedKey];
|
|
289
|
+
return entry ? this.normalizedHashFunction(entry.originalKey) === this.normalizedHashFunction(key) : false;
|
|
290
|
+
}
|
|
291
|
+
delete(key) {
|
|
292
|
+
logger2.trace("delete", { key });
|
|
293
|
+
const hashedKey = this.normalizedHashFunction(key);
|
|
294
|
+
delete this.map[hashedKey];
|
|
279
295
|
}
|
|
280
296
|
allIn(locations) {
|
|
281
297
|
if (locations.length === 0) {
|
|
@@ -306,7 +322,9 @@ var CacheMap = class _CacheMap extends Dictionary {
|
|
|
306
322
|
return items.filter((item) => isQueryMatch(item, query));
|
|
307
323
|
}
|
|
308
324
|
clone() {
|
|
309
|
-
const clone = new _CacheMap(this.types
|
|
325
|
+
const clone = new _CacheMap(this.types);
|
|
326
|
+
clone.map = this.map;
|
|
327
|
+
clone.normalizedHashFunction = this.normalizedHashFunction;
|
|
310
328
|
return clone;
|
|
311
329
|
}
|
|
312
330
|
};
|
package/dist/index.js.map
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../src/logger.ts", "../src/Aggregator.ts", "../src/CacheMap.ts", "../src/ops/all.ts", "../src/ops/one.ts", "../src/ops/create.ts", "../src/ops/get.ts", "../src/ops/retrieve.ts", "../src/ops/remove.ts", "../src/ops/update.ts", "../src/ops/action.ts", "../src/ops/allAction.ts", "../src/ops/facet.ts", "../src/ops/allFacet.ts", "../src/ops/find.ts", "../src/ops/findOne.ts", "../src/ops/set.ts", "../src/ops/reset.ts", "../src/Operations.ts", "../src/Cache.ts", "../src/Instance.ts", "../src/InstanceFactory.ts", "../src/Registry.ts"],
|
|
4
|
-
"sourcesContent": ["import Logging from '@fjell/logging';\n\nconst LibLogger = Logging.getLogger('@fjell/cache');\n\nexport default LibLogger;\n", "/* eslint-disable no-undefined */\nimport {\n ComKey,\n Item,\n ItemQuery,\n LocKeyArray,\n PriKey\n} from \"@fjell/core\";\nimport { Cache } from \"./Cache\";\nimport { CacheMap } from \"./CacheMap\";\nimport LibLogger from \"./logger\";\n\nconst logger = LibLogger.get('ItemAggregator');\n\nexport interface Aggregator<\n V extends Item<S, L1, L2, L3, L4, L5>,\n S extends string,\n L1 extends string = never,\n L2 extends string = never,\n L3 extends string = never,\n L4 extends string = never,\n L5 extends string = never\n> extends Cache<V, S, L1, L2, L3, L4, L5> {\n // Cache operations exposed directly for aggregator\n all: (\n query?: ItemQuery,\n locations?: LocKeyArray<L1, L2, L3, L4, L5> | []\n ) => Promise<[CacheMap<V, S, L1, L2, L3, L4, L5>, V[]]>;\n\n one: (\n query?: ItemQuery,\n locations?: LocKeyArray<L1, L2, L3, L4, L5> | []\n ) => Promise<[CacheMap<V, S, L1, L2, L3, L4, L5>, V | null]>;\n\n action: (\n key: ComKey<S, L1, L2, L3, L4, L5> | PriKey<S>,\n action: string,\n body?: any\n ) => Promise<[CacheMap<V, S, L1, L2, L3, L4, L5>, V]>;\n\n allAction: (\n action: string,\n body?: any,\n locations?: LocKeyArray<L1, L2, L3, L4, L5> | []\n ) => Promise<[CacheMap<V, S, L1, L2, L3, L4, L5>, V[]]>;\n\n allFacet: (\n facet: string,\n params?: Record<string, string | number | boolean | Date | Array<string | number | boolean | Date>>,\n locations?: LocKeyArray<L1, L2, L3, L4, L5> | []\n ) => Promise<[CacheMap<V, S, L1, L2, L3, L4, L5>, any]>;\n\n create: (\n item: Partial<Item<S, L1, L2, L3, L4, L5>>,\n locations?: LocKeyArray<L1, L2, L3, L4, L5> | []\n ) => Promise<[CacheMap<V, S, L1, L2, L3, L4, L5>, V]>;\n\n get: (\n key: ComKey<S, L1, L2, L3, L4, L5> | PriKey<S>\n ) => Promise<[CacheMap<V, S, L1, L2, L3, L4, L5>, V | null]>;\n\n retrieve: (\n key: ComKey<S, L1, L2, L3, L4, L5> | PriKey<S>\n ) => Promise<[CacheMap<V, S, L1, L2, L3, L4, L5> | null, V | null]>;\n\n remove: (\n key: ComKey<S, L1, L2, L3, L4, L5> | PriKey<S>\n ) => Promise<CacheMap<V, S, L1, L2, L3, L4, L5>>;\n\n update: (\n key: ComKey<S, L1, L2, L3, L4, L5> | PriKey<S>,\n item: Partial<Item<S, L1, L2, L3, L4, L5>>\n ) => Promise<[CacheMap<V, S, L1, L2, L3, L4, L5>, V]>;\n\n facet: (\n key: ComKey<S, L1, L2, L3, L4, L5> | PriKey<S>,\n facet: string,\n params?: Record<string, string | number | boolean | Date | Array<string | number | boolean | Date>>\n ) => Promise<[CacheMap<V, S, L1, L2, L3, L4, L5>, any]>;\n\n find: (\n finder: string,\n params?: Record<string, string | number | boolean | Date | Array<string | number | boolean | Date>>,\n locations?: LocKeyArray<L1, L2, L3, L4, L5> | []\n ) => Promise<[CacheMap<V, S, L1, L2, L3, L4, L5>, V[]]>;\n\n findOne: (\n finder: string,\n params?: Record<string, string | number | boolean | Date | Array<string | number | boolean | Date>>,\n locations?: LocKeyArray<L1, L2, L3, L4, L5> | []\n ) => Promise<[CacheMap<V, S, L1, L2, L3, L4, L5>, V]>;\n\n set: (\n key: ComKey<S, L1, L2, L3, L4, L5> | PriKey<S>,\n item: Item<S, L1, L2, L3, L4, L5>\n ) => Promise<[CacheMap<V, S, L1, L2, L3, L4, L5>, V]>;\n\n reset: () => Promise<[CacheMap<V, S, L1, L2, L3, L4, L5>]>;\n\n populate: (item: V) => Promise<V>;\n populateAggregate: (key: string, item: V) => Promise<void>;\n populateEvent: (key: string, item: V) => Promise<void>;\n}\n\nexport interface CacheConfig { cache: any, optional: boolean }\n\nexport interface AggregateConfig { [key: string]: (CacheConfig) }\n\nexport const toCacheConfig = <\n V extends Item<S, L1, L2, L3, L4, L5>,\n S extends string,\n L1 extends string = never,\n L2 extends string = never,\n L3 extends string = never,\n L4 extends string = never,\n L5 extends string = never\n>(config: CacheConfig | Cache<V, S, L1, L2, L3, L4, L5>): CacheConfig => {\n let cacheConfig: CacheConfig;\n if ((config as CacheConfig).optional === undefined) {\n cacheConfig = { cache: config as any, optional: false };\n } else {\n cacheConfig = config as CacheConfig;\n }\n return cacheConfig;\n}\n\nexport const createAggregator = async <\n V extends Item<S, L1, L2, L3, L4, L5>,\n S extends string,\n L1 extends string = never,\n L2 extends string = never,\n L3 extends string = never,\n L4 extends string = never,\n L5 extends string = never\n>(\n cache: Cache<V, S, L1, L2, L3, L4, L5>,\n { aggregates = {}, events = {} }:\n {\n aggregates?: AggregateConfig,\n events?: AggregateConfig\n }\n): Promise<Aggregator<V, S, L1, L2, L3, L4, L5>> => {\n\n const populate = async (item: V): Promise<V> => {\n logger.default('populate', { item });\n for (const key in aggregates) {\n await populateAggregate(key, item);\n }\n for (const key in events) {\n await populateEvent(key, item);\n }\n logger.default('populate done', { item });\n return item;\n }\n\n const populateAggregate = async (key: string, item: V) => {\n logger.default('populate aggregate key', { key });\n const cacheConfig = toCacheConfig(aggregates[key]);\n if (item.refs === undefined) {\n if (cacheConfig.optional === false) {\n logger.error('Item does not have refs an is not optional ' + JSON.stringify(item));\n throw new Error('Item does not have refs an is not optional ' + JSON.stringify(item));\n } else {\n if (item.events && Object.prototype.hasOwnProperty.call(item.events, key)) {\n delete item.events[key];\n }\n }\n } else if (item.refs[key] === undefined) {\n if (cacheConfig.optional === false) {\n logger.error('Item does not have mandatory ref with key, not optional ' +\n key + ' ' + JSON.stringify(item));\n throw new Error('Item does not have mandatory ref with key, not optional ' +\n key + ' ' + JSON.stringify(item));\n } else {\n if (item.events && Object.prototype.hasOwnProperty.call(item.events, key)) {\n delete item.events[key];\n }\n }\n } else {\n\n const ref = item.refs[key];\n\n logger.default('AGG Retrieving Item in Populate', { key: ref });\n const [, newItem] = await cacheConfig.cache.operations.retrieve(ref);\n if (newItem) {\n if (item.aggs === undefined) {\n item.aggs = {};\n }\n item.aggs[key] = {\n key: ref,\n item: newItem as Item,\n };\n }\n }\n }\n\n // TODO: I'm not a big fan that this just \"automatically\" assumes that the \"by\" key in event is a ref.\n const populateEvent = async (key: string, item: V) => {\n logger.default('populate event key', { key });\n const cacheConfig = toCacheConfig(events[key]);\n\n if (item.events === undefined) {\n throw new Error('Item does not have events ' + JSON.stringify(item));\n } else if (item.events[key] === undefined) {\n if (cacheConfig.optional === false) {\n logger.error('Item does not have mandatory event with key ' + key + ' ' + JSON.stringify(item));\n throw new Error('Item does not have mandatory event with key ' + key + ' ' + JSON.stringify(item));\n }\n } else {\n const event = item.events[key];\n\n if (event.by === undefined) {\n logger.error(\n 'populateEvent with an Event that does not have by', { event, ik: item.key, eventKey: key });\n throw new Error('populateEvent with an Event that does not have by: ' + JSON.stringify({ key, event }));\n }\n\n logger.default('EVENT Retrieving Item in Populate', { key: event.by });\n const [, newItem] = await cacheConfig.cache.operations.retrieve(event.by);\n if (newItem) {\n event.agg = newItem as Item;\n }\n }\n }\n\n const all = async (\n query: ItemQuery = {},\n locations: LocKeyArray<L1, L2, L3, L4, L5> | [] = []\n ):\n Promise<[CacheMap<V, S, L1, L2, L3, L4, L5>, V[]]> => {\n logger.default('all', { query, locations });\n const [cacheMap, items] = await cache.operations.all(query, locations);\n const populatedItems = await Promise.all(items.map(async (item) => populate(item)));\n return [cacheMap, populatedItems];\n }\n\n const one = async (\n query: ItemQuery = {},\n locations: LocKeyArray<L1, L2, L3, L4, L5> | [] = []\n ):\n Promise<[CacheMap<V, S, L1, L2, L3, L4, L5>, V | null]> => {\n logger.default('one', { query, locations });\n const [cacheMap, item] = await cache.operations.one(query, locations);\n let populatedItem = null;\n if (item) {\n populatedItem = await populate(item);\n }\n return [cacheMap, populatedItem];\n }\n\n const action = async (\n key: ComKey<S, L1, L2, L3, L4, L5> | PriKey<S>,\n action: string,\n body: any = {},\n ): Promise<[CacheMap<V, S, L1, L2, L3, L4, L5>, V]> => {\n logger.default('action', { key, action, body });\n const [cacheMap, item] = await cache.operations.action(key, action, body);\n const populatedItem = await populate(item);\n return [cacheMap, populatedItem];\n }\n\n const allAction = async (\n action: string,\n body: any = {},\n locations: LocKeyArray<L1, L2, L3, L4, L5> | [] = []\n ): Promise<[CacheMap<V, S, L1, L2, L3, L4, L5>, V[]]> => {\n logger.default('action', { action, body, locations });\n const [cacheMap, items] = await cache.operations.allAction(action, body, locations);\n const populatedItems = await Promise.all(items.map(async (item: V) => populate(item)));\n return [cacheMap, populatedItems];\n }\n\n const allFacet = async (\n facet: string,\n params: Record<string, string | number | boolean | Date | Array<string | number | boolean | Date>> = {},\n locations: LocKeyArray<L1, L2, L3, L4, L5> | [] = []\n ): Promise<[CacheMap<V, S, L1, L2, L3, L4, L5>, any]> => {\n logger.default('allFacet', { facet, params, locations });\n const [cacheMap, response] = await cache.operations.allFacet(facet, params, locations);\n return [cacheMap, response];\n }\n\n const create = async (\n v: Partial<Item<S, L1, L2, L3, L4, L5>>,\n locations: LocKeyArray<L1, L2, L3, L4, L5> | [] = []\n ): Promise<[CacheMap<V, S, L1, L2, L3, L4, L5>, V]> => {\n logger.default('create', { v, locations });\n const [cacheMap, item] = await cache.operations.create(v, locations);\n const populatedItem = await populate(item);\n return [cacheMap, populatedItem];\n }\n\n const get = async (\n key: ComKey<S, L1, L2, L3, L4, L5> | PriKey<S>,\n ): Promise<[CacheMap<V, S, L1, L2, L3, L4, L5>, V | null]> => {\n logger.default('get', { key });\n const [cacheMap, item] = await cache.operations.get(key);\n let populatedItem = null;\n if (item) {\n populatedItem = await populate(item);\n }\n return [cacheMap, populatedItem];\n }\n\n const retrieve = async (\n key: ComKey<S, L1, L2, L3, L4, L5> | PriKey<S>,\n ): Promise<[CacheMap<V, S, L1, L2, L3, L4, L5> | null, V | null]> => {\n logger.default('retrieve', { key });\n const [cacheMap, item] = await cache.operations.retrieve(key);\n let populatedItem = null;\n if (item) {\n populatedItem = await populate(item);\n }\n return [cacheMap, populatedItem];\n }\n\n const remove = async (\n key: ComKey<S, L1, L2, L3, L4, L5> | PriKey<S>,\n ): Promise<CacheMap<V, S, L1, L2, L3, L4, L5>> => {\n logger.default('remove', { key });\n const cacheMap = await cache.operations.remove(key);\n return cacheMap;\n }\n\n const update = async (\n key: ComKey<S, L1, L2, L3, L4, L5> | PriKey<S>,\n v: Partial<Item<S, L1, L2, L3, L4, L5>>,\n ): Promise<[CacheMap<V, S, L1, L2, L3, L4, L5>, V]> => {\n logger.default('update', { key, v });\n const [cacheMap, item] = await cache.operations.update(key, v);\n const populatedItem = await populate(item);\n return [cacheMap, populatedItem];\n }\n\n // Facets are a pass-thru for aggregators\n const facet = async (\n key: ComKey<S, L1, L2, L3, L4, L5> | PriKey<S>,\n facet: string,\n ): Promise<[CacheMap<V, S, L1, L2, L3, L4, L5>, any]> => {\n logger.default('facet', { key, facet });\n const [cacheMap, response] = await cache.operations.facet(key, facet);\n return [cacheMap, response];\n }\n\n const find = async (\n finder: string,\n finderParams: Record<string, string | number | boolean | Date | Array<string | number | boolean | Date>> = {},\n locations: LocKeyArray<L1, L2, L3, L4, L5> | [] = []\n ): Promise<[CacheMap<V, S, L1, L2, L3, L4, L5>, V[]]> => {\n logger.default('find', { finder, finderParams, locations });\n const [cacheMap, items] = await cache.operations.find(finder, finderParams, locations);\n const populatedItems = await Promise.all(items.map(async (item: V) => populate(item)));\n return [cacheMap, populatedItems];\n }\n\n const findOne = async (\n finder: string,\n finderParams: Record<string, string | number | boolean | Date | Array<string | number | boolean | Date>> = {},\n locations: LocKeyArray<L1, L2, L3, L4, L5> | [] = []\n ): Promise<[CacheMap<V, S, L1, L2, L3, L4, L5>, V]> => {\n logger.default('find', { finder, finderParams, locations });\n const [cacheMap, item] = await cache.operations.findOne(finder, finderParams, locations);\n const populatedItem = await populate(item);\n return [cacheMap, populatedItem];\n }\n\n const set = async (\n key: ComKey<S, L1, L2, L3, L4, L5> | PriKey<S>,\n v: Item<S, L1, L2, L3, L4, L5>\n ): Promise<[CacheMap<V, S, L1, L2, L3, L4, L5>, V]> => {\n logger.default('set', { key, v });\n\n // TODO: There should be some input validation here to ensure a valid item.\n const [cacheMap, item] = await cache.operations.set(key, v);\n const populatedItem = await populate(item);\n return [cacheMap, populatedItem];\n }\n\n const reset = async (): Promise<[CacheMap<V, S, L1, L2, L3, L4, L5>]> => {\n const cacheMap = await cache.operations.reset();\n return cacheMap;\n }\n\n return {\n // Cache properties\n coordinate: cache.coordinate,\n registry: cache.registry,\n api: cache.api,\n cacheMap: cache.cacheMap,\n operations: cache.operations,\n // Cache operations exposed directly\n all,\n one,\n action,\n allAction,\n allFacet,\n create,\n get,\n retrieve,\n remove,\n update,\n facet,\n find,\n findOne,\n reset,\n set,\n // Aggregator-specific operations\n populate,\n populateAggregate,\n populateEvent\n }\n}\n", "import {\n AllItemTypeArrays,\n ComKey,\n Dictionary,\n isComKey,\n isQueryMatch,\n Item,\n ItemQuery,\n LocKeyArray,\n PriKey\n} from \"@fjell/core\";\nimport LibLogger from \"./logger\";\n\nconst logger = LibLogger.get(\"CacheMap\");\n\n// Normalize a key value to string for consistent comparison and hashing\nconst normalizeKeyValue = (value: string | number): string => {\n return String(value);\n};\n\n// Normalized hash function for Dictionary that converts pk/lk values to strings\nconst createNormalizedHashFunction = <T>() => {\n return (key: T): string => {\n if (typeof key === 'object' && key !== null) {\n // Create a normalized version of the key with string values\n const normalizedKey = JSON.parse(JSON.stringify(key));\n\n // Normalize pk values\n if ('pk' in normalizedKey && normalizedKey.pk !== null) {\n normalizedKey.pk = normalizeKeyValue(normalizedKey.pk);\n }\n\n // Normalize lk values\n if ('lk' in normalizedKey && normalizedKey.lk !== null) {\n normalizedKey.lk = normalizeKeyValue(normalizedKey.lk);\n }\n\n // Normalize loc array lk values\n if ('loc' in normalizedKey && Array.isArray(normalizedKey.loc)) {\n normalizedKey.loc = normalizedKey.loc.map((locItem: any) => {\n if (locItem && 'lk' in locItem && locItem.lk !== null) {\n return { ...locItem, lk: normalizeKeyValue(locItem.lk) };\n }\n return locItem;\n });\n }\n\n return JSON.stringify(normalizedKey);\n }\n return JSON.stringify(key);\n };\n};\n\n// Helper function to normalize and compare location key arrays\nconst isLocKeyArrayEqual = (a: any[], b: any[]): boolean => {\n if (a.length !== b.length) {\n return false;\n }\n\n for (let i = 0; i < a.length; i++) {\n const normalizedA = normalizeLocKeyItem(a[i]);\n const normalizedB = normalizeLocKeyItem(b[i]);\n\n if (JSON.stringify(normalizedA) !== JSON.stringify(normalizedB)) {\n return false;\n }\n }\n\n return true;\n};\n\n// Helper function to normalize a location key item\nconst normalizeLocKeyItem = (item: any): any => {\n if (typeof item === 'object' && item !== null) {\n const normalized = { ...item };\n\n if ('lk' in normalized && normalized.lk !== null) {\n normalized.lk = normalizeKeyValue(normalized.lk);\n }\n\n return normalized;\n }\n\n return item;\n};\n\n// const isObj = (x: any) => typeof x === \"object\" && x !== null;\n\n// const intersection = (a: object, b: object): object => {\n// const result: { [key: string]: any } = {}\n\n// if (([a, b]).every(isObj)) {\n// Object.keys(a).forEach((key) => {\n// // @ts-ignore\n// const value = a[key]\n// // @ts-ignore\n// const other = b[key]\n\n// if (isObj(value)) {\n// result[key] = intersection(value, other)\n// } else if (value === other) {\n// result[key] = value\n// }\n// })\n// }\n\n// return result\n// }\n\n// const removeEmptyObjects = (obj: object): object => {\n// const result: { [key: string]: any } = {}\n\n// Object.keys(obj).forEach((key) => {\n// // @ts-ignore\n// const value = obj[key];\n\n// if (isObj(value)) {\n// const nested = removeEmptyObjects(value);\n\n// if (Object.keys(nested).length > 0) {\n// result[key] = nested\n// }\n// } else if (value !== null) {\n// result[key] = value\n// }\n// });\n\n// return result;\n// }\n\nexport class CacheMap<\n V extends Item<S, L1, L2, L3, L4, L5>,\n S extends string,\n L1 extends string = never,\n L2 extends string = never,\n L3 extends string = never,\n L4 extends string = never,\n L5 extends string = never\n> extends Dictionary<ComKey<S, L1, L2, L3, L4, L5> | PriKey<S>, V> {\n\n private types: AllItemTypeArrays<S, L1, L2, L3, L4, L5>;\n\n public constructor(\n types: AllItemTypeArrays<S, L1, L2, L3, L4, L5>,\n map?: { [key: string]: V },\n ) {\n super(map, createNormalizedHashFunction<ComKey<S, L1, L2, L3, L4, L5> | PriKey<S>>());\n this.types = types;\n }\n\n public get(\n key: ComKey<S, L1, L2, L3, L4, L5> | PriKey<S>,\n ): V | null {\n return super.get(key) as V | null;\n }\n\n public allIn(\n locations: LocKeyArray<L1, L2, L3, L4, L5> | []\n ): V[] {\n if (locations.length === 0) {\n logger.debug('Returning all items, LocKeys is empty');\n return this.values();\n } else {\n const locKeys: LocKeyArray<L1, L2, L3, L4, L5> | [] = locations;\n logger.debug('allIn', { locKeys, keys: this.keys().length });\n return this.keys()\n .filter((key) => key && isComKey(key))\n .filter((key) => {\n const ComKey = key as ComKey<S, L1, L2, L3, L4, L5>;\n logger.debug('Comparing Location Keys', {\n locKeys,\n ComKey,\n });\n return isLocKeyArrayEqual(locKeys, ComKey.loc);\n })\n .map((key) => this.get(key) as V);\n }\n }\n\n // TODO: Can we do case insensitive matching?\n public contains(query: ItemQuery, locations: LocKeyArray<L1, L2, L3, L4, L5> | []): boolean {\n logger.debug('contains', { query, locations });\n const items = this.allIn(locations);\n\n return items.some((item) => isQueryMatch(item, query));\n }\n\n public queryIn(\n query: ItemQuery,\n locations: LocKeyArray<L1, L2, L3, L4, L5> | [] = []\n ): V[] {\n logger.debug('queryIn', { query, locations });\n const items = this.allIn(locations);\n\n return items.filter((item) => isQueryMatch(item, query));\n }\n\n public clone(): CacheMap<V, S, L1, L2, L3, L4, L5> {\n const clone = new CacheMap<V, S, L1, L2, L3, L4, L5>(this.types, this.map);\n return clone;\n }\n\n};\n", "import {\n Item,\n ItemQuery,\n LocKeyArray,\n validatePK\n} from \"@fjell/core\";\nimport { ClientApi } from \"@fjell/client-api\";\nimport { NotFoundError } from \"@fjell/http-api\";\nimport { CacheMap } from \"@/CacheMap\";\nimport LibLogger from \"@/logger\";\n\nconst logger = LibLogger.get('all');\n\nexport const all = async <\n V extends Item<S, L1, L2, L3, L4, L5>,\n S extends string,\n L1 extends string = never,\n L2 extends string = never,\n L3 extends string = never,\n L4 extends string = never,\n L5 extends string = never\n>(\n api: ClientApi<V, S, L1, L2, L3, L4, L5>,\n cacheMap: CacheMap<V, S, L1, L2, L3, L4, L5>,\n pkType: S,\n query: ItemQuery = {},\n locations: LocKeyArray<L1, L2, L3, L4, L5> | [] = []\n): Promise<[CacheMap<V, S, L1, L2, L3, L4, L5>, V[]]> => {\n logger.default('all', { query, locations });\n let ret: V[] = [];\n try {\n ret = await api.all(query, locations);\n ret.forEach((v) => {\n cacheMap.set(v.key, v);\n });\n } catch (e: unknown) {\n if (e instanceof NotFoundError) {\n // Handle not found gracefully\n } else {\n throw e;\n }\n }\n return [cacheMap, validatePK(ret, pkType) as V[]];\n};\n", "import {\n Item,\n ItemQuery,\n LocKeyArray,\n validatePK\n} from \"@fjell/core\";\nimport { ClientApi } from \"@fjell/client-api\";\nimport { NotFoundError } from \"@fjell/http-api\";\nimport { CacheMap } from \"@/CacheMap\";\nimport LibLogger from \"@/logger\";\n\nconst logger = LibLogger.get('one');\n\nexport const one = async <\n V extends Item<S, L1, L2, L3, L4, L5>,\n S extends string,\n L1 extends string = never,\n L2 extends string = never,\n L3 extends string = never,\n L4 extends string = never,\n L5 extends string = never\n>(\n api: ClientApi<V, S, L1, L2, L3, L4, L5>,\n cacheMap: CacheMap<V, S, L1, L2, L3, L4, L5>,\n pkType: S,\n query: ItemQuery = {},\n locations: LocKeyArray<L1, L2, L3, L4, L5> | [] = []\n): Promise<[CacheMap<V, S, L1, L2, L3, L4, L5>, V | null]> => {\n logger.default('one', { query, locations });\n\n let retItem: V | null = null;\n try {\n retItem = await api.one(query, locations);\n if (retItem) {\n cacheMap.set(retItem.key, retItem);\n }\n } catch (e: unknown) {\n if (e instanceof NotFoundError) {\n // Handle not found gracefully\n } else {\n throw e;\n }\n }\n return [\n cacheMap,\n retItem ?\n validatePK(retItem, pkType) as V :\n null\n ];\n};\n", "import {\n Item,\n LocKeyArray,\n validatePK\n} from \"@fjell/core\";\nimport { ClientApi } from \"@fjell/client-api\";\nimport { CacheMap } from \"@/CacheMap\";\nimport LibLogger from \"@/logger\";\n\nconst logger = LibLogger.get('create');\n\nexport const create = async <\n V extends Item<S, L1, L2, L3, L4, L5>,\n S extends string,\n L1 extends string = never,\n L2 extends string = never,\n L3 extends string = never,\n L4 extends string = never,\n L5 extends string = never\n>(\n api: ClientApi<V, S, L1, L2, L3, L4, L5>,\n cacheMap: CacheMap<V, S, L1, L2, L3, L4, L5>,\n pkType: S,\n v: Partial<Item<S, L1, L2, L3, L4, L5>>,\n locations: LocKeyArray<L1, L2, L3, L4, L5> | [] = []\n): Promise<[CacheMap<V, S, L1, L2, L3, L4, L5>, V]> => {\n logger.default('create', { v, locations });\n const created = await api.create(v, locations);\n cacheMap.set(created.key, created);\n return [cacheMap, validatePK(created, pkType) as V];\n};\n", "import {\n ComKey,\n isValidItemKey,\n Item,\n PriKey,\n validatePK\n} from \"@fjell/core\";\nimport { ClientApi } from \"@fjell/client-api\";\nimport { CacheMap } from \"@/CacheMap\";\nimport LibLogger from \"@/logger\";\n\nconst logger = LibLogger.get('get');\n\nexport const get = async <\n V extends Item<S, L1, L2, L3, L4, L5>,\n S extends string,\n L1 extends string = never,\n L2 extends string = never,\n L3 extends string = never,\n L4 extends string = never,\n L5 extends string = never\n>(\n api: ClientApi<V, S, L1, L2, L3, L4, L5>,\n cacheMap: CacheMap<V, S, L1, L2, L3, L4, L5>,\n pkType: S,\n key: ComKey<S, L1, L2, L3, L4, L5> | PriKey<S>\n): Promise<[CacheMap<V, S, L1, L2, L3, L4, L5>, V | null]> => {\n logger.default('get', { key });\n\n if (!isValidItemKey(key)) {\n logger.error('Key for Get is not a valid ItemKey: %j', key);\n throw new Error('Key for Get is not a valid ItemKey');\n }\n\n let ret: V | null;\n try {\n ret = await api.get(key);\n if (ret) {\n cacheMap.set(ret.key, ret);\n }\n } catch (e: any) {\n logger.error(\"Error getting item for key\", { key, message: e.message, stack: e.stack });\n throw e;\n }\n\n return [\n cacheMap,\n ret ?\n validatePK(ret, pkType) as V :\n null\n ];\n};\n", "import {\n ComKey,\n isValidItemKey,\n Item,\n PriKey,\n validatePK\n} from \"@fjell/core\";\nimport { CacheMap } from \"@/CacheMap\";\nimport LibLogger from \"@/logger\";\nimport { get } from \"./get\";\nimport { ClientApi } from \"@fjell/client-api\";\n\nconst logger = LibLogger.get('retrieve');\n\nexport const retrieve = async <\n V extends Item<S, L1, L2, L3, L4, L5>,\n S extends string,\n L1 extends string = never,\n L2 extends string = never,\n L3 extends string = never,\n L4 extends string = never,\n L5 extends string = never\n>(\n api: ClientApi<V, S, L1, L2, L3, L4, L5>,\n cacheMap: CacheMap<V, S, L1, L2, L3, L4, L5>,\n pkType: S,\n key: ComKey<S, L1, L2, L3, L4, L5> | PriKey<S>\n): Promise<[CacheMap<V, S, L1, L2, L3, L4, L5> | null, V | null]> => {\n logger.default('retrieve', { key });\n\n if (!isValidItemKey(key)) {\n logger.error('Key for Retrieve is not a valid ItemKey: %j', key);\n throw new Error('Key for Retrieve is not a valid ItemKey');\n }\n\n const containsItemKey = cacheMap.includesKey(key);\n\n let retrieved: V | null;\n if (containsItemKey) {\n logger.default('Looking for Object in Cache', key);\n retrieved = cacheMap.get(key);\n } else {\n logger.default('Object Not Found in Cache, Retrieving from Server API', { key });\n [, retrieved] = await get(api, cacheMap, pkType, key);\n }\n\n const retValue: [CacheMap<V, S, L1, L2, L3, L4, L5> | null, V | null] = [\n containsItemKey ? null : cacheMap,\n retrieved ?\n validatePK(retrieved, pkType) as V :\n null\n ];\n\n return retValue;\n};\n", "import {\n ComKey,\n isValidItemKey,\n Item,\n PriKey\n} from \"@fjell/core\";\nimport { ClientApi } from \"@fjell/client-api\";\nimport { CacheMap } from \"@/CacheMap\";\nimport LibLogger from \"@/logger\";\n\nconst logger = LibLogger.get('remove');\n\nexport const remove = async <\n V extends Item<S, L1, L2, L3, L4, L5>,\n S extends string,\n L1 extends string = never,\n L2 extends string = never,\n L3 extends string = never,\n L4 extends string = never,\n L5 extends string = never\n>(\n api: ClientApi<V, S, L1, L2, L3, L4, L5>,\n cacheMap: CacheMap<V, S, L1, L2, L3, L4, L5>,\n key: ComKey<S, L1, L2, L3, L4, L5> | PriKey<S>\n): Promise<CacheMap<V, S, L1, L2, L3, L4, L5>> => {\n logger.default('remove', { key });\n\n if (!isValidItemKey(key)) {\n logger.error('Key for Remove is not a valid ItemKey: %j', key);\n throw new Error('Key for Remove is not a valid ItemKey');\n }\n\n try {\n await api.remove(key);\n cacheMap.delete(key);\n } catch (e) {\n logger.error(\"Error deleting item\", { error: e });\n throw e;\n }\n\n return cacheMap;\n};\n", "import {\n ComKey,\n isValidItemKey,\n Item,\n PriKey,\n validatePK\n} from \"@fjell/core\";\nimport { ClientApi } from \"@fjell/client-api\";\nimport { CacheMap } from \"@/CacheMap\";\nimport LibLogger from \"@/logger\";\n\nconst logger = LibLogger.get('update');\n\nexport const update = async <\n V extends Item<S, L1, L2, L3, L4, L5>,\n S extends string,\n L1 extends string = never,\n L2 extends string = never,\n L3 extends string = never,\n L4 extends string = never,\n L5 extends string = never\n>(\n api: ClientApi<V, S, L1, L2, L3, L4, L5>,\n cacheMap: CacheMap<V, S, L1, L2, L3, L4, L5>,\n pkType: S,\n key: ComKey<S, L1, L2, L3, L4, L5> | PriKey<S>,\n v: Partial<Item<S, L1, L2, L3, L4, L5>>\n): Promise<[CacheMap<V, S, L1, L2, L3, L4, L5>, V]> => {\n logger.default('update', { key, v });\n\n if (!isValidItemKey(key)) {\n logger.error('Key for Update is not a valid ItemKey: %j', key);\n throw new Error('Key for Update is not a valid ItemKey');\n }\n\n try {\n const updated = await api.update(key, v);\n cacheMap.set(updated.key, updated);\n return [cacheMap, validatePK(updated, pkType) as V];\n } catch (e) {\n logger.error(\"Error updating item\", { error: e });\n throw e;\n }\n};\n", "import {\n ComKey,\n isValidItemKey,\n Item,\n PriKey,\n validatePK\n} from \"@fjell/core\";\nimport { ClientApi } from \"@fjell/client-api\";\nimport { CacheMap } from \"@/CacheMap\";\nimport LibLogger from \"@/logger\";\n\nconst logger = LibLogger.get('action');\n\nexport const action = async <\n V extends Item<S, L1, L2, L3, L4, L5>,\n S extends string,\n L1 extends string = never,\n L2 extends string = never,\n L3 extends string = never,\n L4 extends string = never,\n L5 extends string = never\n>(\n api: ClientApi<V, S, L1, L2, L3, L4, L5>,\n cacheMap: CacheMap<V, S, L1, L2, L3, L4, L5>,\n pkType: S,\n key: ComKey<S, L1, L2, L3, L4, L5> | PriKey<S>,\n action: string,\n body: any = {}\n): Promise<[CacheMap<V, S, L1, L2, L3, L4, L5>, V]> => {\n logger.default('action', { key, action, body });\n\n if (!isValidItemKey(key)) {\n logger.error('Key for Action is not a valid ItemKey: %j', key);\n throw new Error('Key for Action is not a valid ItemKey');\n }\n\n const updated = await api.action(key, action, body);\n cacheMap.set(updated.key, updated);\n return [cacheMap, validatePK(updated, pkType) as V];\n};\n", "import {\n Item,\n LocKeyArray,\n validatePK\n} from \"@fjell/core\";\nimport { ClientApi } from \"@fjell/client-api\";\nimport { NotFoundError } from \"@fjell/http-api\";\nimport { CacheMap } from \"@/CacheMap\";\nimport LibLogger from \"@/logger\";\n\nconst logger = LibLogger.get('allAction');\n\nexport const allAction = async <\n V extends Item<S, L1, L2, L3, L4, L5>,\n S extends string,\n L1 extends string = never,\n L2 extends string = never,\n L3 extends string = never,\n L4 extends string = never,\n L5 extends string = never\n>(\n api: ClientApi<V, S, L1, L2, L3, L4, L5>,\n cacheMap: CacheMap<V, S, L1, L2, L3, L4, L5>,\n pkType: S,\n action: string,\n body: any = {},\n locations: LocKeyArray<L1, L2, L3, L4, L5> | [] = []\n): Promise<[CacheMap<V, S, L1, L2, L3, L4, L5>, V[]]> => {\n logger.default('allAction', { action, body, locations });\n let ret: V[] = [];\n try {\n ret = await api.allAction(action, body, locations);\n ret.forEach((v) => {\n cacheMap.set(v.key, v);\n });\n } catch (e: unknown) {\n // istanbul ignore next\n if (e instanceof NotFoundError) {\n // Handle not found gracefully\n } else {\n throw e;\n }\n }\n return [cacheMap, validatePK(ret, pkType) as V[]];\n};\n", "import {\n ComKey,\n Item,\n PriKey\n} from \"@fjell/core\";\nimport { ClientApi } from \"@fjell/client-api\";\nimport { CacheMap } from \"@/CacheMap\";\nimport LibLogger from \"@/logger\";\n\nconst logger = LibLogger.get('facet');\n\nexport const facet = async <\n V extends Item<S, L1, L2, L3, L4, L5>,\n S extends string,\n L1 extends string = never,\n L2 extends string = never,\n L3 extends string = never,\n L4 extends string = never,\n L5 extends string = never\n>(\n api: ClientApi<V, S, L1, L2, L3, L4, L5>,\n cacheMap: CacheMap<V, S, L1, L2, L3, L4, L5>,\n key: ComKey<S, L1, L2, L3, L4, L5> | PriKey<S>,\n facet: string,\n params: Record<string, string | number | boolean | Date | Array<string | number | boolean | Date>> = {}\n): Promise<[CacheMap<V, S, L1, L2, L3, L4, L5>, any]> => {\n logger.default('facet', { key, facet });\n const ret = await api.facet(key, facet, params);\n return [cacheMap, ret];\n};\n", "import {\n Item,\n LocKeyArray\n} from \"@fjell/core\";\nimport { ClientApi } from \"@fjell/client-api\";\nimport { CacheMap } from \"@/CacheMap\";\nimport LibLogger from \"@/logger\";\n\nconst logger = LibLogger.get('allFacet');\n\nexport const allFacet = async <\n V extends Item<S, L1, L2, L3, L4, L5>,\n S extends string,\n L1 extends string = never,\n L2 extends string = never,\n L3 extends string = never,\n L4 extends string = never,\n L5 extends string = never\n>(\n api: ClientApi<V, S, L1, L2, L3, L4, L5>,\n cacheMap: CacheMap<V, S, L1, L2, L3, L4, L5>,\n facet: string,\n params: Record<string, string | number | boolean | Date | Array<string | number | boolean | Date>> = {},\n locations: LocKeyArray<L1, L2, L3, L4, L5> | [] = []\n): Promise<[CacheMap<V, S, L1, L2, L3, L4, L5>, any]> => {\n logger.default('allFacet', { facet, params, locations });\n const ret = await api.allFacet(facet, params, locations);\n return [cacheMap, ret];\n};\n", "import {\n Item,\n LocKeyArray,\n validatePK\n} from \"@fjell/core\";\nimport { ClientApi } from \"@fjell/client-api\";\nimport { CacheMap } from \"@/CacheMap\";\nimport LibLogger from \"@/logger\";\n\nconst logger = LibLogger.get('find');\n\nexport const find = async <\n V extends Item<S, L1, L2, L3, L4, L5>,\n S extends string,\n L1 extends string = never,\n L2 extends string = never,\n L3 extends string = never,\n L4 extends string = never,\n L5 extends string = never\n>(\n api: ClientApi<V, S, L1, L2, L3, L4, L5>,\n cacheMap: CacheMap<V, S, L1, L2, L3, L4, L5>,\n pkType: S,\n finder: string,\n params: Record<string, string | number | boolean | Date | Array<string | number | boolean | Date>> = {},\n locations: LocKeyArray<L1, L2, L3, L4, L5> | [] = []\n): Promise<[CacheMap<V, S, L1, L2, L3, L4, L5>, V[]]> => {\n logger.default('find', { finder, params, locations });\n const ret: V[] = await api.find(finder, params, locations);\n ret.forEach((v) => {\n cacheMap.set(v.key, v);\n });\n return [cacheMap, validatePK(ret, pkType) as V[]];\n};\n", "import {\n Item,\n LocKeyArray,\n validatePK\n} from \"@fjell/core\";\nimport { ClientApi } from \"@fjell/client-api\";\nimport { CacheMap } from \"@/CacheMap\";\nimport LibLogger from \"@/logger\";\n\nconst logger = LibLogger.get('findOne');\n\nexport const findOne = async <\n V extends Item<S, L1, L2, L3, L4, L5>,\n S extends string,\n L1 extends string = never,\n L2 extends string = never,\n L3 extends string = never,\n L4 extends string = never,\n L5 extends string = never\n>(\n api: ClientApi<V, S, L1, L2, L3, L4, L5>,\n cacheMap: CacheMap<V, S, L1, L2, L3, L4, L5>,\n pkType: S,\n finder: string,\n finderParams: Record<string, string | number | boolean | Date | Array<string | number | boolean | Date>> = {},\n locations: LocKeyArray<L1, L2, L3, L4, L5> | [] = []\n): Promise<[CacheMap<V, S, L1, L2, L3, L4, L5>, V]> => {\n logger.default('findOne', { finder, finderParams, locations });\n const ret = await api.findOne(finder, finderParams, locations);\n cacheMap.set(ret.key, ret);\n return [cacheMap, validatePK(ret, pkType) as V];\n};\n", "import {\n ComKey,\n isItemKeyEqual,\n isValidItemKey,\n Item,\n PriKey,\n validatePK\n} from \"@fjell/core\";\nimport { CacheMap } from \"@/CacheMap\";\nimport LibLogger from \"@/logger\";\n\nconst logger = LibLogger.get('set');\n\n// Normalize a key value to string for consistent comparison\nconst normalizeKeyValue = (value: string | number): string => {\n return String(value);\n};\n\n// Normalized key comparison function that handles string/number differences\nconst isItemKeyEqualNormalized = <\n S extends string,\n L1 extends string = never,\n L2 extends string = never,\n L3 extends string = never,\n L4 extends string = never,\n L5 extends string = never\n>(a: ComKey<S, L1, L2, L3, L4, L5> | PriKey<S>, b: ComKey<S, L1, L2, L3, L4, L5> | PriKey<S>): boolean => {\n // For now, just normalize the keys to strings and use the original comparison\n const normalizedA = normalizeKey(a);\n const normalizedB = normalizeKey(b);\n return isItemKeyEqual(normalizedA as ComKey<S, L1, L2, L3, L4, L5> | PriKey<S>, normalizedB as ComKey<S, L1, L2, L3, L4, L5> | PriKey<S>);\n};\n\n// Helper function to normalize a key\nconst normalizeKey = (key: any): any => {\n if (typeof key === 'object' && key !== null) {\n const normalizedKey = JSON.parse(JSON.stringify(key));\n\n // Normalize pk values\n if ('pk' in normalizedKey && normalizedKey.pk !== null) {\n normalizedKey.pk = normalizeKeyValue(normalizedKey.pk);\n }\n\n // Normalize lk values\n if ('lk' in normalizedKey && normalizedKey.lk !== null) {\n normalizedKey.lk = normalizeKeyValue(normalizedKey.lk);\n }\n\n // Normalize loc array lk values\n if ('loc' in normalizedKey && Array.isArray(normalizedKey.loc)) {\n normalizedKey.loc = normalizedKey.loc.map((locItem: any) => {\n if (locItem && 'lk' in locItem && locItem.lk !== null) {\n return { ...locItem, lk: normalizeKeyValue(locItem.lk) };\n }\n return locItem;\n });\n }\n\n return normalizedKey;\n }\n return key;\n};\n\nexport const set = async <\n V extends Item<S, L1, L2, L3, L4, L5>,\n S extends string,\n L1 extends string = never,\n L2 extends string = never,\n L3 extends string = never,\n L4 extends string = never,\n L5 extends string = never\n>(\n cacheMap: CacheMap<V, S, L1, L2, L3, L4, L5>,\n pkType: S,\n key: ComKey<S, L1, L2, L3, L4, L5> | PriKey<S>,\n v: Item<S, L1, L2, L3, L4, L5>\n): Promise<[CacheMap<V, S, L1, L2, L3, L4, L5>, V]> => {\n logger.default('set', { key, v });\n\n if (!isValidItemKey(key)) {\n logger.error('Key for Set is not a valid ItemKey: %j', key);\n throw new Error('Key for Set is not a valid ItemKey');\n }\n\n // Validate the item's primary key\n validatePK(v, pkType);\n\n if (!isItemKeyEqualNormalized(key, v.key)) {\n logger.error('Key does not match item key: %j != %j', key, v.key);\n throw new Error('Key does not match item key');\n }\n\n cacheMap.set(key, v as V);\n return [cacheMap, validatePK(v, pkType) as V];\n};\n", "import {\n Item\n} from \"@fjell/core\";\nimport { CacheMap } from \"@/CacheMap\";\nimport { Coordinate } from \"@fjell/registry\";\n\nexport const reset = async <\n V extends Item<S, L1, L2, L3, L4, L5>,\n S extends string,\n L1 extends string = never,\n L2 extends string = never,\n L3 extends string = never,\n L4 extends string = never,\n L5 extends string = never\n>(\n coordinate: Coordinate<S, L1, L2, L3, L4, L5>\n): Promise<[CacheMap<V, S, L1, L2, L3, L4, L5>]> => {\n const cacheMap = new CacheMap<V, S, L1, L2, L3, L4, L5>(coordinate.kta);\n return [cacheMap];\n};\n", "import { ComKey, Item, ItemQuery, LocKeyArray, PriKey } from \"@fjell/core\";\nimport { ClientApi } from \"@fjell/client-api\";\nimport { Coordinate } from \"@fjell/registry\";\nimport { CacheMap } from \"@/CacheMap\";\n\n// Import all operation functions\nimport { all } from \"./ops/all\";\nimport { one } from \"./ops/one\";\nimport { create } from \"./ops/create\";\nimport { get } from \"./ops/get\";\nimport { retrieve } from \"./ops/retrieve\";\nimport { remove } from \"./ops/remove\";\nimport { update } from \"./ops/update\";\nimport { action } from \"./ops/action\";\nimport { allAction } from \"./ops/allAction\";\nimport { facet } from \"./ops/facet\";\nimport { allFacet } from \"./ops/allFacet\";\nimport { find } from \"./ops/find\";\nimport { findOne } from \"./ops/findOne\";\nimport { set } from \"./ops/set\";\nimport { reset } from \"./ops/reset\";\n\nexport interface Operations<\n V extends Item<S, L1, L2, L3, L4, L5>,\n S extends string,\n L1 extends string = never,\n L2 extends string = never,\n L3 extends string = never,\n L4 extends string = never,\n L5 extends string = never,\n> {\n\n /**\n * Retrieves all the items that match the query from cache or API.\n * Items are cached automatically after retrieval.\n */\n all(\n query?: ItemQuery,\n locations?: LocKeyArray<L1, L2, L3, L4, L5> | []\n ): Promise<[CacheMap<V, S, L1, L2, L3, L4, L5>, V[]]>;\n\n /**\n * Retrieves the first item that matches the query from cache or API.\n * Item is cached automatically after retrieval.\n */\n one(\n query?: ItemQuery,\n locations?: LocKeyArray<L1, L2, L3, L4, L5> | []\n ): Promise<[CacheMap<V, S, L1, L2, L3, L4, L5>, V | null]>;\n\n /**\n * Creates a new item via API and caches it.\n */\n create(\n item: Partial<Item<S, L1, L2, L3, L4, L5>>,\n locations?: LocKeyArray<L1, L2, L3, L4, L5> | []\n ): Promise<[CacheMap<V, S, L1, L2, L3, L4, L5>, V]>;\n\n /**\n * Gets an item by key from cache or API and caches it.\n */\n get(\n key: ComKey<S, L1, L2, L3, L4, L5> | PriKey<S>\n ): Promise<[CacheMap<V, S, L1, L2, L3, L4, L5>, V | null]>;\n\n /**\n * Retrieves an item from cache if available, otherwise from API.\n * Returns null as first element if item was already in cache.\n */\n retrieve(\n key: ComKey<S, L1, L2, L3, L4, L5> | PriKey<S>\n ): Promise<[CacheMap<V, S, L1, L2, L3, L4, L5> | null, V | null]>;\n\n /**\n * Removes an item via API and from cache.\n */\n remove(\n key: ComKey<S, L1, L2, L3, L4, L5> | PriKey<S>\n ): Promise<CacheMap<V, S, L1, L2, L3, L4, L5>>;\n\n /**\n * Updates an item via API and caches the result.\n */\n update(\n key: ComKey<S, L1, L2, L3, L4, L5> | PriKey<S>,\n item: Partial<Item<S, L1, L2, L3, L4, L5>>\n ): Promise<[CacheMap<V, S, L1, L2, L3, L4, L5>, V]>;\n\n /**\n * Executes an action on an item via API and caches the result.\n */\n action(\n key: ComKey<S, L1, L2, L3, L4, L5> | PriKey<S>,\n action: string,\n body?: any\n ): Promise<[CacheMap<V, S, L1, L2, L3, L4, L5>, V]>;\n\n /**\n * Executes an action on all items matching criteria via API and caches results.\n */\n allAction(\n action: string,\n body?: any,\n locations?: LocKeyArray<L1, L2, L3, L4, L5> | []\n ): Promise<[CacheMap<V, S, L1, L2, L3, L4, L5>, V[]]>;\n\n /**\n * Executes a facet query on an item via API (pass-through, no caching).\n */\n facet(\n key: ComKey<S, L1, L2, L3, L4, L5> | PriKey<S>,\n facet: string,\n params?: Record<string, string | number | boolean | Date | Array<string | number | boolean | Date>>\n ): Promise<[CacheMap<V, S, L1, L2, L3, L4, L5>, any]>;\n\n /**\n * Executes a facet query on all items matching criteria via API (pass-through, no caching).\n */\n allFacet(\n facet: string,\n params?: Record<string, string | number | boolean | Date | Array<string | number | boolean | Date>>,\n locations?: LocKeyArray<L1, L2, L3, L4, L5> | []\n ): Promise<[CacheMap<V, S, L1, L2, L3, L4, L5>, any]>;\n\n /**\n * Finds items using a finder method via API and caches results.\n */\n find(\n finder: string,\n params?: Record<string, string | number | boolean | Date | Array<string | number | boolean | Date>>,\n locations?: LocKeyArray<L1, L2, L3, L4, L5> | []\n ): Promise<[CacheMap<V, S, L1, L2, L3, L4, L5>, V[]]>;\n\n /**\n * Finds a single item using a finder method via API and caches result.\n */\n findOne(\n finder: string,\n params?: Record<string, string | number | boolean | Date | Array<string | number | boolean | Date>>,\n locations?: LocKeyArray<L1, L2, L3, L4, L5> | []\n ): Promise<[CacheMap<V, S, L1, L2, L3, L4, L5>, V]>;\n\n /**\n * Sets an item directly in cache without API call.\n */\n set(\n key: ComKey<S, L1, L2, L3, L4, L5> | PriKey<S>,\n item: Item<S, L1, L2, L3, L4, L5>\n ): Promise<[CacheMap<V, S, L1, L2, L3, L4, L5>, V]>;\n\n /**\n * Resets the cache, clearing all cached items.\n */\n reset(): Promise<[CacheMap<V, S, L1, L2, L3, L4, L5>]>;\n}\n\nexport const createOperations = <\n V extends Item<S, L1, L2, L3, L4, L5>,\n S extends string,\n L1 extends string = never,\n L2 extends string = never,\n L3 extends string = never,\n L4 extends string = never,\n L5 extends string = never\n>(\n api: ClientApi<V, S, L1, L2, L3, L4, L5>,\n coordinate: Coordinate<S, L1, L2, L3, L4, L5>,\n cacheMap: CacheMap<V, S, L1, L2, L3, L4, L5>,\n pkType: S\n ): Operations<V, S, L1, L2, L3, L4, L5> => {\n return {\n all: (query, locations) => all(api, cacheMap, pkType, query, locations),\n one: (query, locations) => one(api, cacheMap, pkType, query, locations),\n create: (item, locations) => create(api, cacheMap, pkType, item, locations),\n get: (key) => get(api, cacheMap, pkType, key),\n retrieve: (key) => retrieve(api, cacheMap, pkType, key),\n remove: (key) => remove(api, cacheMap, key),\n update: (key, item) => update(api, cacheMap, pkType, key, item),\n action: (key, actionName, body) => action(api, cacheMap, pkType, key, actionName, body),\n allAction: (actionName, body, locations) => allAction(api, cacheMap, pkType, actionName, body, locations),\n facet: (key, facetName, params) => facet(api, cacheMap, key, facetName, params),\n allFacet: (facetName, params, locations) => allFacet(api, cacheMap, facetName, params, locations),\n find: (finder, params, locations) => find(api, cacheMap, pkType, finder, params, locations),\n findOne: (finder, params, locations) => findOne(api, cacheMap, pkType, finder, params, locations),\n set: (key, item) => set(cacheMap, pkType, key, item),\n reset: () => reset(coordinate)\n };\n};\n", "import { Item } from \"@fjell/core\";\nimport { Instance as BaseInstance, Coordinate, Registry } from \"@fjell/registry\";\nimport { ClientApi } from \"@fjell/client-api\";\nimport { CacheMap } from \"@/CacheMap\";\nimport { createOperations, Operations } from \"@/Operations\";\nimport LibLogger from \"@/logger\";\n\nconst logger = LibLogger.get('Cache');\n\n/**\n * The Cache interface extends the base Instance from @fjell/registry and adds cache operations\n * for interacting with cached data.\n *\n * The interface extends the base Instance (which provides coordinate and registry) with:\n * - api: Provides methods for interacting with server API\n * - cacheMap: Local cache storage for items\n * - operations: All cache operations (get, set, all, etc.) that work with both cache and API\n *\n * @template V - The type of the data model item, extending Item\n * @template S - The string literal type representing the model's key type\n * @template L1-L5 - Optional string literal types for location hierarchy levels\n */\nexport interface Cache<\n V extends Item<S, L1, L2, L3, L4, L5>,\n S extends string,\n L1 extends string = never,\n L2 extends string = never,\n L3 extends string = never,\n L4 extends string = never,\n L5 extends string = never\n> extends BaseInstance<S, L1, L2, L3, L4, L5> {\n /** The API client for interacting with server endpoints */\n api: ClientApi<V, S, L1, L2, L3, L4, L5>;\n\n /** The cache map that stores cached items */\n cacheMap: CacheMap<V, S, L1, L2, L3, L4, L5>;\n\n /** All cache operations that work with both cache and API */\n operations: Operations<V, S, L1, L2, L3, L4, L5>;\n}\n\nexport const createCache = <\n V extends Item<S, L1, L2, L3, L4, L5>,\n S extends string,\n L1 extends string = never,\n L2 extends string = never,\n L3 extends string = never,\n L4 extends string = never,\n L5 extends string = never\n>(\n api: ClientApi<V, S, L1, L2, L3, L4, L5>,\n coordinate: Coordinate<S, L1, L2, L3, L4, L5>,\n registry: Registry\n ): Cache<V, S, L1, L2, L3, L4, L5> => {\n logger.debug('createCache', { coordinate, registry });\n\n // Create the cache map using the coordinate's key type array\n const cacheMap = new CacheMap<V, S, L1, L2, L3, L4, L5>(coordinate.kta);\n\n // Get the primary key type from the coordinate\n const pkType = coordinate.kta[0] as S;\n\n // Create operations\n const operations = createOperations(api, coordinate, cacheMap, pkType);\n\n return {\n coordinate,\n registry,\n api,\n cacheMap,\n operations\n };\n};\n\nexport const isCache = (cache: any): cache is Cache<any, any, any, any, any, any, any> => {\n return cache !== null &&\n typeof cache === 'object' &&\n 'coordinate' in cache &&\n 'registry' in cache &&\n 'api' in cache &&\n 'cacheMap' in cache &&\n 'operations' in cache;\n};\n", "\nimport LibLogger from \"@/logger\";\nimport { Item } from \"@fjell/core\";\nimport { Coordinate, Registry } from \"@fjell/registry\";\nimport { ClientApi } from \"@fjell/client-api\";\nimport { Cache, createCache } from \"./Cache\";\n\nconst logger = LibLogger.get(\"Instance\");\n\n/**\n * The Cache Instance interface represents a cache model instance that extends the base Instance\n * from @fjell/registry and adds cache operations for interacting with cached data.\n *\n * This is an alias for the Cache interface since Cache now extends Instance directly.\n *\n * @template V - The type of the data model item, extending Item\n * @template S - The string literal type representing the model's key type\n * @template L1-L5 - Optional string literal types for location hierarchy levels\n */\nexport type Instance<\n V extends Item<S, L1, L2, L3, L4, L5>,\n S extends string,\n L1 extends string = never,\n L2 extends string = never,\n L3 extends string = never,\n L4 extends string = never,\n L5 extends string = never\n> = Cache<V, S, L1, L2, L3, L4, L5>;\n\nexport const createInstance = <\n V extends Item<S, L1, L2, L3, L4, L5>,\n S extends string,\n L1 extends string = never,\n L2 extends string = never,\n L3 extends string = never,\n L4 extends string = never,\n L5 extends string = never\n>(\n registry: Registry,\n coordinate: Coordinate<S, L1, L2, L3, L4, L5>,\n api: ClientApi<V, S, L1, L2, L3, L4, L5>,\n ): Instance<V, S, L1, L2, L3, L4, L5> => {\n logger.debug(\"createInstance\", { coordinate, api, registry });\n return createCache(api, coordinate, registry);\n}\n\nexport const isInstance = (instance: any): instance is Instance<any, any, any, any, any, any, any> => {\n return instance !== null &&\n typeof instance === 'object' &&\n 'coordinate' in instance &&\n 'registry' in instance &&\n 'api' in instance &&\n 'cacheMap' in instance &&\n 'operations' in instance;\n}\n", "import { Item } from \"@fjell/core\";\nimport { ClientApi } from \"@fjell/client-api\";\nimport { InstanceFactory as BaseInstanceFactory, Registry, RegistryHub } from \"@fjell/registry\";\nimport { Instance } from \"./Instance\";\nimport { Coordinate } from \"@fjell/registry\";\nimport { CacheMap } from \"@/CacheMap\";\nimport { createOperations } from \"@/Operations\";\nimport LibLogger from \"@/logger\";\n\nconst logger = LibLogger.get(\"InstanceFactory\");\n\nexport type InstanceFactory<\n V extends Item<S, L1, L2, L3, L4, L5>,\n S extends string,\n L1 extends string = never,\n L2 extends string = never,\n L3 extends string = never,\n L4 extends string = never,\n L5 extends string = never\n> = (\n api: ClientApi<V, S, L1, L2, L3, L4, L5>\n) => BaseInstanceFactory<S, L1, L2, L3, L4, L5>;\n\n/**\n * Factory function for creating cache instances\n */\nexport const createInstanceFactory = <\n V extends Item<S, L1, L2, L3, L4, L5>,\n S extends string,\n L1 extends string = never,\n L2 extends string = never,\n L3 extends string = never,\n L4 extends string = never,\n L5 extends string = never\n>(\n api: ClientApi<V, S, L1, L2, L3, L4, L5>\n ): BaseInstanceFactory<S, L1, L2, L3, L4, L5> => {\n return (coordinate: Coordinate<S, L1, L2, L3, L4, L5>, context: { registry: Registry, registryHub?: RegistryHub }) => {\n logger.debug(\"Creating cache instance\", { coordinate, registry: context.registry, api });\n\n // Since InstanceFactory must be synchronous but our createInstance is async,\n // we need to create a special cache instance synchronously and defer the async initialization\n const cacheMap = new CacheMap<V, S, L1, L2, L3, L4, L5>(coordinate.kta);\n const pkType = coordinate.kta[0] as S;\n const operations = createOperations(api, coordinate, cacheMap, pkType);\n\n return {\n coordinate,\n registry: context.registry,\n api,\n cacheMap,\n operations\n } as Instance<V, S, L1, L2, L3, L4, L5>;\n };\n};\n", "import LibLogger from '@/logger';\nimport {\n Registry as BaseRegistry,\n createRegistry as createBaseRegistry,\n RegistryFactory,\n RegistryHub\n} from '@fjell/registry';\n\nconst logger = LibLogger.get(\"Registry\");\n\n/**\n * Extended Registry interface for cache-specific functionality\n */\nexport interface Registry extends BaseRegistry {\n type: 'cache';\n}\n\n/**\n * Factory function for creating cache registries\n */\nexport const createRegistryFactory = (): RegistryFactory => {\n return (type: string, registryHub?: RegistryHub): BaseRegistry => {\n if (type !== 'cache') {\n throw new Error(`Cache registry factory can only create 'cache' type registries, got: ${type}`);\n }\n\n logger.debug(\"Creating cache registry\", { type, registryHub });\n\n const baseRegistry = createBaseRegistry(type, registryHub);\n\n // Cast to Registry for type safety\n return baseRegistry as Registry;\n };\n};\n\n/**\n * Creates a new cache registry instance\n */\nexport const createRegistry = (registryHub?: RegistryHub): Registry => {\n const baseRegistry = createBaseRegistry('cache', registryHub);\n\n return {\n ...baseRegistry,\n } as Registry;\n};\n"],
|
|
5
|
-
"mappings": "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",
|
|
4
|
+
"sourcesContent": ["import Logging from '@fjell/logging';\n\nconst LibLogger = Logging.getLogger('@fjell/cache');\n\nexport default LibLogger;\n", "/* eslint-disable no-undefined */\nimport {\n ComKey,\n Item,\n ItemQuery,\n LocKeyArray,\n PriKey\n} from \"@fjell/core\";\nimport { Cache } from \"./Cache\";\nimport { CacheMap } from \"./CacheMap\";\nimport LibLogger from \"./logger\";\n\nconst logger = LibLogger.get('ItemAggregator');\n\nexport interface Aggregator<\n V extends Item<S, L1, L2, L3, L4, L5>,\n S extends string,\n L1 extends string = never,\n L2 extends string = never,\n L3 extends string = never,\n L4 extends string = never,\n L5 extends string = never\n> extends Cache<V, S, L1, L2, L3, L4, L5> {\n // Cache operations exposed directly for aggregator\n all: (\n query?: ItemQuery,\n locations?: LocKeyArray<L1, L2, L3, L4, L5> | []\n ) => Promise<[CacheMap<V, S, L1, L2, L3, L4, L5>, V[]]>;\n\n one: (\n query?: ItemQuery,\n locations?: LocKeyArray<L1, L2, L3, L4, L5> | []\n ) => Promise<[CacheMap<V, S, L1, L2, L3, L4, L5>, V | null]>;\n\n action: (\n key: ComKey<S, L1, L2, L3, L4, L5> | PriKey<S>,\n action: string,\n body?: any\n ) => Promise<[CacheMap<V, S, L1, L2, L3, L4, L5>, V]>;\n\n allAction: (\n action: string,\n body?: any,\n locations?: LocKeyArray<L1, L2, L3, L4, L5> | []\n ) => Promise<[CacheMap<V, S, L1, L2, L3, L4, L5>, V[]]>;\n\n allFacet: (\n facet: string,\n params?: Record<string, string | number | boolean | Date | Array<string | number | boolean | Date>>,\n locations?: LocKeyArray<L1, L2, L3, L4, L5> | []\n ) => Promise<[CacheMap<V, S, L1, L2, L3, L4, L5>, any]>;\n\n create: (\n item: Partial<Item<S, L1, L2, L3, L4, L5>>,\n locations?: LocKeyArray<L1, L2, L3, L4, L5> | []\n ) => Promise<[CacheMap<V, S, L1, L2, L3, L4, L5>, V]>;\n\n get: (\n key: ComKey<S, L1, L2, L3, L4, L5> | PriKey<S>\n ) => Promise<[CacheMap<V, S, L1, L2, L3, L4, L5>, V | null]>;\n\n retrieve: (\n key: ComKey<S, L1, L2, L3, L4, L5> | PriKey<S>\n ) => Promise<[CacheMap<V, S, L1, L2, L3, L4, L5> | null, V | null]>;\n\n remove: (\n key: ComKey<S, L1, L2, L3, L4, L5> | PriKey<S>\n ) => Promise<CacheMap<V, S, L1, L2, L3, L4, L5>>;\n\n update: (\n key: ComKey<S, L1, L2, L3, L4, L5> | PriKey<S>,\n item: Partial<Item<S, L1, L2, L3, L4, L5>>\n ) => Promise<[CacheMap<V, S, L1, L2, L3, L4, L5>, V]>;\n\n facet: (\n key: ComKey<S, L1, L2, L3, L4, L5> | PriKey<S>,\n facet: string,\n params?: Record<string, string | number | boolean | Date | Array<string | number | boolean | Date>>\n ) => Promise<[CacheMap<V, S, L1, L2, L3, L4, L5>, any]>;\n\n find: (\n finder: string,\n params?: Record<string, string | number | boolean | Date | Array<string | number | boolean | Date>>,\n locations?: LocKeyArray<L1, L2, L3, L4, L5> | []\n ) => Promise<[CacheMap<V, S, L1, L2, L3, L4, L5>, V[]]>;\n\n findOne: (\n finder: string,\n params?: Record<string, string | number | boolean | Date | Array<string | number | boolean | Date>>,\n locations?: LocKeyArray<L1, L2, L3, L4, L5> | []\n ) => Promise<[CacheMap<V, S, L1, L2, L3, L4, L5>, V]>;\n\n set: (\n key: ComKey<S, L1, L2, L3, L4, L5> | PriKey<S>,\n item: Item<S, L1, L2, L3, L4, L5>\n ) => Promise<[CacheMap<V, S, L1, L2, L3, L4, L5>, V]>;\n\n reset: () => Promise<[CacheMap<V, S, L1, L2, L3, L4, L5>]>;\n\n populate: (item: V) => Promise<V>;\n populateAggregate: (key: string, item: V) => Promise<void>;\n populateEvent: (key: string, item: V) => Promise<void>;\n}\n\nexport interface CacheConfig { cache: any, optional: boolean }\n\nexport interface AggregateConfig { [key: string]: (CacheConfig) }\n\nexport const toCacheConfig = <\n V extends Item<S, L1, L2, L3, L4, L5>,\n S extends string,\n L1 extends string = never,\n L2 extends string = never,\n L3 extends string = never,\n L4 extends string = never,\n L5 extends string = never\n>(config: CacheConfig | Cache<V, S, L1, L2, L3, L4, L5>): CacheConfig => {\n let cacheConfig: CacheConfig;\n if ((config as CacheConfig).optional === undefined) {\n cacheConfig = { cache: config as any, optional: false };\n } else {\n cacheConfig = config as CacheConfig;\n }\n return cacheConfig;\n}\n\nexport const createAggregator = async <\n V extends Item<S, L1, L2, L3, L4, L5>,\n S extends string,\n L1 extends string = never,\n L2 extends string = never,\n L3 extends string = never,\n L4 extends string = never,\n L5 extends string = never\n>(\n cache: Cache<V, S, L1, L2, L3, L4, L5>,\n { aggregates = {}, events = {} }:\n {\n aggregates?: AggregateConfig,\n events?: AggregateConfig\n }\n): Promise<Aggregator<V, S, L1, L2, L3, L4, L5>> => {\n\n const populate = async (item: V): Promise<V> => {\n logger.default('populate', { item });\n for (const key in aggregates) {\n await populateAggregate(key, item);\n }\n for (const key in events) {\n await populateEvent(key, item);\n }\n logger.default('populate done', { item });\n return item;\n }\n\n const populateAggregate = async (key: string, item: V) => {\n logger.default('populate aggregate key', { key });\n const cacheConfig = toCacheConfig(aggregates[key]);\n if (item.refs === undefined) {\n if (cacheConfig.optional === false) {\n logger.error('Item does not have refs an is not optional ' + JSON.stringify(item));\n throw new Error('Item does not have refs an is not optional ' + JSON.stringify(item));\n } else {\n if (item.events && Object.prototype.hasOwnProperty.call(item.events, key)) {\n delete item.events[key];\n }\n }\n } else if (item.refs[key] === undefined) {\n if (cacheConfig.optional === false) {\n logger.error('Item does not have mandatory ref with key, not optional ' +\n key + ' ' + JSON.stringify(item));\n throw new Error('Item does not have mandatory ref with key, not optional ' +\n key + ' ' + JSON.stringify(item));\n } else {\n if (item.events && Object.prototype.hasOwnProperty.call(item.events, key)) {\n delete item.events[key];\n }\n }\n } else {\n\n const ref = item.refs[key];\n\n logger.default('AGG Retrieving Item in Populate', { key: ref });\n const [, newItem] = await cacheConfig.cache.operations.retrieve(ref);\n if (newItem) {\n if (item.aggs === undefined) {\n item.aggs = {};\n }\n item.aggs[key] = {\n key: ref,\n item: newItem as Item,\n };\n }\n }\n }\n\n // TODO: I'm not a big fan that this just \"automatically\" assumes that the \"by\" key in event is a ref.\n const populateEvent = async (key: string, item: V) => {\n logger.default('populate event key', { key });\n const cacheConfig = toCacheConfig(events[key]);\n\n if (item.events === undefined) {\n throw new Error('Item does not have events ' + JSON.stringify(item));\n } else if (item.events[key] === undefined) {\n if (cacheConfig.optional === false) {\n logger.error('Item does not have mandatory event with key ' + key + ' ' + JSON.stringify(item));\n throw new Error('Item does not have mandatory event with key ' + key + ' ' + JSON.stringify(item));\n }\n } else {\n const event = item.events[key];\n\n if (event.by === undefined) {\n logger.error(\n 'populateEvent with an Event that does not have by', { event, ik: item.key, eventKey: key });\n throw new Error('populateEvent with an Event that does not have by: ' + JSON.stringify({ key, event }));\n }\n\n logger.default('EVENT Retrieving Item in Populate', { key: event.by });\n const [, newItem] = await cacheConfig.cache.operations.retrieve(event.by);\n if (newItem) {\n event.agg = newItem as Item;\n }\n }\n }\n\n const all = async (\n query: ItemQuery = {},\n locations: LocKeyArray<L1, L2, L3, L4, L5> | [] = []\n ):\n Promise<[CacheMap<V, S, L1, L2, L3, L4, L5>, V[]]> => {\n logger.default('all', { query, locations });\n const [cacheMap, items] = await cache.operations.all(query, locations);\n const populatedItems = await Promise.all(items.map(async (item) => populate(item)));\n return [cacheMap, populatedItems];\n }\n\n const one = async (\n query: ItemQuery = {},\n locations: LocKeyArray<L1, L2, L3, L4, L5> | [] = []\n ):\n Promise<[CacheMap<V, S, L1, L2, L3, L4, L5>, V | null]> => {\n logger.default('one', { query, locations });\n const [cacheMap, item] = await cache.operations.one(query, locations);\n let populatedItem = null;\n if (item) {\n populatedItem = await populate(item);\n }\n return [cacheMap, populatedItem];\n }\n\n const action = async (\n key: ComKey<S, L1, L2, L3, L4, L5> | PriKey<S>,\n action: string,\n body: any = {},\n ): Promise<[CacheMap<V, S, L1, L2, L3, L4, L5>, V]> => {\n logger.default('action', { key, action, body });\n const [cacheMap, item] = await cache.operations.action(key, action, body);\n const populatedItem = await populate(item);\n return [cacheMap, populatedItem];\n }\n\n const allAction = async (\n action: string,\n body: any = {},\n locations: LocKeyArray<L1, L2, L3, L4, L5> | [] = []\n ): Promise<[CacheMap<V, S, L1, L2, L3, L4, L5>, V[]]> => {\n logger.default('action', { action, body, locations });\n const [cacheMap, items] = await cache.operations.allAction(action, body, locations);\n const populatedItems = await Promise.all(items.map(async (item: V) => populate(item)));\n return [cacheMap, populatedItems];\n }\n\n const allFacet = async (\n facet: string,\n params: Record<string, string | number | boolean | Date | Array<string | number | boolean | Date>> = {},\n locations: LocKeyArray<L1, L2, L3, L4, L5> | [] = []\n ): Promise<[CacheMap<V, S, L1, L2, L3, L4, L5>, any]> => {\n logger.default('allFacet', { facet, params, locations });\n const [cacheMap, response] = await cache.operations.allFacet(facet, params, locations);\n return [cacheMap, response];\n }\n\n const create = async (\n v: Partial<Item<S, L1, L2, L3, L4, L5>>,\n locations: LocKeyArray<L1, L2, L3, L4, L5> | [] = []\n ): Promise<[CacheMap<V, S, L1, L2, L3, L4, L5>, V]> => {\n logger.default('create', { v, locations });\n const [cacheMap, item] = await cache.operations.create(v, locations);\n const populatedItem = await populate(item);\n return [cacheMap, populatedItem];\n }\n\n const get = async (\n key: ComKey<S, L1, L2, L3, L4, L5> | PriKey<S>,\n ): Promise<[CacheMap<V, S, L1, L2, L3, L4, L5>, V | null]> => {\n logger.default('get', { key });\n const [cacheMap, item] = await cache.operations.get(key);\n let populatedItem = null;\n if (item) {\n populatedItem = await populate(item);\n }\n return [cacheMap, populatedItem];\n }\n\n const retrieve = async (\n key: ComKey<S, L1, L2, L3, L4, L5> | PriKey<S>,\n ): Promise<[CacheMap<V, S, L1, L2, L3, L4, L5> | null, V | null]> => {\n logger.default('retrieve', { key });\n const [cacheMap, item] = await cache.operations.retrieve(key);\n let populatedItem = null;\n if (item) {\n populatedItem = await populate(item);\n }\n return [cacheMap, populatedItem];\n }\n\n const remove = async (\n key: ComKey<S, L1, L2, L3, L4, L5> | PriKey<S>,\n ): Promise<CacheMap<V, S, L1, L2, L3, L4, L5>> => {\n logger.default('remove', { key });\n const cacheMap = await cache.operations.remove(key);\n return cacheMap;\n }\n\n const update = async (\n key: ComKey<S, L1, L2, L3, L4, L5> | PriKey<S>,\n v: Partial<Item<S, L1, L2, L3, L4, L5>>,\n ): Promise<[CacheMap<V, S, L1, L2, L3, L4, L5>, V]> => {\n logger.default('update', { key, v });\n const [cacheMap, item] = await cache.operations.update(key, v);\n const populatedItem = await populate(item);\n return [cacheMap, populatedItem];\n }\n\n // Facets are a pass-thru for aggregators\n const facet = async (\n key: ComKey<S, L1, L2, L3, L4, L5> | PriKey<S>,\n facet: string,\n ): Promise<[CacheMap<V, S, L1, L2, L3, L4, L5>, any]> => {\n logger.default('facet', { key, facet });\n const [cacheMap, response] = await cache.operations.facet(key, facet);\n return [cacheMap, response];\n }\n\n const find = async (\n finder: string,\n finderParams: Record<string, string | number | boolean | Date | Array<string | number | boolean | Date>> = {},\n locations: LocKeyArray<L1, L2, L3, L4, L5> | [] = []\n ): Promise<[CacheMap<V, S, L1, L2, L3, L4, L5>, V[]]> => {\n logger.default('find', { finder, finderParams, locations });\n const [cacheMap, items] = await cache.operations.find(finder, finderParams, locations);\n const populatedItems = await Promise.all(items.map(async (item: V) => populate(item)));\n return [cacheMap, populatedItems];\n }\n\n const findOne = async (\n finder: string,\n finderParams: Record<string, string | number | boolean | Date | Array<string | number | boolean | Date>> = {},\n locations: LocKeyArray<L1, L2, L3, L4, L5> | [] = []\n ): Promise<[CacheMap<V, S, L1, L2, L3, L4, L5>, V]> => {\n logger.default('find', { finder, finderParams, locations });\n const [cacheMap, item] = await cache.operations.findOne(finder, finderParams, locations);\n const populatedItem = await populate(item);\n return [cacheMap, populatedItem];\n }\n\n const set = async (\n key: ComKey<S, L1, L2, L3, L4, L5> | PriKey<S>,\n v: Item<S, L1, L2, L3, L4, L5>\n ): Promise<[CacheMap<V, S, L1, L2, L3, L4, L5>, V]> => {\n logger.default('set', { key, v });\n\n // TODO: There should be some input validation here to ensure a valid item.\n const [cacheMap, item] = await cache.operations.set(key, v);\n const populatedItem = await populate(item);\n return [cacheMap, populatedItem];\n }\n\n const reset = async (): Promise<[CacheMap<V, S, L1, L2, L3, L4, L5>]> => {\n const cacheMap = await cache.operations.reset();\n return cacheMap;\n }\n\n return {\n // Cache properties\n coordinate: cache.coordinate,\n registry: cache.registry,\n api: cache.api,\n cacheMap: cache.cacheMap,\n operations: cache.operations,\n // Cache operations exposed directly\n all,\n one,\n action,\n allAction,\n allFacet,\n create,\n get,\n retrieve,\n remove,\n update,\n facet,\n find,\n findOne,\n reset,\n set,\n // Aggregator-specific operations\n populate,\n populateAggregate,\n populateEvent\n }\n}\n", "import {\n AllItemTypeArrays,\n ComKey,\n Dictionary,\n isComKey,\n isQueryMatch,\n Item,\n ItemQuery,\n LocKeyArray,\n PriKey\n} from \"@fjell/core\";\nimport LibLogger from \"./logger\";\n\nconst logger = LibLogger.get(\"CacheMap\");\n\n// Normalize a key value to string for consistent comparison and hashing\nconst normalizeKeyValue = (value: string | number): string => {\n return String(value);\n};\n\n// Normalized hash function for Dictionary that converts pk/lk values to strings\nconst createNormalizedHashFunction = <T>() => {\n return (key: T): string => {\n if (typeof key === 'object' && key !== null) {\n // Create a normalized version of the key with string values\n const normalizedKey = JSON.parse(JSON.stringify(key));\n\n // Normalize pk values\n if ('pk' in normalizedKey && normalizedKey.pk !== null) {\n normalizedKey.pk = normalizeKeyValue(normalizedKey.pk);\n }\n\n // Normalize lk values\n if ('lk' in normalizedKey && normalizedKey.lk !== null) {\n normalizedKey.lk = normalizeKeyValue(normalizedKey.lk);\n }\n\n // Normalize loc array lk values\n if ('loc' in normalizedKey && Array.isArray(normalizedKey.loc)) {\n normalizedKey.loc = normalizedKey.loc.map((locItem: any) => {\n if (locItem && 'lk' in locItem && locItem.lk !== null) {\n return { ...locItem, lk: normalizeKeyValue(locItem.lk) };\n }\n return locItem;\n });\n }\n\n return JSON.stringify(normalizedKey);\n }\n return JSON.stringify(key);\n };\n};\n\n// Helper function to normalize and compare location key arrays\nconst isLocKeyArrayEqual = (a: any[], b: any[]): boolean => {\n if (a.length !== b.length) {\n return false;\n }\n\n for (let i = 0; i < a.length; i++) {\n const normalizedA = normalizeLocKeyItem(a[i]);\n const normalizedB = normalizeLocKeyItem(b[i]);\n\n if (JSON.stringify(normalizedA) !== JSON.stringify(normalizedB)) {\n return false;\n }\n }\n\n return true;\n};\n\n// Helper function to normalize a location key item\nconst normalizeLocKeyItem = (item: any): any => {\n if (typeof item === 'object' && item !== null) {\n const normalized = { ...item };\n\n if ('lk' in normalized && normalized.lk !== null) {\n normalized.lk = normalizeKeyValue(normalized.lk);\n }\n\n return normalized;\n }\n\n return item;\n};\n\n// const isObj = (x: any) => typeof x === \"object\" && x !== null;\n\n// const intersection = (a: object, b: object): object => {\n// const result: { [key: string]: any } = {}\n\n// if (([a, b]).every(isObj)) {\n// Object.keys(a).forEach((key) => {\n// // @ts-ignore\n// const value = a[key]\n// // @ts-ignore\n// const other = b[key]\n\n// if (isObj(value)) {\n// result[key] = intersection(value, other)\n// } else if (value === other) {\n// result[key] = value\n// }\n// })\n// }\n\n// return result\n// }\n\n// const removeEmptyObjects = (obj: object): object => {\n// const result: { [key: string]: any } = {}\n\n// Object.keys(obj).forEach((key) => {\n// // @ts-ignore\n// const value = obj[key];\n\n// if (isObj(value)) {\n// const nested = removeEmptyObjects(value);\n\n// if (Object.keys(nested).length > 0) {\n// result[key] = nested\n// }\n// } else if (value !== null) {\n// result[key] = value\n// }\n// });\n\n// return result;\n// }\n\nexport class CacheMap<\n V extends Item<S, L1, L2, L3, L4, L5>,\n S extends string,\n L1 extends string = never,\n L2 extends string = never,\n L3 extends string = never,\n L4 extends string = never,\n L5 extends string = never\n> extends Dictionary<ComKey<S, L1, L2, L3, L4, L5> | PriKey<S>, V> {\n\n private types: AllItemTypeArrays<S, L1, L2, L3, L4, L5>;\n private normalizedHashFunction: (key: ComKey<S, L1, L2, L3, L4, L5> | PriKey<S>) => string;\n\n public constructor(\n types: AllItemTypeArrays<S, L1, L2, L3, L4, L5>,\n map?: { [key: string]: V },\n ) {\n const hashFunc = createNormalizedHashFunction<ComKey<S, L1, L2, L3, L4, L5> | PriKey<S>>();\n super(map, hashFunc);\n this.types = types;\n this.normalizedHashFunction = hashFunc;\n }\n\n public get(\n key: ComKey<S, L1, L2, L3, L4, L5> | PriKey<S>,\n ): V | null {\n logger.trace('get', { key });\n const hashedKey = this.normalizedHashFunction(key);\n const entry = this.map[hashedKey];\n // Check if entry exists AND the normalized keys match\n return entry && this.normalizedHashFunction(entry.originalKey) === this.normalizedHashFunction(key) ? entry.value : null;\n }\n\n public includesKey(key: ComKey<S, L1, L2, L3, L4, L5> | PriKey<S>): boolean {\n const hashedKey = this.normalizedHashFunction(key);\n const entry = this.map[hashedKey];\n return entry ? this.normalizedHashFunction(entry.originalKey) === this.normalizedHashFunction(key) : false;\n }\n\n public delete(key: ComKey<S, L1, L2, L3, L4, L5> | PriKey<S>): void {\n logger.trace('delete', { key });\n const hashedKey = this.normalizedHashFunction(key);\n delete this.map[hashedKey];\n }\n\n public allIn(\n locations: LocKeyArray<L1, L2, L3, L4, L5> | []\n ): V[] {\n if (locations.length === 0) {\n logger.debug('Returning all items, LocKeys is empty');\n return this.values();\n } else {\n const locKeys: LocKeyArray<L1, L2, L3, L4, L5> | [] = locations;\n logger.debug('allIn', { locKeys, keys: this.keys().length });\n return this.keys()\n .filter((key) => key && isComKey(key))\n .filter((key) => {\n const ComKey = key as ComKey<S, L1, L2, L3, L4, L5>;\n logger.debug('Comparing Location Keys', {\n locKeys,\n ComKey,\n });\n return isLocKeyArrayEqual(locKeys, ComKey.loc);\n })\n .map((key) => this.get(key) as V);\n }\n }\n\n // TODO: Can we do case insensitive matching?\n public contains(query: ItemQuery, locations: LocKeyArray<L1, L2, L3, L4, L5> | []): boolean {\n logger.debug('contains', { query, locations });\n const items = this.allIn(locations);\n\n return items.some((item) => isQueryMatch(item, query));\n }\n\n public queryIn(\n query: ItemQuery,\n locations: LocKeyArray<L1, L2, L3, L4, L5> | [] = []\n ): V[] {\n logger.debug('queryIn', { query, locations });\n const items = this.allIn(locations);\n\n return items.filter((item) => isQueryMatch(item, query));\n }\n\n public clone(): CacheMap<V, S, L1, L2, L3, L4, L5> {\n const clone = new CacheMap<V, S, L1, L2, L3, L4, L5>(this.types);\n // Share the same underlying map reference (not a copy)\n clone.map = this.map;\n // Ensure the clone uses the same normalized hash function\n clone.normalizedHashFunction = this.normalizedHashFunction;\n return clone;\n }\n\n};\n", "import {\n Item,\n ItemQuery,\n LocKeyArray,\n validatePK\n} from \"@fjell/core\";\nimport { ClientApi } from \"@fjell/client-api\";\nimport { NotFoundError } from \"@fjell/http-api\";\nimport { CacheMap } from \"../CacheMap\";\nimport LibLogger from \"../logger\";\n\nconst logger = LibLogger.get('all');\n\nexport const all = async <\n V extends Item<S, L1, L2, L3, L4, L5>,\n S extends string,\n L1 extends string = never,\n L2 extends string = never,\n L3 extends string = never,\n L4 extends string = never,\n L5 extends string = never\n>(\n api: ClientApi<V, S, L1, L2, L3, L4, L5>,\n cacheMap: CacheMap<V, S, L1, L2, L3, L4, L5>,\n pkType: S,\n query: ItemQuery = {},\n locations: LocKeyArray<L1, L2, L3, L4, L5> | [] = []\n): Promise<[CacheMap<V, S, L1, L2, L3, L4, L5>, V[]]> => {\n logger.default('all', { query, locations });\n let ret: V[] = [];\n try {\n ret = await api.all(query, locations);\n ret.forEach((v) => {\n cacheMap.set(v.key, v);\n });\n } catch (e: unknown) {\n if (e instanceof NotFoundError) {\n // Handle not found gracefully\n } else {\n throw e;\n }\n }\n return [cacheMap, validatePK(ret, pkType) as V[]];\n};\n", "import {\n Item,\n ItemQuery,\n LocKeyArray,\n validatePK\n} from \"@fjell/core\";\nimport { ClientApi } from \"@fjell/client-api\";\nimport { NotFoundError } from \"@fjell/http-api\";\nimport { CacheMap } from \"../CacheMap\";\nimport LibLogger from \"../logger\";\n\nconst logger = LibLogger.get('one');\n\nexport const one = async <\n V extends Item<S, L1, L2, L3, L4, L5>,\n S extends string,\n L1 extends string = never,\n L2 extends string = never,\n L3 extends string = never,\n L4 extends string = never,\n L5 extends string = never\n>(\n api: ClientApi<V, S, L1, L2, L3, L4, L5>,\n cacheMap: CacheMap<V, S, L1, L2, L3, L4, L5>,\n pkType: S,\n query: ItemQuery = {},\n locations: LocKeyArray<L1, L2, L3, L4, L5> | [] = []\n): Promise<[CacheMap<V, S, L1, L2, L3, L4, L5>, V | null]> => {\n logger.default('one', { query, locations });\n\n let retItem: V | null = null;\n try {\n retItem = await api.one(query, locations);\n if (retItem) {\n cacheMap.set(retItem.key, retItem);\n }\n } catch (e: unknown) {\n if (e instanceof NotFoundError) {\n // Handle not found gracefully\n } else {\n throw e;\n }\n }\n return [\n cacheMap,\n retItem ?\n validatePK(retItem, pkType) as V :\n null\n ];\n};\n", "import {\n Item,\n LocKeyArray,\n validatePK\n} from \"@fjell/core\";\nimport { ClientApi } from \"@fjell/client-api\";\nimport { CacheMap } from \"../CacheMap\";\nimport LibLogger from \"../logger\";\n\nconst logger = LibLogger.get('create');\n\nexport const create = async <\n V extends Item<S, L1, L2, L3, L4, L5>,\n S extends string,\n L1 extends string = never,\n L2 extends string = never,\n L3 extends string = never,\n L4 extends string = never,\n L5 extends string = never\n>(\n api: ClientApi<V, S, L1, L2, L3, L4, L5>,\n cacheMap: CacheMap<V, S, L1, L2, L3, L4, L5>,\n pkType: S,\n v: Partial<Item<S, L1, L2, L3, L4, L5>>,\n locations: LocKeyArray<L1, L2, L3, L4, L5> | [] = []\n): Promise<[CacheMap<V, S, L1, L2, L3, L4, L5>, V]> => {\n logger.default('create', { v, locations });\n const created = await api.create(v, locations);\n cacheMap.set(created.key, created);\n return [cacheMap, validatePK(created, pkType) as V];\n};\n", "import {\n ComKey,\n isValidItemKey,\n Item,\n PriKey,\n validatePK\n} from \"@fjell/core\";\nimport { ClientApi } from \"@fjell/client-api\";\nimport { CacheMap } from \"../CacheMap\";\nimport LibLogger from \"../logger\";\n\nconst logger = LibLogger.get('get');\n\nexport const get = async <\n V extends Item<S, L1, L2, L3, L4, L5>,\n S extends string,\n L1 extends string = never,\n L2 extends string = never,\n L3 extends string = never,\n L4 extends string = never,\n L5 extends string = never\n>(\n api: ClientApi<V, S, L1, L2, L3, L4, L5>,\n cacheMap: CacheMap<V, S, L1, L2, L3, L4, L5>,\n pkType: S,\n key: ComKey<S, L1, L2, L3, L4, L5> | PriKey<S>\n): Promise<[CacheMap<V, S, L1, L2, L3, L4, L5>, V | null]> => {\n logger.default('get', { key });\n\n if (!isValidItemKey(key)) {\n logger.error('Key for Get is not a valid ItemKey: %j', key);\n throw new Error('Key for Get is not a valid ItemKey');\n }\n\n let ret: V | null;\n try {\n ret = await api.get(key);\n if (ret) {\n cacheMap.set(ret.key, ret);\n }\n } catch (e: any) {\n logger.error(\"Error getting item for key\", { key, message: e.message, stack: e.stack });\n throw e;\n }\n\n return [\n cacheMap,\n ret ?\n validatePK(ret, pkType) as V :\n null\n ];\n};\n", "import {\n ComKey,\n isValidItemKey,\n Item,\n PriKey,\n validatePK\n} from \"@fjell/core\";\nimport { CacheMap } from \"../CacheMap\";\nimport LibLogger from \"../logger\";\nimport { get } from \"./get\";\nimport { ClientApi } from \"@fjell/client-api\";\n\nconst logger = LibLogger.get('retrieve');\n\nexport const retrieve = async <\n V extends Item<S, L1, L2, L3, L4, L5>,\n S extends string,\n L1 extends string = never,\n L2 extends string = never,\n L3 extends string = never,\n L4 extends string = never,\n L5 extends string = never\n>(\n api: ClientApi<V, S, L1, L2, L3, L4, L5>,\n cacheMap: CacheMap<V, S, L1, L2, L3, L4, L5>,\n pkType: S,\n key: ComKey<S, L1, L2, L3, L4, L5> | PriKey<S>\n): Promise<[CacheMap<V, S, L1, L2, L3, L4, L5> | null, V | null]> => {\n logger.default('retrieve', { key });\n\n if (!isValidItemKey(key)) {\n logger.error('Key for Retrieve is not a valid ItemKey: %j', key);\n throw new Error('Key for Retrieve is not a valid ItemKey');\n }\n\n const containsItemKey = cacheMap.includesKey(key);\n\n let retrieved: V | null;\n if (containsItemKey) {\n logger.default('Looking for Object in Cache', key);\n retrieved = cacheMap.get(key);\n } else {\n logger.default('Object Not Found in Cache, Retrieving from Server API', { key });\n [, retrieved] = await get(api, cacheMap, pkType, key);\n }\n\n const retValue: [CacheMap<V, S, L1, L2, L3, L4, L5> | null, V | null] = [\n containsItemKey ? null : cacheMap,\n retrieved ?\n validatePK(retrieved, pkType) as V :\n null\n ];\n\n return retValue;\n};\n", "import {\n ComKey,\n isValidItemKey,\n Item,\n PriKey\n} from \"@fjell/core\";\nimport { ClientApi } from \"@fjell/client-api\";\nimport { CacheMap } from \"../CacheMap\";\nimport LibLogger from \"../logger\";\n\nconst logger = LibLogger.get('remove');\n\nexport const remove = async <\n V extends Item<S, L1, L2, L3, L4, L5>,\n S extends string,\n L1 extends string = never,\n L2 extends string = never,\n L3 extends string = never,\n L4 extends string = never,\n L5 extends string = never\n>(\n api: ClientApi<V, S, L1, L2, L3, L4, L5>,\n cacheMap: CacheMap<V, S, L1, L2, L3, L4, L5>,\n key: ComKey<S, L1, L2, L3, L4, L5> | PriKey<S>\n): Promise<CacheMap<V, S, L1, L2, L3, L4, L5>> => {\n logger.default('remove', { key });\n\n if (!isValidItemKey(key)) {\n logger.error('Key for Remove is not a valid ItemKey: %j', key);\n throw new Error('Key for Remove is not a valid ItemKey');\n }\n\n try {\n await api.remove(key);\n cacheMap.delete(key);\n } catch (e) {\n logger.error(\"Error deleting item\", { error: e });\n throw e;\n }\n\n return cacheMap;\n};\n", "import {\n ComKey,\n isValidItemKey,\n Item,\n PriKey,\n validatePK\n} from \"@fjell/core\";\nimport { ClientApi } from \"@fjell/client-api\";\nimport { CacheMap } from \"../CacheMap\";\nimport LibLogger from \"../logger\";\n\nconst logger = LibLogger.get('update');\n\nexport const update = async <\n V extends Item<S, L1, L2, L3, L4, L5>,\n S extends string,\n L1 extends string = never,\n L2 extends string = never,\n L3 extends string = never,\n L4 extends string = never,\n L5 extends string = never\n>(\n api: ClientApi<V, S, L1, L2, L3, L4, L5>,\n cacheMap: CacheMap<V, S, L1, L2, L3, L4, L5>,\n pkType: S,\n key: ComKey<S, L1, L2, L3, L4, L5> | PriKey<S>,\n v: Partial<Item<S, L1, L2, L3, L4, L5>>\n): Promise<[CacheMap<V, S, L1, L2, L3, L4, L5>, V]> => {\n logger.default('update', { key, v });\n\n if (!isValidItemKey(key)) {\n logger.error('Key for Update is not a valid ItemKey: %j', key);\n throw new Error('Key for Update is not a valid ItemKey');\n }\n\n try {\n const updated = await api.update(key, v);\n cacheMap.set(updated.key, updated);\n return [cacheMap, validatePK(updated, pkType) as V];\n } catch (e) {\n logger.error(\"Error updating item\", { error: e });\n throw e;\n }\n};\n", "import {\n ComKey,\n isValidItemKey,\n Item,\n PriKey,\n validatePK\n} from \"@fjell/core\";\nimport { ClientApi } from \"@fjell/client-api\";\nimport { CacheMap } from \"../CacheMap\";\nimport LibLogger from \"../logger\";\n\nconst logger = LibLogger.get('action');\n\nexport const action = async <\n V extends Item<S, L1, L2, L3, L4, L5>,\n S extends string,\n L1 extends string = never,\n L2 extends string = never,\n L3 extends string = never,\n L4 extends string = never,\n L5 extends string = never\n>(\n api: ClientApi<V, S, L1, L2, L3, L4, L5>,\n cacheMap: CacheMap<V, S, L1, L2, L3, L4, L5>,\n pkType: S,\n key: ComKey<S, L1, L2, L3, L4, L5> | PriKey<S>,\n action: string,\n body: any = {}\n): Promise<[CacheMap<V, S, L1, L2, L3, L4, L5>, V]> => {\n logger.default('action', { key, action, body });\n\n if (!isValidItemKey(key)) {\n logger.error('Key for Action is not a valid ItemKey: %j', key);\n throw new Error('Key for Action is not a valid ItemKey');\n }\n\n const updated = await api.action(key, action, body);\n cacheMap.set(updated.key, updated);\n return [cacheMap, validatePK(updated, pkType) as V];\n};\n", "import {\n Item,\n LocKeyArray,\n validatePK\n} from \"@fjell/core\";\nimport { ClientApi } from \"@fjell/client-api\";\nimport { NotFoundError } from \"@fjell/http-api\";\nimport { CacheMap } from \"../CacheMap\";\nimport LibLogger from \"../logger\";\n\nconst logger = LibLogger.get('allAction');\n\nexport const allAction = async <\n V extends Item<S, L1, L2, L3, L4, L5>,\n S extends string,\n L1 extends string = never,\n L2 extends string = never,\n L3 extends string = never,\n L4 extends string = never,\n L5 extends string = never\n>(\n api: ClientApi<V, S, L1, L2, L3, L4, L5>,\n cacheMap: CacheMap<V, S, L1, L2, L3, L4, L5>,\n pkType: S,\n action: string,\n body: any = {},\n locations: LocKeyArray<L1, L2, L3, L4, L5> | [] = []\n): Promise<[CacheMap<V, S, L1, L2, L3, L4, L5>, V[]]> => {\n logger.default('allAction', { action, body, locations });\n let ret: V[] = [];\n try {\n ret = await api.allAction(action, body, locations);\n ret.forEach((v) => {\n cacheMap.set(v.key, v);\n });\n } catch (e: unknown) {\n // istanbul ignore next\n if (e instanceof NotFoundError) {\n // Handle not found gracefully\n } else {\n throw e;\n }\n }\n return [cacheMap, validatePK(ret, pkType) as V[]];\n};\n", "import {\n ComKey,\n Item,\n PriKey\n} from \"@fjell/core\";\nimport { ClientApi } from \"@fjell/client-api\";\nimport { CacheMap } from \"../CacheMap\";\nimport LibLogger from \"../logger\";\n\nconst logger = LibLogger.get('facet');\n\nexport const facet = async <\n V extends Item<S, L1, L2, L3, L4, L5>,\n S extends string,\n L1 extends string = never,\n L2 extends string = never,\n L3 extends string = never,\n L4 extends string = never,\n L5 extends string = never\n>(\n api: ClientApi<V, S, L1, L2, L3, L4, L5>,\n cacheMap: CacheMap<V, S, L1, L2, L3, L4, L5>,\n key: ComKey<S, L1, L2, L3, L4, L5> | PriKey<S>,\n facet: string,\n params: Record<string, string | number | boolean | Date | Array<string | number | boolean | Date>> = {}\n): Promise<[CacheMap<V, S, L1, L2, L3, L4, L5>, any]> => {\n logger.default('facet', { key, facet });\n const ret = await api.facet(key, facet, params);\n return [cacheMap, ret];\n};\n", "import {\n Item,\n LocKeyArray\n} from \"@fjell/core\";\nimport { ClientApi } from \"@fjell/client-api\";\nimport { CacheMap } from \"../CacheMap\";\nimport LibLogger from \"../logger\";\n\nconst logger = LibLogger.get('allFacet');\n\nexport const allFacet = async <\n V extends Item<S, L1, L2, L3, L4, L5>,\n S extends string,\n L1 extends string = never,\n L2 extends string = never,\n L3 extends string = never,\n L4 extends string = never,\n L5 extends string = never\n>(\n api: ClientApi<V, S, L1, L2, L3, L4, L5>,\n cacheMap: CacheMap<V, S, L1, L2, L3, L4, L5>,\n facet: string,\n params: Record<string, string | number | boolean | Date | Array<string | number | boolean | Date>> = {},\n locations: LocKeyArray<L1, L2, L3, L4, L5> | [] = []\n): Promise<[CacheMap<V, S, L1, L2, L3, L4, L5>, any]> => {\n logger.default('allFacet', { facet, params, locations });\n const ret = await api.allFacet(facet, params, locations);\n return [cacheMap, ret];\n};\n", "import {\n Item,\n LocKeyArray,\n validatePK\n} from \"@fjell/core\";\nimport { ClientApi } from \"@fjell/client-api\";\nimport { CacheMap } from \"../CacheMap\";\nimport LibLogger from \"../logger\";\n\nconst logger = LibLogger.get('find');\n\nexport const find = async <\n V extends Item<S, L1, L2, L3, L4, L5>,\n S extends string,\n L1 extends string = never,\n L2 extends string = never,\n L3 extends string = never,\n L4 extends string = never,\n L5 extends string = never\n>(\n api: ClientApi<V, S, L1, L2, L3, L4, L5>,\n cacheMap: CacheMap<V, S, L1, L2, L3, L4, L5>,\n pkType: S,\n finder: string,\n params: Record<string, string | number | boolean | Date | Array<string | number | boolean | Date>> = {},\n locations: LocKeyArray<L1, L2, L3, L4, L5> | [] = []\n): Promise<[CacheMap<V, S, L1, L2, L3, L4, L5>, V[]]> => {\n logger.default('find', { finder, params, locations });\n const ret: V[] = await api.find(finder, params, locations);\n ret.forEach((v) => {\n cacheMap.set(v.key, v);\n });\n return [cacheMap, validatePK(ret, pkType) as V[]];\n};\n", "import {\n Item,\n LocKeyArray,\n validatePK\n} from \"@fjell/core\";\nimport { ClientApi } from \"@fjell/client-api\";\nimport { CacheMap } from \"../CacheMap\";\nimport LibLogger from \"../logger\";\n\nconst logger = LibLogger.get('findOne');\n\nexport const findOne = async <\n V extends Item<S, L1, L2, L3, L4, L5>,\n S extends string,\n L1 extends string = never,\n L2 extends string = never,\n L3 extends string = never,\n L4 extends string = never,\n L5 extends string = never\n>(\n api: ClientApi<V, S, L1, L2, L3, L4, L5>,\n cacheMap: CacheMap<V, S, L1, L2, L3, L4, L5>,\n pkType: S,\n finder: string,\n finderParams: Record<string, string | number | boolean | Date | Array<string | number | boolean | Date>> = {},\n locations: LocKeyArray<L1, L2, L3, L4, L5> | [] = []\n): Promise<[CacheMap<V, S, L1, L2, L3, L4, L5>, V]> => {\n logger.default('findOne', { finder, finderParams, locations });\n const ret = await api.findOne(finder, finderParams, locations);\n cacheMap.set(ret.key, ret);\n return [cacheMap, validatePK(ret, pkType) as V];\n};\n", "import {\n ComKey,\n isItemKeyEqual,\n isValidItemKey,\n Item,\n PriKey,\n validatePK\n} from \"@fjell/core\";\nimport { CacheMap } from \"../CacheMap\";\nimport LibLogger from \"../logger\";\n\nconst logger = LibLogger.get('set');\n\n// Normalize a key value to string for consistent comparison\nconst normalizeKeyValue = (value: string | number): string => {\n return String(value);\n};\n\n// Normalized key comparison function that handles string/number differences\nconst isItemKeyEqualNormalized = <\n S extends string,\n L1 extends string = never,\n L2 extends string = never,\n L3 extends string = never,\n L4 extends string = never,\n L5 extends string = never\n>(a: ComKey<S, L1, L2, L3, L4, L5> | PriKey<S>, b: ComKey<S, L1, L2, L3, L4, L5> | PriKey<S>): boolean => {\n // For now, just normalize the keys to strings and use the original comparison\n const normalizedA = normalizeKey(a);\n const normalizedB = normalizeKey(b);\n return isItemKeyEqual(normalizedA as ComKey<S, L1, L2, L3, L4, L5> | PriKey<S>, normalizedB as ComKey<S, L1, L2, L3, L4, L5> | PriKey<S>);\n};\n\n// Helper function to normalize a key\nconst normalizeKey = (key: any): any => {\n if (typeof key === 'object' && key !== null) {\n const normalizedKey = JSON.parse(JSON.stringify(key));\n\n // Normalize pk values\n if ('pk' in normalizedKey && normalizedKey.pk !== null) {\n normalizedKey.pk = normalizeKeyValue(normalizedKey.pk);\n }\n\n // Normalize lk values\n if ('lk' in normalizedKey && normalizedKey.lk !== null) {\n normalizedKey.lk = normalizeKeyValue(normalizedKey.lk);\n }\n\n // Normalize loc array lk values\n if ('loc' in normalizedKey && Array.isArray(normalizedKey.loc)) {\n normalizedKey.loc = normalizedKey.loc.map((locItem: any) => {\n if (locItem && 'lk' in locItem && locItem.lk !== null) {\n return { ...locItem, lk: normalizeKeyValue(locItem.lk) };\n }\n return locItem;\n });\n }\n\n return normalizedKey;\n }\n return key;\n};\n\nexport const set = async <\n V extends Item<S, L1, L2, L3, L4, L5>,\n S extends string,\n L1 extends string = never,\n L2 extends string = never,\n L3 extends string = never,\n L4 extends string = never,\n L5 extends string = never\n>(\n cacheMap: CacheMap<V, S, L1, L2, L3, L4, L5>,\n pkType: S,\n key: ComKey<S, L1, L2, L3, L4, L5> | PriKey<S>,\n v: Item<S, L1, L2, L3, L4, L5>\n): Promise<[CacheMap<V, S, L1, L2, L3, L4, L5>, V]> => {\n logger.default('set', { key, v });\n\n if (!isValidItemKey(key)) {\n logger.error('Key for Set is not a valid ItemKey: %j', key);\n throw new Error('Key for Set is not a valid ItemKey');\n }\n\n // Validate the item's primary key\n validatePK(v, pkType);\n\n if (!isItemKeyEqualNormalized(key, v.key)) {\n logger.error('Key does not match item key: %j != %j', key, v.key);\n throw new Error('Key does not match item key');\n }\n\n cacheMap.set(key, v as V);\n return [cacheMap, validatePK(v, pkType) as V];\n};\n", "import {\n Item\n} from \"@fjell/core\";\nimport { CacheMap } from \"../CacheMap\";\nimport { Coordinate } from \"@fjell/registry\";\n\nexport const reset = async <\n V extends Item<S, L1, L2, L3, L4, L5>,\n S extends string,\n L1 extends string = never,\n L2 extends string = never,\n L3 extends string = never,\n L4 extends string = never,\n L5 extends string = never\n>(\n coordinate: Coordinate<S, L1, L2, L3, L4, L5>\n): Promise<[CacheMap<V, S, L1, L2, L3, L4, L5>]> => {\n const cacheMap = new CacheMap<V, S, L1, L2, L3, L4, L5>(coordinate.kta);\n return [cacheMap];\n};\n", "import { ComKey, Item, ItemQuery, LocKeyArray, PriKey } from \"@fjell/core\";\nimport { ClientApi } from \"@fjell/client-api\";\nimport { Coordinate } from \"@fjell/registry\";\nimport { CacheMap } from \"./CacheMap\";\n\n// Import all operation functions\nimport { all } from \"./ops/all\";\nimport { one } from \"./ops/one\";\nimport { create } from \"./ops/create\";\nimport { get } from \"./ops/get\";\nimport { retrieve } from \"./ops/retrieve\";\nimport { remove } from \"./ops/remove\";\nimport { update } from \"./ops/update\";\nimport { action } from \"./ops/action\";\nimport { allAction } from \"./ops/allAction\";\nimport { facet } from \"./ops/facet\";\nimport { allFacet } from \"./ops/allFacet\";\nimport { find } from \"./ops/find\";\nimport { findOne } from \"./ops/findOne\";\nimport { set } from \"./ops/set\";\nimport { reset } from \"./ops/reset\";\n\nexport interface Operations<\n V extends Item<S, L1, L2, L3, L4, L5>,\n S extends string,\n L1 extends string = never,\n L2 extends string = never,\n L3 extends string = never,\n L4 extends string = never,\n L5 extends string = never,\n> {\n\n /**\n * Retrieves all the items that match the query from cache or API.\n * Items are cached automatically after retrieval.\n */\n all(\n query?: ItemQuery,\n locations?: LocKeyArray<L1, L2, L3, L4, L5> | []\n ): Promise<[CacheMap<V, S, L1, L2, L3, L4, L5>, V[]]>;\n\n /**\n * Retrieves the first item that matches the query from cache or API.\n * Item is cached automatically after retrieval.\n */\n one(\n query?: ItemQuery,\n locations?: LocKeyArray<L1, L2, L3, L4, L5> | []\n ): Promise<[CacheMap<V, S, L1, L2, L3, L4, L5>, V | null]>;\n\n /**\n * Creates a new item via API and caches it.\n */\n create(\n item: Partial<Item<S, L1, L2, L3, L4, L5>>,\n locations?: LocKeyArray<L1, L2, L3, L4, L5> | []\n ): Promise<[CacheMap<V, S, L1, L2, L3, L4, L5>, V]>;\n\n /**\n * Gets an item by key from cache or API and caches it.\n */\n get(\n key: ComKey<S, L1, L2, L3, L4, L5> | PriKey<S>\n ): Promise<[CacheMap<V, S, L1, L2, L3, L4, L5>, V | null]>;\n\n /**\n * Retrieves an item from cache if available, otherwise from API.\n * Returns null as first element if item was already in cache.\n */\n retrieve(\n key: ComKey<S, L1, L2, L3, L4, L5> | PriKey<S>\n ): Promise<[CacheMap<V, S, L1, L2, L3, L4, L5> | null, V | null]>;\n\n /**\n * Removes an item via API and from cache.\n */\n remove(\n key: ComKey<S, L1, L2, L3, L4, L5> | PriKey<S>\n ): Promise<CacheMap<V, S, L1, L2, L3, L4, L5>>;\n\n /**\n * Updates an item via API and caches the result.\n */\n update(\n key: ComKey<S, L1, L2, L3, L4, L5> | PriKey<S>,\n item: Partial<Item<S, L1, L2, L3, L4, L5>>\n ): Promise<[CacheMap<V, S, L1, L2, L3, L4, L5>, V]>;\n\n /**\n * Executes an action on an item via API and caches the result.\n */\n action(\n key: ComKey<S, L1, L2, L3, L4, L5> | PriKey<S>,\n action: string,\n body?: any\n ): Promise<[CacheMap<V, S, L1, L2, L3, L4, L5>, V]>;\n\n /**\n * Executes an action on all items matching criteria via API and caches results.\n */\n allAction(\n action: string,\n body?: any,\n locations?: LocKeyArray<L1, L2, L3, L4, L5> | []\n ): Promise<[CacheMap<V, S, L1, L2, L3, L4, L5>, V[]]>;\n\n /**\n * Executes a facet query on an item via API (pass-through, no caching).\n */\n facet(\n key: ComKey<S, L1, L2, L3, L4, L5> | PriKey<S>,\n facet: string,\n params?: Record<string, string | number | boolean | Date | Array<string | number | boolean | Date>>\n ): Promise<[CacheMap<V, S, L1, L2, L3, L4, L5>, any]>;\n\n /**\n * Executes a facet query on all items matching criteria via API (pass-through, no caching).\n */\n allFacet(\n facet: string,\n params?: Record<string, string | number | boolean | Date | Array<string | number | boolean | Date>>,\n locations?: LocKeyArray<L1, L2, L3, L4, L5> | []\n ): Promise<[CacheMap<V, S, L1, L2, L3, L4, L5>, any]>;\n\n /**\n * Finds items using a finder method via API and caches results.\n */\n find(\n finder: string,\n params?: Record<string, string | number | boolean | Date | Array<string | number | boolean | Date>>,\n locations?: LocKeyArray<L1, L2, L3, L4, L5> | []\n ): Promise<[CacheMap<V, S, L1, L2, L3, L4, L5>, V[]]>;\n\n /**\n * Finds a single item using a finder method via API and caches result.\n */\n findOne(\n finder: string,\n params?: Record<string, string | number | boolean | Date | Array<string | number | boolean | Date>>,\n locations?: LocKeyArray<L1, L2, L3, L4, L5> | []\n ): Promise<[CacheMap<V, S, L1, L2, L3, L4, L5>, V]>;\n\n /**\n * Sets an item directly in cache without API call.\n */\n set(\n key: ComKey<S, L1, L2, L3, L4, L5> | PriKey<S>,\n item: Item<S, L1, L2, L3, L4, L5>\n ): Promise<[CacheMap<V, S, L1, L2, L3, L4, L5>, V]>;\n\n /**\n * Resets the cache, clearing all cached items.\n */\n reset(): Promise<[CacheMap<V, S, L1, L2, L3, L4, L5>]>;\n}\n\nexport const createOperations = <\n V extends Item<S, L1, L2, L3, L4, L5>,\n S extends string,\n L1 extends string = never,\n L2 extends string = never,\n L3 extends string = never,\n L4 extends string = never,\n L5 extends string = never\n>(\n api: ClientApi<V, S, L1, L2, L3, L4, L5>,\n coordinate: Coordinate<S, L1, L2, L3, L4, L5>,\n cacheMap: CacheMap<V, S, L1, L2, L3, L4, L5>,\n pkType: S\n ): Operations<V, S, L1, L2, L3, L4, L5> => {\n return {\n all: (query, locations) => all(api, cacheMap, pkType, query, locations),\n one: (query, locations) => one(api, cacheMap, pkType, query, locations),\n create: (item, locations) => create(api, cacheMap, pkType, item, locations),\n get: (key) => get(api, cacheMap, pkType, key),\n retrieve: (key) => retrieve(api, cacheMap, pkType, key),\n remove: (key) => remove(api, cacheMap, key),\n update: (key, item) => update(api, cacheMap, pkType, key, item),\n action: (key, actionName, body) => action(api, cacheMap, pkType, key, actionName, body),\n allAction: (actionName, body, locations) => allAction(api, cacheMap, pkType, actionName, body, locations),\n facet: (key, facetName, params) => facet(api, cacheMap, key, facetName, params),\n allFacet: (facetName, params, locations) => allFacet(api, cacheMap, facetName, params, locations),\n find: (finder, params, locations) => find(api, cacheMap, pkType, finder, params, locations),\n findOne: (finder, params, locations) => findOne(api, cacheMap, pkType, finder, params, locations),\n set: (key, item) => set(cacheMap, pkType, key, item),\n reset: () => reset(coordinate)\n };\n};\n", "import { Item } from \"@fjell/core\";\nimport { Instance as BaseInstance, Coordinate, Registry } from \"@fjell/registry\";\nimport { ClientApi } from \"@fjell/client-api\";\nimport { CacheMap } from \"./CacheMap\";\nimport { createOperations, Operations } from \"./Operations\";\nimport LibLogger from \"./logger\";\n\nconst logger = LibLogger.get('Cache');\n\n/**\n * The Cache interface extends the base Instance from @fjell/registry and adds cache operations\n * for interacting with cached data.\n *\n * The interface extends the base Instance (which provides coordinate and registry) with:\n * - api: Provides methods for interacting with server API\n * - cacheMap: Local cache storage for items\n * - operations: All cache operations (get, set, all, etc.) that work with both cache and API\n *\n * @template V - The type of the data model item, extending Item\n * @template S - The string literal type representing the model's key type\n * @template L1-L5 - Optional string literal types for location hierarchy levels\n */\nexport interface Cache<\n V extends Item<S, L1, L2, L3, L4, L5>,\n S extends string,\n L1 extends string = never,\n L2 extends string = never,\n L3 extends string = never,\n L4 extends string = never,\n L5 extends string = never\n> extends BaseInstance<S, L1, L2, L3, L4, L5> {\n /** The API client for interacting with server endpoints */\n api: ClientApi<V, S, L1, L2, L3, L4, L5>;\n\n /** The cache map that stores cached items */\n cacheMap: CacheMap<V, S, L1, L2, L3, L4, L5>;\n\n /** All cache operations that work with both cache and API */\n operations: Operations<V, S, L1, L2, L3, L4, L5>;\n}\n\nexport const createCache = <\n V extends Item<S, L1, L2, L3, L4, L5>,\n S extends string,\n L1 extends string = never,\n L2 extends string = never,\n L3 extends string = never,\n L4 extends string = never,\n L5 extends string = never\n>(\n api: ClientApi<V, S, L1, L2, L3, L4, L5>,\n coordinate: Coordinate<S, L1, L2, L3, L4, L5>,\n registry: Registry\n ): Cache<V, S, L1, L2, L3, L4, L5> => {\n logger.debug('createCache', { coordinate, registry });\n\n // Create the cache map using the coordinate's key type array\n const cacheMap = new CacheMap<V, S, L1, L2, L3, L4, L5>(coordinate.kta);\n\n // Get the primary key type from the coordinate\n const pkType = coordinate.kta[0] as S;\n\n // Create operations\n const operations = createOperations(api, coordinate, cacheMap, pkType);\n\n return {\n coordinate,\n registry,\n api,\n cacheMap,\n operations\n };\n};\n\nexport const isCache = (cache: any): cache is Cache<any, any, any, any, any, any, any> => {\n return cache !== null &&\n typeof cache === 'object' &&\n 'coordinate' in cache &&\n 'registry' in cache &&\n 'api' in cache &&\n 'cacheMap' in cache &&\n 'operations' in cache;\n};\n", "\nimport LibLogger from \"./logger\";\nimport { Item } from \"@fjell/core\";\nimport { Coordinate, Registry } from \"@fjell/registry\";\nimport { ClientApi } from \"@fjell/client-api\";\nimport { Cache, createCache } from \"./Cache\";\n\nconst logger = LibLogger.get(\"Instance\");\n\n/**\n * The Cache Instance interface represents a cache model instance that extends the base Instance\n * from @fjell/registry and adds cache operations for interacting with cached data.\n *\n * This is an alias for the Cache interface since Cache now extends Instance directly.\n *\n * @template V - The type of the data model item, extending Item\n * @template S - The string literal type representing the model's key type\n * @template L1-L5 - Optional string literal types for location hierarchy levels\n */\nexport type Instance<\n V extends Item<S, L1, L2, L3, L4, L5>,\n S extends string,\n L1 extends string = never,\n L2 extends string = never,\n L3 extends string = never,\n L4 extends string = never,\n L5 extends string = never\n> = Cache<V, S, L1, L2, L3, L4, L5>;\n\nexport const createInstance = <\n V extends Item<S, L1, L2, L3, L4, L5>,\n S extends string,\n L1 extends string = never,\n L2 extends string = never,\n L3 extends string = never,\n L4 extends string = never,\n L5 extends string = never\n>(\n registry: Registry,\n coordinate: Coordinate<S, L1, L2, L3, L4, L5>,\n api: ClientApi<V, S, L1, L2, L3, L4, L5>,\n ): Instance<V, S, L1, L2, L3, L4, L5> => {\n logger.debug(\"createInstance\", { coordinate, api, registry });\n return createCache(api, coordinate, registry);\n}\n\nexport const isInstance = (instance: any): instance is Instance<any, any, any, any, any, any, any> => {\n return instance !== null &&\n typeof instance === 'object' &&\n 'coordinate' in instance &&\n 'registry' in instance &&\n 'api' in instance &&\n 'cacheMap' in instance &&\n 'operations' in instance;\n}\n", "import { Item } from \"@fjell/core\";\nimport { ClientApi } from \"@fjell/client-api\";\nimport { InstanceFactory as BaseInstanceFactory, Registry, RegistryHub } from \"@fjell/registry\";\nimport { Instance } from \"./Instance\";\nimport { Coordinate } from \"@fjell/registry\";\nimport { CacheMap } from \"./CacheMap\";\nimport { createOperations } from \"./Operations\";\nimport LibLogger from \"./logger\";\n\nconst logger = LibLogger.get(\"InstanceFactory\");\n\nexport type InstanceFactory<\n V extends Item<S, L1, L2, L3, L4, L5>,\n S extends string,\n L1 extends string = never,\n L2 extends string = never,\n L3 extends string = never,\n L4 extends string = never,\n L5 extends string = never\n> = (\n api: ClientApi<V, S, L1, L2, L3, L4, L5>\n) => BaseInstanceFactory<S, L1, L2, L3, L4, L5>;\n\n/**\n * Factory function for creating cache instances\n */\nexport const createInstanceFactory = <\n V extends Item<S, L1, L2, L3, L4, L5>,\n S extends string,\n L1 extends string = never,\n L2 extends string = never,\n L3 extends string = never,\n L4 extends string = never,\n L5 extends string = never\n>(\n api: ClientApi<V, S, L1, L2, L3, L4, L5>\n ): BaseInstanceFactory<S, L1, L2, L3, L4, L5> => {\n return (coordinate: Coordinate<S, L1, L2, L3, L4, L5>, context: { registry: Registry, registryHub?: RegistryHub }) => {\n logger.debug(\"Creating cache instance\", { coordinate, registry: context.registry, api });\n\n // Since InstanceFactory must be synchronous but our createInstance is async,\n // we need to create a special cache instance synchronously and defer the async initialization\n const cacheMap = new CacheMap<V, S, L1, L2, L3, L4, L5>(coordinate.kta);\n const pkType = coordinate.kta[0] as S;\n const operations = createOperations(api, coordinate, cacheMap, pkType);\n\n return {\n coordinate,\n registry: context.registry,\n api,\n cacheMap,\n operations\n } as Instance<V, S, L1, L2, L3, L4, L5>;\n };\n};\n", "import LibLogger from './logger';\nimport {\n Registry as BaseRegistry,\n createRegistry as createBaseRegistry,\n RegistryFactory,\n RegistryHub\n} from '@fjell/registry';\n\nconst logger = LibLogger.get(\"Registry\");\n\n/**\n * Extended Registry interface for cache-specific functionality\n */\nexport interface Registry extends BaseRegistry {\n type: 'cache';\n}\n\n/**\n * Factory function for creating cache registries\n */\nexport const createRegistryFactory = (): RegistryFactory => {\n return (type: string, registryHub?: RegistryHub): BaseRegistry => {\n if (type !== 'cache') {\n throw new Error(`Cache registry factory can only create 'cache' type registries, got: ${type}`);\n }\n\n logger.debug(\"Creating cache registry\", { type, registryHub });\n\n const baseRegistry = createBaseRegistry(type, registryHub);\n\n // Cast to Registry for type safety\n return baseRegistry as Registry;\n };\n};\n\n/**\n * Creates a new cache registry instance\n */\nexport const createRegistry = (registryHub?: RegistryHub): Registry => {\n const baseRegistry = createBaseRegistry('cache', registryHub);\n\n return {\n ...baseRegistry,\n } as Registry;\n};\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": ["all", "one", "action", "allAction", "allFacet", "facet", "create", "get", "retrieve", "remove", "update", "find", "findOne", "set", "reset", "logger", "ComKey", "logger", "validatePK", "NotFoundError", "logger", "NotFoundError", "validatePK", "validatePK", "logger", "validatePK", "validatePK", "logger", "validatePK", "isValidItemKey", "validatePK", "logger", "isValidItemKey", "validatePK", "isValidItemKey", "logger", "isValidItemKey", "isValidItemKey", "validatePK", "logger", "isValidItemKey", "validatePK", "isValidItemKey", "validatePK", "logger", "action", "isValidItemKey", "validatePK", "validatePK", "NotFoundError", "logger", "action", "NotFoundError", "validatePK", "logger", "facet", "logger", "facet", "validatePK", "logger", "validatePK", "validatePK", "logger", "validatePK", "isValidItemKey", "validatePK", "logger", "normalizeKeyValue", "isValidItemKey", "validatePK", "logger", "logger", "logger", "logger"]
|
|
7
7
|
}
|
package/dist/ops/action.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
import { ComKey, Item, PriKey } from "@fjell/core";
|
|
2
2
|
import { ClientApi } from "@fjell/client-api";
|
|
3
|
-
import { CacheMap } from "
|
|
3
|
+
import { CacheMap } from "../CacheMap";
|
|
4
4
|
export declare const action: <V extends Item<S, L1, L2, L3, L4, L5>, S extends string, L1 extends string = never, L2 extends string = never, L3 extends string = never, L4 extends string = never, L5 extends string = never>(api: ClientApi<V, S, L1, L2, L3, L4, L5>, cacheMap: CacheMap<V, S, L1, L2, L3, L4, L5>, pkType: S, key: ComKey<S, L1, L2, L3, L4, L5> | PriKey<S>, action: string, body?: any) => Promise<[CacheMap<V, S, L1, L2, L3, L4, L5>, V]>;
|
package/dist/ops/all.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
import { Item, ItemQuery, LocKeyArray } from "@fjell/core";
|
|
2
2
|
import { ClientApi } from "@fjell/client-api";
|
|
3
|
-
import { CacheMap } from "
|
|
3
|
+
import { CacheMap } from "../CacheMap";
|
|
4
4
|
export declare const all: <V extends Item<S, L1, L2, L3, L4, L5>, S extends string, L1 extends string = never, L2 extends string = never, L3 extends string = never, L4 extends string = never, L5 extends string = never>(api: ClientApi<V, S, L1, L2, L3, L4, L5>, cacheMap: CacheMap<V, S, L1, L2, L3, L4, L5>, pkType: S, query?: ItemQuery, locations?: LocKeyArray<L1, L2, L3, L4, L5> | []) => Promise<[CacheMap<V, S, L1, L2, L3, L4, L5>, V[]]>;
|
package/dist/ops/allAction.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
import { Item, LocKeyArray } from "@fjell/core";
|
|
2
2
|
import { ClientApi } from "@fjell/client-api";
|
|
3
|
-
import { CacheMap } from "
|
|
3
|
+
import { CacheMap } from "../CacheMap";
|
|
4
4
|
export declare const allAction: <V extends Item<S, L1, L2, L3, L4, L5>, S extends string, L1 extends string = never, L2 extends string = never, L3 extends string = never, L4 extends string = never, L5 extends string = never>(api: ClientApi<V, S, L1, L2, L3, L4, L5>, cacheMap: CacheMap<V, S, L1, L2, L3, L4, L5>, pkType: S, action: string, body?: any, locations?: LocKeyArray<L1, L2, L3, L4, L5> | []) => Promise<[CacheMap<V, S, L1, L2, L3, L4, L5>, V[]]>;
|
package/dist/ops/allFacet.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
import { Item, LocKeyArray } from "@fjell/core";
|
|
2
2
|
import { ClientApi } from "@fjell/client-api";
|
|
3
|
-
import { CacheMap } from "
|
|
3
|
+
import { CacheMap } from "../CacheMap";
|
|
4
4
|
export declare const allFacet: <V extends Item<S, L1, L2, L3, L4, L5>, S extends string, L1 extends string = never, L2 extends string = never, L3 extends string = never, L4 extends string = never, L5 extends string = never>(api: ClientApi<V, S, L1, L2, L3, L4, L5>, cacheMap: CacheMap<V, S, L1, L2, L3, L4, L5>, facet: string, params?: Record<string, string | number | boolean | Date | Array<string | number | boolean | Date>>, locations?: LocKeyArray<L1, L2, L3, L4, L5> | []) => Promise<[CacheMap<V, S, L1, L2, L3, L4, L5>, any]>;
|
package/dist/ops/create.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
import { Item, LocKeyArray } from "@fjell/core";
|
|
2
2
|
import { ClientApi } from "@fjell/client-api";
|
|
3
|
-
import { CacheMap } from "
|
|
3
|
+
import { CacheMap } from "../CacheMap";
|
|
4
4
|
export declare const create: <V extends Item<S, L1, L2, L3, L4, L5>, S extends string, L1 extends string = never, L2 extends string = never, L3 extends string = never, L4 extends string = never, L5 extends string = never>(api: ClientApi<V, S, L1, L2, L3, L4, L5>, cacheMap: CacheMap<V, S, L1, L2, L3, L4, L5>, pkType: S, v: Partial<Item<S, L1, L2, L3, L4, L5>>, locations?: LocKeyArray<L1, L2, L3, L4, L5> | []) => Promise<[CacheMap<V, S, L1, L2, L3, L4, L5>, V]>;
|
package/dist/ops/facet.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
import { ComKey, Item, PriKey } from "@fjell/core";
|
|
2
2
|
import { ClientApi } from "@fjell/client-api";
|
|
3
|
-
import { CacheMap } from "
|
|
3
|
+
import { CacheMap } from "../CacheMap";
|
|
4
4
|
export declare const facet: <V extends Item<S, L1, L2, L3, L4, L5>, S extends string, L1 extends string = never, L2 extends string = never, L3 extends string = never, L4 extends string = never, L5 extends string = never>(api: ClientApi<V, S, L1, L2, L3, L4, L5>, cacheMap: CacheMap<V, S, L1, L2, L3, L4, L5>, key: ComKey<S, L1, L2, L3, L4, L5> | PriKey<S>, facet: string, params?: Record<string, string | number | boolean | Date | Array<string | number | boolean | Date>>) => Promise<[CacheMap<V, S, L1, L2, L3, L4, L5>, any]>;
|
package/dist/ops/find.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
import { Item, LocKeyArray } from "@fjell/core";
|
|
2
2
|
import { ClientApi } from "@fjell/client-api";
|
|
3
|
-
import { CacheMap } from "
|
|
3
|
+
import { CacheMap } from "../CacheMap";
|
|
4
4
|
export declare const find: <V extends Item<S, L1, L2, L3, L4, L5>, S extends string, L1 extends string = never, L2 extends string = never, L3 extends string = never, L4 extends string = never, L5 extends string = never>(api: ClientApi<V, S, L1, L2, L3, L4, L5>, cacheMap: CacheMap<V, S, L1, L2, L3, L4, L5>, pkType: S, finder: string, params?: Record<string, string | number | boolean | Date | Array<string | number | boolean | Date>>, locations?: LocKeyArray<L1, L2, L3, L4, L5> | []) => Promise<[CacheMap<V, S, L1, L2, L3, L4, L5>, V[]]>;
|
package/dist/ops/findOne.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
import { Item, LocKeyArray } from "@fjell/core";
|
|
2
2
|
import { ClientApi } from "@fjell/client-api";
|
|
3
|
-
import { CacheMap } from "
|
|
3
|
+
import { CacheMap } from "../CacheMap";
|
|
4
4
|
export declare const findOne: <V extends Item<S, L1, L2, L3, L4, L5>, S extends string, L1 extends string = never, L2 extends string = never, L3 extends string = never, L4 extends string = never, L5 extends string = never>(api: ClientApi<V, S, L1, L2, L3, L4, L5>, cacheMap: CacheMap<V, S, L1, L2, L3, L4, L5>, pkType: S, finder: string, finderParams?: Record<string, string | number | boolean | Date | Array<string | number | boolean | Date>>, locations?: LocKeyArray<L1, L2, L3, L4, L5> | []) => Promise<[CacheMap<V, S, L1, L2, L3, L4, L5>, V]>;
|
package/dist/ops/get.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
import { ComKey, Item, PriKey } from "@fjell/core";
|
|
2
2
|
import { ClientApi } from "@fjell/client-api";
|
|
3
|
-
import { CacheMap } from "
|
|
3
|
+
import { CacheMap } from "../CacheMap";
|
|
4
4
|
export declare const get: <V extends Item<S, L1, L2, L3, L4, L5>, S extends string, L1 extends string = never, L2 extends string = never, L3 extends string = never, L4 extends string = never, L5 extends string = never>(api: ClientApi<V, S, L1, L2, L3, L4, L5>, cacheMap: CacheMap<V, S, L1, L2, L3, L4, L5>, pkType: S, key: ComKey<S, L1, L2, L3, L4, L5> | PriKey<S>) => Promise<[CacheMap<V, S, L1, L2, L3, L4, L5>, V | null]>;
|
package/dist/ops/one.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
import { Item, ItemQuery, LocKeyArray } from "@fjell/core";
|
|
2
2
|
import { ClientApi } from "@fjell/client-api";
|
|
3
|
-
import { CacheMap } from "
|
|
3
|
+
import { CacheMap } from "../CacheMap";
|
|
4
4
|
export declare const one: <V extends Item<S, L1, L2, L3, L4, L5>, S extends string, L1 extends string = never, L2 extends string = never, L3 extends string = never, L4 extends string = never, L5 extends string = never>(api: ClientApi<V, S, L1, L2, L3, L4, L5>, cacheMap: CacheMap<V, S, L1, L2, L3, L4, L5>, pkType: S, query?: ItemQuery, locations?: LocKeyArray<L1, L2, L3, L4, L5> | []) => Promise<[CacheMap<V, S, L1, L2, L3, L4, L5>, V | null]>;
|
package/dist/ops/remove.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
import { ComKey, Item, PriKey } from "@fjell/core";
|
|
2
2
|
import { ClientApi } from "@fjell/client-api";
|
|
3
|
-
import { CacheMap } from "
|
|
3
|
+
import { CacheMap } from "../CacheMap";
|
|
4
4
|
export declare const remove: <V extends Item<S, L1, L2, L3, L4, L5>, S extends string, L1 extends string = never, L2 extends string = never, L3 extends string = never, L4 extends string = never, L5 extends string = never>(api: ClientApi<V, S, L1, L2, L3, L4, L5>, cacheMap: CacheMap<V, S, L1, L2, L3, L4, L5>, key: ComKey<S, L1, L2, L3, L4, L5> | PriKey<S>) => Promise<CacheMap<V, S, L1, L2, L3, L4, L5>>;
|
package/dist/ops/reset.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
import { Item } from "@fjell/core";
|
|
2
|
-
import { CacheMap } from "
|
|
2
|
+
import { CacheMap } from "../CacheMap";
|
|
3
3
|
import { Coordinate } from "@fjell/registry";
|
|
4
4
|
export declare const reset: <V extends Item<S, L1, L2, L3, L4, L5>, S extends string, L1 extends string = never, L2 extends string = never, L3 extends string = never, L4 extends string = never, L5 extends string = never>(coordinate: Coordinate<S, L1, L2, L3, L4, L5>) => Promise<[CacheMap<V, S, L1, L2, L3, L4, L5>]>;
|
package/dist/ops/retrieve.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
import { ComKey, Item, PriKey } from "@fjell/core";
|
|
2
|
-
import { CacheMap } from "
|
|
2
|
+
import { CacheMap } from "../CacheMap";
|
|
3
3
|
import { ClientApi } from "@fjell/client-api";
|
|
4
4
|
export declare const retrieve: <V extends Item<S, L1, L2, L3, L4, L5>, S extends string, L1 extends string = never, L2 extends string = never, L3 extends string = never, L4 extends string = never, L5 extends string = never>(api: ClientApi<V, S, L1, L2, L3, L4, L5>, cacheMap: CacheMap<V, S, L1, L2, L3, L4, L5>, pkType: S, key: ComKey<S, L1, L2, L3, L4, L5> | PriKey<S>) => Promise<[CacheMap<V, S, L1, L2, L3, L4, L5> | null, V | null]>;
|
package/dist/ops/set.d.ts
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
import { ComKey, Item, PriKey } from "@fjell/core";
|
|
2
|
-
import { CacheMap } from "
|
|
2
|
+
import { CacheMap } from "../CacheMap";
|
|
3
3
|
export declare const set: <V extends Item<S, L1, L2, L3, L4, L5>, S extends string, L1 extends string = never, L2 extends string = never, L3 extends string = never, L4 extends string = never, L5 extends string = never>(cacheMap: CacheMap<V, S, L1, L2, L3, L4, L5>, pkType: S, key: ComKey<S, L1, L2, L3, L4, L5> | PriKey<S>, v: Item<S, L1, L2, L3, L4, L5>) => Promise<[CacheMap<V, S, L1, L2, L3, L4, L5>, V]>;
|
package/dist/ops/update.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
import { ComKey, Item, PriKey } from "@fjell/core";
|
|
2
2
|
import { ClientApi } from "@fjell/client-api";
|
|
3
|
-
import { CacheMap } from "
|
|
3
|
+
import { CacheMap } from "../CacheMap";
|
|
4
4
|
export declare const update: <V extends Item<S, L1, L2, L3, L4, L5>, S extends string, L1 extends string = never, L2 extends string = never, L3 extends string = never, L4 extends string = never, L5 extends string = never>(api: ClientApi<V, S, L1, L2, L3, L4, L5>, cacheMap: CacheMap<V, S, L1, L2, L3, L4, L5>, pkType: S, key: ComKey<S, L1, L2, L3, L4, L5> | PriKey<S>, v: Partial<Item<S, L1, L2, L3, L4, L5>>) => Promise<[CacheMap<V, S, L1, L2, L3, L4, L5>, V]>;
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@fjell/cache",
|
|
3
3
|
"description": "Cache for Fjell",
|
|
4
|
-
"version": "4.6.
|
|
4
|
+
"version": "4.6.21",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"cache",
|
|
7
7
|
"fjell"
|
|
@@ -21,7 +21,7 @@
|
|
|
21
21
|
"build": "npm run lint && tsc --noEmit && node build.js",
|
|
22
22
|
"typecheck": "tsc --noEmit",
|
|
23
23
|
"lint": "eslint . --ext .ts --fix",
|
|
24
|
-
"clean": "
|
|
24
|
+
"clean": "rm -rf dist",
|
|
25
25
|
"test": "npm run lint && vitest run --coverage",
|
|
26
26
|
"prepublishOnly": "npm run clean && npm run build",
|
|
27
27
|
"docs:dev": "cd docs && npm run dev",
|
|
@@ -52,7 +52,6 @@
|
|
|
52
52
|
"esbuild": "^0.25.8",
|
|
53
53
|
"eslint": "^9.32.0",
|
|
54
54
|
"nodemon": "^3.1.10",
|
|
55
|
-
"rimraf": "^6.0.1",
|
|
56
55
|
"ts-node": "^10.9.2",
|
|
57
56
|
"tsc-alias": "^1.8.16",
|
|
58
57
|
"typescript": "^5.8.3",
|