@formio/angular 5.5.0-rc.9 → 6.0.0-rc.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/FormioBaseComponent.d.ts +2 -1
- package/FormioBaseComponent.d.ts.map +1 -1
- package/auth/auth.service.d.ts.map +1 -1
- package/components/alerts/formio.alerts.component.d.ts +1 -1
- package/components/formbuilder/formbuilder.component.d.ts +3 -3
- package/components/formbuilder/formbuilder.component.d.ts.map +1 -1
- package/components/loader/formio.loader.component.d.ts +1 -1
- package/core.d.ts +1 -1
- package/core.d.ts.map +1 -1
- package/custom-component/create-custom-component.d.ts +11 -11
- package/custom-component/create-custom-component.d.ts.map +1 -1
- package/elements.common.d.ts +2 -2
- package/elements.common.d.ts.map +1 -1
- package/esm2022/FormioBaseComponent.mjs +561 -0
- package/esm2022/auth/auth.component.mjs +13 -0
- package/esm2022/auth/auth.config.mjs +22 -0
- package/esm2022/auth/auth.module.mjs +47 -0
- package/esm2022/auth/auth.service.mjs +191 -0
- package/esm2022/auth/login/login.component.mjs +18 -0
- package/esm2022/auth/register/register.component.mjs +18 -0
- package/esm2022/auth/resetpass/resetpass.component.mjs +18 -0
- package/esm2022/components/alerts/formio.alerts.component.mjs +29 -0
- package/esm2022/components/alerts/formio.alerts.mjs +13 -0
- package/esm2022/components/alerts/parse-html-content.pipe.mjs +20 -0
- package/esm2022/components/formbuilder/formbuilder.component.mjs +202 -0
- package/esm2022/components/formio/formio.component.mjs +43 -0
- package/esm2022/components/loader/formio.loader.component.mjs +16 -0
- package/{esm2020 → esm2022}/core.mjs +2 -2
- package/esm2022/custom-component/create-custom-component.mjs +144 -0
- package/esm2022/custom-component/custom-tags.service.mjs +15 -0
- package/{esm2020 → esm2022}/custom-component/register-custom-component.mjs +2 -2
- package/esm2022/elements.common.mjs +2 -0
- package/esm2022/formio-promise.service.mjs +36 -0
- package/esm2022/formio.common.mjs +11 -0
- package/esm2022/formio.config.mjs +15 -0
- package/esm2022/formio.module.mjs +55 -0
- package/esm2022/formio.service.mjs +62 -0
- package/esm2022/grid/GridBodyComponent.mjs +90 -0
- package/esm2022/grid/GridFooterComponent.mjs +45 -0
- package/esm2022/grid/GridHeaderComponent.mjs +35 -0
- package/esm2022/grid/form/FormGridBody.component.mjs +20 -0
- package/esm2022/grid/form/FormGridFooter.component.mjs +27 -0
- package/esm2022/grid/form/FormGridHeader.component.mjs +28 -0
- package/esm2022/grid/form/time-since.pipe.mjs +38 -0
- package/esm2022/grid/grid.component.mjs +258 -0
- package/esm2022/grid/grid.module.mjs +80 -0
- package/esm2022/grid/grid.service.mjs +19 -0
- package/esm2022/grid/submission/SubmissionGridBody.component.mjs +44 -0
- package/esm2022/grid/submission/SubmissionGridFooter.component.mjs +24 -0
- package/esm2022/grid/submission/SubmissionGridHeader.component.mjs +64 -0
- package/esm2022/manager/create/create.component.mjs +19 -0
- package/esm2022/manager/delete/delete.component.mjs +43 -0
- package/esm2022/manager/edit/edit.component.mjs +123 -0
- package/esm2022/manager/form/form.component.mjs +81 -0
- package/esm2022/manager/form-manager.config.mjs +19 -0
- package/esm2022/manager/form-manager.module.mjs +84 -0
- package/esm2022/manager/form-manager.service.mjs +189 -0
- package/{esm2020 → esm2022}/manager/index/index.component.mjs +13 -6
- package/esm2022/manager/submission/delete/delete.component.mjs +33 -0
- package/esm2022/manager/submission/edit/edit.component.mjs +26 -0
- package/esm2022/manager/submission/index/index.component.mjs +26 -0
- package/esm2022/manager/submission/submission/submission.component.mjs +30 -0
- package/esm2022/manager/submission/view/view.component.mjs +18 -0
- package/esm2022/manager/view/view.component.mjs +52 -0
- package/esm2022/resource/create/create.component.mjs +44 -0
- package/esm2022/resource/delete/delete.component.mjs +30 -0
- package/esm2022/resource/edit/edit.component.mjs +43 -0
- package/esm2022/resource/index/index.component.mjs +71 -0
- package/esm2022/resource/resource.component.mjs +51 -0
- package/esm2022/resource/resource.config.mjs +14 -0
- package/esm2022/resource/resource.module.mjs +63 -0
- package/{esm2020 → esm2022}/resource/resource.service.mjs +29 -7
- package/esm2022/resource/resources.service.mjs +26 -0
- package/esm2022/resource/view/view.component.mjs +26 -0
- package/{fesm2020 → fesm2022}/formio-angular-auth.mjs +68 -36
- package/fesm2022/formio-angular-auth.mjs.map +1 -0
- package/{fesm2020 → fesm2022}/formio-angular-grid.mjs +123 -73
- package/fesm2022/formio-angular-grid.mjs.map +1 -0
- package/{fesm2020 → fesm2022}/formio-angular-manager.mjs +147 -80
- package/fesm2022/formio-angular-manager.mjs.map +1 -0
- package/{fesm2020 → fesm2022}/formio-angular-resource.mjs +109 -58
- package/fesm2022/formio-angular-resource.mjs.map +1 -0
- package/fesm2022/formio-angular.mjs +1222 -0
- package/fesm2022/formio-angular.mjs.map +1 -0
- package/formio.common.d.ts +5 -5
- package/formio.common.d.ts.map +1 -1
- package/grid/GridBodyComponent.d.ts +1 -1
- package/grid/GridFooterComponent.d.ts +1 -1
- package/grid/GridHeaderComponent.d.ts +1 -1
- package/grid/grid.component.d.ts +1 -1
- package/grid/submission/SubmissionGridHeader.component.d.ts +1 -1
- package/grid/submission/SubmissionGridHeader.component.d.ts.map +1 -1
- package/manager/form-manager.service.d.ts +1 -1
- package/manager/form-manager.service.d.ts.map +1 -1
- package/manager/view/view.component.d.ts +1 -0
- package/manager/view/view.component.d.ts.map +1 -1
- package/package.json +21 -35
- package/resource/edit/edit.component.d.ts +1 -0
- package/resource/edit/edit.component.d.ts.map +1 -1
- package/esm2020/FormioBaseComponent.mjs +0 -529
- package/esm2020/auth/auth.component.mjs +0 -12
- package/esm2020/auth/auth.config.mjs +0 -15
- package/esm2020/auth/auth.module.mjs +0 -46
- package/esm2020/auth/auth.service.mjs +0 -166
- package/esm2020/auth/login/login.component.mjs +0 -16
- package/esm2020/auth/register/register.component.mjs +0 -16
- package/esm2020/auth/resetpass/resetpass.component.mjs +0 -16
- package/esm2020/components/alerts/formio.alerts.component.mjs +0 -29
- package/esm2020/components/alerts/formio.alerts.mjs +0 -15
- package/esm2020/components/alerts/parse-html-content.pipe.mjs +0 -19
- package/esm2020/components/formbuilder/formbuilder.component.mjs +0 -187
- package/esm2020/components/formio/formio.component.mjs +0 -40
- package/esm2020/components/loader/formio.loader.component.mjs +0 -14
- package/esm2020/custom-component/create-custom-component.mjs +0 -144
- package/esm2020/custom-component/custom-tags.service.mjs +0 -16
- package/esm2020/elements.common.mjs +0 -2
- package/esm2020/formio-promise.service.mjs +0 -33
- package/esm2020/formio.common.mjs +0 -8
- package/esm2020/formio.config.mjs +0 -14
- package/esm2020/formio.module.mjs +0 -54
- package/esm2020/formio.service.mjs +0 -59
- package/esm2020/grid/GridBodyComponent.mjs +0 -81
- package/esm2020/grid/GridFooterComponent.mjs +0 -36
- package/esm2020/grid/GridHeaderComponent.mjs +0 -30
- package/esm2020/grid/form/FormGridBody.component.mjs +0 -19
- package/esm2020/grid/form/FormGridFooter.component.mjs +0 -26
- package/esm2020/grid/form/FormGridHeader.component.mjs +0 -26
- package/esm2020/grid/form/time-since.pipe.mjs +0 -37
- package/esm2020/grid/grid.component.mjs +0 -230
- package/esm2020/grid/grid.module.mjs +0 -79
- package/esm2020/grid/grid.service.mjs +0 -17
- package/esm2020/grid/submission/SubmissionGridBody.component.mjs +0 -43
- package/esm2020/grid/submission/SubmissionGridFooter.component.mjs +0 -23
- package/esm2020/grid/submission/SubmissionGridHeader.component.mjs +0 -61
- package/esm2020/manager/create/create.component.mjs +0 -18
- package/esm2020/manager/delete/delete.component.mjs +0 -37
- package/esm2020/manager/edit/edit.component.mjs +0 -109
- package/esm2020/manager/form/form.component.mjs +0 -70
- package/esm2020/manager/form-manager.config.mjs +0 -17
- package/esm2020/manager/form-manager.module.mjs +0 -83
- package/esm2020/manager/form-manager.service.mjs +0 -178
- package/esm2020/manager/submission/delete/delete.component.mjs +0 -28
- package/esm2020/manager/submission/edit/edit.component.mjs +0 -22
- package/esm2020/manager/submission/index/index.component.mjs +0 -22
- package/esm2020/manager/submission/submission/submission.component.mjs +0 -26
- package/esm2020/manager/submission/view/view.component.mjs +0 -16
- package/esm2020/manager/view/view.component.mjs +0 -42
- package/esm2020/resource/create/create.component.mjs +0 -37
- package/esm2020/resource/delete/delete.component.mjs +0 -26
- package/esm2020/resource/edit/edit.component.mjs +0 -36
- package/esm2020/resource/index/index.component.mjs +0 -61
- package/esm2020/resource/resource.component.mjs +0 -46
- package/esm2020/resource/resource.config.mjs +0 -15
- package/esm2020/resource/resource.module.mjs +0 -62
- package/esm2020/resource/resources.service.mjs +0 -22
- package/esm2020/resource/view/view.component.mjs +0 -23
- package/fesm2015/formio-angular-auth.mjs +0 -298
- package/fesm2015/formio-angular-auth.mjs.map +0 -1
- package/fesm2015/formio-angular-grid.mjs +0 -678
- package/fesm2015/formio-angular-grid.mjs.map +0 -1
- package/fesm2015/formio-angular-manager.mjs +0 -746
- package/fesm2015/formio-angular-manager.mjs.map +0 -1
- package/fesm2015/formio-angular-resource.mjs +0 -506
- package/fesm2015/formio-angular-resource.mjs.map +0 -1
- package/fesm2015/formio-angular.mjs +0 -1153
- package/fesm2015/formio-angular.mjs.map +0 -1
- package/fesm2020/formio-angular-auth.mjs.map +0 -1
- package/fesm2020/formio-angular-grid.mjs.map +0 -1
- package/fesm2020/formio-angular-manager.mjs.map +0 -1
- package/fesm2020/formio-angular-resource.mjs.map +0 -1
- package/fesm2020/formio-angular.mjs +0 -1172
- package/fesm2020/formio-angular.mjs.map +0 -1
- /package/{esm2020 → esm2022}/auth/auth.routes.mjs +0 -0
- /package/{esm2020 → esm2022}/auth/formio-angular-auth.mjs +0 -0
- /package/{esm2020 → esm2022}/auth/index.mjs +0 -0
- /package/{esm2020 → esm2022}/formio-angular.mjs +0 -0
- /package/{esm2020 → esm2022}/formio.utils.mjs +0 -0
- /package/{esm2020 → esm2022}/grid/form/index.mjs +0 -0
- /package/{esm2020 → esm2022}/grid/formio-angular-grid.mjs +0 -0
- /package/{esm2020 → esm2022}/grid/index.mjs +0 -0
- /package/{esm2020 → esm2022}/grid/submission/index.mjs +0 -0
- /package/{esm2020 → esm2022}/grid/types/grid-column.mjs +0 -0
- /package/{esm2020 → esm2022}/grid/types/grid-footer-positions.mjs +0 -0
- /package/{esm2020 → esm2022}/grid/types/grid-header.mjs +0 -0
- /package/{esm2020 → esm2022}/index.mjs +0 -0
- /package/{esm2020 → esm2022}/manager/form-manager.routes.mjs +0 -0
- /package/{esm2020 → esm2022}/manager/formio-angular-manager.mjs +0 -0
- /package/{esm2020 → esm2022}/manager/index.mjs +0 -0
- /package/{esm2020 → esm2022}/resource/formio-angular-resource.mjs +0 -0
- /package/{esm2020 → esm2022}/resource/index.mjs +0 -0
- /package/{esm2020 → esm2022}/resource/resource.routes.mjs +0 -0
- /package/{esm2020 → esm2022}/types/alerts-position.mjs +0 -0
- /package/{esm2020 → esm2022}/types/formio-metadata.mjs +0 -0
- /package/{esm2020 → esm2022}/types/formio-submission.mjs +0 -0
|
@@ -1,529 +0,0 @@
|
|
|
1
|
-
import { Component, EventEmitter, Input, Optional, Output, ViewChild } from '@angular/core';
|
|
2
|
-
import { FormioService } from './formio.service';
|
|
3
|
-
import { FormioAlerts } from './components/alerts/formio.alerts';
|
|
4
|
-
import { assign, get, isEmpty } from 'lodash';
|
|
5
|
-
import Evaluator from 'formiojs/utils/Evaluator';
|
|
6
|
-
import { fastCloneDeep } from 'formiojs/utils/utils';
|
|
7
|
-
import { AlertsPosition } from './types/alerts-position';
|
|
8
|
-
import * as i0 from "@angular/core";
|
|
9
|
-
import * as i1 from "./formio.config";
|
|
10
|
-
import * as i2 from "./custom-component/custom-tags.service";
|
|
11
|
-
export class FormioBaseComponent {
|
|
12
|
-
constructor(ngZone, config, customTags) {
|
|
13
|
-
this.ngZone = ngZone;
|
|
14
|
-
this.config = config;
|
|
15
|
-
this.customTags = customTags;
|
|
16
|
-
this.submission = {};
|
|
17
|
-
this.noeval = Evaluator.noeval;
|
|
18
|
-
this.readOnly = false;
|
|
19
|
-
this.viewOnly = false;
|
|
20
|
-
this.hideLoading = false;
|
|
21
|
-
this.hooks = {};
|
|
22
|
-
this.watchSubmissionErrors = false;
|
|
23
|
-
this.dataTableActions = [];
|
|
24
|
-
this.render = new EventEmitter();
|
|
25
|
-
this.customEvent = new EventEmitter();
|
|
26
|
-
this.fileUploadingStatus = new EventEmitter();
|
|
27
|
-
this.submit = new EventEmitter();
|
|
28
|
-
this.prevPage = new EventEmitter();
|
|
29
|
-
this.nextPage = new EventEmitter();
|
|
30
|
-
this.beforeSubmit = new EventEmitter();
|
|
31
|
-
this.rowAdd = new EventEmitter();
|
|
32
|
-
this.rowAdded = new EventEmitter();
|
|
33
|
-
this.rowEdit = new EventEmitter();
|
|
34
|
-
this.rowEdited = new EventEmitter();
|
|
35
|
-
this.rowDelete = new EventEmitter();
|
|
36
|
-
this.rowClick = new EventEmitter();
|
|
37
|
-
this.rowSelectChange = new EventEmitter();
|
|
38
|
-
this.change = new EventEmitter();
|
|
39
|
-
this.invalid = new EventEmitter();
|
|
40
|
-
this.errorChange = new EventEmitter();
|
|
41
|
-
this.formLoad = new EventEmitter();
|
|
42
|
-
this.submissionLoad = new EventEmitter();
|
|
43
|
-
this.ready = new EventEmitter();
|
|
44
|
-
this.AlertsPosition = AlertsPosition;
|
|
45
|
-
this.initialized = false;
|
|
46
|
-
this.alerts = new FormioAlerts();
|
|
47
|
-
this.submitting = false;
|
|
48
|
-
this.submissionSuccess = false;
|
|
49
|
-
this.isLoading = true;
|
|
50
|
-
this.formioReady = new Promise((ready) => {
|
|
51
|
-
this.formioReadyResolve = ready;
|
|
52
|
-
});
|
|
53
|
-
}
|
|
54
|
-
getRenderer() {
|
|
55
|
-
return this.renderer;
|
|
56
|
-
}
|
|
57
|
-
getRendererOptions() {
|
|
58
|
-
const extraTags = this.customTags ? this.customTags.tags : [];
|
|
59
|
-
return assign({}, {
|
|
60
|
-
icons: get(this.config, 'icons', 'fontawesome'),
|
|
61
|
-
noAlerts: get(this.options, 'noAlerts', true),
|
|
62
|
-
readOnly: this.readOnly,
|
|
63
|
-
viewAsHtml: this.viewOnly,
|
|
64
|
-
...(this.viewOnly && { renderMode: "html" }),
|
|
65
|
-
i18n: get(this.options, 'i18n', null),
|
|
66
|
-
fileService: get(this.options, 'fileService', null),
|
|
67
|
-
hooks: this.hooks,
|
|
68
|
-
sanitizeConfig: {
|
|
69
|
-
addTags: extraTags
|
|
70
|
-
},
|
|
71
|
-
dataTableActions: this.dataTableActions
|
|
72
|
-
}, this.renderOptions || {});
|
|
73
|
-
}
|
|
74
|
-
createRenderer() {
|
|
75
|
-
const Renderer = this.getRenderer();
|
|
76
|
-
const form = (new Renderer(this.formioElement ? this.formioElement.nativeElement : null, this.form, this.getRendererOptions()));
|
|
77
|
-
return form.instance;
|
|
78
|
-
}
|
|
79
|
-
setForm(form) {
|
|
80
|
-
this.form = form;
|
|
81
|
-
if (this.formio) {
|
|
82
|
-
this.formio.destroy();
|
|
83
|
-
}
|
|
84
|
-
if (this.form.title) {
|
|
85
|
-
this.label = this.form.title;
|
|
86
|
-
}
|
|
87
|
-
else if (this.form.components && this.form.components[0]) {
|
|
88
|
-
this.label = this.form.components[0].label;
|
|
89
|
-
}
|
|
90
|
-
// Clear out the element to render the new form.
|
|
91
|
-
if (this.formioElement && this.formioElement.nativeElement) {
|
|
92
|
-
this.formioElement.nativeElement.innerHTML = '';
|
|
93
|
-
}
|
|
94
|
-
this.formio = this.createRenderer();
|
|
95
|
-
this.formio.setSubmission(this.submission, {
|
|
96
|
-
fromSubmission: false
|
|
97
|
-
});
|
|
98
|
-
if (this.renderOptions && this.renderOptions.validateOnInit) {
|
|
99
|
-
this.formio.setValue(this.submission, { validateOnInit: true });
|
|
100
|
-
}
|
|
101
|
-
if (this.url) {
|
|
102
|
-
this.formio.setUrl(this.url, this.formioOptions || {});
|
|
103
|
-
}
|
|
104
|
-
if (this.src) {
|
|
105
|
-
this.formio.setUrl(this.src, this.formioOptions || {});
|
|
106
|
-
}
|
|
107
|
-
this.formio.nosubmit = true;
|
|
108
|
-
this.formio.on('prevPage', (data) => this.ngZone.run(() => this.onPrevPage(data)));
|
|
109
|
-
this.formio.on('nextPage', (data) => this.ngZone.run(() => this.onNextPage(data)));
|
|
110
|
-
this.formio.on('change', (value, flags, isModified) => this.ngZone.run(() => this.onChange(value, flags, isModified)));
|
|
111
|
-
this.formio.on('rowAdd', (component) => this.ngZone.run(() => this.rowAdd.emit(component)));
|
|
112
|
-
this.formio.on('rowAdded', (data, component) => this.ngZone.run(() => this.rowAdded.emit({ component, row: data })));
|
|
113
|
-
this.formio.on('rowEdit', (data, rowIndex, index, component) => this.ngZone.run(() => this.rowEdit.emit({ component, row: data, rowIndex, index })));
|
|
114
|
-
this.formio.on('rowEdited', (data, rowIndex, component) => this.ngZone.run(() => this.rowEdited.emit({ component, row: data, rowIndex })));
|
|
115
|
-
this.formio.on('rowDelete', (data, rowIndex, index, component) => this.ngZone.run(() => this.rowDelete.emit({ component, row: data, rowIndex, index })));
|
|
116
|
-
this.formio.on('rowClick', (row, rowIndex, index, component) => this.ngZone.run(() => this.rowClick.emit({ component, row, rowIndex, index })));
|
|
117
|
-
this.formio.on('rowSelectChange', (selectedRows, component) => this.ngZone.run(() => this.rowSelectChange.emit({ selectedRows, component })));
|
|
118
|
-
this.formio.on('customEvent', (event) => this.ngZone.run(() => this.customEvent.emit(event)));
|
|
119
|
-
['fileUploadingStart', 'fileUploadingEnd'].forEach((eventName, index) => {
|
|
120
|
-
const status = !!index ? 'end' : 'start';
|
|
121
|
-
this.formio.on(eventName, () => this.ngZone.run(() => this.fileUploadingStatus.emit(status)));
|
|
122
|
-
});
|
|
123
|
-
this.formio.on('submit', (submission, saved) => this.ngZone.run(() => this.submitForm(submission, saved)));
|
|
124
|
-
this.formio.on('error', (err) => this.ngZone.run(() => {
|
|
125
|
-
this.submissionSuccess = false;
|
|
126
|
-
return this.onError(err);
|
|
127
|
-
}));
|
|
128
|
-
this.formio.on('render', () => this.ngZone.run(() => this.render.emit()));
|
|
129
|
-
this.formio.on('formLoad', (loadedForm) => this.ngZone.run(() => this.formLoad.emit(loadedForm)));
|
|
130
|
-
return this.formio.ready.then(() => {
|
|
131
|
-
this.ngZone.run(() => {
|
|
132
|
-
this.isLoading = false;
|
|
133
|
-
this.ready.emit(this);
|
|
134
|
-
this.formioReadyResolve(this.formio);
|
|
135
|
-
if (this.formio.submissionReady) {
|
|
136
|
-
this.formio.submissionReady.then((submission) => {
|
|
137
|
-
this.submissionLoad.emit(submission);
|
|
138
|
-
});
|
|
139
|
-
}
|
|
140
|
-
});
|
|
141
|
-
return this.formio;
|
|
142
|
-
});
|
|
143
|
-
}
|
|
144
|
-
initialize() {
|
|
145
|
-
if (this.initialized) {
|
|
146
|
-
return;
|
|
147
|
-
}
|
|
148
|
-
const extraTags = this.customTags ? this.customTags.tags : [];
|
|
149
|
-
const defaultOptions = {
|
|
150
|
-
errors: {
|
|
151
|
-
message: 'Please fix the following errors before submitting.'
|
|
152
|
-
},
|
|
153
|
-
alerts: {
|
|
154
|
-
submitMessage: 'Submission Complete.'
|
|
155
|
-
},
|
|
156
|
-
disableAlerts: false,
|
|
157
|
-
hooks: {
|
|
158
|
-
beforeSubmit: null
|
|
159
|
-
},
|
|
160
|
-
sanitizeConfig: {
|
|
161
|
-
addTags: extraTags
|
|
162
|
-
},
|
|
163
|
-
alertsPosition: AlertsPosition.top,
|
|
164
|
-
};
|
|
165
|
-
this.options = Object.assign(defaultOptions, this.options);
|
|
166
|
-
if (this.options.disableAlerts) {
|
|
167
|
-
this.options.alertsPosition = AlertsPosition.none;
|
|
168
|
-
}
|
|
169
|
-
this.initialized = true;
|
|
170
|
-
}
|
|
171
|
-
ngOnInit() {
|
|
172
|
-
Evaluator.noeval = this.noeval;
|
|
173
|
-
this.initialize();
|
|
174
|
-
if (this.language) {
|
|
175
|
-
if (typeof this.language === 'string') {
|
|
176
|
-
this.formio.language = this.language;
|
|
177
|
-
}
|
|
178
|
-
else {
|
|
179
|
-
this.language.subscribe((lang) => {
|
|
180
|
-
this.formio.language = lang;
|
|
181
|
-
});
|
|
182
|
-
}
|
|
183
|
-
}
|
|
184
|
-
if (this.refresh) {
|
|
185
|
-
this.refresh.subscribe((refresh) => this.onRefresh(refresh));
|
|
186
|
-
}
|
|
187
|
-
if (this.error) {
|
|
188
|
-
this.error.subscribe((err) => this.onError(err));
|
|
189
|
-
}
|
|
190
|
-
if (this.success) {
|
|
191
|
-
this.success.subscribe((message) => {
|
|
192
|
-
this.alerts.setAlert({
|
|
193
|
-
type: 'success',
|
|
194
|
-
message: message || get(this.options, 'alerts.submitMessage')
|
|
195
|
-
});
|
|
196
|
-
});
|
|
197
|
-
}
|
|
198
|
-
if (this.src) {
|
|
199
|
-
if (!this.service) {
|
|
200
|
-
this.service = new FormioService(this.src);
|
|
201
|
-
}
|
|
202
|
-
this.isLoading = true;
|
|
203
|
-
this.service.loadForm({ params: { live: 1 } }).subscribe((form) => {
|
|
204
|
-
if (form && form.components) {
|
|
205
|
-
this.ngZone.runOutsideAngular(() => {
|
|
206
|
-
this.setForm(form);
|
|
207
|
-
});
|
|
208
|
-
}
|
|
209
|
-
// if a submission is also provided.
|
|
210
|
-
if (isEmpty(this.submission) &&
|
|
211
|
-
this.service &&
|
|
212
|
-
this.service.formio.submissionId) {
|
|
213
|
-
this.service.loadSubmission().subscribe((submission) => {
|
|
214
|
-
if (this.readOnly) {
|
|
215
|
-
this.formio.options.readOnly = true;
|
|
216
|
-
}
|
|
217
|
-
this.submission = this.formio.submission = submission;
|
|
218
|
-
}, err => this.onError(err));
|
|
219
|
-
}
|
|
220
|
-
}, err => this.onError(err));
|
|
221
|
-
}
|
|
222
|
-
if (this.url && !this.service) {
|
|
223
|
-
this.service = new FormioService(this.url);
|
|
224
|
-
}
|
|
225
|
-
}
|
|
226
|
-
ngOnDestroy() {
|
|
227
|
-
if (this.formio) {
|
|
228
|
-
this.formio.destroy();
|
|
229
|
-
}
|
|
230
|
-
}
|
|
231
|
-
onRefresh(refresh) {
|
|
232
|
-
this.formioReady.then(() => {
|
|
233
|
-
if (refresh.form) {
|
|
234
|
-
this.formio.setForm(refresh.form).then(() => {
|
|
235
|
-
if (refresh.submission) {
|
|
236
|
-
this.formio.setSubmission(refresh.submission);
|
|
237
|
-
}
|
|
238
|
-
});
|
|
239
|
-
}
|
|
240
|
-
else if (refresh.submission) {
|
|
241
|
-
this.formio.setSubmission(refresh.submission);
|
|
242
|
-
}
|
|
243
|
-
else {
|
|
244
|
-
switch (refresh.property) {
|
|
245
|
-
case 'submission':
|
|
246
|
-
this.formio.submission = refresh.value;
|
|
247
|
-
break;
|
|
248
|
-
case 'form':
|
|
249
|
-
this.formio.form = refresh.value;
|
|
250
|
-
break;
|
|
251
|
-
}
|
|
252
|
-
}
|
|
253
|
-
});
|
|
254
|
-
}
|
|
255
|
-
ngOnChanges(changes) {
|
|
256
|
-
Evaluator.noeval = this.noeval;
|
|
257
|
-
this.initialize();
|
|
258
|
-
if (changes.form && changes.form.currentValue) {
|
|
259
|
-
this.ngZone.runOutsideAngular(() => {
|
|
260
|
-
this.setForm(changes.form.currentValue);
|
|
261
|
-
});
|
|
262
|
-
}
|
|
263
|
-
this.formioReady.then(() => {
|
|
264
|
-
if (changes.submission && changes.submission.currentValue) {
|
|
265
|
-
this.formio.setSubmission(changes.submission.currentValue, {
|
|
266
|
-
fromSubmission: !changes.submission.firstChange
|
|
267
|
-
});
|
|
268
|
-
}
|
|
269
|
-
if (changes.hideComponents && changes.hideComponents.currentValue) {
|
|
270
|
-
const hiddenComponents = changes.hideComponents.currentValue;
|
|
271
|
-
this.formio.options.hide = hiddenComponents;
|
|
272
|
-
this.formio.everyComponent((component) => {
|
|
273
|
-
component.options.hide = hiddenComponents;
|
|
274
|
-
if (hiddenComponents.includes(component.component.key)) {
|
|
275
|
-
component.visible = false;
|
|
276
|
-
}
|
|
277
|
-
});
|
|
278
|
-
}
|
|
279
|
-
});
|
|
280
|
-
}
|
|
281
|
-
onPrevPage(data) {
|
|
282
|
-
this.alerts.setAlerts([]);
|
|
283
|
-
this.prevPage.emit(data);
|
|
284
|
-
}
|
|
285
|
-
onNextPage(data) {
|
|
286
|
-
this.alerts.setAlerts([]);
|
|
287
|
-
this.nextPage.emit(data);
|
|
288
|
-
}
|
|
289
|
-
onSubmit(submission, saved, noemit) {
|
|
290
|
-
this.submitting = false;
|
|
291
|
-
this.submissionSuccess = true;
|
|
292
|
-
this.formio.setValue(fastCloneDeep(submission), {
|
|
293
|
-
noValidate: true,
|
|
294
|
-
noCheck: true
|
|
295
|
-
});
|
|
296
|
-
if (saved) {
|
|
297
|
-
this.formio.emit('submitDone', submission);
|
|
298
|
-
}
|
|
299
|
-
if (!noemit) {
|
|
300
|
-
this.submit.emit(submission);
|
|
301
|
-
}
|
|
302
|
-
if (!this.success) {
|
|
303
|
-
this.alerts.setAlert({
|
|
304
|
-
type: 'success',
|
|
305
|
-
message: get(this.options, 'alerts.submitMessage')
|
|
306
|
-
});
|
|
307
|
-
}
|
|
308
|
-
}
|
|
309
|
-
onError(err) {
|
|
310
|
-
this.alerts.setAlerts([]);
|
|
311
|
-
this.submitting = false;
|
|
312
|
-
this.isLoading = false;
|
|
313
|
-
if (!err) {
|
|
314
|
-
return;
|
|
315
|
-
}
|
|
316
|
-
// Make sure it is an array.
|
|
317
|
-
const errors = Array.isArray(err) ? err : [err];
|
|
318
|
-
// Emit these errors again.
|
|
319
|
-
this.errorChange.emit(errors);
|
|
320
|
-
if (err.silent) {
|
|
321
|
-
return;
|
|
322
|
-
}
|
|
323
|
-
if (this.formio && errors.length) {
|
|
324
|
-
this.formio.emit('submitError', errors);
|
|
325
|
-
}
|
|
326
|
-
// Iterate through each one and set the alerts array.
|
|
327
|
-
errors.forEach((error) => {
|
|
328
|
-
const { message, paths, } = error
|
|
329
|
-
? error.details
|
|
330
|
-
? {
|
|
331
|
-
message: error.details.map((detail) => detail.message),
|
|
332
|
-
paths: error.details.map((detail) => detail.path),
|
|
333
|
-
}
|
|
334
|
-
: {
|
|
335
|
-
message: error.message || error.toString(),
|
|
336
|
-
paths: error.path ? [error.path] : [],
|
|
337
|
-
}
|
|
338
|
-
: {
|
|
339
|
-
message: '',
|
|
340
|
-
paths: [],
|
|
341
|
-
};
|
|
342
|
-
let shouldErrorDisplay = true;
|
|
343
|
-
if (this.formio) {
|
|
344
|
-
paths.forEach((path, index) => {
|
|
345
|
-
const component = this.formio.getComponent(path);
|
|
346
|
-
if (component) {
|
|
347
|
-
const components = Array.isArray(component) ? component : [component];
|
|
348
|
-
const messageText = Array.isArray(message) ? message[index] : message;
|
|
349
|
-
components.forEach((comp) => comp.setCustomValidity(messageText, true));
|
|
350
|
-
this.alerts.addAlert({
|
|
351
|
-
type: 'danger',
|
|
352
|
-
message: message[index],
|
|
353
|
-
component,
|
|
354
|
-
});
|
|
355
|
-
shouldErrorDisplay = false;
|
|
356
|
-
}
|
|
357
|
-
});
|
|
358
|
-
if (window.VPAT_ENABLED) {
|
|
359
|
-
if (typeof error === 'string' && this.formio.components) {
|
|
360
|
-
this.formio.components.forEach((comp) => {
|
|
361
|
-
if (comp && comp.type !== 'button') {
|
|
362
|
-
comp.setCustomValidity(message, true);
|
|
363
|
-
}
|
|
364
|
-
});
|
|
365
|
-
}
|
|
366
|
-
}
|
|
367
|
-
if (!this.noAlerts) {
|
|
368
|
-
this.formio.showErrors();
|
|
369
|
-
}
|
|
370
|
-
}
|
|
371
|
-
if (shouldErrorDisplay) {
|
|
372
|
-
this.alerts.addAlert({
|
|
373
|
-
type: 'danger',
|
|
374
|
-
message,
|
|
375
|
-
component: error.component,
|
|
376
|
-
});
|
|
377
|
-
}
|
|
378
|
-
});
|
|
379
|
-
}
|
|
380
|
-
focusOnComponet(key) {
|
|
381
|
-
if (this.formio) {
|
|
382
|
-
this.formio.focusOnComponent(key);
|
|
383
|
-
}
|
|
384
|
-
}
|
|
385
|
-
submitExecute(submission, saved = false) {
|
|
386
|
-
if (this.service && !this.url && !saved) {
|
|
387
|
-
this.service
|
|
388
|
-
.saveSubmission(submission)
|
|
389
|
-
.subscribe((sub) => this.onSubmit(sub, true), err => this.onError(err));
|
|
390
|
-
}
|
|
391
|
-
else {
|
|
392
|
-
this.onSubmit(submission, false);
|
|
393
|
-
}
|
|
394
|
-
}
|
|
395
|
-
submitForm(submission, saved = false) {
|
|
396
|
-
// Keep double submits from occurring...
|
|
397
|
-
if (this.submitting) {
|
|
398
|
-
return;
|
|
399
|
-
}
|
|
400
|
-
this.formio.setMetadata(submission);
|
|
401
|
-
this.submissionSuccess = false;
|
|
402
|
-
this.submitting = true;
|
|
403
|
-
this.beforeSubmit.emit(submission);
|
|
404
|
-
// if they provide a beforeSubmit hook, then allow them to alter the submission asynchronously
|
|
405
|
-
// or even provide a custom Error method.
|
|
406
|
-
const beforeSubmit = get(this.options, 'hooks.beforeSubmit');
|
|
407
|
-
if (beforeSubmit) {
|
|
408
|
-
beforeSubmit(submission, (err, sub) => {
|
|
409
|
-
if (err) {
|
|
410
|
-
this.onError(err);
|
|
411
|
-
return;
|
|
412
|
-
}
|
|
413
|
-
this.submitExecute(sub, saved);
|
|
414
|
-
});
|
|
415
|
-
}
|
|
416
|
-
else {
|
|
417
|
-
this.submitExecute(submission, saved);
|
|
418
|
-
}
|
|
419
|
-
}
|
|
420
|
-
onChange(value, flags, isModified) {
|
|
421
|
-
if (this.watchSubmissionErrors && !this.submissionSuccess) {
|
|
422
|
-
const errors = get(this, 'formio.errors', []);
|
|
423
|
-
const alerts = get(this, 'alerts.alerts', []);
|
|
424
|
-
const submitted = get(this, 'formio.submitted', false);
|
|
425
|
-
if (submitted && (errors.length || alerts.length)) {
|
|
426
|
-
this.onError(errors);
|
|
427
|
-
}
|
|
428
|
-
}
|
|
429
|
-
return this.change.emit({ ...value, flags, isModified });
|
|
430
|
-
}
|
|
431
|
-
}
|
|
432
|
-
FormioBaseComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.1", ngImport: i0, type: FormioBaseComponent, deps: [{ token: i0.NgZone }, { token: i1.FormioAppConfig, optional: true }, { token: i2.CustomTagsService, optional: true }], target: i0.ɵɵFactoryTarget.Component });
|
|
433
|
-
FormioBaseComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.0.1", type: FormioBaseComponent, selector: "ng-component", inputs: { form: "form", submission: "submission", src: "src", url: "url", service: "service", options: "options", noeval: "noeval", formioOptions: "formioOptions", renderOptions: "renderOptions", readOnly: "readOnly", viewOnly: "viewOnly", hideLoading: "hideLoading", hideComponents: "hideComponents", refresh: "refresh", error: "error", success: "success", language: "language", hooks: "hooks", renderer: "renderer", watchSubmissionErrors: "watchSubmissionErrors", dataTableActions: "dataTableActions" }, outputs: { render: "render", customEvent: "customEvent", fileUploadingStatus: "fileUploadingStatus", submit: "submit", prevPage: "prevPage", nextPage: "nextPage", beforeSubmit: "beforeSubmit", rowAdd: "rowAdd", rowAdded: "rowAdded", rowEdit: "rowEdit", rowEdited: "rowEdited", rowDelete: "rowDelete", rowClick: "rowClick", rowSelectChange: "rowSelectChange", change: "change", invalid: "invalid", errorChange: "errorChange", formLoad: "formLoad", submissionLoad: "submissionLoad", ready: "ready" }, viewQueries: [{ propertyName: "formioElement", first: true, predicate: ["formio"], descendants: true, static: true }], usesOnChanges: true, ngImport: i0, template: '', isInline: true });
|
|
434
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.1", ngImport: i0, type: FormioBaseComponent, decorators: [{
|
|
435
|
-
type: Component,
|
|
436
|
-
args: [{
|
|
437
|
-
template: ''
|
|
438
|
-
}]
|
|
439
|
-
}], ctorParameters: function () { return [{ type: i0.NgZone }, { type: i1.FormioAppConfig, decorators: [{
|
|
440
|
-
type: Optional
|
|
441
|
-
}] }, { type: i2.CustomTagsService, decorators: [{
|
|
442
|
-
type: Optional
|
|
443
|
-
}] }]; }, propDecorators: { form: [{
|
|
444
|
-
type: Input
|
|
445
|
-
}], submission: [{
|
|
446
|
-
type: Input
|
|
447
|
-
}], src: [{
|
|
448
|
-
type: Input
|
|
449
|
-
}], url: [{
|
|
450
|
-
type: Input
|
|
451
|
-
}], service: [{
|
|
452
|
-
type: Input
|
|
453
|
-
}], options: [{
|
|
454
|
-
type: Input
|
|
455
|
-
}], noeval: [{
|
|
456
|
-
type: Input
|
|
457
|
-
}], formioOptions: [{
|
|
458
|
-
type: Input
|
|
459
|
-
}], renderOptions: [{
|
|
460
|
-
type: Input
|
|
461
|
-
}], readOnly: [{
|
|
462
|
-
type: Input
|
|
463
|
-
}], viewOnly: [{
|
|
464
|
-
type: Input
|
|
465
|
-
}], hideLoading: [{
|
|
466
|
-
type: Input
|
|
467
|
-
}], hideComponents: [{
|
|
468
|
-
type: Input
|
|
469
|
-
}], refresh: [{
|
|
470
|
-
type: Input
|
|
471
|
-
}], error: [{
|
|
472
|
-
type: Input
|
|
473
|
-
}], success: [{
|
|
474
|
-
type: Input
|
|
475
|
-
}], language: [{
|
|
476
|
-
type: Input
|
|
477
|
-
}], hooks: [{
|
|
478
|
-
type: Input
|
|
479
|
-
}], renderer: [{
|
|
480
|
-
type: Input
|
|
481
|
-
}], watchSubmissionErrors: [{
|
|
482
|
-
type: Input
|
|
483
|
-
}], dataTableActions: [{
|
|
484
|
-
type: Input
|
|
485
|
-
}], render: [{
|
|
486
|
-
type: Output
|
|
487
|
-
}], customEvent: [{
|
|
488
|
-
type: Output
|
|
489
|
-
}], fileUploadingStatus: [{
|
|
490
|
-
type: Output
|
|
491
|
-
}], submit: [{
|
|
492
|
-
type: Output
|
|
493
|
-
}], prevPage: [{
|
|
494
|
-
type: Output
|
|
495
|
-
}], nextPage: [{
|
|
496
|
-
type: Output
|
|
497
|
-
}], beforeSubmit: [{
|
|
498
|
-
type: Output
|
|
499
|
-
}], rowAdd: [{
|
|
500
|
-
type: Output
|
|
501
|
-
}], rowAdded: [{
|
|
502
|
-
type: Output
|
|
503
|
-
}], rowEdit: [{
|
|
504
|
-
type: Output
|
|
505
|
-
}], rowEdited: [{
|
|
506
|
-
type: Output
|
|
507
|
-
}], rowDelete: [{
|
|
508
|
-
type: Output
|
|
509
|
-
}], rowClick: [{
|
|
510
|
-
type: Output
|
|
511
|
-
}], rowSelectChange: [{
|
|
512
|
-
type: Output
|
|
513
|
-
}], change: [{
|
|
514
|
-
type: Output
|
|
515
|
-
}], invalid: [{
|
|
516
|
-
type: Output
|
|
517
|
-
}], errorChange: [{
|
|
518
|
-
type: Output
|
|
519
|
-
}], formLoad: [{
|
|
520
|
-
type: Output
|
|
521
|
-
}], submissionLoad: [{
|
|
522
|
-
type: Output
|
|
523
|
-
}], ready: [{
|
|
524
|
-
type: Output
|
|
525
|
-
}], formioElement: [{
|
|
526
|
-
type: ViewChild,
|
|
527
|
-
args: ['formio', { static: true }]
|
|
528
|
-
}] } });
|
|
529
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRm9ybWlvQmFzZUNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3Byb2plY3RzL2FuZ3VsYXItZm9ybWlvL3NyYy9Gb3JtaW9CYXNlQ29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQWMsWUFBWSxFQUFFLEtBQUssRUFBd0MsUUFBUSxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDOUksT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ2pELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUdqRSxPQUFPLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxPQUFPLEVBQUUsTUFBTSxRQUFRLENBQUM7QUFFOUMsT0FBTyxTQUFTLE1BQU0sMEJBQTBCLENBQUM7QUFDakQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ3JELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQzs7OztBQUt6RCxNQUFNLE9BQU8sbUJBQW1CO0lBeUQ5QixZQUNTLE1BQWMsRUFDRixNQUF1QixFQUN2QixVQUE4QjtRQUYxQyxXQUFNLEdBQU4sTUFBTSxDQUFRO1FBQ0YsV0FBTSxHQUFOLE1BQU0sQ0FBaUI7UUFDdkIsZUFBVSxHQUFWLFVBQVUsQ0FBb0I7UUExRDFDLGVBQVUsR0FBUyxFQUFFLENBQUM7UUFLdEIsV0FBTSxHQUFLLFNBQVMsQ0FBQyxNQUFNLENBQUM7UUFHNUIsYUFBUSxHQUFLLEtBQUssQ0FBQztRQUNuQixhQUFRLEdBQUssS0FBSyxDQUFDO1FBQ25CLGdCQUFXLEdBQUssS0FBSyxDQUFDO1FBTXRCLFVBQUssR0FBUyxFQUFFLENBQUM7UUFFakIsMEJBQXFCLEdBQUssS0FBSyxDQUFDO1FBQ2hDLHFCQUFnQixHQUFVLEVBQUUsQ0FBQTtRQUMzQixXQUFNLEdBQUcs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Q0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssRUFBRSxLQUFLLEVBQUUsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzFJLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLFFBQVEsRUFBRSxDQUFDLFNBQWMsRUFBRSxFQUFFLENBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2xHLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLFVBQVUsRUFBRSxDQUFDLElBQVMsRUFBRSxTQUFjLEVBQUUsRUFBRSxDQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEVBQUMsU0FBUyxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUM5SCxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxJQUFTLEVBQUUsUUFBZ0IsRUFBRSxLQUFhLEVBQUUsU0FBYyxFQUFFLEVBQUUsQ0FBRSxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFDLFNBQVMsRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUM5SyxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxJQUFTLEVBQUUsUUFBZ0IsRUFBRSxTQUFjLEVBQUUsRUFBRSxDQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxTQUFT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LFFBQVE7c0JBQWpCLE1BQU07Z0JBQ0csWUFBWTtzQkFBckIsTUFBTTtnQkFDRyxNQUFNO3NCQUFmLE1BQU07Z0JBQ0csUUFBUTtzQkFBakIsTUFBTTtnQkFDRyxPQUFPO3NCQUFoQixNQUFNO2dCQUNHLFNBQVM7c0JBQWxCLE1BQU07Z0JBQ0csU0FBUztzQkFBbEIsTUFBTTtnQkFDRyxRQUFRO3NCQUFqQixNQUFNO2dCQUNHLGVBQWU7c0JBQXhCLE1BQU07Z0JBQ0csTUFBTTtzQkFBZixNQUFNO2dCQUNHLE9BQU87c0JBQWhCLE1BQU07Z0JBQ0csV0FBVztzQkFBcEIsTUFBTTtnQkFDRyxRQUFRO3NCQUFqQixNQUFNO2dCQUNHLGNBQWM7c0JBQXZCLE1BQU07Z0JBQ0csS0FBSztzQkFBZCxNQUFNO2dCQUNnQyxhQUFhO3NCQUFuRCxTQUFTO3VCQUFDLFFBQVEsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEVsZW1lbnRSZWYsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE5nWm9uZSwgT25DaGFuZ2VzLCBPbkRlc3Ryb3ksIE9uSW5pdCwgT3B0aW9uYWwsIE91dHB1dCwgVmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGb3JtaW9TZXJ2aWNlIH0gZnJvbSAnLi9mb3JtaW8uc2VydmljZSc7XG5pbXBvcnQgeyBGb3JtaW9BbGVydHMgfSBmcm9tICcuL2NvbXBvbmVudHMvYWxlcnRzL2Zvcm1pby5hbGVydHMnO1xuaW1wb3J0IHsgRm9ybWlvQXBwQ29uZmlnIH0gZnJvbSAnLi9mb3JtaW8uY29uZmlnJztcbmltcG9ydCB7IEZvcm1pb0Vycm9yLCBGb3JtaW9Gb3JtLCBGb3JtaW9PcHRpb25zLCBGb3JtaW9SZWZyZXNoVmFsdWUgfSBmcm9tICcuL2Zvcm1pby5jb21tb24nO1xuaW1wb3J0IHsgYXNzaWduLCBnZXQsIGlzRW1wdHkgfSBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHsgQ3VzdG9tVGFnc1NlcnZpY2UgfSBmcm9tICcuL2N1c3RvbS1jb21wb25lbnQvY3VzdG9tLXRhZ3Muc2VydmljZSc7XG5pbXBvcnQgRXZhbHVhdG9yIGZyb20gJ2Zvcm1pb2pzL3V0aWxzL0V2YWx1YXRvcic7XG5pbXBvcnQgeyBmYXN0Q2xvbmVEZWVwIH0gZnJvbSAnZm9ybWlvanMvdXRpbHMvdXRpbHMnO1xuaW1wb3J0IHsgQWxlcnRzUG9zaXRpb24gfSBmcm9tICcuL3R5cGVzL2FsZXJ0cy1wb3NpdGlvbic7XG5cbkBDb21wb25lbnQoe1xuICB0ZW1wbGF0ZTogJydcbn0pXG5leHBvcnQgY2xhc3MgRm9ybWlvQmFzZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzLCBPbkRlc3Ryb3kge1xuICBASW5wdXQoKSBmb3JtPzogRm9ybWlvRm9ybTtcbiAgQElucHV0KCkgc3VibWlzc2lvbj86IGFueSA9IHt9O1xuICBASW5wdXQoKSBzcmM/OiBzdHJpbmc7XG4gIEBJbnB1dCgpIHVybD86IHN0cmluZztcbiAgQElucHV0KCkgc2VydmljZT86IEZvcm1pb1NlcnZpY2U7XG4gIEBJbnB1dCgpIG9wdGlvbnM/OiBGb3JtaW9PcHRpb25zO1xuICBASW5wdXQoKSBub2V2YWwgPyA9IEV2YWx1YXRvci5ub2V2YWw7XG4gIEBJbnB1dCgpIGZvcm1pb09wdGlvbnM/OiBhbnk7XG4gIEBJbnB1dCgpIHJlbmRlck9wdGlvbnM/OiBhbnk7XG4gIEBJbnB1dCgpIHJlYWRPbmx5ID8gPSBmYWxzZTtcbiAgQElucHV0KCkgdmlld09ubHkgPyA9IGZhbHNlO1xuICBASW5wdXQoKSBoaWRlTG9hZGluZyA/ID0gZmFsc2U7XG4gIEBJbnB1dCgpIGhpZGVDb21wb25lbnRzPzogc3RyaW5nW107XG4gIEBJbnB1dCgpIHJlZnJlc2g/OiBFdmVudEVtaXR0ZXI8Rm9ybWlvUmVmcmVzaFZhbHVlPjtcbiAgQElucHV0KCkgZXJyb3I/OiBFdmVudEVtaXR0ZXI8YW55PjtcbiAgQElucHV0KCkgc3VjY2Vzcz86IEV2ZW50RW1pdHRlcjxvYmplY3Q+O1xuICBASW5wdXQoKSBsYW5ndWFnZT86IEV2ZW50RW1pdHRlcjxzdHJpbmc+O1xuICBASW5wdXQoKSBob29rcz86IGFueSA9IHt9O1xuICBASW5wdXQoKSByZW5kZXJlcj86IGFueTtcbiAgQElucHV0KCkgd2F0Y2hTdWJtaXNzaW9uRXJyb3JzID8gPSBmYWxzZTtcbiAgQElucHV0KCkgZGF0YVRhYmxlQWN0aW9ucz8gOiBhbnkgPSBbXVxuICBAT3V0cHV0KCkgcmVuZGVyID0gbmV3IEV2ZW50RW1pdHRlcjxvYmplY3Q+KCk7XG4gIEBPdXRwdXQoKSBjdXN0b21FdmVudCA9IG5ldyBFdmVudEVtaXR0ZXI8b2JqZWN0PigpO1xuICBAT3V0cHV0KCkgZmlsZVVwbG9hZGluZ1N0YXR1cyA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nPigpO1xuICBAT3V0cHV0KCkgc3VibWl0ID0gbmV3IEV2ZW50RW1pdHRlcjxvYmplY3Q+KCk7XG4gIEBPdXRwdXQoKSBwcmV2UGFnZSA9IG5ldyBFdmVudEVtaXR0ZXI8b2JqZWN0PigpO1xuICBAT3V0cHV0KCkgbmV4dFBhZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPG9iamVjdD4oKTtcbiAgQE91dHB1dCgpIGJlZm9yZVN1Ym1pdCA9IG5ldyBFdmVudEVtaXR0ZXI8b2JqZWN0PigpO1xuICBAT3V0cHV0KCkgcm93QWRkID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gIEBPdXRwdXQoKSByb3dBZGRlZCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICBAT3V0cHV0KCkgcm93RWRpdCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICBAT3V0cHV0KCkgcm93RWRpdGVkID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gIEBPdXRwdXQoKSByb3dEZWxldGUgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgQE91dHB1dCgpIHJvd0NsaWNrID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gIEBPdXRwdXQoKSByb3dTZWxlY3RDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgQE91dHB1dCgpIGNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8b2JqZWN0PigpO1xuICBAT3V0cHV0KCkgaW52YWxpZCA9IG5ldyBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4oKTtcbiAgQE91dHB1dCgpIGVycm9yQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gIEBPdXRwdXQoKSBmb3JtTG9hZCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICBAT3V0cHV0KCkgc3VibWlzc2lvbkxvYWQgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgQE91dHB1dCgpIHJlYWR5ID0gbmV3IEV2ZW50RW1pdHRlcjxGb3JtaW9CYXNlQ29tcG9uZW50PigpO1xuICBAVmlld0NoaWxkKCdmb3JtaW8nLCB7IHN0YXRpYzogdHJ1ZSB9KSBmb3JtaW9FbGVtZW50PzogRWxlbWVudFJlZjxhbnk+O1xuXG4gIHB1YmxpYyBBbGVydHNQb3NpdGlvbiA9IEFsZXJ0c1Bvc2l0aW9uO1xuICBwdWJsaWMgZm9ybWlvOiBhbnk7XG4gIHB1YmxpYyBpbml0aWFsaXplZCA9IGZhbHNlO1xuICBwdWJsaWMgYWxlcnRzID0gbmV3IEZvcm1pb0FsZXJ0cygpO1xuICBwdWJsaWMgZm9ybWlvUmVhZHk6IFByb21pc2U8YW55PjtcblxuICBwcml2YXRlIGZvcm1pb1JlYWR5UmVzb2x2ZTogYW55O1xuICBwcml2YXRlIHN1Ym1pdHRpbmcgPSBmYWxzZTtcbiAgcHJpdmF0ZSBzdWJtaXNzaW9uU3VjY2VzcyA9IGZhbHNlO1xuICBwdWJsaWMgaXNMb2FkaW5nOiBib29sZWFuO1xuICBwdWJsaWMgbm9BbGVydHM6IGJvb2xlYW47XG4gIHB1YmxpYyBsYWJlbDogc3RyaW5nO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHB1YmxpYyBuZ1pvbmU6IE5nWm9uZSxcbiAgICBAT3B0aW9uYWwoKSBwdWJsaWMgY29uZmlnOiBGb3JtaW9BcHBDb25maWcsXG4gICAgQE9wdGlvbmFsKCkgcHVibGljIGN1c3RvbVRhZ3M/OiBDdXN0b21UYWdzU2VydmljZSxcbiAgKSB7XG4gICAgdGhpcy5pc0xvYWRpbmcgPSB0cnVlO1xuICAgIHRoaXMuZm9ybWlvUmVhZHkgPSBuZXcgUHJvbWlzZSgocmVhZHkpID0+IHtcbiAgICAgIHRoaXMuZm9ybWlvUmVhZHlSZXNvbHZlID0gcmVhZHk7XG4gICAgfSk7XG4gIH1cblxuICBnZXRSZW5kZXJlcigpIHtcbiAgICByZXR1cm4gdGhpcy5yZW5kZXJlcjtcbiAgfVxuXG4gIGdldFJlbmRlcmVyT3B0aW9ucygpIHtcbiAgICBjb25zdCBleHRyYVRhZ3MgPSB0aGlzLmN1c3RvbVRhZ3MgPyB0aGlzLmN1c3RvbVRhZ3MudGFncyA6IFtdO1xuICAgIHJldHVybiBhc3NpZ24oe30sIHtcbiAgICAgIGljb25zOiBnZXQodGhpcy5jb25maWcsICdpY29ucycsICdmb250YXdlc29tZScpLFxuICAgICAgbm9BbGVydHM6IGdldCh0aGlzLm9wdGlvbnMsICdub0FsZXJ0cycsIHRydWUpLFxuICAgICAgcmVhZE9ubHk6IHRoaXMucmVhZE9ubHksXG4gICAgICB2aWV3QXNIdG1sOiB0aGlzLnZpZXdPbmx5LFxuICAgICAgLi4uKHRoaXMudmlld09ubHkgJiYgeyByZW5kZXJNb2RlOiBcImh0bWxcIiB9KSxcbiAgICAgIGkxOG46IGdldCh0aGlzLm9wdGlvbnMsICdpMThuJywgbnVsbCksXG4gICAgICBmaWxlU2VydmljZTogZ2V0KHRoaXMub3B0aW9ucywgJ2ZpbGVTZXJ2aWNlJywgbnVsbCksXG4gICAgICBob29rczogdGhpcy5ob29rcyxcbiAgICAgIHNhbml0aXplQ29uZmlnOiB7XG4gICAgICAgIGFkZFRhZ3M6IGV4dHJhVGFnc1xuICAgICAgfSxcbiAgICAgIGRhdGFUYWJsZUFjdGlvbnM6IHRoaXMuZGF0YVRhYmxlQWN0aW9uc1xuICAgIH0sIHRoaXMucmVuZGVyT3B0aW9ucyB8fCB7fSk7XG4gIH1cblxuICBjcmVhdGVSZW5kZXJlcigpIHtcbiAgICBjb25zdCBSZW5kZXJlciA9IHRoaXMuZ2V0UmVuZGVyZXIoKTtcbiAgICBjb25zdCBmb3JtID0gKG5ldyBSZW5kZXJlcihcbiAgICAgIHRoaXMuZm9ybWlvRWxlbWVudCA/IHRoaXMuZm9ybWlvRWxlbWVudC5uYXRpdmVFbGVtZW50IDogbnVsbCxcbiAgICAgIHRoaXMuZm9ybSxcbiAgICAgIHRoaXMuZ2V0UmVuZGVyZXJPcHRpb25zKClcbiAgICApKTtcbiAgICByZXR1cm4gZm9ybS5pbnN0YW5jZTtcbiAgfVxuXG4gIHNldEZvcm0oZm9ybTogRm9ybWlvRm9ybSkge1xuICAgIHRoaXMuZm9ybSA9IGZvcm07XG4gICAgaWYgKHRoaXMuZm9ybWlvKSB7XG4gICAgICB0aGlzLmZvcm1pby5kZXN0cm95KCk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuZm9ybS50aXRsZSkge1xuICAgICAgdGhpcy5sYWJlbCA9IHRoaXMuZm9ybS50aXRsZTtcbiAgICB9IGVsc2UgaWYgKHRoaXMuZm9ybS5jb21wb25lbnRzICYmIHRoaXMuZm9ybS5jb21wb25lbnRzWzBdKSB7XG4gICAgICB0aGlzLmxhYmVsID0gdGhpcy5mb3JtLmNvbXBvbmVudHNbMF0ubGFiZWw7XG4gICAgfVxuXG4gICAgLy8gQ2xlYXIgb3V0IHRoZSBlbGVtZW50IHRvIHJlbmRlciB0aGUgbmV3IGZvcm0uXG4gICAgaWYgKHRoaXMuZm9ybWlvRWxlbWVudCAmJiB0aGlzLmZvcm1pb0VsZW1lbnQubmF0aXZlRWxlbWVudCkge1xuICAgICAgdGhpcy5mb3JtaW9FbGVtZW50Lm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MID0gJyc7XG4gICAgfVxuICAgIHRoaXMuZm9ybWlvID0gdGhpcy5jcmVhdGVSZW5kZXJlcigpO1xuICAgIHRoaXMuZm9ybWlvLnNldFN1Ym1pc3Npb24odGhpcy5zdWJtaXNzaW9uLCB7XG4gICAgICBmcm9tU3VibWlzc2lvbjogZmFsc2VcbiAgICB9KTtcbiAgICBpZiAodGhpcy5yZW5kZXJPcHRpb25zICYmIHRoaXMucmVuZGVyT3B0aW9ucy52YWxpZGF0ZU9uSW5pdCkge1xuICAgICAgdGhpcy5mb3JtaW8uc2V0VmFsdWUodGhpcy5zdWJtaXNzaW9uLCB7dmFsaWRhdGVPbkluaXQ6IHRydWV9KTtcbiAgICB9XG4gICAgaWYgKHRoaXMudXJsKSB7XG4gICAgICB0aGlzLmZvcm1pby5zZXRVcmwodGhpcy51cmwsIHRoaXMuZm9ybWlvT3B0aW9ucyB8fCB7fSk7XG4gICAgfVxuICAgIGlmICh0aGlzLnNyYykge1xuICAgICAgdGhpcy5mb3JtaW8uc2V0VXJsKHRoaXMuc3JjLCB0aGlzLmZvcm1pb09wdGlvbnMgfHwge30pO1xuICAgIH1cbiAgICB0aGlzLmZvcm1pby5ub3N1Ym1pdCA9IHRydWU7XG4gICAgdGhpcy5mb3JtaW8ub24oJ3ByZXZQYWdlJywgKGRhdGE6IGFueSkgPT4gdGhpcy5uZ1pvbmUucnVuKCgpID0+IHRoaXMub25QcmV2UGFnZShkYXRhKSkpO1xuICAgIHRoaXMuZm9ybWlvLm9uKCduZXh0UGFnZScsIChkYXRhOiBhbnkpID0+IHRoaXMubmdab25lLnJ1bigoKSA9PiB0aGlzLm9uTmV4dFBhZ2UoZGF0YSkpKTtcbiAgICB0aGlzLmZvcm1pby5vbignY2hhbmdlJywgKHZhbHVlOiBhbnksIGZsYWdzOiBhbnksIGlzTW9kaWZpZWQ6IGJvb2xlYW4pID0+IHRoaXMubmdab25lLnJ1bigoKSA9PiB0aGlzLm9uQ2hhbmdlKHZhbHVlLCBmbGFncywgaXNNb2RpZmllZCkpKTtcbiAgICB0aGlzLmZvcm1pby5vbigncm93QWRkJywgKGNvbXBvbmVudDogYW55KSA9PiAgdGhpcy5uZ1pvbmUucnVuKCgpID0+IHRoaXMucm93QWRkLmVtaXQoY29tcG9uZW50KSkpO1xuICAgIHRoaXMuZm9ybWlvLm9uKCdyb3dBZGRlZCcsIChkYXRhOiBhbnksIGNvbXBvbmVudDogYW55KSA9PiAgdGhpcy5uZ1pvbmUucnVuKCgpID0+IHRoaXMucm93QWRkZWQuZW1pdCh7Y29tcG9uZW50LCByb3c6IGRhdGF9KSkpO1xuICAgIHRoaXMuZm9ybWlvLm9uKCdyb3dFZGl0JywgKGRhdGE6IGFueSwgcm93SW5kZXg6IG51bWJlciwgaW5kZXg6IG51bWJlciwgY29tcG9uZW50OiBhbnkpID0+ICB0aGlzLm5nWm9uZS5ydW4oKCkgPT4gdGhpcy5yb3dFZGl0LmVtaXQoe2NvbXBvbmVudCwgcm93OiBkYXRhLCByb3dJbmRleCwgaW5kZXh9KSkpO1xuICAgIHRoaXMuZm9ybWlvLm9uKCdyb3dFZGl0ZWQnLCAoZGF0YTogYW55LCByb3dJbmRleDogbnVtYmVyLCBjb21wb25lbnQ6IGFueSkgPT4gIHRoaXMubmdab25lLnJ1bigoKSA9PiB0aGlzLnJvd0VkaXRlZC5lbWl0KHtjb21wb25lbnQsIHJvdzogZGF0YSwgcm93SW5kZXh9KSkpO1xuICAgIHRoaXMuZm9ybWlvLm9uKCdyb3dEZWxldGUnLCAoZGF0YTogYW55LCByb3dJbmRleDogbnVtYmVyLCBpbmRleDogbnVtYmVyLCBjb21wb25lbnQ6IGFueSkgPT4gIHRoaXMubmdab25lLnJ1bigoKSA9PiB0aGlzLnJvd0RlbGV0ZS5lbWl0KHtjb21wb25lbnQsIHJvdzogZGF0YSwgcm93SW5kZXgsIGluZGV4fSkpKTtcbiAgICB0aGlzLmZvcm1pby5vbigncm93Q2xpY2snLCAocm93OiBhbnksIHJvd0luZGV4OiBudW1iZXIsIGluZGV4OiBudW1iZXIsY29tcG9uZW50OiBhbnkpID0+ICB0aGlzLm5nWm9uZS5ydW4oKCkgPT4gdGhpcy5yb3dDbGljay5lbWl0KHtjb21wb25lbnQsIHJvdywgcm93SW5kZXgsIGluZGV4fSkpKTtcbiAgICB0aGlzLmZvcm1pby5vbigncm93U2VsZWN0Q2hhbmdlJywgKHNlbGVjdGVkUm93czogYW55W10sIGNvbXBvbmVudDogYW55KSA9PiAgdGhpcy5uZ1pvbmUucnVuKCgpID0+IHRoaXMucm93U2VsZWN0Q2hhbmdlLmVtaXQoe3NlbGVjdGVkUm93cywgY29tcG9uZW50fSkpKTtcbiAgICB0aGlzLmZvcm1pby5vbignY3VzdG9tRXZlbnQnLCAoZXZlbnQ6IGFueSkgPT5cbiAgICAgIHRoaXMubmdab25lLnJ1bigoKSA9PiB0aGlzLmN1c3RvbUV2ZW50LmVtaXQoZXZlbnQpKVxuICAgICk7XG5cbiAgICBbJ2ZpbGVVcGxvYWRpbmdTdGFydCcsICdmaWxlVXBsb2FkaW5nRW5kJ10uZm9yRWFjaCgoZXZlbnROYW1lLCBpbmRleCkgPT4ge1xuICAgICAgY29uc3Qgc3RhdHVzID0gISFpbmRleCA/ICdlbmQnIDogJ3N0YXJ0JztcbiAgICAgIHRoaXMuZm9ybWlvLm9uKGV2ZW50TmFtZSwgKCkgPT5cbiAgICAgICAgdGhpcy5uZ1pvbmUucnVuKCgpID0+IHRoaXMuZmlsZVVwbG9hZGluZ1N0YXR1cy5lbWl0KHN0YXR1cykpXG4gICAgICApO1xuICAgIH0pO1xuXG4gICAgdGhpcy5mb3JtaW8ub24oJ3N1Ym1pdCcsIChzdWJtaXNzaW9uOiBhbnksIHNhdmVkOiBib29sZWFuKSA9PlxuICAgICAgdGhpcy5uZ1pvbmUucnVuKCgpID0+IHRoaXMuc3VibWl0Rm9ybShzdWJtaXNzaW9uLCBzYXZlZCkpXG4gICAgKTtcbiAgICB0aGlzLmZvcm1pby5vbignZXJyb3InLCAoZXJyOiBhbnkpID0+IHRoaXMubmdab25lLnJ1bigoKSA9PiB7XG4gICAgICB0aGlzLnN1Ym1pc3Npb25TdWNjZXNzID0gZmFsc2U7XG4gICAgICByZXR1cm4gdGhpcy5vbkVycm9yKGVycik7XG4gICAgfSkpO1xuICAgIHRoaXMuZm9ybWlvLm9uKCdyZW5kZXInLCAoKSA9PiB0aGlzLm5nWm9uZS5ydW4oKCkgPT4gdGhpcy5yZW5kZXIuZW1pdCgpKSk7XG4gICAgdGhpcy5mb3JtaW8ub24oJ2Zvcm1Mb2FkJywgKGxvYWRlZEZvcm06IGFueSkgPT5cbiAgICAgIHRoaXMubmdab25lLnJ1bigoKSA9PiB0aGlzLmZvcm1Mb2FkLmVtaXQobG9hZGVkRm9ybSkpXG4gICAgKTtcblxuICAgIHJldHVybiB0aGlzLmZvcm1pby5yZWFkeS50aGVuKCgpID0+IHtcbiAgICAgIHRoaXMubmdab25lLnJ1bigoKSA9PiB7XG4gICAgICAgIHRoaXMuaXNMb2FkaW5nID0gZmFsc2U7XG4gICAgICAgIHRoaXMucmVhZHkuZW1pdCh0aGlzKTtcbiAgICAgICAgdGhpcy5mb3JtaW9SZWFkeVJlc29sdmUodGhpcy5mb3JtaW8pO1xuICAgICAgICBpZiAodGhpcy5mb3JtaW8uc3VibWlzc2lvblJlYWR5KSB7XG4gICAgICAgICAgdGhpcy5mb3JtaW8uc3VibWlzc2lvblJlYWR5LnRoZW4oKHN1Ym1pc3Npb24pID0+IHtcbiAgICAgICAgICAgIHRoaXMuc3VibWlzc2lvbkxvYWQuZW1pdChzdWJtaXNzaW9uKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICByZXR1cm4gdGhpcy5mb3JtaW87XG4gICAgfSk7XG4gIH1cblxuICBpbml0aWFsaXplKCkge1xuICAgIGlmICh0aGlzLmluaXRpYWxpemVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgZXh0cmFUYWdzID0gdGhpcy5jdXN0b21UYWdzID8gdGhpcy5jdXN0b21UYWdzLnRhZ3MgOiBbXTtcbiAgICBjb25zdCBkZWZhdWx0T3B0aW9uczogRm9ybWlvT3B0aW9ucyA9IHtcbiAgICAgIGVycm9yczoge1xuICAgICAgICBtZXNzYWdlOiAnUGxlYXNlIGZpeCB0aGUgZm9sbG93aW5nIGVycm9ycyBiZWZvcmUgc3VibWl0dGluZy4nXG4gICAgICB9LFxuICAgICAgYWxlcnRzOiB7XG4gICAgICAgIHN1Ym1pdE1lc3NhZ2U6ICdTdWJtaXNzaW9uIENvbXBsZXRlLidcbiAgICAgIH0sXG4gICAgICBkaXNhYmxlQWxlcnRzOiBmYWxzZSxcbiAgICAgIGhvb2tzOiB7XG4gICAgICAgIGJlZm9yZVN1Ym1pdDogbnVsbFxuICAgICAgfSxcbiAgICAgIHNhbml0aXplQ29uZmlnOiB7XG4gICAgICAgIGFkZFRhZ3M6IGV4dHJhVGFnc1xuICAgICAgfSxcbiAgICAgIGFsZXJ0c1Bvc2l0aW9uOiBBbGVydHNQb3NpdGlvbi50b3AsXG4gICAgfTtcbiAgICB0aGlzLm9wdGlvbnMgPSBPYmplY3QuYXNzaWduKGRlZmF1bHRPcHRpb25zLCB0aGlzLm9wdGlvbnMpO1xuICAgIGlmICh0aGlzLm9wdGlvbnMuZGlzYWJsZUFsZXJ0cykge1xuICAgICAgdGhpcy5vcHRpb25zLmFsZXJ0c1Bvc2l0aW9uID0gQWxlcnRzUG9zaXRpb24ubm9uZTtcbiAgICB9XG4gICAgdGhpcy5pbml0aWFsaXplZCA9IHRydWU7XG4gIH1cblxuICBuZ09uSW5pdCgpIHtcbiAgICBFdmFsdWF0b3Iubm9ldmFsID0gdGhpcy5ub2V2YWw7XG4gICAgdGhpcy5pbml0aWFsaXplKCk7XG5cbiAgICBpZiAodGhpcy5sYW5ndWFnZSkge1xuICAgICAgaWYgKHR5cGVvZiB0aGlzLmxhbmd1YWdlID09PSAnc3RyaW5nJykge1xuICAgICAgICB0aGlzLmZvcm1pby5sYW5ndWFnZSA9IHRoaXMubGFuZ3VhZ2U7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmxhbmd1YWdlLnN1YnNjcmliZSgobGFuZzogc3RyaW5nKSA9PiB7XG4gICAgICAgICAgdGhpcy5mb3JtaW8ubGFuZ3VhZ2UgPSBsYW5nO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodGhpcy5yZWZyZXNoKSB7XG4gICAgICB0aGlzLnJlZnJlc2guc3Vic2NyaWJlKChyZWZyZXNoOiBGb3JtaW9SZWZyZXNoVmFsdWUpID0+XG4gICAgICAgIHRoaXMub25SZWZyZXNoKHJlZnJlc2gpXG4gICAgICApO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmVycm9yKSB7XG4gICAgICB0aGlzLmVycm9yLnN1YnNjcmliZSgoZXJyOiBhbnkpID0+IHRoaXMub25FcnJvcihlcnIpKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5zdWNjZXNzKSB7XG4gICAgICB0aGlzLnN1Y2Nlc3Muc3Vic2NyaWJlKChtZXNzYWdlOiBzdHJpbmcpID0+IHtcbiAgICAgICAgdGhpcy5hbGVydHMuc2V0QWxlcnQoe1xuICAgICAgICAgIHR5cGU6ICdzdWNjZXNzJyxcbiAgICAgICAgICBtZXNzYWdlOiBtZXNzYWdlIHx8IGdldCh0aGlzLm9wdGlvbnMsICdhbGVydHMuc3VibWl0TWVzc2FnZScpXG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuc3JjKSB7XG4gICAgICBpZiAoIXRoaXMuc2VydmljZSkge1xuICAgICAgICB0aGlzLnNlcnZpY2UgPSBuZXcgRm9ybWlvU2VydmljZSh0aGlzLnNyYyk7XG4gICAgICB9XG4gICAgICB0aGlzLmlzTG9hZGluZyA9IHRydWU7XG4gICAgICB0aGlzLnNlcnZpY2UubG9hZEZvcm0oeyBwYXJhbXM6IHsgbGl2ZTogMSB9IH0pLnN1YnNjcmliZShcbiAgICAgICAgKGZvcm06IEZvcm1pb0Zvcm0pID0+IHtcbiAgICAgICAgICBpZiAoZm9ybSAmJiBmb3JtLmNvbXBvbmVudHMpIHtcbiAgICAgICAgICAgIHRoaXMubmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+IHtcbiAgICAgICAgICAgICAgdGhpcy5zZXRGb3JtKGZvcm0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gaWYgYSBzdWJtaXNzaW9uIGlzIGFsc28gcHJvdmlkZWQuXG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgaXNFbXB0eSh0aGlzLnN1Ym1pc3Npb24pICYmXG4gICAgICAgICAgICB0aGlzLnNlcnZpY2UgJiZcbiAgICAgICAgICAgIHRoaXMuc2VydmljZS5mb3JtaW8uc3VibWlzc2lvbklkXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICB0aGlzLnNlcnZpY2UubG9hZFN1Ym1pc3Npb24oKS5zdWJzY3JpYmUoXG4gICAgICAgICAgICAgIChzdWJtaXNzaW9uOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5yZWFkT25seSkge1xuICAgICAgICAgICAgICAgICAgdGhpcy5mb3JtaW8ub3B0aW9ucy5yZWFkT25seSA9IHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMuc3VibWlzc2lvbiA9IHRoaXMuZm9ybWlvLnN1Ym1pc3Npb24gPSBzdWJtaXNzaW9uO1xuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBlcnIgPT4gdGhpcy5vbkVycm9yKGVycilcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBlcnIgPT4gdGhpcy5vbkVycm9yKGVycilcbiAgICAgICk7XG4gICAgfVxuICAgIGlmICh0aGlzLnVybCAmJiAhdGhpcy5zZXJ2aWNlKSB7XG4gICAgICB0aGlzLnNlcnZpY2UgPSBuZXcgRm9ybWlvU2VydmljZSh0aGlzLnVybCk7XG4gICAgfVxuICB9XG5cbiAgbmdPbkRlc3Ryb3koKSB7XG4gICAgaWYgKHRoaXMuZm9ybWlvKSB7XG4gICAgICB0aGlzLmZvcm1pby5kZXN0cm95KCk7XG4gICAgfVxuICB9XG5cbiAgb25SZWZyZXNoKHJlZnJlc2g6IEZvcm1pb1JlZnJlc2hWYWx1ZSkge1xuICAgIHRoaXMuZm9ybWlvUmVhZHkudGhlbigoKSA9PiB7XG4gICAgICBpZiAocmVmcmVzaC5mb3JtKSB7XG4gICAgICAgIHRoaXMuZm9ybWlvLnNldEZvcm0ocmVmcmVzaC5mb3JtKS50aGVuKCgpID0+IHtcbiAgICAgICAgICBpZiAocmVmcmVzaC5zdWJtaXNzaW9uKSB7XG4gICAgICAgICAgICB0aGlzLmZvcm1pby5zZXRTdWJtaXNzaW9uKHJlZnJlc2guc3VibWlzc2lvbik7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSBpZiAocmVmcmVzaC5zdWJtaXNzaW9uKSB7XG4gICAgICAgIHRoaXMuZm9ybWlvLnNldFN1Ym1pc3Npb24ocmVmcmVzaC5zdWJtaXNzaW9uKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHN3aXRjaCAocmVmcmVzaC5wcm9wZXJ0eSkge1xuICAgICAgICAgIGNhc2UgJ3N1Ym1pc3Npb24nOlxuICAgICAgICAgICAgdGhpcy5mb3JtaW8uc3VibWlzc2lvbiA9IHJlZnJlc2gudmFsdWU7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlICdmb3JtJzpcbiAgICAgICAgICAgIHRoaXMuZm9ybWlvLmZvcm0gPSByZWZyZXNoLnZhbHVlO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IGFueSkge1xuICAgIEV2YWx1YXRvci5ub2V2YWwgPSB0aGlzLm5vZXZhbDtcbiAgICB0aGlzLmluaXRpYWxpemUoKTtcblxuICAgIGlmIChjaGFuZ2VzLmZvcm0gJiYgY2hhbmdlcy5mb3JtLmN1cnJlbnRWYWx1ZSkge1xuICAgICAgdGhpcy5uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT4ge1xuICAgICAgICB0aGlzLnNldEZvcm0oY2hhbmdlcy5mb3JtLmN1cnJlbnRWYWx1ZSk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICB0aGlzLmZvcm1pb1JlYWR5LnRoZW4oKCkgPT4ge1xuICAgICAgaWYgKGNoYW5nZXMuc3VibWlzc2lvbiAmJiBjaGFuZ2VzLnN1Ym1pc3Npb24uY3VycmVudFZhbHVlKSB7XG4gICAgICAgIHRoaXMuZm9ybWlvLnNldFN1Ym1pc3Npb24oY2hhbmdlcy5zdWJtaXNzaW9uLmN1cnJlbnRWYWx1ZSwge1xuICAgICAgICAgIGZyb21TdWJtaXNzaW9uOiAhY2hhbmdlcy5zdWJtaXNzaW9uLmZpcnN0Q2hhbmdlXG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICBpZiAoY2hhbmdlcy5oaWRlQ29tcG9uZW50cyAmJiBjaGFuZ2VzLmhpZGVDb21wb25lbnRzLmN1cnJlbnRWYWx1ZSkge1xuICAgICAgICBjb25zdCBoaWRkZW5Db21wb25lbnRzID0gY2hhbmdlcy5oaWRlQ29tcG9uZW50cy5jdXJyZW50VmFsdWU7XG4gICAgICAgIHRoaXMuZm9ybWlvLm9wdGlvbnMuaGlkZSA9IGhpZGRlbkNvbXBvbmVudHM7XG4gICAgICAgIHRoaXMuZm9ybWlvLmV2ZXJ5Q29tcG9uZW50KChjb21wb25lbnQpID0+IHtcbiAgICAgICAgICBjb21wb25lbnQub3B0aW9ucy5oaWRlID0gaGlkZGVuQ29tcG9uZW50cztcbiAgICAgICAgICBpZiAoaGlkZGVuQ29tcG9uZW50cy5pbmNsdWRlcyhjb21wb25lbnQuY29tcG9uZW50LmtleSkpIHtcbiAgICAgICAgICAgIGNvbXBvbmVudC52aXNpYmxlID0gZmFsc2U7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIG9uUHJldlBhZ2UoZGF0YTogYW55KSB7XG4gICAgdGhpcy5hbGVydHMuc2V0QWxlcnRzKFtdKTtcbiAgICB0aGlzLnByZXZQYWdlLmVtaXQoZGF0YSk7XG4gIH1cblxuICBvbk5leHRQYWdlKGRhdGE6IGFueSkge1xuICAgIHRoaXMuYWxlcnRzLnNldEFsZXJ0cyhbXSk7XG4gICAgdGhpcy5uZXh0UGFnZS5lbWl0KGRhdGEpO1xuICB9XG5cbiAgb25TdWJtaXQoc3VibWlzc2lvbjogYW55LCBzYXZlZDogYm9vbGVhbiwgbm9lbWl0PzogYm9vbGVhbikge1xuICAgIHRoaXMuc3VibWl0dGluZyA9IGZhbHNlO1xuICAgIHRoaXMuc3VibWlzc2lvblN1Y2Nlc3MgPSB0cnVlO1xuXG4gICAgdGhpcy5mb3JtaW8uc2V0VmFsdWUoZmFzdENsb25lRGVlcChzdWJtaXNzaW9uKSwge1xuICAgICAgbm9WYWxpZGF0ZTogdHJ1ZSxcbiAgICAgIG5vQ2hlY2s6IHRydWVcbiAgICB9KTtcblxuICAgIGlmIChzYXZlZCkge1xuICAgICAgdGhpcy5mb3JtaW8uZW1pdCgnc3VibWl0RG9uZScsIHN1Ym1pc3Npb24pO1xuICAgIH1cbiAgICBpZiAoIW5vZW1pdCkge1xuICAgICAgdGhpcy5zdWJtaXQuZW1pdChzdWJtaXNzaW9uKTtcbiAgICB9XG4gICAgaWYgKCF0aGlzLnN1Y2Nlc3MpIHtcbiAgICAgIHRoaXMuYWxlcnRzLnNldEFsZXJ0KHtcbiAgICAgICAgdHlwZTogJ3N1Y2Nlc3MnLFxuICAgICAgICBtZXNzYWdlOiBnZXQodGhpcy5vcHRpb25zLCAnYWxlcnRzLnN1Ym1pdE1lc3NhZ2UnKVxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgb25FcnJvcihlcnI6IGFueSkge1xuICAgIHRoaXMuYWxlcnRzLnNldEFsZXJ0cyhbXSk7XG4gICAgdGhpcy5zdWJtaXR0aW5nID0gZmFsc2U7XG4gICAgdGhpcy5pc0xvYWRpbmcgPSBmYWxzZTtcblxuICAgIGlmICghZXJyKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gTWFrZSBzdXJlIGl0IGlzIGFuIGFycmF5LlxuICAgIGNvbnN0IGVycm9ycyA9IEFycmF5LmlzQXJyYXkoZXJyKSA/IGVyciA6IFtlcnJdO1xuXG4gICAgLy8gRW1pdCB0aGVzZSBlcnJvcnMgYWdhaW4uXG4gICAgdGhpcy5lcnJvckNoYW5nZS5lbWl0KGVycm9ycyk7XG5cbiAgICBpZiAoZXJyLnNpbGVudCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmZvcm1pbyAmJiBlcnJvcnMubGVuZ3RoKSB7XG4gICAgICB0aGlzLmZvcm1pby5lbWl0KCdzdWJtaXRFcnJvcicsIGVycm9ycyk7XG4gICAgfVxuXG4gICAgLy8gSXRlcmF0ZSB0aHJvdWdoIGVhY2ggb25lIGFuZCBzZXQgdGhlIGFsZXJ0cyBhcnJheS5cbiAgICBlcnJvcnMuZm9yRWFjaCgoZXJyb3I6IGFueSkgPT4ge1xuICAgICAgY29uc3Qge1xuICAgICAgICBtZXNzYWdlLFxuICAgICAgICBwYXRocyxcbiAgICAgIH0gPSBlcnJvclxuICAgICAgICA/IGVycm9yLmRldGFpbHNcbiAgICAgICAgICA/IHtcbiAgICAgICAgICAgIG1lc3NhZ2U6IGVycm9yLmRldGFpbHMubWFwKChkZXRhaWwpID0+IGRldGFpbC5tZXNzYWdlKSxcbiAgICAgICAgICAgIHBhdGhzOiBlcnJvci5kZXRhaWxzLm1hcCgoZGV0YWlsKSA9PiBkZXRhaWwucGF0aCksXG4gICAgICAgICAgfVxuICAgICAgICAgIDoge1xuICAgICAgICAgICAgbWVzc2FnZTogZXJyb3IubWVzc2FnZSB8fCBlcnJvci50b1N0cmluZygpLFxuICAgICAgICAgICAgcGF0aHM6IGVycm9yLnBhdGggPyBbZXJyb3IucGF0aF0gOiBbXSxcbiAgICAgICAgICB9XG4gICAgICAgIDoge1xuICAgICAgICAgIG1lc3NhZ2U6ICcnLFxuICAgICAgICAgIHBhdGhzOiBbXSxcbiAgICAgICAgfTtcblxuICAgICAgbGV0IHNob3VsZEVycm9yRGlzcGxheSA9IHRydWU7XG5cbiAgICAgIGlmICh0aGlzLmZvcm1pbykge1xuICAgICAgICBwYXRocy5mb3JFYWNoKChwYXRoLCBpbmRleCkgPT4ge1xuICAgICAgICAgIGNvbnN0IGNvbXBvbmVudCA9IHRoaXMuZm9ybWlvLmdldENvbXBvbmVudChwYXRoKTtcbiAgICAgICAgICBpZiAoY29tcG9uZW50KSB7XG4gICAgICAgICAgICBjb25zdCBjb21wb25lbnRzID0gQXJyYXkuaXNBcnJheShjb21wb25lbnQpID8gY29tcG9uZW50IDogW2NvbXBvbmVudF07XG4gICAgICAgICAgICBjb25zdCBtZXNzYWdlVGV4dCA9IEFycmF5LmlzQXJyYXkobWVzc2FnZSkgPyBtZXNzYWdlW2luZGV4XSA6IG1lc3NhZ2U7XG4gICAgICAgICAgICBjb21wb25lbnRzLmZvckVhY2goKGNvbXApID0+IGNvbXAuc2V0Q3VzdG9tVmFsaWRpdHkobWVzc2FnZVRleHQsIHRydWUpKTtcbiAgICAgICAgICAgIHRoaXMuYWxlcnRzLmFkZEFsZXJ0KHtcbiAgICAgICAgICAgICAgdHlwZTogJ2RhbmdlcicsXG4gICAgICAgICAgICAgIG1lc3NhZ2U6IG1lc3NhZ2VbaW5kZXhdLFxuICAgICAgICAgICAgICBjb21wb25lbnQsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHNob3VsZEVycm9yRGlzcGxheSA9IGZhbHNlO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgaWYgKCh3aW5kb3cgYXMgYW55KS5WUEFUX0VOQUJMRUQpIHtcbiAgICAgICAgICBpZiAodHlwZW9mIGVycm9yID09PSdzdHJpbmcnICYmIHRoaXMuZm9ybWlvLmNvbXBvbmVudHMpIHtcbiAgICAgICAgICAgIHRoaXMuZm9ybWlvLmNvbXBvbmVudHMuZm9yRWFjaCgoY29tcCkgPT4ge1xuICAgICAgICAgICAgICBpZiAoY29tcCAmJiBjb21wLnR5cGUgIT09ICdidXR0b24nKSB7XG4gICAgICAgICAgICAgICAgY29tcC5zZXRDdXN0b21WYWxpZGl0eShtZXNzYWdlLCB0cnVlKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCF0aGlzLm5vQWxlcnRzKSB7XG4gICAgICAgICAgdGhpcy5mb3JtaW8uc2hvd0Vycm9ycygpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChzaG91bGRFcnJvckRpc3BsYXkpIHtcbiAgICAgICAgdGhpcy5hbGVydHMuYWRkQWxlcnQoe1xuICAgICAgICAgIHR5cGU6ICdkYW5nZXInLFxuICAgICAgICAgIG1lc3NhZ2UsXG4gICAgICAgICAgY29tcG9uZW50OiBlcnJvci5jb21wb25lbnQsXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgZm9jdXNPbkNvbXBvbmV0KGtleTogYW55KSB7XG4gICAgaWYgKHRoaXMuZm9ybWlvKSB7XG4gICAgICB0aGlzLmZvcm1pby5mb2N1c09uQ29tcG9uZW50KGtleSk7XG4gICAgfVxuICB9XG5cbiAgc3VibWl0RXhlY3V0ZShzdWJtaXNzaW9uOiBvYmplY3QsIHNhdmVkID0gZmFsc2UpIHtcbiAgICBpZiAodGhpcy5zZXJ2aWNlICYmICF0aGlzLnVybCAmJiAhc2F2ZWQpIHtcbiAgICAgIHRoaXMuc2VydmljZVxuICAgICAgICAuc2F2ZVN1Ym1pc3Npb24oc3VibWlzc2lvbilcbiAgICAgICAgLnN1YnNjcmliZShcbiAgICAgICAgICAoc3ViOiB7fSkgPT4gdGhpcy5vblN1Ym1pdChzdWIsIHRydWUpLFxuICAgICAgICAgIGVyciA9PiB0aGlzLm9uRXJyb3IoZXJyKVxuICAgICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLm9uU3VibWl0KHN1Ym1pc3Npb24sIGZhbHNlKTtcbiAgICB9XG4gIH1cblxuICBzdWJtaXRGb3JtKHN1Ym1pc3Npb246IGFueSwgc2F2ZWQgPSBmYWxzZSkge1xuICAgIC8vIEtlZXAgZG91YmxlIHN1Ym1pdHMgZnJvbSBvY2N1cnJpbmcuLi5cbiAgICBpZiAodGhpcy5zdWJtaXR0aW5nKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuZm9ybWlvLnNldE1ldGFkYXRhKHN1Ym1pc3Npb24pO1xuICAgIHRoaXMuc3VibWlzc2lvblN1Y2Nlc3MgPSBmYWxzZTtcbiAgICB0aGlzLnN1Ym1pdHRpbmcgPSB0cnVlO1xuICAgIHRoaXMuYmVmb3JlU3VibWl0LmVtaXQoc3VibWlzc2lvbik7XG5cbiAgICAvLyBpZiB0aGV5IHByb3ZpZGUgYSBiZWZvcmVTdWJtaXQgaG9vaywgdGhlbiBhbGxvdyB0aGVtIHRvIGFsdGVyIHRoZSBzdWJtaXNzaW9uIGFzeW5jaHJvbm91c2x5XG4gICAgLy8gb3IgZXZlbiBwcm92aWRlIGEgY3VzdG9tIEVycm9yIG1ldGhvZC5cbiAgICBjb25zdCBiZWZvcmVTdWJtaXQgPSBnZXQodGhpcy5vcHRpb25zLCAnaG9va3MuYmVmb3JlU3VibWl0Jyk7XG4gICAgaWYgKGJlZm9yZVN1Ym1pdCkge1xuICAgICAgYmVmb3JlU3VibWl0KHN1Ym1pc3Npb24sIChlcnI6IEZvcm1pb0Vycm9yLCBzdWI6IG9iamVjdCkgPT4ge1xuICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgdGhpcy5vbkVycm9yKGVycik7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuc3VibWl0RXhlY3V0ZShzdWIsIHNhdmVkKTtcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnN1Ym1pdEV4ZWN1dGUoc3VibWlzc2lvbiwgc2F2ZWQpO1xuICAgIH1cbiAgfVxuXG4gIG9uQ2hhbmdlKHZhbHVlOiBhbnksIGZsYWdzOiBhbnksIGlzTW9kaWZpZWQ6IGJvb2xlYW4pIHtcbiAgICBpZiAodGhpcy53YXRjaFN1Ym1pc3Npb25FcnJvcnMgJiYgIXRoaXMuc3VibWlzc2lvblN1Y2Nlc3MpIHtcbiAgICAgIGNvbnN0IGVycm9ycyA9IGdldCh0aGlzLCAnZm9ybWlvLmVycm9ycycsIFtdKTtcbiAgICAgIGNvbnN0IGFsZXJ0cyA9IGdldCh0aGlzLCAnYWxlcnRzLmFsZXJ0cycsIFtdKTtcbiAgICAgIGNvbnN0IHN1Ym1pdHRlZCA9IGdldCh0aGlzLCAnZm9ybWlvLnN1Ym1pdHRlZCcsIGZhbHNlKTtcbiAgICAgIGlmIChzdWJtaXR0ZWQgJiYgKGVycm9ycy5sZW5ndGggfHwgYWxlcnRzLmxlbmd0aCkpIHtcbiAgICAgICAgdGhpcy5vbkVycm9yKGVycm9ycyk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmNoYW5nZS5lbWl0KHsuLi52YWx1ZSwgZmxhZ3MsIGlzTW9kaWZpZWR9KTtcbiAgfVxufVxuIl19
|
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
import { Component } from '@angular/core';
|
|
2
|
-
import * as i0 from "@angular/core";
|
|
3
|
-
import * as i1 from "@angular/router";
|
|
4
|
-
export class FormioAuthComponent {
|
|
5
|
-
}
|
|
6
|
-
FormioAuthComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.1", ngImport: i0, type: FormioAuthComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
7
|
-
FormioAuthComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.0.1", type: FormioAuthComponent, selector: "ng-component", ngImport: i0, template: "<div class=\"card card-primary panel panel-default\">\n <div class=\"card-header panel-heading\">\n <ul class=\"nav nav-tabs card-header-tabs\">\n <li class=\"nav-item\" role=\"presentation\" routerLinkActive=\"active\"><a class=\"nav-link\" routerLink=\"login\" routerLinkActive=\"active\">Login</a></li>\n <li class=\"nav-item\" role=\"presentation\" routerLinkActive=\"active\"><a class=\"nav-link\" routerLink=\"register\" routerLinkActive=\"active\">Register</a></li>\n </ul>\n </div>\n <div class=\"card-body panel-body\">\n <router-outlet></router-outlet>\n </div>\n</div>\n", dependencies: [{ kind: "directive", type: i1.RouterOutlet, selector: "router-outlet", inputs: ["name"], outputs: ["activate", "deactivate", "attach", "detach"], exportAs: ["outlet"] }, { kind: "directive", type: i1.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "directive", type: i1.RouterLinkActive, selector: "[routerLinkActive]", inputs: ["routerLinkActiveOptions", "ariaCurrentWhenActive", "routerLinkActive"], outputs: ["isActiveChange"], exportAs: ["routerLinkActive"] }] });
|
|
8
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.1", ngImport: i0, type: FormioAuthComponent, decorators: [{
|
|
9
|
-
type: Component,
|
|
10
|
-
args: [{ template: "<div class=\"card card-primary panel panel-default\">\n <div class=\"card-header panel-heading\">\n <ul class=\"nav nav-tabs card-header-tabs\">\n <li class=\"nav-item\" role=\"presentation\" routerLinkActive=\"active\"><a class=\"nav-link\" routerLink=\"login\" routerLinkActive=\"active\">Login</a></li>\n <li class=\"nav-item\" role=\"presentation\" routerLinkActive=\"active\"><a class=\"nav-link\" routerLink=\"register\" routerLinkActive=\"active\">Register</a></li>\n </ul>\n </div>\n <div class=\"card-body panel-body\">\n <router-outlet></router-outlet>\n </div>\n</div>\n" }]
|
|
11
|
-
}] });
|
|
12
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9hbmd1bGFyLWZvcm1pby9hdXRoL3NyYy9hdXRoLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uL3Byb2plY3RzL2FuZ3VsYXItZm9ybWlvL2F1dGgvc3JjL2F1dGguY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQzs7O0FBSTFDLE1BQU0sT0FBTyxtQkFBbUI7O2dIQUFuQixtQkFBbUI7b0dBQW5CLG1CQUFtQixvRENKaEMsOGxCQVdBOzJGRFBhLG1CQUFtQjtrQkFIL0IsU0FBUyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuQENvbXBvbmVudCh7XG4gIHRlbXBsYXRlVXJsOiAnLi9hdXRoLmNvbXBvbmVudC5odG1sJ1xufSlcbmV4cG9ydCBjbGFzcyBGb3JtaW9BdXRoQ29tcG9uZW50IHt9XG4iLCI8ZGl2IGNsYXNzPVwiY2FyZCBjYXJkLXByaW1hcnkgcGFuZWwgcGFuZWwtZGVmYXVsdFwiPlxuICA8ZGl2IGNsYXNzPVwiY2FyZC1oZWFkZXIgcGFuZWwtaGVhZGluZ1wiPlxuICAgIDx1bCBjbGFzcz1cIm5hdiBuYXYtdGFicyBjYXJkLWhlYWRlci10YWJzXCI+XG4gICAgICA8bGkgY2xhc3M9XCJuYXYtaXRlbVwiIHJvbGU9XCJwcmVzZW50YXRpb25cIiByb3V0ZXJMaW5rQWN0aXZlPVwiYWN0aXZlXCI+PGEgY2xhc3M9XCJuYXYtbGlua1wiIHJvdXRlckxpbms9XCJsb2dpblwiIHJvdXRlckxpbmtBY3RpdmU9XCJhY3RpdmVcIj5Mb2dpbjwvYT48L2xpPlxuICAgICAgPGxpIGNsYXNzPVwibmF2LWl0ZW1cIiByb2xlPVwicHJlc2VudGF0aW9uXCIgcm91dGVyTGlua0FjdGl2ZT1cImFjdGl2ZVwiPjxhIGNsYXNzPVwibmF2LWxpbmtcIiByb3V0ZXJMaW5rPVwicmVnaXN0ZXJcIiByb3V0ZXJMaW5rQWN0aXZlPVwiYWN0aXZlXCI+UmVnaXN0ZXI8L2E+PC9saT5cbiAgICA8L3VsPlxuICA8L2Rpdj5cbiAgPGRpdiBjbGFzcz1cImNhcmQtYm9keSBwYW5lbC1ib2R5XCI+XG4gICAgPHJvdXRlci1vdXRsZXQ+PC9yb3V0ZXItb3V0bGV0PlxuICA8L2Rpdj5cbjwvZGl2PlxuIl19
|