UNPKG

@spartacus/cart

Version:

`@spartacus/cart` is a package that you can include in your application, which allows you to use various cart features.

161 lines 25.6 kB
import { Injectable } from '@angular/core'; import { ofType } from '@ngrx/effects'; import { CloneSavedCartEvent, CloneSavedCartFailEvent, CloneSavedCartSuccessEvent, DeleteSavedCartEvent, DeleteSavedCartFailEvent, DeleteSavedCartSuccessEvent, EditSavedCartEvent, EditSavedCartFailEvent, EditSavedCartSuccessEvent, RestoreSavedCartEvent, RestoreSavedCartFailEvent, RestoreSavedCartSuccessEvent, SaveCartEvent, SaveCartFailEvent, SaveCartSuccessEvent, } from '@spartacus/cart/saved-cart/root'; import { CartActions, createFrom, } from '@spartacus/core'; import { of } from 'rxjs'; import { filter, map, switchMap, withLatestFrom } from 'rxjs/operators'; import { SavedCartActions } from '../store/actions/index'; import * as i0 from "@angular/core"; import * as i1 from "@ngrx/store"; import * as i2 from "@spartacus/core"; export class SavedCartEventBuilder { constructor(actionsSubject, eventService, stateEventService, multiCartService) { this.actionsSubject = actionsSubject; this.eventService = eventService; this.stateEventService = stateEventService; this.multiCartService = multiCartService; this.register(); } /** * Registers events for the saved cart */ register() { this.registerRestoreSavedCartEvents(); this.registerDeleteSavedCartEvents(); this.registerSaveCartEvents(); this.registerEditSavedCartEvents(); this.registerCloneSavedCartEvents(); } /** * Registers restore saved cart events */ registerRestoreSavedCartEvents() { this.buildRestoreSavedCartEvents({ action: SavedCartActions.RESTORE_SAVED_CART, event: RestoreSavedCartEvent, }); this.buildRestoreSavedCartEvents({ action: SavedCartActions.RESTORE_SAVED_CART_SUCCESS, event: RestoreSavedCartSuccessEvent, }); this.buildRestoreSavedCartEvents({ action: SavedCartActions.RESTORE_SAVED_CART_FAIL, event: RestoreSavedCartFailEvent, }); } /** * Registers delete saved cart events */ registerDeleteSavedCartEvents() { this.stateEventService.register({ action: CartActions.DELETE_CART, event: DeleteSavedCartEvent, factory: (action) => createFrom(DeleteSavedCartEvent, Object.assign(Object.assign({}, action.payload), { cartCode: action.payload.cartId })), }); this.stateEventService.register({ action: CartActions.DELETE_CART_SUCCESS, event: DeleteSavedCartSuccessEvent, factory: (action) => createFrom(DeleteSavedCartSuccessEvent, Object.assign(Object.assign({}, action.payload), { cartCode: action.payload.cartId })), }); this.stateEventService.register({ action: CartActions.DELETE_CART_FAIL, event: DeleteSavedCartFailEvent, factory: (action) => createFrom(DeleteSavedCartFailEvent, Object.assign(Object.assign({}, action.payload), { cartCode: action.payload.cartId })), }); } /** * Registers save cart events */ registerSaveCartEvents() { this.buildSaveCartSuccessEvent({ action: SavedCartActions.SAVE_CART_SUCCESS, event: SaveCartSuccessEvent, }); this.stateEventService.register({ action: SavedCartActions.SAVE_CART_FAIL, event: SaveCartFailEvent, factory: (action) => createFrom(SaveCartFailEvent, Object.assign(Object.assign({}, action.payload), { cartCode: action.payload.cartId })), }); this.stateEventService.register({ action: SavedCartActions.SAVE_CART, event: SaveCartEvent, factory: (action) => { return createFrom(SaveCartEvent, Object.assign(Object.assign({}, action.payload), { cartCode: action.payload.cartId })); }, }); } /** * Registers edit saved cart events */ registerEditSavedCartEvents() { this.buildSaveCartSuccessEvent({ action: SavedCartActions.EDIT_SAVED_CART_SUCCESS, event: EditSavedCartSuccessEvent, }); this.stateEventService.register({ action: SavedCartActions.EDIT_SAVED_CART_FAIL, event: EditSavedCartFailEvent, factory: (action) => createFrom(EditSavedCartFailEvent, Object.assign(Object.assign({}, action.payload), { cartCode: action.payload.cartId })), }); this.stateEventService.register({ action: SavedCartActions.EDIT_SAVED_CART, event: EditSavedCartEvent, factory: (action) => { return createFrom(EditSavedCartEvent, Object.assign(Object.assign({}, action.payload), { cartCode: action.payload.cartId })); }, }); } /** * Registers clone saved cart events */ registerCloneSavedCartEvents() { this.buildRestoreSavedCartEvents({ action: SavedCartActions.CLONE_SAVED_CART, event: CloneSavedCartEvent, }); this.buildRestoreSavedCartEvents({ action: SavedCartActions.CLONE_SAVED_CART_SUCCESS, event: CloneSavedCartSuccessEvent, }); this.buildRestoreSavedCartEvents({ action: SavedCartActions.CLONE_SAVED_CART_FAIL, event: CloneSavedCartFailEvent, }); } /** * Builds the restore save cart events from the action and cart * * @param mapping mapping declaration from `action` string type to `event` class type * @param saveTime should the saveTime attribute be added to the event * @returns */ buildRestoreSavedCartEvents(mapping) { const eventStream$ = this.getAction(mapping.action).pipe(switchMap((action) => of(action).pipe(withLatestFrom(this.multiCartService.getCart(action.payload.cartId)))), map(([action, cart]) => createFrom(mapping.event, Object.assign(Object.assign(Object.assign({}, action.payload), { cartCode: cart.code, saveCartName: cart.name, saveCartDescription: cart.description }), (cart.saveTime && { saveTime: cart.saveTime }))))); return this.eventService.register(mapping.event, eventStream$); } /** * Builds save cart event by adding the saveTime from the cart * * @param mapping mapping declaration from `action` string type to `event` class type * @returns events register function */ buildSaveCartSuccessEvent(mapping) { const eventStream$ = this.getAction(mapping.action).pipe(switchMap((action) => of(action).pipe(withLatestFrom(this.multiCartService.getCart(action.payload.cartId)))), filter(([, cart]) => Boolean(cart)), map(([action, cart]) => createFrom(mapping.event, Object.assign(Object.assign({}, action.payload), { cartCode: cart.code, saveTime: cart.saveTime })))); return this.eventService.register(mapping.event, eventStream$); } /** * Returns a stream of actions only of a given type(s) * * @param actionType type(s) of actions */ getAction(actionType) { return this.actionsSubject.pipe(ofType(...[].concat(actionType))); } } SavedCartEventBuilder.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.0.5", ngImport: i0, type: SavedCartEventBuilder, deps: [{ token: i1.ActionsSubject }, { token: i2.EventService }, { token: i2.StateEventService }, { token: i2.MultiCartService }], target: i0.ɵɵFactoryTarget.Injectable }); SavedCartEventBuilder.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.0.5", ngImport: i0, type: SavedCartEventBuilder, providedIn: 'root' }); i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.0.5", ngImport: i0, type: SavedCartEventBuilder, decorators: [{ type: Injectable, args: [{ providedIn: 'root' }] }], ctorParameters: function () { return [{ type: i1.ActionsSubject }, { type: i2.EventService }, { type: i2.StateEventService }, { type: i2.MultiCartService }]; } }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2F2ZWQtY2FydC1ldmVudC5idWlsZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vZmVhdHVyZS1saWJzL2NhcnQvc2F2ZWQtY2FydC9jb3JlL2V2ZW50cy9zYXZlZC1jYXJ0LWV2ZW50LmJ1aWxkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBUSxNQUFNLGVBQWUsQ0FBQztBQUNqRCxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRXZDLE9BQU8sRUFDTCxtQkFBbUIsRUFDbkIsdUJBQXVCLEVBQ3ZCLDBCQUEwQixFQUMxQixvQkFBb0IsRUFDcEIsd0JBQXdCLEVBQ3hCLDJCQUEyQixFQUMzQixrQkFBa0IsRUFDbEIsc0JBQXNCLEVBQ3RCLHlCQUF5QixFQUN6QixxQkFBcUIsRUFDckIseUJBQXlCLEVBQ3pCLDRCQUE0QixFQUM1QixhQUFhLEVBQ2IsaUJBQWlCLEVBQ2pCLG9CQUFvQixHQUNyQixNQUFNLGlDQUFpQyxDQUFDO0FBQ3pDLE9BQU8sRUFFTCxXQUFXLEVBQ1gsVUFBVSxHQUlYLE1BQU0saUJBQWlCLENBQUM7QUFDekIsT0FBTyxFQUFjLEVBQUUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUN0QyxPQUFPLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUUsY0FBYyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDeEUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7Ozs7QUFHMUQsTUFBTSxPQUFPLHFCQUFxQjtJQUNoQyxZQUNZLGNBQThCLEVBQzlCLFlBQTBCLEVBQzFCLGlCQUFvQyxFQUNwQyxnQkFBa0M7UUFIbEMsbUJBQWMsR0FBZCxjQUFjLENBQWdCO1FBQzlCLGlCQUFZLEdBQVosWUFBWSxDQUFjO1FBQzFCLHNCQUFpQixHQUFqQixpQkFBaUIsQ0FBbUI7UUFDcEMscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFrQjtRQUU1QyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDbEIsQ0FBQztJQUVEOztPQUVHO0lBQ08sUUFBUTtRQUNoQixJQUFJLENBQUMsOEJBQThCLEVBQUUsQ0FBQztRQUN0QyxJQUFJLENBQUMsNkJBQTZCLEVBQUUsQ0FBQztRQUNyQyxJQUFJLENBQUMsc0JBQXNCLEVBQUUsQ0FBQztRQUM5QixJQUFJLENBQUMsMkJBQTJCLEVBQUUsQ0FBQztRQUNuQyxJQUFJLENBQUMsNEJBQTRCLEVBQUUsQ0FBQztJQUN0QyxDQUFDO0lBRUQ7O09BRUc7SUFDTyw4QkFBOEI7UUFDdEMsSUFBSSxDQUFDLDJCQUEyQixDQUFDO1lBQy9CLE1BQU0sRUFBRSxnQkFBZ0IsQ0FBQyxrQkFBa0I7WUFDM0MsS0FBSyxFQUFFLHFCQUFxQjtTQUM3QixDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsMkJBQTJCLENBQUM7WUFDL0IsTUFBTSxFQUFFLGdCQUFnQixDQUFDLDBCQUEwQjtZQUNuRCxLQUFLLEVBQUUsNEJBQTRCO1NBQ3BDLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQywyQkFBMkIsQ0FBQztZQUMvQixNQUFNLEVBQUUsZ0JBQWdCLENBQUMsdUJBQXVCO1lBQ2hELEtBQUssRUFBRSx5QkFBeUI7U0FDakMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVEOztPQUVHO0lBQ08sNkJBQTZCO1FBQ3JDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxRQUFRLENBQUM7WUFDOUIsTUFBTSxFQUFFLFdBQVcsQ0FBQyxXQUFXO1lBQy9CLEtBQUssRUFBRSxvQkFBb0I7WUFDM0IsT0FBTyxFQUFFLENBQUMsTUFBOEIsRUFBRSxFQUFFLENBQzFDLFVBQVUsQ0FBQyxvQkFBb0Isa0NBQzFCLE1BQU0sQ0FBQyxPQUFPLEtBQ2pCLFFBQVEsRUFBRSxNQUFNLENBQUMsT0FBTyxDQUFDLE1BQU0sSUFDL0I7U0FDTCxDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsaUJBQWlCLENBQUMsUUFBUSxDQUFDO1lBQzlCLE1BQU0sRUFBRSxXQUFXLENBQUMsbUJBQW1CO1lBQ3ZDLEtBQUssRUFBRSwyQkFBMkI7WUFDbEMsT0FBTyxFQUFFLENBQUMsTUFBcUMsRUFBRSxFQUFFLENBQ2pELFVBQVUsQ0FBQywyQkFBMkIsa0NBQ2pDLE1BQU0sQ0FBQyxPQUFPLEtBQ2pCLFFBQVEsRUFBRSxNQUFNLENBQUMsT0FBTyxDQUFDLE1BQU0sSUFDL0I7U0FDTCxDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsaUJBQWlCLENBQUMsUUFBUSxDQUFDO1lBQzlCLE1BQU0sRUFBRSxXQUFXLENBQUMsZ0JBQWdCO1lBQ3BDLEtBQUssRUFBRSx3QkFBd0I7WUFDL0IsT0FBTyxFQUFFLENBQUMsTUFBa0MsRUFBRSxFQUFFLENBQzlDLFVBQVUsQ0FBQyx3QkFBd0Isa0NBQzlCLE1BQU0sQ0FBQyxPQUFPLEtBQ2pCLFFBQVEsRUFBRSxNQUFNLENBQUMsT0FBTyxDQUFDLE1BQU0sSUFDL0I7U0FDTCxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQ7O09BRUc7SUFDTyxzQkFBc0I7UUFDOUIsSUFBSSxDQUFDLHlCQUF5QixDQUFDO1lBQzdCLE1BQU0sRUFBRSxnQkFBZ0IsQ0FBQyxpQkFBaUI7WUFDMUMsS0FBSyxFQUFFLG9CQUFvQjtTQUM1QixDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsaUJBQWlCLENBQUMsUUFBUSxDQUFDO1lBQzlCLE1BQU0sRUFBRSxnQkFBZ0IsQ0FBQyxjQUFjO1lBQ3ZDLEtBQUssRUFBRSxpQkFBaUI7WUFDeEIsT0FBTyxFQUFFLENBQUMsTUFBcUMsRUFBRSxFQUFFLENBQ2pELFVBQVUsQ0FBQyxpQkFBaUIsa0NBQ3ZCLE1BQU0sQ0FBQyxPQUFPLEtBQ2pCLFFBQVEsRUFBRSxNQUFNLENBQUMsT0FBTyxDQUFDLE1BQU0sSUFDL0I7U0FDTCxDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsaUJBQWlCLENBQUMsUUFBUSxDQUFDO1lBQzlCLE1BQU0sRUFBRSxnQkFBZ0IsQ0FBQyxTQUFTO1lBQ2xDLEtBQUssRUFBRSxhQUFhO1lBQ3BCLE9BQU8sRUFBRSxDQUFDLE1BQWlDLEVBQUUsRUFBRTtnQkFDN0MsT0FBTyxVQUFVLENBQUMsYUFBYSxrQ0FDMUIsTUFBTSxDQUFDLE9BQU8sS0FDakIsUUFBUSxFQUFFLE1BQU0sQ0FBQyxPQUFPLENBQUMsTUFBTSxJQUMvQixDQUFDO1lBQ0wsQ0FBQztTQUNGLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRDs7T0FFRztJQUNPLDJCQUEyQjtRQUNuQyxJQUFJLENBQUMseUJBQXlCLENBQUM7WUFDN0IsTUFBTSxFQUFFLGdCQUFnQixDQUFDLHVCQUF1QjtZQUNoRCxLQUFLLEVBQUUseUJBQXlCO1NBQ2pDLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxRQUFRLENBQUM7WUFDOUIsTUFBTSxFQUFFLGdCQUFnQixDQUFDLG9CQUFvQjtZQUM3QyxLQUFLLEVBQUUsc0JBQXNCO1lBQzdCLE9BQU8sRUFBRSxDQUFDLE1BQTBDLEVBQUUsRUFBRSxDQUN0RCxVQUFVLENBQUMsc0JBQXNCLGtDQUM1QixNQUFNLENBQUMsT0FBTyxLQUNqQixRQUFRLEVBQUUsTUFBTSxDQUFDLE9BQU8sQ0FBQyxNQUFNLElBQy9CO1NBQ0wsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFFBQVEsQ0FBQztZQUM5QixNQUFNLEVBQUUsZ0JBQWdCLENBQUMsZUFBZTtZQUN4QyxLQUFLLEVBQUUsa0JBQWtCO1lBQ3pCLE9BQU8sRUFBRSxDQUFDLE1BQXNDLEVBQUUsRUFBRTtnQkFDbEQsT0FBTyxVQUFVLENBQUMsa0JBQWtCLGtDQUMvQixNQUFNLENBQUMsT0FBTyxLQUNqQixRQUFRLEVBQUUsTUFBTSxDQUFDLE9BQU8sQ0FBQyxNQUFNLElBQy9CLENBQUM7WUFDTCxDQUFDO1NBQ0YsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVEOztPQUVHO0lBQ08sNEJBQTRCO1FBQ3BDLElBQUksQ0FBQywyQkFBMkIsQ0FBQztZQUMvQixNQUFNLEVBQUUsZ0JBQWdCLENBQUMsZ0JBQWdCO1lBQ3pDLEtBQUssRUFBRSxtQkFBbUI7U0FDM0IsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLDJCQUEyQixDQUFDO1lBQy9CLE1BQU0sRUFBRSxnQkFBZ0IsQ0FBQyx3QkFBd0I7WUFDakQsS0FBSyxFQUFFLDBCQUEwQjtTQUNsQyxDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsMkJBQTJCLENBQUM7WUFDL0IsTUFBTSxFQUFFLGdCQUFnQixDQUFDLHFCQUFxQjtZQUM5QyxLQUFLLEVBQUUsdUJBQXVCO1NBQy9CLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDTywyQkFBMkIsQ0FDbkMsT0FBZ0M7UUFFaEMsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxDQUN0RCxTQUFTLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUNuQixFQUFFLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxDQUNiLGNBQWMsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FDckUsQ0FDRixFQUNELEdBQUcsQ0FBQyxDQUFDLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FDckIsVUFBVSxDQUFDLE9BQU8sQ0FBQyxLQUFnQixnREFDOUIsTUFBTSxDQUFDLE9BQU8sS0FDakIsUUFBUSxFQUFFLElBQUksQ0FBQyxJQUFJLEVBQ25CLFlBQVksRUFBRSxJQUFJLENBQUMsSUFBSSxFQUN2QixtQkFBbUIsRUFBRSxJQUFJLENBQUMsV0FBVyxLQUNsQyxDQUFDLElBQUksQ0FBQyxRQUFRLElBQUksRUFBRSxRQUFRLEVBQUUsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLEVBQ2pELENBQ0gsQ0FDRixDQUFDO1FBQ0YsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsS0FBZ0IsRUFBRSxZQUFZLENBQUMsQ0FBQztJQUM1RSxDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDTyx5QkFBeUIsQ0FDakMsT0FBZ0M7UUFFaEMsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxDQUN0RCxTQUFTLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUNuQixFQUFFLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxDQUNiLGNBQWMsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FDckUsQ0FDRixFQUNELE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQ25DLEdBQUcsQ0FBQyxDQUFDLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FDckIsVUFBVSxDQUFDLE9BQU8sQ0FBQyxLQUFnQixrQ0FDOUIsTUFBTSxDQUFDLE9BQU8sS0FDakIsUUFBUSxFQUFFLElBQUksQ0FBQyxJQUFJLEVBQ25CLFFBQVEsRUFBRSxJQUFJLENBQUMsUUFBUSxJQUN2QixDQUNILENBQ0YsQ0FBQztRQUNGLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLEtBQWdCLEVBQUUsWUFBWSxDQUFDLENBQUM7SUFDNUUsQ0FBQztJQUVEOzs7O09BSUc7SUFDTyxTQUFTLENBQ2pCLFVBQTZCO1FBRTdCLE9BQU8sSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQzdCLE1BQU0sQ0FBQyxHQUFJLEVBQWUsQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FDL0MsQ0FBQztJQUNKLENBQUM7O2tIQWpPVSxxQkFBcUI7c0hBQXJCLHFCQUFxQixjQURSLE1BQU07MkZBQ25CLHFCQUFxQjtrQkFEakMsVUFBVTttQkFBQyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlLCBUeXBlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBvZlR5cGUgfSBmcm9tICdAbmdyeC9lZmZlY3RzJztcbmltcG9ydCB7IEFjdGlvbnNTdWJqZWN0IH0gZnJvbSAnQG5ncngvc3RvcmUnO1xuaW1wb3J0IHtcbiAgQ2xvbmVTYXZlZENhcnRFdmVudCxcbiAgQ2xvbmVTYXZlZENhcnRGYWlsRXZlbnQsXG4gIENsb25lU2F2ZWRDYXJ0U3VjY2Vzc0V2ZW50LFxuICBEZWxldGVTYXZlZENhcnRFdmVudCxcbiAgRGVsZXRlU2F2ZWRDYXJ0RmFpbEV2ZW50LFxuICBEZWxldGVTYXZlZENhcnRTdWNjZXNzRXZlbnQsXG4gIEVkaXRTYXZlZENhcnRFdmVudCxcbiAgRWRpdFNhdmVkQ2FydEZhaWxFdmVudCxcbiAgRWRpdFNhdmVkQ2FydFN1Y2Nlc3NFdmVudCxcbiAgUmVzdG9yZVNhdmVkQ2FydEV2ZW50LFxuICBSZXN0b3JlU2F2ZWRDYXJ0RmFpbEV2ZW50LFxuICBSZXN0b3JlU2F2ZWRDYXJ0U3VjY2Vzc0V2ZW50LFxuICBTYXZlQ2FydEV2ZW50LFxuICBTYXZlQ2FydEZhaWxFdmVudCxcbiAgU2F2ZUNhcnRTdWNjZXNzRXZlbnQsXG59IGZyb20gJ0BzcGFydGFjdXMvY2FydC9zYXZlZC1jYXJ0L3Jvb3QnO1xuaW1wb3J0IHtcbiAgQWN0aW9uVG9FdmVudE1hcHBpbmcsXG4gIENhcnRBY3Rpb25zLFxuICBjcmVhdGVGcm9tLFxuICBFdmVudFNlcnZpY2UsXG4gIE11bHRpQ2FydFNlcnZpY2UsXG4gIFN0YXRlRXZlbnRTZXJ2aWNlLFxufSBmcm9tICdAc3BhcnRhY3VzL2NvcmUnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgb2YgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGZpbHRlciwgbWFwLCBzd2l0Y2hNYXAsIHdpdGhMYXRlc3RGcm9tIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgU2F2ZWRDYXJ0QWN0aW9ucyB9IGZyb20gJy4uL3N0b3JlL2FjdGlvbnMvaW5kZXgnO1xuXG5ASW5qZWN0YWJsZSh7IHByb3ZpZGVkSW46ICdyb290JyB9KVxuZXhwb3J0IGNsYXNzIFNhdmVkQ2FydEV2ZW50QnVpbGRlciB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHByb3RlY3RlZCBhY3Rpb25zU3ViamVjdDogQWN0aW9uc1N1YmplY3QsXG4gICAgcHJvdGVjdGVkIGV2ZW50U2VydmljZTogRXZlbnRTZXJ2aWNlLFxuICAgIHByb3RlY3RlZCBzdGF0ZUV2ZW50U2VydmljZTogU3RhdGVFdmVudFNlcnZpY2UsXG4gICAgcHJvdGVjdGVkIG11bHRpQ2FydFNlcnZpY2U6IE11bHRpQ2FydFNlcnZpY2VcbiAgKSB7XG4gICAgdGhpcy5yZWdpc3RlcigpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlZ2lzdGVycyBldmVudHMgZm9yIHRoZSBzYXZlZCBjYXJ0XG4gICAqL1xuICBwcm90ZWN0ZWQgcmVnaXN0ZXIoKTogdm9pZCB7XG4gICAgdGhpcy5yZWdpc3RlclJlc3RvcmVTYXZlZENhcnRFdmVudHMoKTtcbiAgICB0aGlzLnJlZ2lzdGVyRGVsZXRlU2F2ZWRDYXJ0RXZlbnRzKCk7XG4gICAgdGhpcy5yZWdpc3RlclNhdmVDYXJ0RXZlbnRzKCk7XG4gICAgdGhpcy5yZWdpc3RlckVkaXRTYXZlZENhcnRFdmVudHMoKTtcbiAgICB0aGlzLnJlZ2lzdGVyQ2xvbmVTYXZlZENhcnRFdmVudHMoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWdpc3RlcnMgcmVzdG9yZSBzYXZlZCBjYXJ0IGV2ZW50c1xuICAgKi9cbiAgcHJvdGVjdGVkIHJlZ2lzdGVyUmVzdG9yZVNhdmVkQ2FydEV2ZW50cygpOiB2b2lkIHtcbiAgICB0aGlzLmJ1aWxkUmVzdG9yZVNhdmVkQ2FydEV2ZW50cyh7XG4gICAgICBhY3Rpb246IFNhdmVkQ2FydEFjdGlvbnMuUkVTVE9SRV9TQVZFRF9DQVJULFxuICAgICAgZXZlbnQ6IFJlc3RvcmVTYXZlZENhcnRFdmVudCxcbiAgICB9KTtcblxuICAgIHRoaXMuYnVpbGRSZXN0b3JlU2F2ZWRDYXJ0RXZlbnRzKHtcbiAgICAgIGFjdGlvbjogU2F2ZWRDYXJ0QWN0aW9ucy5SRVNUT1JFX1NBVkVEX0NBUlRfU1VDQ0VTUyxcbiAgICAgIGV2ZW50OiBSZXN0b3JlU2F2ZWRDYXJ0U3VjY2Vzc0V2ZW50LFxuICAgIH0pO1xuXG4gICAgdGhpcy5idWlsZFJlc3RvcmVTYXZlZENhcnRFdmVudHMoe1xuICAgICAgYWN0aW9uOiBTYXZlZENhcnRBY3Rpb25zLlJFU1RPUkVfU0FWRURfQ0FSVF9GQUlMLFxuICAgICAgZXZlbnQ6IFJlc3RvcmVTYXZlZENhcnRGYWlsRXZlbnQsXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogUmVnaXN0ZXJzIGRlbGV0ZSBzYXZlZCBjYXJ0IGV2ZW50c1xuICAgKi9cbiAgcHJvdGVjdGVkIHJlZ2lzdGVyRGVsZXRlU2F2ZWRDYXJ0RXZlbnRzKCk6IHZvaWQge1xuICAgIHRoaXMuc3RhdGVFdmVudFNlcnZpY2UucmVnaXN0ZXIoe1xuICAgICAgYWN0aW9uOiBDYXJ0QWN0aW9ucy5ERUxFVEVfQ0FSVCxcbiAgICAgIGV2ZW50OiBEZWxldGVTYXZlZENhcnRFdmVudCxcbiAgICAgIGZhY3Rvcnk6IChhY3Rpb246IENhcnRBY3Rpb25zLkRlbGV0ZUNhcnQpID0+XG4gICAgICAgIGNyZWF0ZUZyb20oRGVsZXRlU2F2ZWRDYXJ0RXZlbnQsIHtcbiAgICAgICAgICAuLi5hY3Rpb24ucGF5bG9hZCxcbiAgICAgICAgICBjYXJ0Q29kZTogYWN0aW9uLnBheWxvYWQuY2FydElkLFxuICAgICAgICB9KSxcbiAgICB9KTtcblxuICAgIHRoaXMuc3RhdGVFdmVudFNlcnZpY2UucmVnaXN0ZXIoe1xuICAgICAgYWN0aW9uOiBDYXJ0QWN0aW9ucy5ERUxFVEVfQ0FSVF9TVUNDRVNTLFxuICAgICAgZXZlbnQ6IERlbGV0ZVNhdmVkQ2FydFN1Y2Nlc3NFdmVudCxcbiAgICAgIGZhY3Rvcnk6IChhY3Rpb246IENhcnRBY3Rpb25zLkRlbGV0ZUNhcnRTdWNjZXNzKSA9PlxuICAgICAgICBjcmVhdGVGcm9tKERlbGV0ZVNhdmVkQ2FydFN1Y2Nlc3NFdmVudCwge1xuICAgICAgICAgIC4uLmFjdGlvbi5wYXlsb2FkLFxuICAgICAgICAgIGNhcnRDb2RlOiBhY3Rpb24ucGF5bG9hZC5jYXJ0SWQsXG4gICAgICAgIH0pLFxuICAgIH0pO1xuXG4gICAgdGhpcy5zdGF0ZUV2ZW50U2VydmljZS5yZWdpc3Rlcih7XG4gICAgICBhY3Rpb246IENhcnRBY3Rpb25zLkRFTEVURV9DQVJUX0ZBSUwsXG4gICAgICBldmVudDogRGVsZXRlU2F2ZWRDYXJ0RmFpbEV2ZW50LFxuICAgICAgZmFjdG9yeTogKGFjdGlvbjogQ2FydEFjdGlvbnMuRGVsZXRlQ2FydEZhaWwpID0+XG4gICAgICAgIGNyZWF0ZUZyb20oRGVsZXRlU2F2ZWRDYXJ0RmFpbEV2ZW50LCB7XG4gICAgICAgICAgLi4uYWN0aW9uLnBheWxvYWQsXG4gICAgICAgICAgY2FydENvZGU6IGFjdGlvbi5wYXlsb2FkLmNhcnRJZCxcbiAgICAgICAgfSksXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogUmVnaXN0ZXJzIHNhdmUgY2FydCBldmVudHNcbiAgICovXG4gIHByb3RlY3RlZCByZWdpc3RlclNhdmVDYXJ0RXZlbnRzKCk6IHZvaWQge1xuICAgIHRoaXMuYnVpbGRTYXZlQ2FydFN1Y2Nlc3NFdmVudCh7XG4gICAgICBhY3Rpb246IFNhdmVkQ2FydEFjdGlvbnMuU0FWRV9DQVJUX1NVQ0NFU1MsXG4gICAgICBldmVudDogU2F2ZUNhcnRTdWNjZXNzRXZlbnQsXG4gICAgfSk7XG5cbiAgICB0aGlzLnN0YXRlRXZlbnRTZXJ2aWNlLnJlZ2lzdGVyKHtcbiAgICAgIGFjdGlvbjogU2F2ZWRDYXJ0QWN0aW9ucy5TQVZFX0NBUlRfRkFJTCxcbiAgICAgIGV2ZW50OiBTYXZlQ2FydEZhaWxFdmVudCxcbiAgICAgIGZhY3Rvcnk6IChhY3Rpb246IFNhdmVkQ2FydEFjdGlvbnMuU2F2ZUNhcnRGYWlsKSA9PlxuICAgICAgICBjcmVhdGVGcm9tKFNhdmVDYXJ0RmFpbEV2ZW50LCB7XG4gICAgICAgICAgLi4uYWN0aW9uLnBheWxvYWQsXG4gICAgICAgICAgY2FydENvZGU6IGFjdGlvbi5wYXlsb2FkLmNhcnRJZCxcbiAgICAgICAgfSksXG4gICAgfSk7XG5cbiAgICB0aGlzLnN0YXRlRXZlbnRTZXJ2aWNlLnJlZ2lzdGVyKHtcbiAgICAgIGFjdGlvbjogU2F2ZWRDYXJ0QWN0aW9ucy5TQVZFX0NBUlQsXG4gICAgICBldmVudDogU2F2ZUNhcnRFdmVudCxcbiAgICAgIGZhY3Rvcnk6IChhY3Rpb246IFNhdmVkQ2FydEFjdGlvbnMuU2F2ZUNhcnQpID0+IHtcbiAgICAgICAgcmV0dXJuIGNyZWF0ZUZyb20oU2F2ZUNhcnRFdmVudCwge1xuICAgICAgICAgIC4uLmFjdGlvbi5wYXlsb2FkLFxuICAgICAgICAgIGNhcnRDb2RlOiBhY3Rpb24ucGF5bG9hZC5jYXJ0SWQsXG4gICAgICAgIH0pO1xuICAgICAgfSxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWdpc3RlcnMgZWRpdCBzYXZlZCBjYXJ0IGV2ZW50c1xuICAgKi9cbiAgcHJvdGVjdGVkIHJlZ2lzdGVyRWRpdFNhdmVkQ2FydEV2ZW50cygpOiB2b2lkIHtcbiAgICB0aGlzLmJ1aWxkU2F2ZUNhcnRTdWNjZXNzRXZlbnQoe1xuICAgICAgYWN0aW9uOiBTYXZlZENhcnRBY3Rpb25zLkVESVRfU0FWRURfQ0FSVF9TVUNDRVNTLFxuICAgICAgZXZlbnQ6IEVkaXRTYXZlZENhcnRTdWNjZXNzRXZlbnQsXG4gICAgfSk7XG5cbiAgICB0aGlzLnN0YXRlRXZlbnRTZXJ2aWNlLnJlZ2lzdGVyKHtcbiAgICAgIGFjdGlvbjogU2F2ZWRDYXJ0QWN0aW9ucy5FRElUX1NBVkVEX0NBUlRfRkFJTCxcbiAgICAgIGV2ZW50OiBFZGl0U2F2ZWRDYXJ0RmFpbEV2ZW50LFxuICAgICAgZmFjdG9yeTogKGFjdGlvbjogU2F2ZWRDYXJ0QWN0aW9ucy5FZGl0U2F2ZWRDYXJ0RmFpbCkgPT5cbiAgICAgICAgY3JlYXRlRnJvbShFZGl0U2F2ZWRDYXJ0RmFpbEV2ZW50LCB7XG4gICAgICAgICAgLi4uYWN0aW9uLnBheWxvYWQsXG4gICAgICAgICAgY2FydENvZGU6IGFjdGlvbi5wYXlsb2FkLmNhcnRJZCxcbiAgICAgICAgfSksXG4gICAgfSk7XG5cbiAgICB0aGlzLnN0YXRlRXZlbnRTZXJ2aWNlLnJlZ2lzdGVyKHtcbiAgICAgIGFjdGlvbjogU2F2ZWRDYXJ0QWN0aW9ucy5FRElUX1NBVkVEX0NBUlQsXG4gICAgICBldmVudDogRWRpdFNhdmVkQ2FydEV2ZW50LFxuICAgICAgZmFjdG9yeTogKGFjdGlvbjogU2F2ZWRDYXJ0QWN0aW9ucy5FZGl0U2F2ZWRDYXJ0KSA9PiB7XG4gICAgICAgIHJldHVybiBjcmVhdGVGcm9tKEVkaXRTYXZlZENhcnRFdmVudCwge1xuICAgICAgICAgIC4uLmFjdGlvbi5wYXlsb2FkLFxuICAgICAgICAgIGNhcnRDb2RlOiBhY3Rpb24ucGF5bG9hZC5jYXJ0SWQsXG4gICAgICAgIH0pO1xuICAgICAgfSxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWdpc3RlcnMgY2xvbmUgc2F2ZWQgY2FydCBldmVudHNcbiAgICovXG4gIHByb3RlY3RlZCByZWdpc3RlckNsb25lU2F2ZWRDYXJ0RXZlbnRzKCk6IHZvaWQge1xuICAgIHRoaXMuYnVpbGRSZXN0b3JlU2F2ZWRDYXJ0RXZlbnRzKHtcbiAgICAgIGFjdGlvbjogU2F2ZWRDYXJ0QWN0aW9ucy5DTE9ORV9TQVZFRF9DQVJULFxuICAgICAgZXZlbnQ6IENsb25lU2F2ZWRDYXJ0RXZlbnQsXG4gICAgfSk7XG5cbiAgICB0aGlzLmJ1aWxkUmVzdG9yZVNhdmVkQ2FydEV2ZW50cyh7XG4gICAgICBhY3Rpb246IFNhdmVkQ2FydEFjdGlvbnMuQ0xPTkVfU0FWRURfQ0FSVF9TVUNDRVNTLFxuICAgICAgZXZlbnQ6IENsb25lU2F2ZWRDYXJ0U3VjY2Vzc0V2ZW50LFxuICAgIH0pO1xuXG4gICAgdGhpcy5idWlsZFJlc3RvcmVTYXZlZENhcnRFdmVudHMoe1xuICAgICAgYWN0aW9uOiBTYXZlZENhcnRBY3Rpb25zLkNMT05FX1NBVkVEX0NBUlRfRkFJTCxcbiAgICAgIGV2ZW50OiBDbG9uZVNhdmVkQ2FydEZhaWxFdmVudCxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBCdWlsZHMgdGhlIHJlc3RvcmUgc2F2ZSBjYXJ0IGV2ZW50cyBmcm9tIHRoZSBhY3Rpb24gYW5kIGNhcnRcbiAgICpcbiAgICogQHBhcmFtIG1hcHBpbmcgbWFwcGluZyBkZWNsYXJhdGlvbiBmcm9tIGBhY3Rpb25gIHN0cmluZyB0eXBlIHRvIGBldmVudGAgY2xhc3MgdHlwZVxuICAgKiBAcGFyYW0gc2F2ZVRpbWUgc2hvdWxkIHRoZSBzYXZlVGltZSBhdHRyaWJ1dGUgYmUgYWRkZWQgdG8gdGhlIGV2ZW50XG4gICAqIEByZXR1cm5zXG4gICAqL1xuICBwcm90ZWN0ZWQgYnVpbGRSZXN0b3JlU2F2ZWRDYXJ0RXZlbnRzPFQ+KFxuICAgIG1hcHBpbmc6IEFjdGlvblRvRXZlbnRNYXBwaW5nPFQ+XG4gICk6ICgpID0+IHZvaWQge1xuICAgIGNvbnN0IGV2ZW50U3RyZWFtJCA9IHRoaXMuZ2V0QWN0aW9uKG1hcHBpbmcuYWN0aW9uKS5waXBlKFxuICAgICAgc3dpdGNoTWFwKChhY3Rpb24pID0+XG4gICAgICAgIG9mKGFjdGlvbikucGlwZShcbiAgICAgICAgICB3aXRoTGF0ZXN0RnJvbSh0aGlzLm11bHRpQ2FydFNlcnZpY2UuZ2V0Q2FydChhY3Rpb24ucGF5bG9hZC5jYXJ0SWQpKVxuICAgICAgICApXG4gICAgICApLFxuICAgICAgbWFwKChbYWN0aW9uLCBjYXJ0XSkgPT5cbiAgICAgICAgY3JlYXRlRnJvbShtYXBwaW5nLmV2ZW50IGFzIFR5cGU8VD4sIHtcbiAgICAgICAgICAuLi5hY3Rpb24ucGF5bG9hZCxcbiAgICAgICAgICBjYXJ0Q29kZTogY2FydC5jb2RlLFxuICAgICAgICAgIHNhdmVDYXJ0TmFtZTogY2FydC5uYW1lLFxuICAgICAgICAgIHNhdmVDYXJ0RGVzY3JpcHRpb246IGNhcnQuZGVzY3JpcHRpb24sXG4gICAgICAgICAgLi4uKGNhcnQuc2F2ZVRpbWUgJiYgeyBzYXZlVGltZTogY2FydC5zYXZlVGltZSB9KSxcbiAgICAgICAgfSlcbiAgICAgIClcbiAgICApO1xuICAgIHJldHVybiB0aGlzLmV2ZW50U2VydmljZS5yZWdpc3RlcihtYXBwaW5nLmV2ZW50IGFzIFR5cGU8VD4sIGV2ZW50U3RyZWFtJCk7XG4gIH1cblxuICAvKipcbiAgICogQnVpbGRzIHNhdmUgY2FydCBldmVudCBieSBhZGRpbmcgdGhlIHNhdmVUaW1lIGZyb20gdGhlIGNhcnRcbiAgICpcbiAgICogQHBhcmFtIG1hcHBpbmcgbWFwcGluZyBkZWNsYXJhdGlvbiBmcm9tIGBhY3Rpb25gIHN0cmluZyB0eXBlIHRvIGBldmVudGAgY2xhc3MgdHlwZVxuICAgKiBAcmV0dXJucyBldmVudHMgcmVnaXN0ZXIgZnVuY3Rpb25cbiAgICovXG4gIHByb3RlY3RlZCBidWlsZFNhdmVDYXJ0U3VjY2Vzc0V2ZW50PFQ+KFxuICAgIG1hcHBpbmc6IEFjdGlvblRvRXZlbnRNYXBwaW5nPFQ+XG4gICk6ICgpID0+IHZvaWQge1xuICAgIGNvbnN0IGV2ZW50U3RyZWFtJCA9IHRoaXMuZ2V0QWN0aW9uKG1hcHBpbmcuYWN0aW9uKS5waXBlKFxuICAgICAgc3dpdGNoTWFwKChhY3Rpb24pID0+XG4gICAgICAgIG9mKGFjdGlvbikucGlwZShcbiAgICAgICAgICB3aXRoTGF0ZXN0RnJvbSh0aGlzLm11bHRpQ2FydFNlcnZpY2UuZ2V0Q2FydChhY3Rpb24ucGF5bG9hZC5jYXJ0SWQpKVxuICAgICAgICApXG4gICAgICApLFxuICAgICAgZmlsdGVyKChbLCBjYXJ0XSkgPT4gQm9vbGVhbihjYXJ0KSksXG4gICAgICBtYXAoKFthY3Rpb24sIGNhcnRdKSA9PlxuICAgICAgICBjcmVhdGVGcm9tKG1hcHBpbmcuZXZlbnQgYXMgVHlwZTxUPiwge1xuICAgICAgICAgIC4uLmFjdGlvbi5wYXlsb2FkLFxuICAgICAgICAgIGNhcnRDb2RlOiBjYXJ0LmNvZGUsXG4gICAgICAgICAgc2F2ZVRpbWU6IGNhcnQuc2F2ZVRpbWUsXG4gICAgICAgIH0pXG4gICAgICApXG4gICAgKTtcbiAgICByZXR1cm4gdGhpcy5ldmVudFNlcnZpY2UucmVnaXN0ZXIobWFwcGluZy5ldmVudCBhcyBUeXBlPFQ+LCBldmVudFN0cmVhbSQpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgYSBzdHJlYW0gb2YgYWN0aW9ucyBvbmx5IG9mIGEgZ2l2ZW4gdHlwZShzKVxuICAgKlxuICAgKiBAcGFyYW0gYWN0aW9uVHlwZSB0eXBlKHMpIG9mIGFjdGlvbnNcbiAgICovXG4gIHByb3RlY3RlZCBnZXRBY3Rpb24oXG4gICAgYWN0aW9uVHlwZTogc3RyaW5nIHwgc3RyaW5nW11cbiAgKTogT2JzZXJ2YWJsZTx7IHR5cGU6IHN0cmluZzsgcGF5bG9hZD86IGFueSB9PiB7XG4gICAgcmV0dXJuIHRoaXMuYWN0aW9uc1N1YmplY3QucGlwZShcbiAgICAgIG9mVHlwZSguLi4oW10gYXMgc3RyaW5nW10pLmNvbmNhdChhY3Rpb25UeXBlKSlcbiAgICApO1xuICB9XG59XG4iXX0=