@rentman/rm-core 8.1.6 → 8.1.8-dev1

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 (115) hide show
  1. package/changelog.md +923 -914
  2. package/dist/rm-core.js +18307 -11022
  3. package/dist/rm-core.min.js +1 -16
  4. package/dist/types/classes/ApiFormatter.d.ts +73 -66
  5. package/dist/types/classes/ApiRequestService.d.ts +18 -21
  6. package/dist/types/classes/ApiResponseProcessor.d.ts +29 -30
  7. package/dist/types/classes/CacheSyncer.d.ts +36 -0
  8. package/dist/types/classes/ChangesCompilation.d.ts +33 -36
  9. package/dist/types/classes/ChangesDelta.d.ts +61 -68
  10. package/dist/types/classes/ChangesDeltaBase.d.ts +76 -79
  11. package/dist/types/classes/ChangesProcessor.d.ts +40 -45
  12. package/dist/types/classes/CollectionEntryService.d.ts +23 -27
  13. package/dist/types/classes/CollectionResourceService.d.ts +6 -7
  14. package/dist/types/classes/ColumnCache.d.ts +21 -22
  15. package/dist/types/classes/ColumnExpansion.d.ts +21 -23
  16. package/dist/types/classes/ColumnHandler.d.ts +20 -22
  17. package/dist/types/classes/ColumnInfo.d.ts +14 -14
  18. package/dist/types/classes/ColumnSet.d.ts +37 -39
  19. package/dist/types/classes/ColumnSubsetCache.d.ts +14 -15
  20. package/dist/types/classes/ColumnUtil.d.ts +100 -101
  21. package/dist/types/classes/ConversionMapService.d.ts +25 -28
  22. package/dist/types/classes/CreateRequest.d.ts +17 -20
  23. package/dist/types/classes/CreatedChangesDelta.d.ts +17 -18
  24. package/dist/types/classes/InternalChangesDelta.d.ts +47 -51
  25. package/dist/types/classes/ItemCache.d.ts +27 -30
  26. package/dist/types/classes/ItemCreateService.d.ts +18 -25
  27. package/dist/types/classes/ItemEntryService.d.ts +32 -35
  28. package/dist/types/classes/KeyService.d.ts +18 -18
  29. package/dist/types/classes/LockService.d.ts +29 -32
  30. package/dist/types/classes/ModuleChangesCompilation.d.ts +18 -19
  31. package/dist/types/classes/ParentChangesDelta.d.ts +39 -47
  32. package/dist/types/classes/QueryColumnExtractor.d.ts +18 -20
  33. package/dist/types/classes/QueryContainsLocalIdParser.d.ts +15 -17
  34. package/dist/types/classes/QueryLinkedToParser.d.ts +15 -16
  35. package/dist/types/classes/QueryLocallyMatchableParser.d.ts +18 -19
  36. package/dist/types/classes/QueryMatcher.d.ts +18 -19
  37. package/dist/types/classes/QueryParser.d.ts +25 -26
  38. package/dist/types/classes/QueryParserBase.d.ts +20 -20
  39. package/dist/types/classes/QueryParserIdUpdater.d.ts +15 -16
  40. package/dist/types/classes/QueryService.d.ts +12 -13
  41. package/dist/types/classes/RequestBuffer.d.ts +24 -29
  42. package/dist/types/classes/RequestBufferManager.d.ts +20 -26
  43. package/dist/types/classes/RequestColumnExpansion.d.ts +15 -16
  44. package/dist/types/classes/SocketMessageHandler.d.ts +34 -43
  45. package/dist/types/classes/TemplateCache.d.ts +63 -70
  46. package/dist/types/classes/Util.d.ts +28 -31
  47. package/dist/types/classes/cache/AbstractCache.d.ts +95 -112
  48. package/dist/types/classes/cache/CachedQueryHandlerBase.d.ts +68 -75
  49. package/dist/types/classes/cache/ItemHandlerBase.d.ts +95 -106
  50. package/dist/types/classes/cache/server/ServerCache.d.ts +82 -94
  51. package/dist/types/classes/cache/server/ServerCachedQueryHandler.d.ts +25 -34
  52. package/dist/types/classes/cache/server/ServerItemHandler.d.ts +44 -53
  53. package/dist/types/classes/cache/transaction/TransactionCache.d.ts +319 -327
  54. package/dist/types/classes/cache/transaction/TransactionCachedQueryHandler.d.ts +31 -30
  55. package/dist/types/classes/cache/transaction/TransactionCollectionHandler.d.ts +24 -30
  56. package/dist/types/classes/cache/transaction/TransactionEventHandler.d.ts +21 -24
  57. package/dist/types/classes/cache/transaction/TransactionItemHandler.d.ts +89 -97
  58. package/dist/types/classes/cache/transaction/TransactionValidator.d.ts +33 -35
  59. package/dist/types/constants.d.ts +7 -7
  60. package/dist/types/core.d.ts +45 -51
  61. package/dist/types/factories/ApiResponseProcessorFactory.d.ts +6 -6
  62. package/dist/types/factories/CacheSyncerFactory.d.ts +10 -0
  63. package/dist/types/factories/ChangesCompilationFactory.d.ts +5 -6
  64. package/dist/types/factories/ChangesDeltaFactory.d.ts +13 -15
  65. package/dist/types/factories/ChangesProcessorFactory.d.ts +13 -19
  66. package/dist/types/factories/CollectionEntryFactory.d.ts +11 -14
  67. package/dist/types/factories/CollectionResourceFactory.d.ts +18 -22
  68. package/dist/types/factories/ColumnExpansionFactory.d.ts +7 -9
  69. package/dist/types/factories/ColumnInfoFactory.d.ts +7 -8
  70. package/dist/types/factories/ColumnSetFactory.d.ts +18 -20
  71. package/dist/types/factories/ColumnSubsetCacheFactory.d.ts +8 -9
  72. package/dist/types/factories/CreateRequestFactory.d.ts +9 -11
  73. package/dist/types/factories/ItemCacheFactory.d.ts +6 -8
  74. package/dist/types/factories/ItemEntryFactory.d.ts +12 -15
  75. package/dist/types/factories/ItemResourceFactory.d.ts +11 -14
  76. package/dist/types/factories/ModuleChangesCompilationFactory.d.ts +4 -5
  77. package/dist/types/factories/QueryMatcherFactory.d.ts +7 -8
  78. package/dist/types/factories/QueryParserFactory.d.ts +5 -6
  79. package/dist/types/factories/RequestColumnExpansionFactory.d.ts +8 -9
  80. package/dist/types/factories/TemplateFactory.d.ts +8 -11
  81. package/dist/types/factories/TransactionCacheFactory.d.ts +13 -15
  82. package/dist/types/index.d.ts +1 -7
  83. package/dist/types/interfaces/AbstractCacheDependencyInterface.d.ts +36 -43
  84. package/dist/types/interfaces/ApiRequestServiceInterface.d.ts +12 -12
  85. package/dist/types/interfaces/AuthInterface.d.ts +10 -10
  86. package/dist/types/interfaces/ErrorHandlerInterface.d.ts +5 -5
  87. package/dist/types/interfaces/ExceptionHandlerInterface.d.ts +3 -3
  88. package/dist/types/interfaces/LinkTreeServiceInterface.d.ts +4 -4
  89. package/dist/types/interfaces/PromiseLibraryInterface.d.ts +25 -25
  90. package/dist/types/interfaces/ServerCacheDependencyInterface.d.ts +5 -7
  91. package/dist/types/interfaces/SocketMessageInterface.d.ts +3 -3
  92. package/dist/types/interfaces/TransactionCollectionHandlerDependencyInterface.d.ts +17 -21
  93. package/dist/types/interfaces/TransactionItemHandlerDependencyInterface.d.ts +22 -27
  94. package/dist/types/internal.d.ts +104 -0
  95. package/dist/types/models/CachedQueryItem.d.ts +19 -0
  96. package/dist/types/models/CollectionEntry.d.ts +21 -24
  97. package/dist/types/models/CollectionOptions.d.ts +42 -24
  98. package/dist/types/models/CollectionResource.d.ts +87 -78
  99. package/dist/types/models/ItemEntry.d.ts +18 -19
  100. package/dist/types/models/ItemEntryOptions.d.ts +8 -8
  101. package/dist/types/models/ItemResource.d.ts +90 -88
  102. package/dist/types/models/Template.d.ts +11 -13
  103. package/dist/types/types/ItemTypesCollection.d.ts +343 -345
  104. package/dist/types/types/PromiseInterface.d.ts +2 -2
  105. package/package.json +48 -38
  106. package/readme.md +15 -15
  107. package/dist/types/classes/CollectionMatcherBase.d.ts +0 -22
  108. package/dist/types/classes/CollectionMatcherCachedCollectionProcessor.d.ts +0 -32
  109. package/dist/types/classes/cache/CollectionMatcherCachedQueryProcessor.d.ts +0 -36
  110. package/dist/types/classes/index.d.ts +0 -46
  111. package/dist/types/factories/CollectionMatcherFactory.d.ts +0 -19
  112. package/dist/types/factories/index.d.ts +0 -21
  113. package/dist/types/interfaces/index.d.ts +0 -11
  114. package/dist/types/models/index.d.ts +0 -7
  115. package/dist/types/types/index.d.ts +0 -2
