@rentman/rm-core 0.0.0-RM4-44763

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 (201) hide show
  1. package/dist/rm-core.js +2 -0
  2. package/dist/rm-core.js.map +1 -0
  3. package/dist/types/src/classes/ApiFormatter.d.ts +66 -0
  4. package/dist/types/src/classes/ApiRequestService.d.ts +18 -0
  5. package/dist/types/src/classes/ApiResponseProcessor.d.ts +31 -0
  6. package/dist/types/src/classes/BusinessLogicManager/AantalBusinessLogicRuleBase.d.ts +36 -0
  7. package/dist/types/src/classes/BusinessLogicManager/AantaltotaalBusinessLogicRuleBase.d.ts +60 -0
  8. package/dist/types/src/classes/BusinessLogicManager/Afspraak/AfspraakRecureindBusinessLogicRule.d.ts +5 -0
  9. package/dist/types/src/classes/BusinessLogicManager/Beschikbaarheid/BeschikbaarheidRecureindBusinessLogicRule.d.ts +5 -0
  10. package/dist/types/src/classes/BusinessLogicManager/BusinessLogicManager.d.ts +66 -0
  11. package/dist/types/src/classes/BusinessLogicManager/BusinessLogicRule.d.ts +81 -0
  12. package/dist/types/src/classes/BusinessLogicManager/BusinessLogicRuleApplyContext.d.ts +32 -0
  13. package/dist/types/src/classes/BusinessLogicManager/BusinessLogicRuleConditionContext.d.ts +41 -0
  14. package/dist/types/src/classes/BusinessLogicManager/BusinessLogicRuleContextBase.d.ts +58 -0
  15. package/dist/types/src/classes/BusinessLogicManager/Contact/ContactAddressBusinessLogicRule.d.ts +22 -0
  16. package/dist/types/src/classes/BusinessLogicManager/Customfield/CustomFieldLinkedItemTypeBusinessLogicRule.d.ts +18 -0
  17. package/dist/types/src/classes/BusinessLogicManager/Customfield/CustomFieldTypeBusinessLogicRule.d.ts +18 -0
  18. package/dist/types/src/classes/BusinessLogicManager/DefaultContactPersonUpdateBusinessLogicRule.d.ts +30 -0
  19. package/dist/types/src/classes/BusinessLogicManager/Documents/DocumentTemplateBusinessLogicRule.d.ts +20 -0
  20. package/dist/types/src/classes/BusinessLogicManager/Exemplaar/ExemplaarAanschafdatumBusinessLogicRule.d.ts +14 -0
  21. package/dist/types/src/classes/BusinessLogicManager/Exemplaar/ExemplaarBarcodeDeleteBusinessLogicRule.d.ts +14 -0
  22. package/dist/types/src/classes/BusinessLogicManager/Factuur/FactuurBetalingsconditieBusinessLogicRule.d.ts +21 -0
  23. package/dist/types/src/classes/BusinessLogicManager/Factuur/FactuurDatumBusinessLogicRule.d.ts +23 -0
  24. package/dist/types/src/classes/BusinessLogicManager/Factuur/FactuurNumberseriesBusinessLogicRule.d.ts +14 -0
  25. package/dist/types/src/classes/BusinessLogicManager/Files/FilesNameExtensionBusinessLogicRule.d.ts +20 -0
  26. package/dist/types/src/classes/BusinessLogicManager/Functie/FunctieNaaminternBusinessLogicRule.d.ts +18 -0
  27. package/dist/types/src/classes/BusinessLogicManager/Functie/FunctieRecureindBusinessLogicRule.d.ts +5 -0
  28. package/dist/types/src/classes/BusinessLogicManager/Functie/FunctieTwowayBusinessLogicRule.d.ts +14 -0
  29. package/dist/types/src/classes/BusinessLogicManager/Functiegroep/FunctiegroepSubprojectBusinessLogicRule.d.ts +17 -0
  30. package/dist/types/src/classes/BusinessLogicManager/Inhuurmateriaal/InhuurmateriaalAantalBusinessLogicRule.d.ts +4 -0
  31. package/dist/types/src/classes/BusinessLogicManager/Inhuurmateriaal/InhuurmateriaalAantaltotaalBusinessLogicRule.d.ts +9 -0
  32. package/dist/types/src/classes/BusinessLogicManager/Materiaal/MateriaalBulkToSerialBusinessLogicRule.d.ts +17 -0
  33. package/dist/types/src/classes/BusinessLogicManager/Materiaal/MateriaalIsCombinationBusinessLogicRule.d.ts +20 -0
  34. package/dist/types/src/classes/BusinessLogicManager/Materiaal/MateriaalIsPhysicalCombinationBulkBusinessLogicRule.d.ts +19 -0
  35. package/dist/types/src/classes/BusinessLogicManager/Materiaal/MateriaalSerialToBulkBusinessLogicRule.d.ts +16 -0
  36. package/dist/types/src/classes/BusinessLogicManager/Materiaal/MateriaalToPhysicalBusinessLogicRule.d.ts +18 -0
  37. package/dist/types/src/classes/BusinessLogicManager/Materiaal/MateriaalToVirtualBusinessLogicRule.d.ts +22 -0
  38. package/dist/types/src/classes/BusinessLogicManager/Materiaal/MateriaalTypePropertiesBusinessLogicRule.d.ts +19 -0
  39. package/dist/types/src/classes/BusinessLogicManager/Materiaal/MateriaalVerhuurBusinessLogicRule.d.ts +19 -0
  40. package/dist/types/src/classes/BusinessLogicManager/Materiaal/SurfaceArticleSizeBusinessLogicRule.d.ts +23 -0
  41. package/dist/types/src/classes/BusinessLogicManager/MateriaalCatFunctieFunctiegroep/LinkedTimeItemBusinessLogicRuleBase.d.ts +46 -0
  42. package/dist/types/src/classes/BusinessLogicManager/MateriaalCatFunctieFunctiegroep/LinkedTimeItemDurationBusinessLogicRule.d.ts +17 -0
  43. package/dist/types/src/classes/BusinessLogicManager/MateriaalCatFunctieFunctiegroep/LinkedTimeItemMateriaalCatBusinessLogicRule.d.ts +25 -0
  44. package/dist/types/src/classes/BusinessLogicManager/MateriaalCatFunctieFunctiegroep/LinkedTimeItemSubprojectBusinessLogicRule.d.ts +48 -0
  45. package/dist/types/src/classes/BusinessLogicManager/MateriaalCatFunctieFunctiegroep/LinkedTimeItemTimeSchemeBusinessLogicRule.d.ts +27 -0
  46. package/dist/types/src/classes/BusinessLogicManager/MateriaalCatFunctieFunctiegroep/LinkedTimeItemTimeSchemeStartBusinessLogicRule.d.ts +18 -0
  47. package/dist/types/src/classes/BusinessLogicManager/MateriaalCatFunctieFunctiegroep/LinkedTimeItemTimeValueStartBusinessLogicRule.d.ts +20 -0
  48. package/dist/types/src/classes/BusinessLogicManager/MateriaalCatFunctieFunctiegroep/TimeColumnUtil.d.ts +132 -0
  49. package/dist/types/src/classes/BusinessLogicManager/OfferteContract/OfferteContractDatumBusinessLogicRule.d.ts +21 -0
  50. package/dist/types/src/classes/BusinessLogicManager/PlanningPersoneelTransport/PlanningPersoneelTransportBusinessLogicRule.d.ts +24 -0
  51. package/dist/types/src/classes/BusinessLogicManager/Planningmateriaal/PlanningmateriaalAantalBusinessLogicRule.d.ts +4 -0
  52. package/dist/types/src/classes/BusinessLogicManager/Planningmateriaal/PlanningmateriaalAantaltotaalBusinessLogicRule.d.ts +9 -0
  53. package/dist/types/src/classes/BusinessLogicManager/Planningmateriaal/PlanningmateriaalOptieBusinessLogicRule.d.ts +26 -0
  54. package/dist/types/src/classes/BusinessLogicManager/Planningmateriaal/PlanningmateriaalParentBusinessLogicRule.d.ts +17 -0
  55. package/dist/types/src/classes/BusinessLogicManager/Planningmateriaal/PlanningmateriaalStaysAtLocationBusinessLogicRule.d.ts +32 -0
  56. package/dist/types/src/classes/BusinessLogicManager/Project/ProjectClientChangedBusinessLogicRule.d.ts +31 -0
  57. package/dist/types/src/classes/BusinessLogicManager/Project/ProjectContactProjectNoteBusinessLogicRule.d.ts +25 -0
  58. package/dist/types/src/classes/BusinessLogicManager/Project/ProjectOneSubLocationAlignBusinessRule.d.ts +26 -0
  59. package/dist/types/src/classes/BusinessLogicManager/ProjectSubproject/ProjectSubprojectDefaultTimeBusinessLogicRule.d.ts +26 -0
  60. package/dist/types/src/classes/BusinessLogicManager/PurchaseOrder/PurchaseOrderApprovalStatusBusinessLogicRule.d.ts +19 -0
  61. package/dist/types/src/classes/BusinessLogicManager/PurchaseOrder/PurchaseOrderOwnerBusinessLogicRule.d.ts +16 -0
  62. package/dist/types/src/classes/BusinessLogicManager/Rate/RateUpdatedBusinessLogicRule.d.ts +14 -0
  63. package/dist/types/src/classes/BusinessLogicManager/RecurrentItem/RecurrentItemRecureindBusinessLogicRule.d.ts +28 -0
  64. package/dist/types/src/classes/BusinessLogicManager/Reparatie/ReparatieExemplaarAantalBusinessLogicRule.d.ts +14 -0
  65. package/dist/types/src/classes/BusinessLogicManager/Reparatie/ReparatieLostItemExemplaarLocationBusinessLogicRule.d.ts +21 -0
  66. package/dist/types/src/classes/BusinessLogicManager/Rol/RolEditOwnDataBusinessLogicRule.d.ts +20 -0
  67. package/dist/types/src/classes/BusinessLogicManager/Rol/RolFileAccessBusinessLogicRule.d.ts +19 -0
  68. package/dist/types/src/classes/BusinessLogicManager/Rol/RolPersoneelsplannerToegangBusinessLogicRule.d.ts +20 -0
  69. package/dist/types/src/classes/BusinessLogicManager/Rol/RolProjectenBewerkenBusinessLogicRule.d.ts +20 -0
  70. package/dist/types/src/classes/BusinessLogicManager/Rol/RolProjectenToegangBusinessLogicRule.d.ts +21 -0
  71. package/dist/types/src/classes/BusinessLogicManager/Rol/RolPurchaseOrderAttachPlanningBusinessLogicRule.d.ts +19 -0
  72. package/dist/types/src/classes/BusinessLogicManager/Rol/RolVisibilityFinancialsBusinessLogicRule.d.ts +35 -0
  73. package/dist/types/src/classes/BusinessLogicManager/Rol/RolWarehosueTrackingLogAccessBusinessLogicRule.d.ts +20 -0
  74. package/dist/types/src/classes/BusinessLogicManager/Setinhoud/SetinhoudCreateFixedBusinessLogicRule.d.ts +21 -0
  75. package/dist/types/src/classes/BusinessLogicManager/Setinhoud/SetinhoudUpdateFixedBusinessLogicRule.d.ts +26 -0
  76. package/dist/types/src/classes/BusinessLogicManager/Subproject/SubprojectInPlanningBusinessLogicRule.d.ts +14 -0
  77. package/dist/types/src/classes/BusinessLogicManager/Subproject/SubprojectOneSubLocationAlignBusinessRule.d.ts +27 -0
  78. package/dist/types/src/classes/BusinessLogicManager/Subproject/SubprojectOneSubNameAlignBusinessRule.d.ts +22 -0
  79. package/dist/types/src/classes/BusinessLogicManager/Tijd/TijdNameChangedBusinessLogicRule.d.ts +21 -0
  80. package/dist/types/src/classes/BusinessLogicManager/Tijd/TijdSubprojectChangedBusinessLogicRule.d.ts +17 -0
  81. package/dist/types/src/classes/BusinessLogicManager/Uren/HoursTypeBusinessLogicRuleBase.d.ts +10 -0
  82. package/dist/types/src/classes/BusinessLogicManager/Uren/UrenCalculatedDurationBusinessLogicRule.d.ts +13 -0
  83. package/dist/types/src/classes/BusinessLogicManager/Uren/UrenCanHaveActivitiesBusinessLogicRule.d.ts +13 -0
  84. package/dist/types/src/classes/BusinessLogicManager/businessLogicRule.decorator.d.ts +13 -0
  85. package/dist/types/src/classes/BusinessLogicManager/registeredBusinessLogicRules.d.ts +66 -0
  86. package/dist/types/src/classes/ChangesCompilation.d.ts +26 -0
  87. package/dist/types/src/classes/ChangesDelta.d.ts +81 -0
  88. package/dist/types/src/classes/ChangesDeltaBase.d.ts +85 -0
  89. package/dist/types/src/classes/ChangesProcessor.d.ts +35 -0
  90. package/dist/types/src/classes/ChildChangesDelta.d.ts +38 -0
  91. package/dist/types/src/classes/ColumnCache.d.ts +22 -0
  92. package/dist/types/src/classes/ColumnExpansion.d.ts +18 -0
  93. package/dist/types/src/classes/ColumnHandler.d.ts +16 -0
  94. package/dist/types/src/classes/ColumnInfo.d.ts +16 -0
  95. package/dist/types/src/classes/ColumnSet.d.ts +79 -0
  96. package/dist/types/src/classes/ColumnUtil.d.ts +97 -0
  97. package/dist/types/src/classes/ConversionMapService.d.ts +23 -0
  98. package/dist/types/src/classes/CreateRequest.d.ts +16 -0
  99. package/dist/types/src/classes/CreatedChangesDelta.d.ts +22 -0
  100. package/dist/types/src/classes/ItemCache.d.ts +26 -0
  101. package/dist/types/src/classes/ItemCreateService.d.ts +14 -0
  102. package/dist/types/src/classes/ItemEntryService.d.ts +29 -0
  103. package/dist/types/src/classes/KeyService.d.ts +10 -0
  104. package/dist/types/src/classes/LockService.d.ts +28 -0
  105. package/dist/types/src/classes/ModuleChangesCompilation.d.ts +20 -0
  106. package/dist/types/src/classes/ParentChangesDelta.d.ts +42 -0
  107. package/dist/types/src/classes/QueryColumnExtractor.d.ts +16 -0
  108. package/dist/types/src/classes/QueryContainsLocalIdParser.d.ts +14 -0
  109. package/dist/types/src/classes/QueryParser.d.ts +18 -0
  110. package/dist/types/src/classes/QueryParserBase.d.ts +32 -0
  111. package/dist/types/src/classes/QueryParserIdUpdater.d.ts +16 -0
  112. package/dist/types/src/classes/QueryService.d.ts +10 -0
  113. package/dist/types/src/classes/RequestBuffer/RequestBuffer.d.ts +13 -0
  114. package/dist/types/src/classes/RequestBuffer/RequestBufferBase.d.ts +37 -0
  115. package/dist/types/src/classes/RequestBuffer/RequestBufferManager.d.ts +24 -0
  116. package/dist/types/src/classes/RequestBuffer/SingleQueryRequestBuffer.d.ts +18 -0
  117. package/dist/types/src/classes/RequestColumnExpansion.d.ts +11 -0
  118. package/dist/types/src/classes/RequestColumnsOperationsCache.d.ts +45 -0
  119. package/dist/types/src/classes/SocketMessageHandler.d.ts +28 -0
  120. package/dist/types/src/classes/TemplateCache.d.ts +61 -0
  121. package/dist/types/src/classes/Util.d.ts +36 -0
  122. package/dist/types/src/classes/cache/AbstractCache.d.ts +86 -0
  123. package/dist/types/src/classes/cache/CachedQueryHandlerBase.d.ts +145 -0
  124. package/dist/types/src/classes/cache/ItemHandlerBase.d.ts +97 -0
  125. package/dist/types/src/classes/cache/ItemMatcherBase.d.ts +90 -0
  126. package/dist/types/src/classes/cache/server/ServerCache.d.ts +83 -0
  127. package/dist/types/src/classes/cache/server/ServerCachedQueryHandler.d.ts +29 -0
  128. package/dist/types/src/classes/cache/server/ServerItemHandler.d.ts +35 -0
  129. package/dist/types/src/classes/cache/transaction/TransactionCache.d.ts +342 -0
  130. package/dist/types/src/classes/cache/transaction/TransactionCachedQueryHandler.d.ts +111 -0
  131. package/dist/types/src/classes/cache/transaction/TransactionEventHandler.d.ts +17 -0
  132. package/dist/types/src/classes/cache/transaction/TransactionItemHandler.d.ts +121 -0
  133. package/dist/types/src/classes/cache/transaction/TransactionValidator.d.ts +25 -0
  134. package/dist/types/src/classes/cache/transaction/TransactionValidatorBase.d.ts +19 -0
  135. package/dist/types/src/classes/cache/transaction/TransactionValidatorWithDependencies.d.ts +15 -0
  136. package/dist/types/src/classes/changes/CollectionItemChangesListenerContext.d.ts +22 -0
  137. package/dist/types/src/classes/changes/ItemChangesListenerContext.d.ts +7 -0
  138. package/dist/types/src/classes/changes/ItemChangesListenerContextBase.d.ts +44 -0
  139. package/dist/types/src/classes/matcher/CompatorQueryNode.d.ts +24 -0
  140. package/dist/types/src/classes/matcher/CustomQueryNode.d.ts +8 -0
  141. package/dist/types/src/classes/matcher/GraphQueryParser.d.ts +34 -0
  142. package/dist/types/src/classes/matcher/IsComparatorQueryNode.d.ts +13 -0
  143. package/dist/types/src/classes/matcher/LinkedToQueryNode.d.ts +9 -0
  144. package/dist/types/src/classes/matcher/NonMatchableQueryNode.d.ts +9 -0
  145. package/dist/types/src/classes/matcher/NotIsComparatorQueryNode.d.ts +14 -0
  146. package/dist/types/src/classes/matcher/QueryNode.d.ts +49 -0
  147. package/dist/types/src/classes/matcher/RootQueryNode.d.ts +14 -0
  148. package/dist/types/src/classes/matcher/SearchQueryNode.d.ts +8 -0
  149. package/dist/types/src/classes/matcher/SubQueryNode.d.ts +8 -0
  150. package/dist/types/src/classes/matcher/ValueTransformers.d.ts +41 -0
  151. package/dist/types/src/classes/matcher/ValuelessEdgeQueryNode.d.ts +11 -0
  152. package/dist/types/src/classes/matcher/greater-smaller-than-comparator-query.node.d.ts +25 -0
  153. package/dist/types/src/constants.d.ts +2 -0
  154. package/dist/types/src/core.d.ts +63 -0
  155. package/dist/types/src/exceptions/CriticalBusinessLogicRuleException.d.ts +4 -0
  156. package/dist/types/src/exceptions/ItemAlreadyExistsException.d.ts +4 -0
  157. package/dist/types/src/exceptions/ItemLockedException.d.ts +2 -0
  158. package/dist/types/src/exceptions/ItemNotFoundException.d.ts +5 -0
  159. package/dist/types/src/exceptions/MissingColumnException.d.ts +6 -0
  160. package/dist/types/src/exceptions/SavingInProgressException.d.ts +2 -0
  161. package/dist/types/src/exceptions/TransactionPendingException.d.ts +2 -0
  162. package/dist/types/src/factories/ApiResponseProcessorFactory.d.ts +5 -0
  163. package/dist/types/src/factories/ChangesCompilationFactory.d.ts +5 -0
  164. package/dist/types/src/factories/ChangesDeltaFactory.d.ts +13 -0
  165. package/dist/types/src/factories/CollectionResourceFactory.d.ts +20 -0
  166. package/dist/types/src/factories/ColumnExpansionFactory.d.ts +7 -0
  167. package/dist/types/src/factories/ColumnInfoFactory.d.ts +7 -0
  168. package/dist/types/src/factories/ColumnSetFactory.d.ts +15 -0
  169. package/dist/types/src/factories/GraphQueryParserFactory.d.ts +10 -0
  170. package/dist/types/src/factories/ItemCacheFactory.d.ts +7 -0
  171. package/dist/types/src/factories/ItemResourceFactory.d.ts +7 -0
  172. package/dist/types/src/factories/ModuleChangesCompilationFactory.d.ts +6 -0
  173. package/dist/types/src/factories/RequestColumnExpansionFactory.d.ts +4 -0
  174. package/dist/types/src/factories/RequestColumnsOperationsCacheFactory.d.ts +7 -0
  175. package/dist/types/src/factories/TransactionCacheFactory.d.ts +12 -0
  176. package/dist/types/src/index.d.ts +11 -0
  177. package/dist/types/src/interfaces/AbstractCacheDependencyInterface.d.ts +46 -0
  178. package/dist/types/src/interfaces/ApiRequestServiceInterface.d.ts +14 -0
  179. package/dist/types/src/interfaces/ErrorHandlerInterface.d.ts +6 -0
  180. package/dist/types/src/interfaces/LinkTreeServiceInterface.d.ts +6 -0
  181. package/dist/types/src/interfaces/ServerCacheDependencyInterface.d.ts +6 -0
  182. package/dist/types/src/interfaces/SocketMessageInterface.d.ts +3 -0
  183. package/dist/types/src/interfaces/TransactionCollectionHandlerDependencyInterface.d.ts +15 -0
  184. package/dist/types/src/interfaces/TransactionItemHandlerDependencyInterface.d.ts +16 -0
  185. package/dist/types/src/internal.d.ts +110 -0
  186. package/dist/types/src/models/CachedQueryItem.d.ts +33 -0
  187. package/dist/types/src/models/CollectionEntry.d.ts +16 -0
  188. package/dist/types/src/models/CollectionOptions.d.ts +111 -0
  189. package/dist/types/src/models/CollectionResource.d.ts +175 -0
  190. package/dist/types/src/models/ItemEntry.d.ts +23 -0
  191. package/dist/types/src/models/ItemOptions.d.ts +25 -0
  192. package/dist/types/src/models/ItemResource.d.ts +135 -0
  193. package/dist/types/src/models/LimitedCollectionResource.d.ts +26 -0
  194. package/dist/types/src/models/OrderedCollectionResource.d.ts +19 -0
  195. package/dist/types/src/models/Template.d.ts +17 -0
  196. package/dist/types/src/services/rm-holidays.service.d.ts +31 -0
  197. package/dist/types/src/types/AggregatedChangesListener.d.ts +99 -0
  198. package/dist/types/src/types/ApiQuery.d.ts +95 -0
  199. package/dist/types/src/types/ItemTypesCollection.d.ts +416 -0
  200. package/package.json +56 -0
  201. package/readme.md +42 -0
