UNPKG

ng-zorro-antd-mobile

Version:

An enterprise-class mobile UI components based on Ant Design and Angular

303 lines (302 loc) 27.2 kB
/** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,uselessCode} checked by tsc */ import { Injectable, ApplicationRef, Compiler, ComponentFactoryResolver } from '@angular/core'; import { ModalComponent } from './modal.component'; import { BaseOptions, ModalOptions, AlertOptions } from './modal-options.provider'; export class Modal { /** * @param {?} _appRef * @param {?} _compiler * @param {?} _cfr */ constructor(_appRef, _compiler, _cfr) { this._appRef = _appRef; this._compiler = _compiler; this._cfr = _cfr; Modal.appRef = this._appRef; Modal._modalCompFactory = this._cfr.resolveComponentFactory(ModalComponent); } /** * @param {?} config * @param {?} options * @return {?} */ static _initConfig(config, options) { /** @type {?} */ const props = new BaseOptions(); /** @type {?} */ const optionalParams = [ 'visible', 'focus', 'closable', 'maskClosable', 'onClose', 'transparent', 'popup', 'animationType', 'title', 'footer', 'platform', 'className', 'wrapClassName', 'message', 'actions', 'callbackOrActions', 'type', 'defaultValue', 'placeholders', 'operation', 'transitionName', 'maskTransitionName', 'close' ]; options.transitionName = `${options.transitionName}-enter ${options.transitionName}-enter-active`; options.maskTransitionName = `${options.maskTransitionName}-enter ${options.maskTransitionName}-enter-active`; config = Object.assign(options, config, { close: () => { if (config.maskClosable || config.closable) { Modal.closeWithAnimation(); } } }); optionalParams.forEach(key => { if (config[key] !== undefined) { props[key] = config[key]; } }); return props; } /** * @param {?} props * @param {?} factory * @return {?} */ static _open(props, factory) { document.body.insertBefore(document.createElement(factory.selector), document.body.firstChild); /** @type {?} */ let subject; Modal.compRef = Modal.appRef.bootstrap(factory); Modal.instance = Modal.compRef.instance; subject = Modal.instance.subject; Object.assign(Modal.instance, props); return subject; } /** * @return {?} */ static closeWithAnimation() { /** @type {?} */ const options = new BaseOptions(); Modal.instance.transitionName = `${options.transitionName}-leave ${options.transitionName}-leave-active`; Modal.instance.maskTransitionName = `${options.maskTransitionName}-leave ${options.maskTransitionName}-leave-active`; setTimeout(() => { Modal.close(); }, 200); } /** * @param {?} config * @return {?} */ static open(config) { /** @type {?} */ const options = new ModalOptions(); /** @type {?} */ const props = Modal._initConfig(config, options); return Modal._open(props, Modal._modalCompFactory); } /** * @param {?=} title * @param {?=} message * @param {?=} actions * @param {?=} platform * @return {?} */ static alert(title, message, actions, platform) { /** @type {?} */ const options = new AlertOptions(); options.visible = true; options.transparent = true; options.closable = false; options.maskClosable = false; options.platform = 'ios'; /** @type {?} */ const footer = getFooter(actions); /** @type {?} */ const config = Object.assign({ title: title, message: message, actions: footer ? footer : [{ text: '确定' }], platform: platform ? platform : 'ios' }); /** @type {?} */ const props = Modal._initConfig(config, options); return Modal._open(props, this._modalCompFactory); } /** * @param {?=} title * @param {?=} message * @param {?=} callbackOrActions * @param {?=} type * @param {?=} defaultValue * @param {?=} placeholders * @param {?=} platform * @return {?} */ static prompt(title, message, callbackOrActions, type, defaultValue, placeholders, platform) { /** @type {?} */ const options = new AlertOptions(); options.visible = true; options.transparent = true; options.closable = false; options.maskClosable = false; options.className = 'am-modal-alert-content'; options.defaultValue = defaultValue; options.placeholders = placeholders; (options.type = type ? type : 'default'), (options.platform = platform ? platform : 'ios'); /** * @param {?} self * @param {?} func * @return {?} */ function getArgs(self, func) { /** @type {?} */ const text = self.instance.data.text || defaultValue || ''; /** @type {?} */ const password = self.instance.data.password || ''; if (type === 'login-password') { return func(text, password); } else if (type === 'secure-text') { return func(password || defaultValue); } return func(text); } /** @type {?} */ let actions; if (typeof callbackOrActions === 'function') { actions = [ { text: '取消' }, { text: '确定', onPress: () => { getArgs(this, callbackOrActions); } } ]; } else { actions = callbackOrActions.map(item => { return { text: item.text, onPress: () => { if (item.onPress) { return getArgs(this, item.onPress); } } }; }); } /** @type {?} */ const footer = getFooter(actions); /** @type {?} */ const config = Object.assign({ title: title, message: message, type: type ? type : 'default', actions: footer ? footer : [{ text: '确定' }], platform: platform ? platform : 'ios' }); /** @type {?} */ const props = Modal._initConfig(config, options); return Modal._open(props, this._modalCompFactory); } /** * @param {?=} actions * @param {?=} platform * @return {?} */ static operation(actions, platform) { /** @type {?} */ const options = new BaseOptions(); options.visible = true; options.transparent = true; options.closable = false; options.maskClosable = false; options.operation = true; options.className = 'am-modal-operation'; /** @type {?} */ const footer = getFooter(actions); /** @type {?} */ const config = Object.assign({ actions: footer ? footer : [{ text: '确定' }], platform: platform ? platform : 'ios' }); /** @type {?} */ const props = Modal._initConfig(config, options); return Modal._open(props, this._modalCompFactory); } /** * @return {?} */ static close() { if (Modal.compRef) { Modal.compRef.destroy(); Modal.compRef = null; } } } Modal.compRef = null; Modal._modalCompFactory = null; Modal.appRef = null; Modal.instance = null; Modal.decorators = [ { type: Injectable } ]; /** @nocollapse */ Modal.ctorParameters = () => [ { type: ApplicationRef }, { type: Compiler }, { type: ComponentFactoryResolver } ]; if (false) { /** @type {?} */ Modal.compRef; /** @type {?} */ Modal._modalCompFactory; /** @type {?} */ Modal.appRef; /** @type {?} */ Modal.instance; /** @type {?} */ Modal.prototype._appRef; /** @type {?} */ Modal.prototype._compiler; /** @type {?} */ Modal.prototype._cfr; } /** * @param {?} actions * @return {?} */ function getFooter(actions) { return actions.map((button) => { /** @type {?} */ const orginPress = button.onPress || function () { }; button.onPress = () => { /** @type {?} */ const res = orginPress(); if (res && res.then) { res.then(() => { Modal.closeWithAnimation(); }); } else { Modal.closeWithAnimation(); } }; return button; }); } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kYWwuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiJuZzovL25nLXpvcnJvLWFudGQtbW9iaWxlLyIsInNvdXJjZXMiOlsibW9kYWwvbW9kYWwuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBQUEsT0FBTyxFQUNMLFVBQVUsRUFHVixjQUFjLEVBQ2QsUUFBUSxFQUVSLHdCQUF3QixFQUN6QixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDbkQsT0FBTyxFQUFFLFdBQVcsRUFBRSxZQUFZLEVBQUUsWUFBWSxFQUFVLE1BQU0sMEJBQTBCLENBQUM7QUFHM0YsTUFBTTs7Ozs7O0lBS0osWUFBb0IsT0FBdUIsRUFBVSxTQUFtQixFQUFVLElBQThCO1FBQTVGLFlBQU8sR0FBUCxPQUFPLENBQWdCO1FBQVUsY0FBUyxHQUFULFNBQVMsQ0FBVTtRQUFVLFNBQUksR0FBSixJQUFJLENBQTBCO1FBQzlHLEtBQUssQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQztRQUM1QixLQUFLLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxjQUFjLENBQUMsQ0FBQztLQUM3RTs7Ozs7O0lBRUQsTUFBTSxDQUFDLFdBQVcsQ0FBQyxNQUFtQixFQUFFLE9BQVk7O1FBQ2xELE1BQU0sS0FBSyxHQUFnQixJQUFJLFdBQVcsRUFBRSxDQUFDOztRQUM3QyxNQUFNLGNBQWMsR0FBYTtZQUMvQixTQUFTO1lBQ1QsT0FBTztZQUNQLFVBQVU7WUFDVixjQUFjO1lBQ2QsU0FBUztZQUNULGFBQWE7WUFDYixPQUFPO1lBQ1AsZUFBZTtZQUNmLE9BQU87WUFDUCxRQUFRO1lBQ1IsVUFBVTtZQUNWLFdBQVc7WUFDWCxlQUFlO1lBQ2YsU0FBUztZQUNULFNBQVM7WUFDVCxtQkFBbUI7WUFDbkIsTUFBTTtZQUNOLGNBQWM7WUFDZCxjQUFjO1lBQ2QsV0FBVztZ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cEIsTUFBTSxHQUFHLEdBQUcsVUFBVSxFQUFFLENBQUM7WUFDekIsSUFBSSxHQUFHLElBQUksR0FBRyxDQUFDLElBQUksRUFBRTtnQkFDbkIsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUU7b0JBQ1osS0FBSyxDQUFDLGtCQUFrQixFQUFFLENBQUM7aUJBQzVCLENBQUMsQ0FBQzthQUNKO2lCQUFNO2dCQUNMLEtBQUssQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO2FBQzVCO1NBQ0YsQ0FBQztRQUNGLE9BQU8sTUFBTSxDQUFDO0tBQ2YsQ0FBQyxDQUFDO0NBQ0oiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBJbmplY3RhYmxlLFxuICBDb21wb25lbnRSZWYsXG4gIENvbXBvbmVudEZhY3RvcnksXG4gIEFwcGxpY2F0aW9uUmVmLFxuICBDb21waWxlcixcbiAgVGVtcGxhdGVSZWYsXG4gIENvbXBvbmVudEZhY3RvcnlSZXNvbHZlclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE1vZGFsQ29tcG9uZW50IH0gZnJvbSAnLi9tb2RhbC5jb21wb25lbnQnO1xuaW1wb3J0IHsgQmFzZU9wdGlvbnMsIE1vZGFsT3B0aW9ucywgQWxlcnRPcHRpb25zLCBBY3Rpb24gfSBmcm9tICcuL21vZGFsLW9wdGlvbnMucHJvdmlkZXInO1xuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgTW9kYWwge1xuICBzdGF0aWMgY29tcFJlZjogQ29tcG9uZW50UmVmPGFueT4gPSBudWxsO1xuICBzdGF0aWMgX21vZGFsQ29tcEZhY3Rvcnk6IENvbXBvbmVudEZhY3Rvcnk8TW9kYWxDb21wb25lbnQ+ID0gbnVsbDtcbiAgc3RhdGljIGFwcFJlZjogQXBwbGljYXRpb25SZWYgPSBudWxsO1xuICBzdGF0aWMgaW5zdGFuY2UgPSBudWxsO1xuICBjb25zdHJ1Y3Rvcihwcml2YXRlIF9hcHBSZWY6IEFwcGxpY2F0aW9uUmVmLCBwcml2YXRlIF9jb21waWxlcjogQ29tcGlsZXIsIHByaXZhdGUgX2NmcjogQ29tcG9uZW50RmFjdG9yeVJlc29sdmVyKSB7XG4gICAgTW9kYWwuYXBwUmVmID0gdGhpcy5fYXBwUmVmO1xuICAgIE1vZGFsLl9tb2RhbENvbXBGYWN0b3J5ID0gdGhpcy5fY2ZyLnJlc29sdmVDb21wb25lbnRGYWN0b3J5KE1vZGFsQ29tcG9uZW50KTtcbiAgfVxuXG4gIHN0YXRpYyBfaW5pdENvbmZpZyhjb25maWc6IEJhc2VPcHRpb25zLCBvcHRpb25zOiBhbnkpOiBCYXNlT3B0aW9ucyB7XG4gICAgY29uc3QgcHJvcHM6IEJhc2VPcHRpb25zID0gbmV3IEJhc2VPcHRpb25zKCk7XG4gICAgY29uc3Qgb3B0aW9uYWxQYXJhbXM6IHN0cmluZ1tdID0gW1xuICAgICAgJ3Zpc2libGUnLFxuICAgICAgJ2ZvY3VzJyxcbiAgICAgICdjbG9zYWJsZScsXG4gICAgICAnbWFza0Nsb3NhYmxlJyxcbiAgICAgICdvbkNsb3NlJyxcbiAgICAgICd0cmFuc3BhcmVudCcsXG4gICAgICAncG9wdXAnLFxuICAgICAgJ2FuaW1hdGlvblR5cGUnLFxuICAgICAgJ3RpdGxlJyxcbiAgICAgICdmb290ZXInLFxuICAgICAgJ3BsYXRmb3JtJyxcbiAgICAgICdjbGFzc05hbWUnLFxuICAgICAgJ3dyYXBDbGFzc05hbWUnLFxuICAgICAgJ21lc3NhZ2UnLFxuICAgICAgJ2FjdGlvbnMnLFxuICAgICAgJ2NhbGxiYWNrT3JBY3Rpb25zJyxcbiAgICAgICd0eXBlJyxcbiAgICAgICdkZWZhdWx0VmFsdWUnLFxuICAgICAgJ3BsYWNlaG9sZGVycycsXG4gICAgICAnb3BlcmF0aW9uJyxcbiAgICAgICd0cmFuc2l0aW9uTmFtZScsXG4gICAgICAnbWFza1RyYW5zaXRpb25OYW1lJyxcbiAgICAgICdjbG9zZSdcbiAgICBdO1xuICAgIG9wdGlvbnMudHJhbnNpdGlvbk5hbWUgPSBgJHtvcHRpb25zLnRyYW5zaXRpb25OYW1lfS1lbnRlciAke29wdGlvbnMudHJhbnNpdGlvbk5hbWV9LWVudGVyLWFjdGl2ZWA7XG4gICAgb3B0aW9ucy5tYXNrVHJhbnNpdGlvbk5hbWUgPSBgJHtvcHRpb25zLm1hc2tUcmFuc2l0aW9uTmFtZX0tZW50ZXIgJHtvcHRpb25zLm1hc2tUcmFuc2l0aW9uTmFtZX0tZW50ZXItYWN0aXZlYDtcbiAgICBjb25maWcgPSBPYmplY3QuYXNzaWduKG9wdGlvbnMsIGNvbmZpZywge1xuICAgICAgY2xvc2U6ICgpOiB2b2lkID0+IHtcbiAgICAgICAgaWYgKGNvbmZpZy5tYXNrQ2xvc2FibGUgfHwgY29uZmlnLmNsb3NhYmxlKSB7XG4gICAgICAgICAgTW9kYWwuY2xvc2VXaXRoQW5pbWF0aW9uKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgICBvcHRpb25hbFBhcmFtcy5mb3JFYWNoKGtleSA9PiB7XG4gICAgICBpZiAoY29uZmlnW2tleV0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBwcm9wc1trZXldID0gY29uZmlnW2tleV07XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIHByb3BzO1xuICB9XG5cbiAgc3RhdGljIF9vcGVuKHByb3BzOiBCYXNlT3B0aW9ucywgZmFjdG9yeTogQ29tcG9uZW50RmFjdG9yeTxhbnk+KTogYW55IHtcbiAgICBkb2N1bWVudC5ib2R5Lmluc2VydEJlZm9yZShkb2N1bWVudC5jcmVhdGVFbGVtZW50KGZhY3Rvcnkuc2VsZWN0b3IpLCBkb2N1bWVudC5ib2R5LmZpcnN0Q2hpbGQpO1xuICAgIGxldCBzdWJqZWN0OiBhbnk7XG4gICAgTW9kYWwuY29tcFJlZiA9IE1vZGFsLmFwcFJlZi5ib290c3RyYXAoZmFjdG9yeSk7XG4gICAgTW9kYWwuaW5zdGFuY2UgPSBNb2RhbC5jb21wUmVmLmluc3RhbmNlO1xuICAgIHN1YmplY3QgPSBNb2RhbC5pbnN0YW5jZS5zdWJqZWN0O1xuICAgIE9iamVjdC5hc3NpZ24oTW9kYWwuaW5zdGFuY2UsIHByb3BzKTtcbiAgICByZXR1cm4gc3ViamVjdDtcbiAgfVxuXG4gIHN0YXRpYyBjbG9zZVdpdGhBbmltYXRpb24oKSB7XG4gICAgY29uc3Qgb3B0aW9uczogQmFzZU9wdGlvbnMgPSBuZXcgQmFzZU9wdGlvbnMoKTtcbiAgICBNb2RhbC5pbnN0YW5jZS50cmFuc2l0aW9uTmFtZSA9IGAke29wdGlvbnMudHJhbnNpdGlvbk5hbWV9LWxlYXZlICR7b3B0aW9ucy50cmFuc2l0aW9uTmFtZX0tbGVhdmUtYWN0aXZlYDtcbiAgICBNb2RhbC5pbnN0YW5jZS5tYXNrVHJhbnNpdGlvbk5hbWUgPSBgJHtvcHRpb25zLm1hc2tUcmFuc2l0aW9uTmFtZX0tbGVhdmUgJHtcbiAgICAgIG9wdGlvbnMubWFza1RyYW5zaXRpb25OYW1lXG4gICAgfS1sZWF2ZS1hY3RpdmVgO1xuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgTW9kYWwuY2xvc2UoKTtcbiAgICB9LCAyMDApO1xuICB9XG5cbiAgc3RhdGljIG9wZW4oY29uZmlnOiBCYXNlT3B0aW9ucyk6IGFueSB7XG4gICAgY29uc3Qgb3B0aW9uczogTW9kYWxPcHRpb25zID0gbmV3IE1vZGFsT3B0aW9ucygpO1xuICAgIGNvbnN0IHByb3BzID0gTW9kYWwuX2luaXRDb25maWcoY29uZmlnLCBvcHRpb25zKTtcbiAgICByZXR1cm4gTW9kYWwuX29wZW4ocHJvcHMsIE1vZGFsLl9tb2RhbENvbXBGYWN0b3J5KTtcbiAgfVxuXG4gIHN0YXRpYyBhbGVydChcbiAgICB0aXRsZT86IHN0cmluZyB8IFRlbXBsYXRlUmVmPGFueT4sXG4gICAgbWVzc2FnZT86IHN0cmluZyB8IFRlbXBsYXRlUmVmPGFueT4sXG4gICAgYWN0aW9ucz86IEFycmF5PGFueT4sXG4gICAgcGxhdGZvcm0/OiBzdHJpbmdcbiAgKTogYW55IHtcbiAgICBjb25zdCBvcHRpb25zOiBBbGVydE9wdGlvbnMgPSBuZXcgQWxlcnRPcHRpb25zKCk7XG4gICAgb3B0aW9ucy52aXNpYmxlID0gdHJ1ZTtcbiAgICBvcHRpb25zLnRyYW5zcGFyZW50ID0gdHJ1ZTtcbiAgICBvcHRpb25zLmNsb3NhYmxlID0gZmFsc2U7XG4gICAgb3B0aW9ucy5tYXNrQ2xvc2FibGUgPSBmYWxzZTtcbiAgICBvcHRpb25zLnBsYXRmb3JtID0gJ2lvcyc7XG5cbiAgICBjb25zdCBmb290ZXIgPSBnZXRGb290ZXIoYWN0aW9ucyk7XG5cbiAgICBjb25zdCBjb25maWcgPSBPYmplY3QuYXNzaWduKHtcbiAgICAgIHRpdGxlOiB0aXRsZSxcbiAgICAgIG1lc3NhZ2U6IG1lc3NhZ2UsXG4gICAgICBhY3Rpb25zOiBmb290ZXIgPyBmb290ZXIgOiBbeyB0ZXh0OiAn56Gu5a6aJyB9XSxcbiAgICAgIHBsYXRmb3JtOiBwbGF0Zm9ybSA/IHBsYXRmb3JtIDogJ2lvcydcbiAgICB9KTtcblxuICAgIGNvbnN0IHByb3BzID0gTW9kYWwuX2luaXRDb25maWcoY29uZmlnLCBvcHRpb25zKTtcbiAgICByZXR1cm4gTW9kYWwuX29wZW4ocHJvcHMsIHRoaXMuX21vZGFsQ29tcEZhY3RvcnkpO1xuICB9XG5cbiAgc3RhdGljIHByb21wdChcbiAgICB0aXRsZT86IHN0cmluZyB8IFRlbXBsYXRlUmVmPGFueT4sXG4gICAgbWVzc2FnZT86IHN0cmluZyB8IFRlbXBsYXRlUmVmPGFueT4sXG4gICAgY2FsbGJhY2tPckFjdGlvbnM/OiBhbnksXG4gICAgdHlwZT86IHN0cmluZyxcbiAgICBkZWZhdWx0VmFsdWU/OiBzdHJpbmcsXG4gICAgcGxhY2Vob2xkZXJzPzogQXJyYXk8YW55PixcbiAgICBwbGF0Zm9ybT86IHN0cmluZ1xuICApOiBhbnkge1xuICAgIGNvbnN0IG9wdGlvbnM6IEFsZXJ0T3B0aW9ucyA9IG5ldyBBbGVydE9wdGlvbnMoKTtcbiAgICBvcHRpb25zLnZpc2libGUgPSB0cnVlO1xuICAgIG9wdGlvbnMudHJhbnNwYXJlbnQgPSB0cnVlO1xuICAgIG9wdGlvbnMuY2xvc2FibGUgPSBmYWxzZTtcbiAgICBvcHRpb25zLm1hc2tDbG9zYWJsZSA9IGZhbHNlO1xuICAgIG9wdGlvbnMuY2xhc3NOYW1lID0gJ2FtLW1vZGFsLWFsZXJ0LWNvbnRlbnQnO1xuICAgIG9wdGlvbnMuZGVmYXVsdFZhbHVlID0gZGVmYXVsdFZhbHVlO1xuICAgIG9wdGlvbnMucGxhY2Vob2xkZXJzID0gcGxhY2Vob2xkZXJzO1xuICAgIChvcHRpb25zLnR5cGUgPSB0eXBlID8gdHlwZSA6ICdkZWZhdWx0JyksIChvcHRpb25zLnBsYXRmb3JtID0gcGxhdGZvcm0gPyBwbGF0Zm9ybSA6ICdpb3MnKTtcblxuICAgIGZ1bmN0aW9uIGdldEFyZ3Moc2VsZiwgZnVuYykge1xuICAgICAgY29uc3QgdGV4dCA9IHNlbGYuaW5zdGFuY2UuZGF0YS50ZXh0IHx8IGRlZmF1bHRWYWx1ZSB8fCAnJztcbiAgICAgIGNvbnN0IHBhc3N3b3JkID0gc2VsZi5pbnN0YW5jZS5kYXRhLnBhc3N3b3JkIHx8ICcnO1xuICAgICAgaWYgKHR5cGUgPT09ICdsb2dpbi1wYXNzd29yZCcpIHtcbiAgICAgICAgcmV0dXJuIGZ1bmModGV4dCwgcGFzc3dvcmQpO1xuICAgICAgfSBlbHNlIGlmICh0eXBlID09PSAnc2VjdXJlLXRleHQnKSB7XG4gICAgICAgIHJldHVybiBmdW5jKHBhc3N3b3JkIHx8IGRlZmF1bHRWYWx1ZSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gZnVuYyh0ZXh0KTtcbiAgICB9XG5cbiAgICBsZXQgYWN0aW9ucztcbiAgICBpZiAodHlwZW9mIGNhbGxiYWNrT3JBY3Rpb25zID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBhY3Rpb25zID0gW1xuICAgICAgICB7IHRleHQ6ICflj5bmtognIH0sXG4gICAgICAgIHtcbiAgICAgICAgICB0ZXh0OiAn56Gu5a6aJyxcbiAgICAgICAgICBvblByZXNzOiAoKSA9PiB7XG4gICAgICAgICAgICBnZXRBcmdzKHRoaXMsIGNhbGxiYWNrT3JBY3Rpb25zKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIF07XG4gICAgfSBlbHNlIHtcbiAgICAgIGFjdGlvbnMgPSBjYWxsYmFja09yQWN0aW9ucy5tYXAoaXRlbSA9PiB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgdGV4dDogaXRlbS50ZXh0LFxuICAgICAgICAgIG9uUHJlc3M6ICgpID0+IHtcbiAgICAgICAgICAgIGlmIChpdGVtLm9uUHJlc3MpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGdldEFyZ3ModGhpcywgaXRlbS5vblByZXNzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBjb25zdCBmb290ZXIgPSBnZXRGb290ZXIoYWN0aW9ucyk7XG4gICAgY29uc3QgY29uZmlnID0gT2JqZWN0LmFzc2lnbih7XG4gICAgICB0aXRsZTogdGl0bGUsXG4gICAgICBtZXNzYWdlOiBtZXNzYWdlLFxuICAgICAgdHlwZTogdHlwZSA/IHR5cGUgOiAnZGVmYXVsdCcsXG4gICAgICBhY3Rpb25zOiBmb290ZXIgPyBmb290ZXIgOiBbeyB0ZXh0OiAn56Gu5a6aJyB9XSxcbiAgICAgIHBsYXRmb3JtOiBwbGF0Zm9ybSA/IHBsYXRmb3JtIDogJ2lvcydcbiAgICB9KTtcbiAgICBjb25zdCBwcm9wcyA9IE1vZGFsLl9pbml0Q29uZmlnKGNvbmZpZywgb3B0aW9ucyk7XG4gICAgcmV0dXJuIE1vZGFsLl9vcGVuKHByb3BzLCB0aGlzLl9tb2RhbENvbXBGYWN0b3J5KTtcbiAgfVxuXG4gIHN0YXRpYyBvcGVyYXRpb24oYWN0aW9ucz86IGFueSwgcGxhdGZvcm0/OiBzdHJpbmcpOiBhbnkge1xuICAgIGNvbnN0IG9wdGlvbnM6IEJhc2VPcHRpb25zID0gbmV3IEJhc2VPcHRpb25zKCk7XG4gICAgb3B0aW9ucy52aXNpYmxlID0gdHJ1ZTtcbiAgICBvcHRpb25zLnRyYW5zcGFyZW50ID0gdHJ1ZTtcbiAgICBvcHRpb25zLmNsb3NhYmxlID0gZmFsc2U7XG4gICAgb3B0aW9ucy5tYXNrQ2xvc2FibGUgPSBmYWxzZTtcbiAgICBvcHRpb25zLm9wZXJhdGlvbiA9IHRydWU7XG4gICAgb3B0aW9ucy5jbGFzc05hbWUgPSAnYW0tbW9kYWwtb3BlcmF0aW9uJztcbiAgICBjb25zdCBmb290ZXIgPSBnZXRGb290ZXIoYWN0aW9ucyk7XG5cbiAgICBjb25zdCBjb25maWcgPSBPYmplY3QuYXNzaWduKHtcbiAgICAgIGFjdGlvbnM6IGZvb3RlciA/IGZvb3RlciA6IFt7IHRleHQ6ICfnoa7lrponIH1dLFxuICAgICAgcGxhdGZvcm06IHBsYXRmb3JtID8gcGxhdGZvcm0gOiAnaW9zJ1xuICAgIH0pO1xuICAgIGNvbnN0IHByb3BzID0gTW9kYWwuX2luaXRDb25maWcoY29uZmlnLCBvcHRpb25zKTtcbiAgICByZXR1cm4gTW9kYWwuX29wZW4ocHJvcHMsIHRoaXMuX21vZGFsQ29tcEZhY3RvcnkpO1xuICB9XG5cbiAgc3RhdGljIGNsb3NlKCkge1xuICAgIGlmIChNb2RhbC5jb21wUmVmKSB7XG4gICAgICBNb2RhbC5jb21wUmVmLmRlc3Ryb3koKTtcbiAgICAgIE1vZGFsLmNvbXBSZWYgPSBudWxsO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBnZXRGb290ZXIoYWN0aW9ucykge1xuICByZXR1cm4gYWN0aW9ucy5tYXAoKGJ1dHRvbjogQWN0aW9uKSA9PiB7XG4gICAgY29uc3Qgb3JnaW5QcmVzcyA9IGJ1dHRvbi5vblByZXNzIHx8IGZ1bmN0aW9uKCkge307XG4gICAgYnV0dG9uLm9uUHJlc3MgPSAoKSA9PiB7XG4gICAgICBjb25zdCByZXMgPSBvcmdpblByZXNzKCk7XG4gICAgICBpZiAocmVzICYmIHJlcy50aGVuKSB7XG4gICAgICAgIHJlcy50aGVuKCgpID0+IHtcbiAgICAgICAgICBNb2RhbC5jbG9zZVdpdGhBbmltYXRpb24oKTtcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBNb2RhbC5jbG9zZVdpdGhBbmltYXRpb24oKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIHJldHVybiBidXR0b247XG4gIH0pO1xufVxuIl19