@ngrx/data 15.4.0 → 16.0.0-rc.0

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 (126) hide show
  1. package/esm2022/src/actions/entity-action-factory.mjs +51 -0
  2. package/esm2022/src/actions/entity-action-guard.mjs +130 -0
  3. package/esm2022/src/dataservices/default-data.service.mjs +210 -0
  4. package/esm2022/src/dataservices/entity-cache-data.service.mjs +147 -0
  5. package/esm2022/src/dataservices/entity-data.service.mjs +64 -0
  6. package/esm2022/src/dataservices/http-url-generator.mjs +88 -0
  7. package/esm2022/src/dataservices/persistence-result-handler.service.mjs +50 -0
  8. package/esm2022/src/dispatchers/entity-cache-dispatcher.mjs +164 -0
  9. package/esm2022/src/dispatchers/entity-commands.mjs +2 -0
  10. package/esm2022/src/dispatchers/entity-dispatcher-default-options.mjs +31 -0
  11. package/esm2022/src/dispatchers/entity-dispatcher-factory.mjs +68 -0
  12. package/esm2022/src/effects/entity-cache-effects.mjs +116 -0
  13. package/esm2022/src/effects/entity-effects.mjs +149 -0
  14. package/esm2022/src/entity-data-without-effects.module.mjs +28 -0
  15. package/esm2022/src/entity-data.module.mjs +29 -0
  16. package/esm2022/src/entity-metadata/entity-definition.service.mjs +94 -0
  17. package/esm2022/src/entity-services/entity-collection-service-elements-factory.mjs +39 -0
  18. package/esm2022/src/entity-services/entity-collection-service-factory.mjs +29 -0
  19. package/esm2022/src/entity-services/entity-services-base.mjs +120 -0
  20. package/esm2022/src/entity-services/entity-services-elements.mjs +34 -0
  21. package/esm2022/src/reducers/entity-cache-reducer.mjs +272 -0
  22. package/esm2022/src/reducers/entity-collection-creator.mjs +38 -0
  23. package/{esm2020 → esm2022}/src/reducers/entity-collection-reducer-methods.mjs +6 -5
  24. package/esm2022/src/reducers/entity-collection-reducer-registry.mjs +69 -0
  25. package/esm2022/src/reducers/entity-collection-reducer.mjs +25 -0
  26. package/esm2022/src/selectors/entity-selectors$.mjs +53 -0
  27. package/esm2022/src/selectors/entity-selectors.mjs +97 -0
  28. package/esm2022/src/utils/correlation-id-generator.mjs +31 -0
  29. package/esm2022/src/utils/default-logger.mjs +26 -0
  30. package/esm2022/src/utils/default-pluralizer.mjs +72 -0
  31. package/{fesm2020 → fesm2022}/ngrx-data.mjs +90 -90
  32. package/fesm2022/ngrx-data.mjs.map +1 -0
  33. package/package.json +10 -16
  34. package/schematics/ng-add/index.js +6 -6
  35. package/schematics/ng-add/index.js.map +1 -1
  36. package/schematics/ng-add/schema.js +1 -1
  37. package/schematics-core/index.js +50 -61
  38. package/schematics-core/index.js.map +1 -1
  39. package/schematics-core/utility/ast-utils.js +3 -3
  40. package/schematics-core/utility/change.js +2 -2
  41. package/schematics-core/utility/config.js +1 -1
  42. package/schematics-core/utility/find-component.js +2 -2
  43. package/schematics-core/utility/find-module.js +2 -2
  44. package/schematics-core/utility/json-utilts.js +2 -2
  45. package/schematics-core/utility/libs-version.js +2 -2
  46. package/schematics-core/utility/libs-version.js.map +1 -1
  47. package/schematics-core/utility/ngrx-utils.js +3 -3
  48. package/schematics-core/utility/package.js +1 -1
  49. package/schematics-core/utility/parse-name.js +2 -2
  50. package/schematics-core/utility/project.js +1 -1
  51. package/schematics-core/utility/strings.js +1 -1
  52. package/schematics-core/utility/update.js +1 -1
  53. package/schematics-core/utility/visitors.js +7 -7
  54. package/src/actions/entity-cache-change-set.d.ts +1 -1
  55. package/src/dataservices/interfaces.d.ts +2 -2
  56. package/src/dispatchers/entity-commands.d.ts +6 -0
  57. package/src/entity-metadata/entity-filters.d.ts +1 -1
  58. package/src/reducers/entity-collection-reducer.d.ts +1 -1
  59. package/src/reducers/entity-collection.d.ts +1 -1
  60. package/src/selectors/entity-cache-selector.d.ts +1 -1
  61. package/esm2020/src/actions/entity-action-factory.mjs +0 -50
  62. package/esm2020/src/actions/entity-action-guard.mjs +0 -130
  63. package/esm2020/src/dataservices/default-data.service.mjs +0 -209
  64. package/esm2020/src/dataservices/entity-cache-data.service.mjs +0 -146
  65. package/esm2020/src/dataservices/entity-data.service.mjs +0 -63
  66. package/esm2020/src/dataservices/http-url-generator.mjs +0 -87
  67. package/esm2020/src/dataservices/persistence-result-handler.service.mjs +0 -49
  68. package/esm2020/src/dispatchers/entity-cache-dispatcher.mjs +0 -163
  69. package/esm2020/src/dispatchers/entity-commands.mjs +0 -2
  70. package/esm2020/src/dispatchers/entity-dispatcher-default-options.mjs +0 -30
  71. package/esm2020/src/dispatchers/entity-dispatcher-factory.mjs +0 -67
  72. package/esm2020/src/effects/entity-cache-effects.mjs +0 -115
  73. package/esm2020/src/effects/entity-effects.mjs +0 -148
  74. package/esm2020/src/entity-data-without-effects.module.mjs +0 -27
  75. package/esm2020/src/entity-data.module.mjs +0 -28
  76. package/esm2020/src/entity-metadata/entity-definition.service.mjs +0 -93
  77. package/esm2020/src/entity-services/entity-collection-service-elements-factory.mjs +0 -38
  78. package/esm2020/src/entity-services/entity-collection-service-factory.mjs +0 -28
  79. package/esm2020/src/entity-services/entity-services-base.mjs +0 -119
  80. package/esm2020/src/entity-services/entity-services-elements.mjs +0 -33
  81. package/esm2020/src/reducers/entity-cache-reducer.mjs +0 -271
  82. package/esm2020/src/reducers/entity-collection-creator.mjs +0 -37
  83. package/esm2020/src/reducers/entity-collection-reducer-registry.mjs +0 -68
  84. package/esm2020/src/reducers/entity-collection-reducer.mjs +0 -24
  85. package/esm2020/src/selectors/entity-selectors$.mjs +0 -52
  86. package/esm2020/src/selectors/entity-selectors.mjs +0 -96
  87. package/esm2020/src/utils/correlation-id-generator.mjs +0 -30
  88. package/esm2020/src/utils/default-logger.mjs +0 -25
  89. package/esm2020/src/utils/default-pluralizer.mjs +0 -71
  90. package/fesm2015/ngrx-data.mjs +0 -4956
  91. package/fesm2015/ngrx-data.mjs.map +0 -1
  92. package/fesm2020/ngrx-data.mjs.map +0 -1
  93. /package/{esm2020 → esm2022}/index.mjs +0 -0
  94. /package/{esm2020 → esm2022}/ngrx-data.mjs +0 -0
  95. /package/{esm2020 → esm2022}/public_api.mjs +0 -0
  96. /package/{esm2020 → esm2022}/src/actions/entity-action-operators.mjs +0 -0
  97. /package/{esm2020 → esm2022}/src/actions/entity-action.mjs +0 -0
  98. /package/{esm2020 → esm2022}/src/actions/entity-cache-action.mjs +0 -0
  99. /package/{esm2020 → esm2022}/src/actions/entity-cache-change-set.mjs +0 -0
  100. /package/{esm2020 → esm2022}/src/actions/entity-op.mjs +0 -0
  101. /package/{esm2020 → esm2022}/src/actions/merge-strategy.mjs +0 -0
  102. /package/{esm2020 → esm2022}/src/actions/update-response-data.mjs +0 -0
  103. /package/{esm2020 → esm2022}/src/dataservices/data-service-error.mjs +0 -0
  104. /package/{esm2020 → esm2022}/src/dataservices/default-data-service-config.mjs +0 -0
  105. /package/{esm2020 → esm2022}/src/dataservices/interfaces.mjs +0 -0
  106. /package/{esm2020 → esm2022}/src/dispatchers/entity-dispatcher-base.mjs +0 -0
  107. /package/{esm2020 → esm2022}/src/dispatchers/entity-dispatcher.mjs +0 -0
  108. /package/{esm2020 → esm2022}/src/effects/entity-effects-scheduler.mjs +0 -0
  109. /package/{esm2020 → esm2022}/src/entity-data-config.mjs +0 -0
  110. /package/{esm2020 → esm2022}/src/entity-metadata/entity-definition.mjs +0 -0
  111. /package/{esm2020 → esm2022}/src/entity-metadata/entity-filters.mjs +0 -0
  112. /package/{esm2020 → esm2022}/src/entity-metadata/entity-metadata.mjs +0 -0
  113. /package/{esm2020 → esm2022}/src/entity-services/entity-collection-service-base.mjs +0 -0
  114. /package/{esm2020 → esm2022}/src/entity-services/entity-collection-service.mjs +0 -0
  115. /package/{esm2020 → esm2022}/src/entity-services/entity-services.mjs +0 -0
  116. /package/{esm2020 → esm2022}/src/index.mjs +0 -0
  117. /package/{esm2020 → esm2022}/src/provide-entity-data.mjs +0 -0
  118. /package/{esm2020 → esm2022}/src/reducers/constants.mjs +0 -0
  119. /package/{esm2020 → esm2022}/src/reducers/entity-cache.mjs +0 -0
  120. /package/{esm2020 → esm2022}/src/reducers/entity-change-tracker-base.mjs +0 -0
  121. /package/{esm2020 → esm2022}/src/reducers/entity-change-tracker.mjs +0 -0
  122. /package/{esm2020 → esm2022}/src/reducers/entity-collection.mjs +0 -0
  123. /package/{esm2020 → esm2022}/src/selectors/entity-cache-selector.mjs +0 -0
  124. /package/{esm2020 → esm2022}/src/utils/guid-fns.mjs +0 -0
  125. /package/{esm2020 → esm2022}/src/utils/interfaces.mjs +0 -0
  126. /package/{esm2020 → esm2022}/src/utils/utilities.mjs +0 -0
