@ngrx/data 12.5.1 → 13.0.1
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.
- package/{esm2015/index.js → esm2020/index.mjs} +0 -0
- package/esm2020/ngrx-data.mjs +5 -0
- package/{esm2015/public_api.js → esm2020/public_api.mjs} +0 -0
- package/esm2020/src/actions/entity-action-factory.mjs +50 -0
- package/{esm2015/src/actions/entity-action-guard.js → esm2020/src/actions/entity-action-guard.mjs} +0 -0
- package/{esm2015/src/actions/entity-action-operators.js → esm2020/src/actions/entity-action-operators.mjs} +0 -0
- package/{esm2015/src/actions/entity-action.js → esm2020/src/actions/entity-action.mjs} +0 -0
- package/esm2020/src/actions/entity-cache-action.mjs +116 -0
- package/esm2020/src/actions/entity-cache-change-set.mjs +50 -0
- package/{esm2015/src/actions/entity-op.js → esm2020/src/actions/entity-op.mjs} +0 -0
- package/{esm2015/src/actions/merge-strategy.js → esm2020/src/actions/merge-strategy.mjs} +0 -0
- package/{esm2015/src/actions/update-response-data.js → esm2020/src/actions/update-response-data.mjs} +0 -0
- package/{esm2015/src/dataservices/data-service-error.js → esm2020/src/dataservices/data-service-error.mjs} +0 -0
- package/{esm2015/src/dataservices/default-data-service-config.js → esm2020/src/dataservices/default-data-service-config.mjs} +0 -0
- package/{esm2015/src/dataservices/default-data.service.js → esm2020/src/dataservices/default-data.service.mjs} +13 -20
- package/esm2020/src/dataservices/entity-cache-data.service.mjs +146 -0
- package/esm2020/src/dataservices/entity-data.service.mjs +63 -0
- package/esm2020/src/dataservices/http-url-generator.mjs +86 -0
- package/{esm2015/src/dataservices/interfaces.js → esm2020/src/dataservices/interfaces.mjs} +0 -0
- package/esm2020/src/dataservices/persistence-result-handler.service.mjs +49 -0
- package/esm2020/src/dispatchers/entity-cache-dispatcher.mjs +163 -0
- package/{esm2015/src/dispatchers/entity-commands.js → esm2020/src/dispatchers/entity-commands.mjs} +0 -0
- package/esm2020/src/dispatchers/entity-dispatcher-base.mjs +405 -0
- package/esm2020/src/dispatchers/entity-dispatcher-default-options.mjs +30 -0
- package/esm2020/src/dispatchers/entity-dispatcher-factory.mjs +65 -0
- package/{esm2015/src/dispatchers/entity-dispatcher.js → esm2020/src/dispatchers/entity-dispatcher.mjs} +0 -0
- package/esm2020/src/effects/entity-cache-effects.mjs +115 -0
- package/{esm2015/src/effects/entity-effects-scheduler.js → esm2020/src/effects/entity-effects-scheduler.mjs} +0 -0
- package/esm2020/src/effects/entity-effects.mjs +148 -0
- package/esm2020/src/entity-data-without-effects.module.mjs +160 -0
- package/esm2020/src/entity-data.module.mjs +121 -0
- package/esm2020/src/entity-metadata/entity-definition.mjs +33 -0
- package/esm2020/src/entity-metadata/entity-definition.service.mjs +93 -0
- package/{esm2015/src/entity-metadata/entity-filters.js → esm2020/src/entity-metadata/entity-filters.mjs} +0 -0
- package/{esm2015/src/entity-metadata/entity-metadata.js → esm2020/src/entity-metadata/entity-metadata.mjs} +0 -0
- package/{esm2015/src/entity-services/entity-collection-service-base.js → esm2020/src/entity-services/entity-collection-service-base.mjs} +0 -0
- package/esm2020/src/entity-services/entity-collection-service-elements-factory.mjs +38 -0
- package/esm2020/src/entity-services/entity-collection-service-factory.mjs +28 -0
- package/{esm2015/src/entity-services/entity-collection-service.js → esm2020/src/entity-services/entity-collection-service.mjs} +0 -0
- package/esm2020/src/entity-services/entity-services-base.mjs +119 -0
- package/esm2020/src/entity-services/entity-services-elements.mjs +33 -0
- package/{esm2015/src/entity-services/entity-services.js → esm2020/src/entity-services/entity-services.mjs} +0 -0
- package/{esm2015/src/index.js → esm2020/src/index.mjs} +0 -0
- package/{esm2015/src/reducers/constants.js → esm2020/src/reducers/constants.mjs} +0 -0
- package/esm2020/src/reducers/entity-cache-reducer.mjs +271 -0
- package/{esm2015/src/reducers/entity-cache.js → esm2020/src/reducers/entity-cache.mjs} +0 -0
- package/esm2020/src/reducers/entity-change-tracker-base.mjs +587 -0
- package/{esm2015/src/reducers/entity-change-tracker.js → esm2020/src/reducers/entity-change-tracker.mjs} +0 -0
- package/esm2020/src/reducers/entity-collection-creator.mjs +37 -0
- package/esm2020/src/reducers/entity-collection-reducer-methods.mjs +807 -0
- package/esm2020/src/reducers/entity-collection-reducer-registry.mjs +68 -0
- package/esm2020/src/reducers/entity-collection-reducer.mjs +24 -0
- package/{esm2015/src/reducers/entity-collection.js → esm2020/src/reducers/entity-collection.mjs} +0 -0
- package/{esm2015/src/selectors/entity-cache-selector.js → esm2020/src/selectors/entity-cache-selector.mjs} +0 -0
- package/esm2020/src/selectors/entity-selectors$.mjs +52 -0
- package/esm2020/src/selectors/entity-selectors.mjs +96 -0
- package/esm2020/src/utils/correlation-id-generator.mjs +30 -0
- package/esm2020/src/utils/default-logger.mjs +25 -0
- package/esm2020/src/utils/default-pluralizer.mjs +71 -0
- package/{esm2015/src/utils/guid-fns.js → esm2020/src/utils/guid-fns.mjs} +0 -0
- package/{esm2015/src/utils/interfaces.js → esm2020/src/utils/interfaces.mjs} +0 -0
- package/{esm2015/src/utils/utilities.js → esm2020/src/utils/utilities.mjs} +0 -0
- package/fesm2015/{ngrx-data.js → ngrx-data.mjs} +341 -457
- package/fesm2015/ngrx-data.mjs.map +1 -0
- package/fesm2020/ngrx-data.mjs +4936 -0
- package/fesm2020/ngrx-data.mjs.map +1 -0
- package/ngrx-data.d.ts +1 -1
- package/package.json +25 -13
- package/schematics/ng-add/index.js +29 -25
- package/schematics/ng-add/index.js.map +1 -1
- package/schematics-core/index.js +1 -3
- package/schematics-core/index.js.map +1 -1
- package/schematics-core/utility/ast-utils.js +12 -8
- package/schematics-core/utility/ast-utils.js.map +1 -1
- package/schematics-core/utility/find-component.js +12 -12
- package/schematics-core/utility/find-component.js.map +1 -1
- package/schematics-core/utility/find-module.js +12 -12
- package/schematics-core/utility/find-module.js.map +1 -1
- package/schematics-core/utility/json-utilts.js.map +1 -1
- package/schematics-core/utility/libs-version.js +1 -1
- package/schematics-core/utility/libs-version.js.map +1 -1
- package/schematics-core/utility/ngrx-utils.js +16 -12
- package/schematics-core/utility/ngrx-utils.js.map +1 -1
- package/schematics-core/utility/parse-name.js +3 -3
- package/schematics-core/utility/parse-name.js.map +1 -1
- package/schematics-core/utility/project.js +1 -1
- package/schematics-core/utility/project.js.map +1 -1
- package/schematics-core/utility/visitors.js +2 -2
- package/schematics-core/utility/visitors.js.map +1 -1
- package/src/actions/entity-action-factory.d.ts +3 -0
- package/src/dataservices/default-data.service.d.ts +3 -0
- package/src/dataservices/entity-cache-data.service.d.ts +3 -0
- package/src/dataservices/entity-data.service.d.ts +3 -0
- package/src/dataservices/http-url-generator.d.ts +3 -0
- package/src/dataservices/persistence-result-handler.service.d.ts +3 -0
- package/src/dispatchers/entity-cache-dispatcher.d.ts +3 -0
- package/src/dispatchers/entity-dispatcher-default-options.d.ts +3 -0
- package/src/dispatchers/entity-dispatcher-factory.d.ts +3 -0
- package/src/effects/entity-cache-effects.d.ts +3 -0
- package/src/effects/entity-effects.d.ts +3 -0
- package/src/entity-data-without-effects.module.d.ts +5 -0
- package/src/entity-data.module.d.ts +6 -0
- package/src/entity-metadata/entity-definition.service.d.ts +3 -0
- package/src/entity-services/entity-collection-service-base.d.ts +1 -1
- package/src/entity-services/entity-collection-service-elements-factory.d.ts +3 -0
- package/src/entity-services/entity-collection-service-factory.d.ts +3 -0
- package/src/entity-services/entity-services-base.d.ts +3 -0
- package/src/entity-services/entity-services-elements.d.ts +3 -0
- package/src/reducers/entity-cache-reducer.d.ts +3 -0
- package/src/reducers/entity-collection-creator.d.ts +3 -0
- package/src/reducers/entity-collection-reducer-methods.d.ts +3 -0
- package/src/reducers/entity-collection-reducer-registry.d.ts +3 -0
- package/src/reducers/entity-collection-reducer.d.ts +3 -0
- package/src/selectors/entity-selectors$.d.ts +3 -0
- package/src/selectors/entity-selectors.d.ts +3 -0
- package/src/utils/correlation-id-generator.d.ts +3 -0
- package/src/utils/default-logger.d.ts +3 -0
- package/src/utils/default-pluralizer.d.ts +3 -0
- package/bundles/ngrx-data.umd.js +0 -5579
- package/bundles/ngrx-data.umd.js.map +0 -1
- package/esm2015/ngrx-data.js +0 -6
- package/esm2015/src/actions/entity-action-factory.js +0 -44
- package/esm2015/src/actions/entity-cache-action.js +0 -116
- package/esm2015/src/actions/entity-cache-change-set.js +0 -50
- package/esm2015/src/dataservices/entity-cache-data.service.js +0 -148
- package/esm2015/src/dataservices/entity-data.service.js +0 -71
- package/esm2015/src/dataservices/http-url-generator.js +0 -91
- package/esm2015/src/dataservices/persistence-result-handler.service.js +0 -58
- package/esm2015/src/dispatchers/entity-cache-dispatcher.js +0 -169
- package/esm2015/src/dispatchers/entity-dispatcher-base.js +0 -401
- package/esm2015/src/dispatchers/entity-dispatcher-default-options.js +0 -28
- package/esm2015/src/dispatchers/entity-dispatcher-factory.js +0 -68
- package/esm2015/src/effects/entity-cache-effects.js +0 -121
- package/esm2015/src/effects/entity-effects.js +0 -154
- package/esm2015/src/entity-data-without-effects.module.js +0 -133
- package/esm2015/src/entity-data.module.js +0 -110
- package/esm2015/src/entity-metadata/entity-definition.js +0 -26
- package/esm2015/src/entity-metadata/entity-definition.service.js +0 -96
- package/esm2015/src/entity-services/entity-collection-service-elements-factory.js +0 -49
- package/esm2015/src/entity-services/entity-collection-service-factory.js +0 -36
- package/esm2015/src/entity-services/entity-services-base.js +0 -127
- package/esm2015/src/entity-services/entity-services-elements.js +0 -44
- package/esm2015/src/reducers/entity-cache-reducer.js +0 -281
- package/esm2015/src/reducers/entity-change-tracker-base.js +0 -575
- package/esm2015/src/reducers/entity-collection-creator.js +0 -43
- package/esm2015/src/reducers/entity-collection-reducer-methods.js +0 -792
- package/esm2015/src/reducers/entity-collection-reducer-registry.js +0 -72
- package/esm2015/src/reducers/entity-collection-reducer.js +0 -32
- package/esm2015/src/selectors/entity-selectors$.js +0 -59
- package/esm2015/src/selectors/entity-selectors.js +0 -90
- package/esm2015/src/utils/correlation-id-generator.js +0 -28
- package/esm2015/src/utils/default-logger.js +0 -23
- package/esm2015/src/utils/default-pluralizer.js +0 -74
- package/fesm2015/ngrx-data.js.map +0 -1
- package/ngrx-data.metadata.json +0 -1
- package/schematics-core/utility/angular-utils.js +0 -33
- package/schematics-core/utility/angular-utils.js.map +0 -1
package/esm2015/ngrx-data.js
DELETED
|
@@ -1,6 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Generated bundle index. Do not edit.
|
|
3
|
-
*/
|
|
4
|
-
export * from './index';
|
|
5
|
-
export { ENTITY_EFFECTS_SCHEDULER as ɵa } from './src/effects/entity-effects-scheduler';
|
|
6
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmdyeC1kYXRhLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vbW9kdWxlcy9kYXRhL25ncngtZGF0YS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUVILGNBQWMsU0FBUyxDQUFDO0FBRXhCLE9BQU8sRUFBQyx3QkFBd0IsSUFBSSxFQUFFLEVBQUMsTUFBTSx3Q0FBd0MsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogR2VuZXJhdGVkIGJ1bmRsZSBpbmRleC4gRG8gbm90IGVkaXQuXG4gKi9cblxuZXhwb3J0ICogZnJvbSAnLi9pbmRleCc7XG5cbmV4cG9ydCB7RU5USVRZX0VGRkVDVFNfU0NIRURVTEVSIGFzIMm1YX0gZnJvbSAnLi9zcmMvZWZmZWN0cy9lbnRpdHktZWZmZWN0cy1zY2hlZHVsZXInOyJdfQ==
|
|
@@ -1,44 +0,0 @@
|
|
|
1
|
-
import { Injectable } from '@angular/core';
|
|
2
|
-
export class EntityActionFactory {
|
|
3
|
-
// polymorphic create for the two signatures
|
|
4
|
-
create(nameOrPayload, entityOp, data, options) {
|
|
5
|
-
const payload = typeof nameOrPayload === 'string'
|
|
6
|
-
? Object.assign(Object.assign({}, (options || {})), { entityName: nameOrPayload, entityOp,
|
|
7
|
-
data })
|
|
8
|
-
: nameOrPayload;
|
|
9
|
-
return this.createCore(payload);
|
|
10
|
-
}
|
|
11
|
-
/**
|
|
12
|
-
* Create an EntityAction to perform an operation (op) for a particular entity type
|
|
13
|
-
* (entityName) with optional data and other optional flags
|
|
14
|
-
* @param payload Defines the EntityAction and its options
|
|
15
|
-
*/
|
|
16
|
-
createCore(payload) {
|
|
17
|
-
const { entityName, entityOp, tag } = payload;
|
|
18
|
-
if (!entityName) {
|
|
19
|
-
throw new Error('Missing entity name for new action');
|
|
20
|
-
}
|
|
21
|
-
if (entityOp == null) {
|
|
22
|
-
throw new Error('Missing EntityOp for new action');
|
|
23
|
-
}
|
|
24
|
-
const type = this.formatActionType(entityOp, tag || entityName);
|
|
25
|
-
return { type, payload };
|
|
26
|
-
}
|
|
27
|
-
/**
|
|
28
|
-
* Create an EntityAction from another EntityAction, replacing properties with those from newPayload;
|
|
29
|
-
* @param from Source action that is the base for the new action
|
|
30
|
-
* @param newProperties New EntityAction properties that replace the source action properties
|
|
31
|
-
*/
|
|
32
|
-
createFromAction(from, newProperties) {
|
|
33
|
-
return this.create(Object.assign(Object.assign({}, from.payload), newProperties));
|
|
34
|
-
}
|
|
35
|
-
formatActionType(op, tag) {
|
|
36
|
-
return `[${tag}] ${op}`;
|
|
37
|
-
// return `${op} [${tag}]`.toUpperCase(); // example of an alternative
|
|
38
|
-
}
|
|
39
|
-
}
|
|
40
|
-
/** @type {!Array<{type: !Function, args: (undefined|!Array<?>)}>} */
|
|
41
|
-
EntityActionFactory.decorators = [
|
|
42
|
-
{ type: Injectable }
|
|
43
|
-
];
|
|
44
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW50aXR5LWFjdGlvbi1mYWN0b3J5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbW9kdWxlcy9kYXRhL3NyYy9hY3Rpb25zL2VudGl0eS1hY3Rpb24tZmFjdG9yeS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBUzNDLE1BQU0sT0FBTyxtQkFBbUI7SUF1QjlCLDRDQUE0QztJQUM1QyxNQUFNLENBQ0osYUFBOEMsRUFDOUMsUUFBbUIsRUFDbkIsSUFBUSxFQUNSLE9BQTZCO1FBRTdCLE1BQU0sT0FBTyxHQUNYLE9BQU8sYUFBYSxLQUFLLFFBQVE7WUFDL0IsQ0FBQyxDQUFFLGdDQUNJLENBQUMsT0FBTyxJQUFJLEVBQUUsQ0FBQyxLQUNsQixVQUFVLEVBQUUsYUFBYSxFQUN6QixRQUFRO2dCQUNSLElBQUksR0FDc0I7WUFDOUIsQ0FBQyxDQUFDLGFBQWEsQ0FBQztRQUNwQixPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDbEMsQ0FBQztJQUVEOzs7O09BSUc7SUFDTyxVQUFVLENBQVUsT0FBK0I7UUFDM0QsTUFBTSxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsR0FBRyxFQUFFLEdBQUcsT0FBTyxDQUFDO1FBQzlDLElBQUksQ0FBQyxVQUFVLEVBQUU7WUFDZixNQUFNLElBQUksS0FBSyxDQUFDLG9DQUFvQyxDQUFDLENBQUM7U0FDdkQ7UUFDRCxJQUFJLFFBQVEsSUFBSSxJQUFJLEVBQUU7WUFDcEIsTUFBTSxJQUFJLEtBQUssQ0FBQyxpQ0FBaUMsQ0FBQyxDQUFDO1NBQ3BEO1FBQ0QsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFFBQVEsRUFBRSxHQUFHLElBQUksVUFBVSxDQUFDLENBQUM7UUFDaEUsT0FBTyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsQ0FBQztJQUMzQixDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILGdCQUFnQixDQUNkLElBQWtCLEVBQ2xCLGFBQThDO1FBRTlDLE9BQU8sSUFBSSxDQUFDLE1BQU0saUNBQU0sSUFBSSxDQUFDLE9BQU8sR0FBSyxhQUFhLEVBQUcsQ0FBQztJQUM1RCxDQUFDO0lBRUQsZ0JBQWdCLENBQUMsRUFBVSxFQUFFLEdBQVc7UUFDdEMsT0FBTyxJQUFJLEdBQUcsS0FBSyxFQUFFLEVBQUUsQ0FBQztRQUN4QixzRUFBc0U7SUFDeEUsQ0FBQzs7OztZQTNFRixVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQgeyBFbnRpdHlPcCB9IGZyb20gJy4vZW50aXR5LW9wJztcbmltcG9ydCB7XG4gIEVudGl0eUFjdGlvbixcbiAgRW50aXR5QWN0aW9uT3B0aW9ucyxcbiAgRW50aXR5QWN0aW9uUGF5bG9hZCxcbn0gZnJvbSAnLi9lbnRpdHktYWN0aW9uJztcbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBFbnRpdHlBY3Rpb25GYWN0b3J5IHtcbiAgLyoqXG4gICAqIENyZWF0ZSBhbiBFbnRpdHlBY3Rpb24gdG8gcGVyZm9ybSBhbiBvcGVyYXRpb24gKG9wKSBmb3IgYSBwYXJ0aWN1bGFyIGVudGl0eSB0eXBlXG4gICAqIChlbnRpdHlOYW1lKSB3aXRoIG9wdGlvbmFsIGRhdGEgYW5kIG90aGVyIG9wdGlvbmFsIGZsYWdzXG4gICAqIEBwYXJhbSBlbnRpdHlOYW1lIE5hbWUgb2YgdGhlIGVudGl0eSB0eXBlXG4gICAqIEBwYXJhbSBlbnRpdHlPcCBPcGVyYXRpb24gdG8gcGVyZm9ybSAoRW50aXR5T3ApXG4gICAqIEBwYXJhbSBbZGF0YV0gZGF0YSBmb3IgdGhlIG9wZXJhdGlvblxuICAgKiBAcGFyYW0gW29wdGlvbnNdIGFkZGl0aW9uYWwgb3B0aW9uc1xuICAgKi9cbiAgY3JlYXRlPFAgPSBhbnk+KFxuICAgIGVudGl0eU5hbWU6IHN0cmluZyxcbiAgICBlbnRpdHlPcDogRW50aXR5T3AsXG4gICAgZGF0YT86IFAsXG4gICAgb3B0aW9ucz86IEVudGl0eUFjdGlvbk9wdGlvbnNcbiAgKTogRW50aXR5QWN0aW9uPFA+O1xuXG4gIC8qKlxuICAgKiBDcmVhdGUgYW4gRW50aXR5QWN0aW9uIHRvIHBlcmZvcm0gYW4gb3BlcmF0aW9uIChvcCkgZm9yIGEgcGFydGljdWxhciBlbnRpdHkgdHlwZVxuICAgKiAoZW50aXR5TmFtZSkgd2l0aCBvcHRpb25hbCBkYXRhIGFuZCBvdGhlciBvcHRpb25hbCBmbGFnc1xuICAgKiBAcGFyYW0gcGF5bG9hZCBEZWZpbmVzIHRoZSBFbnRpdHlBY3Rpb24gYW5kIGl0cyBvcHRpb25zXG4gICAqL1xuICBjcmVhdGU8UCA9IGFueT4ocGF5bG9hZDogRW50aXR5QWN0aW9uUGF5bG9hZDxQPik6IEVudGl0eUFjdGlvbjxQPjtcblxuICAvLyBwb2x5bW9ycGhpYyBjcmVhdGUgZm9yIHRoZSB0d28gc2lnbmF0dXJlc1xuICBjcmVhdGU8UCA9IGFueT4oXG4gICAgbmFtZU9yUGF5bG9hZDogRW50aXR5QWN0aW9uUGF5bG9hZDxQPiB8IHN0cmluZyxcbiAgICBlbnRpdHlPcD86IEVudGl0eU9wLFxuICAgIGRhdGE/OiBQLFxuICAgIG9wdGlvbnM/OiBFbnRpdHlBY3Rpb25PcHRpb25zXG4gICk6IEVudGl0eUFjdGlvbjxQPiB7XG4gICAgY29uc3QgcGF5bG9hZDogRW50aXR5QWN0aW9uUGF5bG9hZDxQPiA9XG4gICAgICB0eXBlb2YgbmFtZU9yUGF5bG9hZCA9PT0gJ3N0cmluZydcbiAgICAgICAgPyAoe1xuICAgICAgICAgICAgLi4uKG9wdGlvbnMgfHwge30pLFxuICAgICAgICAgICAgZW50aXR5TmFtZTogbmFtZU9yUGF5bG9hZCxcbiAgICAgICAgICAgIGVudGl0eU9wLFxuICAgICAgICAgICAgZGF0YSxcbiAgICAgICAgICB9IGFzIEVudGl0eUFjdGlvblBheWxvYWQ8UD4pXG4gICAgICAgIDogbmFtZU9yUGF5bG9hZDtcbiAgICByZXR1cm4gdGhpcy5jcmVhdGVDb3JlKHBheWxvYWQpO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhbiBFbnRpdHlBY3Rpb24gdG8gcGVyZm9ybSBhbiBvcGVyYXRpb24gKG9wKSBmb3IgYSBwYXJ0aWN1bGFyIGVudGl0eSB0eXBlXG4gICAqIChlbnRpdHlOYW1lKSB3aXRoIG9wdGlvbmFsIGRhdGEgYW5kIG90aGVyIG9wdGlvbmFsIGZsYWdzXG4gICAqIEBwYXJhbSBwYXlsb2FkIERlZmluZXMgdGhlIEVudGl0eUFjdGlvbiBhbmQgaXRzIG9wdGlvbnNcbiAgICovXG4gIHByb3RlY3RlZCBjcmVhdGVDb3JlPFAgPSBhbnk+KHBheWxvYWQ6IEVudGl0eUFjdGlvblBheWxvYWQ8UD4pIHtcbiAgICBjb25zdCB7IGVudGl0eU5hbWUsIGVudGl0eU9wLCB0YWcgfSA9IHBheWxvYWQ7XG4gICAgaWYgKCFlbnRpdHlOYW1lKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ01pc3NpbmcgZW50aXR5IG5hbWUgZm9yIG5ldyBhY3Rpb24nKTtcbiAgICB9XG4gICAgaWYgKGVudGl0eU9wID09IG51bGwpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignTWlzc2luZyBFbnRpdHlPcCBmb3IgbmV3IGFjdGlvbicpO1xuICAgIH1cbiAgICBjb25zdCB0eXBlID0gdGhpcy5mb3JtYXRBY3Rpb25UeXBlKGVudGl0eU9wLCB0YWcgfHwgZW50aXR5TmFtZSk7XG4gICAgcmV0dXJuIHsgdHlwZSwgcGF5bG9hZCB9O1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhbiBFbnRpdHlBY3Rpb24gZnJvbSBhbm90aGVyIEVudGl0eUFjdGlvbiwgcmVwbGFjaW5nIHByb3BlcnRpZXMgd2l0aCB0aG9zZSBmcm9tIG5ld1BheWxvYWQ7XG4gICAqIEBwYXJhbSBmcm9tIFNvdXJjZSBhY3Rpb24gdGhhdCBpcyB0aGUgYmFzZSBmb3IgdGhlIG5ldyBhY3Rpb25cbiAgICogQHBhcmFtIG5ld1Byb3BlcnRpZXMgTmV3IEVudGl0eUFjdGlvbiBwcm9wZXJ0aWVzIHRoYXQgcmVwbGFjZSB0aGUgc291cmNlIGFjdGlvbiBwcm9wZXJ0aWVzXG4gICAqL1xuICBjcmVhdGVGcm9tQWN0aW9uPFAgPSBhbnk+KFxuICAgIGZyb206IEVudGl0eUFjdGlvbixcbiAgICBuZXdQcm9wZXJ0aWVzOiBQYXJ0aWFsPEVudGl0eUFjdGlvblBheWxvYWQ8UD4+XG4gICk6IEVudGl0eUFjdGlvbjxQPiB7XG4gICAgcmV0dXJuIHRoaXMuY3JlYXRlKHsgLi4uZnJvbS5wYXlsb2FkLCAuLi5uZXdQcm9wZXJ0aWVzIH0pO1xuICB9XG5cbiAgZm9ybWF0QWN0aW9uVHlwZShvcDogc3RyaW5nLCB0YWc6IHN0cmluZykge1xuICAgIHJldHVybiBgWyR7dGFnfV0gJHtvcH1gO1xuICAgIC8vIHJldHVybiBgJHtvcH0gWyR7dGFnfV1gLnRvVXBwZXJDYXNlKCk7IC8vIGV4YW1wbGUgb2YgYW4gYWx0ZXJuYXRpdmVcbiAgfVxufVxuIl19
|
|
@@ -1,116 +0,0 @@
|
|
|
1
|
-
export { ChangeSetOperation } from './entity-cache-change-set';
|
|
2
|
-
import { MergeStrategy } from '../actions/merge-strategy';
|
|
3
|
-
export var EntityCacheAction;
|
|
4
|
-
(function (EntityCacheAction) {
|
|
5
|
-
EntityCacheAction["CLEAR_COLLECTIONS"] = "@ngrx/data/entity-cache/clear-collections";
|
|
6
|
-
EntityCacheAction["LOAD_COLLECTIONS"] = "@ngrx/data/entity-cache/load-collections";
|
|
7
|
-
EntityCacheAction["MERGE_QUERY_SET"] = "@ngrx/data/entity-cache/merge-query-set";
|
|
8
|
-
EntityCacheAction["SET_ENTITY_CACHE"] = "@ngrx/data/entity-cache/set-cache";
|
|
9
|
-
EntityCacheAction["SAVE_ENTITIES"] = "@ngrx/data/entity-cache/save-entities";
|
|
10
|
-
EntityCacheAction["SAVE_ENTITIES_CANCEL"] = "@ngrx/data/entity-cache/save-entities-cancel";
|
|
11
|
-
EntityCacheAction["SAVE_ENTITIES_CANCELED"] = "@ngrx/data/entity-cache/save-entities-canceled";
|
|
12
|
-
EntityCacheAction["SAVE_ENTITIES_ERROR"] = "@ngrx/data/entity-cache/save-entities-error";
|
|
13
|
-
EntityCacheAction["SAVE_ENTITIES_SUCCESS"] = "@ngrx/data/entity-cache/save-entities-success";
|
|
14
|
-
})(EntityCacheAction || (EntityCacheAction = {}));
|
|
15
|
-
/**
|
|
16
|
-
* Clear the collections identified in the collectionSet.
|
|
17
|
-
* @param [collections] Array of names of the collections to clear.
|
|
18
|
-
* If empty array, does nothing. If no array, clear all collections.
|
|
19
|
-
* @param [tag] Optional tag to identify the operation from the app perspective.
|
|
20
|
-
*/
|
|
21
|
-
export class ClearCollections {
|
|
22
|
-
constructor(collections, tag) {
|
|
23
|
-
this.type = EntityCacheAction.CLEAR_COLLECTIONS;
|
|
24
|
-
this.payload = { collections, tag };
|
|
25
|
-
}
|
|
26
|
-
}
|
|
27
|
-
/**
|
|
28
|
-
* Create entity cache action that loads multiple entity collections at the same time.
|
|
29
|
-
* before any selectors$ observables emit.
|
|
30
|
-
* @param querySet The collections to load, typically the result of a query.
|
|
31
|
-
* @param [tag] Optional tag to identify the operation from the app perspective.
|
|
32
|
-
* in the form of a map of entity collections.
|
|
33
|
-
*/
|
|
34
|
-
export class LoadCollections {
|
|
35
|
-
constructor(collections, tag) {
|
|
36
|
-
this.type = EntityCacheAction.LOAD_COLLECTIONS;
|
|
37
|
-
this.payload = { collections, tag };
|
|
38
|
-
}
|
|
39
|
-
}
|
|
40
|
-
/**
|
|
41
|
-
* Create entity cache action that merges entities from a query result
|
|
42
|
-
* that returned entities from multiple collections.
|
|
43
|
-
* Corresponding entity cache reducer should add and update all collections
|
|
44
|
-
* at the same time, before any selectors$ observables emit.
|
|
45
|
-
* @param querySet The result of the query in the form of a map of entity collections.
|
|
46
|
-
* These are the entity data to merge into the respective collections.
|
|
47
|
-
* @param mergeStrategy How to merge a queried entity when it is already in the collection.
|
|
48
|
-
* The default is MergeStrategy.PreserveChanges
|
|
49
|
-
* @param [tag] Optional tag to identify the operation from the app perspective.
|
|
50
|
-
*/
|
|
51
|
-
export class MergeQuerySet {
|
|
52
|
-
constructor(querySet, mergeStrategy, tag) {
|
|
53
|
-
this.type = EntityCacheAction.MERGE_QUERY_SET;
|
|
54
|
-
this.payload = {
|
|
55
|
-
querySet,
|
|
56
|
-
mergeStrategy: mergeStrategy === null ? MergeStrategy.PreserveChanges : mergeStrategy,
|
|
57
|
-
tag,
|
|
58
|
-
};
|
|
59
|
-
}
|
|
60
|
-
}
|
|
61
|
-
/**
|
|
62
|
-
* Create entity cache action for replacing the entire entity cache.
|
|
63
|
-
* Dangerous because brute force but useful as when re-hydrating an EntityCache
|
|
64
|
-
* from local browser storage when the application launches.
|
|
65
|
-
* @param cache New state of the entity cache
|
|
66
|
-
* @param [tag] Optional tag to identify the operation from the app perspective.
|
|
67
|
-
*/
|
|
68
|
-
export class SetEntityCache {
|
|
69
|
-
constructor(cache, tag) {
|
|
70
|
-
this.cache = cache;
|
|
71
|
-
this.type = EntityCacheAction.SET_ENTITY_CACHE;
|
|
72
|
-
this.payload = { cache, tag };
|
|
73
|
-
}
|
|
74
|
-
}
|
|
75
|
-
// #region SaveEntities
|
|
76
|
-
export class SaveEntities {
|
|
77
|
-
constructor(changeSet, url, options) {
|
|
78
|
-
this.type = EntityCacheAction.SAVE_ENTITIES;
|
|
79
|
-
options = options || {};
|
|
80
|
-
if (changeSet) {
|
|
81
|
-
changeSet.tag = changeSet.tag || options.tag;
|
|
82
|
-
}
|
|
83
|
-
this.payload = Object.assign(Object.assign({ changeSet, url }, options), { tag: changeSet.tag });
|
|
84
|
-
}
|
|
85
|
-
}
|
|
86
|
-
export class SaveEntitiesCancel {
|
|
87
|
-
constructor(correlationId, reason, entityNames, tag) {
|
|
88
|
-
this.type = EntityCacheAction.SAVE_ENTITIES_CANCEL;
|
|
89
|
-
this.payload = { correlationId, reason, entityNames, tag };
|
|
90
|
-
}
|
|
91
|
-
}
|
|
92
|
-
export class SaveEntitiesCanceled {
|
|
93
|
-
constructor(correlationId, reason, tag) {
|
|
94
|
-
this.type = EntityCacheAction.SAVE_ENTITIES_CANCELED;
|
|
95
|
-
this.payload = { correlationId, reason, tag };
|
|
96
|
-
}
|
|
97
|
-
}
|
|
98
|
-
export class SaveEntitiesError {
|
|
99
|
-
constructor(error, originalAction) {
|
|
100
|
-
this.type = EntityCacheAction.SAVE_ENTITIES_ERROR;
|
|
101
|
-
const correlationId = originalAction.payload.correlationId;
|
|
102
|
-
this.payload = { error, originalAction, correlationId };
|
|
103
|
-
}
|
|
104
|
-
}
|
|
105
|
-
export class SaveEntitiesSuccess {
|
|
106
|
-
constructor(changeSet, url, options) {
|
|
107
|
-
this.type = EntityCacheAction.SAVE_ENTITIES_SUCCESS;
|
|
108
|
-
options = options || {};
|
|
109
|
-
if (changeSet) {
|
|
110
|
-
changeSet.tag = changeSet.tag || options.tag;
|
|
111
|
-
}
|
|
112
|
-
this.payload = Object.assign(Object.assign({ changeSet, url }, options), { tag: changeSet.tag });
|
|
113
|
-
}
|
|
114
|
-
}
|
|
115
|
-
// #endregion SaveEntities
|
|
116
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW50aXR5LWNhY2hlLWFjdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL21vZHVsZXMvZGF0YS9zcmMvYWN0aW9ucy9lbnRpdHktY2FjaGUtYWN0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQU1BLE9BQU8sRUFBYSxrQkFBa0IsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBSzFFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUUxRCxNQUFNLENBQU4sSUFBWSxpQkFXWDtBQVhELFdBQVksaUJBQWlCO0lBQzNCLG9GQUErRCxDQUFBO0lBQy9ELGtGQUE2RCxDQUFBO0lBQzdELGdGQUEyRCxDQUFBO0lBQzNELDJFQUFzRCxDQUFBO0lBRXRELDRFQUF1RCxDQUFBO0lBQ3ZELDBGQUFxRSxDQUFBO0lBQ3JFLDhGQUF5RSxDQUFBO0lBQ3pFLHdGQUFtRSxDQUFBO0lBQ25FLDRGQUF1RSxDQUFBO0FBQ3pFLENBQUMsRUFYVyxpQkFBaUIsS0FBakIsaUJBQWlCLFFBVzVCO0FBV0Q7Ozs7O0dBS0c7QUFDSCxNQUFNLE9BQU8sZ0JBQWdCO0lBSTNCLFlBQVksV0FBc0IsRUFBRSxHQUFZO1FBRnZDLFNBQUksR0FBRyxpQkFBaUIsQ0FBQyxpQkFBaUIsQ0FBQztRQUdsRCxJQUFJLENBQUMsT0FBTyxHQUFHLEVBQUUsV0FBVyxFQUFFLEdBQUcsRUFBRSxDQUFDO0lBQ3RDLENBQUM7Q0FDRjtBQUVEOzs7Ozs7R0FNRztBQUNILE1BQU0sT0FBTyxlQUFlO0lBSTFCLFlBQVksV0FBZ0MsRUFBRSxHQUFZO1FBRmpELFNBQUksR0FBRyxpQkFBaUIsQ0FBQyxnQkFBZ0IsQ0FBQztRQUdqRCxJQUFJLENBQUMsT0FBTyxHQUFHLEVBQUUsV0FBVyxFQUFFLEdBQUcsRUFBRSxDQUFDO0lBQ3RDLENBQUM7Q0FDRjtBQUVEOzs7Ozs7Ozs7O0dBVUc7QUFDSCxNQUFNLE9BQU8sYUFBYTtJQVN4QixZQUNFLFFBQTZCLEVBQzdCLGFBQTZCLEVBQzdCLEdBQVk7UUFMTCxTQUFJLEdBQUcsaUJBQWlCLENBQUMsZUFBZSxDQUFDO1FBT2hELElBQUksQ0FBQyxPQUFPLEdBQUc7WUFDYixRQUFRO1lBQ1IsYUFBYSxFQUNYLGFBQWEsS0FBSyxJQUFJLENBQUMsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDLGFBQWE7WUFDeEUsR0FBRztTQUNKLENBQUM7SUFDSixDQUFDO0NBQ0Y7QUFFRDs7Ozs7O0dBTUc7QUFDSCxNQUFNLE9BQU8sY0FBYztJQUl6QixZQUE0QixLQUFrQixFQUFFLEdBQVk7UUFBaEMsVUFBSyxHQUFMLEtBQUssQ0FBYTtRQUZyQyxTQUFJLEdBQUcsaUJBQWlCLENBQUMsZ0JBQWdCLENBQUM7UUFHakQsSUFBSSxDQUFDLE9BQU8sR0FBRyxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsQ0FBQztJQUNoQyxDQUFDO0NBQ0Y7QUFFRCx1QkFBdUI7QUFDdkIsTUFBTSxPQUFPLFlBQVk7SUFhdkIsWUFDRSxTQUFvQixFQUNwQixHQUFXLEVBQ1gsT0FBNkI7UUFMdEIsU0FBSSxHQUFHLGlCQUFpQixDQUFDLGFBQWEsQ0FBQztRQU85QyxPQUFPLEdBQUcsT0FBTyxJQUFJLEVBQUUsQ0FBQztRQUN4QixJQUFJLFNBQVMsRUFBRTtZQUNiLFNBQVMsQ0FBQyxHQUFHLEdBQUcsU0FBUyxDQUFDLEdBQUcsSUFBSSxPQUFPLENBQUMsR0FBRyxDQUFDO1NBQzlDO1FBQ0QsSUFBSSxDQUFDLE9BQU8saUNBQUssU0FBUyxFQUFFLEdBQUcsSUFBSyxPQUFPLEtBQUUsR0FBRyxFQUFFLFNBQVMsQ0FBQyxHQUFHLEdBQUUsQ0FBQztJQUNwRSxDQUFDO0NBQ0Y7QUFFRCxNQUFNLE9BQU8sa0JBQWtCO0lBUzdCLFlBQ0UsYUFBa0IsRUFDbEIsTUFBZSxFQUNmLFdBQXNCLEVBQ3RCLEdBQVk7UUFOTCxTQUFJLEdBQUcsaUJBQWlCLENBQUMsb0JBQW9CLENBQUM7UUFRckQsSUFBSSxDQUFDLE9BQU8sR0FBRyxFQUFFLGFBQWEsRUFBRSxNQUFNLEVBQUUsV0FBVyxFQUFFLEdBQUcsRUFBRSxDQUFDO0lBQzdELENBQUM7Q0FDRjtBQUVELE1BQU0sT0FBTyxvQkFBb0I7SUFRL0IsWUFBWSxhQUFrQixFQUFFLE1BQWUsRUFBRSxHQUFZO1FBRnBELFNBQUksR0FBRyxpQkFBaUIsQ0FBQyxzQkFBc0IsQ0FBQztRQUd2RCxJQUFJLENBQUMsT0FBTyxHQUFHLEVBQUUsYUFBYSxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsQ0FBQztJQUNoRCxDQUFDO0NBQ0Y7QUFFRCxNQUFNLE9BQU8saUJBQWlCO0lBTzVCLFlBQVksS0FBdUIsRUFBRSxjQUE0QjtRQUR4RCxTQUFJLEdBQUcsaUJBQWlCLENBQUMsbUJBQW1CLENBQUM7UUFFcEQsTUFBTSxhQUFhLEdBQUcsY0FBYyxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUM7UUFDM0QsSUFBSSxDQUFDLE9BQU8sR0FBRyxFQUFFLEtBQUssRUFBRSxjQUFjLEVBQUUsYUFBYSxFQUFFLENBQUM7SUFDMUQsQ0FBQztDQUNGO0FBRUQsTUFBTSxPQUFPLG1CQUFtQjtJQWE5QixZQUNFLFNBQW9CLEVBQ3BCLEdBQVcsRUFDWCxPQUE2QjtRQUx0QixTQUFJLEdBQUcsaUJBQWlCLENBQUMscUJBQXFCLENBQUM7UUFPdEQsT0FBTyxHQUFHLE9BQU8sSUFBSSxFQUFFLENBQUM7UUFDeEIsSUFBSSxTQUFTLEVBQUU7WUFDYixTQUFTLENBQUMsR0FBRyxHQUFHLFNBQVMsQ0FBQyxHQUFHLElBQUksT0FBTyxDQUFDLEdBQUcsQ0FBQztTQUM5QztRQUNELElBQUksQ0FBQyxPQUFPLGlDQUFLLFNBQVMsRUFBRSxHQUFHLElBQUssT0FBTyxLQUFFLEdBQUcsRUFBRSxTQUFTLENBQUMsR0FBRyxHQUFFLENBQUM7SUFDcEUsQ0FBQztDQUNGO0FBQ0QsMEJBQTBCIiwic291cmNlc0NvbnRlbnQiOlsiLypcbiAqIEFjdGlvbnMgZGVkaWNhdGVkIHRvIHRoZSBFbnRpdHlDYWNoZSBhcyBhIHdob2xlXG4gKi9cbmltcG9ydCB7IEFjdGlvbiB9IGZyb20gJ0BuZ3J4L3N0b3JlJztcblxuaW1wb3J0IHsgQ2hhbmdlU2V0LCBDaGFuZ2VTZXRPcGVyYXRpb24gfSBmcm9tICcuL2VudGl0eS1jYWNoZS1jaGFuZ2Utc2V0JztcbmV4cG9ydCB7IENoYW5nZVNldCwgQ2hhbmdlU2V0T3BlcmF0aW9uIH0gZnJvbSAnLi9lbnRpdHktY2FjaGUtY2hhbmdlLXNldCc7XG5cbmltcG9ydCB7IERhdGFTZXJ2aWNlRXJyb3IgfSBmcm9tICcuLi9kYXRhc2VydmljZXMvZGF0YS1zZXJ2aWNlLWVycm9yJztcbmltcG9ydCB7IEVudGl0eUFjdGlvbk9wdGlvbnMgfSBmcm9tICcuLi9hY3Rpb25zL2VudGl0eS1hY3Rpb24nO1xuaW1wb3J0IHsgRW50aXR5Q2FjaGUgfSBmcm9tICcuLi9yZWR1Y2Vycy9lbnRpdHktY2FjaGUnO1xuaW1wb3J0IHsgTWVyZ2VTdHJhdGVneSB9IGZyb20gJy4uL2FjdGlvbnMvbWVyZ2Utc3RyYXRlZ3knO1xuXG5leHBvcnQgZW51bSBFbnRpdHlDYWNoZUFjdGlvbiB7XG4gIENMRUFSX0NPTExFQ1RJT05TID0gJ0BuZ3J4L2RhdGEvZW50aXR5LWNhY2hlL2NsZWFyLWNvbGxlY3Rpb25zJyxcbiAgTE9BRF9DT0xMRUNUSU9OUyA9ICdAbmdyeC9kYXRhL2VudGl0eS1jYWNoZS9sb2FkLWNvbGxlY3Rpb25zJyxcbiAgTUVSR0VfUVVFUllfU0VUID0gJ0BuZ3J4L2RhdGEvZW50aXR5LWNhY2hlL21lcmdlLXF1ZXJ5LXNldCcsXG4gIFNFVF9FTlRJVFlfQ0FDSEUgPSAnQG5ncngvZGF0YS9lbnRpdHktY2FjaGUvc2V0LWNhY2hlJyxcblxuICBTQVZFX0VOVElUSUVTID0gJ0BuZ3J4L2RhdGEvZW50aXR5LWNhY2hlL3NhdmUtZW50aXRpZXMnLFxuICBTQVZFX0VOVElUSUVTX0NBTkNFTCA9ICdAbmdyeC9kYXRhL2VudGl0eS1jYWNoZS9zYXZlLWVudGl0aWVzLWNhbmNlbCcsXG4gIFNBVkVfRU5USVRJRVNfQ0FOQ0VMRUQgPSAnQG5ncngvZGF0YS9lbnRpdHktY2FjaGUvc2F2ZS1lbnRpdGllcy1jYW5jZWxlZCcsXG4gIFNBVkVfRU5USVRJRVNfRVJST1IgPSAnQG5ncngvZGF0YS9lbnRpdHktY2FjaGUvc2F2ZS1lbnRpdGllcy1lcnJvcicsXG4gIFNBVkVfRU5USVRJRVNfU1VDQ0VTUyA9ICdAbmdyeC9kYXRhL2VudGl0eS1jYWNoZS9zYXZlLWVudGl0aWVzLXN1Y2Nlc3MnLFxufVxuXG4vKipcbiAqIEhhc2ggb2YgZW50aXRpZXMga2V5ZWQgYnkgRW50aXR5Q29sbGVjdGlvbiBuYW1lLFxuICogdHlwaWNhbGx5IHRoZSByZXN1bHQgb2YgYSBxdWVyeSB0aGF0IHJldHVybmVkIHJlc3VsdHMgZnJvbSBhIG11bHRpLWNvbGxlY3Rpb24gcXVlcnlcbiAqIHRoYXQgd2lsbCBiZSBtZXJnZWQgaW50byBhbiBFbnRpdHlDYWNoZSB2aWEgdGhlIGBNZXJnZVF1ZXJ5U2V0YCBhY3Rpb24uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRW50aXR5Q2FjaGVRdWVyeVNldCB7XG4gIFtlbnRpdHlOYW1lOiBzdHJpbmddOiBhbnlbXTtcbn1cblxuLyoqXG4gKiBDbGVhciB0aGUgY29sbGVjdGlvbnMgaWRlbnRpZmllZCBpbiB0aGUgY29sbGVjdGlvblNldC5cbiAqIEBwYXJhbSBbY29sbGVjdGlvbnNdIEFycmF5IG9mIG5hbWVzIG9mIHRoZSBjb2xsZWN0aW9ucyB0byBjbGVhci5cbiAqIElmIGVtcHR5IGFycmF5LCBkb2VzIG5vdGhpbmcuIElmIG5vIGFycmF5LCBjbGVhciBhbGwgY29sbGVjdGlvbnMuXG4gKiBAcGFyYW0gW3RhZ10gT3B0aW9uYWwgdGFnIHRvIGlkZW50aWZ5IHRoZSBvcGVyYXRpb24gZnJvbSB0aGUgYXBwIHBlcnNwZWN0aXZlLlxuICovXG5leHBvcnQgY2xhc3MgQ2xlYXJDb2xsZWN0aW9ucyBpbXBsZW1lbnRzIEFjdGlvbiB7XG4gIHJlYWRvbmx5IHBheWxvYWQ6IHsgY29sbGVjdGlvbnM/OiBzdHJpbmdbXTsgdGFnPzogc3RyaW5nIH07XG4gIHJlYWRvbmx5IHR5cGUgPSBFbnRpdHlDYWNoZUFjdGlvbi5DTEVBUl9DT0xMRUNUSU9OUztcblxuICBjb25zdHJ1Y3Rvcihjb2xsZWN0aW9ucz86IHN0cmluZ1tdLCB0YWc/OiBzdHJpbmcpIHtcbiAgICB0aGlzLnBheWxvYWQgPSB7IGNvbGxlY3Rpb25zLCB0YWcgfTtcbiAgfVxufVxuXG4vKipcbiAqIENyZWF0ZSBlbnRpdHkgY2FjaGUgYWN0aW9uIHRoYXQgbG9hZHMgbXVsdGlwbGUgZW50aXR5IGNvbGxlY3Rpb25zIGF0IHRoZSBzYW1lIHRpbWUuXG4gKiBiZWZvcmUgYW55IHNlbGVjdG9ycyQgb2JzZXJ2YWJsZXMgZW1pdC5cbiAqIEBwYXJhbSBxdWVyeVNldCBUaGUgY29sbGVjdGlvbnMgdG8gbG9hZCwgdHlwaWNhbGx5IHRoZSByZXN1bHQgb2YgYSBxdWVyeS5cbiAqIEBwYXJhbSBbdGFnXSBPcHRpb25hbCB0YWcgdG8gaWRlbnRpZnkgdGhlIG9wZXJhdGlvbiBmcm9tIHRoZSBhcHAgcGVyc3BlY3RpdmUuXG4gKiBpbiB0aGUgZm9ybSBvZiBhIG1hcCBvZiBlbnRpdHkgY29sbGVjdGlvbnMuXG4gKi9cbmV4cG9ydCBjbGFzcyBMb2FkQ29sbGVjdGlvbnMgaW1wbGVtZW50cyBBY3Rpb24ge1xuICByZWFkb25seSBwYXlsb2FkOiB7IGNvbGxlY3Rpb25zOiBFbnRpdHlDYWNoZVF1ZXJ5U2V0OyB0YWc/OiBzdHJpbmcgfTtcbiAgcmVhZG9ubHkgdHlwZSA9IEVudGl0eUNhY2hlQWN0aW9uLkxPQURfQ09MTEVDVElPTlM7XG5cbiAgY29uc3RydWN0b3IoY29sbGVjdGlvbnM6IEVudGl0eUNhY2hlUXVlcnlTZXQsIHRhZz86IHN0cmluZykge1xuICAgIHRoaXMucGF5bG9hZCA9IHsgY29sbGVjdGlvbnMsIHRhZyB9O1xuICB9XG59XG5cbi8qKlxuICogQ3JlYXRlIGVudGl0eSBjYWNoZSBhY3Rpb24gdGhhdCBtZXJnZXMgZW50aXRpZXMgZnJvbSBhIHF1ZXJ5IHJlc3VsdFxuICogdGhhdCByZXR1cm5lZCBlbnRpdGllcyBmcm9tIG11bHRpcGxlIGNvbGxlY3Rpb25zLlxuICogQ29ycmVzcG9uZGluZyBlbnRpdHkgY2FjaGUgcmVkdWNlciBzaG91bGQgYWRkIGFuZCB1cGRhdGUgYWxsIGNvbGxlY3Rpb25zXG4gKiBhdCB0aGUgc2FtZSB0aW1lLCBiZWZvcmUgYW55IHNlbGVjdG9ycyQgb2JzZXJ2YWJsZXMgZW1pdC5cbiAqIEBwYXJhbSBxdWVyeVNldCBUaGUgcmVzdWx0IG9mIHRoZSBxdWVyeSBpbiB0aGUgZm9ybSBvZiBhIG1hcCBvZiBlbnRpdHkgY29sbGVjdGlvbnMuXG4gKiBUaGVzZSBhcmUgdGhlIGVudGl0eSBkYXRhIHRvIG1lcmdlIGludG8gdGhlIHJlc3BlY3RpdmUgY29sbGVjdGlvbnMuXG4gKiBAcGFyYW0gbWVyZ2VTdHJhdGVneSBIb3cgdG8gbWVyZ2UgYSBxdWVyaWVkIGVudGl0eSB3aGVuIGl0IGlzIGFscmVhZHkgaW4gdGhlIGNvbGxlY3Rpb24uXG4gKiBUaGUgZGVmYXVsdCBpcyBNZXJnZVN0cmF0ZWd5LlByZXNlcnZlQ2hhbmdlc1xuICogQHBhcmFtIFt0YWddIE9wdGlvbmFsIHRhZyB0byBpZGVudGlmeSB0aGUgb3BlcmF0aW9uIGZyb20gdGhlIGFwcCBwZXJzcGVjdGl2ZS5cbiAqL1xuZXhwb3J0IGNsYXNzIE1lcmdlUXVlcnlTZXQgaW1wbGVtZW50cyBBY3Rpb24ge1xuICByZWFkb25seSBwYXlsb2FkOiB7XG4gICAgcXVlcnlTZXQ6IEVudGl0eUNhY2hlUXVlcnlTZXQ7XG4gICAgbWVyZ2VTdHJhdGVneT86IE1lcmdlU3RyYXRlZ3k7XG4gICAgdGFnPzogc3RyaW5nO1xuICB9O1xuXG4gIHJlYWRvbmx5IHR5cGUgPSBFbnRpdHlDYWNoZUFjdGlvbi5NRVJHRV9RVUVSWV9TRVQ7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcXVlcnlTZXQ6IEVudGl0eUNhY2hlUXVlcnlTZXQsXG4gICAgbWVyZ2VTdHJhdGVneT86IE1lcmdlU3RyYXRlZ3ksXG4gICAgdGFnPzogc3RyaW5nXG4gICkge1xuICAgIHRoaXMucGF5bG9hZCA9IHtcbiAgICAgIHF1ZXJ5U2V0LFxuICAgICAgbWVyZ2VTdHJhdGVneTpcbiAgICAgICAgbWVyZ2VTdHJhdGVneSA9PT0gbnVsbCA/IE1lcmdlU3RyYXRlZ3kuUHJlc2VydmVDaGFuZ2VzIDogbWVyZ2VTdHJhdGVneSxcbiAgICAgIHRhZyxcbiAgICB9O1xuICB9XG59XG5cbi8qKlxuICogQ3JlYXRlIGVudGl0eSBjYWNoZSBhY3Rpb24gZm9yIHJlcGxhY2luZyB0aGUgZW50aXJlIGVudGl0eSBjYWNoZS5cbiAqIERhbmdlcm91cyBiZWNhdXNlIGJydXRlIGZvcmNlIGJ1dCB1c2VmdWwgYXMgd2hlbiByZS1oeWRyYXRpbmcgYW4gRW50aXR5Q2FjaGVcbiAqIGZyb20gbG9jYWwgYnJvd3NlciBzdG9yYWdlIHdoZW4gdGhlIGFwcGxpY2F0aW9uIGxhdW5jaGVzLlxuICogQHBhcmFtIGNhY2hlIE5ldyBzdGF0ZSBvZiB0aGUgZW50aXR5IGNhY2hlXG4gKiBAcGFyYW0gW3RhZ10gT3B0aW9uYWwgdGFnIHRvIGlkZW50aWZ5IHRoZSBvcGVyYXRpb24gZnJvbSB0aGUgYXBwIHBlcnNwZWN0aXZlLlxuICovXG5leHBvcnQgY2xhc3MgU2V0RW50aXR5Q2FjaGUgaW1wbGVtZW50cyBBY3Rpb24ge1xuICByZWFkb25seSBwYXlsb2FkOiB7IGNhY2hlOiBFbnRpdHlDYWNoZTsgdGFnPzogc3RyaW5nIH07XG4gIHJlYWRvbmx5IHR5cGUgPSBFbnRpdHlDYWNoZUFjdGlvbi5TRVRfRU5USVRZX0NBQ0hFO1xuXG4gIGNvbnN0cnVjdG9yKHB1YmxpYyByZWFkb25seSBjYWNoZTogRW50aXR5Q2FjaGUsIHRhZz86IHN0cmluZykge1xuICAgIHRoaXMucGF5bG9hZCA9IHsgY2FjaGUsIHRhZyB9O1xuICB9XG59XG5cbi8vICNyZWdpb24gU2F2ZUVudGl0aWVzXG5leHBvcnQgY2xhc3MgU2F2ZUVudGl0aWVzIGltcGxlbWVudHMgQWN0aW9uIHtcbiAgcmVhZG9ubHkgcGF5bG9hZDoge1xuICAgIHJlYWRvbmx5IGNoYW5nZVNldDogQ2hhbmdlU2V0O1xuICAgIHJlYWRvbmx5IHVybDogc3RyaW5nO1xuICAgIHJlYWRvbmx5IGNvcnJlbGF0aW9uSWQ/OiBhbnk7XG4gICAgcmVhZG9ubHkgaXNPcHRpbWlzdGljPzogYm9vbGVhbjtcbiAgICByZWFkb25seSBtZXJnZVN0cmF0ZWd5PzogTWVyZ2VTdHJhdGVneTtcbiAgICByZWFkb25seSB0YWc/OiBzdHJpbmc7XG4gICAgZXJyb3I/OiBFcnJvcjtcbiAgICBza2lwPzogYm9vbGVhbjsgLy8gbm90IHVzZWRcbiAgfTtcbiAgcmVhZG9ubHkgdHlwZSA9IEVudGl0eUNhY2hlQWN0aW9uLlNBVkVfRU5USVRJRVM7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgY2hhbmdlU2V0OiBDaGFuZ2VTZXQsXG4gICAgdXJsOiBzdHJpbmcsXG4gICAgb3B0aW9ucz86IEVudGl0eUFjdGlvbk9wdGlvbnNcbiAgKSB7XG4gICAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG4gICAgaWYgKGNoYW5nZVNldCkge1xuICAgICAgY2hhbmdlU2V0LnRhZyA9IGNoYW5nZVNldC50YWcgfHwgb3B0aW9ucy50YWc7XG4gICAgfVxuICAgIHRoaXMucGF5bG9hZCA9IHsgY2hhbmdlU2V0LCB1cmwsIC4uLm9wdGlvbnMsIHRhZzogY2hhbmdlU2V0LnRhZyB9O1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBTYXZlRW50aXRpZXNDYW5jZWwgaW1wbGVtZW50cyBBY3Rpb24ge1xuICByZWFkb25seSBwYXlsb2FkOiB7XG4gICAgcmVhZG9ubHkgY29ycmVsYXRpb25JZDogYW55O1xuICAgIHJlYWRvbmx5IHJlYXNvbj86IHN0cmluZztcbiAgICByZWFkb25seSBlbnRpdHlOYW1lcz86IHN0cmluZ1tdO1xuICAgIHJlYWRvbmx5IHRhZz86IHN0cmluZztcbiAgfTtcbiAgcmVhZG9ubHkgdHlwZSA9IEVudGl0eUNhY2hlQWN0aW9uLlNBVkVfRU5USVRJRVNfQ0FOQ0VMO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIGNvcnJlbGF0aW9uSWQ6IGFueSxcbiAgICByZWFzb24/OiBzdHJpbmcsXG4gICAgZW50aXR5TmFtZXM/OiBzdHJpbmdbXSxcbiAgICB0YWc/OiBzdHJpbmdcbiAgKSB7XG4gICAgdGhpcy5wYXlsb2FkID0geyBjb3JyZWxhdGlvbklkLCByZWFzb24sIGVudGl0eU5hbWVzLCB0YWcgfTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgU2F2ZUVudGl0aWVzQ2FuY2VsZWQgaW1wbGVtZW50cyBBY3Rpb24ge1xuICByZWFkb25seSBwYXlsb2FkOiB7XG4gICAgcmVhZG9ubHkgY29ycmVsYXRpb25JZDogYW55O1xuICAgIHJlYWRvbmx5IHJlYXNvbj86IHN0cmluZztcbiAgICByZWFkb25seSB0YWc/OiBzdHJpbmc7XG4gIH07XG4gIHJlYWRvbmx5IHR5cGUgPSBFbnRpdHlDYWNoZUFjdGlvbi5TQVZFX0VOVElUSUVTX0NBTkNFTEVEO1xuXG4gIGNvbnN0cnVjdG9yKGNvcnJlbGF0aW9uSWQ6IGFueSwgcmVhc29uPzogc3RyaW5nLCB0YWc/OiBzdHJpbmcpIHtcbiAgICB0aGlzLnBheWxvYWQgPSB7IGNvcnJlbGF0aW9uSWQsIHJlYXNvbiwgdGFnIH07XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIFNhdmVFbnRpdGllc0Vycm9yIHtcbiAgcmVhZG9ubHkgcGF5bG9hZDoge1xuICAgIHJlYWRvbmx5IGVycm9yOiBEYXRhU2VydmljZUVycm9yO1xuICAgIHJlYWRvbmx5IG9yaWdpbmFsQWN0aW9uOiBTYXZlRW50aXRpZXM7XG4gICAgcmVhZG9ubHkgY29ycmVsYXRpb25JZDogYW55O1xuICB9O1xuICByZWFkb25seSB0eXBlID0gRW50aXR5Q2FjaGVBY3Rpb24uU0FWRV9FTlRJVElFU19FUlJPUjtcbiAgY29uc3RydWN0b3IoZXJyb3I6IERhdGFTZXJ2aWNlRXJyb3IsIG9yaWdpbmFsQWN0aW9uOiBTYXZlRW50aXRpZXMpIHtcbiAgICBjb25zdCBjb3JyZWxhdGlvbklkID0gb3JpZ2luYWxBY3Rpb24ucGF5bG9hZC5jb3JyZWxhdGlvbklkO1xuICAgIHRoaXMucGF5bG9hZCA9IHsgZXJyb3IsIG9yaWdpbmFsQWN0aW9uLCBjb3JyZWxhdGlvbklkIH07XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIFNhdmVFbnRpdGllc1N1Y2Nlc3MgaW1wbGVtZW50cyBBY3Rpb24ge1xuICByZWFkb25seSBwYXlsb2FkOiB7XG4gICAgcmVhZG9ubHkgY2hhbmdlU2V0OiBDaGFuZ2VTZXQ7XG4gICAgcmVhZG9ubHkgdXJsOiBzdHJpbmc7XG4gICAgcmVhZG9ubHkgY29ycmVsYXRpb25JZD86IGFueTtcbiAgICByZWFkb25seSBpc09wdGltaXN0aWM/OiBib29sZWFuO1xuICAgIHJlYWRvbmx5IG1lcmdlU3RyYXRlZ3k/OiBNZXJnZVN0cmF0ZWd5O1xuICAgIHJlYWRvbmx5IHRhZz86IHN0cmluZztcbiAgICBlcnJvcj86IEVycm9yO1xuICAgIHNraXA/OiBib29sZWFuOyAvLyBub3QgdXNlZFxuICB9O1xuICByZWFkb25seSB0eXBlID0gRW50aXR5Q2FjaGVBY3Rpb24uU0FWRV9FTlRJVElFU19TVUNDRVNTO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIGNoYW5nZVNldDogQ2hhbmdlU2V0LFxuICAgIHVybDogc3RyaW5nLFxuICAgIG9wdGlvbnM/OiBFbnRpdHlBY3Rpb25PcHRpb25zXG4gICkge1xuICAgIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuICAgIGlmIChjaGFuZ2VTZXQpIHtcbiAgICAgIGNoYW5nZVNldC50YWcgPSBjaGFuZ2VTZXQudGFnIHx8IG9wdGlvbnMudGFnO1xuICAgIH1cbiAgICB0aGlzLnBheWxvYWQgPSB7IGNoYW5nZVNldCwgdXJsLCAuLi5vcHRpb25zLCB0YWc6IGNoYW5nZVNldC50YWcgfTtcbiAgfVxufVxuLy8gI2VuZHJlZ2lvbiBTYXZlRW50aXRpZXNcbiJdfQ==
|
|
@@ -1,50 +0,0 @@
|
|
|
1
|
-
export var ChangeSetOperation;
|
|
2
|
-
(function (ChangeSetOperation) {
|
|
3
|
-
ChangeSetOperation["Add"] = "Add";
|
|
4
|
-
ChangeSetOperation["Delete"] = "Delete";
|
|
5
|
-
ChangeSetOperation["Update"] = "Update";
|
|
6
|
-
ChangeSetOperation["Upsert"] = "Upsert";
|
|
7
|
-
})(ChangeSetOperation || (ChangeSetOperation = {}));
|
|
8
|
-
/**
|
|
9
|
-
* Factory to create a ChangeSetItem for a ChangeSetOperation
|
|
10
|
-
*/
|
|
11
|
-
export class ChangeSetItemFactory {
|
|
12
|
-
/** Create the ChangeSetAdd for new entities of the given entity type */
|
|
13
|
-
add(entityName, entities) {
|
|
14
|
-
entities = Array.isArray(entities) ? entities : entities ? [entities] : [];
|
|
15
|
-
return { entityName, op: ChangeSetOperation.Add, entities };
|
|
16
|
-
}
|
|
17
|
-
/** Create the ChangeSetDelete for primary keys of the given entity type */
|
|
18
|
-
delete(entityName, keys) {
|
|
19
|
-
const ids = Array.isArray(keys)
|
|
20
|
-
? keys
|
|
21
|
-
: keys
|
|
22
|
-
? [keys]
|
|
23
|
-
: [];
|
|
24
|
-
return { entityName, op: ChangeSetOperation.Delete, entities: ids };
|
|
25
|
-
}
|
|
26
|
-
/** Create the ChangeSetUpdate for Updates of entities of the given entity type */
|
|
27
|
-
update(entityName, updates) {
|
|
28
|
-
updates = Array.isArray(updates) ? updates : updates ? [updates] : [];
|
|
29
|
-
return { entityName, op: ChangeSetOperation.Update, entities: updates };
|
|
30
|
-
}
|
|
31
|
-
/** Create the ChangeSetUpsert for new or existing entities of the given entity type */
|
|
32
|
-
upsert(entityName, entities) {
|
|
33
|
-
entities = Array.isArray(entities) ? entities : entities ? [entities] : [];
|
|
34
|
-
return { entityName, op: ChangeSetOperation.Upsert, entities };
|
|
35
|
-
}
|
|
36
|
-
}
|
|
37
|
-
/**
|
|
38
|
-
* Instance of a factory to create a ChangeSetItem for a ChangeSetOperation
|
|
39
|
-
*/
|
|
40
|
-
export const changeSetItemFactory = new ChangeSetItemFactory();
|
|
41
|
-
/**
|
|
42
|
-
* Return ChangeSet after filtering out null and empty ChangeSetItems.
|
|
43
|
-
* @param changeSet ChangeSet with changes to filter
|
|
44
|
-
*/
|
|
45
|
-
export function excludeEmptyChangeSetItems(changeSet) {
|
|
46
|
-
changeSet = changeSet && changeSet.changes ? changeSet : { changes: [] };
|
|
47
|
-
const changes = changeSet.changes.filter((c) => c != null && c.entities && c.entities.length > 0);
|
|
48
|
-
return Object.assign(Object.assign({}, changeSet), { changes });
|
|
49
|
-
}
|
|
50
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW50aXR5LWNhY2hlLWNoYW5nZS1zZXQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9tb2R1bGVzL2RhdGEvc3JjL2FjdGlvbnMvZW50aXR5LWNhY2hlLWNoYW5nZS1zZXQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsTUFBTSxDQUFOLElBQVksa0JBS1g7QUFMRCxXQUFZLGtCQUFrQjtJQUM1QixpQ0FBVyxDQUFBO0lBQ1gsdUNBQWlCLENBQUE7SUFDakIsdUNBQWlCLENBQUE7SUFDakIsdUNBQWlCLENBQUE7QUFDbkIsQ0FBQyxFQUxXLGtCQUFrQixLQUFsQixrQkFBa0IsUUFLN0I7QUFtREQ7O0dBRUc7QUFDSCxNQUFNLE9BQU8sb0JBQW9CO0lBQy9CLHdFQUF3RTtJQUN4RSxHQUFHLENBQUksVUFBa0IsRUFBRSxRQUFpQjtRQUMxQyxRQUFRLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUMzRSxPQUFPLEVBQUUsVUFBVSxFQUFFLEVBQUUsRUFBRSxrQkFBa0IsQ0FBQyxHQUFHLEVBQUUsUUFBUSxFQUFFLENBQUM7SUFDOUQsQ0FBQztJQUVELDJFQUEyRTtJQUMzRSxNQUFNLENBQ0osVUFBa0IsRUFDbEIsSUFBMkM7UUFFM0MsTUFBTSxHQUFHLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUM7WUFDN0IsQ0FBQyxDQUFDLElBQUk7WUFDTixDQUFDLENBQUMsSUFBSTtnQkFDTixDQUFDLENBQUUsQ0FBQyxJQUFJLENBQXlCO2dCQUNqQyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQ1AsT0FBTyxFQUFFLFVBQVUsRUFBRSxFQUFFLEVBQUUsa0JBQWtCLENBQUMsTUFBTSxFQUFFLFFBQVEsRUFBRSxHQUFHLEVBQUUsQ0FBQztJQUN0RSxDQUFDO0lBRUQsa0ZBQWtGO0lBQ2xGLE1BQU0sQ0FDSixVQUFrQixFQUNsQixPQUFnQztRQUVoQyxPQUFPLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUN0RSxPQUFPLEVBQUUsVUFBVSxFQUFFLEVBQUUsRUFBRSxrQkFBa0IsQ0FBQyxNQUFNLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxDQUFDO0lBQzFFLENBQUM7SUFFRCx1RkFBdUY7SUFDdkYsTUFBTSxDQUFJLFVBQWtCLEVBQUUsUUFBaUI7UUFDN0MsUUFBUSxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFDM0UsT0FBTyxFQUFFLFVBQVUsRUFBRSxFQUFFLEVBQUUsa0JBQWtCLENBQUMsTUFBTSxFQUFFLFFBQVEsRUFBRSxDQUFDO0lBQ2pFLENBQUM7Q0FDRjtBQUVEOztHQUVHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sb0JBQW9CLEdBQUcsSUFBSSxvQkFBb0IsRUFBRSxDQUFDO0FBRS9EOzs7R0FHRztBQUNILE1BQU0sVUFBVSwwQkFBMEIsQ0FBQyxTQUFvQjtJQUM3RCxTQUFTLEdBQUcsU0FBUyxJQUFJLFNBQVMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxPQUFPLEVBQUUsRUFBRSxFQUFFLENBQUM7SUFDekUsTUFBTSxPQUFPLEdBQUcsU0FBUyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQ3RDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsQ0FBQyxRQUFRLElBQUksQ0FBQyxDQUFDLFFBQVEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUN4RCxDQUFDO0lBQ0YsdUNBQVksU0FBUyxLQUFFLE9BQU8sSUFBRztBQUNuQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgVXBkYXRlIH0gZnJvbSAnQG5ncngvZW50aXR5JztcblxuZXhwb3J0IGVudW0gQ2hhbmdlU2V0T3BlcmF0aW9uIHtcbiAgQWRkID0gJ0FkZCcsXG4gIERlbGV0ZSA9ICdEZWxldGUnLFxuICBVcGRhdGUgPSAnVXBkYXRlJyxcbiAgVXBzZXJ0ID0gJ1Vwc2VydCcsXG59XG5leHBvcnQgaW50ZXJmYWNlIENoYW5nZVNldEFkZDxUID0gYW55PiB7XG4gIG9wOiBDaGFuZ2VTZXRPcGVyYXRpb24uQWRkO1xuICBlbnRpdHlOYW1lOiBzdHJpbmc7XG4gIGVudGl0aWVzOiBUW107XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ2hhbmdlU2V0RGVsZXRlIHtcbiAgb3A6IENoYW5nZVNldE9wZXJhdGlvbi5EZWxldGU7XG4gIGVudGl0eU5hbWU6IHN0cmluZztcbiAgZW50aXRpZXM6IHN0cmluZ1tdIHwgbnVtYmVyW107XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ2hhbmdlU2V0VXBkYXRlPFQgPSBhbnk+IHtcbiAgb3A6IENoYW5nZVNldE9wZXJhdGlvbi5VcGRhdGU7XG4gIGVudGl0eU5hbWU6IHN0cmluZztcbiAgZW50aXRpZXM6IFVwZGF0ZTxUPltdO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIENoYW5nZVNldFVwc2VydDxUID0gYW55PiB7XG4gIG9wOiBDaGFuZ2VTZXRPcGVyYXRpb24uVXBzZXJ0O1xuICBlbnRpdHlOYW1lOiBzdHJpbmc7XG4gIGVudGl0aWVzOiBUW107XG59XG5cbi8qKlxuICogQSBlbnRpdGllcyBvZiBhIHNpbmdsZSBlbnRpdHkgdHlwZSwgd2hpY2ggYXJlIGNoYW5nZWQgaW4gdGhlIHNhbWUgd2F5IGJ5IGEgQ2hhbmdlU2V0T3BlcmF0aW9uXG4gKi9cbmV4cG9ydCB0eXBlIENoYW5nZVNldEl0ZW0gPVxuICB8IENoYW5nZVNldEFkZFxuICB8IENoYW5nZVNldERlbGV0ZVxuICB8IENoYW5nZVNldFVwZGF0ZVxuICB8IENoYW5nZVNldFVwc2VydDtcblxuLypcbiAqIEEgc2V0IG9mIGVudGl0eSBDaGFuZ2VzLCB0eXBpY2FsbHkgdG8gYmUgc2F2ZWQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ2hhbmdlU2V0PFQgPSBhbnk+IHtcbiAgLyoqIEFuIGFycmF5IG9mIENoYW5nZVNldEl0ZW1zIHRvIGJlIHByb2Nlc3NlZCBpbiB0aGUgYXJyYXkgb3JkZXIgKi9cbiAgY2hhbmdlczogQ2hhbmdlU2V0SXRlbVtdO1xuXG4gIC8qKlxuICAgKiBBbiBhcmJpdHJhcnksIHNlcmlhbGl6YWJsZSBvYmplY3QgdGhhdCBzaG91bGQgdHJhdmVsIHdpdGggdGhlIENoYW5nZVNldC5cbiAgICogTWVhbmluZ2Z1bCB0byB0aGUgQ2hhbmdlU2V0IHByb2R1Y2VyIGFuZCBjb25zdW1lci4gSWdub3JlZCBieSBAbmdyeC9kYXRhLlxuICAgKi9cbiAgZXh0cmFzPzogVDtcblxuICAvKiogQW4gYXJiaXRyYXJ5IHN0cmluZywgaWRlbnRpZnlpbmcgdGhlIENoYW5nZVNldCBhbmQgcGVyaGFwcyBpdHMgcHVycG9zZSAqL1xuICB0YWc/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogRmFjdG9yeSB0byBjcmVhdGUgYSBDaGFuZ2VTZXRJdGVtIGZvciBhIENoYW5nZVNldE9wZXJhdGlvblxuICovXG5leHBvcnQgY2xhc3MgQ2hhbmdlU2V0SXRlbUZhY3Rvcnkge1xuICAvKiogQ3JlYXRlIHRoZSBDaGFuZ2VTZXRBZGQgZm9yIG5ldyBlbnRpdGllcyBvZiB0aGUgZ2l2ZW4gZW50aXR5IHR5cGUgKi9cbiAgYWRkPFQ+KGVudGl0eU5hbWU6IHN0cmluZywgZW50aXRpZXM6IFQgfCBUW10pOiBDaGFuZ2VTZXRBZGQ8VD4ge1xuICAgIGVudGl0aWVzID0gQXJyYXkuaXNBcnJheShlbnRpdGllcykgPyBlbnRpdGllcyA6IGVudGl0aWVzID8gW2VudGl0aWVzXSA6IFtdO1xuICAgIHJldHVybiB7IGVudGl0eU5hbWUsIG9wOiBDaGFuZ2VTZXRPcGVyYXRpb24uQWRkLCBlbnRpdGllcyB9O1xuICB9XG5cbiAgLyoqIENyZWF0ZSB0aGUgQ2hhbmdlU2V0RGVsZXRlIGZvciBwcmltYXJ5IGtleXMgb2YgdGhlIGdpdmVuIGVudGl0eSB0eXBlICovXG4gIGRlbGV0ZShcbiAgICBlbnRpdHlOYW1lOiBzdHJpbmcsXG4gICAga2V5czogbnVtYmVyIHwgbnVtYmVyW10gfCBzdHJpbmcgfCBzdHJpbmdbXVxuICApOiBDaGFuZ2VTZXREZWxldGUge1xuICAgIGNvbnN0IGlkcyA9IEFycmF5LmlzQXJyYXkoa2V5cylcbiAgICAgID8ga2V5c1xuICAgICAgOiBrZXlzXG4gICAgICA/IChba2V5c10gYXMgc3RyaW5nW10gfCBudW1iZXJbXSlcbiAgICAgIDogW107XG4gICAgcmV0dXJuIHsgZW50aXR5TmFtZSwgb3A6IENoYW5nZVNldE9wZXJhdGlvbi5EZWxldGUsIGVudGl0aWVzOiBpZHMgfTtcbiAgfVxuXG4gIC8qKiBDcmVhdGUgdGhlIENoYW5nZVNldFVwZGF0ZSBmb3IgVXBkYXRlcyBvZiBlbnRpdGllcyBvZiB0aGUgZ2l2ZW4gZW50aXR5IHR5cGUgKi9cbiAgdXBkYXRlPFQgZXh0ZW5kcyB7IGlkOiBzdHJpbmcgfCBudW1iZXIgfT4oXG4gICAgZW50aXR5TmFtZTogc3RyaW5nLFxuICAgIHVwZGF0ZXM6IFVwZGF0ZTxUPiB8IFVwZGF0ZTxUPltdXG4gICk6IENoYW5nZVNldFVwZGF0ZTxUPiB7XG4gICAgdXBkYXRlcyA9IEFycmF5LmlzQXJyYXkodXBkYXRlcykgPyB1cGRhdGVzIDogdXBkYXRlcyA/IFt1cGRhdGVzXSA6IFtdO1xuICAgIHJldHVybiB7IGVudGl0eU5hbWUsIG9wOiBDaGFuZ2VTZXRPcGVyYXRpb24uVXBkYXRlLCBlbnRpdGllczogdXBkYXRlcyB9O1xuICB9XG5cbiAgLyoqIENyZWF0ZSB0aGUgQ2hhbmdlU2V0VXBzZXJ0IGZvciBuZXcgb3IgZXhpc3RpbmcgZW50aXRpZXMgb2YgdGhlIGdpdmVuIGVudGl0eSB0eXBlICovXG4gIHVwc2VydDxUPihlbnRpdHlOYW1lOiBzdHJpbmcsIGVudGl0aWVzOiBUIHwgVFtdKTogQ2hhbmdlU2V0VXBzZXJ0PFQ+IHtcbiAgICBlbnRpdGllcyA9IEFycmF5LmlzQXJyYXkoZW50aXRpZXMpID8gZW50aXRpZXMgOiBlbnRpdGllcyA/IFtlbnRpdGllc10gOiBbXTtcbiAgICByZXR1cm4geyBlbnRpdHlOYW1lLCBvcDogQ2hhbmdlU2V0T3BlcmF0aW9uLlVwc2VydCwgZW50aXRpZXMgfTtcbiAgfVxufVxuXG4vKipcbiAqIEluc3RhbmNlIG9mIGEgZmFjdG9yeSB0byBjcmVhdGUgYSBDaGFuZ2VTZXRJdGVtIGZvciBhIENoYW5nZVNldE9wZXJhdGlvblxuICovXG5leHBvcnQgY29uc3QgY2hhbmdlU2V0SXRlbUZhY3RvcnkgPSBuZXcgQ2hhbmdlU2V0SXRlbUZhY3RvcnkoKTtcblxuLyoqXG4gKiBSZXR1cm4gQ2hhbmdlU2V0IGFmdGVyIGZpbHRlcmluZyBvdXQgbnVsbCBhbmQgZW1wdHkgQ2hhbmdlU2V0SXRlbXMuXG4gKiBAcGFyYW0gY2hhbmdlU2V0IENoYW5nZVNldCB3aXRoIGNoYW5nZXMgdG8gZmlsdGVyXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBleGNsdWRlRW1wdHlDaGFuZ2VTZXRJdGVtcyhjaGFuZ2VTZXQ6IENoYW5nZVNldCk6IENoYW5nZVNldCB7XG4gIGNoYW5nZVNldCA9IGNoYW5nZVNldCAmJiBjaGFuZ2VTZXQuY2hhbmdlcyA/IGNoYW5nZVNldCA6IHsgY2hhbmdlczogW10gfTtcbiAgY29uc3QgY2hhbmdlcyA9IGNoYW5nZVNldC5jaGFuZ2VzLmZpbHRlcihcbiAgICAoYykgPT4gYyAhPSBudWxsICYmIGMuZW50aXRpZXMgJiYgYy5lbnRpdGllcy5sZW5ndGggPiAwXG4gICk7XG4gIHJldHVybiB7IC4uLmNoYW5nZVNldCwgY2hhbmdlcyB9O1xufVxuIl19
|
|
@@ -1,148 +0,0 @@
|
|
|
1
|
-
import { Injectable, Optional } from '@angular/core';
|
|
2
|
-
import { HttpClient } from '@angular/common/http';
|
|
3
|
-
import { throwError } from 'rxjs';
|
|
4
|
-
import { catchError, delay, map, timeout } from 'rxjs/operators';
|
|
5
|
-
import { ChangeSetOperation, excludeEmptyChangeSetItems, } from '../actions/entity-cache-change-set';
|
|
6
|
-
import { DataServiceError } from './data-service-error';
|
|
7
|
-
import { DefaultDataServiceConfig } from './default-data-service-config';
|
|
8
|
-
import { EntityDefinitionService } from '../entity-metadata/entity-definition.service';
|
|
9
|
-
const updateOp = ChangeSetOperation.Update;
|
|
10
|
-
/**
|
|
11
|
-
* Default data service for making remote service calls targeting the entire EntityCache.
|
|
12
|
-
* See EntityDataService for services that target a single EntityCollection
|
|
13
|
-
*/
|
|
14
|
-
export class EntityCacheDataService {
|
|
15
|
-
constructor(entityDefinitionService, http, config) {
|
|
16
|
-
this.entityDefinitionService = entityDefinitionService;
|
|
17
|
-
this.http = http;
|
|
18
|
-
this.idSelectors = {};
|
|
19
|
-
this.saveDelay = 0;
|
|
20
|
-
this.timeout = 0;
|
|
21
|
-
const { saveDelay = 0, timeout: to = 0 } = config || {};
|
|
22
|
-
this.saveDelay = saveDelay;
|
|
23
|
-
this.timeout = to;
|
|
24
|
-
}
|
|
25
|
-
/**
|
|
26
|
-
* Save changes to multiple entities across one or more entity collections.
|
|
27
|
-
* Server endpoint must understand the essential SaveEntities protocol,
|
|
28
|
-
* in particular the ChangeSet interface (except for Update<T>).
|
|
29
|
-
* This implementation extracts the entity changes from a ChangeSet Update<T>[] and sends those.
|
|
30
|
-
* It then reconstructs Update<T>[] in the returned observable result.
|
|
31
|
-
* @param changeSet An array of SaveEntityItems.
|
|
32
|
-
* Each SaveEntityItem describe a change operation for one or more entities of a single collection,
|
|
33
|
-
* known by its 'entityName'.
|
|
34
|
-
* @param url The server endpoint that receives this request.
|
|
35
|
-
*/
|
|
36
|
-
saveEntities(changeSet, url) {
|
|
37
|
-
changeSet = this.filterChangeSet(changeSet);
|
|
38
|
-
// Assume server doesn't understand @ngrx/entity Update<T> structure;
|
|
39
|
-
// Extract the entity changes from the Update<T>[] and restore on the return from server
|
|
40
|
-
changeSet = this.flattenUpdates(changeSet);
|
|
41
|
-
let result$ = this.http
|
|
42
|
-
.post(url, changeSet)
|
|
43
|
-
.pipe(map((result) => this.restoreUpdates(result)), catchError(this.handleError({ method: 'POST', url, data: changeSet })));
|
|
44
|
-
if (this.timeout) {
|
|
45
|
-
result$ = result$.pipe(timeout(this.timeout));
|
|
46
|
-
}
|
|
47
|
-
if (this.saveDelay) {
|
|
48
|
-
result$ = result$.pipe(delay(this.saveDelay));
|
|
49
|
-
}
|
|
50
|
-
return result$;
|
|
51
|
-
}
|
|
52
|
-
// #region helpers
|
|
53
|
-
handleError(reqData) {
|
|
54
|
-
return (err) => {
|
|
55
|
-
const error = new DataServiceError(err, reqData);
|
|
56
|
-
return throwError(error);
|
|
57
|
-
};
|
|
58
|
-
}
|
|
59
|
-
/**
|
|
60
|
-
* Filter changeSet to remove unwanted ChangeSetItems.
|
|
61
|
-
* This implementation excludes null and empty ChangeSetItems.
|
|
62
|
-
* @param changeSet ChangeSet with changes to filter
|
|
63
|
-
*/
|
|
64
|
-
filterChangeSet(changeSet) {
|
|
65
|
-
return excludeEmptyChangeSetItems(changeSet);
|
|
66
|
-
}
|
|
67
|
-
/**
|
|
68
|
-
* Convert the entities in update changes from @ngrx Update<T> structure to just T.
|
|
69
|
-
* Reverse of restoreUpdates().
|
|
70
|
-
*/
|
|
71
|
-
flattenUpdates(changeSet) {
|
|
72
|
-
let changes = changeSet.changes;
|
|
73
|
-
if (changes.length === 0) {
|
|
74
|
-
return changeSet;
|
|
75
|
-
}
|
|
76
|
-
let hasMutated = false;
|
|
77
|
-
changes = changes.map((item) => {
|
|
78
|
-
if (item.op === updateOp && item.entities.length > 0) {
|
|
79
|
-
hasMutated = true;
|
|
80
|
-
return Object.assign(Object.assign({}, item), { entities: item.entities.map((u) => u.changes) });
|
|
81
|
-
}
|
|
82
|
-
else {
|
|
83
|
-
return item;
|
|
84
|
-
}
|
|
85
|
-
});
|
|
86
|
-
return hasMutated ? Object.assign(Object.assign({}, changeSet), { changes }) : changeSet;
|
|
87
|
-
}
|
|
88
|
-
/**
|
|
89
|
-
* Convert the flattened T entities in update changes back to @ngrx Update<T> structures.
|
|
90
|
-
* Reverse of flattenUpdates().
|
|
91
|
-
*/
|
|
92
|
-
restoreUpdates(changeSet) {
|
|
93
|
-
if (changeSet == null) {
|
|
94
|
-
// Nothing? Server probably responded with 204 - No Content because it made no changes to the inserted or updated entities
|
|
95
|
-
return changeSet;
|
|
96
|
-
}
|
|
97
|
-
let changes = changeSet.changes;
|
|
98
|
-
if (changes.length === 0) {
|
|
99
|
-
return changeSet;
|
|
100
|
-
}
|
|
101
|
-
let hasMutated = false;
|
|
102
|
-
changes = changes.map((item) => {
|
|
103
|
-
if (item.op === updateOp) {
|
|
104
|
-
// These are entities, not Updates; convert back to Updates
|
|
105
|
-
hasMutated = true;
|
|
106
|
-
const selectId = this.getIdSelector(item.entityName);
|
|
107
|
-
return Object.assign(Object.assign({}, item), { entities: item.entities.map((u) => ({
|
|
108
|
-
id: selectId(u),
|
|
109
|
-
changes: u,
|
|
110
|
-
})) });
|
|
111
|
-
}
|
|
112
|
-
else {
|
|
113
|
-
return item;
|
|
114
|
-
}
|
|
115
|
-
});
|
|
116
|
-
return hasMutated ? Object.assign(Object.assign({}, changeSet), { changes }) : changeSet;
|
|
117
|
-
}
|
|
118
|
-
/**
|
|
119
|
-
* Get the id (primary key) selector function for an entity type
|
|
120
|
-
* @param entityName name of the entity type
|
|
121
|
-
*/
|
|
122
|
-
getIdSelector(entityName) {
|
|
123
|
-
let idSelector = this.idSelectors[entityName];
|
|
124
|
-
if (!idSelector) {
|
|
125
|
-
idSelector = this.entityDefinitionService.getDefinition(entityName)
|
|
126
|
-
.selectId;
|
|
127
|
-
this.idSelectors[entityName] = idSelector;
|
|
128
|
-
}
|
|
129
|
-
return idSelector;
|
|
130
|
-
}
|
|
131
|
-
}
|
|
132
|
-
/** @type {!Array<{type: !Function, args: (undefined|!Array<?>)}>} */
|
|
133
|
-
EntityCacheDataService.decorators = [
|
|
134
|
-
{ type: Injectable }
|
|
135
|
-
];
|
|
136
|
-
/**
|
|
137
|
-
* @type {function(): !Array<(null|{
|
|
138
|
-
* type: ?,
|
|
139
|
-
* decorators: (undefined|!Array<{type: !Function, args: (undefined|!Array<?>)}>),
|
|
140
|
-
* })>}
|
|
141
|
-
* @nocollapse
|
|
142
|
-
*/
|
|
143
|
-
EntityCacheDataService.ctorParameters = () => [
|
|
144
|
-
{ type: EntityDefinitionService },
|
|
145
|
-
{ type: HttpClient },
|
|
146
|
-
{ type: DefaultDataServiceConfig, decorators: [{ type: Optional }] }
|
|
147
|
-
];
|
|
148
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW50aXR5LWNhY2hlLWRhdGEuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL21vZHVsZXMvZGF0YS9zcmMvZGF0YXNlcnZpY2VzL2VudGl0eS1jYWNoZS1kYXRhLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDckQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBRWxELE9BQU8sRUFBYyxVQUFVLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDOUMsT0FBTyxFQUFFLFVBQVUsRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLE9BQU8sRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBSWpFLE9BQU8sRUFDTCxrQkFBa0IsRUFJbEIsMEJBQTBCLEdBQzNCLE1BQU0sb0NBQW9DLENBQUM7QUFDNUMsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDeEQsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDekUsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sOENBQThDLENBQUM7QUFHdkYsTUFBTSxRQUFRLEdBQUcsa0JBQWtCLENBQUMsTUFBTSxDQUFDO0FBRTNDOzs7R0FHRztBQUVILE1BQU0sT0FBTyxzQkFBc0I7SUFLakMsWUFDWSx1QkFBZ0QsRUFDaEQsSUFBZ0IsRUFDZCxNQUFpQztRQUZuQyw0QkFBdUIsR0FBdkIsdUJBQXVCLENBQXlCO1FBQ2hELFNBQUksR0FBSixJQUFJLENBQVk7UUFObEIsZ0JBQVcsR0FBOEMsRUFBRSxDQUFDO1FBQzVELGNBQVMsR0FBRyxDQUFDLENBQUM7UUFDZCxZQUFPLEdBQUcsQ0FBQyxDQUFDO1FBT3BCLE1BQU0sRUFBRSxTQUFTLEdBQUcsQ0FBQyxFQUFFLE9BQU8sRUFBRSxFQUFFLEdBQUcsQ0FBQyxF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LE9BQU8sVUFBVSxDQUFDO0lBQ3BCLENBQUM7Ozs7WUF6SUYsVUFBVTs7Ozs7Ozs7OztZQVRGLHVCQUF1QjtZQWhCdkIsVUFBVTtZQWVWLHdCQUF3Qix1QkFtQjVCLFFBQVEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlLCBPcHRpb25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgSHR0cENsaWVudCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcblxuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgdGhyb3dFcnJvciB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgY2F0Y2hFcnJvciwgZGVsYXksIG1hcCwgdGltZW91dCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuaW1wb3J0IHsgSWRTZWxlY3RvciB9IGZyb20gJ0BuZ3J4L2VudGl0eSc7XG5cbmltcG9ydCB7XG4gIENoYW5nZVNldE9wZXJhdGlvbixcbiAgQ2hhbmdlU2V0LFxuICBDaGFuZ2VTZXRJdGVtLFxuICBDaGFuZ2VTZXRVcGRhdGUsXG4gIGV4Y2x1ZGVFbXB0eUNoYW5nZVNldEl0ZW1zLFxufSBmcm9tICcuLi9hY3Rpb25zL2VudGl0eS1jYWNoZS1jaGFuZ2Utc2V0JztcbmltcG9ydCB7IERhdGFTZXJ2aWNlRXJyb3IgfSBmcm9tICcuL2RhdGEtc2VydmljZS1lcnJvcic7XG5pbXBvcnQgeyBEZWZhdWx0RGF0YVNlcnZpY2VDb25maWcgfSBmcm9tICcuL2RlZmF1bHQtZGF0YS1zZXJ2aWNlLWNvbmZpZyc7XG5pbXBvcnQgeyBFbnRpdHlEZWZpbml0aW9uU2VydmljZSB9IGZyb20gJy4uL2VudGl0eS1tZXRhZGF0YS9lbnRpdHktZGVmaW5pdGlvbi5zZXJ2aWNlJztcbmltcG9ydCB7IFJlcXVlc3REYXRhIH0gZnJvbSAnLi9pbnRlcmZhY2VzJztcblxuY29uc3QgdXBkYXRlT3AgPSBDaGFuZ2VTZXRPcGVyYXRpb24uVXBkYXRlO1xuXG4vKipcbiAqIERlZmF1bHQgZGF0YSBzZXJ2aWNlIGZvciBtYWtpbmcgcmVtb3RlIHNlcnZpY2UgY2FsbHMgdGFyZ2V0aW5nIHRoZSBlbnRpcmUgRW50aXR5Q2FjaGUuXG4gKiBTZWUgRW50aXR5RGF0YVNlcnZpY2UgZm9yIHNlcnZpY2VzIHRoYXQgdGFyZ2V0IGEgc2luZ2xlIEVudGl0eUNvbGxlY3Rpb25cbiAqL1xuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIEVudGl0eUNhY2hlRGF0YVNlcnZpY2Uge1xuICBwcm90ZWN0ZWQgaWRTZWxlY3RvcnM6IHsgW2VudGl0eU5hbWU6IHN0cmluZ106IElkU2VsZWN0b3I8YW55PiB9ID0ge307XG4gIHByb3RlY3RlZCBzYXZlRGVsYXkgPSAwO1xuICBwcm90ZWN0ZWQgdGltZW91dCA9IDA7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJvdGVjdGVkIGVudGl0eURlZmluaXRpb25TZXJ2aWNlOiBFbnRpdHlEZWZpbml0aW9uU2VydmljZSxcbiAgICBwcm90ZWN0ZWQgaHR0cDogSHR0cENsaWVudCxcbiAgICBAT3B0aW9uYWwoKSBjb25maWc/OiBEZWZhdWx0RGF0YVNlcnZpY2VDb25maWdcbiAgKSB7XG4gICAgY29uc3QgeyBzYXZlRGVsYXkgPSAwLCB0aW1lb3V0OiB0byA9IDAgfSA9IGNvbmZpZyB8fCB7fTtcbiAgICB0aGlzLnNhdmVEZWxheSA9IHNhdmVEZWxheTtcbiAgICB0aGlzLnRpbWVvdXQgPSB0bztcbiAgfVxuXG4gIC8qKlxuICAgKiBTYXZlIGNoYW5nZXMgdG8gbXVsdGlwbGUgZW50aXRpZXMgYWNyb3NzIG9uZSBvciBtb3JlIGVudGl0eSBjb2xsZWN0aW9ucy5cbiAgICogU2VydmVyIGVuZHBvaW50IG11c3QgdW5kZXJzdGFuZCB0aGUgZXNzZW50aWFsIFNhdmVFbnRpdGllcyBwcm90b2NvbCxcbiAgICogaW4gcGFydGljdWxhciB0aGUgQ2hhbmdlU2V0IGludGVyZmFjZSAoZXhjZXB0IGZvciBVcGRhdGU8VD4pLlxuICAgKiBUaGlzIGltcGxlbWVudGF0aW9uIGV4dHJhY3RzIHRoZSBlbnRpdHkgY2hhbmdlcyBmcm9tIGEgQ2hhbmdlU2V0IFVwZGF0ZTxUPltdIGFuZCBzZW5kcyB0aG9zZS5cbiAgICogSXQgdGhlbiByZWNvbnN0cnVjdHMgVXBkYXRlPFQ+W10gaW4gdGhlIHJldHVybmVkIG9ic2VydmFibGUgcmVzdWx0LlxuICAgKiBAcGFyYW0gY2hhbmdlU2V0ICBBbiBhcnJheSBvZiBTYXZlRW50aXR5SXRlbXMuXG4gICAqIEVhY2ggU2F2ZUVudGl0eUl0ZW0gZGVzY3JpYmUgYSBjaGFuZ2Ugb3BlcmF0aW9uIGZvciBvbmUgb3IgbW9yZSBlbnRpdGllcyBvZiBhIHNpbmdsZSBjb2xsZWN0aW9uLFxuICAgKiBrbm93biBieSBpdHMgJ2VudGl0eU5hbWUnLlxuICAgKiBAcGFyYW0gdXJsIFRoZSBzZXJ2ZXIgZW5kcG9pbnQgdGhhdCByZWNlaXZlcyB0aGlzIHJlcXVlc3QuXG4gICAqL1xuICBzYXZlRW50aXRpZXMoY2hhbmdlU2V0OiBDaGFuZ2VTZXQsIHVybDogc3RyaW5nKTogT2JzZXJ2YWJsZTxDaGFuZ2VTZXQ+IHtcbiAgICBjaGFuZ2VTZXQgPSB0aGlzLmZpbHRlckNoYW5nZVNldChjaGFuZ2VTZXQpO1xuICAgIC8vIEFzc3VtZSBzZXJ2ZXIgZG9lc24ndCB1bmRlcnN0YW5kIEBuZ3J4L2VudGl0eSBVcGRhdGU8VD4gc3RydWN0dXJlO1xuICAgIC8vIEV4dHJhY3QgdGhlIGVudGl0eSBjaGFuZ2VzIGZyb20gdGhlIFVwZGF0ZTxUPltdIGFuZCByZXN0b3JlIG9uIHRoZSByZXR1cm4gZnJvbSBzZXJ2ZXJcbiAgICBjaGFuZ2VTZXQgPSB0aGlzLmZsYXR0ZW5VcGRhdGVzKGNoYW5nZVNldCk7XG5cbiAgICBsZXQgcmVzdWx0JDogT2JzZXJ2YWJsZTxDaGFuZ2VTZXQ+ID0gdGhpcy5odHRwXG4gICAgICAucG9zdDxDaGFuZ2VTZXQ+KHVybCwgY2hhbmdlU2V0KVxuICAgICAgLnBpcGUoXG4gICAgICAgIG1hcCgocmVzdWx0KSA9PiB0aGlzLnJlc3RvcmVVcGRhdGVzKHJlc3VsdCkpLFxuICAgICAgICBjYXRjaEVycm9yKHRoaXMuaGFuZGxlRXJyb3IoeyBtZXRob2Q6ICdQT1NUJywgdXJsLCBkYXRhOiBjaGFuZ2VTZXQgfSkpXG4gICAgICApO1xuXG4gICAgaWYgKHRoaXMudGltZW91dCkge1xuICAgICAgcmVzdWx0JCA9IHJlc3VsdCQucGlwZSh0aW1lb3V0KHRoaXMudGltZW91dCkpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnNhdmVEZWxheSkge1xuICAgICAgcmVzdWx0JCA9IHJlc3VsdCQucGlwZShkZWxheSh0aGlzLnNhdmVEZWxheSkpO1xuICAgIH1cblxuICAgIHJldHVybiByZXN1bHQkO1xuICB9XG5cbiAgLy8gI3JlZ2lvbiBoZWxwZXJzXG4gIHByb3RlY3RlZCBoYW5kbGVFcnJvcihyZXFEYXRhOiBSZXF1ZXN0RGF0YSkge1xuICAgIHJldHVybiAoZXJyOiBhbnkpID0+IHtcbiAgICAgIGNvbnN0IGVycm9yID0gbmV3IERhdGFTZXJ2aWNlRXJyb3IoZXJyLCByZXFEYXRhKTtcbiAgICAgIHJldHVybiB0aHJvd0Vycm9yKGVycm9yKTtcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIEZpbHRlciBjaGFuZ2VTZXQgdG8gcmVtb3ZlIHVud2FudGVkIENoYW5nZVNldEl0ZW1zLlxuICAgKiBUaGlzIGltcGxlbWVudGF0aW9uIGV4Y2x1ZGVzIG51bGwgYW5kIGVtcHR5IENoYW5nZVNldEl0ZW1zLlxuICAgKiBAcGFyYW0gY2hhbmdlU2V0IENoYW5nZVNldCB3aXRoIGNoYW5nZXMgdG8gZmlsdGVyXG4gICAqL1xuICBwcm90ZWN0ZWQgZmlsdGVyQ2hhbmdlU2V0KGNoYW5nZVNldDogQ2hhbmdlU2V0KTogQ2hhbmdlU2V0IHtcbiAgICByZXR1cm4gZXhjbHVkZUVtcHR5Q2hhbmdlU2V0SXRlbXMoY2hhbmdlU2V0KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb252ZXJ0IHRoZSBlbnRpdGllcyBpbiB1cGRhdGUgY2hhbmdlcyBmcm9tIEBuZ3J4IFVwZGF0ZTxUPiBzdHJ1Y3R1cmUgdG8ganVzdCBULlxuICAgKiBSZXZlcnNlIG9mIHJlc3RvcmVVcGRhdGVzKCkuXG4gICAqL1xuICBwcm90ZWN0ZWQgZmxhdHRlblVwZGF0ZXMoY2hhbmdlU2V0OiBDaGFuZ2VTZXQpOiBDaGFuZ2VTZXQge1xuICAgIGxldCBjaGFuZ2VzID0gY2hhbmdlU2V0LmNoYW5nZXM7XG4gICAgaWYgKGNoYW5nZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gY2hhbmdlU2V0O1xuICAgIH1cbiAgICBsZXQgaGFzTXV0YXRlZCA9IGZhbHNlO1xuICAgIGNoYW5nZXMgPSBjaGFuZ2VzLm1hcCgoaXRlbSkgPT4ge1xuICAgICAgaWYgKGl0ZW0ub3AgPT09IHVwZGF0ZU9wICYmIGl0ZW0uZW50aXRpZXMubGVuZ3RoID4gMCkge1xuICAgICAgICBoYXNNdXRhdGVkID0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAuLi5pdGVtLFxuICAgICAgICAgIGVudGl0aWVzOiAoaXRlbSBhcyBDaGFuZ2VTZXRVcGRhdGUpLmVudGl0aWVzLm1hcCgodSkgPT4gdS5jaGFuZ2VzKSxcbiAgICAgICAgfTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBpdGVtO1xuICAgICAgfVxuICAgIH0pIGFzIENoYW5nZVNldEl0ZW1bXTtcbiAgICByZXR1cm4gaGFzTXV0YXRlZCA/IHsgLi4uY2hhbmdlU2V0LCBjaGFuZ2VzIH0gOiBjaGFuZ2VTZXQ7XG4gIH1cblxuICAvKipcbiAgICogQ29udmVydCB0aGUgZmxhdHRlbmVkIFQgZW50aXRpZXMgaW4gdXBkYXRlIGNoYW5nZXMgYmFjayB0byBAbmdyeCBVcGRhdGU8VD4gc3RydWN0dXJlcy5cbiAgICogUmV2ZXJzZSBvZiBmbGF0dGVuVXBkYXRlcygpLlxuICAgKi9cbiAgcHJvdGVjdGVkIHJlc3RvcmVVcGRhdGVzKGNoYW5nZVNldDogQ2hhbmdlU2V0KTogQ2hhbmdlU2V0IHtcbiAgICBpZiAoY2hhbmdlU2V0ID09IG51bGwpIHtcbiAgICAgIC8vIE5vdGhpbmc/IFNlcnZlciBwcm9iYWJseSByZXNwb25kZWQgd2l0aCAyMDQgLSBObyBDb250ZW50IGJlY2F1c2UgaXQgbWFkZSBubyBjaGFuZ2VzIHRvIHRoZSBpbnNlcnRlZCBvciB1cGRhdGVkIGVudGl0aWVzXG4gICAgICByZXR1cm4gY2hhbmdlU2V0O1xuICAgIH1cbiAgICBsZXQgY2hhbmdlcyA9IGNoYW5nZVNldC5jaGFuZ2VzO1xuICAgIGlmIChjaGFuZ2VzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIGNoYW5nZVNldDtcbiAgICB9XG4gICAgbGV0IGhhc011dGF0ZWQgPSBmYWxzZTtcbiAgICBjaGFuZ2VzID0gY2hhbmdlcy5tYXAoKGl0ZW0pID0+IHtcbiAgICAgIGlmIChpdGVtLm9wID09PSB1cGRhdGVPcCkge1xuICAgICAgICAvLyBUaGVzZSBhcmUgZW50aXRpZXMsIG5vdCBVcGRhdGVzOyBjb252ZXJ0IGJhY2sgdG8gVXBkYXRlc1xuICAgICAgICBoYXNNdXRhdGVkID0gdHJ1ZTtcbiAgICAgICAgY29uc3Qgc2VsZWN0SWQgPSB0aGlzLmdldElkU2VsZWN0b3IoaXRlbS5lbnRpdHlOYW1lKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAuLi5pdGVtLFxuICAgICAgICAgIGVudGl0aWVzOiBpdGVtLmVudGl0aWVzLm1hcCgodTogYW55KSA9PiAoe1xuICAgICAgICAgICAgaWQ6IHNlbGVjdElkKHUpLFxuICAgICAgICAgICAgY2hhbmdlczogdSxcbiAgICAgICAgICB9KSksXG4gICAgICAgIH0gYXMgQ2hhbmdlU2V0VXBkYXRlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGl0ZW07XG4gICAgICB9XG4gICAgfSkgYXMgQ2hhbmdlU2V0SXRlbVtdO1xuICAgIHJldHVybiBoYXNNdXRhdGVkID8geyAuLi5jaGFuZ2VTZXQsIGNoYW5nZXMgfSA6IGNoYW5nZVNldDtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIGlkIChwcmltYXJ5IGtleSkgc2VsZWN0b3IgZnVuY3Rpb24gZm9yIGFuIGVudGl0eSB0eXBlXG4gICAqIEBwYXJhbSBlbnRpdHlOYW1lIG5hbWUgb2YgdGhlIGVudGl0eSB0eXBlXG4gICAqL1xuICBwcm90ZWN0ZWQgZ2V0SWRTZWxlY3RvcihlbnRpdHlOYW1lOiBzdHJpbmcpIHtcbiAgICBsZXQgaWRTZWxlY3RvciA9IHRoaXMuaWRTZWxlY3RvcnNbZW50aXR5TmFtZV07XG4gICAgaWYgKCFpZFNlbGVjdG9yKSB7XG4gICAgICBpZFNlbGVjdG9yID0gdGhpcy5lbnRpdHlEZWZpbml0aW9uU2VydmljZS5nZXREZWZpbml0aW9uKGVudGl0eU5hbWUpXG4gICAgICAgIC5zZWxlY3RJZDtcbiAgICAgIHRoaXMuaWRTZWxlY3RvcnNbZW50aXR5TmFtZV0gPSBpZFNlbGVjdG9yO1xuICAgIH1cbiAgICByZXR1cm4gaWRTZWxlY3RvcjtcbiAgfVxuICAvLyAjZW5kcmVnaW9uIGhlbHBlcnNcbn1cbiJdfQ==
|
|
@@ -1,71 +0,0 @@
|
|
|
1
|
-
import { Injectable } from '@angular/core';
|
|
2
|
-
import { DefaultDataServiceFactory } from './default-data.service';
|
|
3
|
-
/**
|
|
4
|
-
* Registry of EntityCollection data services that make REST-like CRUD calls
|
|
5
|
-
* to entity collection endpoints.
|
|
6
|
-
*/
|
|
7
|
-
export class EntityDataService {
|
|
8
|
-
// TODO: Optionally inject specialized entity data services
|
|
9
|
-
// for those that aren't derived from BaseDataService.
|
|
10
|
-
constructor(defaultDataServiceFactory) {
|
|
11
|
-
this.defaultDataServiceFactory = defaultDataServiceFactory;
|
|
12
|
-
this.services = {};
|
|
13
|
-
}
|
|
14
|
-
/**
|
|
15
|
-
* Get (or create) a data service for entity type
|
|
16
|
-
* @param entityName - the name of the type
|
|
17
|
-
*
|
|
18
|
-
* Examples:
|
|
19
|
-
* getService('Hero'); // data service for Heroes, untyped
|
|
20
|
-
* getService<Hero>('Hero'); // data service for Heroes, typed as Hero
|
|
21
|
-
*/
|
|
22
|
-
getService(entityName) {
|
|
23
|
-
entityName = entityName.trim();
|
|
24
|
-
let service = this.services[entityName];
|
|
25
|
-
if (!service) {
|
|
26
|
-
service = this.defaultDataServiceFactory.create(entityName);
|
|
27
|
-
this.services[entityName] = service;
|
|
28
|
-
}
|
|
29
|
-
return service;
|
|
30
|
-
}
|
|
31
|
-
/**
|
|
32
|
-
* Register an EntityCollectionDataService for an entity type
|
|
33
|
-
* @param entityName - the name of the entity type
|
|
34
|
-
* @param service - data service for that entity type
|
|
35
|
-
*
|
|
36
|
-
* Examples:
|
|
37
|
-
* registerService('Hero', myHeroDataService);
|
|
38
|
-
* registerService('Villain', myVillainDataService);
|
|
39
|
-
*/
|
|
40
|
-
registerService(entityName, service) {
|
|
41
|
-
this.services[entityName.trim()] = service;
|
|
42
|
-
}
|
|
43
|
-
/**
|
|
44
|
-
* Register a batch of data services.
|
|
45
|
-
* @param services - data services to merge into existing services
|
|
46
|
-
*
|
|
47
|
-
* Examples:
|
|
48
|
-
* registerServices({
|
|
49
|
-
* Hero: myHeroDataService,
|
|
50
|
-
* Villain: myVillainDataService
|
|
51
|
-
* });
|
|
52
|
-
*/
|
|
53
|
-
registerServices(services) {
|
|
54
|
-
this.services = Object.assign(Object.assign({}, this.services), services);
|
|
55
|
-
}
|
|
56
|
-
}
|
|
57
|
-
/** @type {!Array<{type: !Function, args: (undefined|!Array<?>)}>} */
|
|
58
|
-
EntityDataService.decorators = [
|
|
59
|
-
{ type: Injectable }
|
|
60
|
-
];
|
|
61
|
-
/**
|
|
62
|
-
* @type {function(): !Array<(null|{
|
|
63
|
-
* type: ?,
|
|
64
|
-
* decorators: (undefined|!Array<{type: !Function, args: (undefined|!Array<?>)}>),
|
|
65
|
-
* })>}
|
|
66
|
-
* @nocollapse
|
|
67
|
-
*/
|
|
68
|
-
EntityDataService.ctorParameters = () => [
|
|
69
|
-
{ type: DefaultDataServiceFactory }
|
|
70
|
-
];
|
|
71
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW50aXR5LWRhdGEuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL21vZHVsZXMvZGF0YS9zcmMvZGF0YXNlcnZpY2VzL2VudGl0eS1kYXRhLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUczQyxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUVuRTs7O0dBR0c7QUFFSCxNQUFNLE9BQU8saUJBQWlCO0lBRzVCLDREQUE0RDtJQUM1RCxzREFBc0Q7SUFDdEQsWUFBc0IseUJBQW9EO1FBQXBELDhCQUF5QixHQUF6Qix5QkFBeUIsQ0FBMkI7UUFKaEUsYUFBUSxHQUF5RCxFQUFFLENBQUM7SUFJRCxDQUFDO0lBRTlFOzs7Ozs7O09BT0c7SUFDSCxVQUFVLENBQUksVUFBa0I7UUFDOUIsVUFBVSxHQUFHLFVBQVUsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUMvQixJQUFJLE9BQU8sR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ3hDLElBQUksQ0FBQyxPQUFPLEVBQUU7WUFDWixPQUFPLEdBQUcsSUFBSSxDQUFDLHlCQUF5QixDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQztZQUM1RCxJQUFJLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxHQUFHLE9BQU8sQ0FBQztTQUNyQztRQUNELE9BQU8sT0FBTyxDQUFDO0lBQ2pCLENBQUM7SUFFRDs7Ozs7Ozs7T0FRRztJQUNILGVBQWUsQ0FDYixVQUFrQixFQUNsQixPQUF1QztRQUV2QyxJQUFJLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxHQUFHLE9BQU8sQ0FBQztJQUM3QyxDQUFDO0lBRUQ7Ozs7Ozs7OztPQVNHO0lBQ0gsZ0JBQWdCLENBQUMsUUFFaEI7UUFDQyxJQUFJLENBQUMsUUFBUSxtQ0FBUSxJQUFJLENBQUMsUUFBUSxHQUFLLFFBQVEsQ0FBRSxDQUFDO0lBQ3BELENBQUM7Ozs7WUF4REYsVUFBVTs7Ozs7Ozs7OztZQU5GLHlCQUF5QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHsgRW50aXR5Q29sbGVjdGlvbkRhdGFTZXJ2aWNlIH0gZnJvbSAnLi9pbnRlcmZhY2VzJztcbmltcG9ydCB7IERlZmF1bHREYXRhU2VydmljZUZhY3RvcnkgfSBmcm9tICcuL2RlZmF1bHQtZGF0YS5zZXJ2aWNlJztcblxuLyoqXG4gKiBSZWdpc3RyeSBvZiBFbnRpdHlDb2xsZWN0aW9uIGRhdGEgc2VydmljZXMgdGhhdCBtYWtlIFJFU1QtbGlrZSBDUlVEIGNhbGxzXG4gKiB0byBlbnRpdHkgY29sbGVjdGlvbiBlbmRwb2ludHMuXG4gKi9cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBFbnRpdHlEYXRhU2VydmljZSB7XG4gIHByb3RlY3RlZCBzZXJ2aWNlczogeyBbbmFtZTogc3RyaW5nXTogRW50aXR5Q29sbGVjdGlvbkRhdGFTZXJ2aWNlPGFueT4gfSA9IHt9O1xuXG4gIC8vIFRPRE86ICBPcHRpb25hbGx5IGluamVjdCBzcGVjaWFsaXplZCBlbnRpdHkgZGF0YSBzZXJ2aWNlc1xuICAvLyBmb3IgdGhvc2UgdGhhdCBhcmVuJ3QgZGVyaXZlZCBmcm9tIEJhc2VEYXRhU2VydmljZS5cbiAgY29uc3RydWN0b3IocHJvdGVjdGVkIGRlZmF1bHREYXRhU2VydmljZUZhY3Rvcnk6IERlZmF1bHREYXRhU2VydmljZUZhY3RvcnkpIHt9XG5cbiAgLyoqXG4gICAqIEdldCAob3IgY3JlYXRlKSBhIGRhdGEgc2VydmljZSBmb3IgZW50aXR5IHR5cGVcbiAgICogQHBhcmFtIGVudGl0eU5hbWUgLSB0aGUgbmFtZSBvZiB0aGUgdHlwZVxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICogICBnZXRTZXJ2aWNlKCdIZXJvJyk7IC8vIGRhdGEgc2VydmljZSBmb3IgSGVyb2VzLCB1bnR5cGVkXG4gICAqICAgZ2V0U2VydmljZTxIZXJvPignSGVybycpOyAvLyBkYXRhIHNlcnZpY2UgZm9yIEhlcm9lcywgdHlwZWQgYXMgSGVyb1xuICAgKi9cbiAgZ2V0U2VydmljZTxUPihlbnRpdHlOYW1lOiBzdHJpbmcpOiBFbnRpdHlDb2xsZWN0aW9uRGF0YVNlcnZpY2U8VD4ge1xuICAgIGVudGl0eU5hbWUgPSBlbnRpdHlOYW1lLnRyaW0oKTtcbiAgICBsZXQgc2VydmljZSA9IHRoaXMuc2VydmljZXNbZW50aXR5TmFtZV07XG4gICAgaWYgKCFzZXJ2aWNlKSB7XG4gICAgICBzZXJ2aWNlID0gdGhpcy5kZWZhdWx0RGF0YVNlcnZpY2VGYWN0b3J5LmNyZWF0ZShlbnRpdHlOYW1lKTtcbiAgICAgIHRoaXMuc2VydmljZXNbZW50aXR5TmFtZV0gPSBzZXJ2aWNlO1xuICAgIH1cbiAgICByZXR1cm4gc2VydmljZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWdpc3RlciBhbiBFbnRpdHlDb2xsZWN0aW9uRGF0YVNlcnZpY2UgZm9yIGFuIGVudGl0eSB0eXBlXG4gICAqIEBwYXJhbSBlbnRpdHlOYW1lIC0gdGhlIG5hbWUgb2YgdGhlIGVudGl0eSB0eXBlXG4gICAqIEBwYXJhbSBzZXJ2aWNlIC0gZGF0YSBzZXJ2aWNlIGZvciB0aGF0IGVudGl0eSB0eXBlXG4gICAqXG4gICAqIEV4YW1wbGVzOlxuICAgKiAgIHJlZ2lzdGVyU2VydmljZSgnSGVybycsIG15SGVyb0RhdGFTZXJ2aWNlKTtcbiAgICogICByZWdpc3RlclNlcnZpY2UoJ1ZpbGxhaW4nLCBteVZpbGxhaW5EYXRhU2VydmljZSk7XG4gICAqL1xuICByZWdpc3RlclNlcnZpY2U8VD4oXG4gICAgZW50aXR5TmFtZTogc3RyaW5nLFxuICAgIHNlcnZpY2U6IEVudGl0eUNvbGxlY3Rpb25EYXRhU2VydmljZTxUPlxuICApIHtcbiAgICB0aGlzLnNlcnZpY2VzW2VudGl0eU5hbWUudHJpbSgpXSA9IHNlcnZpY2U7XG4gIH1cblxuICAvKipcbiAgICogUmVnaXN0ZXIgYSBiYXRjaCBvZiBkYXRhIHNlcnZpY2VzLlxuICAgKiBAcGFyYW0gc2VydmljZXMgLSBkYXRhIHNlcnZpY2VzIHRvIG1lcmdlIGludG8gZXhpc3Rpbmcgc2VydmljZXNcbiAgICpcbiAgICogRXhhbXBsZXM6XG4gICAqICAgcmVnaXN0ZXJTZXJ2aWNlcyh7XG4gICAqICAgICBIZXJvOiBteUhlcm9EYXRhU2VydmljZSxcbiAgICogICAgIFZpbGxhaW46IG15VmlsbGFpbkRhdGFTZXJ2aWNlXG4gICAqICAgfSk7XG4gICAqL1xuICByZWdpc3RlclNlcnZpY2VzKHNlcnZpY2VzOiB7XG4gICAgW25hbWU6IHN0cmluZ106IEVudGl0eUNvbGxlY3Rpb25EYXRhU2VydmljZTxhbnk+O1xuICB9KSB7XG4gICAgdGhpcy5zZXJ2aWNlcyA9IHsgLi4udGhpcy5zZXJ2aWNlcywgLi4uc2VydmljZXMgfTtcbiAgfVxufVxuIl19
|
|
@@ -1,91 +0,0 @@
|
|
|
1
|
-
import { Injectable } from '@angular/core';
|
|
2
|
-
import { Pluralizer } from '../utils/interfaces';
|
|
3
|
-
/**
|
|
4
|
-
* Known resource URLS for specific entity types.
|
|
5
|
-
* Each entity's resource URLS are endpoints that
|
|
6
|
-
* target single entity and multi-entity HTTP operations.
|
|
7
|
-
* Used by the `DefaultHttpUrlGenerator`.
|
|
8
|
-
*/
|
|
9
|
-
export class EntityHttpResourceUrls {
|
|
10
|
-
}
|
|
11
|
-
/**
|
|
12
|
-
* Generate the base part of an HTTP URL for
|
|
13
|
-
* single entity or entity collection resource
|
|
14
|
-
*/
|
|
15
|
-
export class HttpUrlGenerator {
|
|
16
|
-
}
|
|
17
|
-
export class DefaultHttpUrlGenerator {
|
|
18
|
-
constructor(pluralizer) {
|
|
19
|
-
this.pluralizer = pluralizer;
|
|
20
|
-
/**
|
|
21
|
-
* Known single-entity and collection resource URLs for HTTP calls.
|
|
22
|
-
* Generator methods returns these resource URLs for a given entity type name.
|
|
23
|
-
* If the resources for an entity type name are not know, it generates
|
|
24
|
-
* and caches a resource name for future use
|
|
25
|
-
*/
|
|
26
|
-
this.knownHttpResourceUrls = {};
|
|
27
|
-
}
|
|
28
|
-
/**
|
|
29
|
-
* Get or generate the entity and collection resource URLs for the given entity type name
|
|
30
|
-
* @param entityName {string} Name of the entity type, e.g, 'Hero'
|
|
31
|
-
* @param root {string} Root path to the resource, e.g., 'some-api`
|
|
32
|
-
*/
|
|
33
|
-
getResourceUrls(entityName, root) {
|
|
34
|
-
let resourceUrls = this.knownHttpResourceUrls[entityName];
|
|
35
|
-
if (!resourceUrls) {
|
|
36
|
-
const nRoot = normalizeRoot(root);
|
|
37
|
-
resourceUrls = {
|
|
38
|
-
entityResourceUrl: `${nRoot}/${entityName}/`.toLowerCase(),
|
|
39
|
-
collectionResourceUrl: `${nRoot}/${this.pluralizer.pluralize(entityName)}/`.toLowerCase(),
|
|
40
|
-
};
|
|
41
|
-
this.registerHttpResourceUrls({ [entityName]: resourceUrls });
|
|
42
|
-
}
|
|
43
|
-
return resourceUrls;
|
|
44
|
-
}
|
|
45
|
-
/**
|
|
46
|
-
* Create the path to a single entity resource
|
|
47
|
-
* @param entityName {string} Name of the entity type, e.g, 'Hero'
|
|
48
|
-
* @param root {string} Root path to the resource, e.g., 'some-api`
|
|
49
|
-
* @returns complete path to resource, e.g, 'some-api/hero'
|
|
50
|
-
*/
|
|
51
|
-
entityResource(entityName, root) {
|
|
52
|
-
return this.getResourceUrls(entityName, root).entityResourceUrl;
|
|
53
|
-
}
|
|
54
|
-
/**
|
|
55
|
-
* Create the path to a multiple entity (collection) resource
|
|
56
|
-
* @param entityName {string} Name of the entity type, e.g, 'Hero'
|
|
57
|
-
* @param root {string} Root path to the resource, e.g., 'some-api`
|
|
58
|
-
* @returns complete path to resource, e.g, 'some-api/heroes'
|
|
59
|
-
*/
|
|
60
|
-
collectionResource(entityName, root) {
|
|
61
|
-
return this.getResourceUrls(entityName, root).collectionResourceUrl;
|
|
62
|
-
}
|
|
63
|
-
/**
|
|
64
|
-
* Register known single-entity and collection resource URLs for HTTP calls
|
|
65
|
-
* @param entityHttpResourceUrls {EntityHttpResourceUrls} resource urls for specific entity type names
|
|
66
|
-
* Well-formed resource urls end in a '/';
|
|
67
|
-
* Note: this method does not ensure that resource urls are well-formed.
|
|
68
|
-
*/
|
|
69
|
-
registerHttpResourceUrls(entityHttpResourceUrls) {
|
|
70
|
-
this.knownHttpResourceUrls = Object.assign(Object.assign({}, this.knownHttpResourceUrls), (entityHttpResourceUrls || {}));
|
|
71
|
-
}
|
|
72
|
-
}
|
|
73
|
-
/** @type {!Array<{type: !Function, args: (undefined|!Array<?>)}>} */
|
|
74
|
-
DefaultHttpUrlGenerator.decorators = [
|
|
75
|
-
{ type: Injectable }
|
|
76
|
-
];
|
|
77
|
-
/**
|
|
78
|
-
* @type {function(): !Array<(null|{
|
|
79
|
-
* type: ?,
|
|
80
|
-
* decorators: (undefined|!Array<{type: !Function, args: (undefined|!Array<?>)}>),
|
|
81
|
-
* })>}
|
|
82
|
-
* @nocollapse
|
|
83
|
-
*/
|
|
84
|
-
DefaultHttpUrlGenerator.ctorParameters = () => [
|
|
85
|
-
{ type: Pluralizer }
|
|
86
|
-
];
|
|
87
|
-
/** Remove leading & trailing spaces or slashes */
|
|
88
|
-
export function normalizeRoot(root) {
|
|
89
|
-
return root.replace(/^[/\s]+|[/\s]+$/g, '');
|
|
90
|
-
}
|
|
91
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaHR0cC11cmwtZ2VuZXJhdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbW9kdWxlcy9kYXRhL3NyYy9kYXRhc2VydmljZXMvaHR0cC11cmwtZ2VuZXJhdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBRWpEOzs7OztHQUtHO0FBQ0gsTUFBTSxPQUFnQixzQkFBc0I7Q0FFM0M7QUF1QkQ7OztHQUdHO0FBQ0gsTUFBTSxPQUFnQixnQkFBZ0I7Q0FvQnJDO0FBR0QsTUFBTSxPQUFPLHVCQUF1QjtJQVNsQyxZQUFvQixVQUFzQjtRQUF0QixlQUFVLEdBQVYsVUFBVSxDQUFZO1FBUjFDOzs7OztXQUtHO1FBQ08sMEJBQXFCLEdBQTJCLEVBQUUsQ0FBQztJQUVoQixDQUFDO0lBRTlDOzs7O09BSUc7SUFDTyxlQUFlLENBQ3ZCLFVBQWtCLEVBQ2xCLElBQVk7UUFFWixJQUFJLFlBQVksR0FBRyxJQUFJLENBQUMscUJBQXFCLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDMUQsSUFBSSxDQUFDLFlBQVksRUFBRTtZQUNqQixNQUFNLEtBQUssR0FBRyxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDbEMsWUFBWSxHQUFHO2dCQUNiLGlCQUFpQixFQUFFLEdBQUcsS0FBSyxJQUFJLFVBQVUsR0FBRyxDQUFDLFdBQVcsRUFBRTtnQkFDMUQscUJBQXFCLEVBQUUsR0FBRyxLQUFLLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQzFELFVBQVUsQ0FDWCxHQUFHLENBQUMsV0FBVyxFQUFFO2FBQ25CLENBQUM7WUFDRixJQUFJLENBQUMsd0JBQXdCLENBQUMsRUFBRSxDQUFDLFVBQVUsQ0FBQyxFQUFFLFlBQVksRUFBRSxDQUFDLENBQUM7U0FDL0Q7UUFDRCxPQUFPLFlBQVksQ0FBQztJQUN0QixDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSCxjQUFjLENBQUMsVUFBa0IsRUFBRSxJQUFZO1FBQzdDLE9BQU8sSUFBSSxDQUFDLGVBQWUsQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDLENBQUMsaUJBQWlCLENBQUM7SUFDbEUsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gsa0JBQWtCLENBQUMsVUFBa0IsRUFBRSxJQUFZO1FBQ2pELE9BQU8sSUFBSSxDQUFDLGVBQWUsQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDLENBQUMscUJBQXFCLENBQUM7SUFDdEUsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gsd0JBQXdCLENBQ3RCLHNCQUE4QztRQUU5QyxJQUFJLENBQUMscUJBQXFCLG1DQUNyQixJQUFJLENBQUMscUJBQXFCLEdBQzFCLENBQUMsc0JBQXNCLElBQUksRUFBRSxDQUFDLENBQ2xDLENBQUM7SUFDSixDQUFDOzs7O1lBcEVGLFVBQVU7Ozs7Ozs7Ozs7WUEzREYsVUFBVTs7QUFrSW5CLGtEQUFrRDtBQUNsRCxNQUFNLFVBQVUsYUFBYSxDQUFDLElBQVk7SUFDeEMsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLGtCQUFrQixFQUFFLEVBQUUsQ0FBQyxDQUFDO0FBQzlDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBQbHVyYWxpemVyIH0gZnJvbSAnLi4vdXRpbHMvaW50ZXJmYWNlcyc7XG5cbi8qKlxuICogS25vd24gcmVzb3VyY2UgVVJMUyBmb3Igc3BlY2lmaWMgZW50aXR5IHR5cGVzLlxuICogRWFjaCBlbnRpdHkncyByZXNvdXJjZSBVUkxTIGFyZSBlbmRwb2ludHMgdGhhdFxuICogdGFyZ2V0IHNpbmdsZSBlbnRpdHkgYW5kIG11bHRpLWVudGl0eSBIVFRQIG9wZXJhdGlvbnMuXG4gKiBVc2VkIGJ5IHRoZSBgRGVmYXVsdEh0dHBVcmxHZW5lcmF0b3JgLlxuICovXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgRW50aXR5SHR0cFJlc291cmNlVXJscyB7XG4gIFtlbnRpdHlOYW1lOiBzdHJpbmddOiBIdHRwUmVzb3VyY2VVcmxzO1xufVxuXG4vKipcbiAqIFJlc291cmNlIFVSTFMgZm9yIEhUVFAgb3BlcmF0aW9ucyB0aGF0IHRhcmdldCBzaW5nbGUgZW50aXR5XG4gKiBhbmQgbXVsdGktZW50aXR5IGVuZHBvaW50cy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBIdHRwUmVzb3VyY2VVcmxzIHtcbiAgLyoqXG4gICAqIFRoZSBVUkwgcGF0aCBmb3IgYSBzaW5nbGUgZW50aXR5IGVuZHBvaW50LCBlLmcsIGBzb21lLWFwaS1yb290L2hlcm8vYFxuICAgKiBzdWNoIGFzIHlvdSdkIHVzZSB0byBhZGQgYSBoZXJvLlxuICAgKiBFeGFtcGxlOiBgaHR0cENsaWVudC5wb3N0PEhlcm8+KCdzb21lLWFwaS1yb290L2hlcm8vJywgYWRkZWRIZXJvKWAuXG4gICAqIE5vdGUgdHJhaWxpbmcgc2xhc2ggKC8pLlxuICAgKi9cbiAgZW50aXR5UmVzb3VyY2VVcmw6IHN0cmluZztcbiAgLyoqXG4gICAqIFRoZSBVUkwgcGF0aCBmb3IgYSBtdWx0aXBsZS1lbnRpdHkgZW5kcG9pbnQsIGUuZywgYHNvbWUtYXBpLXJvb3QvaGVyb2VzL2BcbiAgICogc3VjaCBhcyB5b3UnZCB1c2Ugd2hlbiBnZXR0aW5nIGFsbCBoZXJvZXMuXG4gICAqIEV4YW1wbGU6IGBodHRwQ2xpZW50LmdldDxIZXJvW10+KCdzb21lLWFwaS1yb290L2hlcm9lcy8nKWBcbiAgICogTm90ZSB0cmFpbGluZyBzbGFzaCAoLykuXG4gICAqL1xuICBjb2xsZWN0aW9uUmVzb3VyY2VVcmw6IHN0cmluZztcbn1cblxuLyoqXG4gKiBHZW5lcmF0ZSB0aGUgYmFzZSBwYXJ0IG9mIGFuIEhUVFAgVVJMIGZvclxuICogc2luZ2xlIGVudGl0eSBvciBlbnRpdHkgY29sbGVjdGlvbiByZXNvdXJjZVxuICovXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgSHR0cFVybEdlbmVyYXRvciB7XG4gIC8qKlxuICAgKiBSZXR1cm4gdGhlIGJhc2UgVVJMIGZvciBhIHNpbmdsZSBlbnRpdHkgcmVzb3VyY2UsXG4gICAqIGUuZy4sIHRoZSBiYXNlIFVSTCB0byBnZXQgYSBzaW5nbGUgaGVybyBieSBpdHMgaWRcbiAgICovXG4gIGFic3RyYWN0IGVudGl0eVJlc291cmNlKGVudGl0eU5hbWU6IHN0cmluZywgcm9vdDogc3RyaW5nKTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBSZXR1cm4gdGhlIGJhc2UgVVJMIGZvciBhIGNvbGxlY3Rpb24gcmVzb3VyY2UsXG4gICAqIGUuZy4sIHRoZSBiYXNlIFVSTCB0byBnZXQgYWxsIGhlcm9lc1xuICAgKi9cbiAgYWJzdHJhY3QgY29sbGVjdGlvblJlc291cmNlKGVudGl0eU5hbWU6IHN0cmluZywgcm9vdDogc3RyaW5nKTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBSZWdpc3RlciBrbm93biBzaW5nbGUtZW50aXR5IGFuZCBjb2xsZWN0aW9uIHJlc291cmNlIFVSTHMgZm9yIEhUVFAgY2FsbHNcbiAgICogQHBhcmFtIGVudGl0eUh0dHBSZXNvdXJjZVVybHMge0VudGl0eUh0dHBSZXNvdXJjZVVybHN9IHJlc291cmNlIHVybHMgZm9yIHNwZWNpZmljIGVudGl0eSB0eXBlIG5hbWVzXG4gICAqL1xuICBhYnN0cmFjdCByZWdpc3Rlckh0dHBSZXNvdXJjZVVybHMoXG4gICAgZW50aXR5SHR0cFJlc291cmNlVXJscz86IEVudGl0eUh0dHBSZXNvdXJjZVVybHNcbiAgKTogdm9pZDtcbn1cblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIERlZmF1bHRIdHRwVXJsR2VuZXJhdG9yIGltcGxlbWVudHMgSHR0cFVybEdlbmVyYXRvciB7XG4gIC8qKlxuICAgKiBLbm93biBzaW5nbGUtZW50aXR5IGFuZCBjb2xsZWN0aW9uIHJlc291cmNlIFVSTHMgZm9yIEhUVFAgY2FsbHMuXG4gICAqIEdlbmVyYXRvciBtZXRob2RzIHJldHVybnMgdGhlc2UgcmVzb3VyY2UgVVJMcyBmb3IgYSBnaXZlbiBlbnRpdHkgdHlwZSBuYW1lLlxuICAgKiBJZiB0aGUgcmVzb3VyY2VzIGZvciBhbiBlbnRpdHkgdHlwZSBuYW1lIGFyZSBub3Qga25vdywgaXQgZ2VuZXJhdGVzXG4gICAqIGFuZCBjYWNoZXMgYSByZXNvdXJjZSBuYW1lIGZvciBmdXR1cmUgdXNlXG4gICAqL1xuICBwcm90ZWN0ZWQga25vd25IdHRwUmVzb3VyY2VVcmxzOiBFbnRpdHlIdHRwUmVzb3VyY2VVcmxzID0ge307XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBwbHVyYWxpemVyOiBQbHVyYWxpemVyKSB7fVxuXG4gIC8qKlxuICAgKiBHZXQgb3IgZ2VuZXJhdGUgdGhlIGVudGl0eSBhbmQgY29sbGVjdGlvbiByZXNvdXJjZSBVUkxzIGZvciB0aGUgZ2l2ZW4gZW50aXR5IHR5cGUgbmFtZVxuICAgKiBAcGFyYW0gZW50aXR5TmFtZSB7c3RyaW5nfSBOYW1lIG9mIHRoZSBlbnRpdHkgdHlwZSwgZS5nLCAnSGVybydcbiAgICogQHBhcmFtIHJvb3Qge3N0cmluZ30gUm9vdCBwYXRoIHRvIHRoZSByZXNvdXJjZSwgZS5nLiwgJ3NvbWUtYXBpYFxuICAgKi9cbiAgcHJvdGVjdGVkIGdldFJlc291cmNlVXJscyhcbiAgICBlbnRpdHlOYW1lOiBzdHJpbmcsXG4gICAgcm9vdDogc3RyaW5nXG4gICk6IEh0dHBSZXNvdXJjZVVybHMge1xuICAgIGxldCByZXNvdXJjZVVybHMgPSB0aGlzLmtub3duSHR0cFJlc291cmNlVXJsc1tlbnRpdHlOYW1lXTtcbiAgICBpZiAoIXJlc291cmNlVXJscykge1xuICAgICAgY29uc3QgblJvb3QgPSBub3JtYWxpemVSb290KHJvb3QpO1xuICAgICAgcmVzb3VyY2VVcmxzID0ge1xuICAgICAgICBlbnRpdHlSZXNvdXJjZVVybDogYCR7blJvb3R9LyR7ZW50aXR5TmFtZX0vYC50b0xvd2VyQ2FzZSgpLFxuICAgICAgICBjb2xsZWN0aW9uUmVzb3VyY2VVcmw6IGAke25Sb290fS8ke3RoaXMucGx1cmFsaXplci5wbHVyYWxpemUoXG4gICAgICAgICAgZW50aXR5TmFtZVxuICAgICAgICApfS9gLnRvTG93ZXJDYXNlKCksXG4gICAgICB9O1xuICAgICAgdGhpcy5yZWdpc3Rlckh0dHBSZXNvdXJjZVVybHMoeyBbZW50aXR5TmFtZV06IHJlc291cmNlVXJscyB9KTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc291cmNlVXJscztcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgdGhlIHBhdGggdG8gYSBzaW5nbGUgZW50aXR5IHJlc291cmNlXG4gICAqIEBwYXJhbSBlbnRpdHlOYW1lIHtzdHJpbmd9IE5hbWUgb2YgdGhlIGVudGl0eSB0eXBlLCBlLmcsICdIZXJvJ1xuICAgKiBAcGFyYW0gcm9vdCB7c3RyaW5nfSBSb290IHBhdGggdG8gdGhlIHJlc291cmNlLCBlLmcuLCAnc29tZS1hcGlgXG4gICAqIEByZXR1cm5zIGNvbXBsZXRlIHBhdGggdG8gcmVzb3VyY2UsIGUuZywgJ3NvbWUtYXBpL2hlcm8nXG4gICAqL1xuICBlbnRpdHlSZXNvdXJjZShlbnRpdHlOYW1lOiBzdHJpbmcsIHJvb3Q6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UmVzb3VyY2VVcmxzKGVudGl0eU5hbWUsIHJvb3QpLmVudGl0eVJlc291cmNlVXJsO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSB0aGUgcGF0aCB0byBhIG11bHRpcGxlIGVudGl0eSAoY29sbGVjdGlvbikgcmVzb3VyY2VcbiAgICogQHBhcmFtIGVudGl0eU5hbWUge3N0cmluZ30gTmFtZSBvZiB0aGUgZW50aXR5IHR5cGUsIGUuZywgJ0hlcm8nXG4gICAqIEBwYXJhbSByb290IHtzdHJpbmd9IFJvb3QgcGF0aCB0byB0aGUgcmVzb3VyY2UsIGUuZy4sICdzb21lLWFwaWBcbiAgICogQHJldHVybnMgY29tcGxldGUgcGF0aCB0byByZXNvdXJjZSwgZS5nLCAnc29tZS1hcGkvaGVyb2VzJ1xuICAgKi9cbiAgY29sbGVjdGlvblJlc291cmNlKGVudGl0eU5hbWU6IHN0cmluZywgcm9vdDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRSZXNvdXJjZVVybHMoZW50aXR5TmFtZSwgcm9vdCkuY29sbGVjdGlvblJlc291cmNlVXJsO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlZ2lzdGVyIGtub3duIHNpbmdsZS1lbnRpdHkgYW5kIGNvbGxlY3Rpb24gcmVzb3VyY2UgVVJMcyBmb3IgSFRUUCBjYWxsc1xuICAgKiBAcGFyYW0gZW50aXR5SHR0cFJlc291cmNlVXJscyB7RW50aXR5SHR0cFJlc291cmNlVXJsc30gcmVzb3VyY2UgdXJscyBmb3Igc3BlY2lmaWMgZW50aXR5IHR5cGUgbmFtZXNcbiAgICogV2VsbC1mb3JtZWQgcmVzb3VyY2UgdXJscyBlbmQgaW4gYSAnLyc7XG4gICAqIE5vdGU6IHRoaXMgbWV0aG9kIGRvZXMgbm90IGVuc3VyZSB0aGF0IHJlc291cmNlIHVybHMgYXJlIHdlbGwtZm9ybWVkLlxuICAgKi9cbiAgcmVnaXN0ZXJIdHRwUmVzb3VyY2VVcmxzKFxuICAgIGVudGl0eUh0dHBSZXNvdXJjZVVybHM6IEVudGl0eUh0dHBSZXNvdXJjZVVybHNcbiAgKTogdm9pZCB7XG4gICAgdGhpcy5rbm93bkh0dHBSZXNvdXJjZVVybHMgPSB7XG4gICAgICAuLi50aGlzLmtub3duSHR0cFJlc291cmNlVXJscyxcbiAgICAgIC4uLihlbnRpdHlIdHRwUmVzb3VyY2VVcmxzIHx8IHt9KSxcbiAgICB9O1xuICB9XG59XG5cbi8qKiBSZW1vdmUgbGVhZGluZyAmIHRyYWlsaW5nIHNwYWNlcyBvciBzbGFzaGVzICovXG5leHBvcnQgZnVuY3Rpb24gbm9ybWFsaXplUm9vdChyb290OiBzdHJpbmcpIHtcbiAgcmV0dXJuIHJvb3QucmVwbGFjZSgvXlsvXFxzXSt8Wy9cXHNdKyQvZywgJycpO1xufVxuIl19
|