@fjell/core 4.2.12

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.
Files changed (52) hide show
  1. package/LICENSE +202 -0
  2. package/dist/src/AItemService.d.ts +8 -0
  3. package/dist/src/AItemService.js +21 -0
  4. package/dist/src/AItemService.js.map +1 -0
  5. package/dist/src/dictionary.d.ts +16 -0
  6. package/dist/src/dictionary.js +44 -0
  7. package/dist/src/dictionary.js.map +1 -0
  8. package/dist/src/index.d.ts +11 -0
  9. package/dist/src/index.js +12 -0
  10. package/dist/src/index.js.map +1 -0
  11. package/dist/src/item/IFactory.d.ts +16 -0
  12. package/dist/src/item/IFactory.js +64 -0
  13. package/dist/src/item/IFactory.js.map +1 -0
  14. package/dist/src/item/IQFactory.d.ts +23 -0
  15. package/dist/src/item/IQFactory.js +129 -0
  16. package/dist/src/item/IQFactory.js.map +1 -0
  17. package/dist/src/item/IQUtils.d.ts +35 -0
  18. package/dist/src/item/IQUtils.js +278 -0
  19. package/dist/src/item/IQUtils.js.map +1 -0
  20. package/dist/src/item/IUtils.d.ts +6 -0
  21. package/dist/src/item/IUtils.js +68 -0
  22. package/dist/src/item/IUtils.js.map +1 -0
  23. package/dist/src/item/ItemQuery.d.ts +62 -0
  24. package/dist/src/item/ItemQuery.js +10 -0
  25. package/dist/src/item/ItemQuery.js.map +1 -0
  26. package/dist/src/items.d.ts +51 -0
  27. package/dist/src/items.js +4 -0
  28. package/dist/src/items.js.map +1 -0
  29. package/dist/src/key/KUtils.d.ts +35 -0
  30. package/dist/src/key/KUtils.js +225 -0
  31. package/dist/src/key/KUtils.js.map +1 -0
  32. package/dist/src/keys.d.ts +66 -0
  33. package/dist/src/keys.js +5 -0
  34. package/dist/src/keys.js.map +1 -0
  35. package/dist/src/logger.d.ts +2 -0
  36. package/dist/src/logger.js +4 -0
  37. package/dist/src/logger.js.map +1 -0
  38. package/dist/tsconfig.tsbuildinfo +1 -0
  39. package/eslint.config.mjs +70 -0
  40. package/package.json +40 -0
  41. package/src/AItemService.ts +38 -0
  42. package/src/dictionary.ts +54 -0
  43. package/src/index.ts +13 -0
  44. package/src/item/IFactory.ts +122 -0
  45. package/src/item/IQFactory.ts +163 -0
  46. package/src/item/IQUtils.ts +360 -0
  47. package/src/item/IUtils.ts +99 -0
  48. package/src/item/ItemQuery.ts +87 -0
  49. package/src/items.ts +102 -0
  50. package/src/key/KUtils.ts +347 -0
  51. package/src/keys.ts +95 -0
  52. package/src/logger.ts +5 -0
