@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,85 +0,0 @@
|
|
|
1
|
-
import { TestBed } from '@angular/core/testing';
|
|
2
|
-
import { Component } from '@angular/core';
|
|
3
|
-
import { FormlyModule, FormlyFormBuilder } from '@ngx-formly/core';
|
|
4
|
-
import { ReactiveFormsModule } from '@angular/forms';
|
|
5
|
-
import { By } from '@angular/platform-browser';
|
|
6
|
-
import * as i0 from "@angular/core";
|
|
7
|
-
import * as i1 from "@ngx-formly/core";
|
|
8
|
-
function setInputs(fixture, inputs, detectChanges = true) {
|
|
9
|
-
Object.keys(inputs).forEach((input) => {
|
|
10
|
-
fixture.componentInstance[input] = inputs[input];
|
|
11
|
-
});
|
|
12
|
-
if (detectChanges !== false) {
|
|
13
|
-
fixture.detectChanges();
|
|
14
|
-
}
|
|
15
|
-
}
|
|
16
|
-
export function createComponent({ template, inputs, config, detectChanges, imports, declarations, providers, }) {
|
|
17
|
-
TestBed.configureTestingModule({
|
|
18
|
-
declarations: [TestComponent, ...(declarations || [])],
|
|
19
|
-
imports: [ReactiveFormsModule, FormlyModule.forRoot(config), ...(imports || [])],
|
|
20
|
-
providers: providers || [],
|
|
21
|
-
teardown: { destroyAfterEach: false },
|
|
22
|
-
}).overrideComponent(TestComponent, {
|
|
23
|
-
set: {
|
|
24
|
-
template,
|
|
25
|
-
inputs: Object.keys(inputs),
|
|
26
|
-
},
|
|
27
|
-
});
|
|
28
|
-
const fixture = TestBed.createComponent(TestComponent);
|
|
29
|
-
Object.keys(inputs).forEach((input) => {
|
|
30
|
-
fixture.componentInstance[input] = inputs[input];
|
|
31
|
-
});
|
|
32
|
-
setInputs(fixture, inputs, detectChanges);
|
|
33
|
-
const utils = {
|
|
34
|
-
fixture,
|
|
35
|
-
detectChanges: () => fixture.detectChanges(),
|
|
36
|
-
setInputs: (props) => setInputs(fixture, props),
|
|
37
|
-
query: (selector) => fixture.debugElement.query(By.css(selector)),
|
|
38
|
-
queryAll: (selector) => fixture.debugElement.queryAll(By.css(selector)),
|
|
39
|
-
};
|
|
40
|
-
Object.keys(inputs).forEach((input) => {
|
|
41
|
-
Object.defineProperty(utils, input, {
|
|
42
|
-
get: () => fixture.componentInstance[input],
|
|
43
|
-
});
|
|
44
|
-
});
|
|
45
|
-
return utils;
|
|
46
|
-
}
|
|
47
|
-
export function createFieldComponent(field, config = {}) {
|
|
48
|
-
const model = field?.model || {};
|
|
49
|
-
const options = field?.options || {};
|
|
50
|
-
delete field?.model;
|
|
51
|
-
delete field?.options;
|
|
52
|
-
const utils = createComponent({
|
|
53
|
-
template: '<formly-field [field]="field"></formly-field>',
|
|
54
|
-
inputs: { field },
|
|
55
|
-
...config,
|
|
56
|
-
detectChanges: false,
|
|
57
|
-
});
|
|
58
|
-
const builder = utils.fixture.componentRef.instance.builder;
|
|
59
|
-
builder.build({ model, options, fieldGroup: [field] });
|
|
60
|
-
utils.detectChanges();
|
|
61
|
-
const setInputs = utils.setInputs;
|
|
62
|
-
utils.setInputs = (props) => {
|
|
63
|
-
if (props.field) {
|
|
64
|
-
builder.build(props.field);
|
|
65
|
-
}
|
|
66
|
-
setInputs(props);
|
|
67
|
-
};
|
|
68
|
-
return utils;
|
|
69
|
-
}
|
|
70
|
-
class TestComponent {
|
|
71
|
-
constructor(builder) {
|
|
72
|
-
this.builder = builder;
|
|
73
|
-
}
|
|
74
|
-
}
|
|
75
|
-
TestComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: TestComponent, deps: [{ token: i1.FormlyFormBuilder }], target: i0.ɵɵFactoryTarget.Component });
|
|
76
|
-
TestComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.12", type: TestComponent, selector: "formly-test-component", providers: [FormlyFormBuilder], ngImport: i0, template: '', isInline: true });
|
|
77
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: TestComponent, decorators: [{
|
|
78
|
-
type: Component,
|
|
79
|
-
args: [{
|
|
80
|
-
selector: 'formly-test-component',
|
|
81
|
-
template: '',
|
|
82
|
-
providers: [FormlyFormBuilder],
|
|
83
|
-
}]
|
|
84
|
-
}], ctorParameters: function () { return [{ type: i1.FormlyFormBuilder }]; } });
|
|
85
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tcG9uZW50LWZhY3RvcnkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvY29yZS90ZXN0aW5nL3NyYy9jb21wb25lbnQtZmFjdG9yeS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsT0FBTyxFQUFvQixNQUFNLHVCQUF1QixDQUFDO0FBQ2xFLE9BQU8sRUFBRSxTQUFTLEVBQTBCLE1BQU0sZUFBZSxDQUFDO0FBQ2xFLE9BQU8sRUFBRSxZQUFZLEVBQUUsaUJBQWlCLEVBQW1DLE1BQU0sa0JBQWtCLENBQUM7QUFDcEcsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDckQsT0FBTyxFQUFFLEVBQUUsRUFBRSxNQUFNLDJCQUEyQixDQUFDOzs7QUFFL0MsU0FBUyxTQUFTLENBQUksT0FBNEIsRUFBRSxNQUFTLEVBQUUsYUFBYSxHQUFHLElBQUk7SUFDaEYsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQWlCLENBQUMsT0FBTyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUU7UUFDckQsT0FBTyxDQUFDLGlCQUFpQixDQUFDLEtBQUssQ0FBQyxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNuRCxDQUFDLENBQUMsQ0FBQztJQUVILElBQUksYUFBYSxLQUFLLEtBQUssRUFBRTtRQUMzQixPQUFPLENBQUMsYUFBYSxFQUFFLENBQUM7S0FDekI7QUFDSCxDQUFDO0FBWUQsTUFBTSxVQUFVLGVBQWUsQ0FBSSxFQUNqQyxRQUFRLEVBQ1IsTUFBTSxFQUNOLE1BQU0sRUFDTixhQUFhLEVBQ2IsT0FBTyxFQUNQLFlBQVksRUFDWixTQUFTLEdBQ1k7SUFDckIsT0FBTyxDQUFDLHNCQUFzQixDQUFDO1FBQzdCLFlBQVksRUFBRSxDQUFDLGFBQWEsRUFBRSxHQUFHLENBQUMsWUFBWSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBQ3RELE9BQU8sRUFBRSxDQUFDLG1CQUFt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RUFBRTtRQUMxQixJQUFJLEtBQUssQ0FBQyxLQUFLLEVBQUU7WUFDZixPQUFPLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztTQUM1QjtRQUVELFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNuQixDQUFDLENBQUM7SUFFRixPQUFPLEtBQUssQ0FBQztBQUNmLENBQUM7QUFFRCxNQUtNLGFBQWE7SUFDakIsWUFBbUIsT0FBMkI7UUFBM0IsWUFBTyxHQUFQLE9BQU8sQ0FBb0I7SUFBRyxDQUFDOzsyR0FEOUMsYUFBYTsrRkFBYixhQUFhLGdEQUZOLENBQUMsaUJBQWlCLENBQUMsMEJBRHBCLEVBQUU7NEZBR1IsYUFBYTtrQkFMbEIsU0FBUzttQkFBQztvQkFDVCxRQUFRLEVBQUUsdUJBQXVCO29CQUNqQyxRQUFRLEVBQUUsRUFBRTtvQkFDWixTQUFTLEVBQUUsQ0FBQyxpQkFBaUIsQ0FBQztpQkFDL0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBUZXN0QmVkLCBDb21wb25lbnRGaXh0dXJlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZS90ZXN0aW5nJztcbmltcG9ydCB7IENvbXBvbmVudCwgRGVidWdFbGVtZW50LCBOZ01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRm9ybWx5TW9kdWxlLCBGb3JtbHlGb3JtQnVpbGRlciwgRm9ybWx5RmllbGRDb25maWcsIENvbmZpZ09wdGlvbiB9IGZyb20gJ0BuZ3gtZm9ybWx5L2NvcmUnO1xuaW1wb3J0IHsgUmVhY3RpdmVGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IEJ5IH0gZnJvbSAnQGFuZ3VsYXIvcGxhdGZvcm0tYnJvd3Nlcic7XG5cbmZ1bmN0aW9uIHNldElucHV0czxUPihmaXh0dXJlOiBDb21wb25lbnRGaXh0dXJlPFQ+LCBpbnB1dHM6IFQsIGRldGVjdENoYW5nZXMgPSB0cnVlKSB7XG4gIChPYmplY3Qua2V5cyhpbnB1dHMpIGFzIChrZXlvZiBUKVtdKS5mb3JFYWNoKChpbnB1dCkgPT4ge1xuICAgIGZpeHR1cmUuY29tcG9uZW50SW5zdGFuY2VbaW5wdXRdID0gaW5wdXRzW2lucHV0XTtcbiAgfSk7XG5cbiAgaWYgKGRldGVjdENoYW5nZXMgIT09IGZhbHNlKSB7XG4gICAgZml4dHVyZS5kZXRlY3RDaGFuZ2VzKCk7XG4gIH1cbn1cblxuaW50ZXJmYWNlIElDb21wb25lbnRPcHRpb25zPFQ+IGV4dGVuZHMgTmdNb2R1bGUge1xuICB0ZW1wbGF0ZT86IHN0cmluZztcbiAgaW5wdXRzPzogVDtcbiAgY29uZmlnPzogQ29uZmlnT3B0aW9uO1xuICBkZXRlY3RDaGFuZ2VzPzogYm9vbGVhbjtcbn1cbmludGVyZmFjZSBJRm9ybWx5RGVidWdFbGVtZW50PEU+IGV4dGVuZHMgRGVidWdFbGVtZW50IHtcbiAgcmVhZG9ubHkgbmF0aXZlRWxlbWVudDogRTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUNvbXBvbmVudDxUPih7XG4gIHRlbXBsYXRlLFxuICBpbnB1dHMsXG4gIGNvbmZpZyxcbiAgZGV0ZWN0Q2hhbmdlcyxcbiAgaW1wb3J0cyxcbiAgZGVjbGFyYXRpb25zLFxuICBwcm92aWRlcnMsXG59OiBJQ29tcG9uZW50T3B0aW9uczxUPikge1xuICBUZXN0QmVkLmNvbmZpZ3VyZVRlc3RpbmdNb2R1bGUoe1xuICAgIGRlY2xhcmF0aW9uczogW1Rlc3RDb21wb25lbnQsIC4uLihkZWNsYXJhdGlvbnMgfHwgW10pXSxcbiAgICBpbXBvcnRzOiBbUmVhY3RpdmVGb3Jtc01vZHVsZSwgRm9ybWx5TW9kdWxlLmZvclJvb3QoY29uZmlnKSwgLi4uKGltcG9ydHMgfHwgW10pXSxcbiAgICBwcm92aWRlcnM6IHByb3ZpZGVycyB8fCBbXSxcbiAgICB0ZWFyZG93bjogeyBkZXN0cm95QWZ0ZXJFYWNoOiBmYWxzZSB9LFxuICB9KS5vdmVycmlkZUNvbXBvbmVudChUZXN0Q29tcG9uZW50LCB7XG4gICAgc2V0OiB7XG4gICAgICB0ZW1wbGF0ZSxcbiAgICAgIGlucHV0czogT2JqZWN0LmtleXMoaW5wdXRzKSxcbiAgICB9LFxuICB9KTtcblxuICBjb25zdCBmaXh0dXJlID0gVGVzdEJlZC5jcmVhdGVDb21wb25lbnQoVGVzdENvbXBvbmVudCkgYXMgQ29tcG9uZW50Rml4dHVyZTxUPjtcbiAgKE9iamVjdC5rZXlzKGlucHV0cykgYXMgKGtleW9mIFQpW10pLmZvckVhY2goKGlucHV0KSA9PiB7XG4gICAgZml4dHVyZS5jb21wb25lbnRJbnN0YW5jZVtpbnB1dF0gPSBpbnB1dHNbaW5wdXRdO1xuICB9KTtcblxuICBzZXRJbnB1dHMoZml4dHVyZSwgaW5wdXRzLCBkZXRlY3RDaGFuZ2VzKTtcblxuICB0eXBlIEZpeHR1cmVVdGlscyA9IFQgJiB7XG4gICAgZml4dHVyZTogQ29tcG9uZW50Rml4dHVyZTxUPjtcbiAgICBkZXRlY3RDaGFuZ2VzOiB0eXBlb2YgZml4dHVyZVsnZGV0ZWN0Q2hhbmdlcyddO1xuICAgIHNldElucHV0czogKGlucHV0czogUGFydGlhbDxUPikgPT4gdm9pZDtcbiAgICBxdWVyeTogPEUgZXh0ZW5kcyBFbGVtZW50ID0gRWxlbWVudD4oc2VsZWN0b3I6IHN0cmluZykgPT4gSUZvcm1seURlYnVnRWxlbWVudDxFPjtcbiAgICBxdWVyeUFsbDogPEUgZXh0ZW5kcyBFbGVtZW50ID0gRWxlbWVudD4oc2VsZWN0b3I6IHN0cmluZykgPT4gSUZvcm1seURlYnVnRWxlbWVudDxFPltdO1xuICB9O1xuXG4gIGNvbnN0IHV0aWxzID0ge1xuICAgIGZpeHR1cmUsXG4gICAgZGV0ZWN0Q2hhbmdlczogKCkgPT4gZml4dHVyZS5kZXRlY3RDaGFuZ2VzKCksXG4gICAgc2V0SW5wdXRzOiAocHJvcHMpID0+IHNldElucHV0cyhmaXh0dXJlLCBwcm9wcyksXG4gICAgcXVlcnk6IChzZWxlY3Rvcjogc3RyaW5nKSA9PiBmaXh0dXJlLmRlYnVnRWxlbWVudC5xdWVyeShCeS5jc3Moc2VsZWN0b3IpKSxcbiAgICBxdWVyeUFsbDogKHNlbGVjdG9yOiBzdHJpbmcpID0+IGZpeHR1cmUuZGVidWdFbGVtZW50LnF1ZXJ5QWxsKEJ5LmNzcyhzZWxlY3RvcikpLFxuICB9IGFzIEZpeHR1cmVVdGlscztcblxuICAoT2JqZWN0LmtleXMoaW5wdXRzKSBhcyAoa2V5b2YgVClbXSkuZm9yRWFjaCgoaW5wdXQpID0+IHtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodXRpbHMsIGlucHV0LCB7XG4gICAgICBnZXQ6ICgpID0+IGZpeHR1cmUuY29tcG9uZW50SW5zdGFuY2VbaW5wdXRdLFxuICAgIH0pO1xuICB9KTtcblxuICByZXR1cm4gdXRpbHM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVGaWVsZENvbXBvbmVudChcbiAgZmllbGQ6IEZvcm1seUZpZWxkQ29uZmlnLFxuICBjb25maWc6IElDb21wb25lbnRPcHRpb25zPHsgZmllbGQ6IEZvcm1seUZpZWxkQ29uZmlnIH0+ID0ge30sXG4pIHtcbiAgY29uc3QgbW9kZWwgPSBmaWVsZD8ubW9kZWwgfHwge307XG4gIGNvbnN0IG9wdGlvbnMgPSBmaWVsZD8ub3B0aW9ucyB8fCB7fTtcbiAgZGVsZXRlIChmaWVsZCBhcyBhbnkpPy5tb2RlbDtcbiAgZGVsZXRlIChmaWVsZCBhcyBhbnkpPy5vcHRpb25zO1xuXG4gIGNvbnN0IHV0aWxzID0gY3JlYXRlQ29tcG9uZW50PHsgZmllbGQ6IEZvcm1seUZpZWxkQ29uZmlnIH0+KHtcbiAgICB0ZW1wbGF0ZTogJzxmb3JtbHktZmllbGQgW2ZpZWxkXT1cImZpZWxkXCI+PC9mb3JtbHktZmllbGQ+JyxcbiAgICBpbnB1dHM6IHsgZmllbGQgfSxcbiAgICAuLi5jb25maWcsXG4gICAgZGV0ZWN0Q2hhbmdlczogZmFsc2UsXG4gIH0pO1xuICBjb25zdCBidWlsZGVyID0gKHV0aWxzLmZpeHR1cmUuY29tcG9uZW50UmVmLmluc3RhbmNlIGFzIGFueSkuYnVpbGRlcjtcbiAgYnVpbGRlci5idWlsZCh7IG1vZGVsLCBvcHRpb25zLCBmaWVsZEdyb3VwOiBbZmllbGRdIH0pO1xuICB1dGlscy5kZXRlY3RDaGFuZ2VzKCk7XG5cbiAgY29uc3Qgc2V0SW5wdXRzID0gdXRpbHMuc2V0SW5wdXRzO1xuICB1dGlscy5zZXRJbnB1dHMgPSAocHJvcHMpID0+IHtcbiAgICBpZiAocHJvcHMuZmllbGQpIHtcbiAgICAgIGJ1aWxkZXIuYnVpbGQocHJvcHMuZmllbGQpO1xuICAgIH1cblxuICAgIHNldElucHV0cyhwcm9wcyk7XG4gIH07XG5cbiAgcmV0dXJuIHV0aWxzO1xufVxuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdmb3JtbHktdGVzdC1jb21wb25lbnQnLFxuICB0ZW1wbGF0ZTogJycsXG4gIHByb3ZpZGVyczogW0Zvcm1seUZvcm1CdWlsZGVyXSxcbn0pXG5jbGFzcyBUZXN0Q29tcG9uZW50IHtcbiAgY29uc3RydWN0b3IocHVibGljIGJ1aWxkZXI/OiBGb3JtbHlGb3JtQnVpbGRlcikge31cbn1cbiJdfQ==
|