@@ -0,0 +1,16 @@
1
+ import { ApiFields, ApiItemType, ApiQueryOperator, ItemApiFields } from '@rentman/backend-types';
2
+ import { ApiQuery, ApiQueryConditionComparator, ApiQueryConditionIn, ApiQueryConditionLinkedTo, ApiQueryWithConditions, ItemIdConversionMap, QueryParserBase } from '../internal';
3
+ type ReturnType = boolean;
4
+ export declare class QueryParserIdUpdater extends QueryParserBase<ReturnType> {
5
+ private itemIdConversionMap;
6
+ constructor(itemIdConversionMap: ItemIdConversionMap);
7
+ protected parseEmptyQuery(): ReturnType;
8
+ protected parseSubQuery<MainItemType extends ApiItemType, SubItemType extends ApiItemType>(_key: keyof ItemApiFields<MainItemType>, _itemType: SubItemType, _field: keyof ItemApiFields<SubItemType>, query: ApiQuery<SubItemType>, _not: boolean, subQueryDepth: number): ReturnType;
9
+ protected parseSearchQuery(): ReturnType;
10
+ protected parseCustomQuery(): ReturnType;
11
+ protected parseComparatorQuery<ItemTypeType extends ApiItemType, ColumnId extends keyof ApiFields[ItemTypeType]>(_key: ApiQueryConditionComparator<ItemTypeType, ColumnId>['key'], value: ApiQueryConditionComparator<ItemTypeType, ColumnId>['value'], _comparator: ApiQueryConditionComparator<ItemTypeType, ColumnId>['comparator'], queryPart: ApiQueryConditionComparator<ItemTypeType, ColumnId>): ReturnType;
12
+ protected parseInQuery<ItemTypeType extends ApiItemType, ColumnId extends keyof ApiFields[ItemTypeType]>(_key: ApiQueryConditionIn<ItemTypeType, ColumnId>['key'], value: ApiQueryConditionIn<ItemTypeType, ColumnId>['value'], _not: boolean): ReturnType;
13
+ protected parseLinkedToQuery<SubItemType extends ApiItemType>(_linkedTo: ApiQueryConditionLinkedTo<SubItemType>['linkedTo'], query: Exclude<ApiQueryConditionLinkedTo<SubItemType>['query'], undefined>, _reverse: boolean, _not: boolean, subQueryDepth: number): ReturnType;
14
+ protected parseComplexQuery<ItemTypeType extends ApiItemType>(conditions: ApiQueryWithConditions<ItemTypeType>['conditions'], _operator: Extract<ApiQueryOperator, 'AND' | 'OR'>, _not: boolean, subQueryDepth: number): ReturnType;
15
+ }
16
+ export {};
@@ -0,0 +1,10 @@
1
+ import { ApiItemType, ItemId } from '@rentman/backend-types';
2
+ import { ApiQuery, EntryParentNull } from '../internal';
3
+ export declare class QueryService {
4
+ containsLocalId<ItemTypeType extends ApiItemType>(query: ApiQuery<ItemTypeType>): boolean;
5
+ addAndCondition<ItemTypeType extends ApiItemType>(query: ApiQuery<ItemTypeType>, condition: ApiQuery<ItemTypeType>): ApiQuery<ItemTypeType>;
6
+ addOrCondition<ItemTypeType extends ApiItemType>(query: ApiQuery<ItemTypeType>, condition: ApiQuery<ItemTypeType>): ApiQuery<ItemTypeType>;
7
+ addParentCondition<ItemTypeType extends ApiItemType>(query: ApiQuery<ItemTypeType>, parent: EntryParentNull): ApiQuery<ItemTypeType>;
8
+ createNotIn<ItemTypeType extends ApiItemType>(idArray: ItemId[]): ApiQuery<ItemTypeType>;
9
+ isEmptyQuery<ItemTypeType extends ApiItemType>(query: ApiQuery<ItemTypeType>): boolean;
10
+ }
@@ -0,0 +1,13 @@
1
+ import { ApiItemType, ItemId } from '@rentman/backend-types';
2
+ import { ApiRequestColumns, ApiRequestService, CollectionQuery, RequestBufferBase, RequestBufferOptions, RequestBufferResult, RequestColumnExpansionFactory, RequestColumnsTuple } from '../../internal';
3
+ export declare class RequestBuffer<ItemTypeType extends ApiItemType> extends RequestBufferBase<ItemTypeType> {
4
+ private readonly contents;
5
+ static constructWithSingleItems<ConstructorItemTypeType extends ApiItemType>(apiRequestService: ApiRequestService, requestColumnExpansionFactory: RequestColumnExpansionFactory, itemType: ConstructorItemTypeType, itemIds: ItemId<ConstructorItemTypeType>[], requestColumns: ApiRequestColumns<ConstructorItemTypeType>, options: RequestBufferOptions<ConstructorItemTypeType>): RequestBuffer<ConstructorItemTypeType>;
6
+ static constructWithQuery<ConstructorItemTypeType extends ApiItemType>(apiRequestService: ApiRequestService, requestColumnExpansionFactory: RequestColumnExpansionFactory, itemType: ConstructorItemTypeType, query: CollectionQuery<ConstructorItemTypeType, true>, requestColumnsTuple: RequestColumnsTuple<ConstructorItemTypeType>, options: RequestBufferOptions<ConstructorItemTypeType>): RequestBuffer<ConstructorItemTypeType>;
7
+ addSingleItems(itemIds: ItemId[], requestColumns: ApiRequestColumns<ItemTypeType>, forceFlush: boolean): this | null;
8
+ addQuery(query: CollectionQuery<ItemTypeType>, requestColumnsTuple: RequestColumnsTuple<ItemTypeType>, options: RequestBufferOptions<ItemTypeType>): this | null;
9
+ protected executeQuery(): Promise<RequestBufferResult<ItemTypeType>>;
10
+ private _addSingleItems;
11
+ private _addQuery;
12
+ private createAggregateQuery;
13
+ }
@@ -0,0 +1,37 @@
1
+ import { ApiItemType, ItemId } from '@rentman/backend-types';
2
+ import { ApiRequestColumnMap, ApiRequestColumns, ApiRequestLimit, ApiRequestService, ApiResponseProcessor, CollectionQuery, Deferred, RequestColumnExpansion, RequestColumnExpansionFactory, RequestColumnsTuple } from '../../internal';
3
+ export interface RequestBufferOptions<ItemTypeType extends ApiItemType> {
4
+ /**
5
+ * By default, flushing is prevented while requests are suspended. This prevents conflicts while saving. Enable to
6
+ * ignore request suspension, which could introduce an additional delay.
7
+ */
8
+ forceFlush: boolean;
9
+ /**
10
+ * Time that should expire before the back-end request is executed, in milliseconds. Set to `0` to execute request
11
+ * immediately. 150 milliseconds by default.
12
+ */
13
+ flushTimeout: number;
14
+ limit: ApiRequestLimit<ItemTypeType> | undefined;
15
+ }
16
+ export declare const defaultRequestBufferOptions: Readonly<RequestBufferOptions<any>>;
17
+ export interface RequestBufferResult<ItemTypeType extends ApiItemType> {
18
+ requestColumns: ApiRequestColumnMap;
19
+ response: ApiResponseProcessor<ItemTypeType>;
20
+ nonLocallyMatchableQueryString: string | null;
21
+ }
22
+ export declare abstract class RequestBufferBase<ItemTypeType extends ApiItemType> {
23
+ protected readonly apiRequestService: ApiRequestService;
24
+ readonly itemType: ItemTypeType;
25
+ readonly options: Readonly<RequestBufferOptions<ItemTypeType>>;
26
+ protected readonly deferred: Deferred<RequestBufferResult<ItemTypeType>>;
27
+ protected readonly requestColumnExpansion: RequestColumnExpansion;
28
+ readonly createdDate: number;
29
+ protected constructor(apiRequestService: ApiRequestService, requestColumnExpansionFactory: RequestColumnExpansionFactory, itemType: ItemTypeType, options: Readonly<RequestBufferOptions<ItemTypeType>>);
30
+ abstract addSingleItems(itemIds: ItemId[], requestColumns: ApiRequestColumns<ItemTypeType>, forceFlush: boolean): this | null;
31
+ abstract addQuery(query: CollectionQuery<ItemTypeType>, requestColumnsTuple: RequestColumnsTuple<ItemTypeType>, options: RequestBufferOptions<ItemTypeType>): this | null;
32
+ flush(onBufferFlushed?: (result: RequestBufferResult<any>) => Promise<any>): Promise<RequestBufferResult<ItemTypeType>>;
33
+ getPromise(): Promise<RequestBufferResult<ItemTypeType>>;
34
+ protected abstract executeQuery(): Promise<RequestBufferResult<ItemTypeType>>;
35
+ protected acceptsRequestColumns(requestColumns: ApiRequestColumns<ItemTypeType>): boolean;
36
+ protected compareApiRequestLimit(limitA: ApiRequestLimit | undefined, limitB: ApiRequestLimit | undefined): boolean;
37
+ }
@@ -0,0 +1,24 @@
1
+ import { ApiItemType, ItemId } from '@rentman/backend-types';
2
+ import { ApiRequestColumns, ApiRequestService, CollectionQuery, RequestBufferOptions, RequestBufferResult, RequestColumnExpansionFactory, RequestColumnsTuple } from '../../internal';
3
+ export declare class RequestBufferManager {
4
+ private apiRequestService;
5
+ private requestColumnExpansionFactory;
6
+ private onBufferFlushed?;
7
+ private pendingBufferMap;
8
+ /**
9
+ * Because we're not saving multiple transactions simultaneously, we can get by with a simple flag here.
10
+ */
11
+ private requestsSuspended;
12
+ constructor(apiRequestService: ApiRequestService, requestColumnExpansionFactory: RequestColumnExpansionFactory, onBufferFlushed?: ((result: RequestBufferResult<any>) => Promise<any>) | undefined);
13
+ /**
14
+ * We could make this extra safe by waiting for responses to arrive for requests that are in-flight.
15
+ * However, this comes at a performance cost, as we have to wait longer before saving our changes.
16
+ */
17
+ suspendRequests(): void;
18
+ continueRequests(): void;
19
+ fetchByIds<ItemTypeType extends ApiItemType>(itemType: ItemTypeType, itemIds: ItemId[], requestColumns: ApiRequestColumns<ItemTypeType>, partialOptions?: Partial<RequestBufferOptions<ItemTypeType>>): Promise<RequestBufferResult<ItemTypeType>>;
20
+ fetchByQuery<ItemTypeType extends ApiItemType>(itemType: ItemTypeType, query: CollectionQuery<ItemTypeType>, requestColumnsTuple: RequestColumnsTuple<ItemTypeType>, partialOptions?: Partial<RequestBufferOptions<ItemTypeType>>): Promise<RequestBufferResult<ItemTypeType>>;
21
+ private processOptions;
22
+ private addBuffer;
23
+ private flushPendingBuffers;
24
+ }
@@ -0,0 +1,18 @@
1
+ import { ApiItemType } from '@rentman/backend-types';
2
+ import { ApiRequestService, CollectionQuery, RequestBufferBase, RequestBufferOptions, RequestBufferResult, RequestColumnExpansionFactory, RequestColumnsTuple } from '../../internal';
3
+ export declare class SingleQueryRequestBuffer<ItemTypeType extends ApiItemType> extends RequestBufferBase<ItemTypeType> {
4
+ /**
5
+ * When we store a query that cannot be matched locally, we cannot store any other queries because we depend on the
6
+ * response to figure out what items match.
7
+ */
8
+ private readonly contents;
9
+ constructor(apiRequestService: ApiRequestService, requestColumnExpansionFactory: RequestColumnExpansionFactory, itemType: ItemTypeType,
10
+ /**
11
+ * When we store a query that cannot be matched locally, we cannot store any other queries because we depend on the
12
+ * response to figure out what items match.
13
+ */
14
+ contents: CollectionQuery<ItemTypeType>, requestColumnsTuple: RequestColumnsTuple<ItemTypeType>, options: RequestBufferOptions<ItemTypeType>);
15
+ addSingleItems(): null;
16
+ addQuery(query: CollectionQuery<ItemTypeType>, requestColumnsTuple: RequestColumnsTuple<ItemTypeType>, options: RequestBufferOptions<ItemTypeType>): this | null;
17
+ protected executeQuery(): Promise<RequestBufferResult<ItemTypeType>>;
18
+ }
@@ -0,0 +1,11 @@
1
+ import { ApiItemType } from '@rentman/backend-types';
2
+ import { ApiRequestColumnMap, ApiRequestColumns, ColumnSet, RequestColumnsTuple } from '../internal';
3
+ export declare class RequestColumnExpansion {
4
+ private columns;
5
+ private columnSetIdMap;
6
+ private requestColumnSetIdMap;
7
+ expandWithRequestColumnsTuple(itemType: ApiItemType, requestColumnsTuple: RequestColumnsTuple): void;
8
+ expandWithColumnSet(columnSet: ColumnSet<any>): void;
9
+ expandWithRequestColumns<ItemTypeType extends ApiItemType>(itemType: ItemTypeType, requestColumns: ApiRequestColumns<ItemTypeType>): void;
10
+ get(): ApiRequestColumnMap;
11
+ }
@@ -0,0 +1,45 @@
1
+ import { ApiItemType } from '@rentman/backend-types';
2
+ import { AbstractCache, ApiRequestColumnArray, ApiRequestColumns, ColumnCache, ColumnSet, RequestColumnsTuple } from '../internal';
3
+ type RequestColumnSetMergeResult<ItemTypeType extends ApiItemType = any> = {
4
+ merged: RequestColumnsTuple<ItemTypeType>;
5
+ difference: RequestColumnsTuple<ItemTypeType>;
6
+ };
7
+ type AggregateColumnsTuple<ItemTypeType extends ApiItemType = any> = {
8
+ readonly object: ApiRequestColumnArray<ItemTypeType>;
9
+ readonly string: string;
10
+ };
11
+ /**
12
+ * @description This class caches the results of frequently performed operations on request columns:
13
+ * - Merging;
14
+ * - Testing whether all columns of one column set are present in another (which is mainly done by merging and checking
15
+ * the difference);
16
+ * - Creating hashes (IDs) for sets of request columns.
17
+ */
18
+ export declare class RequestColumnsOperationsCache<ItemTypeType extends ApiItemType> {
19
+ readonly itemType: ItemTypeType;
20
+ private columnCache;
21
+ private readonly requestColumnsTuple;
22
+ private aggregateColumnsTuple?;
23
+ private expandedRequestColumnsTuple?;
24
+ private columnsMergedWithTupleMap;
25
+ private expandedColumnsMergedWithTupleMap;
26
+ private setContainsAllColumnsMap;
27
+ private setContainsAllExpandedColumnsMap;
28
+ constructor(itemType: ItemTypeType, columnCache: ColumnCache, requestColumns: ApiRequestColumns<ItemTypeType>);
29
+ getRequestColumnsTuple(transactionCache: AbstractCache): RequestColumnsTuple<ItemTypeType>;
30
+ getAggregateColumns(): AggregateColumnsTuple;
31
+ hasAggregateColumns(): boolean;
32
+ /**
33
+ *
34
+ * @param requestColumnsTuple
35
+ * @param transactionCache - When in the server cache, we'll include the columns required for delete
36
+ * relations and the query matcher in the operation.
37
+ */
38
+ getColumnsMergedWithTuple(requestColumnsTuple: RequestColumnsTuple<ItemTypeType>, transactionCache: AbstractCache): RequestColumnSetMergeResult<ItemTypeType>;
39
+ tupleContainsAllColumns(requestColumnsTuple: RequestColumnsTuple<ItemTypeType>, transactionCache: AbstractCache): boolean;
40
+ setContainsAllColumns(columnSet: ColumnSet<ItemTypeType>, transactionCache: AbstractCache): boolean;
41
+ private mergeColumnsWithTuple;
42
+ private extractAggregateColumns;
43
+ private createRequestColumnsTuple;
44
+ }
45
+ export {};
@@ -0,0 +1,28 @@
1
+ import { ApiItemType } from '@rentman/backend-types';
2
+ import { ApiRequestService, ChangesDeltaFactory, ChangesDeltaResult, ColumnCache, ErrorHandlerInterface, RequestColumnExpansionFactory, RequestColumnsOperationsCacheFactory, SocketMessage, TransactionCacheFactory } from '../internal';
3
+ export declare class SocketMessageHandler {
4
+ private changesDeltaFactory;
5
+ private columnCache;
6
+ private errorHandler;
7
+ private requestColumnExpansionFactory;
8
+ private transactionCacheFactory;
9
+ private requestColumnsOperationsCacheFactory;
10
+ private readonly logPrefix;
11
+ private readonly requestBufferManager;
12
+ constructor(changesDeltaFactory: ChangesDeltaFactory, columnCache: ColumnCache, errorHandler: ErrorHandlerInterface, requestColumnExpansionFactory: RequestColumnExpansionFactory, transactionCacheFactory: TransactionCacheFactory, apiRequestService: ApiRequestService, requestColumnsOperationsCacheFactory: RequestColumnsOperationsCacheFactory);
13
+ onMessagesReceived(messages: SocketMessage<any>[], flushTimeout?: number): Promise<ChangesDeltaResult>;
14
+ refreshItemsOfType(itemType: ApiItemType): Promise<void>;
15
+ private handleDelete;
16
+ private logFetchedItems;
17
+ private processSocketMessageValues;
18
+ private aggregateCachedRequestColumns;
19
+ private getMergedQueryGraphTuple;
20
+ private matchSocketMessageItems;
21
+ /**
22
+ * @description
23
+ * When an item is created or updated, we should check if it fits in any of the cached queries (using the values provided by the socket message)
24
+ * If we think it fits (or maybe) we should fetch the complete item with the superset of columns (the socket message might not have all values)
25
+ */
26
+ private processMessage;
27
+ private processRequests;
28
+ }
@@ -0,0 +1,61 @@
1
+ import { ApiItemType, ItemId } from '@rentman/backend-types';
2
+ import { ApiRequestColumnArrayMap, ApiRequestService, ColumnHandler, ColumnSetFactory, EntryParentNull, ItemEntryService, LinkTreeServiceInterface, RequestColumnExpansionFactory, RequestParameters, Template } from '../internal';
3
+ export declare class TemplateCache {
4
+ private apiRequestService;
5
+ private columnHandler;
6
+ private columnSetFactory;
7
+ private requestColumnExpansionFactory;
8
+ private linkTreeService;
9
+ private itemEntryService;
10
+ private pendingTemplateBufferMap;
11
+ private templateResponses;
12
+ constructor(apiRequestService: ApiRequestService, columnHandler: ColumnHandler, columnSetFactory: ColumnSetFactory, requestColumnExpansionFactory: RequestColumnExpansionFactory, linkTreeService: LinkTreeServiceInterface, itemEntryService: ItemEntryService);
13
+ /**
14
+ * @description
15
+ * Fetches a {@link Template template}, use {@link ItemCreateService.createItemsFromValues createItemsFromValues} to easily create new items from a set of values.
16
+ * The best way to process the template's values is to call {@link ItemCreateService.processTemplate processTemplate}
17
+ *
18
+ * @param itemType The {@link ApiItemType ItemType} of the template item
19
+ * @param itemId Used for caching, multiple concurrent template calls for the same itemId will return the same template
20
+ * @param templateOptions
21
+ * @param templateRequestColumns Additional columns to be fetched, will be stored in the template - warning - the Template won't have values for those columns
22
+ * @param entryParentOrParentItemType An optional {@link EntryParentNull entry parent} or {@link ApiItemType parent itemType}, if the parent is passed the templateColumns will be expanded with the proper link columns (Through {@link ColumnUtil.getColumnsFromLink ColumnUtil.getColumnsFromLink})
23
+ *
24
+ * @example
25
+ * ```
26
+ * const parent: EntryParent = {
27
+ * itemType: 'Functie',
28
+ * itemId: 10,
29
+ * };
30
+ *
31
+ * return core.templateCache
32
+ * .fetchTemplate(
33
+ * 'Planningpersoneel',
34
+ * undefined,
35
+ * {},
36
+ * {},
37
+ * parent,
38
+ * )
39
+ * .then(
40
+ * (template: Template<'Planningpersoneel'>) => {
41
+ * const changesDelta = transaction.createChangesDelta();
42
+ *
43
+ * for (const itemResource of selectedItems) {
44
+ * changesDelta.setItemCreated(
45
+ * core.keyService.getLocalId(),
46
+ * template.getFields(),
47
+ * template.columns,
48
+ * parent,
49
+ * );
50
+ * }
51
+ *
52
+ * return transaction.applyChangesDelta(changesDelta);
53
+ * );
54
+ * ```
55
+ */
56
+ fetchTemplate<ItemTypeType extends ApiItemType>(itemType: ItemTypeType, itemId?: ItemId, templateOptions?: Partial<RequestParameters<ItemTypeType>>, templateRequestColumns?: ApiRequestColumnArrayMap, entryParentOrParentItemType?: EntryParentNull | ApiItemType): Promise<Template<ItemTypeType>>;
57
+ private expandWithLinkedItemTypesDefaultColumns;
58
+ private fetchTemplateById;
59
+ private constructTemplateBuffer;
60
+ private expandWithDefaultRequestColumns;
61
+ }
@@ -0,0 +1,36 @@
1
+ export declare function findIndex<T>(haystack: T[], callback: (item: T) => boolean): number;
2
+ export declare function shallowMerge(object: any, defaults: any): any;
3
+ export declare function hasProperties(object: any): boolean;
4
+ export declare function getFirstProperty<T = string>(object: any): T | null;
5
+ export declare function inArray(needle: any, haystack: any): boolean;
6
+ export declare function pathExists(source: any, path: string[]): boolean;
7
+ export declare function createPath<T>(object: any, path: (number | string)[], defaults: any[], overwriteDestination?: boolean): T;
8
+ export declare function getPath(object: Record<string, any>, path: (number | string)[], create?: boolean): any;
9
+ export declare function extend(dst: any, ...args: any[]): any;
10
+ export declare function merge(dst: any, ...args: any[]): any;
11
+ export declare function isObject(value: any): boolean;
12
+ export declare function isBlankObject(value: any): boolean;
13
+ export declare function isString(value: any): value is string;
14
+ export declare function isNumber(value: any): value is number;
15
+ export declare function isDate(value: any): boolean;
16
+ export declare const isArray: (arg: any) => arg is any[];
17
+ export declare function isFunction<T>(value: any): value is T;
18
+ export declare function isPromiseLike<T = any>(obj: any): obj is Promise<T>;
19
+ type ResolvedPromiseObject<ObjectType extends Record<string, any>> = {
20
+ [K in keyof ObjectType]: ObjectType[K] extends Promise<infer PromiseType> ? PromiseType : ObjectType[K];
21
+ };
22
+ export declare function promiseAllObject<ObjectType extends Record<string, any>>(promiseObject: ObjectType): Promise<ResolvedPromiseObject<ObjectType>>;
23
+ export interface Deferred<T> {
24
+ promise: Promise<T>;
25
+ resolve(value?: T | PromiseLike<T>): void;
26
+ reject(reason?: any): void;
27
+ }
28
+ export declare function promiseCreateDeferred<T>(): Deferred<T>;
29
+ export declare function isRegExp(value: any): boolean;
30
+ export declare function isBoolean(value: any): value is boolean;
31
+ export declare function isElement(node: any): boolean;
32
+ export declare function isWindow(obj: any): any;
33
+ export declare function isDefined(value: any): boolean;
34
+ export declare function equals(o1: any, o2: any): boolean;
35
+ export declare function copy(source: Record<string, any>, destination?: Record<string, any>, maxDepth?: any): any;
36
+ export {};
@@ -0,0 +1,86 @@
1
+ import { ApiItemType } from '@rentman/backend-types';
2
+ import { RmCore } from '../../core';
3
+ import { AbstractCacheDependencyInterface, CachedQueryHandlerBase, CachedQueryItem, ChangesDelta, ChangesDeltaItemCreateDelta, ChildChangesDelta, CollectionQuery, EntryParentNull, FieldMap, ItemCache, ItemEntry, ItemEntryChangesTuple, ItemHandlerBase, ItemIdConversionMap, OnAfterCreateCallback, ParentChangesDelta, ServerCache, TransactionCache, TransactionValidatorFactory } from '../../internal';
4
+ export 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: CachedQueryHandlerBase;
17
+ parent: AbstractCache | null;
18
+ protected constructor(dependencies: AbstractCacheDependencyInterface, core: RmCore);
19
+ getDescendantsIterator(): IterableIterator<TransactionCache>;
20
+ abstract createChild(id?: string, validatorFactory?: TransactionValidatorFactory, options?: TransactionOptions): TransactionCache;
21
+ onChildDestroy(cache: TransactionCache): void;
22
+ /**
23
+ * @description
24
+ * Returns {@link ItemEntry ItemEntries} that fit the collection's query, copies over the collectionChanges on all transactions in the chain.
25
+ */
26
+ abstract getCollectionChangesRecursively<const ItemTypeType extends ApiItemType>(itemType: ItemTypeType, parsedQuery: CollectionQuery<ItemTypeType>): CachedQueryItem<ItemTypeType> | undefined;
27
+ /**
28
+ * @description
29
+ * Returns this transaction and all parents
30
+ */
31
+ getTransactionChain(includeServerCache: false): TransactionCache[];
32
+ getTransactionChain(includeServerCache?: true): AbstractCache[];
33
+ /**
34
+ * @description
35
+ * Returns the {@link TransactionItemHandler.entries ItemCache} of the transaction
36
+ */
37
+ getCurrentItemEntryCache(): ItemCache;
38
+ abstract getServerCache(): ServerCache;
39
+ abstract getLocalItemEntry(itemEntryId: ItemEntry['id']): ItemEntry;
40
+ abstract getLocalItemEntryByItemId<const ItemTypeType extends ApiItemType>(itemType: ItemTypeType, itemId: ItemEntry<ItemTypeType>['itemId']): ItemEntry<ItemTypeType>;
41
+ abstract containsLocalItemEntryByItemId(itemType: ApiItemType, itemId: ItemEntry['itemId']): boolean;
42
+ /**
43
+ * @description
44
+ * Removes an {@link ItemEntry ItemEntry} from the {@link TransactionCache TransactionCache} which means that
45
+ * changes on this entry will no longer be tracked.
46
+ *
47
+ * @returns The deleted item changes.
48
+ */
49
+ clearItemEntry<ItemTypeType extends ApiItemType>(itemEntry: ItemEntry<ItemTypeType>): FieldMap<ItemTypeType> | undefined;
50
+ /**
51
+ * @description
52
+ * Gets an already cached {@link ItemEntry ItemEntry} and the changes of this specific transaction for that entry
53
+ */
54
+ getLocalItemEntryChangesTuple<ItemTypeType extends ApiItemType>(itemEntryId: ItemEntry<ItemTypeType>['id']): ItemEntryChangesTuple<ItemTypeType>;
55
+ /**
56
+ * @description
57
+ * Applies changes from a child transaction to a parent
58
+ */
59
+ abstract applyChangesFromChild(transaction: TransactionCache, breakUpByParent?: boolean, onAfterCreateCallback?: OnAfterCreateCallback): Promise<ItemIdConversionMap>;
60
+ /**
61
+ * @description
62
+ * Called by a parent transaction, propagates changes downwards to all child caches
63
+ *
64
+ * @remarks
65
+ * - Should only be used by the core
66
+ *
67
+ * todo[cache] Should we refetch derived values just like in applyChangesDelta ?
68
+ *
69
+ * @internal
70
+ */
71
+ abstract applyChangesFromParent(parentChangesDelta: ParentChangesDelta, isCalledAfterSocketUpdate?: boolean): Promise<void>;
72
+ getParent(itemEntry: ItemEntry<any>, fromInitial?: boolean): EntryParentNull;
73
+ protected getParentFromFields<ItemTypeType extends ApiItemType = any>(itemEntry: ItemEntry<ItemTypeType>, fields?: FieldMap<ItemTypeType>): EntryParentNull;
74
+ /**
75
+ * Processes a created item from a changes delta.
76
+ * @returns `null` if the item already exists on this transaction, the created item entry otherwise.
77
+ */
78
+ protected processCreatedItem<ItemTypeType extends ApiItemType>(tuple: ChangesDeltaItemCreateDelta<ItemTypeType>, sourceChangesDelta: ChangesDelta): ItemEntry<ItemTypeType> | null;
79
+ /**
80
+ * @description
81
+ * Ensures that for all updated items in the delta the required derived values are present
82
+ */
83
+ protected fetchUpdatedDerivedValuesFromDelta(changesDelta: ChangesDelta | ChildChangesDelta, itemIdConversionMap: ItemIdConversionMap | undefined): Promise<void[]>;
84
+ protected handleCascadingDeletes(changesDelta: ChangesDelta | ChildChangesDelta | ParentChangesDelta): void;
85
+ private cascadeDeleteByItemType;
86
+ }
@@ -0,0 +1,145 @@
1
+ import { ApiItemType, ItemId } from '@rentman/backend-types';
2
+ import { GraphQueryParserFactory } from '../../factories/GraphQueryParserFactory';
3
+ import { AbstractCache, ApiQuery, ApiRequestColumns, ApiRequestService, CachedQueryItem, CachedQueryOptions, CachedQueryOptionsWithColumns, ChangesDeltaBase, CollectionOptions, CollectionQuery, CollectionResourceOrder, ErrorHandlerInterface, ItemEntry, LinkTreeServiceInterface, MatchesAccumulatorMap, MatchingResultsAccumulatorMapType, MatchingResultsAccumulatorTuple, ParentChangesDelta, QueryService, RequestColumnExpansionFactory, RequestColumnsOperationsCache, RequestColumnsOperationsCacheFactory, RequestColumnsTuple } from '../../internal';
4
+ import { RootQueryNode } from '../matcher/RootQueryNode';
5
+ export interface LinkCollectionBatchQueryTuple<ItemTypeType extends ApiItemType> {
6
+ batchQuery: CollectionQuery<ItemTypeType>;
7
+ batchQueryGraph?: RootQueryNode<ItemTypeType>;
8
+ }
9
+ export interface ParentCachedQueryItemTuple<ItemTypeType extends ApiItemType> {
10
+ readonly cachedQueryItem: CachedQueryItem<ItemTypeType>;
11
+ readonly options: CollectionOptions<ItemTypeType>;
12
+ children: CachedQueryItemsItemTypeTuple<ApiItemType>[] | null;
13
+ }
14
+ export interface CachedQueryItemTuple<ItemTypeType extends ApiItemType> extends ParentCachedQueryItemTuple<ItemTypeType> {
15
+ children: null;
16
+ }
17
+ export interface CachedQueryItemsItemTypeTuple<ItemTypeType extends ApiItemType> {
18
+ itemType: ItemTypeType;
19
+ cachedQueryItemTuples: ParentCachedQueryItemTuple<ItemTypeType>[];
20
+ }
21
+ export interface CachedQueryHandlerCollectionTuple<ItemTypeType extends ApiItemType> {
22
+ cachedQueryItem?: CachedQueryItem<ItemTypeType>;
23
+ }
24
+ type RequireOnly<ObjectType, Keys extends keyof ObjectType> = ObjectType & {
25
+ [Key in Keys]-?: ObjectType[Key];
26
+ };
27
+ export declare abstract class CachedQueryHandlerBase {
28
+ protected dependencies: {
29
+ apiRequestService: ApiRequestService;
30
+ errorHandler: ErrorHandlerInterface;
31
+ graphQueryParserFactory: GraphQueryParserFactory;
32
+ linkTreeService: LinkTreeServiceInterface;
33
+ queryService: QueryService;
34
+ requestColumnExpansionFactory: RequestColumnExpansionFactory;
35
+ requestColumnsOperationsCacheFactory: RequestColumnsOperationsCacheFactory;
36
+ };
37
+ protected transaction: AbstractCache;
38
+ protected collections: {
39
+ [ItemType in ApiItemType]?: {
40
+ [queryString: string]: CachedQueryHandlerCollectionTuple<ItemType> | undefined;
41
+ };
42
+ };
43
+ protected constructor(dependencies: {
44
+ apiRequestService: ApiRequestService;
45
+ errorHandler: ErrorHandlerInterface;
46
+ graphQueryParserFactory: GraphQueryParserFactory;
47
+ linkTreeService: LinkTreeServiceInterface;
48
+ queryService: QueryService;
49
+ requestColumnExpansionFactory: RequestColumnExpansionFactory;
50
+ requestColumnsOperationsCacheFactory: RequestColumnsOperationsCacheFactory;
51
+ }, transaction: AbstractCache);
52
+ createQuery<ItemTypeType extends ApiItemType>(query: ApiQuery<ItemTypeType>): CollectionQuery<ItemTypeType>;
53
+ /**
54
+ * Works out the effect the changes found in `parentChangesDelta` will have on the cached queries / collections on
55
+ * the current transaction. This method does not update the collections themselves. A call to
56
+ * {@link applyMatchingResultsToCachedQueries} or {@link applyMatchingResultsToCollections} will be required.
57
+ *
58
+ * Note that this method also resolves `maybe` matches.
59
+ *
60
+ * @param processEmptyUpdates - Processes empty updates. See: {@link ItemMatcherBase.matchEmptyItemsInUpdatedChangesDelta}.
61
+ */
62
+ matchItemsToCollectionQueries(parentChangesDelta: ParentChangesDelta, limitToItemTypes: Iterable<ApiItemType> | undefined, processEmptyUpdates: boolean): Promise<MatchesAccumulatorMap<MatchingResultsAccumulatorMapType>>;
63
+ applyMatchingResultsToCachedQueries(matchingResultsAccumulatorMap: MatchesAccumulatorMap<MatchingResultsAccumulatorMapType>): void;
64
+ /**
65
+ * Every time a cached query item is created, either 'resolve' or 'reject' has to be called on the cached query item.
66
+ */
67
+ setCachedQuery<const ItemTypeType extends ApiItemType>(itemType: ItemTypeType, parsedQuery: CollectionQuery<ItemTypeType>, requestColumnsTuple: RequestColumnsTuple<ItemTypeType>, itemEntries: ItemEntry<ItemTypeType>[], queryGraph?: RootQueryNode<ItemTypeType>): CachedQueryItem<ItemTypeType>;
68
+ /**
69
+ * @description
70
+ * Fetches a {@link CollectionEntry CollectionEntry} with the given options
71
+ */
72
+ __fetchCachedQueryItem<const ItemTypeType extends ApiItemType>(itemType: ItemTypeType, options: CachedQueryOptionsWithColumns<ItemTypeType>): Promise<CachedQueryItem<ItemTypeType>>;
73
+ getCachedQueryItemsByItemType<const ItemTypeType extends ApiItemType>(itemType: ItemTypeType): CachedQueryItem<ItemTypeType>[];
74
+ cloneCachedQuery<ItemTypeType extends ApiItemType>(cachedQueryItem: CachedQueryItem<ItemTypeType>, resolve?: boolean): CachedQueryItem<ItemTypeType>;
75
+ clearCachedQueryItem(itemType: ApiItemType, queryString: string): void;
76
+ /**
77
+ * Clears cached queries in the form of:
78
+ * - {linkedTo: [itemType], query: {id: [itemId]}};
79
+ * - {[linkField]: [itemId]}.
80
+ *
81
+ * This should catch most cached queries when deleting a parent item.
82
+ */
83
+ clearLinkedCachedQueryItems(itemEntry: ItemEntry): void;
84
+ getCachedQueryItem<const ItemTypeType extends ApiItemType>(itemType: ItemTypeType, queryString: string): CachedQueryItem<ItemTypeType> | undefined;
85
+ /**
86
+ * Merges all query graphs for the given item type on the transaction. This allows changed items to be matched to
87
+ * all queries simultaneously.
88
+ * @param queryResults - When a set of items is already known to match a certain query, we can add a comparator node
89
+ * for the item IDs to the end result. This can be beneficial for queries that can not be locally matched.
90
+ */
91
+ getMergedQueryGraph<ItemTypeType extends ApiItemType>(itemType: ItemTypeType, queryResults?: {
92
+ [queryString: string]: Set<ItemId<ItemTypeType>>;
93
+ }): RootQueryNode<ItemTypeType> | null;
94
+ getCachedQueryItemIterator(): Generator<CachedQueryItem>;
95
+ /**
96
+ * @description
97
+ * Fetches collections linked to the passed parents
98
+ */
99
+ abstract __fetchItemEntriesByQueryData<const ItemTypeType extends ApiItemType>(itemType: ItemTypeType, options: CachedQueryOptions<ItemTypeType>, columnsOperationsCache: RequestColumnsOperationsCache<ItemTypeType>, collectionQuery: CollectionQuery<ItemTypeType>, linkCollectionBatchQueryTuple?: LinkCollectionBatchQueryTuple<ItemTypeType>): Promise<CachedQueryItem<ItemTypeType>>;
100
+ abstract __maybeExpandCachedQuery<const ItemTypeType extends ApiItemType>(itemType: ItemTypeType, queryString: string, columnsOperationsCache: RequestColumnsOperationsCache<ItemTypeType>, batchedLinkedToQuery?: CollectionQuery<ItemTypeType>): Promise<CachedQueryItem<ItemTypeType>>;
101
+ queryIsCacheable<ItemTypeType extends ApiItemType>(options: CachedQueryOptions<ItemTypeType>, query: CollectionQuery<ItemTypeType>): boolean;
102
+ protected createQueryFromOptions<ItemTypeType extends ApiItemType>(options: CachedQueryOptions<ItemTypeType>): CollectionQuery<ItemTypeType>;
103
+ /**
104
+ * @description
105
+ * Expands the option's {@link CollectionOptions.columns columns} with the columns required for the {@link CacheSyncer CacheSyncer} to function.
106
+ * 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
107
+ */
108
+ expandColumnsWithQueryColumns<ItemTypeType extends ApiItemType>(itemType: ItemTypeType, options: {
109
+ columns: ApiRequestColumns<ItemTypeType>;
110
+ order?: CollectionResourceOrder<ItemTypeType>;
111
+ }, query: ApiQuery<ItemTypeType>): void;
112
+ protected getOrCreateCollectionTuple<ItemTypeType extends ApiItemType>(itemType: ItemTypeType, queryString: string): CachedQueryHandlerCollectionTuple<ItemTypeType>;
113
+ /**
114
+ * Because this method is only called after a cached query (or collection resource) has been removed from the cache,
115
+ * we're assuming the tuple is present.
116
+ */
117
+ protected clearCollectionTupleIfEmpty<ItemTypeType extends ApiItemType>(itemType: ItemTypeType, queryString: string): void;
118
+ /**
119
+ * We're returning a set because multiple cached queries / collection resources might share the same query graph.
120
+ * When using child collections, the query graph could already be a graph that matches multiple cached queries.
121
+ * Collection resources often have the same query graph as the cached query.
122
+ */
123
+ protected getQueryGraphsForItemType<ItemTypeType extends ApiItemType>(itemType: ItemTypeType): Set<RootQueryNode<ItemTypeType>>;
124
+ /**
125
+ * We're returning a set here to avoid duplicate collection query objects. When, for a specific query, both a cached
126
+ * query and a collection resource exist, the collection query will be the same for both.
127
+ */
128
+ protected getCollectionQueries<ItemTypeType extends ApiItemType>(itemType: ItemTypeType, queryString: string): Set<CollectionQuery<ItemTypeType>>;
129
+ /**
130
+ * Handles `maybe` matches for the query identified by the `itemType` and `queryString`.
131
+ *
132
+ * @param matchingResultsTuple - A matching results tuple containing matched, non-matched and `maybe` item entries.
133
+ * The properties containing matched and non-matched item entries are modified to include the `maybe` item entries.
134
+ * The `maybe` property is kept, for now. (It is not read after this point.)
135
+ * @param changesDelta - When doing a back-end request for `maybeMatchedItemEntries`, the resulting item IDs are
136
+ * stored in this changes delta.
137
+ */
138
+ protected processMaybeMatches<ItemTypeType extends ApiItemType>(itemType: ItemTypeType, queryString: string, matchingResultsTuple: RequireOnly<MatchingResultsAccumulatorTuple<any>, 'maybe'>, changesDelta: ChangesDeltaBase): Promise<void>;
139
+ /**
140
+ * Every time a cached query item is created, either 'resolve' or 'reject' has to be called on the cached query item.
141
+ */
142
+ protected constructCachedQuery<ItemTypeType extends ApiItemType>(itemType: ItemTypeType, parsedQuery: CollectionQuery<ItemTypeType>, itemEntries: ItemEntry<ItemTypeType>[], requestColumnsTuple: RequestColumnsTuple<ItemTypeType>, queryGraph?: RootQueryNode<ItemTypeType>): CachedQueryItem<ItemTypeType>;
143
+ private createQueryGraph;
144
+ }
145
+ export {};