@fjell/core 4.4.3 → 4.4.5
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/.kodrdriv/config.yaml +4 -0
- package/commit.sh +8 -0
- package/dist/cjs/AItemService.js.map +1 -1
- package/dist/cjs/dictionary.js.map +1 -1
- package/dist/cjs/item/IFactory.js.map +1 -1
- package/dist/cjs/item/IQFactory.js.map +1 -1
- package/dist/cjs/item/IQUtils.js.map +1 -1
- package/dist/cjs/item/IUtils.js +44 -52
- package/dist/cjs/item/IUtils.js.map +1 -1
- package/dist/cjs/item/ItemQuery.js.map +1 -1
- package/dist/cjs/key/KUtils.js +8 -8
- package/dist/cjs/key/KUtils.js.map +1 -1
- package/dist/cjs/logger.js.map +1 -1
- package/dist/esm/AItemService.js.map +1 -1
- package/dist/esm/dictionary.js.map +1 -1
- package/dist/esm/item/IFactory.js.map +1 -1
- package/dist/esm/item/IQFactory.js.map +1 -1
- package/dist/esm/item/IQUtils.js.map +1 -1
- package/dist/esm/item/IUtils.js +44 -52
- package/dist/esm/item/IUtils.js.map +1 -1
- package/dist/esm/item/ItemQuery.js.map +1 -1
- package/dist/esm/key/KUtils.js +8 -8
- package/dist/esm/key/KUtils.js.map +1 -1
- package/dist/esm/logger.js.map +1 -1
- package/dist/index.cjs +52 -60
- package/dist/index.cjs.map +1 -1
- package/dist/item/IUtils.d.ts +7 -3
- package/dist/items.d.ts +18 -10
- package/dist/key/KUtils.d.ts +8 -8
- package/package.json +12 -12
- package/src/item/IUtils.ts +67 -55
- package/src/items.ts +35 -26
- package/src/key/KUtils.ts +13 -13
- package/vitest.config.ts +1 -1
package/dist/index.cjs
CHANGED
|
@@ -260,10 +260,10 @@ const primaryType = (ik)=>{
|
|
|
260
260
|
}
|
|
261
261
|
};
|
|
262
262
|
/**
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
263
|
+
*
|
|
264
|
+
* @param ik ItemKey to be used as a basis for a location
|
|
265
|
+
* @returns
|
|
266
|
+
*/ const itemKeyToLocKeyArray = (ik)=>{
|
|
267
267
|
logger$2.trace('itemKeyToLocKeyArray', {
|
|
268
268
|
ik: abbrevIK(ik)
|
|
269
269
|
});
|
|
@@ -294,10 +294,10 @@ const primaryType = (ik)=>{
|
|
|
294
294
|
};
|
|
295
295
|
const ikToLKA = itemKeyToLocKeyArray;
|
|
296
296
|
/**
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
297
|
+
* Sometimes you need to take a location key array and convert it to the item key that points to the containing item.
|
|
298
|
+
* @param lka A location key array
|
|
299
|
+
* @returns An item key corresponding to the containing item this location refers to.
|
|
300
|
+
*/ const locKeyArrayToItemKey = (lka)=>{
|
|
301
301
|
logger$2.trace('locKeyArrayToItemKey', {
|
|
302
302
|
lka: abbrevLKA(lka)
|
|
303
303
|
});
|
|
@@ -906,75 +906,67 @@ const abbrevCondition = (condition)=>{
|
|
|
906
906
|
};
|
|
907
907
|
|
|
908
908
|
const logger = LibLogger.get('IUtils');
|
|
909
|
+
const validatePKForItem = (item, pkType)=>{
|
|
910
|
+
if (!item) {
|
|
911
|
+
logger.error('Validating PK, Item is undefined', {
|
|
912
|
+
item
|
|
913
|
+
});
|
|
914
|
+
throw new Error('Validating PK, Item is undefined');
|
|
915
|
+
}
|
|
916
|
+
if (!item.key) {
|
|
917
|
+
logger.error('Validating PK, Item does not have a key', {
|
|
918
|
+
item
|
|
919
|
+
});
|
|
920
|
+
throw new Error('Validating PK, Item does not have a key');
|
|
921
|
+
}
|
|
922
|
+
const keyTypeArray = toKeyTypeArray(item.key);
|
|
923
|
+
if (keyTypeArray[0] !== pkType) {
|
|
924
|
+
logger.error('Key Type Array Mismatch', {
|
|
925
|
+
keyTypeArray,
|
|
926
|
+
pkType
|
|
927
|
+
});
|
|
928
|
+
throw new Error(`Item does not have the correct primary key type. Expected ${pkType}, got ${keyTypeArray[0]}`);
|
|
929
|
+
}
|
|
930
|
+
return item;
|
|
931
|
+
};
|
|
909
932
|
const validatePK = (input, pkType)=>{
|
|
910
933
|
logger.trace('Checking Return Type', {
|
|
911
934
|
input
|
|
912
935
|
});
|
|
913
936
|
if (Array.isArray(input)) {
|
|
914
|
-
|
|
915
|
-
return itemArray.map((item)=>validatePK(item, pkType));
|
|
916
|
-
} else {
|
|
917
|
-
const item = input;
|
|
918
|
-
if (item) {
|
|
919
|
-
if (item.key) {
|
|
920
|
-
const keyTypeArray = toKeyTypeArray(item.key);
|
|
921
|
-
const match = keyTypeArray[0] === pkType;
|
|
922
|
-
if (!match) {
|
|
923
|
-
logger.error('Key Type Array Mismatch', {
|
|
924
|
-
keyTypeArray,
|
|
925
|
-
pkType
|
|
926
|
-
});
|
|
927
|
-
throw new Error('Item does not have the correct primary key type');
|
|
928
|
-
} else {
|
|
929
|
-
return item;
|
|
930
|
-
}
|
|
931
|
-
} else {
|
|
932
|
-
logger.error('Validating PK, Item does not have a key', {
|
|
933
|
-
item
|
|
934
|
-
});
|
|
935
|
-
throw new Error('Validating PK, Item does not have a key');
|
|
936
|
-
}
|
|
937
|
-
} else {
|
|
938
|
-
logger.error('Validating PK, Item is undefined', {
|
|
939
|
-
item
|
|
940
|
-
});
|
|
941
|
-
throw new Error('Validating PK, Item is undefined');
|
|
942
|
-
}
|
|
937
|
+
return input.map((item)=>validatePKForItem(item, pkType));
|
|
943
938
|
}
|
|
939
|
+
return validatePKForItem(input, pkType);
|
|
944
940
|
};
|
|
945
941
|
const validateKeys = (item, keyTypes)=>{
|
|
946
942
|
logger.trace('Checking Return Type', {
|
|
947
943
|
item
|
|
948
944
|
});
|
|
949
|
-
if (item) {
|
|
950
|
-
if (item.key) {
|
|
951
|
-
const keyTypeArray = toKeyTypeArray(item.key);
|
|
952
|
-
if (keyTypeArray.length !== keyTypes.length) {
|
|
953
|
-
throw new Error('Item does not have the correct number of keys');
|
|
954
|
-
} else {
|
|
955
|
-
const match = JSON.stringify(keyTypeArray) === JSON.stringify(keyTypes);
|
|
956
|
-
if (!match) {
|
|
957
|
-
logger.error('Key Type Array Mismatch', {
|
|
958
|
-
keyTypeArray,
|
|
959
|
-
thisKeyTypes: keyTypes
|
|
960
|
-
});
|
|
961
|
-
throw new Error('Item does not have the correct key types');
|
|
962
|
-
} else {
|
|
963
|
-
return item;
|
|
964
|
-
}
|
|
965
|
-
}
|
|
966
|
-
} else {
|
|
967
|
-
throw new Error('validating keys, item does not have a key: ' + JSON.stringify(item));
|
|
968
|
-
}
|
|
969
|
-
} else {
|
|
945
|
+
if (!item) {
|
|
970
946
|
throw new Error('validating keys, item is undefined');
|
|
971
947
|
}
|
|
948
|
+
if (!item.key) {
|
|
949
|
+
throw new Error('validating keys, item does not have a key: ' + JSON.stringify(item));
|
|
950
|
+
}
|
|
951
|
+
const keyTypeArray = toKeyTypeArray(item.key);
|
|
952
|
+
if (keyTypeArray.length !== keyTypes.length) {
|
|
953
|
+
throw new Error(`Item does not have the correct number of keys. Expected ${keyTypes.length}, but got ${keyTypeArray.length}`);
|
|
954
|
+
}
|
|
955
|
+
const match = JSON.stringify(keyTypeArray) === JSON.stringify(keyTypes);
|
|
956
|
+
if (!match) {
|
|
957
|
+
logger.error('Key Type Array Mismatch', {
|
|
958
|
+
keyTypeArray,
|
|
959
|
+
thisKeyTypes: keyTypes
|
|
960
|
+
});
|
|
961
|
+
throw new Error(`Item does not have the correct key types. Expected [${keyTypes.join(', ')}], but got [${keyTypeArray.join(', ')}]`);
|
|
962
|
+
}
|
|
963
|
+
return item;
|
|
972
964
|
};
|
|
973
965
|
const isPriItem = (item)=>{
|
|
974
|
-
return item && item.key
|
|
966
|
+
return !!(item && item.key && isPriKey(item.key));
|
|
975
967
|
};
|
|
976
968
|
const isComItem = (item)=>{
|
|
977
|
-
return item && item.key
|
|
969
|
+
return !!(item && item.key && isComKey(item.key));
|
|
978
970
|
};
|
|
979
971
|
|
|
980
972
|
exports.AItemService = AItemService;
|
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.cjs","sources":["../src/logger.ts","../src/dictionary.ts","../src/key/KUtils.ts","../src/item/IFactory.ts","../src/AItemService.ts","../src/item/ItemQuery.ts","../src/item/IQFactory.ts","../src/item/IQUtils.ts","../src/item/IUtils.ts"],"sourcesContent":["import Logging from '@fjell/logging';\n\nconst LibLogger = Logging.getLogger('@fjell/core');\n\nexport default LibLogger;\n","import LibLogger from \"./logger\";\n\nconst logger = LibLogger.get(\"Dictionary\");\n\nexport class Dictionary<T, V> {\n protected map: { [key: string]: V } = {}\n protected hashFunction = (key: T) => JSON.stringify(key);\n\n constructor(map?: { [key: string]: V }, hashFunction?: (key: T) => string) {\n if (map) {\n this.map = map\n }\n if (hashFunction) {\n this.hashFunction = hashFunction\n }\n }\n\n public set(key: T, item: V): void {\n logger.trace('set', { key, item });\n const hashedKey = this.hashFunction(key)\n this.map[hashedKey] = item\n }\n\n public get(key: T): V | null {\n logger.trace('get', { key });\n const hashedKey = this.hashFunction(key)\n return this.map[hashedKey] || null\n }\n\n public delete(key: T): void {\n logger.trace('delete', { key });\n const hashedKey = this.hashFunction(key)\n delete this.map[hashedKey]\n }\n\n public keys(): T[] {\n return Object.keys(this.map).map(key => JSON.parse(key))\n }\n\n public values(): V[] {\n return Object.values(this.map)\n }\n\n public includesKey(key: T): boolean {\n return Object.keys(this.map).includes(this.hashFunction(key))\n }\n\n public clone(): Dictionary<T, V> {\n const clonedMap = Object.assign({}, this.map);\n\n const clone = new Dictionary<T, V>(clonedMap, this.hashFunction)\n return clone;\n }\n}","/* eslint-disable no-undefined */\nimport {\n ComKey,\n LocKey,\n LocKeyArray,\n PriKey,\n UUID\n} from \"@/keys\";\n\nimport LibLogger from \"@/logger\";\n\nconst logger = LibLogger.get('KUtils');\n\nexport const isItemKeyEqual = <\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 logger.trace('isKeyEqual', { a, b });\n if (isComKey(a) && isComKey(b)) {\n return isComKeyEqual(a as ComKey<S, L1, L2, L3, L4, L5>, b as ComKey<S, L1, L2, L3, L4, L5>);\n } else if (isPriKey(a) && isPriKey(b)) {\n if(isComKey(a) || isComKey(b)) {\n return false;\n } else {\n return isPriKeyEqual(a as PriKey<S>, b as PriKey<S>);\n }\n } else {\n return false;\n }\n}\n\nexport const isPriKeyEqual = <\n S extends string,\n>(a: PriKey<S>, b: PriKey<S>): boolean => {\n logger.trace('isPriKeyEqual', { a, b });\n return a && b && a.pk === b.pk && a.kt === b.kt;\n}\n\nexport const isLocKeyEqual = <\n L1 extends string,\n L2 extends string = never,\n L3 extends string = never,\n L4 extends string = never,\n L5 extends string = never\n>(a: LocKey<L1 | L2 | L3 | L4 | L5>, b: LocKey<L1 | L2 | L3 | L4 | L5>): boolean => {\n logger.trace('isLocKeyEqual', { a, b });\n return a && b && a.lk === b.lk && a.kt === b.kt;\n}\n\nexport const isComKeyEqual = <\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>, b: ComKey<S, L1, L2, L3, L4, L5>): boolean => {\n logger.trace('isComKeyEqual', { a, b });\n if (a && b && isPriKeyEqual({ kt: a.kt, pk: a.pk } as PriKey<S>, { kt: b.kt, pk: b.pk } as PriKey<S>)) {\n if (a.loc.length === b.loc.length) {\n for (let i = 0; i < a.loc.length; i++) {\n if (!isLocKeyEqual<L1, L2, L3, L4, L5>(a.loc[i], b.loc[i])) {\n return false;\n }\n }\n return true;\n } else {\n return false;\n }\n } else {\n return false;\n }\n}\n\nexport const isItemKey = (key: any): boolean => {\n logger.trace('isItemKey', { key });\n return key !== undefined && (isComKey(key) || isPriKey(key));\n}\n\nexport const isComKey = (key: any): boolean => {\n logger.trace('isComKey', { key });\n return key !== undefined &&\n (key.pk !== undefined && key.kt !== undefined) && (key.loc !== undefined && key.loc.length > 0);\n}\n\nexport const isPriKey = (key: any): boolean => {\n logger.trace('isPriKey', { key });\n return key !== undefined &&\n (key.pk !== undefined && key.kt !== undefined) && (key.loc === undefined || key.loc.length === 0);\n}\n\nexport const isLocKey = (key: any): boolean => {\n logger.trace('isLocKey', { key });\n return key !== undefined && (key.lk !== undefined && key.kt !== undefined);\n}\n\nexport const generateKeyArray = <\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>(key: ComKey<S, L1, L2, L3, L4, L5> | PriKey<S> | LocKeyArray<L1, L2, L3, L4, L5> | []):\n Array<PriKey<S> | LocKey<L1 | L2 | L3 | L4 | L5>> => {\n logger.trace('generateKeyArray', { key });\n const keys: Array<PriKey<S> | LocKey<L1 | L2 | L3 | L4 | L5>> = [];\n\n if (isComKey(key) || isPriKey(key)) {\n // console.log('it is an item key');\n if (isComKey(key)) {\n // console.log('it is a composite key');\n const comKey = key as ComKey<S, L1, L2, L3, L4, L5>;\n keys.push({ pk: comKey.pk, kt: comKey.kt });\n for (let i = 0; i < comKey.loc.length; i++) {\n keys.push(comKey.loc[i]);\n }\n } else {\n keys.push(key as PriKey<S>);\n }\n } else {\n // console.log('is is an array, length: ' + key.length);\n const locKeys = key as LocKey<L1 | L2 | L3 | L4 | L5>[];\n for (let i = 0; i < locKeys.length; i++) {\n // console.log('Pushing a key');\n keys.push(locKeys[i]);\n }\n }\n return keys;\n}\n\n// TODO: Exactly the same as in ContainedItemLib\nexport const constructPriKey = <S extends string>(\n pk: string | PriKey<S>,\n kt: S,\n) => {\n logger.trace('constructPriKey', { pk, kt });\n let pri: PriKey<S>;\n if (typeof pk === 'string') {\n pri = { kt: kt as S, pk: pk as UUID };\n } else {\n pri = pk;\n }\n return pri;\n}\n\n// TODO: Exactly the same as in ContainedItemLib\nexport const cPK = constructPriKey;\n\nexport const toKeyTypeArray = <\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>(ik: PriKey<S> | ComKey<S, L1, L2, L3, L4, L5>):\n string[] => {\n logger.trace('toKeyTypeArray', { ik });\n if (isComKey(ik)) {\n const ck = ik as ComKey<S, L1, L2, L3, L4, L5>;\n return [ck.kt, ...ck.loc.map((l : LocKey<L1 | L2 | L3 | L4 | L5>) => l.kt)];\n } else {\n return [(ik as PriKey<S>).kt];\n }\n}\n\nexport const abbrevIK = <\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>(ik: ComKey<S, L1, L2, L3, L4, L5> | PriKey<S>): string => {\n logger.trace('abbrevIK', { ik });\n if(ik) {\n if (isComKey(ik)) {\n const ck = ik as ComKey<S, L1, L2, L3, L4, L5>;\n return `${ck.kt}:${ck.pk}:${ck.loc.map((l : LocKey<L1 | L2 | L3 | L4 | L5>) => `${l.kt}:${l.lk}`).join(',')}`;\n } else {\n return `${(ik as PriKey<S>).kt}:${(ik as PriKey<S>).pk}`;\n }\n } else {\n return 'null IK';\n }\n}\n\nexport const abbrevLKA = <\n L1 extends string,\n L2 extends string = never,\n L3 extends string = never,\n L4 extends string = never,\n L5 extends string = never\n>(keyArray: Array<LocKey<L1 | L2 | L3 | L4 | L5>> | null): string => {\n logger.trace('abbrevLKA', { keyArray });\n if (keyArray === undefined || keyArray === null) {\n return 'null LKA';\n } else {\n return keyArray.map(key => {\n if (key) {\n return `${key.kt}:${key.lk}`;\n } else {\n return key;\n }\n }).join(',');\n }\n}\n\nexport const primaryType = <\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>(ik: ComKey<S, L1, L2, L3, L4, L5> | PriKey<S>): string => {\n logger.trace('primaryType', { ik });\n if (isComKey(ik)) {\n return (ik as ComKey<S, L1, L2, L3, L4, L5>).kt;\n } else {\n return (ik as PriKey<S>).kt;\n }\n}\n\n/**\n *\n * @param ik ItemKey to be used as a basis for a location\n * @returns\n */\nexport const itemKeyToLocKeyArray =\n <\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 >(ik: PriKey<S> | ComKey<S, L1, L2, L3, L4, L5>): LocKeyArray<S, L1, L2, L3, L4> => {\n logger.trace('itemKeyToLocKeyArray', { ik: abbrevIK(ik) });\n let lka: Array<LocKey<L1 | L2 | L3 | L4 | L5>> = [];\n if (isComKey(ik)) {\n const ck = ik as ComKey<S, L1, L2, L3, L4, L5>;\n lka = [{ kt: ck.kt, lk: ck.pk } as unknown as LocKey<L1 | L2 | L3 | L4 | L5>, ...ck.loc];\n } else {\n const pk = ik as PriKey<S>;\n lka = [{ kt: pk.kt, lk: pk.pk } as unknown as LocKey<L1 | L2 | L3 | L4 | L5>];\n }\n logger.trace('itemKeyToLocKeyArray Results', { ik: abbrevIK(ik), lka: abbrevLKA(lka) });\n return lka as LocKeyArray<S, L1, L2, L3, L4>;\n }\n\nexport const ikToLKA = itemKeyToLocKeyArray;\n\n/**\n * Sometimes you need to take a location key array and convert it to the item key that points to the containing item.\n * @param lka A location key array\n * @returns An item key corresponding to the containing item this location refers to.\n */\nexport const locKeyArrayToItemKey =\n <\n L1 extends string,\n L2 extends string = never,\n L3 extends string = never,\n L4 extends string = never,\n L5 extends string = never\n >(lka: LocKeyArray<L1, L2, L3, L4, L5>):\n PriKey<L1> | ComKey<L1, L2, L3, L4, L5> => {\n logger.trace('locKeyArrayToItemKey', { lka: abbrevLKA(lka as Array<LocKey<L1 | L2 | L3 | L4 | L5>>) });\n\n if(lka && lka.length === 1) {\n const priKey = cPK(lka[0].lk, lka[0].kt);\n return priKey as PriKey<L1>;\n } else if (lka && lka.length > 1 && lka[0] !== undefined) {\n const locs = lka.slice(1);\n const priKey = cPK(lka[0].lk, lka[0].kt);\n const comKey = { kt: priKey.kt, pk: priKey.pk, loc: locs as unknown as LocKeyArray<L2, L3, L4, L5> };\n return comKey as ComKey<L1, L2, L3, L4, L5>;\n } else {\n throw new Error('locKeyArrayToItemKey: lka is undefined or empty');\n }\n }\n\n// TODO: This is annoying that we have to check for '' and 'null'\nexport const isValidPriKey = <S extends string>(key: PriKey<S>): boolean => {\n const valid = (key !== undefined && key !== null)\n && (key.pk !== undefined && key.pk !== null && key.pk !== '' && key.pk !== 'null')\n && (key.kt !== undefined && key.kt !== null && key.kt !== '' && key.kt !== 'null');\n return valid;\n}\n\n// TODO: This is annoying that we have to check for '' and 'null'\nexport const isValidLocKey = <\n L1 extends string,\n L2 extends string = never,\n L3 extends string = never,\n L4 extends string = never,\n L5 extends string = never\n>(key: LocKey<L1 | L2 | L3 | L4 | L5>): boolean => {\n const valid = (key !== undefined && key !== null)\n && (key.lk !== undefined && key.lk !== null && key.lk !== '' && key.lk !== 'null')\n && (key.kt !== undefined && key.kt !== null && key.kt !== '' && key.kt !== 'null');\n return valid;\n}\n\nexport const isValidLocKeyArray = <\n L1 extends string,\n L2 extends string = never,\n L3 extends string = never,\n L4 extends string = never,\n L5 extends string = never\n>(keyArray: Array<LocKey<L1 | L2 | L3 | L4 | L5>>): boolean => {\n return (keyArray !== undefined && keyArray !== null) && keyArray.every(isValidLocKey);\n}\n\nexport const isValidComKey = <\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>(key: ComKey<S, L1, L2, L3, L4, L5>): boolean => {\n return (key !== undefined\n && key !== null) && isValidPriKey(key) && isValidLocKeyArray(key.loc as Array<LocKey<L1 | L2 | L3 | L4 | L5>>);\n}\n\nexport const isValidItemKey = <\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>(key: ComKey<S, L1, L2, L3, L4, L5> | PriKey<S>): boolean => {\n return (isComKey(key) &&\n isValidComKey(key as ComKey<S, L1, L2, L3, L4, L5>)) || (isPriKey(key) && isValidPriKey(key as PriKey<S>));\n}\n\nexport const lkaToIK = locKeyArrayToItemKey;\n","import deepmerge from 'deepmerge';\nimport { Item } from '@/items';\nimport { primaryType } from '@/key/KUtils';\nimport { ComKey, PriKey } from '@/keys';\n\nexport class IFactory<\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 private item: any = {\n };\n\n public constructor(props: Record<string, any> = {}) {\n this.item = deepmerge(this.item, props);\n }\n\n public addRef(i: Item<any, any|never, any|never, any|never, any|never, any|never>, name?: string) {\n const ik: ComKey<any, any|never, any|never, any|never, any|never, any|never> | PriKey<any> = i.key;\n\n const refName = name || primaryType(ik);\n if (!this.item.refs) {\n this.item.refs = {};\n }\n this.item.refs[refName] = ik;\n return this;\n }\n\n public static addRef<\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 >(i: V, name?: string) {\n return new IFactory<V, S, L1, L2, L3, L4, L5>().addRef(i, name);\n }\n\n public addDefaultEvents() {\n if (!this.item.events) {\n this.item.events = {};\n }\n const now = new Date();\n if (!this.item.events.created) {\n this.item.events.created = { at: now };\n }\n if (!this.item.events.updated) {\n this.item.events.updated = { at: now };\n }\n if (!this.item.events.deleted) {\n this.item.events.deleted = { at: null };\n }\n return this;\n }\n\n public addEvent(\n name: string,\n at: Date | null,\n by?: ComKey<any, any|never, any|never, any|never, any|never, any|never> | PriKey<any>\n ) {\n if (!this.item.events) {\n this.item.events = {};\n }\n this.item.events[name] = { at, by };\n return this;\n }\n\n public static addEvent<\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 >(name: string, at: Date | null, by?: ComKey<S, L1, L2, L3, L4, L5> | PriKey<S>) {\n return new IFactory<V, S, L1, L2, L3, L4, L5>().addEvent(name, at, by);\n }\n\n public addProp(name: string, value: string | number | boolean | Date) {\n this.item[name] = value;\n return this;\n }\n\n public static addProp<\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 >(name: string, value: string | number | boolean | Date) {\n return new IFactory<V, S, L1, L2, L3, L4, L5>().addProp(name, value);\n }\n\n public addProps(props: Record<string, any>) {\n this.item = deepmerge(this.item, props);\n return this;\n }\n\n public static addProps<\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 >(props: Record<string, any>) {\n return new IFactory<V, S, L1, L2, L3, L4, L5>().addProps(props);\n }\n\n toItem(): V {\n return this.item as V;\n }\n}","import { AllItemTypeArrays } from \"./keys\";\n\nexport class AItemService<\n S extends string,\n L1 extends string,\n L2 extends string = never,\n L3 extends string = never,\n L4 extends string = never,\n L5 extends string = never\n> {\n\n private pkType: S;\n private parentService: AItemService<L1, L2, L3, L4, L5, never> | null = null;\n\n constructor(\n pkType: S,\n parentService?: AItemService<L1, L2, L3, L4, L5, never>,\n ) {\n this.pkType = pkType;\n if (parentService) {\n this.parentService = parentService;\n }\n }\n\n public getPkType = (): S => {\n return this.pkType;\n }\n\n public getKeyTypes = (): AllItemTypeArrays<S, L1, L2, L3, L4, L5> => {\n let keyTypes: readonly string[] = [this.getPkType()];\n\n if (this.parentService) {\n keyTypes = keyTypes.concat(this.parentService.getKeyTypes());\n }\n return keyTypes as AllItemTypeArrays<S, L1, L2, L3, L4, L5>;\n }\n\n}\n","import { References } from '@/items';\n\nexport type QueryParams = Record<string, string | number | boolean | Date>;\n\n/**\n * The operator for a condition. This is the same as the operators used in the Firestore query language.\n */\nexport type ConditionOperator =\n '==' | '!=' | '>' | '>=' | '<' | '<=' | 'in' | 'not-in' | 'array-contains' | 'array-contains-any';\n\n/**\n * A single property condition is defined with a column, value, and operator.\n * This is a condition that is used in a query.\n */\nexport type Condition = {\n column: string,\n value: string[] | string | number[] | number | boolean | Date,\n operator: ConditionOperator,\n};\n\n/**\n * When applying a compound condition, the CompoundType defines the type of compound condition.\n */\nexport type CompoundType = 'AND' | 'OR';\n\n/**\n * When configuring a CompoundCondition this can contain a collection of conditions\n * that will be applied to the query. By default, this is an AND conditiion that is associated\n * with an array of Condition objects OR an array of CompoundCondition objects.\n *\n * For example, I could have { compoundType: 'AND', conditions: [{column: 'name', value: 'test', operator: '=='},\n * {column: 'age', value: 21, operator: '>='}]} which would filter the query to only include items\n * where the name is 'test' and the age is greater than or equal to 21.\n *\n * Or, I could have a { compoundType: 'OR', conditions: [{column: 'name', value: 'test', operator: '=='},\n * {column: 'age', value: 21, operator: '>='}]} which would filter the query to only include items\n * where the name is 'test' OR the age is greater than or equal to 21.\n *\n * I could also nest an OR within an AND, like this:\n * ['AND', [{column: 'name', value: 'test', operator: '=='},\n * { compoundType: 'OR', conditions: [{column: 'age', value: 21, operator: '<='},\n * {column: 'age', value: 52, operator: '>='}]}]] which would filter the query to only include items where the\n * name is 'test' and the age is less than or equal to 21 or greater than or equal to 52.\n */\nexport type CompoundCondition = {\n compoundType: CompoundType,\n conditions: Array<Condition | CompoundCondition>\n};\n\nexport const isCondition = (condition: any): condition is Condition => {\n return (\n typeof condition.column === 'string' &&\n (Array.isArray(condition.value) && condition.value.every((item: any) => typeof item === 'string')) ||\n (Array.isArray(condition.value) && condition.value.every((item: any) => typeof item === 'number')) ||\n typeof condition.value === 'string' ||\n typeof condition.value === 'number' ||\n typeof condition.value === 'boolean' ||\n condition.value instanceof Date\n ) && (condition.operator ? typeof condition.operator === 'string' : true);\n}\n\nexport type EventQuery = {\n start?: Date,\n end?: Date,\n by?: string,\n}\n\nexport type OrderDirection = 'asc' | 'desc';\n\nexport type OrderBy = {\n field: string;\n direction: OrderDirection;\n}\n\nexport type ItemQuery = {\n refs?: References;\n compoundCondition?: CompoundCondition;\n limit?: number;\n offset?: number;\n aggs?: Record<\n string,\n ItemQuery\n >;\n events?: Record<string, EventQuery>;\n orderBy?: OrderBy[];\n};\n\n","import { cPK } from '@/key/KUtils';\nimport {\n CompoundType,\n Condition,\n ConditionOperator,\n EventQuery,\n isCondition,\n ItemQuery,\n OrderDirection\n} from \"./ItemQuery\";\n\nexport class IQFactory {\n\n private query: ItemQuery = {};\n\n public constructor(query: ItemQuery = {}) {\n this.query = query;\n }\n\n public orderBy(field: string, direction: OrderDirection = 'asc') {\n if (!this.query.orderBy) {\n this.query.orderBy = [];\n }\n this.query.orderBy.push({ field, direction });\n return this;\n }\n\n public agg(name: string, query: ItemQuery) {\n if (!this.query.aggs) {\n this.query.aggs = {};\n }\n this.query.aggs[name] = query;\n return this;\n }\n\n public event(name: string, query: EventQuery) {\n if (!this.query.events) {\n this.query.events = {};\n }\n this.query.events[name] = query;\n return this;\n }\n\n public conditions(conditions: Condition[], compoundType: CompoundType = 'AND') {\n for (const condition of conditions) {\n if (!isCondition(condition)) {\n throw new Error(`Invalid condition: ${JSON.stringify(condition)}`);\n }\n }\n if (!this.query.compoundCondition) {\n // If there is no top-level compound condition, create one\n // with the given compound type. This will mostly likely be the most common case.\n this.query.compoundCondition = {\n compoundType,\n conditions: conditions,\n };\n } else {\n // If there is already a top-level compound condition, create a new compound condition\n // and add it to the conditions array of the top-level compound condition.\n const compoundCondition = {\n compoundType,\n conditions,\n };\n this.query.compoundCondition.conditions.push(compoundCondition);\n }\n return this;\n }\n\n public limit(limit: number) {\n this.query.limit = limit;\n return this;\n }\n\n public offset(offset: number) {\n this.query.offset = offset;\n return this;\n }\n\n // TODO: right now, we're only supporting PK refs for queries. Should add support for CKs\n public pk(kt: string, pk: string, name?: string) {\n if (!this.query.refs) {\n this.query.refs = {};\n }\n const refName = name || kt;\n this.query.refs[refName] = cPK<string>(pk, kt);\n return this;\n }\n\n public condition(\n column: string,\n value: string[] | string | number[] | number | boolean | Date,\n operator: ConditionOperator = '==',\n ) {\n const condition: Condition = { column, value, operator };\n if (isCondition(condition)) {\n if (!this.query.compoundCondition) {\n // If there is no top-level compound condition, create one\n // with the default compound type of 'AND'.\n this.query.compoundCondition = {\n compoundType: 'AND',\n conditions: [],\n };\n }\n this.query.compoundCondition.conditions.push(condition);\n return this;\n } else {\n throw new Error(`Invalid condition: ${JSON.stringify(condition)}`);\n }\n }\n\n public static all() {\n const iqFactory = new IQFactory();\n return iqFactory;\n }\n\n public static orderBy(field: string, direction: OrderDirection = 'asc') {\n const iqFactory = new IQFactory();\n return iqFactory.orderBy(field, direction);\n }\n\n public static agg(name: string, query: ItemQuery) {\n const iqFactory = new IQFactory();\n return iqFactory.agg(name, query);\n }\n\n public static event(name: string, query: EventQuery) {\n const iqFactory = new IQFactory();\n return iqFactory.event(name, query);\n }\n\n public static limit(limit: number) {\n const iqFactory = new IQFactory();\n return iqFactory.limit(limit);\n }\n\n public static offset(offset: number) {\n const iqFactory = new IQFactory();\n return iqFactory.offset(offset);\n }\n\n public static pk(kt: string, pk: string, name?: string) {\n const iqFactory = new IQFactory();\n return iqFactory.pk(kt, pk, name);\n }\n\n public static condition(\n column: string,\n value: string[] | string | number[] | number | boolean | Date,\n operator: ConditionOperator = '=='\n ) {\n const iqFactory = new IQFactory();\n return iqFactory.condition(column, value, operator);\n }\n\n public static conditions(conditions: Condition[], compoundType: CompoundType = 'AND') {\n const iqFactory = new IQFactory();\n return iqFactory.conditions(conditions, compoundType);\n }\n\n toQuery() {\n return this.query;\n }\n}","import { Item, ReferenceItem, References } from \"@/items\";\nimport { isItemKeyEqual, isPriKey } from \"@/key/KUtils\";\nimport { ComKey, PriKey } from \"@/keys\";\nimport LibLogger from \"@/logger\";\nimport { DateTime } from \"luxon\";\nimport { CompoundCondition, Condition, EventQuery, isCondition, ItemQuery, QueryParams } from \"./ItemQuery\";\n\nconst logger = LibLogger.get('IQUtils');\n\n/**\n * When we query or search, we're sending a GET request. This converts everything in ItemQuery into a flat\n * object that can be sent over a GET request.\n *\n * Note that there is some discussion about this. Evidently Elastic supports search with POST, but that also\n * feels like a bit of a hack. It's not a RESTful way to do things. So we're sticking with GET for now.\n *\n * For reference, look at RFC 9110 \"HTTP Semantics\", June which clarified on top of and RFC 7231. It's possible\n * but there are so many caveats and conditions in the standard, it's not worth it.\n *\n * Anticipating the next question - \"isn't there a limit to the length of a URL?\" The specification does not\n * specify a limit, and there are limits in various browsers and servers - Apache is 4,000 chars, Chrome is 2M chars.\n * Short answer is that if this query is being used to craft something that complex, it is probably a better idea\n * to provide an action or a custom query endpoint on the server.\n *\n * @param query\n * @returns QueryParams ready to be get over a GET request.\n */\nexport const queryToParams = (query: ItemQuery): QueryParams => {\n const params: QueryParams = {};\n if (query.compoundCondition) {\n params.compoundCondition = JSON.stringify(query.compoundCondition);\n }\n if (query.refs) {\n params.refs = JSON.stringify(query.refs);\n }\n if (query.limit) {\n params.limit = query.limit;\n }\n if (query.offset) {\n params.offset = query.offset;\n }\n if (query.aggs) {\n params.aggs = JSON.stringify(query.aggs);\n }\n if (query.events) {\n params.events = JSON.stringify(query.events);\n }\n return params;\n}\n\n// This is a dateTimeReviver used for JSON parse - when we convert a param back to a query, we need this.\nconst dateTimeReviver = function (key: string, value: string) {\n if (typeof value === 'string') {\n const parsedDate = DateTime.fromISO(value);\n if (parsedDate.isValid) {\n return parsedDate.toJSDate();;\n }\n }\n return value;\n}\n\n/**\n * This method translates from a flat QueryParams object with stringify'd JSON back to a full ItemQuery.\n *\n * @param params Parameters sent over a GET request\n * @returns A fully hydrated ItemQuery object.\n */\nexport const paramsToQuery = (params: QueryParams): ItemQuery => {\n const query: ItemQuery = {};\n if (params.compoundCondition) {\n query.compoundCondition = JSON.parse(params.compoundCondition as string) as CompoundCondition;\n }\n if (params.refs) {\n query.refs = JSON.parse(params.refs as string) as References;\n }\n if (params.limit) {\n query.limit = Number(params.limit);\n }\n if (params.offset) {\n query.offset = Number(params.offset);\n }\n if (params.aggs) {\n query.aggs = JSON.parse(params.aggs as string) as Record<string, ItemQuery>;\n }\n if (params.events) {\n query.events = JSON.parse(params.events as string, dateTimeReviver) as Record<string, { start?: Date, end?: Date }>;\n }\n return query;\n}\n\nconst isRefQueryMatch =\n <\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 refKey: string,\n queryRef: ComKey<S, L1, L2, L3, L4, L5> | PriKey<S>,\n references: References,\n ): boolean => {\n logger.trace('doesRefMatch', { queryRef, references });\n logger.debug('Comparing Ref', { refKey, itemRef: references[refKey], queryRef });\n return isItemKeyEqual(queryRef, references[refKey]);\n }\n\nconst isCompoundConditionQueryMatch = <\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 queryCondition: CompoundCondition,\n item: Item<S, L1, L2, L3, L4, L5>,\n ): boolean => {\n if (queryCondition.compoundType === 'AND') {\n // If this is an AND compound condition, we need to check if all of the conditions match\n return queryCondition.conditions.every(\n (condition: Condition | CompoundCondition) =>\n isCondition(condition) ?\n isConditionQueryMatch(condition, item) :\n isCompoundConditionQueryMatch(condition, item)\n );\n } else {\n // If this is an OR compound condition, we need to check if any of the conditions match\n return queryCondition.conditions.some(\n (condition: Condition | CompoundCondition) =>\n isCondition(condition) ?\n isConditionQueryMatch(condition, item) :\n isCompoundConditionQueryMatch(condition, item)\n );\n }\n}\n\nconst isConditionQueryMatch = <\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 queryCondition: Condition,\n item: Item<S, L1, L2, L3, L4, L5>,\n ): boolean => {\n const propKey = queryCondition.column;\n logger.trace('doesConditionMatch', { propKey, queryCondition, item });\n // eslint-disable-next-line no-undefined\n if (item[propKey] === undefined) {\n logger.debug('Item does not contain prop under key', { propKey, item });\n return false;\n }\n logger.debug('Comparing Condition', { propKey, itemProp: item[propKey], queryCondition });\n let result = false;\n switch (queryCondition.operator) {\n case '==':\n result = item[propKey] === queryCondition.value;\n break;\n case '!=':\n result = item[propKey] !== queryCondition.value;\n break;\n case '>':\n result = item[propKey] > queryCondition.value;\n break;\n case '>=':\n result = item[propKey] >= queryCondition.value;\n break;\n case '<':\n result = item[propKey] < queryCondition.value;\n break;\n case '<=':\n result = item[propKey] <= queryCondition.value;\n break;\n case 'in':\n result = (queryCondition.value as unknown as string[]).includes(item[propKey] as string);\n break;\n case 'not-in':\n result = !(queryCondition.value as unknown as string[]).includes(item[propKey] as string);\n break;\n case 'array-contains':\n result = (item[propKey] as unknown as string[]).includes(queryCondition.value as string);\n break;\n case 'array-contains-any':\n result = (queryCondition.value as unknown as string[])\n .some(value => (item[propKey] as unknown as string[]).includes(value));\n break;\n }\n return result;\n}\n\nconst isAggQueryMatch = <\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 aggKey: string,\n aggQuery: ItemQuery,\n agg: ReferenceItem<S, L1, L2, L3, L4, L5>\n ): boolean => {\n const aggItem = agg.item;\n logger.debug('Comparing Agg', { aggKey, aggItem, aggQuery });\n // Fancy, right? This is a recursive call to isQueryMatch\n return isQueryMatch(aggItem, aggQuery);\n}\n\nconst isEventQueryMatch = <\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 eventKey: string,\n eventQuery: EventQuery,\n item: Item<S, L1, L2, L3, L4, L5>,\n ): boolean => {\n if (!item.events[eventKey]) {\n logger.debug('Item does not contain event under key', { eventKey, events: item.events });\n return false;\n } else {\n const itemEvent = item.events[eventKey];\n if (itemEvent.at !== null) {\n if (eventQuery.start && !(eventQuery.start.getTime() <= itemEvent.at.getTime())) {\n logger.debug('Item date before event start query', { eventQuery, itemEvent });\n return false;\n }\n if (eventQuery.end && !(eventQuery.end.getTime() > itemEvent.at.getTime())) {\n logger.debug('Item date after event end query', { eventQuery, itemEvent });\n return false;\n }\n } else {\n logger.debug('Item event does contains a null at', { itemEvent });\n return false;\n }\n return true;\n }\n}\n\nexport const isQueryMatch = <\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>(item: Item<S, L1, L2, L3, L4, L5>, query: ItemQuery): boolean => {\n\n logger.trace('isMatch', { item, query });\n if (query.refs && item.refs) {\n for (const key in query.refs) {\n const queryRef = query.refs[key];\n if (!isRefQueryMatch(key, queryRef, item.refs)) return false;\n }\n } else if (query.refs && !item.refs) {\n logger.debug('Query contains refs but item does not have refs', { query, item });\n return false;\n }\n\n if (query.compoundCondition && item) {\n if (!isCompoundConditionQueryMatch(query.compoundCondition, item)) return false;\n }\n\n if (query.events && item.events) {\n for (const key in query.events) {\n const queryEvent = query.events[key];\n if (!isEventQueryMatch(key, queryEvent, item)) return false\n }\n return true;\n }\n\n if (query.aggs && item.aggs) {\n for (const key in query.aggs) {\n const aggQuery = query.aggs[key];\n if (item.aggs[key] && !isAggQueryMatch(key, aggQuery, item.aggs[key])) return false;\n }\n } if (query.aggs && !item.aggs) {\n logger.debug('Query contains aggs but item does not have aggs', { query, item });\n return false;\n }\n\n // If it hasn't returned false by now, it must be a match\n return true;\n}\n\nexport const abbrevQuery = (query: ItemQuery | null | undefined): string => {\n const abbrev = ['IQ'];\n if( query ) {\n if (query.refs) {\n for (const key in query.refs) {\n const ref = abbrevRef(key, query.refs[key]);\n abbrev.push(ref);\n }\n }\n if (query.compoundCondition) {\n const props = abbrevCompoundCondition(query.compoundCondition);\n abbrev.push(props);\n }\n if (query.aggs) {\n for (const key in query.aggs) {\n const agg = abbrevAgg(key, query.aggs[key]);\n abbrev.push(agg);\n }\n }\n if (query.events) {\n const events = `(E${Object.keys(query.events).join(',')})`;\n abbrev.push(events);\n }\n if (query.limit) {\n abbrev.push(`L${query.limit}`);\n }\n if (query.offset) {\n abbrev.push(`O${query.offset}`);\n }\n } else {\n abbrev.push('(empty)');\n }\n return abbrev.join(' ');\n}\n\nexport const abbrevRef = <\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>(key: string, ref: ComKey<S, L1, L2, L3, L4, L5> | PriKey<S>): string => {\n if (isPriKey(ref)) {\n const priKey = ref as PriKey<S>;\n return `R(${key},${priKey.kt},${priKey.pk})`;\n } else {\n const comKey = ref as ComKey<S, L1, L2, L3, L4, L5>;\n return `R(${key},${JSON.stringify(comKey)})`;\n }\n}\n\nexport const abbrevAgg = (key: string, agg: ItemQuery): string => {\n return `A(${key},${abbrevQuery(agg)})`;\n}\n\nexport const abbrevCompoundCondition = (compoundCondition: CompoundCondition): string => {\n return `CC(${compoundCondition.compoundType},` +\n `${compoundCondition.conditions ? compoundCondition.conditions.map(abbrevCondition).join(',') : 'No Conditions'})`;\n}\n\nexport const abbrevCondition = (condition: Condition | CompoundCondition): string => {\n if (isCondition(condition)) {\n return `(${condition.column},${condition.value},${condition.operator})`;\n } else {\n return abbrevCompoundCondition(condition);\n }\n}","import { Item } from \"@/items\";\nimport { isComKey, isPriKey, toKeyTypeArray } from \"@/key/KUtils\";\nimport { AllItemTypeArrays, ComKey, PriKey } from \"@/keys\";\n\nimport LibLogger from '@/logger';\n\nconst logger = LibLogger.get('IUtils');\n\nexport const validatePK = <\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>(input: Item<S, L1, L2, L3, L4, L5> | Item<S, L1, L2, L3, L4, L5>[], pkType: S):\n Item<S, L1, L2, L3, L4, L5> | Item<S, L1, L2, L3, L4, L5>[] => {\n\n logger.trace('Checking Return Type', { input });\n\n if (Array.isArray(input)) {\n const itemArray = input as Item<S, L1, L2, L3, L4, L5>[];\n return itemArray.map((item) => validatePK(item, pkType)) as Item<S, L1, L2, L3, L4, L5>[];\n } else {\n const item = input as Item<S, L1, L2, L3, L4, L5>;\n if( item ) {\n if (item.key) {\n const keyTypeArray = toKeyTypeArray(item.key as ComKey<S, L1, L2, L3, L4, L5> | PriKey<S>);\n const match: boolean = keyTypeArray[0] === pkType;\n if (!match) {\n logger.error('Key Type Array Mismatch', { keyTypeArray, pkType });\n throw new Error('Item does not have the correct primary key type');\n } else {\n return item;\n }\n } else {\n logger.error('Validating PK, Item does not have a key', { item });\n throw new Error('Validating PK, Item does not have a key');\n }\n } else {\n logger.error('Validating PK, Item is undefined', { item });\n throw new Error('Validating PK, Item is undefined');\n }\n }\n};\n\nexport const validateKeys = <\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>(item: Item<S, L1, L2, L3, L4, L5>, keyTypes: AllItemTypeArrays<S, L1, L2, L3, L4, L5>):\n Item<S, L1, L2, L3, L4, L5> => {\n logger.trace('Checking Return Type', { item });\n if( item ) {\n if (item.key) {\n const keyTypeArray = toKeyTypeArray(item.key as ComKey<S, L1, L2, L3, L4, L5> | PriKey<S>);\n if (keyTypeArray.length !== keyTypes.length) {\n throw new Error('Item does not have the correct number of keys');\n } else {\n const match: boolean = JSON.stringify(keyTypeArray) === JSON.stringify(keyTypes);\n if (!match) {\n logger.error('Key Type Array Mismatch', { keyTypeArray, thisKeyTypes: keyTypes });\n throw new Error('Item does not have the correct key types');\n } else {\n return item;\n }\n }\n } else {\n throw new Error('validating keys, item does not have a key: ' + JSON.stringify(item));\n }\n } else {\n throw new Error('validating keys, item is undefined');\n }\n};\n\nexport const isPriItem = <\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>(item: Item<S, L1, L2, L3, L4, L5>): item is Item<S, L1, L2, L3, L4, L5> => {\n return (item && item.key) ? isPriKey(item.key as PriKey<S>) : false;\n}\n\nexport const isComItem = <\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>(item: Item<S, L1, L2, L3, L4, L5>): item is Item<S, L1, L2, L3, L4, L5> => {\n return (item && item.key) ? isComKey(item.key as ComKey<S, L1, L2, L3, L4, L5>) : false;\n}"],"names":["LibLogger","Logging","getLogger","logger","get","Dictionary","set","key","item","trace","hashedKey","hashFunction","map","delete","keys","Object","JSON","parse","values","includesKey","includes","clone","clonedMap","assign","_define_property","stringify","isItemKeyEqual","a","b","isComKey","isComKeyEqual","isPriKey","isPriKeyEqual","pk","kt","isLocKeyEqual","lk","loc","length","i","isItemKey","undefined","isLocKey","generateKeyArray","comKey","push","locKeys","constructPriKey","pri","cPK","toKeyTypeArray","ik","ck","l","abbrevIK","join","abbrevLKA","keyArray","primaryType","itemKeyToLocKeyArray","lka","ikToLKA","locKeyArrayToItemKey","priKey","locs","slice","Error","isValidPriKey","valid","isValidLocKey","isValidLocKeyArray","every","isValidComKey","isValidItemKey","lkaToIK","IFactory","addRef","name","refName","refs","addDefaultEvents","events","now","Date","created","at","updated","deleted","addEvent","by","addProp","value","addProps","props","deepmerge","toItem","AItemService","pkType","parentService","getPkType","getKeyTypes","keyTypes","concat","isCondition","condition","column","Array","isArray","operator","IQFactory","orderBy","field","direction","query","agg","aggs","event","conditions","compoundType","compoundCondition","limit","offset","all","iqFactory","toQuery","queryToParams","params","dateTimeReviver","parsedDate","DateTime","fromISO","isValid","toJSDate","paramsToQuery","Number","isRefQueryMatch","refKey","queryRef","references","debug","itemRef","isCompoundConditionQueryMatch","queryCondition","isConditionQueryMatch","some","propKey","itemProp","result","isAggQueryMatch","aggKey","aggQuery","aggItem","isQueryMatch","isEventQueryMatch","eventKey","eventQuery","itemEvent","start","getTime","end","queryEvent","abbrevQuery","abbrev","ref","abbrevRef","abbrevCompoundCondition","abbrevAgg","abbrevCondition","validatePK","input","itemArray","keyTypeArray","match","error","validateKeys","thisKeyTypes","isPriItem","isComItem"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.cjs","sources":["../src/logger.ts","../src/dictionary.ts","../src/key/KUtils.ts","../src/item/IFactory.ts","../src/AItemService.ts","../src/item/ItemQuery.ts","../src/item/IQFactory.ts","../src/item/IQUtils.ts","../src/item/IUtils.ts"],"sourcesContent":["import Logging from '@fjell/logging';\n\nconst LibLogger = Logging.getLogger('@fjell/core');\n\nexport default LibLogger;\n","import LibLogger from \"./logger\";\n\nconst logger = LibLogger.get(\"Dictionary\");\n\nexport class Dictionary<T, V> {\n protected map: { [key: string]: V } = {}\n protected hashFunction = (key: T) => JSON.stringify(key);\n\n constructor(map?: { [key: string]: V }, hashFunction?: (key: T) => string) {\n if (map) {\n this.map = map\n }\n if (hashFunction) {\n this.hashFunction = hashFunction\n }\n }\n\n public set(key: T, item: V): void {\n logger.trace('set', { key, item });\n const hashedKey = this.hashFunction(key)\n this.map[hashedKey] = item\n }\n\n public get(key: T): V | null {\n logger.trace('get', { key });\n const hashedKey = this.hashFunction(key)\n return this.map[hashedKey] || null\n }\n\n public delete(key: T): void {\n logger.trace('delete', { key });\n const hashedKey = this.hashFunction(key)\n delete this.map[hashedKey]\n }\n\n public keys(): T[] {\n return Object.keys(this.map).map(key => JSON.parse(key))\n }\n\n public values(): V[] {\n return Object.values(this.map)\n }\n\n public includesKey(key: T): boolean {\n return Object.keys(this.map).includes(this.hashFunction(key))\n }\n\n public clone(): Dictionary<T, V> {\n const clonedMap = Object.assign({}, this.map);\n\n const clone = new Dictionary<T, V>(clonedMap, this.hashFunction)\n return clone;\n }\n}","/* eslint-disable no-undefined */\nimport {\n ComKey,\n LocKey,\n LocKeyArray,\n PriKey,\n UUID\n} from \"@/keys\";\n\nimport LibLogger from \"@/logger\";\n\nconst logger = LibLogger.get('KUtils');\n\nexport const isItemKeyEqual = <\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 logger.trace('isKeyEqual', { a, b });\n if (isComKey(a) && isComKey(b)) {\n return isComKeyEqual(a as ComKey<S, L1, L2, L3, L4, L5>, b as ComKey<S, L1, L2, L3, L4, L5>);\n } else if (isPriKey(a) && isPriKey(b)) {\n if (isComKey(a) || isComKey(b)) {\n return false;\n } else {\n return isPriKeyEqual(a as PriKey<S>, b as PriKey<S>);\n }\n } else {\n return false;\n }\n}\n\nexport const isPriKeyEqual = <\n S extends string,\n>(a: PriKey<S>, b: PriKey<S>): boolean => {\n logger.trace('isPriKeyEqual', { a, b });\n return a && b && a.pk === b.pk && a.kt === b.kt;\n}\n\nexport const isLocKeyEqual = <\n L1 extends string,\n L2 extends string = never,\n L3 extends string = never,\n L4 extends string = never,\n L5 extends string = never\n>(a: LocKey<L1 | L2 | L3 | L4 | L5>, b: LocKey<L1 | L2 | L3 | L4 | L5>): boolean => {\n logger.trace('isLocKeyEqual', { a, b });\n return a && b && a.lk === b.lk && a.kt === b.kt;\n}\n\nexport const isComKeyEqual = <\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>, b: ComKey<S, L1, L2, L3, L4, L5>): boolean => {\n logger.trace('isComKeyEqual', { a, b });\n if (a && b && isPriKeyEqual({ kt: a.kt, pk: a.pk } as PriKey<S>, { kt: b.kt, pk: b.pk } as PriKey<S>)) {\n if (a.loc.length === b.loc.length) {\n for (let i = 0; i < a.loc.length; i++) {\n if (!isLocKeyEqual<L1, L2, L3, L4, L5>(a.loc[i], b.loc[i])) {\n return false;\n }\n }\n return true;\n } else {\n return false;\n }\n } else {\n return false;\n }\n}\n\nexport const isItemKey = (key: any): boolean => {\n logger.trace('isItemKey', { key });\n return key !== undefined && (isComKey(key) || isPriKey(key));\n}\n\nexport const isComKey = (key: any): boolean => {\n logger.trace('isComKey', { key });\n return key !== undefined &&\n (key.pk !== undefined && key.kt !== undefined) && (key.loc !== undefined && key.loc.length > 0);\n}\n\nexport const isPriKey = (key: any): boolean => {\n logger.trace('isPriKey', { key });\n return key !== undefined &&\n (key.pk !== undefined && key.kt !== undefined) && (key.loc === undefined || key.loc.length === 0);\n}\n\nexport const isLocKey = (key: any): boolean => {\n logger.trace('isLocKey', { key });\n return key !== undefined && (key.lk !== undefined && key.kt !== undefined);\n}\n\nexport const generateKeyArray = <\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>(key: ComKey<S, L1, L2, L3, L4, L5> | PriKey<S> | LocKeyArray<L1, L2, L3, L4, L5> | []):\n Array<PriKey<S> | LocKey<L1 | L2 | L3 | L4 | L5>> => {\n logger.trace('generateKeyArray', { key });\n const keys: Array<PriKey<S> | LocKey<L1 | L2 | L3 | L4 | L5>> = [];\n\n if (isComKey(key) || isPriKey(key)) {\n // console.log('it is an item key');\n if (isComKey(key)) {\n // console.log('it is a composite key');\n const comKey = key as ComKey<S, L1, L2, L3, L4, L5>;\n keys.push({ pk: comKey.pk, kt: comKey.kt });\n for (let i = 0; i < comKey.loc.length; i++) {\n keys.push(comKey.loc[i]);\n }\n } else {\n keys.push(key as PriKey<S>);\n }\n } else {\n // console.log('is is an array, length: ' + key.length);\n const locKeys = key as LocKey<L1 | L2 | L3 | L4 | L5>[];\n for (let i = 0; i < locKeys.length; i++) {\n // console.log('Pushing a key');\n keys.push(locKeys[i]);\n }\n }\n return keys;\n}\n\n// TODO: Exactly the same as in ContainedItemLib\nexport const constructPriKey = <S extends string>(\n pk: string | PriKey<S>,\n kt: S,\n) => {\n logger.trace('constructPriKey', { pk, kt });\n let pri: PriKey<S>;\n if (typeof pk === 'string') {\n pri = { kt: kt as S, pk: pk as UUID };\n } else {\n pri = pk;\n }\n return pri;\n}\n\n// TODO: Exactly the same as in ContainedItemLib\nexport const cPK = constructPriKey;\n\nexport const toKeyTypeArray = <\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>(ik: PriKey<S> | ComKey<S, L1, L2, L3, L4, L5>):\n string[] => {\n logger.trace('toKeyTypeArray', { ik });\n if (isComKey(ik)) {\n const ck = ik as ComKey<S, L1, L2, L3, L4, L5>;\n return [ck.kt, ...ck.loc.map((l: LocKey<L1 | L2 | L3 | L4 | L5>) => l.kt)];\n } else {\n return [(ik as PriKey<S>).kt];\n }\n}\n\nexport const abbrevIK = <\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>(ik: ComKey<S, L1, L2, L3, L4, L5> | PriKey<S>): string => {\n logger.trace('abbrevIK', { ik });\n if (ik) {\n if (isComKey(ik)) {\n const ck = ik as ComKey<S, L1, L2, L3, L4, L5>;\n return `${ck.kt}:${ck.pk}:${ck.loc.map((l: LocKey<L1 | L2 | L3 | L4 | L5>) => `${l.kt}:${l.lk}`).join(',')}`;\n } else {\n return `${(ik as PriKey<S>).kt}:${(ik as PriKey<S>).pk}`;\n }\n } else {\n return 'null IK';\n }\n}\n\nexport const abbrevLKA = <\n L1 extends string,\n L2 extends string = never,\n L3 extends string = never,\n L4 extends string = never,\n L5 extends string = never\n>(keyArray: Array<LocKey<L1 | L2 | L3 | L4 | L5>> | null): string => {\n logger.trace('abbrevLKA', { keyArray });\n if (keyArray === undefined || keyArray === null) {\n return 'null LKA';\n } else {\n return keyArray.map(key => {\n if (key) {\n return `${key.kt}:${key.lk}`;\n } else {\n return key;\n }\n }).join(',');\n }\n}\n\nexport const primaryType = <\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>(ik: ComKey<S, L1, L2, L3, L4, L5> | PriKey<S>): string => {\n logger.trace('primaryType', { ik });\n if (isComKey(ik)) {\n return (ik as ComKey<S, L1, L2, L3, L4, L5>).kt;\n } else {\n return (ik as PriKey<S>).kt;\n }\n}\n\n/**\n *\n * @param ik ItemKey to be used as a basis for a location\n * @returns\n */\nexport const itemKeyToLocKeyArray =\n <\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 >(ik: PriKey<S> | ComKey<S, L1, L2, L3, L4, L5>): LocKeyArray<S, L1, L2, L3, L4> => {\n logger.trace('itemKeyToLocKeyArray', { ik: abbrevIK(ik) });\n let lka: Array<LocKey<L1 | L2 | L3 | L4 | L5>> = [];\n if (isComKey(ik)) {\n const ck = ik as ComKey<S, L1, L2, L3, L4, L5>;\n lka = [{ kt: ck.kt, lk: ck.pk } as unknown as LocKey<L1 | L2 | L3 | L4 | L5>, ...ck.loc];\n } else {\n const pk = ik as PriKey<S>;\n lka = [{ kt: pk.kt, lk: pk.pk } as unknown as LocKey<L1 | L2 | L3 | L4 | L5>];\n }\n logger.trace('itemKeyToLocKeyArray Results', { ik: abbrevIK(ik), lka: abbrevLKA(lka) });\n return lka as LocKeyArray<S, L1, L2, L3, L4>;\n }\n\nexport const ikToLKA = itemKeyToLocKeyArray;\n\n/**\n * Sometimes you need to take a location key array and convert it to the item key that points to the containing item.\n * @param lka A location key array\n * @returns An item key corresponding to the containing item this location refers to.\n */\nexport const locKeyArrayToItemKey =\n <\n L1 extends string,\n L2 extends string = never,\n L3 extends string = never,\n L4 extends string = never,\n L5 extends string = never\n >(lka: LocKeyArray<L1, L2, L3, L4, L5>):\n PriKey<L1> | ComKey<L1, L2, L3, L4, L5> => {\n logger.trace('locKeyArrayToItemKey', { lka: abbrevLKA(lka as Array<LocKey<L1 | L2 | L3 | L4 | L5>>) });\n\n if (lka && lka.length === 1) {\n const priKey = cPK(lka[0].lk, lka[0].kt);\n return priKey as PriKey<L1>;\n } else if (lka && lka.length > 1 && lka[0] !== undefined) {\n const locs = lka.slice(1);\n const priKey = cPK(lka[0].lk, lka[0].kt);\n const comKey = { kt: priKey.kt, pk: priKey.pk, loc: locs as unknown as LocKeyArray<L2, L3, L4, L5> };\n return comKey as ComKey<L1, L2, L3, L4, L5>;\n } else {\n throw new Error('locKeyArrayToItemKey: lka is undefined or empty');\n }\n }\n\n// TODO: This is annoying that we have to check for '' and 'null'\nexport const isValidPriKey = <S extends string>(key: PriKey<S>): boolean => {\n const valid = (key !== undefined && key !== null)\n && (key.pk !== undefined && key.pk !== null && key.pk !== '' && key.pk !== 'null')\n && (key.kt !== undefined && key.kt !== null && key.kt !== '' && key.kt !== 'null');\n return valid;\n}\n\n// TODO: This is annoying that we have to check for '' and 'null'\nexport const isValidLocKey = <\n L1 extends string,\n L2 extends string = never,\n L3 extends string = never,\n L4 extends string = never,\n L5 extends string = never\n>(key: LocKey<L1 | L2 | L3 | L4 | L5>): boolean => {\n const valid = (key !== undefined && key !== null)\n && (key.lk !== undefined && key.lk !== null && key.lk !== '' && key.lk !== 'null')\n && (key.kt !== undefined && key.kt !== null && key.kt !== '' && key.kt !== 'null');\n return valid;\n}\n\nexport const isValidLocKeyArray = <\n L1 extends string,\n L2 extends string = never,\n L3 extends string = never,\n L4 extends string = never,\n L5 extends string = never\n>(keyArray: Array<LocKey<L1 | L2 | L3 | L4 | L5>>): boolean => {\n return (keyArray !== undefined && keyArray !== null) && keyArray.every(isValidLocKey);\n}\n\nexport const isValidComKey = <\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>(key: ComKey<S, L1, L2, L3, L4, L5>): boolean => {\n return (key !== undefined\n && key !== null) && isValidPriKey(key) && isValidLocKeyArray(key.loc as Array<LocKey<L1 | L2 | L3 | L4 | L5>>);\n}\n\nexport const isValidItemKey = <\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>(key: ComKey<S, L1, L2, L3, L4, L5> | PriKey<S>): boolean => {\n return (isComKey(key) &&\n isValidComKey(key as ComKey<S, L1, L2, L3, L4, L5>)) || (isPriKey(key) && isValidPriKey(key as PriKey<S>));\n}\n\nexport const lkaToIK = locKeyArrayToItemKey;\n","import deepmerge from 'deepmerge';\nimport { Item } from '@/items';\nimport { primaryType } from '@/key/KUtils';\nimport { ComKey, PriKey } from '@/keys';\n\nexport class IFactory<\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 private item: any = {\n };\n\n public constructor(props: Record<string, any> = {}) {\n this.item = deepmerge(this.item, props);\n }\n\n public addRef(i: Item<any, any|never, any|never, any|never, any|never, any|never>, name?: string) {\n const ik: ComKey<any, any|never, any|never, any|never, any|never, any|never> | PriKey<any> = i.key;\n\n const refName = name || primaryType(ik);\n if (!this.item.refs) {\n this.item.refs = {};\n }\n this.item.refs[refName] = ik;\n return this;\n }\n\n public static addRef<\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 >(i: V, name?: string) {\n return new IFactory<V, S, L1, L2, L3, L4, L5>().addRef(i, name);\n }\n\n public addDefaultEvents() {\n if (!this.item.events) {\n this.item.events = {};\n }\n const now = new Date();\n if (!this.item.events.created) {\n this.item.events.created = { at: now };\n }\n if (!this.item.events.updated) {\n this.item.events.updated = { at: now };\n }\n if (!this.item.events.deleted) {\n this.item.events.deleted = { at: null };\n }\n return this;\n }\n\n public addEvent(\n name: string,\n at: Date | null,\n by?: ComKey<any, any|never, any|never, any|never, any|never, any|never> | PriKey<any>\n ) {\n if (!this.item.events) {\n this.item.events = {};\n }\n this.item.events[name] = { at, by };\n return this;\n }\n\n public static addEvent<\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 >(name: string, at: Date | null, by?: ComKey<S, L1, L2, L3, L4, L5> | PriKey<S>) {\n return new IFactory<V, S, L1, L2, L3, L4, L5>().addEvent(name, at, by);\n }\n\n public addProp(name: string, value: string | number | boolean | Date) {\n this.item[name] = value;\n return this;\n }\n\n public static addProp<\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 >(name: string, value: string | number | boolean | Date) {\n return new IFactory<V, S, L1, L2, L3, L4, L5>().addProp(name, value);\n }\n\n public addProps(props: Record<string, any>) {\n this.item = deepmerge(this.item, props);\n return this;\n }\n\n public static addProps<\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 >(props: Record<string, any>) {\n return new IFactory<V, S, L1, L2, L3, L4, L5>().addProps(props);\n }\n\n toItem(): V {\n return this.item as V;\n }\n}","import { AllItemTypeArrays } from \"./keys\";\n\nexport class AItemService<\n S extends string,\n L1 extends string,\n L2 extends string = never,\n L3 extends string = never,\n L4 extends string = never,\n L5 extends string = never\n> {\n\n private pkType: S;\n private parentService: AItemService<L1, L2, L3, L4, L5, never> | null = null;\n\n constructor(\n pkType: S,\n parentService?: AItemService<L1, L2, L3, L4, L5, never>,\n ) {\n this.pkType = pkType;\n if (parentService) {\n this.parentService = parentService;\n }\n }\n\n public getPkType = (): S => {\n return this.pkType;\n }\n\n public getKeyTypes = (): AllItemTypeArrays<S, L1, L2, L3, L4, L5> => {\n let keyTypes: readonly string[] = [this.getPkType()];\n\n if (this.parentService) {\n keyTypes = keyTypes.concat(this.parentService.getKeyTypes());\n }\n return keyTypes as AllItemTypeArrays<S, L1, L2, L3, L4, L5>;\n }\n\n}\n","import { References } from '@/items';\n\nexport type QueryParams = Record<string, string | number | boolean | Date>;\n\n/**\n * The operator for a condition. This is the same as the operators used in the Firestore query language.\n */\nexport type ConditionOperator =\n '==' | '!=' | '>' | '>=' | '<' | '<=' | 'in' | 'not-in' | 'array-contains' | 'array-contains-any';\n\n/**\n * A single property condition is defined with a column, value, and operator.\n * This is a condition that is used in a query.\n */\nexport type Condition = {\n column: string,\n value: string[] | string | number[] | number | boolean | Date,\n operator: ConditionOperator,\n};\n\n/**\n * When applying a compound condition, the CompoundType defines the type of compound condition.\n */\nexport type CompoundType = 'AND' | 'OR';\n\n/**\n * When configuring a CompoundCondition this can contain a collection of conditions\n * that will be applied to the query. By default, this is an AND conditiion that is associated\n * with an array of Condition objects OR an array of CompoundCondition objects.\n *\n * For example, I could have { compoundType: 'AND', conditions: [{column: 'name', value: 'test', operator: '=='},\n * {column: 'age', value: 21, operator: '>='}]} which would filter the query to only include items\n * where the name is 'test' and the age is greater than or equal to 21.\n *\n * Or, I could have a { compoundType: 'OR', conditions: [{column: 'name', value: 'test', operator: '=='},\n * {column: 'age', value: 21, operator: '>='}]} which would filter the query to only include items\n * where the name is 'test' OR the age is greater than or equal to 21.\n *\n * I could also nest an OR within an AND, like this:\n * ['AND', [{column: 'name', value: 'test', operator: '=='},\n * { compoundType: 'OR', conditions: [{column: 'age', value: 21, operator: '<='},\n * {column: 'age', value: 52, operator: '>='}]}]] which would filter the query to only include items where the\n * name is 'test' and the age is less than or equal to 21 or greater than or equal to 52.\n */\nexport type CompoundCondition = {\n compoundType: CompoundType,\n conditions: Array<Condition | CompoundCondition>\n};\n\nexport const isCondition = (condition: any): condition is Condition => {\n return (\n typeof condition.column === 'string' &&\n (Array.isArray(condition.value) && condition.value.every((item: any) => typeof item === 'string')) ||\n (Array.isArray(condition.value) && condition.value.every((item: any) => typeof item === 'number')) ||\n typeof condition.value === 'string' ||\n typeof condition.value === 'number' ||\n typeof condition.value === 'boolean' ||\n condition.value instanceof Date\n ) && (condition.operator ? typeof condition.operator === 'string' : true);\n}\n\nexport type EventQuery = {\n start?: Date,\n end?: Date,\n by?: string,\n}\n\nexport type OrderDirection = 'asc' | 'desc';\n\nexport type OrderBy = {\n field: string;\n direction: OrderDirection;\n}\n\nexport type ItemQuery = {\n refs?: References;\n compoundCondition?: CompoundCondition;\n limit?: number;\n offset?: number;\n aggs?: Record<\n string,\n ItemQuery\n >;\n events?: Record<string, EventQuery>;\n orderBy?: OrderBy[];\n};\n\n","import { cPK } from '@/key/KUtils';\nimport {\n CompoundType,\n Condition,\n ConditionOperator,\n EventQuery,\n isCondition,\n ItemQuery,\n OrderDirection\n} from \"./ItemQuery\";\n\nexport class IQFactory {\n\n private query: ItemQuery = {};\n\n public constructor(query: ItemQuery = {}) {\n this.query = query;\n }\n\n public orderBy(field: string, direction: OrderDirection = 'asc') {\n if (!this.query.orderBy) {\n this.query.orderBy = [];\n }\n this.query.orderBy.push({ field, direction });\n return this;\n }\n\n public agg(name: string, query: ItemQuery) {\n if (!this.query.aggs) {\n this.query.aggs = {};\n }\n this.query.aggs[name] = query;\n return this;\n }\n\n public event(name: string, query: EventQuery) {\n if (!this.query.events) {\n this.query.events = {};\n }\n this.query.events[name] = query;\n return this;\n }\n\n public conditions(conditions: Condition[], compoundType: CompoundType = 'AND') {\n for (const condition of conditions) {\n if (!isCondition(condition)) {\n throw new Error(`Invalid condition: ${JSON.stringify(condition)}`);\n }\n }\n if (!this.query.compoundCondition) {\n // If there is no top-level compound condition, create one\n // with the given compound type. This will mostly likely be the most common case.\n this.query.compoundCondition = {\n compoundType,\n conditions: conditions,\n };\n } else {\n // If there is already a top-level compound condition, create a new compound condition\n // and add it to the conditions array of the top-level compound condition.\n const compoundCondition = {\n compoundType,\n conditions,\n };\n this.query.compoundCondition.conditions.push(compoundCondition);\n }\n return this;\n }\n\n public limit(limit: number) {\n this.query.limit = limit;\n return this;\n }\n\n public offset(offset: number) {\n this.query.offset = offset;\n return this;\n }\n\n // TODO: right now, we're only supporting PK refs for queries. Should add support for CKs\n public pk(kt: string, pk: string, name?: string) {\n if (!this.query.refs) {\n this.query.refs = {};\n }\n const refName = name || kt;\n this.query.refs[refName] = cPK<string>(pk, kt);\n return this;\n }\n\n public condition(\n column: string,\n value: string[] | string | number[] | number | boolean | Date,\n operator: ConditionOperator = '==',\n ) {\n const condition: Condition = { column, value, operator };\n if (isCondition(condition)) {\n if (!this.query.compoundCondition) {\n // If there is no top-level compound condition, create one\n // with the default compound type of 'AND'.\n this.query.compoundCondition = {\n compoundType: 'AND',\n conditions: [],\n };\n }\n this.query.compoundCondition.conditions.push(condition);\n return this;\n } else {\n throw new Error(`Invalid condition: ${JSON.stringify(condition)}`);\n }\n }\n\n public static all() {\n const iqFactory = new IQFactory();\n return iqFactory;\n }\n\n public static orderBy(field: string, direction: OrderDirection = 'asc') {\n const iqFactory = new IQFactory();\n return iqFactory.orderBy(field, direction);\n }\n\n public static agg(name: string, query: ItemQuery) {\n const iqFactory = new IQFactory();\n return iqFactory.agg(name, query);\n }\n\n public static event(name: string, query: EventQuery) {\n const iqFactory = new IQFactory();\n return iqFactory.event(name, query);\n }\n\n public static limit(limit: number) {\n const iqFactory = new IQFactory();\n return iqFactory.limit(limit);\n }\n\n public static offset(offset: number) {\n const iqFactory = new IQFactory();\n return iqFactory.offset(offset);\n }\n\n public static pk(kt: string, pk: string, name?: string) {\n const iqFactory = new IQFactory();\n return iqFactory.pk(kt, pk, name);\n }\n\n public static condition(\n column: string,\n value: string[] | string | number[] | number | boolean | Date,\n operator: ConditionOperator = '=='\n ) {\n const iqFactory = new IQFactory();\n return iqFactory.condition(column, value, operator);\n }\n\n public static conditions(conditions: Condition[], compoundType: CompoundType = 'AND') {\n const iqFactory = new IQFactory();\n return iqFactory.conditions(conditions, compoundType);\n }\n\n toQuery() {\n return this.query;\n }\n}","import { Item, ReferenceItem, References } from \"@/items\";\nimport { isItemKeyEqual, isPriKey } from \"@/key/KUtils\";\nimport { ComKey, PriKey } from \"@/keys\";\nimport LibLogger from \"@/logger\";\nimport { DateTime } from \"luxon\";\nimport { CompoundCondition, Condition, EventQuery, isCondition, ItemQuery, QueryParams } from \"./ItemQuery\";\n\nconst logger = LibLogger.get('IQUtils');\n\n/**\n * When we query or search, we're sending a GET request. This converts everything in ItemQuery into a flat\n * object that can be sent over a GET request.\n *\n * Note that there is some discussion about this. Evidently Elastic supports search with POST, but that also\n * feels like a bit of a hack. It's not a RESTful way to do things. So we're sticking with GET for now.\n *\n * For reference, look at RFC 9110 \"HTTP Semantics\", June which clarified on top of and RFC 7231. It's possible\n * but there are so many caveats and conditions in the standard, it's not worth it.\n *\n * Anticipating the next question - \"isn't there a limit to the length of a URL?\" The specification does not\n * specify a limit, and there are limits in various browsers and servers - Apache is 4,000 chars, Chrome is 2M chars.\n * Short answer is that if this query is being used to craft something that complex, it is probably a better idea\n * to provide an action or a custom query endpoint on the server.\n *\n * @param query\n * @returns QueryParams ready to be get over a GET request.\n */\nexport const queryToParams = (query: ItemQuery): QueryParams => {\n const params: QueryParams = {};\n if (query.compoundCondition) {\n params.compoundCondition = JSON.stringify(query.compoundCondition);\n }\n if (query.refs) {\n params.refs = JSON.stringify(query.refs);\n }\n if (query.limit) {\n params.limit = query.limit;\n }\n if (query.offset) {\n params.offset = query.offset;\n }\n if (query.aggs) {\n params.aggs = JSON.stringify(query.aggs);\n }\n if (query.events) {\n params.events = JSON.stringify(query.events);\n }\n return params;\n}\n\n// This is a dateTimeReviver used for JSON parse - when we convert a param back to a query, we need this.\nconst dateTimeReviver = function (key: string, value: string) {\n if (typeof value === 'string') {\n const parsedDate = DateTime.fromISO(value);\n if (parsedDate.isValid) {\n return parsedDate.toJSDate();;\n }\n }\n return value;\n}\n\n/**\n * This method translates from a flat QueryParams object with stringify'd JSON back to a full ItemQuery.\n *\n * @param params Parameters sent over a GET request\n * @returns A fully hydrated ItemQuery object.\n */\nexport const paramsToQuery = (params: QueryParams): ItemQuery => {\n const query: ItemQuery = {};\n if (params.compoundCondition) {\n query.compoundCondition = JSON.parse(params.compoundCondition as string) as CompoundCondition;\n }\n if (params.refs) {\n query.refs = JSON.parse(params.refs as string) as References;\n }\n if (params.limit) {\n query.limit = Number(params.limit);\n }\n if (params.offset) {\n query.offset = Number(params.offset);\n }\n if (params.aggs) {\n query.aggs = JSON.parse(params.aggs as string) as Record<string, ItemQuery>;\n }\n if (params.events) {\n query.events = JSON.parse(params.events as string, dateTimeReviver) as Record<string, { start?: Date, end?: Date }>;\n }\n return query;\n}\n\nconst isRefQueryMatch =\n <\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 refKey: string,\n queryRef: ComKey<S, L1, L2, L3, L4, L5> | PriKey<S>,\n references: References,\n ): boolean => {\n logger.trace('doesRefMatch', { queryRef, references });\n logger.debug('Comparing Ref', { refKey, itemRef: references[refKey], queryRef });\n return isItemKeyEqual(queryRef, references[refKey]);\n }\n\nconst isCompoundConditionQueryMatch = <\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 queryCondition: CompoundCondition,\n item: Item<S, L1, L2, L3, L4, L5>,\n ): boolean => {\n if (queryCondition.compoundType === 'AND') {\n // If this is an AND compound condition, we need to check if all of the conditions match\n return queryCondition.conditions.every(\n (condition: Condition | CompoundCondition) =>\n isCondition(condition) ?\n isConditionQueryMatch(condition, item) :\n isCompoundConditionQueryMatch(condition, item)\n );\n } else {\n // If this is an OR compound condition, we need to check if any of the conditions match\n return queryCondition.conditions.some(\n (condition: Condition | CompoundCondition) =>\n isCondition(condition) ?\n isConditionQueryMatch(condition, item) :\n isCompoundConditionQueryMatch(condition, item)\n );\n }\n}\n\nconst isConditionQueryMatch = <\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 queryCondition: Condition,\n item: Item<S, L1, L2, L3, L4, L5>,\n ): boolean => {\n const propKey = queryCondition.column;\n logger.trace('doesConditionMatch', { propKey, queryCondition, item });\n // eslint-disable-next-line no-undefined\n if (item[propKey] === undefined) {\n logger.debug('Item does not contain prop under key', { propKey, item });\n return false;\n }\n logger.debug('Comparing Condition', { propKey, itemProp: item[propKey], queryCondition });\n let result = false;\n switch (queryCondition.operator) {\n case '==':\n result = item[propKey] === queryCondition.value;\n break;\n case '!=':\n result = item[propKey] !== queryCondition.value;\n break;\n case '>':\n result = item[propKey] > queryCondition.value;\n break;\n case '>=':\n result = item[propKey] >= queryCondition.value;\n break;\n case '<':\n result = item[propKey] < queryCondition.value;\n break;\n case '<=':\n result = item[propKey] <= queryCondition.value;\n break;\n case 'in':\n result = (queryCondition.value as unknown as string[]).includes(item[propKey] as string);\n break;\n case 'not-in':\n result = !(queryCondition.value as unknown as string[]).includes(item[propKey] as string);\n break;\n case 'array-contains':\n result = (item[propKey] as unknown as string[]).includes(queryCondition.value as string);\n break;\n case 'array-contains-any':\n result = (queryCondition.value as unknown as string[])\n .some(value => (item[propKey] as unknown as string[]).includes(value));\n break;\n }\n return result;\n}\n\nconst isAggQueryMatch = <\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 aggKey: string,\n aggQuery: ItemQuery,\n agg: ReferenceItem<S, L1, L2, L3, L4, L5>\n ): boolean => {\n const aggItem = agg.item;\n logger.debug('Comparing Agg', { aggKey, aggItem, aggQuery });\n // Fancy, right? This is a recursive call to isQueryMatch\n return isQueryMatch(aggItem, aggQuery);\n}\n\nconst isEventQueryMatch = <\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 eventKey: string,\n eventQuery: EventQuery,\n item: Item<S, L1, L2, L3, L4, L5>,\n ): boolean => {\n if (!item.events[eventKey]) {\n logger.debug('Item does not contain event under key', { eventKey, events: item.events });\n return false;\n } else {\n const itemEvent = item.events[eventKey];\n if (itemEvent.at !== null) {\n if (eventQuery.start && !(eventQuery.start.getTime() <= itemEvent.at.getTime())) {\n logger.debug('Item date before event start query', { eventQuery, itemEvent });\n return false;\n }\n if (eventQuery.end && !(eventQuery.end.getTime() > itemEvent.at.getTime())) {\n logger.debug('Item date after event end query', { eventQuery, itemEvent });\n return false;\n }\n } else {\n logger.debug('Item event does contains a null at', { itemEvent });\n return false;\n }\n return true;\n }\n}\n\nexport const isQueryMatch = <\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>(item: Item<S, L1, L2, L3, L4, L5>, query: ItemQuery): boolean => {\n\n logger.trace('isMatch', { item, query });\n if (query.refs && item.refs) {\n for (const key in query.refs) {\n const queryRef = query.refs[key];\n if (!isRefQueryMatch(key, queryRef, item.refs)) return false;\n }\n } else if (query.refs && !item.refs) {\n logger.debug('Query contains refs but item does not have refs', { query, item });\n return false;\n }\n\n if (query.compoundCondition && item) {\n if (!isCompoundConditionQueryMatch(query.compoundCondition, item)) return false;\n }\n\n if (query.events && item.events) {\n for (const key in query.events) {\n const queryEvent = query.events[key];\n if (!isEventQueryMatch(key, queryEvent, item)) return false\n }\n return true;\n }\n\n if (query.aggs && item.aggs) {\n for (const key in query.aggs) {\n const aggQuery = query.aggs[key];\n if (item.aggs[key] && !isAggQueryMatch(key, aggQuery, item.aggs[key])) return false;\n }\n } if (query.aggs && !item.aggs) {\n logger.debug('Query contains aggs but item does not have aggs', { query, item });\n return false;\n }\n\n // If it hasn't returned false by now, it must be a match\n return true;\n}\n\nexport const abbrevQuery = (query: ItemQuery | null | undefined): string => {\n const abbrev = ['IQ'];\n if( query ) {\n if (query.refs) {\n for (const key in query.refs) {\n const ref = abbrevRef(key, query.refs[key]);\n abbrev.push(ref);\n }\n }\n if (query.compoundCondition) {\n const props = abbrevCompoundCondition(query.compoundCondition);\n abbrev.push(props);\n }\n if (query.aggs) {\n for (const key in query.aggs) {\n const agg = abbrevAgg(key, query.aggs[key]);\n abbrev.push(agg);\n }\n }\n if (query.events) {\n const events = `(E${Object.keys(query.events).join(',')})`;\n abbrev.push(events);\n }\n if (query.limit) {\n abbrev.push(`L${query.limit}`);\n }\n if (query.offset) {\n abbrev.push(`O${query.offset}`);\n }\n } else {\n abbrev.push('(empty)');\n }\n return abbrev.join(' ');\n}\n\nexport const abbrevRef = <\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>(key: string, ref: ComKey<S, L1, L2, L3, L4, L5> | PriKey<S>): string => {\n if (isPriKey(ref)) {\n const priKey = ref as PriKey<S>;\n return `R(${key},${priKey.kt},${priKey.pk})`;\n } else {\n const comKey = ref as ComKey<S, L1, L2, L3, L4, L5>;\n return `R(${key},${JSON.stringify(comKey)})`;\n }\n}\n\nexport const abbrevAgg = (key: string, agg: ItemQuery): string => {\n return `A(${key},${abbrevQuery(agg)})`;\n}\n\nexport const abbrevCompoundCondition = (compoundCondition: CompoundCondition): string => {\n return `CC(${compoundCondition.compoundType},` +\n `${compoundCondition.conditions ? compoundCondition.conditions.map(abbrevCondition).join(',') : 'No Conditions'})`;\n}\n\nexport const abbrevCondition = (condition: Condition | CompoundCondition): string => {\n if (isCondition(condition)) {\n return `(${condition.column},${condition.value},${condition.operator})`;\n } else {\n return abbrevCompoundCondition(condition);\n }\n}","/* eslint-disable indent */\n/* eslint-disable max-len */\nimport { Item } from \"@/items\";\nimport { isComKey, isPriKey, toKeyTypeArray } from \"@/key/KUtils\";\nimport { AllItemTypeArrays, ComKey, PriKey } from \"@/keys\";\n\nimport LibLogger from '@/logger';\n\nconst logger = LibLogger.get('IUtils');\n\nconst validatePKForItem = <\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>(item: Item<S, L1, L2, L3, L4, L5>, pkType: S): Item<S, L1, L2, L3, L4, L5> => {\n if (!item) {\n logger.error('Validating PK, Item is undefined', { item });\n throw new Error('Validating PK, Item is undefined');\n }\n if (!item.key) {\n logger.error('Validating PK, Item does not have a key', { item });\n throw new Error('Validating PK, Item does not have a key');\n }\n\n const keyTypeArray = toKeyTypeArray(item.key as ComKey<S, L1, L2, L3, L4, L5> | PriKey<S>);\n if (keyTypeArray[0] !== pkType) {\n logger.error('Key Type Array Mismatch', { keyTypeArray, pkType });\n throw new Error(`Item does not have the correct primary key type. Expected ${pkType}, got ${keyTypeArray[0]}`);\n }\n return item;\n};\n\nexport const validatePK = <\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 input: Item<S, L1, L2, L3, L4, L5> | Item<S, L1, L2, L3, L4, L5>[],\n pkType: S,\n): Item<S, L1, L2, L3, L4, L5> | Item<S, L1, L2, L3, L4, L5>[] => {\n logger.trace('Checking Return Type', { input });\n\n if (Array.isArray(input)) {\n return input.map((item) => validatePKForItem(item, pkType));\n }\n return validatePKForItem(input, pkType);\n};\n\nexport const validateKeys = <\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 item: Item<S, L1, L2, L3, L4, L5>,\n keyTypes: AllItemTypeArrays<S, L1, L2, L3, L4, L5>,\n): Item<S, L1, L2, L3, L4, L5> => {\n logger.trace('Checking Return Type', { item });\n if (!item) {\n throw new Error('validating keys, item is undefined');\n }\n if (!item.key) {\n throw new Error('validating keys, item does not have a key: ' + JSON.stringify(item));\n }\n\n const keyTypeArray = toKeyTypeArray(item.key as ComKey<S, L1, L2, L3, L4, L5> | PriKey<S>);\n if (keyTypeArray.length !== keyTypes.length) {\n throw new Error(`Item does not have the correct number of keys. Expected ${keyTypes.length}, but got ${keyTypeArray.length}`);\n }\n\n const match: boolean = JSON.stringify(keyTypeArray) === JSON.stringify(keyTypes);\n if (!match) {\n logger.error('Key Type Array Mismatch', { keyTypeArray, thisKeyTypes: keyTypes });\n throw new Error(`Item does not have the correct key types. Expected [${keyTypes.join(', ')}], but got [${keyTypeArray.join(', ')}]`);\n }\n return item;\n};\n\nexport const isPriItem = <\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 item: Item<S, L1, L2, L3, L4, L5>,\n): item is Item<S> & { key: PriKey<S> } => {\n return !!(item && item.key && isPriKey(item.key));\n};\n\nexport const isComItem = <\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 item: Item<S, L1, L2, L3, L4, L5>,\n): item is Item<S, L1, L2, L3, L4, L5> & { key: ComKey<S, L1, L2, L3, L4, L5> } => {\n return !!(item && item.key && isComKey(item.key));\n};"],"names":["LibLogger","Logging","getLogger","logger","get","Dictionary","set","key","item","trace","hashedKey","hashFunction","map","delete","keys","Object","JSON","parse","values","includesKey","includes","clone","clonedMap","assign","_define_property","stringify","isItemKeyEqual","a","b","isComKey","isComKeyEqual","isPriKey","isPriKeyEqual","pk","kt","isLocKeyEqual","lk","loc","length","i","isItemKey","undefined","isLocKey","generateKeyArray","comKey","push","locKeys","constructPriKey","pri","cPK","toKeyTypeArray","ik","ck","l","abbrevIK","join","abbrevLKA","keyArray","primaryType","itemKeyToLocKeyArray","lka","ikToLKA","locKeyArrayToItemKey","priKey","locs","slice","Error","isValidPriKey","valid","isValidLocKey","isValidLocKeyArray","every","isValidComKey","isValidItemKey","lkaToIK","IFactory","addRef","name","refName","refs","addDefaultEvents","events","now","Date","created","at","updated","deleted","addEvent","by","addProp","value","addProps","props","deepmerge","toItem","AItemService","pkType","parentService","getPkType","getKeyTypes","keyTypes","concat","isCondition","condition","column","Array","isArray","operator","IQFactory","orderBy","field","direction","query","agg","aggs","event","conditions","compoundType","compoundCondition","limit","offset","all","iqFactory","toQuery","queryToParams","params","dateTimeReviver","parsedDate","DateTime","fromISO","isValid","toJSDate","paramsToQuery","Number","isRefQueryMatch","refKey","queryRef","references","debug","itemRef","isCompoundConditionQueryMatch","queryCondition","isConditionQueryMatch","some","propKey","itemProp","result","isAggQueryMatch","aggKey","aggQuery","aggItem","isQueryMatch","isEventQueryMatch","eventKey","eventQuery","itemEvent","start","getTime","end","queryEvent","abbrevQuery","abbrev","ref","abbrevRef","abbrevCompoundCondition","abbrevAgg","abbrevCondition","validatePKForItem","error","keyTypeArray","validatePK","input","validateKeys","match","thisKeyTypes","isPriItem","isComItem"],"mappings":"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"}
|
package/dist/item/IUtils.d.ts
CHANGED
|
@@ -1,6 +1,10 @@
|
|
|
1
1
|
import { Item } from '../items';
|
|
2
|
-
import { AllItemTypeArrays } from '../keys';
|
|
2
|
+
import { AllItemTypeArrays, ComKey, PriKey } from '../keys';
|
|
3
3
|
export declare const validatePK: <S extends string, L1 extends string = never, L2 extends string = never, L3 extends string = never, L4 extends string = never, L5 extends string = never>(input: Item<S, L1, L2, L3, L4, L5> | Item<S, L1, L2, L3, L4, L5>[], pkType: S) => Item<S, L1, L2, L3, L4, L5> | Item<S, L1, L2, L3, L4, L5>[];
|
|
4
4
|
export declare const validateKeys: <S extends string, L1 extends string = never, L2 extends string = never, L3 extends string = never, L4 extends string = never, L5 extends string = never>(item: Item<S, L1, L2, L3, L4, L5>, keyTypes: AllItemTypeArrays<S, L1, L2, L3, L4, L5>) => Item<S, L1, L2, L3, L4, L5>;
|
|
5
|
-
export declare const isPriItem: <S extends string, L1 extends string = never, L2 extends string = never, L3 extends string = never, L4 extends string = never, L5 extends string = never>(item: Item<S, L1, L2, L3, L4, L5>) => item is Item<S
|
|
6
|
-
|
|
5
|
+
export declare const isPriItem: <S extends string, L1 extends string = never, L2 extends string = never, L3 extends string = never, L4 extends string = never, L5 extends string = never>(item: Item<S, L1, L2, L3, L4, L5>) => item is Item<S> & {
|
|
6
|
+
key: PriKey<S>;
|
|
7
|
+
};
|
|
8
|
+
export declare const isComItem: <S extends string, L1 extends string = never, L2 extends string = never, L3 extends string = never, L4 extends string = never, L5 extends string = never>(item: Item<S, L1, L2, L3, L4, L5>) => item is Item<S, L1, L2, L3, L4, L5> & {
|
|
9
|
+
key: ComKey<S, L1, L2, L3, L4, L5>;
|
|
10
|
+
};
|
package/dist/items.d.ts
CHANGED
|
@@ -5,9 +5,6 @@ export type RecursivePartial<T> = {
|
|
|
5
5
|
export type Identified<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
|
key: ComKey<S, L1, L2, L3, L4, L5> | PriKey<S>;
|
|
7
7
|
};
|
|
8
|
-
export type Propertied = {
|
|
9
|
-
[key: string]: any;
|
|
10
|
-
};
|
|
11
8
|
/**
|
|
12
9
|
* This is a generic item event, and it's designed to make sure we have the ability to define not just
|
|
13
10
|
* the required fields, but also the optional fields.
|
|
@@ -32,20 +29,31 @@ export interface Deletable extends Partial<Evented> {
|
|
|
32
29
|
deleted: ItemEvent;
|
|
33
30
|
}
|
|
34
31
|
export type ManagedEvents = Timestamped & Deletable;
|
|
35
|
-
export type ItemProperties<S extends string, L1 extends string = never, L2 extends string = never, L3 extends string = never, L4 extends string = never, L5 extends string = never> = Omit<Item<S, L1, L2, L3, L4, L5>, 'events' | 'key'> & {
|
|
36
|
-
events?: Evented;
|
|
37
|
-
};
|
|
38
|
-
export type TypesProperties<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> = Omit<V, 'events' | 'key'> & {
|
|
39
|
-
events?: Evented;
|
|
40
|
-
};
|
|
41
32
|
export type References = Record<string, ComKey<string, string | never, string | never, string | never, string | never, string | never> | PriKey<string>>;
|
|
42
33
|
export type ReferenceItem<S extends string, L1 extends string = never, L2 extends string = never, L3 extends string = never, L4 extends string = never, L5 extends string = never> = {
|
|
43
34
|
key: ComKey<S, L1, L2, L3, L4, L5> | PriKey<S>;
|
|
44
35
|
item: Item<S, L1, L2, L3, L4, L5>;
|
|
45
36
|
};
|
|
46
37
|
export type ReferenceItems = Record<string, ReferenceItem<string, string | never, string | never, string | never, string | never, string | never>>;
|
|
47
|
-
export interface Item<S extends string = never, L1 extends string = never, L2 extends string = never, L3 extends string = never, L4 extends string = never, L5 extends string = never> extends Identified<S, L1, L2, L3, L4, L5
|
|
38
|
+
export interface Item<S extends string = never, L1 extends string = never, L2 extends string = never, L3 extends string = never, L4 extends string = never, L5 extends string = never> extends Identified<S, L1, L2, L3, L4, L5> {
|
|
48
39
|
events: ManagedEvents & Evented;
|
|
49
40
|
aggs?: ReferenceItems;
|
|
50
41
|
refs?: References;
|
|
42
|
+
[key: string]: any;
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Interface for properties that can be added to items
|
|
46
|
+
*/
|
|
47
|
+
export interface Propertied {
|
|
48
|
+
name: string;
|
|
49
|
+
value: number;
|
|
51
50
|
}
|
|
51
|
+
/**
|
|
52
|
+
* Type for item properties without the key - equivalent to Partial<Item> without the key
|
|
53
|
+
*/
|
|
54
|
+
export type ItemProperties<S extends string = never, L1 extends string = never, L2 extends string = never, L3 extends string = never, L4 extends string = never, L5 extends string = never> = Partial<Omit<Item<S, L1, L2, L3, L4, L5>, 'key'>>;
|
|
55
|
+
/**
|
|
56
|
+
* Type for item properties without the key - equivalent to Partial<Item> without the key
|
|
57
|
+
* This is an alias for ItemProperties for backward compatibility
|
|
58
|
+
*/
|
|
59
|
+
export type TypesProperties<S extends string = never, L1 extends string = never, L2 extends string = never, L3 extends string = never, L4 extends string = never, L5 extends string = never> = Partial<Omit<Item<S, L1, L2, L3, L4, L5>, 'key'>>;
|
package/dist/key/KUtils.d.ts
CHANGED
|
@@ -15,17 +15,17 @@ export declare const abbrevIK: <S extends string, L1 extends string = never, L2
|
|
|
15
15
|
export declare const abbrevLKA: <L1 extends string, L2 extends string = never, L3 extends string = never, L4 extends string = never, L5 extends string = never>(keyArray: Array<LocKey<L1 | L2 | L3 | L4 | L5>> | null) => string;
|
|
16
16
|
export declare const primaryType: <S extends string, L1 extends string = never, L2 extends string = never, L3 extends string = never, L4 extends string = never, L5 extends string = never>(ik: ComKey<S, L1, L2, L3, L4, L5> | PriKey<S>) => string;
|
|
17
17
|
/**
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
18
|
+
*
|
|
19
|
+
* @param ik ItemKey to be used as a basis for a location
|
|
20
|
+
* @returns
|
|
21
|
+
*/
|
|
22
22
|
export declare const itemKeyToLocKeyArray: <S extends string, L1 extends string = never, L2 extends string = never, L3 extends string = never, L4 extends string = never, L5 extends string = never>(ik: PriKey<S> | ComKey<S, L1, L2, L3, L4, L5>) => LocKeyArray<S, L1, L2, L3, L4>;
|
|
23
23
|
export declare const ikToLKA: <S extends string, L1 extends string = never, L2 extends string = never, L3 extends string = never, L4 extends string = never, L5 extends string = never>(ik: PriKey<S> | ComKey<S, L1, L2, L3, L4, L5>) => LocKeyArray<S, L1, L2, L3, L4>;
|
|
24
24
|
/**
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
25
|
+
* Sometimes you need to take a location key array and convert it to the item key that points to the containing item.
|
|
26
|
+
* @param lka A location key array
|
|
27
|
+
* @returns An item key corresponding to the containing item this location refers to.
|
|
28
|
+
*/
|
|
29
29
|
export declare const locKeyArrayToItemKey: <L1 extends string, L2 extends string = never, L3 extends string = never, L4 extends string = never, L5 extends string = never>(lka: LocKeyArray<L1, L2, L3, L4, L5>) => PriKey<L1> | ComKey<L1, L2, L3, L4, L5>;
|
|
30
30
|
export declare const isValidPriKey: <S extends string>(key: PriKey<S>) => boolean;
|
|
31
31
|
export declare const isValidLocKey: <L1 extends string, L2 extends string = never, L3 extends string = never, L4 extends string = never, L5 extends string = never>(key: LocKey<L1 | L2 | L3 | L4 | L5>) => boolean;
|