@mediusinc/mng-commons-data-api 7.0.0-rc.0 → 7.0.0-rc.2
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/fesm2022/mediusinc-mng-commons-data-api-tableview.mjs +26 -39
- package/fesm2022/mediusinc-mng-commons-data-api-tableview.mjs.map +1 -1
- package/fesm2022/mediusinc-mng-commons-data-api.mjs.map +1 -1
- package/openapi/custom/modelSchema.mustache +4 -2
- package/package.json +3 -3
- package/tableview/index.d.ts +5 -9
- package/version-info.json +6 -6
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { enumModelGeneric, EnumDescriptor } from '@mediusinc/mng-commons/model';
|
|
2
2
|
import { CommonsInternalError, fromAngularDateFormatToPrime, toObservable, valueToDefined } from '@mediusinc/mng-commons/core';
|
|
3
3
|
import { FieldInputDescriptor, TableviewDescriptorInst, TableviewInputBuilder, TableviewDataProviderInst } from '@mediusinc/mng-commons/tableview/api';
|
|
4
|
-
import { map
|
|
4
|
+
import { map } from 'rxjs';
|
|
5
5
|
import { toGetAllParamsAsUrlQuery, apiServiceGetAll } from '@mediusinc/mng-commons-data-api';
|
|
6
6
|
import { LookupDataProviderInst, lookupDataProvider } from '@mediusinc/mng-commons/form/api';
|
|
7
7
|
import { inject, Injector } from '@angular/core';
|
|
@@ -166,14 +166,14 @@ function columnsFromSchema(descriptor, schema, opts) {
|
|
|
166
166
|
* @return {ColumnDescriptor<NonNullable<Model[Property]>, Model, Model[Property]>} - The added column descriptor.
|
|
167
167
|
*/
|
|
168
168
|
function addColumnFromSchema(descriptor, property, propertySchema, opts) {
|
|
169
|
-
const propertyType = opts?.columnType ?? propertySchema?.type;
|
|
169
|
+
const propertyType = property === opts?.currencyProperty ? 'currency' : (opts?.columnType ?? propertySchema?.type);
|
|
170
170
|
const column = descriptor.addColumn(property);
|
|
171
171
|
// Handle different property types
|
|
172
172
|
switch (propertyType) {
|
|
173
173
|
case 'number':
|
|
174
174
|
column.asNumber({
|
|
175
|
-
minFractionDigits: opts?.numberMinFractionDigits,
|
|
176
|
-
maxFractionDigits: opts?.numberMaxFractionDigits,
|
|
175
|
+
minFractionDigits: opts?.numberMinFractionDigits ?? (propertySchema.isInteger === false ? 1 : undefined),
|
|
176
|
+
maxFractionDigits: opts?.numberMaxFractionDigits ?? (propertySchema.isInteger === false ? 3 : undefined),
|
|
177
177
|
minIntegerDigits: opts?.numberMinIntegerDigits
|
|
178
178
|
});
|
|
179
179
|
break;
|
|
@@ -197,9 +197,8 @@ function addColumnFromSchema(descriptor, property, propertySchema, opts) {
|
|
|
197
197
|
column.asCurrency({
|
|
198
198
|
currency: opts?.currency,
|
|
199
199
|
currencyDisplay: opts?.currencyDisplay,
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
maxFractionDigits: opts?.numberMaxFractionDigits,
|
|
200
|
+
minFractionDigits: opts?.numberMinFractionDigits ?? (propertySchema.isInteger === false ? 2 : undefined),
|
|
201
|
+
maxFractionDigits: opts?.numberMaxFractionDigits ?? (propertySchema.isInteger === false ? 2 : undefined),
|
|
203
202
|
minIntegerDigits: opts?.numberMinIntegerDigits
|
|
204
203
|
});
|
|
205
204
|
break;
|
|
@@ -471,7 +470,7 @@ function fieldsFromSchema(descriptor, schema, opts) {
|
|
|
471
470
|
* @return {FieldInputDescriptor<Model, NonNullable<Model[Property]>, Model[Property], Parent>} - The generated field input descriptor.
|
|
472
471
|
*/
|
|
473
472
|
function addFieldInputFromSchema(descriptor, property, propertySchema, opts) {
|
|
474
|
-
const propertyType = opts?.fieldType ?? propertySchema
|
|
473
|
+
const propertyType = property === opts?.currencyProperty ? 'currency' : (opts?.fieldType ?? propertySchema?.type);
|
|
475
474
|
const field = new FieldInputDescriptor(property);
|
|
476
475
|
if (descriptor instanceof TableviewDescriptorInst) {
|
|
477
476
|
descriptor.addFieldDescriptor(field);
|
|
@@ -487,8 +486,7 @@ function addFieldInputFromSchema(descriptor, property, propertySchema, opts) {
|
|
|
487
486
|
case 'currency':
|
|
488
487
|
field.asCurrency({
|
|
489
488
|
currency: opts?.currency,
|
|
490
|
-
currencyDisplay: opts?.currencyDisplay
|
|
491
|
-
currencyProperty: opts?.currencyProperty
|
|
489
|
+
currencyDisplay: opts?.currencyDisplay
|
|
492
490
|
});
|
|
493
491
|
break;
|
|
494
492
|
case 'boolean':
|
|
@@ -524,17 +522,21 @@ function addFieldInputFromSchema(descriptor, property, propertySchema, opts) {
|
|
|
524
522
|
// Handle different property validations
|
|
525
523
|
if (propertyType === 'number' || propertyType === 'currency') {
|
|
526
524
|
field.withNumberValidation({
|
|
527
|
-
min: propertySchema.exclusiveMinimum && propertySchema.minimum != undefined
|
|
528
|
-
|
|
525
|
+
min: propertySchema.exclusiveMinimum && propertySchema.minimum != undefined
|
|
526
|
+
? propertySchema.minimum + (propertySchema.isInteger !== false ? 1 : 0.0001)
|
|
527
|
+
: propertySchema.minimum,
|
|
528
|
+
max: propertySchema.exclusiveMaximum && propertySchema.maximum != undefined
|
|
529
|
+
? propertySchema.maximum - (propertySchema.isInteger !== false ? 1 : 0.0001)
|
|
530
|
+
: propertySchema.maximum,
|
|
529
531
|
step: opts?.numberStep
|
|
530
532
|
});
|
|
531
533
|
if (opts?.numberUseGrouping) {
|
|
532
534
|
field.withNumberGrouping();
|
|
533
535
|
}
|
|
534
|
-
if (opts?.numberMinFractionDigits != null || opts?.numberMaxFractionDigits != null) {
|
|
536
|
+
if (opts?.numberMinFractionDigits != null || opts?.numberMaxFractionDigits != null || propertySchema.isInteger === false) {
|
|
535
537
|
field.withNumberFractions({
|
|
536
|
-
minFractionDigits: opts?.numberMinFractionDigits,
|
|
537
|
-
maxFractionDigits: opts?.numberMaxFractionDigits
|
|
538
|
+
minFractionDigits: opts?.numberMinFractionDigits ?? (propertySchema.isInteger === false ? (propertyType === 'currency' ? 2 : 1) : 0),
|
|
539
|
+
maxFractionDigits: opts?.numberMaxFractionDigits ?? (propertySchema.isInteger === false ? (propertyType === 'currency' ? 2 : 3) : 0)
|
|
538
540
|
});
|
|
539
541
|
}
|
|
540
542
|
}
|
|
@@ -779,23 +781,6 @@ function convertPropertyToFilterGenericProperties(properties, opts) {
|
|
|
779
781
|
return filterableProperties;
|
|
780
782
|
}, []);
|
|
781
783
|
}
|
|
782
|
-
/**
|
|
783
|
-
* Maps an Observable of properties to filter generic properties.
|
|
784
|
-
*/
|
|
785
|
-
function mapToFilterGenericProperties(opts) {
|
|
786
|
-
return function (source) {
|
|
787
|
-
return new Observable(subscriber => {
|
|
788
|
-
return source.subscribe({
|
|
789
|
-
next(value) {
|
|
790
|
-
subscriber.next(convertPropertyToFilterGenericProperties(value, opts));
|
|
791
|
-
},
|
|
792
|
-
error: err => {
|
|
793
|
-
subscriber.error(err);
|
|
794
|
-
}
|
|
795
|
-
});
|
|
796
|
-
});
|
|
797
|
-
};
|
|
798
|
-
}
|
|
799
784
|
/**
|
|
800
785
|
* Creates a data provider for generic filter properties that can be used with the TableDescriptor's generic filter functionality.
|
|
801
786
|
*
|
|
@@ -804,12 +789,14 @@ function mapToFilterGenericProperties(opts) {
|
|
|
804
789
|
* @param [opts] - Optional custom options for filter descriptors, such as date and number formatting.
|
|
805
790
|
*/
|
|
806
791
|
function filterPropertyLookupProvider(serviceType, lookupFn, opts) {
|
|
807
|
-
|
|
808
|
-
|
|
809
|
-
|
|
810
|
-
|
|
811
|
-
|
|
812
|
-
|
|
792
|
+
return lookupDataProvider({ service: serviceType }).withLookup((_, service) => {
|
|
793
|
+
if (typeof lookupFn === 'function') {
|
|
794
|
+
return toObservable(lookupFn(service));
|
|
795
|
+
}
|
|
796
|
+
else {
|
|
797
|
+
return toObservable(service[lookupFn]()).pipe(map(r => convertPropertyToFilterGenericProperties(r, opts)));
|
|
798
|
+
}
|
|
799
|
+
});
|
|
813
800
|
}
|
|
814
801
|
/**
|
|
815
802
|
* Creates a data provider for generic filter value suggestions that can be used with the TableDescriptor's generic filter functionality.
|
|
@@ -835,5 +822,5 @@ function filterValueSuggestionLookupProvider(service, lookupFn) {
|
|
|
835
822
|
* Generated bundle index. Do not edit.
|
|
836
823
|
*/
|
|
837
824
|
|
|
838
|
-
export { SchemaColumnsBuilder, SchemaFieldsBuilder, addColumnFromSchema, addFieldEnumLookupFromSchema, addFieldInputFromSchema, columnsFromSchema, convertPropertyToFilterGenericProperties, convertPropertyTypeToFilterType, enumModelFromSchema, fieldsFromSchema, filterPropertyLookupProvider, filterValueSuggestionLookupProvider, lookupWithApiServiceGetAll,
|
|
825
|
+
export { SchemaColumnsBuilder, SchemaFieldsBuilder, addColumnFromSchema, addFieldEnumLookupFromSchema, addFieldInputFromSchema, columnsFromSchema, convertPropertyToFilterGenericProperties, convertPropertyTypeToFilterType, enumModelFromSchema, fieldsFromSchema, filterPropertyLookupProvider, filterValueSuggestionLookupProvider, lookupWithApiServiceGetAll, setFieldBasicOptionsFromSchema, tableviewMultiModelWithApiServiceGetAll, tableviewMultiModelWithGetAllParams, tableviewWithApiServiceGetAll, tableviewWithGetAllParams };
|
|
839
826
|
//# sourceMappingURL=mediusinc-mng-commons-data-api-tableview.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mediusinc-mng-commons-data-api-tableview.mjs","sources":["../tmp-esm2022/tableview/schema/enum-from-schema.js","../tmp-esm2022/tableview/schema/internal/common-from-schema.js","../tmp-esm2022/tableview/schema/columns-from-schema.js","../tmp-esm2022/tableview/schema/fields-from-schema.js","../tmp-esm2022/tableview/helpers/lookup-get-all-create.js","../tmp-esm2022/tableview/helpers/tableview-get-all-params-create.js","../tmp-esm2022/tableview/filter/generic-filters.js","../tmp-esm2022/tableview/index.js","../tmp-esm2022/tableview/mediusinc-mng-commons-data-api-tableview.js"],"sourcesContent":["import { enumModelGeneric } from '@mediusinc/mng-commons/model';\n/**\n * <em>Experimental:</em> Emulates an enum model object from enum schema.\n *\n * @experimental\n *\n * @param {SchemaEnum<Enum>} enumSchema - The schema of the enum.\n *\n * @returns {EnumDescriptor<Enum>} - The generated enum model descriptor.\n */\nexport function enumModelFromSchema(enumSchema) {\n const enumObj = {};\n enumSchema.values\n .map((v, idx) => ({ value: v, constant: enumSchema.constants[idx] }))\n .forEach(({ value, constant }) => {\n const valueAsStrOrInt = value;\n enumObj[constant] = valueAsStrOrInt;\n if (typeof valueAsStrOrInt === 'number' && enumObj[valueAsStrOrInt] == null)\n enumObj[valueAsStrOrInt] = constant;\n });\n return enumModelGeneric(enumObj, enumSchema.name.replace(/\\d+$/, ''));\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW51bS1mcm9tLXNjaGVtYS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3RhYmxldmlldy9zcmMvc2NoZW1hL2VudW0tZnJvbS1zY2hlbWEudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFpQixnQkFBZ0IsRUFBQyxNQUFNLDhCQUE4QixDQUFDO0FBRTlFOzs7Ozs7OztHQVFHO0FBQ0gsTUFBTSxVQUFVLG1CQUFtQixDQUFPLFVBQTRCO0lBQ2xFLE1BQU0sT0FBTyxHQUE2QyxFQUFFLENBQUM7SUFDN0QsVUFBVSxDQUFDLE1BQU07U0FDWixHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUMsS0FBSyxFQUFFLENBQUMsRUFBRSxRQUFRLEVBQUUsVUFBVSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsRUFBQyxDQUFDLENBQUM7U0FDbEUsT0FBTyxDQUFDLENBQUMsRUFBQyxLQUFLLEVBQUUsUUFBUSxFQUFDLEVBQUUsRUFBRTtRQUMzQixNQUFNLGVBQWUsR0FBRyxLQUFtQyxDQUFDO1FBQzVELE9BQU8sQ0FBQyxRQUFRLENBQUMsR0FBRyxlQUFlLENBQUM7UUFDcEMsSUFBSSxPQUFPLGVBQWUsS0FBSyxRQUFRLElBQUksT0FBTyxDQUFDLGVBQWUsQ0FBQyxJQUFJLElBQUk7WUFBRSxPQUFPLENBQUMsZUFBZSxDQUFDLEdBQUcsUUFBUSxDQUFDO0lBQ3JILENBQUMsQ0FBQyxDQUFDO0lBQ1AsT0FBTyxnQkFBZ0IsQ0FBTyxPQUFPLEVBQUUsVUFBVSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDaEYsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7U2NoZW1hRW51bX0gZnJvbSAnQG1lZGl1c2luYy9tbmctY29tbW9ucy1kYXRhLWFwaSc7XG5pbXBvcnQge0VudW1EZXNjcmlwdG9yLCBlbnVtTW9kZWxHZW5lcmljfSBmcm9tICdAbWVkaXVzaW5jL21uZy1jb21tb25zL21vZGVsJztcblxuLyoqXG4gKiA8ZW0+RXhwZXJpbWVudGFsOjwvZW0+IEVtdWxhdGVzIGFuIGVudW0gbW9kZWwgb2JqZWN0IGZyb20gZW51bSBzY2hlbWEuXG4gKlxuICogQGV4cGVyaW1lbnRhbFxuICpcbiAqIEBwYXJhbSB7U2NoZW1hRW51bTxFbnVtPn0gZW51bVNjaGVtYSAtIFRoZSBzY2hlbWEgb2YgdGhlIGVudW0uXG4gKlxuICogQHJldHVybnMge0VudW1EZXNjcmlwdG9yPEVudW0+fSAtIFRoZSBnZW5lcmF0ZWQgZW51bSBtb2RlbCBkZXNjcmlwdG9yLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZW51bU1vZGVsRnJvbVNjaGVtYTxFbnVtPihlbnVtU2NoZW1hOiBTY2hlbWFFbnVtPEVudW0+KTogRW51bURlc2NyaXB0b3I8RW51bT4ge1xuICAgIGNvbnN0IGVudW1PYmo6IFJlY29yZDxzdHJpbmcgfCBudW1iZXIsIHN0cmluZyB8IG51bWJlcj4gPSB7fTtcbiAgICBlbnVtU2NoZW1hLnZhbHVlc1xuICAgICAgICAubWFwKCh2LCBpZHgpID0+ICh7dmFsdWU6IHYsIGNvbnN0YW50OiBlbnVtU2NoZW1hLmNvbnN0YW50c1tpZHhdfSkpXG4gICAgICAgIC5mb3JFYWNoKCh7dmFsdWUsIGNvbnN0YW50fSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgdmFsdWVBc1N0ck9ySW50ID0gdmFsdWUgYXMgdW5rbm93biBhcyBzdHJpbmcgfCBudW1iZXI7XG4gICAgICAgICAgICBlbnVtT2JqW2NvbnN0YW50XSA9IHZhbHVlQXNTdHJPckludDtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgdmFsdWVBc1N0ck9ySW50ID09PSAnbnVtYmVyJyAmJiBlbnVtT2JqW3ZhbHVlQXNTdHJPckludF0gPT0gbnVsbCkgZW51bU9ialt2YWx1ZUFzU3RyT3JJbnRdID0gY29uc3RhbnQ7XG4gICAgICAgIH0pO1xuICAgIHJldHVybiBlbnVtTW9kZWxHZW5lcmljPEVudW0+KGVudW1PYmosIGVudW1TY2hlbWEubmFtZS5yZXBsYWNlKC9cXGQrJC8sICcnKSk7XG59XG4iXX0=","export function fromSchemaFilterNonArrayProperties(propertySchemas) {\n return Object.keys(propertySchemas).filter(key => {\n const propertySchema = propertySchemas[key];\n return ['number', 'string', 'boolean', 'date', 'date-time', 'enum', 'object'].includes(propertySchema.type);\n });\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tbW9uLWZyb20tc2NoZW1hLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vdGFibGV2aWV3L3NyYy9zY2hlbWEvaW50ZXJuYWwvY29tbW9uLWZyb20tc2NoZW1hLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE1BQU0sVUFBVSxrQ0FBa0MsQ0FBUSxlQUF5QztJQUMvRixPQUFRLE1BQU0sQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFxQixDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsRUFBRTtRQUNsRSxNQUFNLGNBQWMsR0FBRyxlQUFlLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDNUMsT0FBTyxDQUFDLFFBQVEsRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxXQUFXLEVBQUUsTUFBTSxFQUFFLFFBQVEsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDaEgsQ0FBQyxDQUFDLENBQUM7QUFDUCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGZ1bmN0aW9uIGZyb21TY2hlbWFGaWx0ZXJOb25BcnJheVByb3BlcnRpZXM8TW9kZWw+KHByb3BlcnR5U2NoZW1hczogUmVjb3JkPGtleW9mIE1vZGVsLCBhbnk+KTogKGtleW9mIE1vZGVsKVtdIHtcbiAgICByZXR1cm4gKE9iamVjdC5rZXlzKHByb3BlcnR5U2NoZW1hcykgYXMgKGtleW9mIE1vZGVsKVtdKS5maWx0ZXIoa2V5ID0+IHtcbiAgICAgICAgY29uc3QgcHJvcGVydHlTY2hlbWEgPSBwcm9wZXJ0eVNjaGVtYXNba2V5XTtcbiAgICAgICAgcmV0dXJuIFsnbnVtYmVyJywgJ3N0cmluZycsICdib29sZWFuJywgJ2RhdGUnLCAnZGF0ZS10aW1lJywgJ2VudW0nLCAnb2JqZWN0J10uaW5jbHVkZXMocHJvcGVydHlTY2hlbWEudHlwZSk7XG4gICAgfSk7XG59XG4iXX0=","import { enumModelFromSchema } from './enum-from-schema';\nimport { fromSchemaFilterNonArrayProperties } from './internal/common-from-schema';\nconst defaultGetter = value => {\n if (typeof value === 'object') {\n const valueObj = value;\n return (valueObj['title'] ??\n valueObj['name'] ??\n valueObj['naziv'] ??\n valueObj['code'] ??\n valueObj['sifra'] ??\n valueObj['id'] ??\n valueObj['uuid'] ??\n valueObj[Object.keys(valueObj)[0]]);\n }\n else {\n return value;\n }\n};\n/**\n * <em>Experimental:</em> Builder for adding columns to table.\n *\n * @experimental\n */\nexport class SchemaColumnsBuilder {\n constructor(descriptor, schema, opts) {\n this.descriptor = descriptor;\n this.schema = schema;\n this.opts = opts;\n }\n mergeColumnsOpts(property, opts) {\n return {\n ...this.opts,\n columnType: this.opts?.columnTypes?.[property],\n getter: opts?.getters?.[property] ?? this.opts?.getters?.[property],\n enumModel: opts?.enumModels?.[property] ?? this.opts?.enumModels?.[property],\n enumSchema: opts?.enumSchemas?.[property] ?? this.opts?.enumSchemas?.[property],\n ...opts\n };\n }\n mergeColumnOpts(property, opts) {\n return {\n ...this.opts,\n columnType: this.opts?.columnTypes?.[property],\n getter: this.opts?.getters?.[property],\n enumModel: this.opts?.enumModels?.[property],\n enumSchema: this.opts?.enumSchemas?.[property],\n ...opts\n };\n }\n /**\n * <em>Experimental:</em> Adds a single column via {addColumnFromSchema}.\n *\n * @experimental\n *\n * @param {Property} property - The property to add the column for.\n * @param {ColumnFromSchemaOptsType<SchModel[Property], SchModel, any, Model>} opts - Additional options.\n *\n * @return {ColumnDescriptor<NonNullable<Model[Property]>, Model, Model[Property]>} The added column descriptor.\n */\n add(property, opts) {\n return addColumnFromSchema(this.descriptor, property, this.schema.properties[property], this.mergeColumnOpts(property, opts));\n }\n /**\n * <em>Experimental:</em> Adds all columns from the non-array schema properties via {addColumnFromSchema}.\n *\n * @experimental\n *\n * @param {ColumnsFromSchemaOptsType<SchModel>} opts - Additional options.\n *\n * @return {this} - The current instance of the builder.\n */\n withAddAll(opts) {\n this.addColumns(undefined, opts);\n return this;\n }\n withAdd(propOrOpts, ...properties) {\n if (typeof propOrOpts === 'object') {\n this.addColumns(properties.length === 0 ? undefined : properties, propOrOpts);\n }\n else {\n this.addColumns([propOrOpts, ...properties]);\n }\n return this;\n }\n /**\n * <em>Experimental:</em> Adds a single column via {addColumnFromSchema} where property schema is manually provided.\n *\n * @experimental\n *\n * @param {Property} property - The property to add the column for.\n * @param {SchemaProperty} schemaProperty - Manually provided schema property.\n * @param {ColumnFromSchemaOptsType} opts - Additional options.\n *\n * @return {ColumnDescriptor<NonNullable<Model[Property]>, Model, Model[Property]>} The added column descriptor.\n */\n addFromSchema(property, schemaProperty, opts) {\n return addColumnFromSchema(this.descriptor, property, schemaProperty, this.mergeColumnOpts(property, opts));\n }\n addColumns(properties, opts) {\n const addProperties = properties ?? fromSchemaFilterNonArrayProperties(this.schema.properties);\n if (addProperties) {\n addProperties.forEach(property => {\n addColumnFromSchema(this.descriptor, property, this.schema.properties[property], this.mergeColumnsOpts(property, opts));\n });\n }\n }\n}\n/**\n * <em>Experimental:</em> Creates builder for adding columns to descriptor based on provided model schema.\n *\n * @experimental\n *\n * @param {TableviewDescriptorInst<Model, any, any, any> | TableDescriptorInst<Model, any, any>} descriptor - Descriptor to add columns to.\n * @param {SchemaModel<SchModel>} schema - The schema with metadata about properties for fields.\n * @param {ColumnsFromSchemaOptsType<SchModel>} [opts] - Additional options.\n *\n * @return {SchemaColumnsBuilder<Model, SchModel>} - The column schema builder instance.\n */\nexport function columnsFromSchema(descriptor, schema, opts) {\n return new SchemaColumnsBuilder(descriptor, schema, opts);\n}\n/**\n * <em>Experimental:</em> Adds a column to table descriptor based on the given schema property and options.\n *\n * @param {TableviewDescriptorInst<Model, any, any, any> | TableDescriptorInst<Model, any, any>} descriptor - The table view descriptor or table descriptor to add the column to.\n * @param {Property} property - The property key of the model to create the column for.\n * @param {SchemaProperty} propertySchema - The schema property for the property.\n * @param {ColumnFromSchemaOptsType<Model[Property], Model, any, Model>} [opts] - The options for the column.\n *\n * @return {ColumnDescriptor<NonNullable<Model[Property]>, Model, Model[Property]>} - The added column descriptor.\n */\nexport function addColumnFromSchema(descriptor, property, propertySchema, opts) {\n const propertyType = opts?.columnType ?? propertySchema?.type;\n const column = descriptor.addColumn(property);\n // Handle different property types\n switch (propertyType) {\n case 'number':\n column.asNumber({\n minFractionDigits: opts?.numberMinFractionDigits,\n maxFractionDigits: opts?.numberMaxFractionDigits,\n minIntegerDigits: opts?.numberMinIntegerDigits\n });\n break;\n case 'boolean':\n column.asBoolean(undefined, undefined, true);\n break;\n case 'date':\n column.asDate(opts?.dateFormat ?? 'dd.MM.yyyy');\n break;\n case 'enum':\n // eslint-disable-next-line no-case-declarations\n const enumModel = opts?.enumSchema ? enumModelFromSchema(opts.enumSchema) : opts?.enumModel;\n if (enumModel) {\n column.asEnumUnsafe(enumModel);\n }\n break;\n case 'date-time':\n column.asDate(opts?.dateTimeFormat ?? 'dd.MM.yyyy HH:mm');\n break;\n case 'currency':\n column.asCurrency({\n currency: opts?.currency,\n currencyDisplay: opts?.currencyDisplay,\n currencyProperty: opts?.currencyProperty,\n minFractionDigits: opts?.numberMinFractionDigits,\n maxFractionDigits: opts?.numberMaxFractionDigits,\n minIntegerDigits: opts?.numberMinIntegerDigits\n });\n break;\n case 'object':\n column.withGetter(defaultGetter);\n break;\n }\n // Add optional filter, sort and getters\n if (opts?.getter)\n column.withGetter(opts?.getter);\n return column;\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29sdW1ucy1mcm9tLXNjaGVtYS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3RhYmxldmlldy9zcmMvc2NoZW1hL2NvbHVtbnMtZnJvbS1zY2hlbWEudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBTUEsT0FBTyxFQUFDLG1CQUFtQixFQUFDLE1BQU0sb0JBQW9CLENBQUM7QUFDdkQsT0FBTyxFQUFDLGtDQUFrQyxFQUFDLE1BQU0sK0JBQStCLENBQUM7QUE2QmpGLE1BQU0sYUFBYSxHQUFzQixLQUFLLENBQUMsRUFBRTtJQUM3QyxJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVEsRUFBRSxDQUFDO1FBQzVCLE1BQU0sUUFBUSxHQUFHLEtBQWUsQ0FBQztRQUNqQyxPQUFPLENBQ0gsUUFBUSxDQUFDLE9BQXVCLENBQUM7WUFDakMsUUFBUSxDQUFDLE1BQXNCLENBQUM7WUFDaEMsUUFBUSxDQUFDLE9BQXVCLENBQUM7WUFDakMsUUFBUSxDQUFDLE1BQXNCLENBQUM7WUFDaEMsUUFBUSxDQUFDLE9BQXVCLENBQUM7WUFDakMsUUFBUSxDQUFDLElBQW9CLENBQUM7WUFDOUIsUUFBUSxDQUFDLE1BQXNCLENBQUM7WUFDaEMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFpQixDQUFDLENBQ3JELENBQUM7SUFDTixDQUFDO1NBQU0sQ0FBQztRQUNKLE9BQU8sS0FBSyxDQUFDO0lBQ2pCLENBQUM7QUFDTCxDQUFDLENBQUM7QUFFRjs7OztHQUlHO0FBQ0gsTUFBTSxPQUFPLG9CQUFvQjtJQUM3QixZQUNxQixVQUFnRyxFQUNoRyxNQUE2QixFQUN0QyxJQUEwQztRQUZqQyxlQUFVLEdBQVYsVUFBVSxDQUFzRjtRQUNoRyxXQUFNLEdBQU4sTUFBTSxDQUF1QjtRQUN0QyxTQUFJLEdBQUosSUFBSSxDQUFzQztJQUNuRCxDQUFDO0lBRUksZ0JBQWdCLENBQUMsUUFBYSxFQUFFLElBQWdDO1FB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UHJvcGVydHl9IGZyb20gJ0BtZWRpdXNpbmMvbW5nLWNvbW1vbnMtZGF0YS1hcGknO1xuaW1wb3J0IHtHZXR0ZXJGbn0gZnJvbSAnQG1lZGl1c2luYy9tbmctY29tbW9ucy9jb3JlJztcbmltcG9ydCB7RW51bURlc2NyaXB0b3J9IGZyb20gJ0BtZWRpdXNpbmMvbW5nLWNvbW1vbnMvbW9kZWwnO1xuaW1wb3J0IHtDb2x1bW5EZXNjcmlwdG9yLCBUYWJsZURlc2NyaXB0b3JJbnN0fSBmcm9tICdAbWVkaXVzaW5jL21uZy1jb21tb25zL3RhYmxlL2FwaSc7XG5pbXBvcnQge1RhYmxldmlld0Rlc2NyaXB0b3JJbnN0fSBmcm9tICdAbWVkaXVzaW5jL21uZy1jb21tb25zL3RhYmxldmlldy9hcGknO1xuXG5pbXBvcnQge2VudW1Nb2RlbEZyb21TY2hlbWF9IGZyb20gJy4vZW51bS1mcm9tLXNjaGVtYSc7XG5pbXBvcnQge2Zyb21TY2hlbWFGaWx0ZXJOb25BcnJheVByb3BlcnRpZXN9IGZyb20gJy4vaW50ZXJuYWwvY29tbW9uLWZyb20tc2NoZW1hJztcblxudHlwZSBDb2x1bW5UeXBlID0gJ251bWJlcicgfCAnY3VycmVuY3knIHwgJ2Jvb2xlYW4nIHwgJ3N0cmluZycgfCAndGV4dCcgfCAndGV4dGFyZWEnIHwgJ2RhdGUnIHwgJ2RhdGUtdGltZScgfCAnZW51bScgfCAnb2JqZWN0JztcblxudHlwZSBDb2x1bW5Gcm9tU2NoZW1hQ29tbW9uT3B0c1R5cGU8TW9kZWw+ID0ge1xuICAgIGN1cnJlbmN5UHJvcGVydHk/OiBrZXlvZiBNb2RlbDtcbiAgICBjdXJyZW5jeT86IHN0cmluZztcbiAgICBjdXJyZW5jeURpc3BsYXk/OiAnc3ltYm9sJyB8ICdjb2RlJyB8ICduYW1lJztcbiAgICBkYXRlRm9ybWF0Pzogc3RyaW5nO1xuICAgIGRhdGVUaW1lRm9ybWF0Pzogc3RyaW5nO1xuICAgIG51bWJlck1pbkludGVnZXJEaWdpdHM/OiBudW1iZXI7XG4gICAgbnVtYmVyTWluRnJhY3Rpb25EaWdpdHM/OiBudW1iZXI7XG4gICAgbnVtYmVyTWF4RnJhY3Rpb25EaWdpdHM/OiBudW1iZXI7XG59O1xuXG50eXBlIENvbHVtbnNGcm9tU2NoZW1hT3B0c1R5cGU8TW9kZWwgPSBhbnk+ID0gQ29sdW1uRnJvbVNjaGVtYUNvbW1vbk9wdHNUeXBlPE1vZGVsPiAmIHtcbiAgICBjb2x1bW5UeXBlcz86IFBhcnRpYWw8UmVjb3JkPGtleW9mIE1vZGVsLCBDb2x1bW5UeXBlPj47XG4gICAgZW51bU1vZGVscz86IFBhcnRpYWw8UmVjb3JkPGtleW9mIE1vZGVsLCBFbnVtRGVzY3JpcHRvcjxhbnk+Pj47XG4gICAgZW51bVNjaGVtYXM/OiBQYXJ0aWFsPFJlY29yZDxrZXlvZiBNb2RlbCwgU2NoZW1hRW51bTxhbnk+Pj47XG4gICAgZ2V0dGVycz86IHtbSyBpbiBrZXlvZiBNb2RlbF0/OiBHZXR0ZXJGbjxNb2RlbFtLXSwgTW9kZWw+fTtcbn07XG5cbnR5cGUgQ29sdW1uRnJvbVNjaGVtYU9wdHNUeXBlPENvbHVtbiA9IGFueSwgTW9kZWwgPSBhbnksIEVudW0gPSBhbnk+ID0gQ29sdW1uRnJvbVNjaGVtYUNvbW1vbk9wdHNUeXBlPE1vZGVsPiAmIHtcbiAgICBjb2x1bW5UeXBlPzogQ29sdW1uVHlwZTtcbiAgICBnZXR0ZXI/OiBHZXR0ZXJGbjxDb2x1bW4sIE1vZGVsPjtcbiAgICBlbnVtTW9kZWw/OiBFbnVtRGVzY3JpcHRvcjxFbnVtPjtcbiAgICBlbnVtU2NoZW1hPzogU2NoZW1hRW51bTxFbnVtPjtcbn07XG5cbmNvbnN0IGRlZmF1bHRHZXR0ZXI6IEdldHRlckZuPHVua25vd24+ID0gdmFsdWUgPT4ge1xuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnKSB7XG4gICAgICAgIGNvbnN0IHZhbHVlT2JqID0gdmFsdWUgYXMgb2JqZWN0O1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgdmFsdWVPYmpbJ3RpdGxlJyBhcyBrZXlvZiBvYmplY3RdID8/XG4gICAgICAgICAgICB2YWx1ZU9ialsnbmFtZScgYXMga2V5b2Ygb2JqZWN0XSA/P1xuICAgICAgICAgICAgdmFsdWVPYmpbJ25heml2JyBhcyBrZXlvZiBvYmplY3RdID8/XG4gICAgICAgICAgICB2YWx1ZU9ialsnY29kZScgYXMga2V5b2Ygb2JqZWN0XSA/P1xuICAgICAgICAgICAgdmFsdWVPYmpbJ3NpZnJhJyBhcyBrZXlvZiBvYmplY3RdID8/XG4gICAgICAgICAgICB2YWx1ZU9ialsnaWQnIGFzIGtleW9mIG9iamVjdF0gPz9cbiAgICAgICAgICAgIHZhbHVlT2JqWyd1dWlkJyBhcyBrZXlvZiBvYmplY3RdID8/XG4gICAgICAgICAgICB2YWx1ZU9ialtPYmplY3Qua2V5cyh2YWx1ZU9iailbMF0gYXMga2V5b2Ygb2JqZWN0XVxuICAgICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG59O1xuXG4vKipcbiAqIDxlbT5FeHBlcmltZW50YWw6PC9lbT4gQnVpbGRlciBmb3IgYWRkaW5nIGNvbHVtbnMgdG8gdGFibGUuXG4gKlxuICogQGV4cGVyaW1lbnRhbFxuICovXG5leHBvcnQgY2xhc3MgU2NoZW1hQ29sdW1uc0J1aWxkZXI8TW9kZWwsIFNjaE1vZGVsID0gTW9kZWw+IHtcbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSBkZXNjcmlwdG9yOiBUYWJsZXZpZXdEZXNjcmlwdG9ySW5zdDxNb2RlbCwgYW55LCBhbnksIGFueT4gfCBUYWJsZURlc2NyaXB0b3JJbnN0PE1vZGVsLCBhbnksIGFueT4sXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgc2NoZW1hOiBTY2hlbWFNb2RlbDxTY2hNb2RlbD4sXG4gICAgICAgIHByaXZhdGUgb3B0cz86IENvbHVtbnNGcm9tU2NoZW1hT3B0c1R5cGU8U2NoTW9kZWw+XG4gICAgKSB7fVxuXG4gICAgcHJpdmF0ZSBtZXJnZUNvbHVtbnNPcHRzKHByb3BlcnR5OiBhbnksIG9wdHM/OiBDb2x1bW5zRnJvbVNjaGVtYU9wdHNUeXBlKSB7XG4gICAgICAgIHJldHVybiA8Q29sdW1uRnJvbVNjaGVtYU9wdHNUeXBlPntcbiAgICAgICAgICAgIC4uLnRoaXMub3B0cyxcbiAgICAgICAgICAgIGNvbHVtblR5cGU6IHRoaXMub3B0cz8uY29sdW1uVHlwZXM/Lltwcm9wZXJ0eSBhcyBrZXlvZiBvYmplY3RdLFxuICAgICAgICAgICAgZ2V0dGVyOiBvcHRzPy5nZXR0ZXJzPy5bcHJvcGVydHldID8/IHRoaXMub3B0cz8uZ2V0dGVycz8uW3Byb3BlcnR5IGFzIGtleW9mIG9iamVjdF0sXG4gICAgICAgICAgICBlbnVtTW9kZWw6IG9wdHM/LmVudW1Nb2RlbHM/Lltwcm9wZXJ0eV0gPz8gdGhpcy5vcHRzPy5lbnVtTW9kZWxzPy5bcHJvcGVydHkgYXMga2V5b2Ygb2JqZWN0XSxcbiAgICAgICAgICAgIGVudW1TY2hlbWE6IG9wdHM/LmVudW1TY2hlbWFzPy5bcHJvcGVydHldID8/IHRoaXMub3B0cz8uZW51bVNjaGVtYXM/Lltwcm9wZXJ0eSBhcyBrZXlvZiBvYmplY3RdLFxuICAgICAgICAgICAgLi4ub3B0c1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIHByaXZhdGUgbWVyZ2VDb2x1bW5PcHRzKHByb3BlcnR5OiBhbnksIG9wdHM/OiBDb2x1bW5Gcm9tU2NoZW1hT3B0c1R5cGUpIHtcbiAgICAgICAgcmV0dXJuIDxDb2x1bW5Gcm9tU2NoZW1hT3B0c1R5cGU+e1xuICAgICAgICAgICAgLi4udGhpcy5vcHRzLFxuICAgICAgICAgICAgY29sdW1uVHlwZTogdGhpcy5vcHRzPy5jb2x1bW5UeXBlcz8uW3Byb3BlcnR5IGFzIGtleW9mIG9iamVjdF0sXG4gICAgICAgICAgICBnZXR0ZXI6IHRoaXMub3B0cz8uZ2V0dGVycz8uW3Byb3BlcnR5IGFzIGtleW9mIG9iamVjdF0sXG4gICAgICAgICAgICBlbnVtTW9kZWw6IHRoaXMub3B0cz8uZW51bU1vZGVscz8uW3Byb3BlcnR5IGFzIGtleW9mIG9iamVjdF0sXG4gICAgICAgICAgICBlbnVtU2NoZW1hOiB0aGlzLm9wdHM/LmVudW1TY2hlbWFzPy5bcHJvcGVydHkgYXMga2V5b2Ygb2JqZWN0XSxcbiAgICAgICAgICAgIC4uLm9wdHNcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiA8ZW0+RXhwZXJpbWVudGFsOjwvZW0+IEFkZHMgYSBzaW5nbGUgY29sdW1uIHZpYSB7YWRkQ29sdW1uRnJvbVNjaGVtYX0uXG4gICAgICpcbiAgICAgKiBAZXhwZXJpbWVudGFsXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge1Byb3BlcnR5fSBwcm9wZXJ0eSAtIFRoZSBwcm9wZXJ0eSB0byBhZGQgdGhlIGNvbHVtbiBmb3IuXG4gICAgICogQHBhcmFtIHtDb2x1bW5Gcm9tU2NoZW1hT3B0c1R5cGU8U2NoTW9kZWxbUHJvcGVydHldLCBTY2hNb2RlbCwgYW55LCBNb2RlbD59IG9wdHMgLSBBZGRpdGlvbmFsIG9wdGlvbnMuXG4gICAgICpcbiAgICAgKiBAcmV0dXJuIHtDb2x1bW5EZXNjcmlwdG9yPE5vbk51bGxhYmxlPE1vZGVsW1Byb3BlcnR5XT4sIE1vZGVsLCBNb2RlbFtQcm9wZXJ0eV0+fSBUaGUgYWRkZWQgY29sdW1uIGRlc2NyaXB0b3IuXG4gICAgICovXG4gICAgcHVibGljIGFkZDxQcm9wZXJ0eSBleHRlbmRzIEV4dHJhY3Q8a2V5b2YgTW9kZWwsIGtleW9mIFNjaE1vZGVsPj4oXG4gICAgICAgIHByb3BlcnR5OiBQcm9wZXJ0eSxcbiAgICAgICAgb3B0cz86IENvbHVtbkZyb21TY2hlbWFPcHRzVHlwZTxTY2hNb2RlbFtQcm9wZXJ0eV0sIFNjaE1vZGVsLCBhbnk+XG4gICAgKTogQ29sdW1uRGVzY3JpcHRvcjxOb25OdWxsYWJsZTxNb2RlbFtQcm9wZXJ0eV0+LCBNb2RlbCwgTW9kZWxbUHJvcGVydHldPiB7XG4gICAgICAgIHJldHVybiBhZGRDb2x1bW5Gcm9tU2NoZW1hKFxuICAgICAgICAgICAgdGhpcy5kZXNjcmlwdG9yLFxuICAgICAgICAgICAgcHJvcGVydHksXG4gICAgICAgICAgICB0aGlzLnNjaGVtYS5wcm9wZXJ0aWVzW3Byb3BlcnR5XSxcbiAgICAgICAgICAgIHRoaXMubWVyZ2VDb2x1bW5PcHRzKHByb3BlcnR5LCBvcHRzKSBhcyBDb2x1bW5Gcm9tU2NoZW1hT3B0c1R5cGU8TW9kZWxbUHJvcGVydHldLCBNb2RlbCwgYW55PiB8IHVuZGVmaW5lZFxuICAgICAgICApIGFzIHVua25vd24gYXMgQ29sdW1uRGVzY3JpcHRvcjxOb25OdWxsYWJsZTxNb2RlbFtQcm9wZXJ0eV0+LCBNb2RlbCwgTW9kZWxbUHJvcGVydHldPjtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiA8ZW0+RXhwZXJpbWVudGFsOjwvZW0+IEFkZHMgYWxsIGNvbHVtbnMgZnJvbSB0aGUgbm9uLWFycmF5IHNjaGVtYSBwcm9wZXJ0aWVzIHZpYSB7YWRkQ29sdW1uRnJvbVNjaGVtYX0uXG4gICAgICpcbiAgICAgKiBAZXhwZXJpbWVudGFsXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge0NvbHVtbnNGcm9tU2NoZW1hT3B0c1R5cGU8U2NoTW9kZWw+fSBvcHRzIC0gQWRkaXRpb25hbCBvcHRpb25zLlxuICAgICAqXG4gICAgICogQHJldHVybiB7dGhpc30gLSBUaGUgY3VycmVudCBpbnN0YW5jZSBvZiB0aGUgYnVpbGRlci5cbiAgICAgKi9cbiAgICBwdWJsaWMgd2l0aEFkZEFsbChvcHRzPzogQ29sdW1uc0Zyb21TY2hlbWFPcHRzVHlwZTxTY2hNb2RlbD4pOiB0aGlzIHtcbiAgICAgICAgdGhpcy5hZGRDb2x1bW5zKHVuZGVmaW5lZCwgb3B0cyk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIDxlbT5FeHBlcmltZW50YWw6PC9lbT4gQWRkcyBjb2x1bW5zIGZvciBwcm9wZXJ0aWVzIHZpYSB7YWRkQ29sdW1uRnJvbVNjaGVtYX0uXG4gICAgICpcbiAgICAgKiBAZXhwZXJpbWVudGFsXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge0NvbHVtbnNGcm9tU2NoZW1hT3B0c1R5cGU8U2NoTW9kZWw+fSBvcHRzIC0gQWRkaXRpb25hbCBvcHRpb25zLlxuICAgICAqIEBwYXJhbSB7Li4uUHJvcGVydHlbXX0gcHJvcGVydGllcyAtIFByb3BlcnRpZXMgdG8gYWRkIGNvbHVtbnMgZm9yLiBJZiBub24gcHJvdmlkZWQsIGFsbCBub24tYXJyYXkgcHJvcGVydGllcyBmcm9tIHNjaGVtYSB3aWxsIGJlIGFkZGVkLlxuICAgICAqXG4gICAgICogQHJldHVybiB7dGhpc30gLSBUaGUgY3VycmVudCBpbnN0YW5jZSBvZiB0aGUgYnVpbGRlci5cbiAgICAgKi9cbiAgICBwdWJsaWMgd2l0aEFkZDxQcm9wZXJ0eSBleHRlbmRzIEV4dHJhY3Q8a2V5b2YgTW9kZWwsIGtleW9mIFNjaE1vZGVsPj4ob3B0czogQ29sdW1uc0Zyb21TY2hlbWFPcHRzVHlwZTxTY2hNb2RlbD4sIC4uLnByb3BlcnRpZXM6IFByb3BlcnR5W10pOiB0aGlzO1xuICAgIC8qKlxuICAgICAqIDxlbT5FeHBlcmltZW50YWw6PC9lbT4gQWRkcyBjb2x1bW5zIGZvciBwcm9wZXJ0aWVzIHZpYSB7YWRkQ29sdW1uRnJvbVNjaGVtYX0uXG4gICAgICpcbiAgICAgKiBAZXhwZXJpbWVudGFsXG4gICAgICpcbiAgICAgKiBAcGFyYW0gey4uLlByb3BlcnR5W119IHByb3BlcnRpZXMgLSBQcm9wZXJ0aWVzIHRvIGFkZCBjb2x1bW5zIGZvci4gSWYgbm9uIHByb3ZpZGVkLCBhbGwgbm9uLWFycmF5IHByb3BlcnRpZXMgZnJvbSBzY2hlbWEgd2lsbCBiZSBhZGRlZC5cbiAgICAgKlxuICAgICAqIEByZXR1cm4ge3RoaXN9IC0gVGhlIGN1cnJlbnQgaW5zdGFuY2Ugb2YgdGhlIGJ1aWxkZXIuXG4gICAgICovXG4gICAgcHVibGljIHdpdGhBZGQ8UHJvcGVydHkgZXh0ZW5kcyBFeHRyYWN0PGtleW9mIE1vZGVsLCBrZXlvZiBTY2hNb2RlbD4+KC4uLnByb3BlcnRpZXM6IFByb3BlcnR5W10pOiB0aGlzO1xuICAgIHB1YmxpYyB3aXRoQWRkPFByb3BlcnR5IGV4dGVuZHMgRXh0cmFjdDxrZXlvZiBNb2RlbCwga2V5b2YgU2NoTW9kZWw+Pihwcm9wT3JPcHRzOiBDb2x1bW5zRnJvbVNjaGVtYU9wdHNUeXBlPFNjaE1vZGVsPiB8IFByb3BlcnR5LCAuLi5wcm9wZXJ0aWVzOiBQcm9wZXJ0eVtdKTogdGhpcyB7XG4gICAgICAgIGlmICh0eXBlb2YgcHJvcE9yT3B0cyA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgIHRoaXMuYWRkQ29sdW1ucyhwcm9wZXJ0aWVzLmxlbmd0aCA9PT0gMCA/IHVuZGVmaW5lZCA6IHByb3BlcnRpZXMsIHByb3BPck9wdHMpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5hZGRDb2x1bW5zKFtwcm9wT3JPcHRzLCAuLi5wcm9wZXJ0aWVzXSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogPGVtPkV4cGVyaW1lbnRhbDo8L2VtPiBBZGRzIGEgc2luZ2xlIGNvbHVtbiB2aWEge2FkZENvbHVtbkZyb21TY2hlbWF9IHdoZXJlIHByb3BlcnR5IHNjaGVtYSBpcyBtYW51YWxseSBwcm92aWRlZC5cbiAgICAgKlxuICAgICAqIEBleHBlcmltZW50YWxcbiAgICAgKlxuICAgICAqIEBwYXJhbSB7UHJvcGVydHl9IHByb3BlcnR5IC0gVGhlIHByb3BlcnR5IHRvIGFkZCB0aGUgY29sdW1uIGZvci5cbiAgICAgKiBAcGFyYW0ge1NjaGVtYVByb3BlcnR5fSBzY2hlbWFQcm9wZXJ0eSAtIE1hbnVhbGx5IHByb3ZpZGVkIHNjaGVtYSBwcm9wZXJ0eS5cbiAgICAgKiBAcGFyYW0ge0NvbHVtbkZyb21TY2hlbWFPcHRzVHlwZX0gb3B0cyAtIEFkZGl0aW9uYWwgb3B0aW9ucy5cbiAgICAgKlxuICAgICAqIEByZXR1cm4ge0NvbHVtbkRlc2NyaXB0b3I8Tm9uTnVsbGFibGU8TW9kZWxbUHJvcGVydHldPiwgTW9kZWwsIE1vZGVsW1Byb3BlcnR5XT59IFRoZSBhZGRlZCBjb2x1bW4gZGVzY3JpcHRvci5cbiAgICAgKi9cbiAgICBwdWJsaWMgYWRkRnJvbVNjaGVtYTxQcm9wZXJ0eSBleHRlbmRzIGtleW9mIE1vZGVsPihcbiAgICAgICAgcHJvcGVydHk6IFByb3BlcnR5LFxuICAgICAgICBzY2hlbWFQcm9wZXJ0eTogU2NoZW1hUHJvcGVydHksXG4gICAgICAgIG9wdHM/OiBDb2x1bW5Gcm9tU2NoZW1hT3B0c1R5cGU8TW9kZWxbUHJvcGVydHldLCBNb2RlbD5cbiAgICApOiBDb2x1bW5EZXNjcmlwdG9yPE5vbk51bGxhYmxlPE1vZGVsW1Byb3BlcnR5XT4sIE1vZGVsLCBNb2RlbFtQcm9wZXJ0eV0+IHtcbiAgICAgICAgcmV0dXJuIGFkZENvbHVtbkZyb21TY2hlbWEoXG4gICAgICAgICAgICB0aGlzLmRlc2NyaXB0b3IsXG4gICAgICAgICAgICBwcm9wZXJ0eSxcbiAgICAgICAgICAgIHNjaGVtYVByb3BlcnR5LFxuICAgICAgICAgICAgdGhpcy5tZXJnZUNvbHVtbk9wdHMocHJvcGVydHksIG9wdHMpIGFzIENvbHVtbkZyb21TY2hlbWFPcHRzVHlwZTxNb2RlbFtQcm9wZXJ0eV0sIE1vZGVsLCBhbnk+IHwgdW5kZWZpbmVkXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhZGRDb2x1bW5zPFByb3BlcnR5IGV4dGVuZHMgRXh0cmFjdDxrZXlvZiBNb2RlbCwga2V5b2YgU2NoTW9kZWw+Pihwcm9wZXJ0aWVzPzogUHJvcGVydHlbXSwgb3B0cz86IENvbHVtbnNGcm9tU2NoZW1hT3B0c1R5cGU8U2NoTW9kZWw+KSB7XG4gICAgICAgIGNvbnN0IGFkZFByb3BlcnRpZXMgPSBwcm9wZXJ0aWVzID8/IGZyb21TY2hlbWFGaWx0ZXJOb25BcnJheVByb3BlcnRpZXM8U2NoTW9kZWw+KHRoaXMuc2NoZW1hLnByb3BlcnRpZXMpO1xuXG4gICAgICAgIGlmIChhZGRQcm9wZXJ0aWVzKSB7XG4gICAgICAgICAgICBhZGRQcm9wZXJ0aWVzLmZvckVhY2gocHJvcGVydHkgPT4ge1xuICAgICAgICAgICAgICAgIGFkZENvbHVtbkZyb21TY2hlbWEoXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGVzY3JpcHRvcixcbiAgICAgICAgICAgICAgICAgICAgcHJvcGVydHkgYXMgYW55LFxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNjaGVtYS5wcm9wZXJ0aWVzW3Byb3BlcnR5XSxcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5tZXJnZUNvbHVtbnNPcHRzKHByb3BlcnR5IGFzIHVua25vd24gYXMga2V5b2YgTW9kZWwsIG9wdHMpIGFzIENvbHVtbkZyb21TY2hlbWFPcHRzVHlwZTxNb2RlbFtQcm9wZXJ0eV0sIE1vZGVsLCBhbnk+IHwgdW5kZWZpbmVkXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxufVxuXG4vKipcbiAqIDxlbT5FeHBlcmltZW50YWw6PC9lbT4gQ3JlYXRlcyBidWlsZGVyIGZvciBhZGRpbmcgY29sdW1ucyB0byBkZXNjcmlwdG9yIGJhc2VkIG9uIHByb3ZpZGVkIG1vZGVsIHNjaGVtYS5cbiAqXG4gKiBAZXhwZXJpbWVudGFsXG4gKlxuICogQHBhcmFtIHtUYWJsZXZpZXdEZXNjcmlwdG9ySW5zdDxNb2RlbCwgYW55LCBhbnksIGFueT4gfCBUYWJsZURlc2NyaXB0b3JJbnN0PE1vZGVsLCBhbnksIGFueT59IGRlc2NyaXB0b3IgLSBEZXNjcmlwdG9yIHRvIGFkZCBjb2x1bW5zIHRvLlxuICogQHBhcmFtIHtTY2hlbWFNb2RlbDxTY2hNb2RlbD59IHNjaGVtYSAtIFRoZSBzY2hlbWEgd2l0aCBtZXRhZGF0YSBhYm91dCBwcm9wZXJ0aWVzIGZvciBmaWVsZHMuXG4gKiBAcGFyYW0ge0NvbHVtbnNGcm9tU2NoZW1hT3B0c1R5cGU8U2NoTW9kZWw+fSBbb3B0c10gLSBBZGRpdGlvbmFsIG9wdGlvbnMuXG4gKlxuICogQHJldHVybiB7U2NoZW1hQ29sdW1uc0J1aWxkZXI8TW9kZWwsIFNjaE1vZGVsPn0gLSBUaGUgY29sdW1uIHNjaGVtYSBidWlsZGVyIGluc3RhbmNlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY29sdW1uc0Zyb21TY2hlbWE8TW9kZWwsIFNjaE1vZGVsID0gTW9kZWw+KFxuICAgIGRlc2NyaXB0b3I6IFRhYmxldmlld0Rlc2NyaXB0b3JJbnN0PGFueSwgYW55LCBhbnksIGFueSwgTW9kZWwsIGFueSwgYW55LCBhbnk+IHwgVGFibGVEZXNjcmlwdG9ySW5zdDxNb2RlbCwgYW55LCBhbnk+LFxuICAgIHNjaGVtYTogU2NoZW1hTW9kZWw8U2NoTW9kZWw+LFxuICAgIG9wdHM/OiBDb2x1bW5zRnJvbVNjaGVtYU9wdHNUeXBlPFNjaE1vZGVsPlxuKTogU2NoZW1hQ29sdW1uc0J1aWxkZXI8TW9kZWwsIFNjaE1vZGVsPiB7XG4gICAgcmV0dXJuIG5ldyBTY2hlbWFDb2x1bW5zQnVpbGRlcjxNb2RlbCwgU2NoTW9kZWw+KGRlc2NyaXB0b3IsIHNjaGVtYSwgb3B0cyk7XG59XG5cbi8qKlxuICogPGVtPkV4cGVyaW1lbnRhbDo8L2VtPiBBZGRzIGEgY29sdW1uIHRvIHRhYmxlIGRlc2NyaXB0b3IgYmFzZWQgb24gdGhlIGdpdmVuIHNjaGVtYSBwcm9wZXJ0eSBhbmQgb3B0aW9ucy5cbiAqXG4gKiBAcGFyYW0ge1RhYmxldmlld0Rlc2NyaXB0b3JJbnN0PE1vZGVsLCBhbnksIGFueSwgYW55PiB8IFRhYmxlRGVzY3JpcHRvckluc3Q8TW9kZWwsIGFueSwgYW55Pn0gZGVzY3JpcHRvciAtIFRoZSB0YWJsZSB2aWV3IGRlc2NyaXB0b3Igb3IgdGFibGUgZGVzY3JpcHRvciB0byBhZGQgdGhlIGNvbHVtbiB0by5cbiAqIEBwYXJhbSB7UHJvcGVydHl9IHByb3BlcnR5IC0gVGhlIHByb3BlcnR5IGtleSBvZiB0aGUgbW9kZWwgdG8gY3JlYXRlIHRoZSBjb2x1bW4gZm9yLlxuICogQHBhcmFtIHtTY2hlbWFQcm9wZXJ0eX0gcHJvcGVydHlTY2hlbWEgLSBUaGUgc2NoZW1hIHByb3BlcnR5IGZvciB0aGUgcHJvcGVydHkuXG4gKiBAcGFyYW0ge0NvbHVtbkZyb21TY2hlbWFPcHRzVHlwZTxNb2RlbFtQcm9wZXJ0eV0sIE1vZGVsLCBhbnksIE1vZGVsPn0gW29wdHNdIC0gVGhlIG9wdGlvbnMgZm9yIHRoZSBjb2x1bW4uXG4gKlxuICogQHJldHVybiB7Q29sdW1uRGVzY3JpcHRvcjxOb25OdWxsYWJsZTxNb2RlbFtQcm9wZXJ0eV0+LCBNb2RlbCwgTW9kZWxbUHJvcGVydHldPn0gLSBUaGUgYWRkZWQgY29sdW1uIGRlc2NyaXB0b3IuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhZGRDb2x1bW5Gcm9tU2NoZW1hPFByb3BlcnR5IGV4dGVuZHMga2V5b2YgVGFibGVNb2RlbCwgTW9kZWwsIFRhYmxlTW9kZWwgPSBNb2RlbD4oXG4gICAgZGVzY3JpcHRvcjogVGFibGV2aWV3RGVzY3JpcHRvckluc3Q8TW9kZWwsIGFueSwgYW55LCBhbnksIFRhYmxlTW9kZWwsIGFueSwgYW55LCBhbnk+IHwgVGFibGVEZXNjcmlwdG9ySW5zdDxUYWJsZU1vZGVsLCBhbnksIGFueT4sXG4gICAgcHJvcGVydHk6IFByb3BlcnR5LFxuICAgIHByb3BlcnR5U2NoZW1hOiBTY2hlbWFQcm9wZXJ0eSxcbiAgICBvcHRzPzogQ29sdW1uRnJvbVNjaGVtYU9wdHNUeXBlPFRhYmxlTW9kZWxbUHJvcGVydHldLCBUYWJsZU1vZGVsLCBhbnk+XG4pOiBDb2x1bW5EZXNjcmlwdG9yPE5vbk51bGxhYmxlPFRhYmxlTW9kZWxbUHJvcGVydHldPiwgVGFibGVNb2RlbCwgVGFibGVNb2RlbFtQcm9wZXJ0eV0+IHtcbiAgICBjb25zdCBwcm9wZXJ0eVR5cGUgPSBvcHRzPy5jb2x1bW5UeXBlID8/IHByb3BlcnR5U2NoZW1hPy50eXBlO1xuXG4gICAgY29uc3QgY29sdW1uID0gZGVzY3JpcHRvci5hZGRDb2x1bW4ocHJvcGVydHkpO1xuXG4gICAgLy8gSGFuZGxlIGRpZmZlcmVudCBwcm9wZXJ0eSB0eXBlc1xuICAgIHN3aXRjaCAocHJvcGVydHlUeXBlKSB7XG4gICAgICAgIGNhc2UgJ251bWJlcic6XG4gICAgICAgICAgICBjb2x1bW4uYXNOdW1iZXIoe1xuICAgICAgICAgICAgICAgIG1pbkZyYWN0aW9uRGlnaXRzOiBvcHRzPy5udW1iZXJNaW5GcmFjdGlvbkRpZ2l0cyxcbiAgICAgICAgICAgICAgICBtYXhGcmFjdGlvbkRpZ2l0czogb3B0cz8ubnVtYmVyTWF4RnJhY3Rpb25EaWdpdHMsXG4gICAgICAgICAgICAgICAgbWluSW50ZWdlckRpZ2l0czogb3B0cz8ubnVtYmVyTWluSW50ZWdlckRpZ2l0c1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnYm9vbGVhbic6XG4gICAgICAgICAgICBjb2x1bW4uYXNCb29sZWFuKHVuZGVmaW5lZCwgdW5kZWZpbmVkLCB0cnVlKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdkYXRlJzpcbiAgICAgICAgICAgIGNvbHVtbi5hc0RhdGUob3B0cz8uZGF0ZUZvcm1hdCA/PyAnZGQuTU0ueXl5eScpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ2VudW0nOlxuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNhc2UtZGVjbGFyYXRpb25zXG4gICAgICAgICAgICBjb25zdCBlbnVtTW9kZWwgPSBvcHRzPy5lbnVtU2NoZW1hID8gZW51bU1vZGVsRnJvbVNjaGVtYShvcHRzLmVudW1TY2hlbWEpIDogb3B0cz8uZW51bU1vZGVsO1xuICAgICAgICAgICAgaWYgKGVudW1Nb2RlbCkge1xuICAgICAgICAgICAgICAgIGNvbHVtbi5hc0VudW1VbnNhZmUoZW51bU1vZGVsKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdkYXRlLXRpbWUnOlxuICAgICAgICAgICAgY29sdW1uLmFzRGF0ZShvcHRzPy5kYXRlVGltZUZvcm1hdCA/PyAnZGQuTU0ueXl5eSBISDptbScpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ2N1cnJlbmN5JzpcbiAgICAgICAgICAgIGNvbHVtbi5hc0N1cnJlbmN5KHtcbiAgICAgICAgICAgICAgICBjdXJyZW5jeTogb3B0cz8uY3VycmVuY3ksXG4gICAgICAgICAgICAgICAgY3VycmVuY3lEaXNwbGF5OiBvcHRzPy5jdXJyZW5jeURpc3BsYXksXG4gICAgICAgICAgICAgICAgY3VycmVuY3lQcm9wZXJ0eTogb3B0cz8uY3VycmVuY3lQcm9wZXJ0eSxcbiAgICAgICAgICAgICAgICBtaW5GcmFjdGlvbkRpZ2l0czogb3B0cz8ubnVtYmVyTWluRnJhY3Rpb25EaWdpdHMsXG4gICAgICAgICAgICAgICAgbWF4RnJhY3Rpb25EaWdpdHM6IG9wdHM/Lm51bWJlck1heEZyYWN0aW9uRGlnaXRzLFxuICAgICAgICAgICAgICAgIG1pbkludGVnZXJEaWdpdHM6IG9wdHM/Lm51bWJlck1pbkludGVnZXJEaWdpdHNcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ29iamVjdCc6XG4gICAgICAgICAgICBjb2x1bW4ud2l0aEdldHRlcihkZWZhdWx0R2V0dGVyKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIC8vIEFkZCBvcHRpb25hbCBmaWx0ZXIsIHNvcnQgYW5kIGdldHRlcnNcbiAgICBpZiAob3B0cz8uZ2V0dGVyKSBjb2x1bW4ud2l0aEdldHRlcihvcHRzPy5nZXR0ZXIpO1xuXG4gICAgcmV0dXJuIGNvbHVtbjtcbn1cbiJdfQ==","import { CommonsInternalError, fromAngularDateFormatToPrime } from '@mediusinc/mng-commons/core';\nimport { EnumDescriptor } from '@mediusinc/mng-commons/model';\nimport { FieldInputDescriptor, TableviewDescriptorInst } from '@mediusinc/mng-commons/tableview/api';\nimport { enumModelFromSchema } from './enum-from-schema';\nimport { fromSchemaFilterNonArrayProperties } from './internal/common-from-schema';\n/**\n * <em>Experimental:</em> Builder for adding fields to editor.\n *\n * @experimental\n */\nexport class SchemaFieldsBuilder {\n constructor(descriptor, schema, opts) {\n this.descriptor = descriptor;\n this.schema = schema;\n this.opts = opts;\n }\n mergeFieldsInputOpts(property, opts) {\n return {\n ...this.opts,\n fieldType: opts?.fieldTypes?.[property] ?? this.opts?.fieldTypes?.[property],\n enumModel: opts?.enumModels?.[property] ?? this.opts?.enumModels?.[property],\n enumSchema: opts?.enumSchemas?.[property] ?? this.opts?.enumSchemas?.[property],\n ...opts\n };\n }\n mergeFieldInputOpts(property, opts) {\n return {\n ...this.opts,\n fieldType: this.opts?.fieldTypes?.[property],\n enumModel: this.opts?.enumModels?.[property],\n enumSchema: this.opts?.enumSchemas?.[property],\n ...opts\n };\n }\n /**\n * <em>Experimental:</em> Adds a single input field via {addFieldInputFromSchema}.\n *\n * @experimental\n *\n * @param {Property} property - The property to add the field for.\n * @param {FieldInputFromSchemaOptsType<SchModel>} opts - Additional options.\n *\n * @return {FieldInputDescriptor<Model, NonNullable<Model[Property]>, Model[Property], Parent>} The added field descriptor.\n */\n add(property, opts) {\n return addFieldInputFromSchema(this.descriptor, property, this.schema.properties[property], this.mergeFieldInputOpts(property, opts));\n }\n /**\n * <em>Experimental:</em> Adds all input fields for the non-array properties via {addFieldInputFromSchema}.\n *\n * @experimental\n *\n * @param {FieldsFromSchemaOptsType<SchModel>} opts - Additional options.\n *\n * @return {this} - The current instance of the builder.\n */\n withAddAll(opts) {\n this.addFields(undefined, opts);\n return this;\n }\n withAdd(propOrOpts, ...properties) {\n if (typeof propOrOpts === 'object') {\n this.addFields(properties.length === 0 ? undefined : properties, propOrOpts);\n }\n else {\n this.addFields(propOrOpts === undefined ? properties : [propOrOpts, ...properties]);\n }\n return this;\n }\n addFields(properties, opts) {\n const addProperties = properties ?? fromSchemaFilterNonArrayProperties(this.schema.properties);\n addProperties.forEach(property => {\n addFieldInputFromSchema(this.descriptor, property, this.schema.properties[property], this.mergeFieldsInputOpts(property, opts));\n });\n }\n /**\n * <em>Experimental:</em> Adds a single input field via {addFieldInputFromSchema} where property schema is manually provided.\n *\n * @experimental\n *\n * @param {Property} property - The property to add the field for.\n * @param {SchemaProperty} schemaProperty - Manually provided schema property.\n * @param {FieldInputFromSchemaOptsType<Model>} opts - Additional options.\n *\n * @return {FieldInputDescriptor<Model, NonNullable<Model[Property]>, Model[Property], Parent>} The added field descriptor.\n */\n addFromSchema(property, schemaProperty, opts) {\n return addFieldInputFromSchema(this.descriptor, property, schemaProperty, this.mergeFieldInputOpts(property, opts));\n }\n /**\n * <em>Experimental:</em> Adds an enum lookup field via {addFieldEnumLookupFromSchema}.\n *\n * @experimental\n *\n * @param {Property} property - The property to add the enum lookup field for.\n * @param {SchemaEnum<Enum> | EnumDescriptor<Enum>} [enumOpt] - The enum schema or the enum model descriptor. If non provided, builder opts will be checked.\n *\n * @returns {FieldLookupEnumDescriptor<Enum, Model, Parent>} - The added field descriptor.\n *\n * @throws {CommonsInternalError} - If no enum metadata is found for the property either from parameter or from builder's opts.\n */\n addEnum(property, enumOpt) {\n if (!enumOpt) {\n enumOpt = this.opts?.enumModels?.[property] ?? this.opts?.enumSchemas?.[property];\n }\n if (!enumOpt) {\n throw new CommonsInternalError(`Enum lookup field for property ${property} cannot be added because enum metadata was not provided.`);\n }\n return addFieldEnumLookupFromSchema(this.descriptor, property, enumOpt, this.schema.properties[property]);\n }\n /**\n * <em>Experimental:</em> Adds an enum lookup field via {addFieldEnumLookupFromSchema} where property schema is manually provided.\n *\n * @experimental\n *\n * @param {Property} property - The property to add the enum lookup field for.\n * @param {SchemaEnum<Enum> | EnumDescriptor<Enum>} [enumOpt] - The enum schema or the enum model descriptor. If non provided, builder opts will be checked.\n * @param {SchemaProperty} schemaProperty - Manually provided schema property.\n *\n * @returns {FieldLookupEnumDescriptor<Enum, Model, Parent>} - The added field descriptor.\n *\n * @throws {CommonsInternalError} - If no enum metadata is found for the property either from parameter or from builder's opts.\n */\n addEnumFromSchema(property, enumOpt, schemaProperty) {\n if (!enumOpt) {\n enumOpt = this.opts?.enumModels?.[property] ?? this.opts?.enumSchemas?.[property];\n }\n if (!enumOpt) {\n throw new CommonsInternalError(`Enum lookup field for property ${property} cannot be added because enum metadata was not provided.`);\n }\n return addFieldEnumLookupFromSchema(this.descriptor, property, enumOpt, schemaProperty);\n }\n /**\n * <em>Experimental:</em> Adds a lookup field.\n * {EditorDescriptorInt.addFieldLookup} is used to create field and ${setFieldBasicOptionsFromSchema} to add basic field's options from schema.\n *\n * @experimental\n *\n * @param {Property} property - The property to create the lookup field for.\n * @param {FieldLookupProviderType<LookupModel, Service>} provider - Data provider for the lookup field.\n *\n * @return The created lookup field.\n */\n addLookup(property, provider) {\n const field = this.descriptor.addFieldLookup(property, { serviceProvider: provider });\n setFieldBasicOptionsFromSchema(field, this.schema.properties[property]);\n return field;\n }\n /**\n * <em>Experimental:</em> Adds a lookup field where property schema is manually provided.\n * {EditorDescriptorInt.addFieldLookup} is used to create field and ${setFieldBasicOptionsFromSchema} to add basic field's options from schema.\n *\n * @experimental\n *\n * @param {Property} property - The property to create the lookup field for.\n * @param {FieldLookupProviderType<LookupModel, Service> | undefined} provider - Data provider for the lookup field.\n * @param {SchemaProperty} schemaProperty - Manually provided schema property.\n *\n * @return The created lookup field.\n */\n addLookupFromSchema(property, provider, schemaProperty) {\n const field = this.descriptor.addFieldLookup(property, { serviceProvider: provider });\n setFieldBasicOptionsFromSchema(field, schemaProperty);\n return field;\n }\n /**\n * <em>Experimental:</em> Adds a one-to-many editor field.\n * {EditorDescriptorInt.addFieldManyEditor} is used to create field and ${setFieldBasicOptionsFromSchema} to add basic field's options from schema.\n *\n * @experimental\n *\n * @param {Property} property - The property to create the many editor field for.\n * @param {TableviewDescriptorInst<FieldModel, any, any, FieldsModel>} tableviewDescriptor - Tableview descriptor.\n *\n * @return The created one-to-many editor field.\n */\n addManyEditor(property, tableviewDescriptor) {\n const field = this.descriptor.addFieldManyEditor(property, tableviewDescriptor);\n setFieldBasicOptionsFromSchema(field, this.schema.properties[property]);\n return field;\n }\n /**\n * <em>Experimental:</em> Adds an one-to-many editor field where property schema is manually provided.\n * {EditorDescriptorInt.addFieldManyEditor} is used to create field and ${setFieldBasicOptionsFromSchema} to add basic field's options from schema.\n *\n * @experimental\n *\n * @param {Property} property - The property to create the many editor field for.\n * @param {TableviewDescriptorType<FieldModel, any, any, FieldsModel>} tableviewDescriptor - Tableview descriptor.\n * @param {SchemaProperty} schemaProperty - Manually provided schema property.\n *\n * @return The created one-to-many editor field.\n */\n addManyEditorFromSchema(property, tableviewDescriptor, schemaProperty) {\n const field = this.descriptor.addFieldManyEditor(property, tableviewDescriptor);\n setFieldBasicOptionsFromSchema(field, schemaProperty);\n return field;\n }\n /**\n * <em>Experimental:</em> Adds a many-to-many editor field.\n * {EditorDescriptorInt.addFieldManyToManyEditor} is used to create field and ${setFieldBasicOptionsFromSchema} to add basic field's options from schema.\n *\n * @experimental\n *\n * @param {Property} property - The property to create the many editor field for.\n * @param {TableDescriptorInst<FieldModel>} mainTableDescriptor - Main table descriptor.\n * @param {TableDescriptorInst<FieldModel>} lookupTableDescriptor - Lookup table descriptor.\n * @param {ITableDataProvider<FieldModel, ServiceType>} lookupDataProvider - Lookup data provider.\n *\n * @return The created many-to-many editor field.\n */\n addManyToManyEditor(property, mainTableDescriptor, lookupTableDescriptor, lookupDataProvider) {\n const field = this.descriptor.addFieldManyToManyEditor(property, mainTableDescriptor, lookupTableDescriptor, lookupDataProvider);\n setFieldBasicOptionsFromSchema(field, this.schema.properties[property]);\n return field;\n }\n /**\n * <em>Experimental:</em> Adds a many-to-many editor field where property schema is manually provided.\n * {EditorDescriptorInt.addFieldManyToManyEditor} is used to create field and ${setFieldBasicOptionsFromSchema} to add basic field's options from schema.\n *\n * @experimental\n *\n * @param {Property} property - The property to create the many editor field for.\n * @param {TableDescriptorInst<FieldModel>} mainTableDescriptor - Main table descriptor.\n * @param {TableDescriptorInst<FieldModel>} lookupTableDescriptor - Lookup table descriptor.\n * @param {ITableDataProvider<FieldModel, ServiceType>} lookupDataProvider - Lookup data provider.\n * @param {SchemaProperty} schemaProperty - Manually provided schema property.\n *\n * @return The created many-to-many editor field.\n */\n addManyToManyEditorFromSchema(property, mainTableDescriptor, lookupTableDescriptor, lookupDataProvider, schemaProperty) {\n const field = this.descriptor.addFieldManyToManyEditor(property, mainTableDescriptor, lookupTableDescriptor, lookupDataProvider);\n setFieldBasicOptionsFromSchema(field, schemaProperty);\n return field;\n }\n}\n/**\n * <em>Experimental:</em> Creates builder for adding fields to descriptor based on provided model schema.\n *\n * @experimental\n *\n * @param {TableviewDescriptorInst<Model, any, any, Parent, any, AddModel, EditModel, FieldsModel> | EditorDescriptorInst<Model, Parent>} descriptor - Descriptor to add fields to.\n * @param {SchemaModel<SchModel>} schema - The schema with metadata about properties for fields.\n * @param {FieldsFromSchemaOptsType<SchModel>} [opts] - Additional options.\n *\n * @return {SchemaFieldsBuilder<Model, Parent, AddModel, EditModel , FieldsModel, SchModel>} - The SchemaFieldsBuilder object containing the extracted fields.\n */\nexport function fieldsFromSchema(descriptor, schema, opts) {\n return new SchemaFieldsBuilder(descriptor, schema, opts);\n}\n/**\n * <em>Experimental:</em> Adds a field input to editor descriptor based on the given schema property and options.\n *\n * @experimental\n *\n * @param {TableviewDescriptorInst | EditorDescriptorInst} descriptor - Descriptor to add field to.\n * @param {keyof Model} property - The property of the model.\n * @param {SchemaProperty} propertySchema - The property's schema for the field.\n * @param {FieldInputFromSchemaOptsType<Model>} [opts] - Additional options.\n *\n * @return {FieldInputDescriptor<Model, NonNullable<Model[Property]>, Model[Property], Parent>} - The generated field input descriptor.\n */\nexport function addFieldInputFromSchema(descriptor, property, propertySchema, opts) {\n const propertyType = opts?.fieldType ?? propertySchema.type;\n const field = new FieldInputDescriptor(property);\n if (descriptor instanceof TableviewDescriptorInst) {\n descriptor.addFieldDescriptor(field);\n }\n else {\n descriptor.addFieldDescriptor(field);\n }\n // Handle different property types\n switch (propertyType) {\n case 'number':\n field.asNumber();\n break;\n case 'currency':\n field.asCurrency({\n currency: opts?.currency,\n currencyDisplay: opts?.currencyDisplay,\n currencyProperty: opts?.currencyProperty\n });\n break;\n case 'boolean':\n field.asSwitch();\n break;\n case 'text':\n case 'string':\n field.asText();\n break;\n case 'textarea':\n field.asTextarea();\n break;\n case 'date':\n field.asDatePicker({ format: opts?.dateFormat ? fromAngularDateFormatToPrime(opts.dateFormat) : undefined });\n break;\n case 'date-time':\n field.asDatePicker({ showTime: true, format: opts?.dateTimeFormat ? fromAngularDateFormatToPrime(opts.dateTimeFormat) : undefined });\n break;\n case 'enum':\n // eslint-disable-next-line no-case-declarations\n const enumModel = opts?.enumSchema ? enumModelFromSchema(opts.enumSchema) : opts?.enumModel;\n if (enumModel) {\n field.asRadioFromEnum(enumModel);\n }\n else {\n field.asText();\n }\n break;\n case 'hidden':\n field.asHidden();\n break;\n }\n // Handle different property validations\n if (propertyType === 'number' || propertyType === 'currency') {\n field.withNumberValidation({\n min: propertySchema.exclusiveMinimum && propertySchema.minimum != undefined ? propertySchema.minimum + (propertySchema.isInteger ? 1 : 0.0001) : propertySchema.minimum,\n max: propertySchema.exclusiveMaximum && propertySchema.maximum != undefined ? propertySchema.maximum - (propertySchema.isInteger ? 1 : 0.0001) : propertySchema.maximum,\n step: opts?.numberStep\n });\n if (opts?.numberUseGrouping) {\n field.withNumberGrouping();\n }\n if (opts?.numberMinFractionDigits != null || opts?.numberMaxFractionDigits != null) {\n field.withNumberFractions({\n minFractionDigits: opts?.numberMinFractionDigits,\n maxFractionDigits: opts?.numberMaxFractionDigits\n });\n }\n }\n if (propertyType === 'string' || propertyType === 'textarea' || propertyType === 'text') {\n field.withTextValidation({\n minLength: propertySchema.minLength,\n maxLength: propertySchema.maxLength,\n pattern: propertySchema.pattern ? new RegExp(propertySchema.pattern.slice(1, -1)) : undefined\n });\n if (propertyType === 'textarea' && opts?.textareaRows != null) {\n field.withTextareaRows(opts.textareaRows);\n }\n if (propertyType !== 'textarea' && propertySchema.isEmail) {\n field.withTextValidationEmail();\n }\n }\n setFieldBasicOptionsFromSchema(field, propertySchema);\n return field;\n}\n/**\n * <em>Experimental:</em> Adds a field enum lookup to editor descriptor based on the given schema property and options.\n *\n * @experimental\n *\n * @param {TableviewDescriptorInst<Model, any, any, Parent> | EditorDescriptorInst<Model, Parent>} descriptor - Descriptor to add field to.\n * @param {keyof Model} property - The property of the model.\n * @param {SchemaEnum<Enum> | EnumDescriptor<Enum>} enumOpt - The enum schema or enum model descriptor.\n * @param {SchemaProperty} propertySchema - The property's schema for the field.\n *\n * @returns {FieldLookupEnum<Enum>} - The field with enumeration values.\n */\nexport function addFieldEnumLookupFromSchema(descriptor, property, enumOpt, propertySchema) {\n const enumDescriptor = enumOpt instanceof EnumDescriptor ? enumOpt : enumModelFromSchema(enumOpt);\n const field = descriptor.addFieldLookupEnumUnsafe(property, enumDescriptor);\n setFieldBasicOptionsFromSchema(field, propertySchema);\n return field;\n}\n/**\n * <em>Experimental:</em> Sets basic options for a field based on a given property schema.\n *\n * @param {AFieldDescriptor<FieldModel, EditorModel, FieldValue, ParentEditorModel>} field - The field to set options for.\n * @param {SchemaProperty} propertySchema - The property schema to base the options on.\n */\nexport function setFieldBasicOptionsFromSchema(field, propertySchema) {\n if (propertySchema.required)\n field.withRequired();\n if (propertySchema.isReadOnly)\n field.withDisabled();\n}\n//# 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","import { map } from 'rxjs';\nimport { toGetAllParamsAsUrlQuery } from '@mediusinc/mng-commons-data-api';\nimport { LookupDataProviderInst } from '@mediusinc/mng-commons/form/api';\n/**\n * Creates lookup data provider with predefined lookup function based on API service GetAll function.\n *\n * @param {ServiceClassType<Service>} service - The API service instance used to perform the `getAll` call.\n * @param {GetAllFn} getAllFn - The function key of the `getAll` method in the service to be invoked.\n * @param [opts] - Optional configuration for the lookup.\n * @param [opts.search] - Search parameter definition for mapping to filter property or global search property - both cannot be used at the same time.\n * @param {ExtractGetAllParamsFilterType<ApiServiceGetAllFilterType<Service, any, GetAllFn>>} [opts.search.filter.property] - The filter field used for search criteria.\n * @param {FilterMatchModeType} [opts.search.filter.matchMode] - The match mode used for the filter (e.g., contains, startsWith, etc.).\n * @param {FilterMatchModeType} [opts.search.globalSearch] - If search term is to be applied to global filter.\n * @param {Array<DataListSort<ExtractGetAllParamsSortType<ApiServiceGetAllFilterType<Service, any, GetAllFn>>>>} [opts.sorts] - The sorting options to order the fetched data.\n * @param {number} [opts.limit] - The number of records to fetch.\n * @return {LookupDataProviderInst<ExtractServiceGetAllDataType<Service, GetAllFn>, Service, ExtractGetAllParamsSortType<ApiServiceGetAllFilterType<Service, any, GetAllFn>>, ExtractGetAllParamsFilterType<ApiServiceGetAllFilterType<Service, any, GetAllFn>>>} The lookup data provider instance configured with the lookup function.\n */\nexport function lookupWithApiServiceGetAll(service, getAllFn, opts) {\n return new LookupDataProviderInst(service).withLookup((params, service, search) => {\n if (search != null && search.length > 0) {\n if (opts?.search?.filter) {\n params = {\n offset: params?.offset,\n limit: params?.limit,\n sort: params?.sort,\n filters: {\n ...{\n [opts.search.filter.property]: {\n value: search,\n matchMode: opts.search.filter.matchMode ?? 'equals'\n }\n }\n }\n };\n }\n else if (opts?.search?.globalFilter) {\n params = {\n offset: params?.offset,\n limit: params?.limit,\n sort: params?.sort,\n search: search\n };\n }\n }\n if (opts?.sort && opts.sort.length > 0) {\n params = {\n ...params,\n sort: opts?.sort\n };\n }\n if (opts?.limit != null) {\n params = {\n ...params,\n limit: opts?.limit\n };\n }\n return service[getAllFn](toGetAllParamsAsUrlQuery(params ?? {})).pipe(map(res => res.data ?? []));\n });\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9va3VwLWdldC1hbGwtY3JlYXRlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vdGFibGV2aWV3L3NyYy9oZWxwZXJzL2xvb2t1cC1nZXQtYWxsLWNyZWF0ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQWEsR0FBRyxFQUFDLE1BQU0sTUFBTSxDQUFDO0FBRXJDLE9BQU8sRUFNSCx3QkFBd0IsRUFDM0IsTUFBTSxpQ0FBaUMsQ0FBQztBQUV6QyxPQUFPLEVBQUMsc0JBQXNCLEVBQUMsTUFBTSxpQ0FBaUMsQ0FBQztBQUV2RTs7Ozs7Ozs7Ozs7OztHQWFHO0FBQ0gsTUFBTSxVQUFVLDBCQUEwQixDQUN0QyxPQUFrQyxFQUNsQyxRQUFrQixFQUNsQixJQVVDO0lBT0QsT0FBTyxJQUFJLHNCQUFzQixDQUsvQixPQUFvQyxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsTUFBTSxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsRUFBRTtRQUMzRSxJQUFJLE1BQU0sSUFBSSxJQUFJLElBQUksTUFBTSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUN0QyxJQUFJLElBQUksRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLENBQUM7Z0JBQ3ZCLE1BQU0sR0FBRztvQkFDTCxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU07b0JBQ3RCLEtBQUssRUFBRSxNQUFNLEVBQUUsS0FBSztvQkFDcEIsSUFBSSxFQUFFLE1BQU0sRUFBRSxJQUFJO29CQUNsQixPQUFPLEVBQTBHO3dCQUM3RyxHQUFHOzRCQUNDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLEVBQUU7Z0NBQzNCLEtBQUssRUFBRSxNQUFNO2dDQUNiLFNBQVMsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxTQUFTLElBQUksUUFBUTs2QkFDdEQ7eUJBQ0o7cUJBQ0o7aUJBQ0osQ0FBQztZQUNOLENBQUM7aUJBQU0sSUFBSSxJQUFJLEVBQUUsTUFBTSxFQUFFLFlBQVksRUFBRSxDQUFDO2dCQUNwQyxNQUFNLEdBQUc7b0JBQ0wsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNO29CQUN0QixLQUFLLEVBQUUsTUFBTSxFQUFFLEtBQUs7b0JBQ3BCLElBQUksRUFBRSxNQUFNLEVBQUUsSUFBSTtvQkFDbEIsTUFBTSxFQUFFLE1BQU07aUJBQ2pCLENBQUM7WUFDTixDQUFDO1FBQ0wsQ0FBQztRQUNELElBQUksSUFBSSxFQUFFLElBQUksSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUNyQyxNQUFNLEdBQUc7Z0JBQ0wsR0FBRyxNQUFNO2dCQUNULElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSTthQUNuQixDQUFDO1FBQ04sQ0FBQztRQUNELElBQUksSUFBSSxFQUFFLEtBQUssSUFBSSxJQUFJLEVBQUUsQ0FBQztZQUN0QixNQUFNLEdBQUc7Z0JBQ0wsR0FBRyxNQUFNO2dCQUNULEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSzthQUNyQixDQUFDO1FBQ04sQ0FBQztRQUNELE9BQ0ssT0FBZSxDQUFDLFFBQXdCLENBQUMsQ0FBQyx3QkFBd0IsQ0FBQyxNQUFNLElBQUksRUFBRSxDQUFDLENBSXBGLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxJQUFJLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQztJQUN2QyxDQUFDLENBQUMsQ0FBQztBQUNQLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge09ic2VydmFibGUsIG1hcH0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7XG4gICAgQXBpU2VydmljZUdldEFsbEZpbHRlclR5cGUsXG4gICAgRXh0cmFjdEdldEFsbFBhcmFtc0ZpbHRlclR5cGUsXG4gICAgRXh0cmFjdEdldEFsbFBhcmFtc1NvcnRUeXBlLFxuICAgIEV4dHJhY3RTZXJ2aWNlR2V0QWxsRGF0YVR5cGUsXG4gICAgR2V0QWxsSHR0cFJlc3BvbnNlVHlwZSxcbiAgICB0b0dldEFsbFBhcmFtc0FzVXJsUXVlcnlcbn0gZnJvbSAnQG1lZGl1c2luYy9tbmctY29tbW9ucy1kYXRhLWFwaSc7XG5pbXBvcnQge0NsYXNzRnVuY3Rpb25LZXlzV2l0aEFueUFyZ3NBbmRSZXR1cm5UeXBlLCBEYXRhTGlzdEZpbHRlcnNUeXBlLCBEYXRhTGlzdFNvcnQsIEZpbHRlck1hdGNoTW9kZUV4dGVuZGVkVHlwZSwgU2VydmljZUNsYXNzVHlwZX0gZnJvbSAnQG1lZGl1c2luYy9tbmctY29tbW9ucy9jb3JlJztcbmltcG9ydCB7TG9va3VwRGF0YVByb3ZpZGVySW5zdH0gZnJvbSAnQG1lZGl1c2luYy9tbmctY29tbW9ucy9mb3JtL2FwaSc7XG5cbi8qKlxuICogQ3JlYXRlcyBsb29rdXAgZGF0YSBwcm92aWRlciB3aXRoIHByZWRlZmluZWQgbG9va3VwIGZ1bmN0aW9uIGJhc2VkIG9uIEFQSSBzZXJ2aWNlIEdldEFsbCBmdW5jdGlvbi5cbiAqXG4gKiBAcGFyYW0ge1NlcnZpY2VDbGFzc1R5cGU8U2VydmljZT59IHNlcnZpY2UgLSBUaGUgQVBJIHNlcnZpY2UgaW5zdGFuY2UgdXNlZCB0byBwZXJmb3JtIHRoZSBgZ2V0QWxsYCBjYWxsLlxuICogQHBhcmFtIHtHZXRBbGxGbn0gZ2V0QWxsRm4gLSBUaGUgZnVuY3Rpb24ga2V5IG9mIHRoZSBgZ2V0QWxsYCBtZXRob2QgaW4gdGhlIHNlcnZpY2UgdG8gYmUgaW52b2tlZC5cbiAqIEBwYXJhbSBbb3B0c10gLSBPcHRpb25hbCBjb25maWd1cmF0aW9uIGZvciB0aGUgbG9va3VwLlxuICogQHBhcmFtIFtvcHRzLnNlYXJjaF0gLSBTZWFyY2ggcGFyYW1ldGVyIGRlZmluaXRpb24gZm9yIG1hcHBpbmcgdG8gZmlsdGVyIHByb3BlcnR5IG9yIGdsb2JhbCBzZWFyY2ggcHJvcGVydHkgLSBib3RoIGNhbm5vdCBiZSB1c2VkIGF0IHRoZSBzYW1lIHRpbWUuXG4gKiBAcGFyYW0ge0V4dHJhY3RHZXRBbGxQYXJhbXNGaWx0ZXJUeXBlPEFwaVNlcnZpY2VHZXRBbGxGaWx0ZXJUeXBlPFNlcnZpY2UsIGFueSwgR2V0QWxsRm4+Pn0gW29wdHMuc2VhcmNoLmZpbHRlci5wcm9wZXJ0eV0gLSBUaGUgZmlsdGVyIGZpZWxkIHVzZWQgZm9yIHNlYXJjaCBjcml0ZXJpYS5cbiAqIEBwYXJhbSB7RmlsdGVyTWF0Y2hNb2RlVHlwZX0gW29wdHMuc2VhcmNoLmZpbHRlci5tYXRjaE1vZGVdIC0gVGhlIG1hdGNoIG1vZGUgdXNlZCBmb3IgdGhlIGZpbHRlciAoZS5nLiwgY29udGFpbnMsIHN0YXJ0c1dpdGgsIGV0Yy4pLlxuICogQHBhcmFtIHtGaWx0ZXJNYXRjaE1vZGVUeXBlfSBbb3B0cy5zZWFyY2guZ2xvYmFsU2VhcmNoXSAtIElmIHNlYXJjaCB0ZXJtIGlzIHRvIGJlIGFwcGxpZWQgdG8gZ2xvYmFsIGZpbHRlci5cbiAqIEBwYXJhbSB7QXJyYXk8RGF0YUxpc3RTb3J0PEV4dHJhY3RHZXRBbGxQYXJhbXNTb3J0VHlwZTxBcGlTZXJ2aWNlR2V0QWxsRmlsdGVyVHlwZTxTZXJ2aWNlLCBhbnksIEdldEFsbEZuPj4+Pn0gW29wdHMuc29ydHNdIC0gVGhlIHNvcnRpbmcgb3B0aW9ucyB0byBvcmRlciB0aGUgZmV0Y2hlZCBkYXRhLlxuICogQHBhcmFtIHtudW1iZXJ9IFtvcHRzLmxpbWl0XSAtIFRoZSBudW1iZXIgb2YgcmVjb3JkcyB0byBmZXRjaC5cbiAqIEByZXR1cm4ge0xvb2t1cERhdGFQcm92aWRlckluc3Q8RXh0cmFjdFNlcnZpY2VHZXRBbGxEYXRhVHlwZTxTZXJ2aWNlLCBHZXRBbGxGbj4sIFNlcnZpY2UsIEV4dHJhY3RHZXRBbGxQYXJhbXNTb3J0VHlwZTxBcGlTZXJ2aWNlR2V0QWxsRmlsdGVyVHlwZTxTZXJ2aWNlLCBhbnksIEdldEFsbEZuPj4sIEV4dHJhY3RHZXRBbGxQYXJhbXNGaWx0ZXJUeXBlPEFwaVNlcnZpY2VHZXRBbGxGaWx0ZXJUeXBlPFNlcnZpY2UsIGFueSwgR2V0QWxsRm4+Pj59IFRoZSBsb29rdXAgZGF0YSBwcm92aWRlciBpbnN0YW5jZSBjb25maWd1cmVkIHdpdGggdGhlIGxvb2t1cCBmdW5jdGlvbi5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGxvb2t1cFdpdGhBcGlTZXJ2aWNlR2V0QWxsPFNlcnZpY2UsIEdldEFsbEZuIGV4dGVuZHMgQ2xhc3NGdW5jdGlvbktleXNXaXRoQW55QXJnc0FuZFJldHVyblR5cGU8U2VydmljZSwgT2JzZXJ2YWJsZTxHZXRBbGxIdHRwUmVzcG9uc2VUeXBlPGFueT4+Pj4oXG4gICAgc2VydmljZTogU2VydmljZUNsYXNzVHlwZTxTZXJ2aWNlPixcbiAgICBnZXRBbGxGbjogR2V0QWxsRm4sXG4gICAgb3B0cz86IHtcbiAgICAgICAgc2VhcmNoPzoge1xuICAgICAgICAgICAgZmlsdGVyPzoge1xuICAgICAgICAgICAgICAgIHByb3BlcnR5OiBFeHRyYWN0R2V0QWxsUGFyYW1zRmlsdGVyVHlwZTxBcGlTZXJ2aWNlR2V0QWxsRmlsdGVyVHlwZTxTZXJ2aWNlLCBhbnksIEdldEFsbEZuPj47XG4gICAgICAgICAgICAgICAgbWF0Y2hNb2RlPzogRmlsdGVyTWF0Y2hNb2RlRXh0ZW5kZWRUeXBlO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGdsb2JhbEZpbHRlcj86IGJvb2xlYW47XG4gICAgICAgIH07XG4gICAgICAgIHNvcnQ/OiBEYXRhTGlzdFNvcnQ8RXh0cmFjdEdldEFsbFBhcmFtc1NvcnRUeXBlPEFwaVNlcnZpY2VHZXRBbGxGaWx0ZXJUeXBlPFNlcnZpY2UsIGFueSwgR2V0QWxsRm4+Pj5bXTtcbiAgICAgICAgbGltaXQ/OiBudW1iZXI7XG4gICAgfVxuKTogTG9va3VwRGF0YVByb3ZpZGVySW5zdDxcbiAgICBFeHRyYWN0U2VydmljZUdldEFsbERhdGFUeXBlPFNlcnZpY2UsIEdldEFsbEZuPixcbiAgICBTZXJ2aWNlLFxuICAgIEV4dHJhY3RHZXRBbGxQYXJhbXNTb3J0VHlwZTxBcGlTZXJ2aWNlR2V0QWxsRmlsdGVyVHlwZTxTZXJ2aWNlLCBhbnksIEdldEFsbEZuPj4sXG4gICAgRXh0cmFjdEdldEFsbFBhcmFtc0ZpbHRlclR5cGU8QXBpU2VydmljZUdldEFsbEZpbHRlclR5cGU8U2VydmljZSwgYW55LCBHZXRBbGxGbj4+XG4+IHtcbiAgICByZXR1cm4gbmV3IExvb2t1cERhdGFQcm92aWRlckluc3Q8XG4gICAgICAgIEV4dHJhY3RTZXJ2aWNlR2V0QWxsRGF0YVR5cGU8U2VydmljZSwgR2V0QWxsRm4+LFxuICAgICAgICBTZXJ2aWNlLFxuICAgICAgICBFeHRyYWN0R2V0QWxsUGFyYW1zU29ydFR5cGU8QXBpU2VydmljZUdldEFsbEZpbHRlclR5cGU8U2VydmljZSwgYW55LCBHZXRBbGxGbj4+LFxuICAgICAgICBFeHRyYWN0R2V0QWxsUGFyYW1zRmlsdGVyVHlwZTxBcGlTZXJ2aWNlR2V0QWxsRmlsdGVyVHlwZTxTZXJ2aWNlLCBhbnksIEdldEFsbEZuPj5cbiAgICA+KHNlcnZpY2UgYXMgU2VydmljZUNsYXNzVHlwZTxTZXJ2aWNlPikud2l0aExvb2t1cCgocGFyYW1zLCBzZXJ2aWNlLCBzZWFyY2gpID0+IHtcbiAgICAgICAgaWYgKHNlYXJjaCAhPSBudWxsICYmIHNlYXJjaC5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBpZiAob3B0cz8uc2VhcmNoPy5maWx0ZXIpIHtcbiAgICAgICAgICAgICAgICBwYXJhbXMgPSB7XG4gICAgICAgICAgICAgICAgICAgIG9mZnNldDogcGFyYW1zPy5vZmZzZXQsXG4gICAgICAgICAgICAgICAgICAgIGxpbWl0OiBwYXJhbXM/LmxpbWl0LFxuICAgICAgICAgICAgICAgICAgICBzb3J0OiBwYXJhbXM/LnNvcnQsXG4gICAgICAgICAgICAgICAgICAgIGZpbHRlcnM6IDxEYXRhTGlzdEZpbHRlcnNUeXBlPEV4dHJhY3RHZXRBbGxQYXJhbXNGaWx0ZXJUeXBlPEFwaVNlcnZpY2VHZXRBbGxGaWx0ZXJUeXBlPFNlcnZpY2UsIGFueSwgR2V0QWxsRm4+Pj4+e1xuICAgICAgICAgICAgICAgICAgICAgICAgLi4ue1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtvcHRzLnNlYXJjaC5maWx0ZXIucHJvcGVydHldOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBzZWFyY2gsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdGNoTW9kZTogb3B0cy5zZWFyY2guZmlsdGVyLm1hdGNoTW9kZSA/PyAnZXF1YWxzJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9IGVsc2UgaWYgKG9wdHM/LnNlYXJjaD8uZ2xvYmFsRmlsdGVyKSB7XG4gICAgICAgICAgICAgICAgcGFyYW1zID0ge1xuICAgICAgICAgICAgICAgICAgICBvZmZzZXQ6IHBhcmFtcz8ub2Zmc2V0LFxuICAgICAgICAgICAgICAgICAgICBsaW1pdDogcGFyYW1zPy5saW1pdCxcbiAgICAgICAgICAgICAgICAgICAgc29ydDogcGFyYW1zPy5zb3J0LFxuICAgICAgICAgICAgICAgICAgICBzZWFyY2g6IHNlYXJjaFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG9wdHM/LnNvcnQgJiYgb3B0cy5zb3J0Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHBhcmFtcyA9IHtcbiAgICAgICAgICAgICAgICAuLi5wYXJhbXMsXG4gICAgICAgICAgICAgICAgc29ydDogb3B0cz8uc29ydFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBpZiAob3B0cz8ubGltaXQgIT0gbnVsbCkge1xuICAgICAgICAgICAgcGFyYW1zID0ge1xuICAgICAgICAgICAgICAgIC4uLnBhcmFtcyxcbiAgICAgICAgICAgICAgICBsaW1pdDogb3B0cz8ubGltaXRcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIChzZXJ2aWNlIGFzIGFueSlbZ2V0QWxsRm4gYXMga2V5b2Ygb2JqZWN0XSh0b0dldEFsbFBhcmFtc0FzVXJsUXVlcnkocGFyYW1zID8/IHt9KSkgYXMgT2JzZXJ2YWJsZTx7XG4gICAgICAgICAgICAgICAgZGF0YT86IEV4dHJhY3RTZXJ2aWNlR2V0QWxsRGF0YVR5cGU8U2VydmljZSwgR2V0QWxsRm4+W107XG4gICAgICAgICAgICAgICAgdG90YWxDb3VudD86IG51bWJlcjtcbiAgICAgICAgICAgIH0+XG4gICAgICAgICkucGlwZShtYXAocmVzID0+IHJlcy5kYXRhID8/IFtdKSk7XG4gICAgfSk7XG59XG4iXX0=","import { Injector, inject } from '@angular/core';\nimport { apiServiceGetAll } from '@mediusinc/mng-commons-data-api';\nimport { TableviewDataProviderInst, TableviewDescriptorInst, TableviewInputBuilder } from '@mediusinc/mng-commons/tableview/api';\n/**\n * Creates a tableview with a given model, service and sorts/filters extracted from Data API Get All request params, service, and optional build function.\n *\n * @param {ModelDescriptor<Model>} model - The model descriptor.\n * @param {ServiceClassType<Service>} service - The class type of the service.\n * @param {TypeDescriptor<RequestParam> | TableviewWithGetAllParamsOpts<RequestParam, TableModel>} paramsOrOpts - The request param of get all request. Filters and sorts will be taken from here.\n * @param {(builder: TableviewBuilder) => void} [buildFn] - The optional callback function to customize the tableview using the prepared builder.\n *\n * @returns A tableview instance with descriptor, data provider and actions.\n */\nexport function tableviewWithGetAllParams(model, service, params, buildFn) {\n const builder = new TableviewInputBuilder(new TableviewDescriptorInst(model), new TableviewDataProviderInst(service), inject(Injector));\n buildFn?.(builder);\n return builder.build();\n}\n/**\n * Creates a tableview with a mulit-model (separate for add, edit and details), service and sorts/filters from API service's provided getAll function.\n *\n * @param {ModelDescriptor<Model>} model - The model descriptor.\n * @param {ServiceClassType<Service>} service - The class type of the service.\n * @param {TableviewWithGetAllParamsOpts} opts - Options providing get all request parameters and models for table, add and edit.\n * @param {(builder: TableviewBuilder) => void} [buildFn] - The optional callback function to customize the tableview using the prepared builder.\n *\n * @returns A tableview instance with descriptor, data provider and actions.\n */\nexport function tableviewMultiModelWithGetAllParams(model, service, opts, buildFn) {\n const builder = new TableviewInputBuilder(new TableviewDescriptorInst(model, opts), new TableviewDataProviderInst(service), inject(Injector));\n buildFn?.(builder);\n return builder.build();\n}\n/**\n * Creates a tableview with a given model, service and sorts/filters from API service's provided getAll function.\n *\n * @param {ModelDescriptor<Model>} model - The model descriptor.\n * @param {ServiceClassType<Service>} service - The class type of the service.\n * @param {GetAllFn} getAllFn - The function from service for executing getAll requests. Filters and sorts will be taken from here.\n * @param {(builder: TableviewBuilder) => void} [buildFn] - The optional callback function to customize the tableview using the prepared builder.\n *\n * @returns A tableview instance with descriptor, data provider and actions.\n */\nexport function tableviewWithApiServiceGetAll(model, service, getAllFn, buildFn) {\n const builder = new TableviewInputBuilder(new TableviewDescriptorInst(model), new TableviewDataProviderInst(service), inject(Injector));\n builder.withAdjustDataProvider(dataProvider => dataProvider.withGetAll((params, service) => apiServiceGetAll(service, getAllFn, params)));\n buildFn?.(builder);\n return builder.build();\n}\n/**\n * Creates a tableview with a given model, service and sorts/filters from API service's provided getAll function.\n *\n * @param {ModelDescriptor<Model>} model - The model descriptor.\n * @param {ServiceClassType<Service>} service - The class type of the service.\n * @param {GetAllFn} serviceGetAllFn - The function from service for executing getAll requests. Filters and sorts will be taken from here.\n * @param {Required<TableviewDescriptorInstConstructorOpts<TableModel, AddModel, EditModel>>} - Required options: all remaining models for multi-tableview must be defined here.\n * @param {(builder: TableviewBuilder) => void} [buildFn] - The optional callback function to customize the tableview using the prepared builder.\n *\n * @returns A tableview instance with descriptor, data provider and actions.\n */\nexport function tableviewMultiModelWithApiServiceGetAll(model, service, serviceGetAllFn, opts, buildFn) {\n const builder = new TableviewInputBuilder(new TableviewDescriptorInst(model, opts), new TableviewDataProviderInst(service), inject(Injector));\n builder.withAdjustDataProvider(dataProvider => dataProvider.withGetAll((params, service) => apiServiceGetAll(service, serviceGetAllFn, params)));\n buildFn?.(builder);\n return builder.build();\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGV2aWV3LWdldC1hbGwtcGFyYW1zLWNyZWF0ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3RhYmxldmlldy9zcmMvaGVscGVycy90YWJsZXZpZXctZ2V0LWFsbC1wYXJhbXMtY3JlYXRlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxRQUFRLEVBQUUsTUFBTSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBSS9DLE9BQU8sRUFPSCxnQkFBZ0IsRUFDbkIsTUFBTSxpQ0FBaUMsQ0FBQztBQUd6QyxPQUFPLEVBQ0gseUJBQXlCLEVBRXpCLHVCQUF1QixFQUV2QixxQkFBcUIsRUFDeEIsTUFBTSxzQ0FBc0MsQ0FBQztBQU05Qzs7Ozs7Ozs7O0dBU0c7QUFDSCxNQUFNLFVBQVUseUJBQXlCLENBT3JDLEtBQTZCLEVBQzdCLE9BQWtDLEVBQ2xDLE1BQW9DLEVBQ3BDLE9BYVM7SUFFVCxNQUFNLE9BQU8sR0FBRyxJQUFJLHFCQUFxQixDQVlyQyxJQUFJLHVCQUF1QixDQUErRCxLQUFLLENBQUMsRUFDaEcsSUFBSSx5QkFBeUIsQ0FBaUMsT0FBTyxDQUFDLEVBQ3RFLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FDbkIsQ0FBQztJQUNGLE9BQU8sRUFBRSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ25CLE9BQU8sT0FBTyxDQUFDLEtBQUssRUFBRSxDQUFDO0FBQzNCLENBQUM7QUFFRDs7Ozs7Ozs7O0dBU0c7QUFDSCxNQUFNLFVBQVUsbUNBQW1DLENBVy9DLEtBQTZCLEVBQzdCLE9BQWtDLEVBQ2xDLElBQTRGLEVBQzVGLE9BYVM7SUFFVCxNQUFNLE9BQU8sR0FBRyxJQUFJLHFCQUFxQixDQVlyQyxJQUFJLHVCQUF1QixDQUFpRixLQUFLLEVBQUUsSUFBSSxDQUFDLEVBQ3hILElBQUkseUJBQXlCLENBQTZGLE9BQU8sQ0FBQyxFQUNsSSxNQUFNLENBQUMsUUFBUSxDQUFDLENBQ25CLENBQUM7SUFDRixPQUFPLEVBQUUsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUNuQixPQUFPLE9BQU8sQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUMzQixDQUFDO0FBRUQ7Ozs7Ozs7OztHQVNHO0FBQ0gsTUFBTSxVQUFVLDZCQUE2QixDQVN6QyxLQUE2QixFQUM3QixPQUFrQyxFQUNsQyxRQUFrQixFQUNsQixPQWFTO0lBRVQsTUFBTSxPQUFPLEdBQUcsSUFBSSxxQkFBcUIsQ0FZckMsSUFBSSx1QkFBdUIsQ0FBb0UsS0FBSyxDQUFDLEVBQ3JHLElBQUkseUJBQXlCLENBQXdFLE9BQU8sQ0FBQyxFQUM3RyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQ25CLENBQUM7SUFDRixPQUFPLENBQUMsc0JBQXNCLENBQUMsWUFBWSxDQUFDLEVBQUUsQ0FBQyxZQUFZLENBQUMsVUFBVSxDQUFDLENBQUMsTUFBTSxFQUFFLE9BQU8sRUFBRSxFQUFFLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxFQUFFLFFBQWUsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDakosT0FBTyxFQUFFLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDbkIsT0FBTyxPQUFPLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDM0IsQ0FBQztBQUVEOzs7Ozs7Ozs7O0dBVUc7QUFDSCxNQUFNLFVBQVUsdUNBQXVDLENBWW5ELEtBQTZCLEVBQzdCLE9BQWtDLEVBQ2xDLGVBQWdDLEVBQ2hDLElBQXVGLEVBQ3ZGLE9BYVM7SUFFVCxNQUFNLE9BQU8sR0FBRyxJQUFJLHFCQUFxQixDQVlyQyxJQUFJLHVCQUF1QixDQUFpRixLQUFLLEVBQUUsSUFBSSxDQUFDLEVBQ3hILElBQUkseUJBQXlCLENBQTZGLE9BQU8sQ0FBQyxFQUNsSSxNQUFNLENBQUMsUUFBUSxDQUFDLENBQ25CLENBQUM7SUFDRixPQUFPLENBQUMsc0JBQXNCLENBQUMsWUFBWSxDQUFDLEVBQUUsQ0FBQyxZQUFZLENBQUMsVUFBVSxDQUFDLENBQUMsTUFBTSxFQUFFLE9BQU8sRUFBRSxFQUFFLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxFQUFFLGVBQXNCLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3hKLE9BQU8sRUFBRSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ25CLE9BQU8sT0FBTyxDQUFDLEtBQUssRUFBRSxDQUFDO0FBQzNCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0luamVjdG9yLCBpbmplY3R9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQge09ic2VydmFibGV9IGZyb20gJ3J4anMnO1xuXG5pbXBvcnQge1xuICAgIEFwaVNlcnZpY2VHZXRBbGxGaWx0ZXJUeXBlLFxuICAgIEV4dHJhY3RHZXRBbGxQYXJhbXNGaWx0ZXJUeXBlLFxuICAgIEV4dHJhY3RHZXRBbGxQYXJhbXNTb3J0VHlwZSxcbiAgICBFeHRyYWN0U2VydmljZUdldEFsbERhdGFUeXBlLFxuICAgIEdldEFsbEh0dHBSZXNwb25zZVR5cGUsXG4gICAgR2V0QWxsUGFyYW1zRGVmYXVsdFdvRmlsdGVyc1R5cGUsXG4gICAgYXBpU2VydmljZUdldEFsbFxufSBmcm9tICdAbWVkaXVzaW5jL21uZy1jb21tb25zLWRhdGEtYXBpJztcbmltcG9ydCB7Q2xhc3NGdW5jdGlvbktleXNXaXRoQW55QXJnc0FuZFJldHVyblR5cGUsIFNlcnZpY2VDbGFzc1R5cGV9IGZyb20gJ0BtZWRpdXNpbmMvbW5nLWNvbW1vbnMvY29yZSc7XG5pbXBvcnQge01vZGVsRGVzY3JpcHRvciwgVHlwZURlc2NyaXB0b3J9IGZyb20gJ0BtZWRpdXNpbmMvbW5nLWNvbW1vbnMvbW9kZWwnO1xuaW1wb3J0IHtcbiAgICBUYWJsZXZpZXdEYXRhUHJvdmlkZXJJbnN0LFxuICAgIFRhYmxldmlld0Rlc2NyaXB0b3JGaWVsZHNNYW5hZ2VNdWx0aVR5cGUsXG4gICAgVGFibGV2aWV3RGVzY3JpcHRvckluc3QsXG4gICAgVGFibGV2aWV3RGVzY3JpcHRvckluc3RDb25zdHJ1Y3Rvck9wdHMsXG4gICAgVGFibGV2aWV3SW5wdXRCdWlsZGVyXG59IGZyb20gJ0BtZWRpdXNpbmMvbW5nLWNvbW1vbnMvdGFibGV2aWV3L2FwaSc7XG5cbnR5cGUgVGFibGV2aWV3V2l0aEdldEFsbFBhcmFtc09wdHM8UmVxdWVzdFBhcmFtLCBUYWJsZU1vZGVsLCBBZGRNb2RlbCwgRWRpdE1vZGVsPiA9IHtcbiAgICByZXF1ZXN0UGFyYW1zVHlwZTogVHlwZURlc2NyaXB0b3I8UmVxdWVzdFBhcmFtPjtcbn0gJiBUYWJsZXZpZXdEZXNjcmlwdG9ySW5zdENvbnN0cnVjdG9yT3B0czxUYWJsZU1vZGVsLCBBZGRNb2RlbCwgRWRpdE1vZGVsPjtcblxuLyoqXG4gKiBDcmVhdGVzIGEgdGFibGV2aWV3IHdpdGggYSBnaXZlbiBtb2RlbCwgc2VydmljZSBhbmQgc29ydHMvZmlsdGVycyBleHRyYWN0ZWQgZnJvbSBEYXRhIEFQSSBHZXQgQWxsIHJlcXVlc3QgcGFyYW1zLCBzZXJ2aWNlLCBhbmQgb3B0aW9uYWwgYnVpbGQgZnVuY3Rpb24uXG4gKlxuICogQHBhcmFtIHtNb2RlbERlc2NyaXB0b3I8TW9kZWw+fSBtb2RlbCAtIFRoZSBtb2RlbCBkZXNjcmlwdG9yLlxuICogQHBhcmFtIHtTZXJ2aWNlQ2xhc3NUeXBlPFNlcnZpY2U+fSBzZXJ2aWNlIC0gVGhlIGNsYXNzIHR5cGUgb2YgdGhlIHNlcnZpY2UuXG4gKiBAcGFyYW0ge1R5cGVEZXNjcmlwdG9yPFJlcXVlc3RQYXJhbT4gfCBUYWJsZXZpZXdXaXRoR2V0QWxsUGFyYW1zT3B0czxSZXF1ZXN0UGFyYW0sIFRhYmxlTW9kZWw+fSBwYXJhbXNPck9wdHMgLSBUaGUgcmVxdWVzdCBwYXJhbSBvZiBnZXQgYWxsIHJlcXVlc3QuIEZpbHRlcnMgYW5kIHNvcnRzIHdpbGwgYmUgdGFrZW4gZnJvbSBoZXJlLlxuICogQHBhcmFtIHsoYnVpbGRlcjogVGFibGV2aWV3QnVpbGRlcikgPT4gdm9pZH0gW2J1aWxkRm5dIC0gVGhlIG9wdGlvbmFsIGNhbGxiYWNrIGZ1bmN0aW9uIHRvIGN1c3RvbWl6ZSB0aGUgdGFibGV2aWV3IHVzaW5nIHRoZSBwcmVwYXJlZCBidWlsZGVyLlxuICpcbiAqIEByZXR1cm5zIEEgdGFibGV2aWV3IGluc3RhbmNlIHdpdGggZGVzY3JpcHRvciwgZGF0YSBwcm92aWRlciBhbmQgYWN0aW9ucy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRhYmxldmlld1dpdGhHZXRBbGxQYXJhbXM8XG4gICAgTW9kZWwsXG4gICAgU2VydmljZSxcbiAgICBSZXF1ZXN0UGFyYW0gZXh0ZW5kcyBHZXRBbGxQYXJhbXNEZWZhdWx0V29GaWx0ZXJzVHlwZSxcbiAgICBTb3J0cyA9IEV4dHJhY3RHZXRBbGxQYXJhbXNTb3J0VHlwZTxSZXF1ZXN0UGFyYW0+LFxuICAgIEZpbHRlcnMgZXh0ZW5kcyBrZXlvZiBhbnkgPSBFeHRyYWN0R2V0QWxsUGFyYW1zRmlsdGVyVHlwZTxSZXF1ZXN0UGFyYW0+XG4+KFxuICAgIG1vZGVsOiBNb2RlbERlc2NyaXB0b3I8TW9kZWw+LFxuICAgIHNlcnZpY2U6IFNlcnZpY2VDbGFzc1R5cGU8U2VydmljZT4sXG4gICAgcGFyYW1zOiBUeXBlRGVzY3JpcHRvcjxSZXF1ZXN0UGFyYW0+LFxuICAgIGJ1aWxkRm4/OiAoXG4gICAgICAgIGJ1aWxkZXI6IFRhYmxldmlld0lucHV0QnVpbGRlcjxcbiAgICAgICAgICAgIE1vZGVsLFxuICAgICAgICAgICAgU2VydmljZSxcbiAgICAgICAgICAgIFRhYmxldmlld0Rlc2NyaXB0b3JJbnN0PE1vZGVsLCBTb3J0cywgRmlsdGVycywgdW5kZWZpbmVkLCBNb2RlbCwgTW9kZWwsIE1vZGVsLCBNb2RlbD4sXG4gICAgICAgICAgICBUYWJsZXZpZXdEYXRhUHJvdmlkZXJJbnN0PE1vZGVsLCBTZXJ2aWNlLCBTb3J0cywgRmlsdGVycz4sXG4gICAgICAgICAgICBTb3J0cyxcbiAgICAgICAgICAgIEZpbHRlcnMsXG4gICAgICAgICAgICBNb2RlbCxcbiAgICAgICAgICAgIE1vZGVsLFxuICAgICAgICAgICAgTW9kZWwsXG4gICAgICAgICAgICBNb2RlbFxuICAgICAgICA+XG4gICAgKSA9PiB2b2lkXG4pIHtcbiAgICBjb25zdCBidWlsZGVyID0gbmV3IFRhYmxldmlld0lucHV0QnVpbGRlcjxcbiAgICAgICAgTW9kZWwsXG4gICAgICAgIFNlcnZpY2UsXG4gICAgICAgIFRhYmxldmlld0Rlc2NyaXB0b3JJbnN0PE1vZGVsLCBTb3J0cywgRmlsdGVycywgdW5kZWZpbmVkLCBNb2RlbCwgTW9kZWwsIE1vZGVsLCBNb2RlbD4sXG4gICAgICAgIFRhYmxldmlld0RhdGFQcm92aWRlckluc3Q8TW9kZWwsIFNlcnZpY2UsIFNvcnRzLCBGaWx0ZXJzPixcbiAgICAgICAgU29ydHMsXG4gICAgICAgIEZpbHRlcnMsXG4gICAgICAgIE1vZGVsLFxuICAgICAgICBNb2RlbCxcbiAgICAgICAgTW9kZWwsXG4gICAgICAgIE1vZGVsXG4gICAgPihcbiAgICAgICAgbmV3IFRhYmxldmlld0Rlc2NyaXB0b3JJbnN0PE1vZGVsLCBTb3J0cywgRmlsdGVycywgdW5kZWZpbmVkLCBNb2RlbCwgTW9kZWwsIE1vZGVsLCBNb2RlbD4obW9kZWwpLFxuICAgICAgICBuZXcgVGFibGV2aWV3RGF0YVByb3ZpZGVySW5zdDxNb2RlbCwgU2VydmljZSwgU29ydHMsIEZpbHRlcnM+KHNlcnZpY2UpLFxuICAgICAgICBpbmplY3QoSW5qZWN0b3IpXG4gICAgKTtcbiAgICBidWlsZEZuPy4oYnVpbGRlcik7XG4gICAgcmV0dXJuIGJ1aWxkZXIuYnVpbGQoKTtcbn1cblxuLyoqXG4gKiBDcmVhdGVzIGEgdGFibGV2aWV3IHdpdGggYSBtdWxpdC1tb2RlbCAoc2VwYXJhdGUgZm9yIGFkZCwgZWRpdCBhbmQgZGV0YWlscyksIHNlcnZpY2UgYW5kIHNvcnRzL2ZpbHRlcnMgZnJvbSBBUEkgc2VydmljZSdzIHByb3ZpZGVkIGdldEFsbCBmdW5jdGlvbi5cbiAqXG4gKiBAcGFyYW0ge01vZGVsRGVzY3JpcHRvcjxNb2RlbD59IG1vZGVsIC0gVGhlIG1vZGVsIGRlc2NyaXB0b3IuXG4gKiBAcGFyYW0ge1NlcnZpY2VDbGFzc1R5cGU8U2VydmljZT59IHNlcnZpY2UgLSBUaGUgY2xhc3MgdHlwZSBvZiB0aGUgc2VydmljZS5cbiAqIEBwYXJhbSB7VGFibGV2aWV3V2l0aEdldEFsbFBhcmFtc09wdHN9IG9wdHMgLSBPcHRpb25zIHByb3ZpZGluZyBnZXQgYWxsIHJlcXVlc3QgcGFyYW1ldGVycyBhbmQgbW9kZWxzIGZvciB0YWJsZSwgYWRkIGFuZCBlZGl0LlxuICogQHBhcmFtIHsoYnVpbGRlcjogVGFibGV2aWV3QnVpbGRlcikgPT4gdm9pZH0gW2J1aWxkRm5dIC0gVGhlIG9wdGlvbmFsIGNhbGxiYWNrIGZ1bmN0aW9uIHRvIGN1c3RvbWl6ZSB0aGUgdGFibGV2aWV3IHVzaW5nIHRoZSBwcmVwYXJlZCBidWlsZGVyLlxuICpcbiAqIEByZXR1cm5zIEEgdGFibGV2aWV3IGluc3RhbmNlIHdpdGggZGVzY3JpcHRvciwgZGF0YSBwcm92aWRlciBhbmQgYWN0aW9ucy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRhYmxldmlld011bHRpTW9kZWxXaXRoR2V0QWxsUGFyYW1zPFxuICAgIE1vZGVsLFxuICAgIFNlcnZpY2UsXG4gICAgUmVxdWVzdFBhcmFtIGV4dGVuZHMgR2V0QWxsUGFyYW1zRGVmYXVsdFdvRmlsdGVyc1R5cGUsXG4gICAgU29ydHMgPSBFeHRyYWN0R2V0QWxsUGFyYW1zU29ydFR5cGU8UmVxdWVzdFBhcmFtPixcbiAgICBGaWx0ZXJzIGV4dGVuZHMga2V5b2YgYW55ID0gRXh0cmFjdEdldEFsbFBhcmFtc0ZpbHRlclR5cGU8UmVxdWVzdFBhcmFtPixcbiAgICBUYWJsZU1vZGVsID0gTW9kZWwsXG4gICAgQWRkTW9kZWwgPSBNb2RlbCxcbiAgICBFZGl0TW9kZWwgPSBNb2RlbCxcbiAgICBGaWVsZHNNb2RlbCA9IFRhYmxldmlld0Rlc2NyaXB0b3JGaWVsZHNNYW5hZ2VNdWx0aVR5cGU8TW9kZWwsIEFkZE1vZGVsLCBFZGl0TW9kZWw+XG4+KFxuICAgIG1vZGVsOiBNb2RlbERlc2NyaXB0b3I8TW9kZWw+LFxuICAgIHNlcnZpY2U6IFNlcnZpY2VDbGFzc1R5cGU8U2VydmljZT4sXG4gICAgb3B0czogUmVxdWlyZWQ8VGFibGV2aWV3V2l0aEdldEFsbFBhcmFtc09wdHM8UmVxdWVzdFBhcmFtLCBUYWJsZU1vZGVsLCBBZGRNb2RlbCwgRWRpdE1vZGVsPj4sXG4gICAgYnVpbGRGbj86IChcbiAgICAgICAgYnVpbGRlcjogVGFibGV2aWV3SW5wdXRCdWlsZGVyPFxuICAgICAgICAgICAgTW9kZWwsXG4gICAgICAgICAgICBTZXJ2aWNlLFxuICAgICAgICAgICAgVGFibGV2aWV3RGVzY3JpcHRvckluc3Q8TW9kZWwsIFNvcnRzLCBGaWx0ZXJzLCB1bmRlZmluZWQsIFRhYmxlTW9kZWwsIEFkZE1vZGVsLCBFZGl0TW9kZWwsIEZpZWxkc01vZGVsPixcbiAgICAgICAgICAgIFRhYmxldmlld0RhdGFQcm92aWRlckluc3Q8TW9kZWwsIFNlcnZpY2UsIFNvcnRzLCBGaWx0ZXJzLCBTZXJ2aWNlQ2xhc3NUeXBlPFNlcnZpY2U+LCBUYWJsZU1vZGVsLCBBZGRNb2RlbCwgRWRpdE1vZGVsPixcbiAgICAgICAgICAgIFNvcnRzLFxuICAgICAgICAgICAgRmlsdGVycyxcbiAgICAgICAgICAgIFRhYmxlTW9kZWwsXG4gICAgICAgICAgICBBZGRNb2RlbCxcbiAgICAgICAgICAgIEVkaXRNb2RlbCxcbiAgICAgICAgICAgIEZpZWxkc01vZGVsXG4gICAgICAgID5cbiAgICApID0+IHZvaWRcbikge1xuICAgIGNvbnN0IGJ1aWxkZXIgPSBuZXcgVGFibGV2aWV3SW5wdXRCdWlsZGVyPFxuICAgICAgICBNb2RlbCxcbiAgICAgICAgU2VydmljZSxcbiAgICAgICAgVGFibGV2aWV3RGVzY3JpcHRvckluc3Q8TW9kZWwsIFNvcnRzLCBGaWx0ZXJzLCB1bmRlZmluZWQsIFRhYmxlTW9kZWwsIEFkZE1vZGVsLCBFZGl0TW9kZWwsIEZpZWxkc01vZGVsPixcbiAgICAgICAgVGFibGV2aWV3RGF0YVByb3ZpZGVySW5zdDxNb2RlbCwgU2VydmljZSwgU29ydHMsIEZpbHRlcnMsIFNlcnZpY2VDbGFzc1R5cGU8U2VydmljZT4sIFRhYmxlTW9kZWwsIEFkZE1vZGVsLCBFZGl0TW9kZWw+LFxuICAgICAgICBTb3J0cyxcbiAgICAgICAgRmlsdGVycyxcbiAgICAgICAgVGFibGVNb2RlbCxcbiAgICAgICAgQWRkTW9kZWwsXG4gICAgICAgIEVkaXRNb2RlbCxcbiAgICAgICAgRmllbGRzTW9kZWxcbiAgICA+KFxuICAgICAgICBuZXcgVGFibGV2aWV3RGVzY3JpcHRvckluc3Q8TW9kZWwsIFNvcnRzLCBGaWx0ZXJzLCB1bmRlZmluZWQsIFRhYmxlTW9kZWwsIEFkZE1vZGVsLCBFZGl0TW9kZWwsIEZpZWxkc01vZGVsPihtb2RlbCwgb3B0cyksXG4gICAgICAgIG5ldyBUYWJsZXZpZXdEYXRhUHJvdmlkZXJJbnN0PE1vZGVsLCBTZXJ2aWNlLCBTb3J0cywgRmlsdGVycywgU2VydmljZUNsYXNzVHlwZTxTZXJ2aWNlPiwgVGFibGVNb2RlbCwgQWRkTW9kZWwsIEVkaXRNb2RlbD4oc2VydmljZSksXG4gICAgICAgIGluamVjdChJbmplY3RvcilcbiAgICApO1xuICAgIGJ1aWxkRm4/LihidWlsZGVyKTtcbiAgICByZXR1cm4gYnVpbGRlci5idWlsZCgpO1xufVxuXG4vKipcbiAqIENyZWF0ZXMgYSB0YWJsZXZpZXcgd2l0aCBhIGdpdmVuIG1vZGVsLCBzZXJ2aWNlIGFuZCBzb3J0cy9maWx0ZXJzIGZyb20gQVBJIHNlcnZpY2UncyBwcm92aWRlZCBnZXRBbGwgZnVuY3Rpb24uXG4gKlxuICogQHBhcmFtIHtNb2RlbERlc2NyaXB0b3I8TW9kZWw+fSBtb2RlbCAtIFRoZSBtb2RlbCBkZXNjcmlwdG9yLlxuICogQHBhcmFtIHtTZXJ2aWNlQ2xhc3NUeXBlPFNlcnZpY2U+fSBzZXJ2aWNlIC0gVGhlIGNsYXNzIHR5cGUgb2YgdGhlIHNlcnZpY2UuXG4gKiBAcGFyYW0ge0dldEFsbEZufSBnZXRBbGxGbiAtIFRoZSBmdW5jdGlvbiBmcm9tIHNlcnZpY2UgZm9yIGV4ZWN1dGluZyBnZXRBbGwgcmVxdWVzdHMuIEZpbHRlcnMgYW5kIHNvcnRzIHdpbGwgYmUgdGFrZW4gZnJvbSBoZXJlLlxuICogQHBhcmFtIHsoYnVpbGRlcjogVGFibGV2aWV3QnVpbGRlcikgPT4gdm9pZH0gW2J1aWxkRm5dIC0gVGhlIG9wdGlvbmFsIGNhbGxiYWNrIGZ1bmN0aW9uIHRvIGN1c3RvbWl6ZSB0aGUgdGFibGV2aWV3IHVzaW5nIHRoZSBwcmVwYXJlZCBidWlsZGVyLlxuICpcbiAqIEByZXR1cm5zIEEgdGFibGV2aWV3IGluc3RhbmNlIHdpdGggZGVzY3JpcHRvciwgZGF0YSBwcm92aWRlciBhbmQgYWN0aW9ucy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRhYmxldmlld1dpdGhBcGlTZXJ2aWNlR2V0QWxsPFxuICAgIE1vZGVsLFxuICAgIFNlcnZpY2UsXG4gICAgR2V0QWxsRm4gZXh0ZW5kcyBDbGFzc0Z1bmN0aW9uS2V5c1dpdGhBbnlBcmdzQW5kUmV0dXJuVHlwZTxTZXJ2aWNlLCBPYnNlcnZhYmxlPEdldEFsbEh0dHBSZXNwb25zZVR5cGU8VGFibGVNb2RlbD4+PixcbiAgICBUYWJsZU1vZGVsID0gRXh0cmFjdFNlcnZpY2VHZXRBbGxEYXRhVHlwZTxTZXJ2aWNlLCBHZXRBbGxGbj4sXG4gICAgUmVxdWVzdFBhcmFtcyBleHRlbmRzIEdldEFsbFBhcmFtc0RlZmF1bHRXb0ZpbHRlcnNUeXBlID0gQXBpU2VydmljZUdldEFsbEZpbHRlclR5cGU8U2VydmljZSwgVGFibGVNb2RlbCwgR2V0QWxsRm4+LFxuICAgIFNvcnRzID0gRXh0cmFjdEdldEFsbFBhcmFtc1NvcnRUeXBlPFJlcXVlc3RQYXJhbXM+LFxuICAgIEZpbHRlcnMgZXh0ZW5kcyBrZXlvZiBhbnkgPSBFeHRyYWN0R2V0QWxsUGFyYW1zRmlsdGVyVHlwZTxSZXF1ZXN0UGFyYW1zPlxuPihcbiAgICBtb2RlbDogTW9kZWxEZXNjcmlwdG9yPE1vZGVsPixcbiAgICBzZXJ2aWNlOiBTZXJ2aWNlQ2xhc3NUeXBlPFNlcnZpY2U+LFxuICAgIGdldEFsbEZuOiBHZXRBbGxGbixcbiAgICBidWlsZEZuPzogKFxuICAgICAgICBidWlsZGVyOiBUYWJsZXZpZXdJbnB1dEJ1aWxkZXI8XG4gICAgICAgICAgICBNb2RlbCxcbiAgICAgICAgICAgIFNlcnZpY2UsXG4gICAgICAgICAgICBUYWJsZXZpZXdEZXNjcmlwdG9ySW5zdDxNb2RlbCwgU29ydHMsIEZpbHRlcnMsIHVuZGVmaW5lZCwgVGFibGVNb2RlbCwgTW9kZWwsIE1vZGVsLCBNb2RlbD4sXG4gICAgICAgICAgICBUYWJsZXZpZXdEYXRhUHJvdmlkZXJJbnN0PE1vZGVsLCBTZXJ2aWNlLCBTb3J0cywgRmlsdGVycywgU2VydmljZUNsYXNzVHlwZTxTZXJ2aWNlPiwgVGFibGVNb2RlbD4sXG4gICAgICAgICAgICBTb3J0cyxcbiAgICAgICAgICAgIEZpbHRlcnMsXG4gICAgICAgICAgICBUYWJsZU1vZGVsLFxuICAgICAgICAgICAgTW9kZWwsXG4gICAgICAgICAgICBNb2RlbCxcbiAgICAgICAgICAgIE1vZGVsXG4gICAgICAgID5cbiAgICApID0+IHZvaWRcbikge1xuICAgIGNvbnN0IGJ1aWxkZXIgPSBuZXcgVGFibGV2aWV3SW5wdXRCdWlsZGVyPFxuICAgICAgICBNb2RlbCxcbiAgICAgICAgU2VydmljZSxcbiAgICAgICAgVGFibGV2aWV3RGVzY3JpcHRvckluc3Q8TW9kZWwsIFNvcnRzLCBGaWx0ZXJzLCB1bmRlZmluZWQsIFRhYmxlTW9kZWwsIE1vZGVsLCBNb2RlbCwgTW9kZWw+LFxuICAgICAgICBUYWJsZXZpZXdEYXRhUHJvdmlkZXJJbnN0PE1vZGVsLCBTZXJ2aWNlLCBTb3J0cywgRmlsdGVycywgU2VydmljZUNsYXNzVHlwZTxTZXJ2aWNlPiwgVGFibGVNb2RlbD4sXG4gICAgICAgIFNvcnRzLFxuICAgICAgICBGaWx0ZXJzLFxuICAgICAgICBUYWJsZU1vZGVsLFxuICAgICAgICBNb2RlbCxcbiAgICAgICAgTW9kZWwsXG4gICAgICAgIE1vZGVsXG4gICAgPihcbiAgICAgICAgbmV3IFRhYmxldmlld0Rlc2NyaXB0b3JJbnN0PE1vZGVsLCBTb3J0cywgRmlsdGVycywgdW5kZWZpbmVkLCBUYWJsZU1vZGVsLCBNb2RlbCwgTW9kZWwsIE1vZGVsPihtb2RlbCksXG4gICAgICAgIG5ldyBUYWJsZXZpZXdEYXRhUHJvdmlkZXJJbnN0PE1vZGVsLCBTZXJ2aWNlLCBTb3J0cywgRmlsdGVycywgU2VydmljZUNsYXNzVHlwZTxTZXJ2aWNlPiwgVGFibGVNb2RlbD4oc2VydmljZSksXG4gICAgICAgIGluamVjdChJbmplY3RvcilcbiAgICApO1xuICAgIGJ1aWxkZXIud2l0aEFkanVzdERhdGFQcm92aWRlcihkYXRhUHJvdmlkZXIgPT4gZGF0YVByb3ZpZGVyLndpdGhHZXRBbGwoKHBhcmFtcywgc2VydmljZSkgPT4gYXBpU2VydmljZUdldEFsbChzZXJ2aWNlLCBnZXRBbGxGbiBhcyBhbnksIHBhcmFtcykpKTtcbiAgICBidWlsZEZuPy4oYnVpbGRlcik7XG4gICAgcmV0dXJuIGJ1aWxkZXIuYnVpbGQoKTtcbn1cblxuLyoqXG4gKiBDcmVhdGVzIGEgdGFibGV2aWV3IHdpdGggYSBnaXZlbiBtb2RlbCwgc2VydmljZSBhbmQgc29ydHMvZmlsdGVycyBmcm9tIEFQSSBzZXJ2aWNlJ3MgcHJvdmlkZWQgZ2V0QWxsIGZ1bmN0aW9uLlxuICpcbiAqIEBwYXJhbSB7TW9kZWxEZXNjcmlwdG9yPE1vZGVsPn0gbW9kZWwgLSBUaGUgbW9kZWwgZGVzY3JpcHRvci5cbiAqIEBwYXJhbSB7U2VydmljZUNsYXNzVHlwZTxTZXJ2aWNlPn0gc2VydmljZSAtIFRoZSBjbGFzcyB0eXBlIG9mIHRoZSBzZXJ2aWNlLlxuICogQHBhcmFtIHtHZXRBbGxGbn0gc2VydmljZUdldEFsbEZuIC0gVGhlIGZ1bmN0aW9uIGZyb20gc2VydmljZSBmb3IgZXhlY3V0aW5nIGdldEFsbCByZXF1ZXN0cy4gRmlsdGVycyBhbmQgc29ydHMgd2lsbCBiZSB0YWtlbiBmcm9tIGhlcmUuXG4gKiBAcGFyYW0ge1JlcXVpcmVkPFRhYmxldmlld0Rlc2NyaXB0b3JJbnN0Q29uc3RydWN0b3JPcHRzPFRhYmxlTW9kZWwsIEFkZE1vZGVsLCBFZGl0TW9kZWw+Pn0gLSBSZXF1aXJlZCBvcHRpb25zOiBhbGwgcmVtYWluaW5nIG1vZGVscyBmb3IgbXVsdGktdGFibGV2aWV3IG11c3QgYmUgZGVmaW5lZCBoZXJlLlxuICogQHBhcmFtIHsoYnVpbGRlcjogVGFibGV2aWV3QnVpbGRlcikgPT4gdm9pZH0gW2J1aWxkRm5dIC0gVGhlIG9wdGlvbmFsIGNhbGxiYWNrIGZ1bmN0aW9uIHRvIGN1c3RvbWl6ZSB0aGUgdGFibGV2aWV3IHVzaW5nIHRoZSBwcmVwYXJlZCBidWlsZGVyLlxuICpcbiAqIEByZXR1cm5zIEEgdGFibGV2aWV3IGluc3RhbmNlIHdpdGggZGVzY3JpcHRvciwgZGF0YSBwcm92aWRlciBhbmQgYWN0aW9ucy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRhYmxldmlld011bHRpTW9kZWxXaXRoQXBpU2VydmljZUdldEFsbDxcbiAgICBNb2RlbCxcbiAgICBTZXJ2aWNlLFxuICAgIFNlcnZpY2VHZXRBbGxGbiBleHRlbmRzIENsYXNzRnVuY3Rpb25LZXlzV2l0aEFueUFyZ3NBbmRSZXR1cm5UeXBlPFNlcnZpY2UsIE9ic2VydmFibGU8R2V0QWxsSHR0cFJlc3BvbnNlVHlwZTxUYWJsZU1vZGVsPj4+LFxuICAgIFRhYmxlTW9kZWwsXG4gICAgQWRkTW9kZWwsXG4gICAgRWRpdE1vZGVsLFxuICAgIFNlcnZpY2VHZXRBbGxSZXF1ZXN0UGFyYW1zIGV4dGVuZHMgR2V0QWxsUGFyYW1zRGVmYXVsdFdvRmlsdGVyc1R5cGUgPSBBcGlTZXJ2aWNlR2V0QWxsRmlsdGVyVHlwZTxTZXJ2aWNlLCBUYWJsZU1vZGVsLCBTZXJ2aWNlR2V0QWxsRm4+LFxuICAgIFNvcnRzID0gRXh0cmFjdEdldEFsbFBhcmFtc1NvcnRUeXBlPFNlcnZpY2VHZXRBbGxSZXF1ZXN0UGFyYW1zPixcbiAgICBGaWx0ZXJzIGV4dGVuZHMga2V5b2YgYW55ID0gRXh0cmFjdEdldEFsbFBhcmFtc0ZpbHRlclR5cGU8U2VydmljZUdldEFsbFJlcXVlc3RQYXJhbXM+LFxuICAgIEZpZWxkc01vZGVsID0gVGFibGV2aWV3RGVzY3JpcHRvckZpZWxkc01hbmFnZU11bHRpVHlwZTxNb2RlbCwgQWRkTW9kZWwsIEVkaXRNb2RlbD5cbj4oXG4gICAgbW9kZWw6IE1vZGVsRGVzY3JpcHRvcjxNb2RlbD4sXG4gICAgc2VydmljZTogU2VydmljZUNsYXNzVHlwZTxTZXJ2aWNlPixcbiAgICBzZXJ2aWNlR2V0QWxsRm46IFNlcnZpY2VHZXRBbGxGbixcbiAgICBvcHRzOiBSZXF1aXJlZDxUYWJsZXZpZXdEZXNjcmlwdG9ySW5zdENvbnN0cnVjdG9yT3B0czxUYWJsZU1vZGVsLCBBZGRNb2RlbCwgRWRpdE1vZGVsPj4sXG4gICAgYnVpbGRGbj86IChcbiAgICAgICAgYnVpbGRlcjogVGFibGV2aWV3SW5wdXRCdWlsZGVyPFxuICAgICAgICAgICAgTW9kZWwsXG4gICAgICAgICAgICBTZXJ2aWNlLFxuICAgICAgICAgICAgVGFibGV2aWV3RGVzY3JpcHRvckluc3Q8TW9kZWwsIFNvcnRzLCBGaWx0ZXJzLCB1bmRlZmluZWQsIFRhYmxlTW9kZWwsIEFkZE1vZGVsLCBFZGl0TW9kZWwsIEZpZWxkc01vZGVsPixcbiAgICAgICAgICAgIFRhYmxldmlld0RhdGFQcm92aWRlckluc3Q8TW9kZWwsIFNlcnZpY2UsIFNvcnRzLCBGaWx0ZXJzLCBTZXJ2aWNlQ2xhc3NUeXBlPFNlcnZpY2U+LCBUYWJsZU1vZGVsLCBBZGRNb2RlbCwgRWRpdE1vZGVsPixcbiAgICAgICAgICAgIFNvcnRzLFxuICAgICAgICAgICAgRmlsdGVycyxcbiAgICAgICAgICAgIFRhYmxlTW9kZWwsXG4gICAgICAgICAgICBBZGRNb2RlbCxcbiAgICAgICAgICAgIEVkaXRNb2RlbCxcbiAgICAgICAgICAgIEZpZWxkc01vZGVsXG4gICAgICAgID5cbiAgICApID0+IHZvaWRcbikge1xuICAgIGNvbnN0IGJ1aWxkZXIgPSBuZXcgVGFibGV2aWV3SW5wdXRCdWlsZGVyPFxuICAgICAgICBNb2RlbCxcbiAgICAgICAgU2VydmljZSxcbiAgICAgICAgVGFibGV2aWV3RGVzY3JpcHRvckluc3Q8TW9kZWwsIFNvcnRzLCBGaWx0ZXJzLCB1bmRlZmluZWQsIFRhYmxlTW9kZWwsIEFkZE1vZGVsLCBFZGl0TW9kZWwsIEZpZWxkc01vZGVsPixcbiAgICAgICAgVGFibGV2aWV3RGF0YVByb3ZpZGVySW5zdDxNb2RlbCwgU2VydmljZSwgU29ydHMsIEZpbHRlcnMsIFNlcnZpY2VDbGFzc1R5cGU8U2VydmljZT4sIFRhYmxlTW9kZWwsIEFkZE1vZGVsLCBFZGl0TW9kZWw+LFxuICAgICAgICBTb3J0cyxcbiAgICAgICAgRmlsdGVycyxcbiAgICAgICAgVGFibGVNb2RlbCxcbiAgICAgICAgQWRkTW9kZWwsXG4gICAgICAgIEVkaXRNb2RlbCxcbiAgICAgICAgRmllbGRzTW9kZWxcbiAgICA+KFxuICAgICAgICBuZXcgVGFibGV2aWV3RGVzY3JpcHRvckluc3Q8TW9kZWwsIFNvcnRzLCBGaWx0ZXJzLCB1bmRlZmluZWQsIFRhYmxlTW9kZWwsIEFkZE1vZGVsLCBFZGl0TW9kZWwsIEZpZWxkc01vZGVsPihtb2RlbCwgb3B0cyksXG4gICAgICAgIG5ldyBUYWJsZXZpZXdEYXRhUHJvdmlkZXJJbnN0PE1vZGVsLCBTZXJ2aWNlLCBTb3J0cywgRmlsdGVycywgU2VydmljZUNsYXNzVHlwZTxTZXJ2aWNlPiwgVGFibGVNb2RlbCwgQWRkTW9kZWwsIEVkaXRNb2RlbD4oc2VydmljZSksXG4gICAgICAgIGluamVjdChJbmplY3RvcilcbiAgICApO1xuICAgIGJ1aWxkZXIud2l0aEFkanVzdERhdGFQcm92aWRlcihkYXRhUHJvdmlkZXIgPT4gZGF0YVByb3ZpZGVyLndpdGhHZXRBbGwoKHBhcmFtcywgc2VydmljZSkgPT4gYXBpU2VydmljZUdldEFsbChzZXJ2aWNlLCBzZXJ2aWNlR2V0QWxsRm4gYXMgYW55LCBwYXJhbXMpKSk7XG4gICAgYnVpbGRGbj8uKGJ1aWxkZXIpO1xuICAgIHJldHVybiBidWlsZGVyLmJ1aWxkKCk7XG59XG4iXX0=","import { Observable } from 'rxjs';\nimport { toObservable, valueToDefined } from '@mediusinc/mng-commons/core';\nimport { FilterTypeEnum } from '@mediusinc/mng-commons/filter';\nimport { lookupDataProvider } from '@mediusinc/mng-commons/form/api';\n/**\n * Maps a property type to its corresponding filter type enum and applies default\n * filter options if no custom options are provided. If the property type is not recognized,\n * it returns a filter type value of null.\n *\n * @param propertyType - The property type to convert.\n * @param [opts] - The custom options to use for conversion.\n */\nexport function convertPropertyTypeToFilterType(propertyType, opts) {\n let filterType;\n let returnOpts;\n switch (propertyType?.toLowerCase()) {\n case 'date':\n filterType = FilterTypeEnum.Date;\n returnOpts = opts?.dateOpts\n ? opts.dateOpts\n : {\n displayFormat: 'dd.MM.yyyy',\n applyFromDisplayFormat: true\n };\n break;\n case 'datetime':\n case 'date_time':\n case 'date-time':\n filterType = FilterTypeEnum.Date;\n returnOpts = opts?.dateOpts ? opts.dateOpts : { displayFormat: 'dd.MM.yyyy HH:mm', applyFromDisplayFormat: true };\n break;\n case 'string':\n case 'text':\n filterType = FilterTypeEnum.String;\n break;\n case 'enum':\n filterType = FilterTypeEnum.LookupEnum;\n break;\n case 'boolean':\n case 'bool':\n filterType = FilterTypeEnum.Boolean;\n break;\n case 'float':\n case 'double':\n case 'decimal':\n filterType = FilterTypeEnum.Number;\n returnOpts = opts?.numberOpts ? opts.numberOpts : { displayFormat: '1.1-30' };\n break;\n case 'integer':\n case 'int':\n case 'long':\n filterType = FilterTypeEnum.Number;\n returnOpts = opts?.numberOpts;\n break;\n default:\n filterType = null;\n }\n return { filterType, opts: returnOpts };\n}\n/**\n * Converts an object of properties and types into an array of filterable properties with the corresponding filter types and options.\n * @param properties - The object containing the properties.\n * @param [opts] - Custom filter options.\n */\nexport function convertPropertyToFilterGenericProperties(properties, opts) {\n return Object.keys(properties).reduce((filterableProperties, key) => {\n const { filterType, opts: filterOpts } = convertPropertyTypeToFilterType(properties[key], opts);\n if (filterType !== null) {\n filterableProperties.push({\n property: key,\n type: filterType,\n opts: filterOpts\n });\n }\n return filterableProperties;\n }, []);\n}\n/**\n * Maps an Observable of properties to filter generic properties.\n */\nexport function mapToFilterGenericProperties(opts) {\n return function (source) {\n return new Observable(subscriber => {\n return source.subscribe({\n next(value) {\n subscriber.next(convertPropertyToFilterGenericProperties(value, opts));\n },\n error: err => {\n subscriber.error(err);\n }\n });\n });\n };\n}\n/**\n * Creates a data provider for generic filter properties that can be used with the TableDescriptor's generic filter functionality.\n *\n * @param serviceType - The service to fetch the properties from.\n * @param lookupFn - The name of the service function to call for properties or function impl returning properties.\n * @param [opts] - Optional custom options for filter descriptors, such as date and number formatting.\n */\nexport function filterPropertyLookupProvider(serviceType, lookupFn, opts) {\n if (typeof lookupFn === 'function') {\n return lookupDataProvider({ service: serviceType }).withLookup((_, service) => toObservable(lookupFn(service)).pipe(mapToFilterGenericProperties(opts)));\n }\n else {\n return lookupDataProvider({ service: serviceType }).withLookup((_, service) => service[lookupFn]().pipe(mapToFilterGenericProperties(opts)));\n }\n}\n/**\n * Creates a data provider for generic filter value suggestions that can be used with the TableDescriptor's generic filter functionality.\n *\n * @param service - The service to use for suggesting filter values.\n * @param lookupFn - The function name of the service to call for suggestion or function impl returning suggestions.\n */\nexport function filterValueSuggestionLookupProvider(service, lookupFn) {\n if (typeof lookupFn === 'function') {\n return lookupDataProvider({ service }).withLookup((params, service, search) => lookupFn(service, valueToDefined(params?.filters?.['field']?.value), search));\n }\n else {\n return lookupDataProvider({ service }).withLookup((params, service, search) => service[lookupFn]({\n field: valueToDefined(params?.filters?.['field']?.value).toString(),\n text: search\n }));\n }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VuZXJpYy1maWx0ZXJzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vdGFibGV2aWV3L3NyYy9maWx0ZXIvZ2VuZXJpYy1maWx0ZXJzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLE9BQU8sRUFBQyxVQUFVLEVBQW1CLE1BQU0sTUFBTSxDQUFDO0FBRWxELE9BQU8sRUFBNkYsWUFBWSxFQUFFLGNBQWMsRUFBQyxNQUFNLDZCQUE2QixDQUFDO0FBQ3JLLE9BQU8sRUFBa0UsY0FBYyxFQUFDLE1BQU0sK0JBQStCLENBQUM7QUFDOUgsT0FBTyxFQUF5QixrQkFBa0IsRUFBQyxNQUFNLGlDQUFpQyxDQUFDO0FBTzNGOzs7Ozs7O0dBT0c7QUFDSCxNQUFNLFVBQVUsK0JBQStCLENBQzNDLFlBQXFCLEVBQ3JCLElBQW9DO0lBRXBDLElBQUksVUFBaUMsQ0FBQztJQUN0QyxJQUFJLFVBQWlFLENBQUM7SUFFdEUsUUFBUSxZQUFZLEVBQUUsV0FBVyxFQUFFLEVBQUUsQ0FBQztRQUNsQyxLQUFLLE1BQU07WUFDUCxVQUFVLEdBQUcsY0FBYyxDQUFDLElBQUksQ0FBQztZQUNqQyxVQUFVLEdBQUcsSUFBSSxFQUFFLFFBQVE7Z0JBQ3ZCLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUTtnQkFDZixDQUFDLENBQUM7b0JBQ0ksYUFBYSxFQUFFLFlBQVk7b0JBQzNCLHNCQUFzQixFQUFFLElBQUk7aUJBQy9CLENBQUM7WUFDUixNQUFNO1FBQ1YsS0FBSyxVQUFVLENBQUM7UUFDaEIsS0FBSyxXQUFXLENBQUM7UUFDakIsS0FBSyxXQUFXO1lBQ1osVUFBVSxHQUFHLGNBQWMsQ0FBQyxJQUFJLENBQUM7WUFDakMsVUFBVSxHQUFHLElBQUksRUFBRSxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEVBQUMsYUFBYSxFQUFFLGtCQUFrQixFQUFFLHNCQUFzQixFQUFFLElBQUksRUFBQyxDQUFDO1lB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eXBlfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHtPYnNlcnZhYmxlLCBPcGVyYXRvckZ1bmN0aW9ufSBmcm9tICdyeGpzJztcblxuaW1wb3J0IHtDbGFzc0Z1bmN0aW9uS2V5c1dpdGhQYXJhbUFuZFJldHVyblR5cGUsIENsYXNzRnVuY3Rpb25LZXlzV2l0aFJldHVyblR5cGUsIEl0ZW1Pck9ic2VydmFibGUsIHRvT2JzZXJ2YWJsZSwgdmFsdWVUb0RlZmluZWR9IGZyb20gJ0BtZWRpdXNpbmMvbW5nLWNvbW1vbnMvY29yZSc7XG5pbXBvcnQge0ZpbHRlckRhdGVPcHRzVHlwZSwgRmlsdGVyR2VuZXJpY1Byb3BlcnR5LCBGaWx0ZXJOdW1iZXJPcHRzVHlwZSwgRmlsdGVyVHlwZUVudW19IGZyb20gJ0BtZWRpdXNpbmMvbW5nLWNvbW1vbnMvZmlsdGVyJztcbmltcG9ydCB7TG9va3VwRGF0YVByb3ZpZGVySW5zdCwgbG9va3VwRGF0YVByb3ZpZGVyfSBmcm9tICdAbWVkaXVzaW5jL21uZy1jb21tb25zL2Zvcm0vYXBpJztcblxuZXhwb3J0IGludGVyZmFjZSBGaWx0ZXJHZW5lcmljUHJvcGVydHlPcHRzVHlwZSB7XG4gICAgbnVtYmVyT3B0cz86IEZpbHRlck51bWJlck9wdHNUeXBlO1xuICAgIGRhdGVPcHRzPzogRmlsdGVyRGF0ZU9wdHNUeXBlO1xufVxuXG4vKipcbiAqIE1hcHMgYSBwcm9wZXJ0eSB0eXBlIHRvIGl0cyBjb3JyZXNwb25kaW5nIGZpbHRlciB0eXBlIGVudW0gYW5kIGFwcGxpZXMgZGVmYXVsdFxuICogZmlsdGVyIG9wdGlvbnMgaWYgbm8gY3VzdG9tIG9wdGlvbnMgYXJlIHByb3ZpZGVkLiBJZiB0aGUgcHJvcGVydHkgdHlwZSBpcyBub3QgcmVjb2duaXplZCxcbiAqIGl0IHJldHVybnMgYSBmaWx0ZXIgdHlwZSB2YWx1ZSBvZiBudWxsLlxuICpcbiAqIEBwYXJhbSBwcm9wZXJ0eVR5cGUgLSBUaGUgcHJvcGVydHkgdHlwZSB0byBjb252ZXJ0LlxuICogQHBhcmFtIFtvcHRzXSAtIFRoZSBjdXN0b20gb3B0aW9ucyB0byB1c2UgZm9yIGNvbnZlcnNpb24uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjb252ZXJ0UHJvcGVydHlUeXBlVG9GaWx0ZXJUeXBlKFxuICAgIHByb3BlcnR5VHlwZT86IHN0cmluZyxcbiAgICBvcHRzPzogRmlsdGVyR2VuZXJpY1Byb3BlcnR5T3B0c1R5cGVcbik6IHtmaWx0ZXJUeXBlOiBGaWx0ZXJUeXBlRW51bSB8IG51bGw7IG9wdHM/OiBGaWx0ZXJEYXRlT3B0c1R5cGUgfCBGaWx0ZXJOdW1iZXJPcHRzVHlwZX0ge1xuICAgIGxldCBmaWx0ZXJUeXBlOiBGaWx0ZXJUeXBlRW51bSB8IG51bGw7XG4gICAgbGV0IHJldHVybk9wdHM6IEZpbHRlckRhdGVPcHRzVHlwZSB8IEZpbHRlck51bWJlck9wdHNUeXBlIHwgdW5kZWZpbmVkO1xuXG4gICAgc3dpdGNoIChwcm9wZXJ0eVR5cGU/LnRvTG93ZXJDYXNlKCkpIHtcbiAgICAgICAgY2FzZSAnZGF0ZSc6XG4gICAgICAgICAgICBmaWx0ZXJUeXBlID0gRmlsdGVyVHlwZUVudW0uRGF0ZTtcbiAgICAgICAgICAgIHJldHVybk9wdHMgPSBvcHRzPy5kYXRlT3B0c1xuICAgICAgICAgICAgICAgID8gb3B0cy5kYXRlT3B0c1xuICAgICAgICAgICAgICAgIDoge1xuICAgICAgICAgICAgICAgICAgICAgIGRpc3BsYXlGb3JtYXQ6ICdkZC5NTS55eXl5JyxcbiAgICAgICAgICAgICAgICAgICAgICBhcHBseUZyb21EaXNwbGF5Rm9ybWF0OiB0cnVlXG4gICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ2RhdGV0aW1lJzpcbiAgICAgICAgY2FzZSAnZGF0ZV90aW1lJzpcbiAgICAgICAgY2FzZSAnZGF0ZS10aW1lJzpcbiAgICAgICAgICAgIGZpbHRlclR5cGUgPSBGaWx0ZXJUeXBlRW51bS5EYXRlO1xuICAgICAgICAgICAgcmV0dXJuT3B0cyA9IG9wdHM/LmRhdGVPcHRzID8gb3B0cy5kYXRlT3B0cyA6IHtkaXNwbGF5Rm9ybWF0OiAnZGQuTU0ueXl5eSBISDptbScsIGFwcGx5RnJvbURpc3BsYXlGb3JtYXQ6IHRydWV9O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ3N0cmluZyc6XG4gICAgICAgIGNhc2UgJ3RleHQnOlxuICAgICAgICAgICAgZmlsdGVyVHlwZSA9IEZpbHRlclR5cGVFbnVtLlN0cmluZztcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdlbnVtJzpcbiAgICAgICAgICAgIGZpbHRlclR5cGUgPSBGaWx0ZXJUeXBlRW51bS5Mb29rdXBFbnVtO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ2Jvb2xlYW4nOlxuICAgICAgICBjYXNlICdib29sJzpcbiAgICAgICAgICAgIGZpbHRlclR5cGUgPSBGaWx0ZXJUeXBlRW51bS5Cb29sZWFuO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ2Zsb2F0JzpcbiAgICAgICAgY2FzZSAnZG91YmxlJzpcbiAgICAgICAgY2FzZSAnZGVjaW1hbCc6XG4gICAgICAgICAgICBmaWx0ZXJUeXBlID0gRmlsdGVyVHlwZUVudW0uTnVtYmVyO1xuICAgICAgICAgICAgcmV0dXJuT3B0cyA9IG9wdHM/Lm51bWJlck9wdHMgPyBvcHRzLm51bWJlck9wdHMgOiB7ZGlzcGxheUZvcm1hdDogJzEuMS0zMCd9O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ2ludGVnZXInOlxuICAgICAgICBjYXNlICdpbnQnOlxuICAgICAgICBjYXNlICdsb25nJzpcbiAgICAgICAgICAgIGZpbHRlclR5cGUgPSBGaWx0ZXJUeXBlRW51bS5OdW1iZXI7XG4gICAgICAgICAgICByZXR1cm5PcHRzID0gb3B0cz8ubnVtYmVyT3B0cztcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgZmlsdGVyVHlwZSA9IG51bGw7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtmaWx0ZXJUeXBlLCBvcHRzOiByZXR1cm5PcHRzfTtcbn1cblxudHlwZSBGaWx0ZXJHZW5lcmljUHJvcGVydGllc01ldGFkYXRhVHlwZSA9IHtba2V5OiBzdHJpbmddOiBzdHJpbmcgfCB1bmRlZmluZWR9O1xuXG4vKipcbiAqIENvbnZlcnRzIGFuIG9iamVjdCBvZiBwcm9wZXJ0aWVzIGFuZCB0eXBlcyBpbnRvIGFuIGFycmF5IG9mIGZpbHRlcmFibGUgcHJvcGVydGllcyB3aXRoIHRoZSBjb3JyZXNwb25kaW5nIGZpbHRlciB0eXBlcyBhbmQgb3B0aW9ucy5cbiAqIEBwYXJhbSBwcm9wZXJ0aWVzIC0gVGhlIG9iamVjdCBjb250YWluaW5nIHRoZSBwcm9wZXJ0aWVzLlxuICogQHBhcmFtIFtvcHRzXSAtIEN1c3RvbSBmaWx0ZXIgb3B0aW9ucy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvbnZlcnRQcm9wZXJ0eVRvRmlsdGVyR2VuZXJpY1Byb3BlcnRpZXMocHJvcGVydGllczogRmlsdGVyR2VuZXJpY1Byb3BlcnRpZXNNZXRhZGF0YVR5cGUsIG9wdHM/OiBGaWx0ZXJHZW5lcmljUHJvcGVydHlPcHRzVHlwZSk6IEZpbHRlckdlbmVyaWNQcm9wZXJ0eVtdIHtcbiAgICByZXR1cm4gT2JqZWN0LmtleXMocHJvcGVydGllcykucmVkdWNlPEFycmF5PEZpbHRlckdlbmVyaWNQcm9wZXJ0eT4+KChmaWx0ZXJhYmxlUHJvcGVydGllcywga2V5KSA9PiB7XG4gICAgICAgIGNvbnN0IHtmaWx0ZXJUeXBlLCBvcHRzOiBmaWx0ZXJPcHRzfSA9IGNvbnZlcnRQcm9wZXJ0eVR5cGVUb0ZpbHRlclR5cGUocHJvcGVydGllc1trZXldLCBvcHRzKTtcbiAgICAgICAgaWYgKGZpbHRlclR5cGUgIT09IG51bGwpIHtcbiAgICAgICAgICAgIGZpbHRlcmFibGVQcm9wZXJ0aWVzLnB1c2goe1xuICAgICAgICAgICAgICAgIHByb3BlcnR5OiBrZXksXG4gICAgICAgICAgICAgICAgdHlwZTogZmlsdGVyVHlwZSxcbiAgICAgICAgICAgICAgICBvcHRzOiBmaWx0ZXJPcHRzXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmlsdGVyYWJsZVByb3BlcnRpZXM7XG4gICAgfSwgW10pO1xufVxuXG4vKipcbiAqIE1hcHMgYW4gT2JzZXJ2YWJsZSBvZiBwcm9wZXJ0aWVzIHRvIGZpbHRlciBnZW5lcmljIHByb3BlcnRpZXMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtYXBUb0ZpbHRlckdlbmVyaWNQcm9wZXJ0aWVzKG9wdHM/OiBGaWx0ZXJHZW5lcmljUHJvcGVydHlPcHRzVHlwZSk6IE9wZXJhdG9yRnVuY3Rpb248RmlsdGVyR2VuZXJpY1Byb3BlcnRpZXNNZXRhZGF0YVR5cGUsIEZpbHRlckdlbmVyaWNQcm9wZXJ0eVtdPiB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChzb3VyY2U6IE9ic2VydmFibGU8RmlsdGVyR2VuZXJpY1Byb3BlcnRpZXNNZXRhZGF0YVR5cGU+KTogT2JzZXJ2YWJsZTxGaWx0ZXJHZW5lcmljUHJvcGVydHlbXT4ge1xuICAgICAgICByZXR1cm4gbmV3IE9ic2VydmFibGUoc3Vic2NyaWJlciA9PiB7XG4gICAgICAgICAgICByZXR1cm4gc291cmNlLnN1YnNjcmliZSh7XG4gICAgICAgICAgICAgICAgbmV4dCh2YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICBzdWJzY3JpYmVyLm5leHQoY29udmVydFByb3BlcnR5VG9GaWx0ZXJHZW5lcmljUHJvcGVydGllcyh2YWx1ZSwgb3B0cykpO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgZXJyb3I6IGVyciA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHN1YnNjcmliZXIuZXJyb3IoZXJyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfTtcbn1cblxudHlwZSBGaWx0ZXJQcm9wZXJ0eUxvb2t1cEZuVHlwZTxTZXJ2aWNlPiA9IChzZXJ2aWNlOiBTZXJ2aWNlKSA9PiBJdGVtT3JPYnNlcnZhYmxlPEZpbHRlckdlbmVyaWNQcm9wZXJ0aWVzTWV0YWRhdGFUeXBlPjtcblxuLyoqXG4gKiBDcmVhdGVzIGEgZGF0YSBwcm92aWRlciBmb3IgZ2VuZXJpYyBmaWx0ZXIgcHJvcGVydGllcyB0aGF0IGNhbiBiZSB1c2VkIHdpdGggdGhlIFRhYmxlRGVzY3JpcHRvcidzIGdlbmVyaWMgZmlsdGVyIGZ1bmN0aW9uYWxpdHkuXG4gKlxuICogQHBhcmFtIHNlcnZpY2VUeXBlIC0gVGhlIHNlcnZpY2UgdG8gZmV0Y2ggdGhlIHByb3BlcnRpZXMgZnJvbS5cbiAqIEBwYXJhbSBsb29rdXBGbiAtIFRoZSBuYW1lIG9mIHRoZSBzZXJ2aWNlIGZ1bmN0aW9uIHRvIGNhbGwgZm9yIHByb3BlcnRpZXMgb3IgZnVuY3Rpb24gaW1wbCByZXR1cm5pbmcgcHJvcGVydGllcy5cbiAqIEBwYXJhbSBbb3B0c10gLSBPcHRpb25hbCBjdXN0b20gb3B0aW9ucyBmb3IgZmlsdGVyIGRlc2NyaXB0b3JzLCBzdWNoIGFzIGRhdGUgYW5kIG51bWJlciBmb3JtYXR0aW5nLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZmlsdGVyUHJvcGVydHlMb29rdXBQcm92aWRlcjxTZXJ2aWNlPihcbiAgICBzZXJ2aWNlVHlwZTogVHlwZTxTZXJ2aWNlPixcbiAgICBsb29rdXBGbjogRmlsdGVyUHJvcGVydHlMb29rdXBGblR5cGU8U2VydmljZT4gfCBDbGFzc0Z1bmN0aW9uS2V5c1dpdGhSZXR1cm5UeXBlPFNlcnZpY2UsIE9ic2VydmFibGU8RmlsdGVyR2VuZXJpY1Byb3BlcnRpZXNNZXRhZGF0YVR5cGU+PixcbiAgICBvcHRzPzogRmlsdGVyR2VuZXJpY1Byb3BlcnR5T3B0c1R5cGVcbikge1xuICAgIGlmICh0eXBlb2YgbG9va3VwRm4gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgcmV0dXJuIGxvb2t1cERhdGFQcm92aWRlcjxGaWx0ZXJHZW5lcmljUHJvcGVydHksIFNlcnZpY2U+KHtzZXJ2aWNlOiBzZXJ2aWNlVHlwZX0pLndpdGhMb29rdXAoKF8sIHNlcnZpY2UpID0+XG4gICAgICAgICAgICB0b09ic2VydmFibGUobG9va3VwRm4oc2VydmljZSkpLnBpcGUobWFwVG9GaWx0ZXJHZW5lcmljUHJvcGVydGllcyhvcHRzKSlcbiAgICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gbG9va3VwRGF0YVByb3ZpZGVyPEZpbHRlckdlbmVyaWNQcm9wZXJ0eSwgU2VydmljZT4oe3NlcnZpY2U6IHNlcnZpY2VUeXBlfSkud2l0aExvb2t1cCgoXywgc2VydmljZSkgPT5cbiAgICAgICAgICAgIChzZXJ2aWNlIGFzIGFueSlbbG9va3VwRm5dKCkucGlwZShtYXBUb0ZpbHRlckdlbmVyaWNQcm9wZXJ0aWVzKG9wdHMpKVxuICAgICAgICApO1xuICAgIH1cbn1cblxudHlwZSBGaWx0ZXJWYWx1ZVN1Z2dlc3Rpb25Mb29rdXBGblR5cGU8U2VydmljZT4gPSAoc2VydmljZTogU2VydmljZSwgZmllbGQ6IHN0cmluZywgc2VhcmNoPzogc3RyaW5nKSA9PiBJdGVtT3JPYnNlcnZhYmxlPHN0cmluZ1tdPjtcblxuLyoqXG4gKiBDcmVhdGVzIGEgZGF0YSBwcm92aWRlciBmb3IgZ2VuZXJpYyBmaWx0ZXIgdmFsdWUgc3VnZ2VzdGlvbnMgdGhhdCBjYW4gYmUgdXNlZCB3aXRoIHRoZSBUYWJsZURlc2NyaXB0b3IncyBnZW5lcmljIGZpbHRlciBmdW5jdGlvbmFsaXR5LlxuICpcbiAqIEBwYXJhbSBzZXJ2aWNlIC0gVGhlIHNlcnZpY2UgdG8gdXNlIGZvciBzdWdnZXN0aW5nIGZpbHRlciB2YWx1ZXMuXG4gKiBAcGFyYW0gbG9va3VwRm4gLSBUaGUgZnVuY3Rpb24gbmFtZSBvZiB0aGUgc2VydmljZSB0byBjYWxsIGZvciBzdWdnZXN0aW9uIG9yIGZ1bmN0aW9uIGltcGwgcmV0dXJuaW5nIHN1Z2dlc3Rpb25zLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZmlsdGVyVmFsdWVTdWdnZXN0aW9uTG9va3VwUHJvdmlkZXI8U2VydmljZT4oXG4gICAgc2VydmljZTogVHlwZTxTZXJ2aWNlPixcbiAgICBsb29rdXBGbjogRmlsdGVyVmFsdWVTdWdnZXN0aW9uTG9va3VwRm5UeXBlPFNlcnZpY2U+IHwgQ2xhc3NGdW5jdGlvbktleXNXaXRoUGFyYW1BbmRSZXR1cm5UeXBlPFNlcnZpY2UsIHtmaWVsZDogc3RyaW5nOyB0ZXh0Pzogc3RyaW5nfSwgT2JzZXJ2YWJsZTxzdHJpbmdbXT4+XG4pOiBMb29rdXBEYXRhUHJvdmlkZXJJbnN0PHN0cmluZywgU2VydmljZSwgc3RyaW5nLCAnZmllbGQnPiB7XG4gICAgaWYgKHR5cGVvZiBsb29rdXBGbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICByZXR1cm4gbG9va3VwRGF0YVByb3ZpZGVyPHN0cmluZywgU2VydmljZSwgc3RyaW5nLCAnZmllbGQnPih7c2VydmljZX0pLndpdGhMb29rdXAoKHBhcmFtcywgc2VydmljZSwgc2VhcmNoPykgPT5cbiAgICAgICAgICAgIGxvb2t1cEZuKHNlcnZpY2UsIHZhbHVlVG9EZWZpbmVkKHBhcmFtcz8uZmlsdGVycz8uWydmaWVsZCddPy52YWx1ZSkgYXMgc3RyaW5nLCBzZWFyY2gpXG4gICAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGxvb2t1cERhdGFQcm92aWRlcjxzdHJpbmcsIFNlcnZpY2UsIHN0cmluZywgJ2ZpZWxkJz4oe3NlcnZpY2V9KS53aXRoTG9va3VwKChwYXJhbXMsIHNlcnZpY2UsIHNlYXJjaD8pID0+XG4gICAgICAgICAgICAoc2VydmljZSBhcyBhbnkpW2xvb2t1cEZuXSh7XG4gICAgICAgICAgICAgICAgZmllbGQ6IHZhbHVlVG9EZWZpbmVkKHBhcmFtcz8uZmlsdGVycz8uWydmaWVsZCddPy52YWx1ZSkudG9TdHJpbmcoKSxcbiAgICAgICAgICAgICAgICB0ZXh0OiBzZWFyY2hcbiAgICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgfVxufVxuIl19","// schema\nexport * from './schema/columns-from-schema';\nexport * from './schema/enum-from-schema';\nexport * from './schema/fields-from-schema';\n// helpers\nexport * from './helpers/lookup-get-all-create';\nexport * from './helpers/tableview-get-all-params-create';\n// filter\nexport * from './filter/generic-filters';\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi90YWJsZXZpZXcvc3JjL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFNBQVM7QUFDVCxjQUFjLDhCQUE4QixDQUFDO0FBQzdDLGNBQWMsMkJBQTJCLENBQUM7QUFDMUMsY0FBYyw2QkFBNkIsQ0FBQztBQUU1QyxVQUFVO0FBQ1YsY0FBYyxpQ0FBaUMsQ0FBQztBQUNoRCxjQUFjLDJDQUEyQyxDQUFDO0FBRTFELFNBQVM7QUFDVCxjQUFjLDBCQUEwQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gc2NoZW1hXG5leHBvcnQgKiBmcm9tICcuL3NjaGVtYS9jb2x1bW5zLWZyb20tc2NoZW1hJztcbmV4cG9ydCAqIGZyb20gJy4vc2NoZW1hL2VudW0tZnJvbS1zY2hlbWEnO1xuZXhwb3J0ICogZnJvbSAnLi9zY2hlbWEvZmllbGRzLWZyb20tc2NoZW1hJztcblxuLy8gaGVscGVyc1xuZXhwb3J0ICogZnJvbSAnLi9oZWxwZXJzL2xvb2t1cC1nZXQtYWxsLWNyZWF0ZSc7XG5leHBvcnQgKiBmcm9tICcuL2hlbHBlcnMvdGFibGV2aWV3LWdldC1hbGwtcGFyYW1zLWNyZWF0ZSc7XG5cbi8vIGZpbHRlclxuZXhwb3J0ICogZnJvbSAnLi9maWx0ZXIvZ2VuZXJpYy1maWx0ZXJzJztcbiJdfQ==","/**\n * Generated bundle index. Do not edit.\n */\nexport * from './index';\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVkaXVzaW5jLW1uZy1jb21tb25zLWRhdGEtYXBpLXRhYmxldmlldy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3RhYmxldmlldy9zcmMvbWVkaXVzaW5jLW1uZy1jb21tb25zLWRhdGEtYXBpLXRhYmxldmlldy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUVILGNBQWMsU0FBUyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBHZW5lcmF0ZWQgYnVuZGxlIGluZGV4LiBEbyBub3QgZWRpdC5cbiAqL1xuXG5leHBvcnQgKiBmcm9tICcuL2luZGV4JztcbiJdfQ=="],"names":[],"mappings":";;;;;;;;;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAAS,mBAAmB,CAAC,UAAU,EAAE;AAChD,IAAI,MAAM,OAAO,GAAG,EAAE;AACtB,IAAI,UAAU,CAAC;AACf,SAAS,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,MAAM,EAAE,KAAK,EAAE,CAAC,EAAE,QAAQ,EAAE,UAAU,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC;AAC5E,SAAS,OAAO,CAAC,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK;AAC1C,QAAQ,MAAM,eAAe,GAAG,KAAK;AACrC,QAAQ,OAAO,CAAC,QAAQ,CAAC,GAAG,eAAe;AAC3C,QAAQ,IAAI,OAAO,eAAe,KAAK,QAAQ,IAAI,OAAO,CAAC,eAAe,CAAC,IAAI,IAAI;AACnF,YAAY,OAAO,CAAC,eAAe,CAAC,GAAG,QAAQ;AAC/C,IAAI,CAAC,CAAC;AACN,IAAI,OAAO,gBAAgB,CAAC,OAAO,EAAE,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;AACzE;;ACrBO,SAAS,kCAAkC,CAAC,eAAe,EAAE;AACpE,IAAI,OAAO,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,MAAM,CAAC,GAAG,IAAI;AACtD,QAAQ,MAAM,cAAc,GAAG,eAAe,CAAC,GAAG,CAAC;AACnD,QAAQ,OAAO,CAAC,QAAQ,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC,QAAQ,CAAC,cAAc,CAAC,IAAI,CAAC;AACnH,IAAI,CAAC,CAAC;AACN;;ACHA,MAAM,aAAa,GAAG,KAAK,IAAI;AAC/B,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;AACnC,QAAQ,MAAM,QAAQ,GAAG,KAAK;AAC9B,QAAQ,QAAQ,QAAQ,CAAC,OAAO,CAAC;AACjC,YAAY,QAAQ,CAAC,MAAM,CAAC;AAC5B,YAAY,QAAQ,CAAC,OAAO,CAAC;AAC7B,YAAY,QAAQ,CAAC,MAAM,CAAC;AAC5B,YAAY,QAAQ,CAAC,OAAO,CAAC;AAC7B,YAAY,QAAQ,CAAC,IAAI,CAAC;AAC1B,YAAY,QAAQ,CAAC,MAAM,CAAC;AAC5B,YAAY,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;AAC9C,IAAI;AACJ,SAAS;AACT,QAAQ,OAAO,KAAK;AACpB,IAAI;AACJ,CAAC;AACD;AACA;AACA;AACA;AACA;AACO,MAAM,oBAAoB,CAAC;AAClC,IAAI,WAAW,CAAC,UAAU,EAAE,MAAM,EAAE,IAAI,EAAE;AAC1C,QAAQ,IAAI,CAAC,UAAU,GAAG,UAAU;AACpC,QAAQ,IAAI,CAAC,MAAM,GAAG,MAAM;AAC5B,QAAQ,IAAI,CAAC,IAAI,GAAG,IAAI;AACxB,IAAI;AACJ,IAAI,gBAAgB,CAAC,QAAQ,EAAE,IAAI,EAAE;AACrC,QAAQ,OAAO;AACf,YAAY,GAAG,IAAI,CAAC,IAAI;AACxB,YAAY,UAAU,EAAE,IAAI,CAAC,IAAI,EAAE,WAAW,GAAG,QAAQ,CAAC;AAC1D,YAAY,MAAM,EAAE,IAAI,EAAE,OAAO,GAAG,QAAQ,CAAC,IAAI,IAAI,CAAC,IAAI,EAAE,OAAO,GAAG,QAAQ,CAAC;AAC/E,YAAY,SAAS,EAAE,IAAI,EAAE,UAAU,GAAG,QAAQ,CAAC,IAAI,IAAI,CAAC,IAAI,EAAE,UAAU,GAAG,QAAQ,CAAC;AACxF,YAAY,UAAU,EAAE,IAAI,EAAE,WAAW,GAAG,QAAQ,CAAC,IAAI,IAAI,CAAC,IAAI,EAAE,WAAW,GAAG,QAAQ,CAAC;AAC3F,YAAY,GAAG;AACf,SAAS;AACT,IAAI;AACJ,IAAI,eAAe,CAAC,QAAQ,EAAE,IAAI,EAAE;AACpC,QAAQ,OAAO;AACf,YAAY,GAAG,IAAI,CAAC,IAAI;AACxB,YAAY,UAAU,EAAE,IAAI,CAAC,IAAI,EAAE,WAAW,GAAG,QAAQ,CAAC;AAC1D,YAAY,MAAM,EAAE,IAAI,CAAC,IAAI,EAAE,OAAO,GAAG,QAAQ,CAAC;AAClD,YAAY,SAAS,EAAE,IAAI,CAAC,IAAI,EAAE,UAAU,GAAG,QAAQ,CAAC;AACxD,YAAY,UAAU,EAAE,IAAI,CAAC,IAAI,EAAE,WAAW,GAAG,QAAQ,CAAC;AAC1D,YAAY,GAAG;AACf,SAAS;AACT,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,GAAG,CAAC,QAAQ,EAAE,IAAI,EAAE;AACxB,QAAQ,OAAO,mBAAmB,CAAC,IAAI,CAAC,UAAU,EAAE,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,IAAI,CAAC,eAAe,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;AACrI,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,UAAU,CAAC,IAAI,EAAE;AACrB,QAAQ,IAAI,CAAC,UAAU,CAAC,SAAS,EAAE,IAAI,CAAC;AACxC,QAAQ,OAAO,IAAI;AACnB,IAAI;AACJ,IAAI,OAAO,CAAC,UAAU,EAAE,GAAG,UAAU,EAAE;AACvC,QAAQ,IAAI,OAAO,UAAU,KAAK,QAAQ,EAAE;AAC5C,YAAY,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,MAAM,KAAK,CAAC,GAAG,SAAS,GAAG,UAAU,EAAE,UAAU,CAAC;AACzF,QAAQ;AACR,aAAa;AACb,YAAY,IAAI,CAAC,UAAU,CAAC,CAAC,UAAU,EAAE,GAAG,UAAU,CAAC,CAAC;AACxD,QAAQ;AACR,QAAQ,OAAO,IAAI;AACnB,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,aAAa,CAAC,QAAQ,EAAE,cAAc,EAAE,IAAI,EAAE;AAClD,QAAQ,OAAO,mBAAmB,CAAC,IAAI,CAAC,UAAU,EAAE,QAAQ,EAAE,cAAc,EAAE,IAAI,CAAC,eAAe,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;AACnH,IAAI;AACJ,IAAI,UAAU,CAAC,UAAU,EAAE,IAAI,EAAE;AACjC,QAAQ,MAAM,aAAa,GAAG,UAAU,IAAI,kCAAkC,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC;AACtG,QAAQ,IAAI,aAAa,EAAE;AAC3B,YAAY,aAAa,CAAC,OAAO,CAAC,QAAQ,IAAI;AAC9C,gBAAgB,mBAAmB,CAAC,IAAI,CAAC,UAAU,EAAE,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,IAAI,CAAC,gBAAgB,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;AACvI,YAAY,CAAC,CAAC;AACd,QAAQ;AACR,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAAS,iBAAiB,CAAC,UAAU,EAAE,MAAM,EAAE,IAAI,EAAE;AAC5D,IAAI,OAAO,IAAI,oBAAoB,CAAC,UAAU,EAAE,MAAM,EAAE,IAAI,CAAC;AAC7D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAAS,mBAAmB,CAAC,UAAU,EAAE,QAAQ,EAAE,cAAc,EAAE,IAAI,EAAE;AAChF,IAAI,MAAM,YAAY,GAAG,IAAI,EAAE,UAAU,IAAI,cAAc,EAAE,IAAI;AACjE,IAAI,MAAM,MAAM,GAAG,UAAU,CAAC,SAAS,CAAC,QAAQ,CAAC;AACjD;AACA,IAAI,QAAQ,YAAY;AACxB,QAAQ,KAAK,QAAQ;AACrB,YAAY,MAAM,CAAC,QAAQ,CAAC;AAC5B,gBAAgB,iBAAiB,EAAE,IAAI,EAAE,uBAAuB;AAChE,gBAAgB,iBAAiB,EAAE,IAAI,EAAE,uBAAuB;AAChE,gBAAgB,gBAAgB,EAAE,IAAI,EAAE;AACxC,aAAa,CAAC;AACd,YAAY;AACZ,QAAQ,KAAK,SAAS;AACtB,YAAY,MAAM,CAAC,SAAS,CAAC,SAAS,EAAE,SAAS,EAAE,IAAI,CAAC;AACxD,YAAY;AACZ,QAAQ,KAAK,MAAM;AACnB,YAAY,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,UAAU,IAAI,YAAY,CAAC;AAC3D,YAAY;AACZ,QAAQ,KAAK,MAAM;AACnB;AACA,YAAY,MAAM,SAAS,GAAG,IAAI,EAAE,UAAU,GAAG,mBAAmB,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,IAAI,EAAE,SAAS;AACvG,YAAY,IAAI,SAAS,EAAE;AAC3B,gBAAgB,MAAM,CAAC,YAAY,CAAC,SAAS,CAAC;AAC9C,YAAY;AACZ,YAAY;AACZ,QAAQ,KAAK,WAAW;AACxB,YAAY,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,cAAc,IAAI,kBAAkB,CAAC;AACrE,YAAY;AACZ,QAAQ,KAAK,UAAU;AACvB,YAAY,MAAM,CAAC,UAAU,CAAC;AAC9B,gBAAgB,QAAQ,EAAE,IAAI,EAAE,QAAQ;AACxC,gBAAgB,eAAe,EAAE,IAAI,EAAE,eAAe;AACtD,gBAAgB,gBAAgB,EAAE,IAAI,EAAE,gBAAgB;AACxD,gBAAgB,iBAAiB,EAAE,IAAI,EAAE,uBAAuB;AAChE,gBAAgB,iBAAiB,EAAE,IAAI,EAAE,uBAAuB;AAChE,gBAAgB,gBAAgB,EAAE,IAAI,EAAE;AACxC,aAAa,CAAC;AACd,YAAY;AACZ,QAAQ,KAAK,QAAQ;AACrB,YAAY,MAAM,CAAC,UAAU,CAAC,aAAa,CAAC;AAC5C,YAAY;AACZ;AACA;AACA,IAAI,IAAI,IAAI,EAAE,MAAM;AACpB,QAAQ,MAAM,CAAC,UAAU,CAAC,IAAI,EAAE,MAAM,CAAC;AACvC,IAAI,OAAO,MAAM;AACjB;;AC5KA;AACA;AACA;AACA;AACA;AACO,MAAM,mBAAmB,CAAC;AACjC,IAAI,WAAW,CAAC,UAAU,EAAE,MAAM,EAAE,IAAI,EAAE;AAC1C,QAAQ,IAAI,CAAC,UAAU,GAAG,UAAU;AACpC,QAAQ,IAAI,CAAC,MAAM,GAAG,MAAM;AAC5B,QAAQ,IAAI,CAAC,IAAI,GAAG,IAAI;AACxB,IAAI;AACJ,IAAI,oBAAoB,CAAC,QAAQ,EAAE,IAAI,EAAE;AACzC,QAAQ,OAAO;AACf,YAAY,GAAG,IAAI,CAAC,IAAI;AACxB,YAAY,SAAS,EAAE,IAAI,EAAE,UAAU,GAAG,QAAQ,CAAC,IAAI,IAAI,CAAC,IAAI,EAAE,UAAU,GAAG,QAAQ,CAAC;AACxF,YAAY,SAAS,EAAE,IAAI,EAAE,UAAU,GAAG,QAAQ,CAAC,IAAI,IAAI,CAAC,IAAI,EAAE,UAAU,GAAG,QAAQ,CAAC;AACxF,YAAY,UAAU,EAAE,IAAI,EAAE,WAAW,GAAG,QAAQ,CAAC,IAAI,IAAI,CAAC,IAAI,EAAE,WAAW,GAAG,QAAQ,CAAC;AAC3F,YAAY,GAAG;AACf,SAAS;AACT,IAAI;AACJ,IAAI,mBAAmB,CAAC,QAAQ,EAAE,IAAI,EAAE;AACxC,QAAQ,OAAO;AACf,YAAY,GAAG,IAAI,CAAC,IAAI;AACxB,YAAY,SAAS,EAAE,IAAI,CAAC,IAAI,EAAE,UAAU,GAAG,QAAQ,CAAC;AACxD,YAAY,SAAS,EAAE,IAAI,CAAC,IAAI,EAAE,UAAU,GAAG,QAAQ,CAAC;AACxD,YAAY,UAAU,EAAE,IAAI,CAAC,IAAI,EAAE,WAAW,GAAG,QAAQ,CAAC;AAC1D,YAAY,GAAG;AACf,SAAS;AACT,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,GAAG,CAAC,QAAQ,EAAE,IAAI,EAAE;AACxB,QAAQ,OAAO,uBAAuB,CAAC,IAAI,CAAC,UAAU,EAAE,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,IAAI,CAAC,mBAAmB,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;AAC7I,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,UAAU,CAAC,IAAI,EAAE;AACrB,QAAQ,IAAI,CAAC,SAAS,CAAC,SAAS,EAAE,IAAI,CAAC;AACvC,QAAQ,OAAO,IAAI;AACnB,IAAI;AACJ,IAAI,OAAO,CAAC,UAAU,EAAE,GAAG,UAAU,EAAE;AACvC,QAAQ,IAAI,OAAO,UAAU,KAAK,QAAQ,EAAE;AAC5C,YAAY,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,MAAM,KAAK,CAAC,GAAG,SAAS,GAAG,UAAU,EAAE,UAAU,CAAC;AACxF,QAAQ;AACR,aAAa;AACb,YAAY,IAAI,CAAC,SAAS,CAAC,UAAU,KAAK,SAAS,GAAG,UAAU,GAAG,CAAC,UAAU,EAAE,GAAG,UAAU,CAAC,CAAC;AAC/F,QAAQ;AACR,QAAQ,OAAO,IAAI;AACnB,IAAI;AACJ,IAAI,SAAS,CAAC,UAAU,EAAE,IAAI,EAAE;AAChC,QAAQ,MAAM,aAAa,GAAG,UAAU,IAAI,kCAAkC,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC;AACtG,QAAQ,aAAa,CAAC,OAAO,CAAC,QAAQ,IAAI;AAC1C,YAAY,uBAAuB,CAAC,IAAI,CAAC,UAAU,EAAE,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,IAAI,CAAC,oBAAoB,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;AAC3I,QAAQ,CAAC,CAAC;AACV,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,aAAa,CAAC,QAAQ,EAAE,cAAc,EAAE,IAAI,EAAE;AAClD,QAAQ,OAAO,uBAAuB,CAAC,IAAI,CAAC,UAAU,EAAE,QAAQ,EAAE,cAAc,EAAE,IAAI,CAAC,mBAAmB,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;AAC3H,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,OAAO,CAAC,QAAQ,EAAE,OAAO,EAAE;AAC/B,QAAQ,IAAI,CAAC,OAAO,EAAE;AACtB,YAAY,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,UAAU,GAAG,QAAQ,CAAC,IAAI,IAAI,CAAC,IAAI,EAAE,WAAW,GAAG,QAAQ,CAAC;AAC7F,QAAQ;AACR,QAAQ,IAAI,CAAC,OAAO,EAAE;AACtB,YAAY,MAAM,IAAI,oBAAoB,CAAC,CAAC,+BAA+B,EAAE,QAAQ,CAAC,wDAAwD,CAAC,CAAC;AAChJ,QAAQ;AACR,QAAQ,OAAO,4BAA4B,CAAC,IAAI,CAAC,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;AACjH,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,iBAAiB,CAAC,QAAQ,EAAE,OAAO,EAAE,cAAc,EAAE;AACzD,QAAQ,IAAI,CAAC,OAAO,EAAE;AACtB,YAAY,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,UAAU,GAAG,QAAQ,CAAC,IAAI,IAAI,CAAC,IAAI,EAAE,WAAW,GAAG,QAAQ,CAAC;AAC7F,QAAQ;AACR,QAAQ,IAAI,CAAC,OAAO,EAAE;AACtB,YAAY,MAAM,IAAI,oBAAoB,CAAC,CAAC,+BAA+B,EAAE,QAAQ,CAAC,wDAAwD,CAAC,CAAC;AAChJ,QAAQ;AACR,QAAQ,OAAO,4BAA4B,CAAC,IAAI,CAAC,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,cAAc,CAAC;AAC/F,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,SAAS,CAAC,QAAQ,EAAE,QAAQ,EAAE;AAClC,QAAQ,MAAM,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC,cAAc,CAAC,QAAQ,EAAE,EAAE,eAAe,EAAE,QAAQ,EAAE,CAAC;AAC7F,QAAQ,8BAA8B,CAAC,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;AAC/E,QAAQ,OAAO,KAAK;AACpB,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,mBAAmB,CAAC,QAAQ,EAAE,QAAQ,EAAE,cAAc,EAAE;AAC5D,QAAQ,MAAM,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC,cAAc,CAAC,QAAQ,EAAE,EAAE,eAAe,EAAE,QAAQ,EAAE,CAAC;AAC7F,QAAQ,8BAA8B,CAAC,KAAK,EAAE,cAAc,CAAC;AAC7D,QAAQ,OAAO,KAAK;AACpB,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,aAAa,CAAC,QAAQ,EAAE,mBAAmB,EAAE;AACjD,QAAQ,MAAM,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC,kBAAkB,CAAC,QAAQ,EAAE,mBAAmB,CAAC;AACvF,QAAQ,8BAA8B,CAAC,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;AAC/E,QAAQ,OAAO,KAAK;AACpB,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,uBAAuB,CAAC,QAAQ,EAAE,mBAAmB,EAAE,cAAc,EAAE;AAC3E,QAAQ,MAAM,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC,kBAAkB,CAAC,QAAQ,EAAE,mBAAmB,CAAC;AACvF,QAAQ,8BAA8B,CAAC,KAAK,EAAE,cAAc,CAAC;AAC7D,QAAQ,OAAO,KAAK;AACpB,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,mBAAmB,CAAC,QAAQ,EAAE,mBAAmB,EAAE,qBAAqB,EAAE,kBAAkB,EAAE;AAClG,QAAQ,MAAM,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC,wBAAwB,CAAC,QAAQ,EAAE,mBAAmB,EAAE,qBAAqB,EAAE,kBAAkB,CAAC;AACxI,QAAQ,8BAA8B,CAAC,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;AAC/E,QAAQ,OAAO,KAAK;AACpB,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,6BAA6B,CAAC,QAAQ,EAAE,mBAAmB,EAAE,qBAAqB,EAAE,kBAAkB,EAAE,cAAc,EAAE;AAC5H,QAAQ,MAAM,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC,wBAAwB,CAAC,QAAQ,EAAE,mBAAmB,EAAE,qBAAqB,EAAE,kBAAkB,CAAC;AACxI,QAAQ,8BAA8B,CAAC,KAAK,EAAE,cAAc,CAAC;AAC7D,QAAQ,OAAO,KAAK;AACpB,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAAS,gBAAgB,CAAC,UAAU,EAAE,MAAM,EAAE,IAAI,EAAE;AAC3D,IAAI,OAAO,IAAI,mBAAmB,CAAC,UAAU,EAAE,MAAM,EAAE,IAAI,CAAC;AAC5D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAAS,uBAAuB,CAAC,UAAU,EAAE,QAAQ,EAAE,cAAc,EAAE,IAAI,EAAE;AACpF,IAAI,MAAM,YAAY,GAAG,IAAI,EAAE,SAAS,IAAI,cAAc,CAAC,IAAI;AAC/D,IAAI,MAAM,KAAK,GAAG,IAAI,oBAAoB,CAAC,QAAQ,CAAC;AACpD,IAAI,IAAI,UAAU,YAAY,uBAAuB,EAAE;AACvD,QAAQ,UAAU,CAAC,kBAAkB,CAAC,KAAK,CAAC;AAC5C,IAAI;AACJ,SAAS;AACT,QAAQ,UAAU,CAAC,kBAAkB,CAAC,KAAK,CAAC;AAC5C,IAAI;AACJ;AACA,IAAI,QAAQ,YAAY;AACxB,QAAQ,KAAK,QAAQ;AACrB,YAAY,KAAK,CAAC,QAAQ,EAAE;AAC5B,YAAY;AACZ,QAAQ,KAAK,UAAU;AACvB,YAAY,KAAK,CAAC,UAAU,CAAC;AAC7B,gBAAgB,QAAQ,EAAE,IAAI,EAAE,QAAQ;AACxC,gBAAgB,eAAe,EAAE,IAAI,EAAE,eAAe;AACtD,gBAAgB,gBAAgB,EAAE,IAAI,EAAE;AACxC,aAAa,CAAC;AACd,YAAY;AACZ,QAAQ,KAAK,SAAS;AACtB,YAAY,KAAK,CAAC,QAAQ,EAAE;AAC5B,YAAY;AACZ,QAAQ,KAAK,MAAM;AACnB,QAAQ,KAAK,QAAQ;AACrB,YAAY,KAAK,CAAC,MAAM,EAAE;AAC1B,YAAY;AACZ,QAAQ,KAAK,UAAU;AACvB,YAAY,KAAK,CAAC,UAAU,EAAE;AAC9B,YAAY;AACZ,QAAQ,KAAK,MAAM;AACnB,YAAY,KAAK,CAAC,YAAY,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,GAAG,4BAA4B,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,SAAS,EAAE,CAAC;AACxH,YAAY;AACZ,QAAQ,KAAK,WAAW;AACxB,YAAY,KAAK,CAAC,YAAY,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,cAAc,GAAG,4BAA4B,CAAC,IAAI,CAAC,cAAc,CAAC,GAAG,SAAS,EAAE,CAAC;AAChJ,YAAY;AACZ,QAAQ,KAAK,MAAM;AACnB;AACA,YAAY,MAAM,SAAS,GAAG,IAAI,EAAE,UAAU,GAAG,mBAAmB,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,IAAI,EAAE,SAAS;AACvG,YAAY,IAAI,SAAS,EAAE;AAC3B,gBAAgB,KAAK,CAAC,eAAe,CAAC,SAAS,CAAC;AAChD,YAAY;AACZ,iBAAiB;AACjB,gBAAgB,KAAK,CAAC,MAAM,EAAE;AAC9B,YAAY;AACZ,YAAY;AACZ,QAAQ,KAAK,QAAQ;AACrB,YAAY,KAAK,CAAC,QAAQ,EAAE;AAC5B,YAAY;AACZ;AACA;AACA,IAAI,IAAI,YAAY,KAAK,QAAQ,IAAI,YAAY,KAAK,UAAU,EAAE;AAClE,QAAQ,KAAK,CAAC,oBAAoB,CAAC;AACnC,YAAY,GAAG,EAAE,cAAc,CAAC,gBAAgB,IAAI,cAAc,CAAC,OAAO,IAAI,SAAS,GAAG,cAAc,CAAC,OAAO,IAAI,cAAc,CAAC,SAAS,GAAG,CAAC,GAAG,MAAM,CAAC,GAAG,cAAc,CAAC,OAAO;AACnL,YAAY,GAAG,EAAE,cAAc,CAAC,gBAAgB,IAAI,cAAc,CAAC,OAAO,IAAI,SAAS,GAAG,cAAc,CAAC,OAAO,IAAI,cAAc,CAAC,SAAS,GAAG,CAAC,GAAG,MAAM,CAAC,GAAG,cAAc,CAAC,OAAO;AACnL,YAAY,IAAI,EAAE,IAAI,EAAE;AACxB,SAAS,CAAC;AACV,QAAQ,IAAI,IAAI,EAAE,iBAAiB,EAAE;AACrC,YAAY,KAAK,CAAC,kBAAkB,EAAE;AACtC,QAAQ;AACR,QAAQ,IAAI,IAAI,EAAE,uBAAuB,IAAI,IAAI,IAAI,IAAI,EAAE,uBAAuB,IAAI,IAAI,EAAE;AAC5F,YAAY,KAAK,CAAC,mBAAmB,CAAC;AACtC,gBAAgB,iBAAiB,EAAE,IAAI,EAAE,uBAAuB;AAChE,gBAAgB,iBAAiB,EAAE,IAAI,EAAE;AACzC,aAAa,CAAC;AACd,QAAQ;AACR,IAAI;AACJ,IAAI,IAAI,YAAY,KAAK,QAAQ,IAAI,YAAY,KAAK,UAAU,IAAI,YAAY,KAAK,MAAM,EAAE;AAC7F,QAAQ,KAAK,CAAC,kBAAkB,CAAC;AACjC,YAAY,SAAS,EAAE,cAAc,CAAC,SAAS;AAC/C,YAAY,SAAS,EAAE,cAAc,CAAC,SAAS;AAC/C,YAAY,OAAO,EAAE,cAAc,CAAC,OAAO,GAAG,IAAI,MAAM,CAAC,cAAc,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG;AAChG,SAAS,CAAC;AACV,QAAQ,IAAI,YAAY,KAAK,UAAU,IAAI,IAAI,EAAE,YAAY,IAAI,IAAI,EAAE;AACvE,YAAY,KAAK,CAAC,gBAAgB,CAAC,IAAI,CAAC,YAAY,CAAC;AACrD,QAAQ;AACR,QAAQ,IAAI,YAAY,KAAK,UAAU,IAAI,cAAc,CAAC,OAAO,EAAE;AACnE,YAAY,KAAK,CAAC,uBAAuB,EAAE;AAC3C,QAAQ;AACR,IAAI;AACJ,IAAI,8BAA8B,CAAC,KAAK,EAAE,cAAc,CAAC;AACzD,IAAI,OAAO,KAAK;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAAS,4BAA4B,CAAC,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,cAAc,EAAE;AAC5F,IAAI,MAAM,cAAc,GAAG,OAAO,YAAY,cAAc,GAAG,OAAO,GAAG,mBAAmB,CAAC,OAAO,CAAC;AACrG,IAAI,MAAM,KAAK,GAAG,UAAU,CAAC,wBAAwB,CAAC,QAAQ,EAAE,cAAc,CAAC;AAC/E,IAAI,8BAA8B,CAAC,KAAK,EAAE,cAAc,CAAC;AACzD,IAAI,OAAO,KAAK;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAAS,8BAA8B,CAAC,KAAK,EAAE,cAAc,EAAE;AACtE,IAAI,IAAI,cAAc,CAAC,QAAQ;AAC/B,QAAQ,KAAK,CAAC,YAAY,EAAE;AAC5B,IAAI,IAAI,cAAc,CAAC,UAAU;AACjC,QAAQ,KAAK,CAAC,YAAY,EAAE;AAC5B;;ACpXA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAAS,0BAA0B,CAAC,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE;AACpE,IAAI,OAAO,IAAI,sBAAsB,CAAC,OAAO,CAAC,CAAC,UAAU,CAAC,CAAC,MAAM,EAAE,OAAO,EAAE,MAAM,KAAK;AACvF,QAAQ,IAAI,MAAM,IAAI,IAAI,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE;AACjD,YAAY,IAAI,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE;AACtC,gBAAgB,MAAM,GAAG;AACzB,oBAAoB,MAAM,EAAE,MAAM,EAAE,MAAM;AAC1C,oBAAoB,KAAK,EAAE,MAAM,EAAE,KAAK;AACxC,oBAAoB,IAAI,EAAE,MAAM,EAAE,IAAI;AACtC,oBAAoB,OAAO,EAAE;AAC7B,wBAAwB,GAAG;AAC3B,4BAA4B,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,GAAG;AAC3D,gCAAgC,KAAK,EAAE,MAAM;AAC7C,gCAAgC,SAAS,EAAE,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,IAAI;AAC3E;AACA;AACA;AACA,iBAAiB;AACjB,YAAY;AACZ,iBAAiB,IAAI,IAAI,EAAE,MAAM,EAAE,YAAY,EAAE;AACjD,gBAAgB,MAAM,GAAG;AACzB,oBAAoB,MAAM,EAAE,MAAM,EAAE,MAAM;AAC1C,oBAAoB,KAAK,EAAE,MAAM,EAAE,KAAK;AACxC,oBAAoB,IAAI,EAAE,MAAM,EAAE,IAAI;AACtC,oBAAoB,MAAM,EAAE;AAC5B,iBAAiB;AACjB,YAAY;AACZ,QAAQ;AACR,QAAQ,IAAI,IAAI,EAAE,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE;AAChD,YAAY,MAAM,GAAG;AACrB,gBAAgB,GAAG,MAAM;AACzB,gBAAgB,IAAI,EAAE,IAAI,EAAE;AAC5B,aAAa;AACb,QAAQ;AACR,QAAQ,IAAI,IAAI,EAAE,KAAK,IAAI,IAAI,EAAE;AACjC,YAAY,MAAM,GAAG;AACrB,gBAAgB,GAAG,MAAM;AACzB,gBAAgB,KAAK,EAAE,IAAI,EAAE;AAC7B,aAAa;AACb,QAAQ;AACR,QAAQ,OAAO,OAAO,CAAC,QAAQ,CAAC,CAAC,wBAAwB,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC;AACzG,IAAI,CAAC,CAAC;AACN;;ACvDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAAS,yBAAyB,CAAC,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE;AAC3E,IAAI,MAAM,OAAO,GAAG,IAAI,qBAAqB,CAAC,IAAI,uBAAuB,CAAC,KAAK,CAAC,EAAE,IAAI,yBAAyB,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC;AAC3I,IAAI,OAAO,GAAG,OAAO,CAAC;AACtB,IAAI,OAAO,OAAO,CAAC,KAAK,EAAE;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAAS,mCAAmC,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE;AACnF,IAAI,MAAM,OAAO,GAAG,IAAI,qBAAqB,CAAC,IAAI,uBAAuB,CAAC,KAAK,EAAE,IAAI,CAAC,EAAE,IAAI,yBAAyB,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC;AACjJ,IAAI,OAAO,GAAG,OAAO,CAAC;AACtB,IAAI,OAAO,OAAO,CAAC,KAAK,EAAE;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAAS,6BAA6B,CAAC,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE;AACjF,IAAI,MAAM,OAAO,GAAG,IAAI,qBAAqB,CAAC,IAAI,uBAAuB,CAAC,KAAK,CAAC,EAAE,IAAI,yBAAyB,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC;AAC3I,IAAI,OAAO,CAAC,sBAAsB,CAAC,YAAY,IAAI,YAAY,CAAC,UAAU,CAAC,CAAC,MAAM,EAAE,OAAO,KAAK,gBAAgB,CAAC,OAAO,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAC;AAC7I,IAAI,OAAO,GAAG,OAAO,CAAC;AACtB,IAAI,OAAO,OAAO,CAAC,KAAK,EAAE;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAAS,uCAAuC,CAAC,KAAK,EAAE,OAAO,EAAE,eAAe,EAAE,IAAI,EAAE,OAAO,EAAE;AACxG,IAAI,MAAM,OAAO,GAAG,IAAI,qBAAqB,CAAC,IAAI,uBAAuB,CAAC,KAAK,EAAE,IAAI,CAAC,EAAE,IAAI,yBAAyB,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC;AACjJ,IAAI,OAAO,CAAC,sBAAsB,CAAC,YAAY,IAAI,YAAY,CAAC,UAAU,CAAC,CAAC,MAAM,EAAE,OAAO,KAAK,gBAAgB,CAAC,OAAO,EAAE,eAAe,EAAE,MAAM,CAAC,CAAC,CAAC;AACpJ,IAAI,OAAO,GAAG,OAAO,CAAC;AACtB,IAAI,OAAO,OAAO,CAAC,KAAK,EAAE;AAC1B;;AC7DA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAAS,+BAA+B,CAAC,YAAY,EAAE,IAAI,EAAE;AACpE,IAAI,IAAI,UAAU;AAClB,IAAI,IAAI,UAAU;AAClB,IAAI,QAAQ,YAAY,EAAE,WAAW,EAAE;AACvC,QAAQ,KAAK,MAAM;AACnB,YAAY,UAAU,GAAG,cAAc,CAAC,IAAI;AAC5C,YAAY,UAAU,GAAG,IAAI,EAAE;AAC/B,kBAAkB,IAAI,CAAC;AACvB,kBAAkB;AAClB,oBAAoB,aAAa,EAAE,YAAY;AAC/C,oBAAoB,sBAAsB,EAAE;AAC5C,iBAAiB;AACjB,YAAY;AACZ,QAAQ,KAAK,UAAU;AACvB,QAAQ,KAAK,WAAW;AACxB,QAAQ,KAAK,WAAW;AACxB,YAAY,UAAU,GAAG,cAAc,CAAC,IAAI;AAC5C,YAAY,UAAU,GAAG,IAAI,EAAE,QAAQ,GAAG,IAAI,CAAC,QAAQ,GAAG,EAAE,aAAa,EAAE,kBAAkB,EAAE,sBAAsB,EAAE,IAAI,EAAE;AAC7H,YAAY;AACZ,QAAQ,KAAK,QAAQ;AACrB,QAAQ,KAAK,MAAM;AACnB,YAAY,UAAU,GAAG,cAAc,CAAC,MAAM;AAC9C,YAAY;AACZ,QAAQ,KAAK,MAAM;AACnB,YAAY,UAAU,GAAG,cAAc,CAAC,UAAU;AAClD,YAAY;AACZ,QAAQ,KAAK,SAAS;AACtB,QAAQ,KAAK,MAAM;AACnB,YAAY,UAAU,GAAG,cAAc,CAAC,OAAO;AAC/C,YAAY;AACZ,QAAQ,KAAK,OAAO;AACpB,QAAQ,KAAK,QAAQ;AACrB,QAAQ,KAAK,SAAS;AACtB,YAAY,UAAU,GAAG,cAAc,CAAC,MAAM;AAC9C,YAAY,UAAU,GAAG,IAAI,EAAE,UAAU,GAAG,IAAI,CAAC,UAAU,GAAG,EAAE,aAAa,EAAE,QAAQ,EAAE;AACzF,YAAY;AACZ,QAAQ,KAAK,SAAS;AACtB,QAAQ,KAAK,KAAK;AAClB,QAAQ,KAAK,MAAM;AACnB,YAAY,UAAU,GAAG,cAAc,CAAC,MAAM;AAC9C,YAAY,UAAU,GAAG,IAAI,EAAE,UAAU;AACzC,YAAY;AACZ,QAAQ;AACR,YAAY,UAAU,GAAG,IAAI;AAC7B;AACA,IAAI,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,UAAU,EAAE;AAC3C;AACA;AACA;AACA;AACA;AACA;AACO,SAAS,wCAAwC,CAAC,UAAU,EAAE,IAAI,EAAE;AAC3E,IAAI,OAAO,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,MAAM,CAAC,CAAC,oBAAoB,EAAE,GAAG,KAAK;AACzE,QAAQ,MAAM,EAAE,UAAU,EAAE,IAAI,EAAE,UAAU,EAAE,GAAG,+BAA+B,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC;AACvG,QAAQ,IAAI,UAAU,KAAK,IAAI,EAAE;AACjC,YAAY,oBAAoB,CAAC,IAAI,CAAC;AACtC,gBAAgB,QAAQ,EAAE,GAAG;AAC7B,gBAAgB,IAAI,EAAE,UAAU;AAChC,gBAAgB,IAAI,EAAE;AACtB,aAAa,CAAC;AACd,QAAQ;AACR,QAAQ,OAAO,oBAAoB;AACnC,IAAI,CAAC,EAAE,EAAE,CAAC;AACV;AACA;AACA;AACA;AACO,SAAS,4BAA4B,CAAC,IAAI,EAAE;AACnD,IAAI,OAAO,UAAU,MAAM,EAAE;AAC7B,QAAQ,OAAO,IAAI,UAAU,CAAC,UAAU,IAAI;AAC5C,YAAY,OAAO,MAAM,CAAC,SAAS,CAAC;AACpC,gBAAgB,IAAI,CAAC,KAAK,EAAE;AAC5B,oBAAoB,UAAU,CAAC,IAAI,CAAC,wCAAwC,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;AAC1F,gBAAgB,CAAC;AACjB,gBAAgB,KAAK,EAAE,GAAG,IAAI;AAC9B,oBAAoB,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC;AACzC,gBAAgB;AAChB,aAAa,CAAC;AACd,QAAQ,CAAC,CAAC;AACV,IAAI,CAAC;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAAS,4BAA4B,CAAC,WAAW,EAAE,QAAQ,EAAE,IAAI,EAAE;AAC1E,IAAI,IAAI,OAAO,QAAQ,KAAK,UAAU,EAAE;AACxC,QAAQ,OAAO,kBAAkB,CAAC,EAAE,OAAO,EAAE,WAAW,EAAE,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,OAAO,KAAK,YAAY,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,4BAA4B,CAAC,IAAI,CAAC,CAAC,CAAC;AAChK,IAAI;AACJ,SAAS;AACT,QAAQ,OAAO,kBAAkB,CAAC,EAAE,OAAO,EAAE,WAAW,EAAE,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,OAAO,KAAK,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC,IAAI,CAAC,4BAA4B,CAAC,IAAI,CAAC,CAAC,CAAC;AACpJ,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAAS,mCAAmC,CAAC,OAAO,EAAE,QAAQ,EAAE;AACvE,IAAI,IAAI,OAAO,QAAQ,KAAK,UAAU,EAAE;AACxC,QAAQ,OAAO,kBAAkB,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,UAAU,CAAC,CAAC,MAAM,EAAE,OAAO,EAAE,MAAM,KAAK,QAAQ,CAAC,OAAO,EAAE,cAAc,CAAC,MAAM,EAAE,OAAO,GAAG,OAAO,CAAC,EAAE,KAAK,CAAC,EAAE,MAAM,CAAC,CAAC;AACpK,IAAI;AACJ,SAAS;AACT,QAAQ,OAAO,kBAAkB,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,UAAU,CAAC,CAAC,MAAM,EAAE,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC,QAAQ,CAAC,CAAC;AACzG,YAAY,KAAK,EAAE,cAAc,CAAC,MAAM,EAAE,OAAO,GAAG,OAAO,CAAC,EAAE,KAAK,CAAC,CAAC,QAAQ,EAAE;AAC/E,YAAY,IAAI,EAAE;AAClB,SAAS,CAAC,CAAC;AACX,IAAI;AACJ;;AC7HA;;ACAA;AACA;AACA;;;;"}
|
|
1
|
+
{"version":3,"file":"mediusinc-mng-commons-data-api-tableview.mjs","sources":["../../tableview/src/schema/enum-from-schema.ts","../../tableview/src/schema/internal/common-from-schema.ts","../../tableview/src/schema/columns-from-schema.ts","../../tableview/src/schema/fields-from-schema.ts","../../tableview/src/helpers/lookup-get-all-create.ts","../../tableview/src/helpers/tableview-get-all-params-create.ts","../../tableview/src/filter/generic-filters.ts","../../tableview/src/index.ts","../../tableview/src/mediusinc-mng-commons-data-api-tableview.ts"],"sourcesContent":["import {SchemaEnum} from '@mediusinc/mng-commons-data-api';\nimport {EnumDescriptor, enumModelGeneric} from '@mediusinc/mng-commons/model';\n\n/**\n * <em>Experimental:</em> Emulates an enum model object from enum schema.\n *\n * @experimental\n *\n * @param {SchemaEnum<Enum>} enumSchema - The schema of the enum.\n *\n * @returns {EnumDescriptor<Enum>} - The generated enum model descriptor.\n */\nexport function enumModelFromSchema<Enum>(enumSchema: SchemaEnum<Enum>): EnumDescriptor<Enum> {\n const enumObj: Record<string | number, string | number> = {};\n enumSchema.values\n .map((v, idx) => ({value: v, constant: enumSchema.constants[idx]}))\n .forEach(({value, constant}) => {\n const valueAsStrOrInt = value as unknown as string | number;\n enumObj[constant] = valueAsStrOrInt;\n if (typeof valueAsStrOrInt === 'number' && enumObj[valueAsStrOrInt] == null) enumObj[valueAsStrOrInt] = constant;\n });\n return enumModelGeneric<Enum>(enumObj, enumSchema.name.replace(/\\d+$/, ''));\n}\n","export function fromSchemaFilterNonArrayProperties<Model>(propertySchemas: Record<keyof Model, any>): (keyof Model)[] {\n return (Object.keys(propertySchemas) as (keyof Model)[]).filter(key => {\n const propertySchema = propertySchemas[key];\n return ['number', 'string', 'boolean', 'date', 'date-time', 'enum', 'object'].includes(propertySchema.type);\n });\n}\n","import {SchemaEnum, SchemaModel, SchemaProperty} from '@mediusinc/mng-commons-data-api';\nimport {GetterFn} from '@mediusinc/mng-commons/core';\nimport {EnumDescriptor} from '@mediusinc/mng-commons/model';\nimport {ColumnDescriptor, TableDescriptorInst} from '@mediusinc/mng-commons/table/api';\nimport {TableviewDescriptorInst} from '@mediusinc/mng-commons/tableview/api';\n\nimport {enumModelFromSchema} from './enum-from-schema';\nimport {fromSchemaFilterNonArrayProperties} from './internal/common-from-schema';\n\ntype ColumnType = 'number' | 'currency' | 'boolean' | 'string' | 'text' | 'textarea' | 'date' | 'date-time' | 'enum' | 'object';\n\ntype ColumnFromSchemaCommonOptsType<Model> = {\n currencyProperty?: keyof Model;\n currency?: string;\n currencyDisplay?: 'symbol' | 'code' | 'symbol-narrow';\n dateFormat?: string;\n dateTimeFormat?: string;\n numberMinIntegerDigits?: number;\n numberMinFractionDigits?: number;\n numberMaxFractionDigits?: number;\n};\n\ntype ColumnsFromSchemaOptsType<Model = any> = ColumnFromSchemaCommonOptsType<Model> & {\n columnTypes?: Partial<Record<keyof Model, ColumnType>>;\n enumModels?: Partial<Record<keyof Model, EnumDescriptor<any>>>;\n enumSchemas?: Partial<Record<keyof Model, SchemaEnum<any>>>;\n getters?: {[K in keyof Model]?: GetterFn<Model[K], Model>};\n};\n\ntype ColumnFromSchemaOptsType<Column = any, Model = any, Enum = any> = ColumnFromSchemaCommonOptsType<Model> & {\n columnType?: ColumnType;\n getter?: GetterFn<Column, Model>;\n enumModel?: EnumDescriptor<Enum>;\n enumSchema?: SchemaEnum<Enum>;\n};\n\nconst defaultGetter: GetterFn<unknown> = value => {\n if (typeof value === 'object') {\n const valueObj = value as object;\n return (\n valueObj['title' as keyof object] ??\n valueObj['name' as keyof object] ??\n valueObj['naziv' as keyof object] ??\n valueObj['code' as keyof object] ??\n valueObj['sifra' as keyof object] ??\n valueObj['id' as keyof object] ??\n valueObj['uuid' as keyof object] ??\n valueObj[Object.keys(valueObj)[0] as keyof object]\n );\n } else {\n return value;\n }\n};\n\n/**\n * <em>Experimental:</em> Builder for adding columns to table.\n *\n * @experimental\n */\nexport class SchemaColumnsBuilder<Model, SchModel = Model> {\n constructor(\n private readonly descriptor: TableviewDescriptorInst<Model, any, any, any> | TableDescriptorInst<Model, any, any>,\n private readonly schema: SchemaModel<SchModel>,\n private opts?: ColumnsFromSchemaOptsType<SchModel>\n ) {}\n\n private mergeColumnsOpts(property: any, opts?: ColumnsFromSchemaOptsType) {\n return <ColumnFromSchemaOptsType>{\n ...this.opts,\n columnType: this.opts?.columnTypes?.[property as keyof object],\n getter: opts?.getters?.[property] ?? this.opts?.getters?.[property as keyof object],\n enumModel: opts?.enumModels?.[property] ?? this.opts?.enumModels?.[property as keyof object],\n enumSchema: opts?.enumSchemas?.[property] ?? this.opts?.enumSchemas?.[property as keyof object],\n ...opts\n };\n }\n\n private mergeColumnOpts(property: any, opts?: ColumnFromSchemaOptsType) {\n return <ColumnFromSchemaOptsType>{\n ...this.opts,\n columnType: this.opts?.columnTypes?.[property as keyof object],\n getter: this.opts?.getters?.[property as keyof object],\n enumModel: this.opts?.enumModels?.[property as keyof object],\n enumSchema: this.opts?.enumSchemas?.[property as keyof object],\n ...opts\n };\n }\n\n /**\n * <em>Experimental:</em> Adds a single column via {addColumnFromSchema}.\n *\n * @experimental\n *\n * @param {Property} property - The property to add the column for.\n * @param {ColumnFromSchemaOptsType<SchModel[Property], SchModel, any, Model>} opts - Additional options.\n *\n * @return {ColumnDescriptor<NonNullable<Model[Property]>, Model, Model[Property]>} The added column descriptor.\n */\n public add<Property extends Extract<keyof Model, keyof SchModel>>(\n property: Property,\n opts?: ColumnFromSchemaOptsType<SchModel[Property], SchModel, any>\n ): ColumnDescriptor<NonNullable<Model[Property]>, Model, Model[Property]> {\n return addColumnFromSchema(\n this.descriptor,\n property,\n this.schema.properties[property],\n this.mergeColumnOpts(property, opts) as ColumnFromSchemaOptsType<Model[Property], Model, any> | undefined\n ) as unknown as ColumnDescriptor<NonNullable<Model[Property]>, Model, Model[Property]>;\n }\n\n /**\n * <em>Experimental:</em> Adds all columns from the non-array schema properties via {addColumnFromSchema}.\n *\n * @experimental\n *\n * @param {ColumnsFromSchemaOptsType<SchModel>} opts - Additional options.\n *\n * @return {this} - The current instance of the builder.\n */\n public withAddAll(opts?: ColumnsFromSchemaOptsType<SchModel>): this {\n this.addColumns(undefined, opts);\n return this;\n }\n\n /**\n * <em>Experimental:</em> Adds columns for properties via {addColumnFromSchema}.\n *\n * @experimental\n *\n * @param {ColumnsFromSchemaOptsType<SchModel>} opts - Additional options.\n * @param {...Property[]} properties - Properties to add columns for. If non provided, all non-array properties from schema will be added.\n *\n * @return {this} - The current instance of the builder.\n */\n public withAdd<Property extends Extract<keyof Model, keyof SchModel>>(opts: ColumnsFromSchemaOptsType<SchModel>, ...properties: Property[]): this;\n /**\n * <em>Experimental:</em> Adds columns for properties via {addColumnFromSchema}.\n *\n * @experimental\n *\n * @param {...Property[]} properties - Properties to add columns for. If non provided, all non-array properties from schema will be added.\n *\n * @return {this} - The current instance of the builder.\n */\n public withAdd<Property extends Extract<keyof Model, keyof SchModel>>(...properties: Property[]): this;\n public withAdd<Property extends Extract<keyof Model, keyof SchModel>>(propOrOpts: ColumnsFromSchemaOptsType<SchModel> | Property, ...properties: Property[]): this {\n if (typeof propOrOpts === 'object') {\n this.addColumns(properties.length === 0 ? undefined : properties, propOrOpts);\n } else {\n this.addColumns([propOrOpts, ...properties]);\n }\n return this;\n }\n\n /**\n * <em>Experimental:</em> Adds a single column via {addColumnFromSchema} where property schema is manually provided.\n *\n * @experimental\n *\n * @param {Property} property - The property to add the column for.\n * @param {SchemaProperty} schemaProperty - Manually provided schema property.\n * @param {ColumnFromSchemaOptsType} opts - Additional options.\n *\n * @return {ColumnDescriptor<NonNullable<Model[Property]>, Model, Model[Property]>} The added column descriptor.\n */\n public addFromSchema<Property extends keyof Model>(\n property: Property,\n schemaProperty: SchemaProperty,\n opts?: ColumnFromSchemaOptsType<Model[Property], Model>\n ): ColumnDescriptor<NonNullable<Model[Property]>, Model, Model[Property]> {\n return addColumnFromSchema(\n this.descriptor,\n property,\n schemaProperty,\n this.mergeColumnOpts(property, opts) as ColumnFromSchemaOptsType<Model[Property], Model, any> | undefined\n );\n }\n\n private addColumns<Property extends Extract<keyof Model, keyof SchModel>>(properties?: Property[], opts?: ColumnsFromSchemaOptsType<SchModel>) {\n const addProperties = properties ?? fromSchemaFilterNonArrayProperties<SchModel>(this.schema.properties);\n\n if (addProperties) {\n addProperties.forEach(property => {\n addColumnFromSchema(\n this.descriptor,\n property as any,\n this.schema.properties[property],\n this.mergeColumnsOpts(property as unknown as keyof Model, opts) as ColumnFromSchemaOptsType<Model[Property], Model, any> | undefined\n );\n });\n }\n }\n}\n\n/**\n * <em>Experimental:</em> Creates builder for adding columns to descriptor based on provided model schema.\n *\n * @experimental\n *\n * @param {TableviewDescriptorInst<Model, any, any, any> | TableDescriptorInst<Model, any, any>} descriptor - Descriptor to add columns to.\n * @param {SchemaModel<SchModel>} schema - The schema with metadata about properties for fields.\n * @param {ColumnsFromSchemaOptsType<SchModel>} [opts] - Additional options.\n *\n * @return {SchemaColumnsBuilder<Model, SchModel>} - The column schema builder instance.\n */\nexport function columnsFromSchema<Model, SchModel = Model>(\n descriptor: TableviewDescriptorInst<any, any, any, any, Model, any, any, any> | TableDescriptorInst<Model, any, any>,\n schema: SchemaModel<SchModel>,\n opts?: ColumnsFromSchemaOptsType<SchModel>\n): SchemaColumnsBuilder<Model, SchModel> {\n return new SchemaColumnsBuilder<Model, SchModel>(descriptor, schema, opts);\n}\n\n/**\n * <em>Experimental:</em> Adds a column to table descriptor based on the given schema property and options.\n *\n * @param {TableviewDescriptorInst<Model, any, any, any> | TableDescriptorInst<Model, any, any>} descriptor - The table view descriptor or table descriptor to add the column to.\n * @param {Property} property - The property key of the model to create the column for.\n * @param {SchemaProperty} propertySchema - The schema property for the property.\n * @param {ColumnFromSchemaOptsType<Model[Property], Model, any, Model>} [opts] - The options for the column.\n *\n * @return {ColumnDescriptor<NonNullable<Model[Property]>, Model, Model[Property]>} - The added column descriptor.\n */\nexport function addColumnFromSchema<Property extends keyof TableModel, Model, TableModel = Model>(\n descriptor: TableviewDescriptorInst<Model, any, any, any, TableModel, any, any, any> | TableDescriptorInst<TableModel, any, any>,\n property: Property,\n propertySchema: SchemaProperty,\n opts?: ColumnFromSchemaOptsType<TableModel[Property], TableModel, any>\n): ColumnDescriptor<NonNullable<TableModel[Property]>, TableModel, TableModel[Property]> {\n const propertyType = property === opts?.currencyProperty ? 'currency' : (opts?.columnType ?? propertySchema?.type);\n\n const column = descriptor.addColumn(property);\n\n // Handle different property types\n switch (propertyType) {\n case 'number':\n column.asNumber({\n minFractionDigits: opts?.numberMinFractionDigits ?? (propertySchema.isInteger === false ? 1 : undefined),\n maxFractionDigits: opts?.numberMaxFractionDigits ?? (propertySchema.isInteger === false ? 3 : undefined),\n minIntegerDigits: opts?.numberMinIntegerDigits\n });\n break;\n case 'boolean':\n column.asBoolean(undefined, undefined, true);\n break;\n case 'date':\n column.asDate(opts?.dateFormat ?? 'dd.MM.yyyy');\n break;\n case 'enum':\n // eslint-disable-next-line no-case-declarations\n const enumModel = opts?.enumSchema ? enumModelFromSchema(opts.enumSchema) : opts?.enumModel;\n if (enumModel) {\n column.asEnumUnsafe(enumModel);\n }\n break;\n case 'date-time':\n column.asDate(opts?.dateTimeFormat ?? 'dd.MM.yyyy HH:mm');\n break;\n case 'currency':\n column.asCurrency({\n currency: opts?.currency,\n currencyDisplay: opts?.currencyDisplay,\n minFractionDigits: opts?.numberMinFractionDigits ?? (propertySchema.isInteger === false ? 2 : undefined),\n maxFractionDigits: opts?.numberMaxFractionDigits ?? (propertySchema.isInteger === false ? 2 : undefined),\n minIntegerDigits: opts?.numberMinIntegerDigits\n });\n break;\n case 'object':\n column.withGetter(defaultGetter);\n break;\n }\n\n // Add optional filter, sort and getters\n if (opts?.getter) column.withGetter(opts?.getter);\n\n return column;\n}\n","import {SchemaEnum, SchemaModel, SchemaProperty} from '@mediusinc/mng-commons-data-api';\nimport {ArrayItemType, CommonsInternalError, fromAngularDateFormatToPrime} from '@mediusinc/mng-commons/core';\nimport {EnumDescriptor} from '@mediusinc/mng-commons/model';\nimport {ITableDataProvider, TableDescriptorInst} from '@mediusinc/mng-commons/table/api';\nimport {\n AFieldDescriptor,\n EditorDescriptorInst,\n FieldInputDescriptor,\n FieldLookupEnumDescriptor,\n FieldLookupProviderType,\n FieldManyEditorDescriptor,\n FieldManyToManyEditorDescriptor,\n TableviewDescriptorFieldsManageMultiType,\n TableviewDescriptorInst\n} from '@mediusinc/mng-commons/tableview/api';\n\nimport {enumModelFromSchema} from './enum-from-schema';\nimport {fromSchemaFilterNonArrayProperties} from './internal/common-from-schema';\n\ntype FieldInputType = 'number' | 'currency' | 'boolean' | 'string' | 'text' | 'textarea' | 'date' | 'date-time' | 'enum' | 'hidden';\n\ntype FromSchemaCommonOptsType<Model> = {\n dateFormat?: string;\n dateTimeFormat?: string;\n textareaRows?: number;\n numberUseGrouping?: boolean;\n numberStep?: number;\n numberMinFractionDigits?: number;\n numberMaxFractionDigits?: number;\n currency?: string;\n currencyProperty?: keyof Model;\n currencyDisplay?: 'symbol' | 'code' | 'name';\n};\n\ntype FieldsFromSchemaOptsType<Model = any> = FromSchemaCommonOptsType<Model> & {\n fieldTypes?: Partial<Record<keyof Model, FieldInputType>>;\n enumModels?: Partial<Record<keyof Model, EnumDescriptor<any>>>;\n enumSchemas?: Partial<Record<keyof Model, SchemaEnum<any>>>;\n};\n\ntype FieldInputFromSchemaOptsType<Model = any, Enum = any> = FromSchemaCommonOptsType<Model> & {\n fieldType?: FieldInputType;\n enumSchema?: SchemaEnum<Enum>;\n enumModel?: EnumDescriptor<Enum>;\n};\n\n/**\n * <em>Experimental:</em> Builder for adding fields to editor.\n *\n * @experimental\n */\nexport class SchemaFieldsBuilder<\n Model,\n Parent = unknown,\n AddModel = Model,\n EditModel = Model,\n FieldsModel = TableviewDescriptorFieldsManageMultiType<Model, AddModel, EditModel>,\n SchModel = Model\n> {\n constructor(\n private readonly descriptor: TableviewDescriptorInst<Model, any, any, Parent, any, AddModel, EditModel, FieldsModel> | EditorDescriptorInst<FieldsModel, Parent>,\n private readonly schema: SchemaModel<SchModel>,\n private opts?: FieldsFromSchemaOptsType<SchModel>\n ) {}\n\n private mergeFieldsInputOpts(property: any, opts?: FieldsFromSchemaOptsType) {\n return <FieldInputFromSchemaOptsType>{\n ...this.opts,\n fieldType: opts?.fieldTypes?.[property] ?? this.opts?.fieldTypes?.[property as keyof object],\n enumModel: opts?.enumModels?.[property] ?? this.opts?.enumModels?.[property as keyof object],\n enumSchema: opts?.enumSchemas?.[property] ?? this.opts?.enumSchemas?.[property as keyof object],\n ...opts\n };\n }\n\n private mergeFieldInputOpts(property: any, opts?: FieldInputFromSchemaOptsType) {\n return <FieldInputFromSchemaOptsType<FieldsModel>>{\n ...this.opts,\n fieldType: this.opts?.fieldTypes?.[property as keyof object],\n enumModel: this.opts?.enumModels?.[property as keyof object],\n enumSchema: this.opts?.enumSchemas?.[property as keyof object],\n ...opts\n };\n }\n\n /**\n * <em>Experimental:</em> Adds a single input field via {addFieldInputFromSchema}.\n *\n * @experimental\n *\n * @param {Property} property - The property to add the field for.\n * @param {FieldInputFromSchemaOptsType<SchModel>} opts - Additional options.\n *\n * @return {FieldInputDescriptor<Model, NonNullable<Model[Property]>, Model[Property], Parent>} The added field descriptor.\n */\n public add<Property extends Extract<keyof FieldsModel, keyof SchModel>>(\n property: Property,\n opts?: FieldInputFromSchemaOptsType<SchModel>\n ): FieldInputDescriptor<FieldsModel, NonNullable<FieldsModel[Property]>, FieldsModel[Property], Parent> {\n return addFieldInputFromSchema<Property, Model, Parent, AddModel, EditModel, FieldsModel>(\n this.descriptor,\n property,\n this.schema.properties[property],\n this.mergeFieldInputOpts(property, opts) as FieldInputFromSchemaOptsType<FieldsModel, any> | undefined\n );\n }\n\n /**\n * <em>Experimental:</em> Adds all input fields for the non-array properties via {addFieldInputFromSchema}.\n *\n * @experimental\n *\n * @param {FieldsFromSchemaOptsType<SchModel>} opts - Additional options.\n *\n * @return {this} - The current instance of the builder.\n */\n public withAddAll(opts?: FieldsFromSchemaOptsType<SchModel>): this {\n this.addFields(undefined, opts);\n return this;\n }\n\n /**\n * <em>Experimental:</em> Adds input fields for properties via {addFieldInputFromSchema}.\n *\n * @experimental\n *\n * @param {FieldsFromSchemaOptsType<SchModel>} opts - Additional options.\n * @param {...Property[]} properties - Properties to add fields for. If non provided, all non-array properties from schema will be added.\n *\n * @return {this} - The current instance of the builder.\n */\n public withAdd<PropertyKey extends Extract<keyof Model, keyof SchModel>>(opts: FieldsFromSchemaOptsType<SchModel>, ...properties: PropertyKey[]): this;\n /**\n * <em>Experimental:</em> Adds fields for properties via {addFieldInputFromSchema}.\n *\n * @experimental\n *\n * @param {...Property[]} properties - Properties to add fields for. If non provided, all non-array properties from schema will be added.\n *\n * @return {this} - The current instance of the builder.\n */\n public withAdd<Property extends Extract<keyof FieldsModel, keyof SchModel>>(...properties: Property[]): this;\n public withAdd<Property extends Extract<keyof FieldsModel, keyof SchModel>>(propOrOpts: FieldsFromSchemaOptsType<SchModel> | Property, ...properties: Property[]): this {\n if (typeof propOrOpts === 'object') {\n this.addFields(properties.length === 0 ? undefined : properties, propOrOpts);\n } else {\n this.addFields(propOrOpts === undefined ? properties : [propOrOpts, ...properties]);\n }\n return this;\n }\n\n private addFields<Property extends Extract<keyof FieldsModel, keyof SchModel>>(properties?: Property[], opts?: FieldsFromSchemaOptsType<SchModel>) {\n const addProperties = properties ?? fromSchemaFilterNonArrayProperties(this.schema.properties);\n\n addProperties.forEach(property => {\n addFieldInputFromSchema<keyof FieldsModel, Model, Parent, AddModel, EditModel, FieldsModel>(\n this.descriptor,\n property as unknown as keyof FieldsModel,\n this.schema.properties[property],\n this.mergeFieldsInputOpts(property, opts) as FieldInputFromSchemaOptsType<FieldsModel, any> | undefined\n );\n });\n }\n\n /**\n * <em>Experimental:</em> Adds a single input field via {addFieldInputFromSchema} where property schema is manually provided.\n *\n * @experimental\n *\n * @param {Property} property - The property to add the field for.\n * @param {SchemaProperty} schemaProperty - Manually provided schema property.\n * @param {FieldInputFromSchemaOptsType<Model>} opts - Additional options.\n *\n * @return {FieldInputDescriptor<Model, NonNullable<Model[Property]>, Model[Property], Parent>} The added field descriptor.\n */\n public addFromSchema<Property extends keyof FieldsModel>(\n property: Property,\n schemaProperty: SchemaProperty,\n opts?: FieldInputFromSchemaOptsType<FieldsModel>\n ): FieldInputDescriptor<FieldsModel, NonNullable<FieldsModel[Property]>, FieldsModel[Property], Parent> {\n return addFieldInputFromSchema(\n this.descriptor,\n property,\n schemaProperty,\n this.mergeFieldInputOpts(property, opts) as FieldInputFromSchemaOptsType<FieldsModel, any> | undefined\n );\n }\n\n /**\n * <em>Experimental:</em> Adds an enum lookup field via {addFieldEnumLookupFromSchema}.\n *\n * @experimental\n *\n * @param {Property} property - The property to add the enum lookup field for.\n * @param {SchemaEnum<Enum> | EnumDescriptor<Enum>} [enumOpt] - The enum schema or the enum model descriptor. If non provided, builder opts will be checked.\n *\n * @returns {FieldLookupEnumDescriptor<Enum, Model, Parent>} - The added field descriptor.\n *\n * @throws {CommonsInternalError} - If no enum metadata is found for the property either from parameter or from builder's opts.\n */\n public addEnum<Property extends Extract<keyof FieldsModel, keyof SchModel>, Enum>(\n property: Property,\n enumOpt?: SchemaEnum<Enum> | EnumDescriptor<Enum>\n ): FieldLookupEnumDescriptor<Enum, FieldsModel, Parent> {\n if (!enumOpt) {\n enumOpt = this.opts?.enumModels?.[property] ?? this.opts?.enumSchemas?.[property];\n }\n if (!enumOpt) {\n throw new CommonsInternalError(`Enum lookup field for property ${property as string} cannot be added because enum metadata was not provided.`);\n }\n return addFieldEnumLookupFromSchema(this.descriptor, property, enumOpt, this.schema.properties[property]);\n }\n\n /**\n * <em>Experimental:</em> Adds an enum lookup field via {addFieldEnumLookupFromSchema} where property schema is manually provided.\n *\n * @experimental\n *\n * @param {Property} property - The property to add the enum lookup field for.\n * @param {SchemaEnum<Enum> | EnumDescriptor<Enum>} [enumOpt] - The enum schema or the enum model descriptor. If non provided, builder opts will be checked.\n * @param {SchemaProperty} schemaProperty - Manually provided schema property.\n *\n * @returns {FieldLookupEnumDescriptor<Enum, Model, Parent>} - The added field descriptor.\n *\n * @throws {CommonsInternalError} - If no enum metadata is found for the property either from parameter or from builder's opts.\n */\n public addEnumFromSchema<Property extends keyof FieldsModel, Enum>(\n property: Property,\n enumOpt: SchemaEnum<Enum> | EnumDescriptor<Enum> | undefined,\n schemaProperty: SchemaProperty\n ): FieldLookupEnumDescriptor<Enum, FieldsModel, Parent> {\n if (!enumOpt) {\n enumOpt = this.opts?.enumModels?.[property] ?? this.opts?.enumSchemas?.[property];\n }\n if (!enumOpt) {\n throw new CommonsInternalError(`Enum lookup field for property ${property as string} cannot be added because enum metadata was not provided.`);\n }\n return addFieldEnumLookupFromSchema(this.descriptor, property, enumOpt, schemaProperty);\n }\n\n /**\n * <em>Experimental:</em> Adds a lookup field.\n * {EditorDescriptorInt.addFieldLookup} is used to create field and ${setFieldBasicOptionsFromSchema} to add basic field's options from schema.\n *\n * @experimental\n *\n * @param {Property} property - The property to create the lookup field for.\n * @param {FieldLookupProviderType<LookupModel, Service>} provider - Data provider for the lookup field.\n *\n * @return The created lookup field.\n */\n public addLookup<\n Property extends Extract<keyof FieldsModel, keyof SchModel>,\n Service = undefined,\n LookupModel extends NonNullable<FieldsModel[Property]> = NonNullable<FieldsModel[Property]>\n >(property: Property, provider?: FieldLookupProviderType<LookupModel, Service>) {\n const field = this.descriptor.addFieldLookup<Property, Service, LookupModel>(property, {serviceProvider: provider});\n setFieldBasicOptionsFromSchema(field, this.schema.properties[property]);\n return field;\n }\n\n /**\n * <em>Experimental:</em> Adds a lookup field where property schema is manually provided.\n * {EditorDescriptorInt.addFieldLookup} is used to create field and ${setFieldBasicOptionsFromSchema} to add basic field's options from schema.\n *\n * @experimental\n *\n * @param {Property} property - The property to create the lookup field for.\n * @param {FieldLookupProviderType<LookupModel, Service> | undefined} provider - Data provider for the lookup field.\n * @param {SchemaProperty} schemaProperty - Manually provided schema property.\n *\n * @return The created lookup field.\n */\n public addLookupFromSchema<\n Property extends keyof FieldsModel,\n Service = undefined,\n LookupModel extends NonNullable<FieldsModel[Property]> = NonNullable<FieldsModel[Property]>\n >(property: Property, provider: FieldLookupProviderType<LookupModel, Service> | undefined, schemaProperty: SchemaProperty) {\n const field = this.descriptor.addFieldLookup<Property, Service, LookupModel>(property, {serviceProvider: provider});\n setFieldBasicOptionsFromSchema(field, schemaProperty);\n return field;\n }\n\n /**\n * <em>Experimental:</em> Adds a one-to-many editor field.\n * {EditorDescriptorInt.addFieldManyEditor} is used to create field and ${setFieldBasicOptionsFromSchema} to add basic field's options from schema.\n *\n * @experimental\n *\n * @param {Property} property - The property to create the many editor field for.\n * @param {TableviewDescriptorInst<FieldModel, any, any, FieldsModel>} tableviewDescriptor - Tableview descriptor.\n *\n * @return The created one-to-many editor field.\n */\n addManyEditor<Property extends Extract<keyof FieldsModel, keyof SchModel>, FieldModel = ArrayItemType<FieldsModel[Property]>, FieldValue = FieldsModel[Property]>(\n property: Property,\n tableviewDescriptor: TableviewDescriptorInst<FieldModel, any, any, FieldsModel, FieldModel, FieldModel, FieldModel, FieldModel>\n ): FieldManyEditorDescriptor<FieldModel, FieldsModel, FieldValue, Parent> {\n const field = this.descriptor.addFieldManyEditor<Property, FieldModel, FieldValue>(property, tableviewDescriptor);\n setFieldBasicOptionsFromSchema(field, this.schema.properties[property]);\n return field;\n }\n\n /**\n * <em>Experimental:</em> Adds an one-to-many editor field where property schema is manually provided.\n * {EditorDescriptorInt.addFieldManyEditor} is used to create field and ${setFieldBasicOptionsFromSchema} to add basic field's options from schema.\n *\n * @experimental\n *\n * @param {Property} property - The property to create the many editor field for.\n * @param {TableviewDescriptorType<FieldModel, any, any, FieldsModel>} tableviewDescriptor - Tableview descriptor.\n * @param {SchemaProperty} schemaProperty - Manually provided schema property.\n *\n * @return The created one-to-many editor field.\n */\n addManyEditorFromSchema<Property extends keyof FieldsModel, FieldModel = ArrayItemType<FieldsModel[Property]>, FieldValue = FieldsModel[Property]>(\n property: Property,\n tableviewDescriptor: TableviewDescriptorInst<FieldModel, any, any, FieldsModel, FieldModel, FieldModel, FieldModel, FieldModel>,\n schemaProperty: SchemaProperty\n ): FieldManyEditorDescriptor<FieldModel, FieldsModel, FieldValue, Parent> {\n const field = this.descriptor.addFieldManyEditor<Property, FieldModel, FieldValue>(property, tableviewDescriptor);\n setFieldBasicOptionsFromSchema(field, schemaProperty);\n return field;\n }\n\n /**\n * <em>Experimental:</em> Adds a many-to-many editor field.\n * {EditorDescriptorInt.addFieldManyToManyEditor} is used to create field and ${setFieldBasicOptionsFromSchema} to add basic field's options from schema.\n *\n * @experimental\n *\n * @param {Property} property - The property to create the many editor field for.\n * @param {TableDescriptorInst<FieldModel>} mainTableDescriptor - Main table descriptor.\n * @param {TableDescriptorInst<FieldModel>} lookupTableDescriptor - Lookup table descriptor.\n * @param {ITableDataProvider<FieldModel, ServiceType>} lookupDataProvider - Lookup data provider.\n *\n * @return The created many-to-many editor field.\n */\n addManyToManyEditor<\n Property extends Extract<keyof FieldsModel, keyof SchModel>,\n ServiceType,\n FieldModel = ArrayItemType<FieldsModel[Property]>,\n FieldValue = FieldsModel[Property]\n >(\n property: Property,\n mainTableDescriptor: TableDescriptorInst<FieldModel>,\n lookupTableDescriptor: TableDescriptorInst<FieldModel>,\n lookupDataProvider: ITableDataProvider<FieldModel, ServiceType>\n ): FieldManyToManyEditorDescriptor<FieldModel, FieldsModel, ServiceType, FieldValue, Parent> {\n const field = this.descriptor.addFieldManyToManyEditor<Property, ServiceType, FieldModel, FieldValue>(\n property,\n mainTableDescriptor,\n lookupTableDescriptor,\n lookupDataProvider\n );\n setFieldBasicOptionsFromSchema(field, this.schema.properties[property]);\n return field;\n }\n\n /**\n * <em>Experimental:</em> Adds a many-to-many editor field where property schema is manually provided.\n * {EditorDescriptorInt.addFieldManyToManyEditor} is used to create field and ${setFieldBasicOptionsFromSchema} to add basic field's options from schema.\n *\n * @experimental\n *\n * @param {Property} property - The property to create the many editor field for.\n * @param {TableDescriptorInst<FieldModel>} mainTableDescriptor - Main table descriptor.\n * @param {TableDescriptorInst<FieldModel>} lookupTableDescriptor - Lookup table descriptor.\n * @param {ITableDataProvider<FieldModel, ServiceType>} lookupDataProvider - Lookup data provider.\n * @param {SchemaProperty} schemaProperty - Manually provided schema property.\n *\n * @return The created many-to-many editor field.\n */\n addManyToManyEditorFromSchema<Property extends keyof FieldsModel, ServiceType, FieldModel = ArrayItemType<FieldsModel[Property]>, FieldValue = FieldsModel[Property]>(\n property: Property,\n mainTableDescriptor: TableDescriptorInst<FieldModel>,\n lookupTableDescriptor: TableDescriptorInst<FieldModel>,\n lookupDataProvider: ITableDataProvider<FieldModel, ServiceType>,\n schemaProperty: SchemaProperty\n ): FieldManyToManyEditorDescriptor<FieldModel, FieldsModel, ServiceType, FieldValue, Parent> {\n const field = this.descriptor.addFieldManyToManyEditor<Property, ServiceType, FieldModel, FieldValue>(\n property,\n mainTableDescriptor,\n lookupTableDescriptor,\n lookupDataProvider\n );\n setFieldBasicOptionsFromSchema(field, schemaProperty);\n return field;\n }\n}\n\n/**\n * <em>Experimental:</em> Creates builder for adding fields to descriptor based on provided model schema.\n *\n * @experimental\n *\n * @param {TableviewDescriptorInst<Model, any, any, Parent, any, AddModel, EditModel, FieldsModel> | EditorDescriptorInst<Model, Parent>} descriptor - Descriptor to add fields to.\n * @param {SchemaModel<SchModel>} schema - The schema with metadata about properties for fields.\n * @param {FieldsFromSchemaOptsType<SchModel>} [opts] - Additional options.\n *\n * @return {SchemaFieldsBuilder<Model, Parent, AddModel, EditModel , FieldsModel, SchModel>} - The SchemaFieldsBuilder object containing the extracted fields.\n */\nexport function fieldsFromSchema<\n Model,\n Parent = undefined,\n AddModel = Model,\n EditModel = Model,\n FieldsModel = TableviewDescriptorFieldsManageMultiType<Model, AddModel, EditModel>,\n SchModel = Model\n>(\n descriptor: TableviewDescriptorInst<Model, any, any, Parent, any, AddModel, EditModel, FieldsModel> | EditorDescriptorInst<FieldsModel, Parent>,\n schema: SchemaModel<SchModel>,\n opts?: FieldsFromSchemaOptsType<SchModel>\n): SchemaFieldsBuilder<Model, Parent, AddModel, EditModel, FieldsModel, SchModel> {\n return new SchemaFieldsBuilder<Model, Parent, AddModel, EditModel, FieldsModel, SchModel>(descriptor, schema, opts);\n}\n\n/**\n * <em>Experimental:</em> Adds a field input to editor descriptor based on the given schema property and options.\n *\n * @experimental\n *\n * @param {TableviewDescriptorInst | EditorDescriptorInst} descriptor - Descriptor to add field to.\n * @param {keyof Model} property - The property of the model.\n * @param {SchemaProperty} propertySchema - The property's schema for the field.\n * @param {FieldInputFromSchemaOptsType<Model>} [opts] - Additional options.\n *\n * @return {FieldInputDescriptor<Model, NonNullable<Model[Property]>, Model[Property], Parent>} - The generated field input descriptor.\n */\nexport function addFieldInputFromSchema<\n Property extends keyof FieldsModel,\n Model,\n Parent = unknown,\n AddModel = Model,\n EditModel = Model,\n FieldsModel = TableviewDescriptorFieldsManageMultiType<Model, AddModel, EditModel>\n>(\n descriptor: TableviewDescriptorInst<Model, any, any, Parent, any, AddModel, EditModel, FieldsModel> | EditorDescriptorInst<FieldsModel, Parent>,\n property: Property,\n propertySchema: SchemaProperty,\n opts?: FieldInputFromSchemaOptsType<FieldsModel>\n): FieldInputDescriptor<FieldsModel, NonNullable<FieldsModel[Property]>, FieldsModel[Property], Parent> {\n const propertyType = property === opts?.currencyProperty ? 'currency' : (opts?.fieldType ?? propertySchema?.type);\n\n const field = new FieldInputDescriptor<FieldsModel, NonNullable<FieldsModel[Property]>, FieldsModel[Property], Parent>(property as string);\n if (descriptor instanceof TableviewDescriptorInst) {\n descriptor.addFieldDescriptor(field);\n } else {\n descriptor.addFieldDescriptor(field);\n }\n\n // Handle different property types\n switch (propertyType as FieldInputType) {\n case 'number':\n field.asNumber();\n break;\n case 'currency':\n field.asCurrency({\n currency: opts?.currency,\n currencyDisplay: opts?.currencyDisplay\n });\n break;\n case 'boolean':\n field.asSwitch();\n break;\n case 'text':\n case 'string':\n field.asText();\n break;\n case 'textarea':\n field.asTextarea();\n break;\n case 'date':\n field.asDatePicker({format: opts?.dateFormat ? fromAngularDateFormatToPrime(opts.dateFormat) : undefined});\n break;\n case 'date-time':\n field.asDatePicker({showTime: true, format: opts?.dateTimeFormat ? fromAngularDateFormatToPrime(opts.dateTimeFormat) : undefined});\n break;\n case 'enum':\n // eslint-disable-next-line no-case-declarations\n const enumModel = opts?.enumSchema ? enumModelFromSchema(opts.enumSchema) : opts?.enumModel;\n if (enumModel) {\n field.asRadioFromEnum(enumModel);\n } else {\n field.asText();\n }\n break;\n case 'hidden':\n field.asHidden();\n break;\n }\n\n // Handle different property validations\n if (propertyType === 'number' || propertyType === 'currency') {\n field.withNumberValidation({\n min:\n propertySchema.exclusiveMinimum && propertySchema.minimum != undefined\n ? propertySchema.minimum + (propertySchema.isInteger !== false ? 1 : 0.0001)\n : propertySchema.minimum,\n max:\n propertySchema.exclusiveMaximum && propertySchema.maximum != undefined\n ? propertySchema.maximum - (propertySchema.isInteger !== false ? 1 : 0.0001)\n : propertySchema.maximum,\n step: opts?.numberStep\n });\n if (opts?.numberUseGrouping) {\n field.withNumberGrouping();\n }\n if (opts?.numberMinFractionDigits != null || opts?.numberMaxFractionDigits != null || propertySchema.isInteger === false) {\n field.withNumberFractions({\n minFractionDigits: opts?.numberMinFractionDigits ?? (propertySchema.isInteger === false ? (propertyType === 'currency' ? 2 : 1) : 0),\n maxFractionDigits: opts?.numberMaxFractionDigits ?? (propertySchema.isInteger === false ? (propertyType === 'currency' ? 2 : 3) : 0)\n });\n }\n }\n\n if (propertyType === 'string' || propertyType === 'textarea' || propertyType === 'text') {\n field.withTextValidation({\n minLength: propertySchema.minLength,\n maxLength: propertySchema.maxLength,\n pattern: propertySchema.pattern ? new RegExp(propertySchema.pattern.slice(1, -1)) : undefined\n });\n\n if (propertyType === 'textarea' && opts?.textareaRows != null) {\n field.withTextareaRows(opts.textareaRows);\n }\n if (propertyType !== 'textarea' && propertySchema.isEmail) {\n field.withTextValidationEmail();\n }\n }\n\n setFieldBasicOptionsFromSchema(field, propertySchema);\n\n return field;\n}\n\n/**\n * <em>Experimental:</em> Adds a field enum lookup to editor descriptor based on the given schema property and options.\n *\n * @experimental\n *\n * @param {TableviewDescriptorInst<Model, any, any, Parent> | EditorDescriptorInst<Model, Parent>} descriptor - Descriptor to add field to.\n * @param {keyof Model} property - The property of the model.\n * @param {SchemaEnum<Enum> | EnumDescriptor<Enum>} enumOpt - The enum schema or enum model descriptor.\n * @param {SchemaProperty} propertySchema - The property's schema for the field.\n *\n * @returns {FieldLookupEnum<Enum>} - The field with enumeration values.\n */\nexport function addFieldEnumLookupFromSchema<\n Model,\n Parent = unknown,\n AddModel = Model,\n EditModel = Model,\n FieldsModel = TableviewDescriptorFieldsManageMultiType<Model, AddModel, EditModel>,\n Enum = any\n>(\n descriptor: TableviewDescriptorInst<Model, any, any, Parent, any, AddModel, EditModel, FieldsModel> | EditorDescriptorInst<FieldsModel, Parent>,\n property: keyof FieldsModel,\n enumOpt: SchemaEnum<Enum> | EnumDescriptor<Enum>,\n propertySchema: SchemaProperty\n) {\n const enumDescriptor = enumOpt instanceof EnumDescriptor ? enumOpt : enumModelFromSchema(enumOpt);\n const field = descriptor.addFieldLookupEnumUnsafe<Enum>(property as string, enumDescriptor);\n setFieldBasicOptionsFromSchema(field, propertySchema);\n return field;\n}\n\n/**\n * <em>Experimental:</em> Sets basic options for a field based on a given property schema.\n *\n * @param {AFieldDescriptor<FieldModel, EditorModel, FieldValue, ParentEditorModel>} field - The field to set options for.\n * @param {SchemaProperty} propertySchema - The property schema to base the options on.\n */\nexport function setFieldBasicOptionsFromSchema<FieldModel = any, EditorModel = any, FieldValue = FieldModel, ParentEditorModel = undefined>(\n field: AFieldDescriptor<FieldModel, EditorModel, FieldValue, ParentEditorModel>,\n propertySchema: SchemaProperty\n): void {\n if (propertySchema.required) field.withRequired();\n if (propertySchema.isReadOnly) field.withDisabled();\n}\n","import {Observable, map} from 'rxjs';\n\nimport {\n ApiServiceGetAllFilterType,\n ExtractGetAllParamsFilterType,\n ExtractGetAllParamsSortType,\n ExtractServiceGetAllDataType,\n GetAllHttpResponseType,\n toGetAllParamsAsUrlQuery\n} from '@mediusinc/mng-commons-data-api';\nimport {ClassFunctionKeysWithAnyArgsAndReturnType, DataListFiltersType, DataListSort, FilterMatchModeExtendedType, ServiceClassType} from '@mediusinc/mng-commons/core';\nimport {LookupDataProviderInst} from '@mediusinc/mng-commons/form/api';\n\n/**\n * Creates lookup data provider with predefined lookup function based on API service GetAll function.\n *\n * @param {ServiceClassType<Service>} service - The API service instance used to perform the `getAll` call.\n * @param {GetAllFn} getAllFn - The function key of the `getAll` method in the service to be invoked.\n * @param [opts] - Optional configuration for the lookup.\n * @param [opts.search] - Search parameter definition for mapping to filter property or global search property - both cannot be used at the same time.\n * @param {ExtractGetAllParamsFilterType<ApiServiceGetAllFilterType<Service, any, GetAllFn>>} [opts.search.filter.property] - The filter field used for search criteria.\n * @param {FilterMatchModeType} [opts.search.filter.matchMode] - The match mode used for the filter (e.g., contains, startsWith, etc.).\n * @param {FilterMatchModeType} [opts.search.globalSearch] - If search term is to be applied to global filter.\n * @param {Array<DataListSort<ExtractGetAllParamsSortType<ApiServiceGetAllFilterType<Service, any, GetAllFn>>>>} [opts.sorts] - The sorting options to order the fetched data.\n * @param {number} [opts.limit] - The number of records to fetch.\n * @return {LookupDataProviderInst<ExtractServiceGetAllDataType<Service, GetAllFn>, Service, ExtractGetAllParamsSortType<ApiServiceGetAllFilterType<Service, any, GetAllFn>>, ExtractGetAllParamsFilterType<ApiServiceGetAllFilterType<Service, any, GetAllFn>>>} The lookup data provider instance configured with the lookup function.\n */\nexport function lookupWithApiServiceGetAll<Service, GetAllFn extends ClassFunctionKeysWithAnyArgsAndReturnType<Service, Observable<GetAllHttpResponseType<any>>>>(\n service: ServiceClassType<Service>,\n getAllFn: GetAllFn,\n opts?: {\n search?: {\n filter?: {\n property: ExtractGetAllParamsFilterType<ApiServiceGetAllFilterType<Service, any, GetAllFn>>;\n matchMode?: FilterMatchModeExtendedType;\n };\n globalFilter?: boolean;\n };\n sort?: DataListSort<ExtractGetAllParamsSortType<ApiServiceGetAllFilterType<Service, any, GetAllFn>>>[];\n limit?: number;\n }\n): LookupDataProviderInst<\n ExtractServiceGetAllDataType<Service, GetAllFn>,\n Service,\n ExtractGetAllParamsSortType<ApiServiceGetAllFilterType<Service, any, GetAllFn>>,\n ExtractGetAllParamsFilterType<ApiServiceGetAllFilterType<Service, any, GetAllFn>>\n> {\n return new LookupDataProviderInst<\n ExtractServiceGetAllDataType<Service, GetAllFn>,\n Service,\n ExtractGetAllParamsSortType<ApiServiceGetAllFilterType<Service, any, GetAllFn>>,\n ExtractGetAllParamsFilterType<ApiServiceGetAllFilterType<Service, any, GetAllFn>>\n >(service as ServiceClassType<Service>).withLookup((params, service, search) => {\n if (search != null && search.length > 0) {\n if (opts?.search?.filter) {\n params = {\n offset: params?.offset,\n limit: params?.limit,\n sort: params?.sort,\n filters: <DataListFiltersType<ExtractGetAllParamsFilterType<ApiServiceGetAllFilterType<Service, any, GetAllFn>>>>{\n ...{\n [opts.search.filter.property]: {\n value: search,\n matchMode: opts.search.filter.matchMode ?? 'equals'\n }\n }\n }\n };\n } else if (opts?.search?.globalFilter) {\n params = {\n offset: params?.offset,\n limit: params?.limit,\n sort: params?.sort,\n search: search\n };\n }\n }\n if (opts?.sort && opts.sort.length > 0) {\n params = {\n ...params,\n sort: opts?.sort\n };\n }\n if (opts?.limit != null) {\n params = {\n ...params,\n limit: opts?.limit\n };\n }\n return (\n (service as any)[getAllFn as keyof object](toGetAllParamsAsUrlQuery(params ?? {})) as Observable<{\n data?: ExtractServiceGetAllDataType<Service, GetAllFn>[];\n totalCount?: number;\n }>\n ).pipe(map(res => res.data ?? []));\n });\n}\n","import {Injector, inject} from '@angular/core';\n\nimport {Observable} from 'rxjs';\n\nimport {\n ApiServiceGetAllFilterType,\n ExtractGetAllParamsFilterType,\n ExtractGetAllParamsSortType,\n ExtractServiceGetAllDataType,\n GetAllHttpResponseType,\n GetAllParamsDefaultWoFiltersType,\n apiServiceGetAll\n} from '@mediusinc/mng-commons-data-api';\nimport {ClassFunctionKeysWithAnyArgsAndReturnType, ServiceClassType} from '@mediusinc/mng-commons/core';\nimport {ModelDescriptor, TypeDescriptor} from '@mediusinc/mng-commons/model';\nimport {\n TableviewDataProviderInst,\n TableviewDescriptorFieldsManageMultiType,\n TableviewDescriptorInst,\n TableviewDescriptorInstConstructorOpts,\n TableviewInputBuilder\n} from '@mediusinc/mng-commons/tableview/api';\n\ntype TableviewWithGetAllParamsOpts<RequestParam, TableModel, AddModel, EditModel> = {\n requestParamsType: TypeDescriptor<RequestParam>;\n} & TableviewDescriptorInstConstructorOpts<TableModel, AddModel, EditModel>;\n\n/**\n * Creates a tableview with a given model, service and sorts/filters extracted from Data API Get All request params, service, and optional build function.\n *\n * @param {ModelDescriptor<Model>} model - The model descriptor.\n * @param {ServiceClassType<Service>} service - The class type of the service.\n * @param {TypeDescriptor<RequestParam> | TableviewWithGetAllParamsOpts<RequestParam, TableModel>} paramsOrOpts - The request param of get all request. Filters and sorts will be taken from here.\n * @param {(builder: TableviewBuilder) => void} [buildFn] - The optional callback function to customize the tableview using the prepared builder.\n *\n * @returns A tableview instance with descriptor, data provider and actions.\n */\nexport function tableviewWithGetAllParams<\n Model,\n Service,\n RequestParam extends GetAllParamsDefaultWoFiltersType,\n Sorts = ExtractGetAllParamsSortType<RequestParam>,\n Filters extends keyof any = ExtractGetAllParamsFilterType<RequestParam>\n>(\n model: ModelDescriptor<Model>,\n service: ServiceClassType<Service>,\n params: TypeDescriptor<RequestParam>,\n buildFn?: (\n builder: TableviewInputBuilder<\n Model,\n Service,\n TableviewDescriptorInst<Model, Sorts, Filters, undefined, Model, Model, Model, Model>,\n TableviewDataProviderInst<Model, Service, Sorts, Filters>,\n Sorts,\n Filters,\n Model,\n Model,\n Model,\n Model\n >\n ) => void\n) {\n const builder = new TableviewInputBuilder<\n Model,\n Service,\n TableviewDescriptorInst<Model, Sorts, Filters, undefined, Model, Model, Model, Model>,\n TableviewDataProviderInst<Model, Service, Sorts, Filters>,\n Sorts,\n Filters,\n Model,\n Model,\n Model,\n Model\n >(\n new TableviewDescriptorInst<Model, Sorts, Filters, undefined, Model, Model, Model, Model>(model),\n new TableviewDataProviderInst<Model, Service, Sorts, Filters>(service),\n inject(Injector)\n );\n buildFn?.(builder);\n return builder.build();\n}\n\n/**\n * Creates a tableview with a mulit-model (separate for add, edit and details), service and sorts/filters from API service's provided getAll function.\n *\n * @param {ModelDescriptor<Model>} model - The model descriptor.\n * @param {ServiceClassType<Service>} service - The class type of the service.\n * @param {TableviewWithGetAllParamsOpts} opts - Options providing get all request parameters and models for table, add and edit.\n * @param {(builder: TableviewBuilder) => void} [buildFn] - The optional callback function to customize the tableview using the prepared builder.\n *\n * @returns A tableview instance with descriptor, data provider and actions.\n */\nexport function tableviewMultiModelWithGetAllParams<\n Model,\n Service,\n RequestParam extends GetAllParamsDefaultWoFiltersType,\n Sorts = ExtractGetAllParamsSortType<RequestParam>,\n Filters extends keyof any = ExtractGetAllParamsFilterType<RequestParam>,\n TableModel = Model,\n AddModel = Model,\n EditModel = Model,\n FieldsModel = TableviewDescriptorFieldsManageMultiType<Model, AddModel, EditModel>\n>(\n model: ModelDescriptor<Model>,\n service: ServiceClassType<Service>,\n opts: Required<TableviewWithGetAllParamsOpts<RequestParam, TableModel, AddModel, EditModel>>,\n buildFn?: (\n builder: TableviewInputBuilder<\n Model,\n Service,\n TableviewDescriptorInst<Model, Sorts, Filters, undefined, TableModel, AddModel, EditModel, FieldsModel>,\n TableviewDataProviderInst<Model, Service, Sorts, Filters, ServiceClassType<Service>, TableModel, AddModel, EditModel>,\n Sorts,\n Filters,\n TableModel,\n AddModel,\n EditModel,\n FieldsModel\n >\n ) => void\n) {\n const builder = new TableviewInputBuilder<\n Model,\n Service,\n TableviewDescriptorInst<Model, Sorts, Filters, undefined, TableModel, AddModel, EditModel, FieldsModel>,\n TableviewDataProviderInst<Model, Service, Sorts, Filters, ServiceClassType<Service>, TableModel, AddModel, EditModel>,\n Sorts,\n Filters,\n TableModel,\n AddModel,\n EditModel,\n FieldsModel\n >(\n new TableviewDescriptorInst<Model, Sorts, Filters, undefined, TableModel, AddModel, EditModel, FieldsModel>(model, opts),\n new TableviewDataProviderInst<Model, Service, Sorts, Filters, ServiceClassType<Service>, TableModel, AddModel, EditModel>(service),\n inject(Injector)\n );\n buildFn?.(builder);\n return builder.build();\n}\n\n/**\n * Creates a tableview with a given model, service and sorts/filters from API service's provided getAll function.\n *\n * @param {ModelDescriptor<Model>} model - The model descriptor.\n * @param {ServiceClassType<Service>} service - The class type of the service.\n * @param {GetAllFn} getAllFn - The function from service for executing getAll requests. Filters and sorts will be taken from here.\n * @param {(builder: TableviewBuilder) => void} [buildFn] - The optional callback function to customize the tableview using the prepared builder.\n *\n * @returns A tableview instance with descriptor, data provider and actions.\n */\nexport function tableviewWithApiServiceGetAll<\n Model,\n Service,\n GetAllFn extends ClassFunctionKeysWithAnyArgsAndReturnType<Service, Observable<GetAllHttpResponseType<TableModel>>>,\n TableModel = ExtractServiceGetAllDataType<Service, GetAllFn>,\n RequestParams extends GetAllParamsDefaultWoFiltersType = ApiServiceGetAllFilterType<Service, TableModel, GetAllFn>,\n Sorts = ExtractGetAllParamsSortType<RequestParams>,\n Filters extends keyof any = ExtractGetAllParamsFilterType<RequestParams>\n>(\n model: ModelDescriptor<Model>,\n service: ServiceClassType<Service>,\n getAllFn: GetAllFn,\n buildFn?: (\n builder: TableviewInputBuilder<\n Model,\n Service,\n TableviewDescriptorInst<Model, Sorts, Filters, undefined, TableModel, Model, Model, Model>,\n TableviewDataProviderInst<Model, Service, Sorts, Filters, ServiceClassType<Service>, TableModel>,\n Sorts,\n Filters,\n TableModel,\n Model,\n Model,\n Model\n >\n ) => void\n) {\n const builder = new TableviewInputBuilder<\n Model,\n Service,\n TableviewDescriptorInst<Model, Sorts, Filters, undefined, TableModel, Model, Model, Model>,\n TableviewDataProviderInst<Model, Service, Sorts, Filters, ServiceClassType<Service>, TableModel>,\n Sorts,\n Filters,\n TableModel,\n Model,\n Model,\n Model\n >(\n new TableviewDescriptorInst<Model, Sorts, Filters, undefined, TableModel, Model, Model, Model>(model),\n new TableviewDataProviderInst<Model, Service, Sorts, Filters, ServiceClassType<Service>, TableModel>(service),\n inject(Injector)\n );\n builder.withAdjustDataProvider(dataProvider => dataProvider.withGetAll((params, service) => apiServiceGetAll(service, getAllFn as any, params)));\n buildFn?.(builder);\n return builder.build();\n}\n\n/**\n * Creates a tableview with a given model, service and sorts/filters from API service's provided getAll function.\n *\n * @param {ModelDescriptor<Model>} model - The model descriptor.\n * @param {ServiceClassType<Service>} service - The class type of the service.\n * @param {GetAllFn} serviceGetAllFn - The function from service for executing getAll requests. Filters and sorts will be taken from here.\n * @param {Required<TableviewDescriptorInstConstructorOpts<TableModel, AddModel, EditModel>>} - Required options: all remaining models for multi-tableview must be defined here.\n * @param {(builder: TableviewBuilder) => void} [buildFn] - The optional callback function to customize the tableview using the prepared builder.\n *\n * @returns A tableview instance with descriptor, data provider and actions.\n */\nexport function tableviewMultiModelWithApiServiceGetAll<\n Model,\n Service,\n ServiceGetAllFn extends ClassFunctionKeysWithAnyArgsAndReturnType<Service, Observable<GetAllHttpResponseType<TableModel>>>,\n TableModel,\n AddModel,\n EditModel,\n ServiceGetAllRequestParams extends GetAllParamsDefaultWoFiltersType = ApiServiceGetAllFilterType<Service, TableModel, ServiceGetAllFn>,\n Sorts = ExtractGetAllParamsSortType<ServiceGetAllRequestParams>,\n Filters extends keyof any = ExtractGetAllParamsFilterType<ServiceGetAllRequestParams>,\n FieldsModel = TableviewDescriptorFieldsManageMultiType<Model, AddModel, EditModel>\n>(\n model: ModelDescriptor<Model>,\n service: ServiceClassType<Service>,\n serviceGetAllFn: ServiceGetAllFn,\n opts: Required<TableviewDescriptorInstConstructorOpts<TableModel, AddModel, EditModel>>,\n buildFn?: (\n builder: TableviewInputBuilder<\n Model,\n Service,\n TableviewDescriptorInst<Model, Sorts, Filters, undefined, TableModel, AddModel, EditModel, FieldsModel>,\n TableviewDataProviderInst<Model, Service, Sorts, Filters, ServiceClassType<Service>, TableModel, AddModel, EditModel>,\n Sorts,\n Filters,\n TableModel,\n AddModel,\n EditModel,\n FieldsModel\n >\n ) => void\n) {\n const builder = new TableviewInputBuilder<\n Model,\n Service,\n TableviewDescriptorInst<Model, Sorts, Filters, undefined, TableModel, AddModel, EditModel, FieldsModel>,\n TableviewDataProviderInst<Model, Service, Sorts, Filters, ServiceClassType<Service>, TableModel, AddModel, EditModel>,\n Sorts,\n Filters,\n TableModel,\n AddModel,\n EditModel,\n FieldsModel\n >(\n new TableviewDescriptorInst<Model, Sorts, Filters, undefined, TableModel, AddModel, EditModel, FieldsModel>(model, opts),\n new TableviewDataProviderInst<Model, Service, Sorts, Filters, ServiceClassType<Service>, TableModel, AddModel, EditModel>(service),\n inject(Injector)\n );\n builder.withAdjustDataProvider(dataProvider => dataProvider.withGetAll((params, service) => apiServiceGetAll(service, serviceGetAllFn as any, params)));\n buildFn?.(builder);\n return builder.build();\n}\n","import {Type} from '@angular/core';\n\nimport {Observable, map} from 'rxjs';\n\nimport {ClassFunctionKeysWithParamAndReturnType, ClassFunctionKeysWithReturnType, ItemOrObservable, toObservable, valueToDefined} from '@mediusinc/mng-commons/core';\nimport {FilterDateOptsType, FilterGenericProperty, FilterNumberOptsType, FilterTypeEnum} from '@mediusinc/mng-commons/filter';\nimport {LookupDataProviderInst, lookupDataProvider} from '@mediusinc/mng-commons/form/api';\n\nexport interface FilterGenericPropertyOptsType {\n numberOpts?: FilterNumberOptsType;\n dateOpts?: FilterDateOptsType;\n}\n\n/**\n * Maps a property type to its corresponding filter type enum and applies default\n * filter options if no custom options are provided. If the property type is not recognized,\n * it returns a filter type value of null.\n *\n * @param propertyType - The property type to convert.\n * @param [opts] - The custom options to use for conversion.\n */\nexport function convertPropertyTypeToFilterType(\n propertyType?: string,\n opts?: FilterGenericPropertyOptsType\n): {filterType: FilterTypeEnum | null; opts?: FilterDateOptsType | FilterNumberOptsType} {\n let filterType: FilterTypeEnum | null;\n let returnOpts: FilterDateOptsType | FilterNumberOptsType | undefined;\n\n switch (propertyType?.toLowerCase()) {\n case 'date':\n filterType = FilterTypeEnum.Date;\n returnOpts = opts?.dateOpts\n ? opts.dateOpts\n : {\n displayFormat: 'dd.MM.yyyy',\n applyFromDisplayFormat: true\n };\n break;\n case 'datetime':\n case 'date_time':\n case 'date-time':\n filterType = FilterTypeEnum.Date;\n returnOpts = opts?.dateOpts ? opts.dateOpts : {displayFormat: 'dd.MM.yyyy HH:mm', applyFromDisplayFormat: true};\n break;\n case 'string':\n case 'text':\n filterType = FilterTypeEnum.String;\n break;\n case 'enum':\n filterType = FilterTypeEnum.LookupEnum;\n break;\n case 'boolean':\n case 'bool':\n filterType = FilterTypeEnum.Boolean;\n break;\n case 'float':\n case 'double':\n case 'decimal':\n filterType = FilterTypeEnum.Number;\n returnOpts = opts?.numberOpts ? opts.numberOpts : {displayFormat: '1.1-30'};\n break;\n case 'integer':\n case 'int':\n case 'long':\n filterType = FilterTypeEnum.Number;\n returnOpts = opts?.numberOpts;\n break;\n default:\n filterType = null;\n }\n\n return {filterType, opts: returnOpts};\n}\n\ntype FilterGenericPropertiesMetadataType = {[key: string]: string | undefined};\n\n/**\n * Converts an object of properties and types into an array of filterable properties with the corresponding filter types and options.\n * @param properties - The object containing the properties.\n * @param [opts] - Custom filter options.\n */\nexport function convertPropertyToFilterGenericProperties(properties: FilterGenericPropertiesMetadataType, opts?: FilterGenericPropertyOptsType): FilterGenericProperty[] {\n return Object.keys(properties).reduce<Array<FilterGenericProperty>>((filterableProperties, key) => {\n const {filterType, opts: filterOpts} = convertPropertyTypeToFilterType(properties[key], opts);\n if (filterType !== null) {\n filterableProperties.push({\n property: key,\n type: filterType,\n opts: filterOpts\n });\n }\n return filterableProperties;\n }, []);\n}\n\ntype FilterPropertyLookupFnType<Service, Response> = (service: Service, opts?: FilterGenericPropertyOptsType) => ItemOrObservable<Response>;\n\n/**\n * Creates a data provider for generic filter properties that can be used with the TableDescriptor's generic filter functionality.\n *\n * @param serviceType - The service to fetch the properties from.\n * @param lookupFn - The name of the service function to call for properties or function impl returning properties.\n * @param [opts] - Optional custom options for filter descriptors, such as date and number formatting.\n */\nexport function filterPropertyLookupProvider<Service>(\n serviceType: Type<Service>,\n lookupFn: FilterPropertyLookupFnType<Service, FilterGenericProperty[]> | ClassFunctionKeysWithReturnType<Service, Observable<FilterGenericPropertiesMetadataType>>,\n opts?: FilterGenericPropertyOptsType\n): LookupDataProviderInst<FilterGenericProperty> {\n return lookupDataProvider<FilterGenericProperty, Service>({service: serviceType}).withLookup((_, service) => {\n if (typeof lookupFn === 'function') {\n return toObservable(lookupFn(service));\n } else {\n return toObservable((service as any)[lookupFn]()).pipe(map(r => convertPropertyToFilterGenericProperties(r, opts)));\n }\n });\n}\n\ntype FilterValueSuggestionLookupFnType<Service> = (service: Service, field: string, search?: string) => ItemOrObservable<string[]>;\n\n/**\n * Creates a data provider for generic filter value suggestions that can be used with the TableDescriptor's generic filter functionality.\n *\n * @param service - The service to use for suggesting filter values.\n * @param lookupFn - The function name of the service to call for suggestion or function impl returning suggestions.\n */\nexport function filterValueSuggestionLookupProvider<Service>(\n service: Type<Service>,\n lookupFn: FilterValueSuggestionLookupFnType<Service> | ClassFunctionKeysWithParamAndReturnType<Service, {field: string; text?: string}, Observable<string[]>>\n): LookupDataProviderInst<string, Service, string, 'field'> {\n if (typeof lookupFn === 'function') {\n return lookupDataProvider<string, Service, string, 'field'>({service}).withLookup((params, service, search?) =>\n lookupFn(service, valueToDefined(params?.filters?.['field']?.value) as string, search)\n );\n } else {\n return lookupDataProvider<string, Service, string, 'field'>({service}).withLookup((params, service, search?) =>\n (service as any)[lookupFn]({\n field: valueToDefined(params?.filters?.['field']?.value).toString(),\n text: search\n })\n );\n }\n}\n","// schema\nexport * from './schema/columns-from-schema';\nexport * from './schema/enum-from-schema';\nexport * from './schema/fields-from-schema';\n\n// helpers\nexport * from './helpers/lookup-get-all-create';\nexport * from './helpers/tableview-get-all-params-create';\n\n// filter\nexport * from './filter/generic-filters';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mediusinc-mng-commons-data-api.mjs","sources":["../tmp-esm2022/lib/helpers/get-all-params.js","../tmp-esm2022/index.js","../tmp-esm2022/mediusinc-mng-commons-data-api.js"],"sourcesContent":["import { CommonsInternalError, FilterMatchMode, dataListParamsFilterToUrlQuery, dataListParamsFiltersToUrlQuery, dataListParamsSortToUrlQuery, mapToDataList } from '@mediusinc/mng-commons/core';\n/**\n * Converts a filter match mode to its corresponding enum value.\n *\n * @param {string} matchMode - The filter match mode from data list filter to convert.\n * @returns {GetAllParamsFilterMatchType} - The converted enum value.\n * @throws {CommonsInternalError} - If the filter match mode is not supported.\n */\nexport function toGetAllParamsFilterMatchMode(matchMode) {\n switch (matchMode) {\n case FilterMatchMode.Equals:\n return 'EQUALS';\n case FilterMatchMode.NotEquals:\n return 'NOT_EQUALS';\n case FilterMatchMode.Contains:\n return 'CONTAINS';\n case FilterMatchMode.NotContains:\n return 'NOT_CONTAINS';\n case FilterMatchMode.In:\n return 'IN';\n case FilterMatchMode.NotIn:\n return 'NOT_IN';\n case FilterMatchMode.StartsWith:\n return 'STARTS_WITH';\n case FilterMatchMode.EndsWith:\n return 'ENDS_WITH';\n case FilterMatchMode.LessThan:\n return 'LESS_THAN';\n case FilterMatchMode.LessThanOrEqualTo:\n return 'LESS_THAN_OR_EQUAL_TO';\n case FilterMatchMode.GreaterThan:\n return 'GREATER_THAN';\n case FilterMatchMode.GreaterThanOrEqualTo:\n return 'GREATER_THAN_OR_EQUAL_TO';\n case FilterMatchMode.Between:\n return 'BETWEEN';\n case FilterMatchMode.Exists:\n return 'EXISTS';\n case FilterMatchMode.DoesNotExist:\n return 'DOES_NOT_EXIST';\n default:\n throw new CommonsInternalError(`Filter match type '${matchMode}' not supported.`);\n }\n}\nfunction toGetAllParamsAsUrlQueryCommon(params) {\n const res = {};\n if (params.offset != null) {\n res.offset = params.offset;\n }\n if (params.limit != null) {\n res.limit = params.limit;\n }\n if (params.search != null && params.search !== '') {\n let caseSensitivityOption = 'ci';\n if (params.filters?.['global']?.caseSensitive === true) {\n caseSensitivityOption = 'cs';\n }\n res.globalFilter = `${caseSensitivityOption}:${params.search}`;\n }\n if (Array.isArray(params.sort) && params.sort.length > 0) {\n res.sort = dataListParamsSortToUrlQuery(params);\n }\n return res;\n}\n/**\n * Converts given parameters of a DataListParams object into a get all request param object with values as URL query string representation.\n *\n * @param {DataListParams} params - The parameters to convert.\n * @typeparam Sorts - The type of the sorting options for the data list.\n * @typeparam Filters - The type of the filters for the data list.\n * @returns {GetAllParamsUrlQueryType<Filters>} - Get all request param object with values as URL query string representation.\n */\nexport function toGetAllParamsAsUrlQuery(params) {\n const res = toGetAllParamsAsUrlQueryCommon(params);\n if (params.filters) {\n Object.keys(params.filters).forEach(key => {\n res[key] = dataListParamsFiltersToUrlQuery(params, key);\n });\n }\n return res;\n}\n/**\n * Converts given parameters of a DataListParams object into a get all request param object with values as URL query string representation.\n *\n * @param {DataListParams} params - The parameters to convert.\n * @param {FilterKey} filterKey - Property key for filter object.\n * @typeparam Sorts - The type of the sorting options for the data list.\n * @typeparam Filters - The type of the filters for the data list.\n * @typeparam FilterKey - The type representing property key where filters will be put to.\n * @returns {GetAllParamsUrlQueryWithFiltersInKeyType<FilterKey, Filters>} - Get all request param object with values as URL query string representation.\n */\nexport function toGetAllParamsAsUrlQueryWithFiltersInProperty(params, filterKey = 'filters') {\n const res = toGetAllParamsAsUrlQueryCommon(params);\n if (params.filters && Object.keys(params.filters).length > 0) {\n res[filterKey] = {};\n Object.keys(params.filters).forEach(key => {\n res[filterKey][key] = dataListParamsFiltersToUrlQuery(params, key);\n });\n }\n return res;\n}\n/**\n * Converts given parameters of a DataListParams object into a get all request param object with values as objects for POST requests.\n *\n * @param {DataListParams} params - The parameters to convert.\n * @typeparam Sorts - The type of the sorting options for the data list.\n * @typeparam Filters - The type of the filters for the data list.\n * @returns {GetAllParamsType<Sorts, Filters>} - Get all request param object with values as objects for POST requests.\n */\nexport function toGetAllParams(params) {\n const res = {};\n if (params.offset != null) {\n res.offset = params.offset;\n }\n if (params.limit != null) {\n res.limit = params.limit;\n }\n if (params.search != null) {\n res.globalFilter = {\n value: params.search\n };\n }\n if (Array.isArray(params.sort) && params.sort.length > 0) {\n res.sort = params.sort.map(s => ({\n property: s.property,\n direction: s.ascending === true || s.ascending == null ? 'ASCENDING' : 'DESCENDING'\n }));\n }\n if (params.filters) {\n Object.keys(params.filters).forEach(key => {\n const paramsFilter = params.filters[key];\n if (!paramsFilter.matchMode) {\n return;\n }\n let value = Array.isArray(paramsFilter.value) ? undefined : paramsFilter.value;\n let values = Array.isArray(paramsFilter.value) ? paramsFilter.value : undefined;\n if (paramsFilter.matchMode === FilterMatchMode.Exists || paramsFilter.matchMode === FilterMatchMode.DoesNotExist) {\n value = undefined;\n values = undefined;\n }\n else if (paramsFilter.matchMode === FilterMatchMode.In || paramsFilter.matchMode === FilterMatchMode.NotIn) {\n if (values == null || values.length === 0) {\n throw new CommonsInternalError(`Filter with mode ${paramsFilter.matchMode} must have values in array, but has ${values}`);\n }\n }\n else if (paramsFilter.matchMode === FilterMatchMode.Between) {\n if (values == null || values.length !== 2) {\n throw new CommonsInternalError(`Filter with mode ${paramsFilter.matchMode} must have 2 values in array, but has ${values}`);\n }\n }\n else if (paramsFilter.value == null) {\n return;\n }\n const caseSensitivity = paramsFilter.caseSensitive ? 'CASE_SENSITIVE' : paramsFilter.caseSensitive === false ? 'CASE_INSENSITIVE' : undefined;\n const filter = {\n filterMatchType: toGetAllParamsFilterMatchMode(paramsFilter.matchMode)\n };\n if (value != null) {\n filter.value = value;\n }\n if (values != null && Array.isArray(values) && values.length > 0) {\n filter.values = values;\n }\n if (caseSensitivity != null) {\n filter.caseSensitivity = caseSensitivity;\n }\n res[key] = filter;\n });\n }\n return res;\n}\n/**\n * Converts DataListParams to sort query URL representation.\n *\n * @param {DataListParams} params - The params object with sort property to convert.\n * @returns {string | undefined} - The formatted sort query URL param or undefined.\n */\nexport function toGetAllSortAsQueryUrl(params) {\n return dataListParamsSortToUrlQuery(params);\n}\n/**\n * Converts a DataListFilter object to a query URL string.\n *\n * @param {DataListFilter} filter - The filter object from params to convert.\n * @returns {string|undefined} - The formatted filter query URL param or undefined.\n */\nexport function toGetAllFilterAsQueryUrl(filter) {\n return dataListParamsFilterToUrlQuery(filter);\n}\n/**\n * Executes the \"getAll\" on API service with request parameters.\n * Get all is expected to be executed via GET method using params as URL queries.\n *\n * @param {Service} service - The API service instance.\n * @param {Function} getAllFn - The \"getAll\" function on provided service instance.\n * @param {Object} params - The data list params.\n * @returns {Observable<<DataListResult<Item>>>} An observable with data list result.\n */\nexport function executeGetAll(service, getAllFn, params) {\n return getAllFn.bind(service)(toGetAllParamsAsUrlQuery(params)).pipe(mapToDataList());\n}\n/**\n * Executes the \"getAll\" on API service with request parameters.\n * Get all is expected to be executed via GET method using params as URL queries.\n *\n * @param {Service} service - The API service instance.\n * @param {Function} getAllFn - The \"getAll\" function on provided service.\n * @param {Object} params - The data list params.\n * @returns {Observable<<DataListResult<Item>>>} An observable with data list result.\n */\nexport function apiServiceGetAll(service, fn, params) {\n return service[fn](toGetAllParamsAsUrlQuery(params)).pipe(mapToDataList());\n}\n/**\n * Executes the \"getAll\" on API service with request parameters.\n * Get all is expected to be executed via POST method using params as object in body of request.\n *\n * @param {Service} service - The API service instance.\n * @param {Function} getAllFn - The \"getAll\" function on provided service instance.\n * @param {Object} params - The data list params.\n * @returns {Observable<<DataListResult<Item>>>} An observable with data list result.\n */\nexport function executeGetAllAsPost(service, getAllFn, params) {\n return getAllFn.bind(service)(toGetAllParams(params)).pipe(mapToDataList());\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2V0LWFsbC1wYXJhbXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL2hlbHBlcnMvZ2V0LWFsbC1wYXJhbXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsT0FBTyxFQUVILG9CQUFvQixFQUlwQixlQUFlLEVBQ2YsOEJBQThCLEVBQzlCLCtCQUErQixFQUMvQiw0QkFBNEIsRUFDNUIsYUFBYSxFQUNoQixNQUFNLDZCQUE2QixDQUFDO0FBVXJDOzs7Ozs7R0FNRztBQUNILE1BQU0sVUFBVSw2QkFBNkIsQ0FBQyxTQUFpQjtJQUMzRCxRQUFRLFNBQVMsRUFBRSxDQUFDO1FBQ2hCLEtBQUssZUFBZSxDQUFDLE1BQU07WUFDdkIsT0FBTyxRQUFRLENBQUM7UUFDcEIsS0FBSyxlQUFlLENBQUMsU0FBUztZQUMxQixPQUFPLFlBQVksQ0FBQztRQUN4QixLQUFLLGVBQWUsQ0FBQyxRQUFRO1lBQ3pCLE9BQU8sVUFBVSxDQUFDO1FBQ3RCLEtBQUssZUFBZSxDQUFDLFdBQVc7WUFDNUIsT0FBTyxjQUFjLENBQUM7UUFDMUIsS0FBSyxlQUFlLENBQUMsRUFBRTtZQUNuQixPQUFPLElBQUksQ0FBQztRQUNoQixLQUFLLGVBQWUsQ0FBQyxLQUFLO1lBQ3RCLE9BQU8sUUFBUSxDQUFDO1FBQ3BCLEtBQUssZUFBZSxDQUFDLFVBQVU7WUFDM0IsT0FBTyxhQUFhLENBQUM7UUFDekIsS0FBSyxlQUFlLENBQUMsUUFBUTtZQUN6QixPQUFPLFdBQVcsQ0FBQztRQUN2QixLQUFLLGVBQWUsQ0FBQyxRQUFRO1lBQ3pCLE9BQU8sV0FBVyxDQUFDO1FBQ3ZCLEtBQUssZUFBZSxDQUFDLGlCQUFpQjtZQUNsQyxPQUFPLHVCQUF1QixDQUFDO1FBQ25DLEtBQUssZUFBZSxDQUFDLFdBQVc7WUFDNUIsT0FBTyxjQUFjLENBQUM7UUFDMUIsS0FBSyxlQUFlLENBQUMsb0JBQW9CO1lBQ3JDLE9BQU8sMEJBQTBCLENBQUM7UUFDdEMsS0FB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QVUsd0JBQXdCLENBQUMsTUFBdUI7SUFDNUQsT0FBTyw4QkFBOEIsQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUNsRCxDQUFDO0FBRUQ7Ozs7Ozs7O0dBUUc7QUFDSCxNQUFNLFVBQVUsYUFBYSxDQUN6QixPQUFnQixFQUNoQixRQUFvSCxFQUNwSCxNQUFzQztJQUV0QyxPQUFPLFFBQVEsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsd0JBQXdCLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFRLENBQUMsQ0FBQztBQUNoRyxDQUFDO0FBRUQ7Ozs7Ozs7O0dBUUc7QUFDSCxNQUFNLFVBQVUsZ0JBQWdCLENBQzVCLE9BQWdCLEVBQ2hCLEVBQXlJLEVBQ3pJLE1BQXNDO0lBRXRDLE9BQVEsT0FBZSxDQUFDLEVBQUUsQ0FBQyxDQUFDLHdCQUF3QixDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGFBQWEsRUFBUSxDQUFDLENBQUM7QUFDOUYsQ0FBQztBQUVEOzs7Ozs7OztHQVFHO0FBQ0gsTUFBTSxVQUFVLG1CQUFtQixDQUMvQixPQUFnQixFQUNoQixRQUFtSCxFQUNuSCxNQUFzQztJQUV0QyxPQUFPLFFBQVEsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGFBQWEsRUFBUSxDQUFDLENBQUM7QUFDdEYsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7T2JzZXJ2YWJsZX0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7XG4gICAgQ2xhc3NGdW5jdGlvbktleXNXaXRoUGFyYW1BbmRSZXR1cm5UeXBlLFxuICAgIENvbW1vbnNJbnRlcm5hbEVycm9yLFxuICAgIERhdGFMaXN0RmlsdGVyLFxuICAgIERhdGFMaXN0UGFyYW1zLFxuICAgIERhdGFMaXN0UmVzdWx0LFxuICAgIEZpbHRlck1hdGNoTW9kZSxcbiAgICBkYXRhTGlzdFBhcmFtc0ZpbHRlclRvVXJsUXVlcnksXG4gICAgZGF0YUxpc3RQYXJhbXNGaWx0ZXJzVG9VcmxRdWVyeSxcbiAgICBkYXRhTGlzdFBhcmFtc1NvcnRUb1VybFF1ZXJ5LFxuICAgIG1hcFRvRGF0YUxpc3Rcbn0gZnJvbSAnQG1lZGl1c2luYy9tbmctY29tbW9ucy9jb3JlJztcblxuaW1wb3J0IHtcbiAgICBHZXRBbGxQYXJhbXNGaWx0ZXJNYXRjaFR5cGUsXG4gICAgR2V0QWxsUGFyYW1zRmlsdGVyVHlwZSxcbiAgICBHZXRBbGxQYXJhbXNUeXBlLFxuICAgIEdldEFsbFBhcmFtc1VybFF1ZXJ5VHlwZSxcbiAgICBHZXRBbGxQYXJhbXNVcmxRdWVyeVdpdGhGaWx0ZXJzSW5LZXlUeXBlXG59IGZyb20gJy4uL21vZGVscy9yZXF1ZXN0LXBhcmFtcy5tb2RlbCc7XG5cbi8qKlxuICogQ29udmVydHMgYSBmaWx0ZXIgbWF0Y2ggbW9kZSB0byBpdHMgY29ycmVzcG9uZGluZyBlbnVtIHZhbHVlLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBtYXRjaE1vZGUgLSBUaGUgZmlsdGVyIG1hdGNoIG1vZGUgZnJvbSBkYXRhIGxpc3QgZmlsdGVyIHRvIGNvbnZlcnQuXG4gKiBAcmV0dXJucyB7R2V0QWxsUGFyYW1zRmlsdGVyTWF0Y2hUeXBlfSAtIFRoZSBjb252ZXJ0ZWQgZW51bSB2YWx1ZS5cbiAqIEB0aHJvd3Mge0NvbW1vbnNJbnRlcm5hbEVycm9yfSAtIElmIHRoZSBmaWx0ZXIgbWF0Y2ggbW9kZSBpcyBub3Qgc3VwcG9ydGVkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gdG9HZXRBbGxQYXJhbXNGaWx0ZXJNYXRjaE1vZGUobWF0Y2hNb2RlOiBzdHJpbmcpOiBHZXRBbGxQYXJhbXNGaWx0ZXJNYXRjaFR5cGUge1xuICAgIHN3aXRjaCAobWF0Y2hNb2RlKSB7XG4gICAgICAgIGNhc2UgRmlsdGVyTWF0Y2hNb2RlLkVxdWFsczpcbiAgICAgICAgICAgIHJldHVybiAnRVFVQUxTJztcbiAgICAgICAgY2FzZSBGaWx0ZXJNYXRjaE1vZGUuTm90RXF1YWxzOlxuICAgICAgICAgICAgcmV0dXJuICdOT1RfRVFVQUxTJztcbiAgICAgICAgY2FzZSBGaWx0ZXJNYXRjaE1vZGUuQ29udGFpbnM6XG4gICAgICAgICAgICByZXR1cm4gJ0NPTlRBSU5TJztcbiAgICAgICAgY2FzZSBGaWx0ZXJNYXRjaE1vZGUuTm90Q29udGFpbnM6XG4gICAgICAgICAgICByZXR1cm4gJ05PVF9DT05UQUlOUyc7XG4gICAgICAgIGNhc2UgRmlsdGVyTWF0Y2hNb2RlLkluOlxuICAgICAgICAgICAgcmV0dXJuICdJTic7XG4gICAgICAgIGNhc2UgRmlsdGVyTWF0Y2hNb2RlLk5vdEluOlxuICAgICAgICAgICAgcmV0dXJuICdOT1RfSU4nO1xuICAgICAgICBjYXNlIEZpbHRlck1hdGNoTW9kZS5TdGFydHNXaXRoOlxuICAgICAgICAgICAgcmV0dXJuICdTVEFSVFNfV0lUSCc7XG4gICAgICAgIGNhc2UgRmlsdGVyTWF0Y2hNb2RlLkVuZHNXaXRoOlxuICAgICAgICAgICAgcmV0dXJuICdFTkRTX1dJVEgnO1xuICAgICAgICBjYXNlIEZpbHRlck1hdGNoTW9kZS5MZXNzVGhhbjpcbiAgICAgICAgICAgIHJldHVybiAnTEVTU19USEFOJztcbiAgICAgICAgY2FzZSBGaWx0ZXJNYXRjaE1vZGUuTGVzc1RoYW5PckVxdWFsVG86XG4gICAgICAgICAgICByZXR1cm4gJ0xFU1NfVEhBTl9PUl9FUVVBTF9UTyc7XG4gICAgICAgIGNhc2UgRmlsdGVyTWF0Y2hNb2RlLkdyZWF0ZXJUaGFuOlxuICAgICAgICAgICAgcmV0dXJuICdHUkVBVEVSX1RIQU4nO1xuICAgICAgICBjYXNlIEZpbHRlck1hdGNoTW9kZS5HcmVhdGVyVGhhbk9yRXF1YWxUbzpcbiAgICAgICAgICAgIHJldHVybiAnR1JFQVRFUl9USEFOX09SX0VRVUFMX1RPJztcbiAgICAgICAgY2FzZSBGaWx0ZXJNYXRjaE1vZGUuQmV0d2VlbjpcbiAgICAgICAgICAgIHJldHVybiAnQkVUV0VFTic7XG4gICAgICAgIGNhc2UgRmlsdGVyTWF0Y2hNb2RlLkV4aXN0czpcbiAgICAgICAgICAgIHJldHVybiAnRVhJU1RTJztcbiAgICAgICAgY2FzZSBGaWx0ZXJNYXRjaE1vZGUuRG9lc05vdEV4aXN0OlxuICAgICAgICAgICAgcmV0dXJuICdET0VTX05PVF9FWElTVCc7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICB0aHJvdyBuZXcgQ29tbW9uc0ludGVybmFsRXJyb3IoYEZpbHRlciBtYXRjaCB0eXBlICcke21hdGNoTW9kZX0nIG5vdCBzdXBwb3J0ZWQuYCk7XG4gICAgfVxufVxuXG5mdW5jdGlvbiB0b0dldEFsbFBhcmFtc0FzVXJsUXVlcnlDb21tb248U29ydHMsIEZpbHRlcnMgZXh0ZW5kcyBrZXlvZiBhbnk+KHBhcmFtczogRGF0YUxpc3RQYXJhbXM8U29ydHMsIEZpbHRlcnM+KTogR2V0QWxsUGFyYW1zVXJsUXVlcnlUeXBlPEZpbHRlcnM+IHtcbiAgICBjb25zdCByZXMgPSB7fSBhcyBHZXRBbGxQYXJhbXNVcmxRdWVyeVR5cGU8RmlsdGVycz47XG5cbiAgICBpZiAocGFyYW1zLm9mZnNldCAhPSBudWxsKSB7XG4gICAgICAgIHJlcy5vZmZzZXQgPSBwYXJhbXMub2Zmc2V0O1xuICAgIH1cbiAgICBpZiAocGFyYW1zLmxpbWl0ICE9IG51bGwpIHtcbiAgICAgICAgcmVzLmxpbWl0ID0gcGFyYW1zLmxpbWl0O1xuICAgIH1cblxuICAgIGlmIChwYXJhbXMuc2VhcmNoICE9IG51bGwgJiYgcGFyYW1zLnNlYXJjaCAhPT0gJycpIHtcbiAgICAgICAgbGV0IGNhc2VTZW5zaXRpdml0eU9wdGlvbiA9ICdjaSc7XG5cbiAgICAgICAgaWYgKHBhcmFtcy5maWx0ZXJzPy5bJ2dsb2JhbCcgYXMgRmlsdGVyc10/LmNhc2VTZW5zaXRpdmUgPT09IHRydWUpIHtcbiAgICAgICAgICAgIGNhc2VTZW5zaXRpdml0eU9wdGlvbiA9ICdjcyc7XG4gICAgICAgIH1cblxuICAgICAgICByZXMuZ2xvYmFsRmlsdGVyID0gYCR7Y2FzZVNlbnNpdGl2aXR5T3B0aW9ufToke3BhcmFtcy5zZWFyY2h9YDtcbiAgICB9XG5cbiAgICBpZiAoQXJyYXkuaXNBcnJheShwYXJhbXMuc29ydCkgJiYgcGFyYW1zLnNvcnQubGVuZ3RoID4gMCkge1xuICAgICAgICByZXMuc29ydCA9IGRhdGFMaXN0UGFyYW1zU29ydFRvVXJsUXVlcnkocGFyYW1zIGFzIERhdGFMaXN0UGFyYW1zKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmVzO1xufVxuXG4vKipcbiAqIENvbnZlcnRzIGdpdmVuIHBhcmFtZXRlcnMgb2YgYSBEYXRhTGlzdFBhcmFtcyBvYmplY3QgaW50byBhIGdldCBhbGwgcmVxdWVzdCBwYXJhbSBvYmplY3Qgd2l0aCB2YWx1ZXMgYXMgVVJMIHF1ZXJ5IHN0cmluZyByZXByZXNlbnRhdGlvbi5cbiAqXG4gKiBAcGFyYW0ge0RhdGFMaXN0UGFyYW1zfSBwYXJhbXMgLSBUaGUgcGFyYW1ldGVycyB0byBjb252ZXJ0LlxuICogQHR5cGVwYXJhbSBTb3J0cyAtIFRoZSB0eXBlIG9mIHRoZSBzb3J0aW5nIG9wdGlvbnMgZm9yIHRoZSBkYXRhIGxpc3QuXG4gKiBAdHlwZXBhcmFtIEZpbHRlcnMgLSBUaGUgdHlwZSBvZiB0aGUgZmlsdGVycyBmb3IgdGhlIGRhdGEgbGlzdC5cbiAqIEByZXR1cm5zIHtHZXRBbGxQYXJhbXNVcmxRdWVyeVR5cGU8RmlsdGVycz59IC0gR2V0IGFsbCByZXF1ZXN0IHBhcmFtIG9iamVjdCB3aXRoIHZhbHVlcyBhcyBVUkwgcXVlcnkgc3RyaW5nIHJlcHJlc2VudGF0aW9uLlxuICovXG5leHBvcnQgZnVuY3Rpb24gdG9HZXRBbGxQYXJhbXNBc1VybFF1ZXJ5PFNvcnRzLCBGaWx0ZXJzIGV4dGVuZHMga2V5b2YgYW55PihwYXJhbXM6IERhdGFMaXN0UGFyYW1zPFNvcnRzLCBGaWx0ZXJzPik6IEdldEFsbFBhcmFtc1VybFF1ZXJ5VHlwZTxGaWx0ZXJzPiB7XG4gICAgY29uc3QgcmVzID0gdG9HZXRBbGxQYXJhbXNBc1VybFF1ZXJ5Q29tbW9uKHBhcmFtcyk7XG5cbiAgICBpZiAocGFyYW1zLmZpbHRlcnMpIHtcbiAgICAgICAgT2JqZWN0LmtleXMocGFyYW1zLmZpbHRlcnMpLmZvckVhY2goa2V5ID0+IHtcbiAgICAgICAgICAgIHJlc1trZXkgYXMgRmlsdGVyc10gPSBkYXRhTGlzdFBhcmFtc0ZpbHRlcnNUb1VybFF1ZXJ5KHBhcmFtcywga2V5IGFzIEZpbHRlcnMpIGFzIGFueTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlcztcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBnaXZlbiBwYXJhbWV0ZXJzIG9mIGEgRGF0YUxpc3RQYXJhbXMgb2JqZWN0IGludG8gYSBnZXQgYWxsIHJlcXVlc3QgcGFyYW0gb2JqZWN0IHdpdGggdmFsdWVzIGFzIFVSTCBxdWVyeSBzdHJpbmcgcmVwcmVzZW50YXRpb24uXG4gKlxuICogQHBhcmFtIHtEYXRhTGlzdFBhcmFtc30gcGFyYW1zIC0gVGhlIHBhcmFtZXRlcnMgdG8gY29udmVydC5cbiAqIEBwYXJhbSB7RmlsdGVyS2V5fSBmaWx0ZXJLZXkgLSBQcm9wZXJ0eSBrZXkgZm9yIGZpbHRlciBvYmplY3QuXG4gKiBAdHlwZXBhcmFtIFNvcnRzIC0gVGhlIHR5cGUgb2YgdGhlIHNvcnRpbmcgb3B0aW9ucyBmb3IgdGhlIGRhdGEgbGlzdC5cbiAqIEB0eXBlcGFyYW0gRmlsdGVycyAtIFRoZSB0eXBlIG9mIHRoZSBmaWx0ZXJzIGZvciB0aGUgZGF0YSBsaXN0LlxuICogQHR5cGVwYXJhbSBGaWx0ZXJLZXkgLSBUaGUgdHlwZSByZXByZXNlbnRpbmcgcHJvcGVydHkga2V5IHdoZXJlIGZpbHRlcnMgd2lsbCBiZSBwdXQgdG8uXG4gKiBAcmV0dXJucyB7R2V0QWxsUGFyYW1zVXJsUXVlcnlXaXRoRmlsdGVyc0luS2V5VHlwZTxGaWx0ZXJLZXksIEZpbHRlcnM+fSAtIEdldCBhbGwgcmVxdWVzdCBwYXJhbSBvYmplY3Qgd2l0aCB2YWx1ZXMgYXMgVVJMIHF1ZXJ5IHN0cmluZyByZXByZXNlbnRhdGlvbi5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvR2V0QWxsUGFyYW1zQXNVcmxRdWVyeVdpdGhGaWx0ZXJzSW5Qcm9wZXJ0eTxTb3J0cywgRmlsdGVycyBleHRlbmRzIGtleW9mIGFueSwgRmlsdGVyS2V5IGV4dGVuZHMgc3RyaW5nIHwgbnVtYmVyIHwgc3ltYm9sID0gJ2ZpbHRlcnMnPihcbiAgICBwYXJhbXM6IERhdGFMaXN0UGFyYW1zPFNvcnRzLCBGaWx0ZXJzPixcbiAgICBmaWx0ZXJLZXk6IEZpbHRlcktleSA9ICdmaWx0ZXJzJyBhcyBGaWx0ZXJLZXlcbik6IEdldEFsbFBhcmFtc1VybFF1ZXJ5V2l0aEZpbHRlcnNJbktleVR5cGU8RmlsdGVyS2V5LCBGaWx0ZXJzPiB7XG4gICAgY29uc3QgcmVzID0gdG9HZXRBbGxQYXJhbXNBc1VybFF1ZXJ5Q29tbW9uKHBhcmFtcykgYXMgR2V0QWxsUGFyYW1zVXJsUXVlcnlXaXRoRmlsdGVyc0luS2V5VHlwZTxGaWx0ZXJLZXksIEZpbHRlcnM+O1xuXG4gICAgaWYgKHBhcmFtcy5maWx0ZXJzICYmIE9iamVjdC5rZXlzKHBhcmFtcy5maWx0ZXJzKS5sZW5ndGggPiAwKSB7XG4gICAgICAgIChyZXMgYXMgYW55KVtmaWx0ZXJLZXldID0ge307XG4gICAgICAgIE9iamVjdC5rZXlzKHBhcmFtcy5maWx0ZXJzKS5mb3JFYWNoKGtleSA9PiB7XG4gICAgICAgICAgICAocmVzIGFzIGFueSlbZmlsdGVyS2V5XVtrZXkgYXMgRmlsdGVyc10gPSBkYXRhTGlzdFBhcmFtc0ZpbHRlcnNUb1VybFF1ZXJ5KHBhcmFtcywga2V5IGFzIEZpbHRlcnMpIGFzIGFueTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlcztcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBnaXZlbiBwYXJhbWV0ZXJzIG9mIGEgRGF0YUxpc3RQYXJhbXMgb2JqZWN0IGludG8gYSBnZXQgYWxsIHJlcXVlc3QgcGFyYW0gb2JqZWN0IHdpdGggdmFsdWVzIGFzIG9iamVjdHMgZm9yIFBPU1QgcmVxdWVzdHMuXG4gKlxuICogQHBhcmFtIHtEYXRhTGlzdFBhcmFtc30gcGFyYW1zIC0gVGhlIHBhcmFtZXRlcnMgdG8gY29udmVydC5cbiAqIEB0eXBlcGFyYW0gU29ydHMgLSBUaGUgdHlwZSBvZiB0aGUgc29ydGluZyBvcHRpb25zIGZvciB0aGUgZGF0YSBsaXN0LlxuICogQHR5cGVwYXJhbSBGaWx0ZXJzIC0gVGhlIHR5cGUgb2YgdGhlIGZpbHRlcnMgZm9yIHRoZSBkYXRhIGxpc3QuXG4gKiBAcmV0dXJucyB7R2V0QWxsUGFyYW1zVHlwZTxTb3J0cywgRmlsdGVycz59IC0gR2V0IGFsbCByZXF1ZXN0IHBhcmFtIG9iamVjdCB3aXRoIHZhbHVlcyBhcyBvYmplY3RzIGZvciBQT1NUIHJlcXVlc3RzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gdG9HZXRBbGxQYXJhbXM8U29ydHMsIEZpbHRlcnMgZXh0ZW5kcyBrZXlvZiBhbnk+KHBhcmFtczogRGF0YUxpc3RQYXJhbXM8U29ydHMsIEZpbHRlcnM+KTogR2V0QWxsUGFyYW1zVHlwZTxTb3J0cywgRmlsdGVycz4ge1xuICAgIGNvbnN0IHJlcyA9IHt9IGFzIEdldEFsbFBhcmFtc1R5cGU8U29ydHMsIEZpbHRlcnM+O1xuXG4gICAgaWYgKHBhcmFtcy5vZmZzZXQgIT0gbnVsbCkge1xuICAgICAgICByZXMub2Zmc2V0ID0gcGFyYW1zLm9mZnNldDtcbiAgICB9XG4gICAgaWYgKHBhcmFtcy5saW1pdCAhPSBudWxsKSB7XG4gICAgICAgIHJlcy5saW1pdCA9IHBhcmFtcy5saW1pdDtcbiAgICB9XG5cbiAgICBpZiAocGFyYW1zLnNlYXJjaCAhPSBudWxsKSB7XG4gICAgICAgIHJlcy5nbG9iYWxGaWx0ZXIgPSB7XG4gICAgICAgICAgICB2YWx1ZTogcGFyYW1zLnNlYXJjaFxuICAgICAgICB9O1xuICAgIH1cblxuICAgIGlmIChBcnJheS5pc0FycmF5KHBhcmFtcy5zb3J0KSAmJiBwYXJhbXMuc29ydC5sZW5ndGggPiAwKSB7XG4gICAgICAgIHJlcy5zb3J0ID0gcGFyYW1zLnNvcnQubWFwKHMgPT4gKHtcbiAgICAgICAgICAgIHByb3BlcnR5OiBzLnByb3BlcnR5LFxuICAgICAgICAgICAgZGlyZWN0aW9uOiBzLmFzY2VuZGluZyA9PT0gdHJ1ZSB8fCBzLmFzY2VuZGluZyA9PSBudWxsID8gJ0FTQ0VORElORycgOiAnREVTQ0VORElORydcbiAgICAgICAgfSkpO1xuICAgIH1cblxuICAgIGlmIChwYXJhbXMuZmlsdGVycykge1xuICAgICAgICBPYmplY3Qua2V5cyhwYXJhbXMuZmlsdGVycykuZm9yRWFjaChrZXkgPT4ge1xuICAgICAgICAgICAgY29uc3QgcGFyYW1zRmlsdGVyID0gcGFyYW1zLmZpbHRlcnMhW2tleSBhcyBGaWx0ZXJzXSE7XG4gICAgICAgICAgICBpZiAoIXBhcmFtc0ZpbHRlci5tYXRjaE1vZGUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGxldCB2YWx1ZSA9IEFycmF5LmlzQXJyYXkocGFyYW1zRmlsdGVyLnZhbHVlKSA/IHVuZGVmaW5lZCA6IHBhcmFtc0ZpbHRlci52YWx1ZTtcbiAgICAgICAgICAgIGxldCB2YWx1ZXMgPSBBcnJheS5pc0FycmF5KHBhcmFtc0ZpbHRlci52YWx1ZSkgPyBwYXJhbXNGaWx0ZXIudmFsdWUgOiB1bmRlZmluZWQ7XG5cbiAgICAgICAgICAgIGlmIChwYXJhbXNGaWx0ZXIubWF0Y2hNb2RlID09PSBGaWx0ZXJNYXRjaE1vZGUuRXhpc3RzIHx8IHBhcmFtc0ZpbHRlci5tYXRjaE1vZGUgPT09IEZpbHRlck1hdGNoTW9kZS5Eb2VzTm90RXhpc3QpIHtcbiAgICAgICAgICAgICAgICB2YWx1ZSA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICB2YWx1ZXMgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHBhcmFtc0ZpbHRlci5tYXRjaE1vZGUgPT09IEZpbHRlck1hdGNoTW9kZS5JbiB8fCBwYXJhbXNGaWx0ZXIubWF0Y2hNb2RlID09PSBGaWx0ZXJNYXRjaE1vZGUuTm90SW4pIHtcbiAgICAgICAgICAgICAgICBpZiAodmFsdWVzID09IG51bGwgfHwgdmFsdWVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgQ29tbW9uc0ludGVybmFsRXJyb3IoYEZpbHRlciB3aXRoIG1vZGUgJHtwYXJhbXNGaWx0ZXIubWF0Y2hNb2RlfSBtdXN0IGhhdmUgdmFsdWVzIGluIGFycmF5LCBidXQgaGFzICR7dmFsdWVzfWApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSBpZiAocGFyYW1zRmlsdGVyLm1hdGNoTW9kZSA9PT0gRmlsdGVyTWF0Y2hNb2RlLkJldHdlZW4pIHtcbiAgICAgICAgICAgICAgICBpZiAodmFsdWVzID09IG51bGwgfHwgdmFsdWVzLmxlbmd0aCAhPT0gMikge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgQ29tbW9uc0ludGVybmFsRXJyb3IoYEZpbHRlciB3aXRoIG1vZGUgJHtwYXJhbXNGaWx0ZXIubWF0Y2hNb2RlfSBtdXN0IGhhdmUgMiB2YWx1ZXMgaW4gYXJyYXksIGJ1dCBoYXMgJHt2YWx1ZXN9YCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIGlmIChwYXJhbXNGaWx0ZXIudmFsdWUgPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgY2FzZVNlbnNpdGl2aXR5ID0gcGFyYW1zRmlsdGVyLmNhc2VTZW5zaXRpdmUgPyAnQ0FTRV9TRU5TSVRJVkUnIDogcGFyYW1zRmlsdGVyLmNhc2VTZW5zaXRpdmUgPT09IGZhbHNlID8gJ0NBU0VfSU5TRU5TSVRJVkUnIDogdW5kZWZpbmVkO1xuICAgICAgICAgICAgY29uc3QgZmlsdGVyID0gPEdldEFsbFBhcmFtc0ZpbHRlclR5cGU8YW55Pj57XG4gICAgICAgICAgICAgICAgZmlsdGVyTWF0Y2hUeXBlOiB0b0dldEFsbFBhcmFtc0ZpbHRlck1hdGNoTW9kZShwYXJhbXNGaWx0ZXIubWF0Y2hNb2RlKVxuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgaWYgKHZhbHVlICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICBmaWx0ZXIudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh2YWx1ZXMgIT0gbnVsbCAmJiBBcnJheS5pc0FycmF5KHZhbHVlcykgJiYgdmFsdWVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICBmaWx0ZXIudmFsdWVzID0gdmFsdWVzO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGNhc2VTZW5zaXRpdml0eSAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgZmlsdGVyLmNhc2VTZW5zaXRpdml0eSA9IGNhc2VTZW5zaXRpdml0eTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgKHJlcyBhcyBhbnkpW2tleSBhcyBGaWx0ZXJzXSA9IGZpbHRlcjtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlcztcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBEYXRhTGlzdFBhcmFtcyB0byBzb3J0IHF1ZXJ5IFVSTCByZXByZXNlbnRhdGlvbi5cbiAqXG4gKiBAcGFyYW0ge0RhdGFMaXN0UGFyYW1zfSBwYXJhbXMgLSBUaGUgcGFyYW1zIG9iamVjdCB3aXRoIHNvcnQgcHJvcGVydHkgdG8gY29udmVydC5cbiAqIEByZXR1cm5zIHtzdHJpbmcgfCB1bmRlZmluZWR9IC0gVGhlIGZvcm1hdHRlZCBzb3J0IHF1ZXJ5IFVSTCBwYXJhbSBvciB1bmRlZmluZWQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0dldEFsbFNvcnRBc1F1ZXJ5VXJsKHBhcmFtcz86IERhdGFMaXN0UGFyYW1zPGFueSwgYW55Pik6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIGRhdGFMaXN0UGFyYW1zU29ydFRvVXJsUXVlcnkocGFyYW1zKTtcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhIERhdGFMaXN0RmlsdGVyIG9iamVjdCB0byBhIHF1ZXJ5IFVSTCBzdHJpbmcuXG4gKlxuICogQHBhcmFtIHtEYXRhTGlzdEZpbHRlcn0gZmlsdGVyIC0gVGhlIGZpbHRlciBvYmplY3QgZnJvbSBwYXJhbXMgdG8gY29udmVydC5cbiAqIEByZXR1cm5zIHtzdHJpbmd8dW5kZWZpbmVkfSAtIFRoZSBmb3JtYXR0ZWQgZmlsdGVyIHF1ZXJ5IFVSTCBwYXJhbSBvciB1bmRlZmluZWQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0dldEFsbEZpbHRlckFzUXVlcnlVcmwoZmlsdGVyPzogRGF0YUxpc3RGaWx0ZXIpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiBkYXRhTGlzdFBhcmFtc0ZpbHRlclRvVXJsUXVlcnkoZmlsdGVyKTtcbn1cblxuLyoqXG4gKiBFeGVjdXRlcyB0aGUgXCJnZXRBbGxcIiBvbiBBUEkgc2VydmljZSB3aXRoIHJlcXVlc3QgcGFyYW1ldGVycy5cbiAqIEdldCBhbGwgaXMgZXhwZWN0ZWQgdG8gYmUgZXhlY3V0ZWQgdmlhIEdFVCBtZXRob2QgdXNpbmcgcGFyYW1zIGFzIFVSTCBxdWVyaWVzLlxuICpcbiAqIEBwYXJhbSB7U2VydmljZX0gc2VydmljZSAtIFRoZSBBUEkgc2VydmljZSBpbnN0YW5jZS5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGdldEFsbEZuIC0gVGhlIFwiZ2V0QWxsXCIgZnVuY3Rpb24gb24gcHJvdmlkZWQgc2VydmljZSBpbnN0YW5jZS5cbiAqIEBwYXJhbSB7T2JqZWN0fSBwYXJhbXMgLSBUaGUgZGF0YSBsaXN0IHBhcmFtcy5cbiAqIEByZXR1cm5zIHtPYnNlcnZhYmxlPDxEYXRhTGlzdFJlc3VsdDxJdGVtPj4+fSBBbiBvYnNlcnZhYmxlIHdpdGggZGF0YSBsaXN0IHJlc3VsdC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGV4ZWN1dGVHZXRBbGw8U2VydmljZSwgSXRlbSwgU29ydHMsIEZpbHRlcnMgZXh0ZW5kcyBrZXlvZiBhbnk+KFxuICAgIHNlcnZpY2U6IFNlcnZpY2UsXG4gICAgZ2V0QWxsRm46IChyZXF1ZXN0UGFyYW1ldGVyczogR2V0QWxsUGFyYW1zVXJsUXVlcnlUeXBlPEZpbHRlcnM+KSA9PiBPYnNlcnZhYmxlPHtkYXRhPzogSXRlbVtdOyB0b3RhbENvdW50PzogbnVtYmVyfT4sXG4gICAgcGFyYW1zOiBEYXRhTGlzdFBhcmFtczxTb3J0cywgRmlsdGVycz5cbik6IE9ic2VydmFibGU8RGF0YUxpc3RSZXN1bHQ8SXRlbT4+IHtcbiAgICByZXR1cm4gZ2V0QWxsRm4uYmluZChzZXJ2aWNlKSh0b0dldEFsbFBhcmFtc0FzVXJsUXVlcnkocGFyYW1zKSkucGlwZShtYXBUb0RhdGFMaXN0PEl0ZW0+KCkpO1xufVxuXG4vKipcbiAqIEV4ZWN1dGVzIHRoZSBcImdldEFsbFwiIG9uIEFQSSBzZXJ2aWNlIHdpdGggcmVxdWVzdCBwYXJhbWV0ZXJzLlxuICogR2V0IGFsbCBpcyBleHBlY3RlZCB0byBiZSBleGVjdXRlZCB2aWEgR0VUIG1ldGhvZCB1c2luZyBwYXJhbXMgYXMgVVJMIHF1ZXJpZXMuXG4gKlxuICogQHBhcmFtIHtTZXJ2aWNlfSBzZXJ2aWNlIC0gVGhlIEFQSSBzZXJ2aWNlIGluc3RhbmNlLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gZ2V0QWxsRm4gLSBUaGUgXCJnZXRBbGxcIiBmdW5jdGlvbiBvbiBwcm92aWRlZCBzZXJ2aWNlLlxuICogQHBhcmFtIHtPYmplY3R9IHBhcmFtcyAtIFRoZSBkYXRhIGxpc3QgcGFyYW1zLlxuICogQHJldHVybnMge09ic2VydmFibGU8PERhdGFMaXN0UmVzdWx0PEl0ZW0+Pj59IEFuIG9ic2VydmFibGUgd2l0aCBkYXRhIGxpc3QgcmVzdWx0LlxuICovXG5leHBvcnQgZnVuY3Rpb24gYXBpU2VydmljZUdldEFsbDxTZXJ2aWNlLCBJdGVtLCBTb3J0cywgRmlsdGVycyBleHRlbmRzIGtleW9mIGFueT4oXG4gICAgc2VydmljZTogU2VydmljZSxcbiAgICBmbjogQ2xhc3NGdW5jdGlvbktleXNXaXRoUGFyYW1BbmRSZXR1cm5UeXBlPFNlcnZpY2UsIEdldEFsbFBhcmFtc1VybFF1ZXJ5VHlwZTxGaWx0ZXJzPiwgT2JzZXJ2YWJsZTx7ZGF0YT86IEl0ZW1bXTsgdG90YWxDb3VudD86IG51bWJlcn0+PixcbiAgICBwYXJhbXM6IERhdGFMaXN0UGFyYW1zPFNvcnRzLCBGaWx0ZXJzPlxuKTogT2JzZXJ2YWJsZTxEYXRhTGlzdFJlc3VsdDxJdGVtPj4ge1xuICAgIHJldHVybiAoc2VydmljZSBhcyBhbnkpW2ZuXSh0b0dldEFsbFBhcmFtc0FzVXJsUXVlcnkocGFyYW1zKSkucGlwZShtYXBUb0RhdGFMaXN0PEl0ZW0+KCkpO1xufVxuXG4vKipcbiAqIEV4ZWN1dGVzIHRoZSBcImdldEFsbFwiIG9uIEFQSSBzZXJ2aWNlIHdpdGggcmVxdWVzdCBwYXJhbWV0ZXJzLlxuICogR2V0IGFsbCBpcyBleHBlY3RlZCB0byBiZSBleGVjdXRlZCB2aWEgUE9TVCBtZXRob2QgdXNpbmcgcGFyYW1zIGFzIG9iamVjdCBpbiBib2R5IG9mIHJlcXVlc3QuXG4gKlxuICogQHBhcmFtIHtTZXJ2aWNlfSBzZXJ2aWNlIC0gVGhlIEFQSSBzZXJ2aWNlIGluc3RhbmNlLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gZ2V0QWxsRm4gLSBUaGUgXCJnZXRBbGxcIiBmdW5jdGlvbiBvbiBwcm92aWRlZCBzZXJ2aWNlIGluc3RhbmNlLlxuICogQHBhcmFtIHtPYmplY3R9IHBhcmFtcyAtIFRoZSBkYXRhIGxpc3QgcGFyYW1zLlxuICogQHJldHVybnMge09ic2VydmFibGU8PERhdGFMaXN0UmVzdWx0PEl0ZW0+Pj59IEFuIG9ic2VydmFibGUgd2l0aCBkYXRhIGxpc3QgcmVzdWx0LlxuICovXG5leHBvcnQgZnVuY3Rpb24gZXhlY3V0ZUdldEFsbEFzUG9zdDxTZXJ2aWNlLCBJdGVtLCBTb3J0cywgRmlsdGVycyBleHRlbmRzIGtleW9mIGFueT4oXG4gICAgc2VydmljZTogU2VydmljZSxcbiAgICBnZXRBbGxGbjogKHJlcXVlc3RQYXJhbWV0ZXJzOiBHZXRBbGxQYXJhbXNUeXBlPFNvcnRzLCBGaWx0ZXJzPikgPT4gT2JzZXJ2YWJsZTx7ZGF0YT86IEl0ZW1bXTsgdG90YWxDb3VudD86IG51bWJlcn0+LFxuICAgIHBhcmFtczogRGF0YUxpc3RQYXJhbXM8U29ydHMsIEZpbHRlcnM+XG4pOiBPYnNlcnZhYmxlPERhdGFMaXN0UmVzdWx0PEl0ZW0+PiB7XG4gICAgcmV0dXJuIGdldEFsbEZuLmJpbmQoc2VydmljZSkodG9HZXRBbGxQYXJhbXMocGFyYW1zKSkucGlwZShtYXBUb0RhdGFMaXN0PEl0ZW0+KCkpO1xufVxuIl19","// helpers\nexport * from './lib/helpers/get-all-params';\n// models\nexport * from './lib/models/api-version.model';\nexport * from './lib/models/request-params.model';\nexport * from './lib/models/schema.model';\n// types\nexport * from './lib/types/extract-get-all-types.type';\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsVUFBVTtBQUNWLGNBQWMsOEJBQThCLENBQUM7QUFFN0MsU0FBUztBQUNULGNBQWMsZ0NBQWdDLENBQUM7QUFDL0MsY0FBYyxtQ0FBbUMsQ0FBQztBQUNsRCxjQUFjLDJCQUEyQixDQUFDO0FBRTFDLFFBQVE7QUFDUixjQUFjLHdDQUF3QyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gaGVscGVyc1xuZXhwb3J0ICogZnJvbSAnLi9saWIvaGVscGVycy9nZXQtYWxsLXBhcmFtcyc7XG5cbi8vIG1vZGVsc1xuZXhwb3J0ICogZnJvbSAnLi9saWIvbW9kZWxzL2FwaS12ZXJzaW9uLm1vZGVsJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL21vZGVscy9yZXF1ZXN0LXBhcmFtcy5tb2RlbCc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9tb2RlbHMvc2NoZW1hLm1vZGVsJztcblxuLy8gdHlwZXNcbmV4cG9ydCAqIGZyb20gJy4vbGliL3R5cGVzL2V4dHJhY3QtZ2V0LWFsbC10eXBlcy50eXBlJztcbiJdfQ==","/**\n * Generated bundle index. Do not edit.\n */\nexport * from './index';\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVkaXVzaW5jLW1uZy1jb21tb25zLWRhdGEtYXBpLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL21lZGl1c2luYy1tbmctY29tbW9ucy1kYXRhLWFwaS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUVILGNBQWMsU0FBUyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBHZW5lcmF0ZWQgYnVuZGxlIGluZGV4LiBEbyBub3QgZWRpdC5cbiAqL1xuXG5leHBvcnQgKiBmcm9tICcuL2luZGV4JztcbiJdfQ=="],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"mediusinc-mng-commons-data-api.mjs","sources":["../../src/lib/helpers/get-all-params.ts","../../src/index.ts","../../src/mediusinc-mng-commons-data-api.ts"],"sourcesContent":["import {Observable} from 'rxjs';\n\nimport {\n ClassFunctionKeysWithParamAndReturnType,\n CommonsInternalError,\n DataListFilter,\n DataListParams,\n DataListResult,\n FilterMatchMode,\n dataListParamsFilterToUrlQuery,\n dataListParamsFiltersToUrlQuery,\n dataListParamsSortToUrlQuery,\n mapToDataList\n} from '@mediusinc/mng-commons/core';\n\nimport {\n GetAllParamsFilterMatchType,\n GetAllParamsFilterType,\n GetAllParamsType,\n GetAllParamsUrlQueryType,\n GetAllParamsUrlQueryWithFiltersInKeyType\n} from '../models/request-params.model';\n\n/**\n * Converts a filter match mode to its corresponding enum value.\n *\n * @param {string} matchMode - The filter match mode from data list filter to convert.\n * @returns {GetAllParamsFilterMatchType} - The converted enum value.\n * @throws {CommonsInternalError} - If the filter match mode is not supported.\n */\nexport function toGetAllParamsFilterMatchMode(matchMode: string): GetAllParamsFilterMatchType {\n switch (matchMode) {\n case FilterMatchMode.Equals:\n return 'EQUALS';\n case FilterMatchMode.NotEquals:\n return 'NOT_EQUALS';\n case FilterMatchMode.Contains:\n return 'CONTAINS';\n case FilterMatchMode.NotContains:\n return 'NOT_CONTAINS';\n case FilterMatchMode.In:\n return 'IN';\n case FilterMatchMode.NotIn:\n return 'NOT_IN';\n case FilterMatchMode.StartsWith:\n return 'STARTS_WITH';\n case FilterMatchMode.EndsWith:\n return 'ENDS_WITH';\n case FilterMatchMode.LessThan:\n return 'LESS_THAN';\n case FilterMatchMode.LessThanOrEqualTo:\n return 'LESS_THAN_OR_EQUAL_TO';\n case FilterMatchMode.GreaterThan:\n return 'GREATER_THAN';\n case FilterMatchMode.GreaterThanOrEqualTo:\n return 'GREATER_THAN_OR_EQUAL_TO';\n case FilterMatchMode.Between:\n return 'BETWEEN';\n case FilterMatchMode.Exists:\n return 'EXISTS';\n case FilterMatchMode.DoesNotExist:\n return 'DOES_NOT_EXIST';\n default:\n throw new CommonsInternalError(`Filter match type '${matchMode}' not supported.`);\n }\n}\n\nfunction toGetAllParamsAsUrlQueryCommon<Sorts, Filters extends keyof any>(params: DataListParams<Sorts, Filters>): GetAllParamsUrlQueryType<Filters> {\n const res = {} as GetAllParamsUrlQueryType<Filters>;\n\n if (params.offset != null) {\n res.offset = params.offset;\n }\n if (params.limit != null) {\n res.limit = params.limit;\n }\n\n if (params.search != null && params.search !== '') {\n let caseSensitivityOption = 'ci';\n\n if (params.filters?.['global' as Filters]?.caseSensitive === true) {\n caseSensitivityOption = 'cs';\n }\n\n res.globalFilter = `${caseSensitivityOption}:${params.search}`;\n }\n\n if (Array.isArray(params.sort) && params.sort.length > 0) {\n res.sort = dataListParamsSortToUrlQuery(params as DataListParams);\n }\n\n return res;\n}\n\n/**\n * Converts given parameters of a DataListParams object into a get all request param object with values as URL query string representation.\n *\n * @param {DataListParams} params - The parameters to convert.\n * @typeparam Sorts - The type of the sorting options for the data list.\n * @typeparam Filters - The type of the filters for the data list.\n * @returns {GetAllParamsUrlQueryType<Filters>} - Get all request param object with values as URL query string representation.\n */\nexport function toGetAllParamsAsUrlQuery<Sorts, Filters extends keyof any>(params: DataListParams<Sorts, Filters>): GetAllParamsUrlQueryType<Filters> {\n const res = toGetAllParamsAsUrlQueryCommon(params);\n\n if (params.filters) {\n Object.keys(params.filters).forEach(key => {\n res[key as Filters] = dataListParamsFiltersToUrlQuery(params, key as Filters) as any;\n });\n }\n\n return res;\n}\n\n/**\n * Converts given parameters of a DataListParams object into a get all request param object with values as URL query string representation.\n *\n * @param {DataListParams} params - The parameters to convert.\n * @param {FilterKey} filterKey - Property key for filter object.\n * @typeparam Sorts - The type of the sorting options for the data list.\n * @typeparam Filters - The type of the filters for the data list.\n * @typeparam FilterKey - The type representing property key where filters will be put to.\n * @returns {GetAllParamsUrlQueryWithFiltersInKeyType<FilterKey, Filters>} - Get all request param object with values as URL query string representation.\n */\nexport function toGetAllParamsAsUrlQueryWithFiltersInProperty<Sorts, Filters extends keyof any, FilterKey extends string | number | symbol = 'filters'>(\n params: DataListParams<Sorts, Filters>,\n filterKey: FilterKey = 'filters' as FilterKey\n): GetAllParamsUrlQueryWithFiltersInKeyType<FilterKey, Filters> {\n const res = toGetAllParamsAsUrlQueryCommon(params) as GetAllParamsUrlQueryWithFiltersInKeyType<FilterKey, Filters>;\n\n if (params.filters && Object.keys(params.filters).length > 0) {\n (res as any)[filterKey] = {};\n Object.keys(params.filters).forEach(key => {\n (res as any)[filterKey][key as Filters] = dataListParamsFiltersToUrlQuery(params, key as Filters) as any;\n });\n }\n\n return res;\n}\n\n/**\n * Converts given parameters of a DataListParams object into a get all request param object with values as objects for POST requests.\n *\n * @param {DataListParams} params - The parameters to convert.\n * @typeparam Sorts - The type of the sorting options for the data list.\n * @typeparam Filters - The type of the filters for the data list.\n * @returns {GetAllParamsType<Sorts, Filters>} - Get all request param object with values as objects for POST requests.\n */\nexport function toGetAllParams<Sorts, Filters extends keyof any>(params: DataListParams<Sorts, Filters>): GetAllParamsType<Sorts, Filters> {\n const res = {} as GetAllParamsType<Sorts, Filters>;\n\n if (params.offset != null) {\n res.offset = params.offset;\n }\n if (params.limit != null) {\n res.limit = params.limit;\n }\n\n if (params.search != null) {\n res.globalFilter = {\n value: params.search\n };\n }\n\n if (Array.isArray(params.sort) && params.sort.length > 0) {\n res.sort = params.sort.map(s => ({\n property: s.property,\n direction: s.ascending === true || s.ascending == null ? 'ASCENDING' : 'DESCENDING'\n }));\n }\n\n if (params.filters) {\n Object.keys(params.filters).forEach(key => {\n const paramsFilter = params.filters![key as Filters]!;\n if (!paramsFilter.matchMode) {\n return;\n }\n\n let value = Array.isArray(paramsFilter.value) ? undefined : paramsFilter.value;\n let values = Array.isArray(paramsFilter.value) ? paramsFilter.value : undefined;\n\n if (paramsFilter.matchMode === FilterMatchMode.Exists || paramsFilter.matchMode === FilterMatchMode.DoesNotExist) {\n value = undefined;\n values = undefined;\n } else if (paramsFilter.matchMode === FilterMatchMode.In || paramsFilter.matchMode === FilterMatchMode.NotIn) {\n if (values == null || values.length === 0) {\n throw new CommonsInternalError(`Filter with mode ${paramsFilter.matchMode} must have values in array, but has ${values}`);\n }\n } else if (paramsFilter.matchMode === FilterMatchMode.Between) {\n if (values == null || values.length !== 2) {\n throw new CommonsInternalError(`Filter with mode ${paramsFilter.matchMode} must have 2 values in array, but has ${values}`);\n }\n } else if (paramsFilter.value == null) {\n return;\n }\n\n const caseSensitivity = paramsFilter.caseSensitive ? 'CASE_SENSITIVE' : paramsFilter.caseSensitive === false ? 'CASE_INSENSITIVE' : undefined;\n const filter = <GetAllParamsFilterType<any>>{\n filterMatchType: toGetAllParamsFilterMatchMode(paramsFilter.matchMode)\n };\n\n if (value != null) {\n filter.value = value;\n }\n if (values != null && Array.isArray(values) && values.length > 0) {\n filter.values = values;\n }\n if (caseSensitivity != null) {\n filter.caseSensitivity = caseSensitivity;\n }\n\n (res as any)[key as Filters] = filter;\n });\n }\n\n return res;\n}\n\n/**\n * Converts DataListParams to sort query URL representation.\n *\n * @param {DataListParams} params - The params object with sort property to convert.\n * @returns {string | undefined} - The formatted sort query URL param or undefined.\n */\nexport function toGetAllSortAsQueryUrl(params?: DataListParams<any, any>): string | undefined {\n return dataListParamsSortToUrlQuery(params);\n}\n\n/**\n * Converts a DataListFilter object to a query URL string.\n *\n * @param {DataListFilter} filter - The filter object from params to convert.\n * @returns {string|undefined} - The formatted filter query URL param or undefined.\n */\nexport function toGetAllFilterAsQueryUrl(filter?: DataListFilter): string | undefined {\n return dataListParamsFilterToUrlQuery(filter);\n}\n\n/**\n * Executes the \"getAll\" on API service with request parameters.\n * Get all is expected to be executed via GET method using params as URL queries.\n *\n * @param {Service} service - The API service instance.\n * @param {Function} getAllFn - The \"getAll\" function on provided service instance.\n * @param {Object} params - The data list params.\n * @returns {Observable<<DataListResult<Item>>>} An observable with data list result.\n */\nexport function executeGetAll<Service, Item, Sorts, Filters extends keyof any>(\n service: Service,\n getAllFn: (requestParameters: GetAllParamsUrlQueryType<Filters>) => Observable<{data?: Item[]; totalCount?: number}>,\n params: DataListParams<Sorts, Filters>\n): Observable<DataListResult<Item>> {\n return getAllFn.bind(service)(toGetAllParamsAsUrlQuery(params)).pipe(mapToDataList<Item>());\n}\n\n/**\n * Executes the \"getAll\" on API service with request parameters.\n * Get all is expected to be executed via GET method using params as URL queries.\n *\n * @param {Service} service - The API service instance.\n * @param {Function} getAllFn - The \"getAll\" function on provided service.\n * @param {Object} params - The data list params.\n * @returns {Observable<<DataListResult<Item>>>} An observable with data list result.\n */\nexport function apiServiceGetAll<Service, Item, Sorts, Filters extends keyof any>(\n service: Service,\n fn: ClassFunctionKeysWithParamAndReturnType<Service, GetAllParamsUrlQueryType<Filters>, Observable<{data?: Item[]; totalCount?: number}>>,\n params: DataListParams<Sorts, Filters>\n): Observable<DataListResult<Item>> {\n return (service as any)[fn](toGetAllParamsAsUrlQuery(params)).pipe(mapToDataList<Item>());\n}\n\n/**\n * Executes the \"getAll\" on API service with request parameters.\n * Get all is expected to be executed via POST method using params as object in body of request.\n *\n * @param {Service} service - The API service instance.\n * @param {Function} getAllFn - The \"getAll\" function on provided service instance.\n * @param {Object} params - The data list params.\n * @returns {Observable<<DataListResult<Item>>>} An observable with data list result.\n */\nexport function executeGetAllAsPost<Service, Item, Sorts, Filters extends keyof any>(\n service: Service,\n getAllFn: (requestParameters: GetAllParamsType<Sorts, Filters>) => Observable<{data?: Item[]; totalCount?: number}>,\n params: DataListParams<Sorts, Filters>\n): Observable<DataListResult<Item>> {\n return getAllFn.bind(service)(toGetAllParams(params)).pipe(mapToDataList<Item>());\n}\n","// helpers\nexport * from './lib/helpers/get-all-params';\n\n// models\nexport * from './lib/models/api-version.model';\nexport * from './lib/models/request-params.model';\nexport * from './lib/models/schema.model';\n\n// types\nexport * from './lib/types/extract-get-all-types.type';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
|
@@ -60,8 +60,10 @@
|
|
|
60
60
|
minimum: {{.}},{{/minimum}}{{#maximum}}
|
|
61
61
|
maximum: {{.}},{{/maximum}}{{#exclusiveMinimum}}
|
|
62
62
|
exclusiveMinimum: true,{{/exclusiveMinimum}}{{#exclusiveMaximum}}
|
|
63
|
-
exclusiveMaximum: true,{{/exclusiveMaximum}}{{#
|
|
64
|
-
isInteger:
|
|
63
|
+
exclusiveMaximum: true,{{/exclusiveMaximum}}{{#isFloat}}
|
|
64
|
+
isInteger: false,{{/isFloat}}{{#isDouble}}
|
|
65
|
+
isInteger: false,{{/isDouble}}{{#isNumeric}}{{^isInteger}}{{^isLong}}{{^isFloat}}{{^isDouble}}
|
|
66
|
+
isInteger: false,{{/isDouble}}{{/isFloat}}{{/isLong}}{{/isInteger}}{{/isNumeric}}{{#pattern}}
|
|
65
67
|
pattern: '{{{.}}}',{{/pattern}}{{#isArray}}
|
|
66
68
|
{{#minItems}}
|
|
67
69
|
minItems: {{minItems}},{{/minItems}}
|
package/package.json
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@mediusinc/mng-commons-data-api",
|
|
3
|
-
"version": "7.0.0-rc.
|
|
3
|
+
"version": "7.0.0-rc.2",
|
|
4
4
|
"peerDependencies": {
|
|
5
|
-
"@angular/core": "
|
|
6
|
-
"@mediusinc/mng-commons": "~7.0.0-rc.
|
|
5
|
+
"@angular/core": "~20.3.0",
|
|
6
|
+
"@mediusinc/mng-commons": "~7.0.0-rc.2"
|
|
7
7
|
},
|
|
8
8
|
"dependencies": {
|
|
9
9
|
"tslib": "^2.8.1"
|
package/tableview/index.d.ts
CHANGED
|
@@ -5,7 +5,7 @@ import { EnumDescriptor, ModelDescriptor, TypeDescriptor } from '@mediusinc/mng-
|
|
|
5
5
|
import { TableDescriptorInst, ColumnDescriptor, ITableDataProvider } from '@mediusinc/mng-commons/table/api';
|
|
6
6
|
import * as _mediusinc_mng_commons_tableview_api from '@mediusinc/mng-commons/tableview/api';
|
|
7
7
|
import { TableviewDescriptorInst, TableviewDescriptorFieldsManageMultiType, EditorDescriptorInst, FieldInputDescriptor, FieldLookupEnumDescriptor, FieldLookupProviderType, FieldManyEditorDescriptor, FieldManyToManyEditorDescriptor, AFieldDescriptor, TableviewInputBuilder, TableviewDataProviderInst, TableviewDescriptorInstConstructorOpts } from '@mediusinc/mng-commons/tableview/api';
|
|
8
|
-
import { Observable
|
|
8
|
+
import { Observable } from 'rxjs';
|
|
9
9
|
import { LookupDataProviderInst } from '@mediusinc/mng-commons/form/api';
|
|
10
10
|
import { Type } from '@angular/core';
|
|
11
11
|
import { FilterNumberOptsType, FilterDateOptsType, FilterTypeEnum, FilterGenericProperty } from '@mediusinc/mng-commons/filter';
|
|
@@ -14,7 +14,7 @@ type ColumnType = 'number' | 'currency' | 'boolean' | 'string' | 'text' | 'texta
|
|
|
14
14
|
type ColumnFromSchemaCommonOptsType<Model> = {
|
|
15
15
|
currencyProperty?: keyof Model;
|
|
16
16
|
currency?: string;
|
|
17
|
-
currencyDisplay?: 'symbol' | 'code' | '
|
|
17
|
+
currencyDisplay?: 'symbol' | 'code' | 'symbol-narrow';
|
|
18
18
|
dateFormat?: string;
|
|
19
19
|
dateTimeFormat?: string;
|
|
20
20
|
numberMinIntegerDigits?: number;
|
|
@@ -481,11 +481,7 @@ type FilterGenericPropertiesMetadataType = {
|
|
|
481
481
|
* @param [opts] - Custom filter options.
|
|
482
482
|
*/
|
|
483
483
|
declare function convertPropertyToFilterGenericProperties(properties: FilterGenericPropertiesMetadataType, opts?: FilterGenericPropertyOptsType): FilterGenericProperty[];
|
|
484
|
-
|
|
485
|
-
* Maps an Observable of properties to filter generic properties.
|
|
486
|
-
*/
|
|
487
|
-
declare function mapToFilterGenericProperties(opts?: FilterGenericPropertyOptsType): OperatorFunction<FilterGenericPropertiesMetadataType, FilterGenericProperty[]>;
|
|
488
|
-
type FilterPropertyLookupFnType<Service> = (service: Service) => ItemOrObservable<FilterGenericPropertiesMetadataType>;
|
|
484
|
+
type FilterPropertyLookupFnType<Service, Response> = (service: Service, opts?: FilterGenericPropertyOptsType) => ItemOrObservable<Response>;
|
|
489
485
|
/**
|
|
490
486
|
* Creates a data provider for generic filter properties that can be used with the TableDescriptor's generic filter functionality.
|
|
491
487
|
*
|
|
@@ -493,7 +489,7 @@ type FilterPropertyLookupFnType<Service> = (service: Service) => ItemOrObservabl
|
|
|
493
489
|
* @param lookupFn - The name of the service function to call for properties or function impl returning properties.
|
|
494
490
|
* @param [opts] - Optional custom options for filter descriptors, such as date and number formatting.
|
|
495
491
|
*/
|
|
496
|
-
declare function filterPropertyLookupProvider<Service>(serviceType: Type<Service>, lookupFn: FilterPropertyLookupFnType<Service> | ClassFunctionKeysWithReturnType<Service, Observable<FilterGenericPropertiesMetadataType>>, opts?: FilterGenericPropertyOptsType): LookupDataProviderInst<FilterGenericProperty
|
|
492
|
+
declare function filterPropertyLookupProvider<Service>(serviceType: Type<Service>, lookupFn: FilterPropertyLookupFnType<Service, FilterGenericProperty[]> | ClassFunctionKeysWithReturnType<Service, Observable<FilterGenericPropertiesMetadataType>>, opts?: FilterGenericPropertyOptsType): LookupDataProviderInst<FilterGenericProperty>;
|
|
497
493
|
type FilterValueSuggestionLookupFnType<Service> = (service: Service, field: string, search?: string) => ItemOrObservable<string[]>;
|
|
498
494
|
/**
|
|
499
495
|
* Creates a data provider for generic filter value suggestions that can be used with the TableDescriptor's generic filter functionality.
|
|
@@ -506,5 +502,5 @@ declare function filterValueSuggestionLookupProvider<Service>(service: Type<Serv
|
|
|
506
502
|
text?: string;
|
|
507
503
|
}, Observable<string[]>>): LookupDataProviderInst<string, Service, string, 'field'>;
|
|
508
504
|
|
|
509
|
-
export { SchemaColumnsBuilder, SchemaFieldsBuilder, addColumnFromSchema, addFieldEnumLookupFromSchema, addFieldInputFromSchema, columnsFromSchema, convertPropertyToFilterGenericProperties, convertPropertyTypeToFilterType, enumModelFromSchema, fieldsFromSchema, filterPropertyLookupProvider, filterValueSuggestionLookupProvider, lookupWithApiServiceGetAll,
|
|
505
|
+
export { SchemaColumnsBuilder, SchemaFieldsBuilder, addColumnFromSchema, addFieldEnumLookupFromSchema, addFieldInputFromSchema, columnsFromSchema, convertPropertyToFilterGenericProperties, convertPropertyTypeToFilterType, enumModelFromSchema, fieldsFromSchema, filterPropertyLookupProvider, filterValueSuggestionLookupProvider, lookupWithApiServiceGetAll, setFieldBasicOptionsFromSchema, tableviewMultiModelWithApiServiceGetAll, tableviewMultiModelWithGetAllParams, tableviewWithApiServiceGetAll, tableviewWithGetAllParams };
|
|
510
506
|
export type { FilterGenericPropertyOptsType };
|
package/version-info.json
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@mediusinc/mng-commons-data-api",
|
|
3
|
-
"version": "7.0.0-rc.
|
|
4
|
-
"tag":
|
|
5
|
-
"distance":
|
|
6
|
-
"hash": "
|
|
3
|
+
"version": "7.0.0-rc.2",
|
|
4
|
+
"tag": null,
|
|
5
|
+
"distance": null,
|
|
6
|
+
"hash": "66a002f",
|
|
7
7
|
"dirty": true,
|
|
8
|
-
"semver":
|
|
8
|
+
"semver": null,
|
|
9
9
|
"buildTimestamp": null,
|
|
10
|
-
"raw": "
|
|
10
|
+
"raw": "7.0.0-rc.2-66a002f-dirty"
|
|
11
11
|
}
|