@mediusinc/mng-commons-data-api 6.0.0-rc.5 → 6.0.0-rc.6
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/openapi/api.service.mustache +1 -1
- package/openapi/apiInterface.mustache +1 -1
- package/openapi/configuration.mustache +1 -2
- package/openapi/modelGeneric.mustache +1 -1
- package/package.json +3 -7
- package/version-info.json +3 -3
- package/esm2022/index.mjs +0 -9
- package/esm2022/lib/helpers/get-all-params.mjs +0 -226
- package/esm2022/lib/models/api-version.model.mjs +0 -2
- package/esm2022/lib/models/request-params.model.mjs +0 -2
- package/esm2022/lib/models/schema.model.mjs +0 -2
- package/esm2022/lib/types/extract-get-all-types.type.mjs +0 -2
- package/esm2022/mediusinc-mng-commons-data-api.mjs +0 -5
- package/esm2022/tableview/filter/generic-filters.mjs +0 -127
- package/esm2022/tableview/helpers/lookup-get-all-create.mjs +0 -60
- package/esm2022/tableview/helpers/tableview-get-all-params-create.mjs +0 -67
- package/esm2022/tableview/index.mjs +0 -10
- package/esm2022/tableview/mediusinc-mng-commons-data-api-tableview.mjs +0 -5
- package/esm2022/tableview/schema/columns-from-schema.mjs +0 -179
- package/esm2022/tableview/schema/enum-from-schema.mjs +0 -23
- package/esm2022/tableview/schema/fields-from-schema.mjs +0 -377
- package/esm2022/tableview/schema/internal/common-from-schema.mjs +0 -7
|
@@ -1,377 +0,0 @@
|
|
|
1
|
-
import { CommonsInternalError, fromAngularDateFormatToPrime } from '@mediusinc/mng-commons/core';
|
|
2
|
-
import { EnumDescriptor } from '@mediusinc/mng-commons/model';
|
|
3
|
-
import { FieldInputDescriptor, TableviewDescriptorInst } from '@mediusinc/mng-commons/tableview/api';
|
|
4
|
-
import { enumModelFromSchema } from './enum-from-schema';
|
|
5
|
-
import { fromSchemaFilterNonArrayProperties } from './internal/common-from-schema';
|
|
6
|
-
/**
|
|
7
|
-
* <em>Experimental:</em> Builder for adding fields to editor.
|
|
8
|
-
*
|
|
9
|
-
* @experimental
|
|
10
|
-
*/
|
|
11
|
-
export class SchemaFieldsBuilder {
|
|
12
|
-
constructor(descriptor, schema, opts) {
|
|
13
|
-
this.descriptor = descriptor;
|
|
14
|
-
this.schema = schema;
|
|
15
|
-
this.opts = opts;
|
|
16
|
-
}
|
|
17
|
-
mergeFieldsInputOpts(property, opts) {
|
|
18
|
-
return {
|
|
19
|
-
...this.opts,
|
|
20
|
-
fieldType: opts?.fieldTypes?.[property] ?? this.opts?.fieldTypes?.[property],
|
|
21
|
-
enumModel: opts?.enumModels?.[property] ?? this.opts?.enumModels?.[property],
|
|
22
|
-
enumSchema: opts?.enumSchemas?.[property] ?? this.opts?.enumSchemas?.[property],
|
|
23
|
-
...opts
|
|
24
|
-
};
|
|
25
|
-
}
|
|
26
|
-
mergeFieldInputOpts(property, opts) {
|
|
27
|
-
return {
|
|
28
|
-
...this.opts,
|
|
29
|
-
fieldType: this.opts?.fieldTypes?.[property],
|
|
30
|
-
enumModel: this.opts?.enumModels?.[property],
|
|
31
|
-
enumSchema: this.opts?.enumSchemas?.[property],
|
|
32
|
-
...opts
|
|
33
|
-
};
|
|
34
|
-
}
|
|
35
|
-
/**
|
|
36
|
-
* <em>Experimental:</em> Adds a single input field via {addFieldInputFromSchema}.
|
|
37
|
-
*
|
|
38
|
-
* @experimental
|
|
39
|
-
*
|
|
40
|
-
* @param {Property} property - The property to add the field for.
|
|
41
|
-
* @param {FieldInputFromSchemaOptsType<SchModel>} opts - Additional options.
|
|
42
|
-
*
|
|
43
|
-
* @return {FieldInputDescriptor<Model, NonNullable<Model[Property]>, Model[Property], Parent>} The added field descriptor.
|
|
44
|
-
*/
|
|
45
|
-
add(property, opts) {
|
|
46
|
-
return addFieldInputFromSchema(this.descriptor, property, this.schema.properties[property], this.mergeFieldInputOpts(property, opts));
|
|
47
|
-
}
|
|
48
|
-
/**
|
|
49
|
-
* <em>Experimental:</em> Adds all input fields for the non-array properties via {addFieldInputFromSchema}.
|
|
50
|
-
*
|
|
51
|
-
* @experimental
|
|
52
|
-
*
|
|
53
|
-
* @param {FieldsFromSchemaOptsType<SchModel>} opts - Additional options.
|
|
54
|
-
*
|
|
55
|
-
* @return {this} - The current instance of the builder.
|
|
56
|
-
*/
|
|
57
|
-
withAddAll(opts) {
|
|
58
|
-
this.addFields(undefined, opts);
|
|
59
|
-
return this;
|
|
60
|
-
}
|
|
61
|
-
withAdd(propOrOpts, ...properties) {
|
|
62
|
-
if (typeof propOrOpts === 'object') {
|
|
63
|
-
this.addFields(properties.length === 0 ? undefined : properties, propOrOpts);
|
|
64
|
-
}
|
|
65
|
-
else {
|
|
66
|
-
this.addFields(propOrOpts === undefined ? properties : [propOrOpts, ...properties]);
|
|
67
|
-
}
|
|
68
|
-
return this;
|
|
69
|
-
}
|
|
70
|
-
addFields(properties, opts) {
|
|
71
|
-
const addProperties = properties ?? fromSchemaFilterNonArrayProperties(this.schema.properties);
|
|
72
|
-
addProperties.forEach(property => {
|
|
73
|
-
addFieldInputFromSchema(this.descriptor, property, this.schema.properties[property], this.mergeFieldsInputOpts(property, opts));
|
|
74
|
-
});
|
|
75
|
-
}
|
|
76
|
-
/**
|
|
77
|
-
* <em>Experimental:</em> Adds a single input field via {addFieldInputFromSchema} where property schema is manually provided.
|
|
78
|
-
*
|
|
79
|
-
* @experimental
|
|
80
|
-
*
|
|
81
|
-
* @param {Property} property - The property to add the field for.
|
|
82
|
-
* @param {SchemaProperty} schemaProperty - Manually provided schema property.
|
|
83
|
-
* @param {FieldInputFromSchemaOptsType<Model>} opts - Additional options.
|
|
84
|
-
*
|
|
85
|
-
* @return {FieldInputDescriptor<Model, NonNullable<Model[Property]>, Model[Property], Parent>} The added field descriptor.
|
|
86
|
-
*/
|
|
87
|
-
addFromSchema(property, schemaProperty, opts) {
|
|
88
|
-
return addFieldInputFromSchema(this.descriptor, property, schemaProperty, this.mergeFieldInputOpts(property, opts));
|
|
89
|
-
}
|
|
90
|
-
/**
|
|
91
|
-
* <em>Experimental:</em> Adds an enum lookup field via {addFieldEnumLookupFromSchema}.
|
|
92
|
-
*
|
|
93
|
-
* @experimental
|
|
94
|
-
*
|
|
95
|
-
* @param {Property} property - The property to add the enum lookup field for.
|
|
96
|
-
* @param {SchemaEnum<Enum> | EnumDescriptor<Enum>} [enumOpt] - The enum schema or the enum model descriptor. If non provided, builder opts will be checked.
|
|
97
|
-
*
|
|
98
|
-
* @returns {FieldLookupEnumDescriptor<Enum, Model, Parent>} - The added field descriptor.
|
|
99
|
-
*
|
|
100
|
-
* @throws {CommonsInternalError} - If no enum metadata is found for the property either from parameter or from builder's opts.
|
|
101
|
-
*/
|
|
102
|
-
addEnum(property, enumOpt) {
|
|
103
|
-
if (!enumOpt) {
|
|
104
|
-
enumOpt = this.opts?.enumModels?.[property] ?? this.opts?.enumSchemas?.[property];
|
|
105
|
-
}
|
|
106
|
-
if (!enumOpt) {
|
|
107
|
-
throw new CommonsInternalError(`Enum lookup field for property ${property} cannot be added because enum metadata was not provided.`);
|
|
108
|
-
}
|
|
109
|
-
return addFieldEnumLookupFromSchema(this.descriptor, property, enumOpt, this.schema.properties[property]);
|
|
110
|
-
}
|
|
111
|
-
/**
|
|
112
|
-
* <em>Experimental:</em> Adds an enum lookup field via {addFieldEnumLookupFromSchema} where property schema is manually provided.
|
|
113
|
-
*
|
|
114
|
-
* @experimental
|
|
115
|
-
*
|
|
116
|
-
* @param {Property} property - The property to add the enum lookup field for.
|
|
117
|
-
* @param {SchemaEnum<Enum> | EnumDescriptor<Enum>} [enumOpt] - The enum schema or the enum model descriptor. If non provided, builder opts will be checked.
|
|
118
|
-
* @param {SchemaProperty} schemaProperty - Manually provided schema property.
|
|
119
|
-
*
|
|
120
|
-
* @returns {FieldLookupEnumDescriptor<Enum, Model, Parent>} - The added field descriptor.
|
|
121
|
-
*
|
|
122
|
-
* @throws {CommonsInternalError} - If no enum metadata is found for the property either from parameter or from builder's opts.
|
|
123
|
-
*/
|
|
124
|
-
addEnumFromSchema(property, enumOpt, schemaProperty) {
|
|
125
|
-
if (!enumOpt) {
|
|
126
|
-
enumOpt = this.opts?.enumModels?.[property] ?? this.opts?.enumSchemas?.[property];
|
|
127
|
-
}
|
|
128
|
-
if (!enumOpt) {
|
|
129
|
-
throw new CommonsInternalError(`Enum lookup field for property ${property} cannot be added because enum metadata was not provided.`);
|
|
130
|
-
}
|
|
131
|
-
return addFieldEnumLookupFromSchema(this.descriptor, property, enumOpt, schemaProperty);
|
|
132
|
-
}
|
|
133
|
-
/**
|
|
134
|
-
* <em>Experimental:</em> Adds a lookup field.
|
|
135
|
-
* {EditorDescriptorInt.addFieldLookup} is used to create field and ${setFieldBasicOptionsFromSchema} to add basic field's options from schema.
|
|
136
|
-
*
|
|
137
|
-
* @experimental
|
|
138
|
-
*
|
|
139
|
-
* @param {Property} property - The property to create the lookup field for.
|
|
140
|
-
* @param {FieldLookupProviderType<LookupModel, Service>} provider - Data provider for the lookup field.
|
|
141
|
-
*
|
|
142
|
-
* @return The created lookup field.
|
|
143
|
-
*/
|
|
144
|
-
addLookup(property, provider) {
|
|
145
|
-
const field = this.descriptor.addFieldLookup(property, { serviceProvider: provider });
|
|
146
|
-
setFieldBasicOptionsFromSchema(field, this.schema.properties[property]);
|
|
147
|
-
return field;
|
|
148
|
-
}
|
|
149
|
-
/**
|
|
150
|
-
* <em>Experimental:</em> Adds a lookup field where property schema is manually provided.
|
|
151
|
-
* {EditorDescriptorInt.addFieldLookup} is used to create field and ${setFieldBasicOptionsFromSchema} to add basic field's options from schema.
|
|
152
|
-
*
|
|
153
|
-
* @experimental
|
|
154
|
-
*
|
|
155
|
-
* @param {Property} property - The property to create the lookup field for.
|
|
156
|
-
* @param {FieldLookupProviderType<LookupModel, Service> | undefined} provider - Data provider for the lookup field.
|
|
157
|
-
* @param {SchemaProperty} schemaProperty - Manually provided schema property.
|
|
158
|
-
*
|
|
159
|
-
* @return The created lookup field.
|
|
160
|
-
*/
|
|
161
|
-
addLookupFromSchema(property, provider, schemaProperty) {
|
|
162
|
-
const field = this.descriptor.addFieldLookup(property, { serviceProvider: provider });
|
|
163
|
-
setFieldBasicOptionsFromSchema(field, schemaProperty);
|
|
164
|
-
return field;
|
|
165
|
-
}
|
|
166
|
-
/**
|
|
167
|
-
* <em>Experimental:</em> Adds a one-to-many editor field.
|
|
168
|
-
* {EditorDescriptorInt.addFieldManyEditor} is used to create field and ${setFieldBasicOptionsFromSchema} to add basic field's options from schema.
|
|
169
|
-
*
|
|
170
|
-
* @experimental
|
|
171
|
-
*
|
|
172
|
-
* @param {Property} property - The property to create the many editor field for.
|
|
173
|
-
* @param {TableviewDescriptorInst<FieldModel, any, any, FieldsModel>} tableviewDescriptor - Tableview descriptor.
|
|
174
|
-
*
|
|
175
|
-
* @return The created one-to-many editor field.
|
|
176
|
-
*/
|
|
177
|
-
addManyEditor(property, tableviewDescriptor) {
|
|
178
|
-
const field = this.descriptor.addFieldManyEditor(property, tableviewDescriptor);
|
|
179
|
-
setFieldBasicOptionsFromSchema(field, this.schema.properties[property]);
|
|
180
|
-
return field;
|
|
181
|
-
}
|
|
182
|
-
/**
|
|
183
|
-
* <em>Experimental:</em> Adds an one-to-many editor field where property schema is manually provided.
|
|
184
|
-
* {EditorDescriptorInt.addFieldManyEditor} is used to create field and ${setFieldBasicOptionsFromSchema} to add basic field's options from schema.
|
|
185
|
-
*
|
|
186
|
-
* @experimental
|
|
187
|
-
*
|
|
188
|
-
* @param {Property} property - The property to create the many editor field for.
|
|
189
|
-
* @param {TableviewDescriptorType<FieldModel, any, any, FieldsModel>} tableviewDescriptor - Tableview descriptor.
|
|
190
|
-
* @param {SchemaProperty} schemaProperty - Manually provided schema property.
|
|
191
|
-
*
|
|
192
|
-
* @return The created one-to-many editor field.
|
|
193
|
-
*/
|
|
194
|
-
addManyEditorFromSchema(property, tableviewDescriptor, schemaProperty) {
|
|
195
|
-
const field = this.descriptor.addFieldManyEditor(property, tableviewDescriptor);
|
|
196
|
-
setFieldBasicOptionsFromSchema(field, schemaProperty);
|
|
197
|
-
return field;
|
|
198
|
-
}
|
|
199
|
-
/**
|
|
200
|
-
* <em>Experimental:</em> Adds a many-to-many editor field.
|
|
201
|
-
* {EditorDescriptorInt.addFieldManyToManyEditor} is used to create field and ${setFieldBasicOptionsFromSchema} to add basic field's options from schema.
|
|
202
|
-
*
|
|
203
|
-
* @experimental
|
|
204
|
-
*
|
|
205
|
-
* @param {Property} property - The property to create the many editor field for.
|
|
206
|
-
* @param {TableDescriptorInst<FieldModel>} mainTableDescriptor - Main table descriptor.
|
|
207
|
-
* @param {TableDescriptorInst<FieldModel>} lookupTableDescriptor - Lookup table descriptor.
|
|
208
|
-
* @param {ITableDataProvider<FieldModel, ServiceType>} lookupDataProvider - Lookup data provider.
|
|
209
|
-
*
|
|
210
|
-
* @return The created many-to-many editor field.
|
|
211
|
-
*/
|
|
212
|
-
addManyToManyEditor(property, mainTableDescriptor, lookupTableDescriptor, lookupDataProvider) {
|
|
213
|
-
const field = this.descriptor.addFieldManyToManyEditor(property, mainTableDescriptor, lookupTableDescriptor, lookupDataProvider);
|
|
214
|
-
setFieldBasicOptionsFromSchema(field, this.schema.properties[property]);
|
|
215
|
-
return field;
|
|
216
|
-
}
|
|
217
|
-
/**
|
|
218
|
-
* <em>Experimental:</em> Adds a many-to-many editor field where property schema is manually provided.
|
|
219
|
-
* {EditorDescriptorInt.addFieldManyToManyEditor} is used to create field and ${setFieldBasicOptionsFromSchema} to add basic field's options from schema.
|
|
220
|
-
*
|
|
221
|
-
* @experimental
|
|
222
|
-
*
|
|
223
|
-
* @param {Property} property - The property to create the many editor field for.
|
|
224
|
-
* @param {TableDescriptorInst<FieldModel>} mainTableDescriptor - Main table descriptor.
|
|
225
|
-
* @param {TableDescriptorInst<FieldModel>} lookupTableDescriptor - Lookup table descriptor.
|
|
226
|
-
* @param {ITableDataProvider<FieldModel, ServiceType>} lookupDataProvider - Lookup data provider.
|
|
227
|
-
* @param {SchemaProperty} schemaProperty - Manually provided schema property.
|
|
228
|
-
*
|
|
229
|
-
* @return The created many-to-many editor field.
|
|
230
|
-
*/
|
|
231
|
-
addManyToManyEditorFromSchema(property, mainTableDescriptor, lookupTableDescriptor, lookupDataProvider, schemaProperty) {
|
|
232
|
-
const field = this.descriptor.addFieldManyToManyEditor(property, mainTableDescriptor, lookupTableDescriptor, lookupDataProvider);
|
|
233
|
-
setFieldBasicOptionsFromSchema(field, schemaProperty);
|
|
234
|
-
return field;
|
|
235
|
-
}
|
|
236
|
-
}
|
|
237
|
-
/**
|
|
238
|
-
* <em>Experimental:</em> Creates builder for adding fields to descriptor based on provided model schema.
|
|
239
|
-
*
|
|
240
|
-
* @experimental
|
|
241
|
-
*
|
|
242
|
-
* @param {TableviewDescriptorInst<Model, any, any, Parent, any, AddModel, EditModel, FieldsModel> | EditorDescriptorInst<Model, Parent>} descriptor - Descriptor to add fields to.
|
|
243
|
-
* @param {SchemaModel<SchModel>} schema - The schema with metadata about properties for fields.
|
|
244
|
-
* @param {FieldsFromSchemaOptsType<SchModel>} [opts] - Additional options.
|
|
245
|
-
*
|
|
246
|
-
* @return {SchemaFieldsBuilder<Model, Parent, AddModel, EditModel , FieldsModel, SchModel>} - The SchemaFieldsBuilder object containing the extracted fields.
|
|
247
|
-
*/
|
|
248
|
-
export function fieldsFromSchema(descriptor, schema, opts) {
|
|
249
|
-
return new SchemaFieldsBuilder(descriptor, schema, opts);
|
|
250
|
-
}
|
|
251
|
-
/**
|
|
252
|
-
* <em>Experimental:</em> Adds a field input to editor descriptor based on the given schema property and options.
|
|
253
|
-
*
|
|
254
|
-
* @experimental
|
|
255
|
-
*
|
|
256
|
-
* @param {TableviewDescriptorInst | EditorDescriptorInst} descriptor - Descriptor to add field to.
|
|
257
|
-
* @param {keyof Model} property - The property of the model.
|
|
258
|
-
* @param {SchemaProperty} propertySchema - The property's schema for the field.
|
|
259
|
-
* @param {FieldInputFromSchemaOptsType<Model>} [opts] - Additional options.
|
|
260
|
-
*
|
|
261
|
-
* @return {FieldInputDescriptor<Model, NonNullable<Model[Property]>, Model[Property], Parent>} - The generated field input descriptor.
|
|
262
|
-
*/
|
|
263
|
-
export function addFieldInputFromSchema(descriptor, property, propertySchema, opts) {
|
|
264
|
-
const propertyType = opts?.fieldType ?? propertySchema.type;
|
|
265
|
-
const field = new FieldInputDescriptor(property);
|
|
266
|
-
if (descriptor instanceof TableviewDescriptorInst) {
|
|
267
|
-
descriptor.addFieldDescriptor(field);
|
|
268
|
-
}
|
|
269
|
-
else {
|
|
270
|
-
descriptor.addFieldDescriptor(field);
|
|
271
|
-
}
|
|
272
|
-
// Handle different property types
|
|
273
|
-
switch (propertyType) {
|
|
274
|
-
case 'number':
|
|
275
|
-
field.asNumber();
|
|
276
|
-
break;
|
|
277
|
-
case 'currency':
|
|
278
|
-
field.asCurrency({
|
|
279
|
-
currency: opts?.currency,
|
|
280
|
-
currencyDisplay: opts?.currencyDisplay,
|
|
281
|
-
currencyProperty: opts?.currencyProperty
|
|
282
|
-
});
|
|
283
|
-
break;
|
|
284
|
-
case 'boolean':
|
|
285
|
-
field.asSwitch();
|
|
286
|
-
break;
|
|
287
|
-
case 'text':
|
|
288
|
-
case 'string':
|
|
289
|
-
field.asText();
|
|
290
|
-
break;
|
|
291
|
-
case 'textarea':
|
|
292
|
-
field.asTextarea();
|
|
293
|
-
break;
|
|
294
|
-
case 'date':
|
|
295
|
-
field.asDatePicker({ format: opts?.dateFormat ? fromAngularDateFormatToPrime(opts.dateFormat) : undefined });
|
|
296
|
-
break;
|
|
297
|
-
case 'date-time':
|
|
298
|
-
field.asDatePicker({ showTime: true, format: opts?.dateTimeFormat ? fromAngularDateFormatToPrime(opts.dateTimeFormat) : undefined });
|
|
299
|
-
break;
|
|
300
|
-
case 'enum':
|
|
301
|
-
// eslint-disable-next-line no-case-declarations
|
|
302
|
-
const enumModel = opts?.enumSchema ? enumModelFromSchema(opts.enumSchema) : opts?.enumModel;
|
|
303
|
-
if (enumModel) {
|
|
304
|
-
field.asRadioFromEnum(enumModel);
|
|
305
|
-
}
|
|
306
|
-
else {
|
|
307
|
-
field.asText();
|
|
308
|
-
}
|
|
309
|
-
break;
|
|
310
|
-
case 'hidden':
|
|
311
|
-
field.asHidden();
|
|
312
|
-
break;
|
|
313
|
-
}
|
|
314
|
-
// Handle different property validations
|
|
315
|
-
if (propertyType === 'number' || propertyType === 'currency') {
|
|
316
|
-
field.withNumberValidation({
|
|
317
|
-
min: propertySchema.exclusiveMinimum && propertySchema.minimum != undefined ? propertySchema.minimum + (propertySchema.isInteger ? 1 : 0.0001) : propertySchema.minimum,
|
|
318
|
-
max: propertySchema.exclusiveMaximum && propertySchema.maximum != undefined ? propertySchema.maximum - (propertySchema.isInteger ? 1 : 0.0001) : propertySchema.maximum,
|
|
319
|
-
step: opts?.numberStep
|
|
320
|
-
});
|
|
321
|
-
if (opts?.numberUseGrouping) {
|
|
322
|
-
field.withNumberGrouping();
|
|
323
|
-
}
|
|
324
|
-
if (opts?.numberMinFractionDigits != null || opts?.numberMaxFractionDigits != null) {
|
|
325
|
-
field.withNumberFractions({
|
|
326
|
-
minFractionDigits: opts?.numberMinFractionDigits,
|
|
327
|
-
maxFractionDigits: opts?.numberMaxFractionDigits
|
|
328
|
-
});
|
|
329
|
-
}
|
|
330
|
-
}
|
|
331
|
-
if (propertyType === 'string' || propertyType === 'textarea' || propertyType === 'text') {
|
|
332
|
-
field.withTextValidation({
|
|
333
|
-
minLength: propertySchema.minLength,
|
|
334
|
-
maxLength: propertySchema.maxLength,
|
|
335
|
-
pattern: propertySchema.pattern ? new RegExp(propertySchema.pattern.slice(1, -1)) : undefined
|
|
336
|
-
});
|
|
337
|
-
if (propertyType === 'textarea' && opts?.textareaRows != null) {
|
|
338
|
-
field.withTextareaRows(opts.textareaRows);
|
|
339
|
-
}
|
|
340
|
-
if (propertyType !== 'textarea' && propertySchema.isEmail) {
|
|
341
|
-
field.withTextValidationEmail();
|
|
342
|
-
}
|
|
343
|
-
}
|
|
344
|
-
setFieldBasicOptionsFromSchema(field, propertySchema);
|
|
345
|
-
return field;
|
|
346
|
-
}
|
|
347
|
-
/**
|
|
348
|
-
* <em>Experimental:</em> Adds a field enum lookup to editor descriptor based on the given schema property and options.
|
|
349
|
-
*
|
|
350
|
-
* @experimental
|
|
351
|
-
*
|
|
352
|
-
* @param {TableviewDescriptorInst<Model, any, any, Parent> | EditorDescriptorInst<Model, Parent>} descriptor - Descriptor to add field to.
|
|
353
|
-
* @param {keyof Model} property - The property of the model.
|
|
354
|
-
* @param {SchemaEnum<Enum> | EnumDescriptor<Enum>} enumOpt - The enum schema or enum model descriptor.
|
|
355
|
-
* @param {SchemaProperty} propertySchema - The property's schema for the field.
|
|
356
|
-
*
|
|
357
|
-
* @returns {FieldLookupEnum<Enum>} - The field with enumeration values.
|
|
358
|
-
*/
|
|
359
|
-
export function addFieldEnumLookupFromSchema(descriptor, property, enumOpt, propertySchema) {
|
|
360
|
-
const enumDescriptor = enumOpt instanceof EnumDescriptor ? enumOpt : enumModelFromSchema(enumOpt);
|
|
361
|
-
const field = descriptor.addFieldLookupEnumUnsafe(property, enumDescriptor);
|
|
362
|
-
setFieldBasicOptionsFromSchema(field, propertySchema);
|
|
363
|
-
return field;
|
|
364
|
-
}
|
|
365
|
-
/**
|
|
366
|
-
* <em>Experimental:</em> Sets basic options for a field based on a given property schema.
|
|
367
|
-
*
|
|
368
|
-
* @param {AFieldDescriptor<FieldModel, EditorModel, FieldValue, ParentEditorModel>} field - The field to set options for.
|
|
369
|
-
* @param {SchemaProperty} propertySchema - The property schema to base the options on.
|
|
370
|
-
*/
|
|
371
|
-
export function setFieldBasicOptionsFromSchema(field, propertySchema) {
|
|
372
|
-
if (propertySchema.required)
|
|
373
|
-
field.withRequired();
|
|
374
|
-
if (propertySchema.isReadOnly)
|
|
375
|
-
field.withDisabled();
|
|
376
|
-
}
|
|
377
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmllbGRzLWZyb20tc2NoZW1hLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vdGFibGV2aWV3L3NyYy9zY2hlbWEvZmllbGRzLWZyb20tc2NoZW1hLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBZ0Isb0JBQW9CLEVBQUUsNEJBQTRCLEVBQUMsTUFBTSw2QkFBNkIsQ0FBQztBQUM5RyxPQUFPLEVBQUMsY0FBYyxFQUFDLE1BQU0sOEJBQThCLENBQUM7QUFFNUQsT0FBTyxFQUdILG9CQUFvQixFQU1wQix1QkFBdUIsRUFDMUIsTUFBTSxzQ0FBc0MsQ0FBQztBQUU5QyxPQUFPLEVBQUMsbUJBQW1CLEVBQUMsTUFBTSxvQkFBb0IsQ0FBQztBQUN2RCxPQUFPLEVBQUMsa0NBQWtDLEVBQUMsTUFBTSwrQkFBK0IsQ0FBQztBQTZCakY7Ozs7R0FJRztBQUNILE1BQU0sT0FBTyxtQkFBbUI7SUFRNUIsWUFDcUIsVUFBK0ksRUFDL0ksTUFBNkIsRUFDdEMsSUFBeUM7UUFGaEMsZUFBVSxHQUFWLFVBQVUsQ0FBcUk7UUFDL0ksV0FBTSxHQUFOLE1BQU0sQ0FBdUI7UUFDdEMsU0FBSSxHQUFKLElBQUksQ0FBcUM7SUFDbEQsQ0FBQztJQUVJLG9CQUFvQixDQUFDLFFBQWEsRUFBRSxJQUErQjtRQUN2RSxPQUFxQztZQUNqQyxHQUFHLElBQUksQ0FBQyxJQUFJO1lBQ1osU0FBUyxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsQ0FBQyxRQUFRLENBQUMsSUFBSSxJQUFJLENBQUMsSUFBSSxFQUFFLFVBQVUsRUFBRSxDQUFDLFFBQXdCLENBQUM7WUFDNUYsU0FBUyxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsQ0FBQyxRQUFRLENBQUMsSUFBSSxJQUFJLENBQUMsSUFBSSxFQUFFLFVBQVUsRUFBRSxDQUFDLFFBQXdCLENBQUM7WUFDNUYsVUFBVSxFQUFFLElBQUksRUFBRSxXQUFXLEVBQUUsQ0FBQyxRQUFRLENBQUMsSUFB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LGNBQThCO0lBRTlCLE1BQU0sY0FBYyxHQUFHLE9BQU8sWUFBWSxjQUFjLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsbUJBQW1CLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDbEcsTUFBTSxLQUFLLEdBQUcsVUFBVSxDQUFDLHdCQUF3QixDQUFPLFFBQWtCLEVBQUUsY0FBYyxDQUFDLENBQUM7SUFDNUYsOEJBQThCLENBQUMsS0FBSyxFQUFFLGNBQWMsQ0FBQyxDQUFDO0lBQ3RELE9BQU8sS0FBSyxDQUFDO0FBQ2pCLENBQUM7QUFFRDs7Ozs7R0FLRztBQUNILE1BQU0sVUFBVSw4QkFBOEIsQ0FDMUMsS0FBK0UsRUFDL0UsY0FBOEI7SUFFOUIsSUFBSSxjQUFjLENBQUMsUUFBUTtRQUFFLEtBQUssQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUNsRCxJQUFJLGNBQWMsQ0FBQyxVQUFVO1FBQUUsS0FBSyxDQUFDLFlBQVksRUFBRSxDQUFDO0FBQ3hELENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1NjaGVtYUVudW0sIFNjaGVtYU1vZGVsLCBTY2hlbWFQcm9wZXJ0eX0gZnJvbSAnQG1lZGl1c2luYy9tbmctY29tbW9ucy1kYXRhLWFwaSc7XG5pbXBvcnQge0FycmF5SXRlbVR5cGUsIENvbW1vbnNJbnRlcm5hbEVycm9yLCBmcm9tQW5ndWxhckRhdGVGb3JtYXRUb1ByaW1lfSBmcm9tICdAbWVkaXVzaW5jL21uZy1jb21tb25zL2NvcmUnO1xuaW1wb3J0IHtFbnVtRGVzY3JpcHRvcn0gZnJvbSAnQG1lZGl1c2luYy9tbmctY29tbW9ucy9tb2RlbCc7XG5pbXBvcnQge0lUYWJsZURhdGFQcm92aWRlciwgVGFibGVEZXNjcmlwdG9ySW5zdH0gZnJvbSAnQG1lZGl1c2luYy9tbmctY29tbW9ucy90YWJsZS9hcGknO1xuaW1wb3J0IHtcbiAgICBBRmllbGREZXNjcmlwdG9yLFxuICAgIEVkaXRvckRlc2NyaXB0b3JJbnN0LFxuICAgIEZpZWxkSW5wdXREZXNjcmlwdG9yLFxuICAgIEZpZWxkTG9va3VwRW51bURlc2NyaXB0b3IsXG4gICAgRmllbGRMb29rdXBQcm92aWRlclR5cGUsXG4gICAgRmllbGRNYW55RWRpdG9yRGVzY3JpcHRvcixcbiAgICBGaWVsZE1hbnlUb01hbnlFZGl0b3JEZXNjcmlwdG9yLFxuICAgIFRhYmxldmlld0Rlc2NyaXB0b3JGaWVsZHNNYW5hZ2VNdWx0aVR5cGUsXG4gICAgVGFibGV2aWV3RGVzY3JpcHRvckluc3Rcbn0gZnJvbSAnQG1lZGl1c2luYy9tbmctY29tbW9ucy90YWJsZXZpZXcvYXBpJztcblxuaW1wb3J0IHtlbnVtTW9kZWxGcm9tU2NoZW1hfSBmcm9tICcuL2VudW0tZnJvbS1zY2hlbWEnO1xuaW1wb3J0IHtmcm9tU2NoZW1hRmlsdGVyTm9uQXJyYXlQcm9wZXJ0aWVzfSBmcm9tICcuL2ludGVybmFsL2NvbW1vbi1mcm9tLXNjaGVtYSc7XG5cbnR5cGUgRmllbGRJbnB1dFR5cGUgPSAnbnVtYmVyJyB8ICdjdXJyZW5jeScgfCAnYm9vbGVhbicgfCAnc3RyaW5nJyB8ICd0ZXh0JyB8ICd0ZXh0YXJlYScgfCAnZGF0ZScgfCAnZGF0ZS10aW1lJyB8ICdlbnVtJyB8ICdoaWRkZW4nO1xuXG50eXBlIEZyb21TY2hlbWFDb21tb25PcHRzVHlwZTxNb2RlbD4gPSB7XG4gICAgZGF0ZUZvcm1hdD86IHN0cmluZztcbiAgICBkYXRlVGltZUZvcm1hdD86IHN0cmluZztcbiAgICB0ZXh0YXJlYVJvd3M/OiBudW1iZXI7XG4gICAgbnVtYmVyVXNlR3JvdXBpbmc/OiBib29sZWFuO1xuICAgIG51bWJlclN0ZXA/OiBudW1iZXI7XG4gICAgbnVtYmVyTWluRnJhY3Rpb25EaWdpdHM/OiBudW1iZXI7XG4gICAgbnVtYmVyTWF4RnJhY3Rpb25EaWdpdHM/OiBudW1iZXI7XG4gICAgY3VycmVuY3k/OiBzdHJpbmc7XG4gICAgY3VycmVuY3lQcm9wZXJ0eT86IGtleW9mIE1vZGVsO1xuICAgIGN1cnJlbmN5RGlzcGxheT86ICdzeW1ib2wnIHwgJ2NvZGUnIHwgJ25hbWUnO1xufTtcblxudHlwZSBGaWVsZHNGcm9tU2NoZW1hT3B0c1R5cGU8TW9kZWwgPSBhbnk+ID0gRnJvbVNjaGVtYUNvbW1vbk9wdHNUeXBlPE1vZGVsPiAmIHtcbiAgICBmaWVsZFR5cGVzPzogUGFydGlhbDxSZWNvcmQ8a2V5b2YgTW9kZWwsIEZpZWxkSW5wdXRUeXBlPj47XG4gICAgZW51bU1vZGVscz86IFBhcnRpYWw8UmVjb3JkPGtleW9mIE1vZGVsLCBFbnVtRGVzY3JpcHRvcjxhbnk+Pj47XG4gICAgZW51bVNjaGVtYXM/OiBQYXJ0aWFsPFJlY29yZDxrZXlvZiBNb2RlbCwgU2NoZW1hRW51bTxhbnk+Pj47XG59O1xuXG50eXBlIEZpZWxkSW5wdXRGcm9tU2NoZW1hT3B0c1R5cGU8TW9kZWwgPSBhbnksIEVudW0gPSBhbnk+ID0gRnJvbVNjaGVtYUNvbW1vbk9wdHNUeXBlPE1vZGVsPiAmIHtcbiAgICBmaWVsZFR5cGU/OiBGaWVsZElucHV0VHlwZTtcbiAgICBlbnVtU2NoZW1hPzogU2NoZW1hRW51bTxFbnVtPjtcbiAgICBlbnVtTW9kZWw/OiBFbnVtRGVzY3JpcHRvcjxFbnVtPjtcbn07XG5cbi8qKlxuICogPGVtPkV4cGVyaW1lbnRhbDo8L2VtPiBCdWlsZGVyIGZvciBhZGRpbmcgZmllbGRzIHRvIGVkaXRvci5cbiAqXG4gKiBAZXhwZXJpbWVudGFsXG4gKi9cbmV4cG9ydCBjbGFzcyBTY2hlbWFGaWVsZHNCdWlsZGVyPFxuICAgIE1vZGVsLFxuICAgIFBhcmVudCA9IHVua25vd24sXG4gICAgQWRkTW9kZWwgPSBNb2RlbCxcbiAgICBFZGl0TW9kZWwgPSBNb2RlbCxcbiAgICBGaWVsZHNNb2RlbCA9IFRhYmxldmlld0Rlc2NyaXB0b3JGaWVsZHNNYW5hZ2VNdWx0aVR5cGU8TW9kZWwsIEFkZE1vZGVsLCBFZGl0TW9kZWw+LFxuICAgIFNjaE1vZGVsID0gTW9kZWxcbj4ge1xuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IGRlc2NyaXB0b3I6IFRhYmxldmlld0Rlc2NyaXB0b3JJbnN0PE1vZGVsLCBhbnksIGFueSwgUGFyZW50LCBhbnksIEFkZE1vZGVsLCBFZGl0TW9kZWwsIEZpZWxkc01vZGVsPiB8IEVkaXRvckRlc2NyaXB0b3JJbnN0PEZpZWxkc01vZGVsLCBQYXJlbnQ+LFxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IHNjaGVtYTogU2NoZW1hTW9kZWw8U2NoTW9kZWw+LFxuICAgICAgICBwcml2YXRlIG9wdHM/OiBGaWVsZHNGcm9tU2NoZW1hT3B0c1R5cGU8U2NoTW9kZWw+XG4gICAgKSB7fVxuXG4gICAgcHJpdmF0ZSBtZXJnZUZpZWxkc0lucHV0T3B0cyhwcm9wZXJ0eTogYW55LCBvcHRzPzogRmllbGRzRnJvbVNjaGVtYU9wdHNUeXBlKSB7XG4gICAgICAgIHJldHVybiA8RmllbGRJbnB1dEZyb21TY2hlbWFPcHRzVHlwZT57XG4gICAgICAgICAgICAuLi50aGlzLm9wdHMsXG4gICAgICAgICAgICBmaWVsZFR5cGU6IG9wdHM/LmZpZWxkVHlwZXM/Lltwcm9wZXJ0eV0gPz8gdGhpcy5vcHRzPy5maWVsZFR5cGVzPy5bcHJvcGVydHkgYXMga2V5b2Ygb2JqZWN0XSxcbiAgICAgICAgICAgIGVudW1Nb2RlbDogb3B0cz8uZW51bU1vZGVscz8uW3Byb3BlcnR5XSA/PyB0aGlzLm9wdHM/LmVudW1Nb2RlbHM/Lltwcm9wZXJ0eSBhcyBrZXlvZiBvYmplY3RdLFxuICAgICAgICAgICAgZW51bVNjaGVtYTogb3B0cz8uZW51bVNjaGVtYXM/Lltwcm9wZXJ0eV0gPz8gdGhpcy5vcHRzPy5lbnVtU2NoZW1hcz8uW3Byb3BlcnR5IGFzIGtleW9mIG9iamVjdF0sXG4gICAgICAgICAgICAuLi5vcHRzXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBtZXJnZUZpZWxkSW5wdXRPcHRzKHByb3BlcnR5OiBhbnksIG9wdHM/OiBGaWVsZElucHV0RnJvbVNjaGVtYU9wdHNUeXBlKSB7XG4gICAgICAgIHJldHVybiA8RmllbGRJbnB1dEZyb21TY2hlbWFPcHRzVHlwZTxGaWVsZHNNb2RlbD4+e1xuICAgICAgICAgICAgLi4udGhpcy5vcHRzLFxuICAgICAgICAgICAgZmllbGRUeXBlOiB0aGlzLm9wdHM/LmZpZWxkVHlwZXM/Lltwcm9wZXJ0eSBhcyBrZXlvZiBvYmplY3RdLFxuICAgICAgICAgICAgZW51bU1vZGVsOiB0aGlzLm9wdHM/LmVudW1Nb2RlbHM/Lltwcm9wZXJ0eSBhcyBrZXlvZiBvYmplY3RdLFxuICAgICAgICAgICAgZW51bVNjaGVtYTogdGhpcy5vcHRzPy5lbnVtU2NoZW1hcz8uW3Byb3BlcnR5IGFzIGtleW9mIG9iamVjdF0sXG4gICAgICAgICAgICAuLi5vcHRzXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogPGVtPkV4cGVyaW1lbnRhbDo8L2VtPiBBZGRzIGEgc2luZ2xlIGlucHV0IGZpZWxkIHZpYSB7YWRkRmllbGRJbnB1dEZyb21TY2hlbWF9LlxuICAgICAqXG4gICAgICogQGV4cGVyaW1lbnRhbFxuICAgICAqXG4gICAgICogQHBhcmFtIHtQcm9wZXJ0eX0gcHJvcGVydHkgLSBUaGUgcHJvcGVydHkgdG8gYWRkIHRoZSBmaWVsZCBmb3IuXG4gICAgICogQHBhcmFtIHtGaWVsZElucHV0RnJvbVNjaGVtYU9wdHNUeXBlPFNjaE1vZGVsPn0gb3B0cyAtIEFkZGl0aW9uYWwgb3B0aW9ucy5cbiAgICAgKlxuICAgICAqIEByZXR1cm4ge0ZpZWxkSW5wdXREZXNjcmlwdG9yPE1vZGVsLCBOb25OdWxsYWJsZTxNb2RlbFtQcm9wZXJ0eV0+LCBNb2RlbFtQcm9wZXJ0eV0sIFBhcmVudD59IFRoZSBhZGRlZCBmaWVsZCBkZXNjcmlwdG9yLlxuICAgICAqL1xuICAgIHB1YmxpYyBhZGQ8UHJvcGVydHkgZXh0ZW5kcyBFeHRyYWN0PGtleW9mIEZpZWxkc01vZGVsLCBrZXlvZiBTY2hNb2RlbD4+KFxuICAgICAgICBwcm9wZXJ0eTogUHJvcGVydHksXG4gICAgICAgIG9wdHM/OiBGaWVsZElucHV0RnJvbVNjaGVtYU9wdHNUeXBlPFNjaE1vZGVsPlxuICAgICk6IEZpZWxkSW5wdXREZXNjcmlwdG9yPEZpZWxkc01vZGVsLCBOb25OdWxsYWJsZTxGaWVsZHNNb2RlbFtQcm9wZXJ0eV0+LCBGaWVsZHNNb2RlbFtQcm9wZXJ0eV0sIFBhcmVudD4ge1xuICAgICAgICByZXR1cm4gYWRkRmllbGRJbnB1dEZyb21TY2hlbWE8UHJvcGVydHksIE1vZGVsLCBQYXJlbnQsIEFkZE1vZGVsLCBFZGl0TW9kZWwsIEZpZWxkc01vZGVsPihcbiAgICAgICAgICAgIHRoaXMuZGVzY3JpcHRvcixcbiAgICAgICAgICAgIHByb3BlcnR5LFxuICAgICAgICAgICAgdGhpcy5zY2hlbWEucHJvcGVydGllc1twcm9wZXJ0eV0sXG4gICAgICAgICAgICB0aGlzLm1lcmdlRmllbGRJbnB1dE9wdHMocHJvcGVydHksIG9wdHMpIGFzIEZpZWxkSW5wdXRGcm9tU2NoZW1hT3B0c1R5cGU8RmllbGRzTW9kZWwsIGFueT4gfCB1bmRlZmluZWRcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiA8ZW0+RXhwZXJpbWVudGFsOjwvZW0+IEFkZHMgYWxsIGlucHV0IGZpZWxkcyBmb3IgdGhlIG5vbi1hcnJheSBwcm9wZXJ0aWVzIHZpYSB7YWRkRmllbGRJbnB1dEZyb21TY2hlbWF9LlxuICAgICAqXG4gICAgICogQGV4cGVyaW1lbnRhbFxuICAgICAqXG4gICAgICogQHBhcmFtIHtGaWVsZHNGcm9tU2NoZW1hT3B0c1R5cGU8U2NoTW9kZWw+fSBvcHRzIC0gQWRkaXRpb25hbCBvcHRpb25zLlxuICAgICAqXG4gICAgICogQHJldHVybiB7dGhpc30gLSBUaGUgY3VycmVudCBpbnN0YW5jZSBvZiB0aGUgYnVpbGRlci5cbiAgICAgKi9cbiAgICBwdWJsaWMgd2l0aEFkZEFsbChvcHRzPzogRmllbGRzRnJvbVNjaGVtYU9wdHNUeXBlPFNjaE1vZGVsPik6IHRoaXMge1xuICAgICAgICB0aGlzLmFkZEZpZWxkcyh1bmRlZmluZWQsIG9wdHMpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiA8ZW0+RXhwZXJpbWVudGFsOjwvZW0+IEFkZHMgaW5wdXQgZmllbGRzIGZvciBwcm9wZXJ0aWVzIHZpYSB7YWRkRmllbGRJbnB1dEZyb21TY2hlbWF9LlxuICAgICAqXG4gICAgICogQGV4cGVyaW1lbnRhbFxuICAgICAqXG4gICAgICogQHBhcmFtIHtGaWVsZHNGcm9tU2NoZW1hT3B0c1R5cGU8U2NoTW9kZWw+fSBvcHRzIC0gQWRkaXRpb25hbCBvcHRpb25zLlxuICAgICAqIEBwYXJhbSB7Li4uUHJvcGVydHlbXX0gcHJvcGVydGllcyAtIFByb3BlcnRpZXMgdG8gYWRkIGZpZWxkcyBmb3IuIElmIG5vbiBwcm92aWRlZCwgYWxsIG5vbi1hcnJheSBwcm9wZXJ0aWVzIGZyb20gc2NoZW1hIHdpbGwgYmUgYWRkZWQuXG4gICAgICpcbiAgICAgKiBAcmV0dXJuIHt0aGlzfSAtIFRoZSBjdXJyZW50IGluc3RhbmNlIG9mIHRoZSBidWlsZGVyLlxuICAgICAqL1xuICAgIHB1YmxpYyB3aXRoQWRkPFByb3BlcnR5S2V5IGV4dGVuZHMgRXh0cmFjdDxrZXlvZiBNb2RlbCwga2V5b2YgU2NoTW9kZWw+PihvcHRzOiBGaWVsZHNGcm9tU2NoZW1hT3B0c1R5cGU8U2NoTW9kZWw+LCAuLi5wcm9wZXJ0aWVzOiBQcm9wZXJ0eUtleVtdKTogdGhpcztcbiAgICAvKipcbiAgICAgKiA8ZW0+RXhwZXJpbWVudGFsOjwvZW0+IEFkZHMgZmllbGRzIGZvciBwcm9wZXJ0aWVzIHZpYSB7YWRkRmllbGRJbnB1dEZyb21TY2hlbWF9LlxuICAgICAqXG4gICAgICogQGV4cGVyaW1lbnRhbFxuICAgICAqXG4gICAgICogQHBhcmFtIHsuLi5Qcm9wZXJ0eVtdfSBwcm9wZXJ0aWVzIC0gUHJvcGVydGllcyB0byBhZGQgZmllbGRzIGZvci4gSWYgbm9uIHByb3ZpZGVkLCBhbGwgbm9uLWFycmF5IHByb3BlcnRpZXMgZnJvbSBzY2hlbWEgd2lsbCBiZSBhZGRlZC5cbiAgICAgKlxuICAgICAqIEByZXR1cm4ge3RoaXN9IC0gVGhlIGN1cnJlbnQgaW5zdGFuY2Ugb2YgdGhlIGJ1aWxkZXIuXG4gICAgICovXG4gICAgcHVibGljIHdpdGhBZGQ8UHJvcGVydHkgZXh0ZW5kcyBFeHRyYWN0PGtleW9mIEZpZWxkc01vZGVsLCBrZXlvZiBTY2hNb2RlbD4+KC4uLnByb3BlcnRpZXM6IFByb3BlcnR5W10pOiB0aGlzO1xuICAgIHB1YmxpYyB3aXRoQWRkPFByb3BlcnR5IGV4dGVuZHMgRXh0cmFjdDxrZXlvZiBGaWVsZHNNb2RlbCwga2V5b2YgU2NoTW9kZWw+Pihwcm9wT3JPcHRzOiBGaWVsZHNGcm9tU2NoZW1hT3B0c1R5cGU8U2NoTW9kZWw+IHwgUHJvcGVydHksIC4uLnByb3BlcnRpZXM6IFByb3BlcnR5W10pOiB0aGlzIHtcbiAgICAgICAgaWYgKHR5cGVvZiBwcm9wT3JPcHRzID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgdGhpcy5hZGRGaWVsZHMocHJvcGVydGllcy5sZW5ndGggPT09IDAgPyB1bmRlZmluZWQgOiBwcm9wZXJ0aWVzLCBwcm9wT3JPcHRzKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuYWRkRmllbGRzKHByb3BPck9wdHMgPT09IHVuZGVmaW5lZCA/IHByb3BlcnRpZXMgOiBbcHJvcE9yT3B0cywgLi4ucHJvcGVydGllc10pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHByaXZhdGUgYWRkRmllbGRzPFByb3BlcnR5IGV4dGVuZHMgRXh0cmFjdDxrZXlvZiBGaWVsZHNNb2RlbCwga2V5b2YgU2NoTW9kZWw+Pihwcm9wZXJ0aWVzPzogUHJvcGVydHlbXSwgb3B0cz86IEZpZWxkc0Zyb21TY2hlbWFPcHRzVHlwZTxTY2hNb2RlbD4pIHtcbiAgICAgICAgY29uc3QgYWRkUHJvcGVydGllcyA9IHByb3BlcnRpZXMgPz8gZnJvbVNjaGVtYUZpbHRlck5vbkFycmF5UHJvcGVydGllcyh0aGlzLnNjaGVtYS5wcm9wZXJ0aWVzKTtcblxuICAgICAgICBhZGRQcm9wZXJ0aWVzLmZvckVhY2gocHJvcGVydHkgPT4ge1xuICAgICAgICAgICAgYWRkRmllbGRJbnB1dEZyb21TY2hlbWE8a2V5b2YgRmllbGRzTW9kZWwsIE1vZGVsLCBQYXJlbnQsIEFkZE1vZGVsLCBFZGl0TW9kZWwsIEZpZWxkc01vZGVsPihcbiAgICAgICAgICAgICAgICB0aGlzLmRlc2NyaXB0b3IsXG4gICAgICAgICAgICAgICAgcHJvcGVydHkgYXMgdW5rbm93biBhcyBrZXlvZiBGaWVsZHNNb2RlbCxcbiAgICAgICAgICAgICAgICB0aGlzLnNjaGVtYS5wcm9wZXJ0aWVzW3Byb3BlcnR5XSxcbiAgICAgICAgICAgICAgICB0aGlzLm1lcmdlRmllbGRzSW5wdXRPcHRzKHByb3BlcnR5LCBvcHRzKSBhcyBGaWVsZElucHV0RnJvbVNjaGVtYU9wdHNUeXBlPEZpZWxkc01vZGVsLCBhbnk+IHwgdW5kZWZpbmVkXG4gICAgICAgICAgICApO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiA8ZW0+RXhwZXJpbWVudGFsOjwvZW0+IEFkZHMgYSBzaW5nbGUgaW5wdXQgZmllbGQgdmlhIHthZGRGaWVsZElucHV0RnJvbVNjaGVtYX0gd2hlcmUgcHJvcGVydHkgc2NoZW1hIGlzIG1hbnVhbGx5IHByb3ZpZGVkLlxuICAgICAqXG4gICAgICogQGV4cGVyaW1lbnRhbFxuICAgICAqXG4gICAgICogQHBhcmFtIHtQcm9wZXJ0eX0gcHJvcGVydHkgLSBUaGUgcHJvcGVydHkgdG8gYWRkIHRoZSBmaWVsZCBmb3IuXG4gICAgICogQHBhcmFtIHtTY2hlbWFQcm9wZXJ0eX0gc2NoZW1hUHJvcGVydHkgLSBNYW51YWxseSBwcm92aWRlZCBzY2hlbWEgcHJvcGVydHkuXG4gICAgICogQHBhcmFtIHtGaWVsZElucHV0RnJvbVNjaGVtYU9wdHNUeXBlPE1vZGVsPn0gb3B0cyAtIEFkZGl0aW9uYWwgb3B0aW9ucy5cbiAgICAgKlxuICAgICAqIEByZXR1cm4ge0ZpZWxkSW5wdXREZXNjcmlwdG9yPE1vZGVsLCBOb25OdWxsYWJsZTxNb2RlbFtQcm9wZXJ0eV0+LCBNb2RlbFtQcm9wZXJ0eV0sIFBhcmVudD59IFRoZSBhZGRlZCBmaWVsZCBkZXNjcmlwdG9yLlxuICAgICAqL1xuICAgIHB1YmxpYyBhZGRGcm9tU2NoZW1hPFByb3BlcnR5IGV4dGVuZHMga2V5b2YgRmllbGRzTW9kZWw+KFxuICAgICAgICBwcm9wZXJ0eTogUHJvcGVydHksXG4gICAgICAgIHNjaGVtYVByb3BlcnR5OiBTY2hlbWFQcm9wZXJ0eSxcbiAgICAgICAgb3B0cz86IEZpZWxkSW5wdXRGcm9tU2NoZW1hT3B0c1R5cGU8RmllbGRzTW9kZWw+XG4gICAgKTogRmllbGRJbnB1dERlc2NyaXB0b3I8RmllbGRzTW9kZWwsIE5vbk51bGxhYmxlPEZpZWxkc01vZGVsW1Byb3BlcnR5XT4sIEZpZWxkc01vZGVsW1Byb3BlcnR5XSwgUGFyZW50PiB7XG4gICAgICAgIHJldHVybiBhZGRGaWVsZElucHV0RnJvbVNjaGVtYShcbiAgICAgICAgICAgIHRoaXMuZGVzY3JpcHRvcixcbiAgICAgICAgICAgIHByb3BlcnR5LFxuICAgICAgICAgICAgc2NoZW1hUHJvcGVydHksXG4gICAgICAgICAgICB0aGlzLm1lcmdlRmllbGRJbnB1dE9wdHMocHJvcGVydHksIG9wdHMpIGFzIEZpZWxkSW5wdXRGcm9tU2NoZW1hT3B0c1R5cGU8RmllbGRzTW9kZWwsIGFueT4gfCB1bmRlZmluZWRcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiA8ZW0+RXhwZXJpbWVudGFsOjwvZW0+IEFkZHMgYW4gZW51bSBsb29rdXAgZmllbGQgdmlhIHthZGRGaWVsZEVudW1Mb29rdXBGcm9tU2NoZW1hfS5cbiAgICAgKlxuICAgICAqIEBleHBlcmltZW50YWxcbiAgICAgKlxuICAgICAqIEBwYXJhbSB7UHJvcGVydHl9IHByb3BlcnR5IC0gVGhlIHByb3BlcnR5IHRvIGFkZCB0aGUgZW51bSBsb29rdXAgZmllbGQgZm9yLlxuICAgICAqIEBwYXJhbSB7U2NoZW1hRW51bTxFbnVtPiB8IEVudW1EZXNjcmlwdG9yPEVudW0+fSBbZW51bU9wdF0gLSBUaGUgZW51bSBzY2hlbWEgb3IgdGhlIGVudW0gbW9kZWwgZGVzY3JpcHRvci4gSWYgbm9uIHByb3ZpZGVkLCBidWlsZGVyIG9wdHMgd2lsbCBiZSBjaGVja2VkLlxuICAgICAqXG4gICAgICogQHJldHVybnMge0ZpZWxkTG9va3VwRW51bURlc2NyaXB0b3I8RW51bSwgTW9kZWwsIFBhcmVudD59IC0gVGhlIGFkZGVkIGZpZWxkIGRlc2NyaXB0b3IuXG4gICAgICpcbiAgICAgKiBAdGhyb3dzIHtDb21tb25zSW50ZXJuYWxFcnJvcn0gLSBJZiBubyBlbnVtIG1ldGFkYXRhIGlzIGZvdW5kIGZvciB0aGUgcHJvcGVydHkgZWl0aGVyIGZyb20gcGFyYW1ldGVyIG9yIGZyb20gYnVpbGRlcidzIG9wdHMuXG4gICAgICovXG4gICAgcHVibGljIGFkZEVudW08UHJvcGVydHkgZXh0ZW5kcyBFeHRyYWN0PGtleW9mIEZpZWxkc01vZGVsLCBrZXlvZiBTY2hNb2RlbD4sIEVudW0+KFxuICAgICAgICBwcm9wZXJ0eTogUHJvcGVydHksXG4gICAgICAgIGVudW1PcHQ/OiBTY2hlbWFFbnVtPEVudW0+IHwgRW51bURlc2NyaXB0b3I8RW51bT5cbiAgICApOiBGaWVsZExvb2t1cEVudW1EZXNjcmlwdG9yPEVudW0sIEZpZWxkc01vZGVsLCBQYXJlbnQ+IHtcbiAgICAgICAgaWYgKCFlbnVtT3B0KSB7XG4gICAgICAgICAgICBlbnVtT3B0ID0gdGhpcy5vcHRzPy5lbnVtTW9kZWxzPy5bcHJvcGVydHldID8/IHRoaXMub3B0cz8uZW51bVNjaGVtYXM/Lltwcm9wZXJ0eV07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFlbnVtT3B0KSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgQ29tbW9uc0ludGVybmFsRXJyb3IoYEVudW0gbG9va3VwIGZpZWxkIGZvciBwcm9wZXJ0eSAke3Byb3BlcnR5IGFzIHN0cmluZ30gY2Fubm90IGJlIGFkZGVkIGJlY2F1c2UgZW51bSBtZXRhZGF0YSB3YXMgbm90IHByb3ZpZGVkLmApO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBhZGRGaWVsZEVudW1Mb29rdXBGcm9tU2NoZW1hKHRoaXMuZGVzY3JpcHRvciwgcHJvcGVydHksIGVudW1PcHQsIHRoaXMuc2NoZW1hLnByb3BlcnRpZXNbcHJvcGVydHldKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiA8ZW0+RXhwZXJpbWVudGFsOjwvZW0+IEFkZHMgYW4gZW51bSBsb29rdXAgZmllbGQgdmlhIHthZGRGaWVsZEVudW1Mb29rdXBGcm9tU2NoZW1hfSB3aGVyZSBwcm9wZXJ0eSBzY2hlbWEgaXMgbWFudWFsbHkgcHJvdmlkZWQuXG4gICAgICpcbiAgICAgKiBAZXhwZXJpbWVudGFsXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge1Byb3BlcnR5fSBwcm9wZXJ0eSAtIFRoZSBwcm9wZXJ0eSB0byBhZGQgdGhlIGVudW0gbG9va3VwIGZpZWxkIGZvci5cbiAgICAgKiBAcGFyYW0ge1NjaGVtYUVudW08RW51bT4gfCBFbnVtRGVzY3JpcHRvcjxFbnVtPn0gW2VudW1PcHRdIC0gVGhlIGVudW0gc2NoZW1hIG9yIHRoZSBlbnVtIG1vZGVsIGRlc2NyaXB0b3IuIElmIG5vbiBwcm92aWRlZCwgYnVpbGRlciBvcHRzIHdpbGwgYmUgY2hlY2tlZC5cbiAgICAgKiBAcGFyYW0ge1NjaGVtYVByb3BlcnR5fSBzY2hlbWFQcm9wZXJ0eSAtIE1hbnVhbGx5IHByb3ZpZGVkIHNjaGVtYSBwcm9wZXJ0eS5cbiAgICAgKlxuICAgICAqIEByZXR1cm5zIHtGaWVsZExvb2t1cEVudW1EZXNjcmlwdG9yPEVudW0sIE1vZGVsLCBQYXJlbnQ+fSAtIFRoZSBhZGRlZCBmaWVsZCBkZXNjcmlwdG9yLlxuICAgICAqXG4gICAgICogQHRocm93cyB7Q29tbW9uc0ludGVybmFsRXJyb3J9IC0gSWYgbm8gZW51bSBtZXRhZGF0YSBpcyBmb3VuZCBmb3IgdGhlIHByb3BlcnR5IGVpdGhlciBmcm9tIHBhcmFtZXRlciBvciBmcm9tIGJ1aWxkZXIncyBvcHRzLlxuICAgICAqL1xuICAgIHB1YmxpYyBhZGRFbnVtRnJvbVNjaGVtYTxQcm9wZXJ0eSBleHRlbmRzIGtleW9mIEZpZWxkc01vZGVsLCBFbnVtPihcbiAgICAgICAgcHJvcGVydHk6IFByb3BlcnR5LFxuICAgICAgICBlbnVtT3B0OiBTY2hlbWFFbnVtPEVudW0+IHwgRW51bURlc2NyaXB0b3I8RW51bT4gfCB1bmRlZmluZWQsXG4gICAgICAgIHNjaGVtYVByb3BlcnR5OiBTY2hlbWFQcm9wZXJ0eVxuICAgICk6IEZpZWxkTG9va3VwRW51bURlc2NyaXB0b3I8RW51bSwgRmllbGRzTW9kZWwsIFBhcmVudD4ge1xuICAgICAgICBpZiAoIWVudW1PcHQpIHtcbiAgICAgICAgICAgIGVudW1PcHQgPSB0aGlzLm9wdHM/LmVudW1Nb2RlbHM/Lltwcm9wZXJ0eV0gPz8gdGhpcy5vcHRzPy5lbnVtU2NoZW1hcz8uW3Byb3BlcnR5XTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWVudW1PcHQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBDb21tb25zSW50ZXJuYWxFcnJvcihgRW51bSBsb29rdXAgZmllbGQgZm9yIHByb3BlcnR5ICR7cHJvcGVydHkgYXMgc3RyaW5nfSBjYW5ub3QgYmUgYWRkZWQgYmVjYXVzZSBlbnVtIG1ldGFkYXRhIHdhcyBub3QgcHJvdmlkZWQuYCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGFkZEZpZWxkRW51bUxvb2t1cEZyb21TY2hlbWEodGhpcy5kZXNjcmlwdG9yLCBwcm9wZXJ0eSwgZW51bU9wdCwgc2NoZW1hUHJvcGVydHkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIDxlbT5FeHBlcmltZW50YWw6PC9lbT4gQWRkcyBhIGxvb2t1cCBmaWVsZC5cbiAgICAgKiB7RWRpdG9yRGVzY3JpcHRvckludC5hZGRGaWVsZExvb2t1cH0gaXMgdXNlZCB0byBjcmVhdGUgZmllbGQgYW5kICR7c2V0RmllbGRCYXNpY09wdGlvbnNGcm9tU2NoZW1hfSB0byBhZGQgYmFzaWMgZmllbGQncyBvcHRpb25zIGZyb20gc2NoZW1hLlxuICAgICAqXG4gICAgICogQGV4cGVyaW1lbnRhbFxuICAgICAqXG4gICAgICogQHBhcmFtIHtQcm9wZXJ0eX0gcHJvcGVydHkgLSBUaGUgcHJvcGVydHkgdG8gY3JlYXRlIHRoZSBsb29rdXAgZmllbGQgZm9yLlxuICAgICAqIEBwYXJhbSB7RmllbGRMb29rdXBQcm92aWRlclR5cGU8TG9va3VwTW9kZWwsIFNlcnZpY2U+fSBwcm92aWRlciAtIERhdGEgcHJvdmlkZXIgZm9yIHRoZSBsb29rdXAgZmllbGQuXG4gICAgICpcbiAgICAgKiBAcmV0dXJuIFRoZSBjcmVhdGVkIGxvb2t1cCBmaWVsZC5cbiAgICAgKi9cbiAgICBwdWJsaWMgYWRkTG9va3VwPFxuICAgICAgICBQcm9wZXJ0eSBleHRlbmRzIEV4dHJhY3Q8a2V5b2YgRmllbGRzTW9kZWwsIGtleW9mIFNjaE1vZGVsPixcbiAgICAgICAgU2VydmljZSA9IHVuZGVmaW5lZCxcbiAgICAgICAgTG9va3VwTW9kZWwgZXh0ZW5kcyBOb25OdWxsYWJsZTxGaWVsZHNNb2RlbFtQcm9wZXJ0eV0+ID0gTm9uTnVsbGFibGU8RmllbGRzTW9kZWxbUHJvcGVydHldPlxuICAgID4ocHJvcGVydHk6IFByb3BlcnR5LCBwcm92aWRlcj86IEZpZWxkTG9va3VwUHJvdmlkZXJUeXBlPExvb2t1cE1vZGVsLCBTZXJ2aWNlPikge1xuICAgICAgICBjb25zdCBmaWVsZCA9IHRoaXMuZGVzY3JpcHRvci5hZGRGaWVsZExvb2t1cDxQcm9wZXJ0eSwgU2VydmljZSwgTG9va3VwTW9kZWw+KHByb3BlcnR5LCB7c2VydmljZVByb3ZpZGVyOiBwcm92aWRlcn0pO1xuICAgICAgICBzZXRGaWVsZEJhc2ljT3B0aW9uc0Zyb21TY2hlbWEoZmllbGQsIHRoaXMuc2NoZW1hLnByb3BlcnRpZXNbcHJvcGVydHldKTtcbiAgICAgICAgcmV0dXJuIGZpZWxkO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIDxlbT5FeHBlcmltZW50YWw6PC9lbT4gQWRkcyBhIGxvb2t1cCBmaWVsZCB3aGVyZSBwcm9wZXJ0eSBzY2hlbWEgaXMgbWFudWFsbHkgcHJvdmlkZWQuXG4gICAgICoge0VkaXRvckRlc2NyaXB0b3JJbnQuYWRkRmllbGRMb29rdXB9IGlzIHVzZWQgdG8gY3JlYXRlIGZpZWxkIGFuZCAke3NldEZpZWxkQmFzaWNPcHRpb25zRnJvbVNjaGVtYX0gdG8gYWRkIGJhc2ljIGZpZWxkJ3Mgb3B0aW9ucyBmcm9tIHNjaGVtYS5cbiAgICAgKlxuICAgICAqIEBleHBlcmltZW50YWxcbiAgICAgKlxuICAgICAqIEBwYXJhbSB7UHJvcGVydHl9IHByb3BlcnR5IC0gVGhlIHByb3BlcnR5IHRvIGNyZWF0ZSB0aGUgbG9va3VwIGZpZWxkIGZvci5cbiAgICAgKiBAcGFyYW0ge0ZpZWxkTG9va3VwUHJvdmlkZXJUeXBlPExvb2t1cE1vZGVsLCBTZXJ2aWNlPiB8IHVuZGVmaW5lZH0gcHJvdmlkZXIgLSBEYXRhIHByb3ZpZGVyIGZvciB0aGUgbG9va3VwIGZpZWxkLlxuICAgICAqIEBwYXJhbSB7U2NoZW1hUHJvcGVydHl9IHNjaGVtYVByb3BlcnR5IC0gTWFudWFsbHkgcHJvdmlkZWQgc2NoZW1hIHByb3BlcnR5LlxuICAgICAqXG4gICAgICogQHJldHVybiBUaGUgY3JlYXRlZCBsb29rdXAgZmllbGQuXG4gICAgICovXG4gICAgcHVibGljIGFkZExvb2t1cEZyb21TY2hlbWE8XG4gICAgICAgIFByb3BlcnR5IGV4dGVuZHMga2V5b2YgRmllbGRzTW9kZWwsXG4gICAgICAgIFNlcnZpY2UgPSB1bmRlZmluZWQsXG4gICAgICAgIExvb2t1cE1vZGVsIGV4dGVuZHMgTm9uTnVsbGFibGU8RmllbGRzTW9kZWxbUHJvcGVydHldPiA9IE5vbk51bGxhYmxlPEZpZWxkc01vZGVsW1Byb3BlcnR5XT5cbiAgICA+KHByb3BlcnR5OiBQcm9wZXJ0eSwgcHJvdmlkZXI6IEZpZWxkTG9va3VwUHJvdmlkZXJUeXBlPExvb2t1cE1vZGVsLCBTZXJ2aWNlPiB8IHVuZGVmaW5lZCwgc2NoZW1hUHJvcGVydHk6IFNjaGVtYVByb3BlcnR5KSB7XG4gICAgICAgIGNvbnN0IGZpZWxkID0gdGhpcy5kZXNjcmlwdG9yLmFkZEZpZWxkTG9va3VwPFByb3BlcnR5LCBTZXJ2aWNlLCBMb29rdXBNb2RlbD4ocHJvcGVydHksIHtzZXJ2aWNlUHJvdmlkZXI6IHByb3ZpZGVyfSk7XG4gICAgICAgIHNldEZpZWxkQmFzaWNPcHRpb25zRnJvbVNjaGVtYShmaWVsZCwgc2NoZW1hUHJvcGVydHkpO1xuICAgICAgICByZXR1cm4gZmllbGQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogPGVtPkV4cGVyaW1lbnRhbDo8L2VtPiBBZGRzIGEgb25lLXRvLW1hbnkgZWRpdG9yIGZpZWxkLlxuICAgICAqIHtFZGl0b3JEZXNjcmlwdG9ySW50LmFkZEZpZWxkTWFueUVkaXRvcn0gaXMgdXNlZCB0byBjcmVhdGUgZmllbGQgYW5kICR7c2V0RmllbGRCYXNpY09wdGlvbnNGcm9tU2NoZW1hfSB0byBhZGQgYmFzaWMgZmllbGQncyBvcHRpb25zIGZyb20gc2NoZW1hLlxuICAgICAqXG4gICAgICogQGV4cGVyaW1lbnRhbFxuICAgICAqXG4gICAgICogQHBhcmFtIHtQcm9wZXJ0eX0gcHJvcGVydHkgLSBUaGUgcHJvcGVydHkgdG8gY3JlYXRlIHRoZSBtYW55IGVkaXRvciBmaWVsZCBmb3IuXG4gICAgICogQHBhcmFtIHtUYWJsZXZpZXdEZXNjcmlwdG9ySW5zdDxGaWVsZE1vZGVsLCBhbnksIGFueSwgRmllbGRzTW9kZWw+fSB0YWJsZXZpZXdEZXNjcmlwdG9yIC0gVGFibGV2aWV3IGRlc2NyaXB0b3IuXG4gICAgICpcbiAgICAgKiBAcmV0dXJuIFRoZSBjcmVhdGVkIG9uZS10by1tYW55IGVkaXRvciBmaWVsZC5cbiAgICAgKi9cbiAgICBhZGRNYW55RWRpdG9yPFByb3BlcnR5IGV4dGVuZHMgRXh0cmFjdDxrZXlvZiBGaWVsZHNNb2RlbCwga2V5b2YgU2NoTW9kZWw+LCBGaWVsZE1vZGVsID0gQXJyYXlJdGVtVHlwZTxGaWVsZHNNb2RlbFtQcm9wZXJ0eV0+LCBGaWVsZFZhbHVlID0gRmllbGRzTW9kZWxbUHJvcGVydHldPihcbiAgICAgICAgcHJvcGVydHk6IFByb3BlcnR5LFxuICAgICAgICB0YWJsZXZpZXdEZXNjcmlwdG9yOiBUYWJsZXZpZXdEZXNjcmlwdG9ySW5zdDxGaWVsZE1vZGVsLCBhbnksIGFueSwgRmllbGRzTW9kZWwsIEZpZWxkTW9kZWwsIEZpZWxkTW9kZWwsIEZpZWxkTW9kZWwsIEZpZWxkTW9kZWw+XG4gICAgKTogRmllbGRNYW55RWRpdG9yRGVzY3JpcHRvcjxGaWVsZE1vZGVsLCBGaWVsZHNNb2RlbCwgRmllbGRWYWx1ZSwgUGFyZW50PiB7XG4gICAgICAgIGNvbnN0IGZpZWxkID0gdGhpcy5kZXNjcmlwdG9yLmFkZEZpZWxkTWFueUVkaXRvcjxQcm9wZXJ0eSwgRmllbGRNb2RlbCwgRmllbGRWYWx1ZT4ocHJvcGVydHksIHRhYmxldmlld0Rlc2NyaXB0b3IpO1xuICAgICAgICBzZXRGaWVsZEJhc2ljT3B0aW9uc0Zyb21TY2hlbWEoZmllbGQsIHRoaXMuc2NoZW1hLnByb3BlcnRpZXNbcHJvcGVydHldKTtcbiAgICAgICAgcmV0dXJuIGZpZWxkO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIDxlbT5FeHBlcmltZW50YWw6PC9lbT4gQWRkcyBhbiBvbmUtdG8tbWFueSBlZGl0b3IgZmllbGQgd2hlcmUgcHJvcGVydHkgc2NoZW1hIGlzIG1hbnVhbGx5IHByb3ZpZGVkLlxuICAgICAqIHtFZGl0b3JEZXNjcmlwdG9ySW50LmFkZEZpZWxkTWFueUVkaXRvcn0gaXMgdXNlZCB0byBjcmVhdGUgZmllbGQgYW5kICR7c2V0RmllbGRCYXNpY09wdGlvbnNGcm9tU2NoZW1hfSB0byBhZGQgYmFzaWMgZmllbGQncyBvcHRpb25zIGZyb20gc2NoZW1hLlxuICAgICAqXG4gICAgICogQGV4cGVyaW1lbnRhbFxuICAgICAqXG4gICAgICogQHBhcmFtIHtQcm9wZXJ0eX0gcHJvcGVydHkgLSBUaGUgcHJvcGVydHkgdG8gY3JlYXRlIHRoZSBtYW55IGVkaXRvciBmaWVsZCBmb3IuXG4gICAgICogQHBhcmFtIHtUYWJsZXZpZXdEZXNjcmlwdG9yVHlwZTxGaWVsZE1vZGVsLCBhbnksIGFueSwgRmllbGRzTW9kZWw+fSB0YWJsZXZpZXdEZXNjcmlwdG9yIC0gVGFibGV2aWV3IGRlc2NyaXB0b3IuXG4gICAgICogQHBhcmFtIHtTY2hlbWFQcm9wZXJ0eX0gc2NoZW1hUHJvcGVydHkgLSBNYW51YWxseSBwcm92aWRlZCBzY2hlbWEgcHJvcGVydHkuXG4gICAgICpcbiAgICAgKiBAcmV0dXJuIFRoZSBjcmVhdGVkIG9uZS10by1tYW55IGVkaXRvciBmaWVsZC5cbiAgICAgKi9cbiAgICBhZGRNYW55RWRpdG9yRnJvbVNjaGVtYTxQcm9wZXJ0eSBleHRlbmRzIGtleW9mIEZpZWxkc01vZGVsLCBGaWVsZE1vZGVsID0gQXJyYXlJdGVtVHlwZTxGaWVsZHNNb2RlbFtQcm9wZXJ0eV0+LCBGaWVsZFZhbHVlID0gRmllbGRzTW9kZWxbUHJvcGVydHldPihcbiAgICAgICAgcHJvcGVydHk6IFByb3BlcnR5LFxuICAgICAgICB0YWJsZXZpZXdEZXNjcmlwdG9yOiBUYWJsZXZpZXdEZXNjcmlwdG9ySW5zdDxGaWVsZE1vZGVsLCBhbnksIGFueSwgRmllbGRzTW9kZWwsIEZpZWxkTW9kZWwsIEZpZWxkTW9kZWwsIEZpZWxkTW9kZWwsIEZpZWxkTW9kZWw+LFxuICAgICAgICBzY2hlbWFQcm9wZXJ0eTogU2NoZW1hUHJvcGVydHlcbiAgICApOiBGaWVsZE1hbnlFZGl0b3JEZXNjcmlwdG9yPEZpZWxkTW9kZWwsIEZpZWxkc01vZGVsLCBGaWVsZFZhbHVlLCBQYXJlbnQ+IHtcbiAgICAgICAgY29uc3QgZmllbGQgPSB0aGlzLmRlc2NyaXB0b3IuYWRkRmllbGRNYW55RWRpdG9yPFByb3BlcnR5LCBGaWVsZE1vZGVsLCBGaWVsZFZhbHVlPihwcm9wZXJ0eSwgdGFibGV2aWV3RGVzY3JpcHRvcik7XG4gICAgICAgIHNldEZpZWxkQmFzaWNPcHRpb25zRnJvbVNjaGVtYShmaWVsZCwgc2NoZW1hUHJvcGVydHkpO1xuICAgICAgICByZXR1cm4gZmllbGQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogPGVtPkV4cGVyaW1lbnRhbDo8L2VtPiBBZGRzIGEgbWFueS10by1tYW55IGVkaXRvciBmaWVsZC5cbiAgICAgKiB7RWRpdG9yRGVzY3JpcHRvckludC5hZGRGaWVsZE1hbnlUb01hbnlFZGl0b3J9IGlzIHVzZWQgdG8gY3JlYXRlIGZpZWxkIGFuZCAke3NldEZpZWxkQmFzaWNPcHRpb25zRnJvbVNjaGVtYX0gdG8gYWRkIGJhc2ljIGZpZWxkJ3Mgb3B0aW9ucyBmcm9tIHNjaGVtYS5cbiAgICAgKlxuICAgICAqIEBleHBlcmltZW50YWxcbiAgICAgKlxuICAgICAqIEBwYXJhbSB7UHJvcGVydHl9IHByb3BlcnR5IC0gVGhlIHByb3BlcnR5IHRvIGNyZWF0ZSB0aGUgbWFueSBlZGl0b3IgZmllbGQgZm9yLlxuICAgICAqIEBwYXJhbSB7VGFibGVEZXNjcmlwdG9ySW5zdDxGaWVsZE1vZGVsPn0gbWFpblRhYmxlRGVzY3JpcHRvciAtIE1haW4gdGFibGUgZGVzY3JpcHRvci5cbiAgICAgKiBAcGFyYW0ge1RhYmxlRGVzY3JpcHRvckluc3Q8RmllbGRNb2RlbD59IGxvb2t1cFRhYmxlRGVzY3JpcHRvciAtIExvb2t1cCB0YWJsZSBkZXNjcmlwdG9yLlxuICAgICAqIEBwYXJhbSB7SVRhYmxlRGF0YVByb3ZpZGVyPEZpZWxkTW9kZWwsIFNlcnZpY2VUeXBlPn0gbG9va3VwRGF0YVByb3ZpZGVyIC0gTG9va3VwIGRhdGEgcHJvdmlkZXIuXG4gICAgICpcbiAgICAgKiBAcmV0dXJuIFRoZSBjcmVhdGVkIG1hbnktdG8tbWFueSBlZGl0b3IgZmllbGQuXG4gICAgICovXG4gICAgYWRkTWFueVRvTWFueUVkaXRvcjxcbiAgICAgICAgUHJvcGVydHkgZXh0ZW5kcyBFeHRyYWN0PGtleW9mIEZpZWxkc01vZGVsLCBrZXlvZiBTY2hNb2RlbD4sXG4gICAgICAgIFNlcnZpY2VUeXBlLFxuICAgICAgICBGaWVsZE1vZGVsID0gQXJyYXlJdGVtVHlwZTxGaWVsZHNNb2RlbFtQcm9wZXJ0eV0+LFxuICAgICAgICBGaWVsZFZhbHVlID0gRmllbGRzTW9kZWxbUHJvcGVydHldXG4gICAgPihcbiAgICAgICAgcHJvcGVydHk6IFByb3BlcnR5LFxuICAgICAgICBtYWluVGFibGVEZXNjcmlwdG9yOiBUYWJsZURlc2NyaXB0b3JJbnN0PEZpZWxkTW9kZWw+LFxuICAgICAgICBsb29rdXBUYWJsZURlc2NyaXB0b3I6IFRhYmxlRGVzY3JpcHRvckluc3Q8RmllbGRNb2RlbD4sXG4gICAgICAgIGxvb2t1cERhdGFQcm92aWRlcjogSVRhYmxlRGF0YVByb3ZpZGVyPEZpZWxkTW9kZWwsIFNlcnZpY2VUeXBlPlxuICAgICk6IEZpZWxkTWFueVRvTWFueUVkaXRvckRlc2NyaXB0b3I8RmllbGRNb2RlbCwgRmllbGRzTW9kZWwsIFNlcnZpY2VUeXBlLCBGaWVsZFZhbHVlLCBQYXJlbnQ+IHtcbiAgICAgICAgY29uc3QgZmllbGQgPSB0aGlzLmRlc2NyaXB0b3IuYWRkRmllbGRNYW55VG9NYW55RWRpdG9yPFByb3BlcnR5LCBTZXJ2aWNlVHlwZSwgRmllbGRNb2RlbCwgRmllbGRWYWx1ZT4oXG4gICAgICAgICAgICBwcm9wZXJ0eSxcbiAgICAgICAgICAgIG1haW5UYWJsZURlc2NyaXB0b3IsXG4gICAgICAgICAgICBsb29rdXBUYWJsZURlc2NyaXB0b3IsXG4gICAgICAgICAgICBsb29rdXBEYXRhUHJvdmlkZXJcbiAgICAgICAgKTtcbiAgICAgICAgc2V0RmllbGRCYXNpY09wdGlvbnNGcm9tU2NoZW1hKGZpZWxkLCB0aGlzLnNjaGVtYS5wcm9wZXJ0aWVzW3Byb3BlcnR5XSk7XG4gICAgICAgIHJldHVybiBmaWVsZDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiA8ZW0+RXhwZXJpbWVudGFsOjwvZW0+IEFkZHMgYSBtYW55LXRvLW1hbnkgZWRpdG9yIGZpZWxkIHdoZXJlIHByb3BlcnR5IHNjaGVtYSBpcyBtYW51YWxseSBwcm92aWRlZC5cbiAgICAgKiB7RWRpdG9yRGVzY3JpcHRvckludC5hZGRGaWVsZE1hbnlUb01hbnlFZGl0b3J9IGlzIHVzZWQgdG8gY3JlYXRlIGZpZWxkIGFuZCAke3NldEZpZWxkQmFzaWNPcHRpb25zRnJvbVNjaGVtYX0gdG8gYWRkIGJhc2ljIGZpZWxkJ3Mgb3B0aW9ucyBmcm9tIHNjaGVtYS5cbiAgICAgKlxuICAgICAqIEBleHBlcmltZW50YWxcbiAgICAgKlxuICAgICAqIEBwYXJhbSB7UHJvcGVydHl9IHByb3BlcnR5IC0gVGhlIHByb3BlcnR5IHRvIGNyZWF0ZSB0aGUgbWFueSBlZGl0b3IgZmllbGQgZm9yLlxuICAgICAqIEBwYXJhbSB7VGFibGVEZXNjcmlwdG9ySW5zdDxGaWVsZE1vZGVsPn0gbWFpblRhYmxlRGVzY3JpcHRvciAtIE1haW4gdGFibGUgZGVzY3JpcHRvci5cbiAgICAgKiBAcGFyYW0ge1RhYmxlRGVzY3JpcHRvckluc3Q8RmllbGRNb2RlbD59IGxvb2t1cFRhYmxlRGVzY3JpcHRvciAtIExvb2t1cCB0YWJsZSBkZXNjcmlwdG9yLlxuICAgICAqIEBwYXJhbSB7SVRhYmxlRGF0YVByb3ZpZGVyPEZpZWxkTW9kZWwsIFNlcnZpY2VUeXBlPn0gbG9va3VwRGF0YVByb3ZpZGVyIC0gTG9va3VwIGRhdGEgcHJvdmlkZXIuXG4gICAgICogQHBhcmFtIHtTY2hlbWFQcm9wZXJ0eX0gc2NoZW1hUHJvcGVydHkgLSBNYW51YWxseSBwcm92aWRlZCBzY2hlbWEgcHJvcGVydHkuXG4gICAgICpcbiAgICAgKiBAcmV0dXJuIFRoZSBjcmVhdGVkIG1hbnktdG8tbWFueSBlZGl0b3IgZmllbGQuXG4gICAgICovXG4gICAgYWRkTWFueVRvTWFueUVkaXRvckZyb21TY2hlbWE8UHJvcGVydHkgZXh0ZW5kcyBrZXlvZiBGaWVsZHNNb2RlbCwgU2VydmljZVR5cGUsIEZpZWxkTW9kZWwgPSBBcnJheUl0ZW1UeXBlPEZpZWxkc01vZGVsW1Byb3BlcnR5XT4sIEZpZWxkVmFsdWUgPSBGaWVsZHNNb2RlbFtQcm9wZXJ0eV0+KFxuICAgICAgICBwcm9wZXJ0eTogUHJvcGVydHksXG4gICAgICAgIG1haW5UYWJsZURlc2NyaXB0b3I6IFRhYmxlRGVzY3JpcHRvckluc3Q8RmllbGRNb2RlbD4sXG4gICAgICAgIGxvb2t1cFRhYmxlRGVzY3JpcHRvcjogVGFibGVEZXNjcmlwdG9ySW5zdDxGaWVsZE1vZGVsPixcbiAgICAgICAgbG9va3VwRGF0YVByb3ZpZGVyOiBJVGFibGVEYXRhUHJvdmlkZXI8RmllbGRNb2RlbCwgU2VydmljZVR5cGU+LFxuICAgICAgICBzY2hlbWFQcm9wZXJ0eTogU2NoZW1hUHJvcGVydHlcbiAgICApOiBGaWVsZE1hbnlUb01hbnlFZGl0b3JEZXNjcmlwdG9yPEZpZWxkTW9kZWwsIEZpZWxkc01vZGVsLCBTZXJ2aWNlVHlwZSwgRmllbGRWYWx1ZSwgUGFyZW50PiB7XG4gICAgICAgIGNvbnN0IGZpZWxkID0gdGhpcy5kZXNjcmlwdG9yLmFkZEZpZWxkTWFueVRvTWFueUVkaXRvcjxQcm9wZXJ0eSwgU2VydmljZVR5cGUsIEZpZWxkTW9kZWwsIEZpZWxkVmFsdWU+KFxuICAgICAgICAgICAgcHJvcGVydHksXG4gICAgICAgICAgICBtYWluVGFibGVEZXNjcmlwdG9yLFxuICAgICAgICAgICAgbG9va3VwVGFibGVEZXNjcmlwdG9yLFxuICAgICAgICAgICAgbG9va3VwRGF0YVByb3ZpZGVyXG4gICAgICAgICk7XG4gICAgICAgIHNldEZpZWxkQmFzaWNPcHRpb25zRnJvbVNjaGVtYShmaWVsZCwgc2NoZW1hUHJvcGVydHkpO1xuICAgICAgICByZXR1cm4gZmllbGQ7XG4gICAgfVxufVxuXG4vKipcbiAqIDxlbT5FeHBlcmltZW50YWw6PC9lbT4gQ3JlYXRlcyBidWlsZGVyIGZvciBhZGRpbmcgZmllbGRzIHRvIGRlc2NyaXB0b3IgYmFzZWQgb24gcHJvdmlkZWQgbW9kZWwgc2NoZW1hLlxuICpcbiAqIEBleHBlcmltZW50YWxcbiAqXG4gKiBAcGFyYW0ge1RhYmxldmlld0Rlc2NyaXB0b3JJbnN0PE1vZGVsLCBhbnksIGFueSwgUGFyZW50LCBhbnksIEFkZE1vZGVsLCBFZGl0TW9kZWwsIEZpZWxkc01vZGVsPiB8IEVkaXRvckRlc2NyaXB0b3JJbnN0PE1vZGVsLCBQYXJlbnQ+fSBkZXNjcmlwdG9yIC0gRGVzY3JpcHRvciB0byBhZGQgZmllbGRzIHRvLlxuICogQHBhcmFtIHtTY2hlbWFNb2RlbDxTY2hNb2RlbD59IHNjaGVtYSAtIFRoZSBzY2hlbWEgd2l0aCBtZXRhZGF0YSBhYm91dCBwcm9wZXJ0aWVzIGZvciBmaWVsZHMuXG4gKiBAcGFyYW0ge0ZpZWxkc0Zyb21TY2hlbWFPcHRzVHlwZTxTY2hNb2RlbD59IFtvcHRzXSAtIEFkZGl0aW9uYWwgb3B0aW9ucy5cbiAqXG4gKiBAcmV0dXJuIHtTY2hlbWFGaWVsZHNCdWlsZGVyPE1vZGVsLCBQYXJlbnQsIEFkZE1vZGVsLCBFZGl0TW9kZWwgLCBGaWVsZHNNb2RlbCwgU2NoTW9kZWw+fSAtIFRoZSBTY2hlbWFGaWVsZHNCdWlsZGVyIG9iamVjdCBjb250YWluaW5nIHRoZSBleHRyYWN0ZWQgZmllbGRzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZmllbGRzRnJvbVNjaGVtYTxcbiAgICBNb2RlbCxcbiAgICBQYXJlbnQgPSB1bmRlZmluZWQsXG4gICAgQWRkTW9kZWwgPSBNb2RlbCxcbiAgICBFZGl0TW9kZWwgPSBNb2RlbCxcbiAgICBGaWVsZHNNb2RlbCA9IFRhYmxldmlld0Rlc2NyaXB0b3JGaWVsZHNNYW5hZ2VNdWx0aVR5cGU8TW9kZWwsIEFkZE1vZGVsLCBFZGl0TW9kZWw+LFxuICAgIFNjaE1vZGVsID0gTW9kZWxcbj4oXG4gICAgZGVzY3JpcHRvcjogVGFibGV2aWV3RGVzY3JpcHRvckluc3Q8TW9kZWwsIGFueSwgYW55LCBQYXJlbnQsIGFueSwgQWRkTW9kZWwsIEVkaXRNb2RlbCwgRmllbGRzTW9kZWw+IHwgRWRpdG9yRGVzY3JpcHRvckluc3Q8RmllbGRzTW9kZWwsIFBhcmVudD4sXG4gICAgc2NoZW1hOiBTY2hlbWFNb2RlbDxTY2hNb2RlbD4sXG4gICAgb3B0cz86IEZpZWxkc0Zyb21TY2hlbWFPcHRzVHlwZTxTY2hNb2RlbD5cbik6IFNjaGVtYUZpZWxkc0J1aWxkZXI8TW9kZWwsIFBhcmVudCwgQWRkTW9kZWwsIEVkaXRNb2RlbCwgRmllbGRzTW9kZWwsIFNjaE1vZGVsPiB7XG4gICAgcmV0dXJuIG5ldyBTY2hlbWFGaWVsZHNCdWlsZGVyPE1vZGVsLCBQYXJlbnQsIEFkZE1vZGVsLCBFZGl0TW9kZWwsIEZpZWxkc01vZGVsLCBTY2hNb2RlbD4oZGVzY3JpcHRvciwgc2NoZW1hLCBvcHRzKTtcbn1cblxuLyoqXG4gKiA8ZW0+RXhwZXJpbWVudGFsOjwvZW0+IEFkZHMgYSBmaWVsZCBpbnB1dCB0byBlZGl0b3IgZGVzY3JpcHRvciBiYXNlZCBvbiB0aGUgZ2l2ZW4gc2NoZW1hIHByb3BlcnR5IGFuZCBvcHRpb25zLlxuICpcbiAqIEBleHBlcmltZW50YWxcbiAqXG4gKiBAcGFyYW0ge1RhYmxldmlld0Rlc2NyaXB0b3JJbnN0IHwgRWRpdG9yRGVzY3JpcHRvckluc3R9IGRlc2NyaXB0b3IgLSBEZXNjcmlwdG9yIHRvIGFkZCBmaWVsZCB0by5cbiAqIEBwYXJhbSB7a2V5b2YgTW9kZWx9IHByb3BlcnR5IC0gVGhlIHByb3BlcnR5IG9mIHRoZSBtb2RlbC5cbiAqIEBwYXJhbSB7U2NoZW1hUHJvcGVydHl9IHByb3BlcnR5U2NoZW1hIC0gVGhlIHByb3BlcnR5J3Mgc2NoZW1hIGZvciB0aGUgZmllbGQuXG4gKiBAcGFyYW0ge0ZpZWxkSW5wdXRGcm9tU2NoZW1hT3B0c1R5cGU8TW9kZWw+fSBbb3B0c10gLSBBZGRpdGlvbmFsIG9wdGlvbnMuXG4gKlxuICogQHJldHVybiB7RmllbGRJbnB1dERlc2NyaXB0b3I8TW9kZWwsIE5vbk51bGxhYmxlPE1vZGVsW1Byb3BlcnR5XT4sIE1vZGVsW1Byb3BlcnR5XSwgUGFyZW50Pn0gLSBUaGUgZ2VuZXJhdGVkIGZpZWxkIGlucHV0IGRlc2NyaXB0b3IuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhZGRGaWVsZElucHV0RnJvbVNjaGVtYTxcbiAgICBQcm9wZXJ0eSBleHRlbmRzIGtleW9mIEZpZWxkc01vZGVsLFxuICAgIE1vZGVsLFxuICAgIFBhcmVudCA9IHVua25vd24sXG4gICAgQWRkTW9kZWwgPSBNb2RlbCxcbiAgICBFZGl0TW9kZWwgPSBNb2RlbCxcbiAgICBGaWVsZHNNb2RlbCA9IFRhYmxldmlld0Rlc2NyaXB0b3JGaWVsZHNNYW5hZ2VNdWx0aVR5cGU8TW9kZWwsIEFkZE1vZGVsLCBFZGl0TW9kZWw+XG4+KFxuICAgIGRlc2NyaXB0b3I6IFRhYmxldmlld0Rlc2NyaXB0b3JJbnN0PE1vZGVsLCBhbnksIGFueSwgUGFyZW50LCBhbnksIEFkZE1vZGVsLCBFZGl0TW9kZWwsIEZpZWxkc01vZGVsPiB8IEVkaXRvckRlc2NyaXB0b3JJbnN0PEZpZWxkc01vZGVsLCBQYXJlbnQ+LFxuICAgIHByb3BlcnR5OiBQcm9wZXJ0eSxcbiAgICBwcm9wZXJ0eVNjaGVtYTogU2NoZW1hUHJvcGVydHksXG4gICAgb3B0cz86IEZpZWxkSW5wdXRGcm9tU2NoZW1hT3B0c1R5cGU8RmllbGRzTW9kZWw+XG4pOiBGaWVsZElucHV0RGVzY3JpcHRvcjxGaWVsZHNNb2RlbCwgTm9uTnVsbGFibGU8RmllbGRzTW9kZWxbUHJvcGVydHldPiwgRmllbGRzTW9kZWxbUHJvcGVydHldLCBQYXJlbnQ+IHtcbiAgICBjb25zdCBwcm9wZXJ0eVR5cGUgPSBvcHRzPy5maWVsZFR5cGUgPz8gcHJvcGVydHlTY2hlbWEudHlwZTtcblxuICAgIGNvbnN0IGZpZWxkID0gbmV3IEZpZWxkSW5wdXREZXNjcmlwdG9yPEZpZWxkc01vZGVsLCBOb25OdWxsYWJsZTxGaWVsZHNNb2RlbFtQcm9wZXJ0eV0+LCBGaWVsZHNNb2RlbFtQcm9wZXJ0eV0sIFBhcmVudD4ocHJvcGVydHkgYXMgc3RyaW5nKTtcbiAgICBpZiAoZGVzY3JpcHRvciBpbnN0YW5jZW9mIFRhYmxldmlld0Rlc2NyaXB0b3JJbnN0KSB7XG4gICAgICAgIGRlc2NyaXB0b3IuYWRkRmllbGREZXNjcmlwdG9yKGZpZWxkKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICBkZXNjcmlwdG9yLmFkZEZpZWxkRGVzY3JpcHRvcihmaWVsZCk7XG4gICAgfVxuXG4gICAgLy8gSGFuZGxlIGRpZmZlcmVudCBwcm9wZXJ0eSB0eXBlc1xuICAgIHN3aXRjaCAocHJvcGVydHlUeXBlIGFzIEZpZWxkSW5wdXRUeXBlKSB7XG4gICAgICAgIGNhc2UgJ251bWJlcic6XG4gICAgICAgICAgICBmaWVsZC5hc051bWJlcigpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ2N1cnJlbmN5JzpcbiAgICAgICAgICAgIGZpZWxkLmFzQ3VycmVuY3koe1xuICAgICAgICAgICAgICAgIGN1cnJlbmN5OiBvcHRzPy5jdXJyZW5jeSxcbiAgICAgICAgICAgICAgICBjdXJyZW5jeURpc3BsYXk6IG9wdHM/LmN1cnJlbmN5RGlzcGxheSxcbiAgICAgICAgICAgICAgICBjdXJyZW5jeVByb3BlcnR5OiBvcHRzPy5jdXJyZW5jeVByb3BlcnR5XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdib29sZWFuJzpcbiAgICAgICAgICAgIGZpZWxkLmFzU3dpdGNoKCk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAndGV4dCc6XG4gICAgICAgIGNhc2UgJ3N0cmluZyc6XG4gICAgICAgICAgICBmaWVsZC5hc1RleHQoKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICd0ZXh0YXJlYSc6XG4gICAgICAgICAgICBmaWVsZC5hc1RleHRhcmVhKCk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnZGF0ZSc6XG4gICAgICAgICAgICBmaWVsZC5hc0RhdGVQaWNrZXIoe2Zvcm1hdDogb3B0cz8uZGF0ZUZvcm1hdCA/IGZyb21Bbmd1bGFyRGF0ZUZvcm1hdFRvUHJpbWUob3B0cy5kYXRlRm9ybWF0KSA6IHVuZGVmaW5lZH0pO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ2RhdGUtdGltZSc6XG4gICAgICAgICAgICBmaWVsZC5hc0RhdGVQaWNrZXIoe3Nob3dUaW1lOiB0cnVlLCBmb3JtYXQ6IG9wdHM/LmRhdGVUaW1lRm9ybWF0ID8gZnJvbUFuZ3VsYXJEYXRlRm9ybWF0VG9QcmltZShvcHRzLmRhdGVUaW1lRm9ybWF0KSA6IHVuZGVmaW5lZH0pO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ2VudW0nOlxuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNhc2UtZGVjbGFyYXRpb25zXG4gICAgICAgICAgICBjb25zdCBlbnVtTW9kZWwgPSBvcHRzPy5lbnVtU2NoZW1hID8gZW51bU1vZGVsRnJvbVNjaGVtYShvcHRzLmVudW1TY2hlbWEpIDogb3B0cz8uZW51bU1vZGVsO1xuICAgICAgICAgICAgaWYgKGVudW1Nb2RlbCkge1xuICAgICAgICAgICAgICAgIGZpZWxkLmFzUmFkaW9Gcm9tRW51bShlbnVtTW9kZWwpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBmaWVsZC5hc1RleHQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdoaWRkZW4nOlxuICAgICAgICAgICAgZmllbGQuYXNIaWRkZW4oKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIC8vIEhhbmRsZSBkaWZmZXJlbnQgcHJvcGVydHkgdmFsaWRhdGlvbnNcbiAgICBpZiAocHJvcGVydHlUeXBlID09PSAnbnVtYmVyJyB8fCBwcm9wZXJ0eVR5cGUgPT09ICdjdXJyZW5jeScpIHtcbiAgICAgICAgZmllbGQud2l0aE51bWJlclZhbGlkYXRpb24oe1xuICAgICAgICAgICAgbWluOiBwcm9wZXJ0eVNjaGVtYS5leGNsdXNpdmVNaW5pbXVtICYmIHByb3BlcnR5U2NoZW1hLm1pbmltdW0gIT0gdW5kZWZpbmVkID8gcHJvcGVydHlTY2hlbWEubWluaW11bSArIChwcm9wZXJ0eVNjaGVtYS5pc0ludGVnZXIgPyAxIDogMC4wMDAxKSA6IHByb3BlcnR5U2NoZW1hLm1pbmltdW0sXG4gICAgICAgICAgICBtYXg6IHByb3BlcnR5U2NoZW1hLmV4Y2x1c2l2ZU1heGltdW0gJiYgcHJvcGVydHlTY2hlbWEubWF4aW11bSAhPSB1bmRlZmluZWQgPyBwcm9wZXJ0eVNjaGVtYS5tYXhpbXVtIC0gKHByb3BlcnR5U2NoZW1hLmlzSW50ZWdlciA/IDEgOiAwLjAwMDEpIDogcHJvcGVydHlTY2hlbWEubWF4aW11bSxcbiAgICAgICAgICAgIHN0ZXA6IG9wdHM/Lm51bWJlclN0ZXBcbiAgICAgICAgfSk7XG4gICAgICAgIGlmIChvcHRzPy5udW1iZXJVc2VHcm91cGluZykge1xuICAgICAgICAgICAgZmllbGQud2l0aE51bWJlckdyb3VwaW5nKCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG9wdHM/Lm51bWJlck1pbkZyYWN0aW9uRGlnaXRzICE9IG51bGwgfHwgb3B0cz8ubnVtYmVyTWF4RnJhY3Rpb25EaWdpdHMgIT0gbnVsbCkge1xuICAgICAgICAgICAgZmllbGQud2l0aE51bWJlckZyYWN0aW9ucyh7XG4gICAgICAgICAgICAgICAgbWluRnJhY3Rpb25EaWdpdHM6IG9wdHM/Lm51bWJlck1pbkZyYWN0aW9uRGlnaXRzLFxuICAgICAgICAgICAgICAgIG1heEZyYWN0aW9uRGlnaXRzOiBvcHRzPy5udW1iZXJNYXhGcmFjdGlvbkRpZ2l0c1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAocHJvcGVydHlUeXBlID09PSAnc3RyaW5nJyB8fCBwcm9wZXJ0eVR5cGUgPT09ICd0ZXh0YXJlYScgfHwgcHJvcGVydHlUeXBlID09PSAndGV4dCcpIHtcbiAgICAgICAgZmllbGQud2l0aFRleHRWYWxpZGF0aW9uKHtcbiAgICAgICAgICAgIG1pbkxlbmd0aDogcHJvcGVydHlTY2hlbWEubWluTGVuZ3RoLFxuICAgICAgICAgICAgbWF4TGVuZ3RoOiBwcm9wZXJ0eVNjaGVtYS5tYXhMZW5ndGgsXG4gICAgICAgICAgICBwYXR0ZXJuOiBwcm9wZXJ0eVNjaGVtYS5wYXR0ZXJuID8gbmV3IFJlZ0V4cChwcm9wZXJ0eVNjaGVtYS5wYXR0ZXJuLnNsaWNlKDEsIC0xKSkgOiB1bmRlZmluZWRcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaWYgKHByb3BlcnR5VHlwZSA9PT0gJ3RleHRhcmVhJyAmJiBvcHRzPy50ZXh0YXJlYVJvd3MgIT0gbnVsbCkge1xuICAgICAgICAgICAgZmllbGQud2l0aFRleHRhcmVhUm93cyhvcHRzLnRleHRhcmVhUm93cyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHByb3BlcnR5VHlwZSAhPT0gJ3RleHRhcmVhJyAmJiBwcm9wZXJ0eVNjaGVtYS5pc0VtYWlsKSB7XG4gICAgICAgICAgICBmaWVsZC53aXRoVGV4dFZhbGlkYXRpb25FbWFpbCgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgc2V0RmllbGRCYXNpY09wdGlvbnNGcm9tU2NoZW1hKGZpZWxkLCBwcm9wZXJ0eVNjaGVtYSk7XG5cbiAgICByZXR1cm4gZmllbGQ7XG59XG5cbi8qKlxuICogPGVtPkV4cGVyaW1lbnRhbDo8L2VtPiBBZGRzIGEgZmllbGQgZW51bSBsb29rdXAgdG8gZWRpdG9yIGRlc2NyaXB0b3IgYmFzZWQgb24gdGhlIGdpdmVuIHNjaGVtYSBwcm9wZXJ0eSBhbmQgb3B0aW9ucy5cbiAqXG4gKiBAZXhwZXJpbWVudGFsXG4gKlxuICogQHBhcmFtIHtUYWJsZXZpZXdEZXNjcmlwdG9ySW5zdDxNb2RlbCwgYW55LCBhbnksIFBhcmVudD4gfCBFZGl0b3JEZXNjcmlwdG9ySW5zdDxNb2RlbCwgUGFyZW50Pn0gZGVzY3JpcHRvciAtIERlc2NyaXB0b3IgdG8gYWRkIGZpZWxkIHRvLlxuICogQHBhcmFtIHtrZXlvZiBNb2RlbH0gcHJvcGVydHkgLSBUaGUgcHJvcGVydHkgb2YgdGhlIG1vZGVsLlxuICogQHBhcmFtIHtTY2hlbWFFbnVtPEVudW0+IHwgRW51bURlc2NyaXB0b3I8RW51bT59IGVudW1PcHQgLSBUaGUgZW51bSBzY2hlbWEgb3IgZW51bSBtb2RlbCBkZXNjcmlwdG9yLlxuICogQHBhcmFtIHtTY2hlbWFQcm9wZXJ0eX0gcHJvcGVydHlTY2hlbWEgLSBUaGUgcHJvcGVydHkncyBzY2hlbWEgZm9yIHRoZSBmaWVsZC5cbiAqXG4gKiBAcmV0dXJucyB7RmllbGRMb29rdXBFbnVtPEVudW0+fSAtIFRoZSBmaWVsZCB3aXRoIGVudW1lcmF0aW9uIHZhbHVlcy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFkZEZpZWxkRW51bUxvb2t1cEZyb21TY2hlbWE8XG4gICAgTW9kZWwsXG4gICAgUGFyZW50ID0gdW5rbm93bixcbiAgICBBZGRNb2RlbCA9IE1vZGVsLFxuICAgIEVkaXRNb2RlbCA9IE1vZGVsLFxuICAgIEZpZWxkc01vZGVsID0gVGFibGV2aWV3RGVzY3JpcHRvckZpZWxkc01hbmFnZU11bHRpVHlwZTxNb2RlbCwgQWRkTW9kZWwsIEVkaXRNb2RlbD4sXG4gICAgRW51bSA9IGFueVxuPihcbiAgICBkZXNjcmlwdG9yOiBUYWJsZXZpZXdEZXNjcmlwdG9ySW5zdDxNb2RlbCwgYW55LCBhbnksIFBhcmVudCwgYW55LCBBZGRNb2RlbCwgRWRpdE1vZGVsLCBGaWVsZHNNb2RlbD4gfCBFZGl0b3JEZXNjcmlwdG9ySW5zdDxGaWVsZHNNb2RlbCwgUGFyZW50PixcbiAgICBwcm9wZXJ0eToga2V5b2YgRmllbGRzTW9kZWwsXG4gICAgZW51bU9wdDogU2NoZW1hRW51bTxFbnVtPiB8IEVudW1EZXNjcmlwdG9yPEVudW0+LFxuICAgIHByb3BlcnR5U2NoZW1hOiBTY2hlbWFQcm9wZXJ0eVxuKSB7XG4gICAgY29uc3QgZW51bURlc2NyaXB0b3IgPSBlbnVtT3B0IGluc3RhbmNlb2YgRW51bURlc2NyaXB0b3IgPyBlbnVtT3B0IDogZW51bU1vZGVsRnJvbVNjaGVtYShlbnVtT3B0KTtcbiAgICBjb25zdCBmaWVsZCA9IGRlc2NyaXB0b3IuYWRkRmllbGRMb29rdXBFbnVtVW5zYWZlPEVudW0+KHByb3BlcnR5IGFzIHN0cmluZywgZW51bURlc2NyaXB0b3IpO1xuICAgIHNldEZpZWxkQmFzaWNPcHRpb25zRnJvbVNjaGVtYShmaWVsZCwgcHJvcGVydHlTY2hlbWEpO1xuICAgIHJldHVybiBmaWVsZDtcbn1cblxuLyoqXG4gKiA8ZW0+RXhwZXJpbWVudGFsOjwvZW0+IFNldHMgYmFzaWMgb3B0aW9ucyBmb3IgYSBmaWVsZCBiYXNlZCBvbiBhIGdpdmVuIHByb3BlcnR5IHNjaGVtYS5cbiAqXG4gKiBAcGFyYW0ge0FGaWVsZERlc2NyaXB0b3I8RmllbGRNb2RlbCwgRWRpdG9yTW9kZWwsIEZpZWxkVmFsdWUsIFBhcmVudEVkaXRvck1vZGVsPn0gZmllbGQgLSBUaGUgZmllbGQgdG8gc2V0IG9wdGlvbnMgZm9yLlxuICogQHBhcmFtIHtTY2hlbWFQcm9wZXJ0eX0gcHJvcGVydHlTY2hlbWEgLSBUaGUgcHJvcGVydHkgc2NoZW1hIHRvIGJhc2UgdGhlIG9wdGlvbnMgb24uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXRGaWVsZEJhc2ljT3B0aW9uc0Zyb21TY2hlbWE8RmllbGRNb2RlbCA9IGFueSwgRWRpdG9yTW9kZWwgPSBhbnksIEZpZWxkVmFsdWUgPSBGaWVsZE1vZGVsLCBQYXJlbnRFZGl0b3JNb2RlbCA9IHVuZGVmaW5lZD4oXG4gICAgZmllbGQ6IEFGaWVsZERlc2NyaXB0b3I8RmllbGRNb2RlbCwgRWRpdG9yTW9kZWwsIEZpZWxkVmFsdWUsIFBhcmVudEVkaXRvck1vZGVsPixcbiAgICBwcm9wZXJ0eVNjaGVtYTogU2NoZW1hUHJvcGVydHlcbik6IHZvaWQge1xuICAgIGlmIChwcm9wZXJ0eVNjaGVtYS5yZXF1aXJlZCkgZmllbGQud2l0aFJlcXVpcmVkKCk7XG4gICAgaWYgKHByb3BlcnR5U2NoZW1hLmlzUmVhZE9ubHkpIGZpZWxkLndpdGhEaXNhYmxlZCgpO1xufVxuIl19
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
export function fromSchemaFilterNonArrayProperties(propertySchemas) {
|
|
2
|
-
return Object.keys(propertySchemas).filter(key => {
|
|
3
|
-
const propertySchema = propertySchemas[key];
|
|
4
|
-
return ['number', 'string', 'boolean', 'date', 'date-time', 'enum', 'object'].includes(propertySchema.type);
|
|
5
|
-
});
|
|
6
|
-
}
|
|
7
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tbW9uLWZyb20tc2NoZW1hLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vdGFibGV2aWV3L3NyYy9zY2hlbWEvaW50ZXJuYWwvY29tbW9uLWZyb20tc2NoZW1hLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE1BQU0sVUFBVSxrQ0FBa0MsQ0FBUSxlQUF5QztJQUMvRixPQUFRLE1BQU0sQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFxQixDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsRUFBRTtRQUNsRSxNQUFNLGNBQWMsR0FBRyxlQUFlLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDNUMsT0FBTyxDQUFDLFFBQVEsRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxXQUFXLEVBQUUsTUFBTSxFQUFFLFFBQVEsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDaEgsQ0FBQyxDQUFDLENBQUM7QUFDUCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGZ1bmN0aW9uIGZyb21TY2hlbWFGaWx0ZXJOb25BcnJheVByb3BlcnRpZXM8TW9kZWw+KHByb3BlcnR5U2NoZW1hczogUmVjb3JkPGtleW9mIE1vZGVsLCBhbnk+KTogKGtleW9mIE1vZGVsKVtdIHtcbiAgICByZXR1cm4gKE9iamVjdC5rZXlzKHByb3BlcnR5U2NoZW1hcykgYXMgKGtleW9mIE1vZGVsKVtdKS5maWx0ZXIoa2V5ID0+IHtcbiAgICAgICAgY29uc3QgcHJvcGVydHlTY2hlbWEgPSBwcm9wZXJ0eVNjaGVtYXNba2V5XTtcbiAgICAgICAgcmV0dXJuIFsnbnVtYmVyJywgJ3N0cmluZycsICdib29sZWFuJywgJ2RhdGUnLCAnZGF0ZS10aW1lJywgJ2VudW0nLCAnb2JqZWN0J10uaW5jbHVkZXMocHJvcGVydHlTY2hlbWEudHlwZSk7XG4gICAgfSk7XG59XG4iXX0=
|