@ngrx/data 18.1.0 → 19.0.0-beta.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 (71) hide show
  1. package/fesm2022/ngrx-data.mjs +86 -86
  2. package/fesm2022/ngrx-data.mjs.map +1 -1
  3. package/package.json +6 -8
  4. package/schematics-core/utility/libs-version.js +1 -1
  5. package/schematics-core/utility/libs-version.js.map +1 -1
  6. package/schematics-core/utility/visitors.js +2 -2
  7. package/src/index.d.ts +1 -1
  8. package/esm2022/index.mjs +0 -7
  9. package/esm2022/ngrx-data.mjs +0 -5
  10. package/esm2022/public_api.mjs +0 -2
  11. package/esm2022/src/actions/entity-action-factory.mjs +0 -50
  12. package/esm2022/src/actions/entity-action-guard.mjs +0 -130
  13. package/esm2022/src/actions/entity-action-operators.mjs +0 -33
  14. package/esm2022/src/actions/entity-action.mjs +0 -2
  15. package/esm2022/src/actions/entity-cache-action.mjs +0 -116
  16. package/esm2022/src/actions/entity-cache-change-set.mjs +0 -50
  17. package/esm2022/src/actions/entity-op.mjs +0 -82
  18. package/esm2022/src/actions/merge-strategy.mjs +0 -22
  19. package/esm2022/src/actions/update-response-data.mjs +0 -2
  20. package/esm2022/src/dataservices/data-service-error.mjs +0 -36
  21. package/esm2022/src/dataservices/default-data-service-config.mjs +0 -7
  22. package/esm2022/src/dataservices/default-data.service.mjs +0 -209
  23. package/esm2022/src/dataservices/entity-cache-data.service.mjs +0 -146
  24. package/esm2022/src/dataservices/entity-data.service.mjs +0 -63
  25. package/esm2022/src/dataservices/http-url-generator.mjs +0 -87
  26. package/esm2022/src/dataservices/interfaces.mjs +0 -2
  27. package/esm2022/src/dataservices/persistence-result-handler.service.mjs +0 -49
  28. package/esm2022/src/dispatchers/entity-cache-dispatcher.mjs +0 -163
  29. package/esm2022/src/dispatchers/entity-commands.mjs +0 -2
  30. package/esm2022/src/dispatchers/entity-dispatcher-base.mjs +0 -420
  31. package/esm2022/src/dispatchers/entity-dispatcher-default-options.mjs +0 -30
  32. package/esm2022/src/dispatchers/entity-dispatcher-factory.mjs +0 -67
  33. package/esm2022/src/dispatchers/entity-dispatcher.mjs +0 -10
  34. package/esm2022/src/effects/entity-cache-effects.mjs +0 -115
  35. package/esm2022/src/effects/entity-effects-scheduler.mjs +0 -5
  36. package/esm2022/src/effects/entity-effects.mjs +0 -148
  37. package/esm2022/src/entity-data-config.mjs +0 -2
  38. package/esm2022/src/entity-data-without-effects.module.mjs +0 -27
  39. package/esm2022/src/entity-data.module.mjs +0 -28
  40. package/esm2022/src/entity-metadata/entity-definition.mjs +0 -33
  41. package/esm2022/src/entity-metadata/entity-definition.service.mjs +0 -93
  42. package/esm2022/src/entity-metadata/entity-filters.mjs +0 -23
  43. package/esm2022/src/entity-metadata/entity-metadata.mjs +0 -3
  44. package/esm2022/src/entity-services/entity-collection-service-base.mjs +0 -271
  45. package/esm2022/src/entity-services/entity-collection-service-elements-factory.mjs +0 -38
  46. package/esm2022/src/entity-services/entity-collection-service-factory.mjs +0 -28
  47. package/esm2022/src/entity-services/entity-collection-service.mjs +0 -2
  48. package/esm2022/src/entity-services/entity-services-base.mjs +0 -118
  49. package/esm2022/src/entity-services/entity-services-elements.mjs +0 -33
  50. package/esm2022/src/entity-services/entity-services.mjs +0 -10
  51. package/esm2022/src/index.mjs +0 -67
  52. package/esm2022/src/provide-entity-data.mjs +0 -222
  53. package/esm2022/src/reducers/constants.mjs +0 -7
  54. package/esm2022/src/reducers/entity-cache-reducer.mjs +0 -271
  55. package/esm2022/src/reducers/entity-cache.mjs +0 -2
  56. package/esm2022/src/reducers/entity-change-tracker-base.mjs +0 -587
  57. package/esm2022/src/reducers/entity-change-tracker.mjs +0 -2
  58. package/esm2022/src/reducers/entity-collection-creator.mjs +0 -37
  59. package/esm2022/src/reducers/entity-collection-reducer-methods.mjs +0 -807
  60. package/esm2022/src/reducers/entity-collection-reducer-registry.mjs +0 -68
  61. package/esm2022/src/reducers/entity-collection-reducer.mjs +0 -24
  62. package/esm2022/src/reducers/entity-collection.mjs +0 -13
  63. package/esm2022/src/selectors/entity-cache-selector.mjs +0 -14
  64. package/esm2022/src/selectors/entity-selectors$.mjs +0 -52
  65. package/esm2022/src/selectors/entity-selectors.mjs +0 -96
  66. package/esm2022/src/utils/correlation-id-generator.mjs +0 -30
  67. package/esm2022/src/utils/default-logger.mjs +0 -40
  68. package/esm2022/src/utils/default-pluralizer.mjs +0 -71
  69. package/esm2022/src/utils/guid-fns.mjs +0 -69
  70. package/esm2022/src/utils/interfaces.mjs +0 -7
  71. package/esm2022/src/utils/utilities.mjs +0 -52