@@ -1,112 +1,95 @@
1
- import { ApiEnumItemType } from '@rentman/backend-types';
2
- import { RmCore } from '../../core';
3
- import { AbstractCacheDependencyInterface } from '../../interfaces';
4
- import { ItemEntry } from '../../models';
5
- import { ApiRequestColumn, CollectionQuery, CollectionResourceParentIdMap, EntryParentNull, FieldMap, ItemIdConversionMap, PromiseInterface } from '../../types';
6
- import { ChangesDelta } from '../ChangesDelta';
7
- import { ChangesDeltaBase, ChangesDeltaResult } from '../ChangesDeltaBase';
8
- import { OnAfterCreateCallback } from '../ChangesProcessor';
9
- import { InternalChangesDelta } from '../InternalChangesDelta';
10
- import { ItemCache } from '../ItemCache';
11
- import { ParentChangesDelta } from '../ParentChangesDelta';
12
- import { CachedQueryItem } from './CachedQueryHandlerBase';
13
- import { ItemHandlerBase } from './ItemHandlerBase';
14
- import { ServerCache } from './server/ServerCache';
15
- import { ServerCachedQueryHandler } from './server/ServerCachedQueryHandler';
16
- import { ServerItemEntryChanges } from './server/ServerItemHandler';
17
- import { TransactionCache } from './transaction/TransactionCache';
18
- import { TransactionCachedQueryHandler } from './transaction/TransactionCachedQueryHandler';
19
- import { TransactionItemEntryChanges } from './transaction/TransactionItemHandler';
20
- import { TransactionValidatorFactory } from './transaction/TransactionValidator';
21
- export declare type TransactionOptions = {
22
- /**
23
- * @description
24
- * Sets the TransactionCache to 'transparent' mode, whenever {@link AbstractCache.createChild createChild} is called it will actually be called on the parent
25
- */
26
- transparent: boolean;
27
- };
28
- export declare abstract class AbstractCache {
29
- dependencies: AbstractCacheDependencyInterface;
30
- core: RmCore;
31
- children: TransactionCache[];
32
- readonly itemHandler: ItemHandlerBase;
33
- readonly cachedQueryHandler: TransactionCachedQueryHandler | ServerCachedQueryHandler;
34
- parent: AbstractCache | null;
35
- protected constructor(dependencies: AbstractCacheDependencyInterface, core: RmCore);
36
- abstract createChild(id?: string, validatorFactory?: TransactionValidatorFactory, options?: TransactionOptions): TransactionCache;
37
- onChildDestroy(cache: TransactionCache): void;
38
- /**
39
- * @description
40
- * Expands the items in the collections with the passed columns
41
- *
42
- * todo[limit] move to TransactionCache ?
43
- */
44
- abstract expandCollectionResources<ItemTypeType extends ApiEnumItemType>(itemType: ItemTypeType, collections: CollectionResourceParentIdMap<ItemTypeType>, newColumns: ApiRequestColumn[]): PromiseInterface<CollectionResourceParentIdMap>;
45
- /**
46
- * @description
47
- * Returns {@link ItemEntry ItemEntries} that fit the collection's query, copies over the collectionChanges on all transactions in the chain.
48
- */
49
- abstract getCollectionChangesRecursively<ItemTypeType extends ApiEnumItemType>(itemType: ItemTypeType, parsedQuery: CollectionQuery): CachedQueryItem<ItemTypeType> | undefined;
50
- /**
51
- * @description
52
- * Returns this transaction and all parents
53
- */
54
- getTransactionChain(): AbstractCache[];
55
- /**
56
- * @description
57
- * Returns the {@link TransactionItemHandler.entries ItemCache} of the transaction
58
- */
59
- getCurrentItemEntryCache(): ItemCache;
60
- abstract getServerCache(): ServerCache;
61
- abstract getLocalItemEntry(itemEntryId: ItemEntry['id']): ItemEntry | undefined;
62
- abstract getLocalItemEntryByItemId(itemType: ApiEnumItemType, itemId: ItemEntry['itemId']): ItemEntry | undefined;
63
- /**
64
- * @description
65
- * Applies changes from a child transaction to a parent
66
- */
67
- abstract applyChangesFromChild(transaction: TransactionCache, breakUpByParent?: boolean, onAfterCreateCallback?: OnAfterCreateCallback): PromiseInterface<ItemIdConversionMap>;
68
- /**
69
- * @description
70
- * Called by a parent transaction, propagates changes downwards to all child caches
71
- *
72
- * @remarks
73
- * - Should only be used by the core
74
- *
75
- * todo[cache] Should we refetch derived values just like in applyChangesDelta ?
76
- *
77
- * @internal
78
- */
79
- abstract applyChangesFromParent(parentChangesDelta: ParentChangesDelta, isCalledAfterSocketUpdate: boolean): void;
80
- abstract getParent<ItemTypeType extends ApiEnumItemType = any>(itemEntry: ItemEntry<ItemTypeType>, fromInitial?: boolean, providedFields?: FieldMap<ItemTypeType>): EntryParentNull;
81
- abstract getItemChangesRecursively(itemEntryId: ItemEntry['id'], copyFields?: boolean): FieldMap;
82
- abstract getLocalItemEntryChangesTuple(itemEntryId: ItemEntry['id']): any;
83
- /**
84
- * @description
85
- * Because the `itemChanges` object differs between the {@link ServerItemHandler.itemChanges ServerItemHandler} and the {@link TransactionItemHandler.itemChanges TransactionItemHandler} we need a function to normalise those values
86
- *
87
- * @remarks
88
- * - Should only be used by the core
89
- *
90
- * @internal
91
- */
92
- abstract getChangesFromItemChanges<ItemTypeType extends ApiEnumItemType = any>(changesObject: ServerItemEntryChanges<ItemTypeType> | TransactionItemEntryChanges<FieldMap<ItemTypeType>>): FieldMap<ItemTypeType>;
93
- abstract applyChangesDelta(changesDelta: ChangesDelta): PromiseInterface<ChangesDeltaResult>;
94
- protected getParentFromFields<ItemTypeType extends ApiEnumItemType = any>(itemEntry: ItemEntry<ItemTypeType>, fields: FieldMap<ItemTypeType>): EntryParentNull;
95
- /**
96
- * @description
97
- * Called by applyChangesDelta from ServerCache and TransactionCache. Applies creates, updates and moves, doesn't apply deletes
98
- *
99
- * @private
100
- */
101
- protected _applyChangesDelta(changesDelta: ChangesDelta | InternalChangesDelta): {
102
- result: ChangesDeltaResult;
103
- parentChangesDelta: ParentChangesDelta;
104
- matchingDelta: ParentChangesDelta;
105
- undoFunctions: Array<(changesDelta: InternalChangesDelta) => void>;
106
- };
107
- /**
108
- * @description
109
- * Ensures that for all updated items in the delta the required derived values are present
110
- */
111
- protected fetchUpdatedDerivedValuesFromDelta(changesDelta: ChangesDeltaBase): PromiseInterface<void>;
112
- }
1
+ import { ApiEnumItemType } from '@rentman/backend-types';
2
+ import { RmCore } from '../../core';
3
+ import { AbstractCacheDependencyInterface, ApiRequestColumn, CachedQueryItem, ChangesDelta, ChangesDeltaBase, ChangesDeltaResult, CollectionQuery, CollectionResourceParentIdMap, EntryParentNull, FieldMap, InternalChangesDelta, ItemCache, ItemEntry, ItemHandlerBase, ItemIdConversionMap, OnAfterCreateCallback, ParentChangesDelta, PromiseInterface, ServerCache, ServerCachedQueryHandler, ServerItemEntryChanges, TransactionCache, TransactionCachedQueryHandler, TransactionItemEntryChanges, TransactionValidatorFactory } from '../../internal';
4
+ export declare type TransactionOptions = {
5
+ /**
6
+ * @description
7
+ * Sets the TransactionCache to 'transparent' mode, whenever {@link AbstractCache.createChild createChild} is called it will actually be called on the parent
8
+ */
9
+ transparent: boolean;
10
+ };
11
+ export declare abstract class AbstractCache {
12
+ dependencies: AbstractCacheDependencyInterface;
13
+ core: RmCore;
14
+ children: TransactionCache[];
15
+ readonly itemHandler: ItemHandlerBase;
16
+ readonly cachedQueryHandler: TransactionCachedQueryHandler | ServerCachedQueryHandler;
17
+ parent: AbstractCache | null;
18
+ protected constructor(dependencies: AbstractCacheDependencyInterface, core: RmCore);
19
+ abstract createChild(id?: string, validatorFactory?: TransactionValidatorFactory, options?: TransactionOptions): TransactionCache;
20
+ onChildDestroy(cache: TransactionCache): void;
21
+ /**
22
+ * @description
23
+ * Expands the items in the collections with the passed columns
24
+ *
25
+ * todo[limit] move to TransactionCache ?
26
+ */
27
+ abstract expandCollectionResources<ItemTypeType extends ApiEnumItemType>(itemType: ItemTypeType, collections: CollectionResourceParentIdMap<ItemTypeType>, newColumns: ApiRequestColumn[]): PromiseInterface<CollectionResourceParentIdMap>;
28
+ /**
29
+ * @description
30
+ * Returns {@link ItemEntry ItemEntries} that fit the collection's query, copies over the collectionChanges on all transactions in the chain.
31
+ */
32
+ abstract getCollectionChangesRecursively<ItemTypeType extends ApiEnumItemType>(itemType: ItemTypeType, parsedQuery: CollectionQuery): CachedQueryItem<ItemTypeType> | undefined;
33
+ /**
34
+ * @description
35
+ * Returns this transaction and all parents
36
+ */
37
+ getTransactionChain(): AbstractCache[];
38
+ /**
39
+ * @description
40
+ * Returns the {@link TransactionItemHandler.entries ItemCache} of the transaction
41
+ */
42
+ getCurrentItemEntryCache(): ItemCache;
43
+ abstract getServerCache(): ServerCache;
44
+ abstract getLocalItemEntry(itemEntryId: ItemEntry['id']): ItemEntry | undefined;
45
+ abstract getLocalItemEntryByItemId(itemType: ApiEnumItemType, itemId: ItemEntry['itemId']): ItemEntry | undefined;
46
+ /**
47
+ * @description
48
+ * Applies changes from a child transaction to a parent
49
+ */
50
+ abstract applyChangesFromChild(transaction: TransactionCache, breakUpByParent?: boolean, onAfterCreateCallback?: OnAfterCreateCallback): PromiseInterface<ItemIdConversionMap>;
51
+ /**
52
+ * @description
53
+ * Called by a parent transaction, propagates changes downwards to all child caches
54
+ *
55
+ * @remarks
56
+ * - Should only be used by the core
57
+ *
58
+ * todo[cache] Should we refetch derived values just like in applyChangesDelta ?
59
+ *
60
+ * @internal
61
+ */
62
+ abstract applyChangesFromParent(parentChangesDelta: ParentChangesDelta, isCalledAfterSocketUpdate: boolean): void;
63
+ abstract getParent<ItemTypeType extends ApiEnumItemType = any>(itemEntry: ItemEntry<ItemTypeType>, fromInitial?: boolean, providedFields?: FieldMap<ItemTypeType>): EntryParentNull;
64
+ abstract getItemChangesRecursively(itemEntryId: ItemEntry['id'], copyFields?: boolean): FieldMap;
65
+ abstract getLocalItemEntryChangesTuple(itemEntryId: ItemEntry['id']): any;
66
+ /**
67
+ * @description
68
+ * Because the `itemChanges` object differs between the {@link ServerItemHandler.itemChanges ServerItemHandler} and the {@link TransactionItemHandler.itemChanges TransactionItemHandler} we need a function to normalise those values
69
+ *
70
+ * @remarks
71
+ * - Should only be used by the core
72
+ *
73
+ * @internal
74
+ */
75
+ abstract getChangesFromItemChanges<ItemTypeType extends ApiEnumItemType = any>(changesObject: ServerItemEntryChanges<ItemTypeType> | TransactionItemEntryChanges<FieldMap<ItemTypeType>>): FieldMap<ItemTypeType>;
76
+ abstract applyChangesDelta(changesDelta: ChangesDelta): PromiseInterface<ChangesDeltaResult>;
77
+ protected getParentFromFields<ItemTypeType extends ApiEnumItemType = any>(itemEntry: ItemEntry<ItemTypeType>, fields: FieldMap<ItemTypeType>): EntryParentNull;
78
+ /**
79
+ * @description
80
+ * Called by applyChangesDelta from ServerCache and TransactionCache. Applies creates, updates and moves, doesn't apply deletes
81
+ *
82
+ * @private
83
+ */
84
+ protected _applyChangesDelta(changesDelta: ChangesDelta | InternalChangesDelta): {
85
+ result: ChangesDeltaResult;
86
+ parentChangesDelta: ParentChangesDelta;
87
+ matchingDelta: ParentChangesDelta;
88
+ undoFunctions: Array<(changesDelta: InternalChangesDelta) => void>;
89
+ };
90
+ /**
91
+ * @description
92
+ * Ensures that for all updated items in the delta the required derived values are present
93
+ */
94
+ protected fetchUpdatedDerivedValuesFromDelta(changesDelta: ChangesDeltaBase): PromiseInterface<void>;
95
+ }
@@ -1,75 +1,68 @@
1
- import { ApiEnumItemType, ItemId } from '@rentman/backend-types';
2
- import { RequestColumnExpansionFactory } from '../../factories';
3
- import { PromiseLibraryInterface } from '../../interfaces';
4
- import { ItemEntry } from '../../models';
5
- import { CollectionOptions } from '../../models/CollectionOptions';
6
- import { ApiQuery, ApiRequestColumns, CollectionQuery, ParentIdMap, PromiseInterface } from '../../types';
7
- import { CollectionEntryService } from '../CollectionEntryService';
8
- import { ColumnSubsetCache } from '../ColumnSubsetCache';
9
- import { ColumnUtil } from '../ColumnUtil';
10
- import { AbstractCache } from './AbstractCache';
11
- export declare type CachedQueryItem<ItemTypeType extends ApiEnumItemType = any> = {
12
- itemType: ItemTypeType;
13
- query: CollectionQuery;
14
- items: Array<ItemEntry<ItemTypeType>>;
15
- requestColumns: ApiRequestColumns;
16
- promise: PromiseInterface<CachedQueryItem<ItemTypeType>>;
17
- resolve: () => void;
18
- reject: (reason: string) => void;
19
- };
20
- export declare abstract class CachedQueryHandlerBase {
21
- protected collectionEntryService: CollectionEntryService;
22
- protected columnUtil: ColumnUtil;
23
- protected requestColumnExpansionFactory: RequestColumnExpansionFactory;
24
- protected promiseService: PromiseLibraryInterface;
25
- protected transaction: AbstractCache;
26
- /**
27
- * @description
28
- * Items (per ItemType) that fit in a query
29
- *
30
- * @remark
31
- * Contains the requestColumns so that new items can include these columns (saving requests when they match)
32
- */
33
- cachedQueries: {
34
- [itemType: string]: {
35
- [queryString: string]: CachedQueryItem;
36
- };
37
- };
38
- protected constructor(collectionEntryService: CollectionEntryService, columnUtil: ColumnUtil, requestColumnExpansionFactory: RequestColumnExpansionFactory, promiseService: PromiseLibraryInterface, transaction: AbstractCache);
39
- setCachedQuery<ItemTypeType extends ApiEnumItemType>(itemType: ItemTypeType, parsedQuery: CollectionQuery, itemEntries: Array<ItemEntry<ItemTypeType>>, requestColumns: ApiRequestColumns): CachedQueryItem<ItemTypeType>;
40
- getCachedQueryItems<ItemTypeType extends ApiEnumItemType>(itemType: ItemTypeType, queryString: string): undefined | Array<ItemEntry<ItemTypeType>>;
41
- getCachedQueryObjectsByItemType(itemType: ApiEnumItemType): CachedQueryItem[];
42
- initCachedQuery<ItemTypeType extends ApiEnumItemType>(itemType: ItemTypeType, parsedQuery: CollectionQuery, requestColumns: ApiRequestColumns): CachedQueryItem<ItemTypeType>;
43
- /**
44
- * @description
45
- * Fetches a {@link CollectionEntry CollectionEntry} with the given options
46
- */
47
- abstract __fetchCachedQueryItem<ItemTypeType extends ApiEnumItemType>(itemType: ItemTypeType, options: CollectionOptions): PromiseInterface<CachedQueryItem<ItemTypeType>>;
48
- /**
49
- * @description
50
- * Fetches collections linked to the passed parents
51
- */
52
- abstract __fetchItemEntriesByQueryData<ItemTypeType extends ApiEnumItemType>(itemType: ItemTypeType, options: CollectionOptions<ItemTypeType>, columnSubsetCache: ColumnSubsetCache<ItemTypeType>, collectionQuery: CollectionQuery): PromiseInterface<CachedQueryItem<ItemTypeType>>;
53
- /**
54
- * @description
55
- * Fetches collections linked to the passed parents
56
- */
57
- abstract __fetchLinkedCachedQueryItems<ItemTypeType extends ApiEnumItemType>(parentType: ApiEnumItemType, parentIdArray: ItemId[] | (() => ItemId[]), itemType: ItemTypeType, options: CollectionOptions): PromiseInterface<ParentIdMap<CachedQueryItem<ItemTypeType>>>;
58
- /**
59
- * @description
60
- * Adds the passed {@link ItemEntry ItemEntries} to the Transaction's query cache,
61
- * will skip the ItemEntry if the `skipEntryFilterFn` callback returns `true`
62
- */
63
- protected __addItemEntriesToCachedQueries<ItemTypeType extends ApiEnumItemType>(itemType: ItemTypeType, parsedQuery: CollectionQuery, itemEntries: Array<ItemEntry<ItemTypeType>>, skipEntryFilterFn: (temEntry: ItemEntry) => boolean): void;
64
- /**
65
- * @description
66
- * Removes the passed {@link ItemId ItemIds} from the Transaction's query cache
67
- */
68
- __removeItemEntriesFromCachedQueries<ItemTypeType extends ApiEnumItemType>(itemType: ItemTypeType, parsedQuery: CollectionQuery, itemEntries: Array<ItemEntry<ItemTypeType>>): Array<ItemEntry<ItemTypeType>>;
69
- /**
70
- * @description
71
- * Expands the option's {@link CollectionOptions.columns columns} with the columns required for the {@link CollectionMatcherCachedCollectionProcessor CollectionMatcher} to function.
72
- * Data fetched for a parent transaction might also fit in a child transaction, so those {@link CollectionOptions.queryColumns queryColumns} should also be taken into account
73
- */
74
- expandColumnsWithQueryColumns(itemType: ApiEnumItemType, options: CollectionOptions, query: ApiQuery): void;
75
- }
1
+ import { ApiEnumItemType, ItemId } from '@rentman/backend-types';
2
+ import { AbstractCache, ApiQuery, ApiRequestColumns, CachedQueryItem, CollectionEntryService, CollectionOptions, CollectionQuery, ColumnSubsetCache, ColumnUtil, ItemEntry, ParentIdMap, ParentItemMap, PromiseInterface, PromiseLibraryInterface, RequestColumnExpansionFactory } from '../../internal';
3
+ export declare type CachedQueryItemTree<ItemTypeType extends ApiEnumItemType = any> = {
4
+ item: CachedQueryItem<ItemTypeType>;
5
+ children: ParentItemMap<CachedQueryItemTree> | null;
6
+ };
7
+ export declare abstract class CachedQueryHandlerBase {
8
+ protected collectionEntryService: CollectionEntryService;
9
+ protected columnUtil: ColumnUtil;
10
+ protected requestColumnExpansionFactory: RequestColumnExpansionFactory;
11
+ protected promiseService: PromiseLibraryInterface;
12
+ protected transaction: AbstractCache;
13
+ /**
14
+ * @description
15
+ * Items (per ItemType) that fit in a query
16
+ *
17
+ * @remark
18
+ * Contains the requestColumns so that new items can include these columns (saving requests when they match)
19
+ */
20
+ cachedQueries: {
21
+ [itemType: string]: {
22
+ [queryString: string]: CachedQueryItem;
23
+ };
24
+ };
25
+ protected constructor(collectionEntryService: CollectionEntryService, columnUtil: ColumnUtil, requestColumnExpansionFactory: RequestColumnExpansionFactory, promiseService: PromiseLibraryInterface, transaction: AbstractCache);
26
+ /**
27
+ * Every time a cached query item is created, either 'resolve' or 'reject' has to be called on the cached query item.
28
+ */
29
+ setCachedQuery<ItemTypeType extends ApiEnumItemType>(itemType: ItemTypeType, parsedQuery: CollectionQuery, requestColumns: ApiRequestColumns, itemEntries?: Array<ItemEntry<ItemTypeType>>): CachedQueryItem<ItemTypeType>;
30
+ /**
31
+ * Every time a cached query item is created, either 'resolve' or 'reject' has to be called on the cached query item.
32
+ */
33
+ protected constructCachedQuery<ItemTypeType extends ApiEnumItemType>(itemType: ItemTypeType, parsedQuery: CollectionQuery, itemEntries: Array<ItemEntry<ItemTypeType>>, requestColumns: ApiRequestColumns): CachedQueryItem<ItemTypeType>;
34
+ getCachedQueryItems<ItemTypeType extends ApiEnumItemType>(itemType: ItemTypeType, queryString: string): undefined | Array<ItemEntry<ItemTypeType>>;
35
+ getCachedQueryObjectsByItemType(itemType: ApiEnumItemType): CachedQueryItem[];
36
+ /**
37
+ * @description
38
+ * Fetches a {@link CollectionEntry CollectionEntry} with the given options
39
+ */
40
+ abstract __fetchCachedQueryItem<ItemTypeType extends ApiEnumItemType>(itemType: ItemTypeType, options: CollectionOptions): PromiseInterface<CachedQueryItem<ItemTypeType>>;
41
+ /**
42
+ * @description
43
+ * Fetches collections linked to the passed parents
44
+ */
45
+ abstract __fetchItemEntriesByQueryData<ItemTypeType extends ApiEnumItemType>(itemType: ItemTypeType, options: CollectionOptions<ItemTypeType>, columnSubsetCache: ColumnSubsetCache<ItemTypeType>, collectionQuery: CollectionQuery): PromiseInterface<CachedQueryItem<ItemTypeType>>;
46
+ /**
47
+ * @description
48
+ * Fetches collections linked to the passed parents
49
+ */
50
+ abstract __fetchLinkedCachedQueryItems<ItemTypeType extends ApiEnumItemType>(parentType: ApiEnumItemType, parentIdArray: ItemId[] | (() => ItemId[]), itemType: ItemTypeType, options: CollectionOptions): PromiseInterface<ParentIdMap<CachedQueryItem<ItemTypeType>>>;
51
+ /**
52
+ * @description
53
+ * Adds the passed {@link ItemEntry ItemEntries} to the Transaction's query cache,
54
+ * will skip the ItemEntry if the `skipEntryFilterFn` callback returns `true`
55
+ */
56
+ protected __addItemEntriesToCachedQueries<ItemTypeType extends ApiEnumItemType>(itemType: ItemTypeType, parsedQuery: CollectionQuery, itemEntries: Array<ItemEntry<ItemTypeType>>, skipEntryFilterFn: (temEntry: ItemEntry) => boolean): void;
57
+ /**
58
+ * @description
59
+ * Removes the passed {@link ItemId ItemIds} from the Transaction's query cache
60
+ */
61
+ __removeItemEntriesFromCachedQueries<ItemTypeType extends ApiEnumItemType>(itemType: ItemTypeType, parsedQuery: CollectionQuery, itemEntries: Array<ItemEntry<ItemTypeType>>): Array<ItemEntry<ItemTypeType>>;
62
+ /**
63
+ * @description
64
+ * Expands the option's {@link CollectionOptions.columns columns} with the columns required for the {@link CollectionMatcherCachedCollectionProcessor CollectionMatcher} to function.
65
+ * Data fetched for a parent transaction might also fit in a child transaction, so those {@link CollectionOptions.queryColumns queryColumns} should also be taken into account
66
+ */
67
+ expandColumnsWithQueryColumns(itemType: ApiEnumItemType, options: CollectionOptions, query: ApiQuery): void;
68
+ }
@@ -1,106 +1,95 @@
1
- import { ApiEnumItemType, ItemId } from '@rentman/backend-types';
2
- import { ItemCacheFactory, ItemEntryFactory, RequestColumnExpansionFactory } from '../../factories';
3
- import { ErrorHandlerInterface, PromiseLibraryInterface } from '../../interfaces';
4
- import { ItemEntry, ItemEntryOptions } from '../../models';
5
- import { ApiQuery, FieldMap, PromiseInterface } from '../../types';
6
- import { ApiFormatter } from '../ApiFormatter';
7
- import { ChangesDeltaBase, ChangesDeltaItemUpdateDelta } from '../ChangesDeltaBase';
8
- import { ColumnInfo } from '../ColumnInfo';
9
- import { ColumnUtil } from '../ColumnUtil';
10
- import { ChangesDeltaItemCreateDelta } from '../CreatedChangesDelta';
11
- import { ItemCache } from '../ItemCache';
12
- import { AbstractCache } from './AbstractCache';
13
- import { TransactionItemEntryChanges } from './transaction/TransactionItemHandler';
14
- export declare enum ItemCacheStatus {
15
- CACHED = "cached",
16
- NOT_CACHED = "not_cached",
17
- NO_CHANGES = "no_changes"
18
- }
19
- export declare type ProcessItemEntryChangesResult<ItemTypeType extends ApiEnumItemType> = {
20
- status: ItemCacheStatus.NO_CHANGES | ItemCacheStatus.NOT_CACHED;
21
- previous: null;
22
- } | {
23
- status: ItemCacheStatus.CACHED;
24
- previous: FieldMap<ItemTypeType>;
25
- };
26
- export declare abstract class ItemHandlerBase {
27
- protected columnUtil: ColumnUtil;
28
- protected apiFormatter: ApiFormatter;
29
- protected itemEntryFactory: ItemEntryFactory;
30
- protected promiseService: PromiseLibraryInterface;
31
- protected errorHandler: ErrorHandlerInterface;
32
- protected requestColumnExpansionFactory: RequestColumnExpansionFactory;
33
- protected transaction: AbstractCache;
34
- readonly entries: ItemCache;
35
- abstract itemChanges: {
36
- [itemEntryId: string]: any;
37
- };
38
- protected constructor(columnUtil: ColumnUtil, apiFormatter: ApiFormatter, itemEntryFactory: ItemEntryFactory, promiseService: PromiseLibraryInterface, errorHandler: ErrorHandlerInterface, requestColumnExpansionFactory: RequestColumnExpansionFactory, itemCacheFactory: ItemCacheFactory, transaction: AbstractCache);
39
- /**
40
- * @description
41
- * Copies the passed ItemEntryChanges into a format the implementing ItemHandler can put in his ItemChanges
42
- * @param itemEntryChanges
43
- * @param entry
44
- */
45
- abstract copyTransactionItemEntryChanges(itemEntryChanges: TransactionItemEntryChanges, entry: ItemEntry): any;
46
- /**
47
- * @description
48
- * Fetches the ItemEntries for the given query, does not look in the cache, since we don't know which ItemIds belong to the query !
49
- */
50
- abstract fetchItemEntriesByQuery<ItemTypeType extends ApiEnumItemType>(itemType: ItemTypeType, query: ApiQuery, entryOptions: ItemEntryOptions): PromiseInterface<Array<ItemEntry<ItemTypeType>>>;
51
- /**
52
- * @description
53
- * Fetches the ItemEntries for the given ItemIds
54
- */
55
- abstract fetchItemEntries<ItemTypeType extends ApiEnumItemType>(itemType: ItemTypeType, itemIds: ItemId[], options: ItemEntryOptions): PromiseInterface<Array<ItemEntry<ItemTypeType>>>;
56
- /**
57
- * @description
58
- * Fetches an ItemEntry with the given itemId
59
- */
60
- abstract fetchItemEntry<ItemTypeType extends ApiEnumItemType>(itemType: ItemTypeType, itemId: ItemId, options: ItemEntryOptions, isRoot?: boolean): PromiseInterface<ItemEntry<ItemTypeType>>;
61
- /**
62
- * @description
63
- * Processes the passed {@link ChangesDeltaItemUpdateDelta update delta} on the transaction, if there are no {@link TransactionItemHandler.itemChanges itemChanges} the new values will not be processed
64
- */
65
- abstract processItemEntryChanges<ItemTypeType extends ApiEnumItemType>(itemEntryChangesTuple: ChangesDeltaItemUpdateDelta<ItemTypeType>, isCalledAfterSocketUpdate: boolean, createItemChangesIfNoneExist: boolean): ProcessItemEntryChangesResult<ItemTypeType>;
66
- /**
67
- * @description
68
- * Traverses the column path and returns the fields of the derived item, returns undefined if the item isn't found
69
- *
70
- * ---------------------
71
- *
72
- * @remark
73
- * Assumes the derived item's values are already cached
74
- */
75
- getDerivedValues(itemEntry: ItemEntry, columnPath: string[]): Readonly<FieldMap> | undefined;
76
- /**
77
- * @description
78
- * Returns the value of the columnPath, or undefined when the path couldn't be traversed
79
- *
80
- * @param itemEntry The root entry to start the path from
81
- * @param columnPath Can either be an array of columnIds (['column', 'column2']) or a config column string ('column>column2')
82
- */
83
- getDerivedValue<T extends any = any>(itemEntry: ItemEntry, columnPath: string[] | string): T | undefined;
84
- /**
85
- * @description
86
- * Clears the entry from this transaction, removing it from the {@link ItemCache ItemCache} and removing all changes
87
- */
88
- clearItemEntry(entry: ItemEntry): void;
89
- /**
90
- * @description
91
- * Recursively fetches derived values as separate requests, instead of as columns of a primary item
92
- * Can be used when derived values of a local item have to be fetched, since a local item can't be used as root item of a query
93
- */
94
- fetchDerivedValuesByColumn<ItemTypeType extends ApiEnumItemType>(itemEntries: Array<ItemEntry<ItemTypeType>>, rootColumn: ColumnInfo<ItemTypeType>, changesDelta?: ChangesDeltaBase): PromiseInterface<void | Array<ItemEntry<ItemTypeType>>>;
95
- resolveDerivedValues<ItemTypeType extends ApiEnumItemType>(itemEntries: Array<ItemEntry<ItemTypeType>>, columns: Array<ColumnInfo<ItemTypeType>>, changesDelta?: ChangesDeltaBase): PromiseInterface<Array<ItemEntry<ItemTypeType>>>;
96
- /**
97
- * @description
98
- * Creates a new {@link ItemEntry ItemEntry} from the passed {@link ChangesDeltaItemCreateDelta ChangesDeltaItemCreateDelta} and stores it in this transaction's {@link ItemCache ItemCache}
99
- */
100
- createItemEntry(createTuple: ChangesDeltaItemCreateDelta): ItemEntry;
101
- /**
102
- * @description
103
- * Gets the value of the given column, will look into the current delta before attempting to read itemChanges
104
- */
105
- protected getItemIdByColumn<ItemTypeType extends ApiEnumItemType>(itemEntry: ItemEntry<ItemTypeType>, column: ColumnInfo<ItemTypeType>, changesDelta?: ChangesDeltaBase): ItemId;
106
- }
1
+ import { ApiEnumItemType, ItemId } from '@rentman/backend-types';
2
+ import { AbstractCache, ApiFormatter, ApiQuery, ChangesDeltaBase, ChangesDeltaItemCreateDelta, ChangesDeltaItemUpdateDelta, ColumnInfo, ColumnUtil, ErrorHandlerInterface, FieldMap, ItemCache, ItemCacheFactory, ItemEntry, ItemEntryFactory, ItemEntryOptions, PromiseInterface, PromiseLibraryInterface, RequestColumnExpansionFactory, TransactionItemEntryChanges } from '../../internal';
3
+ export declare enum ItemCacheStatus {
4
+ CACHED = "cached",
5
+ NOT_CACHED = "not_cached",
6
+ NO_CHANGES = "no_changes"
7
+ }
8
+ export declare type ProcessItemEntryChangesResult<ItemTypeType extends ApiEnumItemType> = {
9
+ status: ItemCacheStatus.NO_CHANGES | ItemCacheStatus.NOT_CACHED;
10
+ previous: null;
11
+ } | {
12
+ status: ItemCacheStatus.CACHED;
13
+ previous: FieldMap<ItemTypeType>;
14
+ };
15
+ export declare abstract class ItemHandlerBase {
16
+ protected columnUtil: ColumnUtil;
17
+ protected apiFormatter: ApiFormatter;
18
+ protected itemEntryFactory: ItemEntryFactory;
19
+ protected promiseService: PromiseLibraryInterface;
20
+ protected errorHandler: ErrorHandlerInterface;
21
+ protected requestColumnExpansionFactory: RequestColumnExpansionFactory;
22
+ protected transaction: AbstractCache;
23
+ readonly entries: ItemCache;
24
+ abstract itemChanges: {
25
+ [itemEntryId: string]: any;
26
+ };
27
+ protected constructor(columnUtil: ColumnUtil, apiFormatter: ApiFormatter, itemEntryFactory: ItemEntryFactory, promiseService: PromiseLibraryInterface, errorHandler: ErrorHandlerInterface, requestColumnExpansionFactory: RequestColumnExpansionFactory, itemCacheFactory: ItemCacheFactory, transaction: AbstractCache);
28
+ /**
29
+ * @description
30
+ * Copies the passed ItemEntryChanges into a format the implementing ItemHandler can put in his ItemChanges
31
+ * @param itemEntryChanges
32
+ * @param entry
33
+ */
34
+ abstract copyTransactionItemEntryChanges(itemEntryChanges: TransactionItemEntryChanges, entry: ItemEntry): any;
35
+ /**
36
+ * @description
37
+ * Fetches the ItemEntries for the given query, does not look in the cache, since we don't know which ItemIds belong to the query !
38
+ */
39
+ abstract fetchItemEntriesByQuery<ItemTypeType extends ApiEnumItemType>(itemType: ItemTypeType, query: ApiQuery, entryOptions: ItemEntryOptions): PromiseInterface<Array<ItemEntry<ItemTypeType>>>;
40
+ /**
41
+ * @description
42
+ * Fetches the ItemEntries for the given ItemIds
43
+ */
44
+ abstract fetchItemEntries<ItemTypeType extends ApiEnumItemType>(itemType: ItemTypeType, itemIds: ItemId[], options: ItemEntryOptions): PromiseInterface<Array<ItemEntry<ItemTypeType>>>;
45
+ /**
46
+ * @description
47
+ * Fetches an ItemEntry with the given itemId
48
+ */
49
+ abstract fetchItemEntry<ItemTypeType extends ApiEnumItemType>(itemType: ItemTypeType, itemId: ItemId, options: ItemEntryOptions, isRoot?: boolean): PromiseInterface<ItemEntry<ItemTypeType>>;
50
+ /**
51
+ * @description
52
+ * Processes the passed {@link ChangesDeltaItemUpdateDelta update delta} on the transaction, if there are no {@link TransactionItemHandler.itemChanges itemChanges} the new values will not be processed
53
+ */
54
+ abstract processItemEntryChanges<ItemTypeType extends ApiEnumItemType>(itemEntryChangesTuple: ChangesDeltaItemUpdateDelta<ItemTypeType>, isCalledAfterSocketUpdate: boolean, createItemChangesIfNoneExist: boolean): ProcessItemEntryChangesResult<ItemTypeType>;
55
+ /**
56
+ * @description
57
+ * Traverses the column path and returns the fields of the derived item, returns undefined if the item isn't found
58
+ *
59
+ * ---------------------
60
+ *
61
+ * @remark
62
+ * Assumes the derived item's values are already cached
63
+ */
64
+ getDerivedValues(itemEntry: ItemEntry, columnPath: string[]): Readonly<FieldMap> | undefined;
65
+ /**
66
+ * @description
67
+ * Returns the value of the columnPath, or undefined when the path couldn't be traversed
68
+ *
69
+ * @param itemEntry The root entry to start the path from
70
+ * @param columnPath Can either be an array of columnIds (['column', 'column2']) or a config column string ('column>column2')
71
+ */
72
+ getDerivedValue<T extends any = any>(itemEntry: ItemEntry, columnPath: string[] | string): T | undefined;
73
+ /**
74
+ * @description
75
+ * Clears the entry from this transaction, removing it from the {@link ItemCache ItemCache} and removing all changes
76
+ */
77
+ clearItemEntry(entry: ItemEntry): void;
78
+ /**
79
+ * @description
80
+ * Recursively fetches derived values as separate requests, instead of as columns of a primary item
81
+ * Can be used when derived values of a local item have to be fetched, since a local item can't be used as root item of a query
82
+ */
83
+ fetchDerivedValuesByColumn<ItemTypeType extends ApiEnumItemType>(itemEntries: Array<ItemEntry<ItemTypeType>>, rootColumn: ColumnInfo<ItemTypeType>, changesDelta?: ChangesDeltaBase): PromiseInterface<void | Array<ItemEntry<ItemTypeType>>>;
84
+ resolveDerivedValues<ItemTypeType extends ApiEnumItemType>(itemEntries: Array<ItemEntry<ItemTypeType>>, columns: Array<ColumnInfo<ItemTypeType>>, changesDelta?: ChangesDeltaBase): PromiseInterface<Array<ItemEntry<ItemTypeType>>>;
85
+ /**
86
+ * @description
87
+ * Creates a new {@link ItemEntry ItemEntry} from the passed {@link ChangesDeltaItemCreateDelta ChangesDeltaItemCreateDelta} and stores it in this transaction's {@link ItemCache ItemCache}
88
+ */
89
+ createItemEntry(createTuple: ChangesDeltaItemCreateDelta): ItemEntry;
90
+ /**
91
+ * @description
92
+ * Gets the value of the given column, will look into the current delta before attempting to read itemChanges
93
+ */
94
+ protected getItemIdByColumn<ItemTypeType extends ApiEnumItemType>(itemEntry: ItemEntry<ItemTypeType>, column: ColumnInfo<ItemTypeType>, changesDelta?: ChangesDeltaBase): ItemId;
95
+ }