@@ -0,0 +1,64 @@
1
+ import { Injectable } from '@angular/core';
2
+ import * as i0 from "@angular/core";
3
+ import * as i1 from "./default-data.service";
4
+ /**
5
+ * Registry of EntityCollection data services that make REST-like CRUD calls
6
+ * to entity collection endpoints.
7
+ */
8
+ class EntityDataService {
9
+ // TODO: Optionally inject specialized entity data services
10
+ // for those that aren't derived from BaseDataService.
11
+ constructor(defaultDataServiceFactory) {
12
+ this.defaultDataServiceFactory = defaultDataServiceFactory;
13
+ this.services = {};
14
+ }
15
+ /**
16
+ * Get (or create) a data service for entity type
17
+ * @param entityName - the name of the type
18
+ *
19
+ * Examples:
20
+ * getService('Hero'); // data service for Heroes, untyped
21
+ * getService<Hero>('Hero'); // data service for Heroes, typed as Hero
22
+ */
23
+ getService(entityName) {
24
+ entityName = entityName.trim();
25
+ let service = this.services[entityName];
26
+ if (!service) {
27
+ service = this.defaultDataServiceFactory.create(entityName);
28
+ this.services[entityName] = service;
29
+ }
30
+ return service;
31
+ }
32
+ /**
33
+ * Register an EntityCollectionDataService for an entity type
34
+ * @param entityName - the name of the entity type
35
+ * @param service - data service for that entity type
36
+ *
37
+ * Examples:
38
+ * registerService('Hero', myHeroDataService);
39
+ * registerService('Villain', myVillainDataService);
40
+ */
41
+ registerService(entityName, service) {
42
+ this.services[entityName.trim()] = service;
43
+ }
44
+ /**
45
+ * Register a batch of data services.
46
+ * @param services - data services to merge into existing services
47
+ *
48
+ * Examples:
49
+ * registerServices({
50
+ * Hero: myHeroDataService,
51
+ * Villain: myVillainDataService
52
+ * });
53
+ */
54
+ registerServices(services) {
55
+ this.services = { ...this.services, ...services };
56
+ }
57
+ /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.0", ngImport: i0, type: EntityDataService, deps: [{ token: i1.DefaultDataServiceFactory }], target: i0.ɵɵFactoryTarget.Injectable }); }
58
+ /** @nocollapse */ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.0.0", ngImport: i0, type: EntityDataService }); }
59
+ }
60
+ export { EntityDataService };
61
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.0", ngImport: i0, type: EntityDataService, decorators: [{
62
+ type: Injectable
63
+ }], ctorParameters: function () { return [{ type: i1.DefaultDataServiceFactory }]; } });
64
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW50aXR5LWRhdGEuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL21vZHVsZXMvZGF0YS9zcmMvZGF0YXNlcnZpY2VzL2VudGl0eS1kYXRhLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQzs7O0FBSzNDOzs7R0FHRztBQUNILE1BQ2EsaUJBQWlCO0lBRzVCLDREQUE0RDtJQUM1RCxzREFBc0Q7SUFDdEQsWUFBc0IseUJBQW9EO1FBQXBELDhCQUF5QixHQUF6Qix5QkFBeUIsQ0FBMkI7UUFKaEUsYUFBUSxHQUF5RCxFQUFFLENBQUM7SUFJRCxDQUFDO0lBRTlFOzs7Ozs7O09BT0c7SUFDSCxVQUFVLENBQUksVUFBa0I7UUFDOUIsVUFBVSxHQUFHLFVBQVUsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUMvQixJQUFJLE9BQU8sR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ3hDLElBQUksQ0FBQyxPQUFPLEVBQUU7WUFDWixPQUFPLEdBQUcsSUFBSSxDQUFDLHlCQUF5QixDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQztZQUM1RCxJQUFJLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxHQUFHLE9BQU8sQ0FBQztTQUNyQztRQUNELE9BQU8sT0FBTyxDQUFDO0lBQ2pCLENBQUM7SUFFRDs7Ozs7Ozs7T0FRRztJQUNILGVBQWUsQ0FDYixVQUFrQixFQUNsQixPQUF1QztRQUV2QyxJQUFJLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxHQUFHLE9BQU8sQ0FBQztJQUM3QyxDQUFDO0lBRUQ7Ozs7Ozs7OztPQVNHO0lBQ0gsZ0JBQWdCLENBQUMsUUFFaEI7UUFDQyxJQUFJLENBQUMsUUFBUSxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUMsUUFBUSxFQUFFLEdBQUcsUUFBUSxFQUFFLENBQUM7SUFDcEQsQ0FBQztpSUF2RFUsaUJBQWlCO3FJQUFqQixpQkFBaUI7O1NBQWpCLGlCQUFpQjsyRkFBakIsaUJBQWlCO2tCQUQ3QixVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQgeyBFbnRpdHlDb2xsZWN0aW9uRGF0YVNlcnZpY2UgfSBmcm9tICcuL2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgRGVmYXVsdERhdGFTZXJ2aWNlRmFjdG9yeSB9IGZyb20gJy4vZGVmYXVsdC1kYXRhLnNlcnZpY2UnO1xuXG4vKipcbiAqIFJlZ2lzdHJ5IG9mIEVudGl0eUNvbGxlY3Rpb24gZGF0YSBzZXJ2aWNlcyB0aGF0IG1ha2UgUkVTVC1saWtlIENSVUQgY2FsbHNcbiAqIHRvIGVudGl0eSBjb2xsZWN0aW9uIGVuZHBvaW50cy5cbiAqL1xuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIEVudGl0eURhdGFTZXJ2aWNlIHtcbiAgcHJvdGVjdGVkIHNlcnZpY2VzOiB7IFtuYW1lOiBzdHJpbmddOiBFbnRpdHlDb2xsZWN0aW9uRGF0YVNlcnZpY2U8YW55PiB9ID0ge307XG5cbiAgLy8gVE9ETzogIE9wdGlvbmFsbHkgaW5qZWN0IHNwZWNpYWxpemVkIGVudGl0eSBkYXRhIHNlcnZpY2VzXG4gIC8vIGZvciB0aG9zZSB0aGF0IGFyZW4ndCBkZXJpdmVkIGZyb20gQmFzZURhdGFTZXJ2aWNlLlxuICBjb25zdHJ1Y3Rvcihwcm90ZWN0ZWQgZGVmYXVsdERhdGFTZXJ2aWNlRmFjdG9yeTogRGVmYXVsdERhdGFTZXJ2aWNlRmFjdG9yeSkge31cblxuICAvKipcbiAgICogR2V0IChvciBjcmVhdGUpIGEgZGF0YSBzZXJ2aWNlIGZvciBlbnRpdHkgdHlwZVxuICAgKiBAcGFyYW0gZW50aXR5TmFtZSAtIHRoZSBuYW1lIG9mIHRoZSB0eXBlXG4gICAqXG4gICAqIEV4YW1wbGVzOlxuICAgKiAgIGdldFNlcnZpY2UoJ0hlcm8nKTsgLy8gZGF0YSBzZXJ2aWNlIGZvciBIZXJvZXMsIHVudHlwZWRcbiAgICogICBnZXRTZXJ2aWNlPEhlcm8+KCdIZXJvJyk7IC8vIGRhdGEgc2VydmljZSBmb3IgSGVyb2VzLCB0eXBlZCBhcyBIZXJvXG4gICAqL1xuICBnZXRTZXJ2aWNlPFQ+KGVudGl0eU5hbWU6IHN0cmluZyk6IEVudGl0eUNvbGxlY3Rpb25EYXRhU2VydmljZTxUPiB7XG4gICAgZW50aXR5TmFtZSA9IGVudGl0eU5hbWUudHJpbSgpO1xuICAgIGxldCBzZXJ2aWNlID0gdGhpcy5zZXJ2aWNlc1tlbnRpdHlOYW1lXTtcbiAgICBpZiAoIXNlcnZpY2UpIHtcbiAgICAgIHNlcnZpY2UgPSB0aGlzLmRlZmF1bHREYXRhU2VydmljZUZhY3RvcnkuY3JlYXRlKGVudGl0eU5hbWUpO1xuICAgICAgdGhpcy5zZXJ2aWNlc1tlbnRpdHlOYW1lXSA9IHNlcnZpY2U7XG4gICAgfVxuICAgIHJldHVybiBzZXJ2aWNlO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlZ2lzdGVyIGFuIEVudGl0eUNvbGxlY3Rpb25EYXRhU2VydmljZSBmb3IgYW4gZW50aXR5IHR5cGVcbiAgICogQHBhcmFtIGVudGl0eU5hbWUgLSB0aGUgbmFtZSBvZiB0aGUgZW50aXR5IHR5cGVcbiAgICogQHBhcmFtIHNlcnZpY2UgLSBkYXRhIHNlcnZpY2UgZm9yIHRoYXQgZW50aXR5IHR5cGVcbiAgICpcbiAgICogRXhhbXBsZXM6XG4gICAqICAgcmVnaXN0ZXJTZXJ2aWNlKCdIZXJvJywgbXlIZXJvRGF0YVNlcnZpY2UpO1xuICAgKiAgIHJlZ2lzdGVyU2VydmljZSgnVmlsbGFpbicsIG15VmlsbGFpbkRhdGFTZXJ2aWNlKTtcbiAgICovXG4gIHJlZ2lzdGVyU2VydmljZTxUPihcbiAgICBlbnRpdHlOYW1lOiBzdHJpbmcsXG4gICAgc2VydmljZTogRW50aXR5Q29sbGVjdGlvbkRhdGFTZXJ2aWNlPFQ+XG4gICkge1xuICAgIHRoaXMuc2VydmljZXNbZW50aXR5TmFtZS50cmltKCldID0gc2VydmljZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWdpc3RlciBhIGJhdGNoIG9mIGRhdGEgc2VydmljZXMuXG4gICAqIEBwYXJhbSBzZXJ2aWNlcyAtIGRhdGEgc2VydmljZXMgdG8gbWVyZ2UgaW50byBleGlzdGluZyBzZXJ2aWNlc1xuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICogICByZWdpc3RlclNlcnZpY2VzKHtcbiAgICogICAgIEhlcm86IG15SGVyb0RhdGFTZXJ2aWNlLFxuICAgKiAgICAgVmlsbGFpbjogbXlWaWxsYWluRGF0YVNlcnZpY2VcbiAgICogICB9KTtcbiAgICovXG4gIHJlZ2lzdGVyU2VydmljZXMoc2VydmljZXM6IHtcbiAgICBbbmFtZTogc3RyaW5nXTogRW50aXR5Q29sbGVjdGlvbkRhdGFTZXJ2aWNlPGFueT47XG4gIH0pIHtcbiAgICB0aGlzLnNlcnZpY2VzID0geyAuLi50aGlzLnNlcnZpY2VzLCAuLi5zZXJ2aWNlcyB9O1xuICB9XG59XG4iXX0=
@@ -0,0 +1,88 @@
1
+ import { Injectable } from '@angular/core';
2
+ import * as i0 from "@angular/core";
3
+ import * as i1 from "../utils/interfaces";
4
+ /**
5
+ * Known resource URLS for specific entity types.
6
+ * Each entity's resource URLS are endpoints that
7
+ * target single entity and multi-entity HTTP operations.
8
+ * Used by the `DefaultHttpUrlGenerator`.
9
+ */
10
+ export class EntityHttpResourceUrls {
11
+ }
12
+ /**
13
+ * Generate the base part of an HTTP URL for
14
+ * single entity or entity collection resource
15
+ */
16
+ export class HttpUrlGenerator {
17
+ }
18
+ class DefaultHttpUrlGenerator {
19
+ constructor(pluralizer) {
20
+ this.pluralizer = pluralizer;
21
+ /**
22
+ * Known single-entity and collection resource URLs for HTTP calls.
23
+ * Generator methods returns these resource URLs for a given entity type name.
24
+ * If the resources for an entity type name are not know, it generates
25
+ * and caches a resource name for future use
26
+ */
27
+ this.knownHttpResourceUrls = {};
28
+ }
29
+ /**
30
+ * Get or generate the entity and collection resource URLs for the given entity type name
31
+ * @param entityName {string} Name of the entity type, e.g, 'Hero'
32
+ * @param root {string} Root path to the resource, e.g., 'some-api`
33
+ */
34
+ getResourceUrls(entityName, root, trailingSlashEndpoints = false) {
35
+ let resourceUrls = this.knownHttpResourceUrls[entityName];
36
+ if (!resourceUrls) {
37
+ const nRoot = trailingSlashEndpoints ? root : normalizeRoot(root);
38
+ resourceUrls = {
39
+ entityResourceUrl: `${nRoot}/${entityName}/`.toLowerCase(),
40
+ collectionResourceUrl: `${nRoot}/${this.pluralizer.pluralize(entityName)}/`.toLowerCase(),
41
+ };
42
+ this.registerHttpResourceUrls({ [entityName]: resourceUrls });
43
+ }
44
+ return resourceUrls;
45
+ }
46
+ /**
47
+ * Create the path to a single entity resource
48
+ * @param entityName {string} Name of the entity type, e.g, 'Hero'
49
+ * @param root {string} Root path to the resource, e.g., 'some-api`
50
+ * @returns complete path to resource, e.g, 'some-api/hero'
51
+ */
52
+ entityResource(entityName, root, trailingSlashEndpoints) {
53
+ return this.getResourceUrls(entityName, root, trailingSlashEndpoints)
54
+ .entityResourceUrl;
55
+ }
56
+ /**
57
+ * Create the path to a multiple entity (collection) resource
58
+ * @param entityName {string} Name of the entity type, e.g, 'Hero'
59
+ * @param root {string} Root path to the resource, e.g., 'some-api`
60
+ * @returns complete path to resource, e.g, 'some-api/heroes'
61
+ */
62
+ collectionResource(entityName, root) {
63
+ return this.getResourceUrls(entityName, root).collectionResourceUrl;
64
+ }
65
+ /**
66
+ * Register known single-entity and collection resource URLs for HTTP calls
67
+ * @param entityHttpResourceUrls {EntityHttpResourceUrls} resource urls for specific entity type names
68
+ * Well-formed resource urls end in a '/';
69
+ * Note: this method does not ensure that resource urls are well-formed.
70
+ */
71
+ registerHttpResourceUrls(entityHttpResourceUrls) {
72
+ this.knownHttpResourceUrls = {
73
+ ...this.knownHttpResourceUrls,
74
+ ...(entityHttpResourceUrls || {}),
75
+ };
76
+ }
77
+ /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.0", ngImport: i0, type: DefaultHttpUrlGenerator, deps: [{ token: i1.Pluralizer }], target: i0.ɵɵFactoryTarget.Injectable }); }
78
+ /** @nocollapse */ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.0.0", ngImport: i0, type: DefaultHttpUrlGenerator }); }
79
+ }
80
+ export { DefaultHttpUrlGenerator };
81
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.0", ngImport: i0, type: DefaultHttpUrlGenerator, decorators: [{
82
+ type: Injectable
83
+ }], ctorParameters: function () { return [{ type: i1.Pluralizer }]; } });
84
+ /** Remove leading & trailing spaces or slashes */
85
+ export function normalizeRoot(root) {
86
+ return root.replace(/^[/\s]+|[/\s]+$/g, '');
87
+ }
88
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaHR0cC11cmwtZ2VuZXJhdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbW9kdWxlcy9kYXRhL3NyYy9kYXRhc2VydmljZXMvaHR0cC11cmwtZ2VuZXJhdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7OztBQUczQzs7Ozs7R0FLRztBQUNILE1BQU0sT0FBZ0Isc0JBQXNCO0NBRTNDO0FBdUJEOzs7R0FHRztBQUNILE1BQU0sT0FBZ0IsZ0JBQWdCO0NBd0JyQztBQUVELE1BQ2EsdUJBQXVCO0lBU2xDLFlBQW9CLFVBQXNCO1FBQXRCLGVBQVUsR0FBVixVQUFVLENBQVk7UUFSMUM7Ozs7O1dBS0c7UUFDTywwQkFBcUIsR0FBMkIsRUFBRSxDQUFDO0lBRWhCLENBQUM7SUFFOUM7Ozs7T0FJRztJQUNPLGVBQWUsQ0FDdkIsVUFBa0IsRUFDbEIsSUFBWSxFQUNaLHlCQUFrQyxLQUFLO1FBRXZDLElBQUksWUFBWSxHQUFHLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUMxRCxJQUFJLENBQUMsWUFBWSxFQUFFO1lBQ2pCLE1BQU0sS0FBSyxHQUFHLHNCQUFzQixDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUNsRSxZQUFZLEdBQUc7Z0JBQ2IsaUJBQWlCLEVBQUUsR0FBRyxLQUFLLElBQUksVUFBVSxHQUFHLENBQUMsV0FBVyxFQUFFO2dCQUMxRCxxQkFBcUIsRUFBRSxHQUFHLEtBQUssSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FDMUQsVUFBVSxDQUNYLEdBQUcsQ0FBQyxXQUFXLEVBQUU7YUFDbkIsQ0FBQztZQUNGLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxFQUFFLENBQUMsVUFBVSxDQUFDLEVBQUUsWUFBWSxFQUFFLENBQUMsQ0FBQztTQUMvRDtRQUNELE9BQU8sWUFBWSxDQUFDO0lBQ3RCLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILGNBQWMsQ0FDWixVQUFrQixFQUNsQixJQUFZLEVBQ1osc0JBQStCO1FBRS9CLE9BQU8sSUFBSSxDQUFDLGVBQWUsQ0FBQyxVQUFVLEVBQUUsSUFBSSxFQUFFLHNCQUFzQixDQUFDO2FBQ2xFLGlCQUFpQixDQUFDO0lBQ3ZCLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILGtCQUFrQixDQUFDLFVBQWtCLEVBQUUsSUFBWTtRQUNqRCxPQUFPLElBQUksQ0FBQyxlQUFlLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQyxDQUFDLHFCQUFxQixDQUFDO0lBQ3RFLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILHdCQUF3QixDQUN0QixzQkFBOEM7UUFFOUMsSUFBSSxDQUFDLHFCQUFxQixHQUFHO1lBQzNCLEdBQUcsSUFBSSxDQUFDLHFCQUFxQjtZQUM3QixHQUFHLENBQUMsc0JBQXNCLElBQUksRUFBRSxDQUFDO1NBQ2xDLENBQUM7SUFDSixDQUFDO2lJQXpFVSx1QkFBdUI7cUlBQXZCLHVCQUF1Qjs7U0FBdkIsdUJBQXVCOzJGQUF2Qix1QkFBdUI7a0JBRG5DLFVBQVU7O0FBNkVYLGtEQUFrRDtBQUNsRCxNQUFNLFVBQVUsYUFBYSxDQUFDLElBQVk7SUFDeEMsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLGtCQUFrQixFQUFFLEVBQUUsQ0FBQyxDQUFDO0FBQzlDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBQbHVyYWxpemVyIH0gZnJvbSAnLi4vdXRpbHMvaW50ZXJmYWNlcyc7XG5cbi8qKlxuICogS25vd24gcmVzb3VyY2UgVVJMUyBmb3Igc3BlY2lmaWMgZW50aXR5IHR5cGVzLlxuICogRWFjaCBlbnRpdHkncyByZXNvdXJjZSBVUkxTIGFyZSBlbmRwb2ludHMgdGhhdFxuICogdGFyZ2V0IHNpbmdsZSBlbnRpdHkgYW5kIG11bHRpLWVudGl0eSBIVFRQIG9wZXJhdGlvbnMuXG4gKiBVc2VkIGJ5IHRoZSBgRGVmYXVsdEh0dHBVcmxHZW5lcmF0b3JgLlxuICovXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgRW50aXR5SHR0cFJlc291cmNlVXJscyB7XG4gIFtlbnRpdHlOYW1lOiBzdHJpbmddOiBIdHRwUmVzb3VyY2VVcmxzO1xufVxuXG4vKipcbiAqIFJlc291cmNlIFVSTFMgZm9yIEhUVFAgb3BlcmF0aW9ucyB0aGF0IHRhcmdldCBzaW5nbGUgZW50aXR5XG4gKiBhbmQgbXVsdGktZW50aXR5IGVuZHBvaW50cy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBIdHRwUmVzb3VyY2VVcmxzIHtcbiAgLyoqXG4gICAqIFRoZSBVUkwgcGF0aCBmb3IgYSBzaW5nbGUgZW50aXR5IGVuZHBvaW50LCBlLmcsIGBzb21lLWFwaS1yb290L2hlcm8vYFxuICAgKiBzdWNoIGFzIHlvdSdkIHVzZSB0byBhZGQgYSBoZXJvLlxuICAgKiBFeGFtcGxlOiBgaHR0cENsaWVudC5wb3N0PEhlcm8+KCdzb21lLWFwaS1yb290L2hlcm8vJywgYWRkZWRIZXJvKWAuXG4gICAqIE5vdGUgdHJhaWxpbmcgc2xhc2ggKC8pLlxuICAgKi9cbiAgZW50aXR5UmVzb3VyY2VVcmw6IHN0cmluZztcbiAgLyoqXG4gICAqIFRoZSBVUkwgcGF0aCBmb3IgYSBtdWx0aXBsZS1lbnRpdHkgZW5kcG9pbnQsIGUuZywgYHNvbWUtYXBpLXJvb3QvaGVyb2VzL2BcbiAgICogc3VjaCBhcyB5b3UnZCB1c2Ugd2hlbiBnZXR0aW5nIGFsbCBoZXJvZXMuXG4gICAqIEV4YW1wbGU6IGBodHRwQ2xpZW50LmdldDxIZXJvW10+KCdzb21lLWFwaS1yb290L2hlcm9lcy8nKWBcbiAgICogTm90ZSB0cmFpbGluZyBzbGFzaCAoLykuXG4gICAqL1xuICBjb2xsZWN0aW9uUmVzb3VyY2VVcmw6IHN0cmluZztcbn1cblxuLyoqXG4gKiBHZW5lcmF0ZSB0aGUgYmFzZSBwYXJ0IG9mIGFuIEhUVFAgVVJMIGZvclxuICogc2luZ2xlIGVudGl0eSBvciBlbnRpdHkgY29sbGVjdGlvbiByZXNvdXJjZVxuICovXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgSHR0cFVybEdlbmVyYXRvciB7XG4gIC8qKlxuICAgKiBSZXR1cm4gdGhlIGJhc2UgVVJMIGZvciBhIHNpbmdsZSBlbnRpdHkgcmVzb3VyY2UsXG4gICAqIGUuZy4sIHRoZSBiYXNlIFVSTCB0byBnZXQgYSBzaW5nbGUgaGVybyBieSBpdHMgaWRcbiAgICovXG4gIGFic3RyYWN0IGVudGl0eVJlc291cmNlKFxuICAgIGVudGl0eU5hbWU6IHN0cmluZyxcbiAgICByb290OiBzdHJpbmcsXG4gICAgdHJhaWxpbmdTbGFzaEVuZHBvaW50czogYm9vbGVhblxuICApOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFJldHVybiB0aGUgYmFzZSBVUkwgZm9yIGEgY29sbGVjdGlvbiByZXNvdXJjZSxcbiAgICogZS5nLiwgdGhlIGJhc2UgVVJMIHRvIGdldCBhbGwgaGVyb2VzXG4gICAqL1xuICBhYnN0cmFjdCBjb2xsZWN0aW9uUmVzb3VyY2UoZW50aXR5TmFtZTogc3RyaW5nLCByb290OiBzdHJpbmcpOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFJlZ2lzdGVyIGtub3duIHNpbmdsZS1lbnRpdHkgYW5kIGNvbGxlY3Rpb24gcmVzb3VyY2UgVVJMcyBmb3IgSFRUUCBjYWxsc1xuICAgKiBAcGFyYW0gZW50aXR5SHR0cFJlc291cmNlVXJscyB7RW50aXR5SHR0cFJlc291cmNlVXJsc30gcmVzb3VyY2UgdXJscyBmb3Igc3BlY2lmaWMgZW50aXR5IHR5cGUgbmFtZXNcbiAgICovXG4gIGFic3RyYWN0IHJlZ2lzdGVySHR0cFJlc291cmNlVXJscyhcbiAgICBlbnRpdHlIdHRwUmVzb3VyY2VVcmxzPzogRW50aXR5SHR0cFJlc291cmNlVXJsc1xuICApOiB2b2lkO1xufVxuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgRGVmYXVsdEh0dHBVcmxHZW5lcmF0b3IgaW1wbGVtZW50cyBIdHRwVXJsR2VuZXJhdG9yIHtcbiAgLyoqXG4gICAqIEtub3duIHNpbmdsZS1lbnRpdHkgYW5kIGNvbGxlY3Rpb24gcmVzb3VyY2UgVVJMcyBmb3IgSFRUUCBjYWxscy5cbiAgICogR2VuZXJhdG9yIG1ldGhvZHMgcmV0dXJucyB0aGVzZSByZXNvdXJjZSBVUkxzIGZvciBhIGdpdmVuIGVudGl0eSB0eXBlIG5hbWUuXG4gICAqIElmIHRoZSByZXNvdXJjZXMgZm9yIGFuIGVudGl0eSB0eXBlIG5hbWUgYXJlIG5vdCBrbm93LCBpdCBnZW5lcmF0ZXNcbiAgICogYW5kIGNhY2hlcyBhIHJlc291cmNlIG5hbWUgZm9yIGZ1dHVyZSB1c2VcbiAgICovXG4gIHByb3RlY3RlZCBrbm93bkh0dHBSZXNvdXJjZVVybHM6IEVudGl0eUh0dHBSZXNvdXJjZVVybHMgPSB7fTtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHBsdXJhbGl6ZXI6IFBsdXJhbGl6ZXIpIHt9XG5cbiAgLyoqXG4gICAqIEdldCBvciBnZW5lcmF0ZSB0aGUgZW50aXR5IGFuZCBjb2xsZWN0aW9uIHJlc291cmNlIFVSTHMgZm9yIHRoZSBnaXZlbiBlbnRpdHkgdHlwZSBuYW1lXG4gICAqIEBwYXJhbSBlbnRpdHlOYW1lIHtzdHJpbmd9IE5hbWUgb2YgdGhlIGVudGl0eSB0eXBlLCBlLmcsICdIZXJvJ1xuICAgKiBAcGFyYW0gcm9vdCB7c3RyaW5nfSBSb290IHBhdGggdG8gdGhlIHJlc291cmNlLCBlLmcuLCAnc29tZS1hcGlgXG4gICAqL1xuICBwcm90ZWN0ZWQgZ2V0UmVzb3VyY2VVcmxzKFxuICAgIGVudGl0eU5hbWU6IHN0cmluZyxcbiAgICByb290OiBzdHJpbmcsXG4gICAgdHJhaWxpbmdTbGFzaEVuZHBvaW50czogYm9vbGVhbiA9IGZhbHNlXG4gICk6IEh0dHBSZXNvdXJjZVVybHMge1xuICAgIGxldCByZXNvdXJjZVVybHMgPSB0aGlzLmtub3duSHR0cFJlc291cmNlVXJsc1tlbnRpdHlOYW1lXTtcbiAgICBpZiAoIXJlc291cmNlVXJscykge1xuICAgICAgY29uc3QgblJvb3QgPSB0cmFpbGluZ1NsYXNoRW5kcG9pbnRzID8gcm9vdCA6IG5vcm1hbGl6ZVJvb3Qocm9vdCk7XG4gICAgICByZXNvdXJjZVVybHMgPSB7XG4gICAgICAgIGVudGl0eVJlc291cmNlVXJsOiBgJHtuUm9vdH0vJHtlbnRpdHlOYW1lfS9gLnRvTG93ZXJDYXNlKCksXG4gICAgICAgIGNvbGxlY3Rpb25SZXNvdXJjZVVybDogYCR7blJvb3R9LyR7dGhpcy5wbHVyYWxpemVyLnBsdXJhbGl6ZShcbiAgICAgICAgICBlbnRpdHlOYW1lXG4gICAgICAgICl9L2AudG9Mb3dlckNhc2UoKSxcbiAgICAgIH07XG4gICAgICB0aGlzLnJlZ2lzdGVySHR0cFJlc291cmNlVXJscyh7IFtlbnRpdHlOYW1lXTogcmVzb3VyY2VVcmxzIH0pO1xuICAgIH1cbiAgICByZXR1cm4gcmVzb3VyY2VVcmxzO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSB0aGUgcGF0aCB0byBhIHNpbmdsZSBlbnRpdHkgcmVzb3VyY2VcbiAgICogQHBhcmFtIGVudGl0eU5hbWUge3N0cmluZ30gTmFtZSBvZiB0aGUgZW50aXR5IHR5cGUsIGUuZywgJ0hlcm8nXG4gICAqIEBwYXJhbSByb290IHtzdHJpbmd9IFJvb3QgcGF0aCB0byB0aGUgcmVzb3VyY2UsIGUuZy4sICdzb21lLWFwaWBcbiAgICogQHJldHVybnMgY29tcGxldGUgcGF0aCB0byByZXNvdXJjZSwgZS5nLCAnc29tZS1hcGkvaGVybydcbiAgICovXG4gIGVudGl0eVJlc291cmNlKFxuICAgIGVudGl0eU5hbWU6IHN0cmluZyxcbiAgICByb290OiBzdHJpbmcsXG4gICAgdHJhaWxpbmdTbGFzaEVuZHBvaW50czogYm9vbGVhblxuICApOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldFJlc291cmNlVXJscyhlbnRpdHlOYW1lLCByb290LCB0cmFpbGluZ1NsYXNoRW5kcG9pbnRzKVxuICAgICAgLmVudGl0eVJlc291cmNlVXJsO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSB0aGUgcGF0aCB0byBhIG11bHRpcGxlIGVudGl0eSAoY29sbGVjdGlvbikgcmVzb3VyY2VcbiAgICogQHBhcmFtIGVudGl0eU5hbWUge3N0cmluZ30gTmFtZSBvZiB0aGUgZW50aXR5IHR5cGUsIGUuZywgJ0hlcm8nXG4gICAqIEBwYXJhbSByb290IHtzdHJpbmd9IFJvb3QgcGF0aCB0byB0aGUgcmVzb3VyY2UsIGUuZy4sICdzb21lLWFwaWBcbiAgICogQHJldHVybnMgY29tcGxldGUgcGF0aCB0byByZXNvdXJjZSwgZS5nLCAnc29tZS1hcGkvaGVyb2VzJ1xuICAgKi9cbiAgY29sbGVjdGlvblJlc291cmNlKGVudGl0eU5hbWU6IHN0cmluZywgcm9vdDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRSZXNvdXJjZVVybHMoZW50aXR5TmFtZSwgcm9vdCkuY29sbGVjdGlvblJlc291cmNlVXJsO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlZ2lzdGVyIGtub3duIHNpbmdsZS1lbnRpdHkgYW5kIGNvbGxlY3Rpb24gcmVzb3VyY2UgVVJMcyBmb3IgSFRUUCBjYWxsc1xuICAgKiBAcGFyYW0gZW50aXR5SHR0cFJlc291cmNlVXJscyB7RW50aXR5SHR0cFJlc291cmNlVXJsc30gcmVzb3VyY2UgdXJscyBmb3Igc3BlY2lmaWMgZW50aXR5IHR5cGUgbmFtZXNcbiAgICogV2VsbC1mb3JtZWQgcmVzb3VyY2UgdXJscyBlbmQgaW4gYSAnLyc7XG4gICAqIE5vdGU6IHRoaXMgbWV0aG9kIGRvZXMgbm90IGVuc3VyZSB0aGF0IHJlc291cmNlIHVybHMgYXJlIHdlbGwtZm9ybWVkLlxuICAgKi9cbiAgcmVnaXN0ZXJIdHRwUmVzb3VyY2VVcmxzKFxuICAgIGVudGl0eUh0dHBSZXNvdXJjZVVybHM6IEVudGl0eUh0dHBSZXNvdXJjZVVybHNcbiAgKTogdm9pZCB7XG4gICAgdGhpcy5rbm93bkh0dHBSZXNvdXJjZVVybHMgPSB7XG4gICAgICAuLi50aGlzLmtub3duSHR0cFJlc291cmNlVXJscyxcbiAgICAgIC4uLihlbnRpdHlIdHRwUmVzb3VyY2VVcmxzIHx8IHt9KSxcbiAgICB9O1xuICB9XG59XG5cbi8qKiBSZW1vdmUgbGVhZGluZyAmIHRyYWlsaW5nIHNwYWNlcyBvciBzbGFzaGVzICovXG5leHBvcnQgZnVuY3Rpb24gbm9ybWFsaXplUm9vdChyb290OiBzdHJpbmcpIHtcbiAgcmV0dXJuIHJvb3QucmVwbGFjZSgvXlsvXFxzXSt8Wy9cXHNdKyQvZywgJycpO1xufVxuIl19
@@ -0,0 +1,50 @@
1
+ import { Injectable } from '@angular/core';
2
+ import { DataServiceError, } from './data-service-error';
3
+ import { makeErrorOp, makeSuccessOp } from '../actions/entity-op';
4
+ import * as i0 from "@angular/core";
5
+ import * as i1 from "../utils/interfaces";
6
+ import * as i2 from "../actions/entity-action-factory";
7
+ /**
8
+ * Handling of responses from persistence operation
9
+ */
10
+ export class PersistenceResultHandler {
11
+ }
12
+ /**
13
+ * Default handling of responses from persistence operation,
14
+ * specifically an EntityDataService
15
+ */
16
+ class DefaultPersistenceResultHandler {
17
+ constructor(logger, entityActionFactory) {
18
+ this.logger = logger;
19
+ this.entityActionFactory = entityActionFactory;
20
+ }
21
+ /** Handle successful result of persistence operation on an EntityAction */
22
+ handleSuccess(originalAction) {
23
+ const successOp = makeSuccessOp(originalAction.payload.entityOp);
24
+ return (data) => this.entityActionFactory.createFromAction(originalAction, {
25
+ entityOp: successOp,
26
+ data,
27
+ });
28
+ }
29
+ /** Handle error result of persistence operation on an EntityAction */
30
+ handleError(originalAction) {
31
+ const errorOp = makeErrorOp(originalAction.payload.entityOp);
32
+ return (err) => {
33
+ const error = err instanceof DataServiceError ? err : new DataServiceError(err, null);
34
+ const errorData = { error, originalAction };
35
+ this.logger.error(errorData);
36
+ const action = this.entityActionFactory.createFromAction(originalAction, {
37
+ entityOp: errorOp,
38
+ data: errorData,
39
+ });
40
+ return action;
41
+ };
42
+ }
43
+ /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.0", ngImport: i0, type: DefaultPersistenceResultHandler, deps: [{ token: i1.Logger }, { token: i2.EntityActionFactory }], target: i0.ɵɵFactoryTarget.Injectable }); }
44
+ /** @nocollapse */ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.0.0", ngImport: i0, type: DefaultPersistenceResultHandler }); }
45
+ }
46
+ export { DefaultPersistenceResultHandler };
47
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.0", ngImport: i0, type: DefaultPersistenceResultHandler, decorators: [{
48
+ type: Injectable
49
+ }], ctorParameters: function () { return [{ type: i1.Logger }, { type: i2.EntityActionFactory }]; } });
50
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGVyc2lzdGVuY2UtcmVzdWx0LWhhbmRsZXIuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL21vZHVsZXMvZGF0YS9zcmMvZGF0YXNlcnZpY2VzL3BlcnNpc3RlbmNlLXJlc3VsdC1oYW5kbGVyLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUczQyxPQUFPLEVBQ0wsZ0JBQWdCLEdBRWpCLE1BQU0sc0JBQXNCLENBQUM7QUFHOUIsT0FBTyxFQUFFLFdBQVcsRUFBRSxhQUFhLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQzs7OztBQUdsRTs7R0FFRztBQUNILE1BQU0sT0FBZ0Isd0JBQXdCO0NBVTdDO0FBRUQ7OztHQUdHO0FBQ0gsTUFDYSwrQkFBK0I7SUFHMUMsWUFDVSxNQUFjLEVBQ2QsbUJBQXdDO1FBRHhDLFdBQU0sR0FBTixNQUFNLENBQVE7UUFDZCx3QkFBbUIsR0FBbkIsbUJBQW1CLENBQXFCO0lBQy9DLENBQUM7SUFFSiwyRUFBMkU7SUFDM0UsYUFBYSxDQUFDLGNBQTRCO1FBQ3hDLE1BQU0sU0FBUyxHQUFHLGFBQWEsQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ2pFLE9BQU8sQ0FBQyxJQUFTLEVBQUUsRUFBRSxDQUNuQixJQUFJLENBQUMsbUJBQW1CLENBQUMsZ0JBQWdCLENBQUMsY0FBYyxFQUFFO1lBQ3hELFFBQVEsRUFBRSxTQUFTO1lBQ25CLElBQUk7U0FDTCxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRUQsc0VBQXNFO0lBQ3RFLFdBQVcsQ0FDVCxjQUE0QjtRQUk1QixNQUFNLE9BQU8sR0FBRyxXQUFXLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUU3RCxPQUFPLENBQUMsR0FBNkIsRUFBRSxFQUFFO1lBQ3ZDLE1BQU0sS0FBSyxHQUNULEdBQUcsWUFBWSxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLGdCQUFnQixDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQztZQUMxRSxNQUFNLFNBQVMsR0FBaUMsRUFBRSxLQUFLLEVBQUUsY0FBYyxFQUFFLENBQUM7WUFDMUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUM7WUFDN0IsTUFBTSxNQUFNLEdBQ1YsSUFBSSxDQUFDLG1CQUFtQixDQUFDLGdCQUFnQixDQUN2QyxjQUFjLEVBQ2Q7Z0JBQ0UsUUFBUSxFQUFFLE9BQU87Z0JBQ2pCLElBQUksRUFBRSxTQUFTO2FBQ2hCLENBQ0YsQ0FBQztZQUNKLE9BQU8sTUFBTSxDQUFDO1FBQ2hCLENBQUMsQ0FBQztJQUNKLENBQUM7aUlBekNVLCtCQUErQjtxSUFBL0IsK0JBQStCOztTQUEvQiwrQkFBK0I7MkZBQS9CLCtCQUErQjtrQkFEM0MsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFjdGlvbiB9IGZyb20gJ0BuZ3J4L3N0b3JlJztcblxuaW1wb3J0IHtcbiAgRGF0YVNlcnZpY2VFcnJvcixcbiAgRW50aXR5QWN0aW9uRGF0YVNlcnZpY2VFcnJvcixcbn0gZnJvbSAnLi9kYXRhLXNlcnZpY2UtZXJyb3InO1xuaW1wb3J0IHsgRW50aXR5QWN0aW9uIH0gZnJvbSAnLi4vYWN0aW9ucy9lbnRpdHktYWN0aW9uJztcbmltcG9ydCB7IEVudGl0eUFjdGlvbkZhY3RvcnkgfSBmcm9tICcuLi9hY3Rpb25zL2VudGl0eS1hY3Rpb24tZmFjdG9yeSc7XG5pbXBvcnQgeyBtYWtlRXJyb3JPcCwgbWFrZVN1Y2Nlc3NPcCB9IGZyb20gJy4uL2FjdGlvbnMvZW50aXR5LW9wJztcbmltcG9ydCB7IExvZ2dlciB9IGZyb20gJy4uL3V0aWxzL2ludGVyZmFjZXMnO1xuXG4vKipcbiAqIEhhbmRsaW5nIG9mIHJlc3BvbnNlcyBmcm9tIHBlcnNpc3RlbmNlIG9wZXJhdGlvblxuICovXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgUGVyc2lzdGVuY2VSZXN1bHRIYW5kbGVyIHtcbiAgLyoqIEhhbmRsZSBzdWNjZXNzZnVsIHJlc3VsdCBvZiBwZXJzaXN0ZW5jZSBvcGVyYXRpb24gZm9yIGFuIGFjdGlvbiAqL1xuICBhYnN0cmFjdCBoYW5kbGVTdWNjZXNzKG9yaWdpbmFsQWN0aW9uOiBFbnRpdHlBY3Rpb24pOiAoZGF0YTogYW55KSA9PiBBY3Rpb247XG5cbiAgLyoqIEhhbmRsZSBlcnJvciByZXN1bHQgb2YgcGVyc2lzdGVuY2Ugb3BlcmF0aW9uIGZvciBhbiBhY3Rpb24gKi9cbiAgYWJzdHJhY3QgaGFuZGxlRXJyb3IoXG4gICAgb3JpZ2luYWxBY3Rpb246IEVudGl0eUFjdGlvblxuICApOiAoXG4gICAgZXJyb3I6IERhdGFTZXJ2aWNlRXJyb3IgfCBFcnJvclxuICApID0+IEVudGl0eUFjdGlvbjxFbnRpdHlBY3Rpb25EYXRhU2VydmljZUVycm9yPjtcbn1cblxuLyoqXG4gKiBEZWZhdWx0IGhhbmRsaW5nIG9mIHJlc3BvbnNlcyBmcm9tIHBlcnNpc3RlbmNlIG9wZXJhdGlvbixcbiAqIHNwZWNpZmljYWxseSBhbiBFbnRpdHlEYXRhU2VydmljZVxuICovXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgRGVmYXVsdFBlcnNpc3RlbmNlUmVzdWx0SGFuZGxlclxuICBpbXBsZW1lbnRzIFBlcnNpc3RlbmNlUmVzdWx0SGFuZGxlclxue1xuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGxvZ2dlcjogTG9nZ2VyLFxuICAgIHByaXZhdGUgZW50aXR5QWN0aW9uRmFjdG9yeTogRW50aXR5QWN0aW9uRmFjdG9yeVxuICApIHt9XG5cbiAgLyoqIEhhbmRsZSBzdWNjZXNzZnVsIHJlc3VsdCBvZiBwZXJzaXN0ZW5jZSBvcGVyYXRpb24gb24gYW4gRW50aXR5QWN0aW9uICovXG4gIGhhbmRsZVN1Y2Nlc3Mob3JpZ2luYWxBY3Rpb246IEVudGl0eUFjdGlvbik6IChkYXRhOiBhbnkpID0+IEFjdGlvbiB7XG4gICAgY29uc3Qgc3VjY2Vzc09wID0gbWFrZVN1Y2Nlc3NPcChvcmlnaW5hbEFjdGlvbi5wYXlsb2FkLmVudGl0eU9wKTtcbiAgICByZXR1cm4gKGRhdGE6IGFueSkgPT5cbiAgICAgIHRoaXMuZW50aXR5QWN0aW9uRmFjdG9yeS5jcmVhdGVGcm9tQWN0aW9uKG9yaWdpbmFsQWN0aW9uLCB7XG4gICAgICAgIGVudGl0eU9wOiBzdWNjZXNzT3AsXG4gICAgICAgIGRhdGEsXG4gICAgICB9KTtcbiAgfVxuXG4gIC8qKiBIYW5kbGUgZXJyb3IgcmVzdWx0IG9mIHBlcnNpc3RlbmNlIG9wZXJhdGlvbiBvbiBhbiBFbnRpdHlBY3Rpb24gKi9cbiAgaGFuZGxlRXJyb3IoXG4gICAgb3JpZ2luYWxBY3Rpb246IEVudGl0eUFjdGlvblxuICApOiAoXG4gICAgZXJyb3I6IERhdGFTZXJ2aWNlRXJyb3IgfCBFcnJvclxuICApID0+IEVudGl0eUFjdGlvbjxFbnRpdHlBY3Rpb25EYXRhU2VydmljZUVycm9yPiB7XG4gICAgY29uc3QgZXJyb3JPcCA9IG1ha2VFcnJvck9wKG9yaWdpbmFsQWN0aW9uLnBheWxvYWQuZW50aXR5T3ApO1xuXG4gICAgcmV0dXJuIChlcnI6IERhdGFTZXJ2aWNlRXJyb3IgfCBFcnJvcikgPT4ge1xuICAgICAgY29uc3QgZXJyb3IgPVxuICAgICAgICBlcnIgaW5zdGFuY2VvZiBEYXRhU2VydmljZUVycm9yID8gZXJyIDogbmV3IERhdGFTZXJ2aWNlRXJyb3IoZXJyLCBudWxsKTtcbiAgICAgIGNvbnN0IGVycm9yRGF0YTogRW50aXR5QWN0aW9uRGF0YVNlcnZpY2VFcnJvciA9IHsgZXJyb3IsIG9yaWdpbmFsQWN0aW9uIH07XG4gICAgICB0aGlzLmxvZ2dlci5lcnJvcihlcnJvckRhdGEpO1xuICAgICAgY29uc3QgYWN0aW9uID1cbiAgICAgICAgdGhpcy5lbnRpdHlBY3Rpb25GYWN0b3J5LmNyZWF0ZUZyb21BY3Rpb248RW50aXR5QWN0aW9uRGF0YVNlcnZpY2VFcnJvcj4oXG4gICAgICAgICAgb3JpZ2luYWxBY3Rpb24sXG4gICAgICAgICAge1xuICAgICAgICAgICAgZW50aXR5T3A6IGVycm9yT3AsXG4gICAgICAgICAgICBkYXRhOiBlcnJvckRhdGEsXG4gICAgICAgICAgfVxuICAgICAgICApO1xuICAgICAgcmV0dXJuIGFjdGlvbjtcbiAgICB9O1xuICB9XG59XG4iXX0=
@@ -0,0 +1,164 @@
1
+ import { Injectable, Inject } from '@angular/core';
2
+ import { ScannedActionsSubject } from '@ngrx/store';
3
+ import { of, throwError } from 'rxjs';
4
+ import { filter, mergeMap, shareReplay, take } from 'rxjs/operators';
5
+ import { PersistanceCanceled } from './entity-dispatcher';
6
+ import { ClearCollections, EntityCacheAction, LoadCollections, MergeQuerySet, SetEntityCache, SaveEntities, SaveEntitiesCancel, } from '../actions/entity-cache-action';
7
+ import * as i0 from "@angular/core";
8
+ import * as i1 from "../utils/correlation-id-generator";
9
+ import * as i2 from "./entity-dispatcher-default-options";
10
+ import * as i3 from "@ngrx/store";
11
+ import * as i4 from "rxjs";
12
+ /**
13
+ * Dispatches Entity Cache actions to the EntityCache reducer
14
+ */
15
+ class EntityCacheDispatcher {
16
+ constructor(
17
+ /** Generates correlation ids for query and save methods */
18
+ correlationIdGenerator,
19
+ /**
20
+ * Dispatcher options configure dispatcher behavior such as
21
+ * whether add is optimistic or pessimistic by default.
22
+ */
23
+ defaultDispatcherOptions,
24
+ /** Actions scanned by the store after it processed them with reducers. */
25
+ scannedActions$,
26
+ /** The store, scoped to the EntityCache */
27
+ store) {
28
+ this.correlationIdGenerator = correlationIdGenerator;
29
+ this.defaultDispatcherOptions = defaultDispatcherOptions;
30
+ this.store = store;
31
+ // Replay because sometimes in tests will fake data service with synchronous observable
32
+ // which makes subscriber miss the dispatched actions.
33
+ // Of course that's a testing mistake. But easy to forget, leading to painful debugging.
34
+ this.reducedActions$ = scannedActions$.pipe(shareReplay(1));
35
+ // Start listening so late subscriber won't miss the most recent action.
36
+ this.raSubscription = this.reducedActions$.subscribe();
37
+ }
38
+ /**
39
+ * Dispatch an Action to the store.
40
+ * @param action the Action
41
+ * @returns the dispatched Action
42
+ */
43
+ dispatch(action) {
44
+ this.store.dispatch(action);
45
+ return action;
46
+ }
47
+ /**
48
+ * Dispatch action to cancel the saveEntities request with matching correlation id.
49
+ * @param correlationId The correlation id for the corresponding action
50
+ * @param [reason] explains why canceled and by whom.
51
+ * @param [entityNames] array of entity names so can turn off loading flag for their collections.
52
+ * @param [tag] tag to identify the operation from the app perspective.
53
+ */
54
+ cancelSaveEntities(correlationId, reason, entityNames, tag) {
55
+ if (!correlationId) {
56
+ throw new Error('Missing correlationId');
57
+ }
58
+ const action = new SaveEntitiesCancel(correlationId, reason, entityNames, tag);
59
+ this.dispatch(action);
60
+ }
61
+ /** Clear the named entity collections in cache
62
+ * @param [collections] Array of names of the collections to clear.
63
+ * If empty array, does nothing. If null/undefined/no array, clear all collections.
64
+ * @param [tag] tag to identify the operation from the app perspective.
65
+ */
66
+ clearCollections(collections, tag) {
67
+ this.dispatch(new ClearCollections(collections, tag));
68
+ }
69
+ /**
70
+ * Load multiple entity collections at the same time.
71
+ * before any selectors$ observables emit.
72
+ * @param collections The collections to load, typically the result of a query.
73
+ * @param [tag] tag to identify the operation from the app perspective.
74
+ * in the form of a map of entity collections.
75
+ */
76
+ loadCollections(collections, tag) {
77
+ this.dispatch(new LoadCollections(collections, tag));
78
+ }
79
+ /**
80
+ * Merges entities from a query result
81
+ * that returned entities from multiple collections.
82
+ * Corresponding entity cache reducer should add and update all collections
83
+ * at the same time, before any selectors$ observables emit.
84
+ * @param querySet The result of the query in the form of a map of entity collections.
85
+ * These are the entity data to merge into the respective collections.
86
+ * @param mergeStrategy How to merge a queried entity when it is already in the collection.
87
+ * The default is MergeStrategy.PreserveChanges
88
+ * @param [tag] tag to identify the operation from the app perspective.
89
+ */
90
+ mergeQuerySet(querySet, mergeStrategy, tag) {
91
+ this.dispatch(new MergeQuerySet(querySet, mergeStrategy, tag));
92
+ }
93
+ /**
94
+ * Create entity cache action for replacing the entire entity cache.
95
+ * Dangerous because brute force but useful as when re-hydrating an EntityCache
96
+ * from local browser storage when the application launches.
97
+ * @param cache New state of the entity cache
98
+ * @param [tag] tag to identify the operation from the app perspective.
99
+ */
100
+ setEntityCache(cache, tag) {
101
+ this.dispatch(new SetEntityCache(cache, tag));
102
+ }
103
+ /**
104
+ * Dispatch action to save multiple entity changes to remote storage.
105
+ * Relies on an Ngrx Effect such as EntityEffects.saveEntities$.
106
+ * Important: only call if your server supports the SaveEntities protocol
107
+ * through your EntityDataService.saveEntities method.
108
+ * @param changes Either the entities to save, as an array of {ChangeSetItem}, or
109
+ * a ChangeSet that holds such changes.
110
+ * @param url The server url which receives the save request
111
+ * @param [options] options such as tag, correlationId, isOptimistic, and mergeStrategy.
112
+ * These values are defaulted if not supplied.
113
+ * @returns A terminating Observable<ChangeSet> with data returned from the server
114
+ * after server reports successful save OR the save error.
115
+ * TODO: should return the matching entities from cache rather than the raw server data.
116
+ */
117
+ saveEntities(changes, url, options) {
118
+ const changeSet = Array.isArray(changes) ? { changes } : changes;
119
+ options = options || {};
120
+ const correlationId = options.correlationId == null
121
+ ? this.correlationIdGenerator.next()
122
+ : options.correlationId;
123
+ const isOptimistic = options.isOptimistic == null
124
+ ? this.defaultDispatcherOptions.optimisticSaveEntities || false
125
+ : options.isOptimistic === true;
126
+ const tag = options.tag || 'Save Entities';
127
+ options = { ...options, correlationId, isOptimistic, tag };
128
+ const action = new SaveEntities(changeSet, url, options);
129
+ this.dispatch(action);
130
+ return this.getSaveEntitiesResponseData$(options.correlationId).pipe(shareReplay(1));
131
+ }
132
+ /**
133
+ * Return Observable of data from the server-success SaveEntities action with
134
+ * the given Correlation Id, after that action was processed by the ngrx store.
135
+ * or else put the server error on the Observable error channel.
136
+ * @param crid The correlationId for both the save and response actions.
137
+ */
138
+ getSaveEntitiesResponseData$(crid) {
139
+ /**
140
+ * reducedActions$ must be replay observable of the most recent action reduced by the store.
141
+ * because the response action might have been dispatched to the store
142
+ * before caller had a chance to subscribe.
143
+ */
144
+ return this.reducedActions$.pipe(filter((act) => act.type === EntityCacheAction.SAVE_ENTITIES_SUCCESS ||
145
+ act.type === EntityCacheAction.SAVE_ENTITIES_ERROR ||
146
+ act.type === EntityCacheAction.SAVE_ENTITIES_CANCEL), filter((act) => crid === act.payload.correlationId), take(1), mergeMap((act) => {
147
+ return act.type === EntityCacheAction.SAVE_ENTITIES_CANCEL
148
+ ? throwError(new PersistanceCanceled(act.payload.reason))
149
+ : act.type === EntityCacheAction.SAVE_ENTITIES_SUCCESS
150
+ ? of(act.payload.changeSet)
151
+ : throwError(act.payload);
152
+ }));
153
+ }
154
+ /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.0", ngImport: i0, type: EntityCacheDispatcher, deps: [{ token: i1.CorrelationIdGenerator }, { token: i2.EntityDispatcherDefaultOptions }, { token: ScannedActionsSubject }, { token: i3.Store }], target: i0.ɵɵFactoryTarget.Injectable }); }
155
+ /** @nocollapse */ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.0.0", ngImport: i0, type: EntityCacheDispatcher }); }
156
+ }
157
+ export { EntityCacheDispatcher };
158
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.0", ngImport: i0, type: EntityCacheDispatcher, decorators: [{
159
+ type: Injectable
160
+ }], ctorParameters: function () { return [{ type: i1.CorrelationIdGenerator }, { type: i2.EntityDispatcherDefaultOptions }, { type: i4.Observable, decorators: [{
161
+ type: Inject,
162
+ args: [ScannedActionsSubject]
163
+ }] }, { type: i3.Store }]; } });
164
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW50aXR5LWNhY2hlLWRpc3BhdGNoZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9tb2R1bGVzL2RhdGEvc3JjL2Rpc3BhdGNoZXJzL2VudGl0eS1jYWNoZS1kaXNwYXRjaGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ25ELE9BQU8sRUFBVSxxQkFBcUIsRUFBUyxNQUFNLGFBQWEsQ0FBQztBQUVuRSxPQUFPLEVBQWMsRUFBRSxFQUFnQixVQUFVLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDaEUsT0FBTyxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsV0FBVyxFQUFFLElBQUksRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBUXJFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBRzFELE9BQU8sRUFDTCxnQkFBZ0IsRUFDaEIsaUJBQWlCLEVBRWpCLGVBQWUsRUFDZixhQUFhLEVBQ2IsY0FBYyxFQUNkLFlBQVksRUFDWixrQkFBa0IsR0FHbkIsTUFBTSxnQ0FBZ0MsQ0FBQzs7Ozs7O0FBRXhDOztHQUVHO0FBQ0gsTUFDYSxxQkFBcUI7SUFRaEM7SUFDRSwyREFBMkQ7SUFDbkQsc0JBQThDO0lBQ3REOzs7T0FHRztJQUNLLHdCQUF3RDtJQUNoRSwwRUFBMEU7SUFDM0MsZUFBbUM7SUFDbEUsMkNBQTJDO0lBQ25DLEtBQXlCO1FBVHpCLDJCQUFzQixHQUF0QixzQkFBc0IsQ0FBd0I7UUFLOUMsNkJBQXdCLEdBQXhCLHdCQUF3QixDQUFnQztRQUl4RCxVQUFLLEdBQUwsS0FBSyxDQUFvQjtRQUVqQyx1RkFBdUY7UUFDdkYsc0RBQXNEO1FBQ3RELHdGQUF3RjtRQUN4RixJQUFJLENBQUMsZUFBZSxHQUFHLGVBQWUsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDNUQsd0VBQXdFO1FBQ3hFLElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxTQUFTLEVBQUUsQ0FBQztJQUN6RCxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILFFBQVEsQ0FBQyxNQUFjO1FBQ3JCLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQzVCLE9BQU8sTUFBTSxDQUFDO0lBQ2hCLENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSCxrQkFBa0IsQ0FDaEIsYUFBa0IsRUFDbEIsTUFBZSxFQUNmLFdBQXNCLEVBQ3RCLEdBQVk7UUFFWixJQUFJLENBQUMsYUFBYSxFQUFFO1lBQ2xCLE1BQU0sSUFBSSxLQUFLLENBQUMsdUJBQXVCLENBQUMsQ0FBQztTQUMxQztRQUNELE1BQU0sTUFBTSxHQUFHLElBQUksa0JBQWtCLENBQ25DLGFBQWEsRUFDYixNQUFNLEVBQ04sV0FBVyxFQUNYLEdBQUcsQ0FDSixDQUFDO1FBQ0YsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUN4QixDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILGdCQUFnQixDQUFDLFdBQXNCLEVBQUUsR0FBWTtRQUNuRCxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksZ0JBQWdCLENBQUMsV0FBVyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDeEQsQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNILGVBQWUsQ0FBQyxXQUFnQyxFQUFFLEdBQVk7UUFDNUQsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLGVBQWUsQ0FBQyxXQUFXLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUN2RCxDQUFDO0lBRUQ7Ozs7Ozs7Ozs7T0FVRztJQUNILGFBQWEsQ0FDWCxRQUE2QixFQUM3QixhQUE2QixFQUM3QixHQUFZO1FBRVosSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLGFBQWEsQ0FBQyxRQUFRLEVBQUUsYUFBYSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDakUsQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNILGNBQWMsQ0FBQyxLQUFrQixFQUFFLEdBQVk7UUFDN0MsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLGNBQWMsQ0FBQyxLQUFLLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUNoRCxDQUFDO0lBRUQ7Ozs7Ozs7Ozs7Ozs7T0FhRztJQUNILFlBQVksQ0FDVixPQUFvQyxFQUNwQyxHQUFXLEVBQ1gsT0FBNkI7UUFFN0IsTUFBTSxTQUFTLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDO1FBQ2pFLE9BQU8sR0FBRyxPQUFPLElBQUksRUFBRSxDQUFDO1FBQ3hCLE1BQU0sYUFBYSxHQUNqQixPQUFPLENBQUMsYUFBYSxJQUFJLElBQUk7WUFDM0IsQ0FBQyxDQUFDLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxJQUFJLEVBQUU7WUFDcEMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUM7UUFDNUIsTUFBTSxZQUFZLEdBQ2hCLE9BQU8sQ0FBQyxZQUFZLElBQUksSUFBSTtZQUMxQixDQUFDLENBQUMsSUFBSSxDQUFDLHdCQUF3QixDQUFDLHNCQUFzQixJQUFJLEtBQUs7WUFDL0QsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxZQUFZLEtBQUssSUFBSSxDQUFDO1FBQ3BDLE1BQU0sR0FBRyxHQUFHLE9BQU8sQ0FBQyxHQUFHLElBQUksZUFBZSxDQUFDO1FBQzNDLE9BQU8sR0FBRyxFQUFFLEdBQUcsT0FBTyxFQUFFLGFBQWEsRUFBRSxZQUFZLEVBQUUsR0FBRyxFQUFFLENBQUM7UUFDM0QsTUFBTSxNQUFNLEdBQUcsSUFBSSxZQUFZLENBQUMsU0FBUyxFQUFFLEdBQUcsRUFBRSxPQUFPLENBQUMsQ0FBQztRQUN6RCxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3RCLE9BQU8sSUFBSSxDQUFDLDRCQUE0QixDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsQ0FBQyxJQUFJLENBQ2xFLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FDZixDQUFDO0lBQ0osQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0ssNEJBQTRCLENBQUMsSUFBUztRQUM1Qzs7OztXQUlHO1FBQ0gsT0FBTyxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FDOUIsTUFBTSxDQUNKLENBQUMsR0FBVyxFQUFFLEVBQUUsQ0FDZCxHQUFHLENBQUMsSUFBSSxLQUFLLGlCQUFpQixDQUFDLHFCQUFxQjtZQUNwRCxHQUFHLENBQUMsSUFBSSxLQUFLLGlCQUFpQixDQUFDLG1CQUFtQjtZQUNsRCxHQUFHLENBQUMsSUFBSSxLQUFLLGlCQUFpQixDQUFDLG9CQUFvQixDQUN0RCxFQUNELE1BQU0sQ0FBQyxDQUFDLEdBQVcsRUFBRSxFQUFFLENBQUMsSUFBSSxLQUFNLEdBQVcsQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLEVBQ3BFLElBQUksQ0FBQyxDQUFDLENBQUMsRUFDUCxRQUFRLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRTtZQUNmLE9BQU8sR0FBRyxDQUFDLElBQUksS0FBSyxpQkFBaUIsQ0FBQyxvQkFBb0I7Z0JBQ3hELENBQUMsQ0FBQyxVQUFVLENBQ1IsSUFBSSxtQkFBbUIsQ0FDcEIsR0FBMEIsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUMzQyxDQUNGO2dCQUNILENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxLQUFLLGlCQUFpQixDQUFDLHFCQUFxQjtvQkFDdEQsQ0FBQyxDQUFDLEVBQUUsQ0FBRSxHQUEyQixDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUM7b0JBQ3BELENBQUMsQ0FBQyxVQUFVLENBQUUsR0FBeUIsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNyRCxDQUFDLENBQUMsQ0FDSCxDQUFDO0lBQ0osQ0FBQztpSUF6TFUscUJBQXFCLHNHQWlCdEIscUJBQXFCO3FJQWpCcEIscUJBQXFCOztTQUFyQixxQkFBcUI7MkZBQXJCLHFCQUFxQjtrQkFEakMsVUFBVTs7MEJBa0JOLE1BQU07MkJBQUMscUJBQXFCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSwgSW5qZWN0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBY3Rpb24sIFNjYW5uZWRBY3Rpb25zU3ViamVjdCwgU3RvcmUgfSBmcm9tICdAbmdyeC9zdG9yZSc7XG5cbmltcG9ydCB7IE9ic2VydmFibGUsIG9mLCBTdWJzY3JpcHRpb24sIHRocm93RXJyb3IgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGZpbHRlciwgbWVyZ2VNYXAsIHNoYXJlUmVwbGF5LCB0YWtlIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5pbXBvcnQgeyBDb3JyZWxhdGlvbklkR2VuZXJhdG9yIH0gZnJvbSAnLi4vdXRpbHMvY29ycmVsYXRpb24taWQtZ2VuZXJhdG9yJztcbmltcG9ydCB7IEVudGl0eUFjdGlvbk9wdGlvbnMgfSBmcm9tICcuLi9hY3Rpb25zL2VudGl0eS1hY3Rpb24nO1xuaW1wb3J0IHsgRW50aXR5Q2FjaGUgfSBmcm9tICcuLi9yZWR1Y2Vycy9lbnRpdHktY2FjaGUnO1xuaW1wb3J0IHsgRW50aXR5RGlzcGF0Y2hlckRlZmF1bHRPcHRpb25zIH0gZnJvbSAnLi9lbnRpdHktZGlzcGF0Y2hlci1kZWZhdWx0LW9wdGlvbnMnO1xuXG5pbXBvcnQgeyBNZXJnZVN0cmF0ZWd5IH0gZnJvbSAnLi4vYWN0aW9ucy9tZXJnZS1zdHJhdGVneSc7XG5pbXBvcnQgeyBQZXJzaXN0YW5jZUNhbmNlbGVkIH0gZnJvbSAnLi9lbnRpdHktZGlzcGF0Y2hlcic7XG5cbmltcG9ydCB7IENoYW5nZVNldCwgQ2hhbmdlU2V0SXRlbSB9IGZyb20gJy4uL2FjdGlvbnMvZW50aXR5LWNhY2hlLWNoYW5nZS1zZXQnO1xuaW1wb3J0IHtcbiAgQ2xlYXJDb2xsZWN0aW9ucyxcbiAgRW50aXR5Q2FjaGVBY3Rpb24sXG4gIEVudGl0eUNhY2hlUXVlcnlTZXQsXG4gIExvYWRDb2xsZWN0aW9ucyxcbiAgTWVyZ2VRdWVyeVNldCxcbiAgU2V0RW50aXR5Q2FjaGUsXG4gIFNhdmVFbnRpdGllcyxcbiAgU2F2ZUVudGl0aWVzQ2FuY2VsLFxuICBTYXZlRW50aXRpZXNFcnJvcixcbiAgU2F2ZUVudGl0aWVzU3VjY2Vzcyxcbn0gZnJvbSAnLi4vYWN0aW9ucy9lbnRpdHktY2FjaGUtYWN0aW9uJztcblxuLyoqXG4gKiBEaXNwYXRjaGVzIEVudGl0eSBDYWNoZSBhY3Rpb25zIHRvIHRoZSBFbnRpdHlDYWNoZSByZWR1Y2VyXG4gKi9cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBFbnRpdHlDYWNoZURpc3BhdGNoZXIge1xuICAvKipcbiAgICogQWN0aW9ucyBzY2FubmVkIGJ5IHRoZSBzdG9yZSBhZnRlciBpdCBwcm9jZXNzZWQgdGhlbSB3aXRoIHJlZHVjZXJzLlxuICAgKiBBIHJlcGxheSBvYnNlcnZhYmxlIG9mIHRoZSBtb3N0IHJlY2VudCBhY3Rpb24gcmVkdWNlZCBieSB0aGUgc3RvcmUuXG4gICAqL1xuICByZWR1Y2VkQWN0aW9ucyQ6IE9ic2VydmFibGU8QWN0aW9uPjtcbiAgcHJpdmF0ZSByYVN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIC8qKiBHZW5lcmF0ZXMgY29ycmVsYXRpb24gaWRzIGZvciBxdWVyeSBhbmQgc2F2ZSBtZXRob2RzICovXG4gICAgcHJpdmF0ZSBjb3JyZWxhdGlvbklkR2VuZXJhdG9yOiBDb3JyZWxhdGlvbklkR2VuZXJhdG9yLFxuICAgIC8qKlxuICAgICAqIERpc3BhdGNoZXIgb3B0aW9ucyBjb25maWd1cmUgZGlzcGF0Y2hlciBiZWhhdmlvciBzdWNoIGFzXG4gICAgICogd2hldGhlciBhZGQgaXMgb3B0aW1pc3RpYyBvciBwZXNzaW1pc3RpYyBieSBkZWZhdWx0LlxuICAgICAqL1xuICAgIHByaXZhdGUgZGVmYXVsdERpc3BhdGNoZXJPcHRpb25zOiBFbnRpdHlEaXNwYXRjaGVyRGVmYXVsdE9wdGlvbnMsXG4gICAgLyoqIEFjdGlvbnMgc2Nhbm5lZCBieSB0aGUgc3RvcmUgYWZ0ZXIgaXQgcHJvY2Vzc2VkIHRoZW0gd2l0aCByZWR1Y2Vycy4gKi9cbiAgICBASW5qZWN0KFNjYW5uZWRBY3Rpb25zU3ViamVjdCkgc2Nhbm5lZEFjdGlvbnMkOiBPYnNlcnZhYmxlPEFjdGlvbj4sXG4gICAgLyoqIFRoZSBzdG9yZSwgc2NvcGVkIHRvIHRoZSBFbnRpdHlDYWNoZSAqL1xuICAgIHByaXZhdGUgc3RvcmU6IFN0b3JlPEVudGl0eUNhY2hlPlxuICApIHtcbiAgICAvLyBSZXBsYXkgYmVjYXVzZSBzb21ldGltZXMgaW4gdGVzdHMgd2lsbCBmYWtlIGRhdGEgc2VydmljZSB3aXRoIHN5bmNocm9ub3VzIG9ic2VydmFibGVcbiAgICAvLyB3aGljaCBtYWtlcyBzdWJzY3JpYmVyIG1pc3MgdGhlIGRpc3BhdGNoZWQgYWN0aW9ucy5cbiAgICAvLyBPZiBjb3Vyc2UgdGhhdCdzIGEgdGVzdGluZyBtaXN0YWtlLiBCdXQgZWFzeSB0byBmb3JnZXQsIGxlYWRpbmcgdG8gcGFpbmZ1bCBkZWJ1Z2dpbmcuXG4gICAgdGhpcy5yZWR1Y2VkQWN0aW9ucyQgPSBzY2FubmVkQWN0aW9ucyQucGlwZShzaGFyZVJlcGxheSgxKSk7XG4gICAgLy8gU3RhcnQgbGlzdGVuaW5nIHNvIGxhdGUgc3Vic2NyaWJlciB3b24ndCBtaXNzIHRoZSBtb3N0IHJlY2VudCBhY3Rpb24uXG4gICAgdGhpcy5yYVN1YnNjcmlwdGlvbiA9IHRoaXMucmVkdWNlZEFjdGlvbnMkLnN1YnNjcmliZSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIERpc3BhdGNoIGFuIEFjdGlvbiB0byB0aGUgc3RvcmUuXG4gICAqIEBwYXJhbSBhY3Rpb24gdGhlIEFjdGlvblxuICAgKiBAcmV0dXJucyB0aGUgZGlzcGF0Y2hlZCBBY3Rpb25cbiAgICovXG4gIGRpc3BhdGNoKGFjdGlvbjogQWN0aW9uKTogQWN0aW9uIHtcbiAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKGFjdGlvbik7XG4gICAgcmV0dXJuIGFjdGlvbjtcbiAgfVxuXG4gIC8qKlxuICAgKiBEaXNwYXRjaCBhY3Rpb24gdG8gY2FuY2VsIHRoZSBzYXZlRW50aXRpZXMgcmVxdWVzdCB3aXRoIG1hdGNoaW5nIGNvcnJlbGF0aW9uIGlkLlxuICAgKiBAcGFyYW0gY29ycmVsYXRpb25JZCBUaGUgY29ycmVsYXRpb24gaWQgZm9yIHRoZSBjb3JyZXNwb25kaW5nIGFjdGlvblxuICAgKiBAcGFyYW0gW3JlYXNvbl0gZXhwbGFpbnMgd2h5IGNhbmNlbGVkIGFuZCBieSB3aG9tLlxuICAgKiBAcGFyYW0gW2VudGl0eU5hbWVzXSBhcnJheSBvZiBlbnRpdHkgbmFtZXMgc28gY2FuIHR1cm4gb2ZmIGxvYWRpbmcgZmxhZyBmb3IgdGhlaXIgY29sbGVjdGlvbnMuXG4gICAqIEBwYXJhbSBbdGFnXSB0YWcgdG8gaWRlbnRpZnkgdGhlIG9wZXJhdGlvbiBmcm9tIHRoZSBhcHAgcGVyc3BlY3RpdmUuXG4gICAqL1xuICBjYW5jZWxTYXZlRW50aXRpZXMoXG4gICAgY29ycmVsYXRpb25JZDogYW55LFxuICAgIHJlYXNvbj86IHN0cmluZyxcbiAgICBlbnRpdHlOYW1lcz86IHN0cmluZ1tdLFxuICAgIHRhZz86IHN0cmluZ1xuICApOiB2b2lkIHtcbiAgICBpZiAoIWNvcnJlbGF0aW9uSWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignTWlzc2luZyBjb3JyZWxhdGlvbklkJyk7XG4gICAgfVxuICAgIGNvbnN0IGFjdGlvbiA9IG5ldyBTYXZlRW50aXRpZXNDYW5jZWwoXG4gICAgICBjb3JyZWxhdGlvbklkLFxuICAgICAgcmVhc29uLFxuICAgICAgZW50aXR5TmFtZXMsXG4gICAgICB0YWdcbiAgICApO1xuICAgIHRoaXMuZGlzcGF0Y2goYWN0aW9uKTtcbiAgfVxuXG4gIC8qKiBDbGVhciB0aGUgbmFtZWQgZW50aXR5IGNvbGxlY3Rpb25zIGluIGNhY2hlXG4gICAqIEBwYXJhbSBbY29sbGVjdGlvbnNdIEFycmF5IG9mIG5hbWVzIG9mIHRoZSBjb2xsZWN0aW9ucyB0byBjbGVhci5cbiAgICogSWYgZW1wdHkgYXJyYXksIGRvZXMgbm90aGluZy4gSWYgbnVsbC91bmRlZmluZWQvbm8gYXJyYXksIGNsZWFyIGFsbCBjb2xsZWN0aW9ucy5cbiAgICogQHBhcmFtIFt0YWddIHRhZyB0byBpZGVudGlmeSB0aGUgb3BlcmF0aW9uIGZyb20gdGhlIGFwcCBwZXJzcGVjdGl2ZS5cbiAgICovXG4gIGNsZWFyQ29sbGVjdGlvbnMoY29sbGVjdGlvbnM/OiBzdHJpbmdbXSwgdGFnPzogc3RyaW5nKSB7XG4gICAgdGhpcy5kaXNwYXRjaChuZXcgQ2xlYXJDb2xsZWN0aW9ucyhjb2xsZWN0aW9ucywgdGFnKSk7XG4gIH1cblxuICAvKipcbiAgICogTG9hZCBtdWx0aXBsZSBlbnRpdHkgY29sbGVjdGlvbnMgYXQgdGhlIHNhbWUgdGltZS5cbiAgICogYmVmb3JlIGFueSBzZWxlY3RvcnMkIG9ic2VydmFibGVzIGVtaXQuXG4gICAqIEBwYXJhbSBjb2xsZWN0aW9ucyBUaGUgY29sbGVjdGlvbnMgdG8gbG9hZCwgdHlwaWNhbGx5IHRoZSByZXN1bHQgb2YgYSBxdWVyeS5cbiAgICogQHBhcmFtIFt0YWddIHRhZyB0byBpZGVudGlmeSB0aGUgb3BlcmF0aW9uIGZyb20gdGhlIGFwcCBwZXJzcGVjdGl2ZS5cbiAgICogaW4gdGhlIGZvcm0gb2YgYSBtYXAgb2YgZW50aXR5IGNvbGxlY3Rpb25zLlxuICAgKi9cbiAgbG9hZENvbGxlY3Rpb25zKGNvbGxlY3Rpb25zOiBFbnRpdHlDYWNoZVF1ZXJ5U2V0LCB0YWc/OiBzdHJpbmcpIHtcbiAgICB0aGlzLmRpc3BhdGNoKG5ldyBMb2FkQ29sbGVjdGlvbnMoY29sbGVjdGlvbnMsIHRhZykpO1xuICB9XG5cbiAgLyoqXG4gICAqIE1lcmdlcyBlbnRpdGllcyBmcm9tIGEgcXVlcnkgcmVzdWx0XG4gICAqIHRoYXQgcmV0dXJuZWQgZW50aXRpZXMgZnJvbSBtdWx0aXBsZSBjb2xsZWN0aW9ucy5cbiAgICogQ29ycmVzcG9uZGluZyBlbnRpdHkgY2FjaGUgcmVkdWNlciBzaG91bGQgYWRkIGFuZCB1cGRhdGUgYWxsIGNvbGxlY3Rpb25zXG4gICAqIGF0IHRoZSBzYW1lIHRpbWUsIGJlZm9yZSBhbnkgc2VsZWN0b3JzJCBvYnNlcnZhYmxlcyBlbWl0LlxuICAgKiBAcGFyYW0gcXVlcnlTZXQgVGhlIHJlc3VsdCBvZiB0aGUgcXVlcnkgaW4gdGhlIGZvcm0gb2YgYSBtYXAgb2YgZW50aXR5IGNvbGxlY3Rpb25zLlxuICAgKiBUaGVzZSBhcmUgdGhlIGVudGl0eSBkYXRhIHRvIG1lcmdlIGludG8gdGhlIHJlc3BlY3RpdmUgY29sbGVjdGlvbnMuXG4gICAqIEBwYXJhbSBtZXJnZVN0cmF0ZWd5IEhvdyB0byBtZXJnZSBhIHF1ZXJpZWQgZW50aXR5IHdoZW4gaXQgaXMgYWxyZWFkeSBpbiB0aGUgY29sbGVjdGlvbi5cbiAgICogVGhlIGRlZmF1bHQgaXMgTWVyZ2VTdHJhdGVneS5QcmVzZXJ2ZUNoYW5nZXNcbiAgICogQHBhcmFtIFt0YWddIHRhZyB0byBpZGVudGlmeSB0aGUgb3BlcmF0aW9uIGZyb20gdGhlIGFwcCBwZXJzcGVjdGl2ZS5cbiAgICovXG4gIG1lcmdlUXVlcnlTZXQoXG4gICAgcXVlcnlTZXQ6IEVudGl0eUNhY2hlUXVlcnlTZXQsXG4gICAgbWVyZ2VTdHJhdGVneT86IE1lcmdlU3RyYXRlZ3ksXG4gICAgdGFnPzogc3RyaW5nXG4gICkge1xuICAgIHRoaXMuZGlzcGF0Y2gobmV3IE1lcmdlUXVlcnlTZXQocXVlcnlTZXQsIG1lcmdlU3RyYXRlZ3ksIHRhZykpO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBlbnRpdHkgY2FjaGUgYWN0aW9uIGZvciByZXBsYWNpbmcgdGhlIGVudGlyZSBlbnRpdHkgY2FjaGUuXG4gICAqIERhbmdlcm91cyBiZWNhdXNlIGJydXRlIGZvcmNlIGJ1dCB1c2VmdWwgYXMgd2hlbiByZS1oeWRyYXRpbmcgYW4gRW50aXR5Q2FjaGVcbiAgICogZnJvbSBsb2NhbCBicm93c2VyIHN0b3JhZ2Ugd2hlbiB0aGUgYXBwbGljYXRpb24gbGF1bmNoZXMuXG4gICAqIEBwYXJhbSBjYWNoZSBOZXcgc3RhdGUgb2YgdGhlIGVudGl0eSBjYWNoZVxuICAgKiBAcGFyYW0gW3RhZ10gdGFnIHRvIGlkZW50aWZ5IHRoZSBvcGVyYXRpb24gZnJvbSB0aGUgYXBwIHBlcnNwZWN0aXZlLlxuICAgKi9cbiAgc2V0RW50aXR5Q2FjaGUoY2FjaGU6IEVudGl0eUNhY2hlLCB0YWc/OiBzdHJpbmcpIHtcbiAgICB0aGlzLmRpc3BhdGNoKG5ldyBTZXRFbnRpdHlDYWNoZShjYWNoZSwgdGFnKSk7XG4gIH1cblxuICAvKipcbiAgICogRGlzcGF0Y2ggYWN0aW9uIHRvIHNhdmUgbXVsdGlwbGUgZW50aXR5IGNoYW5nZXMgdG8gcmVtb3RlIHN0b3JhZ2UuXG4gICAqIFJlbGllcyBvbiBhbiBOZ3J4IEVmZmVjdCBzdWNoIGFzIEVudGl0eUVmZmVjdHMuc2F2ZUVudGl0aWVzJC5cbiAgICogSW1wb3J0YW50OiBvbmx5IGNhbGwgaWYgeW91ciBzZXJ2ZXIgc3VwcG9ydHMgdGhlIFNhdmVFbnRpdGllcyBwcm90b2NvbFxuICAgKiB0aHJvdWdoIHlvdXIgRW50aXR5RGF0YVNlcnZpY2Uuc2F2ZUVudGl0aWVzIG1ldGhvZC5cbiAgICogQHBhcmFtIGNoYW5nZXMgRWl0aGVyIHRoZSBlbnRpdGllcyB0byBzYXZlLCBhcyBhbiBhcnJheSBvZiB7Q2hhbmdlU2V0SXRlbX0sIG9yXG4gICAqIGEgQ2hhbmdlU2V0IHRoYXQgaG9sZHMgc3VjaCBjaGFuZ2VzLlxuICAgKiBAcGFyYW0gdXJsIFRoZSBzZXJ2ZXIgdXJsIHdoaWNoIHJlY2VpdmVzIHRoZSBzYXZlIHJlcXVlc3RcbiAgICogQHBhcmFtIFtvcHRpb25zXSBvcHRpb25zIHN1Y2ggYXMgdGFnLCBjb3JyZWxhdGlvbklkLCBpc09wdGltaXN0aWMsIGFuZCBtZXJnZVN0cmF0ZWd5LlxuICAgKiBUaGVzZSB2YWx1ZXMgYXJlIGRlZmF1bHRlZCBpZiBub3Qgc3VwcGxpZWQuXG4gICAqIEByZXR1cm5zIEEgdGVybWluYXRpbmcgT2JzZXJ2YWJsZTxDaGFuZ2VTZXQ+IHdpdGggZGF0YSByZXR1cm5lZCBmcm9tIHRoZSBzZXJ2ZXJcbiAgICogYWZ0ZXIgc2VydmVyIHJlcG9ydHMgc3VjY2Vzc2Z1bCBzYXZlIE9SIHRoZSBzYXZlIGVycm9yLlxuICAgKiBUT0RPOiBzaG91bGQgcmV0dXJuIHRoZSBtYXRjaGluZyBlbnRpdGllcyBmcm9tIGNhY2hlIHJhdGhlciB0aGFuIHRoZSByYXcgc2VydmVyIGRhdGEuXG4gICAqL1xuICBzYXZlRW50aXRpZXMoXG4gICAgY2hhbmdlczogQ2hhbmdlU2V0SXRlbVtdIHwgQ2hhbmdlU2V0LFxuICAgIHVybDogc3RyaW5nLFxuICAgIG9wdGlvbnM/OiBFbnRpdHlBY3Rpb25PcHRpb25zXG4gICk6IE9ic2VydmFibGU8Q2hhbmdlU2V0PiB7XG4gICAgY29uc3QgY2hhbmdlU2V0ID0gQXJyYXkuaXNBcnJheShjaGFuZ2VzKSA/IHsgY2hhbmdlcyB9IDogY2hhbmdlcztcbiAgICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcbiAgICBjb25zdCBjb3JyZWxhdGlvbklkID1cbiAgICAgIG9wdGlvbnMuY29ycmVsYXRpb25JZCA9PSBudWxsXG4gICAgICAgID8gdGhpcy5jb3JyZWxhdGlvbklkR2VuZXJhdG9yLm5leHQoKVxuICAgICAgICA6IG9wdGlvbnMuY29ycmVsYXRpb25JZDtcbiAgICBjb25zdCBpc09wdGltaXN0aWMgPVxuICAgICAgb3B0aW9ucy5pc09wdGltaXN0aWMgPT0gbnVsbFxuICAgICAgICA/IHRoaXMuZGVmYXVsdERpc3BhdGNoZXJPcHRpb25zLm9wdGltaXN0aWNTYXZlRW50aXRpZXMgfHwgZmFsc2VcbiAgICAgICAgOiBvcHRpb25zLmlzT3B0aW1pc3RpYyA9PT0gdHJ1ZTtcbiAgICBjb25zdCB0YWcgPSBvcHRpb25zLnRhZyB8fCAnU2F2ZSBFbnRpdGllcyc7XG4gICAgb3B0aW9ucyA9IHsgLi4ub3B0aW9ucywgY29ycmVsYXRpb25JZCwgaXNPcHRpbWlzdGljLCB0YWcgfTtcbiAgICBjb25zdCBhY3Rpb24gPSBuZXcgU2F2ZUVudGl0aWVzKGNoYW5nZVNldCwgdXJsLCBvcHRpb25zKTtcbiAgICB0aGlzLmRpc3BhdGNoKGFjdGlvbik7XG4gICAgcmV0dXJuIHRoaXMuZ2V0U2F2ZUVudGl0aWVzUmVzcG9uc2VEYXRhJChvcHRpb25zLmNvcnJlbGF0aW9uSWQpLnBpcGUoXG4gICAgICBzaGFyZVJlcGxheSgxKVxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIE9ic2VydmFibGUgb2YgZGF0YSBmcm9tIHRoZSBzZXJ2ZXItc3VjY2VzcyBTYXZlRW50aXRpZXMgYWN0aW9uIHdpdGhcbiAgICogdGhlIGdpdmVuIENvcnJlbGF0aW9uIElkLCBhZnRlciB0aGF0IGFjdGlvbiB3YXMgcHJvY2Vzc2VkIGJ5IHRoZSBuZ3J4IHN0b3JlLlxuICAgKiBvciBlbHNlIHB1dCB0aGUgc2VydmVyIGVycm9yIG9uIHRoZSBPYnNlcnZhYmxlIGVycm9yIGNoYW5uZWwuXG4gICAqIEBwYXJhbSBjcmlkIFRoZSBjb3JyZWxhdGlvbklkIGZvciBib3RoIHRoZSBzYXZlIGFuZCByZXNwb25zZSBhY3Rpb25zLlxuICAgKi9cbiAgcHJpdmF0ZSBnZXRTYXZlRW50aXRpZXNSZXNwb25zZURhdGEkKGNyaWQ6IGFueSk6IE9ic2VydmFibGU8Q2hhbmdlU2V0PiB7XG4gICAgLyoqXG4gICAgICogcmVkdWNlZEFjdGlvbnMkIG11c3QgYmUgcmVwbGF5IG9ic2VydmFibGUgb2YgdGhlIG1vc3QgcmVjZW50IGFjdGlvbiByZWR1Y2VkIGJ5IHRoZSBzdG9yZS5cbiAgICAgKiBiZWNhdXNlIHRoZSByZXNwb25zZSBhY3Rpb24gbWlnaHQgaGF2ZSBiZWVuIGRpc3BhdGNoZWQgdG8gdGhlIHN0b3JlXG4gICAgICogYmVmb3JlIGNhbGxlciBoYWQgYSBjaGFuY2UgdG8gc3Vic2NyaWJlLlxuICAgICAqL1xuICAgIHJldHVybiB0aGlzLnJlZHVjZWRBY3Rpb25zJC5waXBlKFxuICAgICAgZmlsdGVyKFxuICAgICAgICAoYWN0OiBBY3Rpb24pID0+XG4gICAgICAgICAgYWN0LnR5cGUgPT09IEVudGl0eUNhY2hlQWN0aW9uLlNBVkVfRU5USVRJRVNfU1VDQ0VTUyB8fFxuICAgICAgICAgIGFjdC50eXBlID09PSBFbnRpdHlDYWNoZUFjdGlvbi5TQVZFX0VOVElUSUVTX0VSUk9SIHx8XG4gICAgICAgICAgYWN0LnR5cGUgPT09IEVudGl0eUNhY2hlQWN0aW9uLlNBVkVfRU5USVRJRVNfQ0FOQ0VMXG4gICAgICApLFxuICAgICAgZmlsdGVyKChhY3Q6IEFjdGlvbikgPT4gY3JpZCA9PT0gKGFjdCBhcyBhbnkpLnBheWxvYWQuY29ycmVsYXRpb25JZCksXG4gICAgICB0YWtlKDEpLFxuICAgICAgbWVyZ2VNYXAoKGFjdCkgPT4ge1xuICAgICAgICByZXR1cm4gYWN0LnR5cGUgPT09IEVudGl0eUNhY2hlQWN0aW9uLlNBVkVfRU5USVRJRVNfQ0FOQ0VMXG4gICAgICAgICAgPyB0aHJvd0Vycm9yKFxuICAgICAgICAgICAgICBuZXcgUGVyc2lzdGFuY2VDYW5jZWxlZChcbiAgICAgICAgICAgICAgICAoYWN0IGFzIFNhdmVFbnRpdGllc0NhbmNlbCkucGF5bG9hZC5yZWFzb25cbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKVxuICAgICAgICAgIDogYWN0LnR5cGUgPT09IEVudGl0eUNhY2hlQWN0aW9uLlNBVkVfRU5USVRJRVNfU1VDQ0VTU1xuICAgICAgICAgID8gb2YoKGFjdCBhcyBTYXZlRW50aXRpZXNTdWNjZXNzKS5wYXlsb2FkLmNoYW5nZVNldClcbiAgICAgICAgICA6IHRocm93RXJyb3IoKGFjdCBhcyBTYXZlRW50aXRpZXNFcnJvcikucGF5bG9hZCk7XG4gICAgICB9KVxuICAgICk7XG4gIH1cbn1cbiJdfQ==
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW50aXR5LWNvbW1hbmRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbW9kdWxlcy9kYXRhL3NyYy9kaXNwYXRjaGVycy9lbnRpdHktY29tbWFuZHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IEVudGl0eUFjdGlvbk9wdGlvbnMgfSBmcm9tICcuLi9hY3Rpb25zL2VudGl0eS1hY3Rpb24nO1xuaW1wb3J0IHsgUXVlcnlQYXJhbXMgfSBmcm9tICcuLi9kYXRhc2VydmljZXMvaW50ZXJmYWNlcyc7XG5cbi8qKiBDb21tYW5kcyB0aGF0IHVwZGF0ZSB0aGUgcmVtb3RlIHNlcnZlci4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRW50aXR5U2VydmVyQ29tbWFuZHM8VD4ge1xuICAvKipcbiAgICogRGlzcGF0Y2ggYWN0aW9uIHRvIHNhdmUgYSBuZXcgZW50aXR5IHRvIHJlbW90ZSBzdG9yYWdlLlxuICAgKiBAcGFyYW0gZW50aXR5IGVudGl0eSB0byBhZGQsIHdoaWNoIG1heSBvbWl0IGl0cyBrZXkgaWYgcGVzc2ltaXN0aWMgYW5kIHRoZSBzZXJ2ZXIgY3JlYXRlcyB0aGUga2V5O1xuICAgKiBtdXN0IGhhdmUgYSBrZXkgaWYgb3B0aW1pc3RpYyBzYXZlLlxuICAgKiBAcmV0dXJucyBBIHRlcm1pbmF0aW5nIE9ic2VydmFibGUgb2YgdGhlIGVudGl0eVxuICAgKiBhZnRlciBzZXJ2ZXIgcmVwb3J0cyBzdWNjZXNzZnVsIHNhdmUgb3IgdGhlIHNhdmUgZXJyb3IuXG4gICAqL1xuICBhZGQoXG4gICAgZW50aXR5OiBQYXJ0aWFsPFQ+LFxuICAgIG9wdGlvbnM/OiBFbnRpdHlBY3Rpb25PcHRpb25zICYgeyBpc09wdGltaXN0aWM/OiBmYWxzZSB9XG4gICk6IE9ic2VydmFibGU8VD47XG4gIGFkZChcbiAgICBlbnRpdHk6IFQsXG4gICAgb3B0aW9uczogRW50aXR5QWN0aW9uT3B0aW9ucyAmIHsgaXNPcHRpbWlzdGljOiB0cnVlIH1cbiAgKTogT2JzZXJ2YWJsZTxUPjtcbiAgYWRkKGVudGl0eTogVCwgb3B0aW9ucz86IEVudGl0eUFjdGlvbk9wdGlvbnMpOiBPYnNlcnZhYmxlPFQ+O1xuXG4gIC8qKlxuICAgKiBEaXNwYXRjaCBhY3Rpb24gdG8gY2FuY2VsIHRoZSBwZXJzaXN0ZW5jZSBvcGVyYXRpb24gKHF1ZXJ5IG9yIHNhdmUpIHdpdGggdGhlIGdpdmVuIGNvcnJlbGF0aW9uSWQuXG4gICAqIEBwYXJhbSBjb3JyZWxhdGlvbklkIFRoZSBjb3JyZWxhdGlvbiBpZCBmb3IgdGhlIGNvcnJlc3BvbmRpbmcgRW50aXR5QWN0aW9uXG4gICAqIEBwYXJhbSBbcmVhc29uXSBleHBsYWlucyB3aHkgY2FuY2VsZWQgYW5kIGJ5IHdob20uXG4gICAqIEBwYXJhbSBbb3B0aW9uc10gb3B0aW9ucyBzdWNoIGFzIHRoZSB0YWdcbiAgICovXG4gIGNhbmNlbChcbiAgICBjb3JyZWxhdGlvbklkOiBhbnksXG4gICAgcmVhc29uPzogc3RyaW5nLFxuICAgIG9wdGlvbnM/OiBFbnRpdHlBY3Rpb25PcHRpb25zXG4gICk6IHZvaWQ7XG5cbiAgLyoqXG4gICAqIERpc3BhdGNoIGFjdGlvbiB0byBkZWxldGUgZW50aXR5IGZyb20gcmVtb3RlIHN0b3JhZ2UgYnkga2V5LlxuICAgKiBAcGFyYW0ga2V5IFRoZSBlbnRpdHkgdG8gZGVsZXRlXG4gICAqIEBwYXJhbSBbb3B0aW9uc10gb3B0aW9ucyB0aGF0IGluZmx1ZW5jZSBzYXZlIGFuZCBtZXJnZSBiZWhhdmlvclxuICAgKiBAcmV0dXJucyBBIHRlcm1pbmF0aW5nIE9ic2VydmFibGUgb2YgdGhlIGRlbGV0ZWQga2V5XG4gICAqIGFmdGVyIHNlcnZlciByZXBvcnRzIHN1Y2Nlc3NmdWwgc2F2ZSBvciB0aGUgc2F2ZSBlcnJvci5cbiAgICovXG4gIGRlbGV0ZShlbnRpdHk6IFQsIG9wdGlvbnM/OiBFbnRpdHlBY3Rpb25PcHRpb25zKTogT2JzZXJ2YWJsZTxudW1iZXIgfCBzdHJpbmc+O1xuXG4gIC8qKlxuICAgKiBEaXNwYXRjaCBhY3Rpb24gdG8gZGVsZXRlIGVudGl0eSBmcm9tIHJlbW90ZSBzdG9yYWdlIGJ5IGtleS5cbiAgICogQHBhcmFtIGtleSBUaGUgcHJpbWFyeSBrZXkgb2YgdGhlIGVudGl0eSB0byByZW1vdmVcbiAgICogQHBhcmFtIFtvcHRpb25zXSBvcHRpb25zIHRoYXQgaW5mbHVlbmNlIHNhdmUgYW5kIG1lcmdlIGJlaGF2aW9yXG4gICAqIEByZXR1cm5zIE9ic2VydmFibGUgb2YgdGhlIGRlbGV0ZWQga2V5XG4gICAqIGFmdGVyIHNlcnZlciByZXBvcnRzIHN1Y2Nlc3NmdWwgc2F2ZSBvciB0aGUgc2F2ZSBlcnJvci5cbiAgICovXG4gIGRlbGV0ZShcbiAgICBrZXk6IG51bWJlciB8IHN0cmluZyxcbiAgICBvcHRpb25zPzogRW50aXR5QWN0aW9uT3B0aW9uc1xuICApOiBPYnNlcnZhYmxlPG51bWJlciB8IHN0cmluZz47XG5cbiAgLyoqXG4gICAqIERpc3BhdGNoIGFjdGlvbiB0byBxdWVyeSByZW1vdGUgc3RvcmFnZSBmb3IgYWxsIGVudGl0aWVzIGFuZFxuICAgKiBtZXJnZSB0aGUgcXVlcmllZCBlbnRpdGllcyBpbnRvIHRoZSBjYWNoZWQgY29sbGVjdGlvbi5cbiAgICogQHBhcmFtIFtvcHRpb25zXSBvcHRpb25zIHRoYXQgaW5mbHVlbmNlIG1lcmdlIGJlaGF2aW9yXG4gICAqIEByZXR1cm5zIEEgdGVybWluYXRpbmcgT2JzZXJ2YWJsZSBvZiB0aGUgY29sbGVjdGlvblxuICAgKiBhZnRlciBzZXJ2ZXIgcmVwb3J0cyBzdWNjZXNzZnVsIHF1ZXJ5IG9yIHRoZSBxdWVyeSBlcnJvci5cbiAgICogQHNlZSBsb2FkKClcbiAgICovXG4gIGdldEFsbChvcHRpb25zPzogRW50aXR5QWN0aW9uT3B0aW9ucyk6IE9ic2VydmFibGU8VFtdPjtcblxuICAvKipcbiAgICogRGlzcGF0Y2ggYWN0aW9uIHRvIHF1ZXJ5IHJlbW90ZSBzdG9yYWdlIGZvciB0aGUgZW50aXR5IHdpdGggdGhpcyBwcmltYXJ5IGtleS5cbiAgICogSWYgdGhlIHNlcnZlciByZXR1cm5zIGFuIGVudGl0eSxcbiAgICogbWVyZ2UgaXQgaW50byB0aGUgY2FjaGVkIGNvbGxlY3Rpb24uXG4gICAqIEBwYXJhbSBrZXkgVGhlIHByaW1hcnkga2V5IG9mIHRoZSBlbnRpdHkgdG8gZ2V0LlxuICAgKiBAcGFyYW0gW29wdGlvbnNdIG9wdGlvbnMgdGhhdCBpbmZsdWVuY2UgbWVyZ2UgYmVoYXZpb3JcbiAgICogQHJldHVybnMgQSB0ZXJtaW5hdGluZyBPYnNlcnZhYmxlIG9mIHRoZSBxdWVyaWVkIGVudGl0aWVzIHRoYXQgYXJlIGluIHRoZSBjb2xsZWN0aW9uXG4gICAqIGFmdGVyIHNlcnZlciByZXBvcnRzIHN1Y2Nlc3Mgb3IgdGhlIHF1ZXJ5IGVycm9yLlxuICAgKi9cbiAgZ2V0QnlLZXkoa2V5OiBhbnksIG9wdGlvbnM/OiBFbnRpdHlBY3Rpb25PcHRpb25zKTogT2JzZXJ2YWJsZTxUPjtcblxuICAvKipcbiAgICogRGlzcGF0Y2ggYWN0aW9uIHRvIHF1ZXJ5IHJlbW90ZSBzdG9yYWdlIGZvciB0aGUgZW50aXRpZXMgdGhhdCBzYXRpc2Z5IGEgcXVlcnkgZXhwcmVzc2VkXG4gICAqIHdpdGggZWl0aGVyIGEgcXVlcnkgcGFyYW1ldGVyIG1hcCBvciBhbiBIVFRQIFVSTCBxdWVyeSBzdHJpbmcsXG4gICAqIGFuZCBtZXJnZSB0aGUgcmVzdWx0cyBpbnRvIHRoZSBjYWNoZWQgY29sbGVjdGlvbi5cbiAgICogQHBhcmFtIHF1ZXJ5UGFyYW1zIHRoZSBxdWVyeSBpbiBhIGZvcm0gdW5kZXJzdG9vZCBieSB0aGUgc2VydmVyXG4gICAqIEBwYXJhbSBbb3B0aW9uc10gb3B0aW9ucyB0aGF0IGluZmx1ZW5jZSBtZXJnZSBiZWhhdmlvclxuICAgKiBAcmV0dXJucyBBIHRlcm1pbmF0aW5nIE9ic2VydmFibGUgb2YgdGhlIHF1ZXJpZWQgZW50aXRpZXNcbiAgICogYWZ0ZXIgc2VydmVyIHJlcG9ydHMgc3VjY2Vzc2Z1bCBxdWVyeSBvciB0aGUgcXVlcnkgZXJyb3IuXG4gICAqL1xuICBnZXRXaXRoUXVlcnkoXG4gICAgcXVlcnlQYXJhbXM6IFF1ZXJ5UGFyYW1zIHwgc3RyaW5nLFxuICAgIG9wdGlvbnM/OiBFbnRpdHlBY3Rpb25PcHRpb25zXG4gICk6IE9ic2VydmFibGU8VFtdPjtcblxuICAvKipcbiAgICogRGlzcGF0Y2ggYWN0aW9uIHRvIHF1ZXJ5IHJlbW90ZSBzdG9yYWdlIGZvciBhbGwgZW50aXRpZXMgYW5kXG4gICAqIGNvbXBsZXRlbHkgcmVwbGFjZSB0aGUgY2FjaGVkIGNvbGxlY3Rpb24gd2l0aCB0aGUgcXVlcmllZCBlbnRpdGllcy5cbiAgICogQHBhcmFtIFtvcHRpb25zXSBvcHRpb25zIHRoYXQgaW5mbHVlbmNlIGxvYWQgYmVoYXZpb3JcbiAgICogQHJldHVybnMgQSB0ZXJtaW5hdGluZyBPYnNlcnZhYmxlIG9mIHRoZSBlbnRpdGllcyBpbiB0aGUgY29sbGVjdGlvblxuICAgKiBhZnRlciBzZXJ2ZXIgcmVwb3J0cyBzdWNjZXNzZnVsIHF1ZXJ5IG9yIHRoZSBxdWVyeSBlcnJvci5cbiAgICogQHNlZSBnZXRBbGxcbiAgICovXG4gIGxvYWQob3B0aW9ucz86IEVudGl0eUFjdGlvbk9wdGlvbnMpOiBPYnNlcnZhYmxlPFRbXT47XG5cbiAgLyoqXG4gICAqIERpc3BhdGNoIGFjdGlvbiB0byBxdWVyeSByZW1vdGUgc3RvcmFnZSBmb3IgdGhlIGVudGl0aWVzIHRoYXQgc2F0aXNmeSBhIHF1ZXJ5IGV4cHJlc3NlZFxuICAgKiB3aXRoIGVpdGhlciBhIHF1ZXJ5IHBhcmFtZXRlciBtYXAgb3IgYW4gSFRUUCBVUkwgcXVlcnkgc3RyaW5nLCBhbmRcbiAgICogY29tcGxldGVseSByZXBsYWNlIHRoZSBjYWNoZWQgY29sbGVjdGlvbiB3aXRoIHRoZSBxdWVyaWVkIGVudGl0aWVzLlxuICAgKiBAcGFyYW0gcXVlcnlQYXJhbXMgdGhlIHF1ZXJ5IGluIGEgZm9ybSB1bmRlcnN0b29kIGJ5IHRoZSBzZXJ2ZXJcbiAgICogQHBhcmFtIFtvcHRpb25zXSBvcHRpb25zIHRoYXQgaW5mbHVlbmNlIGxvYWQgYmVoYXZpb3JcbiAgICogQHJldHVybnMgQSB0ZXJtaW5hdGluZyBPYnNlcnZhYmxlIG9mIHRoZSBlbnRpdGllcyBpbiB0aGUgY29sbGVjdGlvblxuICAgKiBhZnRlciBzZXJ2ZXIgcmVwb3J0cyBzdWNjZXNzZnVsIHF1ZXJ5IG9yIHRoZSBxdWVyeSBlcnJvci5cbiAgICogQHNlZSBnZXRXaXRoUXVlcnlcbiAgICovXG4gIGxvYWRXaXRoUXVlcnkoXG4gICAgcXVlcnlQYXJhbXM6IFF1ZXJ5UGFyYW1zIHwgc3RyaW5nLFxuICAgIG9wdGlvbnM/OiBFbnRpdHlBY3Rpb25PcHRpb25zXG4gICk6IE9ic2VydmFibGU8VFtdPjtcblxuICAvKipcbiAgICogRGlzcGF0Y2ggYWN0aW9uIHRvIHNhdmUgdGhlIHVwZGF0ZWQgZW50aXR5IChvciBwYXJ0aWFsIGVudGl0eSkgaW4gcmVtb3RlIHN0b3JhZ2UuXG4gICAqIFRoZSB1cGRhdGUgZW50aXR5IG1heSBiZSBwYXJ0aWFsIChidXQgbXVzdCBoYXZlIGl0cyBrZXkpXG4gICAqIGluIHdoaWNoIGNhc2UgaXQgcGF0Y2hlcyB0aGUgZXhpc3RpbmcgZW50aXR5LlxuICAgKiBAcGFyYW0gZW50aXR5IHVwZGF0ZSBlbnRpdHksIHdoaWNoIG1pZ2h0IGJlIGEgcGFydGlhbCBvZiBUIGJ1dCBtdXN0IGF0IGxlYXN0IGhhdmUgaXRzIGtleS5cbiAgICogQHBhcmFtIFtvcHRpb25zXSBvcHRpb25zIHRoYXQgaW5mbHVlbmNlIHNhdmUgYW5kIG1lcmdlIGJlaGF2aW9yXG4gICAqIEByZXR1cm5zIEEgdGVybWluYXRpbmcgT2JzZXJ2YWJsZSBvZiB0aGUgdXBkYXRlZCBlbnRpdHlcbiAgICogYWZ0ZXIgc2VydmVyIHJlcG9ydHMgc3VjY2Vzc2Z1bCBzYXZlIG9yIHRoZSBzYXZlIGVycm9yLlxuICAgKi9cbiAgdXBkYXRlKGVudGl0eTogUGFydGlhbDxUPiwgb3B0aW9ucz86IEVudGl0eUFjdGlvbk9wdGlvbnMpOiBPYnNlcnZhYmxlPFQ+O1xuXG4gIC8qKlxuICAgKiBEaXNwYXRjaCBhY3Rpb24gdG8gc2F2ZSBhIG5ldyBvciB1cGRhdGUgYW4gZXhpc3RpbmcgZW50aXR5IHRvIHJlbW90ZSBzdG9yYWdlLlxuICAgKiBPbmx5IGRpc3BhdGNoIHRoaXMgYWN0aW9uIGlmIHlvdXIgc2VydmVyIHN1cHBvcnRzIHVwc2VydC5cbiAgICogQHBhcmFtIGVudGl0eSBlbnRpdHkgdG8gdXBzZXJ0LCB3aGljaCBtYXkgb21pdCBpdHMga2V5IGlmIHBlc3NpbWlzdGljIGFuZCB0aGUgc2VydmVyIGNyZWF0ZXMgdGhlIGtleTtcbiAgICogbXVzdCBoYXZlIGEga2V5IGlmIG9wdGltaXN0aWMgc2F2ZS5cbiAgICogQHJldHVybnMgQSB0ZXJtaW5hdGluZyBPYnNlcnZhYmxlIG9mIHRoZSBlbnRpdHlcbiAgICogYWZ0ZXIgc2VydmVyIHJlcG9ydHMgc3VjY2Vzc2Z1bCBzYXZlIG9yIHRoZSBzYXZlIGVycm9yLlxuICAgKi9cbiAgdXBzZXJ0KGVudGl0eTogVCwgb3B0aW9ucz86IEVudGl0eUFjdGlvbk9wdGlvbnMpOiBPYnNlcnZhYmxlPFQ+O1xufVxuXG4vKioqIEEgY29sbGVjdGlvbidzIGNhY2hlLW9ubHkgY29tbWFuZHMsIHdoaWNoIGRvIG5vdCB1cGRhdGUgcmVtb3RlIHN0b3JhZ2UgKioqL1xuXG5leHBvcnQgaW50ZXJmYWNlIEVudGl0eUNhY2hlQ29tbWFuZHM8VD4ge1xuICAvKipcbiAgICogUmVwbGFjZSBhbGwgZW50aXRpZXMgaW4gdGhlIGNhY2hlZCBjb2xsZWN0aW9uLlxuICAgKiBEb2VzIG5vdCBzYXZlIHRvIHJlbW90ZSBzdG9yYWdlLlxuICAgKiBAcGFyYW0gZW50aXRpZXMgdG8gYWRkIGRpcmVjdGx5IHRvIGNhY2hlLlxuICAgKiBAcGFyYW0gW29wdGlvbnNdIG9wdGlvbnMgc3VjaCBhcyBtZXJnZVN0cmF0ZWd5XG4gICAqL1xuICBhZGRBbGxUb0NhY2hlKGVudGl0aWVzOiBUW10sIG9wdGlvbnM/OiBFbnRpdHlBY3Rpb25PcHRpb25zKTogdm9pZDtcblxuICAvKipcbiAgICogQWRkIGEgbmV3IGVudGl0eSBkaXJlY3RseSB0byB0aGUgY2FjaGUuXG4gICAqIERvZXMgbm90IHNhdmUgdG8gcmVtb3RlIHN0b3JhZ2UuXG4gICAqIElnbm9yZWQgaWYgYW4gZW50aXR5IHdpdGggdGhlIHNhbWUgcHJpbWFyeSBrZXkgaXMgYWxyZWFkeSBpbiBjYWNoZS5cbiAgICogQHBhcmFtIGVudGl0eSB0byBhZGQgZGlyZWN0bHkgdG8gY2FjaGUuXG4gICAqIEBwYXJhbSBbb3B0aW9uc10gb3B0aW9ucyBzdWNoIGFzIG1lcmdlU3RyYXRlZ3lcbiAgICovXG4gIGFkZE9uZVRvQ2FjaGUoZW50aXR5OiBULCBvcHRpb25zPzogRW50aXR5QWN0aW9uT3B0aW9ucyk6IHZvaWQ7XG5cbiAgLyoqXG4gICAqIEFkZCBtdWx0aXBsZSBuZXcgZW50aXRpZXMgZGlyZWN0bHkgdG8gdGhlIGNhY2hlLlxuICAgKiBEb2VzIG5vdCBzYXZlIHRvIHJlbW90ZSBzdG9yYWdlLlxuICAgKiBFbnRpdGllcyB3aXRoIHByaW1hcnkga2V5cyBhbHJlYWR5IGluIGNhY2hlIGFyZSBpZ25vcmVkLlxuICAgKiBAcGFyYW0gZW50aXRpZXMgdG8gYWRkIGRpcmVjdGx5IHRvIGNhY2hlLlxuICAgKiBAcGFyYW0gW29wdGlvbnNdIG9wdGlvbnMgc3VjaCBhcyBtZXJnZVN0cmF0ZWd5XG4gICAqL1xuICBhZGRNYW55VG9DYWNoZShlbnRpdGllczogVFtdLCBvcHRpb25zPzogRW50aXR5QWN0aW9uT3B0aW9ucyk6IHZvaWQ7XG5cbiAgLyoqIENsZWFyIHRoZSBjYWNoZWQgZW50aXR5IGNvbGxlY3Rpb24gKi9cbiAgY2xlYXJDYWNoZShvcHRpb25zPzogRW50aXR5QWN0aW9uT3B0aW9ucyk6IHZvaWQ7XG5cbiAgLyoqXG4gICAqIFJlbW92ZSBhbiBlbnRpdHkgZGlyZWN0bHkgZnJvbSB0aGUgY2FjaGUuXG4gICAqIERvZXMgbm90IGRlbGV0ZSB0aGF0IGVudGl0eSBmcm9tIHJlbW90ZSBzdG9yYWdlLlxuICAgKiBAcGFyYW0gZW50aXR5IFRoZSBlbnRpdHkgdG8gcmVtb3ZlXG4gICAqIEBwYXJhbSBbb3B0aW9uc10gb3B0aW9ucyBzdWNoIGFzIG1lcmdlU3RyYXRlZ3lcbiAgICovXG4gIHJlbW92ZU9uZUZyb21DYWNoZShlbnRpdHk6IFQsIG9wdGlvbnM/OiBFbnRpdHlBY3Rpb25PcHRpb25zKTogdm9pZDtcblxuICAvKipcbiAgICogUmVtb3ZlIGFuIGVudGl0eSBkaXJlY3RseSBmcm9tIHRoZSBjYWNoZS5cbiAgICogRG9lcyBub3QgZGVsZXRlIHRoYXQgZW50aXR5IGZyb20gcmVtb3RlIHN0b3JhZ2UuXG4gICAqIEBwYXJhbSBrZXkgVGhlIHByaW1hcnkga2V5IG9mIHRoZSBlbnRpdHkgdG8gcmVtb3ZlXG4gICAqIEBwYXJhbSBbb3B0aW9uc10gb3B0aW9ucyBzdWNoIGFzIG1lcmdlU3RyYXRlZ3lcbiAgICovXG4gIHJlbW92ZU9uZUZyb21DYWNoZShrZXk6IG51bWJlciB8IHN0cmluZywgb3B0aW9ucz86IEVudGl0eUFjdGlvbk9wdGlvbnMpOiB2b2lkO1xuXG4gIC8qKlxuICAgKiBSZW1vdmUgbXVsdGlwbGUgZW50aXRpZXMgZGlyZWN0bHkgZnJvbSB0aGUgY2FjaGUuXG4gICAqIERvZXMgbm90IGRlbGV0ZSB0aGVzZSBlbnRpdGllcyBmcm9tIHJlbW90ZSBzdG9yYWdlLlxuICAgKiBAcGFyYW0gZW50aXR5IFRoZSBlbnRpdGllcyB0byByZW1vdmVcbiAgICogQHBhcmFtIFtvcHRpb25zXSBvcHRpb25zIHN1Y2ggYXMgbWVyZ2VTdHJhdGVneVxuICAgKi9cbiAgcmVtb3ZlTWFueUZyb21DYWNoZShlbnRpdGllczogVFtdLCBvcHRpb25zPzogRW50aXR5QWN0aW9uT3B0aW9ucyk6IHZvaWQ7XG5cbiAgLyoqXG4gICAqIFJlbW92ZSBtdWx0aXBsZSBlbnRpdGllcyBkaXJlY3RseSBmcm9tIHRoZSBjYWNoZS5cbiAgICogRG9lcyBub3QgZGVsZXRlIHRoZXNlIGVudGl0aWVzIGZyb20gcmVtb3RlIHN0b3JhZ2UuXG4gICAqIEBwYXJhbSBrZXlzIFRoZSBwcmltYXJ5IGtleXMgb2YgdGhlIGVudGl0aWVzIHRvIHJlbW92ZVxuICAgKiBAcGFyYW0gW29wdGlvbnNdIG9wdGlvbnMgc3VjaCBhcyBtZXJnZVN0cmF0ZWd5XG4gICAqL1xuICByZW1vdmVNYW55RnJvbUNhY2hlKFxuICAgIGtleXM6IChudW1iZXIgfCBzdHJpbmcpW10sXG4gICAgb3B0aW9ucz86IEVudGl0eUFjdGlvbk9wdGlvbnNcbiAgKTogdm9pZDtcblxuICAvKipcbiAgICogVXBkYXRlIGEgY2FjaGVkIGVudGl0eSBkaXJlY3RseS5cbiAgICogRG9lcyBub3QgdXBkYXRlIHRoYXQgZW50aXR5IGluIHJlbW90ZSBzdG9yYWdlLlxuICAgKiBJZ25vcmVkIGlmIGFuIGVudGl0eSB3aXRoIG1hdGNoaW5nIHByaW1hcnkga2V5IGlzIG5vdCBpbiBjYWNoZS5cbiAgICogVGhlIHVwZGF0ZSBlbnRpdHkgbWF5IGJlIHBhcnRpYWwgKGJ1dCBtdXN0IGhhdmUgaXRzIGtleSlcbiAgICogaW4gd2hpY2ggY2FzZSBpdCBwYXRjaGVzIHRoZSBleGlzdGluZyBlbnRpdHkuXG4gICAqIEBwYXJhbSBlbnRpdHkgdG8gdXBkYXRlIGRpcmVjdGx5IGluIGNhY2hlLlxuICAgKiBAcGFyYW0gW29wdGlvbnNdIG9wdGlvbnMgc3VjaCBhcyBtZXJnZVN0cmF0ZWd5XG4gICAqL1xuICB1cGRhdGVPbmVJbkNhY2hlKGVudGl0eTogUGFydGlhbDxUPiwgb3B0aW9ucz86IEVudGl0eUFjdGlvbk9wdGlvbnMpOiB2b2lkO1xuXG4gIC8qKlxuICAgKiBVcGRhdGUgbXVsdGlwbGUgY2FjaGVkIGVudGl0aWVzIGRpcmVjdGx5LlxuICAgKiBEb2VzIG5vdCB1cGRhdGUgdGhlc2UgZW50aXRpZXMgaW4gcmVtb3RlIHN0b3JhZ2UuXG4gICAqIEVudGl0aWVzIHdob3NlIHByaW1hcnkga2V5cyBhcmUgbm90IGluIGNhY2hlIGFyZSBpZ25vcmVkLlxuICAgKiBVcGRhdGUgZW50aXRpZXMgbWF5IGJlIHBhcnRpYWwgYnV0IG11c3QgYXQgbGVhc3QgaGF2ZSB0aGVpciBrZXlzLlxuICAgKiBzdWNoIHBhcnRpYWwgZW50aXRpZXMgcGF0Y2ggdGhlaXIgY2FjaGVkIGNvdW50ZXJwYXJ0cy5cbiAgICogQHBhcmFtIGVudGl0aWVzIHRvIHVwZGF0ZSBkaXJlY3RseSBpbiBjYWNoZS5cbiAgICogQHBhcmFtIFtvcHRpb25zXSBvcHRpb25zIHN1Y2ggYXMgbWVyZ2VTdHJhdGVneVxuICAgKi9cbiAgdXBkYXRlTWFueUluQ2FjaGUoXG4gICAgZW50aXRpZXM6IFBhcnRpYWw8VD5bXSxcbiAgICBvcHRpb25zPzogRW50aXR5QWN0aW9uT3B0aW9uc1xuICApOiB2b2lkO1xuXG4gIC8qKlxuICAgKiBJbnNlcnQgb3IgdXBkYXRlIGEgY2FjaGVkIGVudGl0eSBkaXJlY3RseS5cbiAgICogRG9lcyBub3Qgc2F2ZSB0byByZW1vdGUgc3RvcmFnZS5cbiAgICogVXBzZXJ0IGVudGl0eSBtaWdodCBiZSBhIHBhcnRpYWwgb2YgVCBidXQgbXVzdCBhdCBsZWFzdCBoYXZlIGl0cyBrZXkuXG4gICAqIFBhc3MgdGhlIFVwZGF0ZTxUPiBzdHJ1Y3R1cmUgYXMgdGhlIHBheWxvYWQuXG4gICAqIEBwYXJhbSBlbnRpdHkgdG8gdXBzZXJ0IGRpcmVjdGx5IGluIGNhY2hlLlxuICAgKiBAcGFyYW0gW29wdGlvbnNdIG9wdGlvbnMgc3VjaCBhcyBtZXJnZVN0cmF0ZWd5XG4gICAqL1xuICB1cHNlcnRPbmVJbkNhY2hlKGVudGl0eTogUGFydGlhbDxUPiwgb3B0aW9ucz86IEVudGl0eUFjdGlvbk9wdGlvbnMpOiB2b2lkO1xuXG4gIC8qKlxuICAgKiBJbnNlcnQgb3IgdXBkYXRlIG11bHRpcGxlIGNhY2hlZCBlbnRpdGllcyBkaXJlY3RseS5cbiAgICogRG9lcyBub3Qgc2F2ZSB0byByZW1vdGUgc3RvcmFnZS5cbiAgICogVXBzZXJ0IGVudGl0aWVzIG1pZ2h0IGJlIHBhcnRpYWwgYnV0IG11c3QgYXQgbGVhc3QgaGF2ZSB0aGVpciBrZXlzLlxuICAgKiBQYXNzIGFuIGFycmF5IG9mIHRoZSBVcGRhdGU8VD4gc3RydWN0dXJlIGFzIHRoZSBwYXlsb2FkLlxuICAgKiBAcGFyYW0gZW50aXRpZXMgdG8gdXBzZXJ0IGRpcmVjdGx5IGluIGNhY2hlLlxuICAgKiBAcGFyYW0gW29wdGlvbnNdIG9wdGlvbnMgc3VjaCBhcyBtZXJnZVN0cmF0ZWd5XG4gICAqL1xuICB1cHNlcnRNYW55SW5DYWNoZShcbiAgICBlbnRpdGllczogUGFydGlhbDxUPltdLFxuICAgIG9wdGlvbnM/OiBFbnRpdHlBY3Rpb25PcHRpb25zXG4gICk6IHZvaWQ7XG5cbiAgLyoqXG4gICAqIFNldCB0aGUgcGF0dGVybiB0aGF0IHRoZSBjb2xsZWN0aW9uJ3MgZmlsdGVyIGFwcGxpZXNcbiAgICogd2hlbiB1c2luZyB0aGUgYGZpbHRlcmVkRW50aXRpZXNgIHNlbGVjdG9yLlxuICAgKi9cbiAgc2V0RmlsdGVyKHBhdHRlcm46IGFueSwgb3B0aW9ucz86IEVudGl0eUFjdGlvbk9wdGlvbnMpOiB2b2lkO1xuXG4gIC8qKiBTZXQgdGhlIGxvYWRlZCBmbGFnICovXG4gIHNldExvYWRlZChpc0xvYWRlZDogYm9vbGVhbiwgb3B0aW9ucz86IEVudGl0eUFjdGlvbk9wdGlvbnMpOiB2b2lkO1xuXG4gIC8qKiBTZXQgdGhlIGxvYWRpbmcgZmxhZyAqL1xuICBzZXRMb2FkaW5nKGlzTG9hZGluZzogYm9vbGVhbiwgb3B0aW9ucz86IEVudGl0eUFjdGlvbk9wdGlvbnMpOiB2b2lkO1xufVxuXG4vKiogQ29tbWFuZHMgdGhhdCBkaXNwYXRjaCBlbnRpdHkgYWN0aW9ucyBmb3IgYSBjb2xsZWN0aW9uICovXG5leHBvcnQgaW50ZXJmYWNlIEVudGl0eUNvbW1hbmRzPFQ+XG4gIGV4dGVuZHMgRW50aXR5U2VydmVyQ29tbWFuZHM8VD4sXG4gICAgRW50aXR5Q2FjaGVDb21tYW5kczxUPiB7fVxuIl19
@@ -0,0 +1,31 @@
1
+ import { Injectable } from '@angular/core';
2
+ import * as i0 from "@angular/core";
3
+ /**
4
+ * Default options for EntityDispatcher behavior
5
+ * such as whether `add()` is optimistic or pessimistic by default.
6
+ * An optimistic save modifies the collection immediately and before saving to the server.
7
+ * A pessimistic save modifies the collection after the server confirms the save was successful.
8
+ * This class initializes the defaults to the safest values.
9
+ * Provide an alternative to change the defaults for all entity collections.
10
+ */
11
+ class EntityDispatcherDefaultOptions {
12
+ constructor() {
13
+ /** True if added entities are saved optimistically; false if saved pessimistically. */
14
+ this.optimisticAdd = false;
15
+ /** True if deleted entities are saved optimistically; false if saved pessimistically. */
16
+ this.optimisticDelete = true;
17
+ /** True if updated entities are saved optimistically; false if saved pessimistically. */
18
+ this.optimisticUpdate = false;
19
+ /** True if upsert entities are saved optimistically; false if saved pessimistically. */
20
+ this.optimisticUpsert = false;
21
+ /** True if entities in a cache saveEntities request are saved optimistically; false if saved pessimistically. */
22
+ this.optimisticSaveEntities = false;
23
+ }
24
+ /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.0", ngImport: i0, type: EntityDispatcherDefaultOptions, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
25
+ /** @nocollapse */ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.0.0", ngImport: i0, type: EntityDispatcherDefaultOptions }); }
26
+ }
27
+ export { EntityDispatcherDefaultOptions };
28
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.0", ngImport: i0, type: EntityDispatcherDefaultOptions, decorators: [{
29
+ type: Injectable
30
+ }] });
31
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW50aXR5LWRpc3BhdGNoZXItZGVmYXVsdC1vcHRpb25zLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbW9kdWxlcy9kYXRhL3NyYy9kaXNwYXRjaGVycy9lbnRpdHktZGlzcGF0Y2hlci1kZWZhdWx0LW9wdGlvbnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQzs7QUFDM0M7Ozs7Ozs7R0FPRztBQUNILE1BQ2EsOEJBQThCO0lBRDNDO1FBRUUsdUZBQXVGO1FBQ3ZGLGtCQUFhLEdBQUcsS0FBSyxDQUFDO1FBQ3RCLHlGQUF5RjtRQUN6RixxQkFBZ0IsR0FBRyxJQUFJLENBQUM7UUFDeEIseUZBQXlGO1FBQ3pGLHFCQUFnQixHQUFHLEtBQUssQ0FBQztRQUN6Qix3RkFBd0Y7UUFDeEYscUJBQWdCLEdBQUcsS0FBSyxDQUFDO1FBQ3pCLGlIQUFpSDtRQUNqSCwyQkFBc0IsR0FBRyxLQUFLLENBQUM7S0FDaEM7aUlBWFksOEJBQThCO3FJQUE5Qiw4QkFBOEI7O1NBQTlCLDhCQUE4QjsyRkFBOUIsOEJBQThCO2tCQUQxQyxVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuLyoqXG4gKiBEZWZhdWx0IG9wdGlvbnMgZm9yIEVudGl0eURpc3BhdGNoZXIgYmVoYXZpb3JcbiAqIHN1Y2ggYXMgd2hldGhlciBgYWRkKClgIGlzIG9wdGltaXN0aWMgb3IgcGVzc2ltaXN0aWMgYnkgZGVmYXVsdC5cbiAqIEFuIG9wdGltaXN0aWMgc2F2ZSBtb2RpZmllcyB0aGUgY29sbGVjdGlvbiBpbW1lZGlhdGVseSBhbmQgYmVmb3JlIHNhdmluZyB0byB0aGUgc2VydmVyLlxuICogQSBwZXNzaW1pc3RpYyBzYXZlIG1vZGlmaWVzIHRoZSBjb2xsZWN0aW9uIGFmdGVyIHRoZSBzZXJ2ZXIgY29uZmlybXMgdGhlIHNhdmUgd2FzIHN1Y2Nlc3NmdWwuXG4gKiBUaGlzIGNsYXNzIGluaXRpYWxpemVzIHRoZSBkZWZhdWx0cyB0byB0aGUgc2FmZXN0IHZhbHVlcy5cbiAqIFByb3ZpZGUgYW4gYWx0ZXJuYXRpdmUgdG8gY2hhbmdlIHRoZSBkZWZhdWx0cyBmb3IgYWxsIGVudGl0eSBjb2xsZWN0aW9ucy5cbiAqL1xuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIEVudGl0eURpc3BhdGNoZXJEZWZhdWx0T3B0aW9ucyB7XG4gIC8qKiBUcnVlIGlmIGFkZGVkIGVudGl0aWVzIGFyZSBzYXZlZCBvcHRpbWlzdGljYWxseTsgZmFsc2UgaWYgc2F2ZWQgcGVzc2ltaXN0aWNhbGx5LiAqL1xuICBvcHRpbWlzdGljQWRkID0gZmFsc2U7XG4gIC8qKiBUcnVlIGlmIGRlbGV0ZWQgZW50aXRpZXMgYXJlIHNhdmVkIG9wdGltaXN0aWNhbGx5OyBmYWxzZSBpZiBzYXZlZCBwZXNzaW1pc3RpY2FsbHkuICovXG4gIG9wdGltaXN0aWNEZWxldGUgPSB0cnVlO1xuICAvKiogVHJ1ZSBpZiB1cGRhdGVkIGVudGl0aWVzIGFyZSBzYXZlZCBvcHRpbWlzdGljYWxseTsgZmFsc2UgaWYgc2F2ZWQgcGVzc2ltaXN0aWNhbGx5LiAqL1xuICBvcHRpbWlzdGljVXBkYXRlID0gZmFsc2U7XG4gIC8qKiBUcnVlIGlmIHVwc2VydCBlbnRpdGllcyBhcmUgc2F2ZWQgb3B0aW1pc3RpY2FsbHk7IGZhbHNlIGlmIHNhdmVkIHBlc3NpbWlzdGljYWxseS4gKi9cbiAgb3B0aW1pc3RpY1Vwc2VydCA9IGZhbHNlO1xuICAvKiogVHJ1ZSBpZiBlbnRpdGllcyBpbiBhIGNhY2hlIHNhdmVFbnRpdGllcyByZXF1ZXN0IGFyZSBzYXZlZCBvcHRpbWlzdGljYWxseTsgZmFsc2UgaWYgc2F2ZWQgcGVzc2ltaXN0aWNhbGx5LiAqL1xuICBvcHRpbWlzdGljU2F2ZUVudGl0aWVzID0gZmFsc2U7XG59XG4iXX0=
@@ -0,0 +1,68 @@
1
+ import { Inject, Injectable } from '@angular/core';
2
+ import { ScannedActionsSubject } from '@ngrx/store';
3
+ import { shareReplay } from 'rxjs/operators';
4
+ import { defaultSelectId } from '../utils/utilities';
5
+ import { ENTITY_CACHE_SELECTOR_TOKEN, } from '../selectors/entity-cache-selector';
6
+ import { EntityDispatcherBase } from './entity-dispatcher-base';
7
+ import * as i0 from "@angular/core";
8
+ import * as i1 from "../actions/entity-action-factory";
9
+ import * as i2 from "@ngrx/store";
10
+ import * as i3 from "./entity-dispatcher-default-options";
11
+ import * as i4 from "../utils/correlation-id-generator";
12
+ import * as i5 from "rxjs";
13
+ /** Creates EntityDispatchers for entity collections */
14
+ class EntityDispatcherFactory {
15
+ constructor(entityActionFactory, store, entityDispatcherDefaultOptions, scannedActions$, entityCacheSelector, correlationIdGenerator) {
16
+ this.entityActionFactory = entityActionFactory;
17
+ this.store = store;
18
+ this.entityDispatcherDefaultOptions = entityDispatcherDefaultOptions;
19
+ this.entityCacheSelector = entityCacheSelector;
20
+ this.correlationIdGenerator = correlationIdGenerator;
21
+ // Replay because sometimes in tests will fake data service with synchronous observable
22
+ // which makes subscriber miss the dispatched actions.
23
+ // Of course that's a testing mistake. But easy to forget, leading to painful debugging.
24
+ this.reducedActions$ = scannedActions$.pipe(shareReplay(1));
25
+ // Start listening so late subscriber won't miss the most recent action.
26
+ this.raSubscription = this.reducedActions$.subscribe();
27
+ }
28
+ /**
29
+ * Create an `EntityDispatcher` for an entity type `T` and store.
30
+ */
31
+ create(
32
+ /** Name of the entity type */
33
+ entityName,
34
+ /**
35
+ * Function that returns the primary key for an entity `T`.
36
+ * Usually acquired from `EntityDefinition` metadata.
37
+ * @param {IdSelector<T>} selectId
38
+ */
39
+ selectId = defaultSelectId,
40
+ /** Defaults for options that influence dispatcher behavior such as whether
41
+ * `add()` is optimistic or pessimistic;
42
+ * @param {Partial<EntityDispatcherDefaultOptions>} defaultOptions
43
+ */
44
+ defaultOptions = {}) {
45
+ // merge w/ defaultOptions with injected defaults
46
+ const options = {
47
+ ...this.entityDispatcherDefaultOptions,
48
+ ...defaultOptions,
49
+ };
50
+ return new EntityDispatcherBase(entityName, this.entityActionFactory, this.store, selectId, options, this.reducedActions$, this.entityCacheSelector, this.correlationIdGenerator);
51
+ }
52
+ ngOnDestroy() {
53
+ this.raSubscription.unsubscribe();
54
+ }
55
+ /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.0", ngImport: i0, type: EntityDispatcherFactory, deps: [{ token: i1.EntityActionFactory }, { token: i2.Store }, { token: i3.EntityDispatcherDefaultOptions }, { token: ScannedActionsSubject }, { token: ENTITY_CACHE_SELECTOR_TOKEN }, { token: i4.CorrelationIdGenerator }], target: i0.ɵɵFactoryTarget.Injectable }); }
56
+ /** @nocollapse */ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.0.0", ngImport: i0, type: EntityDispatcherFactory }); }
57
+ }
58
+ export { EntityDispatcherFactory };
59
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.0", ngImport: i0, type: EntityDispatcherFactory, decorators: [{
60
+ type: Injectable
61
+ }], ctorParameters: function () { return [{ type: i1.EntityActionFactory }, { type: i2.Store }, { type: i3.EntityDispatcherDefaultOptions }, { type: i5.Observable, decorators: [{
62
+ type: Inject,
63
+ args: [ScannedActionsSubject]
64
+ }] }, { type: undefined, decorators: [{
65
+ type: Inject,
66
+ args: [ENTITY_CACHE_SELECTOR_TOKEN]
67
+ }] }, { type: i4.CorrelationIdGenerator }]; } });
68
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW50aXR5LWRpc3BhdGNoZXItZmFjdG9yeS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL21vZHVsZXMvZGF0YS9zcmMvZGlzcGF0Y2hlcnMvZW50aXR5LWRpc3BhdGNoZXItZmFjdG9yeS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBYSxNQUFNLGVBQWUsQ0FBQztBQUM5RCxPQUFPLEVBQWlCLHFCQUFxQixFQUFFLE1BQU0sYUFBYSxDQUFDO0FBR25FLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUk3QyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFHckQsT0FBTyxFQUVMLDJCQUEyQixHQUM1QixNQUFNLG9DQUFvQyxDQUFDO0FBRTVDLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLDBCQUEwQixDQUFDOzs7Ozs7O0FBRWhFLHVEQUF1RDtBQUN2RCxNQUNhLHVCQUF1QjtJQVFsQyxZQUNVLG1CQUF3QyxFQUN4QyxLQUF5QixFQUN6Qiw4QkFBOEQsRUFDdkMsZUFBbUMsRUFFMUQsbUJBQXdDLEVBQ3hDLHNCQUE4QztRQU45Qyx3QkFBbUIsR0FBbkIsbUJBQW1CLENBQXFCO1FBQ3hDLFVBQUssR0FBTCxLQUFLLENBQW9CO1FBQ3pCLG1DQUE4QixHQUE5Qiw4QkFBOEIsQ0FBZ0M7UUFHOUQsd0JBQW1CLEdBQW5CLG1CQUFtQixDQUFxQjtRQUN4QywyQkFBc0IsR0FBdEIsc0JBQXNCLENBQXdCO1FBRXRELHVGQUF1RjtRQUN2RixzREFBc0Q7UUFDdEQsd0ZBQXdGO1FBQ3hGLElBQUksQ0FBQyxlQUFlLEdBQUcsZUFBZSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUM1RCx3RUFBd0U7UUFDeEUsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLFNBQVMsRUFBRSxDQUFDO0lBQ3pELENBQUM7SUFFRDs7T0FFRztJQUNILE1BQU07SUFDSiw4QkFBOEI7SUFDOUIsVUFBa0I7SUFDbEI7Ozs7T0FJRztJQUNILFdBQTBCLGVBQWU7SUFDekM7OztPQUdHO0lBQ0gsaUJBQTBELEVBQUU7UUFFNUQsaURBQWlEO1FBQ2pELE1BQU0sT0FBTyxHQUFtQztZQUM5QyxHQUFHLElBQUksQ0FBQyw4QkFBOEI7WUFDdEMsR0FBRyxjQUFjO1NBQ2xCLENBQUM7UUFDRixPQUFPLElBQUksb0JBQW9CLENBQzdCLFVBQVUsRUFDVixJQUFJLENBQUMsbUJBQW1CLEVBQ3hCLElBQUksQ0FBQyxLQUFLLEVBQ1YsUUFBUSxFQUNSLE9BQU8sRUFDUCxJQUFJLENBQUMsZUFBZSxFQUNwQixJQUFJLENBQUMsbUJBQW1CLEVBQ3hCLElBQUksQ0FBQyxzQkFBc0IsQ0FDNUIsQ0FBQztJQUNKLENBQUM7SUFFRCxXQUFXO1FBQ1QsSUFBSSxDQUFDLGNBQWMsQ0FBQyxXQUFXLEVBQUUsQ0FBQztJQUNwQyxDQUFDO2lJQTlEVSx1QkFBdUIsd0hBWXhCLHFCQUFxQixhQUNyQiwyQkFBMkI7cUlBYjFCLHVCQUF1Qjs7U0FBdkIsdUJBQXVCOzJGQUF2Qix1QkFBdUI7a0JBRG5DLFVBQVU7OzBCQWFOLE1BQU07MkJBQUMscUJBQXFCOzswQkFDNUIsTUFBTTsyQkFBQywyQkFBMkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3QsIEluamVjdGFibGUsIE9uRGVzdHJveSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQWN0aW9uLCBTdG9yZSwgU2Nhbm5lZEFjdGlvbnNTdWJqZWN0IH0gZnJvbSAnQG5ncngvc3RvcmUnO1xuaW1wb3J0IHsgSWRTZWxlY3RvciB9IGZyb20gJ0BuZ3J4L2VudGl0eSc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IHNoYXJlUmVwbGF5IH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5pbXBvcnQgeyBDb3JyZWxhdGlvbklkR2VuZXJhdG9yIH0gZnJvbSAnLi4vdXRpbHMvY29ycmVsYXRpb24taWQtZ2VuZXJhdG9yJztcbmltcG9ydCB7IEVudGl0eURpc3BhdGNoZXJEZWZhdWx0T3B0aW9ucyB9IGZyb20gJy4vZW50aXR5LWRpc3BhdGNoZXItZGVmYXVsdC1vcHRpb25zJztcbmltcG9ydCB7IGRlZmF1bHRTZWxlY3RJZCB9IGZyb20gJy4uL3V0aWxzL3V0aWxpdGllcyc7XG5pbXBvcnQgeyBFbnRpdHlBY3Rpb25GYWN0b3J5IH0gZnJvbSAnLi4vYWN0aW9ucy9lbnRpdHktYWN0aW9uLWZhY3RvcnknO1xuaW1wb3J0IHsgRW50aXR5Q2FjaGUgfSBmcm9tICcuLi9yZWR1Y2Vycy9lbnRpdHktY2FjaGUnO1xuaW1wb3J0IHtcbiAgRW50aXR5Q2FjaGVTZWxlY3RvcixcbiAgRU5USVRZX0NBQ0hFX1NFTEVDVE9SX1RPS0VOLFxufSBmcm9tICcuLi9zZWxlY3RvcnMvZW50aXR5LWNhY2hlLXNlbGVjdG9yJztcbmltcG9ydCB7IEVudGl0eURpc3BhdGNoZXIgfSBmcm9tICcuL2VudGl0eS1kaXNwYXRjaGVyJztcbmltcG9ydCB7IEVudGl0eURpc3BhdGNoZXJCYXNlIH0gZnJvbSAnLi9lbnRpdHktZGlzcGF0Y2hlci1iYXNlJztcblxuLyoqIENyZWF0ZXMgRW50aXR5RGlzcGF0Y2hlcnMgZm9yIGVudGl0eSBjb2xsZWN0aW9ucyAqL1xuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIEVudGl0eURpc3BhdGNoZXJGYWN0b3J5IGltcGxlbWVudHMgT25EZXN0cm95IHtcbiAgLyoqXG4gICAqIEFjdGlvbnMgc2Nhbm5lZCBieSB0aGUgc3RvcmUgYWZ0ZXIgaXQgcHJvY2Vzc2VkIHRoZW0gd2l0aCByZWR1Y2Vycy5cbiAgICogQSByZXBsYXkgb2JzZXJ2YWJsZSBvZiB0aGUgbW9zdCByZWNlbnQgYWN0aW9uIHJlZHVjZWQgYnkgdGhlIHN0b3JlLlxuICAgKi9cbiAgcmVkdWNlZEFjdGlvbnMkOiBPYnNlcnZhYmxlPEFjdGlvbj47XG4gIHByaXZhdGUgcmFTdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbjtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGVudGl0eUFjdGlvbkZhY3Rvcnk6IEVudGl0eUFjdGlvbkZhY3RvcnksXG4gICAgcHJpdmF0ZSBzdG9yZTogU3RvcmU8RW50aXR5Q2FjaGU+LFxuICAgIHByaXZhdGUgZW50aXR5RGlzcGF0Y2hlckRlZmF1bHRPcHRpb25zOiBFbnRpdHlEaXNwYXRjaGVyRGVmYXVsdE9wdGlvbnMsXG4gICAgQEluamVjdChTY2FubmVkQWN0aW9uc1N1YmplY3QpIHNjYW5uZWRBY3Rpb25zJDogT2JzZXJ2YWJsZTxBY3Rpb24+LFxuICAgIEBJbmplY3QoRU5USVRZX0NBQ0hFX1NFTEVDVE9SX1RPS0VOKVxuICAgIHByaXZhdGUgZW50aXR5Q2FjaGVTZWxlY3RvcjogRW50aXR5Q2FjaGVTZWxlY3RvcixcbiAgICBwcml2YXRlIGNvcnJlbGF0aW9uSWRHZW5lcmF0b3I6IENvcnJlbGF0aW9uSWRHZW5lcmF0b3JcbiAgKSB7XG4gICAgLy8gUmVwbGF5IGJlY2F1c2Ugc29tZXRpbWVzIGluIHRlc3RzIHdpbGwgZmFrZSBkYXRhIHNlcnZpY2Ugd2l0aCBzeW5jaHJvbm91cyBvYnNlcnZhYmxlXG4gICAgLy8gd2hpY2ggbWFrZXMgc3Vic2NyaWJlciBtaXNzIHRoZSBkaXNwYXRjaGVkIGFjdGlvbnMuXG4gICAgLy8gT2YgY291cnNlIHRoYXQncyBhIHRlc3RpbmcgbWlzdGFrZS4gQnV0IGVhc3kgdG8gZm9yZ2V0LCBsZWFkaW5nIHRvIHBhaW5mdWwgZGVidWdnaW5nLlxuICAgIHRoaXMucmVkdWNlZEFjdGlvbnMkID0gc2Nhbm5lZEFjdGlvbnMkLnBpcGUoc2hhcmVSZXBsYXkoMSkpO1xuICAgIC8vIFN0YXJ0IGxpc3RlbmluZyBzbyBsYXRlIHN1YnNjcmliZXIgd29uJ3QgbWlzcyB0aGUgbW9zdCByZWNlbnQgYWN0aW9uLlxuICAgIHRoaXMucmFTdWJzY3JpcHRpb24gPSB0aGlzLnJlZHVjZWRBY3Rpb25zJC5zdWJzY3JpYmUoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgYW4gYEVudGl0eURpc3BhdGNoZXJgIGZvciBhbiBlbnRpdHkgdHlwZSBgVGAgYW5kIHN0b3JlLlxuICAgKi9cbiAgY3JlYXRlPFQ+KFxuICAgIC8qKiBOYW1lIG9mIHRoZSBlbnRpdHkgdHlwZSAqL1xuICAgIGVudGl0eU5hbWU6IHN0cmluZyxcbiAgICAvKipcbiAgICAgKiBGdW5jdGlvbiB0aGF0IHJldHVybnMgdGhlIHByaW1hcnkga2V5IGZvciBhbiBlbnRpdHkgYFRgLlxuICAgICAqIFVzdWFsbHkgYWNxdWlyZWQgZnJvbSBgRW50aXR5RGVmaW5pdGlvbmAgbWV0YWRhdGEuXG4gICAgICogQHBhcmFtIHtJZFNlbGVjdG9yPFQ+fSBzZWxlY3RJZFxuICAgICAqL1xuICAgIHNlbGVjdElkOiBJZFNlbGVjdG9yPFQ+ID0gZGVmYXVsdFNlbGVjdElkLFxuICAgIC8qKiBEZWZhdWx0cyBmb3Igb3B0aW9ucyB0aGF0IGluZmx1ZW5jZSBkaXNwYXRjaGVyIGJlaGF2aW9yIHN1Y2ggYXMgd2hldGhlclxuICAgICAqIGBhZGQoKWAgaXMgb3B0aW1pc3RpYyBvciBwZXNzaW1pc3RpYztcbiAgICAgKiBAcGFyYW0ge1BhcnRpYWw8RW50aXR5RGlzcGF0Y2hlckRlZmF1bHRPcHRpb25zPn0gZGVmYXVsdE9wdGlvbnNcbiAgICAgKi9cbiAgICBkZWZhdWx0T3B0aW9uczogUGFydGlhbDxFbnRpdHlEaXNwYXRjaGVyRGVmYXVsdE9wdGlvbnM+ID0ge31cbiAgKTogRW50aXR5RGlzcGF0Y2hlcjxUPiB7XG4gICAgLy8gbWVyZ2Ugdy8gZGVmYXVsdE9wdGlvbnMgd2l0aCBpbmplY3RlZCBkZWZhdWx0c1xuICAgIGNvbnN0IG9wdGlvbnM6IEVudGl0eURpc3BhdGNoZXJEZWZhdWx0T3B0aW9ucyA9IHtcbiAgICAgIC4uLnRoaXMuZW50aXR5RGlzcGF0Y2hlckRlZmF1bHRPcHRpb25zLFxuICAgICAgLi4uZGVmYXVsdE9wdGlvbnMsXG4gICAgfTtcbiAgICByZXR1cm4gbmV3IEVudGl0eURpc3BhdGNoZXJCYXNlPFQ+KFxuICAgICAgZW50aXR5TmFtZSxcbiAgICAgIHRoaXMuZW50aXR5QWN0aW9uRmFjdG9yeSxcbiAgICAgIHRoaXMuc3RvcmUsXG4gICAgICBzZWxlY3RJZCxcbiAgICAgIG9wdGlvbnMsXG4gICAgICB0aGlzLnJlZHVjZWRBY3Rpb25zJCxcbiAgICAgIHRoaXMuZW50aXR5Q2FjaGVTZWxlY3RvcixcbiAgICAgIHRoaXMuY29ycmVsYXRpb25JZEdlbmVyYXRvclxuICAgICk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpIHtcbiAgICB0aGlzLnJhU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gIH1cbn1cbiJdfQ==