@ngx-formly/core 6.3.12 → 7.0.0-alpha.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/README.md +1 -0
- package/esm2022/json-schema/formly-json-schema.service.mjs +628 -0
- package/esm2022/lib/components/formly.field.mjs +292 -0
- package/esm2022/lib/components/formly.form.mjs +164 -0
- package/{esm2020 → esm2022}/lib/components/formly.template.mjs +8 -8
- package/esm2022/lib/core.config.mjs +36 -0
- package/esm2022/lib/core.mjs +20 -0
- package/esm2022/lib/core.module.mjs +74 -0
- package/esm2022/lib/extensions/core/core.mjs +148 -0
- package/esm2022/lib/extensions/field-expression/field-expression.mjs +250 -0
- package/esm2022/lib/extensions/field-expression/utils.mjs +17 -0
- package/esm2022/lib/extensions/field-form/field-form.mjs +141 -0
- package/esm2022/lib/extensions/field-form/utils.mjs +100 -0
- package/esm2022/lib/extensions/field-validation/field-validation.mjs +135 -0
- package/esm2022/lib/extensions/index.mjs +2 -0
- package/esm2022/lib/models/fieldconfig.cache.mjs +2 -0
- package/esm2022/lib/models/fieldconfig.mjs +2 -0
- package/esm2022/lib/services/formly.builder.mjs +100 -0
- package/esm2022/lib/services/formly.config.mjs +229 -0
- package/esm2022/lib/templates/field-array.type.mjs +84 -0
- package/esm2022/lib/templates/field-template.type.mjs +34 -0
- package/esm2022/lib/templates/field.type.mjs +57 -0
- package/{esm2020 → esm2022}/lib/templates/field.wrapper.mjs +4 -4
- package/esm2022/lib/templates/formly.attributes.mjs +187 -0
- package/{esm2020 → esm2022}/lib/templates/formly.group.mjs +8 -8
- package/esm2022/lib/templates/formly.validation-message.mjs +69 -0
- package/esm2022/lib/utils.mjs +312 -0
- package/esm2022/preset/preset-substitution.extension.mjs +30 -0
- package/esm2022/preset/preset.config.mjs +11 -0
- package/esm2022/preset/preset.module.mjs +18 -0
- package/esm2022/select/select-options.pipe.mjs +100 -0
- package/{esm2020 → esm2022}/select/select.module.mjs +5 -5
- package/esm2022/testing/component-factory.mjs +86 -0
- package/{fesm2020 → fesm2022}/ngx-formly-core-json-schema.mjs +16 -16
- package/fesm2022/ngx-formly-core-json-schema.mjs.map +1 -0
- package/fesm2022/ngx-formly-core-preset.mjs +62 -0
- package/fesm2022/ngx-formly-core-preset.mjs.map +1 -0
- package/{fesm2020 → fesm2022}/ngx-formly-core-select.mjs +7 -7
- package/{fesm2020 → fesm2022}/ngx-formly-core-select.mjs.map +1 -1
- package/{fesm2020 → fesm2022}/ngx-formly-core-testing.mjs +5 -4
- package/fesm2022/ngx-formly-core-testing.mjs.map +1 -0
- package/{fesm2020 → fesm2022}/ngx-formly-core.mjs +1747 -1702
- package/fesm2022/ngx-formly-core.mjs.map +1 -0
- package/lib/components/formly.field.d.ts +5 -1
- package/lib/components/formly.form.d.ts +8 -4
- package/lib/components/formly.template.d.ts +1 -1
- package/lib/core.config.d.ts +10 -0
- package/lib/core.d.ts +4 -3
- package/lib/core.module.d.ts +2 -5
- package/lib/extensions/field-expression/utils.d.ts +1 -1
- package/lib/extensions/index.d.ts +1 -0
- package/lib/models/config.d.ts +1 -1
- package/lib/models/fieldconfig.cache.d.ts +3 -3
- package/lib/models/fieldconfig.d.ts +8 -7
- package/lib/services/formly.builder.d.ts +5 -5
- package/lib/services/formly.config.d.ts +3 -9
- package/lib/templates/field-array.type.d.ts +3 -3
- package/lib/templates/field-template.type.d.ts +1 -1
- package/lib/templates/field.type.d.ts +5 -5
- package/lib/templates/field.wrapper.d.ts +1 -1
- package/lib/templates/formly.attributes.d.ts +1 -1
- package/lib/templates/formly.group.d.ts +1 -1
- package/lib/templates/formly.validation-message.d.ts +1 -1
- package/lib/utils.d.ts +5 -5
- package/package.json +23 -37
- package/preset/preset.config.d.ts +2 -0
- package/select/select-options.pipe.d.ts +1 -1
- package/testing/component-factory.d.ts +2 -2
- package/esm2020/json-schema/formly-json-schema.service.mjs +0 -628
- package/esm2020/lib/components/formly.field.mjs +0 -284
- package/esm2020/lib/components/formly.form.mjs +0 -147
- package/esm2020/lib/core.mjs +0 -19
- package/esm2020/lib/core.module.mjs +0 -91
- package/esm2020/lib/extensions/core/core.mjs +0 -148
- package/esm2020/lib/extensions/field-expression/field-expression.mjs +0 -250
- package/esm2020/lib/extensions/field-expression/utils.mjs +0 -17
- package/esm2020/lib/extensions/field-form/field-form.mjs +0 -141
- package/esm2020/lib/extensions/field-form/utils.mjs +0 -100
- package/esm2020/lib/extensions/field-validation/field-validation.mjs +0 -135
- package/esm2020/lib/models/fieldconfig.cache.mjs +0 -2
- package/esm2020/lib/models/fieldconfig.mjs +0 -2
- package/esm2020/lib/services/formly.builder.mjs +0 -93
- package/esm2020/lib/services/formly.config.mjs +0 -229
- package/esm2020/lib/templates/field-array.type.mjs +0 -84
- package/esm2020/lib/templates/field-template.type.mjs +0 -34
- package/esm2020/lib/templates/field.type.mjs +0 -57
- package/esm2020/lib/templates/formly.attributes.mjs +0 -187
- package/esm2020/lib/templates/formly.validation-message.mjs +0 -69
- package/esm2020/lib/utils.mjs +0 -312
- package/esm2020/preset/preset-substitution.extension.mjs +0 -30
- package/esm2020/preset/preset.module.mjs +0 -32
- package/esm2020/select/select-options.pipe.mjs +0 -100
- package/esm2020/testing/component-factory.mjs +0 -85
- package/fesm2015/ngx-formly-core-json-schema.mjs +0 -615
- package/fesm2015/ngx-formly-core-json-schema.mjs.map +0 -1
- package/fesm2015/ngx-formly-core-preset.mjs +0 -69
- package/fesm2015/ngx-formly-core-preset.mjs.map +0 -1
- package/fesm2015/ngx-formly-core-select.mjs +0 -120
- package/fesm2015/ngx-formly-core-select.mjs.map +0 -1
- package/fesm2015/ngx-formly-core-testing.mjs +0 -87
- package/fesm2015/ngx-formly-core-testing.mjs.map +0 -1
- package/fesm2015/ngx-formly-core.mjs +0 -2417
- package/fesm2015/ngx-formly-core.mjs.map +0 -1
- package/fesm2020/ngx-formly-core-json-schema.mjs.map +0 -1
- package/fesm2020/ngx-formly-core-preset.mjs +0 -67
- package/fesm2020/ngx-formly-core-preset.mjs.map +0 -1
- package/fesm2020/ngx-formly-core-testing.mjs.map +0 -1
- package/fesm2020/ngx-formly-core.mjs.map +0 -1
- package/json-schema/package.json +0 -10
- package/preset/package.json +0 -10
- package/select/package.json +0 -10
- package/testing/package.json +0 -10
- /package/{esm2020 → esm2022}/json-schema/ngx-formly-core-json-schema.mjs +0 -0
- /package/{esm2020 → esm2022}/json-schema/public_api.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/models/config.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/models/index.mjs +0 -0
- /package/{esm2020 → esm2022}/ngx-formly-core.mjs +0 -0
- /package/{esm2020 → esm2022}/preset/ngx-formly-core-preset.mjs +0 -0
- /package/{esm2020 → esm2022}/preset/public_api.mjs +0 -0
- /package/{esm2020 → esm2022}/public_api.mjs +0 -0
- /package/{esm2020 → esm2022}/select/ngx-formly-core-select.mjs +0 -0
- /package/{esm2020 → esm2022}/select/public_api.mjs +0 -0
- /package/{esm2020 → esm2022}/testing/ngx-formly-core-testing.mjs +0 -0
- /package/{esm2020 → esm2022}/testing/public_api.mjs +0 -0
- /package/{ngx-formly-core.d.ts → index.d.ts} +0 -0
- /package/json-schema/{ngx-formly-core-json-schema.d.ts → index.d.ts} +0 -0
- /package/preset/{ngx-formly-core-preset.d.ts → index.d.ts} +0 -0
- /package/select/{ngx-formly-core-select.d.ts → index.d.ts} +0 -0
- /package/testing/{ngx-formly-core-testing.d.ts → index.d.ts} +0 -0
|
@@ -1,91 +0,0 @@
|
|
|
1
|
-
import { NgModule, Inject, Optional } from '@angular/core';
|
|
2
|
-
import { CommonModule } from '@angular/common';
|
|
3
|
-
import { FormlyForm } from './components/formly.form';
|
|
4
|
-
import { FormlyField } from './components/formly.field';
|
|
5
|
-
import { FormlyAttributes } from './templates/formly.attributes';
|
|
6
|
-
import { FormlyConfig, FORMLY_CONFIG } from './services/formly.config';
|
|
7
|
-
import { FormlyFormBuilder } from './services/formly.builder';
|
|
8
|
-
import { FormlyGroup } from './templates/formly.group';
|
|
9
|
-
import { FormlyValidationMessage } from './templates/formly.validation-message';
|
|
10
|
-
import { FormlyTemplateType } from './templates/field-template.type';
|
|
11
|
-
import { FieldExpressionExtension } from './extensions/field-expression/field-expression';
|
|
12
|
-
import { FieldValidationExtension } from './extensions/field-validation/field-validation';
|
|
13
|
-
import { FieldFormExtension } from './extensions/field-form/field-form';
|
|
14
|
-
import { CoreExtension } from './extensions/core/core';
|
|
15
|
-
import { FormlyTemplate } from './components/formly.template';
|
|
16
|
-
import * as i0 from "@angular/core";
|
|
17
|
-
import * as i1 from "./services/formly.config";
|
|
18
|
-
export function defaultFormlyConfig(config) {
|
|
19
|
-
return {
|
|
20
|
-
types: [
|
|
21
|
-
{ name: 'formly-group', component: FormlyGroup },
|
|
22
|
-
{ name: 'formly-template', component: FormlyTemplateType },
|
|
23
|
-
],
|
|
24
|
-
extensions: [
|
|
25
|
-
{ name: 'core', extension: new CoreExtension(config), priority: -250 },
|
|
26
|
-
{ name: 'field-validation', extension: new FieldValidationExtension(config), priority: -200 },
|
|
27
|
-
{ name: 'field-form', extension: new FieldFormExtension(), priority: -150 },
|
|
28
|
-
{ name: 'field-expression', extension: new FieldExpressionExtension(), priority: -100 },
|
|
29
|
-
],
|
|
30
|
-
};
|
|
31
|
-
}
|
|
32
|
-
export class FormlyModule {
|
|
33
|
-
constructor(configService, configs = []) {
|
|
34
|
-
if (!configs) {
|
|
35
|
-
return;
|
|
36
|
-
}
|
|
37
|
-
configs.forEach((config) => configService.addConfig(config));
|
|
38
|
-
}
|
|
39
|
-
static forRoot(config = {}) {
|
|
40
|
-
return {
|
|
41
|
-
ngModule: FormlyModule,
|
|
42
|
-
providers: [
|
|
43
|
-
{ provide: FORMLY_CONFIG, multi: true, useFactory: defaultFormlyConfig, deps: [FormlyConfig] },
|
|
44
|
-
{ provide: FORMLY_CONFIG, useValue: config, multi: true },
|
|
45
|
-
FormlyConfig,
|
|
46
|
-
FormlyFormBuilder,
|
|
47
|
-
],
|
|
48
|
-
};
|
|
49
|
-
}
|
|
50
|
-
static forChild(config = {}) {
|
|
51
|
-
return {
|
|
52
|
-
ngModule: FormlyModule,
|
|
53
|
-
providers: [
|
|
54
|
-
{ provide: FORMLY_CONFIG, multi: true, useFactory: defaultFormlyConfig, deps: [FormlyConfig] },
|
|
55
|
-
{ provide: FORMLY_CONFIG, useValue: config, multi: true },
|
|
56
|
-
FormlyFormBuilder,
|
|
57
|
-
],
|
|
58
|
-
};
|
|
59
|
-
}
|
|
60
|
-
}
|
|
61
|
-
FormlyModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: FormlyModule, deps: [{ token: i1.FormlyConfig }, { token: FORMLY_CONFIG, optional: true }], target: i0.ɵɵFactoryTarget.NgModule });
|
|
62
|
-
FormlyModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: FormlyModule, declarations: [FormlyTemplate,
|
|
63
|
-
FormlyForm,
|
|
64
|
-
FormlyField,
|
|
65
|
-
FormlyAttributes,
|
|
66
|
-
FormlyGroup,
|
|
67
|
-
FormlyValidationMessage,
|
|
68
|
-
FormlyTemplateType], imports: [CommonModule], exports: [FormlyTemplate, FormlyForm, FormlyField, FormlyAttributes, FormlyGroup, FormlyValidationMessage] });
|
|
69
|
-
FormlyModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: FormlyModule, imports: [[CommonModule]] });
|
|
70
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: FormlyModule, decorators: [{
|
|
71
|
-
type: NgModule,
|
|
72
|
-
args: [{
|
|
73
|
-
declarations: [
|
|
74
|
-
FormlyTemplate,
|
|
75
|
-
FormlyForm,
|
|
76
|
-
FormlyField,
|
|
77
|
-
FormlyAttributes,
|
|
78
|
-
FormlyGroup,
|
|
79
|
-
FormlyValidationMessage,
|
|
80
|
-
FormlyTemplateType,
|
|
81
|
-
],
|
|
82
|
-
exports: [FormlyTemplate, FormlyForm, FormlyField, FormlyAttributes, FormlyGroup, FormlyValidationMessage],
|
|
83
|
-
imports: [CommonModule],
|
|
84
|
-
}]
|
|
85
|
-
}], ctorParameters: function () { return [{ type: i1.FormlyConfig }, { type: undefined, decorators: [{
|
|
86
|
-
type: Optional
|
|
87
|
-
}, {
|
|
88
|
-
type: Inject,
|
|
89
|
-
args: [FORMLY_CONFIG]
|
|
90
|
-
}] }]; } });
|
|
91
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29yZS5tb2R1bGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvY29yZS9zcmMvbGliL2NvcmUubW9kdWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQXVCLE1BQU0sRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDaEYsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUN0RCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDeEQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDakUsT0FBTyxFQUFFLFlBQVksRUFBRSxhQUFhLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUN2RSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUM5RCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDdkQsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFDaEYsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFFckUsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sZ0RBQWdELENBQUM7QUFDMUYsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sZ0RBQWdELENBQUM7QUFDMUYsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDeEUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBRXZELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQzs7O0FBRTlELE1BQU0sVUFBVSxtQkFBbUIsQ0FBQyxNQUFvQjtJQUN0RCxPQUFPO1FBQ0wsS0FBSyxFQUFFO1lBQ0wsRUFBRSxJQUFJ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Qjs7MEJBeUIyQyxRQUFROzswQkFBSSxNQUFNOzJCQUFDLGFBQWEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBOZ01vZHVsZSwgTW9kdWxlV2l0aFByb3ZpZGVycywgSW5qZWN0LCBPcHRpb25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IEZvcm1seUZvcm0gfSBmcm9tICcuL2NvbXBvbmVudHMvZm9ybWx5LmZvcm0nO1xuaW1wb3J0IHsgRm9ybWx5RmllbGQgfSBmcm9tICcuL2NvbXBvbmVudHMvZm9ybWx5LmZpZWxkJztcbmltcG9ydCB7IEZvcm1seUF0dHJpYnV0ZXMgfSBmcm9tICcuL3RlbXBsYXRlcy9mb3JtbHkuYXR0cmlidXRlcyc7XG5pbXBvcnQgeyBGb3JtbHlDb25maWcsIEZPUk1MWV9DT05GSUcgfSBmcm9tICcuL3NlcnZpY2VzL2Zvcm1seS5jb25maWcnO1xuaW1wb3J0IHsgRm9ybWx5Rm9ybUJ1aWxkZXIgfSBmcm9tICcuL3NlcnZpY2VzL2Zvcm1seS5idWlsZGVyJztcbmltcG9ydCB7IEZvcm1seUdyb3VwIH0gZnJvbSAnLi90ZW1wbGF0ZXMvZm9ybWx5Lmdyb3VwJztcbmltcG9ydCB7IEZvcm1seVZhbGlkYXRpb25NZXNzYWdlIH0gZnJvbSAnLi90ZW1wbGF0ZXMvZm9ybWx5LnZhbGlkYXRpb24tbWVzc2FnZSc7XG5pbXBvcnQgeyBGb3JtbHlUZW1wbGF0ZVR5cGUgfSBmcm9tICcuL3RlbXBsYXRlcy9maWVsZC10ZW1wbGF0ZS50eXBlJztcblxuaW1wb3J0IHsgRmllbGRFeHByZXNzaW9uRXh0ZW5zaW9uIH0gZnJvbSAnLi9leHRlbnNpb25zL2ZpZWxkLWV4cHJlc3Npb24vZmllbGQtZXhwcmVzc2lvbic7XG5pbXBvcnQgeyBGaWVsZFZhbGlkYXRpb25FeHRlbnNpb24gfSBmcm9tICcuL2V4dGVuc2lvbnMvZmllbGQtdmFsaWRhdGlvbi9maWVsZC12YWxpZGF0aW9uJztcbmltcG9ydCB7IEZpZWxkRm9ybUV4dGVuc2lvbiB9IGZyb20gJy4vZXh0ZW5zaW9ucy9maWVsZC1mb3JtL2ZpZWxkLWZvcm0nO1xuaW1wb3J0IHsgQ29yZUV4dGVuc2lvbiB9IGZyb20gJy4vZXh0ZW5zaW9ucy9jb3JlL2NvcmUnO1xuaW1wb3J0IHsgQ29uZmlnT3B0aW9uIH0gZnJvbSAnLi9tb2RlbHMnO1xuaW1wb3J0IHsgRm9ybWx5VGVtcGxhdGUgfSBmcm9tICcuL2NvbXBvbmVudHMvZm9ybWx5LnRlbXBsYXRlJztcblxuZXhwb3J0IGZ1bmN0aW9uIGRlZmF1bHRGb3JtbHlDb25maWcoY29uZmlnOiBGb3JtbHlDb25maWcpOiBDb25maWdPcHRpb24ge1xuICByZXR1cm4ge1xuICAgIHR5cGVzOiBbXG4gICAgICB7IG5hbWU6ICdmb3JtbHktZ3JvdXAnLCBjb21wb25lbnQ6IEZvcm1seUdyb3VwIH0sXG4gICAgICB7IG5hbWU6ICdmb3JtbHktdGVtcGxhdGUnLCBjb21wb25lbnQ6IEZvcm1seVRlbXBsYXRlVHlwZSB9LFxuICAgIF0sXG4gICAgZXh0ZW5zaW9uczogW1xuICAgICAgeyBuYW1lOiAnY29yZScsIGV4dGVuc2lvbjogbmV3IENvcmVFeHRlbnNpb24oY29uZmlnKSwgcHJpb3JpdHk6IC0yNTAgfSxcbiAgICAgIHsgbmFtZTogJ2ZpZWxkLXZhbGlkYXRpb24nLCBleHRlbnNpb246IG5ldyBGaWVsZFZhbGlkYXRpb25FeHRlbnNpb24oY29uZmlnKSwgcHJpb3JpdHk6IC0yMDAgfSxcbiAgICAgIHsgbmFtZTogJ2ZpZWxkLWZvcm0nLCBleHRlbnNpb246IG5ldyBGaWVsZEZvcm1FeHRlbnNpb24oKSwgcHJpb3JpdHk6IC0xNTAgfSxcbiAgICAgIHsgbmFtZTogJ2ZpZWxkLWV4cHJlc3Npb24nLCBleHRlbnNpb246IG5ldyBGaWVsZEV4cHJlc3Npb25FeHRlbnNpb24oKSwgcHJpb3JpdHk6IC0xMDAgfSxcbiAgICBdLFxuICB9O1xufVxuXG5ATmdNb2R1bGUoe1xuICBkZWNsYXJhdGlvbnM6IFtcbiAgICBGb3JtbHlUZW1wbGF0ZSxcbiAgICBGb3JtbHlGb3JtLFxuICAgIEZvcm1seUZpZWxkLFxuICAgIEZvcm1seUF0dHJpYnV0ZXMsXG4gICAgRm9ybWx5R3JvdXAsXG4gICAgRm9ybWx5VmFsaWRhdGlvbk1lc3NhZ2UsXG4gICAgRm9ybWx5VGVtcGxhdGVUeXBlLFxuICBdLFxuICBleHBvcnRzOiBbRm9ybWx5VGVtcGxhdGUsIEZvcm1seUZvcm0sIEZvcm1seUZpZWxkLCBGb3JtbHlBdHRyaWJ1dGVzLCBGb3JtbHlHcm91cCwgRm9ybWx5VmFsaWRhdGlvbk1lc3NhZ2VdLFxuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlXSxcbn0pXG5leHBvcnQgY2xhc3MgRm9ybWx5TW9kdWxlIHtcbiAgc3RhdGljIGZvclJvb3QoY29uZmlnOiBDb25maWdPcHRpb24gPSB7fSk6IE1vZHVsZVdpdGhQcm92aWRlcnM8Rm9ybWx5TW9kdWxlPiB7XG4gICAgcmV0dXJuIHtcbiAgICAgIG5nTW9kdWxlOiBGb3JtbHlNb2R1bGUsXG4gICAgICBwcm92aWRlcnM6IFtcbiAgICAgICAgeyBwcm92aWRlOiBGT1JNTFlfQ09ORklHLCBtdWx0aTogdHJ1ZSwgdXNlRmFjdG9yeTogZGVmYXVsdEZvcm1seUNvbmZpZywgZGVwczogW0Zvcm1seUNvbmZpZ10gfSxcbiAgICAgICAgeyBwcm92aWRlOiBGT1JNTFlfQ09ORklHLCB1c2VWYWx1ZTogY29uZmlnLCBtdWx0aTogdHJ1ZSB9LFxuICAgICAgICBGb3JtbHlDb25maWcsXG4gICAgICAgIEZvcm1seUZvcm1CdWlsZGVyLFxuICAgICAgXSxcbiAgICB9O1xuICB9XG5cbiAgc3RhdGljIGZvckNoaWxkKGNvbmZpZzogQ29uZmlnT3B0aW9uID0ge30pOiBNb2R1bGVXaXRoUHJvdmlkZXJzPEZvcm1seU1vZHVsZT4ge1xuICAgIHJldHVybiB7XG4gICAgICBuZ01vZHVsZTogRm9ybWx5TW9kdWxlLFxuICAgICAgcHJvdmlkZXJzOiBbXG4gICAgICAgIHsgcHJvdmlkZTogRk9STUxZX0NPTkZJRywgbXVsdGk6IHRydWUsIHVzZUZhY3Rvcnk6IGRlZmF1bHRGb3JtbHlDb25maWcsIGRlcHM6IFtGb3JtbHlDb25maWddIH0sXG4gICAgICAgIHsgcHJvdmlkZTogRk9STUxZX0NPTkZJRywgdXNlVmFsdWU6IGNvbmZpZywgbXVsdGk6IHRydWUgfSxcbiAgICAgICAgRm9ybWx5Rm9ybUJ1aWxkZXIsXG4gICAgICBdLFxuICAgIH07XG4gIH1cblxuICBjb25zdHJ1Y3Rvcihjb25maWdTZXJ2aWNlOiBGb3JtbHlDb25maWcsIEBPcHRpb25hbCgpIEBJbmplY3QoRk9STUxZX0NPTkZJRykgY29uZmlnczogQ29uZmlnT3B0aW9uW10gPSBbXSkge1xuICAgIGlmICghY29uZmlncykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbmZpZ3MuZm9yRWFjaCgoY29uZmlnKSA9PiBjb25maWdTZXJ2aWNlLmFkZENvbmZpZyhjb25maWcpKTtcbiAgfVxufVxuIl19
|
|
@@ -1,148 +0,0 @@
|
|
|
1
|
-
import { ComponentRef } from '@angular/core';
|
|
2
|
-
import { getFieldId, assignFieldValue, isUndefined, getFieldValue, reverseDeepMerge, defineHiddenProp, clone, getField, markFieldForCheck, hasKey, observe, isHiddenField, isSignalRequired, } from '../../utils';
|
|
3
|
-
import { Subject } from 'rxjs';
|
|
4
|
-
export class CoreExtension {
|
|
5
|
-
constructor(config) {
|
|
6
|
-
this.config = config;
|
|
7
|
-
this.formId = 0;
|
|
8
|
-
}
|
|
9
|
-
prePopulate(field) {
|
|
10
|
-
const root = field.parent;
|
|
11
|
-
this.initRootOptions(field);
|
|
12
|
-
this.initFieldProps(field);
|
|
13
|
-
if (root) {
|
|
14
|
-
Object.defineProperty(field, 'options', { get: () => root.options, configurable: true });
|
|
15
|
-
Object.defineProperty(field, 'model', {
|
|
16
|
-
get: () => (hasKey(field) && field.fieldGroup ? getFieldValue(field) : root.model),
|
|
17
|
-
configurable: true,
|
|
18
|
-
});
|
|
19
|
-
}
|
|
20
|
-
Object.defineProperty(field, 'get', {
|
|
21
|
-
value: (key) => getField(field, key),
|
|
22
|
-
configurable: true,
|
|
23
|
-
});
|
|
24
|
-
this.getFieldComponentInstance(field).prePopulate?.(field);
|
|
25
|
-
}
|
|
26
|
-
onPopulate(field) {
|
|
27
|
-
this.initFieldOptions(field);
|
|
28
|
-
this.getFieldComponentInstance(field).onPopulate?.(field);
|
|
29
|
-
if (field.fieldGroup) {
|
|
30
|
-
field.fieldGroup.forEach((f, index) => {
|
|
31
|
-
if (f) {
|
|
32
|
-
Object.defineProperty(f, 'parent', { get: () => field, configurable: true });
|
|
33
|
-
Object.defineProperty(f, 'index', { get: () => index, configurable: true });
|
|
34
|
-
}
|
|
35
|
-
this.formId++;
|
|
36
|
-
});
|
|
37
|
-
}
|
|
38
|
-
}
|
|
39
|
-
postPopulate(field) {
|
|
40
|
-
this.getFieldComponentInstance(field).postPopulate?.(field);
|
|
41
|
-
}
|
|
42
|
-
initFieldProps(field) {
|
|
43
|
-
field.props ?? (field.props = field.templateOptions);
|
|
44
|
-
Object.defineProperty(field, 'templateOptions', {
|
|
45
|
-
get: () => field.props,
|
|
46
|
-
set: (props) => (field.props = props),
|
|
47
|
-
configurable: true,
|
|
48
|
-
});
|
|
49
|
-
}
|
|
50
|
-
initRootOptions(field) {
|
|
51
|
-
if (field.parent) {
|
|
52
|
-
return;
|
|
53
|
-
}
|
|
54
|
-
const options = field.options;
|
|
55
|
-
field.options.formState = field.options.formState || {};
|
|
56
|
-
if (!options.showError) {
|
|
57
|
-
options.showError = this.config.extras.showError;
|
|
58
|
-
}
|
|
59
|
-
if (!options.fieldChanges) {
|
|
60
|
-
defineHiddenProp(options, 'fieldChanges', new Subject());
|
|
61
|
-
}
|
|
62
|
-
if (!options._hiddenFieldsForCheck) {
|
|
63
|
-
options._hiddenFieldsForCheck = [];
|
|
64
|
-
}
|
|
65
|
-
options._markForCheck = (f) => {
|
|
66
|
-
console.warn(`Formly: 'options._markForCheck' is deprecated since v6.0, use 'options.detectChanges' instead.`);
|
|
67
|
-
options.detectChanges(f);
|
|
68
|
-
};
|
|
69
|
-
options._detectChanges = (f) => {
|
|
70
|
-
if (f._componentRefs) {
|
|
71
|
-
markFieldForCheck(f);
|
|
72
|
-
}
|
|
73
|
-
f.fieldGroup?.forEach((f) => f && options._detectChanges(f));
|
|
74
|
-
};
|
|
75
|
-
options.detectChanges = (f) => {
|
|
76
|
-
f.options.checkExpressions?.(f);
|
|
77
|
-
options._detectChanges(f);
|
|
78
|
-
};
|
|
79
|
-
options.resetModel = (model) => {
|
|
80
|
-
model = clone(model ?? options._initialModel);
|
|
81
|
-
if (field.model) {
|
|
82
|
-
Object.keys(field.model).forEach((k) => delete field.model[k]);
|
|
83
|
-
Object.assign(field.model, model || {});
|
|
84
|
-
}
|
|
85
|
-
if (!isSignalRequired()) {
|
|
86
|
-
observe(options, ['parentForm', 'submitted']).setValue(false, false);
|
|
87
|
-
}
|
|
88
|
-
options.build(field);
|
|
89
|
-
field.form.reset(field.model);
|
|
90
|
-
};
|
|
91
|
-
options.updateInitialValue = (model) => (options._initialModel = clone(model ?? field.model));
|
|
92
|
-
field.options.updateInitialValue();
|
|
93
|
-
}
|
|
94
|
-
initFieldOptions(field) {
|
|
95
|
-
reverseDeepMerge(field, {
|
|
96
|
-
id: getFieldId(`formly_${this.formId}`, field, field.index),
|
|
97
|
-
hooks: {},
|
|
98
|
-
modelOptions: {},
|
|
99
|
-
validation: { messages: {} },
|
|
100
|
-
props: !field.type || !hasKey(field)
|
|
101
|
-
? {}
|
|
102
|
-
: {
|
|
103
|
-
label: '',
|
|
104
|
-
placeholder: '',
|
|
105
|
-
disabled: false,
|
|
106
|
-
},
|
|
107
|
-
});
|
|
108
|
-
if (this.config.extras.resetFieldOnHide && field.resetOnHide !== false) {
|
|
109
|
-
field.resetOnHide = true;
|
|
110
|
-
}
|
|
111
|
-
if (field.type !== 'formly-template' &&
|
|
112
|
-
(field.template || field.expressions?.template || field.expressionProperties?.template)) {
|
|
113
|
-
field.type = 'formly-template';
|
|
114
|
-
}
|
|
115
|
-
if (!field.type && field.fieldGroup) {
|
|
116
|
-
field.type = 'formly-group';
|
|
117
|
-
}
|
|
118
|
-
if (field.type) {
|
|
119
|
-
this.config.getMergedField(field);
|
|
120
|
-
}
|
|
121
|
-
if (hasKey(field) &&
|
|
122
|
-
!isUndefined(field.defaultValue) &&
|
|
123
|
-
isUndefined(getFieldValue(field)) &&
|
|
124
|
-
!isHiddenField(field)) {
|
|
125
|
-
assignFieldValue(field, field.defaultValue);
|
|
126
|
-
}
|
|
127
|
-
field.wrappers = field.wrappers || [];
|
|
128
|
-
}
|
|
129
|
-
getFieldComponentInstance(field) {
|
|
130
|
-
const componentRefInstance = () => {
|
|
131
|
-
let componentRef = this.config.resolveFieldTypeRef(field);
|
|
132
|
-
const fieldComponentRef = field._componentRefs?.slice(-1)[0];
|
|
133
|
-
if (fieldComponentRef instanceof ComponentRef &&
|
|
134
|
-
fieldComponentRef?.componentType === componentRef?.componentType) {
|
|
135
|
-
componentRef = fieldComponentRef;
|
|
136
|
-
}
|
|
137
|
-
return componentRef?.instance;
|
|
138
|
-
};
|
|
139
|
-
if (!field._proxyInstance) {
|
|
140
|
-
defineHiddenProp(field, '_proxyInstance', new Proxy({}, {
|
|
141
|
-
get: (_, prop) => componentRefInstance()?.[prop],
|
|
142
|
-
set: (_, prop, value) => (componentRefInstance()[prop] = value),
|
|
143
|
-
}));
|
|
144
|
-
}
|
|
145
|
-
return field._proxyInstance;
|
|
146
|
-
}
|
|
147
|
-
}
|
|
148
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29yZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9jb3JlL3NyYy9saWIvZXh0ZW5zaW9ucy9jb3JlL2NvcmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUc3QyxPQUFPLEVBQ0wsVUFBVSxFQUNWLGdCQUFnQixFQUNoQixXQUFXLEVBQ1gsYUFBYSxFQUNiLGdCQUFnQixFQUNoQixnQkFBZ0IsRUFDaEIsS0FBSyxFQUNMLFFBQVEsRUFDUixpQkFBaUIsRUFDakIsTUFBTSxFQUNOLE9BQU8sRUFDUCxhQUFhLEVBQ2IsZ0JBQWdCLEdBQ2pCLE1BQU0sYUFBYSxDQUFDO0FBQ3JCLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFL0IsTUFBTSxPQUFPLGFBQWE7SUFFeEIsWUFBb0IsTUFBb0I7UUFBcEIsV0FBTSxHQUFOLE1BQU0sQ0FBYztRQURoQyxXQUFNLEdBQUcsQ0FBQyxDQUFDO0lBQ3dCLENBQUM7SUFFNUMsV0FBVyxDQUFDLEtBQTZCO1FBQ3ZDLE1BQU0sSUFBSSxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUM7UUFDMUIsSUFBSSxDQUFDLGVBQWUsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUM1QixJQUFJLENBQUMsY0FBYyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzNCLElBQUksSUFBSSxFQUFFO1lBQ1IsTUFBTSxDQUFDLGNBQWMsQ0FBQyxLQUFLLEVBQUUsU0FBUyxFQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsWUFBWSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7WUFDekYsTUFBTSxDQUFDLGNBQWMsQ0FBQyxLQUFLLEVBQUUsT0FBTyxFQUFFO2dCQUNwQyxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDO2dCQUNsRixZQUFZLEVBQUUsSUFBSTthQUNuQixDQUFDLENBQUM7U0FDSjtRQUVELE1BQU0sQ0FBQyxjQUFjLENBQUMsS0FBSyxFQUFFLEtBQUssRUFBRTtZQUNsQyxLQUFLLEVBQUUsQ0FBQyxHQUE2QixFQUFFLEVBQUUsQ0FBQyxRQUFRLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQztZQUM5RCxZQUFZLEVBQUUsSUFBSTtTQUNuQixDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMseUJBQXlCLENBQUMsS0FBSyxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDN0QsQ0FBQztJQUVELFVBQVUsQ0FBQyxLQUE2QjtRQUN0QyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDN0IsSUFBSSxDQUFDLHlCQUF5QixDQUFDLEtBQUssQ0FBQyxDQUFDLFVBQVUsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzFELElBQUksS0FBSyxDQUFDLFVBQVUsRUFBRTtZQUNwQixLQUFLLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLEVBQUUsRUFBRTtnQkFDcEMsSUFBSSxDQUFDLEVBQUU7b0JBQ0wsTUFBTSxDQUFDLGNBQWMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDLEtBQUssRUFBRSxZQUFZLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztvQkFDN0UsTUFBTSxDQUFDLGNBQWMsQ0FBQyxDQUFDLEVBQUUsT0FBTyxFQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDLEtBQUssRUFBRSxZQUFZLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztpQkFDN0U7Z0JBQ0QsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ2hCLENBQUMsQ0FBQyxDQUFDO1NBQ0o7SUFDSCxDQUFDO0lBRUQsWUFBWSxDQUFDLEtBQTZCO1FBQ3hDLElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxLQUFLLENBQUMsQ0FBQyxZQUFZLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUM5RCxDQUFDO0lBRU8sY0FBYyxDQUFDLEtBQTZCO1FBQ2xELEtBQUssQ0FBQyxLQUFLLEtBQVgsS0FBSyxDQUFDLEtBQUssR0FBSyxLQUFLLENBQUMsZUFBZSxFQUFDO1FBQ3RDLE1BQU0sQ0FBQyxjQUFjLENBQUMsS0FBSyxFQUFFLGlCQUFpQixFQUFFO1lBQzlDLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQyxLQUFLLENBQUMsS0FBSztZQUN0QixHQUFHLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7WUFDckMsWUFBWSxFQUFFLElBQUk7U0FDbkIsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVPLGVBQWUsQ0FBQyxLQUE2QjtRQUNuRCxJQUFJLEtBQUssQ0FBQyxNQUFNLEVBQUU7WUFDaEIsT0FBTztTQUNSO1FBRUQsTUFBTSxPQUFPLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQztRQUM5QixLQUFLLENBQUMsT0FBTyxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLFNBQVMsSUFBSSxFQUFFLENBQUM7UUFDeEQsSUFBSSxDQUFDLE9BQU8sQ0FBQyxTQUFTLEVBQUU7WUFDdEIsT0FBTyxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUM7U0FDbEQ7UUFFRCxJQUFJLENBQUMsT0FBTyxDQUFDLFlBQVksRUFBRTtZQUN6QixnQkFBZ0IsQ0FBQyxPQUFPLEVBQUUsY0FBYyxFQUFFLElBQUksT0FBTyxFQUEwQixDQUFDLENBQUM7U0FDbEY7UUFFRCxJQUFJLENBQUMsT0FBTyxDQUFDLHFCQUFxQixFQUFFO1lBQ2xDLE9BQU8sQ0FBQyxxQkFBcUIsR0FBRyxFQUFFLENBQUM7U0FDcEM7UUFFRCxPQUFPLENBQUMsYUFBYSxHQUFHLENBQUMsQ0FBQyxFQUFFLEVBQUU7WUFDNUIsT0FBTyxDQUFDLElBQUksQ0FBQyxnR0FBZ0csQ0FBQyxDQUFDO1lBQy9HLE9BQU8sQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDM0IsQ0FBQyxDQUFDO1FBRUYsT0FBTyxDQUFDLGNBQWMsR0FBRyxDQUFDLENBQXlCLEVBQUUsRUFBRTtZQUNyRCxJQUFJLENBQUMsQ0FBQyxjQUFjLEVBQUU7Z0JBQ3BCLGlCQUFpQixDQUFDLENBQUMsQ0FBQyxDQUFDO2FBQ3RCO1lBRUQsQ0FBQyxDQUFDLFVBQVUsRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsSUFBSSxPQUFPLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDL0QsQ0FBQyxDQUFDO1FBRUYsT0FBTyxDQUFDLGFBQWEsR0FBRyxDQUFDLENBQXlCLEVBQUUsRUFBRTtZQUNwRCxDQUFDLENBQUMsT0FBTyxDQUFDLGdCQUFnQixFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDaEMsT0FBTyxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUM1QixDQUFDLENBQUM7UUFFRixPQUFPLENBQUMsVUFBVSxHQUFHLENBQUMsS0FBVyxFQUFFLEVBQUU7WUFDbkMsS0FBSyxHQUFHLEtBQUssQ0FBQyxLQUFLLElBQUksT0FBTyxDQUFDLGFBQWEsQ0FBQyxDQUFDO1lBQzlDLElBQUksS0FBSyxDQUFDLEtBQUssRUFBRTtnQkFDZixNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLE9BQU8sS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUMvRCxNQUFNLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsS0FBSyxJQUFJLEVBQUUsQ0FBQyxDQUFDO2FBQ3pDO1lBRUQsSUFBSSxDQUFDLGdCQUFnQixFQUFFLEVBQUU7Z0JBQ3ZCLE9BQU8sQ0FBQyxPQUFPLEVBQUUsQ0FBQyxZQUFZLEVBQUUsV0FBVyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDO2FBQ3RFO1lBQ0QsT0FBTyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUNyQixLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDaEMsQ0FBQyxDQUFDO1FBRUYsT0FBTyxDQUFDLGtCQUFrQixHQUFHLENBQUMsS0FBVyxFQUFFLEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxhQUFhLEdBQUcsS0FBSyxDQUFDLEtBQUssSUFBSSxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztRQUNwRyxLQUFLLENBQUMsT0FBTyxDQUFDLGtCQUFrQixFQUFFLENBQUM7SUFDckMsQ0FBQztJQUVPLGdCQUFnQixDQUFDLEtBQTZCO1FBQ3BELGdCQUFnQixDQUFDLEtBQUssRUFBRTtZQUN0QixFQUFFLEVBQUUsVUFBVSxDQUFDLFVBQVUsSUFBSSxDQUFDLE1BQU0sRUFBRSxFQUFFLEtBQUssRUFBRSxLQUFLLENBQUMsS0FBSyxDQUFDO1lBQzNELEtBQUssRUFBRSxFQUFFO1lBQ1QsWUFBWSxFQUFFLEVBQUU7WUFDaEIsVUFBVSxFQUFFLEVBQUUsUUFBUSxFQUFFLEVBQUUsRUFBRTtZQUM1QixLQUFLLEVBQ0gsQ0FBQyxLQUFLLENBQUMsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQztnQkFDM0IsQ0FBQyxDQUFDLEVBQUU7Z0JBQ0osQ0FBQyxDQUFDO29CQUNFLEtBQUssRUFBRSxFQUFFO29CQUNULFdBQVcsRUFBRSxFQUFFO29CQUNmLFFBQVEsRUFBRSxLQUFLO2lCQUNoQjtTQUNSLENBQUMsQ0FBQztRQUVILElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsZ0JBQWdCLElBQUksS0FBSyxDQUFDLFdBQVcsS0FBSyxLQUFLLEVBQUU7WUFDdEUsS0FBSyxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUM7U0FDMUI7UUFFRCxJQUNFLEtBQUssQ0FBQyxJQUFJLEtBQUssaUJBQWlCO1lBQ2hDLENBQUMsS0FBSyxDQUFDLFFBQVEsSUFBSSxLQUFLLENBQUMsV0FBVyxFQUFFLFFBQVEsSUFBSSxLQUFLLENBQUMsb0JBQW9CLEVBQUUsUUFBUSxDQUFDLEVBQ3ZGO1lBQ0EsS0FBSyxDQUFDLElBQUksR0FBRyxpQkFBaUIsQ0FBQztTQUNoQztRQUVELElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxJQUFJLEtBQUssQ0FBQyxVQUFVLEVBQUU7WUFDbkMsS0FBSyxDQUFDLElBQUksR0FBRyxjQUFjLENBQUM7U0FDN0I7UUFFRCxJQUFJLEtBQUssQ0FBQyxJQUFJLEVBQUU7WUFDZCxJQUFJLENBQUMsTUFBTSxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsQ0FBQztTQUNuQztRQUVELElBQ0UsTUFBTSxDQUFDLEtBQUssQ0FBQztZQUNiLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxZQUFZLENBQUM7WUFDaEMsV0FBVyxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUNqQyxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsRUFDckI7WUFDQSxnQkFBZ0IsQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLFlBQVksQ0FBQyxDQUFDO1NBQzdDO1FBRUQsS0FBSyxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUMsUUFBUSxJQUFJLEVBQUUsQ0FBQztJQUN4QyxDQUFDO0lBRU8seUJBQXlCLENBQUMsS0FBNkI7UUFDN0QsTUFBTSxvQkFBb0IsR0FBRyxHQUFHLEVBQUU7WUFDaEMsSUFBSSxZQUFZLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUUxRCxNQUFNLGlCQUFpQixHQUFHLEtBQUssQ0FBQyxjQUFjLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDN0QsSUFDRSxpQkFBaUIsWUFBWSxZQUFZO2dCQUN6QyxpQkFBaUIsRUFBRSxhQUFhLEtBQUssWUFBWSxFQUFFLGFBQWEsRUFDaEU7Z0JBQ0EsWUFBWSxHQUFHLGlCQUF3QixDQUFDO2FBQ3pDO1lBRUQsT0FBTyxZQUFZLEVBQUUsUUFBZSxDQUFDO1FBQ3ZDLENBQUMsQ0FBQztRQUVGLElBQUksQ0FBQyxLQUFLLENBQUMsY0FBYyxFQUFFO1lBQ3pCLGdCQUFnQixDQUNkLEtBQUssRUFDTCxnQkFBZ0IsRUFDaEIsSUFBSSxLQUFLLENBQUMsRUFBcUIsRUFBRTtnQkFDL0IsR0FBRyxFQUFFLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxFQUFFLENBQUMsb0JBQW9CLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQztnQkFDaEQsR0FBRyxFQUFFLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUMsb0JBQW9CLEVBQUUsQ0FBQyxJQUFJLENBQUMsR0FBRyxLQUFLLENBQUM7YUFDaEUsQ0FBQyxDQUNILENBQUM7U0FDSDtRQUVELE9BQU8sS0FBSyxDQUFDLGNBQWMsQ0FBQztJQUM5QixDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnRSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZvcm1seUNvbmZpZyB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2Zvcm1seS5jb25maWcnO1xuaW1wb3J0IHsgRm9ybWx5RmllbGRDb25maWdDYWNoZSwgRm9ybWx5VmFsdWVDaGFuZ2VFdmVudCwgRm9ybWx5RXh0ZW5zaW9uLCBGb3JtbHlGaWVsZENvbmZpZyB9IGZyb20gJy4uLy4uL21vZGVscyc7XG5pbXBvcnQge1xuICBnZXRGaWVsZElkLFxuICBhc3NpZ25GaWVsZFZhbHVlLFxuICBpc1VuZGVmaW5lZCxcbiAgZ2V0RmllbGRWYWx1ZSxcbiAgcmV2ZXJzZURlZXBNZXJnZSxcbiAgZGVmaW5lSGlkZGVuUHJvcCxcbiAgY2xvbmUsXG4gIGdldEZpZWxkLFxuICBtYXJrRmllbGRGb3JDaGVjayxcbiAgaGFzS2V5LFxuICBvYnNlcnZlLFxuICBpc0hpZGRlbkZpZWxkLFxuICBpc1NpZ25hbFJlcXVpcmVkLFxufSBmcm9tICcuLi8uLi91dGlscyc7XG5pbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5cbmV4cG9ydCBjbGFzcyBDb3JlRXh0ZW5zaW9uIGltcGxlbWVudHMgRm9ybWx5RXh0ZW5zaW9uIHtcbiAgcHJpdmF0ZSBmb3JtSWQgPSAwO1xuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGNvbmZpZzogRm9ybWx5Q29uZmlnKSB7fVxuXG4gIHByZVBvcHVsYXRlKGZpZWxkOiBGb3JtbHlGaWVsZENvbmZpZ0NhY2hlKSB7XG4gICAgY29uc3Qgcm9vdCA9IGZpZWxkLnBhcmVudDtcbiAgICB0aGlzLmluaXRSb290T3B0aW9ucyhmaWVsZCk7XG4gICAgdGhpcy5pbml0RmllbGRQcm9wcyhmaWVsZCk7XG4gICAgaWYgKHJvb3QpIHtcbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShmaWVsZCwgJ29wdGlvbnMnLCB7IGdldDogKCkgPT4gcm9vdC5vcHRpb25zLCBjb25maWd1cmFibGU6IHRydWUgfSk7XG4gICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZmllbGQsICdtb2RlbCcsIHtcbiAgICAgICAgZ2V0OiAoKSA9PiAoaGFzS2V5KGZpZWxkKSAmJiBmaWVsZC5maWVsZEdyb3VwID8gZ2V0RmllbGRWYWx1ZShmaWVsZCkgOiByb290Lm1vZGVsKSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGZpZWxkLCAnZ2V0Jywge1xuICAgICAgdmFsdWU6IChrZXk6IEZvcm1seUZpZWxkQ29uZmlnWydrZXknXSkgPT4gZ2V0RmllbGQoZmllbGQsIGtleSksXG4gICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgfSk7XG5cbiAgICB0aGlzLmdldEZpZWxkQ29tcG9uZW50SW5zdGFuY2UoZmllbGQpLnByZVBvcHVsYXRlPy4oZmllbGQpO1xuICB9XG5cbiAgb25Qb3B1bGF0ZShmaWVsZDogRm9ybWx5RmllbGRDb25maWdDYWNoZSkge1xuICAgIHRoaXMuaW5pdEZpZWxkT3B0aW9ucyhmaWVsZCk7XG4gICAgdGhpcy5nZXRGaWVsZENvbXBvbmVudEluc3RhbmNlKGZpZWxkKS5vblBvcHVsYXRlPy4oZmllbGQpO1xuICAgIGlmIChmaWVsZC5maWVsZEdyb3VwKSB7XG4gICAgICBmaWVsZC5maWVsZEdyb3VwLmZvckVhY2goKGYsIGluZGV4KSA9PiB7XG4gICAgICAgIGlmIChmKSB7XG4gICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGYsICdwYXJlbnQnLCB7IGdldDogKCkgPT4gZmllbGQsIGNvbmZpZ3VyYWJsZTogdHJ1ZSB9KTtcbiAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZiwgJ2luZGV4JywgeyBnZXQ6ICgpID0+IGluZGV4LCBjb25maWd1cmFibGU6IHRydWUgfSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5mb3JtSWQrKztcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHBvc3RQb3B1bGF0ZShmaWVsZDogRm9ybWx5RmllbGRDb25maWdDYWNoZSkge1xuICAgIHRoaXMuZ2V0RmllbGRDb21wb25lbnRJbnN0YW5jZShmaWVsZCkucG9zdFBvcHVsYXRlPy4oZmllbGQpO1xuICB9XG5cbiAgcHJpdmF0ZSBpbml0RmllbGRQcm9wcyhmaWVsZDogRm9ybWx5RmllbGRDb25maWdDYWNoZSkge1xuICAgIGZpZWxkLnByb3BzID8/PSBmaWVsZC50ZW1wbGF0ZU9wdGlvbnM7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGZpZWxkLCAndGVtcGxhdGVPcHRpb25zJywge1xuICAgICAgZ2V0OiAoKSA9PiBmaWVsZC5wcm9wcyxcbiAgICAgIHNldDogKHByb3BzKSA9PiAoZmllbGQucHJvcHMgPSBwcm9wcyksXG4gICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGluaXRSb290T3B0aW9ucyhmaWVsZDogRm9ybWx5RmllbGRDb25maWdDYWNoZSkge1xuICAgIGlmIChmaWVsZC5wYXJlbnQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBvcHRpb25zID0gZmllbGQub3B0aW9ucztcbiAgICBmaWVsZC5vcHRpb25zLmZvcm1TdGF0ZSA9IGZpZWxkLm9wdGlvbnMuZm9ybVN0YXRlIHx8IHt9O1xuICAgIGlmICghb3B0aW9ucy5zaG93RXJyb3IpIHtcbiAgICAgIG9wdGlvbnMuc2hvd0Vycm9yID0gdGhpcy5jb25maWcuZXh0cmFzLnNob3dFcnJvcjtcbiAgICB9XG5cbiAgICBpZiAoIW9wdGlvbnMuZmllbGRDaGFuZ2VzKSB7XG4gICAgICBkZWZpbmVIaWRkZW5Qcm9wKG9wdGlvbnMsICdmaWVsZENoYW5nZXMnLCBuZXcgU3ViamVjdDxGb3JtbHlWYWx1ZUNoYW5nZUV2ZW50PigpKTtcbiAgICB9XG5cbiAgICBpZiAoIW9wdGlvbnMuX2hpZGRlbkZpZWxkc0ZvckNoZWNrKSB7XG4gICAgICBvcHRpb25zLl9oaWRkZW5GaWVsZHNGb3JDaGVjayA9IFtdO1xuICAgIH1cblxuICAgIG9wdGlvbnMuX21hcmtGb3JDaGVjayA9IChmKSA9PiB7XG4gICAgICBjb25zb2xlLndhcm4oYEZvcm1seTogJ29wdGlvbnMuX21hcmtGb3JDaGVjaycgaXMgZGVwcmVjYXRlZCBzaW5jZSB2Ni4wLCB1c2UgJ29wdGlvbnMuZGV0ZWN0Q2hhbmdlcycgaW5zdGVhZC5gKTtcbiAgICAgIG9wdGlvbnMuZGV0ZWN0Q2hhbmdlcyhmKTtcbiAgICB9O1xuXG4gICAgb3B0aW9ucy5fZGV0ZWN0Q2hhbmdlcyA9IChmOiBGb3JtbHlGaWVsZENvbmZpZ0NhY2hlKSA9PiB7XG4gICAgICBpZiAoZi5fY29tcG9uZW50UmVmcykge1xuICAgICAgICBtYXJrRmllbGRGb3JDaGVjayhmKTtcbiAgICAgIH1cblxuICAgICAgZi5maWVsZEdyb3VwPy5mb3JFYWNoKChmKSA9PiBmICYmIG9wdGlvbnMuX2RldGVjdENoYW5nZXMoZikpO1xuICAgIH07XG5cbiAgICBvcHRpb25zLmRldGVjdENoYW5nZXMgPSAoZjogRm9ybWx5RmllbGRDb25maWdDYWNoZSkgPT4ge1xuICAgICAgZi5vcHRpb25zLmNoZWNrRXhwcmVzc2lvbnM/LihmKTtcbiAgICAgIG9wdGlvbnMuX2RldGVjdENoYW5nZXMoZik7XG4gICAgfTtcblxuICAgIG9wdGlvbnMucmVzZXRNb2RlbCA9IChtb2RlbD86IGFueSkgPT4ge1xuICAgICAgbW9kZWwgPSBjbG9uZShtb2RlbCA/PyBvcHRpb25zLl9pbml0aWFsTW9kZWwpO1xuICAgICAgaWYgKGZpZWxkLm1vZGVsKSB7XG4gICAgICAgIE9iamVjdC5rZXlzKGZpZWxkLm1vZGVsKS5mb3JFYWNoKChrKSA9PiBkZWxldGUgZmllbGQubW9kZWxba10pO1xuICAgICAgICBPYmplY3QuYXNzaWduKGZpZWxkLm1vZGVsLCBtb2RlbCB8fCB7fSk7XG4gICAgICB9XG5cbiAgICAgIGlmICghaXNTaWduYWxSZXF1aXJlZCgpKSB7XG4gICAgICAgIG9ic2VydmUob3B0aW9ucywgWydwYXJlbnRGb3JtJywgJ3N1Ym1pdHRlZCddKS5zZXRWYWx1ZShmYWxzZSwgZmFsc2UpO1xuICAgICAgfVxuICAgICAgb3B0aW9ucy5idWlsZChmaWVsZCk7XG4gICAgICBmaWVsZC5mb3JtLnJlc2V0KGZpZWxkLm1vZGVsKTtcbiAgICB9O1xuXG4gICAgb3B0aW9ucy51cGRhdGVJbml0aWFsVmFsdWUgPSAobW9kZWw/OiBhbnkpID0+IChvcHRpb25zLl9pbml0aWFsTW9kZWwgPSBjbG9uZShtb2RlbCA/PyBmaWVsZC5tb2RlbCkpO1xuICAgIGZpZWxkLm9wdGlvbnMudXBkYXRlSW5pdGlhbFZhbHVlKCk7XG4gIH1cblxuICBwcml2YXRlIGluaXRGaWVsZE9wdGlvbnMoZmllbGQ6IEZvcm1seUZpZWxkQ29uZmlnQ2FjaGUpIHtcbiAgICByZXZlcnNlRGVlcE1lcmdlKGZpZWxkLCB7XG4gICAgICBpZDogZ2V0RmllbGRJZChgZm9ybWx5XyR7dGhpcy5mb3JtSWR9YCwgZmllbGQsIGZpZWxkLmluZGV4KSxcbiAgICAgIGhvb2tzOiB7fSxcbiAgICAgIG1vZGVsT3B0aW9uczoge30sXG4gICAgICB2YWxpZGF0aW9uOiB7IG1lc3NhZ2VzOiB7fSB9LFxuICAgICAgcHJvcHM6XG4gICAgICAgICFmaWVsZC50eXBlIHx8ICFoYXNLZXkoZmllbGQpXG4gICAgICAgICAgPyB7fVxuICAgICAgICAgIDoge1xuICAgICAgICAgICAgICBsYWJlbDogJycsXG4gICAgICAgICAgICAgIHBsYWNlaG9sZGVyOiAnJyxcbiAgICAgICAgICAgICAgZGlzYWJsZWQ6IGZhbHNlLFxuICAgICAgICAgICAgfSxcbiAgICB9KTtcblxuICAgIGlmICh0aGlzLmNvbmZpZy5leHRyYXMucmVzZXRGaWVsZE9uSGlkZSAmJiBmaWVsZC5yZXNldE9uSGlkZSAhPT0gZmFsc2UpIHtcbiAgICAgIGZpZWxkLnJlc2V0T25IaWRlID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAoXG4gICAgICBmaWVsZC50eXBlICE9PSAnZm9ybWx5LXRlbXBsYXRlJyAmJlxuICAgICAgKGZpZWxkLnRlbXBsYXRlIHx8IGZpZWxkLmV4cHJlc3Npb25zPy50ZW1wbGF0ZSB8fCBmaWVsZC5leHByZXNzaW9uUHJvcGVydGllcz8udGVtcGxhdGUpXG4gICAgKSB7XG4gICAgICBmaWVsZC50eXBlID0gJ2Zvcm1seS10ZW1wbGF0ZSc7XG4gICAgfVxuXG4gICAgaWYgKCFmaWVsZC50eXBlICYmIGZpZWxkLmZpZWxkR3JvdXApIHtcbiAgICAgIGZpZWxkLnR5cGUgPSAnZm9ybWx5LWdyb3VwJztcbiAgICB9XG5cbiAgICBpZiAoZmllbGQudHlwZSkge1xuICAgICAgdGhpcy5jb25maWcuZ2V0TWVyZ2VkRmllbGQoZmllbGQpO1xuICAgIH1cblxuICAgIGlmIChcbiAgICAgIGhhc0tleShmaWVsZCkgJiZcbiAgICAgICFpc1VuZGVmaW5lZChmaWVsZC5kZWZhdWx0VmFsdWUpICYmXG4gICAgICBpc1VuZGVmaW5lZChnZXRGaWVsZFZhbHVlKGZpZWxkKSkgJiZcbiAgICAgICFpc0hpZGRlbkZpZWxkKGZpZWxkKVxuICAgICkge1xuICAgICAgYXNzaWduRmllbGRWYWx1ZShmaWVsZCwgZmllbGQuZGVmYXVsdFZhbHVlKTtcbiAgICB9XG5cbiAgICBmaWVsZC53cmFwcGVycyA9IGZpZWxkLndyYXBwZXJzIHx8IFtdO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRGaWVsZENvbXBvbmVudEluc3RhbmNlKGZpZWxkOiBGb3JtbHlGaWVsZENvbmZpZ0NhY2hlKSB7XG4gICAgY29uc3QgY29tcG9uZW50UmVmSW5zdGFuY2UgPSAoKSA9PiB7XG4gICAgICBsZXQgY29tcG9uZW50UmVmID0gdGhpcy5jb25maWcucmVzb2x2ZUZpZWxkVHlwZVJlZihmaWVsZCk7XG5cbiAgICAgIGNvbnN0IGZpZWxkQ29tcG9uZW50UmVmID0gZmllbGQuX2NvbXBvbmVudFJlZnM/LnNsaWNlKC0xKVswXTtcbiAgICAgIGlmIChcbiAgICAgICAgZmllbGRDb21wb25lbnRSZWYgaW5zdGFuY2VvZiBDb21wb25lbnRSZWYgJiZcbiAgICAgICAgZmllbGRDb21wb25lbnRSZWY/LmNvbXBvbmVudFR5cGUgPT09IGNvbXBvbmVudFJlZj8uY29tcG9uZW50VHlwZVxuICAgICAgKSB7XG4gICAgICAgIGNvbXBvbmVudFJlZiA9IGZpZWxkQ29tcG9uZW50UmVmIGFzIGFueTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGNvbXBvbmVudFJlZj8uaW5zdGFuY2UgYXMgYW55O1xuICAgIH07XG5cbiAgICBpZiAoIWZpZWxkLl9wcm94eUluc3RhbmNlKSB7XG4gICAgICBkZWZpbmVIaWRkZW5Qcm9wKFxuICAgICAgICBmaWVsZCxcbiAgICAgICAgJ19wcm94eUluc3RhbmNlJyxcbiAgICAgICAgbmV3IFByb3h5KHt9IGFzIEZvcm1seUV4dGVuc2lvbiwge1xuICAgICAgICAgIGdldDogKF8sIHByb3ApID0+IGNvbXBvbmVudFJlZkluc3RhbmNlKCk/Lltwcm9wXSxcbiAgICAgICAgICBzZXQ6IChfLCBwcm9wLCB2YWx1ZSkgPT4gKGNvbXBvbmVudFJlZkluc3RhbmNlKClbcHJvcF0gPSB2YWx1ZSksXG4gICAgICAgIH0pLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZmllbGQuX3Byb3h5SW5zdGFuY2U7XG4gIH1cbn1cbiJdfQ==
|
|
@@ -1,250 +0,0 @@
|
|
|
1
|
-
import { isObject, isNil, isUndefined, isFunction, defineHiddenProp, observe, getFieldValue, assignFieldValue, hasKey, } from '../../utils';
|
|
2
|
-
import { evalExpression, evalStringExpression } from './utils';
|
|
3
|
-
import { isObservable, Observable } from 'rxjs';
|
|
4
|
-
import { tap } from 'rxjs/operators';
|
|
5
|
-
import { unregisterControl, registerControl, updateValidity } from '../field-form/utils';
|
|
6
|
-
import { FormArray } from '@angular/forms';
|
|
7
|
-
export class FieldExpressionExtension {
|
|
8
|
-
onPopulate(field) {
|
|
9
|
-
if (field._expressions) {
|
|
10
|
-
return;
|
|
11
|
-
}
|
|
12
|
-
// cache built expression
|
|
13
|
-
defineHiddenProp(field, '_expressions', {});
|
|
14
|
-
observe(field, ['hide'], ({ currentValue, firstChange }) => {
|
|
15
|
-
defineHiddenProp(field, '_hide', !!currentValue);
|
|
16
|
-
if (!firstChange || (firstChange && currentValue === true)) {
|
|
17
|
-
field.props.hidden = currentValue;
|
|
18
|
-
field.options._hiddenFieldsForCheck.push({ field });
|
|
19
|
-
}
|
|
20
|
-
});
|
|
21
|
-
if (field.hideExpression) {
|
|
22
|
-
observe(field, ['hideExpression'], ({ currentValue: expr }) => {
|
|
23
|
-
field._expressions.hide = this.parseExpressions(field, 'hide', typeof expr === 'boolean' ? () => expr : expr);
|
|
24
|
-
});
|
|
25
|
-
}
|
|
26
|
-
const evalExpr = (key, expr) => {
|
|
27
|
-
if (typeof expr === 'string' || isFunction(expr)) {
|
|
28
|
-
field._expressions[key] = this.parseExpressions(field, key, expr);
|
|
29
|
-
}
|
|
30
|
-
else if (expr instanceof Observable) {
|
|
31
|
-
field._expressions[key] = {
|
|
32
|
-
value$: expr.pipe(tap((v) => {
|
|
33
|
-
this.evalExpr(field, key, v);
|
|
34
|
-
field.options._detectChanges(field);
|
|
35
|
-
})),
|
|
36
|
-
};
|
|
37
|
-
}
|
|
38
|
-
};
|
|
39
|
-
field.expressions = field.expressions || {};
|
|
40
|
-
for (const key of Object.keys(field.expressions)) {
|
|
41
|
-
observe(field, ['expressions', key], ({ currentValue: expr }) => {
|
|
42
|
-
evalExpr(key, isFunction(expr) ? (...args) => expr(field, args[3]) : expr);
|
|
43
|
-
});
|
|
44
|
-
}
|
|
45
|
-
field.expressionProperties = field.expressionProperties || {};
|
|
46
|
-
for (const key of Object.keys(field.expressionProperties)) {
|
|
47
|
-
observe(field, ['expressionProperties', key], ({ currentValue }) => evalExpr(key, currentValue));
|
|
48
|
-
}
|
|
49
|
-
}
|
|
50
|
-
postPopulate(field) {
|
|
51
|
-
if (field.parent) {
|
|
52
|
-
return;
|
|
53
|
-
}
|
|
54
|
-
if (!field.options.checkExpressions) {
|
|
55
|
-
let checkLocked = false;
|
|
56
|
-
field.options.checkExpressions = (f, ignoreCache) => {
|
|
57
|
-
if (checkLocked) {
|
|
58
|
-
return;
|
|
59
|
-
}
|
|
60
|
-
checkLocked = true;
|
|
61
|
-
const fieldChanged = this.checkExpressions(f, ignoreCache);
|
|
62
|
-
const options = field.options;
|
|
63
|
-
options._hiddenFieldsForCheck
|
|
64
|
-
.sort((f) => (f.field.hide ? -1 : 1))
|
|
65
|
-
.forEach((f) => this.changeHideState(f.field, f.field.hide ?? f.default, !ignoreCache));
|
|
66
|
-
options._hiddenFieldsForCheck = [];
|
|
67
|
-
if (fieldChanged) {
|
|
68
|
-
this.checkExpressions(field);
|
|
69
|
-
}
|
|
70
|
-
checkLocked = false;
|
|
71
|
-
};
|
|
72
|
-
field.options._checkField = (f, ignoreCache) => {
|
|
73
|
-
console.warn(`Formly: 'options._checkField' is deprecated since v6.0, use 'options.checkExpressions' instead.`);
|
|
74
|
-
field.options.checkExpressions(f, ignoreCache);
|
|
75
|
-
};
|
|
76
|
-
}
|
|
77
|
-
}
|
|
78
|
-
parseExpressions(field, path, expr) {
|
|
79
|
-
let parentExpression;
|
|
80
|
-
if (field.parent && ['hide', 'props.disabled'].includes(path)) {
|
|
81
|
-
const rootValue = (f) => {
|
|
82
|
-
return path === 'hide' ? f.hide : f.props.disabled;
|
|
83
|
-
};
|
|
84
|
-
parentExpression = () => {
|
|
85
|
-
let root = field.parent;
|
|
86
|
-
while (root.parent && !rootValue(root)) {
|
|
87
|
-
root = root.parent;
|
|
88
|
-
}
|
|
89
|
-
return rootValue(root);
|
|
90
|
-
};
|
|
91
|
-
}
|
|
92
|
-
expr = expr || (() => false);
|
|
93
|
-
if (typeof expr === 'string') {
|
|
94
|
-
expr = evalStringExpression(expr, ['model', 'formState', 'field']);
|
|
95
|
-
}
|
|
96
|
-
let currentValue;
|
|
97
|
-
return {
|
|
98
|
-
callback: (ignoreCache) => {
|
|
99
|
-
try {
|
|
100
|
-
const exprValue = evalExpression(parentExpression ? (...args) => parentExpression(field) || expr(...args) : expr, { field }, [field.model, field.options.formState, field, ignoreCache]);
|
|
101
|
-
if (ignoreCache ||
|
|
102
|
-
(currentValue !== exprValue &&
|
|
103
|
-
(!isObject(exprValue) ||
|
|
104
|
-
isObservable(exprValue) ||
|
|
105
|
-
JSON.stringify(exprValue) !== JSON.stringify(currentValue)))) {
|
|
106
|
-
currentValue = exprValue;
|
|
107
|
-
this.evalExpr(field, path, exprValue);
|
|
108
|
-
return true;
|
|
109
|
-
}
|
|
110
|
-
return false;
|
|
111
|
-
}
|
|
112
|
-
catch (error) {
|
|
113
|
-
error.message = `[Formly Error] [Expression "${path}"] ${error.message}`;
|
|
114
|
-
throw error;
|
|
115
|
-
}
|
|
116
|
-
},
|
|
117
|
-
};
|
|
118
|
-
}
|
|
119
|
-
checkExpressions(field, ignoreCache = false) {
|
|
120
|
-
if (!field) {
|
|
121
|
-
return false;
|
|
122
|
-
}
|
|
123
|
-
let fieldChanged = false;
|
|
124
|
-
if (field._expressions) {
|
|
125
|
-
for (const key of Object.keys(field._expressions)) {
|
|
126
|
-
field._expressions[key].callback?.(ignoreCache) && (fieldChanged = true);
|
|
127
|
-
}
|
|
128
|
-
}
|
|
129
|
-
field.fieldGroup?.forEach((f) => this.checkExpressions(f, ignoreCache) && (fieldChanged = true));
|
|
130
|
-
return fieldChanged;
|
|
131
|
-
}
|
|
132
|
-
changeDisabledState(field, value) {
|
|
133
|
-
if (field.fieldGroup) {
|
|
134
|
-
field.fieldGroup
|
|
135
|
-
.filter((f) => !f._expressions.hasOwnProperty('props.disabled'))
|
|
136
|
-
.forEach((f) => this.changeDisabledState(f, value));
|
|
137
|
-
}
|
|
138
|
-
if (hasKey(field) && field.props.disabled !== value) {
|
|
139
|
-
field.props.disabled = value;
|
|
140
|
-
}
|
|
141
|
-
}
|
|
142
|
-
changeHideState(field, hide, resetOnHide) {
|
|
143
|
-
if (field.fieldGroup) {
|
|
144
|
-
field.fieldGroup
|
|
145
|
-
.filter((f) => f && !f._expressions.hide)
|
|
146
|
-
.forEach((f) => this.changeHideState(f, hide, resetOnHide));
|
|
147
|
-
}
|
|
148
|
-
if (field.formControl && hasKey(field)) {
|
|
149
|
-
defineHiddenProp(field, '_hide', !!(hide || field.hide));
|
|
150
|
-
const c = field.formControl;
|
|
151
|
-
if (c._fields?.length > 1) {
|
|
152
|
-
updateValidity(c);
|
|
153
|
-
}
|
|
154
|
-
if (hide === true && (!c._fields || c._fields.every((f) => !!f._hide))) {
|
|
155
|
-
unregisterControl(field, true);
|
|
156
|
-
if (resetOnHide && field.resetOnHide) {
|
|
157
|
-
assignFieldValue(field, undefined);
|
|
158
|
-
field.formControl.reset({ value: undefined, disabled: field.formControl.disabled });
|
|
159
|
-
field.options.fieldChanges.next({ value: undefined, field, type: 'valueChanges' });
|
|
160
|
-
if (field.fieldGroup && field.formControl instanceof FormArray) {
|
|
161
|
-
field.fieldGroup.length = 0;
|
|
162
|
-
}
|
|
163
|
-
}
|
|
164
|
-
}
|
|
165
|
-
else if (hide === false) {
|
|
166
|
-
if (field.resetOnHide && !isUndefined(field.defaultValue) && isUndefined(getFieldValue(field))) {
|
|
167
|
-
assignFieldValue(field, field.defaultValue);
|
|
168
|
-
}
|
|
169
|
-
registerControl(field, undefined, true);
|
|
170
|
-
if (field.resetOnHide && field.fieldArray && field.fieldGroup?.length !== field.model?.length) {
|
|
171
|
-
field.options.build(field);
|
|
172
|
-
}
|
|
173
|
-
}
|
|
174
|
-
}
|
|
175
|
-
if (field.options.fieldChanges) {
|
|
176
|
-
field.options.fieldChanges.next({ field, type: 'hidden', value: hide });
|
|
177
|
-
}
|
|
178
|
-
}
|
|
179
|
-
evalExpr(field, prop, value) {
|
|
180
|
-
if (prop.indexOf('model.') === 0) {
|
|
181
|
-
const key = prop.replace(/^model\./, ''), parent = field.fieldGroup ? field : field.parent;
|
|
182
|
-
let control = field?.key === key ? field.formControl : field.form.get(key);
|
|
183
|
-
if (!control && field.get(key)) {
|
|
184
|
-
control = field.get(key).formControl;
|
|
185
|
-
}
|
|
186
|
-
assignFieldValue({ key, parent, model: field.model }, value);
|
|
187
|
-
if (control && !(isNil(control.value) && isNil(value)) && control.value !== value) {
|
|
188
|
-
control.patchValue(value);
|
|
189
|
-
}
|
|
190
|
-
}
|
|
191
|
-
else {
|
|
192
|
-
try {
|
|
193
|
-
let target = field;
|
|
194
|
-
const paths = this._evalExpressionPath(field, prop);
|
|
195
|
-
const lastIndex = paths.length - 1;
|
|
196
|
-
for (let i = 0; i < lastIndex; i++) {
|
|
197
|
-
target = target[paths[i]];
|
|
198
|
-
}
|
|
199
|
-
target[paths[lastIndex]] = value;
|
|
200
|
-
}
|
|
201
|
-
catch (error) {
|
|
202
|
-
error.message = `[Formly Error] [Expression "${prop}"] ${error.message}`;
|
|
203
|
-
throw error;
|
|
204
|
-
}
|
|
205
|
-
if (['templateOptions.disabled', 'props.disabled'].includes(prop) && hasKey(field)) {
|
|
206
|
-
this.changeDisabledState(field, value);
|
|
207
|
-
}
|
|
208
|
-
}
|
|
209
|
-
this.emitExpressionChanges(field, prop, value);
|
|
210
|
-
}
|
|
211
|
-
emitExpressionChanges(field, property, value) {
|
|
212
|
-
if (!field.options.fieldChanges) {
|
|
213
|
-
return;
|
|
214
|
-
}
|
|
215
|
-
field.options.fieldChanges.next({
|
|
216
|
-
field,
|
|
217
|
-
type: 'expressionChanges',
|
|
218
|
-
property,
|
|
219
|
-
value,
|
|
220
|
-
});
|
|
221
|
-
}
|
|
222
|
-
_evalExpressionPath(field, prop) {
|
|
223
|
-
if (field._expressions[prop] && field._expressions[prop].paths) {
|
|
224
|
-
return field._expressions[prop].paths;
|
|
225
|
-
}
|
|
226
|
-
let paths = [];
|
|
227
|
-
if (prop.indexOf('[') === -1) {
|
|
228
|
-
paths = prop.split('.');
|
|
229
|
-
}
|
|
230
|
-
else {
|
|
231
|
-
prop
|
|
232
|
-
.split(/[[\]]{1,2}/) // https://stackoverflow.com/a/20198206
|
|
233
|
-
.filter((p) => p)
|
|
234
|
-
.forEach((path) => {
|
|
235
|
-
const arrayPath = path.match(/['|"](.*?)['|"]/);
|
|
236
|
-
if (arrayPath) {
|
|
237
|
-
paths.push(arrayPath[1]);
|
|
238
|
-
}
|
|
239
|
-
else {
|
|
240
|
-
paths.push(...path.split('.').filter((p) => p));
|
|
241
|
-
}
|
|
242
|
-
});
|
|
243
|
-
}
|
|
244
|
-
if (field._expressions[prop]) {
|
|
245
|
-
field._expressions[prop].paths = paths;
|
|
246
|
-
}
|
|
247
|
-
return paths;
|
|
248
|
-
}
|
|
249
|
-
}
|
|
250
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmllbGQtZXhwcmVzc2lvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9jb3JlL3NyYy9saWIvZXh0ZW5zaW9ucy9maWVsZC1leHByZXNzaW9uL2ZpZWxkLWV4cHJlc3Npb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUNMLFFBQVEsRUFDUixLQUFLLEVBQ0wsV0FBVyxFQUNYLFVBQVUsRUFDVixnQkFBZ0IsRUFDaEIsT0FBTyxFQUNQLGFBQWEsRUFDYixnQkFBZ0IsRUFDaEIsTUFBTSxHQUNQLE1BQU0sYUFBYSxDQUFDO0FBQ3JCLE9BQU8sRUFBRSxjQUFjLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxTQUFTLENBQUM7QUFDL0QsT0FBTyxFQUFFLFlBQVksRUFBRSxVQUFVLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDaEQsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRXJDLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxlQUFlLEVBQUUsY0FBYyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDekYsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRTNDLE1BQU0sT0FBTyx3QkFBd0I7SUFDbkMsVUFBVSxDQUFDLEtBQTZCO1FBQ3RDLElBQUksS0FBSyxDQUFDLFlBQVksRUFBRTtZQUN0QixPQUFPO1NBQ1I7UUFFRCx5QkFBeUI7UUFDekIsZ0JBQWdCLENBQUMsS0FBSyxFQUFFLGNBQWMsRUFBRSxFQUFFLENBQUMsQ0FBQztRQUU1QyxPQUFPLENBQUMsS0FBSyxFQUFFLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxFQUFFLFlBQVksRUFBRSxXQUFXLEVBQUUsRUFBRSxFQUFFO1lBQ3pELGdCQUFnQixDQUFDLEtBQUssRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDLFlBQVksQ0FBQyxDQUFDO1lBQ2pELElBQUksQ0FBQyxXQUFXLElBQUksQ0FBQyxXQUFXLElBQUksWUFBWSxLQUFLLElBQUksQ0FBQyxFQUFFO2dCQUMxRCxLQUFLLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxZQUFZLENBQUM7Z0JBQ2xDLEtBQUssQ0FBQyxPQUFPLENBQUMscUJBQXFCLENBQUMsSUFBSSxDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQzthQUNyRDtRQUNILENBQUMsQ0FBQyxDQUFDO1FBRUgsSUFBSSxLQUFLLENBQUMsY0FBYyxFQUFFO1lBQ3hCLE9BQU8sQ0FBQyxLQUFLLEVBQUUsQ0FBQyxnQkFBZ0IsQ0FBQyxFQUFFLENBQUMsRUFBRSxZQUFZLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRTtnQkFDNUQsS0FBSyxDQUFDLFlBQVksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEtBQUssRUFBRSxNQUFNLEVBQUUsT0FBTyxJQUFJLEtBQUssU0FBUyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ2hILENBQUMsQ0FBQyxDQUFDO1NBQ0o7UUFFRCxNQUFNLFFBQVEsR0FBRyxDQUFDLEdBQVcsRUFBRSxJQUFTLEVBQUUsRUFBRTtZQUMxQyxJQUFJLE9BQU8sSUFBSSxLQUFLLFFBQVEsSUFBSSxVQUFVLENBQUMsSUFBSSxDQUFDLEVBQUU7Z0JBQ2hELEtBQUssQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEtBQUssRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUM7YUFDbkU7aUJBQU0sSUFBSSxJQUFJLFlBQVksVUFBVSxFQUFFO2dCQUNyQyxLQUFLLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxHQUFHO29CQUN4QixNQUFNLEVBQUcsSUFBd0IsQ0FBQyxJQUFJLENBQ3BDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFO3dCQUNSLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQzt3QkFDN0IsS0FBSyxDQUFDLE9BQU8sQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLENBQUM7b0JBQ3RDLENBQUMsQ0FBQyxDQUNIO2lCQUNGLENBQUM7YUFDSDtRQUNILENBQUMsQ0FBQztRQUVGLEtBQUssQ0FBQyxXQUFXLEdBQUcsS0FBSyxDQUFDLFdBQVcsSUFBSSxFQUFFLENBQUM7UUFDNUMsS0FBSyxNQUFNLEdBQUcsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsRUFBRTtZQUNoRCxPQUFPLENBQUMsS0FBSyxFQUFFLENBQUMsYUFBYSxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxZQUFZLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRTtnQkFDOUQsUUFBUSxDQUFDLEdBQUcsRUFBRSxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFTLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ2xGLENBQUMsQ0FBQyxDQUFDO1NBQ0o7UUFFRCxLQUFLLENBQUMsb0JBQW9CLEdBQUcsS0FBSyxDQUFDLG9CQUFvQixJQUFJLEVBQUUsQ0FBQztRQUM5RCxLQUFLLE1BQU0sR0FBRyxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLG9CQUFvQixDQUFDLEVBQUU7WUFDekQsT0FBTyxDQUFDLEtBQUssRUFBRSxDQUFDLHNCQUFzQixFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxZQUFZLEVBQUUsRUFBRSxFQUFFLENBQUMsUUFBUSxDQUFDLEdBQUcsRUFBRSxZQUFZLENBQUMsQ0FBQyxDQUFDO1NBQ2xHO0lBQ0gsQ0FBQztJQUVELFlBQVksQ0FBQyxLQUE2QjtRQUN4QyxJQUFJLEtBQUssQ0FBQyxNQUFNLEVBQUU7WUFDaEIsT0FBTztTQUNSO1FBRUQsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsZ0JBQWdCLEVBQUU7WUFDbkMsSUFBSSxXQUFXLEdBQUcsS0FBSyxDQUFDO1lBQ3hCLEtBQUssQ0FBQyxPQUFPLENBQUMsZ0JBQWdCLEdBQUcsQ0FBQyxDQUFDLEVBQUUsV0FBVyxFQUFFLEVBQUU7Z0JBQ2xELElBQUksV0FBVyxFQUFFO29CQUNmLE9BQU87aUJBQ1I7Z0JBRUQsV0FBVyxHQUFHLElBQUksQ0FBQztnQkFDbkIsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUMsRUFBRSxXQUFXLENBQUMsQ0FBQztnQkFDM0QsTUFBTSxPQUFPLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQztnQkFDOUIsT0FBTyxDQUFDLHFCQUFxQjtxQkFDMUIsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7cUJBQ3BDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDO2dCQUMxRixPQUFPLENBQUMscUJBQXFCLEdBQUcsRUFBRSxDQUFDO2dCQUNuQyxJQUFJLFlBQVksRUFBRTtvQkFDaEIsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEtBQUssQ0FBQyxDQUFDO2lCQUM5QjtnQkFDRCxXQUFXLEdBQUcsS0FBSyxDQUFDO1lBQ3RCLENBQUMsQ0FBQztZQUNGLEtBQUssQ0FBQyxPQUFPLENBQUMsV0FBVyxHQUFHLENBQUMsQ0FBQyxFQUFFLFdBQVcsRUFBRSxFQUFFO2dCQUM3QyxPQUFPLENBQUMsSUFBSSxDQUFDLGlHQUFpRyxDQUFDLENBQUM7Z0JBQ2hILEtBQUssQ0FBQyxPQUFPLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxFQUFFLFdBQVcsQ0FBQyxDQUFDO1lBQ2pELENBQUMsQ0FBQztTQUNIO0lBQ0gsQ0FBQztJQUVPLGdCQUFnQixDQUFDLEtBQTZCLEVBQUUsSUFBWSxFQUFFLElBQVM7UUFDN0UsSUFBSSxnQkFBcUIsQ0FBQztRQUMxQixJQUFJLEtBQUssQ0FBQyxNQUFNLElBQUksQ0FBQyxNQUFNLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDN0QsTUFBTSxTQUFTLEdBQUcsQ0FBQyxDQUF5QixFQUFFLEVBQUU7Z0JBQzlDLE9BQU8sSUFBSSxLQUFLLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUM7WUFDckQsQ0FBQyxDQUFDO1lBRUYsZ0JBQWdCLEdBQUcsR0FBRyxFQUFFO2dCQUN0QixJQUFJLElBQUksR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDO2dCQUN4QixPQUFPLElBQUksQ0FBQyxNQUFNLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLEVBQUU7b0JBQ3RDLElBQUksR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO2lCQUNwQjtnQkFFRCxPQUFPLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUN6QixDQUFDLENBQUM7U0FDSDtRQUVELElBQUksR0FBRyxJQUFJLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUM3QixJQUFJLE9BQU8sSUFBSSxLQUFLLFFBQVEsRUFBRTtZQUM1QixJQUFJLEdBQUcsb0JBQW9CLENBQUMsSUFBSSxFQUFFLENBQUMsT0FBTyxFQUFFLFdBQVcsRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDO1NBQ3BFO1FBRUQsSUFBSSxZQUFpQixDQUFDO1FBRXRCLE9BQU87WUFDTCxRQUFRLEVBQUUsQ0FBQyxXQUFxQixFQUFFLEVBQUU7Z0JBQ2xDLElBQUk7b0JBQ0YsTUFBTSxTQUFTLEdBQUcsY0FBYyxDQUM5QixnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQVMsRUFBRSxFQUFFLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxDQUFDLElBQUksSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksRUFDcEYsRUFBRSxLQUFLLEVBQUUsRUFDVCxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLE9BQU8sQ0FBQyxTQUFTLEVBQUUsS0FBSyxFQUFFLFdBQVcsQ0FBQyxDQUMzRCxDQUFDO29CQUVGLElBQ0UsV0FBVzt3QkFDWCxDQUFDLFlBQVksS0FBSyxTQUFTOzRCQUN6QixDQUFDLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQztnQ0FDbkIsWUFBWSxDQUFDLFNBQVMsQ0FBQztnQ0FDdkIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsS0FBSyxJQUFJLENBQUMsU0FBUyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsRUFDaEU7d0JBQ0EsWUFBWSxHQUFHLFNBQVMsQ0FBQzt3QkFDekIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLEVBQUUsSUFBSSxFQUFFLFNBQVMsQ0FBQyxDQUFDO3dCQUV0QyxPQUFPLElBQUksQ0FBQztxQkFDYjtvQkFFRCxPQUFPLEtBQUssQ0FBQztpQkFDZDtnQkFBQyxPQUFPLEtBQVUsRUFBRTtvQkFDbkIsS0FBSyxDQUFDLE9BQU8sR0FBRywrQkFBK0IsSUFBSSxNQUFNLEtBQUssQ0FBQyxPQUFPLEVBQUUsQ0FBQztvQkFDekUsTUFBTSxLQUFLLENBQUM7aUJBQ2I7WUFDSCxDQUFDO1NBQ0YsQ0FBQztJQUNKLENBQUM7SUFFTyxnQkFBZ0IsQ0FBQyxLQUE2QixFQUFFLFdBQVcsR0FBRyxLQUFLO1FBQ3pFLElBQUksQ0FBQyxLQUFLLEVBQUU7WUFDVixPQUFPLEtBQUssQ0FBQztTQUNkO1FBRUQsSUFBSSxZQUFZLEdBQUcsS0FBSyxDQUFDO1FBQ3pCLElBQUksS0FBSyxDQUFDLFlBQVksRUFBRTtZQUN0QixLQUFLLE1BQU0sR0FBRyxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FBQyxFQUFFO2dCQUNqRCxLQUFLLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxDQUFDO2FBQzFFO1NBQ0Y7UUFDRCxLQUFLLENBQUMsVUFBVSxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUMsRUFBRSxXQUFXLENBQUMsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBRWpHLE9BQU8sWUFBWSxDQUFDO0lBQ3RCLENBQUM7SUFFTyxtQkFBbUIsQ0FBQyxLQUE2QixFQUFFLEtBQWM7UUFDdkUsSUFBSSxLQUFLLENBQUMsVUFBVSxFQUFFO1lBQ3BCLEtBQUssQ0FBQyxVQUFVO2lCQUNiLE1BQU0sQ0FBQyxDQUFDLENBQXlCLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxjQUFjLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztpQkFDdkYsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUM7U0FDdkQ7UUFFRCxJQUFJLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxLQUFLLENBQUMsS0FBSyxDQUFDLFFBQVEsS0FBSyxLQUFLLEVBQUU7WUFDbkQsS0FBSyxDQUFDLEtBQUssQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDO1NBQzlCO0lBQ0gsQ0FBQztJQUVPLGVBQWUsQ0FBQyxLQUE2QixFQUFFLElBQWEsRUFBRSxXQUFvQjtRQUN4RixJQUFJLEtBQUssQ0FBQyxVQUFVLEVBQUU7WUFDcEIsS0FBSyxDQUFDLFVBQVU7aUJBQ2IsTUFBTSxDQUFDLENBQUMsQ0FBeUIsRUFBRSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUM7aUJBQ2hFLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLFdBQVcsQ0FBQyxDQUFDLENBQUM7U0FDL0Q7UUFFRCxJQUFJLEtBQUssQ0FBQyxXQUFXLElBQUksTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFO1lBQ3RDLGdCQUFnQixDQUFDLEtBQUssRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1lBQ3pELE1BQU0sQ0FBQyxHQUFHLEtBQUssQ0FBQyxXQUFXLENBQUM7WUFDNUIsSUFBSSxDQUFDLENBQUMsT0FBTyxFQUFFLE1BQU0sR0FBRyxDQUFDLEVBQUU7Z0JBQ3pCLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQzthQUNuQjtZQUVELElBQUksSUFBSSxLQUFLLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sSUFBSSxDQUFDLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFO2dCQUN0RSxpQkFBaUIsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUM7Z0JBQy9CLElBQUksV0FBVyxJQUFJLEtBQUssQ0FBQyxXQUFXLEVBQUU7b0JBQ3BDLGdCQUFnQixDQUFDLEtBQUssRUFBRSxTQUFTLENBQUMsQ0FBQztvQkFDbkMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxLQUFLLENBQUMsV0FBVyxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUM7b0JBQ3BGLEtBQUssQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxjQUFjLEVBQUUsQ0FBQyxDQUFDO29CQUNuRixJQUFJLEtBQUssQ0FBQyxVQUFVLElBQUksS0FBSyxDQUFDLFdBQVcsWUFBWSxTQUFTLEVBQUU7d0JBQzlELEtBQUssQ0FBQyxVQUFVLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztxQkFDN0I7aUJBQ0Y7YUFDRjtpQkFBTSxJQUFJLElBQUksS0FBSyxLQUFLLEVBQUU7Z0JBQ3pCLElBQUksS0FBSyxDQUFDLFdBQVcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUFDLElBQUksV0FBVyxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFO29CQUM5RixnQkFBZ0IsQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLFlBQVksQ0FBQyxDQUFDO2lCQUM3QztnQkFDRCxlQUFlLENBQUMsS0FBSyxFQUFFLFNBQVMsRUFBRSxJQUFJLENBQUMsQ0FBQztnQkFDeEMsSUFBSSxLQUFLLENBQUMsV0FBVyxJQUFJLEtBQUssQ0FBQyxVQUFVLElBQUksS0FBSyxDQUFDLFVBQVUsRUFBRSxNQUFNLEtBQUssS0FBSyxDQUFDLEtBQUssRUFBRSxNQUFNLEVBQUU7b0JBQzdGLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO2lCQUM1QjthQUNGO1NBQ0Y7UUFFRCxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsWUFBWSxFQUFFO1lBQzlCLEtBQUssQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBeUIsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztTQUNqRztJQUNILENBQUM7SUFFTyxRQUFRLENBQUMsS0FBNkIsRUFBRSxJQUFZLEVBQUUsS0FBVTtRQUN0RSxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxFQUFFO1lBQ2hDLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsVUFBVSxFQUFFLEVBQUUsQ0FBQyxFQUN0QyxNQUFNLEdBQUcsS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDO1lBRW5ELElBQUksT0FBTyxHQUFHLEtBQUssRUFBRSxHQUFHLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUMzRSxJQUFJLENBQUMsT0FBTyxJQUFJLEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUU7Z0JBQzlCLE9BQU8sR0FBRyxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLFdBQVcsQ0FBQzthQUN0QztZQUNELGdCQUFnQixDQUFDLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLEtBQUssQ0FBQyxDQUFDO1lBQzdELElBQUksT0FBTyxJQUFJLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxJQUFJLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLE9BQU8sQ0FBQyxLQUFLLEtBQUssS0FBSyxFQUFFO2dCQUNqRixPQUFPLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDO2FBQzNCO1NBQ0Y7YUFBTTtZQUNMLElBQUk7Z0JBQ0YsSUFBSSxNQUFNLEdBQVEsS0FBSyxDQUFDO2dCQUN4QixNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDO2dCQUNwRCxNQUFNLFNBQVMsR0FBRyxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztnQkFDbkMsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFNBQVMsRUFBRSxDQUFDLEVBQUUsRUFBRTtvQkFDbEMsTUFBTSxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztpQkFDM0I7Z0JBRUQsTUFBTSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQzthQUNsQztZQUFDLE9BQU8sS0FBVSxFQUFFO2dCQUNuQixLQUFLLENBQUMsT0FBTyxHQUFHLCtCQUErQixJQUFJLE1BQU0sS0FBSyxDQUFDLE9BQU8sRUFBRSxDQUFDO2dCQUN6RSxNQUFNLEtBQUssQ0FBQzthQUNiO1lBRUQsSUFBSSxDQUFDLDBCQUEwQixFQUFFLGdCQUFnQixDQUFDLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFBRTtnQkFDbEYsSUFBSSxDQUFDLG1CQUFtQixDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQzthQUN4QztTQUNGO1FBRUQsSUFBSSxDQUFDLHFCQUFxQixDQUFDLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDakQsQ0FBQztJQUVPLHFCQUFxQixDQUFDLEtBQTZCLEVBQUUsUUFBZ0IsRUFBRSxLQUFVO1FBQ3ZGLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLFlBQVksRUFBRTtZQUMvQixPQUFPO1NBQ1I7UUFFRCxLQUFLLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUM7WUFDOUIsS0FBSztZQUNMLElBQUksRUFBRSxtQkFBbUI7WUFDekIsUUFBUTtZQUNSLEtBQUs7U0FDTixDQUFDLENBQUM7SUFDTCxDQUFDO0lBRU8sbUJBQW1CLENBQUMsS0FBNkIsRUFBRSxJQUFZO1FBQ3JFLElBQUksS0FBSyxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsSUFBSSxLQUFLLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDLEtBQUssRUFBRTtZQUM5RCxPQUFPLEtBQUssQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUMsS0FBSyxDQUFDO1NBQ3ZDO1FBRUQsSUFBSSxLQUFLLEdBQWEsRUFBRSxDQUFDO1FBQ3pCLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRTtZQUM1QixLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztTQUN6QjthQUFNO1lBQ0wsSUFBSTtpQkFDRCxLQUFLLENBQUMsWUFBWSxDQUFDLENBQUMsdUNBQXVDO2lCQUMzRCxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztpQkFDaEIsT0FBTyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUU7Z0JBQ2hCLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsaUJBQWlCLENBQUMsQ0FBQztnQkFDaEQsSUFBSSxTQUFTLEVBQUU7b0JBQ2IsS0FBSyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztpQkFDMUI7cUJBQU07b0JBQ0wsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2lCQUNqRDtZQUNILENBQUMsQ0FBQyxDQUFDO1NBQ047UUFFRCxJQUFJLEtBQUssQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDNUIsS0FBSyxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO1NBQ3hDO1FBRUQsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBGb3JtbHlWYWx1ZUNoYW5nZUV2ZW50LCBGb3JtbHlGaWVsZENvbmZpZ0NhY2hlIH0gZnJvbSAnLi4vLi4vbW9kZWxzJztcbmltcG9ydCB7XG4gIGlzT2JqZWN0LFxuICBpc05pbCxcbiAgaXNVbmRlZmluZWQsXG4gIGlzRnVuY3Rpb24sXG4gIGRlZmluZUhpZGRlblByb3AsXG4gIG9ic2VydmUsXG4gIGdldEZpZWxkVmFsdWUsXG4gIGFzc2lnbkZpZWxkVmFsdWUsXG4gIGhhc0tleSxcbn0gZnJvbSAnLi4vLi4vdXRpbHMnO1xuaW1wb3J0IHsgZXZhbEV4cHJlc3Npb24sIGV2YWxTdHJpbmdFeHByZXNzaW9uIH0gZnJvbSAnLi91dGlscyc7XG5pbXBvcnQgeyBpc09ic2VydmFibGUsIE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IHRhcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IEZvcm1seUV4dGVuc2lvbiB9IGZyb20gJy4uLy4uL21vZGVscyc7XG5pbXBvcnQgeyB1bnJlZ2lzdGVyQ29udHJvbCwgcmVnaXN0ZXJDb250cm9sLCB1cGRhdGVWYWxpZGl0eSB9IGZyb20gJy4uL2ZpZWxkLWZvcm0vdXRpbHMnO1xuaW1wb3J0IHsgRm9ybUFycmF5IH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuXG5leHBvcnQgY2xhc3MgRmllbGRFeHByZXNzaW9uRXh0ZW5zaW9uIGltcGxlbWVudHMgRm9ybWx5RXh0ZW5zaW9uIHtcbiAgb25Qb3B1bGF0ZShmaWVsZDogRm9ybWx5RmllbGRDb25maWdDYWNoZSkge1xuICAgIGlmIChmaWVsZC5fZXhwcmVzc2lvbnMpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBjYWNoZSBidWlsdCBleHByZXNzaW9uXG4gICAgZGVmaW5lSGlkZGVuUHJvcChmaWVsZCwgJ19leHByZXNzaW9ucycsIHt9KTtcblxuICAgIG9ic2VydmUoZmllbGQsIFsnaGlkZSddLCAoeyBjdXJyZW50VmFsdWUsIGZpcnN0Q2hhbmdlIH0pID0+IHtcbiAgICAgIGRlZmluZUhpZGRlblByb3AoZmllbGQsICdfaGlkZScsICEhY3VycmVudFZhbHVlKTtcbiAgICAgIGlmICghZmlyc3RDaGFuZ2UgfHwgKGZpcnN0Q2hhbmdlICYmIGN1cnJlbnRWYWx1ZSA9PT0gdHJ1ZSkpIHtcbiAgICAgICAgZmllbGQucHJvcHMuaGlkZGVuID0gY3VycmVudFZhbHVlO1xuICAgICAgICBmaWVsZC5vcHRpb25zLl9oaWRkZW5GaWVsZHNGb3JDaGVjay5wdXNoKHsgZmllbGQgfSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBpZiAoZmllbGQuaGlkZUV4cHJlc3Npb24pIHtcbiAgICAgIG9ic2VydmUoZmllbGQsIFsnaGlkZUV4cHJlc3Npb24nXSwgKHsgY3VycmVudFZhbHVlOiBleHByIH0pID0+IHtcbiAgICAgICAgZmllbGQuX2V4cHJlc3Npb25zLmhpZGUgPSB0aGlzLnBhcnNlRXhwcmVzc2lvbnMoZmllbGQsICdoaWRlJywgdHlwZW9mIGV4cHIgPT09ICdib29sZWFuJyA/ICgpID0+IGV4cHIgOiBleHByKTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGNvbnN0IGV2YWxFeHByID0gKGtleTogc3RyaW5nLCBleHByOiBhbnkpID0+IHtcbiAgICAgIGlmICh0eXBlb2YgZXhwciA9PT0gJ3N0cmluZycgfHwgaXNGdW5jdGlvbihleHByKSkge1xuICAgICAgICBmaWVsZC5fZXhwcmVzc2lvbnNba2V5XSA9IHRoaXMucGFyc2VFeHByZXNzaW9ucyhmaWVsZCwga2V5LCBleHByKTtcbiAgICAgIH0gZWxzZSBpZiAoZXhwciBpbnN0YW5jZW9mIE9ic2VydmFibGUpIHtcbiAgICAgICAgZmllbGQuX2V4cHJlc3Npb25zW2tleV0gPSB7XG4gICAgICAgICAgdmFsdWUkOiAoZXhwciBhcyBPYnNlcnZhYmxlPGFueT4pLnBpcGUoXG4gICAgICAgICAgICB0YXAoKHYpID0+IHtcbiAgICAgICAgICAgICAgdGhpcy5ldmFsRXhwcihmaWVsZCwga2V5LCB2KTtcbiAgICAgICAgICAgICAgZmllbGQub3B0aW9ucy5fZGV0ZWN0Q2hhbmdlcyhmaWVsZCk7XG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICApLFxuICAgICAgICB9O1xuICAgICAgfVxuICAgIH07XG5cbiAgICBmaWVsZC5leHByZXNzaW9ucyA9IGZpZWxkLmV4cHJlc3Npb25zIHx8IHt9O1xuICAgIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKGZpZWxkLmV4cHJlc3Npb25zKSkge1xuICAgICAgb2JzZXJ2ZShmaWVsZCwgWydleHByZXNzaW9ucycsIGtleV0sICh7IGN1cnJlbnRWYWx1ZTogZXhwciB9KSA9PiB7XG4gICAgICAgIGV2YWxFeHByKGtleSwgaXNGdW5jdGlvbihleHByKSA/ICguLi5hcmdzOiBhbnkpID0+IGV4cHIoZmllbGQsIGFyZ3NbM10pIDogZXhwcik7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBmaWVsZC5leHByZXNzaW9uUHJvcGVydGllcyA9IGZpZWxkLmV4cHJlc3Npb25Qcm9wZXJ0aWVzIHx8IHt9O1xuICAgIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKGZpZWxkLmV4cHJlc3Npb25Qcm9wZXJ0aWVzKSkge1xuICAgICAgb2JzZXJ2ZShmaWVsZCwgWydleHByZXNzaW9uUHJvcGVydGllcycsIGtleV0sICh7IGN1cnJlbnRWYWx1ZSB9KSA9PiBldmFsRXhwcihrZXksIGN1cnJlbnRWYWx1ZSkpO1xuICAgIH1cbiAgfVxuXG4gIHBvc3RQb3B1bGF0ZShmaWVsZDogRm9ybWx5RmllbGRDb25maWdDYWNoZSkge1xuICAgIGlmIChmaWVsZC5wYXJlbnQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoIWZpZWxkLm9wdGlvbnMuY2hlY2tFeHByZXNzaW9ucykge1xuICAgICAgbGV0IGNoZWNrTG9ja2VkID0gZmFsc2U7XG4gICAgICBmaWVsZC5vcHRpb25zLmNoZWNrRXhwcmVzc2lvbnMgPSAoZiwgaWdub3JlQ2FjaGUpID0+IHtcbiAgICAgICAgaWYgKGNoZWNrTG9ja2VkKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY2hlY2tMb2NrZWQgPSB0cnVlO1xuICAgICAgICBjb25zdCBmaWVsZENoYW5nZWQgPSB0aGlzLmNoZWNrRXhwcmVzc2lvbnMoZiwgaWdub3JlQ2FjaGUpO1xuICAgICAgICBjb25zdCBvcHRpb25zID0gZmllbGQub3B0aW9ucztcbiAgICAgICAgb3B0aW9ucy5faGlkZGVuRmllbGRzRm9yQ2hlY2tcbiAgICAgICAgICAuc29ydCgoZikgPT4gKGYuZmllbGQuaGlkZSA/IC0xIDogMSkpXG4gICAgICAgICAgLmZvckVhY2goKGYpID0+IHRoaXMuY2hhbmdlSGlkZVN0YXRlKGYuZmllbGQsIGYuZmllbGQuaGlkZSA/PyBmLmRlZmF1bHQsICFpZ25vcmVDYWNoZSkpO1xuICAgICAgICBvcHRpb25zLl9oaWRkZW5GaWVsZHNGb3JDaGVjayA9IFtdO1xuICAgICAgICBpZiAoZmllbGRDaGFuZ2VkKSB7XG4gICAgICAgICAgdGhpcy5jaGVja0V4cHJlc3Npb25zKGZpZWxkKTtcbiAgICAgICAgfVxuICAgICAgICBjaGVja0xvY2tlZCA9IGZhbHNlO1xuICAgICAgfTtcbiAgICAgIGZpZWxkLm9wdGlvbnMuX2NoZWNrRmllbGQgPSAoZiwgaWdub3JlQ2FjaGUpID0+IHtcbiAgICAgICAgY29uc29sZS53YXJuKGBGb3JtbHk6ICdvcHRpb25zLl9jaGVja0ZpZWxkJyBpcyBkZXByZWNhdGVkIHNpbmNlIHY2LjAsIHVzZSAnb3B0aW9ucy5jaGVja0V4cHJlc3Npb25zJyBpbnN0ZWFkLmApO1xuICAgICAgICBmaWVsZC5vcHRpb25zLmNoZWNrRXhwcmVzc2lvbnMoZiwgaWdub3JlQ2FjaGUpO1xuICAgICAgfTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHBhcnNlRXhwcmVzc2lvbnMoZmllbGQ6IEZvcm1seUZpZWxkQ29uZmlnQ2FjaGUsIHBhdGg6IHN0cmluZywgZXhwcjogYW55KSB7XG4gICAgbGV0IHBhcmVudEV4cHJlc3Npb246IGFueTtcbiAgICBpZiAoZmllbGQucGFyZW50ICYmIFsnaGlkZScsICdwcm9wcy5kaXNhYmxlZCddLmluY2x1ZGVzKHBhdGgpKSB7XG4gICAgICBjb25zdCByb290VmFsdWUgPSAoZjogRm9ybWx5RmllbGRDb25maWdDYWNoZSkgPT4ge1xuICAgICAgICByZXR1cm4gcGF0aCA9PT0gJ2hpZGUnID8gZi5oaWRlIDogZi5wcm9wcy5kaXNhYmxlZDtcbiAgICAgIH07XG5cbiAgICAgIHBhcmVudEV4cHJlc3Npb24gPSAoKSA9PiB7XG4gICAgICAgIGxldCByb290ID0gZmllbGQucGFyZW50O1xuICAgICAgICB3aGlsZSAocm9vdC5wYXJlbnQgJiYgIXJvb3RWYWx1ZShyb290KSkge1xuICAgICAgICAgIHJvb3QgPSByb290LnBhcmVudDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiByb290VmFsdWUocm9vdCk7XG4gICAgICB9O1xuICAgIH1cblxuICAgIGV4cHIgPSBleHByIHx8ICgoKSA9PiBmYWxzZSk7XG4gICAgaWYgKHR5cGVvZiBleHByID09PSAnc3RyaW5nJykge1xuICAgICAgZXhwciA9IGV2YWxTdHJpbmdFeHByZXNzaW9uKGV4cHIsIFsnbW9kZWwnLCAnZm9ybVN0YXRlJywgJ2ZpZWxkJ10pO1xuICAgIH1cblxuICAgIGxldCBjdXJyZW50VmFsdWU6IGFueTtcblxuICAgIHJldHVybiB7XG4gICAgICBjYWxsYmFjazogKGlnbm9yZUNhY2hlPzogYm9vbGVhbikgPT4ge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IGV4cHJWYWx1ZSA9IGV2YWxFeHByZXNzaW9uKFxuICAgICAgICAgICAgcGFyZW50RXhwcmVzc2lvbiA/ICguLi5hcmdzOiBhbnkpID0+IHBhcmVudEV4cHJlc3Npb24oZmllbGQpIHx8IGV4cHIoLi4uYXJncykgOiBleHByLFxuICAgICAgICAgICAgeyBmaWVsZCB9LFxuICAgICAgICAgICAgW2ZpZWxkLm1vZGVsLCBmaWVsZC5vcHRpb25zLmZvcm1TdGF0ZSwgZmllbGQsIGlnbm9yZUNhY2hlXSxcbiAgICAgICAgICApO1xuXG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgaWdub3JlQ2FjaGUgfHxcbiAgICAgICAgICAgIChjdXJyZW50VmFsdWUgIT09IGV4cHJWYWx1ZSAmJlxuICAgICAgICAgICAgICAoIWlzT2JqZWN0KGV4cHJWYWx1ZSkgfHxcbiAgICAgICAgICAgICAgICBpc09ic2VydmFibGUoZXhwclZhbHVlKSB8fFxuICAgICAgICAgICAgICAgIEpTT04uc3RyaW5naWZ5KGV4cHJWYWx1ZSkgIT09IEpTT04uc3RyaW5naWZ5KGN1cnJlbnRWYWx1ZSkpKVxuICAgICAgICAgICkge1xuICAgICAgICAgICAgY3VycmVudFZhbHVlID0gZXhwclZhbHVlO1xuICAgICAgICAgICAgdGhpcy5ldmFsRXhwcihmaWVsZCwgcGF0aCwgZXhwclZhbHVlKTtcblxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9IGNhdGNoIChlcnJvcjogYW55KSB7XG4gICAgICAgICAgZXJyb3IubWVzc2FnZSA9IGBbRm9ybWx5IEVycm9yXSBbRXhwcmVzc2lvbiBcIiR7cGF0aH1cIl0gJHtlcnJvci5tZXNzYWdlfWA7XG4gICAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgY2hlY2tFeHByZXNzaW9ucyhmaWVsZDogRm9ybWx5RmllbGRDb25maWdDYWNoZSwgaWdub3JlQ2FjaGUgPSBmYWxzZSkge1xuICAgIGlmICghZmllbGQpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBsZXQgZmllbGRDaGFuZ2VkID0gZmFsc2U7XG4gICAgaWYgKGZpZWxkLl9leHByZXNzaW9ucykge1xuICAgICAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXMoZmllbGQuX2V4cHJlc3Npb25zKSkge1xuICAgICAgICBmaWVsZC5fZXhwcmVzc2lvbnNba2V5XS5jYWxsYmFjaz8uKGlnbm9yZUNhY2hlKSAmJiAoZmllbGRDaGFuZ2VkID0gdHJ1ZSk7XG4gICAgICB9XG4gICAgfVxuICAgIGZpZWxkLmZpZWxkR3JvdXA/LmZvckVhY2goKGYpID0+IHRoaXMuY2hlY2tFeHByZXNzaW9ucyhmLCBpZ25vcmVDYWNoZSkgJiYgKGZpZWxkQ2hhbmdlZCA9IHRydWUpKTtcblxuICAgIHJldHVybiBmaWVsZENoYW5nZWQ7XG4gIH1cblxuICBwcml2YXRlIGNoYW5nZURpc2FibGVkU3RhdGUoZmllbGQ6IEZvcm1seUZpZWxkQ29uZmlnQ2FjaGUsIHZhbHVlOiBib29sZWFuKSB7XG4gICAgaWYgKGZpZWxkLmZpZWxkR3JvdXApIHtcbiAgICAgIGZpZWxkLmZpZWxkR3JvdXBcbiAgICAgICAgLmZpbHRlcigoZjogRm9ybWx5RmllbGRDb25maWdDYWNoZSkgPT4gIWYuX2V4cHJlc3Npb25zLmhhc093blByb3BlcnR5KCdwcm9wcy5kaXNhYmxlZCcpKVxuICAgICAgICAuZm9yRWFjaCgoZikgPT4gdGhpcy5jaGFuZ2VEaXNhYmxlZFN0YXRlKGYsIHZhbHVlKSk7XG4gICAgfVxuXG4gICAgaWYgKGhhc0tleShmaWVsZCkgJiYgZmllbGQucHJvcHMuZGlzYWJsZWQgIT09IHZhbHVlKSB7XG4gICAgICBmaWVsZC5wcm9wcy5kaXNhYmxlZCA9IHZhbHVlO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgY2hhbmdlSGlkZVN0YXRlKGZpZWxkOiBGb3JtbHlGaWVsZENvbmZpZ0NhY2hlLCBoaWRlOiBib29sZWFuLCByZXNldE9uSGlkZTogYm9vbGVhbikge1xuICAgIGlmIChmaWVsZC5maWVsZEdyb3VwKSB7XG4gICAgICBmaWVsZC5maWVsZEdyb3VwXG4gICAgICAgIC5maWx0ZXIoKGY6IEZvcm1seUZpZWxkQ29uZmlnQ2FjaGUpID0+IGYgJiYgIWYuX2V4cHJlc3Npb25zLmhpZGUpXG4gICAgICAgIC5mb3JFYWNoKChmKSA9PiB0aGlzLmNoYW5nZUhpZGVTdGF0ZShmLCBoaWRlLCByZXNldE9uSGlkZSkpO1xuICAgIH1cblxuICAgIGlmIChmaWVsZC5mb3JtQ29udHJvbCAmJiBoYXNLZXkoZmllbGQpKSB7XG4gICAgICBkZWZpbmVIaWRkZW5Qcm9wKGZpZWxkLCAnX2hpZGUnLCAhIShoaWRlIHx8IGZpZWxkLmhpZGUpKTtcbiAgICAgIGNvbnN0IGMgPSBmaWVsZC5mb3JtQ29udHJvbDtcbiAgICAgIGlmIChjLl9maWVsZHM/Lmxlbmd0aCA+IDEpIHtcbiAgICAgICAgdXBkYXRlVmFsaWRpdHkoYyk7XG4gICAgICB9XG5cbiAgICAgIGlmIChoaWRlID09PSB0cnVlICYmICghYy5fZmllbGRzIHx8IGMuX2ZpZWxkcy5ldmVyeSgoZikgPT4gISFmLl9oaWRlKSkpIHtcbiAgICAgICAgdW5yZWdpc3RlckNvbnRyb2woZmllbGQsIHRydWUpO1xuICAgICAgICBpZiAocmVzZXRPbkhpZGUgJiYgZmllbGQucmVzZXRPbkhpZGUpIHtcbiAgICAgICAgICBhc3NpZ25GaWVsZFZhbHVlKGZpZWxkLCB1bmRlZmluZWQpO1xuICAgICAgICAgIGZpZWxkLmZvcm1Db250cm9sLnJlc2V0KHsgdmFsdWU6IHVuZGVmaW5lZCwgZGlzYWJsZWQ6IGZpZWxkLmZvcm1Db250cm9sLmRpc2FibGVkIH0pO1xuICAgICAgICAgIGZpZWxkLm9wdGlvbnMuZmllbGRDaGFuZ2VzLm5leHQoeyB2YWx1ZTogdW5kZWZpbmVkLCBmaWVsZCwgdHlwZTogJ3ZhbHVlQ2hhbmdlcycgfSk7XG4gICAgICAgICAgaWYgKGZpZWxkLmZpZWxkR3JvdXAgJiYgZmllbGQuZm9ybUNvbnRyb2wgaW5zdGFuY2VvZiBGb3JtQXJyYXkpIHtcbiAgICAgICAgICAgIGZpZWxkLmZpZWxkR3JvdXAubGVuZ3RoID0gMDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoaGlkZSA9PT0gZmFsc2UpIHtcbiAgICAgICAgaWYgKGZpZWxkLnJlc2V0T25IaWRlICYmICFpc1VuZGVmaW5lZChmaWVsZC5kZWZhdWx0VmFsdWUpICYmIGlzVW5kZWZpbmVkKGdldEZpZWxkVmFsdWUoZmllbGQpKSkge1xuICAgICAgICAgIGFzc2lnbkZpZWxkVmFsdWUoZmllbGQsIGZpZWxkLmRlZmF1bHRWYWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmVnaXN0ZXJDb250cm9sKGZpZWxkLCB1bmRlZmluZWQsIHRydWUpO1xuICAgICAgICBpZiAoZmllbGQucmVzZXRPbkhpZGUgJiYgZmllbGQuZmllbGRBcnJheSAmJiBmaWVsZC5maWVsZEdyb3VwPy5sZW5ndGggIT09IGZpZWxkLm1vZGVsPy5sZW5ndGgpIHtcbiAgICAgICAgICBmaWVsZC5vcHRpb25zLmJ1aWxkKGZpZWxkKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChmaWVsZC5vcHRpb25zLmZpZWxkQ2hhbmdlcykge1xuICAgICAgZmllbGQub3B0aW9ucy5maWVsZENoYW5nZXMubmV4dCg8Rm9ybWx5VmFsdWVDaGFuZ2VFdmVudD57IGZpZWxkLCB0eXBlOiAnaGlkZGVuJywgdmFsdWU6IGhpZGUgfSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBldmFsRXhwcihmaWVsZDogRm9ybWx5RmllbGRDb25maWdDYWNoZSwgcHJvcDogc3RyaW5nLCB2YWx1ZTogYW55KSB7XG4gICAgaWYgKHByb3AuaW5kZXhPZignbW9kZWwuJykgPT09IDApIHtcbiAgICAgIGNvbnN0IGtleSA9IHByb3AucmVwbGFjZSgvXm1vZGVsXFwuLywgJycpLFxuICAgICAgICBwYXJlbnQgPSBmaWVsZC5maWVsZEdyb3VwID8gZmllbGQgOiBmaWVsZC5wYXJlbnQ7XG5cbiAgICAgIGxldCBjb250cm9sID0gZmllbGQ/LmtleSA9PT0ga2V5ID8gZmllbGQuZm9ybUNvbnRyb2wgOiBmaWVsZC5mb3JtLmdldChrZXkpO1xuICAgICAgaWYgKCFjb250cm9sICYmIGZpZWxkLmdldChrZXkpKSB7XG4gICAgICAgIGNvbnRyb2wgPSBmaWVsZC5nZXQoa2V5KS5mb3JtQ29udHJvbDtcbiAgICAgIH1cbiAgICAgIGFzc2lnbkZpZWxkVmFsdWUoeyBrZXksIHBhcmVudCwgbW9kZWw6IGZpZWxkLm1vZGVsIH0sIHZhbHVlKTtcbiAgICAgIGlmIChjb250cm9sICYmICEoaXNOaWwoY29udHJvbC52YWx1ZSkgJiYgaXNOaWwodmFsdWUpKSAmJiBjb250cm9sLnZhbHVlICE9PSB2YWx1ZSkge1xuICAgICAgICBjb250cm9sLnBhdGNoVmFsdWUodmFsdWUpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0cnkge1xuICAgICAgICBsZXQgdGFyZ2V0OiBhbnkgPSBmaWVsZDtcbiAgICAgICAgY29uc3QgcGF0aHMgPSB0aGlzLl9ldmFsRXhwcmVzc2lvblBhdGgoZmllbGQsIHByb3ApO1xuICAgICAgICBjb25zdCBsYXN0SW5kZXggPSBwYXRocy5sZW5ndGggLSAxO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxhc3RJbmRleDsgaSsrKSB7XG4gICAgICAgICAgdGFyZ2V0ID0gdGFyZ2V0W3BhdGhzW2ldXTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRhcmdldFtwYXRoc1tsYXN0SW5kZXhdXSA9IHZhbHVlO1xuICAgICAgfSBjYXRjaCAoZXJyb3I6IGFueSkge1xuICAgICAgICBlcnJvci5tZXNzYWdlID0gYFtGb3JtbHkgRXJyb3JdIFtFeHByZXNzaW9uIFwiJHtwcm9wfVwiXSAke2Vycm9yLm1lc3NhZ2V9YDtcbiAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICB9XG5cbiAgICAgIGlmIChbJ3RlbXBsYXRlT3B0aW9ucy5kaXNhYmxlZCcsICdwcm9wcy5kaXNhYmxlZCddLmluY2x1ZGVzKHByb3ApICYmIGhhc0tleShmaWVsZCkpIHtcbiAgICAgICAgdGhpcy5jaGFuZ2VEaXNhYmxlZFN0YXRlKGZpZWxkLCB2YWx1ZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5lbWl0RXhwcmVzc2lvbkNoYW5nZXMoZmllbGQsIHByb3AsIHZhbHVlKTtcbiAgfVxuXG4gIHByaXZhdGUgZW1pdEV4cHJlc3Npb25DaGFuZ2VzKGZpZWxkOiBGb3JtbHlGaWVsZENvbmZpZ0NhY2hlLCBwcm9wZXJ0eTogc3RyaW5nLCB2YWx1ZTogYW55KSB7XG4gICAgaWYgKCFmaWVsZC5vcHRpb25zLmZpZWxkQ2hhbmdlcykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGZpZWxkLm9wdGlvbnMuZmllbGRDaGFuZ2VzLm5leHQoe1xuICAgICAgZmllbGQsXG4gICAgICB0eXBlOiAnZXhwcmVzc2lvbkNoYW5nZXMnLFxuICAgICAgcHJvcGVydHksXG4gICAgICB2YWx1ZSxcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgX2V2YWxFeHByZXNzaW9uUGF0aChmaWVsZDogRm9ybWx5RmllbGRDb25maWdDYWNoZSwgcHJvcDogc3RyaW5nKSB7XG4gICAgaWYgKGZpZWxkLl9leHByZXNzaW9uc1twcm9wXSAmJiBmaWVsZC5fZXhwcmVzc2lvbnNbcHJvcF0ucGF0aHMpIHtcbiAgICAgIHJldHVybiBmaWVsZC5fZXhwcmVzc2lvbnNbcHJvcF0ucGF0aHM7XG4gICAgfVxuXG4gICAgbGV0IHBhdGhzOiBzdHJpbmdbXSA9IFtdO1xuICAgIGlmIChwcm9wLmluZGV4T2YoJ1snKSA9PT0gLTEpIHtcbiAgICAgIHBhdGhzID0gcHJvcC5zcGxpdCgnLicpO1xuICAgIH0gZWxzZSB7XG4gICAgICBwcm9wXG4gICAgICAgIC5zcGxpdCgvW1tcXF1dezEsMn0vKSAvLyBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL2EvMjAxOTgyMDZcbiAgICAgICAgLmZpbHRlcigocCkgPT4gcClcbiAgICAgICAgLmZvckVhY2goKHBhdGgpID0+IHtcbiAgICAgICAgICBjb25zdCBhcnJheVBhdGggPSBwYXRoLm1hdGNoKC9bJ3xcIl0oLio/KVsnfFwiXS8pO1xuICAgICAgICAgIGlmIChhcnJheVBhdGgpIHtcbiAgICAgICAgICAgIHBhdGhzLnB1c2goYXJyYXlQYXRoWzFdKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcGF0aHMucHVzaCguLi5wYXRoLnNwbGl0KCcuJykuZmlsdGVyKChwKSA9PiBwKSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAoZmllbGQuX2V4cHJlc3Npb25zW3Byb3BdKSB7XG4gICAgICBmaWVsZC5fZXhwcmVzc2lvbnNbcHJvcF0ucGF0aHMgPSBwYXRocztcbiAgICB9XG5cbiAgICByZXR1cm4gcGF0aHM7XG4gIH1cbn1cbiJdfQ==
|
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
export function evalStringExpression(expression, argNames) {
|
|
2
|
-
try {
|
|
3
|
-
return Function(...argNames, `return ${expression};`);
|
|
4
|
-
}
|
|
5
|
-
catch (error) {
|
|
6
|
-
console.error(error);
|
|
7
|
-
}
|
|
8
|
-
}
|
|
9
|
-
export function evalExpression(expression, thisArg, argVal) {
|
|
10
|
-
if (typeof expression === 'function') {
|
|
11
|
-
return expression.apply(thisArg, argVal);
|
|
12
|
-
}
|
|
13
|
-
else {
|
|
14
|
-
return expression ? true : false;
|
|
15
|
-
}
|
|
16
|
-
}
|
|
17
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvY29yZS9zcmMvbGliL2V4dGVuc2lvbnMvZmllbGQtZXhwcmVzc2lvbi91dGlscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxNQUFNLFVBQVUsb0JBQW9CLENBQUMsVUFBa0IsRUFBRSxRQUFrQjtJQUN6RSxJQUFJO1FBQ0YsT0FBTyxRQUFRLENBQUMsR0FBRyxRQUFRLEVBQUUsVUFBVSxVQUFVLEdBQUcsQ0FBUSxDQUFDO0tBQzlEO0lBQUMsT0FBTyxLQUFLLEVBQUU7UUFDZCxPQUFPLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO0tBQ3RCO0FBQ0gsQ0FBQztBQUVELE1BQU0sVUFBVSxjQUFjLENBQUMsVUFBdUMsRUFBRSxPQUFZLEVBQUUsTUFBYTtJQUNqRyxJQUFJLE9BQU8sVUFBVSxLQUFLLFVBQVUsRUFBRTtRQUNwQyxPQUFPLFVBQVUsQ0FBQyxLQUFLLENBQUMsT0FBTyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0tBQzFDO1NBQU07UUFDTCxPQUFPLFVBQVUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7S0FDbEM7QUFDSCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGZ1bmN0aW9uIGV2YWxTdHJpbmdFeHByZXNzaW9uKGV4cHJlc3Npb246IHN0cmluZywgYXJnTmFtZXM6IHN0cmluZ1tdKSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIEZ1bmN0aW9uKC4uLmFyZ05hbWVzLCBgcmV0dXJuICR7ZXhwcmVzc2lvbn07YCkgYXMgYW55O1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGNvbnNvbGUuZXJyb3IoZXJyb3IpO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBldmFsRXhwcmVzc2lvbihleHByZXNzaW9uOiBzdHJpbmcgfCBGdW5jdGlvbiB8IGJvb2xlYW4sIHRoaXNBcmc6IGFueSwgYXJnVmFsOiBhbnlbXSk6IGFueSB7XG4gIGlmICh0eXBlb2YgZXhwcmVzc2lvbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHJldHVybiBleHByZXNzaW9uLmFwcGx5KHRoaXNBcmcsIGFyZ1ZhbCk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIGV4cHJlc3Npb24gPyB0cnVlIDogZmFsc2U7XG4gIH1cbn1cbiJdfQ==
|