@ngrx/data 15.4.0 → 16.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.
- package/esm2022/src/actions/entity-action-factory.mjs +51 -0
- package/esm2022/src/actions/entity-action-guard.mjs +130 -0
- package/esm2022/src/dataservices/default-data.service.mjs +210 -0
- package/esm2022/src/dataservices/entity-cache-data.service.mjs +147 -0
- package/esm2022/src/dataservices/entity-data.service.mjs +64 -0
- package/esm2022/src/dataservices/http-url-generator.mjs +88 -0
- package/esm2022/src/dataservices/persistence-result-handler.service.mjs +50 -0
- package/esm2022/src/dispatchers/entity-cache-dispatcher.mjs +164 -0
- package/esm2022/src/dispatchers/entity-dispatcher-default-options.mjs +31 -0
- package/esm2022/src/dispatchers/entity-dispatcher-factory.mjs +68 -0
- package/esm2022/src/effects/entity-cache-effects.mjs +116 -0
- package/esm2022/src/effects/entity-effects.mjs +149 -0
- package/esm2022/src/entity-data-without-effects.module.mjs +28 -0
- package/esm2022/src/entity-data.module.mjs +29 -0
- package/esm2022/src/entity-metadata/entity-definition.service.mjs +94 -0
- package/esm2022/src/entity-services/entity-collection-service-elements-factory.mjs +39 -0
- package/esm2022/src/entity-services/entity-collection-service-factory.mjs +29 -0
- package/esm2022/src/entity-services/entity-services-base.mjs +120 -0
- package/esm2022/src/entity-services/entity-services-elements.mjs +34 -0
- package/esm2022/src/reducers/entity-cache-reducer.mjs +272 -0
- package/esm2022/src/reducers/entity-collection-creator.mjs +38 -0
- package/{esm2020 → esm2022}/src/reducers/entity-collection-reducer-methods.mjs +6 -5
- package/esm2022/src/reducers/entity-collection-reducer-registry.mjs +69 -0
- package/esm2022/src/reducers/entity-collection-reducer.mjs +25 -0
- package/esm2022/src/selectors/entity-selectors$.mjs +53 -0
- package/esm2022/src/selectors/entity-selectors.mjs +97 -0
- package/esm2022/src/utils/correlation-id-generator.mjs +31 -0
- package/esm2022/src/utils/default-logger.mjs +26 -0
- package/esm2022/src/utils/default-pluralizer.mjs +72 -0
- package/{fesm2020 → fesm2022}/ngrx-data.mjs +90 -90
- package/fesm2022/ngrx-data.mjs.map +1 -0
- package/package.json +10 -16
- package/schematics/ng-add/index.js +6 -6
- package/schematics/ng-add/index.js.map +1 -1
- package/schematics/ng-add/schema.js +1 -1
- package/schematics-core/index.js +50 -61
- package/schematics-core/index.js.map +1 -1
- package/schematics-core/utility/ast-utils.js +3 -3
- package/schematics-core/utility/change.js +2 -2
- package/schematics-core/utility/config.js +1 -1
- package/schematics-core/utility/find-component.js +2 -2
- package/schematics-core/utility/find-module.js +2 -2
- package/schematics-core/utility/json-utilts.js +2 -2
- package/schematics-core/utility/libs-version.js +2 -2
- package/schematics-core/utility/libs-version.js.map +1 -1
- package/schematics-core/utility/ngrx-utils.js +3 -3
- package/schematics-core/utility/package.js +1 -1
- package/schematics-core/utility/parse-name.js +2 -2
- package/schematics-core/utility/project.js +1 -1
- package/schematics-core/utility/strings.js +1 -1
- package/schematics-core/utility/update.js +1 -1
- package/schematics-core/utility/visitors.js +7 -7
- package/src/actions/entity-cache-change-set.d.ts +1 -1
- package/src/dataservices/interfaces.d.ts +2 -2
- package/src/entity-metadata/entity-filters.d.ts +1 -1
- package/src/reducers/entity-collection-reducer.d.ts +1 -1
- package/src/reducers/entity-collection.d.ts +1 -1
- package/src/selectors/entity-cache-selector.d.ts +1 -1
- package/esm2020/src/actions/entity-action-factory.mjs +0 -50
- package/esm2020/src/actions/entity-action-guard.mjs +0 -130
- package/esm2020/src/dataservices/default-data.service.mjs +0 -209
- package/esm2020/src/dataservices/entity-cache-data.service.mjs +0 -146
- package/esm2020/src/dataservices/entity-data.service.mjs +0 -63
- package/esm2020/src/dataservices/http-url-generator.mjs +0 -87
- package/esm2020/src/dataservices/persistence-result-handler.service.mjs +0 -49
- package/esm2020/src/dispatchers/entity-cache-dispatcher.mjs +0 -163
- package/esm2020/src/dispatchers/entity-dispatcher-default-options.mjs +0 -30
- package/esm2020/src/dispatchers/entity-dispatcher-factory.mjs +0 -67
- package/esm2020/src/effects/entity-cache-effects.mjs +0 -115
- package/esm2020/src/effects/entity-effects.mjs +0 -148
- package/esm2020/src/entity-data-without-effects.module.mjs +0 -27
- package/esm2020/src/entity-data.module.mjs +0 -28
- package/esm2020/src/entity-metadata/entity-definition.service.mjs +0 -93
- package/esm2020/src/entity-services/entity-collection-service-elements-factory.mjs +0 -38
- package/esm2020/src/entity-services/entity-collection-service-factory.mjs +0 -28
- package/esm2020/src/entity-services/entity-services-base.mjs +0 -119
- package/esm2020/src/entity-services/entity-services-elements.mjs +0 -33
- package/esm2020/src/reducers/entity-cache-reducer.mjs +0 -271
- package/esm2020/src/reducers/entity-collection-creator.mjs +0 -37
- package/esm2020/src/reducers/entity-collection-reducer-registry.mjs +0 -68
- package/esm2020/src/reducers/entity-collection-reducer.mjs +0 -24
- package/esm2020/src/selectors/entity-selectors$.mjs +0 -52
- package/esm2020/src/selectors/entity-selectors.mjs +0 -96
- package/esm2020/src/utils/correlation-id-generator.mjs +0 -30
- package/esm2020/src/utils/default-logger.mjs +0 -25
- package/esm2020/src/utils/default-pluralizer.mjs +0 -71
- package/fesm2015/ngrx-data.mjs +0 -4956
- package/fesm2015/ngrx-data.mjs.map +0 -1
- package/fesm2020/ngrx-data.mjs.map +0 -1
- /package/{esm2020 → esm2022}/index.mjs +0 -0
- /package/{esm2020 → esm2022}/ngrx-data.mjs +0 -0
- /package/{esm2020 → esm2022}/public_api.mjs +0 -0
- /package/{esm2020 → esm2022}/src/actions/entity-action-operators.mjs +0 -0
- /package/{esm2020 → esm2022}/src/actions/entity-action.mjs +0 -0
- /package/{esm2020 → esm2022}/src/actions/entity-cache-action.mjs +0 -0
- /package/{esm2020 → esm2022}/src/actions/entity-cache-change-set.mjs +0 -0
- /package/{esm2020 → esm2022}/src/actions/entity-op.mjs +0 -0
- /package/{esm2020 → esm2022}/src/actions/merge-strategy.mjs +0 -0
- /package/{esm2020 → esm2022}/src/actions/update-response-data.mjs +0 -0
- /package/{esm2020 → esm2022}/src/dataservices/data-service-error.mjs +0 -0
- /package/{esm2020 → esm2022}/src/dataservices/default-data-service-config.mjs +0 -0
- /package/{esm2020 → esm2022}/src/dataservices/interfaces.mjs +0 -0
- /package/{esm2020 → esm2022}/src/dispatchers/entity-commands.mjs +0 -0
- /package/{esm2020 → esm2022}/src/dispatchers/entity-dispatcher-base.mjs +0 -0
- /package/{esm2020 → esm2022}/src/dispatchers/entity-dispatcher.mjs +0 -0
- /package/{esm2020 → esm2022}/src/effects/entity-effects-scheduler.mjs +0 -0
- /package/{esm2020 → esm2022}/src/entity-data-config.mjs +0 -0
- /package/{esm2020 → esm2022}/src/entity-metadata/entity-definition.mjs +0 -0
- /package/{esm2020 → esm2022}/src/entity-metadata/entity-filters.mjs +0 -0
- /package/{esm2020 → esm2022}/src/entity-metadata/entity-metadata.mjs +0 -0
- /package/{esm2020 → esm2022}/src/entity-services/entity-collection-service-base.mjs +0 -0
- /package/{esm2020 → esm2022}/src/entity-services/entity-collection-service.mjs +0 -0
- /package/{esm2020 → esm2022}/src/entity-services/entity-services.mjs +0 -0
- /package/{esm2020 → esm2022}/src/index.mjs +0 -0
- /package/{esm2020 → esm2022}/src/provide-entity-data.mjs +0 -0
- /package/{esm2020 → esm2022}/src/reducers/constants.mjs +0 -0
- /package/{esm2020 → esm2022}/src/reducers/entity-cache.mjs +0 -0
- /package/{esm2020 → esm2022}/src/reducers/entity-change-tracker-base.mjs +0 -0
- /package/{esm2020 → esm2022}/src/reducers/entity-change-tracker.mjs +0 -0
- /package/{esm2020 → esm2022}/src/reducers/entity-collection.mjs +0 -0
- /package/{esm2020 → esm2022}/src/selectors/entity-cache-selector.mjs +0 -0
- /package/{esm2020 → esm2022}/src/utils/guid-fns.mjs +0 -0
- /package/{esm2020 → esm2022}/src/utils/interfaces.mjs +0 -0
- /package/{esm2020 → esm2022}/src/utils/utilities.mjs +0 -0
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import { Inject, Injectable } from '@angular/core';
|
|
2
|
+
import { filter, shareReplay } from 'rxjs/operators';
|
|
3
|
+
import { OP_ERROR } from '../actions/entity-op';
|
|
4
|
+
import { ofEntityType } from '../actions/entity-action-operators';
|
|
5
|
+
import { ENTITY_CACHE_SELECTOR_TOKEN, } from './entity-cache-selector';
|
|
6
|
+
import * as i0 from "@angular/core";
|
|
7
|
+
import * as i1 from "@ngrx/store";
|
|
8
|
+
import * as i2 from "@ngrx/effects";
|
|
9
|
+
/** Creates observable EntitySelectors$ for entity collections. */
|
|
10
|
+
class EntitySelectors$Factory {
|
|
11
|
+
constructor(store, actions, selectEntityCache) {
|
|
12
|
+
this.store = store;
|
|
13
|
+
this.actions = actions;
|
|
14
|
+
this.selectEntityCache = selectEntityCache;
|
|
15
|
+
// This service applies to the cache in ngrx/store named `cacheName`
|
|
16
|
+
this.entityCache$ = this.store.select(this.selectEntityCache);
|
|
17
|
+
this.entityActionErrors$ = actions.pipe(filter((ea) => ea.payload &&
|
|
18
|
+
ea.payload.entityOp &&
|
|
19
|
+
ea.payload.entityOp.endsWith(OP_ERROR)), shareReplay(1));
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Creates an entity collection's selectors$ observables for this factory's store.
|
|
23
|
+
* `selectors$` are observable selectors of the cached entity collection.
|
|
24
|
+
* @param entityName - is also the name of the collection.
|
|
25
|
+
* @param selectors - selector functions for this collection.
|
|
26
|
+
**/
|
|
27
|
+
create(entityName, selectors) {
|
|
28
|
+
const selectors$ = {
|
|
29
|
+
entityName,
|
|
30
|
+
};
|
|
31
|
+
Object.keys(selectors).forEach((name) => {
|
|
32
|
+
if (name.startsWith('select')) {
|
|
33
|
+
// strip 'select' prefix from the selector fn name and append `$`
|
|
34
|
+
// Ex: 'selectEntities' => 'entities$'
|
|
35
|
+
const name$ = name[6].toLowerCase() + name.substring(7) + '$';
|
|
36
|
+
selectors$[name$] = this.store.select(selectors[name]);
|
|
37
|
+
}
|
|
38
|
+
});
|
|
39
|
+
selectors$['entityActions$'] = this.actions.pipe(ofEntityType(entityName));
|
|
40
|
+
selectors$['errors$'] = this.entityActionErrors$.pipe(ofEntityType(entityName));
|
|
41
|
+
return selectors$;
|
|
42
|
+
}
|
|
43
|
+
/** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.0-rc.2", ngImport: i0, type: EntitySelectors$Factory, deps: [{ token: i1.Store }, { token: i2.Actions }, { token: ENTITY_CACHE_SELECTOR_TOKEN }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
44
|
+
/** @nocollapse */ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.0.0-rc.2", ngImport: i0, type: EntitySelectors$Factory }); }
|
|
45
|
+
}
|
|
46
|
+
export { EntitySelectors$Factory };
|
|
47
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.0-rc.2", ngImport: i0, type: EntitySelectors$Factory, decorators: [{
|
|
48
|
+
type: Injectable
|
|
49
|
+
}], ctorParameters: function () { return [{ type: i1.Store }, { type: i2.Actions }, { type: undefined, decorators: [{
|
|
50
|
+
type: Inject,
|
|
51
|
+
args: [ENTITY_CACHE_SELECTOR_TOKEN]
|
|
52
|
+
}] }]; } });
|
|
53
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW50aXR5LXNlbGVjdG9ycyQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9tb2R1bGVzL2RhdGEvc3JjL3NlbGVjdG9ycy9lbnRpdHktc2VsZWN0b3JzJC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQU1uRCxPQUFPLEVBQUUsTUFBTSxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBR3JELE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNoRCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDbEUsT0FBTyxFQUNMLDJCQUEyQixHQUU1QixNQUFNLHlCQUF5QixDQUFDOzs7O0FBeURqQyxrRUFBa0U7QUFDbEUsTUFDYSx1QkFBdUI7SUFPbEMsWUFDVSxLQUFpQixFQUNqQixPQUE4QixFQUU5QixpQkFBc0M7UUFIdEMsVUFBSyxHQUFMLEtBQUssQ0FBWTtRQUNqQixZQUFPLEdBQVAsT0FBTyxDQUF1QjtRQUU5QixzQkFBaUIsR0FBakIsaUJBQWlCLENBQXFCO1FBRTlDLG9FQUFvRTtRQUNwRSxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1FBQzlELElBQUksQ0FBQyxtQkFBbUIsR0FBRyxPQUFPLENBQUMsSUFBSSxDQUNyQyxNQUFNLENBQ0osQ0FBQyxFQUFnQixFQUFFLEVBQUUsQ0FDbkIsRUFBRSxDQUFDLE9BQU87WUFDVixFQUFFLENBQUMsT0FBTyxDQUFDLFFBQVE7WUFDbkIsRUFBRSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUN6QyxFQUNELFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FDZixDQUFDO0lBQ0osQ0FBQztJQUVEOzs7OztRQUtJO0lBQ0osTUFBTSxDQUNKLFVBQWtCLEVBQ2xCLFNBQTZCO1FBRTdCLE1BQU0sVUFBVSxHQUE0QjtZQUMxQyxVQUFVO1NBQ1gsQ0FBQztRQUVGLE1BQU0sQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUU7WUFDdEMsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxFQUFFO2dCQUM3QixpRUFBaUU7Z0JBQ2pFLHNDQUFzQztnQkFDdEMsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsRUFBRSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO2dCQUM5RCxVQUFVLENBQUMsS0FBSyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQU8sU0FBVSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7YUFDL0Q7UUFDSCxDQUFDLENBQUMsQ0FBQztRQUNILFVBQVUsQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDO1FBQzNFLFVBQVUsQ0FBQyxTQUFTLENBQUMsR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUNuRCxZQUFZLENBQUMsVUFBVSxDQUFDLENBQ3pCLENBQUM7UUFDRixPQUFPLFVBQWdCLENBQUM7SUFDMUIsQ0FBQztzSUFyRFUsdUJBQXVCLDhEQVV4QiwyQkFBMkI7MElBVjFCLHVCQUF1Qjs7U0FBdkIsdUJBQXVCO2dHQUF2Qix1QkFBdUI7a0JBRG5DLFVBQVU7OzBCQVdOLE1BQU07MkJBQUMsMkJBQTJCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0LCBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBTdG9yZSB9IGZyb20gJ0BuZ3J4L3N0b3JlJztcbmltcG9ydCB7IEFjdGlvbnMgfSBmcm9tICdAbmdyeC9lZmZlY3RzJztcbmltcG9ydCB7IERpY3Rpb25hcnkgfSBmcm9tICdAbmdyeC9lbnRpdHknO1xuXG5pbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBmaWx0ZXIsIHNoYXJlUmVwbGF5IH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5pbXBvcnQgeyBFbnRpdHlBY3Rpb24gfSBmcm9tICcuLi9hY3Rpb25zL2VudGl0eS1hY3Rpb24nO1xuaW1wb3J0IHsgT1BfRVJST1IgfSBmcm9tICcuLi9hY3Rpb25zL2VudGl0eS1vcCc7XG5pbXBvcnQgeyBvZkVudGl0eVR5cGUgfSBmcm9tICcuLi9hY3Rpb25zL2VudGl0eS1hY3Rpb24tb3BlcmF0b3JzJztcbmltcG9ydCB7XG4gIEVOVElUWV9DQUNIRV9TRUxFQ1RPUl9UT0tFTixcbiAgRW50aXR5Q2FjaGVTZWxlY3Rvcixcbn0gZnJvbSAnLi9lbnRpdHktY2FjaGUtc2VsZWN0b3InO1xuaW1wb3J0IHsgRW50aXR5U2VsZWN0b3JzIH0gZnJvbSAnLi9lbnRpdHktc2VsZWN0b3JzJztcbmltcG9ydCB7IEVudGl0eUNhY2hlIH0gZnJvbSAnLi4vcmVkdWNlcnMvZW50aXR5LWNhY2hlJztcbmltcG9ydCB7XG4gIEVudGl0eUNvbGxlY3Rpb24sXG4gIENoYW5nZVN0YXRlTWFwLFxufSBmcm9tICcuLi9yZWR1Y2Vycy9lbnRpdHktY29sbGVjdGlvbic7XG5cbi8qKlxuICogVGhlIHNlbGVjdG9yIG9ic2VydmFibGUgZnVuY3Rpb25zIGZvciBlbnRpdHkgY29sbGVjdGlvbiBtZW1iZXJzLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEVudGl0eVNlbGVjdG9ycyQ8VD4ge1xuICAvKiogTmFtZSBvZiB0aGUgZW50aXR5IGNvbGxlY3Rpb24gZm9yIHRoZXNlIHNlbGVjdG9ycyQgKi9cbiAgcmVhZG9ubHkgZW50aXR5TmFtZTogc3RyaW5nO1xuXG4gIC8qKiBOYW1lcyBmcm9tIGN1c3RvbSBzZWxlY3RvcnMgZnJvbSBhZGRpdGlvbmFsQ29sbGVjdGlvblN0YXRlIGZpdHMgaGVyZSwgJ2FueScgdG8gYXZvaWQgY29uZmxpY3Qgd2l0aCBlbnRpdHlOYW1lICovXG4gIHJlYWRvbmx5IFtuYW1lOiBzdHJpbmddOiBPYnNlcnZhYmxlPGFueT4gfCBTdG9yZTxhbnk+IHwgYW55O1xuXG4gIC8qKiBPYnNlcnZhYmxlIG9mIHRoZSBjb2xsZWN0aW9uIGFzIGEgd2hvbGUgKi9cbiAgcmVhZG9ubHkgY29sbGVjdGlvbiQ6IE9ic2VydmFibGU8RW50aXR5Q29sbGVjdGlvbj4gfCBTdG9yZTxFbnRpdHlDb2xsZWN0aW9uPjtcblxuICAvKiogT2JzZXJ2YWJsZSBvZiBjb3VudCBvZiBlbnRpdGllcyBpbiB0aGUgY2FjaGVkIGNvbGxlY3Rpb24uICovXG4gIHJlYWRvbmx5IGNvdW50JDogT2JzZXJ2YWJsZTxudW1iZXI+IHwgU3RvcmU8bnVtYmVyPjtcblxuICAvKiogT2JzZXJ2YWJsZSBvZiBhbGwgZW50aXRpZXMgaW4gdGhlIGNhY2hlZCBjb2xsZWN0aW9uLiAqL1xuICByZWFkb25seSBlbnRpdGllcyQ6IE9ic2VydmFibGU8VFtdPiB8IFN0b3JlPFRbXT47XG5cbiAgLyoqIE9ic2VydmFibGUgb2YgYWN0aW9ucyByZWxhdGVkIHRvIHRoaXMgZW50aXR5IHR5cGUuICovXG4gIHJlYWRvbmx5IGVudGl0eUFjdGlvbnMkOiBPYnNlcnZhYmxlPEVudGl0eUFjdGlvbj47XG5cbiAgLyoqIE9ic2VydmFibGUgb2YgdGhlIG1hcCBvZiBlbnRpdHkga2V5cyB0byBlbnRpdGllcyAqL1xuICByZWFkb25seSBlbnRpdHlNYXAkOiBPYnNlcnZhYmxlPERpY3Rpb25hcnk8VD4+IHwgU3RvcmU8RGljdGlvbmFyeTxUPj47XG5cbiAgLyoqIE9ic2VydmFibGUgb2YgZXJyb3IgYWN0aW9ucyByZWxhdGVkIHRvIHRoaXMgZW50aXR5IHR5cGUuICovXG4gIHJlYWRvbmx5IGVycm9ycyQ6IE9ic2VydmFibGU8RW50aXR5QWN0aW9uPjtcblxuICAvKiogT2JzZXJ2YWJsZSBvZiB0aGUgZmlsdGVyIHBhdHRlcm4gYXBwbGllZCBieSB0aGUgZW50aXR5IGNvbGxlY3Rpb24ncyBmaWx0ZXIgZnVuY3Rpb24gKi9cbiAgcmVhZG9ubHkgZmlsdGVyJDogT2JzZXJ2YWJsZTxzdHJpbmc+IHwgU3RvcmU8c3RyaW5nPjtcblxuICAvKiogT2JzZXJ2YWJsZSBvZiBlbnRpdGllcyBpbiB0aGUgY2FjaGVkIGNvbGxlY3Rpb24gdGhhdCBwYXNzIHRoZSBmaWx0ZXIgZnVuY3Rpb24gKi9cbiAgcmVhZG9ubHkgZmlsdGVyZWRFbnRpdGllcyQ6IE9ic2VydmFibGU8VFtdPiB8IFN0b3JlPFRbXT47XG5cbiAgLyoqIE9ic2VydmFibGUgb2YgdGhlIGtleXMgb2YgdGhlIGNhY2hlZCBjb2xsZWN0aW9uLCBpbiB0aGUgY29sbGVjdGlvbidzIG5hdGl2ZSBzb3J0IG9yZGVyICovXG4gIHJlYWRvbmx5IGtleXMkOiBPYnNlcnZhYmxlPHN0cmluZ1tdIHwgbnVtYmVyW10+IHwgU3RvcmU8c3RyaW5nW10gfCBudW1iZXJbXT47XG5cbiAgLyoqIE9ic2VydmFibGUgdHJ1ZSB3aGVuIHRoZSBjb2xsZWN0aW9uIGhhcyBiZWVuIGxvYWRlZCAqL1xuICByZWFkb25seSBsb2FkZWQkOiBPYnNlcnZhYmxlPGJvb2xlYW4+IHwgU3RvcmU8Ym9vbGVhbj47XG5cbiAgLyoqIE9ic2VydmFibGUgdHJ1ZSB3aGVuIGEgbXVsdGktZW50aXR5IHF1ZXJ5IGNvbW1hbmQgaXMgaW4gcHJvZ3Jlc3MuICovXG4gIHJlYWRvbmx5IGxvYWRpbmckOiBPYnNlcnZhYmxlPGJvb2xlYW4+IHwgU3RvcmU8Ym9vbGVhbj47XG5cbiAgLyoqIENoYW5nZVN0YXRlIChpbmNsdWRpbmcgb3JpZ2luYWwgdmFsdWVzKSBvZiBlbnRpdGllcyB3aXRoIHVuc2F2ZWQgY2hhbmdlcyAqL1xuICByZWFkb25seSBjaGFuZ2VTdGF0ZSQ6XG4gICAgfCBPYnNlcnZhYmxlPENoYW5nZVN0YXRlTWFwPFQ+PlxuICAgIHwgU3RvcmU8Q2hhbmdlU3RhdGVNYXA8VD4+O1xufVxuXG4vKiogQ3JlYXRlcyBvYnNlcnZhYmxlIEVudGl0eVNlbGVjdG9ycyQgZm9yIGVudGl0eSBjb2xsZWN0aW9ucy4gKi9cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBFbnRpdHlTZWxlY3RvcnMkRmFjdG9yeSB7XG4gIC8qKiBPYnNlcnZhYmxlIG9mIHRoZSBFbnRpdHlDYWNoZSAqL1xuICBlbnRpdHlDYWNoZSQ6IE9ic2VydmFibGU8RW50aXR5Q2FjaGU+O1xuXG4gIC8qKiBPYnNlcnZhYmxlIG9mIGVycm9yIEVudGl0eUFjdGlvbnMgKGUuZy4gUVVFUllfQUxMX0VSUk9SKSBmb3IgYWxsIGVudGl0eSB0eXBlcyAqL1xuICBlbnRpdHlBY3Rpb25FcnJvcnMkOiBPYnNlcnZhYmxlPEVudGl0eUFjdGlvbj47XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBzdG9yZTogU3RvcmU8YW55PixcbiAgICBwcml2YXRlIGFjdGlvbnM6IEFjdGlvbnM8RW50aXR5QWN0aW9uPixcbiAgICBASW5qZWN0KEVOVElUWV9DQUNIRV9TRUxFQ1RPUl9UT0tFTilcbiAgICBwcml2YXRlIHNlbGVjdEVudGl0eUNhY2hlOiBFbnRpdHlDYWNoZVNlbGVjdG9yXG4gICkge1xuICAgIC8vIFRoaXMgc2VydmljZSBhcHBsaWVzIHRvIHRoZSBjYWNoZSBpbiBuZ3J4L3N0b3JlIG5hbWVkIGBjYWNoZU5hbWVgXG4gICAgdGhpcy5lbnRpdHlDYWNoZSQgPSB0aGlzLnN0b3JlLnNlbGVjdCh0aGlzLnNlbGVjdEVudGl0eUNhY2hlKTtcbiAgICB0aGlzLmVudGl0eUFjdGlvbkVycm9ycyQgPSBhY3Rpb25zLnBpcGUoXG4gICAgICBmaWx0ZXIoXG4gICAgICAgIChlYTogRW50aXR5QWN0aW9uKSA9PlxuICAgICAgICAgIGVhLnBheWxvYWQgJiZcbiAgICAgICAgICBlYS5wYXlsb2FkLmVudGl0eU9wICYmXG4gICAgICAgICAgZWEucGF5bG9hZC5lbnRpdHlPcC5lbmRzV2l0aChPUF9FUlJPUilcbiAgICAgICksXG4gICAgICBzaGFyZVJlcGxheSgxKVxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlcyBhbiBlbnRpdHkgY29sbGVjdGlvbidzIHNlbGVjdG9ycyQgb2JzZXJ2YWJsZXMgZm9yIHRoaXMgZmFjdG9yeSdzIHN0b3JlLlxuICAgKiBgc2VsZWN0b3JzJGAgYXJlIG9ic2VydmFibGUgc2VsZWN0b3JzIG9mIHRoZSBjYWNoZWQgZW50aXR5IGNvbGxlY3Rpb24uXG4gICAqIEBwYXJhbSBlbnRpdHlOYW1lIC0gaXMgYWxzbyB0aGUgbmFtZSBvZiB0aGUgY29sbGVjdGlvbi5cbiAgICogQHBhcmFtIHNlbGVjdG9ycyAtIHNlbGVjdG9yIGZ1bmN0aW9ucyBmb3IgdGhpcyBjb2xsZWN0aW9uLlxuICAgKiovXG4gIGNyZWF0ZTxULCBTJCBleHRlbmRzIEVudGl0eVNlbGVjdG9ycyQ8VD4gPSBFbnRpdHlTZWxlY3RvcnMkPFQ+PihcbiAgICBlbnRpdHlOYW1lOiBzdHJpbmcsXG4gICAgc2VsZWN0b3JzOiBFbnRpdHlTZWxlY3RvcnM8VD5cbiAgKTogUyQge1xuICAgIGNvbnN0IHNlbGVjdG9ycyQ6IHsgW3Byb3A6IHN0cmluZ106IGFueSB9ID0ge1xuICAgICAgZW50aXR5TmFtZSxcbiAgICB9O1xuXG4gICAgT2JqZWN0LmtleXMoc2VsZWN0b3JzKS5mb3JFYWNoKChuYW1lKSA9PiB7XG4gICAgICBpZiAobmFtZS5zdGFydHNXaXRoKCdzZWxlY3QnKSkge1xuICAgICAgICAvLyBzdHJpcCAnc2VsZWN0JyBwcmVmaXggZnJvbSB0aGUgc2VsZWN0b3IgZm4gbmFtZSBhbmQgYXBwZW5kIGAkYFxuICAgICAgICAvLyBFeDogJ3NlbGVjdEVudGl0aWVzJyA9PiAnZW50aXRpZXMkJ1xuICAgICAgICBjb25zdCBuYW1lJCA9IG5hbWVbNl0udG9Mb3dlckNhc2UoKSArIG5hbWUuc3Vic3RyaW5nKDcpICsgJyQnO1xuICAgICAgICBzZWxlY3RvcnMkW25hbWUkXSA9IHRoaXMuc3RvcmUuc2VsZWN0KCg8YW55PnNlbGVjdG9ycylbbmFtZV0pO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHNlbGVjdG9ycyRbJ2VudGl0eUFjdGlvbnMkJ10gPSB0aGlzLmFjdGlvbnMucGlwZShvZkVudGl0eVR5cGUoZW50aXR5TmFtZSkpO1xuICAgIHNlbGVjdG9ycyRbJ2Vycm9ycyQnXSA9IHRoaXMuZW50aXR5QWN0aW9uRXJyb3JzJC5waXBlKFxuICAgICAgb2ZFbnRpdHlUeXBlKGVudGl0eU5hbWUpXG4gICAgKTtcbiAgICByZXR1cm4gc2VsZWN0b3JzJCBhcyBTJDtcbiAgfVxufVxuIl19
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
import { Inject, Injectable, Optional } from '@angular/core';
|
|
2
|
+
import { createSelector } from '@ngrx/store';
|
|
3
|
+
import { ENTITY_CACHE_SELECTOR_TOKEN, createEntityCacheSelector, } from './entity-cache-selector';
|
|
4
|
+
import { ENTITY_CACHE_NAME } from '../reducers/constants';
|
|
5
|
+
import { EntityCollectionCreator } from '../reducers/entity-collection-creator';
|
|
6
|
+
import * as i0 from "@angular/core";
|
|
7
|
+
import * as i1 from "../reducers/entity-collection-creator";
|
|
8
|
+
/** Creates EntitySelector functions for entity collections. */
|
|
9
|
+
class EntitySelectorsFactory {
|
|
10
|
+
constructor(entityCollectionCreator, selectEntityCache) {
|
|
11
|
+
this.entityCollectionCreator =
|
|
12
|
+
entityCollectionCreator || new EntityCollectionCreator();
|
|
13
|
+
this.selectEntityCache =
|
|
14
|
+
selectEntityCache || createEntityCacheSelector(ENTITY_CACHE_NAME);
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Create the NgRx selector from the store root to the named collection,
|
|
18
|
+
* e.g. from Object to Heroes.
|
|
19
|
+
* @param entityName the name of the collection
|
|
20
|
+
*/
|
|
21
|
+
createCollectionSelector(entityName) {
|
|
22
|
+
const getCollection = (cache = {}) => ((cache[entityName] ||
|
|
23
|
+
this.entityCollectionCreator.create(entityName)));
|
|
24
|
+
return createSelector(this.selectEntityCache, getCollection);
|
|
25
|
+
}
|
|
26
|
+
// createCollectionSelectors implementation
|
|
27
|
+
createCollectionSelectors(metadataOrName) {
|
|
28
|
+
const metadata = typeof metadataOrName === 'string'
|
|
29
|
+
? { entityName: metadataOrName }
|
|
30
|
+
: metadataOrName;
|
|
31
|
+
const selectKeys = (c) => c.ids;
|
|
32
|
+
const selectEntityMap = (c) => c.entities;
|
|
33
|
+
const selectEntities = createSelector(selectKeys, selectEntityMap, (keys, entities) => keys.map((key) => entities[key]));
|
|
34
|
+
const selectCount = createSelector(selectKeys, (keys) => keys.length);
|
|
35
|
+
// EntityCollection selectors that go beyond the ngrx/entity/EntityState selectors
|
|
36
|
+
const selectFilter = (c) => c.filter;
|
|
37
|
+
const filterFn = metadata.filterFn;
|
|
38
|
+
const selectFilteredEntities = filterFn
|
|
39
|
+
? createSelector(selectEntities, selectFilter, (entities, pattern) => filterFn(entities, pattern))
|
|
40
|
+
: selectEntities;
|
|
41
|
+
const selectLoaded = (c) => c.loaded;
|
|
42
|
+
const selectLoading = (c) => c.loading;
|
|
43
|
+
const selectChangeState = (c) => c.changeState;
|
|
44
|
+
// Create collection selectors for each `additionalCollectionState` property.
|
|
45
|
+
// These all extend from `selectCollection`
|
|
46
|
+
const extra = metadata.additionalCollectionState || {};
|
|
47
|
+
const extraSelectors = {};
|
|
48
|
+
Object.keys(extra).forEach((k) => {
|
|
49
|
+
extraSelectors['select' + k[0].toUpperCase() + k.slice(1)] = (c) => c[k];
|
|
50
|
+
});
|
|
51
|
+
return {
|
|
52
|
+
selectCount,
|
|
53
|
+
selectEntities,
|
|
54
|
+
selectEntityMap,
|
|
55
|
+
selectFilter,
|
|
56
|
+
selectFilteredEntities,
|
|
57
|
+
selectKeys,
|
|
58
|
+
selectLoaded,
|
|
59
|
+
selectLoading,
|
|
60
|
+
selectChangeState,
|
|
61
|
+
...extraSelectors,
|
|
62
|
+
};
|
|
63
|
+
}
|
|
64
|
+
// createCollectionSelectors implementation
|
|
65
|
+
create(metadataOrName) {
|
|
66
|
+
const metadata = typeof metadataOrName === 'string'
|
|
67
|
+
? { entityName: metadataOrName }
|
|
68
|
+
: metadataOrName;
|
|
69
|
+
const entityName = metadata.entityName;
|
|
70
|
+
const selectCollection = this.createCollectionSelector(entityName);
|
|
71
|
+
const collectionSelectors = this.createCollectionSelectors(metadata);
|
|
72
|
+
const entitySelectors = {};
|
|
73
|
+
Object.keys(collectionSelectors).forEach((k) => {
|
|
74
|
+
entitySelectors[k] = createSelector(selectCollection, collectionSelectors[k]);
|
|
75
|
+
});
|
|
76
|
+
return {
|
|
77
|
+
entityName,
|
|
78
|
+
selectCollection,
|
|
79
|
+
selectEntityCache: this.selectEntityCache,
|
|
80
|
+
...entitySelectors,
|
|
81
|
+
};
|
|
82
|
+
}
|
|
83
|
+
/** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.0-rc.2", ngImport: i0, type: EntitySelectorsFactory, deps: [{ token: i1.EntityCollectionCreator, optional: true }, { token: ENTITY_CACHE_SELECTOR_TOKEN, optional: true }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
84
|
+
/** @nocollapse */ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.0.0-rc.2", ngImport: i0, type: EntitySelectorsFactory }); }
|
|
85
|
+
}
|
|
86
|
+
export { EntitySelectorsFactory };
|
|
87
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.0-rc.2", ngImport: i0, type: EntitySelectorsFactory, decorators: [{
|
|
88
|
+
type: Injectable
|
|
89
|
+
}], ctorParameters: function () { return [{ type: i1.EntityCollectionCreator, decorators: [{
|
|
90
|
+
type: Optional
|
|
91
|
+
}] }, { type: undefined, decorators: [{
|
|
92
|
+
type: Optional
|
|
93
|
+
}, {
|
|
94
|
+
type: Inject,
|
|
95
|
+
args: [ENTITY_CACHE_SELECTOR_TOKEN]
|
|
96
|
+
}] }]; } });
|
|
97
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW50aXR5LXNlbGVjdG9ycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL21vZHVsZXMvZGF0YS9zcmMvc2VsZWN0b3JzL2VudGl0eS1zZWxlY3RvcnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBSTdELE9BQU8sRUFBRSxjQUFjLEVBQVksTUFBTSxhQUFhLENBQUM7QUFJdkQsT0FBTyxFQUNMLDJCQUEyQixFQUUzQix5QkFBeUIsR0FDMUIsTUFBTSx5QkFBeUIsQ0FBQztBQUNqQyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUsxRCxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQzs7O0FBb0ZoRiwrREFBK0Q7QUFDL0QsTUFDYSxzQkFBc0I7SUFJakMsWUFDYyx1QkFBaUQsRUFHN0QsaUJBQXVDO1FBRXZDLElBQUksQ0FBQyx1QkFBdUI7WUFDMUIsdUJBQXVCLElBQUksSUFBSSx1QkFBdUIsRUFBRSxDQUFDO1FBQzNELElBQUksQ0FBQyxpQkFBaUI7WUFDcEIsaUJBQWlCLElBQUkseUJBQXlCLENBQUMsaUJBQWlCLENBQUMsQ0FBQztJQUN0RSxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILHdCQUF3QixDQUd0QixVQUFrQjtRQUNsQixNQUFNLGFBQWEsR0FBRyxDQUFDLFFBQXFCLEVBQUUsRUFBRSxFQUFFLENBQzdDLENBQ0QsQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDO1lBQ2hCLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxNQUFNLENBQUksVUFBVSxDQUFDLENBQUMsQ0FDdEQsQ0FBQztRQUNKLE9BQU8sY0FBYyxDQUFDLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxhQUFhLENBQUMsQ0FBQztJQUMvRCxDQUFDO0lBOEJELDJDQUEyQztJQUMzQyx5QkFBeUIsQ0FH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SSxRQUFRLENBQUMsQ0FBQztRQUV4RSxNQUFNLGVBQWUsR0FFakIsRUFBRSxDQUFDO1FBQ1AsTUFBTSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFO1lBQzdDLGVBQWUsQ0FBQyxDQUFDLENBQUMsR0FBRyxjQUFjLENBQ2pDLGdCQUFnQixFQUNoQixtQkFBbUIsQ0FBQyxDQUFDLENBQUMsQ0FDdkIsQ0FBQztRQUNKLENBQUMsQ0FBQyxDQUFDO1FBRUgsT0FBTztZQUNMLFVBQVU7WUFDVixnQkFBZ0I7WUFDaEIsaUJBQWlCLEVBQUUsSUFBSSxDQUFDLGlCQUFpQjtZQUN6QyxHQUFHLGVBQWU7U0FDZCxDQUFDO0lBQ1QsQ0FBQztzSUFqTVUsc0JBQXNCLHlFQU92QiwyQkFBMkI7MElBUDFCLHNCQUFzQjs7U0FBdEIsc0JBQXNCO2dHQUF0QixzQkFBc0I7a0JBRGxDLFVBQVU7OzBCQU1OLFFBQVE7OzBCQUNSLFFBQVE7OzBCQUNSLE1BQU07MkJBQUMsMkJBQTJCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0LCBJbmplY3RhYmxlLCBPcHRpb25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG4vLyBQcm9kIGJ1aWxkIHJlcXVpcmVzIGBNZW1vaXplZFNlbGVjdG9yIGV2ZW4gdGhvdWdoIG5vdCB1c2VkLlxuaW1wb3J0IHsgTWVtb2l6ZWRTZWxlY3RvciB9IGZyb20gJ0BuZ3J4L3N0b3JlJztcbmltcG9ydCB7IGNyZWF0ZVNlbGVjdG9yLCBTZWxlY3RvciB9IGZyb20gJ0BuZ3J4L3N0b3JlJztcbmltcG9ydCB7IERpY3Rpb25hcnkgfSBmcm9tICdAbmdyeC9lbnRpdHknO1xuXG5pbXBvcnQgeyBFbnRpdHlDYWNoZSB9IGZyb20gJy4uL3JlZHVjZXJzL2VudGl0eS1jYWNoZSc7XG5pbXBvcnQge1xuICBFTlRJVFlfQ0FDSEVfU0VMRUNUT1JfVE9LRU4sXG4gIEVudGl0eUNhY2hlU2VsZWN0b3IsXG4gIGNyZWF0ZUVudGl0eUNhY2hlU2VsZWN0b3IsXG59IGZyb20gJy4vZW50aXR5LWNhY2hlLXNlbGVjdG9yJztcbmltcG9ydCB7IEVOVElUWV9DQUNIRV9OQU1FIH0gZnJvbSAnLi4vcmVkdWNlcnMvY29uc3RhbnRzJztcbmltcG9ydCB7XG4gIEVudGl0eUNvbGxlY3Rpb24sXG4gIENoYW5nZVN0YXRlTWFwLFxufSBmcm9tICcuLi9yZWR1Y2Vycy9lbnRpdHktY29sbGVjdGlvbic7XG5pbXBvcnQgeyBFbnRpdHlDb2xsZWN0aW9uQ3JlYXRvciB9IGZyb20gJy4uL3JlZHVjZXJzL2VudGl0eS1jb2xsZWN0aW9uLWNyZWF0b3InO1xuaW1wb3J0IHsgRW50aXR5TWV0YWRhdGEgfSBmcm9tICcuLi9lbnRpdHktbWV0YWRhdGEvZW50aXR5LW1ldGFkYXRhJztcblxuLyoqXG4gKiBUaGUgc2VsZWN0b3IgZnVuY3Rpb25zIGZvciBlbnRpdHkgY29sbGVjdGlvbiBtZW1iZXJzLFxuICogU2VsZWN0cyBmcm9tIHRoZSBlbnRpdHkgY29sbGVjdGlvbiB0byB0aGUgY29sbGVjdGlvbiBtZW1iZXJcbiAqIENvbnRyYXN0IHdpdGgge0VudGl0eVNlbGVjdG9yc30uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ29sbGVjdGlvblNlbGVjdG9yczxUPiB7XG4gIHJlYWRvbmx5IFtzZWxlY3Rvcjogc3RyaW5nXTogYW55O1xuXG4gIC8qKiBDb3VudCBvZiBlbnRpdGllcyBpbiB0aGUgY2FjaGVkIGNvbGxlY3Rpb24uICovXG4gIHJlYWRvbmx5IHNlbGVjdENvdW50OiBTZWxlY3RvcjxFbnRpdHlDb2xsZWN0aW9uPFQ+LCBudW1iZXI+O1xuXG4gIC8qKiBBbGwgZW50aXRpZXMgaW4gdGhlIGNhY2hlZCBjb2xsZWN0aW9uLiAqL1xuICByZWFkb25seSBzZWxlY3RFbnRpdGllczogU2VsZWN0b3I8RW50aXR5Q29sbGVjdGlvbjxUPiwgVFtdPjtcblxuICAvKiogTWFwIG9mIGVudGl0eSBrZXlzIHRvIGVudGl0aWVzICovXG4gIHJlYWRvbmx5IHNlbGVjdEVudGl0eU1hcDogU2VsZWN0b3I8RW50aXR5Q29sbGVjdGlvbjxUPiwgRGljdGlvbmFyeTxUPj47XG5cbiAgLyoqIEZpbHRlciBwYXR0ZXJuIGFwcGxpZWQgYnkgdGhlIGVudGl0eSBjb2xsZWN0aW9uJ3MgZmlsdGVyIGZ1bmN0aW9uICovXG4gIHJlYWRvbmx5IHNlbGVjdEZpbHRlcjogU2VsZWN0b3I8RW50aXR5Q29sbGVjdGlvbjxUPiwgc3RyaW5nPjtcblxuICAvKiogRW50aXRpZXMgaW4gdGhlIGNhY2hlZCBjb2xsZWN0aW9uIHRoYXQgcGFzcyB0aGUgZmlsdGVyIGZ1bmN0aW9uICovXG4gIHJlYWRvbmx5IHNlbGVjdEZpbHRlcmVkRW50aXRpZXM6IFNlbGVjdG9yPEVudGl0eUNvbGxlY3Rpb248VD4sIFRbXT47XG5cbiAgLyoqIEtleXMgb2YgdGhlIGNhY2hlZCBjb2xsZWN0aW9uLCBpbiB0aGUgY29sbGVjdGlvbidzIG5hdGl2ZSBzb3J0IG9yZGVyICovXG4gIHJlYWRvbmx5IHNlbGVjdEtleXM6IFNlbGVjdG9yPEVudGl0eUNvbGxlY3Rpb248VD4sIHN0cmluZ1tdIHwgbnVtYmVyW10+O1xuXG4gIC8qKiBUcnVlIHdoZW4gdGhlIGNvbGxlY3Rpb24gaGFzIGJlZW4gZnVsbHkgbG9hZGVkLiAqL1xuICByZWFkb25seSBzZWxlY3RMb2FkZWQ6IFNlbGVjdG9yPEVudGl0eUNvbGxlY3Rpb248VD4sIGJvb2xlYW4+O1xuXG4gIC8qKiBUcnVlIHdoZW4gYSBtdWx0aS1lbnRpdHkgcXVlcnkgY29tbWFuZCBpcyBpbiBwcm9ncmVzcy4gKi9cbiAgcmVhZG9ubHkgc2VsZWN0TG9hZGluZzogU2VsZWN0b3I8RW50aXR5Q29sbGVjdGlvbjxUPiwgYm9vbGVhbj47XG5cbiAgLyoqIENoYW5nZVN0YXRlIChpbmNsdWRpbmcgb3JpZ2luYWwgdmFsdWVzKSBvZiBlbnRpdGllcyB3aXRoIHVuc2F2ZWQgY2hhbmdlcyAqL1xuICByZWFkb25seSBzZWxlY3RDaGFuZ2VTdGF0ZTogU2VsZWN0b3I8RW50aXR5Q29sbGVjdGlvbjxUPiwgQ2hhbmdlU3RhdGVNYXA8VD4+O1xufVxuXG4vKipcbiAqIFRoZSBzZWxlY3RvciBmdW5jdGlvbnMgZm9yIGVudGl0eSBjb2xsZWN0aW9uIG1lbWJlcnMsXG4gKiBTZWxlY3RzIGZyb20gc3RvcmUgcm9vdCwgdGhyb3VnaCBFbnRpdHlDYWNoZSwgdG8gdGhlIGVudGl0eSBjb2xsZWN0aW9uIG1lbWJlclxuICogQ29udHJhc3Qgd2l0aCB7Q29sbGVjdGlvblNlbGVjdG9yc30uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRW50aXR5U2VsZWN0b3JzPFQ+IHtcbiAgLyoqIE5hbWUgb2YgdGhlIGVudGl0eSBjb2xsZWN0aW9uIGZvciB0aGVzZSBzZWxlY3RvcnMgKi9cbiAgcmVhZG9ubHkgZW50aXR5TmFtZTogc3RyaW5nO1xuXG4gIHJlYWRvbmx5IFtuYW1lOiBzdHJpbmddOiBNZW1vaXplZFNlbGVjdG9yPEVudGl0eUNvbGxlY3Rpb248VD4sIGFueT4gfCBzdHJpbmc7XG5cbiAgLyoqIFRoZSBjYWNoZWQgRW50aXR5Q29sbGVjdGlvbiBpdHNlbGYgKi9cbiAgcmVhZG9ubHkgc2VsZWN0Q29sbGVjdGlvbjogTWVtb2l6ZWRTZWxlY3RvcjxPYmplY3QsIEVudGl0eUNvbGxlY3Rpb248VD4+O1xuXG4gIC8qKiBDb3VudCBvZiBlbnRpdGllcyBpbiB0aGUgY2FjaGVkIGNvbGxlY3Rpb24uICovXG4gIHJlYWRvbmx5IHNlbGVjdENvdW50OiBNZW1vaXplZFNlbGVjdG9yPE9iamVjdCwgbnVtYmVyPjtcblxuICAvKiogQWxsIGVudGl0aWVzIGluIHRoZSBjYWNoZWQgY29sbGVjdGlvbi4gKi9cbiAgcmVhZG9ubHkgc2VsZWN0RW50aXRpZXM6IE1lbW9pemVkU2VsZWN0b3I8T2JqZWN0LCBUW10+O1xuXG4gIC8qKiBUaGUgRW50aXR5Q2FjaGUgKi9cbiAgcmVhZG9ubHkgc2VsZWN0RW50aXR5Q2FjaGU6IE1lbW9pemVkU2VsZWN0b3I8T2JqZWN0LCBFbnRpdHlDYWNoZT47XG5cbiAgLyoqIE1hcCBvZiBlbnRpdHkga2V5cyB0byBlbnRpdGllcyAqL1xuICByZWFkb25seSBzZWxlY3RFbnRpdHlNYXA6IE1lbW9pemVkU2VsZWN0b3I8T2JqZWN0LCBEaWN0aW9uYXJ5PFQ+PjtcblxuICAvKiogRmlsdGVyIHBhdHRlcm4gYXBwbGllZCBieSB0aGUgZW50aXR5IGNvbGxlY3Rpb24ncyBmaWx0ZXIgZnVuY3Rpb24gKi9cbiAgcmVhZG9ubHkgc2VsZWN0RmlsdGVyOiBNZW1vaXplZFNlbGVjdG9yPE9iamVjdCwgc3RyaW5nPjtcblxuICAvKiogRW50aXRpZXMgaW4gdGhlIGNhY2hlZCBjb2xsZWN0aW9uIHRoYXQgcGFzcyB0aGUgZmlsdGVyIGZ1bmN0aW9uICovXG4gIHJlYWRvbmx5IHNlbGVjdEZpbHRlcmVkRW50aXRpZXM6IE1lbW9pemVkU2VsZWN0b3I8T2JqZWN0LCBUW10+O1xuXG4gIC8qKiBLZXlzIG9mIHRoZSBjYWNoZWQgY29sbGVjdGlvbiwgaW4gdGhlIGNvbGxlY3Rpb24ncyBuYXRpdmUgc29ydCBvcmRlciAqL1xuICByZWFkb25seSBzZWxlY3RLZXlzOiBNZW1vaXplZFNlbGVjdG9yPE9iamVjdCwgc3RyaW5nW10gfCBudW1iZXJbXT47XG5cbiAgLyoqIFRydWUgd2hlbiB0aGUgY29sbGVjdGlvbiBoYXMgYmVlbiBmdWxseSBsb2FkZWQuICovXG4gIHJlYWRvbmx5IHNlbGVjdExvYWRlZDogTWVtb2l6ZWRTZWxlY3RvcjxPYmplY3QsIGJvb2xlYW4+O1xuXG4gIC8qKiBUcnVlIHdoZW4gYSBtdWx0aS1lbnRpdHkgcXVlcnkgY29tbWFuZCBpcyBpbiBwcm9ncmVzcy4gKi9cbiAgcmVhZG9ubHkgc2VsZWN0TG9hZGluZzogTWVtb2l6ZWRTZWxlY3RvcjxPYmplY3QsIGJvb2xlYW4+O1xuXG4gIC8qKiBDaGFuZ2VTdGF0ZSAoaW5jbHVkaW5nIG9yaWdpbmFsIHZhbHVlcykgb2YgZW50aXRpZXMgd2l0aCB1bnNhdmVkIGNoYW5nZXMgKi9cbiAgcmVhZG9ubHkgc2VsZWN0Q2hhbmdlU3RhdGU6IE1lbW9pemVkU2VsZWN0b3I8T2JqZWN0LCBDaGFuZ2VTdGF0ZU1hcDxUPj47XG59XG5cbi8qKiBDcmVhdGVzIEVudGl0eVNlbGVjdG9yIGZ1bmN0aW9ucyBmb3IgZW50aXR5IGNvbGxlY3Rpb25zLiAqL1xuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIEVudGl0eVNlbGVjdG9yc0ZhY3Rvcnkge1xuICBwcml2YXRlIGVudGl0eUNvbGxlY3Rpb25DcmVhdG9yOiBFbnRpdHlDb2xsZWN0aW9uQ3JlYXRvcjtcbiAgcHJpdmF0ZSBzZWxlY3RFbnRpdHlDYWNoZTogRW50aXR5Q2FjaGVTZWxlY3RvcjtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBAT3B0aW9uYWwoKSBlbnRpdHlDb2xsZWN0aW9uQ3JlYXRvcj86IEVudGl0eUNvbGxlY3Rpb25DcmVhdG9yLFxuICAgIEBPcHRpb25hbCgpXG4gICAgQEluamVjdChFTlRJVFlfQ0FDSEVfU0VMRUNUT1JfVE9LRU4pXG4gICAgc2VsZWN0RW50aXR5Q2FjaGU/OiBFbnRpdHlDYWNoZVNlbGVjdG9yXG4gICkge1xuICAgIHRoaXMuZW50aXR5Q29sbGVjdGlvbkNyZWF0b3IgPVxuICAgICAgZW50aXR5Q29sbGVjdGlvbkNyZWF0b3IgfHwgbmV3IEVudGl0eUNvbGxlY3Rpb25DcmVhdG9yKCk7XG4gICAgdGhpcy5zZWxlY3RFbnRpdHlDYWNoZSA9XG4gICAgICBzZWxlY3RFbnRpdHlDYWNoZSB8fCBjcmVhdGVFbnRpdHlDYWNoZVNlbGVjdG9yKEVOVElUWV9DQUNIRV9OQU1FKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgdGhlIE5nUnggc2VsZWN0b3IgZnJvbSB0aGUgc3RvcmUgcm9vdCB0byB0aGUgbmFtZWQgY29sbGVjdGlvbixcbiAgICogZS5nLiBmcm9tIE9iamVjdCB0byBIZXJvZXMuXG4gICAqIEBwYXJhbSBlbnRpdHlOYW1lIHRoZSBuYW1lIG9mIHRoZSBjb2xsZWN0aW9uXG4gICAqL1xuICBjcmVhdGVDb2xsZWN0aW9uU2VsZWN0b3I8XG4gICAgVCA9IGFueSxcbiAgICBDIGV4dGVuZHMgRW50aXR5Q29sbGVjdGlvbjxUPiA9IEVudGl0eUNvbGxlY3Rpb248VD5cbiAgPihlbnRpdHlOYW1lOiBzdHJpbmcpIHtcbiAgICBjb25zdCBnZXRDb2xsZWN0aW9uID0gKGNhY2hlOiBFbnRpdHlDYWNoZSA9IHt9KSA9PlxuICAgICAgPEM+KFxuICAgICAgICAoY2FjaGVbZW50aXR5TmFtZV0gfHxcbiAgICAgICAgICB0aGlzLmVudGl0eUNvbGxlY3Rpb25DcmVhdG9yLmNyZWF0ZTxUPihlbnRpdHlOYW1lKSlcbiAgICAgICk7XG4gICAgcmV0dXJuIGNyZWF0ZVNlbGVjdG9yKHRoaXMuc2VsZWN0RW50aXR5Q2FjaGUsIGdldENvbGxlY3Rpb24pO1xuICB9XG5cbiAgLy8vLy8vLyBjcmVhdGVDb2xsZWN0aW9uU2VsZWN0b3JzIC8vLy8vLy8vLy9cblxuICAvLyBCYXNlZCBvbiBAbmdyeC9lbnRpdHkvc3RhdGVfc2VsZWN0b3JzLnRzXG5cbiAgLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L3VuaWZpZWQtc2lnbmF0dXJlcyAqL1xuICAvLyBjcmVhdGVDb2xsZWN0aW9uU2VsZWN0b3JzKG1ldGFkYXRhKSBvdmVybG9hZFxuICAvKipcbiAgICogQ3JlYXRlcyBlbnRpdHkgY29sbGVjdGlvbiBzZWxlY3RvcnMgZnJvbSBtZXRhZGF0YS5cbiAgICogQHBhcmFtIG1ldGFkYXRhIC0gRW50aXR5TWV0YWRhdGEgZm9yIHRoZSBjb2xsZWN0aW9uLlxuICAgKiBNYXkgYmUgcGFydGlhbCBidXQgbXVjaCBoYXZlIGBlbnRpdHlOYW1lYC5cbiAgICovXG4gIGNyZWF0ZUNvbGxlY3Rpb25TZWxlY3RvcnM8XG4gICAgVCxcbiAgICBTIGV4dGVuZHMgQ29sbGVjdGlvblNlbGVjdG9yczxUPiA9IENvbGxlY3Rpb25TZWxlY3RvcnM8VD5cbiAgPihtZXRhZGF0YTogRW50aXR5TWV0YWRhdGE8VD4pOiBTO1xuXG4gIC8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC91bmlmaWVkLXNpZ25hdHVyZXMgKi9cbiAgLy8gY3JlYXRlQ29sbGVjdGlvblNlbGVjdG9ycyhlbnRpdHlOYW1lKSBvdmVybG9hZFxuICAvKipcbiAgICogQ3JlYXRlcyBkZWZhdWx0IGVudGl0eSBjb2xsZWN0aW9uIHNlbGVjdG9ycyBmb3IgYW4gZW50aXR5IHR5cGUuXG4gICAqIFVzZSB0aGUgbWV0YWRhdGEgb3ZlcmxvYWQgZm9yIGFkZGl0aW9uYWwgY29sbGVjdGlvbiBzZWxlY3RvcnMuXG4gICAqIEBwYXJhbSBlbnRpdHlOYW1lIC0gbmFtZSBvZiB0aGUgZW50aXR5IHR5cGVcbiAgICovXG4gIGNyZWF0ZUNvbGxlY3Rpb25TZWxlY3RvcnM8XG4gICAgVCxcbiAgICBTIGV4dGVuZHMgQ29sbGVjdGlvblNlbGVjdG9yczxUPiA9IENvbGxlY3Rpb25TZWxlY3RvcnM8VD5cbiAgPihlbnRpdHlOYW1lOiBzdHJpbmcpOiBTO1xuXG4gIC8vIGNyZWF0ZUNvbGxlY3Rpb25TZWxlY3RvcnMgaW1wbGVtZW50YXRpb25cbiAgY3JlYXRlQ29sbGVjdGlvblNlbGVjdG9yczxcbiAgICBULFxuICAgIFMgZXh0ZW5kcyBDb2xsZWN0aW9uU2VsZWN0b3JzPFQ+ID0gQ29sbGVjdGlvblNlbGVjdG9yczxUPlxuICA+KG1ldGFkYXRhT3JOYW1lOiBFbnRpdHlNZXRhZGF0YTxUPiB8IHN0cmluZyk6IFMge1xuICAgIGNvbnN0IG1ldGFkYXRhID1cbiAgICAgIHR5cGVvZiBtZXRhZGF0YU9yTmFtZSA9PT0gJ3N0cmluZydcbiAgICAgICAgPyB7IGVudGl0eU5hbWU6IG1ldGFkYXRhT3JOYW1lIH1cbiAgICAgICAgOiBtZXRhZGF0YU9yTmFtZTtcbiAgICBjb25zdCBzZWxlY3RLZXlzID0gKGM6IEVudGl0eUNvbGxlY3Rpb248VD4pID0+IGMuaWRzO1xuICAgIGNvbnN0IHNlbGVjdEVudGl0eU1hcCA9IChjOiBFbnRpdHlDb2xsZWN0aW9uPFQ+KSA9PiBjLmVudGl0aWVzO1xuXG4gICAgY29uc3Qgc2VsZWN0RW50aXRpZXM6IFNlbGVjdG9yPEVudGl0eUNvbGxlY3Rpb248VD4sIFRbXT4gPSBjcmVhdGVTZWxlY3RvcihcbiAgICAgIHNlbGVjdEtleXMsXG4gICAgICBzZWxlY3RFbnRpdHlNYXAsXG4gICAgICAoa2V5czogKG51bWJlciB8IHN0cmluZylbXSwgZW50aXRpZXM6IERpY3Rpb25hcnk8VD4pOiBUW10gPT5cbiAgICAgICAga2V5cy5tYXAoKGtleSkgPT4gZW50aXRpZXNba2V5XSBhcyBUKVxuICAgICk7XG5cbiAgICBjb25zdCBzZWxlY3RDb3VudDogU2VsZWN0b3I8RW50aXR5Q29sbGVjdGlvbjxUPiwgbnVtYmVyPiA9IGNyZWF0ZVNlbGVjdG9yKFxuICAgICAgc2VsZWN0S2V5cyxcbiAgICAgIChrZXlzKSA9PiBrZXlzLmxlbmd0aFxuICAgICk7XG5cbiAgICAvLyBFbnRpdHlDb2xsZWN0aW9uIHNlbGVjdG9ycyB0aGF0IGdvIGJleW9uZCB0aGUgbmdyeC9lbnRpdHkvRW50aXR5U3RhdGUgc2VsZWN0b3JzXG4gICAgY29uc3Qgc2VsZWN0RmlsdGVyID0gKGM6IEVudGl0eUNvbGxlY3Rpb248VD4pID0+IGMuZmlsdGVyO1xuXG4gICAgY29uc3QgZmlsdGVyRm4gPSBtZXRhZGF0YS5maWx0ZXJGbjtcbiAgICBjb25zdCBzZWxlY3RGaWx0ZXJlZEVudGl0aWVzOiBTZWxlY3RvcjxFbnRpdHlDb2xsZWN0aW9uPFQ+LCBUW10+ID0gZmlsdGVyRm5cbiAgICAgID8gY3JlYXRlU2VsZWN0b3IoXG4gICAgICAgICAgc2VsZWN0RW50aXRpZXMsXG4gICAgICAgICAgc2VsZWN0RmlsdGVyLFxuICAgICAgICAgIChlbnRpdGllczogVFtdLCBwYXR0ZXJuOiBhbnkpOiBUW10gPT4gZmlsdGVyRm4oZW50aXRpZXMsIHBhdHRlcm4pXG4gICAgICAgIClcbiAgICAgIDogc2VsZWN0RW50aXRpZXM7XG5cbiAgICBjb25zdCBzZWxlY3RMb2FkZWQgPSAoYzogRW50aXR5Q29sbGVjdGlvbjxUPikgPT4gYy5sb2FkZWQ7XG4gICAgY29uc3Qgc2VsZWN0TG9hZGluZyA9IChjOiBFbnRpdHlDb2xsZWN0aW9uPFQ+KSA9PiBjLmxvYWRpbmc7XG4gICAgY29uc3Qgc2VsZWN0Q2hhbmdlU3RhdGUgPSAoYzogRW50aXR5Q29sbGVjdGlvbjxUPikgPT4gYy5jaGFuZ2VTdGF0ZTtcblxuICAgIC8vIENyZWF0ZSBjb2xsZWN0aW9uIHNlbGVjdG9ycyBmb3IgZWFjaCBgYWRkaXRpb25hbENvbGxlY3Rpb25TdGF0ZWAgcHJvcGVydHkuXG4gICAgLy8gVGhlc2UgYWxsIGV4dGVuZCBmcm9tIGBzZWxlY3RDb2xsZWN0aW9uYFxuICAgIGNvbnN0IGV4dHJhID0gbWV0YWRhdGEuYWRkaXRpb25hbENvbGxlY3Rpb25TdGF0ZSB8fCB7fTtcbiAgICBjb25zdCBleHRyYVNlbGVjdG9yczoge1xuICAgICAgW25hbWU6IHN0cmluZ106IFNlbGVjdG9yPEVudGl0eUNvbGxlY3Rpb248VD4sIGFueT47XG4gICAgfSA9IHt9O1xuICAgIE9iamVjdC5rZXlzKGV4dHJhKS5mb3JFYWNoKChrKSA9PiB7XG4gICAgICBleHRyYVNlbGVjdG9yc1snc2VsZWN0JyArIGtbMF0udG9VcHBlckNhc2UoKSArIGsuc2xpY2UoMSldID0gKFxuICAgICAgICBjOiBFbnRpdHlDb2xsZWN0aW9uPFQ+XG4gICAgICApID0+ICg8YW55PmMpW2tdO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIHNlbGVjdENvdW50LFxuICAgICAgc2VsZWN0RW50aXRpZXMsXG4gICAgICBzZWxlY3RFbnRpdHlNYXAsXG4gICAgICBzZWxlY3RGaWx0ZXIsXG4gICAgICBzZWxlY3RGaWx0ZXJlZEVudGl0aWVzLFxuICAgICAgc2VsZWN0S2V5cyxcbiAgICAgIHNlbGVjdExvYWRlZCxcbiAgICAgIHNlbGVjdExvYWRpbmcsXG4gICAgICBzZWxlY3RDaGFuZ2VTdGF0ZSxcbiAgICAgIC4uLmV4dHJhU2VsZWN0b3JzLFxuICAgIH0gYXMgUztcbiAgfVxuXG4gIC8vLy8vLy8gY3JlYXRlIC8vLy8vLy8vLy9cblxuICAvLyBjcmVhdGUobWV0YWRhdGEpIG92ZXJsb2FkXG4gIC8qKlxuICAgKiBDcmVhdGVzIHRoZSBzdG9yZS1yb290ZWQgc2VsZWN0b3JzIGZvciBhbiBlbnRpdHkgY29sbGVjdGlvbi5cbiAgICoge0VudGl0eVNlbGVjdG9ycyRGYWN0b3J5fSB0dXJucyB0aGVtIGludG8gc2VsZWN0b3JzJC5cbiAgICpcbiAgICogQHBhcmFtIG1ldGFkYXRhIC0gRW50aXR5TWV0YWRhdGEgZm9yIHRoZSBjb2xsZWN0aW9uLlxuICAgKiBNYXkgYmUgcGFydGlhbCBidXQgbXVjaCBoYXZlIGBlbnRpdHlOYW1lYC5cbiAgICpcbiAgICogQmFzZWQgb24gbmdyeC9lbnRpdHkvc3RhdGVfc2VsZWN0b3JzLnRzXG4gICAqIERpZmZlcnMgaW4gdGhhdCB0aGVzZSBzZWxlY3RvcnMgc2VsZWN0IGZyb20gdGhlIE5nUnggc3RvcmUgcm9vdCxcbiAgICogdGhyb3VnaCB0aGUgY29sbGVjdGlvbiwgdG8gdGhlIGNvbGxlY3Rpb24gbWVtYmVycy5cbiAgICovXG4gIGNyZWF0ZTxULCBTIGV4dGVuZHMgRW50aXR5U2VsZWN0b3JzPFQ+ID0gRW50aXR5U2VsZWN0b3JzPFQ+PihcbiAgICBtZXRhZGF0YTogRW50aXR5TWV0YWRhdGE8VD5cbiAgKTogUztcblxuICAvLyBjcmVhdGUoZW50aXR5TmFtZSkgb3ZlcmxvYWRcbiAgLyoqXG4gICAqIENyZWF0ZXMgdGhlIGRlZmF1bHQgc3RvcmUtcm9vdGVkIHNlbGVjdG9ycyBmb3IgYW4gZW50aXR5IGNvbGxlY3Rpb24uXG4gICAqIHtFbnRpdHlTZWxlY3RvcnMkRmFjdG9yeX0gdHVybnMgdGhlbSBpbnRvIHNlbGVjdG9ycyQuXG4gICAqIFVzZSB0aGUgbWV0YWRhdGEgb3ZlcmxvYWQgZm9yIGFkZGl0aW9uYWwgY29sbGVjdGlvbiBzZWxlY3RvcnMuXG4gICAqXG4gICAqIEBwYXJhbSBlbnRpdHlOYW1lIC0gbmFtZSBvZiB0aGUgZW50aXR5IHR5cGUuXG4gICAqXG4gICAqIEJhc2VkIG9uIG5ncngvZW50aXR5L3N0YXRlX3NlbGVjdG9ycy50c1xuICAgKiBEaWZmZXJzIGluIHRoYXQgdGhlc2Ugc2VsZWN0b3JzIHNlbGVjdCBmcm9tIHRoZSBOZ1J4IHN0b3JlIHJvb3QsXG4gICAqIHRocm91Z2ggdGhlIGNvbGxlY3Rpb24sIHRvIHRoZSBjb2xsZWN0aW9uIG1lbWJlcnMuXG4gICAqL1xuICBjcmVhdGU8VCwgUyBleHRlbmRzIEVudGl0eVNlbGVjdG9yczxUPiA9IEVudGl0eVNlbGVjdG9yczxUPj4oXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC91bmlmaWVkLXNpZ25hdHVyZXNcbiAgICBlbnRpdHlOYW1lOiBzdHJpbmdcbiAgKTogUztcblxuICAvLyBjcmVhdGVDb2xsZWN0aW9uU2VsZWN0b3JzIGltcGxlbWVudGF0aW9uXG4gIGNyZWF0ZTxULCBTIGV4dGVuZHMgRW50aXR5U2VsZWN0b3JzPFQ+ID0gRW50aXR5U2VsZWN0b3JzPFQ+PihcbiAgICBtZXRhZGF0YU9yTmFtZTogRW50aXR5TWV0YWRhdGE8VD4gfCBzdHJpbmdcbiAgKTogUyB7XG4gICAgY29uc3QgbWV0YWRhdGEgPVxuICAgICAgdHlwZW9mIG1ldGFkYXRhT3JOYW1lID09PSAnc3RyaW5nJ1xuICAgICAgICA/IHsgZW50aXR5TmFtZTogbWV0YWRhdGFPck5hbWUgfVxuICAgICAgICA6IG1ldGFkYXRhT3JOYW1lO1xuICAgIGNvbnN0IGVudGl0eU5hbWUgPSBtZXRhZGF0YS5lbnRpdHlOYW1lO1xuICAgIGNvbnN0IHNlbGVjdENvbGxlY3Rpb246IFNlbGVjdG9yPFxuICAgICAgT2JqZWN0LFxuICAgICAgRW50aXR5Q29sbGVjdGlvbjxUPlxuICAgID4gPSB0aGlzLmNyZWF0ZUNvbGxlY3Rpb25TZWxlY3RvcjxUPihlbnRpdHlOYW1lKTtcbiAgICBjb25zdCBjb2xsZWN0aW9uU2VsZWN0b3JzID0gdGhpcy5jcmVhdGVDb2xsZWN0aW9uU2VsZWN0b3JzPFQ+KG1ldGFkYXRhKTtcblxuICAgIGNvbnN0IGVudGl0eVNlbGVjdG9yczoge1xuICAgICAgW25hbWU6IHN0cmluZ106IFNlbGVjdG9yPEVudGl0eUNvbGxlY3Rpb248VD4sIGFueT47XG4gICAgfSA9IHt9O1xuICAgIE9iamVjdC5rZXlzKGNvbGxlY3Rpb25TZWxlY3RvcnMpLmZvckVhY2goKGspID0+IHtcbiAgICAgIGVudGl0eVNlbGVjdG9yc1trXSA9IGNyZWF0ZVNlbGVjdG9yKFxuICAgICAgICBzZWxlY3RDb2xsZWN0aW9uLFxuICAgICAgICBjb2xsZWN0aW9uU2VsZWN0b3JzW2tdXG4gICAgICApO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIGVudGl0eU5hbWUsXG4gICAgICBzZWxlY3RDb2xsZWN0aW9uLFxuICAgICAgc2VsZWN0RW50aXR5Q2FjaGU6IHRoaXMuc2VsZWN0RW50aXR5Q2FjaGUsXG4gICAgICAuLi5lbnRpdHlTZWxlY3RvcnMsXG4gICAgfSBhcyBTO1xuICB9XG59XG4iXX0=
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { Injectable } from '@angular/core';
|
|
2
|
+
import * as i0 from "@angular/core";
|
|
3
|
+
/**
|
|
4
|
+
* Generates a string id beginning 'CRID',
|
|
5
|
+
* followed by a monotonically increasing integer for use as a correlation id.
|
|
6
|
+
* As they are produced locally by a singleton service,
|
|
7
|
+
* these ids are guaranteed to be unique only
|
|
8
|
+
* for the duration of a single client browser instance.
|
|
9
|
+
* Ngrx entity dispatcher query and save methods call this service to generate default correlation ids.
|
|
10
|
+
* Do NOT use for entity keys.
|
|
11
|
+
*/
|
|
12
|
+
class CorrelationIdGenerator {
|
|
13
|
+
constructor() {
|
|
14
|
+
/** Seed for the ids */
|
|
15
|
+
this.seed = 0;
|
|
16
|
+
/** Prefix of the id, 'CRID; */
|
|
17
|
+
this.prefix = 'CRID';
|
|
18
|
+
}
|
|
19
|
+
/** Return the next correlation id */
|
|
20
|
+
next() {
|
|
21
|
+
this.seed += 1;
|
|
22
|
+
return this.prefix + this.seed;
|
|
23
|
+
}
|
|
24
|
+
/** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.0-rc.2", ngImport: i0, type: CorrelationIdGenerator, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
25
|
+
/** @nocollapse */ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.0.0-rc.2", ngImport: i0, type: CorrelationIdGenerator }); }
|
|
26
|
+
}
|
|
27
|
+
export { CorrelationIdGenerator };
|
|
28
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.0-rc.2", ngImport: i0, type: CorrelationIdGenerator, decorators: [{
|
|
29
|
+
type: Injectable
|
|
30
|
+
}] });
|
|
31
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29ycmVsYXRpb24taWQtZ2VuZXJhdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbW9kdWxlcy9kYXRhL3NyYy91dGlscy9jb3JyZWxhdGlvbi1pZC1nZW5lcmF0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQzs7QUFFM0M7Ozs7Ozs7O0dBUUc7QUFDSCxNQUNhLHNCQUFzQjtJQURuQztRQUVFLHVCQUF1QjtRQUNiLFNBQUksR0FBRyxDQUFDLENBQUM7UUFDbkIsK0JBQStCO1FBQ3JCLFdBQU0sR0FBRyxNQUFNLENBQUM7S0FNM0I7SUFMQyxxQ0FBcUM7SUFDckMsSUFBSTtRQUNGLElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDO1FBQ2YsT0FBTyxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUM7SUFDakMsQ0FBQztzSUFUVSxzQkFBc0I7MElBQXRCLHNCQUFzQjs7U0FBdEIsc0JBQXNCO2dHQUF0QixzQkFBc0I7a0JBRGxDLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbi8qKlxuICogR2VuZXJhdGVzIGEgc3RyaW5nIGlkIGJlZ2lubmluZyAnQ1JJRCcsXG4gKiBmb2xsb3dlZCBieSBhIG1vbm90b25pY2FsbHkgaW5jcmVhc2luZyBpbnRlZ2VyIGZvciB1c2UgYXMgYSBjb3JyZWxhdGlvbiBpZC5cbiAqIEFzIHRoZXkgYXJlIHByb2R1Y2VkIGxvY2FsbHkgYnkgYSBzaW5nbGV0b24gc2VydmljZSxcbiAqIHRoZXNlIGlkcyBhcmUgZ3VhcmFudGVlZCB0byBiZSB1bmlxdWUgb25seVxuICogZm9yIHRoZSBkdXJhdGlvbiBvZiBhIHNpbmdsZSBjbGllbnQgYnJvd3NlciBpbnN0YW5jZS5cbiAqIE5ncnggZW50aXR5IGRpc3BhdGNoZXIgcXVlcnkgYW5kIHNhdmUgbWV0aG9kcyBjYWxsIHRoaXMgc2VydmljZSB0byBnZW5lcmF0ZSBkZWZhdWx0IGNvcnJlbGF0aW9uIGlkcy5cbiAqIERvIE5PVCB1c2UgZm9yIGVudGl0eSBrZXlzLlxuICovXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgQ29ycmVsYXRpb25JZEdlbmVyYXRvciB7XG4gIC8qKiBTZWVkIGZvciB0aGUgaWRzICovXG4gIHByb3RlY3RlZCBzZWVkID0gMDtcbiAgLyoqIFByZWZpeCBvZiB0aGUgaWQsICdDUklEOyAqL1xuICBwcm90ZWN0ZWQgcHJlZml4ID0gJ0NSSUQnO1xuICAvKiogUmV0dXJuIHRoZSBuZXh0IGNvcnJlbGF0aW9uIGlkICovXG4gIG5leHQoKSB7XG4gICAgdGhpcy5zZWVkICs9IDE7XG4gICAgcmV0dXJuIHRoaXMucHJlZml4ICsgdGhpcy5zZWVkO1xuICB9XG59XG4iXX0=
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { Injectable } from '@angular/core';
|
|
2
|
+
import * as i0 from "@angular/core";
|
|
3
|
+
class DefaultLogger {
|
|
4
|
+
error(message, extra) {
|
|
5
|
+
if (message) {
|
|
6
|
+
extra ? console.error(message, extra) : console.error(message);
|
|
7
|
+
}
|
|
8
|
+
}
|
|
9
|
+
log(message, extra) {
|
|
10
|
+
if (message) {
|
|
11
|
+
extra ? console.log(message, extra) : console.log(message);
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
warn(message, extra) {
|
|
15
|
+
if (message) {
|
|
16
|
+
extra ? console.warn(message, extra) : console.warn(message);
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
/** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.0-rc.2", ngImport: i0, type: DefaultLogger, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
20
|
+
/** @nocollapse */ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.0.0-rc.2", ngImport: i0, type: DefaultLogger }); }
|
|
21
|
+
}
|
|
22
|
+
export { DefaultLogger };
|
|
23
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.0-rc.2", ngImport: i0, type: DefaultLogger, decorators: [{
|
|
24
|
+
type: Injectable
|
|
25
|
+
}] });
|
|
26
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVmYXVsdC1sb2dnZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9tb2R1bGVzL2RhdGEvc3JjL3V0aWxzL2RlZmF1bHQtbG9nZ2VyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7O0FBRzNDLE1BQ2EsYUFBYTtJQUN4QixLQUFLLENBQUMsT0FBYSxFQUFFLEtBQVc7UUFDOUIsSUFBSSxPQUFPLEVBQUU7WUFDWCxLQUFLLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsT0FBTyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1NBQ2hFO0lBQ0gsQ0FBQztJQUVELEdBQUcsQ0FBQyxPQUFhLEVBQUUsS0FBVztRQUM1QixJQUFJLE9BQU8sRUFBRTtZQUNYLEtBQUssQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxPQUFPLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUM7U0FDNUQ7SUFDSCxDQUFDO0lBRUQsSUFBSSxDQUFDLE9BQWEsRUFBRSxLQUFXO1FBQzdCLElBQUksT0FBTyxFQUFFO1lBQ1gsS0FBSyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztTQUM5RDtJQUNILENBQUM7c0lBakJVLGFBQWE7MElBQWIsYUFBYTs7U0FBYixhQUFhO2dHQUFiLGFBQWE7a0JBRHpCLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBMb2dnZXIgfSBmcm9tICcuL2ludGVyZmFjZXMnO1xuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgRGVmYXVsdExvZ2dlciBpbXBsZW1lbnRzIExvZ2dlciB7XG4gIGVycm9yKG1lc3NhZ2U/OiBhbnksIGV4dHJhPzogYW55KSB7XG4gICAgaWYgKG1lc3NhZ2UpIHtcbiAgICAgIGV4dHJhID8gY29uc29sZS5lcnJvcihtZXNzYWdlLCBleHRyYSkgOiBjb25zb2xlLmVycm9yKG1lc3NhZ2UpO1xuICAgIH1cbiAgfVxuXG4gIGxvZyhtZXNzYWdlPzogYW55LCBleHRyYT86IGFueSkge1xuICAgIGlmIChtZXNzYWdlKSB7XG4gICAgICBleHRyYSA/IGNvbnNvbGUubG9nKG1lc3NhZ2UsIGV4dHJhKSA6IGNvbnNvbGUubG9nKG1lc3NhZ2UpO1xuICAgIH1cbiAgfVxuXG4gIHdhcm4obWVzc2FnZT86IGFueSwgZXh0cmE/OiBhbnkpIHtcbiAgICBpZiAobWVzc2FnZSkge1xuICAgICAgZXh0cmEgPyBjb25zb2xlLndhcm4obWVzc2FnZSwgZXh0cmEpIDogY29uc29sZS53YXJuKG1lc3NhZ2UpO1xuICAgIH1cbiAgfVxufVxuIl19
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
import { Inject, Injectable, Optional } from '@angular/core';
|
|
2
|
+
import { PLURAL_NAMES_TOKEN } from './interfaces';
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
const uncountable = [
|
|
5
|
+
// 'sheep',
|
|
6
|
+
// 'fish',
|
|
7
|
+
// 'deer',
|
|
8
|
+
// 'moose',
|
|
9
|
+
// 'rice',
|
|
10
|
+
// 'species',
|
|
11
|
+
'equipment',
|
|
12
|
+
'information',
|
|
13
|
+
'money',
|
|
14
|
+
'series',
|
|
15
|
+
];
|
|
16
|
+
class DefaultPluralizer {
|
|
17
|
+
constructor(pluralNames) {
|
|
18
|
+
this.pluralNames = {};
|
|
19
|
+
// merge each plural names object
|
|
20
|
+
if (pluralNames) {
|
|
21
|
+
pluralNames.forEach((pn) => this.registerPluralNames(pn));
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Pluralize a singular name using common English language pluralization rules
|
|
26
|
+
* Examples: "company" -> "companies", "employee" -> "employees", "tax" -> "taxes"
|
|
27
|
+
*/
|
|
28
|
+
pluralize(name) {
|
|
29
|
+
const plural = this.pluralNames[name];
|
|
30
|
+
if (plural) {
|
|
31
|
+
return plural;
|
|
32
|
+
}
|
|
33
|
+
// singular and plural are the same
|
|
34
|
+
if (uncountable.indexOf(name.toLowerCase()) >= 0) {
|
|
35
|
+
return name;
|
|
36
|
+
// vowel + y
|
|
37
|
+
}
|
|
38
|
+
else if (/[aeiou]y$/.test(name)) {
|
|
39
|
+
return name + 's';
|
|
40
|
+
// consonant + y
|
|
41
|
+
}
|
|
42
|
+
else if (name.endsWith('y')) {
|
|
43
|
+
return name.substring(0, name.length - 1) + 'ies';
|
|
44
|
+
// endings typically pluralized with 'es'
|
|
45
|
+
}
|
|
46
|
+
else if (/[s|ss|sh|ch|x|z]$/.test(name)) {
|
|
47
|
+
return name + 'es';
|
|
48
|
+
}
|
|
49
|
+
else {
|
|
50
|
+
return name + 's';
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Register a mapping of entity type name to the entity name's plural
|
|
55
|
+
* @param pluralNames {EntityPluralNames} plural names for entity types
|
|
56
|
+
*/
|
|
57
|
+
registerPluralNames(pluralNames) {
|
|
58
|
+
this.pluralNames = { ...this.pluralNames, ...(pluralNames || {}) };
|
|
59
|
+
}
|
|
60
|
+
/** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.0-rc.2", ngImport: i0, type: DefaultPluralizer, deps: [{ token: PLURAL_NAMES_TOKEN, optional: true }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
61
|
+
/** @nocollapse */ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.0.0-rc.2", ngImport: i0, type: DefaultPluralizer }); }
|
|
62
|
+
}
|
|
63
|
+
export { DefaultPluralizer };
|
|
64
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.0-rc.2", ngImport: i0, type: DefaultPluralizer, decorators: [{
|
|
65
|
+
type: Injectable
|
|
66
|
+
}], ctorParameters: function () { return [{ type: undefined, decorators: [{
|
|
67
|
+
type: Optional
|
|
68
|
+
}, {
|
|
69
|
+
type: Inject,
|
|
70
|
+
args: [PLURAL_NAMES_TOKEN]
|
|
71
|
+
}] }]; } });
|
|
72
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVmYXVsdC1wbHVyYWxpemVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbW9kdWxlcy9kYXRhL3NyYy91dGlscy9kZWZhdWx0LXBsdXJhbGl6ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzdELE9BQU8sRUFBcUIsa0JBQWtCLEVBQUUsTUFBTSxjQUFjLENBQUM7O0FBRXJFLE1BQU0sV0FBVyxHQUFHO0lBQ2xCLFdBQVc7SUFDWCxVQUFVO0lBQ1YsVUFBVTtJQUNWLFdBQVc7SUFDWCxVQUFVO0lBQ1YsYUFBYTtJQUNiLFdBQVc7SUFDWCxhQUFhO0lBQ2IsT0FBTztJQUNQLFFBQVE7Q0FDVCxDQUFDO0FBRUYsTUFDYSxpQkFBaUI7SUFHNUIsWUFHRSxXQUFnQztRQUxsQyxnQkFBVyxHQUFzQixFQUFFLENBQUM7UUFPbEMsaUNBQWlDO1FBQ2pDLElBQUksV0FBVyxFQUFFO1lBQ2YsV0FBVyxDQUFDLE9BQU8sQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7U0FDM0Q7SUFDSCxDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsU0FBUyxDQUFDLElBQVk7UUFDcEIsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN0QyxJQUFJLE1BQU0sRUFBRTtZQUNWLE9BQU8sTUFBTSxDQUFDO1NBQ2Y7UUFDRCxtQ0FBbUM7UUFDbkMsSUFBSSxXQUFXLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUNoRCxPQUFPLElBQUksQ0FBQztZQUNaLFlBQVk7U0FDYjthQUFNLElBQUksV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUNqQyxPQUFPLElBQUksR0FBRyxHQUFHLENBQUM7WUFDbEIsZ0JBQWdCO1NBQ2pCO2FBQU0sSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxFQUFFO1lBQzdCLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUM7WUFDbEQseUNBQXlDO1NBQzFDO2FBQU0sSUFBSSxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDekMsT0FBTyxJQUFJLEdBQUcsSUFBSSxDQUFDO1NBQ3BCO2FBQU07WUFDTCxPQUFPLElBQUksR0FBRyxHQUFHLENBQUM7U0FDbkI7SUFDSCxDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsbUJBQW1CLENBQUMsV0FBOEI7UUFDaEQsSUFBSSxDQUFDLFdBQVcsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDLFdBQVcsRUFBRSxHQUFHLENBQUMsV0FBVyxJQUFJLEVBQUUsQ0FBQyxFQUFFLENBQUM7SUFDckUsQ0FBQztzSUE5Q1UsaUJBQWlCLGtCQUtsQixrQkFBa0I7MElBTGpCLGlCQUFpQjs7U0FBakIsaUJBQWlCO2dHQUFqQixpQkFBaUI7a0JBRDdCLFVBQVU7OzBCQUtOLFFBQVE7OzBCQUNSLE1BQU07MkJBQUMsa0JBQWtCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0LCBJbmplY3RhYmxlLCBPcHRpb25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRW50aXR5UGx1cmFsTmFtZXMsIFBMVVJBTF9OQU1FU19UT0tFTiB9IGZyb20gJy4vaW50ZXJmYWNlcyc7XG5cbmNvbnN0IHVuY291bnRhYmxlID0gW1xuICAvLyAnc2hlZXAnLFxuICAvLyAnZmlzaCcsXG4gIC8vICdkZWVyJyxcbiAgLy8gJ21vb3NlJyxcbiAgLy8gJ3JpY2UnLFxuICAvLyAnc3BlY2llcycsXG4gICdlcXVpcG1lbnQnLFxuICAnaW5mb3JtYXRpb24nLFxuICAnbW9uZXknLFxuICAnc2VyaWVzJyxcbl07XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBEZWZhdWx0UGx1cmFsaXplciB7XG4gIHBsdXJhbE5hbWVzOiBFbnRpdHlQbHVyYWxOYW1lcyA9IHt9O1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIEBPcHRpb25hbCgpXG4gICAgQEluamVjdChQTFVSQUxfTkFNRVNfVE9LRU4pXG4gICAgcGx1cmFsTmFtZXM6IEVudGl0eVBsdXJhbE5hbWVzW11cbiAgKSB7XG4gICAgLy8gbWVyZ2UgZWFjaCBwbHVyYWwgbmFtZXMgb2JqZWN0XG4gICAgaWYgKHBsdXJhbE5hbWVzKSB7XG4gICAgICBwbHVyYWxOYW1lcy5mb3JFYWNoKChwbikgPT4gdGhpcy5yZWdpc3RlclBsdXJhbE5hbWVzKHBuKSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFBsdXJhbGl6ZSBhIHNpbmd1bGFyIG5hbWUgdXNpbmcgY29tbW9uIEVuZ2xpc2ggbGFuZ3VhZ2UgcGx1cmFsaXphdGlvbiBydWxlc1xuICAgKiBFeGFtcGxlczogXCJjb21wYW55XCIgLT4gXCJjb21wYW5pZXNcIiwgXCJlbXBsb3llZVwiIC0+IFwiZW1wbG95ZWVzXCIsIFwidGF4XCIgLT4gXCJ0YXhlc1wiXG4gICAqL1xuICBwbHVyYWxpemUobmFtZTogc3RyaW5nKSB7XG4gICAgY29uc3QgcGx1cmFsID0gdGhpcy5wbHVyYWxOYW1lc1tuYW1lXTtcbiAgICBpZiAocGx1cmFsKSB7XG4gICAgICByZXR1cm4gcGx1cmFsO1xuICAgIH1cbiAgICAvLyBzaW5ndWxhciBhbmQgcGx1cmFsIGFyZSB0aGUgc2FtZVxuICAgIGlmICh1bmNvdW50YWJsZS5pbmRleE9mKG5hbWUudG9Mb3dlckNhc2UoKSkgPj0gMCkge1xuICAgICAgcmV0dXJuIG5hbWU7XG4gICAgICAvLyB2b3dlbCArIHlcbiAgICB9IGVsc2UgaWYgKC9bYWVpb3VdeSQvLnRlc3QobmFtZSkpIHtcbiAgICAgIHJldHVybiBuYW1lICsgJ3MnO1xuICAgICAgLy8gY29uc29uYW50ICsgeVxuICAgIH0gZWxzZSBpZiAobmFtZS5lbmRzV2l0aCgneScpKSB7XG4gICAgICByZXR1cm4gbmFtZS5zdWJzdHJpbmcoMCwgbmFtZS5sZW5ndGggLSAxKSArICdpZXMnO1xuICAgICAgLy8gZW5kaW5ncyB0eXBpY2FsbHkgcGx1cmFsaXplZCB3aXRoICdlcydcbiAgICB9IGVsc2UgaWYgKC9bc3xzc3xzaHxjaHx4fHpdJC8udGVzdChuYW1lKSkge1xuICAgICAgcmV0dXJuIG5hbWUgKyAnZXMnO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gbmFtZSArICdzJztcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmVnaXN0ZXIgYSBtYXBwaW5nIG9mIGVudGl0eSB0eXBlIG5hbWUgdG8gdGhlIGVudGl0eSBuYW1lJ3MgcGx1cmFsXG4gICAqIEBwYXJhbSBwbHVyYWxOYW1lcyB7RW50aXR5UGx1cmFsTmFtZXN9IHBsdXJhbCBuYW1lcyBmb3IgZW50aXR5IHR5cGVzXG4gICAqL1xuICByZWdpc3RlclBsdXJhbE5hbWVzKHBsdXJhbE5hbWVzOiBFbnRpdHlQbHVyYWxOYW1lcyk6IHZvaWQge1xuICAgIHRoaXMucGx1cmFsTmFtZXMgPSB7IC4uLnRoaXMucGx1cmFsTmFtZXMsIC4uLihwbHVyYWxOYW1lcyB8fCB7fSkgfTtcbiAgfVxufVxuIl19
|