@@ -1,82 +0,0 @@
1
- // Ensure that these suffix values and the EntityOp suffixes match
2
- // Cannot do that programmatically.
3
- /** General purpose entity action operations, good for any entity type */
4
- export var EntityOp;
5
- (function (EntityOp) {
6
- // Persistance operations
7
- EntityOp["CANCEL_PERSIST"] = "@ngrx/data/cancel-persist";
8
- EntityOp["CANCELED_PERSIST"] = "@ngrx/data/canceled-persist";
9
- EntityOp["QUERY_ALL"] = "@ngrx/data/query-all";
10
- EntityOp["QUERY_ALL_SUCCESS"] = "@ngrx/data/query-all/success";
11
- EntityOp["QUERY_ALL_ERROR"] = "@ngrx/data/query-all/error";
12
- EntityOp["QUERY_LOAD"] = "@ngrx/data/query-load";
13
- EntityOp["QUERY_LOAD_SUCCESS"] = "@ngrx/data/query-load/success";
14
- EntityOp["QUERY_LOAD_ERROR"] = "@ngrx/data/query-load/error";
15
- EntityOp["QUERY_MANY"] = "@ngrx/data/query-many";
16
- EntityOp["QUERY_MANY_SUCCESS"] = "@ngrx/data/query-many/success";
17
- EntityOp["QUERY_MANY_ERROR"] = "@ngrx/data/query-many/error";
18
- EntityOp["QUERY_BY_KEY"] = "@ngrx/data/query-by-key";
19
- EntityOp["QUERY_BY_KEY_SUCCESS"] = "@ngrx/data/query-by-key/success";
20
- EntityOp["QUERY_BY_KEY_ERROR"] = "@ngrx/data/query-by-key/error";
21
- EntityOp["SAVE_ADD_MANY"] = "@ngrx/data/save/add-many";
22
- EntityOp["SAVE_ADD_MANY_ERROR"] = "@ngrx/data/save/add-many/error";
23
- EntityOp["SAVE_ADD_MANY_SUCCESS"] = "@ngrx/data/save/add-many/success";
24
- EntityOp["SAVE_ADD_ONE"] = "@ngrx/data/save/add-one";
25
- EntityOp["SAVE_ADD_ONE_ERROR"] = "@ngrx/data/save/add-one/error";
26
- EntityOp["SAVE_ADD_ONE_SUCCESS"] = "@ngrx/data/save/add-one/success";
27
- EntityOp["SAVE_DELETE_MANY"] = "@ngrx/data/save/delete-many";
28
- EntityOp["SAVE_DELETE_MANY_SUCCESS"] = "@ngrx/data/save/delete-many/success";
29
- EntityOp["SAVE_DELETE_MANY_ERROR"] = "@ngrx/data/save/delete-many/error";
30
- EntityOp["SAVE_DELETE_ONE"] = "@ngrx/data/save/delete-one";
31
- EntityOp["SAVE_DELETE_ONE_SUCCESS"] = "@ngrx/data/save/delete-one/success";
32
- EntityOp["SAVE_DELETE_ONE_ERROR"] = "@ngrx/data/save/delete-one/error";
33
- EntityOp["SAVE_UPDATE_MANY"] = "@ngrx/data/save/update-many";
34
- EntityOp["SAVE_UPDATE_MANY_SUCCESS"] = "@ngrx/data/save/update-many/success";
35
- EntityOp["SAVE_UPDATE_MANY_ERROR"] = "@ngrx/data/save/update-many/error";
36
- EntityOp["SAVE_UPDATE_ONE"] = "@ngrx/data/save/update-one";
37
- EntityOp["SAVE_UPDATE_ONE_SUCCESS"] = "@ngrx/data/save/update-one/success";
38
- EntityOp["SAVE_UPDATE_ONE_ERROR"] = "@ngrx/data/save/update-one/error";
39
- // Use only if the server supports upsert;
40
- EntityOp["SAVE_UPSERT_MANY"] = "@ngrx/data/save/upsert-many";
41
- EntityOp["SAVE_UPSERT_MANY_SUCCESS"] = "@ngrx/data/save/upsert-many/success";
42
- EntityOp["SAVE_UPSERT_MANY_ERROR"] = "@ngrx/data/save/upsert-many/error";
43
- // Use only if the server supports upsert;
44
- EntityOp["SAVE_UPSERT_ONE"] = "@ngrx/data/save/upsert-one";
45
- EntityOp["SAVE_UPSERT_ONE_SUCCESS"] = "@ngrx/data/save/upsert-one/success";
46
- EntityOp["SAVE_UPSERT_ONE_ERROR"] = "@ngrx/data/save/upsert-one/error";
47
- // Cache operations
48
- EntityOp["ADD_ALL"] = "@ngrx/data/add-all";
49
- EntityOp["ADD_MANY"] = "@ngrx/data/add-many";
50
- EntityOp["ADD_ONE"] = "@ngrx/data/add-one";
51
- EntityOp["REMOVE_ALL"] = "@ngrx/data/remove-all";
52
- EntityOp["REMOVE_MANY"] = "@ngrx/data/remove-many";
53
- EntityOp["REMOVE_ONE"] = "@ngrx/data/remove-one";
54
- EntityOp["UPDATE_MANY"] = "@ngrx/data/update-many";
55
- EntityOp["UPDATE_ONE"] = "@ngrx/data/update-one";
56
- EntityOp["UPSERT_MANY"] = "@ngrx/data/upsert-many";
57
- EntityOp["UPSERT_ONE"] = "@ngrx/data/upsert-one";
58
- EntityOp["COMMIT_ALL"] = "@ngrx/data/commit-all";
59
- EntityOp["COMMIT_MANY"] = "@ngrx/data/commit-many";
60
- EntityOp["COMMIT_ONE"] = "@ngrx/data/commit-one";
61
- EntityOp["UNDO_ALL"] = "@ngrx/data/undo-all";
62
- EntityOp["UNDO_MANY"] = "@ngrx/data/undo-many";
63
- EntityOp["UNDO_ONE"] = "@ngrx/data/undo-one";
64
- EntityOp["SET_CHANGE_STATE"] = "@ngrx/data/set-change-state";
65
- EntityOp["SET_COLLECTION"] = "@ngrx/data/set-collection";
66
- EntityOp["SET_FILTER"] = "@ngrx/data/set-filter";
67
- EntityOp["SET_LOADED"] = "@ngrx/data/set-loaded";
68
- EntityOp["SET_LOADING"] = "@ngrx/data/set-loading";
69
- })(EntityOp || (EntityOp = {}));
70
- /** "Success" suffix appended to EntityOps that are successful.*/
71
- export const OP_SUCCESS = '/success';
72
- /** "Error" suffix appended to EntityOps that have failed.*/
73
- export const OP_ERROR = '/error';
74
- /** Make the error EntityOp corresponding to the given EntityOp */
75
- export function makeErrorOp(op) {
76
- return (op + OP_ERROR);
77
- }
78
- /** Make the success EntityOp corresponding to the given EntityOp */
79
- export function makeSuccessOp(op) {
80
- return (op + OP_SUCCESS);
81
- }
82
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW50aXR5LW9wLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbW9kdWxlcy9kYXRhL3NyYy9hY3Rpb25zL2VudGl0eS1vcC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxrRUFBa0U7QUFDbEUsbUNBQW1DO0FBRW5DLHlFQUF5RTtBQUN6RSxNQUFNLENBQU4sSUFBWSxRQStFWDtBQS9FRCxXQUFZLFFBQVE7SUFDbEIseUJBQXlCO0lBQ3pCLHdEQUE0QyxDQUFBO0lBQzVDLDREQUFnRCxDQUFBO0lBRWhELDhDQUFrQyxDQUFBO0lBQ2xDLDhEQUFrRCxDQUFBO0lBQ2xELDBEQUE4QyxDQUFBO0lBRTlDLGdEQUFvQyxDQUFBO0lBQ3BDLGdFQUFvRCxDQUFBO0lBQ3BELDREQUFnRCxDQUFBO0lBRWhELGdEQUFvQyxDQUFBO0lBQ3BDLGdFQUFvRCxDQUFBO0lBQ3BELDREQUFnRCxDQUFBO0lBRWhELG9EQUF3QyxDQUFBO0lBQ3hDLG9FQUF3RCxDQUFBO0lBQ3hELGdFQUFvRCxDQUFBO0lBRXBELHNEQUEwQyxDQUFBO0lBQzFDLGtFQUFzRCxDQUFBO0lBQ3RELHNFQUEwRCxDQUFBO0lBRTFELG9EQUF3QyxDQUFBO0lBQ3hDLGdFQUFvRCxDQUFBO0lBQ3BELG9FQUF3RCxDQUFBO0lBRXhELDREQUFnRCxDQUFBO0lBQ2hELDRFQUFnRSxDQUFBO0lBQ2hFLHdFQUE0RCxDQUFBO0lBRTVELDBEQUE4QyxDQUFBO0lBQzlDLDBFQUE4RCxDQUFBO0lBQzlELHNFQUEwRCxDQUFBO0lBRTFELDREQUFnRCxDQUFBO0lBQ2hELDRFQUFnRSxDQUFBO0lBQ2hFLHdFQUE0RCxDQUFBO0lBRTVELDBEQUE4QyxDQUFBO0lBQzlDLDBFQUE4RCxDQUFBO0lBQzlELHNFQUEwRCxDQUFBO0lBRTFELDBDQUEwQztJQUMxQyw0REFBZ0QsQ0FBQTtJQUNoRCw0RUFBZ0UsQ0FBQTtJQUNoRSx3RUFBNEQsQ0FBQTtJQUU1RCwwQ0FBMEM7SUFDMUMsMERBQThDLENBQUE7SUFDOUMsMEVBQThELENBQUE7SUFDOUQsc0VBQTBELENBQUE7SUFFMUQsbUJBQW1CO0lBQ25CLDBDQUE4QixDQUFBO0lBQzlCLDRDQUFnQyxDQUFBO0lBQ2hDLDBDQUE4QixDQUFBO0lBQzlCLGdEQUFvQyxDQUFBO0lBQ3BDLGtEQUFzQyxDQUFBO0lBQ3RDLGdEQUFvQyxDQUFBO0lBQ3BDLGtEQUFzQyxDQUFBO0lBQ3RDLGdEQUFvQyxDQUFBO0lBQ3BDLGtEQUFzQyxDQUFBO0lBQ3RDLGdEQUFvQyxDQUFBO0lBRXBDLGdEQUFvQyxDQUFBO0lBQ3BDLGtEQUFzQyxDQUFBO0lBQ3RDLGdEQUFvQyxDQUFBO0lBQ3BDLDRDQUFnQyxDQUFBO0lBQ2hDLDhDQUFrQyxDQUFBO0lBQ2xDLDRDQUFnQyxDQUFBO0lBRWhDLDREQUFnRCxDQUFBO0lBQ2hELHdEQUE0QyxDQUFBO0lBQzVDLGdEQUFvQyxDQUFBO0lBQ3BDLGdEQUFvQyxDQUFBO0lBQ3BDLGtEQUFzQyxDQUFBO0FBQ3hDLENBQUMsRUEvRVcsUUFBUSxLQUFSLFFBQVEsUUErRW5CO0FBRUQsaUVBQWlFO0FBQ2pFLE1BQU0sQ0FBQyxNQUFNLFVBQVUsR0FBRyxVQUFVLENBQUM7QUFFckMsNERBQTREO0FBQzVELE1BQU0sQ0FBQyxNQUFNLFFBQVEsR0FBRyxRQUFRLENBQUM7QUFFakMsa0VBQWtFO0FBQ2xFLE1BQU0sVUFBVSxXQUFXLENBQUMsRUFBWTtJQUN0QyxPQUFpQixDQUFDLEVBQUUsR0FBRyxRQUFRLENBQUMsQ0FBQztBQUNuQyxDQUFDO0FBRUQsb0VBQW9FO0FBQ3BFLE1BQU0sVUFBVSxhQUFhLENBQUMsRUFBWTtJQUN4QyxPQUFpQixDQUFDLEVBQUUsR0FBRyxVQUFVLENBQUMsQ0FBQztBQUNyQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gRW5zdXJlIHRoYXQgdGhlc2Ugc3VmZml4IHZhbHVlcyBhbmQgdGhlIEVudGl0eU9wIHN1ZmZpeGVzIG1hdGNoXG4vLyBDYW5ub3QgZG8gdGhhdCBwcm9ncmFtbWF0aWNhbGx5LlxuXG4vKiogR2VuZXJhbCBwdXJwb3NlIGVudGl0eSBhY3Rpb24gb3BlcmF0aW9ucywgZ29vZCBmb3IgYW55IGVudGl0eSB0eXBlICovXG5leHBvcnQgZW51bSBFbnRpdHlPcCB7XG4gIC8vIFBlcnNpc3RhbmNlIG9wZXJhdGlvbnNcbiAgQ0FOQ0VMX1BFUlNJU1QgPSAnQG5ncngvZGF0YS9jYW5jZWwtcGVyc2lzdCcsXG4gIENBTkNFTEVEX1BFUlNJU1QgPSAnQG5ncngvZGF0YS9jYW5jZWxlZC1wZXJzaXN0JyxcblxuICBRVUVSWV9BTEwgPSAnQG5ncngvZGF0YS9xdWVyeS1hbGwnLFxuICBRVUVSWV9BTExfU1VDQ0VTUyA9ICdAbmdyeC9kYXRhL3F1ZXJ5LWFsbC9zdWNjZXNzJyxcbiAgUVVFUllfQUxMX0VSUk9SID0gJ0BuZ3J4L2RhdGEvcXVlcnktYWxsL2Vycm9yJyxcblxuICBRVUVSWV9MT0FEID0gJ0BuZ3J4L2RhdGEvcXVlcnktbG9hZCcsXG4gIFFVRVJZX0xPQURfU1VDQ0VTUyA9ICdAbmdyeC9kYXRhL3F1ZXJ5LWxvYWQvc3VjY2VzcycsXG4gIFFVRVJZX0xPQURfRVJST1IgPSAnQG5ncngvZGF0YS9xdWVyeS1sb2FkL2Vycm9yJyxcblxuICBRVUVSWV9NQU5ZID0gJ0BuZ3J4L2RhdGEvcXVlcnktbWFueScsXG4gIFFVRVJZX01BTllfU1VDQ0VTUyA9ICdAbmdyeC9kYXRhL3F1ZXJ5LW1hbnkvc3VjY2VzcycsXG4gIFFVRVJZX01BTllfRVJST1IgPSAnQG5ncngvZGF0YS9xdWVyeS1tYW55L2Vycm9yJyxcblxuICBRVUVSWV9CWV9LRVkgPSAnQG5ncngvZGF0YS9xdWVyeS1ieS1rZXknLFxuICBRVUVSWV9CWV9LRVlfU1VDQ0VTUyA9ICdAbmdyeC9kYXRhL3F1ZXJ5LWJ5LWtleS9zdWNjZXNzJyxcbiAgUVVFUllfQllfS0VZX0VSUk9SID0gJ0BuZ3J4L2RhdGEvcXVlcnktYnkta2V5L2Vycm9yJyxcblxuICBTQVZFX0FERF9NQU5ZID0gJ0BuZ3J4L2RhdGEvc2F2ZS9hZGQtbWFueScsXG4gIFNBVkVfQUREX01BTllfRVJST1IgPSAnQG5ncngvZGF0YS9zYXZlL2FkZC1tYW55L2Vycm9yJyxcbiAgU0FWRV9BRERfTUFOWV9TVUNDRVNTID0gJ0BuZ3J4L2RhdGEvc2F2ZS9hZGQtbWFueS9zdWNjZXNzJyxcblxuICBTQVZFX0FERF9PTkUgPSAnQG5ncngvZGF0YS9zYXZlL2FkZC1vbmUnLFxuICBTQVZFX0FERF9PTkVfRVJST1IgPSAnQG5ncngvZGF0YS9zYXZlL2FkZC1vbmUvZXJyb3InLFxuICBTQVZFX0FERF9PTkVfU1VDQ0VTUyA9ICdAbmdyeC9kYXRhL3NhdmUvYWRkLW9uZS9zdWNjZXNzJyxcblxuICBTQVZFX0RFTEVURV9NQU5ZID0gJ0BuZ3J4L2RhdGEvc2F2ZS9kZWxldGUtbWFueScsXG4gIFNBVkVfREVMRVRFX01BTllfU1VDQ0VTUyA9ICdAbmdyeC9kYXRhL3NhdmUvZGVsZXRlLW1hbnkvc3VjY2VzcycsXG4gIFNBVkVfREVMRVRFX01BTllfRVJST1IgPSAnQG5ncngvZGF0YS9zYXZlL2RlbGV0ZS1tYW55L2Vycm9yJyxcblxuICBTQVZFX0RFTEVURV9PTkUgPSAnQG5ncngvZGF0YS9zYXZlL2RlbGV0ZS1vbmUnLFxuICBTQVZFX0RFTEVURV9PTkVfU1VDQ0VTUyA9ICdAbmdyeC9kYXRhL3NhdmUvZGVsZXRlLW9uZS9zdWNjZXNzJyxcbiAgU0FWRV9ERUxFVEVfT05FX0VSUk9SID0gJ0BuZ3J4L2RhdGEvc2F2ZS9kZWxldGUtb25lL2Vycm9yJyxcblxuICBTQVZFX1VQREFURV9NQU5ZID0gJ0BuZ3J4L2RhdGEvc2F2ZS91cGRhdGUtbWFueScsXG4gIFNBVkVfVVBEQVRFX01BTllfU1VDQ0VTUyA9ICdAbmdyeC9kYXRhL3NhdmUvdXBkYXRlLW1hbnkvc3VjY2VzcycsXG4gIFNBVkVfVVBEQVRFX01BTllfRVJST1IgPSAnQG5ncngvZGF0YS9zYXZlL3VwZGF0ZS1tYW55L2Vycm9yJyxcblxuICBTQVZFX1VQREFURV9PTkUgPSAnQG5ncngvZGF0YS9zYXZlL3VwZGF0ZS1vbmUnLFxuICBTQVZFX1VQREFURV9PTkVfU1VDQ0VTUyA9ICdAbmdyeC9kYXRhL3NhdmUvdXBkYXRlLW9uZS9zdWNjZXNzJyxcbiAgU0FWRV9VUERBVEVfT05FX0VSUk9SID0gJ0BuZ3J4L2RhdGEvc2F2ZS91cGRhdGUtb25lL2Vycm9yJyxcblxuICAvLyBVc2Ugb25seSBpZiB0aGUgc2VydmVyIHN1cHBvcnRzIHVwc2VydDtcbiAgU0FWRV9VUFNFUlRfTUFOWSA9ICdAbmdyeC9kYXRhL3NhdmUvdXBzZXJ0LW1hbnknLFxuICBTQVZFX1VQU0VSVF9NQU5ZX1NVQ0NFU1MgPSAnQG5ncngvZGF0YS9zYXZlL3Vwc2VydC1tYW55L3N1Y2Nlc3MnLFxuICBTQVZFX1VQU0VSVF9NQU5ZX0VSUk9SID0gJ0BuZ3J4L2RhdGEvc2F2ZS91cHNlcnQtbWFueS9lcnJvcicsXG5cbiAgLy8gVXNlIG9ubHkgaWYgdGhlIHNlcnZlciBzdXBwb3J0cyB1cHNlcnQ7XG4gIFNBVkVfVVBTRVJUX09ORSA9ICdAbmdyeC9kYXRhL3NhdmUvdXBzZXJ0LW9uZScsXG4gIFNBVkVfVVBTRVJUX09ORV9TVUNDRVNTID0gJ0BuZ3J4L2RhdGEvc2F2ZS91cHNlcnQtb25lL3N1Y2Nlc3MnLFxuICBTQVZFX1VQU0VSVF9PTkVfRVJST1IgPSAnQG5ncngvZGF0YS9zYXZlL3Vwc2VydC1vbmUvZXJyb3InLFxuXG4gIC8vIENhY2hlIG9wZXJhdGlvbnNcbiAgQUREX0FMTCA9ICdAbmdyeC9kYXRhL2FkZC1hbGwnLFxuICBBRERfTUFOWSA9ICdAbmdyeC9kYXRhL2FkZC1tYW55JyxcbiAgQUREX09ORSA9ICdAbmdyeC9kYXRhL2FkZC1vbmUnLFxuICBSRU1PVkVfQUxMID0gJ0BuZ3J4L2RhdGEvcmVtb3ZlLWFsbCcsXG4gIFJFTU9WRV9NQU5ZID0gJ0BuZ3J4L2RhdGEvcmVtb3ZlLW1hbnknLFxuICBSRU1PVkVfT05FID0gJ0BuZ3J4L2RhdGEvcmVtb3ZlLW9uZScsXG4gIFVQREFURV9NQU5ZID0gJ0BuZ3J4L2RhdGEvdXBkYXRlLW1hbnknLFxuICBVUERBVEVfT05FID0gJ0BuZ3J4L2RhdGEvdXBkYXRlLW9uZScsXG4gIFVQU0VSVF9NQU5ZID0gJ0BuZ3J4L2RhdGEvdXBzZXJ0LW1hbnknLFxuICBVUFNFUlRfT05FID0gJ0BuZ3J4L2RhdGEvdXBzZXJ0LW9uZScsXG5cbiAgQ09NTUlUX0FMTCA9ICdAbmdyeC9kYXRhL2NvbW1pdC1hbGwnLFxuICBDT01NSVRfTUFOWSA9ICdAbmdyeC9kYXRhL2NvbW1pdC1tYW55JyxcbiAgQ09NTUlUX09ORSA9ICdAbmdyeC9kYXRhL2NvbW1pdC1vbmUnLFxuICBVTkRPX0FMTCA9ICdAbmdyeC9kYXRhL3VuZG8tYWxsJyxcbiAgVU5ET19NQU5ZID0gJ0BuZ3J4L2RhdGEvdW5kby1tYW55JyxcbiAgVU5ET19PTkUgPSAnQG5ncngvZGF0YS91bmRvLW9uZScsXG5cbiAgU0VUX0NIQU5HRV9TVEFURSA9ICdAbmdyeC9kYXRhL3NldC1jaGFuZ2Utc3RhdGUnLFxuICBTRVRfQ09MTEVDVElPTiA9ICdAbmdyeC9kYXRhL3NldC1jb2xsZWN0aW9uJyxcbiAgU0VUX0ZJTFRFUiA9ICdAbmdyeC9kYXRhL3NldC1maWx0ZXInLFxuICBTRVRfTE9BREVEID0gJ0BuZ3J4L2RhdGEvc2V0LWxvYWRlZCcsXG4gIFNFVF9MT0FESU5HID0gJ0BuZ3J4L2RhdGEvc2V0LWxvYWRpbmcnLFxufVxuXG4vKiogXCJTdWNjZXNzXCIgc3VmZml4IGFwcGVuZGVkIHRvIEVudGl0eU9wcyB0aGF0IGFyZSBzdWNjZXNzZnVsLiovXG5leHBvcnQgY29uc3QgT1BfU1VDQ0VTUyA9ICcvc3VjY2Vzcyc7XG5cbi8qKiBcIkVycm9yXCIgc3VmZml4IGFwcGVuZGVkIHRvIEVudGl0eU9wcyB0aGF0IGhhdmUgZmFpbGVkLiovXG5leHBvcnQgY29uc3QgT1BfRVJST1IgPSAnL2Vycm9yJztcblxuLyoqIE1ha2UgdGhlIGVycm9yIEVudGl0eU9wIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGdpdmVuIEVudGl0eU9wICovXG5leHBvcnQgZnVuY3Rpb24gbWFrZUVycm9yT3Aob3A6IEVudGl0eU9wKTogRW50aXR5T3Age1xuICByZXR1cm4gPEVudGl0eU9wPihvcCArIE9QX0VSUk9SKTtcbn1cblxuLyoqIE1ha2UgdGhlIHN1Y2Nlc3MgRW50aXR5T3AgY29ycmVzcG9uZGluZyB0byB0aGUgZ2l2ZW4gRW50aXR5T3AgKi9cbmV4cG9ydCBmdW5jdGlvbiBtYWtlU3VjY2Vzc09wKG9wOiBFbnRpdHlPcCk6IEVudGl0eU9wIHtcbiAgcmV0dXJuIDxFbnRpdHlPcD4ob3AgKyBPUF9TVUNDRVNTKTtcbn1cbiJdfQ==
@@ -1,22 +0,0 @@
1
- /** How to merge an entity, after query or save, when the corresponding entity in the collection has unsaved changes. */
2
- export var MergeStrategy;
3
- (function (MergeStrategy) {
4
- /**
5
- * Update the collection entities and ignore all change tracking for this operation.
6
- * Each entity's `changeState` is untouched.
7
- */
8
- MergeStrategy[MergeStrategy["IgnoreChanges"] = 0] = "IgnoreChanges";
9
- /**
10
- * Updates current values for unchanged entities.
11
- * For each changed entity it preserves the current value and overwrites the `originalValue` with the merge entity.
12
- * This is the query-success default.
13
- */
14
- MergeStrategy[MergeStrategy["PreserveChanges"] = 1] = "PreserveChanges";
15
- /**
16
- * Replace the current collection entities.
17
- * For each merged entity it discards the `changeState` and sets the `changeType` to "unchanged".
18
- * This is the save-success default.
19
- */
20
- MergeStrategy[MergeStrategy["OverwriteChanges"] = 2] = "OverwriteChanges";
21
- })(MergeStrategy || (MergeStrategy = {}));
22
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVyZ2Utc3RyYXRlZ3kuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9tb2R1bGVzL2RhdGEvc3JjL2FjdGlvbnMvbWVyZ2Utc3RyYXRlZ3kudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsd0hBQXdIO0FBQ3hILE1BQU0sQ0FBTixJQUFZLGFBa0JYO0FBbEJELFdBQVksYUFBYTtJQUN2Qjs7O09BR0c7SUFDSCxtRUFBYSxDQUFBO0lBQ2I7Ozs7T0FJRztJQUNILHVFQUFlLENBQUE7SUFDZjs7OztPQUlHO0lBQ0gseUVBQWdCLENBQUE7QUFDbEIsQ0FBQyxFQWxCVyxhQUFhLEtBQWIsYUFBYSxRQWtCeEIiLCJzb3VyY2VzQ29udGVudCI6WyIvKiogSG93IHRvIG1lcmdlIGFuIGVudGl0eSwgYWZ0ZXIgcXVlcnkgb3Igc2F2ZSwgd2hlbiB0aGUgY29ycmVzcG9uZGluZyBlbnRpdHkgaW4gdGhlIGNvbGxlY3Rpb24gaGFzIHVuc2F2ZWQgY2hhbmdlcy4gKi9cbmV4cG9ydCBlbnVtIE1lcmdlU3RyYXRlZ3kge1xuICAvKipcbiAgICogVXBkYXRlIHRoZSBjb2xsZWN0aW9uIGVudGl0aWVzIGFuZCBpZ25vcmUgYWxsIGNoYW5nZSB0cmFja2luZyBmb3IgdGhpcyBvcGVyYXRpb24uXG4gICAqIEVhY2ggZW50aXR5J3MgYGNoYW5nZVN0YXRlYCBpcyB1bnRvdWNoZWQuXG4gICAqL1xuICBJZ25vcmVDaGFuZ2VzLFxuICAvKipcbiAgICogVXBkYXRlcyBjdXJyZW50IHZhbHVlcyBmb3IgdW5jaGFuZ2VkIGVudGl0aWVzLlxuICAgKiBGb3IgZWFjaCBjaGFuZ2VkIGVudGl0eSBpdCBwcmVzZXJ2ZXMgdGhlIGN1cnJlbnQgdmFsdWUgYW5kIG92ZXJ3cml0ZXMgdGhlIGBvcmlnaW5hbFZhbHVlYCB3aXRoIHRoZSBtZXJnZSBlbnRpdHkuXG4gICAqIFRoaXMgaXMgdGhlIHF1ZXJ5LXN1Y2Nlc3MgZGVmYXVsdC5cbiAgICovXG4gIFByZXNlcnZlQ2hhbmdlcyxcbiAgLyoqXG4gICAqIFJlcGxhY2UgdGhlIGN1cnJlbnQgY29sbGVjdGlvbiBlbnRpdGllcy5cbiAgICogRm9yIGVhY2ggbWVyZ2VkIGVudGl0eSBpdCBkaXNjYXJkcyB0aGUgYGNoYW5nZVN0YXRlYCBhbmQgc2V0cyB0aGUgYGNoYW5nZVR5cGVgIHRvIFwidW5jaGFuZ2VkXCIuXG4gICAqIFRoaXMgaXMgdGhlIHNhdmUtc3VjY2VzcyBkZWZhdWx0LlxuICAgKi9cbiAgT3ZlcndyaXRlQ2hhbmdlcyxcbn1cbiJdfQ==
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXBkYXRlLXJlc3BvbnNlLWRhdGEuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9tb2R1bGVzL2RhdGEvc3JjL2FjdGlvbnMvdXBkYXRlLXJlc3BvbnNlLWRhdGEudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogRGF0YSByZXR1cm5lZCBpbiBhbiBFbnRpdHlBY3Rpb24gZnJvbSB0aGUgRW50aXR5RWZmZWN0cyBmb3IgU0FWRV9VUERBVEVfT05FX1NVQ0NFU1MuXG4gKiBFZmZlY3RpdmVseSBleHRlbmRzIFVwZGF0ZTxUPiB3aXRoIGEgJ2NoYW5nZWQnIGZsYWcuXG4gKiBUaGUgaXMgdHJ1ZSBpZiB0aGUgc2VydmVyIHNlbnQgYmFjayBjaGFuZ2VzIHRvIHRoZSBlbnRpdHkgZGF0YSBhZnRlciB1cGRhdGUuXG4gKiBTdWNoIGNoYW5nZXMgbXVzdCBiZSBpbiB0aGUgZW50aXR5IGRhdGEgaW4gY2hhbmdlcyBwcm9wZXJ0eS5cbiAqIERlZmF1bHQgaXMgZmFsc2UgKHNlcnZlciBkaWQgbm90IHJldHVybiBlbnRpdHkgZGF0YTsgYXNzdW1lIGl0IGNoYW5nZWQgbm90aGluZykuXG4gKiBTZWUgRW50aXR5RWZmZWN0cy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBVcGRhdGVSZXNwb25zZURhdGE8VD4ge1xuICAvKiogT3JpZ2luYWwga2V5IChpZCkgb2YgdGhlIGVudGl0eSAqL1xuICBpZDogbnVtYmVyIHwgc3RyaW5nO1xuICAvKiogRW50aXR5IHVwZGF0ZSBkYXRhLiBTaG91bGQgaW5jbHVkZSB0aGUga2V5IChvcmlnaW5hbCBvciBjaGFuZ2VkKSAqL1xuICBjaGFuZ2VzOiBQYXJ0aWFsPFQ+O1xuICAvKipcbiAgICogV2hldGhlciB0aGUgc2VydmVyIG1hZGUgYWRkaXRpb25hbCBjaGFuZ2VzIGFmdGVyIHByb2Nlc3NpbmcgdGhlIHVwZGF0ZS5cbiAgICogU3VjaCBhZGRpdGlvbmFsIGNoYW5nZXMgc2hvdWxkIGJlIGluIHRoZSAnY2hhbmdlcycgb2JqZWN0LlxuICAgKiBEZWZhdWx0IGlzIGZhbHNlXG4gICAqL1xuICBjaGFuZ2VkPzogYm9vbGVhbjtcbn1cbiJdfQ==
@@ -1,36 +0,0 @@
1
- /**
2
- * Error from a DataService
3
- * The source error either comes from a failed HTTP response or was thrown within the service.
4
- * @param error the HttpErrorResponse or the error thrown by the service
5
- * @param requestData the HTTP request information such as the method and the url.
6
- */
7
- export class DataServiceError extends Error {
8
- constructor(error, requestData) {
9
- super(typeof error === 'string' ? error : extractMessage(error) ?? undefined);
10
- this.error = error;
11
- this.requestData = requestData;
12
- this.name = this.constructor.name;
13
- }
14
- }
15
- // Many ways the error can be shaped. These are the ways we recognize.
16
- function extractMessage(sourceError) {
17
- const { error, body, message } = sourceError;
18
- let errMessage = null;
19
- if (error) {
20
- // prefer HttpErrorResponse.error to its message property
21
- errMessage = typeof error === 'string' ? error : error.message;
22
- }
23
- else if (message) {
24
- errMessage = message;
25
- }
26
- else if (body) {
27
- // try the body if no error or message property
28
- errMessage = typeof body === 'string' ? body : body.error;
29
- }
30
- return typeof errMessage === 'string'
31
- ? errMessage
32
- : errMessage
33
- ? JSON.stringify(errMessage)
34
- : null;
35
- }
36
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YS1zZXJ2aWNlLWVycm9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbW9kdWxlcy9kYXRhL3NyYy9kYXRhc2VydmljZXMvZGF0YS1zZXJ2aWNlLWVycm9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUdBOzs7OztHQUtHO0FBQ0gsTUFBTSxPQUFPLGdCQUFpQixTQUFRLEtBQUs7SUFDekMsWUFBbUIsS0FBVSxFQUFTLFdBQStCO1FBQ25FLEtBQUssQ0FDSCxPQUFPLEtBQUssS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsY0FBYyxDQUFDLEtBQUssQ0FBQyxJQUFJLFNBQVMsQ0FDdkUsQ0FBQztRQUhlLFVBQUssR0FBTCxLQUFLLENBQUs7UUFBUyxnQkFBVyxHQUFYLFdBQVcsQ0FBb0I7UUFJbkUsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQztJQUNwQyxDQUFDO0NBQ0Y7QUFFRCxzRUFBc0U7QUFDdEUsU0FBUyxjQUFjLENBQUMsV0FBZ0I7SUFDdEMsTUFBTSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLEdBQUcsV0FBVyxDQUFDO0lBQzdDLElBQUksVUFBVSxHQUFrQixJQUFJLENBQUM7SUFDckMsSUFBSSxLQUFLLEVBQUUsQ0FBQztRQUNWLHlEQUF5RDtRQUN6RCxVQUFVLEdBQUcsT0FBTyxLQUFLLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUM7SUFDakUsQ0FBQztTQUFNLElBQUksT0FBTyxFQUFFLENBQUM7UUFDbkIsVUFBVSxHQUFHLE9BQU8sQ0FBQztJQUN2QixDQUFDO1NBQU0sSUFBSSxJQUFJLEVBQUUsQ0FBQztRQUNoQiwrQ0FBK0M7UUFDL0MsVUFBVSxHQUFHLE9BQU8sSUFBSSxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDO0lBQzVELENBQUM7SUFFRCxPQUFPLE9BQU8sVUFBVSxLQUFLLFFBQVE7UUFDbkMsQ0FBQyxDQUFDLFVBQVU7UUFDWixDQUFDLENBQUMsVUFBVTtZQUNaLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQztZQUM1QixDQUFDLENBQUMsSUFBSSxDQUFDO0FBQ1gsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEVudGl0eUFjdGlvbiB9IGZyb20gJy4uL2FjdGlvbnMvZW50aXR5LWFjdGlvbic7XG5pbXBvcnQgeyBSZXF1ZXN0RGF0YSB9IGZyb20gJy4vaW50ZXJmYWNlcyc7XG5cbi8qKlxuICogRXJyb3IgZnJvbSBhIERhdGFTZXJ2aWNlXG4gKiBUaGUgc291cmNlIGVycm9yIGVpdGhlciBjb21lcyBmcm9tIGEgZmFpbGVkIEhUVFAgcmVzcG9uc2Ugb3Igd2FzIHRocm93biB3aXRoaW4gdGhlIHNlcnZpY2UuXG4gKiBAcGFyYW0gZXJyb3IgdGhlIEh0dHBFcnJvclJlc3BvbnNlIG9yIHRoZSBlcnJvciB0aHJvd24gYnkgdGhlIHNlcnZpY2VcbiAqIEBwYXJhbSByZXF1ZXN0RGF0YSB0aGUgSFRUUCByZXF1ZXN0IGluZm9ybWF0aW9uIHN1Y2ggYXMgdGhlIG1ldGhvZCBhbmQgdGhlIHVybC5cbiAqL1xuZXhwb3J0IGNsYXNzIERhdGFTZXJ2aWNlRXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gIGNvbnN0cnVjdG9yKHB1YmxpYyBlcnJvcjogYW55LCBwdWJsaWMgcmVxdWVzdERhdGE6IFJlcXVlc3REYXRhIHwgbnVsbCkge1xuICAgIHN1cGVyKFxuICAgICAgdHlwZW9mIGVycm9yID09PSAnc3RyaW5nJyA/IGVycm9yIDogZXh0cmFjdE1lc3NhZ2UoZXJyb3IpID8/IHVuZGVmaW5lZFxuICAgICk7XG4gICAgdGhpcy5uYW1lID0gdGhpcy5jb25zdHJ1Y3Rvci5uYW1lO1xuICB9XG59XG5cbi8vIE1hbnkgd2F5cyB0aGUgZXJyb3IgY2FuIGJlIHNoYXBlZC4gVGhlc2UgYXJlIHRoZSB3YXlzIHdlIHJlY29nbml6ZS5cbmZ1bmN0aW9uIGV4dHJhY3RNZXNzYWdlKHNvdXJjZUVycm9yOiBhbnkpOiBzdHJpbmcgfCBudWxsIHtcbiAgY29uc3QgeyBlcnJvciwgYm9keSwgbWVzc2FnZSB9ID0gc291cmNlRXJyb3I7XG4gIGxldCBlcnJNZXNzYWdlOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcbiAgaWYgKGVycm9yKSB7XG4gICAgLy8gcHJlZmVyIEh0dHBFcnJvclJlc3BvbnNlLmVycm9yIHRvIGl0cyBtZXNzYWdlIHByb3BlcnR5XG4gICAgZXJyTWVzc2FnZSA9IHR5cGVvZiBlcnJvciA9PT0gJ3N0cmluZycgPyBlcnJvciA6IGVycm9yLm1lc3NhZ2U7XG4gIH0gZWxzZSBpZiAobWVzc2FnZSkge1xuICAgIGVyck1lc3NhZ2UgPSBtZXNzYWdlO1xuICB9IGVsc2UgaWYgKGJvZHkpIHtcbiAgICAvLyB0cnkgdGhlIGJvZHkgaWYgbm8gZXJyb3Igb3IgbWVzc2FnZSBwcm9wZXJ0eVxuICAgIGVyck1lc3NhZ2UgPSB0eXBlb2YgYm9keSA9PT0gJ3N0cmluZycgPyBib2R5IDogYm9keS5lcnJvcjtcbiAgfVxuXG4gIHJldHVybiB0eXBlb2YgZXJyTWVzc2FnZSA9PT0gJ3N0cmluZydcbiAgICA/IGVyck1lc3NhZ2VcbiAgICA6IGVyck1lc3NhZ2VcbiAgICA/IEpTT04uc3RyaW5naWZ5KGVyck1lc3NhZ2UpXG4gICAgOiBudWxsO1xufVxuXG4vKiogUGF5bG9hZCBmb3IgYW4gRW50aXR5QWN0aW9uIGRhdGEgc2VydmljZSBlcnJvciBzdWNoIGFzIFFVRVJZX0FMTF9FUlJPUiAqL1xuZXhwb3J0IGludGVyZmFjZSBFbnRpdHlBY3Rpb25EYXRhU2VydmljZUVycm9yIHtcbiAgZXJyb3I6IERhdGFTZXJ2aWNlRXJyb3I7XG4gIG9yaWdpbmFsQWN0aW9uOiBFbnRpdHlBY3Rpb247XG59XG4iXX0=
@@ -1,7 +0,0 @@
1
- /**
2
- * Optional configuration settings for an entity collection data service
3
- * such as the `DefaultDataService<T>`.
4
- */
5
- export class DefaultDataServiceConfig {
6
- }
7
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVmYXVsdC1kYXRhLXNlcnZpY2UtY29uZmlnLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbW9kdWxlcy9kYXRhL3NyYy9kYXRhc2VydmljZXMvZGVmYXVsdC1kYXRhLXNlcnZpY2UtY29uZmlnLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBOzs7R0FHRztBQUNILE1BQU0sT0FBZ0Isd0JBQXdCO0NBcUI3QyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEVudGl0eUh0dHBSZXNvdXJjZVVybHMgfSBmcm9tICcuL2h0dHAtdXJsLWdlbmVyYXRvcic7XG5cbi8qKlxuICogT3B0aW9uYWwgY29uZmlndXJhdGlvbiBzZXR0aW5ncyBmb3IgYW4gZW50aXR5IGNvbGxlY3Rpb24gZGF0YSBzZXJ2aWNlXG4gKiBzdWNoIGFzIHRoZSBgRGVmYXVsdERhdGFTZXJ2aWNlPFQ+YC5cbiAqL1xuZXhwb3J0IGFic3RyYWN0IGNsYXNzIERlZmF1bHREYXRhU2VydmljZUNvbmZpZyB7XG4gIC8qKlxuICAgKiByb290IHBhdGggb2YgdGhlIHdlYiBhcGkuICBtYXkgYWxzbyBpbmNsdWRlIHByb3RvY29sLCBkb21haW4sIGFuZCBwb3J0XG4gICAqIGZvciByZW1vdGUgYXBpLCBlLmcuOiBgJ2h0dHBzOi8vYXBpLWRvbWFpbi5jb206ODAwMC9hcGkvdjEnYCAoZGVmYXVsdDogJ2FwaScpXG4gICAqL1xuICByb290Pzogc3RyaW5nO1xuICAvKipcbiAgICogS25vd24gZW50aXR5IEh0dHBSZXNvdXJjZVVybHMuXG4gICAqIEh0dHBVcmxHZW5lcmF0b3Igd2lsbCBjcmVhdGUgdGhlc2UgVVJMcyBmb3IgZW50aXR5IHR5cGVzIG5vdCBsaXN0ZWQgaGVyZS5cbiAgICovXG4gIGVudGl0eUh0dHBSZXNvdXJjZVVybHM/OiBFbnRpdHlIdHRwUmVzb3VyY2VVcmxzO1xuICAvKiogSXMgYSBERUxFVEUgNDA0IHJlYWxseSBPSz8gKGRlZmF1bHQ6IHRydWUpICovXG4gIGRlbGV0ZTQwNE9LPzogYm9vbGVhbjtcbiAgLyoqIFNpbXVsYXRlIEdFVCBsYXRlbmN5IGluIGEgZGVtbyAoZGVmYXVsdDogMCkgKi9cbiAgZ2V0RGVsYXk/OiBudW1iZXI7XG4gIC8qKiBTaW11bGF0ZSBzYXZlIG1ldGhvZCAoUFVUL1BPU1QvREVMRVRFKSBsYXRlbmN5IGluIGEgZGVtbyAoZGVmYXVsdDogMCkgKi9cbiAgc2F2ZURlbGF5PzogbnVtYmVyO1xuICAvKiogcmVxdWVzdCB0aW1lb3V0IGluIE1TIChkZWZhdWx0OiAwKSovXG4gIHRpbWVvdXQ/OiBudW1iZXI7IC8vXG4gIC8qKiB0byBrZWVwIGxlYWRpbmcgJiB0cmFpbGluZyBzbGFzaGVzIG9yIG5vdDsgZmFsc2UgYnkgZGVmYXVsdCAqL1xuICB0cmFpbGluZ1NsYXNoRW5kcG9pbnRzPzogYm9vbGVhbjtcbn1cbiJdfQ==
@@ -1,209 +0,0 @@
1
- import { Injectable, isDevMode, Optional } from '@angular/core';
2
- import { HttpHeaders, HttpParams, } from '@angular/common/http';
3
- import { of, throwError } from 'rxjs';
4
- import { catchError, delay, map, timeout } from 'rxjs/operators';
5
- import { DataServiceError } from './data-service-error';
6
- import * as i0 from "@angular/core";
7
- import * as i1 from "@angular/common/http";
8
- import * as i2 from "./http-url-generator";
9
- import * as i3 from "./default-data-service-config";
10
- /**
11
- * A basic, generic entity data service
12
- * suitable for persistence of most entities.
13
- * Assumes a common REST-y web API
14
- */
15
- export class DefaultDataService {
16
- get name() {
17
- return this._name;
18
- }
19
- constructor(entityName, http, httpUrlGenerator, config) {
20
- this.http = http;
21
- this.httpUrlGenerator = httpUrlGenerator;
22
- this.getDelay = 0;
23
- this.saveDelay = 0;
24
- this.timeout = 0;
25
- this.trailingSlashEndpoints = false;
26
- this._name = `${entityName} DefaultDataService`;
27
- this.entityName = entityName;
28
- const { root = 'api', delete404OK = true, getDelay = 0, saveDelay = 0, timeout: to = 0, trailingSlashEndpoints = false, } = config || {};
29
- this.delete404OK = delete404OK;
30
- this.entityUrl = httpUrlGenerator.entityResource(entityName, root, trailingSlashEndpoints);
31
- this.entitiesUrl = httpUrlGenerator.collectionResource(entityName, root);
32
- this.getDelay = getDelay;
33
- this.saveDelay = saveDelay;
34
- this.timeout = to;
35
- }
36
- add(entity, options) {
37
- const entityOrError = entity || new Error(`No "${this.entityName}" entity to add`);
38
- return this.execute('POST', this.entityUrl, entityOrError, null, options);
39
- }
40
- delete(key, options) {
41
- let err;
42
- if (key == null) {
43
- err = new Error(`No "${this.entityName}" key to delete`);
44
- }
45
- return this.execute('DELETE', this.entityUrl + key, err, null, options).pipe(
46
- // forward the id of deleted entity as the result of the HTTP DELETE
47
- map((result) => key));
48
- }
49
- getAll(options) {
50
- return this.execute('GET', this.entitiesUrl, null, null, options);
51
- }
52
- getById(key, options) {
53
- let err;
54
- if (key == null) {
55
- err = new Error(`No "${this.entityName}" key to get`);
56
- }
57
- return this.execute('GET', this.entityUrl + key, err, null, options);
58
- }
59
- getWithQuery(queryParams, options) {
60
- const qParams = typeof queryParams === 'string'
61
- ? { fromString: queryParams }
62
- : { fromObject: queryParams };
63
- const params = new HttpParams(qParams);
64
- return this.execute('GET', this.entitiesUrl, undefined, { params }, options);
65
- }
66
- update(update, options) {
67
- const id = update && update.id;
68
- const updateOrError = id == null
69
- ? new Error(`No "${this.entityName}" update data or id`)
70
- : update.changes;
71
- return this.execute('PUT', this.entityUrl + id, updateOrError, null, options);
72
- }
73
- // Important! Only call if the backend service supports upserts as a POST to the target URL
74
- upsert(entity, options) {
75
- const entityOrError = entity || new Error(`No "${this.entityName}" entity to upsert`);
76
- return this.execute('POST', this.entityUrl, entityOrError, null, options);
77
- }
78
- execute(method, url, data, // data, error, or undefined/null
79
- options, // options or undefined/null
80
- httpOptions // these override any options passed via options
81
- ) {
82
- let entityActionHttpClientOptions = undefined;
83
- if (httpOptions) {
84
- entityActionHttpClientOptions = {
85
- headers: httpOptions?.httpHeaders
86
- ? new HttpHeaders(httpOptions?.httpHeaders)
87
- : undefined,
88
- params: httpOptions?.httpParams
89
- ? new HttpParams(httpOptions?.httpParams)
90
- : undefined,
91
- };
92
- }
93
- // Now we may have:
94
- // options: containing headers, params, or any other allowed http options already in angular's api
95
- // entityActionHttpClientOptions: headers and params in angular's api
96
- // We therefore need to merge these so that the action ones override the
97
- // existing keys where applicable.
98
- // If any options have been specified, pass them to http client. Note
99
- // the new http options, if specified, will override any options passed
100
- // from the deprecated options parameter
101
- let mergedOptions = undefined;
102
- if (options || entityActionHttpClientOptions) {
103
- if (isDevMode() && options && entityActionHttpClientOptions) {
104
- console.warn('@ngrx/data: options.httpParams will be merged with queryParams when both are are provided to getWithQuery(). In the event of a conflict HttpOptions.httpParams will override queryParams`. The queryParams parameter of getWithQuery() will be removed in next major release.');
105
- }
106
- mergedOptions = {
107
- ...options,
108
- headers: entityActionHttpClientOptions?.headers ?? options?.headers,
109
- params: entityActionHttpClientOptions?.params ?? options?.params,
110
- };
111
- }
112
- const req = {
113
- method,
114
- url,
115
- data,
116
- options: mergedOptions,
117
- };
118
- if (data instanceof Error) {
119
- return this.handleError(req)(data);
120
- }
121
- let result$;
122
- switch (method) {
123
- case 'DELETE': {
124
- result$ = this.http.delete(url, mergedOptions);
125
- if (this.saveDelay) {
126
- result$ = result$.pipe(delay(this.saveDelay));
127
- }
128
- break;
129
- }
130
- case 'GET': {
131
- result$ = this.http.get(url, mergedOptions);
132
- if (this.getDelay) {
133
- result$ = result$.pipe(delay(this.getDelay));
134
- }
135
- break;
136
- }
137
- case 'POST': {
138
- result$ = this.http.post(url, data, mergedOptions);
139
- if (this.saveDelay) {
140
- result$ = result$.pipe(delay(this.saveDelay));
141
- }
142
- break;
143
- }
144
- // N.B.: It must return an Update<T>
145
- case 'PUT': {
146
- result$ = this.http.put(url, data, mergedOptions);
147
- if (this.saveDelay) {
148
- result$ = result$.pipe(delay(this.saveDelay));
149
- }
150
- break;
151
- }
152
- default: {
153
- const error = new Error('Unimplemented HTTP method, ' + method);
154
- result$ = throwError(error);
155
- }
156
- }
157
- if (this.timeout) {
158
- result$ = result$.pipe(timeout(this.timeout + this.saveDelay));
159
- }
160
- return result$.pipe(catchError(this.handleError(req)));
161
- }
162
- handleError(reqData) {
163
- return (err) => {
164
- const ok = this.handleDelete404(err, reqData);
165
- if (ok) {
166
- return ok;
167
- }
168
- const error = new DataServiceError(err, reqData);
169
- return throwError(error);
170
- };
171
- }
172
- handleDelete404(error, reqData) {
173
- if (error.status === 404 &&
174
- reqData.method === 'DELETE' &&
175
- this.delete404OK) {
176
- return of({});
177
- }
178
- return undefined;
179
- }
180
- }
181
- /**
182
- * Create a basic, generic entity data service
183
- * suitable for persistence of most entities.
184
- * Assumes a common REST-y web API
185
- */
186
- export class DefaultDataServiceFactory {
187
- constructor(http, httpUrlGenerator, config) {
188
- this.http = http;
189
- this.httpUrlGenerator = httpUrlGenerator;
190
- this.config = config;
191
- config = config || {};
192
- httpUrlGenerator.registerHttpResourceUrls(config.entityHttpResourceUrls);
193
- }
194
- /**
195
- * Create a default {EntityCollectionDataService} for the given entity type
196
- * @param entityName {string} Name of the entity type for this data service
197
- */
198
- create(entityName) {
199
- return new DefaultDataService(entityName, this.http, this.httpUrlGenerator, this.config);
200
- }
201
- /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.5", ngImport: i0, type: DefaultDataServiceFactory, deps: [{ token: i1.HttpClient }, { token: i2.HttpUrlGenerator }, { token: i3.DefaultDataServiceConfig, optional: true }], target: i0.ɵɵFactoryTarget.Injectable }); }
202
- /** @nocollapse */ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.5", ngImport: i0, type: DefaultDataServiceFactory }); }
203
- }
204
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.5", ngImport: i0, type: DefaultDataServiceFactory, decorators: [{
205
- type: Injectable
206
- }], ctorParameters: () => [{ type: i1.HttpClient }, { type: i2.HttpUrlGenerator }, { type: i3.DefaultDataServiceConfig, decorators: [{
207
- type: Optional
208
- }] }] });
209
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVmYXVsdC1kYXRhLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9tb2R1bGVzL2RhdGEvc3JjL2RhdGFzZXJ2aWNlcy9kZWZhdWx0LWRhdGEuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDaEUsT0FBTyxFQUdMLFdBQVcsRUFDWCxVQUFVLEdBQ1gsTUFBTSxzQkFBc0IsQ0FBQztBQUU5QixPQUFPLEVBQWMsRUFBRSxFQUFFLFVBQVUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNsRCxPQUFPLEVBQUUsVUFBVSxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsT0FBTyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFJakUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7Ozs7O0FBV3hEOzs7O0dBSUc7QUFDSCxNQUFNLE9BQU8sa0JBQWtCO0lBVzdCLElBQUksSUFBSTtRQUNOLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQztJQUNwQixDQUFDO0lBRUQsWUFDRSxVQUFrQixFQUNSLElBQWdCLEVBQ2hCLGdCQUFrQyxFQUM1QyxNQUFpQztRQUZ2QixTQUFJLEdBQUosSUFBSSxDQUFZO1FBQ2hCLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBa0I7UUFacEMsYUFBUSxHQUFHLENBQUMsQ0FBQztRQUNiLGNBQVMsR0FBRyxDQUFDLENBQUM7UUFDZCxZQUFPLEdBQUcsQ0FBQyxDQUFDO1FBQ1osMkJBQXNCLEdBQUcsS0FBSyxDQUFDO1FBWXZDLElBQUksQ0FBQyxLQUFLLEdBQUcsR0FBRyxVQUFVLHFCQUFxQixDQUFDO1FBQ2hELElBQUksQ0FBQyxVQUFVLEdBQUcsVUFBVSxDQUFDO1FBQzdCLE1BQU0sRUFDSixJQUFJLEdBQUcsS0FBSyxFQUNaLFdBQVcsR0FBRyxJQUFJLEVB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Z0IsRUFDaEIsZ0JBQWtDLEVBQ3RCLE1BQWlDO1FBRjdDLFNBQUksR0FBSixJQUFJLENBQVk7UUFDaEIscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFrQjtRQUN0QixXQUFNLEdBQU4sTUFBTSxDQUEyQjtRQUV2RCxNQUFNLEdBQUcsTUFBTSxJQUFJLEVBQUUsQ0FBQztRQUN0QixnQkFBZ0IsQ0FBQyx3QkFBd0IsQ0FBQyxNQUFNLENBQUMsc0JBQXNCLENBQUMsQ0FBQztJQUMzRSxDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsTUFBTSxDQUFJLFVBQWtCO1FBQzFCLE9BQU8sSUFBSSxrQkFBa0IsQ0FDM0IsVUFBVSxFQUNWLElBQUksQ0FBQyxJQUFJLEVBQ1QsSUFBSSxDQUFDLGdCQUFnQixFQUNyQixJQUFJLENBQUMsTUFBTSxDQUNaLENBQUM7SUFDSixDQUFDO2lJQXJCVSx5QkFBeUI7cUlBQXpCLHlCQUF5Qjs7MkZBQXpCLHlCQUF5QjtrQkFEckMsVUFBVTs7MEJBS04sUUFBUSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUsIGlzRGV2TW9kZSwgT3B0aW9uYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7XG4gIEh0dHBDbGllbnQsXG4gIEh0dHBFcnJvclJlc3BvbnNlLFxuICBIdHRwSGVhZGVycyxcbiAgSHR0cFBhcmFtcyxcbn0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuXG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBvZiwgdGhyb3dFcnJvciB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgY2F0Y2hFcnJvciwgZGVsYXksIG1hcCwgdGltZW91dCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuaW1wb3J0IHsgVXBkYXRlIH0gZnJvbSAnQG5ncngvZW50aXR5JztcblxuaW1wb3J0IHsgRGF0YVNlcnZpY2VFcnJvciB9IGZyb20gJy4vZGF0YS1zZXJ2aWNlLWVycm9yJztcbmltcG9ydCB7IERlZmF1bHREYXRhU2VydmljZUNvbmZpZyB9IGZyb20gJy4vZGVmYXVsdC1kYXRhLXNlcnZpY2UtY29uZmlnJztcbmltcG9ydCB7XG4gIEVudGl0eUNvbGxlY3Rpb25EYXRhU2VydmljZSxcbiAgSHR0cE1ldGhvZHMsXG4gIEh0dHBPcHRpb25zLFxuICBRdWVyeVBhcmFtcyxcbiAgUmVxdWVzdERhdGEsXG59IGZyb20gJy4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBIdHRwVXJsR2VuZXJhdG9yIH0gZnJvbSAnLi9odHRwLXVybC1nZW5lcmF0b3InO1xuXG4vKipcbiAqIEEgYmFzaWMsIGdlbmVyaWMgZW50aXR5IGRhdGEgc2VydmljZVxuICogc3VpdGFibGUgZm9yIHBlcnNpc3RlbmNlIG9mIG1vc3QgZW50aXRpZXMuXG4gKiBBc3N1bWVzIGEgY29tbW9uIFJFU1QteSB3ZWIgQVBJXG4gKi9cbmV4cG9ydCBjbGFzcyBEZWZhdWx0RGF0YVNlcnZpY2U8VD4gaW1wbGVtZW50cyBFbnRpdHlDb2xsZWN0aW9uRGF0YVNlcnZpY2U8VD4ge1xuICBwcm90ZWN0ZWQgX25hbWU6IHN0cmluZztcbiAgcHJvdGVjdGVkIGRlbGV0ZTQwNE9LOiBib29sZWFuO1xuICBwcm90ZWN0ZWQgZW50aXR5TmFtZTogc3RyaW5nO1xuICBwcm90ZWN0ZWQgZW50aXR5VXJsOiBzdHJpbmc7XG4gIHByb3RlY3RlZCBlbnRpdGllc1VybDogc3RyaW5nO1xuICBwcm90ZWN0ZWQgZ2V0RGVsYXkgPSAwO1xuICBwcm90ZWN0ZWQgc2F2ZURlbGF5ID0gMDtcbiAgcHJvdGVjdGVkIHRpbWVvdXQgPSAwO1xuICBwcm90ZWN0ZWQgdHJhaWxpbmdTbGFzaEVuZHBvaW50cyA9IGZhbHNlO1xuXG4gIGdldCBuYW1lKCkge1xuICAgIHJldHVybiB0aGlzLl9uYW1lO1xuICB9XG5cbiAgY29uc3RydWN0b3IoXG4gICAgZW50aXR5TmFtZTogc3RyaW5nLFxuICAgIHByb3RlY3RlZCBodHRwOiBIdHRwQ2xpZW50LFxuICAgIHByb3RlY3RlZCBodHRwVXJsR2VuZXJhdG9yOiBIdHRwVXJsR2VuZXJhdG9yLFxuICAgIGNvbmZpZz86IERlZmF1bHREYXRhU2VydmljZUNvbmZpZ1xuICApIHtcbiAgICB0aGlzLl9uYW1lID0gYCR7ZW50aXR5TmFtZX0gRGVmYXVsdERhdGFTZXJ2aWNlYDtcbiAgICB0aGlzLmVudGl0eU5hbWUgPSBlbnRpdHlOYW1lO1xuICAgIGNvbnN0IHtcbiAgICAgIHJvb3QgPSAnYXBpJyxcbiAgICAgIGRlbGV0ZTQwNE9LID0gdHJ1ZSxcbiAgICAgIGdldERlbGF5ID0gMCxcbiAgICAgIHNhdmVEZWxheSA9IDAsXG4gICAgICB0aW1lb3V0OiB0byA9IDAsXG4gICAgICB0cmFpbGluZ1NsYXNoRW5kcG9pbnRzID0gZmFsc2UsXG4gICAgfSA9IGNvbmZpZyB8fCB7fTtcbiAgICB0aGlzLmRlbGV0ZTQwNE9LID0gZGVsZXRlNDA0T0s7XG4gICAgdGhpcy5lbnRpdHlVcmwgPSBodHRwVXJsR2VuZXJhdG9yLmVudGl0eVJlc291cmNlKFxuICAgICAgZW50aXR5TmFtZSxcbiAgICAgIHJvb3QsXG4gICAgICB0cmFpbGluZ1NsYXNoRW5kcG9pbnRzXG4gICAgKTtcbiAgICB0aGlzLmVudGl0aWVzVXJsID0gaHR0cFVybEdlbmVyYXRvci5jb2xsZWN0aW9uUmVzb3VyY2UoZW50aXR5TmFtZSwgcm9vdCk7XG4gICAgdGhpcy5nZXREZWxheSA9IGdldERlbGF5O1xuICAgIHRoaXMuc2F2ZURlbGF5ID0gc2F2ZURlbGF5O1xuICAgIHRoaXMudGltZW91dCA9IHRvO1xuICB9XG5cbiAgYWRkKGVudGl0eTogVCwgb3B0aW9ucz86IEh0dHBPcHRpb25zKTogT2JzZXJ2YWJsZTxUPiB7XG4gICAgY29uc3QgZW50aXR5T3JFcnJvciA9XG4gICAgICBlbnRpdHkgfHwgbmV3IEVycm9yKGBObyBcIiR7dGhpcy5lbnRpdHlOYW1lfVwiIGVudGl0eSB0byBhZGRgKTtcbiAgICByZXR1cm4gdGhpcy5leGVjdXRlKCdQT1NUJywgdGhpcy5lbnRpdHlVcmwsIGVudGl0eU9yRXJyb3IsIG51bGwsIG9wdGlvbnMpO1xuICB9XG5cbiAgZGVsZXRlKFxuICAgIGtleTogbnVtYmVyIHwgc3RyaW5nLFxuICAgIG9wdGlvbnM/OiBIdHRwT3B0aW9uc1xuICApOiBPYnNlcnZhYmxlPG51bWJlciB8IHN0cmluZz4ge1xuICAgIGxldCBlcnI6IEVycm9yIHwgdW5kZWZpbmVkO1xuICAgIGlmIChrZXkgPT0gbnVsbCkge1xuICAgICAgZXJyID0gbmV3IEVycm9yKGBObyBcIiR7dGhpcy5lbnRpdHlOYW1lfVwiIGtleSB0byBkZWxldGVgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5leGVjdXRlKFxuICAgICAgJ0RFTEVURScsXG4gICAgICB0aGlzLmVudGl0eVVybCArIGtleSxcbiAgICAgIGVycixcbiAgICAgIG51bGwsXG4gICAgICBvcHRpb25zXG4gICAgKS5waXBlKFxuICAgICAgLy8gZm9yd2FyZCB0aGUgaWQgb2YgZGVsZXRlZCBlbnRpdHkgYXMgdGhlIHJlc3VsdCBvZiB0aGUgSFRUUCBERUxFVEVcbiAgICAgIG1hcCgocmVzdWx0KSA9PiBrZXkgYXMgbnVtYmVyIHwgc3RyaW5nKVxuICAgICk7XG4gIH1cblxuICBnZXRBbGwob3B0aW9ucz86IEh0dHBPcHRpb25zKTogT2JzZXJ2YWJsZTxUW10+IHtcbiAgICByZXR1cm4gdGhpcy5leGVjdXRlKCdHRVQnLCB0aGlzLmVudGl0aWVzVXJsLCBudWxsLCBudWxsLCBvcHRpb25zKTtcbiAgfVxuXG4gIGdldEJ5SWQoa2V5OiBudW1iZXIgfCBzdHJpbmcsIG9wdGlvbnM/OiBIdHRwT3B0aW9ucyk6IE9ic2VydmFibGU8VD4ge1xuICAgIGxldCBlcnI6IEVycm9yIHwgdW5kZWZpbmVkO1xuICAgIGlmIChrZXkgPT0gbnVsbCkge1xuICAgICAgZXJyID0gbmV3IEVycm9yKGBObyBcIiR7dGhpcy5lbnRpdHlOYW1lfVwiIGtleSB0byBnZXRgKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuZXhlY3V0ZSgnR0VUJywgdGhpcy5lbnRpdHlVcmwgKyBrZXksIGVyciwgbnVsbCwgb3B0aW9ucyk7XG4gIH1cblxuICBnZXRXaXRoUXVlcnkoXG4gICAgcXVlcnlQYXJhbXM6IFF1ZXJ5UGFyYW1zIHwgc3RyaW5nIHwgdW5kZWZpbmVkLFxuICAgIG9wdGlvbnM/OiBIdHRwT3B0aW9uc1xuICApOiBPYnNlcnZhYmxlPFRbXT4ge1xuICAgIGNvbnN0IHFQYXJhbXMgPVxuICAgICAgdHlwZW9mIHF1ZXJ5UGFyYW1zID09PSAnc3RyaW5nJ1xuICAgICAgICA/IHsgZnJvbVN0cmluZzogcXVlcnlQYXJhbXMgfVxuICAgICAgICA6IHsgZnJvbU9iamVjdDogcXVlcnlQYXJhbXMgfTtcbiAgICBjb25zdCBwYXJhbXMgPSBuZXcgSHR0cFBhcmFtcyhxUGFyYW1zKTtcblxuICAgIHJldHVybiB0aGlzLmV4ZWN1dGUoXG4gICAgICAnR0VUJyxcbiAgICAgIHRoaXMuZW50aXRpZXNVcmwsXG4gICAgICB1bmRlZmluZWQsXG4gICAgICB7IHBhcmFtcyB9LFxuICAgICAgb3B0aW9uc1xuICAgICk7XG4gIH1cblxuICB1cGRhdGUodXBkYXRlOiBVcGRhdGU8VD4sIG9wdGlvbnM/OiBIdHRwT3B0aW9ucyk6IE9ic2VydmFibGU8VD4ge1xuICAgIGNvbnN0IGlkID0gdXBkYXRlICYmIHVwZGF0ZS5pZDtcbiAgICBjb25zdCB1cGRhdGVPckVycm9yID1cbiAgICAgIGlkID09IG51bGxcbiAgICAgICAgPyBuZXcgRXJyb3IoYE5vIFwiJHt0aGlzLmVudGl0eU5hbWV9XCIgdXBkYXRlIGRhdGEgb3IgaWRgKVxuICAgICAgICA6IHVwZGF0ZS5jaGFuZ2VzO1xuICAgIHJldHVybiB0aGlzLmV4ZWN1dGUoXG4gICAgICAnUFVUJyxcbiAgICAgIHRoaXMuZW50aXR5VXJsICsgaWQsXG4gICAgICB1cGRhdGVPckVycm9yLFxuICAgICAgbnVsbCxcbiAgICAgIG9wdGlvbnNcbiAgICApO1xuICB9XG5cbiAgLy8gSW1wb3J0YW50ISBPbmx5IGNhbGwgaWYgdGhlIGJhY2tlbmQgc2VydmljZSBzdXBwb3J0cyB1cHNlcnRzIGFzIGEgUE9TVCB0byB0aGUgdGFyZ2V0IFVSTFxuICB1cHNlcnQoZW50aXR5OiBULCBvcHRpb25zPzogSHR0cE9wdGlvbnMpOiBPYnNlcnZhYmxlPFQ+IHtcbiAgICBjb25zdCBlbnRpdHlPckVycm9yID1cbiAgICAgIGVudGl0eSB8fCBuZXcgRXJyb3IoYE5vIFwiJHt0aGlzLmVudGl0eU5hbWV9XCIgZW50aXR5IHRvIHVwc2VydGApO1xuICAgIHJldHVybiB0aGlzLmV4ZWN1dGUoJ1BPU1QnLCB0aGlzLmVudGl0eVVybCwgZW50aXR5T3JFcnJvciwgbnVsbCwgb3B0aW9ucyk7XG4gIH1cblxuICBwcm90ZWN0ZWQgZXhlY3V0ZShcbiAgICBtZXRob2Q6IEh0dHBNZXRob2RzLFxuICAgIHVybDogc3RyaW5nLFxuICAgIGRhdGE/OiBhbnksIC8vIGRhdGEsIGVycm9yLCBvciB1bmRlZmluZWQvbnVsbFxuICAgIG9wdGlvbnM/OiBhbnksIC8vIG9wdGlvbnMgb3IgdW5kZWZpbmVkL251bGxcbiAgICBodHRwT3B0aW9ucz86IEh0dHBPcHRpb25zIC8vIHRoZXNlIG92ZXJyaWRlIGFueSBvcHRpb25zIHBhc3NlZCB2aWEgb3B0aW9uc1xuICApOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIGxldCBlbnRpdHlBY3Rpb25IdHRwQ2xpZW50T3B0aW9uczogYW55ID0gdW5kZWZpbmVkO1xuICAgIGlmIChodHRwT3B0aW9ucykge1xuICAgICAgZW50aXR5QWN0aW9uSHR0cENsaWVudE9wdGlvbnMgPSB7XG4gICAgICAgIGhlYWRlcnM6IGh0dHBPcHRpb25zPy5odHRwSGVhZGVyc1xuICAgICAgICAgID8gbmV3IEh0dHBIZWFkZXJzKGh0dHBPcHRpb25zPy5odHRwSGVhZGVycylcbiAgICAgICAgICA6IHVuZGVmaW5lZCxcbiAgICAgICAgcGFyYW1zOiBodHRwT3B0aW9ucz8uaHR0cFBhcmFtc1xuICAgICAgICAgID8gbmV3IEh0dHBQYXJhbXMoaHR0cE9wdGlvbnM/Lmh0dHBQYXJhbXMpXG4gICAgICAgICAgOiB1bmRlZmluZWQsXG4gICAgICB9O1xuICAgIH1cblxuICAgIC8vIE5vdyB3ZSBtYXkgaGF2ZTpcbiAgICAvLyBvcHRpb25zOiBjb250YWluaW5nIGhlYWRlcnMsIHBhcmFtcywgb3IgYW55IG90aGVyIGFsbG93ZWQgaHR0cCBvcHRpb25zIGFscmVhZHkgaW4gYW5ndWxhcidzIGFwaVxuICAgIC8vIGVudGl0eUFjdGlvbkh0dHBDbGllbnRPcHRpb25zOiBoZWFkZXJzIGFuZCBwYXJhbXMgaW4gYW5ndWxhcidzIGFwaVxuXG4gICAgLy8gV2UgdGhlcmVmb3JlIG5lZWQgdG8gbWVyZ2UgdGhlc2Ugc28gdGhhdCB0aGUgYWN0aW9uIG9uZXMgb3ZlcnJpZGUgdGhlXG4gICAgLy8gZXhpc3Rpbmcga2V5cyB3aGVyZSBhcHBsaWNhYmxlLlxuXG4gICAgLy8gSWYgYW55IG9wdGlvbnMgaGF2ZSBiZWVuIHNwZWNpZmllZCwgcGFzcyB0aGVtIHRvIGh0dHAgY2xpZW50LiBOb3RlXG4gICAgLy8gdGhlIG5ldyBodHRwIG9wdGlvbnMsIGlmIHNwZWNpZmllZCwgd2lsbCBvdmVycmlkZSBhbnkgb3B0aW9ucyBwYXNzZWRcbiAgICAvLyBmcm9tIHRoZSBkZXByZWNhdGVkIG9wdGlvbnMgcGFyYW1ldGVyXG4gICAgbGV0IG1lcmdlZE9wdGlvbnM6IGFueSA9IHVuZGVmaW5lZDtcbiAgICBpZiAob3B0aW9ucyB8fCBlbnRpdHlBY3Rpb25IdHRwQ2xpZW50T3B0aW9ucykge1xuICAgICAgaWYgKGlzRGV2TW9kZSgpICYmIG9wdGlvbnMgJiYgZW50aXR5QWN0aW9uSHR0cENsaWVudE9wdGlvbnMpIHtcbiAgICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICAgICdAbmdyeC9kYXRhOiBvcHRpb25zLmh0dHBQYXJhbXMgd2lsbCBiZSBtZXJnZWQgd2l0aCBxdWVyeVBhcmFtcyB3aGVuIGJvdGggYXJlIGFyZSBwcm92aWRlZCB0byBnZXRXaXRoUXVlcnkoKS4gSW4gdGhlIGV2ZW50IG9mIGEgY29uZmxpY3QgSHR0cE9wdGlvbnMuaHR0cFBhcmFtcyB3aWxsIG92ZXJyaWRlIHF1ZXJ5UGFyYW1zYC4gVGhlIHF1ZXJ5UGFyYW1zIHBhcmFtZXRlciBvZiBnZXRXaXRoUXVlcnkoKSB3aWxsIGJlIHJlbW92ZWQgaW4gbmV4dCBtYWpvciByZWxlYXNlLidcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgbWVyZ2VkT3B0aW9ucyA9IHtcbiAgICAgICAgLi4ub3B0aW9ucyxcbiAgICAgICAgaGVhZGVyczogZW50aXR5QWN0aW9uSHR0cENsaWVudE9wdGlvbnM/LmhlYWRlcnMgPz8gb3B0aW9ucz8uaGVhZGVycyxcbiAgICAgICAgcGFyYW1zOiBlbnRpdHlBY3Rpb25IdHRwQ2xpZW50T3B0aW9ucz8ucGFyYW1zID8/IG9wdGlvbnM/LnBhcmFtcyxcbiAgICAgIH07XG4gICAgfVxuXG4gICAgY29uc3QgcmVxOiBSZXF1ZXN0RGF0YSA9IHtcbiAgICAgIG1ldGhvZCxcbiAgICAgIHVybCxcbiAgICAgIGRhdGEsXG4gICAgICBvcHRpb25zOiBtZXJnZWRPcHRpb25zLFxuICAgIH07XG5cbiAgICBpZiAoZGF0YSBpbnN0YW5jZW9mIEVycm9yKSB7XG4gICAgICByZXR1cm4gdGhpcy5oYW5kbGVFcnJvcihyZXEpKGRhdGEpO1xuICAgIH1cblxuICAgIGxldCByZXN1bHQkOiBPYnNlcnZhYmxlPEFycmF5QnVmZmVyPjtcblxuICAgIHN3aXRjaCAobWV0aG9kKSB7XG4gICAgICBjYXNlICdERUxFVEUnOiB7XG4gICAgICAgIHJlc3VsdCQgPSB0aGlzLmh0dHAuZGVsZXRlKHVybCwgbWVyZ2VkT3B0aW9ucyk7XG4gICAgICAgIGlmICh0aGlzLnNhdmVEZWxheSkge1xuICAgICAgICAgIHJlc3VsdCQgPSByZXN1bHQkLnBpcGUoZGVsYXkodGhpcy5zYXZlRGVsYXkpKTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIGNhc2UgJ0dFVCc6IHtcbiAgICAgICAgcmVzdWx0JCA9IHRoaXMuaHR0cC5nZXQodXJsLCBtZXJnZWRPcHRpb25zKTtcbiAgICAgICAgaWYgKHRoaXMuZ2V0RGVsYXkpIHtcbiAgICAgICAgICByZXN1bHQkID0gcmVzdWx0JC5waXBlKGRlbGF5KHRoaXMuZ2V0RGVsYXkpKTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIGNhc2UgJ1BPU1QnOiB7XG4gICAgICAgIHJlc3VsdCQgPSB0aGlzLmh0dHAucG9zdCh1cmwsIGRhdGEsIG1lcmdlZE9wdGlvbnMpO1xuICAgICAgICBpZiAodGhpcy5zYXZlRGVsYXkpIHtcbiAgICAgICAgICByZXN1bHQkID0gcmVzdWx0JC5waXBlKGRlbGF5KHRoaXMuc2F2ZURlbGF5KSk7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICAvLyBOLkIuOiBJdCBtdXN0IHJldHVybiBhbiBVcGRhdGU8VD5cbiAgICAgIGNhc2UgJ1BVVCc6IHtcbiAgICAgICAgcmVzdWx0JCA9IHRoaXMuaHR0cC5wdXQodXJsLCBkYXRhLCBtZXJnZWRPcHRpb25zKTtcbiAgICAgICAgaWYgKHRoaXMuc2F2ZURlbGF5KSB7XG4gICAgICAgICAgcmVzdWx0JCA9IHJlc3VsdCQucGlwZShkZWxheSh0aGlzLnNhdmVEZWxheSkpO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgZGVmYXVsdDoge1xuICAgICAgICBjb25zdCBlcnJvciA9IG5ldyBFcnJvcignVW5pbXBsZW1lbnRlZCBIVFRQIG1ldGhvZCwgJyArIG1ldGhvZCk7XG4gICAgICAgIHJlc3VsdCQgPSB0aHJvd0Vycm9yKGVycm9yKTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKHRoaXMudGltZW91dCkge1xuICAgICAgcmVzdWx0JCA9IHJlc3VsdCQucGlwZSh0aW1lb3V0KHRoaXMudGltZW91dCArIHRoaXMuc2F2ZURlbGF5KSk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQkLnBpcGUoY2F0Y2hFcnJvcih0aGlzLmhhbmRsZUVycm9yKHJlcSkpKTtcbiAgfVxuXG4gIHByaXZhdGUgaGFuZGxlRXJyb3IocmVxRGF0YTogUmVxdWVzdERhdGEpIHtcbiAgICByZXR1cm4gKGVycjogYW55KSA9PiB7XG4gICAgICBjb25zdCBvayA9IHRoaXMuaGFuZGxlRGVsZXRlNDA0KGVyciwgcmVxRGF0YSk7XG4gICAgICBpZiAob2spIHtcbiAgICAgICAgcmV0dXJuIG9rO1xuICAgICAgfVxuICAgICAgY29uc3QgZXJyb3IgPSBuZXcgRGF0YVNlcnZpY2VFcnJvcihlcnIsIHJlcURhdGEpO1xuICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXJyb3IpO1xuICAgIH07XG4gIH1cblxuICBwcml2YXRlIGhhbmRsZURlbGV0ZTQwNChlcnJvcjogSHR0cEVycm9yUmVzcG9uc2UsIHJlcURhdGE6IFJlcXVlc3REYXRhKSB7XG4gICAgaWYgKFxuICAgICAgZXJyb3Iuc3RhdHVzID09PSA0MDQgJiZcbiAgICAgIHJlcURhdGEubWV0aG9kID09PSAnREVMRVRFJyAmJlxuICAgICAgdGhpcy5kZWxldGU0MDRPS1xuICAgICkge1xuICAgICAgcmV0dXJuIG9mKHt9KTtcbiAgICB9XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxufVxuXG4vKipcbiAqIENyZWF0ZSBhIGJhc2ljLCBnZW5lcmljIGVudGl0eSBkYXRhIHNlcnZpY2VcbiAqIHN1aXRhYmxlIGZvciBwZXJzaXN0ZW5jZSBvZiBtb3N0IGVudGl0aWVzLlxuICogQXNzdW1lcyBhIGNvbW1vbiBSRVNULXkgd2ViIEFQSVxuICovXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgRGVmYXVsdERhdGFTZXJ2aWNlRmFjdG9yeSB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHByb3RlY3RlZCBodHRwOiBIdHRwQ2xpZW50LFxuICAgIHByb3RlY3RlZCBodHRwVXJsR2VuZXJhdG9yOiBIdHRwVXJsR2VuZXJhdG9yLFxuICAgIEBPcHRpb25hbCgpIHByb3RlY3RlZCBjb25maWc/OiBEZWZhdWx0RGF0YVNlcnZpY2VDb25maWdcbiAgKSB7XG4gICAgY29uZmlnID0gY29uZmlnIHx8IHt9O1xuICAgIGh0dHBVcmxHZW5lcmF0b3IucmVnaXN0ZXJIdHRwUmVzb3VyY2VVcmxzKGNvbmZpZy5lbnRpdHlIdHRwUmVzb3VyY2VVcmxzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgYSBkZWZhdWx0IHtFbnRpdHlDb2xsZWN0aW9uRGF0YVNlcnZpY2V9IGZvciB0aGUgZ2l2ZW4gZW50aXR5IHR5cGVcbiAgICogQHBhcmFtIGVudGl0eU5hbWUge3N0cmluZ30gTmFtZSBvZiB0aGUgZW50aXR5IHR5cGUgZm9yIHRoaXMgZGF0YSBzZXJ2aWNlXG4gICAqL1xuICBjcmVhdGU8VD4oZW50aXR5TmFtZTogc3RyaW5nKTogRW50aXR5Q29sbGVjdGlvbkRhdGFTZXJ2aWNlPFQ+IHtcbiAgICByZXR1cm4gbmV3IERlZmF1bHREYXRhU2VydmljZTxUPihcbiAgICAgIGVudGl0eU5hbWUsXG4gICAgICB0aGlzLmh0dHAsXG4gICAgICB0aGlzLmh0dHBVcmxHZW5lcmF0b3IsXG4gICAgICB0aGlzLmNvbmZpZ1xuICAgICk7XG4gIH1cbn1cbiJdfQ==
@@ -1,146 +0,0 @@
1
- import { Injectable, Optional } from '@angular/core';
2
- import { throwError } from 'rxjs';
3
- import { catchError, delay, map, timeout } from 'rxjs/operators';
4
- import { ChangeSetOperation, excludeEmptyChangeSetItems, } from '../actions/entity-cache-change-set';
5
- import { DataServiceError } from './data-service-error';
6
- import * as i0 from "@angular/core";
7
- import * as i1 from "../entity-metadata/entity-definition.service";
8
- import * as i2 from "@angular/common/http";
9
- import * as i3 from "./default-data-service-config";
10
- const updateOp = ChangeSetOperation.Update;
11
- /**
12
- * Default data service for making remote service calls targeting the entire EntityCache.
13
- * See EntityDataService for services that target a single EntityCollection
14
- */
15
- export class EntityCacheDataService {
16
- constructor(entityDefinitionService, http, config) {
17
- this.entityDefinitionService = entityDefinitionService;
18
- this.http = http;
19
- this.idSelectors = {};
20
- this.saveDelay = 0;
21
- this.timeout = 0;
22
- const { saveDelay = 0, timeout: to = 0 } = config || {};
23
- this.saveDelay = saveDelay;
24
- this.timeout = to;
25
- }
26
- /**
27
- * Save changes to multiple entities across one or more entity collections.
28
- * Server endpoint must understand the essential SaveEntities protocol,
29
- * in particular the ChangeSet interface (except for Update<T>).
30
- * This implementation extracts the entity changes from a ChangeSet Update<T>[] and sends those.
31
- * It then reconstructs Update<T>[] in the returned observable result.
32
- * @param changeSet An array of SaveEntityItems.
33
- * Each SaveEntityItem describe a change operation for one or more entities of a single collection,
34
- * known by its 'entityName'.
35
- * @param url The server endpoint that receives this request.
36
- */
37
- saveEntities(changeSet, url) {
38
- changeSet = this.filterChangeSet(changeSet);
39
- // Assume server doesn't understand @ngrx/entity Update<T> structure;
40
- // Extract the entity changes from the Update<T>[] and restore on the return from server
41
- changeSet = this.flattenUpdates(changeSet);
42
- let result$ = this.http
43
- .post(url, changeSet)
44
- .pipe(map((result) => this.restoreUpdates(result)), catchError(this.handleError({ method: 'POST', url, data: changeSet })));
45
- if (this.timeout) {
46
- result$ = result$.pipe(timeout(this.timeout));
47
- }
48
- if (this.saveDelay) {
49
- result$ = result$.pipe(delay(this.saveDelay));
50
- }
51
- return result$;
52
- }
53
- // #region helpers
54
- handleError(reqData) {
55
- return (err) => {
56
- const error = new DataServiceError(err, reqData);
57
- return throwError(error);
58
- };
59
- }
60
- /**
61
- * Filter changeSet to remove unwanted ChangeSetItems.
62
- * This implementation excludes null and empty ChangeSetItems.
63
- * @param changeSet ChangeSet with changes to filter
64
- */
65
- filterChangeSet(changeSet) {
66
- return excludeEmptyChangeSetItems(changeSet);
67
- }
68
- /**
69
- * Convert the entities in update changes from @ngrx Update<T> structure to just T.
70
- * Reverse of restoreUpdates().
71
- */
72
- flattenUpdates(changeSet) {
73
- let changes = changeSet.changes;
74
- if (changes.length === 0) {
75
- return changeSet;
76
- }
77
- let hasMutated = false;
78
- changes = changes.map((item) => {
79
- if (item.op === updateOp && item.entities.length > 0) {
80
- hasMutated = true;
81
- return {
82
- ...item,
83
- entities: item.entities.map((u) => u.changes),
84
- };
85
- }
86
- else {
87
- return item;
88
- }
89
- });
90
- return hasMutated ? { ...changeSet, changes } : changeSet;
91
- }
92
- /**
93
- * Convert the flattened T entities in update changes back to @ngrx Update<T> structures.
94
- * Reverse of flattenUpdates().
95
- */
96
- restoreUpdates(changeSet) {
97
- if (changeSet == null) {
98
- // Nothing? Server probably responded with 204 - No Content because it made no changes to the inserted or updated entities
99
- return changeSet;
100
- }
101
- let changes = changeSet.changes;
102
- if (changes.length === 0) {
103
- return changeSet;
104
- }
105
- let hasMutated = false;
106
- changes = changes.map((item) => {
107
- if (item.op === updateOp) {
108
- // These are entities, not Updates; convert back to Updates
109
- hasMutated = true;
110
- const selectId = this.getIdSelector(item.entityName);
111
- return {
112
- ...item,
113
- entities: item.entities.map((u) => ({
114
- id: selectId(u),
115
- changes: u,
116
- })),
117
- };
118
- }
119
- else {
120
- return item;
121
- }
122
- });
123
- return hasMutated ? { ...changeSet, changes } : changeSet;
124
- }
125
- /**
126
- * Get the id (primary key) selector function for an entity type
127
- * @param entityName name of the entity type
128
- */
129
- getIdSelector(entityName) {
130
- let idSelector = this.idSelectors[entityName];
131
- if (!idSelector) {
132
- idSelector =
133
- this.entityDefinitionService.getDefinition(entityName).selectId;
134
- this.idSelectors[entityName] = idSelector;
135
- }
136
- return idSelector;
137
- }
138
- /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.5", ngImport: i0, type: EntityCacheDataService, deps: [{ token: i1.EntityDefinitionService }, { token: i2.HttpClient }, { token: i3.DefaultDataServiceConfig, optional: true }], target: i0.ɵɵFactoryTarget.Injectable }); }
139
- /** @nocollapse */ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.5", ngImport: i0, type: EntityCacheDataService }); }
140
- }
141
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.5", ngImport: i0, type: EntityCacheDataService, decorators: [{
142
- type: Injectable
143
- }], ctorParameters: () => [{ type: i1.EntityDefinitionService }, { type: i2.HttpClient }, { type: i3.DefaultDataServiceConfig, decorators: [{
144
- type: Optional
145
- }] }] });
146
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW50aXR5LWNhY2hlLWRhdGEuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL21vZHVsZXMvZGF0YS9zcmMvZGF0YXNlcnZpY2VzL2VudGl0eS1jYWNoZS1kYXRhLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFHckQsT0FBTyxFQUFjLFVBQVUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUM5QyxPQUFPLEVBQUUsVUFBVSxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsT0FBTyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFJakUsT0FBTyxFQUNMLGtCQUFrQixFQUlsQiwwQkFBMEIsR0FDM0IsTUFBTSxvQ0FBb0MsQ0FBQztBQUM1QyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQzs7Ozs7QUFLeEQsTUFBTSxRQUFRLEdBQUcsa0JBQWtCLENBQUMsTUFBTSxDQUFDO0FBRTNDOzs7R0FHRztBQUVILE1BQU0sT0FBTyxzQkFBc0I7SUFLakMsWUFDWSx1QkFBZ0QsRUFDaEQsSUFBZ0IsRUFDZCxNQUFpQztRQUZuQyw0QkFBdUIsR0FBdkIsdUJBQXVCLENBQXlCO1FBQ2hELFNBQUksR0FBSixJQUFJLENBQVk7UUFObEIsZ0JBQVcsR0FBOEMsRUFBRSxDQUFDO1FBQzVELGNBQVMsR0FBRyxDQUFDLENBQUM7UUFDZCxZQUFPLEdBQUcsQ0FBQyxDQUFDO1FBT3BCLE1BQU0sRUFBRSxTQUFTLEdBQUcsQ0FBQyxFQUFFLE9BQU8sRUFBRSxFQUFFLEdBQUcsQ0FBQyxFQUFFLEdBQUcsTUFBTSxJQUFJLEVBQUUsQ0FBQztRQUN4RCxJQUFJLENBQUMsU0FBUyxHQUFHLFNBQVMsQ0FBQztRQUMzQixJQUFJLENBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQztJQUNwQixDQUFDO0lBRUQ7Ozs7Ozs7Ozs7T0FV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QUFVLENBQUM7UUFDNUMsQ0FBQztRQUNELE9BQU8sVUFBVSxDQUFDO0lBQ3BCLENBQUM7aUlBeElVLHNCQUFzQjtxSUFBdEIsc0JBQXNCOzsyRkFBdEIsc0JBQXNCO2tCQURsQyxVQUFVOzswQkFTTixRQUFRIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSwgT3B0aW9uYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEh0dHBDbGllbnQgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5cbmltcG9ydCB7IE9ic2VydmFibGUsIHRocm93RXJyb3IgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGNhdGNoRXJyb3IsIGRlbGF5LCBtYXAsIHRpbWVvdXQgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmltcG9ydCB7IElkU2VsZWN0b3IgfSBmcm9tICdAbmdyeC9lbnRpdHknO1xuXG5pbXBvcnQge1xuICBDaGFuZ2VTZXRPcGVyYXRpb24sXG4gIENoYW5nZVNldCxcbiAgQ2hhbmdlU2V0SXRlbSxcbiAgQ2hhbmdlU2V0VXBkYXRlLFxuICBleGNsdWRlRW1wdHlDaGFuZ2VTZXRJdGVtcyxcbn0gZnJvbSAnLi4vYWN0aW9ucy9lbnRpdHktY2FjaGUtY2hhbmdlLXNldCc7XG5pbXBvcnQgeyBEYXRhU2VydmljZUVycm9yIH0gZnJvbSAnLi9kYXRhLXNlcnZpY2UtZXJyb3InO1xuaW1wb3J0IHsgRGVmYXVsdERhdGFTZXJ2aWNlQ29uZmlnIH0gZnJvbSAnLi9kZWZhdWx0LWRhdGEtc2VydmljZS1jb25maWcnO1xuaW1wb3J0IHsgRW50aXR5RGVmaW5pdGlvblNlcnZpY2UgfSBmcm9tICcuLi9lbnRpdHktbWV0YWRhdGEvZW50aXR5LWRlZmluaXRpb24uc2VydmljZSc7XG5pbXBvcnQgeyBSZXF1ZXN0RGF0YSB9IGZyb20gJy4vaW50ZXJmYWNlcyc7XG5cbmNvbnN0IHVwZGF0ZU9wID0gQ2hhbmdlU2V0T3BlcmF0aW9uLlVwZGF0ZTtcblxuLyoqXG4gKiBEZWZhdWx0IGRhdGEgc2VydmljZSBmb3IgbWFraW5nIHJlbW90ZSBzZXJ2aWNlIGNhbGxzIHRhcmdldGluZyB0aGUgZW50aXJlIEVudGl0eUNhY2hlLlxuICogU2VlIEVudGl0eURhdGFTZXJ2aWNlIGZvciBzZXJ2aWNlcyB0aGF0IHRhcmdldCBhIHNpbmdsZSBFbnRpdHlDb2xsZWN0aW9uXG4gKi9cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBFbnRpdHlDYWNoZURhdGFTZXJ2aWNlIHtcbiAgcHJvdGVjdGVkIGlkU2VsZWN0b3JzOiB7IFtlbnRpdHlOYW1lOiBzdHJpbmddOiBJZFNlbGVjdG9yPGFueT4gfSA9IHt9O1xuICBwcm90ZWN0ZWQgc2F2ZURlbGF5ID0gMDtcbiAgcHJvdGVjdGVkIHRpbWVvdXQgPSAwO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByb3RlY3RlZCBlbnRpdHlEZWZpbml0aW9uU2VydmljZTogRW50aXR5RGVmaW5pdGlvblNlcnZpY2UsXG4gICAgcHJvdGVjdGVkIGh0dHA6IEh0dHBDbGllbnQsXG4gICAgQE9wdGlvbmFsKCkgY29uZmlnPzogRGVmYXVsdERhdGFTZXJ2aWNlQ29uZmlnXG4gICkge1xuICAgIGNvbnN0IHsgc2F2ZURlbGF5ID0gMCwgdGltZW91dDogdG8gPSAwIH0gPSBjb25maWcgfHwge307XG4gICAgdGhpcy5zYXZlRGVsYXkgPSBzYXZlRGVsYXk7XG4gICAgdGhpcy50aW1lb3V0ID0gdG87XG4gIH1cblxuICAvKipcbiAgICogU2F2ZSBjaGFuZ2VzIHRvIG11bHRpcGxlIGVudGl0aWVzIGFjcm9zcyBvbmUgb3IgbW9yZSBlbnRpdHkgY29sbGVjdGlvbnMuXG4gICAqIFNlcnZlciBlbmRwb2ludCBtdXN0IHVuZGVyc3RhbmQgdGhlIGVzc2VudGlhbCBTYXZlRW50aXRpZXMgcHJvdG9jb2wsXG4gICAqIGluIHBhcnRpY3VsYXIgdGhlIENoYW5nZVNldCBpbnRlcmZhY2UgKGV4Y2VwdCBmb3IgVXBkYXRlPFQ+KS5cbiAgICogVGhpcyBpbXBsZW1lbnRhdGlvbiBleHRyYWN0cyB0aGUgZW50aXR5IGNoYW5nZXMgZnJvbSBhIENoYW5nZVNldCBVcGRhdGU8VD5bXSBhbmQgc2VuZHMgdGhvc2UuXG4gICAqIEl0IHRoZW4gcmVjb25zdHJ1Y3RzIFVwZGF0ZTxUPltdIGluIHRoZSByZXR1cm5lZCBvYnNlcnZhYmxlIHJlc3VsdC5cbiAgICogQHBhcmFtIGNoYW5nZVNldCAgQW4gYXJyYXkgb2YgU2F2ZUVudGl0eUl0ZW1zLlxuICAgKiBFYWNoIFNhdmVFbnRpdHlJdGVtIGRlc2NyaWJlIGEgY2hhbmdlIG9wZXJhdGlvbiBmb3Igb25lIG9yIG1vcmUgZW50aXRpZXMgb2YgYSBzaW5nbGUgY29sbGVjdGlvbixcbiAgICoga25vd24gYnkgaXRzICdlbnRpdHlOYW1lJy5cbiAgICogQHBhcmFtIHVybCBUaGUgc2VydmVyIGVuZHBvaW50IHRoYXQgcmVjZWl2ZXMgdGhpcyByZXF1ZXN0LlxuICAgKi9cbiAgc2F2ZUVudGl0aWVzKGNoYW5nZVNldDogQ2hhbmdlU2V0LCB1cmw6IHN0cmluZyk6IE9ic2VydmFibGU8Q2hhbmdlU2V0PiB7XG4gICAgY2hhbmdlU2V0ID0gdGhpcy5maWx0ZXJDaGFuZ2VTZXQoY2hhbmdlU2V0KTtcbiAgICAvLyBBc3N1bWUgc2VydmVyIGRvZXNuJ3QgdW5kZXJzdGFuZCBAbmdyeC9lbnRpdHkgVXBkYXRlPFQ+IHN0cnVjdHVyZTtcbiAgICAvLyBFeHRyYWN0IHRoZSBlbnRpdHkgY2hhbmdlcyBmcm9tIHRoZSBVcGRhdGU8VD5bXSBhbmQgcmVzdG9yZSBvbiB0aGUgcmV0dXJuIGZyb20gc2VydmVyXG4gICAgY2hhbmdlU2V0ID0gdGhpcy5mbGF0dGVuVXBkYXRlcyhjaGFuZ2VTZXQpO1xuXG4gICAgbGV0IHJlc3VsdCQ6IE9ic2VydmFibGU8Q2hhbmdlU2V0PiA9IHRoaXMuaHR0cFxuICAgICAgLnBvc3Q8Q2hhbmdlU2V0Pih1cmwsIGNoYW5nZVNldClcbiAgICAgIC5waXBlKFxuICAgICAgICBtYXAoKHJlc3VsdCkgPT4gdGhpcy5yZXN0b3JlVXBkYXRlcyhyZXN1bHQpKSxcbiAgICAgICAgY2F0Y2hFcnJvcih0aGlzLmhhbmRsZUVycm9yKHsgbWV0aG9kOiAnUE9TVCcsIHVybCwgZGF0YTogY2hhbmdlU2V0IH0pKVxuICAgICAgKTtcblxuICAgIGlmICh0aGlzLnRpbWVvdXQpIHtcbiAgICAgIHJlc3VsdCQgPSByZXN1bHQkLnBpcGUodGltZW91dCh0aGlzLnRpbWVvdXQpKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5zYXZlRGVsYXkpIHtcbiAgICAgIHJlc3VsdCQgPSByZXN1bHQkLnBpcGUoZGVsYXkodGhpcy5zYXZlRGVsYXkpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmVzdWx0JDtcbiAgfVxuXG4gIC8vICNyZWdpb24gaGVscGVyc1xuICBwcm90ZWN0ZWQgaGFuZGxlRXJyb3IocmVxRGF0YTogUmVxdWVzdERhdGEpIHtcbiAgICByZXR1cm4gKGVycjogYW55KSA9PiB7XG4gICAgICBjb25zdCBlcnJvciA9IG5ldyBEYXRhU2VydmljZUVycm9yKGVyciwgcmVxRGF0YSk7XG4gICAgICByZXR1cm4gdGhyb3dFcnJvcihlcnJvcik7XG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBGaWx0ZXIgY2hhbmdlU2V0IHRvIHJlbW92ZSB1bndhbnRlZCBDaGFuZ2VTZXRJdGVtcy5cbiAgICogVGhpcyBpbXBsZW1lbnRhdGlvbiBleGNsdWRlcyBudWxsIGFuZCBlbXB0eSBDaGFuZ2VTZXRJdGVtcy5cbiAgICogQHBhcmFtIGNoYW5nZVNldCBDaGFuZ2VTZXQgd2l0aCBjaGFuZ2VzIHRvIGZpbHRlclxuICAgKi9cbiAgcHJvdGVjdGVkIGZpbHRlckNoYW5nZVNldChjaGFuZ2VTZXQ6IENoYW5nZVNldCk6IENoYW5nZVNldCB7XG4gICAgcmV0dXJuIGV4Y2x1ZGVFbXB0eUNoYW5nZVNldEl0ZW1zKGNoYW5nZVNldCk7XG4gIH1cblxuICAvKipcbiAgICogQ29udmVydCB0aGUgZW50aXRpZXMgaW4gdXBkYXRlIGNoYW5nZXMgZnJvbSBAbmdyeCBVcGRhdGU8VD4gc3RydWN0dXJlIHRvIGp1c3QgVC5cbiAgICogUmV2ZXJzZSBvZiByZXN0b3JlVXBkYXRlcygpLlxuICAgKi9cbiAgcHJvdGVjdGVkIGZsYXR0ZW5VcGRhdGVzKGNoYW5nZVNldDogQ2hhbmdlU2V0KTogQ2hhbmdlU2V0IHtcbiAgICBsZXQgY2hhbmdlcyA9IGNoYW5nZVNldC5jaGFuZ2VzO1xuICAgIGlmIChjaGFuZ2VzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIGNoYW5nZVNldDtcbiAgICB9XG4gICAgbGV0IGhhc011dGF0ZWQgPSBmYWxzZTtcbiAgICBjaGFuZ2VzID0gY2hhbmdlcy5tYXAoKGl0ZW0pID0+IHtcbiAgICAgIGlmIChpdGVtLm9wID09PSB1cGRhdGVPcCAmJiBpdGVtLmVudGl0aWVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgaGFzTXV0YXRlZCA9IHRydWU7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgLi4uaXRlbSxcbiAgICAgICAgICBlbnRpdGllczogKGl0ZW0gYXMgQ2hhbmdlU2V0VXBkYXRlKS5lbnRpdGllcy5tYXAoKHUpID0+IHUuY2hhbmdlcyksXG4gICAgICAgIH07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gaXRlbTtcbiAgICAgIH1cbiAgICB9KSBhcyBDaGFuZ2VTZXRJdGVtW107XG4gICAgcmV0dXJuIGhhc011dGF0ZWQgPyB7IC4uLmNoYW5nZVNldCwgY2hhbmdlcyB9IDogY2hhbmdlU2V0O1xuICB9XG5cbiAgLyoqXG4gICAqIENvbnZlcnQgdGhlIGZsYXR0ZW5lZCBUIGVudGl0aWVzIGluIHVwZGF0ZSBjaGFuZ2VzIGJhY2sgdG8gQG5ncnggVXBkYXRlPFQ+IHN0cnVjdHVyZXMuXG4gICAqIFJldmVyc2Ugb2YgZmxhdHRlblVwZGF0ZXMoKS5cbiAgICovXG4gIHByb3RlY3RlZCByZXN0b3JlVXBkYXRlcyhjaGFuZ2VTZXQ6IENoYW5nZVNldCk6IENoYW5nZVNldCB7XG4gICAgaWYgKGNoYW5nZVNldCA9PSBudWxsKSB7XG4gICAgICAvLyBOb3RoaW5nPyBTZXJ2ZXIgcHJvYmFibHkgcmVzcG9uZGVkIHdpdGggMjA0IC0gTm8gQ29udGVudCBiZWNhdXNlIGl0IG1hZGUgbm8gY2hhbmdlcyB0byB0aGUgaW5zZXJ0ZWQgb3IgdXBkYXRlZCBlbnRpdGllc1xuICAgICAgcmV0dXJuIGNoYW5nZVNldDtcbiAgICB9XG4gICAgbGV0IGNoYW5nZXMgPSBjaGFuZ2VTZXQuY2hhbmdlcztcbiAgICBpZiAoY2hhbmdlcy5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiBjaGFuZ2VTZXQ7XG4gICAgfVxuICAgIGxldCBoYXNNdXRhdGVkID0gZmFsc2U7XG4gICAgY2hhbmdlcyA9IGNoYW5nZXMubWFwKChpdGVtKSA9PiB7XG4gICAgICBpZiAoaXRlbS5vcCA9PT0gdXBkYXRlT3ApIHtcbiAgICAgICAgLy8gVGhlc2UgYXJlIGVudGl0aWVzLCBub3QgVXBkYXRlczsgY29udmVydCBiYWNrIHRvIFVwZGF0ZXNcbiAgICAgICAgaGFzTXV0YXRlZCA9IHRydWU7XG4gICAgICAgIGNvbnN0IHNlbGVjdElkID0gdGhpcy5nZXRJZFNlbGVjdG9yKGl0ZW0uZW50aXR5TmFtZSk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgLi4uaXRlbSxcbiAgICAgICAgICBlbnRpdGllczogaXRlbS5lbnRpdGllcy5tYXAoKHU6IGFueSkgPT4gKHtcbiAgICAgICAgICAgIGlkOiBzZWxlY3RJZCh1KSxcbiAgICAgICAgICAgIGNoYW5nZXM6IHUsXG4gICAgICAgICAgfSkpLFxuICAgICAgICB9IGFzIENoYW5nZVNldFVwZGF0ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBpdGVtO1xuICAgICAgfVxuICAgIH0pIGFzIENoYW5nZVNldEl0ZW1bXTtcbiAgICByZXR1cm4gaGFzTXV0YXRlZCA/IHsgLi4uY2hhbmdlU2V0LCBjaGFuZ2VzIH0gOiBjaGFuZ2VTZXQ7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBpZCAocHJpbWFyeSBrZXkpIHNlbGVjdG9yIGZ1bmN0aW9uIGZvciBhbiBlbnRpdHkgdHlwZVxuICAgKiBAcGFyYW0gZW50aXR5TmFtZSBuYW1lIG9mIHRoZSBlbnRpdHkgdHlwZVxuICAgKi9cbiAgcHJvdGVjdGVkIGdldElkU2VsZWN0b3IoZW50aXR5TmFtZTogc3RyaW5nKSB7XG4gICAgbGV0IGlkU2VsZWN0b3IgPSB0aGlzLmlkU2VsZWN0b3JzW2VudGl0eU5hbWVdO1xuICAgIGlmICghaWRTZWxlY3Rvcikge1xuICAgICAgaWRTZWxlY3RvciA9XG4gICAgICAgIHRoaXMuZW50aXR5RGVmaW5pdGlvblNlcnZpY2UuZ2V0RGVmaW5pdGlvbihlbnRpdHlOYW1lKS5zZWxlY3RJZDtcbiAgICAgIHRoaXMuaWRTZWxlY3RvcnNbZW50aXR5TmFtZV0gPSBpZFNlbGVjdG9yO1xuICAgIH1cbiAgICByZXR1cm4gaWRTZWxlY3RvcjtcbiAgfVxuICAvLyAjZW5kcmVnaW9uIGhlbHBlcnNcbn1cbiJdfQ==