@@ -0,0 +1,225 @@
1
+ import LibLogger from "../logger";
2
+ const logger = LibLogger.get('KUtils');
3
+ export const isItemKeyEqual = (a, b) => {
4
+ logger.trace('isKeyEqual', { a, b });
5
+ if (isComKey(a) && isComKey(b)) {
6
+ return isComKeyEqual(a, b);
7
+ }
8
+ else if (isPriKey(a) && isPriKey(b)) {
9
+ if (isComKey(a) || isComKey(b)) {
10
+ return false;
11
+ }
12
+ else {
13
+ return isPriKeyEqual(a, b);
14
+ }
15
+ }
16
+ else {
17
+ return false;
18
+ }
19
+ };
20
+ export const isPriKeyEqual = (a, b) => {
21
+ logger.trace('isPriKeyEqual', { a, b });
22
+ return a && b && a.pk === b.pk && a.kt === b.kt;
23
+ };
24
+ export const isLocKeyEqual = (a, b) => {
25
+ logger.trace('isLocKeyEqual', { a, b });
26
+ return a && b && a.lk === b.lk && a.kt === b.kt;
27
+ };
28
+ export const isComKeyEqual = (a, b) => {
29
+ logger.trace('isComKeyEqual', { a, b });
30
+ if (a && b && isPriKeyEqual({ kt: a.kt, pk: a.pk }, { kt: b.kt, pk: b.pk })) {
31
+ if (a.loc.length === b.loc.length) {
32
+ for (let i = 0; i < a.loc.length; i++) {
33
+ if (!isLocKeyEqual(a.loc[i], b.loc[i])) {
34
+ return false;
35
+ }
36
+ }
37
+ return true;
38
+ }
39
+ else {
40
+ return false;
41
+ }
42
+ }
43
+ else {
44
+ return false;
45
+ }
46
+ };
47
+ export const isItemKey = (key) => {
48
+ logger.trace('isItemKey', { key });
49
+ return key !== undefined && (isComKey(key) || isPriKey(key));
50
+ };
51
+ export const isComKey = (key) => {
52
+ logger.trace('isComKey', { key });
53
+ return key !== undefined &&
54
+ (key.pk !== undefined && key.kt !== undefined) && (key.loc !== undefined && key.loc.length > 0);
55
+ };
56
+ export const isPriKey = (key) => {
57
+ logger.trace('isPriKey', { key });
58
+ return key !== undefined &&
59
+ (key.pk !== undefined && key.kt !== undefined) && (key.loc === undefined || key.loc.length === 0);
60
+ };
61
+ export const isLocKey = (key) => {
62
+ logger.trace('isLocKey', { key });
63
+ return key !== undefined && (key.lk !== undefined && key.kt !== undefined);
64
+ };
65
+ export const generateKeyArray = (key) => {
66
+ logger.trace('generateKeyArray', { key });
67
+ const keys = [];
68
+ if (isComKey(key) || isPriKey(key)) {
69
+ // console.log('it is an item key');
70
+ if (isComKey(key)) {
71
+ // console.log('it is a composite key');
72
+ const comKey = key;
73
+ keys.push({ pk: comKey.pk, kt: comKey.kt });
74
+ for (let i = 0; i < comKey.loc.length; i++) {
75
+ keys.push(comKey.loc[i]);
76
+ }
77
+ }
78
+ else {
79
+ keys.push(key);
80
+ }
81
+ }
82
+ else {
83
+ // console.log('is is an array, length: ' + key.length);
84
+ const locKeys = key;
85
+ for (let i = 0; i < locKeys.length; i++) {
86
+ // console.log('Pushing a key');
87
+ keys.push(locKeys[i]);
88
+ }
89
+ }
90
+ return keys;
91
+ };
92
+ // TODO: Exactly the same as in ContainedItemLib
93
+ export const constructPriKey = (pk, kt) => {
94
+ logger.trace('constructPriKey', { pk, kt });
95
+ let pri;
96
+ if (typeof pk === 'string') {
97
+ pri = { kt: kt, pk: pk };
98
+ }
99
+ else {
100
+ pri = pk;
101
+ }
102
+ return pri;
103
+ };
104
+ // TODO: Exactly the same as in ContainedItemLib
105
+ export const cPK = constructPriKey;
106
+ export const toKeyTypeArray = (ik) => {
107
+ logger.trace('toKeyTypeArray', { ik });
108
+ if (isComKey(ik)) {
109
+ const ck = ik;
110
+ return [ck.kt, ...ck.loc.map(l => l.kt)];
111
+ }
112
+ else {
113
+ return [ik.kt];
114
+ }
115
+ };
116
+ export const abbrevIK = (ik) => {
117
+ logger.trace('abbrevIK', { ik });
118
+ if (ik) {
119
+ if (isComKey(ik)) {
120
+ const ck = ik;
121
+ return `${ck.kt}:${ck.pk}:${ck.loc.map(l => `${l.kt}:${l.lk}`).join(',')}`;
122
+ }
123
+ else {
124
+ return `${ik.kt}:${ik.pk}`;
125
+ }
126
+ }
127
+ else {
128
+ return 'null IK';
129
+ }
130
+ };
131
+ export const abbrevLKA = (keyArray) => {
132
+ logger.trace('abbrevLKA', { keyArray });
133
+ if (keyArray === undefined || keyArray === null) {
134
+ return 'null LKA';
135
+ }
136
+ else {
137
+ return keyArray.map(key => {
138
+ if (key) {
139
+ return `${key.kt}:${key.lk}`;
140
+ }
141
+ else {
142
+ return key;
143
+ }
144
+ }).join(',');
145
+ }
146
+ };
147
+ export const primaryType = (ik) => {
148
+ logger.trace('primaryType', { ik });
149
+ if (isComKey(ik)) {
150
+ return ik.kt;
151
+ }
152
+ else {
153
+ return ik.kt;
154
+ }
155
+ };
156
+ /**
157
+ *
158
+ * @param ik ItemKey to be used as a basis for a location
159
+ * @returns
160
+ */
161
+ export const itemKeyToLocKeyArray = (ik) => {
162
+ logger.trace('itemKeyToLocKeyArray', { ik: abbrevIK(ik) });
163
+ let lka = [];
164
+ if (isComKey(ik)) {
165
+ const ck = ik;
166
+ // @ts-expect-error
167
+ lka = [{ kt: ck.kt, lk: ck.pk }, ...ck.loc];
168
+ }
169
+ else {
170
+ const pk = ik;
171
+ // @ts-expect-error
172
+ lka = [{ kt: pk.kt, lk: pk.pk }];
173
+ }
174
+ logger.trace('itemKeyToLocKeyArray Results', { ik: abbrevIK(ik), lka: abbrevLKA(lka) });
175
+ return lka;
176
+ };
177
+ export const ikToLKA = itemKeyToLocKeyArray;
178
+ /**
179
+ * Sometimes you need to take a location key array and convert it to the item key that points to the containing item.
180
+ * @param lka A location key array
181
+ * @returns An item key corresponding to the containing item this location refers to.
182
+ */
183
+ export const locKeyArrayToItemKey = (lka) => {
184
+ // @ts-expect-error
185
+ logger.trace('locKeyArrayToItemKey', { lka: abbrevLKA(lka) });
186
+ if (lka.length === 1) {
187
+ const priKey = cPK(lka[0].lk, lka[0].kt);
188
+ return priKey;
189
+ }
190
+ else {
191
+ const locs = lka.slice(1);
192
+ // @ts-expect-error
193
+ const priKey = cPK(lka[0].lk, lka[0].kt);
194
+ const comKey = { kt: priKey.kt, pk: priKey.pk, loc: locs };
195
+ return comKey;
196
+ }
197
+ };
198
+ // TODO: This is annoying that we have to check for '' and 'null'
199
+ export const isValidPriKey = (key) => {
200
+ const valid = (key !== undefined && key !== null)
201
+ && (key.pk !== undefined && key.pk !== null && key.pk !== '' && key.pk !== 'null')
202
+ && (key.kt !== undefined && key.kt !== null && key.kt !== '' && key.kt !== 'null');
203
+ return valid;
204
+ };
205
+ // TODO: This is annoying that we have to check for '' and 'null'
206
+ export const isValidLocKey = (key) => {
207
+ const valid = (key !== undefined && key !== null)
208
+ && (key.lk !== undefined && key.lk !== null && key.lk !== '' && key.lk !== 'null')
209
+ && (key.kt !== undefined && key.kt !== null && key.kt !== '' && key.kt !== 'null');
210
+ return valid;
211
+ };
212
+ export const isValidLocKeyArray = (keyArray) => {
213
+ return (keyArray !== undefined && keyArray !== null) && keyArray.every(isValidLocKey);
214
+ };
215
+ export const isValidComKey = (key) => {
216
+ return (key !== undefined
217
+ // @ts-expect-error
218
+ && key !== null) && isValidPriKey(key) && isValidLocKeyArray(key.loc);
219
+ };
220
+ export const isValidItemKey = (key) => {
221
+ return (isComKey(key) &&
222
+ isValidComKey(key)) || (isPriKey(key) && isValidPriKey(key));
223
+ };
224
+ export const lkaToIK = locKeyArrayToItemKey;
225
+ //# sourceMappingURL=KUtils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"KUtils.js","sourceRoot":"","sources":["../../../src/key/KUtils.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,66 @@
1
+ export type UUID = `${string}-${string}-${string}-${string}-${string}`;
2
+ export interface ComKey<S extends string, L1 extends string = never, L2 extends string = never, L3 extends string = never, L4 extends string = never, L5 extends string = never> {
3
+ readonly kt: S;
4
+ readonly pk: UUID | string;
5
+ readonly loc: LocKeyArray<L1, L2, L3, L4, L5>;
6
+ }
7
+ export interface PriKey<S extends string> {
8
+ readonly kt: S;
9
+ readonly pk: UUID | string;
10
+ }
11
+ export interface LocKey<L extends string> {
12
+ readonly kt: L;
13
+ readonly lk: UUID | string;
14
+ }
15
+ export type LocKeyArray<L1 extends string = never, L2 extends string = never, L3 extends string = never, L4 extends string = never, L5 extends string = never> = ([L5] extends [never] ? ([L4] extends [never] ? ([L3] extends [never] ? ([L2] extends [never] ? ([L1] extends [never] ? [
16
+ ] | never : [
17
+ LocKey<L1>
18
+ ]) : [
19
+ LocKey<L1>,
20
+ LocKey<L2>
21
+ ]) : [
22
+ LocKey<L1>,
23
+ LocKey<L2>,
24
+ LocKey<L3>
25
+ ]) : [
26
+ LocKey<L1>,
27
+ LocKey<L2>,
28
+ LocKey<L3>,
29
+ LocKey<L4>
30
+ ]) : [
31
+ LocKey<L1>,
32
+ LocKey<L2>,
33
+ LocKey<L3>,
34
+ LocKey<L4>,
35
+ LocKey<L5>
36
+ ]);
37
+ export type ItemTypeArray<S extends string, L1 extends string = never, L2 extends string = never, L3 extends string = never, L4 extends string = never, L5 extends string = never> = ([L5] extends [never] ? ([L4] extends [never] ? ([L3] extends [never] ? ([L2] extends [never] ? ([L1] extends [never] ? [
38
+ S
39
+ ] : [
40
+ S,
41
+ L1
42
+ ]) : [
43
+ S,
44
+ L1,
45
+ L2
46
+ ]) : [
47
+ S,
48
+ L1,
49
+ L2,
50
+ L3
51
+ ]) : [
52
+ S,
53
+ L1,
54
+ L2,
55
+ L3,
56
+ L4
57
+ ]) : [
58
+ S,
59
+ L1,
60
+ L2,
61
+ L3,
62
+ L4,
63
+ L5
64
+ ]);
65
+ export type AllItemTypeArrays<S extends string, L1 extends string = never, L2 extends string = never, L3 extends string = never, L4 extends string = never, L5 extends string = never> = readonly [S] | readonly [S, L1] | readonly [S, L1, L2] | readonly [S, L1, L2, L3] | readonly [S, L1, L2, L3, L4] | readonly [S, L1, L2, L3, L4, L5];
66
+ export type AllLocTypeArrays<L1 extends string = never, L2 extends string = never, L3 extends string = never, L4 extends string = never, L5 extends string = never> = readonly [] | readonly [L1] | readonly [L1, L2] | readonly [L1, L2, L3] | readonly [L1, L2, L3, L4] | readonly [L1, L2, L3, L4, L5];
@@ -0,0 +1,5 @@
1
+ ;
2
+ ;
3
+ ;
4
+ export {};
5
+ //# sourceMappingURL=keys.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"keys.js","sourceRoot":"","sources":["../../src/keys.ts"],"names":[],"mappings":"AAcC,CAAC;AAOD,CAAC;AAOD,CAAC"}
@@ -0,0 +1,2 @@
1
+ declare const LibLogger: import("@fjell/logging").Logger;
2
+ export default LibLogger;
@@ -0,0 +1,4 @@
1
+ import Logging from '@fjell/logging';
2
+ const LibLogger = Logging.getLogger('@fjellproject/core');
3
+ export default LibLogger;
4
+ //# sourceMappingURL=logger.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/logger.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,MAAM,gBAAgB,CAAC;AAErC,MAAM,SAAS,GAAG,OAAO,CAAC,SAAS,CAAC,oBAAoB,CAAC,CAAC;AAE1D,eAAe,SAAS,CAAC"}
@@ -0,0 +1 @@
1
+ {"root":["../src/AItemService.ts","../src/dictionary.ts","../src/index.ts","../src/items.ts","../src/keys.ts","../src/logger.ts","../src/item/IFactory.ts","../src/item/IQFactory.ts","../src/item/IQUtils.ts","../src/item/IUtils.ts","../src/item/ItemQuery.ts","../src/key/KUtils.ts","../tests/AItemService.test.ts","../tests/dictionary.test.ts","../tests/index.test.ts","../tests/item/IFactory.test.ts","../tests/item/IQFactory.test.ts","../tests/item/IQUtils.test.ts","../tests/item/IUtils.test.ts","../tests/item/ItemQuery.test.ts","../tests/key/KUtils.test.ts"],"version":"5.7.3"}
@@ -0,0 +1,70 @@
1
+ import typescriptEslint from "@typescript-eslint/eslint-plugin";
2
+ import tsParser from "@typescript-eslint/parser";
3
+ import path from "node:path";
4
+ import { fileURLToPath } from "node:url";
5
+ import js from "@eslint/js";
6
+ import { FlatCompat } from "@eslint/eslintrc";
7
+
8
+ const __filename = fileURLToPath(import.meta.url);
9
+ const __dirname = path.dirname(__filename);
10
+ const compat = new FlatCompat({
11
+ baseDirectory: __dirname,
12
+ recommendedConfig: js.configs.recommended,
13
+ allConfig: js.configs.all
14
+ });
15
+
16
+ export default [{
17
+ ignores: ["**/dist", "**/node_modules"],
18
+ }, ...compat.extends("plugin:@typescript-eslint/recommended"), {
19
+ plugins: {
20
+ "@typescript-eslint": typescriptEslint,
21
+ },
22
+
23
+ languageOptions: {
24
+ parser: tsParser,
25
+ },
26
+
27
+ rules: {
28
+ "@typescript-eslint/no-unused-expressions": "off",
29
+ "no-console": 0,
30
+ "no-unused-vars": "off",
31
+
32
+ "max-len": ["error", {
33
+ code: 120,
34
+ }],
35
+
36
+ "max-depth": ["error", 4],
37
+ "max-params": ["error", 4],
38
+ "max-lines": ["error", 500],
39
+
40
+ "no-multiple-empty-lines": ["error", {
41
+ max: 1,
42
+ maxEOF: 1,
43
+ }],
44
+
45
+ "no-trailing-spaces": ["error", {
46
+ skipBlankLines: true,
47
+ }],
48
+
49
+ indent: ["error", 2, {
50
+ SwitchCase: 1,
51
+ }],
52
+
53
+ "sort-imports": ["error", {
54
+ ignoreCase: true,
55
+ ignoreDeclarationSort: true,
56
+ ignoreMemberSort: false,
57
+ memberSyntaxSortOrder: ["none", "all", "multiple", "single"],
58
+ }],
59
+
60
+ "no-var": "error",
61
+ "no-undefined": "error",
62
+ "@typescript-eslint/no-unused-vars": "error",
63
+ "@typescript-eslint/ban-ts-comment": "off",
64
+ "@typescript-eslint/no-explicit-any": "off",
65
+
66
+ "no-restricted-imports": ["error", {
67
+ patterns: ["..*", "src/*"],
68
+ }],
69
+ },
70
+ }];
package/package.json ADDED
@@ -0,0 +1,40 @@
1
+ {
2
+ "name": "@fjell/core",
3
+ "description": "Core Items for Fjell",
4
+ "version": "4.2.12",
5
+ "license": "Apache-2.0",
6
+ "main": "./dist/src/index.js",
7
+ "type": "module",
8
+ "scripts": {
9
+ "lint": "eslint .",
10
+ "dev": "concurrently \"tsc --watch\" \"tsc-alias -w\"",
11
+ "build": "yarn run lint && tsc --build --verbose --force && tsc-alias -p tsconfig.json",
12
+ "clean": "rimraf dist",
13
+ "test": "yarn run lint && yarn run jest --coverage"
14
+ },
15
+ "devDependencies": {
16
+ "@types/jest": "^29.5.14",
17
+ "@types/luxon": "^3",
18
+ "@typescript-eslint/eslint-plugin": "^8.24.1",
19
+ "@typescript-eslint/parser": "^8.24.1",
20
+ "concurrently": "^9.1.2",
21
+ "eslint": "^9.20.1",
22
+ "jest": "^29.7.0",
23
+ "rimraf": "^5.0.10",
24
+ "ts-jest": "^29.2.5",
25
+ "tsc-alias": "^1.8.10",
26
+ "typescript": "^5.7.3"
27
+ },
28
+ "dependencies": {
29
+ "@fjell/logging": "^4.2.11",
30
+ "@types/node": "^22.13.4",
31
+ "flatted": "^3.3.3",
32
+ "luxon": "^3.5.0",
33
+ "ts-node": "^10.9.2"
34
+ },
35
+ "packageManager": "yarn@4.6.0",
36
+ "repository": {
37
+ "type": "git",
38
+ "url": "git+https://github.com/getfjell/core.git"
39
+ }
40
+ }
@@ -0,0 +1,38 @@
1
+ import { AllItemTypeArrays } from "./keys";
2
+
3
+ export class AItemService<
4
+ S extends string,
5
+ L1 extends string,
6
+ L2 extends string = never,
7
+ L3 extends string = never,
8
+ L4 extends string = never,
9
+ L5 extends string = never
10
+ > {
11
+
12
+ private pkType: S;
13
+ private parentService: AItemService<L1, L2, L3, L4, L5, never> | null = null;
14
+
15
+ constructor(
16
+ pkType: S,
17
+ parentService?: AItemService<L1, L2, L3, L4, L5, never>,
18
+ ) {
19
+ this.pkType = pkType;
20
+ if (parentService) {
21
+ this.parentService = parentService;
22
+ }
23
+ }
24
+
25
+ public getPkType = (): S => {
26
+ return this.pkType;
27
+ }
28
+
29
+ public getKeyTypes = (): AllItemTypeArrays<S, L1, L2, L3, L4, L5> => {
30
+ let keyTypes: readonly string[] = [this.getPkType()];
31
+
32
+ if (this.parentService) {
33
+ keyTypes = keyTypes.concat(this.parentService.getKeyTypes());
34
+ }
35
+ return keyTypes as AllItemTypeArrays<S, L1, L2, L3, L4, L5>;
36
+ }
37
+
38
+ }
@@ -0,0 +1,54 @@
1
+ import LibLogger from "./logger";
2
+
3
+ const logger = LibLogger.get("Dictionary");
4
+
5
+ export class Dictionary<T, V> {
6
+ protected map: { [key: string]: V } = {}
7
+ protected hashFunction = (key: T) => JSON.stringify(key);
8
+
9
+ constructor(map?: { [key: string]: V }, hashFunction?: (key: T) => string) {
10
+ if (map) {
11
+ this.map = map
12
+ }
13
+ if (hashFunction) {
14
+ this.hashFunction = hashFunction
15
+ }
16
+ }
17
+
18
+ public set(key: T, item: V): void {
19
+ logger.trace('set', { key, item });
20
+ const hashedKey = this.hashFunction(key)
21
+ this.map[hashedKey] = item
22
+ }
23
+
24
+ public get(key: T): V | null {
25
+ logger.trace('get', { key });
26
+ const hashedKey = this.hashFunction(key)
27
+ return this.map[hashedKey] || null
28
+ }
29
+
30
+ public delete(key: T): void {
31
+ logger.trace('delete', { key });
32
+ const hashedKey = this.hashFunction(key)
33
+ delete this.map[hashedKey]
34
+ }
35
+
36
+ public keys(): T[] {
37
+ return Object.keys(this.map).map(key => JSON.parse(key))
38
+ }
39
+
40
+ public values(): V[] {
41
+ return Object.values(this.map)
42
+ }
43
+
44
+ public includesKey(key: T): boolean {
45
+ return Object.keys(this.map).includes(this.hashFunction(key))
46
+ }
47
+
48
+ public clone(): Dictionary<T, V> {
49
+ const clonedMap = Object.assign({}, this.map);
50
+
51
+ const clone = new Dictionary<T, V>(clonedMap, this.hashFunction)
52
+ return clone;
53
+ }
54
+ }
package/src/index.ts ADDED
@@ -0,0 +1,13 @@
1
+ export * from "./dictionary";
2
+ export * from "./keys";
3
+ export * from "./items";
4
+ export { IFactory } from "./item/IFactory";
5
+ export { AItemService } from "./AItemService";
6
+
7
+ export * from './key/KUtils';
8
+
9
+ export * from './item/IFactory';
10
+ export * from './item/IQFactory';
11
+ export * from './item/IQUtils';
12
+ export * from './item/IUtils';
13
+ export * from './item/ItemQuery';
@@ -0,0 +1,122 @@
1
+ import deepmerge from 'deepmerge';
2
+ import { Item } from '@/items';
3
+ import { primaryType } from '@/key/KUtils';
4
+ import { ComKey, PriKey } from '@/keys';
5
+
6
+ export class IFactory<
7
+ V extends Item<S, L1, L2, L3, L4, L5>,
8
+ S extends string,
9
+ L1 extends string = never,
10
+ L2 extends string = never,
11
+ L3 extends string = never,
12
+ L4 extends string = never,
13
+ L5 extends string = never> {
14
+ private item: any = {
15
+ };
16
+
17
+ public constructor(props: Record<string, any> = {}) {
18
+ this.item = deepmerge(this.item, props);
19
+ }
20
+
21
+ public addRef(i: Item<any, any|never, any|never, any|never, any|never, any|never>, name?: string) {
22
+ const ik: ComKey<any, any|never, any|never, any|never, any|never, any|never> | PriKey<any> = i.key;
23
+
24
+ const refName = name || primaryType(ik);
25
+ if (!this.item.refs) {
26
+ this.item.refs = {};
27
+ }
28
+ this.item.refs[refName] = ik;
29
+ return this;
30
+ }
31
+
32
+ public static addRef<
33
+ V extends Item<S, L1, L2, L3, L4, L5>,
34
+ S extends string,
35
+ L1 extends string = never,
36
+ L2 extends string = never,
37
+ L3 extends string = never,
38
+ L4 extends string = never,
39
+ L5 extends string = never
40
+ >(i: V, name?: string) {
41
+ return new IFactory<V, S, L1, L2, L3, L4, L5>().addRef(i, name);
42
+ }
43
+
44
+ public addDefaultEvents() {
45
+ if (!this.item.events) {
46
+ this.item.events = {};
47
+ }
48
+ const now = new Date();
49
+ if (!this.item.events.created) {
50
+ this.item.events.created = { at: now };
51
+ }
52
+ if (!this.item.events.updated) {
53
+ this.item.events.updated = { at: now };
54
+ }
55
+ if (!this.item.events.deleted) {
56
+ this.item.events.deleted = { at: null };
57
+ }
58
+ return this;
59
+ }
60
+
61
+ public addEvent(
62
+ name: string,
63
+ at: Date | null,
64
+ by?: ComKey<any, any|never, any|never, any|never, any|never, any|never> | PriKey<any>
65
+ ) {
66
+ if (!this.item.events) {
67
+ this.item.events = {};
68
+ }
69
+ this.item.events[name] = { at, by };
70
+ return this;
71
+ }
72
+
73
+ public static addEvent<
74
+ V extends Item<S, L1, L2, L3, L4, L5>,
75
+ S extends string,
76
+ L1 extends string = never,
77
+ L2 extends string = never,
78
+ L3 extends string = never,
79
+ L4 extends string = never,
80
+ L5 extends string = never
81
+ >(name: string, at: Date | null, by?: ComKey<S, L1, L2, L3, L4, L5> | PriKey<S>) {
82
+ return new IFactory<V, S, L1, L2, L3, L4, L5>().addEvent(name, at, by);
83
+ }
84
+
85
+ public addProp(name: string, value: string | number | boolean | Date) {
86
+ this.item[name] = value;
87
+ return this;
88
+ }
89
+
90
+ public static addProp<
91
+ V extends Item<S, L1, L2, L3, L4, L5>,
92
+ S extends string,
93
+ L1 extends string = never,
94
+ L2 extends string = never,
95
+ L3 extends string = never,
96
+ L4 extends string = never,
97
+ L5 extends string = never
98
+ >(name: string, value: string | number | boolean | Date) {
99
+ return new IFactory<V, S, L1, L2, L3, L4, L5>().addProp(name, value);
100
+ }
101
+
102
+ public addProps(props: Record<string, any>) {
103
+ this.item = deepmerge(this.item, props);
104
+ return this;
105
+ }
106
+
107
+ public static addProps<
108
+ V extends Item<S, L1, L2, L3, L4, L5>,
109
+ S extends string,
110
+ L1 extends string = never,
111
+ L2 extends string = never,
112
+ L3 extends string = never,
113
+ L4 extends string = never,
114
+ L5 extends string = never
115
+ >(props: Record<string, any>) {
116
+ return new IFactory<V, S, L1, L2, L3, L4, L5>().addProps(props);
117
+ }
118
+
119
+ toItem(): V {
120
+ return this.item as V;
121
+ }
122
+ }