@mediusinc/mng-commons-data-api 5.2.0-rc.0 → 5.2.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/esm2022/index.mjs +3 -1
- package/esm2022/lib/models/api-version.model.mjs +2 -0
- package/esm2022/lib/models/schema.model.mjs +2 -0
- package/esm2022/tableview/index.mjs +5 -1
- package/esm2022/tableview/schema/columns-from-schema.mjs +173 -0
- package/esm2022/tableview/schema/enum-from-schema.mjs +23 -0
- package/esm2022/tableview/schema/fields-from-schema.mjs +470 -0
- package/esm2022/tableview/schema/internal/common-from-schema.mjs +14 -0
- package/fesm2022/mediusinc-mng-commons-data-api-tableview.mjs +676 -2
- package/fesm2022/mediusinc-mng-commons-data-api-tableview.mjs.map +1 -1
- package/fesm2022/mediusinc-mng-commons-data-api.mjs.map +1 -1
- package/index.d.ts +2 -0
- package/lib/models/api-version.model.d.ts +9 -0
- package/lib/models/schema.model.d.ts +31 -0
- package/openapi/config.yaml +0 -3
- package/openapi/custom/modelSchema.mustache +80 -44
- package/openapi/custom/version.mustache +2 -10
- package/package.json +2 -2
- package/tableview/index.d.ts +3 -0
- package/tableview/schema/columns-from-schema.d.ts +118 -0
- package/tableview/schema/enum-from-schema.d.ts +12 -0
- package/tableview/schema/fields-from-schema.d.ts +321 -0
- package/tableview/schema/internal/common-from-schema.d.ts +11 -0
- package/version-info.json +6 -6
- package/openapi/custom/schema.mustache +0 -18
package/esm2022/index.mjs
CHANGED
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
// helpers
|
|
2
2
|
export * from './lib/helpers/get-all-params';
|
|
3
3
|
// models
|
|
4
|
+
export * from './lib/models/api-version.model';
|
|
4
5
|
export * from './lib/models/request-params.model';
|
|
6
|
+
export * from './lib/models/schema.model';
|
|
5
7
|
// types
|
|
6
8
|
export * from './lib/types/extract-get-all-params.type';
|
|
7
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
9
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsVUFBVTtBQUNWLGNBQWMsOEJBQThCLENBQUM7QUFFN0MsU0FBUztBQUNULGNBQWMsZ0NBQWdDLENBQUM7QUFDL0MsY0FBYyxtQ0FBbUMsQ0FBQztBQUNsRCxjQUFjLDJCQUEyQixDQUFDO0FBRTFDLFFBQVE7QUFDUixjQUFjLHlDQUF5QyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gaGVscGVyc1xuZXhwb3J0ICogZnJvbSAnLi9saWIvaGVscGVycy9nZXQtYWxsLXBhcmFtcyc7XG5cbi8vIG1vZGVsc1xuZXhwb3J0ICogZnJvbSAnLi9saWIvbW9kZWxzL2FwaS12ZXJzaW9uLm1vZGVsJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL21vZGVscy9yZXF1ZXN0LXBhcmFtcy5tb2RlbCc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9tb2RlbHMvc2NoZW1hLm1vZGVsJztcblxuLy8gdHlwZXNcbmV4cG9ydCAqIGZyb20gJy4vbGliL3R5cGVzL2V4dHJhY3QtZ2V0LWFsbC1wYXJhbXMudHlwZSc7XG4iXX0=
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export {};
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBpLXZlcnNpb24ubW9kZWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL21vZGVscy9hcGktdmVyc2lvbi5tb2RlbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGludGVyZmFjZSBBcGlWZXJzaW9uIHtcbiAgICBhcHBOYW1lPzogc3RyaW5nO1xuICAgIGRlc2NyaXB0aW9uPzogc3RyaW5nO1xuICAgIHZlcnNpb24/OiBzdHJpbmc7XG4gICAgaW5mb0VtYWlsPzogc3RyaW5nO1xuICAgIGluZm9Vcmw/OiBzdHJpbmc7XG4gICAgbGljZW5zZUluZm8/OiBzdHJpbmc7XG4gICAgbGljZW5zZVVybD86IHN0cmluZztcbn1cbiJdfQ==
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export {};
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2NoZW1hLm1vZGVsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2xpYi9tb2RlbHMvc2NoZW1hLm1vZGVsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgaW50ZXJmYWNlIFNjaGVtYU1vZGVsPE1vZGVsID0gYW55PiB7XG4gICAgbmFtZTogc3RyaW5nO1xuICAgIHByb3BlcnRpZXM6IFJlY29yZDxrZXlvZiBNb2RlbCwgU2NoZW1hUHJvcGVydHk+O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFNjaGVtYUVudW08RW51bVR5cGU+IHtcbiAgICBuYW1lOiBzdHJpbmc7XG4gICAgdmFsdWVzOiBFbnVtVHlwZVtdO1xuICAgIGNvbnN0YW50czogc3RyaW5nW107XG4gICAgdHlwZTogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFNjaGVtYVByb3BlcnR5IHtcbiAgICB0eXBlOiBzdHJpbmc7XG4gICAgb2JqZWN0VHlwZT86IHN0cmluZztcbiAgICBpc1JlYWRPbmx5PzogYm9vbGVhbjtcbiAgICByZXF1aXJlZD86IGJvb2xlYW47XG4gICAgaXNOdWxsYWJsZT86IGJvb2xlYW47XG4gICAgbWluTGVuZ3RoPzogbnVtYmVyO1xuICAgIG1heExlbmd0aD86IG51bWJlcjtcbiAgICBtaW5pbXVtPzogbnVtYmVyO1xuICAgIG1heGltdW0/OiBudW1iZXI7XG4gICAgZXhjbHVzaXZlTWluaW11bT86IGJvb2xlYW47XG4gICAgZXhjbHVzaXZlTWF4aW11bT86IGJvb2xlYW47XG4gICAgaXNJbnRlZ2VyPzogYm9vbGVhbjtcbiAgICBwYXR0ZXJuPzogc3RyaW5nO1xuICAgIG1heEl0ZW1zPzogbnVtYmVyO1xuICAgIG1pbkl0ZW1zPzogbnVtYmVyO1xuICAgIGVudW1Nb2RlbD86IGFueTtcbiAgICBlbnVtTmFtZT86IHN0cmluZztcbiAgICBpc0VtYWlsPzogYm9vbGVhbjtcbiAgICBpc1Bhc3N3b3JkPzogYm9vbGVhbjtcbn1cbiJdfQ==
|
|
@@ -1,2 +1,6 @@
|
|
|
1
1
|
export * from './tableview-get-all-params-create';
|
|
2
|
-
|
|
2
|
+
// schema
|
|
3
|
+
export * from './schema/columns-from-schema';
|
|
4
|
+
export * from './schema/enum-from-schema';
|
|
5
|
+
export * from './schema/fields-from-schema';
|
|
6
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi90YWJsZXZpZXcvc3JjL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsbUNBQW1DLENBQUM7QUFFbEQsU0FBUztBQUNULGNBQWMsOEJBQThCLENBQUM7QUFDN0MsY0FBYywyQkFBMkIsQ0FBQztBQUMxQyxjQUFjLDZCQUE2QixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi90YWJsZXZpZXctZ2V0LWFsbC1wYXJhbXMtY3JlYXRlJztcblxuLy8gc2NoZW1hXG5leHBvcnQgKiBmcm9tICcuL3NjaGVtYS9jb2x1bW5zLWZyb20tc2NoZW1hJztcbmV4cG9ydCAqIGZyb20gJy4vc2NoZW1hL2VudW0tZnJvbS1zY2hlbWEnO1xuZXhwb3J0ICogZnJvbSAnLi9zY2hlbWEvZmllbGRzLWZyb20tc2NoZW1hJztcbiJdfQ==
|
|
@@ -0,0 +1,173 @@
|
|
|
1
|
+
import { enumModelFromSchema } from './enum-from-schema';
|
|
2
|
+
import { fromSchemaCurrencyOptsToCurrency, fromSchemaFilterNonArrayProperties } from './internal/common-from-schema';
|
|
3
|
+
const defaultGetter = value => {
|
|
4
|
+
if (typeof value === 'object') {
|
|
5
|
+
const valueObj = value;
|
|
6
|
+
return (valueObj['title'] ??
|
|
7
|
+
valueObj['name'] ??
|
|
8
|
+
valueObj['naziv'] ??
|
|
9
|
+
valueObj['code'] ??
|
|
10
|
+
valueObj['sifra'] ??
|
|
11
|
+
valueObj['id'] ??
|
|
12
|
+
valueObj['uuid'] ??
|
|
13
|
+
valueObj[Object.keys(valueObj)[0]]);
|
|
14
|
+
}
|
|
15
|
+
else {
|
|
16
|
+
return value;
|
|
17
|
+
}
|
|
18
|
+
};
|
|
19
|
+
/**
|
|
20
|
+
* <em>Experimental:</em> Builder for adding columns to table.
|
|
21
|
+
*
|
|
22
|
+
* @experimental
|
|
23
|
+
*/
|
|
24
|
+
export class SchemaColumnsBuilder {
|
|
25
|
+
constructor(descriptor, schema, opts) {
|
|
26
|
+
this.descriptor = descriptor;
|
|
27
|
+
this.schema = schema;
|
|
28
|
+
this.opts = opts;
|
|
29
|
+
}
|
|
30
|
+
mergeColumnsOpts(property, opts) {
|
|
31
|
+
return {
|
|
32
|
+
...this.opts,
|
|
33
|
+
columnType: this.opts?.columnTypes?.[property],
|
|
34
|
+
getter: opts?.getters?.[property] ?? this.opts?.getters?.[property],
|
|
35
|
+
enumModel: opts?.enumModels?.[property] ?? this.opts?.enumModels?.[property],
|
|
36
|
+
enumSchema: opts?.enumSchemas?.[property] ?? this.opts?.enumSchemas?.[property],
|
|
37
|
+
...opts
|
|
38
|
+
};
|
|
39
|
+
}
|
|
40
|
+
mergeColumnOpts(property, opts) {
|
|
41
|
+
return {
|
|
42
|
+
...this.opts,
|
|
43
|
+
columnType: this.opts?.columnTypes?.[property],
|
|
44
|
+
getter: this.opts?.getters?.[property],
|
|
45
|
+
enumModel: this.opts?.enumModels?.[property],
|
|
46
|
+
enumSchema: this.opts?.enumSchemas?.[property],
|
|
47
|
+
...opts
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* <em>Experimental:</em> Adds a single column via {addColumnFromSchema}.
|
|
52
|
+
*
|
|
53
|
+
* @experimental
|
|
54
|
+
*
|
|
55
|
+
* @param {Property} property - The property to add the column for.
|
|
56
|
+
* @param {ColumnFromSchemaOptsType<SchModel[Property], SchModel, any, Model>} opts - Additional options.
|
|
57
|
+
*
|
|
58
|
+
* @return {ColumnDescriptor<NonNullable<Model[Property]>, Model, Model[Property]>} The added column descriptor.
|
|
59
|
+
*/
|
|
60
|
+
add(property, opts) {
|
|
61
|
+
return addColumnFromSchema(this.descriptor, property, this.schema.properties[property], this.mergeColumnOpts(property, opts));
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* <em>Experimental:</em> Adds all columns from the non-array schema properties via {addColumnFromSchema}.
|
|
65
|
+
*
|
|
66
|
+
* @experimental
|
|
67
|
+
*
|
|
68
|
+
* @param {ColumnsFromSchemaOptsType<SchModel>} opts - Additional options.
|
|
69
|
+
*
|
|
70
|
+
* @return {this} - The current instance of the builder.
|
|
71
|
+
*/
|
|
72
|
+
withAddAll(opts) {
|
|
73
|
+
this.addColumns(undefined, opts);
|
|
74
|
+
return this;
|
|
75
|
+
}
|
|
76
|
+
withAdd(propOrOpts, ...properties) {
|
|
77
|
+
if (typeof propOrOpts === 'object') {
|
|
78
|
+
this.addColumns(properties.length === 0 ? undefined : properties, propOrOpts);
|
|
79
|
+
}
|
|
80
|
+
else {
|
|
81
|
+
this.addColumns([propOrOpts, ...properties]);
|
|
82
|
+
}
|
|
83
|
+
return this;
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* <em>Experimental:</em> Adds a single column via {addColumnFromSchema} where property schema is manually provided.
|
|
87
|
+
*
|
|
88
|
+
* @experimental
|
|
89
|
+
*
|
|
90
|
+
* @param {Property} property - The property to add the column for.
|
|
91
|
+
* @param {SchemaProperty} schemaProperty - Manually provided schema property.
|
|
92
|
+
* @param {ColumnFromSchemaOptsType} opts - Additional options.
|
|
93
|
+
*
|
|
94
|
+
* @return {ColumnDescriptor<NonNullable<Model[Property]>, Model, Model[Property]>} The added column descriptor.
|
|
95
|
+
*/
|
|
96
|
+
addFromSchema(property, schemaProperty, opts) {
|
|
97
|
+
return addColumnFromSchema(this.descriptor, property, schemaProperty, this.mergeColumnOpts(property, opts));
|
|
98
|
+
}
|
|
99
|
+
addColumns(properties, opts) {
|
|
100
|
+
const addProperties = properties ?? fromSchemaFilterNonArrayProperties(this.schema.properties);
|
|
101
|
+
if (addProperties) {
|
|
102
|
+
addProperties.forEach(property => {
|
|
103
|
+
addColumnFromSchema(this.descriptor, property, this.schema.properties[property], this.mergeColumnsOpts(property, opts));
|
|
104
|
+
});
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
/**
|
|
109
|
+
* <em>Experimental:</em> Creates builder for adding columns to descriptor based on provided model schema.
|
|
110
|
+
*
|
|
111
|
+
* @experimental
|
|
112
|
+
*
|
|
113
|
+
* @param {TableviewDescriptorInst<Model, any, any, any> | TableDescriptorInst<Model, any, any>} descriptor - Descriptor to add columns to.
|
|
114
|
+
* @param {SchemaModel<SchModel>} schema - The schema with metadata about properties for fields.
|
|
115
|
+
* @param {ColumnsFromSchemaOptsType<SchModel>} [opts] - Additional options.
|
|
116
|
+
*
|
|
117
|
+
* @return {SchemaColumnsBuilder<Model, SchModel>} - The column schema builder instance.
|
|
118
|
+
*/
|
|
119
|
+
export function columnsFromSchema(descriptor, schema, opts) {
|
|
120
|
+
return new SchemaColumnsBuilder(descriptor, schema, opts);
|
|
121
|
+
}
|
|
122
|
+
/**
|
|
123
|
+
* <em>Experimental:</em> Adds a column to table descriptor based on the given schema property and options.
|
|
124
|
+
*
|
|
125
|
+
* @param {TableviewDescriptorInst<Model, any, any, any> | TableDescriptorInst<Model, any, any>} descriptor - The table view descriptor or table descriptor to add the column to.
|
|
126
|
+
* @param {Property} property - The property key of the model to create the column for.
|
|
127
|
+
* @param {SchemaProperty} propertySchema - The schema property for the property.
|
|
128
|
+
* @param {ColumnFromSchemaOptsType<Model[Property], Model, any, Model>} [opts] - The options for the column.
|
|
129
|
+
*
|
|
130
|
+
* @return {ColumnDescriptor<NonNullable<Model[Property]>, Model, Model[Property]>} - The added column descriptor.
|
|
131
|
+
*/
|
|
132
|
+
export function addColumnFromSchema(descriptor, property, propertySchema, opts) {
|
|
133
|
+
const propertyType = opts?.columnType ?? propertySchema?.type;
|
|
134
|
+
const column = descriptor.addColumn(property);
|
|
135
|
+
// Handle different property types
|
|
136
|
+
switch (propertyType) {
|
|
137
|
+
case 'number':
|
|
138
|
+
if (opts?.currency) {
|
|
139
|
+
column.asCurrency(fromSchemaCurrencyOptsToCurrency(opts.currency));
|
|
140
|
+
}
|
|
141
|
+
else {
|
|
142
|
+
column.asNumber();
|
|
143
|
+
}
|
|
144
|
+
break;
|
|
145
|
+
case 'boolean':
|
|
146
|
+
column.asBoolean(undefined, undefined, true);
|
|
147
|
+
break;
|
|
148
|
+
case 'date':
|
|
149
|
+
column.asDate(opts?.dateFormat ?? 'dd.MM.YYYY');
|
|
150
|
+
break;
|
|
151
|
+
case 'enum':
|
|
152
|
+
// eslint-disable-next-line no-case-declarations
|
|
153
|
+
const enumModel = opts?.enumSchema ? enumModelFromSchema(opts.enumSchema) : opts?.enumModel;
|
|
154
|
+
if (enumModel) {
|
|
155
|
+
column.asEnumUnsafe(enumModel);
|
|
156
|
+
}
|
|
157
|
+
break;
|
|
158
|
+
case 'date-time':
|
|
159
|
+
column.asDate(opts?.dateTimeFormat ?? 'dd.MM.YYYY HH:mm');
|
|
160
|
+
break;
|
|
161
|
+
case 'currency':
|
|
162
|
+
column.asCurrency(opts?.currency ? fromSchemaCurrencyOptsToCurrency(opts?.currency) : undefined);
|
|
163
|
+
break;
|
|
164
|
+
case 'object':
|
|
165
|
+
column.withGetter(defaultGetter);
|
|
166
|
+
break;
|
|
167
|
+
}
|
|
168
|
+
// Add optional filter, sort and getters
|
|
169
|
+
if (opts?.getter)
|
|
170
|
+
column.withGetter(opts?.getter);
|
|
171
|
+
return column;
|
|
172
|
+
}
|
|
173
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29sdW1ucy1mcm9tLXNjaGVtYS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3RhYmxldmlldy9zcmMvc2NoZW1hL2NvbHVtbnMtZnJvbS1zY2hlbWEudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBTUEsT0FBTyxFQUFDLG1CQUFtQixFQUFDLE1BQU0sb0JBQW9CLENBQUM7QUFDdkQsT0FBTyxFQUE2QixnQ0FBZ0MsRUFBRSxrQ0FBa0MsRUFBQyxNQUFNLCtCQUErQixDQUFDO0FBdUIvSSxNQUFNLGFBQWEsR0FBc0IsS0FBSyxDQUFDLEVBQUU7SUFDN0MsSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRLEVBQUUsQ0FBQztRQUM1QixNQUFNLFFBQVEsR0FBRyxLQUFlLENBQUM7UUFDakMsT0FBTyxDQUNILFFBQVEsQ0FBQyxPQUF1QixDQUFDO1lBQ2pDLFFBQVEsQ0FBQyxNQUFzQixDQUFDO1lBQ2hDLFFBQVEsQ0FBQyxPQUF1QixDQUFDO1lBQ2pDLFFBQVEsQ0FBQyxNQUFzQixDQUFDO1lBQ2hDLFFBQVEsQ0FBQyxPQUF1QixDQUFDO1lBQ2pDLFFBQVEsQ0FBQyxJQUFvQixDQUFDO1lBQzlCLFFBQVEsQ0FBQyxNQUFzQixDQUFDO1lBQ2hDLFFBQVEsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBaUIsQ0FBQyxDQUNyRCxDQUFDO0lBQ04sQ0FBQztTQUFNLENBQUM7UUFDSixPQUFPLEtBQUssQ0FBQztJQUNqQixDQUFDO0FBQ0wsQ0FBQyxDQUFDO0FBRUY7Ozs7R0FJRztBQUNILE1BQU0sT0FBTyxvQkFBb0I7SUFDN0IsWUFDcUIsVUFBZ0csRUFDaEcsTUFBNkIsRUFDdEMsSUFBMEM7UUFGakMsZUFBVSxHQUFWLFVBQVUsQ0FBc0Y7UUFDaEcsV0FBTSxHQUFOLE1BQU0sQ0FBdUI7UUFDdEMsU0FBSSxHQUFKLElBQUksQ0FBc0M7SUFDbkQsQ0FBQztJQUVJLGdCQUFnQixDQUFDLFFBQXFC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TTtZQUNQLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLFVBQVUsSUFBSSxZQUFZLENBQUMsQ0FBQztZQUNoRCxNQUFNO1FBQ1YsS0FBSyxNQUFNO1lBQ1AsZ0RBQWdEO1lBQ2hELE1BQU0sU0FBUyxHQUFHLElBQUksRUFBRSxVQUFVLENBQUMsQ0FBQyxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLFNBQVMsQ0FBQztZQUM1RixJQUFJLFNBQVMsRUFBRSxDQUFDO2dCQUNaLE1BQU0sQ0FBQyxZQUFZLENBQUMsU0FBUyxDQUFDLENBQUM7WUFDbkMsQ0FBQztZQUNELE1BQU07UUFDVixLQUFLLFdBQVc7WUFDWixNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxjQUFjLElBQUksa0JBQWtCLENBQUMsQ0FBQztZQUMxRCxNQUFNO1FBQ1YsS0FBSyxVQUFVO1lBQ1gsTUFBTSxDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUUsUUFBUSxDQUFDLENBQUMsQ0FBQyxnQ0FBZ0MsQ0FBQyxJQUFJLEVBQUUsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBQ2pHLE1BQU07UUFDVixLQUFLLFFBQVE7WUFDVCxNQUFNLENBQUMsVUFBVSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1lBQ2pDLE1BQU07SUFDZCxDQUFDO0lBRUQsd0NBQXdDO0lBQ3hDLElBQUksSUFBSSxFQUFFLE1BQU07UUFBRSxNQUFNLENBQUMsVUFBVSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQztJQUVsRCxPQUFPLE1BQU0sQ0FBQztBQUNsQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtTY2hlbWFFbnVtLCBTY2hlbWFNb2RlbCwgU2NoZW1hUHJvcGVydHl9IGZyb20gJ0BtZWRpdXNpbmMvbW5nLWNvbW1vbnMtZGF0YS1hcGknO1xuaW1wb3J0IHtHZXR0ZXJGbn0gZnJvbSAnQG1lZGl1c2luYy9tbmctY29tbW9ucy9jb3JlJztcbmltcG9ydCB7RW51bURlc2NyaXB0b3J9IGZyb20gJ0BtZWRpdXNpbmMvbW5nLWNvbW1vbnMvbW9kZWwnO1xuaW1wb3J0IHtDb2x1bW5EZXNjcmlwdG9yLCBUYWJsZURlc2NyaXB0b3JJbnN0fSBmcm9tICdAbWVkaXVzaW5jL21uZy1jb21tb25zL3RhYmxlL2FwaSc7XG5pbXBvcnQge1RhYmxldmlld0Rlc2NyaXB0b3JJbnN0fSBmcm9tICdAbWVkaXVzaW5jL21uZy1jb21tb25zL3RhYmxldmlldy9hcGknO1xuXG5pbXBvcnQge2VudW1Nb2RlbEZyb21TY2hlbWF9IGZyb20gJy4vZW51bS1mcm9tLXNjaGVtYSc7XG5pbXBvcnQge0Zyb21TY2hlbWFDdXJyZW5jeU9wdHNUeXBlLCBmcm9tU2NoZW1hQ3VycmVuY3lPcHRzVG9DdXJyZW5jeSwgZnJvbVNjaGVtYUZpbHRlck5vbkFycmF5UHJvcGVydGllc30gZnJvbSAnLi9pbnRlcm5hbC9jb21tb24tZnJvbS1zY2hlbWEnO1xuXG50eXBlIENvbHVtblR5cGUgPSAnbnVtYmVyJyB8ICdjdXJyZW5jeScgfCAnYm9vbGVhbicgfCAnc3RyaW5nJyB8ICd0ZXh0JyB8ICd0ZXh0YXJlYScgfCAnZGF0ZScgfCAnZGF0ZS10aW1lJyB8ICdlbnVtJyB8ICdvYmplY3QnO1xuXG50eXBlIENvbHVtbnNGcm9tU2NoZW1hT3B0c1R5cGU8TW9kZWwgPSBhbnk+ID0ge1xuICAgIGNvbHVtblR5cGVzPzogUGFydGlhbDxSZWNvcmQ8a2V5b2YgTW9kZWwsIENvbHVtblR5cGU+PjtcbiAgICBlbnVtTW9kZWxzPzogUGFydGlhbDxSZWNvcmQ8a2V5b2YgTW9kZWwsIEVudW1EZXNjcmlwdG9yPGFueT4+PjtcbiAgICBlbnVtU2NoZW1hcz86IFBhcnRpYWw8UmVjb3JkPGtleW9mIE1vZGVsLCBTY2hlbWFFbnVtPGFueT4+PjtcbiAgICBnZXR0ZXJzPzoge1tLIGluIGtleW9mIE1vZGVsXT86IEdldHRlckZuPE1vZGVsW0tdLCBNb2RlbD59O1xuICAgIGRhdGVGb3JtYXQ/OiBzdHJpbmc7XG4gICAgZGF0ZVRpbWVGb3JtYXQ/OiBzdHJpbmc7XG59O1xuXG50eXBlIENvbHVtbkZyb21TY2hlbWFPcHRzVHlwZTxDb2x1bW4gPSBhbnksIE1vZGVsID0gYW55LCBFbnVtID0gYW55LCBDdXJyZW5jeU1vZGVsID0gTW9kZWw+ID0ge1xuICAgIGNvbHVtblR5cGU/OiBDb2x1bW5UeXBlO1xuICAgIGdldHRlcj86IEdldHRlckZuPENvbHVtbiwgTW9kZWw+O1xuICAgIGVudW1Nb2RlbD86IEVudW1EZXNjcmlwdG9yPEVudW0+O1xuICAgIGVudW1TY2hlbWE/OiBTY2hlbWFFbnVtPEVudW0+O1xuICAgIGN1cnJlbmN5PzogRnJvbVNjaGVtYUN1cnJlbmN5T3B0c1R5cGU8Q3VycmVuY3lNb2RlbD47XG4gICAgZGF0ZUZvcm1hdD86IHN0cmluZztcbiAgICBkYXRlVGltZUZvcm1hdD86IHN0cmluZztcbn07XG5cbmNvbnN0IGRlZmF1bHRHZXR0ZXI6IEdldHRlckZuPHVua25vd24+ID0gdmFsdWUgPT4ge1xuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnKSB7XG4gICAgICAgIGNvbnN0IHZhbHVlT2JqID0gdmFsdWUgYXMgb2JqZWN0O1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgdmFsdWVPYmpbJ3RpdGxlJyBhcyBrZXlvZiBvYmplY3RdID8/XG4gICAgICAgICAgICB2YWx1ZU9ialsnbmFtZScgYXMga2V5b2Ygb2JqZWN0XSA/P1xuICAgICAgICAgICAgdmFsdWVPYmpbJ25heml2JyBhcyBrZXlvZiBvYmplY3RdID8/XG4gICAgICAgICAgICB2YWx1ZU9ialsnY29kZScgYXMga2V5b2Ygb2JqZWN0XSA/P1xuICAgICAgICAgICAgdmFsdWVPYmpbJ3NpZnJhJyBhcyBrZXlvZiBvYmplY3RdID8/XG4gICAgICAgICAgICB2YWx1ZU9ialsnaWQnIGFzIGtleW9mIG9iamVjdF0gPz9cbiAgICAgICAgICAgIHZhbHVlT2JqWyd1dWlkJyBhcyBrZXlvZiBvYmplY3RdID8/XG4gICAgICAgICAgICB2YWx1ZU9ialtPYmplY3Qua2V5cyh2YWx1ZU9iailbMF0gYXMga2V5b2Ygb2JqZWN0XVxuICAgICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG59O1xuXG4vKipcbiAqIDxlbT5FeHBlcmltZW50YWw6PC9lbT4gQnVpbGRlciBmb3IgYWRkaW5nIGNvbHVtbnMgdG8gdGFibGUuXG4gKlxuICogQGV4cGVyaW1lbnRhbFxuICovXG5leHBvcnQgY2xhc3MgU2NoZW1hQ29sdW1uc0J1aWxkZXI8TW9kZWwsIFNjaE1vZGVsID0gTW9kZWw+IHtcbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSBkZXNjcmlwdG9yOiBUYWJsZXZpZXdEZXNjcmlwdG9ySW5zdDxNb2RlbCwgYW55LCBhbnksIGFueT4gfCBUYWJsZURlc2NyaXB0b3JJbnN0PE1vZGVsLCBhbnksIGFueT4sXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgc2NoZW1hOiBTY2hlbWFNb2RlbDxTY2hNb2RlbD4sXG4gICAgICAgIHByaXZhdGUgb3B0cz86IENvbHVtbnNGcm9tU2NoZW1hT3B0c1R5cGU8U2NoTW9kZWw+XG4gICAgKSB7fVxuXG4gICAgcHJpdmF0ZSBtZXJnZUNvbHVtbnNPcHRzKHByb3BlcnR5OiBrZXlvZiBNb2RlbCwgb3B0cz86IENvbHVtbnNGcm9tU2NoZW1hT3B0c1R5cGUpIHtcbiAgICAgICAgcmV0dXJuIDxDb2x1bW5Gcm9tU2NoZW1hT3B0c1R5cGU+e1xuICAgICAgICAgICAgLi4udGhpcy5vcHRzLFxuICAgICAgICAgICAgY29sdW1uVHlwZTogdGhpcy5vcHRzPy5jb2x1bW5UeXBlcz8uW3Byb3BlcnR5XSxcbiAgICAgICAgICAgIGdldHRlcjogb3B0cz8uZ2V0dGVycz8uW3Byb3BlcnR5XSA/PyB0aGlzLm9wdHM/LmdldHRlcnM/Lltwcm9wZXJ0eV0sXG4gICAgICAgICAgICBlbnVtTW9kZWw6IG9wdHM/LmVudW1Nb2RlbHM/Lltwcm9wZXJ0eV0gPz8gdGhpcy5vcHRzPy5lbnVtTW9kZWxzPy5bcHJvcGVydHldLFxuICAgICAgICAgICAgZW51bVNjaGVtYTogb3B0cz8uZW51bVNjaGVtYXM/Lltwcm9wZXJ0eV0gPz8gdGhpcy5vcHRzPy5lbnVtU2NoZW1hcz8uW3Byb3BlcnR5XSxcbiAgICAgICAgICAgIC4uLm9wdHNcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBwcml2YXRlIG1lcmdlQ29sdW1uT3B0cyhwcm9wZXJ0eToga2V5b2YgTW9kZWwsIG9wdHM/OiBDb2x1bW5Gcm9tU2NoZW1hT3B0c1R5cGUpIHtcbiAgICAgICAgcmV0dXJuIDxDb2x1bW5Gcm9tU2NoZW1hT3B0c1R5cGU+e1xuICAgICAgICAgICAgLi4udGhpcy5vcHRzLFxuICAgICAgICAgICAgY29sdW1uVHlwZTogdGhpcy5vcHRzPy5jb2x1bW5UeXBlcz8uW3Byb3BlcnR5XSxcbiAgICAgICAgICAgIGdldHRlcjogdGhpcy5vcHRzPy5nZXR0ZXJzPy5bcHJvcGVydHldLFxuICAgICAgICAgICAgZW51bU1vZGVsOiB0aGlzLm9wdHM/LmVudW1Nb2RlbHM/Lltwcm9wZXJ0eV0sXG4gICAgICAgICAgICBlbnVtU2NoZW1hOiB0aGlzLm9wdHM/LmVudW1TY2hlbWFzPy5bcHJvcGVydHldLFxuICAgICAgICAgICAgLi4ub3B0c1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIDxlbT5FeHBlcmltZW50YWw6PC9lbT4gQWRkcyBhIHNpbmdsZSBjb2x1bW4gdmlhIHthZGRDb2x1bW5Gcm9tU2NoZW1hfS5cbiAgICAgKlxuICAgICAqIEBleHBlcmltZW50YWxcbiAgICAgKlxuICAgICAqIEBwYXJhbSB7UHJvcGVydHl9IHByb3BlcnR5IC0gVGhlIHByb3BlcnR5IHRvIGFkZCB0aGUgY29sdW1uIGZvci5cbiAgICAgKiBAcGFyYW0ge0NvbHVtbkZyb21TY2hlbWFPcHRzVHlwZTxTY2hNb2RlbFtQcm9wZXJ0eV0sIFNjaE1vZGVsLCBhbnksIE1vZGVsPn0gb3B0cyAtIEFkZGl0aW9uYWwgb3B0aW9ucy5cbiAgICAgKlxuICAgICAqIEByZXR1cm4ge0NvbHVtbkRlc2NyaXB0b3I8Tm9uTnVsbGFibGU8TW9kZWxbUHJvcGVydHldPiwgTW9kZWwsIE1vZGVsW1Byb3BlcnR5XT59IFRoZSBhZGRlZCBjb2x1bW4gZGVzY3JpcHRvci5cbiAgICAgKi9cbiAgICBwdWJsaWMgYWRkPFByb3BlcnR5IGV4dGVuZHMgRXh0cmFjdDxrZXlvZiBNb2RlbCwga2V5b2YgU2NoTW9kZWw+PihcbiAgICAgICAgcHJvcGVydHk6IFByb3BlcnR5LFxuICAgICAgICBvcHRzPzogQ29sdW1uRnJvbVNjaGVtYU9wdHNUeXBlPFNjaE1vZGVsW1Byb3BlcnR5XSwgU2NoTW9kZWwsIGFueSwgTW9kZWw+XG4gICAgKTogQ29sdW1uRGVzY3JpcHRvcjxOb25OdWxsYWJsZTxNb2RlbFtQcm9wZXJ0eV0+LCBNb2RlbCwgTW9kZWxbUHJvcGVydHldPiB7XG4gICAgICAgIHJldHVybiBhZGRDb2x1bW5Gcm9tU2NoZW1hKHRoaXMuZGVzY3JpcHRvciwgcHJvcGVydHksIHRoaXMuc2NoZW1hLnByb3BlcnRpZXNbcHJvcGVydHldLCB0aGlzLm1lcmdlQ29sdW1uT3B0cyhwcm9wZXJ0eSwgb3B0cykpIGFzIHVua25vd24gYXMgQ29sdW1uRGVzY3JpcHRvcjxcbiAgICAgICAgICAgIE5vbk51bGxhYmxlPE1vZGVsW1Byb3BlcnR5XT4sXG4gICAgICAgICAgICBNb2RlbCxcbiAgICAgICAgICAgIE1vZGVsW1Byb3BlcnR5XVxuICAgICAgICA+O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIDxlbT5FeHBlcmltZW50YWw6PC9lbT4gQWRkcyBhbGwgY29sdW1ucyBmcm9tIHRoZSBub24tYXJyYXkgc2NoZW1hIHByb3BlcnRpZXMgdmlhIHthZGRDb2x1bW5Gcm9tU2NoZW1hfS5cbiAgICAgKlxuICAgICAqIEBleHBlcmltZW50YWxcbiAgICAgKlxuICAgICAqIEBwYXJhbSB7Q29sdW1uc0Zyb21TY2hlbWFPcHRzVHlwZTxTY2hNb2RlbD59IG9wdHMgLSBBZGRpdGlvbmFsIG9wdGlvbnMuXG4gICAgICpcbiAgICAgKiBAcmV0dXJuIHt0aGlzfSAtIFRoZSBjdXJyZW50IGluc3RhbmNlIG9mIHRoZSBidWlsZGVyLlxuICAgICAqL1xuICAgIHB1YmxpYyB3aXRoQWRkQWxsKG9wdHM/OiBDb2x1bW5zRnJvbVNjaGVtYU9wdHNUeXBlPFNjaE1vZGVsPik6IHRoaXMge1xuICAgICAgICB0aGlzLmFkZENvbHVtbnModW5kZWZpbmVkLCBvcHRzKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogPGVtPkV4cGVyaW1lbnRhbDo8L2VtPiBBZGRzIGNvbHVtbnMgZm9yIHByb3BlcnRpZXMgdmlhIHthZGRDb2x1bW5Gcm9tU2NoZW1hfS5cbiAgICAgKlxuICAgICAqIEBleHBlcmltZW50YWxcbiAgICAgKlxuICAgICAqIEBwYXJhbSB7Q29sdW1uc0Zyb21TY2hlbWFPcHRzVHlwZTxTY2hNb2RlbD59IG9wdHMgLSBBZGRpdGlvbmFsIG9wdGlvbnMuXG4gICAgICogQHBhcmFtIHsuLi5Qcm9wZXJ0eVtdfSBwcm9wZXJ0aWVzIC0gUHJvcGVydGllcyB0byBhZGQgY29sdW1ucyBmb3IuIElmIG5vbiBwcm92aWRlZCwgYWxsIG5vbi1hcnJheSBwcm9wZXJ0aWVzIGZyb20gc2NoZW1hIHdpbGwgYmUgYWRkZWQuXG4gICAgICpcbiAgICAgKiBAcmV0dXJuIHt0aGlzfSAtIFRoZSBjdXJyZW50IGluc3RhbmNlIG9mIHRoZSBidWlsZGVyLlxuICAgICAqL1xuICAgIHB1YmxpYyB3aXRoQWRkPFByb3BlcnR5IGV4dGVuZHMgRXh0cmFjdDxrZXlvZiBNb2RlbCwga2V5b2YgU2NoTW9kZWw+PihvcHRzOiBDb2x1bW5zRnJvbVNjaGVtYU9wdHNUeXBlPFNjaE1vZGVsPiwgLi4ucHJvcGVydGllczogUHJvcGVydHlbXSk6IHRoaXM7XG4gICAgLyoqXG4gICAgICogPGVtPkV4cGVyaW1lbnRhbDo8L2VtPiBBZGRzIGNvbHVtbnMgZm9yIHByb3BlcnRpZXMgdmlhIHthZGRDb2x1bW5Gcm9tU2NoZW1hfS5cbiAgICAgKlxuICAgICAqIEBleHBlcmltZW50YWxcbiAgICAgKlxuICAgICAqIEBwYXJhbSB7Li4uUHJvcGVydHlbXX0gcHJvcGVydGllcyAtIFByb3BlcnRpZXMgdG8gYWRkIGNvbHVtbnMgZm9yLiBJZiBub24gcHJvdmlkZWQsIGFsbCBub24tYXJyYXkgcHJvcGVydGllcyBmcm9tIHNjaGVtYSB3aWxsIGJlIGFkZGVkLlxuICAgICAqXG4gICAgICogQHJldHVybiB7dGhpc30gLSBUaGUgY3VycmVudCBpbnN0YW5jZSBvZiB0aGUgYnVpbGRlci5cbiAgICAgKi9cbiAgICBwdWJsaWMgd2l0aEFkZDxQcm9wZXJ0eSBleHRlbmRzIEV4dHJhY3Q8a2V5b2YgTW9kZWwsIGtleW9mIFNjaE1vZGVsPj4oLi4ucHJvcGVydGllczogUHJvcGVydHlbXSk6IHRoaXM7XG4gICAgcHVibGljIHdpdGhBZGQ8UHJvcGVydHkgZXh0ZW5kcyBFeHRyYWN0PGtleW9mIE1vZGVsLCBrZXlvZiBTY2hNb2RlbD4+KHByb3BPck9wdHM6IENvbHVtbnNGcm9tU2NoZW1hT3B0c1R5cGU8U2NoTW9kZWw+IHwgUHJvcGVydHksIC4uLnByb3BlcnRpZXM6IFByb3BlcnR5W10pOiB0aGlzIHtcbiAgICAgICAgaWYgKHR5cGVvZiBwcm9wT3JPcHRzID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgdGhpcy5hZGRDb2x1bW5zKHByb3BlcnRpZXMubGVuZ3RoID09PSAwID8gdW5kZWZpbmVkIDogcHJvcGVydGllcywgcHJvcE9yT3B0cyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmFkZENvbHVtbnMoW3Byb3BPck9wdHMsIC4uLnByb3BlcnRpZXNdKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiA8ZW0+RXhwZXJpbWVudGFsOjwvZW0+IEFkZHMgYSBzaW5nbGUgY29sdW1uIHZpYSB7YWRkQ29sdW1uRnJvbVNjaGVtYX0gd2hlcmUgcHJvcGVydHkgc2NoZW1hIGlzIG1hbnVhbGx5IHByb3ZpZGVkLlxuICAgICAqXG4gICAgICogQGV4cGVyaW1lbnRhbFxuICAgICAqXG4gICAgICogQHBhcmFtIHtQcm9wZXJ0eX0gcHJvcGVydHkgLSBUaGUgcHJvcGVydHkgdG8gYWRkIHRoZSBjb2x1bW4gZm9yLlxuICAgICAqIEBwYXJhbSB7U2NoZW1hUHJvcGVydHl9IHNjaGVtYVByb3BlcnR5IC0gTWFudWFsbHkgcHJvdmlkZWQgc2NoZW1hIHByb3BlcnR5LlxuICAgICAqIEBwYXJhbSB7Q29sdW1uRnJvbVNjaGVtYU9wdHNUeXBlfSBvcHRzIC0gQWRkaXRpb25hbCBvcHRpb25zLlxuICAgICAqXG4gICAgICogQHJldHVybiB7Q29sdW1uRGVzY3JpcHRvcjxOb25OdWxsYWJsZTxNb2RlbFtQcm9wZXJ0eV0+LCBNb2RlbCwgTW9kZWxbUHJvcGVydHldPn0gVGhlIGFkZGVkIGNvbHVtbiBkZXNjcmlwdG9yLlxuICAgICAqL1xuICAgIHB1YmxpYyBhZGRGcm9tU2NoZW1hPFByb3BlcnR5IGV4dGVuZHMga2V5b2YgTW9kZWw+KFxuICAgICAgICBwcm9wZXJ0eTogUHJvcGVydHksXG4gICAgICAgIHNjaGVtYVByb3BlcnR5OiBTY2hlbWFQcm9wZXJ0eSxcbiAgICAgICAgb3B0cz86IENvbHVtbkZyb21TY2hlbWFPcHRzVHlwZTxNb2RlbFtQcm9wZXJ0eV0sIE1vZGVsPlxuICAgICk6IENvbHVtbkRlc2NyaXB0b3I8Tm9uTnVsbGFibGU8TW9kZWxbUHJvcGVydHldPiwgTW9kZWwsIE1vZGVsW1Byb3BlcnR5XT4ge1xuICAgICAgICByZXR1cm4gYWRkQ29sdW1uRnJvbVNjaGVtYSh0aGlzLmRlc2NyaXB0b3IsIHByb3BlcnR5LCBzY2hlbWFQcm9wZXJ0eSwgdGhpcy5tZXJnZUNvbHVtbk9wdHMocHJvcGVydHksIG9wdHMpKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGFkZENvbHVtbnM8UHJvcGVydHkgZXh0ZW5kcyBFeHRyYWN0PGtleW9mIE1vZGVsLCBrZXlvZiBTY2hNb2RlbD4+KHByb3BlcnRpZXM/OiBQcm9wZXJ0eVtdLCBvcHRzPzogQ29sdW1uc0Zyb21TY2hlbWFPcHRzVHlwZTxTY2hNb2RlbD4pIHtcbiAgICAgICAgY29uc3QgYWRkUHJvcGVydGllcyA9IHByb3BlcnRpZXMgPz8gZnJvbVNjaGVtYUZpbHRlck5vbkFycmF5UHJvcGVydGllczxTY2hNb2RlbD4odGhpcy5zY2hlbWEucHJvcGVydGllcyk7XG5cbiAgICAgICAgaWYgKGFkZFByb3BlcnRpZXMpIHtcbiAgICAgICAgICAgIGFkZFByb3BlcnRpZXMuZm9yRWFjaChwcm9wZXJ0eSA9PiB7XG4gICAgICAgICAgICAgICAgYWRkQ29sdW1uRnJvbVNjaGVtYShcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kZXNjcmlwdG9yLFxuICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eSBhcyB1bmtub3duIGFzIGtleW9mIE1vZGVsLFxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNjaGVtYS5wcm9wZXJ0aWVzW3Byb3BlcnR5XSxcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5tZXJnZUNvbHVtbnNPcHRzKHByb3BlcnR5IGFzIHVua25vd24gYXMga2V5b2YgTW9kZWwsIG9wdHMpXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxufVxuXG4vKipcbiAqIDxlbT5FeHBlcmltZW50YWw6PC9lbT4gQ3JlYXRlcyBidWlsZGVyIGZvciBhZGRpbmcgY29sdW1ucyB0byBkZXNjcmlwdG9yIGJhc2VkIG9uIHByb3ZpZGVkIG1vZGVsIHNjaGVtYS5cbiAqXG4gKiBAZXhwZXJpbWVudGFsXG4gKlxuICogQHBhcmFtIHtUYWJsZXZpZXdEZXNjcmlwdG9ySW5zdDxNb2RlbCwgYW55LCBhbnksIGFueT4gfCBUYWJsZURlc2NyaXB0b3JJbnN0PE1vZGVsLCBhbnksIGFueT59IGRlc2NyaXB0b3IgLSBEZXNjcmlwdG9yIHRvIGFkZCBjb2x1bW5zIHRvLlxuICogQHBhcmFtIHtTY2hlbWFNb2RlbDxTY2hNb2RlbD59IHNjaGVtYSAtIFRoZSBzY2hlbWEgd2l0aCBtZXRhZGF0YSBhYm91dCBwcm9wZXJ0aWVzIGZvciBmaWVsZHMuXG4gKiBAcGFyYW0ge0NvbHVtbnNGcm9tU2NoZW1hT3B0c1R5cGU8U2NoTW9kZWw+fSBbb3B0c10gLSBBZGRpdGlvbmFsIG9wdGlvbnMuXG4gKlxuICogQHJldHVybiB7U2NoZW1hQ29sdW1uc0J1aWxkZXI8TW9kZWwsIFNjaE1vZGVsPn0gLSBUaGUgY29sdW1uIHNjaGVtYSBidWlsZGVyIGluc3RhbmNlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY29sdW1uc0Zyb21TY2hlbWE8TW9kZWwsIFNjaE1vZGVsID0gTW9kZWw+KFxuICAgIGRlc2NyaXB0b3I6IFRhYmxldmlld0Rlc2NyaXB0b3JJbnN0PE1vZGVsLCBhbnksIGFueSwgYW55PiB8IFRhYmxlRGVzY3JpcHRvckluc3Q8TW9kZWwsIGFueSwgYW55PixcbiAgICBzY2hlbWE6IFNjaGVtYU1vZGVsPFNjaE1vZGVsPixcbiAgICBvcHRzPzogQ29sdW1uc0Zyb21TY2hlbWFPcHRzVHlwZTxTY2hNb2RlbD5cbik6IFNjaGVtYUNvbHVtbnNCdWlsZGVyPE1vZGVsLCBTY2hNb2RlbD4ge1xuICAgIHJldHVybiBuZXcgU2NoZW1hQ29sdW1uc0J1aWxkZXI8TW9kZWwsIFNjaE1vZGVsPihkZXNjcmlwdG9yLCBzY2hlbWEsIG9wdHMpO1xufVxuXG4vKipcbiAqIDxlbT5FeHBlcmltZW50YWw6PC9lbT4gQWRkcyBhIGNvbHVtbiB0byB0YWJsZSBkZXNjcmlwdG9yIGJhc2VkIG9uIHRoZSBnaXZlbiBzY2hlbWEgcHJvcGVydHkgYW5kIG9wdGlvbnMuXG4gKlxuICogQHBhcmFtIHtUYWJsZXZpZXdEZXNjcmlwdG9ySW5zdDxNb2RlbCwgYW55LCBhbnksIGFueT4gfCBUYWJsZURlc2NyaXB0b3JJbnN0PE1vZGVsLCBhbnksIGFueT59IGRlc2NyaXB0b3IgLSBUaGUgdGFibGUgdmlldyBkZXNjcmlwdG9yIG9yIHRhYmxlIGRlc2NyaXB0b3IgdG8gYWRkIHRoZSBjb2x1bW4gdG8uXG4gKiBAcGFyYW0ge1Byb3BlcnR5fSBwcm9wZXJ0eSAtIFRoZSBwcm9wZXJ0eSBrZXkgb2YgdGhlIG1vZGVsIHRvIGNyZWF0ZSB0aGUgY29sdW1uIGZvci5cbiAqIEBwYXJhbSB7U2NoZW1hUHJvcGVydHl9IHByb3BlcnR5U2NoZW1hIC0gVGhlIHNjaGVtYSBwcm9wZXJ0eSBmb3IgdGhlIHByb3BlcnR5LlxuICogQHBhcmFtIHtDb2x1bW5Gcm9tU2NoZW1hT3B0c1R5cGU8TW9kZWxbUHJvcGVydHldLCBNb2RlbCwgYW55LCBNb2RlbD59IFtvcHRzXSAtIFRoZSBvcHRpb25zIGZvciB0aGUgY29sdW1uLlxuICpcbiAqIEByZXR1cm4ge0NvbHVtbkRlc2NyaXB0b3I8Tm9uTnVsbGFibGU8TW9kZWxbUHJvcGVydHldPiwgTW9kZWwsIE1vZGVsW1Byb3BlcnR5XT59IC0gVGhlIGFkZGVkIGNvbHVtbiBkZXNjcmlwdG9yLlxuICovXG5leHBvcnQgZnVuY3Rpb24gYWRkQ29sdW1uRnJvbVNjaGVtYTxQcm9wZXJ0eSBleHRlbmRzIGtleW9mIE1vZGVsLCBNb2RlbD4oXG4gICAgZGVzY3JpcHRvcjogVGFibGV2aWV3RGVzY3JpcHRvckluc3Q8TW9kZWwsIGFueSwgYW55LCBhbnk+IHwgVGFibGVEZXNjcmlwdG9ySW5zdDxNb2RlbCwgYW55LCBhbnk+LFxuICAgIHByb3BlcnR5OiBQcm9wZXJ0eSxcbiAgICBwcm9wZXJ0eVNjaGVtYTogU2NoZW1hUHJvcGVydHksXG4gICAgb3B0cz86IENvbHVtbkZyb21TY2hlbWFPcHRzVHlwZTxNb2RlbFtQcm9wZXJ0eV0sIE1vZGVsLCBhbnksIE1vZGVsPlxuKTogQ29sdW1uRGVzY3JpcHRvcjxOb25OdWxsYWJsZTxNb2RlbFtQcm9wZXJ0eV0+LCBNb2RlbCwgTW9kZWxbUHJvcGVydHldPiB7XG4gICAgY29uc3QgcHJvcGVydHlUeXBlID0gb3B0cz8uY29sdW1uVHlwZSA/PyBwcm9wZXJ0eVNjaGVtYT8udHlwZTtcblxuICAgIGNvbnN0IGNvbHVtbiA9IGRlc2NyaXB0b3IuYWRkQ29sdW1uKHByb3BlcnR5KTtcblxuICAgIC8vIEhhbmRsZSBkaWZmZXJlbnQgcHJvcGVydHkgdHlwZXNcbiAgICBzd2l0Y2ggKHByb3BlcnR5VHlwZSkge1xuICAgICAgICBjYXNlICdudW1iZXInOlxuICAgICAgICAgICAgaWYgKG9wdHM/LmN1cnJlbmN5KSB7XG4gICAgICAgICAgICAgICAgY29sdW1uLmFzQ3VycmVuY3koZnJvbVNjaGVtYUN1cnJlbmN5T3B0c1RvQ3VycmVuY3kob3B0cy5jdXJyZW5jeSkpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjb2x1bW4uYXNOdW1iZXIoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdib29sZWFuJzpcbiAgICAgICAgICAgIGNvbHVtbi5hc0Jvb2xlYW4odW5kZWZpbmVkLCB1bmRlZmluZWQsIHRydWUpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ2RhdGUnOlxuICAgICAgICAgICAgY29sdW1uLmFzRGF0ZShvcHRzPy5kYXRlRm9ybWF0ID8/ICdkZC5NTS5ZWVlZJyk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnZW51bSc6XG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY2FzZS1kZWNsYXJhdGlvbnNcbiAgICAgICAgICAgIGNvbnN0IGVudW1Nb2RlbCA9IG9wdHM/LmVudW1TY2hlbWEgPyBlbnVtTW9kZWxGcm9tU2NoZW1hKG9wdHMuZW51bVNjaGVtYSkgOiBvcHRzPy5lbnVtTW9kZWw7XG4gICAgICAgICAgICBpZiAoZW51bU1vZGVsKSB7XG4gICAgICAgICAgICAgICAgY29sdW1uLmFzRW51bVVuc2FmZShlbnVtTW9kZWwpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ2RhdGUtdGltZSc6XG4gICAgICAgICAgICBjb2x1bW4uYXNEYXRlKG9wdHM/LmRhdGVUaW1lRm9ybWF0ID8/ICdkZC5NTS5ZWVlZIEhIOm1tJyk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnY3VycmVuY3knOlxuICAgICAgICAgICAgY29sdW1uLmFzQ3VycmVuY3kob3B0cz8uY3VycmVuY3kgPyBmcm9tU2NoZW1hQ3VycmVuY3lPcHRzVG9DdXJyZW5jeShvcHRzPy5jdXJyZW5jeSkgOiB1bmRlZmluZWQpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ29iamVjdCc6XG4gICAgICAgICAgICBjb2x1bW4ud2l0aEdldHRlcihkZWZhdWx0R2V0dGVyKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIC8vIEFkZCBvcHRpb25hbCBmaWx0ZXIsIHNvcnQgYW5kIGdldHRlcnNcbiAgICBpZiAob3B0cz8uZ2V0dGVyKSBjb2x1bW4ud2l0aEdldHRlcihvcHRzPy5nZXR0ZXIpO1xuXG4gICAgcmV0dXJuIGNvbHVtbjtcbn1cbiJdfQ==
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { enumModelGeneric } from '@mediusinc/mng-commons/model';
|
|
2
|
+
/**
|
|
3
|
+
* <em>Experimental:</em> Emulates an enum model object from enum schema.
|
|
4
|
+
*
|
|
5
|
+
* @experimental
|
|
6
|
+
*
|
|
7
|
+
* @param {SchemaEnum<Enum>} enumSchema - The schema of the enum.
|
|
8
|
+
*
|
|
9
|
+
* @returns {EnumDescriptor<Enum>} - The generated enum model descriptor.
|
|
10
|
+
*/
|
|
11
|
+
export function enumModelFromSchema(enumSchema) {
|
|
12
|
+
const enumObj = {};
|
|
13
|
+
enumSchema.values
|
|
14
|
+
.map((v, idx) => ({ value: v, constant: enumSchema.constants[idx] }))
|
|
15
|
+
.forEach(({ value, constant }) => {
|
|
16
|
+
const valueAsStrOrInt = value;
|
|
17
|
+
enumObj[constant] = valueAsStrOrInt;
|
|
18
|
+
if (typeof valueAsStrOrInt === 'number' && enumObj[valueAsStrOrInt] == null)
|
|
19
|
+
enumObj[valueAsStrOrInt] = constant;
|
|
20
|
+
});
|
|
21
|
+
return enumModelGeneric(enumObj, enumSchema.name.replace(/\d+$/, ''));
|
|
22
|
+
}
|
|
23
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW51bS1mcm9tLXNjaGVtYS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3RhYmxldmlldy9zcmMvc2NoZW1hL2VudW0tZnJvbS1zY2hlbWEudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFpQixnQkFBZ0IsRUFBQyxNQUFNLDhCQUE4QixDQUFDO0FBRTlFOzs7Ozs7OztHQVFHO0FBQ0gsTUFBTSxVQUFVLG1CQUFtQixDQUFPLFVBQTRCO0lBQ2xFLE1BQU0sT0FBTyxHQUE2QyxFQUFFLENBQUM7SUFDN0QsVUFBVSxDQUFDLE1BQU07U0FDWixHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUMsS0FBSyxFQUFFLENBQUMsRUFBRSxRQUFRLEVBQUUsVUFBVSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsRUFBQyxDQUFDLENBQUM7U0FDbEUsT0FBTyxDQUFDLENBQUMsRUFBQyxLQUFLLEVBQUUsUUFBUSxFQUFDLEVBQUUsRUFBRTtRQUMzQixNQUFNLGVBQWUsR0FBRyxLQUFtQyxDQUFDO1FBQzVELE9BQU8sQ0FBQyxRQUFRLENBQUMsR0FBRyxlQUFlLENBQUM7UUFDcEMsSUFBSSxPQUFPLGVBQWUsS0FBSyxRQUFRLElBQUksT0FBTyxDQUFDLGVBQWUsQ0FBQyxJQUFJLElBQUk7WUFBRSxPQUFPLENBQUMsZUFBZSxDQUFDLEdBQUcsUUFBUSxDQUFDO0lBQ3JILENBQUMsQ0FBQyxDQUFDO0lBQ1AsT0FBTyxnQkFBZ0IsQ0FBTyxPQUFPLEVBQUUsVUFBVSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDaEYsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7U2NoZW1hRW51bX0gZnJvbSAnQG1lZGl1c2luYy9tbmctY29tbW9ucy1kYXRhLWFwaSc7XG5pbXBvcnQge0VudW1EZXNjcmlwdG9yLCBlbnVtTW9kZWxHZW5lcmljfSBmcm9tICdAbWVkaXVzaW5jL21uZy1jb21tb25zL21vZGVsJztcblxuLyoqXG4gKiA8ZW0+RXhwZXJpbWVudGFsOjwvZW0+IEVtdWxhdGVzIGFuIGVudW0gbW9kZWwgb2JqZWN0IGZyb20gZW51bSBzY2hlbWEuXG4gKlxuICogQGV4cGVyaW1lbnRhbFxuICpcbiAqIEBwYXJhbSB7U2NoZW1hRW51bTxFbnVtPn0gZW51bVNjaGVtYSAtIFRoZSBzY2hlbWEgb2YgdGhlIGVudW0uXG4gKlxuICogQHJldHVybnMge0VudW1EZXNjcmlwdG9yPEVudW0+fSAtIFRoZSBnZW5lcmF0ZWQgZW51bSBtb2RlbCBkZXNjcmlwdG9yLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZW51bU1vZGVsRnJvbVNjaGVtYTxFbnVtPihlbnVtU2NoZW1hOiBTY2hlbWFFbnVtPEVudW0+KTogRW51bURlc2NyaXB0b3I8RW51bT4ge1xuICAgIGNvbnN0IGVudW1PYmo6IFJlY29yZDxzdHJpbmcgfCBudW1iZXIsIHN0cmluZyB8IG51bWJlcj4gPSB7fTtcbiAgICBlbnVtU2NoZW1hLnZhbHVlc1xuICAgICAgICAubWFwKCh2LCBpZHgpID0+ICh7dmFsdWU6IHYsIGNvbnN0YW50OiBlbnVtU2NoZW1hLmNvbnN0YW50c1tpZHhdfSkpXG4gICAgICAgIC5mb3JFYWNoKCh7dmFsdWUsIGNvbnN0YW50fSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgdmFsdWVBc1N0ck9ySW50ID0gdmFsdWUgYXMgdW5rbm93biBhcyBzdHJpbmcgfCBudW1iZXI7XG4gICAgICAgICAgICBlbnVtT2JqW2NvbnN0YW50XSA9IHZhbHVlQXNTdHJPckludDtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgdmFsdWVBc1N0ck9ySW50ID09PSAnbnVtYmVyJyAmJiBlbnVtT2JqW3ZhbHVlQXNTdHJPckludF0gPT0gbnVsbCkgZW51bU9ialt2YWx1ZUFzU3RyT3JJbnRdID0gY29uc3RhbnQ7XG4gICAgICAgIH0pO1xuICAgIHJldHVybiBlbnVtTW9kZWxHZW5lcmljPEVudW0+KGVudW1PYmosIGVudW1TY2hlbWEubmFtZS5yZXBsYWNlKC9cXGQrJC8sICcnKSk7XG59XG4iXX0=
|