@decaf-ts/for-angular 0.0.15 → 0.0.17
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/assets/i18n/en.json +10 -0
- package/assets/i18n/pt.json +149 -0
- package/assets/icons/icon-128.webp +0 -0
- package/assets/icons/icon-192.webp +0 -0
- package/assets/icons/icon-256.webp +0 -0
- package/assets/icons/icon-48.webp +0 -0
- package/assets/icons/icon-512.webp +0 -0
- package/assets/icons/icon-72.webp +0 -0
- package/assets/icons/icon-96.webp +0 -0
- package/assets/images/apple-touch-icon.png +0 -0
- package/assets/images/favicon.png +0 -0
- package/assets/images/favicon.svg +29 -0
- package/components/component-renderer/component-renderer.component.d.ts +5 -4
- package/components/crud-field/crud-field.component.d.ts +174 -19
- package/components/crud-form/crud-form.component.d.ts +170 -6
- package/components/fieldset/fieldset.component.d.ts +374 -36
- package/components/list/list.component.d.ts +1 -1
- package/components/list-item/list-item.component.d.ts +2 -2
- package/components/model-renderer/model-renderer.component.d.ts +1 -5
- package/directives/collapsable.directive.d.ts +1 -0
- package/engine/NgxBaseComponent.d.ts +6 -6
- package/engine/NgxCrudFormField.d.ts +5 -2
- package/engine/NgxFormService.d.ts +113 -12
- package/engine/NgxRenderingEngine.d.ts +150 -25
- package/engine/constants.d.ts +11 -6
- package/engine/decorators.d.ts +2 -2
- package/engine/index.d.ts +4 -2
- package/engine/interfaces.d.ts +261 -0
- package/engine/types.d.ts +3 -206
- package/esm2022/components/component-renderer/component-renderer.component.mjs +13 -11
- package/esm2022/components/crud-field/crud-field.component.mjs +193 -8
- package/esm2022/components/crud-form/crud-form.component.mjs +116 -11
- package/esm2022/components/empty-state/empty-state.component.mjs +3 -3
- package/esm2022/components/fieldset/fieldset.component.mjs +482 -43
- package/esm2022/components/filter/filter.component.mjs +3 -3
- package/esm2022/components/layout/layout.component.mjs +3 -3
- package/esm2022/components/list/list.component.mjs +4 -5
- package/esm2022/components/list-item/list-item.component.mjs +9 -9
- package/esm2022/components/model-renderer/model-renderer.component.mjs +9 -8
- package/esm2022/components/pagination/pagination.component.mjs +4 -4
- package/esm2022/components/searchbar/searchbar.component.mjs +3 -3
- package/esm2022/directives/collapsable.directive.mjs +3 -2
- package/esm2022/engine/NgxBaseComponent.mjs +28 -22
- package/esm2022/engine/NgxCrudFormField.mjs +14 -4
- package/esm2022/engine/NgxFormService.mjs +239 -27
- package/esm2022/engine/NgxRenderingEngine.mjs +202 -46
- package/esm2022/engine/ValidatorFactory.mjs +6 -2
- package/esm2022/engine/constants.mjs +14 -9
- package/esm2022/engine/decorators.mjs +6 -6
- package/esm2022/engine/index.mjs +5 -3
- package/esm2022/engine/interfaces.mjs +4 -0
- package/esm2022/engine/types.mjs +1 -3
- package/esm2022/helpers/utils.mjs +6 -2
- package/fesm2022/decaf-ts-for-angular.mjs +2910 -2129
- package/fesm2022/decaf-ts-for-angular.mjs.map +1 -1
- package/helpers/utils.d.ts +1 -0
- package/package.json +2 -1
- package/engine/NgxRenderingEngine2.d.ts +0 -250
- package/esm2022/engine/NgxRenderingEngine2.mjs +0 -332
- package/esm2022/interfaces.mjs +0 -2
- package/interfaces.d.ts +0 -28
|
@@ -2,38 +2,48 @@ import { RenderingEngine } from '@decaf-ts/ui-decorators';
|
|
|
2
2
|
import { AngularEngineKeys } from './constants';
|
|
3
3
|
import { InternalError } from '@decaf-ts/db-decorators';
|
|
4
4
|
import { reflectComponentType, } from '@angular/core';
|
|
5
|
+
import { NgxFormService } from './NgxFormService';
|
|
5
6
|
/**
|
|
6
|
-
* @description Angular implementation of the RenderingEngine
|
|
7
|
-
* @summary This class extends the base RenderingEngine to provide Angular-specific rendering capabilities
|
|
8
|
-
* It handles the conversion of field definitions
|
|
7
|
+
* @description Angular implementation of the RenderingEngine with enhanced features
|
|
8
|
+
* @summary This class extends the base RenderingEngine to provide Angular-specific rendering capabilities
|
|
9
|
+
* with additional features compared to NgxRenderingEngine. It handles the conversion of field definitions
|
|
10
|
+
* to Angular components, manages component registration, and provides utilities for component creation
|
|
11
|
+
* and input handling. This implementation uses Angular's newer component APIs.
|
|
12
|
+
*
|
|
9
13
|
* @template AngularFieldDefinition - Type for Angular-specific field definitions
|
|
10
14
|
* @template AngularDynamicOutput - Type for Angular-specific component output
|
|
11
|
-
*
|
|
12
|
-
* @param {ViewContainerRef} vcr - View container reference for component creation
|
|
13
|
-
* @param {TemplateRef<any>} tpl - Template reference for content projection
|
|
15
|
+
*
|
|
14
16
|
* @class NgxRenderingEngine
|
|
15
17
|
* @example
|
|
16
18
|
* ```typescript
|
|
17
|
-
* const engine =
|
|
19
|
+
* const engine = NgxRenderingEngine.get();
|
|
18
20
|
* engine.initialize();
|
|
19
21
|
* const output = engine.render(myModel, {}, viewContainerRef, injector, templateRef);
|
|
20
22
|
* ```
|
|
23
|
+
*
|
|
21
24
|
* @mermaid
|
|
22
25
|
* sequenceDiagram
|
|
23
26
|
* participant Client
|
|
24
27
|
* participant Engine as NgxRenderingEngine
|
|
25
28
|
* participant Components as RegisteredComponents
|
|
26
29
|
*
|
|
27
|
-
* Client->>Engine:
|
|
30
|
+
* Client->>Engine: get()
|
|
28
31
|
* Client->>Engine: initialize()
|
|
29
32
|
* Client->>Engine: render(model, props, vcr, injector, tpl)
|
|
30
33
|
* Engine->>Engine: toFieldDefinition(model, props)
|
|
31
34
|
* Engine->>Engine: fromFieldDefinition(fieldDef, vcr, injector, tpl)
|
|
32
35
|
* Engine->>Components: components(fieldDef.tag)
|
|
33
36
|
* Components-->>Engine: component constructor
|
|
34
|
-
* Engine->>
|
|
37
|
+
* Engine->>Engine: createComponent(component, inputs, metadata, vcr, injector, template)
|
|
38
|
+
* Engine-->>Client: return AngularDynamicOutput
|
|
35
39
|
*/
|
|
36
40
|
export class NgxRenderingEngine extends RenderingEngine {
|
|
41
|
+
static { this._operation = undefined; }
|
|
42
|
+
/**
|
|
43
|
+
* @description Creates a new instance of NgxRenderingEngine
|
|
44
|
+
* @summary Initializes the rendering engine with the 'angular' engine type.
|
|
45
|
+
* This constructor sets up the base configuration needed for Angular-specific rendering.
|
|
46
|
+
*/
|
|
37
47
|
constructor() {
|
|
38
48
|
super('angular');
|
|
39
49
|
}
|
|
@@ -41,69 +51,142 @@ export class NgxRenderingEngine extends RenderingEngine {
|
|
|
41
51
|
* @description Converts a field definition to an Angular component output
|
|
42
52
|
* @summary This private method takes a field definition and creates the corresponding Angular component.
|
|
43
53
|
* It handles component instantiation, input property mapping, and child component rendering.
|
|
54
|
+
* The method validates input properties against the component's metadata and processes
|
|
55
|
+
* child components recursively.
|
|
56
|
+
*
|
|
44
57
|
* @param {FieldDefinition<AngularFieldDefinition>} fieldDef - The field definition to convert
|
|
45
58
|
* @param {ViewContainerRef} vcr - The view container reference for component creation
|
|
46
59
|
* @param {Injector} injector - The Angular injector for dependency injection
|
|
47
60
|
* @param {TemplateRef<any>} tpl - The template reference for content projection
|
|
61
|
+
* @param {string} registryFormId - Form identifier for the component renderer
|
|
48
62
|
* @return {AngularDynamicOutput} The Angular component output with component reference and inputs
|
|
63
|
+
*
|
|
49
64
|
* @mermaid
|
|
50
65
|
* sequenceDiagram
|
|
51
66
|
* participant Method as fromFieldDefinition
|
|
52
67
|
* participant Components as NgxRenderingEngine.components
|
|
53
68
|
* participant Angular as Angular Core
|
|
69
|
+
* participant Process as processChild
|
|
54
70
|
*
|
|
55
71
|
* Method->>Components: components(fieldDef.tag)
|
|
56
72
|
* Components-->>Method: component constructor
|
|
57
73
|
* Method->>Angular: reflectComponentType(component)
|
|
58
74
|
* Angular-->>Method: componentMetadata
|
|
59
|
-
* Method->>Method:
|
|
75
|
+
* Method->>Method: Validate input properties
|
|
60
76
|
* Method->>Method: Create result object
|
|
61
|
-
*
|
|
77
|
+
* alt Has children
|
|
78
|
+
* Method->>Process: Process children recursively
|
|
79
|
+
* Process->>Method: Return processed children
|
|
80
|
+
* Method->>Angular: Create embedded view
|
|
81
|
+
* Method->>Method: Create component instance
|
|
82
|
+
* end
|
|
62
83
|
* Method-->>Caller: return AngularDynamicOutput
|
|
63
84
|
*/
|
|
64
|
-
fromFieldDefinition(fieldDef, vcr, injector, tpl) {
|
|
65
|
-
const
|
|
66
|
-
|
|
85
|
+
fromFieldDefinition(fieldDef, vcr, injector, tpl, registryFormId = Date.now().toString(36).toUpperCase()) {
|
|
86
|
+
const cmp = fieldDef?.['component'] || NgxRenderingEngine.components(fieldDef.tag);
|
|
87
|
+
const component = cmp.constructor;
|
|
67
88
|
const componentMetadata = reflectComponentType(component);
|
|
68
89
|
if (!componentMetadata) {
|
|
69
90
|
throw new InternalError(`Metadata for component ${fieldDef.tag} not found.`);
|
|
70
91
|
}
|
|
71
|
-
const inputs =
|
|
72
|
-
const
|
|
73
|
-
const
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
92
|
+
const { inputs: possibleInputs } = componentMetadata;
|
|
93
|
+
const inputs = { ...fieldDef.props };
|
|
94
|
+
const unmappedKeys = Object.keys(inputs).filter(input => {
|
|
95
|
+
const isMapped = possibleInputs.find(({ propName }) => propName === input);
|
|
96
|
+
if (!isMapped)
|
|
97
|
+
delete inputs[input];
|
|
98
|
+
return !isMapped;
|
|
99
|
+
});
|
|
100
|
+
if (unmappedKeys.length > 0)
|
|
101
|
+
console.warn(`Unmapped input properties for component ${fieldDef.tag}: ${unmappedKeys.join(', ')}`);
|
|
102
|
+
const operation = NgxRenderingEngine._operation;
|
|
103
|
+
const hiddenOn = inputs?.hidden || [];
|
|
104
|
+
if (hiddenOn.includes(operation))
|
|
105
|
+
return { inputs, injector };
|
|
106
|
+
// const hiddenOn = inputs?.hidden || [];
|
|
84
107
|
const result = {
|
|
85
|
-
component
|
|
86
|
-
inputs
|
|
87
|
-
injector
|
|
108
|
+
component,
|
|
109
|
+
inputs,
|
|
110
|
+
injector,
|
|
88
111
|
};
|
|
89
|
-
if (fieldDef.rendererId)
|
|
90
|
-
result.inputs['rendererId'] =
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
if (fieldDef.children && fieldDef.children.length) {
|
|
112
|
+
if (fieldDef.rendererId)
|
|
113
|
+
result.inputs['rendererId'] = fieldDef.rendererId;
|
|
114
|
+
// process children
|
|
115
|
+
if (fieldDef.children?.length) {
|
|
94
116
|
result.children = fieldDef.children.map((child) => {
|
|
95
|
-
|
|
117
|
+
if (child?.children?.length) {
|
|
118
|
+
child.children = child.children.filter(c => {
|
|
119
|
+
const hiddenOn = c?.props?.hidden || [];
|
|
120
|
+
if (!hiddenOn.includes(operation))
|
|
121
|
+
return c;
|
|
122
|
+
});
|
|
123
|
+
}
|
|
124
|
+
// create a child form and add its controls as properties of child.props
|
|
125
|
+
NgxFormService.addControlFromProps(registryFormId, child.props, inputs);
|
|
126
|
+
return this.fromFieldDefinition(child, vcr, injector, tpl, registryFormId);
|
|
96
127
|
});
|
|
97
|
-
const template = vcr.createEmbeddedView(tpl, injector).rootNodes;
|
|
98
|
-
result.content = [template];
|
|
99
128
|
}
|
|
129
|
+
// generating DOM
|
|
130
|
+
vcr.clear();
|
|
131
|
+
const template = vcr.createEmbeddedView(tpl, injector).rootNodes;
|
|
132
|
+
const componentInstance = NgxRenderingEngine.createComponent(component, { ...inputs, model: this._model }, componentMetadata, vcr, injector, template);
|
|
133
|
+
result.instance = NgxRenderingEngine._instance = componentInstance.instance;
|
|
100
134
|
return result;
|
|
101
135
|
}
|
|
136
|
+
/**
|
|
137
|
+
* @description Creates an Angular component instance
|
|
138
|
+
* @summary This static utility method creates an Angular component instance with the specified
|
|
139
|
+
* inputs and template. It uses Angular's component creation API to instantiate the component
|
|
140
|
+
* and then sets the input properties using the provided metadata.
|
|
141
|
+
*
|
|
142
|
+
* @param {Type<unknown>} component - The component type to create
|
|
143
|
+
* @param {KeyValue} [inputs={}] - The input properties to set on the component
|
|
144
|
+
* @param {ComponentMirror<unknown>} metadata - The component metadata for input validation
|
|
145
|
+
* @param {ViewContainerRef} vcr - The view container reference for component creation
|
|
146
|
+
* @param {Injector} injector - The Angular injector for dependency injection
|
|
147
|
+
* @param {Node[]} [template=[]] - The template nodes to project into the component
|
|
148
|
+
* @return {ComponentRef<unknown>} The created component reference
|
|
149
|
+
*/
|
|
150
|
+
static createComponent(component, inputs = {}, metadata, vcr, injector, template = []) {
|
|
151
|
+
const componentInstance = vcr.createComponent(component, {
|
|
152
|
+
environmentInjector: injector,
|
|
153
|
+
projectableNodes: [template],
|
|
154
|
+
});
|
|
155
|
+
this.setInputs(componentInstance, inputs, metadata);
|
|
156
|
+
return componentInstance;
|
|
157
|
+
}
|
|
158
|
+
/**
|
|
159
|
+
* @description Extracts decorator metadata from a model
|
|
160
|
+
* @summary This method provides access to the field definition generated from a model's
|
|
161
|
+
* decorators. It's a convenience wrapper around the toFieldDefinition method that
|
|
162
|
+
* converts a model to a field definition based on its decorators and the provided
|
|
163
|
+
* global properties.
|
|
164
|
+
*
|
|
165
|
+
* @param {Model} model - The model to extract decorators from
|
|
166
|
+
* @param {Record<string, unknown>} globalProps - Global properties to include in the field definition
|
|
167
|
+
* @return {FieldDefinition<AngularFieldDefinition>} The field definition generated from the model
|
|
168
|
+
*/
|
|
169
|
+
getDecorators(model, globalProps) {
|
|
170
|
+
return this.toFieldDefinition(model, globalProps);
|
|
171
|
+
}
|
|
172
|
+
/**
|
|
173
|
+
* @description Destroys the current engine instance
|
|
174
|
+
* @summary This static method clears the current instance reference, effectively
|
|
175
|
+
* destroying the singleton instance of the rendering engine. This can be used
|
|
176
|
+
* to reset the engine state or to prepare for a new instance creation.
|
|
177
|
+
*
|
|
178
|
+
* @return {Promise<void>} A promise that resolves when the instance is destroyed
|
|
179
|
+
*/
|
|
180
|
+
static async destroy() {
|
|
181
|
+
NgxRenderingEngine._instance = undefined;
|
|
182
|
+
}
|
|
102
183
|
/**
|
|
103
184
|
* @description Renders a model into an Angular component output
|
|
104
185
|
* @summary This method takes a model and converts it to an Angular component output.
|
|
105
|
-
* It first
|
|
106
|
-
*
|
|
186
|
+
* It first stores a reference to the model, then converts it to a field definition
|
|
187
|
+
* using the base RenderingEngine's toFieldDefinition method, and finally converts
|
|
188
|
+
* that field definition to an Angular component output using fromFieldDefinition.
|
|
189
|
+
*
|
|
107
190
|
* @template M - Type extending Model
|
|
108
191
|
* @param {M} model - The model to render
|
|
109
192
|
* @param {Record<string, unknown>} globalProps - Global properties to pass to the component
|
|
@@ -111,6 +194,7 @@ export class NgxRenderingEngine extends RenderingEngine {
|
|
|
111
194
|
* @param {Injector} injector - The Angular injector for dependency injection
|
|
112
195
|
* @param {TemplateRef<any>} tpl - The template reference for content projection
|
|
113
196
|
* @return {AngularDynamicOutput} The Angular component output with component reference and inputs
|
|
197
|
+
*
|
|
114
198
|
* @mermaid
|
|
115
199
|
* sequenceDiagram
|
|
116
200
|
* participant Client as Client Code
|
|
@@ -119,6 +203,7 @@ export class NgxRenderingEngine extends RenderingEngine {
|
|
|
119
203
|
* participant FromField as fromFieldDefinition
|
|
120
204
|
*
|
|
121
205
|
* Client->>Render: render(model, globalProps, vcr, injector, tpl)
|
|
206
|
+
* Render->>Render: Store model reference
|
|
122
207
|
* Render->>ToField: toFieldDefinition(model, globalProps)
|
|
123
208
|
* ToField-->>Render: fieldDef
|
|
124
209
|
* Render->>FromField: fromFieldDefinition(fieldDef, vcr, injector, tpl)
|
|
@@ -128,8 +213,15 @@ export class NgxRenderingEngine extends RenderingEngine {
|
|
|
128
213
|
render(model, globalProps, vcr, injector, tpl) {
|
|
129
214
|
let result;
|
|
130
215
|
try {
|
|
216
|
+
this._model = model;
|
|
217
|
+
const formId = Date.now().toString(36).toUpperCase();
|
|
131
218
|
const fieldDef = this.toFieldDefinition(model, globalProps);
|
|
132
|
-
|
|
219
|
+
const props = fieldDef.props;
|
|
220
|
+
if (!NgxRenderingEngine._operation)
|
|
221
|
+
NgxRenderingEngine._operation = props?.['operation'] || undefined;
|
|
222
|
+
result = this.fromFieldDefinition(fieldDef, vcr, injector, tpl, formId);
|
|
223
|
+
result.instance['formGroup'] = NgxFormService.getControlFromForm(formId);
|
|
224
|
+
NgxFormService.removeRegistry(formId);
|
|
133
225
|
}
|
|
134
226
|
catch (e) {
|
|
135
227
|
throw new InternalError(`Failed to render Model ${model.constructor.name}: ${e}`);
|
|
@@ -139,18 +231,24 @@ export class NgxRenderingEngine extends RenderingEngine {
|
|
|
139
231
|
/**
|
|
140
232
|
* @description Initializes the rendering engine
|
|
141
233
|
* @summary This method initializes the rendering engine. It checks if the engine is already initialized
|
|
142
|
-
* and sets the initialized flag to true. This method is called before the engine is used
|
|
234
|
+
* and sets the initialized flag to true. This method is called before the engine is used
|
|
235
|
+
* to ensure it's properly set up for rendering operations.
|
|
236
|
+
*
|
|
143
237
|
* @return {Promise<void>} A promise that resolves when initialization is complete
|
|
144
238
|
*/
|
|
145
239
|
async initialize() {
|
|
146
240
|
if (this.initialized)
|
|
147
241
|
return;
|
|
242
|
+
// ValidatableByType[]
|
|
148
243
|
this.initialized = true;
|
|
149
244
|
}
|
|
150
245
|
/**
|
|
151
246
|
* @description Registers a component with the rendering engine
|
|
152
247
|
* @summary This static method registers a component constructor with the rendering engine
|
|
153
|
-
* under a specific name. It
|
|
248
|
+
* under a specific name. It initializes the components registry if needed and throws
|
|
249
|
+
* an error if a component is already registered under the same name to prevent
|
|
250
|
+
* accidental overrides.
|
|
251
|
+
*
|
|
154
252
|
* @param {string} name - The name to register the component under
|
|
155
253
|
* @param {Constructor<unknown>} constructor - The component constructor
|
|
156
254
|
* @return {void}
|
|
@@ -167,7 +265,10 @@ export class NgxRenderingEngine extends RenderingEngine {
|
|
|
167
265
|
/**
|
|
168
266
|
* @description Retrieves registered components from the rendering engine
|
|
169
267
|
* @summary This static method retrieves either all registered components or a specific component
|
|
170
|
-
* by its selector.
|
|
268
|
+
* by its selector. When called without a selector, it returns an array of all registered
|
|
269
|
+
* components. When called with a selector, it returns the specific component if found,
|
|
270
|
+
* or throws an error if the component is not registered.
|
|
271
|
+
*
|
|
171
272
|
* @param {string} [selector] - Optional selector to retrieve a specific component
|
|
172
273
|
* @return {Object|Array} Either a specific component or an array of all components
|
|
173
274
|
*/
|
|
@@ -181,12 +282,67 @@ export class NgxRenderingEngine extends RenderingEngine {
|
|
|
181
282
|
/**
|
|
182
283
|
* @description Generates a key for reflection metadata
|
|
183
284
|
* @summary This static method generates a key for reflection metadata by prefixing the input key
|
|
184
|
-
* with the Angular engine's reflection prefix. This is used for storing and retrieving
|
|
285
|
+
* with the Angular engine's reflection prefix. This is used for storing and retrieving
|
|
286
|
+
* metadata in a namespaced way to avoid conflicts with other metadata.
|
|
287
|
+
*
|
|
185
288
|
* @param {string} key - The base key to prefix
|
|
186
289
|
* @return {string} The prefixed key for reflection metadata
|
|
187
290
|
*/
|
|
188
291
|
static key(key) {
|
|
189
292
|
return `${AngularEngineKeys.REFLECT}${key}`;
|
|
190
293
|
}
|
|
294
|
+
/**
|
|
295
|
+
* @description Sets input properties on a component instance
|
|
296
|
+
* @summary This static utility method sets input properties on a component instance
|
|
297
|
+
* based on the provided inputs object and component metadata. It handles both simple
|
|
298
|
+
* values and nested objects, recursively processing object properties. The method
|
|
299
|
+
* validates each input against the component's metadata to ensure only valid inputs
|
|
300
|
+
* are set.
|
|
301
|
+
*
|
|
302
|
+
* @param {ComponentRef<unknown>} component - The component reference to set inputs on
|
|
303
|
+
* @param {KeyValue} inputs - The input properties to set
|
|
304
|
+
* @param {ComponentMirror<unknown>} metadata - The component metadata for input validation
|
|
305
|
+
* @return {void}
|
|
306
|
+
*
|
|
307
|
+
* @mermaid
|
|
308
|
+
* sequenceDiagram
|
|
309
|
+
* participant Caller
|
|
310
|
+
* participant SetInputs as setInputs
|
|
311
|
+
* participant Parse as parseInputValue
|
|
312
|
+
* participant Component as ComponentRef
|
|
313
|
+
*
|
|
314
|
+
* Caller->>SetInputs: setInputs(component, inputs, metadata)
|
|
315
|
+
* SetInputs->>SetInputs: Iterate through inputs
|
|
316
|
+
* loop For each input
|
|
317
|
+
* SetInputs->>SetInputs: Check if input exists in metadata
|
|
318
|
+
* alt Input is 'props'
|
|
319
|
+
* SetInputs->>Parse: parseInputValue(component, value)
|
|
320
|
+
* Parse->>Parse: Recursively process nested objects
|
|
321
|
+
* Parse->>Component: setInput(key, value)
|
|
322
|
+
* else Input is valid
|
|
323
|
+
* SetInputs->>Component: setInput(key, value)
|
|
324
|
+
* end
|
|
325
|
+
* end
|
|
326
|
+
*/
|
|
327
|
+
static setInputs(component, inputs, metadata) {
|
|
328
|
+
function parseInputValue(component, input) {
|
|
329
|
+
Object.keys(input).forEach(key => {
|
|
330
|
+
const value = input[key];
|
|
331
|
+
if (typeof value === 'object' && !!value)
|
|
332
|
+
return parseInputValue(component, value);
|
|
333
|
+
component.setInput(key, value);
|
|
334
|
+
});
|
|
335
|
+
}
|
|
336
|
+
Object.entries(inputs).forEach(([key, value]) => {
|
|
337
|
+
const prop = metadata.inputs.find((item) => item.propName === key);
|
|
338
|
+
if (prop) {
|
|
339
|
+
if (key === 'props')
|
|
340
|
+
parseInputValue(component, value);
|
|
341
|
+
// if(key === 'locale' && !value)
|
|
342
|
+
// value = getLocaleFromClassName(this._componentName);
|
|
343
|
+
component.setInput(key, value);
|
|
344
|
+
}
|
|
345
|
+
});
|
|
346
|
+
}
|
|
191
347
|
}
|
|
192
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTmd4UmVuZGVyaW5nRW5naW5lLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2xpYi9lbmdpbmUvTmd4UmVuZGVyaW5nRW5naW5lLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBbUIsZUFBZSxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFFM0UsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sYUFBYSxDQUFDO0FBRWhELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUN4RCxPQUFPLEVBRUwsb0JBQW9CLEdBSXJCLE1BQU0sZUFBZSxDQUFDO0FBRXZCOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0E4Qkc7QUFDSCxNQUFNLE9BQU8sa0JBQW1CLFNBQVEsZUFHdkM7SUFNQztRQUNFLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUNuQixDQUFDO0lBRUQ7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O09BdUJHO0lBQ0ssbUJBQW1CLENBQ3pCLFFBQWlELEVBQ2pELEdBQXFCLEVBQ3JCLFFBQWtCLEVBQ2xCLEdBQXlCO1FBRXpCLE1BQU0sU0FBUyxHQUFHLGtCQUFrQixDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDO2FBQzFELFdBQXVDLENBQUM7UUFFM0MsTUFBTSxpQkFBaUIsR0FBRyxvQkFBb0IsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUMxRCxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztZQUN2QixNQUFNLElBQUksYUFBYSxDQUNyQiwwQkFBMEIsUUFBUSxDQUFDLEdBQUcsYUFBYSxDQUNwRCxDQUFDO1FBQ0osQ0FBQztRQUNELE1BQU0sTUFBTSxHQUFHLFFBQVEsQ0FBQyxLQUFLLENBQUM7UUFFOUIsTUFBTSxjQUFjLEdBQUcsaUJBQWlCLENBQUMsTUFBTSxDQUFDO1FBQ2hELE1BQU0sU0FBUyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxD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UUFDeEUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsR0FBRztZQUN2QixXQUFXLEVBQUUsV0FBVztTQUN6QixDQUFDO0lBQ0osQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNILE1BQU0sQ0FBQyxVQUFVLENBQUMsUUFBaUI7UUFDakMsSUFBSSxDQUFDLFFBQVE7WUFBRSxPQUFPLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQ3RELElBQUksQ0FBQyxDQUFDLFFBQVEsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDO1lBQ2pDLE1BQU0sSUFBSSxhQUFhLENBQUMsaUNBQWlDLFFBQVEsRUFBRSxDQUFDLENBQUM7UUFDdkUsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ3BDLENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSCxNQUFNLENBQVUsR0FBRyxDQUFDLEdBQVc7UUFDN0IsT0FBTyxHQUFHLGlCQUFpQixDQUFDLE9BQU8sR0FBRyxHQUFHLEVBQUUsQ0FBQztJQUM5QyxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBGaWVsZERlZmluaXRpb24sIFJlbmRlcmluZ0VuZ2luZSB9IGZyb20gJ0BkZWNhZi10cy91aS1kZWNvcmF0b3JzJztcbmltcG9ydCB7IEFuZ3VsYXJEeW5hbWljT3V0cHV0LCBBbmd1bGFyRmllbGREZWZpbml0aW9uIH0gZnJvbSAnLi90eXBlcyc7XG5pbXBvcnQgeyBBbmd1bGFyRW5naW5lS2V5cyB9IGZyb20gJy4vY29uc3RhbnRzJztcbmltcG9ydCB7IENvbnN0cnVjdG9yLCBNb2RlbCB9IGZyb20gJ0BkZWNhZi10cy9kZWNvcmF0b3ItdmFsaWRhdGlvbic7XG5pbXBvcnQgeyBJbnRlcm5hbEVycm9yIH0gZnJvbSAnQGRlY2FmLXRzL2RiLWRlY29yYXRvcnMnO1xuaW1wb3J0IHtcbiAgSW5qZWN0b3IsXG4gIHJlZmxlY3RDb21wb25lbnRUeXBlLFxuICBUZW1wbGF0ZVJlZixcbiAgVHlwZSxcbiAgVmlld0NvbnRhaW5lclJlZixcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIEFuZ3VsYXIgaW1wbGVtZW50YXRpb24gb2YgdGhlIFJlbmRlcmluZ0VuZ2luZVxuICogQHN1bW1hcnkgVGhpcyBjbGFzcyBleHRlbmRzIHRoZSBiYXNlIFJlbmRlcmluZ0VuZ2luZSB0byBwcm92aWRlIEFuZ3VsYXItc3BlY2lmaWMgcmVuZGVyaW5nIGNhcGFiaWxpdGllcy5cbiAqIEl0IGhhbmRsZXMgdGhlIGNvbnZlcnNpb24gb2YgZmllbGQgZGVmaW5pdGlvbnMgdG8gQW5ndWxhciBjb21wb25lbnRzIGFuZCBtYW5hZ2VzIGNvbXBvbmVudCByZWdpc3RyYXRpb24uXG4gKiBAdGVtcGxhdGUgQW5ndWxhckZpZWxkRGVmaW5pdGlvbiAtIFR5cGUgZm9yIEFuZ3VsYXItc3BlY2lmaWMgZmllbGQgZGVmaW5pdGlvbnNcbiAqIEB0ZW1wbGF0ZSBBbmd1bGFyRHluYW1pY091dHB1dCAtIFR5cGUgZm9yIEFuZ3VsYXItc3BlY2lmaWMgY29tcG9uZW50IG91dHB1dFxuICogQHBhcmFtIHtJbmplY3Rvcn0gaW5qZWN0b3IgLSBBbmd1bGFyIGluamVjdG9yIGZvciBkZXBlbmRlbmN5IGluamVjdGlvblxuICogQHBhcmFtIHtWaWV3Q29udGFpbmVyUmVmfSB2Y3IgLSBWaWV3IGNvbnRhaW5lciByZWZlcmVuY2UgZm9yIGNvbXBvbmVudCBjcmVhdGlvblxuICogQHBhcmFtIHtUZW1wbGF0ZVJlZjxhbnk+fSB0cGwgLSBUZW1wbGF0ZSByZWZlcmVuY2UgZm9yIGNvbnRlbnQgcHJvamVjdGlvblxuICogQGNsYXNzIE5neFJlbmRlcmluZ0VuZ2luZVxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGNvbnN0IGVuZ2luZSA9IG5ldyBOZ3hSZW5kZXJpbmdFbmdpbmUoKTtcbiAqIGVuZ2luZS5pbml0aWFsaXplKCk7XG4gKiBjb25zdCBvdXRwdXQgPSBlbmdpbmUucmVuZGVyKG15TW9kZWwsIHt9LCB2aWV3Q29udGFpbmVyUmVmLCBpbmplY3RvciwgdGVtcGxhdGVSZWYpO1xuICogYGBgXG4gKiBAbWVybWFpZFxuICogc2VxdWVuY2VEaWFncmFtXG4gKiAgIHBhcnRpY2lwYW50IENsaWVudFxuICogICBwYXJ0aWNpcGFudCBFbmdpbmUgYXMgTmd4UmVuZGVyaW5nRW5naW5lXG4gKiAgIHBhcnRpY2lwYW50IENvbXBvbmVudHMgYXMgUmVnaXN0ZXJlZENvbXBvbmVudHNcbiAqXG4gKiAgIENsaWVudC0+PkVuZ2luZTogbmV3IE5neFJlbmRlcmluZ0VuZ2luZSgpXG4gKiAgIENsaWVudC0+PkVuZ2luZTogaW5pdGlhbGl6ZSgpXG4gKiAgIENsaWVudC0+PkVuZ2luZTogcmVuZGVyKG1vZGVsLCBwcm9wcywgdmNyLCBpbmplY3RvciwgdHBsKVxuICogICBFbmdpbmUtPj5FbmdpbmU6IHRvRmllbGREZWZpbml0aW9uKG1vZGVsLCBwcm9wcylcbiAqICAgRW5naW5lLT4+RW5naW5lOiBmcm9tRmllbGREZWZpbml0aW9uKGZpZWxkRGVmLCB2Y3IsIGluamVjdG9yLCB0cGwpXG4gKiAgIEVuZ2luZS0+PkNvbXBvbmVudHM6IGNvbXBvbmVudHMoZmllbGREZWYudGFnKVxuICogICBDb21wb25lbnRzLS0+PkVuZ2luZTogY29tcG9uZW50IGNvbnN0cnVjdG9yXG4gKiAgIEVuZ2luZS0+PkNsaWVudDogcmV0dXJuIEFuZ3VsYXJEeW5hbWljT3V0cHV0XG4gKi9cbmV4cG9ydCBjbGFzcyBOZ3hSZW5kZXJpbmdFbmdpbmUgZXh0ZW5kcyBSZW5kZXJpbmdFbmdpbmU8XG4gIEFuZ3VsYXJGaWVsZERlZmluaXRpb24sXG4gIEFuZ3VsYXJEeW5hbWljT3V0cHV0XG4+IHtcbiAgcHJpdmF0ZSBzdGF0aWMgX2NvbXBvbmVudHM6IFJlY29yZDxcbiAgICBzdHJpbmcsXG4gICAgeyBjb25zdHJ1Y3RvcjogQ29uc3RydWN0b3I8dW5rbm93bj4gfVxuICA+O1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKCdhbmd1bGFyJyk7XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIENvbnZlcnRzIGEgZmllbGQgZGVmaW5pdGlvbiB0byBhbiBBbmd1bGFyIGNvbXBvbmVudCBvdXRwdXRcbiAgICogQHN1bW1hcnkgVGhpcyBwcml2YXRlIG1ldGhvZCB0YWtlcyBhIGZpZWxkIGRlZmluaXRpb24gYW5kIGNyZWF0ZXMgdGhlIGNvcnJlc3BvbmRpbmcgQW5ndWxhciBjb21wb25lbnQuXG4gICAqIEl0IGhhbmRsZXMgY29tcG9uZW50IGluc3RhbnRpYXRpb24sIGlucHV0IHByb3BlcnR5IG1hcHBpbmcsIGFuZCBjaGlsZCBjb21wb25lbnQgcmVuZGVyaW5nLlxuICAgKiBAcGFyYW0ge0ZpZWxkRGVmaW5pdGlvbjxBbmd1bGFyRmllbGREZWZpbml0aW9uPn0gZmllbGREZWYgLSBUaGUgZmllbGQgZGVmaW5pdGlvbiB0byBjb252ZXJ0XG4gICAqIEBwYXJhbSB7Vmlld0NvbnRhaW5lclJlZn0gdmNyIC0gVGhlIHZpZXcgY29udGFpbmVyIHJlZmVyZW5jZSBmb3IgY29tcG9uZW50IGNyZWF0aW9uXG4gICAqIEBwYXJhbSB7SW5qZWN0b3J9IGluamVjdG9yIC0gVGhlIEFuZ3VsYXIgaW5qZWN0b3IgZm9yIGRlcGVuZGVuY3kgaW5qZWN0aW9uXG4gICAqIEBwYXJhbSB7VGVtcGxhdGVSZWY8YW55Pn0gdHBsIC0gVGhlIHRlbXBsYXRlIHJlZmVyZW5jZSBmb3IgY29udGVudCBwcm9qZWN0aW9uXG4gICAqIEByZXR1cm4ge0FuZ3VsYXJEeW5hbWljT3V0cHV0fSBUaGUgQW5ndWxhciBjb21wb25lbnQgb3V0cHV0IHdpdGggY29tcG9uZW50IHJlZmVyZW5jZSBhbmQgaW5wdXRzXG4gICAqIEBtZXJtYWlkXG4gICAqIHNlcXVlbmNlRGlhZ3JhbVxuICAgKiAgIHBhcnRpY2lwYW50IE1ldGhvZCBhcyBmcm9tRmllbGREZWZpbml0aW9uXG4gICAqICAgcGFydGljaXBhbnQgQ29tcG9uZW50cyBhcyBOZ3hSZW5kZXJpbmdFbmdpbmUuY29tcG9uZW50c1xuICAgKiAgIHBhcnRpY2lwYW50IEFuZ3VsYXIgYXMgQW5ndWxhciBDb3JlXG4gICAqXG4gICAqICAgTWV0aG9kLT4+Q29tcG9uZW50czogY29tcG9uZW50cyhmaWVsZERlZi50YWcpXG4gICAqICAgQ29tcG9uZW50cy0tPj5NZXRob2Q6IGNvbXBvbmVudCBjb25zdHJ1Y3RvclxuICAgKiAgIE1ldGhvZC0+PkFuZ3VsYXI6IHJlZmxlY3RDb21wb25lbnRUeXBlKGNvbXBvbmVudClcbiAgICogICBBbmd1bGFyLS0+Pk1ldGhvZDogY29tcG9uZW50TWV0YWRhdGFcbiAgICogICBNZXRob2QtPj5NZXRob2Q6IENoZWNrIGlucHV0IHByb3BlcnRpZXNcbiAgICogICBNZXRob2QtPj5NZXRob2Q6IENyZWF0ZSByZXN1bHQgb2JqZWN0XG4gICAqICAgTWV0aG9kLT4+TWV0aG9kOiBQcm9jZXNzIGNoaWxkcmVuIGlmIGFueVxuICAgKiAgIE1ldGhvZC0tPj5DYWxsZXI6IHJldHVybiBBbmd1bGFyRHluYW1pY091dHB1dFxuICAgKi9cbiAgcHJpdmF0ZSBmcm9tRmllbGREZWZpbml0aW9uKFxuICAgIGZpZWxkRGVmOiBGaWVsZERlZmluaXRpb248QW5ndWxhckZpZWxkRGVmaW5pdGlvbj4sXG4gICAgdmNyOiBWaWV3Q29udGFpbmVyUmVmLFxuICAgIGluamVjdG9yOiBJbmplY3RvcixcbiAgICB0cGw6IFRlbXBsYXRlUmVmPHVua25vd24+LFxuICApOiBBbmd1bGFyRHluYW1pY091dHB1dCB7XG4gICAgY29uc3QgY29tcG9uZW50ID0gTmd4UmVuZGVyaW5nRW5naW5lLmNvbXBvbmVudHMoZmllbGREZWYudGFnKVxuICAgICAgLmNvbnN0cnVjdG9yIGFzIHVua25vd24gYXMgVHlwZTx1bmtub3duPjtcblxuICAgIGNvbnN0IGNvbXBvbmVudE1ldGFkYXRhID0gcmVmbGVjdENvbXBvbmVudFR5cGUoY29tcG9uZW50KTtcbiAgICBpZiAoIWNvbXBvbmVudE1ldGFkYXRhKSB7XG4gICAgICB0aHJvdyBuZXcgSW50ZXJuYWxFcnJvcihcbiAgICAgICAgYE1ldGFkYXRhIGZvciBjb21wb25lbnQgJHtmaWVsZERlZi50YWd9IG5vdCBmb3VuZC5gLFxuICAgICAgKTtcbiAgICB9XG4gICAgY29uc3QgaW5wdXRzID0gZmllbGREZWYucHJvcHM7XG5cbiAgICBjb25zdCBwb3NzaWJsZUlucHV0cyA9IGNvbXBvbmVudE1ldGFkYXRhLmlucHV0cztcbiAgICBjb25zdCBpbnB1dEtleXMgPSBPYmplY3Qua2V5cyhpbnB1dHMpO1xuICAgIGZvciAoY29uc3QgaW5wdXQgb2YgcG9zc2libGVJbnB1dHMpIHtcbiAgICAgIGNvbnN0IGluZGV4ID0gaW5wdXRLZXlzLmluZGV4T2YoaW5wdXQucHJvcE5hbWUpO1xuICAgICAgaWYgKGluZGV4ICE9PSAtMSkge1xuICAgICAgICBpbnB1dEtleXMuc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgIH1cbiAgICAgIGlmICghaW5wdXRLZXlzLmxlbmd0aCkgYnJlYWs7XG4gICAgfVxuXG4gICAgaWYgKGlucHV0S2V5cy5sZW5ndGgpXG4gICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgIGBVbm1hcHBlZCBpbnB1dCBwcm9wZXJ0aWVzIGZvciBjb21wb25lbnQgJHtmaWVsZERlZi50YWd9OiAke2lucHV0S2V5cy5qb2luKCcsICcpfWAsXG4gICAgICApO1xuXG4gICAgY29uc3QgcmVzdWx0OiBBbmd1bGFyRHluYW1pY091dHB1dCA9IHtcbiAgICAgIGNvbXBvbmVudDogY29tcG9uZW50LFxuICAgICAgaW5wdXRzOiBpbnB1dHMgfHwge30sXG4gICAgICBpbmplY3RvcjogaW5qZWN0b3IsXG4gICAgfTtcblxuICAgIGlmIChmaWVsZERlZi5yZW5kZXJlcklkKSB7XG4gICAgICAocmVzdWx0LmlucHV0cyBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPilbJ3JlbmRlcmVySWQnXSA9XG4gICAgICAgIGZpZWxkRGVmLnJlbmRlcmVySWQ7XG4gICAgfVxuXG4gICAgaWYgKGZpZWxkRGVmLmNoaWxkcmVuICYmIGZpZWxkRGVmLmNoaWxkcmVuLmxlbmd0aCkge1xuICAgICAgcmVzdWx0LmNoaWxkcmVuID0gZmllbGREZWYuY2hpbGRyZW4ubWFwKChjaGlsZCkgPT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5mcm9tRmllbGREZWZpbml0aW9uKGNoaWxkLCB2Y3IsIGluamVjdG9yLCB0cGwpO1xuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IHRlbXBsYXRlID0gdmNyLmNyZWF0ZUVtYmVkZGVkVmlldyh0cGwsIGluamVjdG9yKS5yb290Tm9kZXM7XG4gICAgICByZXN1bHQuY29udGVudCA9IFt0ZW1wbGF0ZV07XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gUmVuZGVycyBhIG1vZGVsIGludG8gYW4gQW5ndWxhciBjb21wb25lbnQgb3V0cHV0XG4gICAqIEBzdW1tYXJ5IFRoaXMgbWV0aG9kIHRha2VzIGEgbW9kZWwgYW5kIGNvbnZlcnRzIGl0IHRvIGFuIEFuZ3VsYXIgY29tcG9uZW50IG91dHB1dC5cbiAgICogSXQgZmlyc3QgY29udmVydHMgdGhlIG1vZGVsIHRvIGEgZmllbGQgZGVmaW5pdGlvbiB1c2luZyB0aGUgYmFzZSBSZW5kZXJpbmdFbmdpbmUnc1xuICAgKiB0b0ZpZWxkRGVmaW5pdGlvbiBtZXRob2QsIHRoZW4gY29udmVydHMgdGhhdCBmaWVsZCBkZWZpbml0aW9uIHRvIGFuIEFuZ3VsYXIgY29tcG9uZW50IG91dHB1dC5cbiAgICogQHRlbXBsYXRlIE0gLSBUeXBlIGV4dGVuZGluZyBNb2RlbFxuICAgKiBAcGFyYW0ge019IG1vZGVsIC0gVGhlIG1vZGVsIHRvIHJlbmRlclxuICAgKiBAcGFyYW0ge1JlY29yZDxzdHJpbmcsIHVua25vd24+fSBnbG9iYWxQcm9wcyAtIEdsb2JhbCBwcm9wZXJ0aWVzIHRvIHBhc3MgdG8gdGhlIGNvbXBvbmVudFxuICAgKiBAcGFyYW0ge1ZpZXdDb250YWluZXJSZWZ9IHZjciAtIFRoZSB2aWV3IGNvbnRhaW5lciByZWZlcmVuY2UgZm9yIGNvbXBvbmVudCBjcmVhdGlvblxuICAgKiBAcGFyYW0ge0luamVjdG9yfSBpbmplY3RvciAtIFRoZSBBbmd1bGFyIGluamVjdG9yIGZvciBkZXBlbmRlbmN5IGluamVjdGlvblxuICAgKiBAcGFyYW0ge1RlbXBsYXRlUmVmPGFueT59IHRwbCAtIFRoZSB0ZW1wbGF0ZSByZWZlcmVuY2UgZm9yIGNvbnRlbnQgcHJvamVjdGlvblxuICAgKiBAcmV0dXJuIHtBbmd1bGFyRHluYW1pY091dHB1dH0gVGhlIEFuZ3VsYXIgY29tcG9uZW50IG91dHB1dCB3aXRoIGNvbXBvbmVudCByZWZlcmVuY2UgYW5kIGlucHV0c1xuICAgKiBAbWVybWFpZFxuICAgKiBzZXF1ZW5jZURpYWdyYW1cbiAgICogICBwYXJ0aWNpcGFudCBDbGllbnQgYXMgQ2xpZW50IENvZGVcbiAgICogICBwYXJ0aWNpcGFudCBSZW5kZXIgYXMgcmVuZGVyIG1ldGhvZFxuICAgKiAgIHBhcnRpY2lwYW50IFRvRmllbGQgYXMgdG9GaWVsZERlZmluaXRpb25cbiAgICogICBwYXJ0aWNpcGFudCBGcm9tRmllbGQgYXMgZnJvbUZpZWxkRGVmaW5pdGlvblxuICAgKlxuICAgKiAgIENsaWVudC0+PlJlbmRlcjogcmVuZGVyKG1vZGVsLCBnbG9iYWxQcm9wcywgdmNyLCBpbmplY3RvciwgdHBsKVxuICAgKiAgIFJlbmRlci0+PlRvRmllbGQ6IHRvRmllbGREZWZpbml0aW9uKG1vZGVsLCBnbG9iYWxQcm9wcylcbiAgICogICBUb0ZpZWxkLS0+PlJlbmRlcjogZmllbGREZWZcbiAgICogICBSZW5kZXItPj5Gcm9tRmllbGQ6IGZyb21GaWVsZERlZmluaXRpb24oZmllbGREZWYsIHZjciwgaW5qZWN0b3IsIHRwbClcbiAgICogICBGcm9tRmllbGQtLT4+UmVuZGVyOiBBbmd1bGFyRHluYW1pY091dHB1dFxuICAgKiAgIFJlbmRlci0tPj5DbGllbnQ6IHJldHVybiBBbmd1bGFyRHluYW1pY091dHB1dFxuICAgKi9cbiAgb3ZlcnJpZGUgcmVuZGVyPE0gZXh0ZW5kcyBNb2RlbD4oXG4gICAgbW9kZWw6IE0sXG4gICAgZ2xvYmFsUHJvcHM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuICAgIHZjcjogVmlld0NvbnRhaW5lclJlZixcbiAgICBpbmplY3RvcjogSW5qZWN0b3IsXG4gICAgdHBsOiBUZW1wbGF0ZVJlZjx1bmtub3duPixcbiAgKTogQW5ndWxhckR5bmFtaWNPdXRwdXQge1xuICAgIGxldCByZXN1bHQ6IEFuZ3VsYXJEeW5hbWljT3V0cHV0O1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBmaWVsZERlZiA9IHRoaXMudG9GaWVsZERlZmluaXRpb24obW9kZWwsIGdsb2JhbFByb3BzKTtcbiAgICAgIHJlc3VsdCA9IHRoaXMuZnJvbUZpZWxkRGVmaW5pdGlvbihmaWVsZERlZiwgdmNyLCBpbmplY3RvciwgdHBsKTtcbiAgICB9IGNhdGNoIChlOiB1bmtub3duKSB7XG4gICAgICB0aHJvdyBuZXcgSW50ZXJuYWxFcnJvcihcbiAgICAgICAgYEZhaWxlZCB0byByZW5kZXIgTW9kZWwgJHttb2RlbC5jb25zdHJ1Y3Rvci5uYW1lfTogJHtlfWAsXG4gICAgICApO1xuICAgIH1cblxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIEluaXRpYWxpemVzIHRoZSByZW5kZXJpbmcgZW5naW5lXG4gICAqIEBzdW1tYXJ5IFRoaXMgbWV0aG9kIGluaXRpYWxpemVzIHRoZSByZW5kZXJpbmcgZW5naW5lLiBJdCBjaGVja3MgaWYgdGhlIGVuZ2luZSBpcyBhbHJlYWR5IGluaXRpYWxpemVkXG4gICAqIGFuZCBzZXRzIHRoZSBpbml0aWFsaXplZCBmbGFnIHRvIHRydWUuIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBiZWZvcmUgdGhlIGVuZ2luZSBpcyB1c2VkLlxuICAgKiBAcmV0dXJuIHtQcm9taXNlPHZvaWQ+fSBBIHByb21pc2UgdGhhdCByZXNvbHZlcyB3aGVuIGluaXRpYWxpemF0aW9uIGlzIGNvbXBsZXRlXG4gICAqL1xuICBvdmVycmlkZSBhc3luYyBpbml0aWFsaXplKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICh0aGlzLmluaXRpYWxpemVkKSByZXR1cm47XG4gICAgdGhpcy5pbml0aWFsaXplZCA9IHRydWU7XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFJlZ2lzdGVycyBhIGNvbXBvbmVudCB3aXRoIHRoZSByZW5kZXJpbmcgZW5naW5lXG4gICAqIEBzdW1tYXJ5IFRoaXMgc3RhdGljIG1ldGhvZCByZWdpc3RlcnMgYSBjb21wb25lbnQgY29uc3RydWN0b3Igd2l0aCB0aGUgcmVuZGVyaW5nIGVuZ2luZVxuICAgKiB1bmRlciBhIHNwZWNpZmljIG5hbWUuIEl0IHRocm93cyBhbiBlcnJvciBpZiBhIGNvbXBvbmVudCBpcyBhbHJlYWR5IHJlZ2lzdGVyZWQgdW5kZXIgdGhlIHNhbWUgbmFtZS5cbiAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgLSBUaGUgbmFtZSB0byByZWdpc3RlciB0aGUgY29tcG9uZW50IHVuZGVyXG4gICAqIEBwYXJhbSB7Q29uc3RydWN0b3I8dW5rbm93bj59IGNvbnN0cnVjdG9yIC0gVGhlIGNvbXBvbmVudCBjb25zdHJ1Y3RvclxuICAgKiBAcmV0dXJuIHt2b2lkfVxuICAgKi9cbiAgc3RhdGljIHJlZ2lzdGVyQ29tcG9uZW50KG5hbWU6IHN0cmluZywgY29uc3RydWN0b3I6IENvbnN0cnVjdG9yPHVua25vd24+KSB7XG4gICAgaWYgKCF0aGlzLl9jb21wb25lbnRzKSB0aGlzLl9jb21wb25lbnRzID0ge307XG4gICAgaWYgKG5hbWUgaW4gdGhpcy5fY29tcG9uZW50cylcbiAgICAgIHRocm93IG5ldyBJbnRlcm5hbEVycm9yKGBDb21wb25lbnQgYWxyZWFkeSByZWdpc3RlcmVkIHVuZGVyICR7bmFtZX1gKTtcbiAgICB0aGlzLl9jb21wb25lbnRzW25hbWVdID0ge1xuICAgICAgY29uc3RydWN0b3I6IGNvbnN0cnVjdG9yLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFJldHJpZXZlcyByZWdpc3RlcmVkIGNvbXBvbmVudHMgZnJvbSB0aGUgcmVuZGVyaW5nIGVuZ2luZVxuICAgKiBAc3VtbWFyeSBUaGlzIHN0YXRpYyBtZXRob2QgcmV0cmlldmVzIGVpdGhlciBhbGwgcmVnaXN0ZXJlZCBjb21wb25lbnRzIG9yIGEgc3BlY2lmaWMgY29tcG9uZW50XG4gICAqIGJ5IGl0cyBzZWxlY3Rvci4gSXQgdGhyb3dzIGFuIGVycm9yIGlmIHRoZSByZXF1ZXN0ZWQgY29tcG9uZW50IGlzIG5vdCByZWdpc3RlcmVkLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gW3NlbGVjdG9yXSAtIE9wdGlvbmFsIHNlbGVjdG9yIHRvIHJldHJpZXZlIGEgc3BlY2lmaWMgY29tcG9uZW50XG4gICAqIEByZXR1cm4ge09iamVjdHxBcnJheX0gRWl0aGVyIGEgc3BlY2lmaWMgY29tcG9uZW50IG9yIGFuIGFycmF5IG9mIGFsbCBjb21wb25lbnRzXG4gICAqL1xuICBzdGF0aWMgY29tcG9uZW50cyhzZWxlY3Rvcj86IHN0cmluZykge1xuICAgIGlmICghc2VsZWN0b3IpIHJldHVybiBPYmplY3QudmFsdWVzKHRoaXMuX2NvbXBvbmVudHMpO1xuICAgIGlmICghKHNlbGVjdG9yIGluIHRoaXMuX2NvbXBvbmVudHMpKVxuICAgICAgdGhyb3cgbmV3IEludGVybmFsRXJyb3IoYE5vIENvbXBvbmVudCByZWdpc3RlcmVkIHVuZGVyICR7c2VsZWN0b3J9YCk7XG4gICAgcmV0dXJuIHRoaXMuX2NvbXBvbmVudHNbc2VsZWN0b3JdO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBHZW5lcmF0ZXMgYSBrZXkgZm9yIHJlZmxlY3Rpb24gbWV0YWRhdGFcbiAgICogQHN1bW1hcnkgVGhpcyBzdGF0aWMgbWV0aG9kIGdlbmVyYXRlcyBhIGtleSBmb3IgcmVmbGVjdGlvbiBtZXRhZGF0YSBieSBwcmVmaXhpbmcgdGhlIGlucHV0IGtleVxuICAgKiB3aXRoIHRoZSBBbmd1bGFyIGVuZ2luZSdzIHJlZmxlY3Rpb24gcHJlZml4LiBUaGlzIGlzIHVzZWQgZm9yIHN0b3JpbmcgYW5kIHJldHJpZXZpbmcgbWV0YWRhdGEuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgLSBUaGUgYmFzZSBrZXkgdG8gcHJlZml4XG4gICAqIEByZXR1cm4ge3N0cmluZ30gVGhlIHByZWZpeGVkIGtleSBmb3IgcmVmbGVjdGlvbiBtZXRhZGF0YVxuICAgKi9cbiAgc3RhdGljIG92ZXJyaWRlIGtleShrZXk6IHN0cmluZykge1xuICAgIHJldHVybiBgJHtBbmd1bGFyRW5naW5lS2V5cy5SRUZMRUNUfSR7a2V5fWA7XG4gIH1cbn1cbiJdfQ==
|
|
348
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTmd4UmVuZGVyaW5nRW5naW5lLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2xpYi9lbmdpbmUvTmd4UmVuZGVyaW5nRW5naW5lLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBbUIsZUFBZSxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFHM0UsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sYUFBYSxDQUFDO0FBRWhELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUN4RCxPQUFPLEVBS0wsb0JBQW9CLEdBSXJCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUVsRDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBaUNHO0FBQ0gsTUFBTSxPQUFPLGtCQUFtQixTQUFRLGVBQTZEO2FBd0JwRixlQUFVLEdBQXVCLFNBQVMsQ0FBQztJQVcxRDs7OztPQUlHO0lBQ0g7UUFDRSxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDbkIsQ0FBQztJQUVEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O09Ba0NHO0lBQ0ssbUJBQW1CLENBQ3pCLFFBQWlELEVBQ2pELEdBQXFCLEVBQ3JCLFFBQWtCLEVBQ2xCLEdBQXlCLEVBQ3pCLGlCQUF5QixJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDLFdBQVcsRUFBRTtRQUU5RCxNQUFNLEdBQUcsR0FBSSxRQUFxQixFQUFFLENBQUMsV0FBVyxDQUFDLElBQUksa0JBQWtCLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNqRyxNQUFNLFNBQVMsR0FBRyxHQUFHLENBQUMsV0FBdUMsQ0FBQztRQUU5RCxNQUFNLGlCQUFpQixHQUFHLG9CQUFvQixDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQzFE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LENBQUMsS0FBSztvQkFDdEMsT0FBTyxlQUFlLENBQUMsU0FBUyxFQUFFLEtBQUssQ0FBQyxDQUFDO2dCQUMzQyxTQUFTLENBQUMsUUFBUSxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsQ0FBQztZQUNqQyxDQUFDLENBQUMsQ0FBQztRQUNMLENBQUM7UUFFRCxNQUFNLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxFQUFFLEVBQUU7WUFDOUMsTUFBTSxJQUFJLEdBQUcsUUFBUSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUEwQixFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsUUFBUSxLQUFLLEdBQUcsQ0FBQyxDQUFDO1lBQ3pGLElBQUksSUFBSSxFQUFFLENBQUM7Z0JBQ1QsSUFBSSxHQUFHLEtBQUssT0FBTztvQkFDakIsZUFBZSxDQUFDLFNBQVMsRUFBRSxLQUFLLENBQUMsQ0FBQztnQkFDcEMsaUNBQWlDO2dCQUNqQyx5REFBeUQ7Z0JBQ3pELFNBQVMsQ0FBQyxRQUFRLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxDQUFDO1lBQ2pDLENBQUM7UUFDSCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBGaWVsZERlZmluaXRpb24sIFJlbmRlcmluZ0VuZ2luZSB9IGZyb20gJ0BkZWNhZi10cy91aS1kZWNvcmF0b3JzJztcbmltcG9ydCB7IEFuZ3VsYXJGaWVsZERlZmluaXRpb24sIEtleVZhbHVlIH0gZnJvbSAnLi90eXBlcyc7XG5pbXBvcnQgeyBBbmd1bGFyRHluYW1pY091dHB1dCB9IGZyb20gJy4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBBbmd1bGFyRW5naW5lS2V5cyB9IGZyb20gJy4vY29uc3RhbnRzJztcbmltcG9ydCB7IENvbnN0cnVjdG9yLCBNb2RlbH0gZnJvbSAnQGRlY2FmLXRzL2RlY29yYXRvci12YWxpZGF0aW9uJztcbmltcG9ydCB7IEludGVybmFsRXJyb3IgfSBmcm9tICdAZGVjYWYtdHMvZGItZGVjb3JhdG9ycyc7XG5pbXBvcnQge1xuICBDb21wb25lbnRNaXJyb3IsXG4gIENvbXBvbmVudFJlZixcbiAgRW52aXJvbm1lbnRJbmplY3RvcixcbiAgSW5qZWN0b3IsXG4gIHJlZmxlY3RDb21wb25lbnRUeXBlLFxuICBUZW1wbGF0ZVJlZixcbiAgVHlwZSxcbiAgVmlld0NvbnRhaW5lclJlZixcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBOZ3hGb3JtU2VydmljZSB9IGZyb20gJy4vTmd4Rm9ybVNlcnZpY2UnO1xuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBBbmd1bGFyIGltcGxlbWVudGF0aW9uIG9mIHRoZSBSZW5kZXJpbmdFbmdpbmUgd2l0aCBlbmhhbmNlZCBmZWF0dXJlc1xuICogQHN1bW1hcnkgVGhpcyBjbGFzcyBleHRlbmRzIHRoZSBiYXNlIFJlbmRlcmluZ0VuZ2luZSB0byBwcm92aWRlIEFuZ3VsYXItc3BlY2lmaWMgcmVuZGVyaW5nIGNhcGFiaWxpdGllc1xuICogd2l0aCBhZGRpdGlvbmFsIGZlYXR1cmVzIGNvbXBhcmVkIHRvIE5neFJlbmRlcmluZ0VuZ2luZS4gSXQgaGFuZGxlcyB0aGUgY29udmVyc2lvbiBvZiBmaWVsZCBkZWZpbml0aW9uc1xuICogdG8gQW5ndWxhciBjb21wb25lbnRzLCBtYW5hZ2VzIGNvbXBvbmVudCByZWdpc3RyYXRpb24sIGFuZCBwcm92aWRlcyB1dGlsaXRpZXMgZm9yIGNvbXBvbmVudCBjcmVhdGlvblxuICogYW5kIGlucHV0IGhhbmRsaW5nLiBUaGlzIGltcGxlbWVudGF0aW9uIHVzZXMgQW5ndWxhcidzIG5ld2VyIGNvbXBvbmVudCBBUElzLlxuICpcbiAqIEB0ZW1wbGF0ZSBBbmd1bGFyRmllbGREZWZpbml0aW9uIC0gVHlwZSBmb3IgQW5ndWxhci1zcGVjaWZpYyBmaWVsZCBkZWZpbml0aW9uc1xuICogQHRlbXBsYXRlIEFuZ3VsYXJEeW5hbWljT3V0cHV0IC0gVHlwZSBmb3IgQW5ndWxhci1zcGVjaWZpYyBjb21wb25lbnQgb3V0cHV0XG4gKlxuICogQGNsYXNzIE5neFJlbmRlcmluZ0VuZ2luZVxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGNvbnN0IGVuZ2luZSA9IE5neFJlbmRlcmluZ0VuZ2luZS5nZXQoKTtcbiAqIGVuZ2luZS5pbml0aWFsaXplKCk7XG4gKiBjb25zdCBvdXRwdXQgPSBlbmdpbmUucmVuZGVyKG15TW9kZWwsIHt9LCB2aWV3Q29udGFpbmVyUmVmLCBpbmplY3RvciwgdGVtcGxhdGVSZWYpO1xuICogYGBgXG4gKlxuICogQG1lcm1haWRcbiAqIHNlcXVlbmNlRGlhZ3JhbVxuICogICBwYXJ0aWNpcGFudCBDbGllbnRcbiAqICAgcGFydGljaXBhbnQgRW5naW5lIGFzIE5neFJlbmRlcmluZ0VuZ2luZVxuICogICBwYXJ0aWNpcGFudCBDb21wb25lbnRzIGFzIFJlZ2lzdGVyZWRDb21wb25lbnRzXG4gKlxuICogICBDbGllbnQtPj5FbmdpbmU6IGdldCgpXG4gKiAgIENsaWVudC0+PkVuZ2luZTogaW5pdGlhbGl6ZSgpXG4gKiAgIENsaWVudC0+PkVuZ2luZTogcmVuZGVyKG1vZGVsLCBwcm9wcywgdmNyLCBpbmplY3RvciwgdHBsKVxuICogICBFbmdpbmUtPj5FbmdpbmU6IHRvRmllbGREZWZpbml0aW9uKG1vZGVsLCBwcm9wcylcbiAqICAgRW5naW5lLT4+RW5naW5lOiBmcm9tRmllbGREZWZpbml0aW9uKGZpZWxkRGVmLCB2Y3IsIGluamVjdG9yLCB0cGwpXG4gKiAgIEVuZ2luZS0+PkNvbXBvbmVudHM6IGNvbXBvbmVudHMoZmllbGREZWYudGFnKVxuICogICBDb21wb25lbnRzLS0+PkVuZ2luZTogY29tcG9uZW50IGNvbnN0cnVjdG9yXG4gKiAgIEVuZ2luZS0+PkVuZ2luZTogY3JlYXRlQ29tcG9uZW50KGNvbXBvbmVudCwgaW5wdXRzLCBtZXRhZGF0YSwgdmNyLCBpbmplY3RvciwgdGVtcGxhdGUpXG4gKiAgIEVuZ2luZS0tPj5DbGllbnQ6IHJldHVybiBBbmd1bGFyRHluYW1pY091dHB1dFxuICovXG5leHBvcnQgY2xhc3MgTmd4UmVuZGVyaW5nRW5naW5lIGV4dGVuZHMgUmVuZGVyaW5nRW5naW5lPEFuZ3VsYXJGaWVsZERlZmluaXRpb24sIEFuZ3VsYXJEeW5hbWljT3V0cHV0PiB7XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBSZWdpc3RyeSBvZiByZWdpc3RlcmVkIGNvbXBvbmVudHNcbiAgICogQHN1bW1hcnkgU3RhdGljIHJlZ2lzdHJ5IHRoYXQgbWFwcyBjb21wb25lbnQgbmFtZXMgdG8gdGhlaXIgY29uc3RydWN0b3JzLlxuICAgKiBUaGlzIGFsbG93cyB0aGUgZW5naW5lIHRvIGxvb2sgdXAgY29tcG9uZW50cyBieSBuYW1lIHdoZW4gcmVuZGVyaW5nLlxuICAgKiBAdHlwZSB7UmVjb3JkPHN0cmluZywgeyBjb25zdHJ1Y3RvcjogQ29uc3RydWN0b3I8dW5rbm93bj4gfT59XG4gICAqL1xuICBwcml2YXRlIHN0YXRpYyBfY29tcG9uZW50czogUmVjb3JkPHN0cmluZywgeyBjb25zdHJ1Y3RvcjogQ29uc3RydWN0b3I8dW5rbm93bj4gfT47XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBDb2xsZWN0aW9uIG9mIGNoaWxkIGNvbXBvbmVudCBvdXRwdXRzXG4gICAqIEBzdW1tYXJ5IFN0b3JlcyB0aGUgb3V0cHV0cyBvZiBjaGlsZCBjb21wb25lbnRzIGR1cmluZyByZW5kZXJpbmcuXG4gICAqIEB0eXBlIHtBbmd1bGFyRHluYW1pY091dHB1dFtdfVxuICAgKi9cbiAgcHJpdmF0ZSBfY2hpbGRzITogQW5ndWxhckR5bmFtaWNPdXRwdXRbXTtcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIEN1cnJlbnQgbW9kZWwgYmVpbmcgcmVuZGVyZWRcbiAgICogQHN1bW1hcnkgUmVmZXJlbmNlIHRvIHRoZSBtb2RlbCBjdXJyZW50bHkgYmVpbmcgcHJvY2Vzc2VkIGJ5IHRoZSByZW5kZXJpbmcgZW5naW5lLlxuICAgKiBAdHlwZSB7TW9kZWx9XG4gICAqL1xuICBwcml2YXRlIF9tb2RlbCE6IE1vZGVsO1xuXG4gIHByaXZhdGUgc3RhdGljIF9vcGVyYXRpb246IHN0cmluZyB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZDtcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFN0YXRpYyByZWZlcmVuY2UgdG8gdGhlIGN1cnJlbnQgaW5zdGFuY2VcbiAgICogQHN1bW1hcnkgU2luZ2xldG9uIGluc3RhbmNlIHJlZmVyZW5jZSBmb3IgdGhlIHJlbmRlcmluZyBlbmdpbmUuXG4gICAqIEB0eXBlIHtUeXBlPHVua25vd24+IHwgdW5kZWZpbmVkfVxuICAgKi9cbiAgcHJpdmF0ZSBzdGF0aWMgX2luc3RhbmNlOiBUeXBlPHVua25vd24+IHwgdW5kZWZpbmVkO1xuXG5cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIENyZWF0ZXMgYSBuZXcgaW5zdGFuY2Ugb2YgTmd4UmVuZGVyaW5nRW5naW5lXG4gICAqIEBzdW1tYXJ5IEluaXRpYWxpemVzIHRoZSByZW5kZXJpbmcgZW5naW5lIHdpdGggdGhlICdhbmd1bGFyJyBlbmdpbmUgdHlwZS5cbiAgICogVGhpcyBjb25zdHJ1Y3RvciBzZXRzIHVwIHRoZSBiYXNlIGNvbmZpZ3VyYXRpb24gbmVlZGVkIGZvciBBbmd1bGFyLXNwZWNpZmljIHJlbmRlcmluZy5cbiAgICovXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKCdhbmd1bGFyJyk7XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIENvbnZlcnRzIGEgZmllbGQgZGVmaW5pdGlvbiB0byBhbiBBbmd1bGFyIGNvbXBvbmVudCBvdXRwdXRcbiAgICogQHN1bW1hcnkgVGhpcyBwcml2YXRlIG1ldGhvZCB0YWtlcyBhIGZpZWxkIGRlZmluaXRpb24gYW5kIGNyZWF0ZXMgdGhlIGNvcnJlc3BvbmRpbmcgQW5ndWxhciBjb21wb25lbnQuXG4gICAqIEl0IGhhbmRsZXMgY29tcG9uZW50IGluc3RhbnRpYXRpb24sIGlucHV0IHByb3BlcnR5IG1hcHBpbmcsIGFuZCBjaGlsZCBjb21wb25lbnQgcmVuZGVyaW5nLlxuICAgKiBUaGUgbWV0aG9kIHZhbGlkYXRlcyBpbnB1dCBwcm9wZXJ0aWVzIGFnYWluc3QgdGhlIGNvbXBvbmVudCdzIG1ldGFkYXRhIGFuZCBwcm9jZXNzZXNcbiAgICogY2hpbGQgY29tcG9uZW50cyByZWN1cnNpdmVseS5cbiAgICpcbiAgICogQHBhcmFtIHtGaWVsZERlZmluaXRpb248QW5ndWxhckZpZWxkRGVmaW5pdGlvbj59IGZpZWxkRGVmIC0gVGhlIGZpZWxkIGRlZmluaXRpb24gdG8gY29udmVydFxuICAgKiBAcGFyYW0ge1ZpZXdDb250YWluZXJSZWZ9IHZjciAtIFRoZSB2aWV3IGNvbnRhaW5lciByZWZlcmVuY2UgZm9yIGNvbXBvbmVudCBjcmVhdGlvblxuICAgKiBAcGFyYW0ge0luamVjdG9yfSBpbmplY3RvciAtIFRoZSBBbmd1bGFyIGluamVjdG9yIGZvciBkZXBlbmRlbmN5IGluamVjdGlvblxuICAgKiBAcGFyYW0ge1RlbXBsYXRlUmVmPGFueT59IHRwbCAtIFRoZSB0ZW1wbGF0ZSByZWZlcmVuY2UgZm9yIGNvbnRlbnQgcHJvamVjdGlvblxuICAgKiBAcGFyYW0ge3N0cmluZ30gcmVnaXN0cnlGb3JtSWQgLSBGb3JtIGlkZW50aWZpZXIgZm9yIHRoZSBjb21wb25lbnQgcmVuZGVyZXJcbiAgICogQHJldHVybiB7QW5ndWxhckR5bmFtaWNPdXRwdXR9IFRoZSBBbmd1bGFyIGNvbXBvbmVudCBvdXRwdXQgd2l0aCBjb21wb25lbnQgcmVmZXJlbmNlIGFuZCBpbnB1dHNcbiAgICpcbiAgICogQG1lcm1haWRcbiAgICogc2VxdWVuY2VEaWFncmFtXG4gICAqICAgcGFydGljaXBhbnQgTWV0aG9kIGFzIGZyb21GaWVsZERlZmluaXRpb25cbiAgICogICBwYXJ0aWNpcGFudCBDb21wb25lbnRzIGFzIE5neFJlbmRlcmluZ0VuZ2luZS5jb21wb25lbnRzXG4gICAqICAgcGFydGljaXBhbnQgQW5ndWxhciBhcyBBbmd1bGFyIENvcmVcbiAgICogICBwYXJ0aWNpcGFudCBQcm9jZXNzIGFzIHByb2Nlc3NDaGlsZFxuICAgKlxuICAgKiAgIE1ldGhvZC0+PkNvbXBvbmVudHM6IGNvbXBvbmVudHMoZmllbGREZWYudGFnKVxuICAgKiAgIENvbXBvbmVudHMtLT4+TWV0aG9kOiBjb21wb25lbnQgY29uc3RydWN0b3JcbiAgICogICBNZXRob2QtPj5Bbmd1bGFyOiByZWZsZWN0Q29tcG9uZW50VHlwZShjb21wb25lbnQpXG4gICAqICAgQW5ndWxhci0tPj5NZXRob2Q6IGNvbXBvbmVudE1ldGFkYXRhXG4gICAqICAgTWV0aG9kLT4+TWV0aG9kOiBWYWxpZGF0ZSBpbnB1dCBwcm9wZXJ0aWVzXG4gICAqICAgTWV0aG9kLT4+TWV0aG9kOiBDcmVhdGUgcmVzdWx0IG9iamVjdFxuICAgKiAgIGFsdCBIYXMgY2hpbGRyZW5cbiAgICogICAgIE1ldGhvZC0+PlByb2Nlc3M6IFByb2Nlc3MgY2hpbGRyZW4gcmVjdXJzaXZlbHlcbiAgICogICAgIFByb2Nlc3MtPj5NZXRob2Q6IFJldHVybiBwcm9jZXNzZWQgY2hpbGRyZW5cbiAgICogICAgIE1ldGhvZC0+PkFuZ3VsYXI6IENyZWF0ZSBlbWJlZGRlZCB2aWV3XG4gICAqICAgICBNZXRob2QtPj5NZXRob2Q6IENyZWF0ZSBjb21wb25lbnQgaW5zdGFuY2VcbiAgICogICBlbmRcbiAgICogICBNZXRob2QtLT4+Q2FsbGVyOiByZXR1cm4gQW5ndWxhckR5bmFtaWNPdXRwdXRcbiAgICovXG4gIHByaXZhdGUgZnJvbUZpZWxkRGVmaW5pdGlvbihcbiAgICBmaWVsZERlZjogRmllbGREZWZpbml0aW9uPEFuZ3VsYXJGaWVsZERlZmluaXRpb24+LFxuICAgIHZjcjogVmlld0NvbnRhaW5lclJlZixcbiAgICBpbmplY3RvcjogSW5qZWN0b3IsXG4gICAgdHBsOiBUZW1wbGF0ZVJlZjx1bmtub3duPixcbiAgICByZWdpc3RyeUZvcm1JZDogc3RyaW5nID0gRGF0ZS5ub3coKS50b1N0cmluZygzNikudG9VcHBlckNhc2UoKSxcbiAgKTogQW5ndWxhckR5bmFtaWNPdXRwdXQge1xuICAgIGNvbnN0IGNtcCA9IChmaWVsZERlZiBhcyBLZXlWYWx1ZSk/LlsnY29tcG9uZW50J10gfHwgTmd4UmVuZGVyaW5nRW5naW5lLmNvbXBvbmVudHMoZmllbGREZWYudGFnKTtcbiAgICBjb25zdCBjb21wb25lbnQgPSBjbXAuY29uc3RydWN0b3IgYXMgdW5rbm93biBhcyBUeXBlPHVua25vd24+O1xuXG4gICAgY29uc3QgY29tcG9uZW50TWV0YWRhdGEgPSByZWZsZWN0Q29tcG9uZW50VHlwZShjb21wb25lbnQpO1xuICAgIGlmICghY29tcG9uZW50TWV0YWRhdGEpIHtcbiAgICAgIHRocm93IG5ldyBJbnRlcm5hbEVycm9yKGBNZXRhZGF0YSBmb3IgY29tcG9uZW50ICR7ZmllbGREZWYudGFnfSBub3QgZm91bmQuYCk7XG4gICAgfVxuXG4gICAgY29uc3QgeyBpbnB1dHM6IHBvc3NpYmxlSW5wdXRzIH0gPSBjb21wb25lbnRNZXRhZGF0YTtcbiAgICBjb25zdCBpbnB1dHMgPSB7IC4uLmZpZWxkRGVmLnByb3BzIH07XG5cbiAgICBjb25zdCB1bm1hcHBlZEtleXMgPSBPYmplY3Qua2V5cyhpbnB1dHMpLmZpbHRlcihpbnB1dCA9PiB7XG4gICAgICBjb25zdCBpc01hcHBlZCA9IHBvc3NpYmxlSW5wdXRzLmZpbmQoKHsgcHJvcE5hbWUgfSkgPT4gcHJvcE5hbWUgPT09IGlucHV0KTtcbiAgICAgIGlmICghaXNNYXBwZWQpIGRlbGV0ZSBpbnB1dHNbaW5wdXRdO1xuICAgICAgcmV0dXJuICFpc01hcHBlZDtcbiAgICB9KTtcblxuICAgIGlmICh1bm1hcHBlZEtleXMubGVuZ3RoID4gMClcbiAgICAgIGNvbnNvbGUud2FybihgVW5tYXBwZWQgaW5wdXQgcHJvcGVydGllcyBmb3IgY29tcG9uZW50ICR7ZmllbGREZWYudGFnfTogJHt1bm1hcHBlZEtleXMuam9pbignLCAnKX1gKTtcblxuICAgIGNvbnN0IG9wZXJhdGlvbiA9IE5neFJlbmRlcmluZ0VuZ2luZS5fb3BlcmF0aW9uO1xuXG4gICAgY29uc3QgaGlkZGVuT24gPSBpbnB1dHM/LmhpZGRlbiB8fCBbXTtcbiAgICBpZigoaGlkZGVuT24gYXMgc3RyaW5nW10pLmluY2x1ZGVzKG9wZXJhdGlvbiBhcyBzdHJpbmcpKVxuICAgICAgcmV0dXJuIHtpbnB1dHMsIGluamVjdG9yfTtcbiAgICAvLyBjb25zdCBoaWRkZW5PbiA9IGlucHV0cz8uaGlkZGVuIHx8IFtdO1xuICAgIGNvbnN0IHJlc3VsdDogQW5ndWxhckR5bmFtaWNPdXRwdXQgPSB7XG4gICAgICBjb21wb25lbnQsXG4gICAgICBpbnB1dHMsXG4gICAgICBpbmplY3RvcixcbiAgICB9O1xuXG4gICAgaWYgKGZpZWxkRGVmLnJlbmRlcmVySWQpXG4gICAgICAocmVzdWx0LmlucHV0cyBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPilbJ3JlbmRlcmVySWQnXSA9IGZpZWxkRGVmLnJlbmRlcmVySWQ7XG5cbiAgICAvLyBwcm9jZXNzIGNoaWxkcmVuXG4gICAgaWYgKGZpZWxkRGVmLmNoaWxkcmVuPy5sZW5ndGgpIHtcbiAgICAgIHJlc3VsdC5jaGlsZHJlbiA9IGZpZWxkRGVmLmNoaWxkcmVuLm1hcCgoY2hpbGQpID0+IHtcbiAgICAgICAgaWYoY2hpbGQ/LmNoaWxkcmVuPy5sZW5ndGgpIHtcbiAgICAgICAgICBjaGlsZC5jaGlsZHJlbiA9IGNoaWxkLmNoaWxkcmVuLmZpbHRlcihjID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGhpZGRlbk9uID0gYz8ucHJvcHM/LmhpZGRlbiB8fCBbXTtcbiAgICAgICAgICAgIGlmKCEoaGlkZGVuT24gYXMgc3RyaW5nW10pLmluY2x1ZGVzKG9wZXJhdGlvbiBhcyBzdHJpbmcpKVxuICAgICAgICAgICAgICByZXR1cm4gY1xuICAgICAgICAgIH0pXG4gICAgICAgIH1cbiAgICAgICAgLy8gY3JlYXRlIGEgY2hpbGQgZm9ybSBhbmQgYWRkIGl0cyBjb250cm9scyBhcyBwcm9wZXJ0aWVzIG9mIGNoaWxkLnByb3BzXG4gICAgICAgIE5neEZvcm1TZXJ2aWNlLmFkZENvbnRyb2xGcm9tUHJvcHMocmVnaXN0cnlGb3JtSWQsIGNoaWxkLnByb3BzLCBpbnB1dHMpO1xuICAgICAgICByZXR1cm4gdGhpcy5mcm9tRmllbGREZWZpbml0aW9uKGNoaWxkLCB2Y3IsIGluamVjdG9yLCB0cGwsIHJlZ2lzdHJ5Rm9ybUlkKTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIC8vIGdlbmVyYXRpbmcgRE9NXG4gICAgdmNyLmNsZWFyKCk7XG4gICAgY29uc3QgdGVtcGxhdGUgPSB2Y3IuY3JlYXRlRW1iZWRkZWRWaWV3KHRwbCwgaW5qZWN0b3IpLnJvb3ROb2RlcztcbiAgICBjb25zdCBjb21wb25lbnRJbnN0YW5jZSA9IE5neFJlbmRlcmluZ0VuZ2luZS5jcmVhdGVDb21wb25lbnQoXG4gICAgICBjb21wb25lbnQsXG4gICAgICB7IC4uLmlucHV0cywgbW9kZWw6IHRoaXMuX21vZGVsIH0sXG4gICAgICBjb21wb25lbnRNZXRhZGF0YSxcbiAgICAgIHZjcixcbiAgICAgIGluamVjdG9yLFxuICAgICAgdGVtcGxhdGUsXG4gICAgKTtcblxuICAgIHJlc3VsdC5pbnN0YW5jZSA9IE5neFJlbmRlcmluZ0VuZ2luZS5faW5zdGFuY2UgPSBjb21wb25lbnRJbnN0YW5jZS5pbnN0YW5jZSBhcyBUeXBlPHVua25vd24+O1xuXG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBDcmVhdGVzIGFuIEFuZ3VsYXIgY29tcG9uZW50IGluc3RhbmNlXG4gICAqIEBzdW1tYXJ5IFRoaXMgc3RhdGljIHV0aWxpdHkgbWV0aG9kIGNyZWF0ZXMgYW4gQW5ndWxhciBjb21wb25lbnQgaW5zdGFuY2Ugd2l0aCB0aGUgc3BlY2lmaWVkXG4gICAqIGlucHV0cyBhbmQgdGVtcGxhdGUuIEl0IHVzZXMgQW5ndWxhcidzIGNvbXBvbmVudCBjcmVhdGlvbiBBUEkgdG8gaW5zdGFudGlhdGUgdGhlIGNvbXBvbmVudFxuICAgKiBhbmQgdGhlbiBzZXRzIHRoZSBpbnB1dCBwcm9wZXJ0aWVzIHVzaW5nIHRoZSBwcm92aWRlZCBtZXRhZGF0YS5cbiAgICpcbiAgICogQHBhcmFtIHtUeXBlPHVua25vd24+fSBjb21wb25lbnQgLSBUaGUgY29tcG9uZW50IHR5cGUgdG8gY3JlYXRlXG4gICAqIEBwYXJhbSB7S2V5VmFsdWV9IFtpbnB1dHM9e31dIC0gVGhlIGlucHV0IHByb3BlcnRpZXMgdG8gc2V0IG9uIHRoZSBjb21wb25lbnRcbiAgICogQHBhcmFtIHtDb21wb25lbnRNaXJyb3I8dW5rbm93bj59IG1ldGFkYXRhIC0gVGhlIGNvbXBvbmVudCBtZXRhZGF0YSBmb3IgaW5wdXQgdmFsaWRhdGlvblxuICAgKiBAcGFyYW0ge1ZpZXdDb250YWluZXJSZWZ9IHZjciAtIFRoZSB2aWV3IGNvbnRhaW5lciByZWZlcmVuY2UgZm9yIGNvbXBvbmVudCBjcmVhdGlvblxuICAgKiBAcGFyYW0ge0luamVjdG9yfSBpbmplY3RvciAtIFRoZSBBbmd1bGFyIGluamVjdG9yIGZvciBkZXBlbmRlbmN5IGluamVjdGlvblxuICAgKiBAcGFyYW0ge05vZGVbXX0gW3RlbXBsYXRlPVtdXSAtIFRoZSB0ZW1wbGF0ZSBub2RlcyB0byBwcm9qZWN0IGludG8gdGhlIGNvbXBvbmVudFxuICAgKiBAcmV0dXJuIHtDb21wb25lbnRSZWY8dW5rbm93bj59IFRoZSBjcmVhdGVkIGNvbXBvbmVudCByZWZlcmVuY2VcbiAgICovXG4gIHN0YXRpYyBjcmVhdGVDb21wb25lbnQoY29tcG9uZW50OiBUeXBlPHVua25vd24+LCBpbnB1dHM6IEtleVZhbHVlID0ge30sIG1ldGFkYXRhOiBDb21wb25lbnRNaXJyb3I8dW5rbm93bj4sIHZjcjogVmlld0NvbnRhaW5lclJlZiwgaW5qZWN0b3I6IEluamVjdG9yLCB0ZW1wbGF0ZTogTm9kZVtdID0gW10pOiBDb21wb25lbnRSZWY8dW5rbm93bj4ge1xuICAgIGNvbnN0IGNvbXBvbmVudEluc3RhbmNlID0gdmNyLmNyZWF0ZUNvbXBvbmVudChjb21wb25lbnQgYXMgVHlwZTx1bmtub3duPiwge1xuICAgICAgZW52aXJvbm1lbnRJbmplY3RvcjogaW5qZWN0b3IgYXMgRW52aXJvbm1lbnRJbmplY3RvcixcbiAgICAgIHByb2plY3RhYmxlTm9kZXM6IFt0ZW1wbGF0ZV0sXG4gICAgfSk7XG4gICAgdGhpcy5zZXRJbnB1dHMoY29tcG9uZW50SW5zdGFuY2UsIGlucHV0cywgbWV0YWRhdGEpO1xuICAgIHJldHVybiBjb21wb25lbnRJbnN0YW5jZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gRXh0cmFjdHMgZGVjb3JhdG9yIG1ldGFkYXRhIGZyb20gYSBtb2RlbFxuICAgKiBAc3VtbWFyeSBUaGlzIG1ldGhvZCBwcm92aWRlcyBhY2Nlc3MgdG8gdGhlIGZpZWxkIGRlZmluaXRpb24gZ2VuZXJhdGVkIGZyb20gYSBtb2RlbCdzXG4gICAqIGRlY29yYXRvcnMuIEl0J3MgYSBjb252ZW5pZW5jZSB3cmFwcGVyIGFyb3VuZCB0aGUgdG9GaWVsZERlZmluaXRpb24gbWV0aG9kIHRoYXRcbiAgICogY29udmVydHMgYSBtb2RlbCB0byBhIGZpZWxkIGRlZmluaXRpb24gYmFzZWQgb24gaXRzIGRlY29yYXRvcnMgYW5kIHRoZSBwcm92aWRlZFxuICAgKiBnbG9iYWwgcHJvcGVydGllcy5cbiAgICpcbiAgICogQHBhcmFtIHtNb2RlbH0gbW9kZWwgLSBUaGUgbW9kZWwgdG8gZXh0cmFjdCBkZWNvcmF0b3JzIGZyb21cbiAgICogQHBhcmFtIHtSZWNvcmQ8c3RyaW5nLCB1bmtub3duPn0gZ2xvYmFsUHJvcHMgLSBHbG9iYWwgcHJvcGVydGllcyB0byBpbmNsdWRlIGluIHRoZSBmaWVsZCBkZWZpbml0aW9uXG4gICAqIEByZXR1cm4ge0ZpZWxkRGVmaW5pdGlvbjxBbmd1bGFyRmllbGREZWZpbml0aW9uPn0gVGhlIGZpZWxkIGRlZmluaXRpb24gZ2VuZXJhdGVkIGZyb20gdGhlIG1vZGVsXG4gICAqL1xuICBnZXREZWNvcmF0b3JzKG1vZGVsOiBNb2RlbCwgZ2xvYmFsUHJvcHM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+KTogRmllbGREZWZpbml0aW9uPEFuZ3VsYXJGaWVsZERlZmluaXRpb24+IHtcbiAgICByZXR1cm4gdGhpcy50b0ZpZWxkRGVmaW5pdGlvbihtb2RlbCwgZ2xvYmFsUHJvcHMpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBEZXN0cm95cyB0aGUgY3VycmVudCBlbmdpbmUgaW5zdGFuY2VcbiAgICogQHN1bW1hcnkgVGhpcyBzdGF0aWMgbWV0aG9kIGNsZWFycyB0aGUgY3VycmVudCBpbnN0YW5jZSByZWZlcmVuY2UsIGVmZmVjdGl2ZWx5XG4gICAqIGRlc3Ryb3lpbmcgdGhlIHNpbmdsZXRvbiBpbnN0YW5jZSBvZiB0aGUgcmVuZGVyaW5nIGVuZ2luZS4gVGhpcyBjYW4gYmUgdXNlZFxuICAgKiB0byByZXNldCB0aGUgZW5naW5lIHN0YXRlIG9yIHRvIHByZXBhcmUgZm9yIGEgbmV3IGluc3RhbmNlIGNyZWF0aW9uLlxuICAgKlxuICAgKiBAcmV0dXJuIHtQcm9taXNlPHZvaWQ+fSBBIHByb21pc2UgdGhhdCByZXNvbHZlcyB3aGVuIHRoZSBpbnN0YW5jZSBpcyBkZXN0cm95ZWRcbiAgICovXG4gIHN0YXRpYyBhc3luYyBkZXN0cm95KCk6IFByb21pc2U8dm9pZD4ge1xuICAgIE5neFJlbmRlcmluZ0VuZ2luZS5faW5zdGFuY2UgPSB1bmRlZmluZWQ7XG4gIH1cblxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gUmVuZGVycyBhIG1vZGVsIGludG8gYW4gQW5ndWxhciBjb21wb25lbnQgb3V0cHV0XG4gICAqIEBzdW1tYXJ5IFRoaXMgbWV0aG9kIHRha2VzIGEgbW9kZWwgYW5kIGNvbnZlcnRzIGl0IHRvIGFuIEFuZ3VsYXIgY29tcG9uZW50IG91dHB1dC5cbiAgICogSXQgZmlyc3Qgc3RvcmVzIGEgcmVmZXJlbmNlIHRvIHRoZSBtb2RlbCwgdGhlbiBjb252ZXJ0cyBpdCB0byBhIGZpZWxkIGRlZmluaXRpb25cbiAgICogdXNpbmcgdGhlIGJhc2UgUmVuZGVyaW5nRW5naW5lJ3MgdG9GaWVsZERlZmluaXRpb24gbWV0aG9kLCBhbmQgZmluYWxseSBjb252ZXJ0c1xuICAgKiB0aGF0IGZpZWxkIGRlZmluaXRpb24gdG8gYW4gQW5ndWxhciBjb21wb25lbnQgb3V0cHV0IHVzaW5nIGZyb21GaWVsZERlZmluaXRpb24uXG4gICAqXG4gICAqIEB0ZW1wbGF0ZSBNIC0gVHlwZSBleHRlbmRpbmcgTW9kZWxcbiAgICogQHBhcmFtIHtNfSBtb2RlbCAtIFRoZSBtb2RlbCB0byByZW5kZXJcbiAgICogQHBhcmFtIHtSZWNvcmQ8c3RyaW5nLCB1bmtub3duPn0gZ2xvYmFsUHJvcHMgLSBHbG9iYWwgcHJvcGVydGllcyB0byBwYXNzIHRvIHRoZSBjb21wb25lbnRcbiAgICogQHBhcmFtIHtWaWV3Q29udGFpbmVyUmVmfSB2Y3IgLSBUaGUgdmlldyBjb250YWluZXIgcmVmZXJlbmNlIGZvciBjb21wb25lbnQgY3JlYXRpb25cbiAgICogQHBhcmFtIHtJbmplY3Rvcn0gaW5qZWN0b3IgLSBUaGUgQW5ndWxhciBpbmplY3RvciBmb3IgZGVwZW5kZW5jeSBpbmplY3Rpb25cbiAgICogQHBhcmFtIHtUZW1wbGF0ZVJlZjxhbnk+fSB0cGwgLSBUaGUgdGVtcGxhdGUgcmVmZXJlbmNlIGZvciBjb250ZW50IHByb2plY3Rpb25cbiAgICogQHJldHVybiB7QW5ndWxhckR5bmFtaWNPdXRwdXR9IFRoZSBBbmd1bGFyIGNvbXBvbmVudCBvdXRwdXQgd2l0aCBjb21wb25lbnQgcmVmZXJlbmNlIGFuZCBpbnB1dHNcbiAgICpcbiAgICogQG1lcm1haWRcbiAgICogc2VxdWVuY2VEaWFncmFtXG4gICAqICAgcGFydGljaXBhbnQgQ2xpZW50IGFzIENsaWVudCBDb2RlXG4gICAqICAgcGFydGljaXBhbnQgUmVuZGVyIGFzIHJlbmRlciBtZXRob2RcbiAgICogICBwYXJ0aWNpcGFudCBUb0ZpZWxkIGFzIHRvRmllbGREZWZpbml0aW9uXG4gICAqICAgcGFydGljaXBhbnQgRnJvbUZpZWxkIGFzIGZyb21GaWVsZERlZmluaXRpb25cbiAgICpcbiAgICogICBDbGllbnQtPj5SZW5kZXI6IHJlbmRlcihtb2RlbCwgZ2xvYmFsUHJvcHMsIHZjciwgaW5qZWN0b3IsIHRwbClcbiAgICogICBSZW5kZXItPj5SZW5kZXI6IFN0b3JlIG1vZGVsIHJlZmVyZW5jZVxuICAgKiAgIFJlbmRlci0+PlRvRmllbGQ6IHRvRmllbGREZWZpbml0aW9uKG1vZGVsLCBnbG9iYWxQcm9wcylcbiAgICogICBUb0ZpZWxkLS0+PlJlbmRlcjogZmllbGREZWZcbiAgICogICBSZW5kZXItPj5Gcm9tRmllbGQ6IGZyb21GaWVsZERlZmluaXRpb24oZmllbGREZWYsIHZjciwgaW5qZWN0b3IsIHRwbClcbiAgICogICBGcm9tRmllbGQtLT4+UmVuZGVyOiBBbmd1bGFyRHluYW1pY091dHB1dFxuICAgKiAgIFJlbmRlci0tPj5DbGllbnQ6IHJldHVybiBBbmd1bGFyRHluYW1pY091dHB1dFxuICAgKi9cbiAgb3ZlcnJpZGUgcmVuZGVyPE0gZXh0ZW5kcyBNb2RlbD4oXG4gICAgbW9kZWw6IE0sXG4gICAgZ2xvYmFsUHJvcHM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuICAgIHZjcjogVmlld0NvbnRhaW5lclJlZixcbiAgICBpbmplY3RvcjogSW5qZWN0b3IsXG4gICAgdHBsOiBUZW1wbGF0ZVJlZjx1bmtub3duPixcbiAgKTogQW5ndWxhckR5bmFtaWNPdXRwdXQge1xuICAgIGxldCByZXN1bHQ6IEFuZ3VsYXJEeW5hbWljT3V0cHV0O1xuICAgIHRyeSB7XG4gICAgICB0aGlzLl9tb2RlbCA9IG1vZGVsO1xuICAgICAgY29uc3QgZm9ybUlkID0gRGF0ZS5ub3coKS50b1N0cmluZygzNikudG9VcHBlckNhc2UoKTtcbiAgICAgIGNvbnN0IGZpZWxkRGVmID0gdGhpcy50b0ZpZWxkRGVmaW5pdGlvbihtb2RlbCwgZ2xvYmFsUHJvcHMpO1xuICAgICAgY29uc3QgcHJvcHMgPSBmaWVsZERlZi5wcm9wcyBhcyBLZXlWYWx1ZTtcbiAgICAgIGlmKCFOZ3hSZW5kZXJpbmdFbmdpbmUuX29wZXJhdGlvbilcbiAgICAgICAgTmd4UmVuZGVyaW5nRW5naW5lLl9vcGVyYXRpb24gPSBwcm9wcz8uWydvcGVyYXRpb24nXSB8fCB1bmRlZmluZWQ7XG4gICAgICByZXN1bHQgPSB0aGlzLmZyb21GaWVsZERlZmluaXRpb24oZmllbGREZWYsIHZjciwgaW5qZWN0b3IsIHRwbCwgZm9ybUlkKTtcblxuICAgICAgKHJlc3VsdCEuaW5zdGFuY2UhIGFzIEtleVZhbHVlKVsnZm9ybUdyb3VwJ10gPSBOZ3hGb3JtU2VydmljZS5nZXRDb250cm9sRnJvbUZvcm0oZm9ybUlkKTtcbiAgICAgIE5neEZvcm1TZXJ2aWNlLnJlbW92ZVJlZ2lzdHJ5KGZvcm1JZCk7XG4gICAgfSBjYXRjaCAoZTogdW5rbm93bikge1xuICAgICAgdGhyb3cgbmV3IEludGVybmFsRXJyb3IoXG4gICAgICAgIGBGYWlsZWQgdG8gcmVuZGVyIE1vZGVsICR7bW9kZWwuY29uc3RydWN0b3IubmFtZX06ICR7ZX1gLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBJbml0aWFsaXplcyB0aGUgcmVuZGVyaW5nIGVuZ2luZVxuICAgKiBAc3VtbWFyeSBUaGlzIG1ldGhvZCBpbml0aWFsaXplcyB0aGUgcmVuZGVyaW5nIGVuZ2luZS4gSXQgY2hlY2tzIGlmIHRoZSBlbmdpbmUgaXMgYWxyZWFkeSBpbml0aWFsaXplZFxuICAgKiBhbmQgc2V0cyB0aGUgaW5pdGlhbGl6ZWQgZmxhZyB0byB0cnVlLiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgYmVmb3JlIHRoZSBlbmdpbmUgaXMgdXNlZFxuICAgKiB0byBlbnN1cmUgaXQncyBwcm9wZXJseSBzZXQgdXAgZm9yIHJlbmRlcmluZyBvcGVyYXRpb25zLlxuICAgKlxuICAgKiBAcmV0dXJuIHtQcm9taXNlPHZvaWQ+fSBBIHByb21pc2UgdGhhdCByZXNvbHZlcyB3aGVuIGluaXRpYWxpemF0aW9uIGlzIGNvbXBsZXRlXG4gICAqL1xuICBvdmVycmlkZSBhc3luYyBpbml0aWFsaXplKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICh0aGlzLmluaXRpYWxpemVkKVxuICAgICAgcmV0dXJuO1xuICAgIC8vIFZhbGlkYXRhYmxlQnlUeXBlW11cbiAgICB0aGlzLmluaXRpYWxpemVkID0gdHJ1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gUmVnaXN0ZXJzIGEgY29tcG9uZW50IHdpdGggdGhlIHJlbmRlcmluZyBlbmdpbmVcbiAgICogQHN1bW1hcnkgVGhpcyBzdGF0aWMgbWV0aG9kIHJlZ2lzdGVycyBhIGNvbXBvbmVudCBjb25zdHJ1Y3RvciB3aXRoIHRoZSByZW5kZXJpbmcgZW5naW5lXG4gICAqIHVuZGVyIGEgc3BlY2lmaWMgbmFtZS4gSXQgaW5pdGlhbGl6ZXMgdGhlIGNvbXBvbmVudHMgcmVnaXN0cnkgaWYgbmVlZGVkIGFuZCB0aHJvd3NcbiAgICogYW4gZXJyb3IgaWYgYSBjb21wb25lbnQgaXMgYWxyZWFkeSByZWdpc3RlcmVkIHVuZGVyIHRoZSBzYW1lIG5hbWUgdG8gcHJldmVudFxuICAgKiBhY2NpZGVudGFsIG92ZXJyaWRlcy5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgLSBUaGUgbmFtZSB0byByZWdpc3RlciB0aGUgY29tcG9uZW50IHVuZGVyXG4gICAqIEBwYXJhbSB7Q29uc3RydWN0b3I8dW5rbm93bj59IGNvbnN0cnVjdG9yIC0gVGhlIGNvbXBvbmVudCBjb25zdHJ1Y3RvclxuICAgKiBAcmV0dXJuIHt2b2lkfVxuICAgKi9cbiAgc3RhdGljIHJlZ2lzdGVyQ29tcG9uZW50KG5hbWU6IHN0cmluZywgY29uc3RydWN0b3I6IENvbnN0cnVjdG9yPHVua25vd24+KTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLl9jb21wb25lbnRzKSB0aGlzLl9jb21wb25lbnRzID0ge307XG4gICAgaWYgKG5hbWUgaW4gdGhpcy5fY29tcG9uZW50cylcbiAgICAgIHRocm93IG5ldyBJbnRlcm5hbEVycm9yKGBDb21wb25lbnQgYWxyZWFkeSByZWdpc3RlcmVkIHVuZGVyICR7bmFtZX1gKTtcbiAgICB0aGlzLl9jb21wb25lbnRzW25hbWVdID0ge1xuICAgICAgY29uc3RydWN0b3I6IGNvbnN0cnVjdG9yLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFJldHJpZXZlcyByZWdpc3RlcmVkIGNvbXBvbmVudHMgZnJvbSB0aGUgcmVuZGVyaW5nIGVuZ2luZVxuICAgKiBAc3VtbWFyeSBUaGlzIHN0YXRpYyBtZXRob2QgcmV0cmlldmVzIGVpdGhlciBhbGwgcmVnaXN0ZXJlZCBjb21wb25lbnRzIG9yIGEgc3BlY2lmaWMgY29tcG9uZW50XG4gICAqIGJ5IGl0cyBzZWxlY3Rvci4gV2hlbiBjYWxsZWQgd2l0aG91dCBhIHNlbGVjdG9yLCBpdCByZXR1cm5zIGFuIGFycmF5IG9mIGFsbCByZWdpc3RlcmVkXG4gICAqIGNvbXBvbmVudHMuIFdoZW4gY2FsbGVkIHdpdGggYSBzZWxlY3RvciwgaXQgcmV0dXJucyB0aGUgc3BlY2lmaWMgY29tcG9uZW50IGlmIGZvdW5kLFxuICAgKiBvciB0aHJvd3MgYW4gZXJyb3IgaWYgdGhlIGNvbXBvbmVudCBpcyBub3QgcmVnaXN0ZXJlZC5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IFtzZWxlY3Rvcl0gLSBPcHRpb25hbCBzZWxlY3RvciB0byByZXRyaWV2ZSBhIHNwZWNpZmljIGNvbXBvbmVudFxuICAgKiBAcmV0dXJuIHtPYmplY3R8QXJyYXl9IEVpdGhlciBhIHNwZWNpZmljIGNvbXBvbmVudCBvciBhbiBhcnJheSBvZiBhbGwgY29tcG9uZW50c1xuICAgKi9cbiAgc3RhdGljIGNvbXBvbmVudHMoc2VsZWN0b3I/OiBzdHJpbmcpOiBvYmplY3QgfCBzdHJpbmdbXSB7XG4gICAgaWYgKCFzZWxlY3RvcikgcmV0dXJuIE9iamVjdC52YWx1ZXModGhpcy5fY29tcG9uZW50cyk7XG4gICAgaWYgKCEoc2VsZWN0b3IgaW4gdGhpcy5fY29tcG9uZW50cykpXG4gICAgICB0aHJvdyBuZXcgSW50ZXJuYWxFcnJvcihgTm8gQ29tcG9uZW50IHJlZ2lzdGVyZWQgdW5kZXIgJHtzZWxlY3Rvcn1gKTtcbiAgICByZXR1cm4gdGhpcy5fY29tcG9uZW50c1tzZWxlY3Rvcl07XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIEdlbmVyYXRlcyBhIGtleSBmb3IgcmVmbGVjdGlvbiBtZXRhZGF0YVxuICAgKiBAc3VtbWFyeSBUaGlzIHN0YXRpYyBtZXRob2QgZ2VuZXJhdGVzIGEga2V5IGZvciByZWZsZWN0aW9uIG1ldGFkYXRhIGJ5IHByZWZpeGluZyB0aGUgaW5wdXQga2V5XG4gICAqIHdpdGggdGhlIEFuZ3VsYXIgZW5naW5lJ3MgcmVmbGVjdGlvbiBwcmVmaXguIFRoaXMgaXMgdXNlZCBmb3Igc3RvcmluZyBhbmQgcmV0cmlldmluZ1xuICAgKiBtZXRhZGF0YSBpbiBhIG5hbWVzcGFjZWQgd2F5IHRvIGF2b2lkIGNvbmZsaWN0cyB3aXRoIG90aGVyIG1ldGFkYXRhLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30ga2V5IC0gVGhlIGJhc2Uga2V5IHRvIHByZWZpeFxuICAgKiBAcmV0dXJuIHtzdHJpbmd9IFRoZSBwcmVmaXhlZCBrZXkgZm9yIHJlZmxlY3Rpb24gbWV0YWRhdGFcbiAgICovXG4gIHN0YXRpYyBvdmVycmlkZSBrZXkoa2V5OiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiBgJHtBbmd1bGFyRW5naW5lS2V5cy5SRUZMRUNUfSR7a2V5fWA7XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFNldHMgaW5wdXQgcHJvcGVydGllcyBvbiBhIGNvbXBvbmVudCBpbnN0YW5jZVxuICAgKiBAc3VtbWFyeSBUaGlzIHN0YXRpYyB1dGlsaXR5IG1ldGhvZCBzZXRzIGlucHV0IHByb3BlcnRpZXMgb24gYSBjb21wb25lbnQgaW5zdGFuY2VcbiAgICogYmFzZWQgb24gdGhlIHByb3ZpZGVkIGlucHV0cyBvYmplY3QgYW5kIGNvbXBvbmVudCBtZXRhZGF0YS4gSXQgaGFuZGxlcyBib3RoIHNpbXBsZVxuICAgKiB2YWx1ZXMgYW5kIG5lc3RlZCBvYmplY3RzLCByZWN1cnNpdmVseSBwcm9jZXNzaW5nIG9iamVjdCBwcm9wZXJ0aWVzLiBUaGUgbWV0aG9kXG4gICAqIHZhbGlkYXRlcyBlYWNoIGlucHV0IGFnYWluc3QgdGhlIGNvbXBvbmVudCdzIG1ldGFkYXRhIHRvIGVuc3VyZSBvbmx5IHZhbGlkIGlucHV0c1xuICAgKiBhcmUgc2V0LlxuICAgKlxuICAgKiBAcGFyYW0ge0NvbXBvbmVudFJlZjx1bmtub3duPn0gY29tcG9uZW50IC0gVGhlIGNvbXBvbmVudCByZWZlcmVuY2UgdG8gc2V0IGlucHV0cyBvblxuICAgKiBAcGFyYW0ge0tleVZhbHVlfSBpbnB1dHMgLSBUaGUgaW5wdXQgcHJvcGVydGllcyB0byBzZXRcbiAgICogQHBhcmFtIHtDb21wb25lbnRNaXJyb3I8dW5rbm93bj59IG1ldGFkYXRhIC0gVGhlIGNvbXBvbmVudCBtZXRhZGF0YSBmb3IgaW5wdXQgdmFsaWRhdGlvblxuICAgKiBAcmV0dXJuIHt2b2lkfVxuICAgKlxuICAgKiBAbWVybWFpZFxuICAgKiBzZXF1ZW5jZURpYWdyYW1cbiAgICogICBwYXJ0aWNpcGFudCBDYWxsZXJcbiAgICogICBwYXJ0aWNpcGFudCBTZXRJbnB1dHMgYXMgc2V0SW5wdXRzXG4gICAqICAgcGFydGljaXBhbnQgUGFyc2UgYXMgcGFyc2VJbnB1dFZhbHVlXG4gICAqICAgcGFydGljaXBhbnQgQ29tcG9uZW50IGFzIENvbXBvbmVudFJlZlxuICAgKlxuICAgKiAgIENhbGxlci0+PlNldElucHV0czogc2V0SW5wdXRzKGNvbXBvbmVudCwgaW5wdXRzLCBtZXRhZGF0YSlcbiAgICogICBTZXRJbnB1dHMtPj5TZXRJbnB1dHM6IEl0ZXJhdGUgdGhyb3VnaCBpbnB1dHNcbiAgICogICBsb29wIEZvciBlYWNoIGlucHV0XG4gICAqICAgICBTZXRJbnB1dHMtPj5TZXRJbnB1dHM6IENoZWNrIGlmIGlucHV0IGV4aXN0cyBpbiBtZXRhZGF0YVxuICAgKiAgICAgYWx0IElucHV0IGlzICdwcm9wcydcbiAgICogICAgICAgU2V0SW5wdXRzLT4+UGFyc2U6IHBhcnNlSW5wdXRWYWx1ZShjb21wb25lbnQsIHZhbHVlKVxuICAgKiAgICAgICBQYXJzZS0+PlBhcnNlOiBSZWN1cnNpdmVseSBwcm9jZXNzIG5lc3RlZCBvYmplY3RzXG4gICAqICAgICAgIFBhcnNlLT4+Q29tcG9uZW50OiBzZXRJbnB1dChrZXksIHZhbHVlKVxuICAgKiAgICAgZWxzZSBJbnB1dCBpcyB2YWxpZFxuICAgKiAgICAgICBTZXRJbnB1dHMtPj5Db21wb25lbnQ6IHNldElucHV0KGtleSwgdmFsdWUpXG4gICAqICAgICBlbmRcbiAgICogICBlbmRcbiAgICovXG4gIHN0YXRpYyBzZXRJbnB1dHMoY29tcG9uZW50OiBDb21wb25lbnRSZWY8dW5rbm93bj4sIGlucHV0czogS2V5VmFsdWUsIG1ldGFkYXRhOiBDb21wb25lbnRNaXJyb3I8dW5rbm93bj4pOiB2b2lkIHtcbiAgICBmdW5jdGlvbiBwYXJzZUlucHV0VmFsdWUoY29tcG9uZW50OiBDb21wb25lbnRSZWY8dW5rbm93bj4sIGlucHV0OiBLZXlWYWx1ZSkge1xuICAgICAgT2JqZWN0LmtleXMoaW5wdXQpLmZvckVhY2goa2V5ID0+IHtcbiAgICAgICAgY29uc3QgdmFsdWUgPSBpbnB1dFtrZXldO1xuICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiAhIXZhbHVlKVxuICAgICAgICAgIHJldHVybiBwYXJzZUlucHV0VmFsdWUoY29tcG9uZW50LCB2YWx1ZSk7XG4gICAgICAgIGNvbXBvbmVudC5zZXRJbnB1dChrZXksIHZhbHVlKTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIE9iamVjdC5lbnRyaWVzKGlucHV0cykuZm9yRWFjaCgoW2tleSwgdmFsdWVdKSA9PiB7XG4gICAgICBjb25zdCBwcm9wID0gbWV0YWRhdGEuaW5wdXRzLmZpbmQoKGl0ZW06IHsgcHJvcE5hbWU6IHN0cmluZyB9KSA9PiBpdGVtLnByb3BOYW1lID09PSBrZXkpO1xuICAgICAgaWYgKHByb3ApIHtcbiAgICAgICAgaWYgKGtleSA9PT0gJ3Byb3BzJylcbiAgICAgICAgICBwYXJzZUlucHV0VmFsdWUoY29tcG9uZW50LCB2YWx1ZSk7XG4gICAgICAgIC8vIGlmKGtleSA9PT0gJ2xvY2FsZScgJiYgIXZhbHVlKVxuICAgICAgICAvLyAgIHZhbHVlID0gZ2V0TG9jYWxlRnJvbUNsYXNzTmFtZSh0aGlzLl9jb21wb25lbnROYW1lKTtcbiAgICAgICAgY29tcG9uZW50LnNldElucHV0KGtleSwgdmFsdWUpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG59XG4iXX0=
|
|
@@ -2,6 +2,7 @@ import { FormControl, FormGroup } from '@angular/forms';
|
|
|
2
2
|
import { ComparisonValidationKeys, DEFAULT_PATTERNS, PathProxyEngine, Validation, ValidationKeys, } from '@decaf-ts/decorator-validation';
|
|
3
3
|
import { HTML5InputTypes, parseValueByType } from '@decaf-ts/ui-decorators';
|
|
4
4
|
import { AngularEngineKeys } from './constants';
|
|
5
|
+
import { NgxRenderingEngine } from './NgxRenderingEngine';
|
|
5
6
|
/**
|
|
6
7
|
*
|
|
7
8
|
* Resolves the correct validator key and its associated properties based on the input key and type.
|
|
@@ -25,7 +26,8 @@ const resolveValidatorKeyProps = (key, value, type) => {
|
|
|
25
26
|
const isTypeBased = key === ValidationKeys.TYPE && Object.keys(patternValidators).includes(type);
|
|
26
27
|
const validatorKey = isTypeBased ? type : key;
|
|
27
28
|
const props = {
|
|
28
|
-
[validatorKey]: value,
|
|
29
|
+
// [validatorKey]: (!isTypeBased && key === 'type') ? parseType(type) : value,
|
|
30
|
+
[validatorKey]: (!isTypeBased && validatorKey === ValidationKeys.TYPE) ? NgxRenderingEngine.get().translate(value, false) : value,
|
|
29
31
|
// Email, Password, and URL are validated using the "pattern" key
|
|
30
32
|
...(isTypeBased && { [ValidationKeys.PATTERN]: patternValidators[type] }),
|
|
31
33
|
};
|
|
@@ -51,6 +53,8 @@ export class ValidatorFactory {
|
|
|
51
53
|
}
|
|
52
54
|
let errs;
|
|
53
55
|
try {
|
|
56
|
+
if (!props['types'] && !props['customTypes'])
|
|
57
|
+
props['types'] = props['type'];
|
|
54
58
|
errs = validator.hasErrors(value, props, proxy);
|
|
55
59
|
}
|
|
56
60
|
catch (e) {
|
|
@@ -99,4 +103,4 @@ export class ValidatorFactory {
|
|
|
99
103
|
});
|
|
100
104
|
}
|
|
101
105
|
}
|
|
102
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVmFsaWRhdG9yRmFjdG9yeS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saWIvZW5naW5lL1ZhbGlkYXRvckZhY3RvcnkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFtQixXQUFXLEVBQUUsU0FBUyxFQUFpQyxNQUFNLGdCQUFnQixDQUFDO0FBQ3hHLE9BQU8sRUFDTCx3QkFBd0IsRUFDeEIsZ0JBQWdCLEVBRWhCLGVBQWUsRUFDZixVQUFVLEVBQ1YsY0FBYyxHQUVmLE1BQU0sZ0NBQWdDLENBQUM7QUFDeEMsT0FBTyxFQUFtQixlQUFlLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUM3RixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFLaEQ7Ozs7Ozs7Ozs7Ozs7R0FhRztBQUNILE1BQU0sd0JBQXdCLEdBQUcsQ0FBQyxHQUFXLEVBQUUsS0FBYyxFQUFFLElBQVksRUFHekUsRUFBRTtJQUNGLE1BQU0saUJBQWlCLEdBQTRCO1FBQ2pELENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQyxFQUFFLGdCQUFnQixDQUFDLFFBQVEsQ0FBQyxpQkFBaUI7UUFDdEUsQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLEVBQUUsZ0JBQWdCLENBQUMsS0FBSztRQUM5QyxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsRUFBRSxnQkFBZ0IsQ0FBQyxHQUFHO0tBQzNDLENBQUM7SUFFRixNQUFNLFdBQVcsR0FBRyxHQUFHLEtBQUssY0FBYyxDQUFDLElBQUksSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ2pHLE1BQU0sWUFBWSxHQUFHLFdBQVcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUM7SUFDOUMsTUFBTSxLQUFLLEdBQTRCO1FBQ3JDLENBQUMsWUFBWSxDQUFD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QUssQ0FBQztnQkFFdEIsSUFBSSxNQUFNLFlBQVksU0FBUyxFQUFFLENBQUM7b0JBQ2hDLE1BQU0sT0FBTyxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7b0JBQ3RDLE9BQU8sT0FBTyxZQUFZLFdBQVcsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDO2dCQUNsRSxDQUFDO2dCQUVELDhCQUE4QjtnQkFDOUIsb0NBQW9DO2dCQUNwQyx3QkFBd0I7Z0JBQ3hCLEVBQUU7Z0JBQ0Ysb0NBQW9DO2dCQUNwQywwQ0FBMEM7Z0JBQzFDLHFFQUFxRTtnQkFDckUsSUFBSTtnQkFFSixPQUFRLE1BQW1CLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUN0QyxDQUFDO1lBQ0QsU0FBUyxFQUFFLFVBQVMsTUFBdUI7Z0JBQ3pDLE9BQU8sTUFBTSxFQUFFLENBQUMsU0FBUyxDQUFDLENBQUM7WUFDN0IsQ0FBQztZQUNELGVBQWUsRUFBRSxJQUFJO1lBQ3JCLFVBQVUsRUFBRSxJQUFJO1NBQ2pCLENBQUMsQ0FBQztJQUNMLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFic3RyYWN0Q29udHJvbCwgRm9ybUNvbnRyb2wsIEZvcm1Hcm91cCwgVmFsaWRhdGlvbkVycm9ycywgVmFsaWRhdG9yRm4gfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQge1xuICBDb21wYXJpc29uVmFsaWRhdGlvbktleXMsXG4gIERFRkFVTFRfUEFUVEVSTlMsXG4gIFBhdGhQcm94eSxcbiAgUGF0aFByb3h5RW5naW5lLFxuICBWYWxpZGF0aW9uLFxuICBWYWxpZGF0aW9uS2V5cyxcbiAgVmFsaWRhdG9yLFxufSBmcm9tICdAZGVjYWYtdHMvZGVjb3JhdG9yLXZhbGlkYXRpb24nO1xuaW1wb3J0IHsgRmllbGRQcm9wZXJ0aWVzLCBIVE1MNUlucHV0VHlwZXMsIHBhcnNlVmFsdWVCeVR5cGUgfSBmcm9tICdAZGVjYWYtdHMvdWktZGVjb3JhdG9ycyc7XG5pbXBvcnQgeyBBbmd1bGFyRW5naW5lS2V5cyB9IGZyb20gJy4vY29uc3RhbnRzJztcbmltcG9ydCB7IEtleVZhbHVlIH0gZnJvbSAnLi90eXBlcyc7XG5cbnR5cGUgQ29tcGFyaXNvblZhbGlkYXRpb25LZXkgPSB0eXBlb2YgQ29tcGFyaXNvblZhbGlkYXRpb25LZXlzW2tleW9mIHR5cGVvZiBDb21wYXJpc29uVmFsaWRhdGlvbktleXNdO1xuXG4vKipcbiAqXG4gKiBSZXNvbHZlcyB0aGUgY29ycmVjdCB2YWxpZGF0b3Iga2V5IGFuZCBpdHMgYXNzb2NpYXRlZCBwcm9wZXJ0aWVzIGJhc2VkIG9uIHRoZSBpbnB1dCBrZXkgYW5kIHR5cGUuXG4gKlxuICogV2hlbiB0aGUgdmFsaWRhdGlvbiBrZXkgaXMgVFlQRSwgaXQncyBuZWNlc3NhcnkgdG8gcmVzb2x2ZSB0aGUgYWN0dWFsIHZhbGlkYXRvciBiYXNlZCBvbiB0aGVcbiAqIGZpZWxkJ3MgdHlwZSAoZS5nLiwgJ3Bhc3N3b3JkJywgJ2VtYWlsJywgJ3VybCcpIGluc3RlYWQgb2YgdXNpbmcgdGhlIGdlbmVyaWMgZ2V0VmFsaWRhdG9yKFwidHlwZVwiKSBsb2dpYy5cbiAqIFRoaXMgYWxsb3dzIGRpcmVjdGx5IGludm9raW5nIHNwZWNpZmljIHZhbGlkYXRvcnMgbGlrZSBnZXRWYWxpZGF0b3IoJ3Bhc3N3b3JkJyksIGVuc3VyaW5nIHRoZSBjb3JyZWN0XG4gKiBiZWhhdmlvciBmb3IgdHlwZS1iYXNlZCB2YWxpZGF0aW9uLlxuICpcbiAqIEBwYXJhbSBrZXkgLSBUaGUgdmFsaWRhdGlvbiBrZXkgKGUuZy4sICd0eXBlJywgJ3JlcXVpcmVkJywgZXRjLikuXG4gKiBAcGFyYW0gdmFsdWUgLSBUaGUgdmFsdWUgdGhhdCBuZWVkcyBiZSBwcm92aWRlZCB0byB0aGUgdmFsaWRhdG9yLlxuICogQHBhcmFtIHR5cGUgLSBUaGUgZmllbGQncyBkZWNsYXJlZCB0eXBlLlxuICogQHJldHVybnMgQW4gb2JqZWN0IGNvbnRhaW5pbmcgdGhlIHJlc29sdmVkIHZhbGlkYXRvciBrZXkgYW5kIGl0cyBjb3JyZXNwb25kaW5nIHByb3BzLlxuICovXG5jb25zdCByZXNvbHZlVmFsaWRhdG9yS2V5UHJvcHMgPSAoa2V5OiBzdHJpbmcsIHZhbHVlOiB1bmtub3duLCB0eXBlOiBzdHJpbmcpOiB7XG4gIHZhbGlkYXRvcktleTogc3RyaW5nO1xuICBwcm9wczogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG59ID0+IHtcbiAgY29uc3QgcGF0dGVyblZhbGlkYXRvcnM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0ge1xuICAgIFtWYWxpZGF0aW9uS2V5cy5QQVNTV09SRF06IERFRkFVTFRfUEFUVEVSTlMuUEFTU1dPUkQuQ0hBUjhfT05FX09GX0VBQ0gsXG4gICAgW1ZhbGlkYXRpb25LZXlzLkVNQUlMXTogREVGQVVMVF9QQVRURVJOUy5FTUFJTCxcbiAgICBbVmFsaWRhdGlvbktleXMuVVJMXTogREVGQVVMVF9QQVRURVJOUy5VUkwsXG4gIH07XG5cbiAgY29uc3QgaXNUeXBlQmFzZWQgPSBrZXkgPT09IFZhbGlkYXRpb25LZXlzLlRZUEUgJiYgT2JqZWN0LmtleXMocGF0dGVyblZhbGlkYXRvcnMpLmluY2x1ZGVzKHR5cGUpO1xuICBjb25zdCB2YWxpZGF0b3JLZXkgPSBpc1R5cGVCYXNlZCA/IHR5cGUgOiBrZXk7XG4gIGNvbnN0IHByb3BzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IHtcbiAgICBbdmFsaWRhdG9yS2V5XTogdmFsdWUsXG4gICAgLy8gRW1haWwsIFBhc3N3b3JkLCBhbmQgVVJMIGFyZSB2YWxpZGF0ZWQgdXNpbmcgdGhlIFwicGF0dGVyblwiIGtleVxuICAgIC4uLihpc1R5cGVCYXNlZCAmJiB7IFtWYWxpZGF0aW9uS2V5cy5QQVRURVJOXTogcGF0dGVyblZhbGlkYXRvcnNbdHlwZV0gfSksXG4gIH07XG5cbiAgcmV0dXJuIHsgdmFsaWRhdG9yS2V5LCBwcm9wcyB9O1xufTtcblxuXG5leHBvcnQgY2xhc3MgVmFsaWRhdG9yRmFjdG9yeSB7XG4gIHN0YXRpYyBzcGF3bihmaWVsZFByb3BzOiBGaWVsZFByb3BlcnRpZXMsIGtleTogc3RyaW5nKTogVmFsaWRhdG9yRm4ge1xuICAgIGlmICghVmFsaWRhdGlvbi5rZXlzKCkuaW5jbHVkZXMoa2V5KSlcbiAgICAgIHRocm93IG5ldyBFcnJvcignVW5zdXBwb3J0ZWQgY3VzdG9tIHZhbGlkYXRpb24nKTtcblxuICAgIGNvbnN0IHZhbGlkYXRvckZuOiBWYWxpZGF0b3JGbiA9IChjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpOiBWYWxpZGF0aW9uRXJyb3JzIHwgbnVsbCA9PiB7XG4gICAgICBjb25zdCB7IG5hbWUsIHR5cGUgfSA9IGZpZWxkUHJvcHM7XG4gICAgICBjb25zdCB7IHZhbGlkYXRvcktleSwgcHJvcHMgfSA9IHJlc29sdmVWYWxpZGF0b3JLZXlQcm9wcyhrZXksIGZpZWxkUHJvcHNba2V5IGFzIGtleW9mIEZpZWxkUHJvcGVydGllc10sIHR5cGUpO1xuICAgICAgY29uc3QgdmFsaWRhdG9yID0gVmFsaWRhdGlvbi5nZXQodmFsaWRhdG9yS2V5KSBhcyBWYWxpZGF0b3I7XG5cbiAgICAgIC8vIHBhcnNlVmFsdWVCeVR5cGUgZG9lcyBub3Qgc3VwcG9ydCB1bmRlZmluZWQgdmFsdWVzXG4gICAgICBjb25zdCB2YWx1ZSA9IHR5cGVvZiBjb250cm9sLnZhbHVlICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICA/IHBhcnNlVmFsdWVCeVR5cGUodHlwZSwgdHlwZSA9PT0gSFRNTDVJbnB1dFR5cGVzLkNIRUNLQk9YID8gbmFtZSA6IGNvbnRyb2wudmFsdWUsIGZpZWxkUHJvcHMpXG4gICAgICAgIDogdW5kZWZpbmVkO1xuXG4gICAgICAvLyBDcmVhdGUgYSBwcm94eSB0byBlbmFibGUgYWNjZXNzIHRvIHBhcmVudCBhbmQgY2hpbGQgdmFsdWVzXG4gICAgICBsZXQgcHJveHk6IFBhdGhQcm94eTx1bmtub3duPiA9IFZhbGlkYXRvckZhY3RvcnkuY3JlYXRlUHJveHkoe30gYXMgQWJzdHJhY3RDb250cm9sKTtcbiAgICAgIGlmIChPYmplY3QudmFsdWVzKENvbXBhcmlzb25WYWxpZGF0aW9uS2V5cykuaW5jbHVkZXMoa2V5IGFzIENvbXBhcmlzb25WYWxpZGF0aW9uS2V5KSkge1xuICAgICAgICBjb25zdCBwYXJlbnQ6IEZvcm1Hcm91cCA9IGNvbnRyb2wgaW5zdGFuY2VvZiBGb3JtR3JvdXAgPyBjb250cm9sIDogKGNvbnRyb2wgYXMgS2V5VmFsdWUpW0FuZ3VsYXJFbmdpbmVLZXlzLlBBUkVOVF07XG4gICAgICAgIHByb3h5ID0gVmFsaWRhdG9yRmFjdG9yeS5jcmVhdGVQcm94eShwYXJlbnQpIGFzIFBhdGhQcm94eTx1bmtub3duPjtcbiAgICAgIH1cblxuICAgICAgbGV0IGVycnM6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICAgIHRyeSB7XG4gICAgICAgIGVycnMgPSB2YWxpZGF0b3IuaGFzRXJyb3JzKHZhbHVlLCBwcm9wcywgcHJveHkpO1xuICAgICAgfSBjYXRjaCAoZTogdW5rbm93bikge1xuICAgICAgICBlcnJzID0gYCR7a2V5fSB2YWxpZGF0b3IgZmFpbGVkIHRvIHZhbGlkYXRlOiAke2V9YDtcbiAgICAgICAgY29uc29sZS53YXJuKGVycnMpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gZXJycyA/IHsgW3ZhbGlkYXRvcktleV06IHRydWUgfSA6IG51bGw7XG4gICAgfTtcblxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh2YWxpZGF0b3JGbiwgJ25hbWUnLCB7XG4gICAgICB2YWx1ZTogYCR7a2V5fVZhbGlkYXRvcmAsXG4gICAgfSk7XG5cbiAgICByZXR1cm4gdmFsaWRhdG9yRm47XG4gIH1cblxuICAvKipcbiAgICogQHN1bW1hcnkgQ3JlYXRlcyBhIHByb3h5IHdyYXBwZXIgZm9yIGFuIEFuZ3VsYXIgQWJzdHJhY3RDb250cm9sIHRvIGFzc2lzdCB3aXRoIGN1c3RvbSB2YWxpZGF0aW9uIGxvZ2ljLlxuICAgKiBAZGVzY3JpcHRpb24gUmV0dXJucyBhIHN0cnVjdHVyZWQgcHJveHkgb2JqZWN0IHRoYXQgc2ltdWxhdGVzIGEgaGllcmFyY2hpY2FsIHRyZWUgb2YgZm9ybSB2YWx1ZXMuXG4gICAqIEVuYWJsZXMgVmFsaWRhdG9ycyBoYW5kbGluZyBtZXRob2QgdG8gYWNjZXNzIHBhcmVudCBhbmQgY2hpbGQgcHJvcGVydGllcyB1c2luZyBjb25zaXN0ZW50IGRvdC1ub3RhdGlvbiBpbiBBbmd1bGFyIGZvcm1zLlxuICAgKlxuICAgKiBAcGFyYW0ge0Fic3RyYWN0Q29udHJvbH0gY29udHJvbCAtIFRoZSBjb250cm9sIHRvIHdyYXAgaW4gYSBwcm94eS5cbiAgICogQHJldHVybnMge1BhdGhQcm94eTx1bmtub3duPn0gQSBwcm94eSBvYmplY3QgZXhwb3NpbmcgZm9ybSB2YWx1ZXMgYW5kIGVuYWJsaW5nIHJlY3Vyc2l2ZSBwYXJlbnQgYWNjZXNzLlxuICAgKi9cbiAgc3RhdGljIGNyZWF0ZVByb3h5KGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCk6IFBhdGhQcm94eTx1bmtub3duPiB7XG4gICAgcmV0dXJuIFBhdGhQcm94eUVuZ2luZS5jcmVhdGUoY29udHJvbCwge1xuICAgICAgZ2V0VmFsdWUodGFyZ2V0OiBBYnN0cmFjdENvbnRyb2wsIHByb3A6IHN0cmluZyk6IHVua25vd24ge1xuICAgICAgICBpZiAodGFyZ2V0IGluc3RhbmNlb2YgRm9ybUNvbnRyb2wpXG4gICAgICAgICAgcmV0dXJuIHRhcmdldC52YWx1ZTtcblxuICAgICAgICBpZiAodGFyZ2V0IGluc3RhbmNlb2YgRm9ybUdyb3VwKSB7XG4gICAgICAgICAgY29uc3QgY29udHJvbCA9IHRhcmdldC5jb250cm9sc1twcm9wXTtcbiAgICAgICAgICByZXR1cm4gY29udHJvbCBpbnN0YW5jZW9mIEZvcm1Db250cm9sID8gY29udHJvbC52YWx1ZSA6IGNvbnRyb2w7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBjb25zdCB2YWx1ZSA9IHRhcmdldFtwcm9wXTtcbiAgICAgICAgLy8gaWYgKHZhbHVlIGluc3RhbmNlb2YgRm9ybUNvbnRyb2wpXG4gICAgICAgIC8vICAgcmV0dXJuIHZhbHVlLnZhbHVlO1xuICAgICAgICAvL1xuICAgICAgICAvLyBpZiAodmFsdWUgaW5zdGFuY2VvZiBGb3JtR3JvdXApIHtcbiAgICAgICAgLy8gICBjb25zdCBjb250cm9sID0gdmFsdWUuY29udHJvbHNbcHJvcF07XG4gICAgICAgIC8vICAgcmV0dXJuIGNvbnRyb2wgaW5zdGFuY2VvZiBGb3JtQ29udHJvbCA/IGNvbnRyb2wudmFsdWUgOiBjb250cm9sO1xuICAgICAgICAvLyB9XG5cbiAgICAgICAgcmV0dXJuICh0YXJnZXQgYXMgS2V5VmFsdWUpPy5bcHJvcF07XG4gICAgICB9LFxuICAgICAgZ2V0UGFyZW50OiBmdW5jdGlvbih0YXJnZXQ6IEFic3RyYWN0Q29udHJvbCkgIHtcbiAgICAgICAgcmV0dXJuIHRhcmdldD8uWydfcGFyZW50J107XG4gICAgICB9LFxuICAgICAgaWdub3JlVW5kZWZpbmVkOiB0cnVlLFxuICAgICAgaWdub3JlTnVsbDogdHJ1ZSxcbiAgICB9KTtcbiAgfVxufVxuIl19
|
|
106
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVmFsaWRhdG9yRmFjdG9yeS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saWIvZW5naW5lL1ZhbGlkYXRvckZhY3RvcnkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFtQixXQUFXLEVBQUUsU0FBUyxFQUFpQyxNQUFNLGdCQUFnQixDQUFDO0FBQ3hHLE9BQU8sRUFDTCx3QkFBd0IsRUFDeEIsZ0JBQWdCLEVBRWhCLGVBQWUsRUFDZixVQUFVLEVBQ1YsY0FBYyxHQUVmLE1BQU0sZ0NBQWdDLENBQUM7QUFDeEMsT0FBTyxFQUFtQixlQUFlLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUM3RixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFFaEQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFLMUQ7Ozs7Ozs7Ozs7Ozs7R0FhRztBQUNILE1BQU0sd0JBQXdCLEdBQUcsQ0FBQyxHQUFXLEVBQUUsS0FBYyxFQUFFLElBQVksRUFHekUsRUFBRTtJQUNGLE1BQU0saUJBQWlCLEdBQTRCO1FBQ2pELENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQyxFQUFFLGdCQUFnQixDQUFDLFFBQVEsQ0FBQyxpQkFBaUI7UUFDdEUsQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLEVBQUUsZ0JBQWdCLENBQUMsS0FBSztRQUM5QyxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsRUFBRSxnQkFBZ0IsQ0FBQyxHQUFHO0tBQzNDLENBQUM7SUFDRixNQUFNLFdBQVcsR0FBRyxHQUFHLEtBQUssY0FBYyxDQUFDLElBQUksSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ2pHLE1BQU0sWUFBWSxHQUFHLFdBQVcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENB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QUFJLENBQUM7UUFDaEQsQ0FBQyxDQUFDO1FBRUYsTUFBTSxDQUFDLGNBQWMsQ0FBQyxXQUFXLEVBQUUsTUFBTSxFQUFFO1lBQ3pDLEtBQUssRUFBRSxHQUFHLEdBQUcsV0FBVztTQUN6QixDQUFDLENBQUM7UUFFSCxPQUFPLFdBQVcsQ0FBQztJQUNyQixDQUFDO0lBRUQ7Ozs7Ozs7T0FPRztJQUNILE1BQU0sQ0FBQyxXQUFXLENBQUMsT0FBd0I7UUFDekMsT0FBTyxlQUFlLENBQUMsTUFBTSxDQUFDLE9BQU8sRUFBRTtZQUNyQyxRQUFRLENBQUMsTUFBdUIsRUFBRSxJQUFZO2dCQUM1QyxJQUFJLE1BQU0sWUFBWSxXQUFXO29CQUMvQixPQUFPLE1BQU0sQ0FBQyxLQUFLLENBQUM7Z0JBRXRCLElBQUksTUFBTSxZQUFZLFNBQVMsRUFBRSxDQUFDO29CQUNoQyxNQUFNLE9BQU8sR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO29CQUN0QyxPQUFPLE9BQU8sWUFBWSxXQUFXLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQztnQkFDbEUsQ0FBQztnQkFFRCw4QkFBOEI7Z0JBQzlCLG9DQUFvQztnQkFDcEMsd0JBQXdCO2dCQUN4QixFQUFFO2dCQUNGLG9DQUFvQztnQkFDcEMsMENBQTBDO2dCQUMxQyxxRUFBcUU7Z0JBQ3JFLElBQUk7Z0JBRUosT0FBUSxNQUFtQixFQUFFLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDdEMsQ0FBQztZQUNELFNBQVMsRUFBRSxVQUFTLE1BQXVCO2dCQUN6QyxPQUFPLE1BQU0sRUFBRSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBQzdCLENBQUM7WUFDRCxlQUFlLEVBQUUsSUFBSTtZQUNyQixVQUFVLEVBQUUsSUFBSTtTQUNqQixDQUFDLENBQUM7SUFDTCxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBYnN0cmFjdENvbnRyb2wsIEZvcm1Db250cm9sLCBGb3JtR3JvdXAsIFZhbGlkYXRpb25FcnJvcnMsIFZhbGlkYXRvckZuIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHtcbiAgQ29tcGFyaXNvblZhbGlkYXRpb25LZXlzLFxuICBERUZBVUxUX1BBVFRFUk5TLFxuICBQYXRoUHJveHksXG4gIFBhdGhQcm94eUVuZ2luZSxcbiAgVmFsaWRhdGlvbixcbiAgVmFsaWRhdGlvbktleXMsXG4gIFZhbGlkYXRvcixcbn0gZnJvbSAnQGRlY2FmLXRzL2RlY29yYXRvci12YWxpZGF0aW9uJztcbmltcG9ydCB7IEZpZWxkUHJvcGVydGllcywgSFRNTDVJbnB1dFR5cGVzLCBwYXJzZVZhbHVlQnlUeXBlIH0gZnJvbSAnQGRlY2FmLXRzL3VpLWRlY29yYXRvcnMnO1xuaW1wb3J0IHsgQW5ndWxhckVuZ2luZUtleXMgfSBmcm9tICcuL2NvbnN0YW50cyc7XG5pbXBvcnQgeyBLZXlWYWx1ZSB9IGZyb20gJy4vdHlwZXMnO1xuaW1wb3J0IHsgTmd4UmVuZGVyaW5nRW5naW5lIH0gZnJvbSAnLi9OZ3hSZW5kZXJpbmdFbmdpbmUnO1xuXG5cbnR5cGUgQ29tcGFyaXNvblZhbGlkYXRpb25LZXkgPSB0eXBlb2YgQ29tcGFyaXNvblZhbGlkYXRpb25LZXlzW2tleW9mIHR5cGVvZiBDb21wYXJpc29uVmFsaWRhdGlvbktleXNdO1xuXG4vKipcbiAqXG4gKiBSZXNvbHZlcyB0aGUgY29ycmVjdCB2YWxpZGF0b3Iga2V5IGFuZCBpdHMgYXNzb2NpYXRlZCBwcm9wZXJ0aWVzIGJhc2VkIG9uIHRoZSBpbnB1dCBrZXkgYW5kIHR5cGUuXG4gKlxuICogV2hlbiB0aGUgdmFsaWRhdGlvbiBrZXkgaXMgVFlQRSwgaXQncyBuZWNlc3NhcnkgdG8gcmVzb2x2ZSB0aGUgYWN0dWFsIHZhbGlkYXRvciBiYXNlZCBvbiB0aGVcbiAqIGZpZWxkJ3MgdHlwZSAoZS5nLiwgJ3Bhc3N3b3JkJywgJ2VtYWlsJywgJ3VybCcpIGluc3RlYWQgb2YgdXNpbmcgdGhlIGdlbmVyaWMgZ2V0VmFsaWRhdG9yKFwidHlwZVwiKSBsb2dpYy5cbiAqIFRoaXMgYWxsb3dzIGRpcmVjdGx5IGludm9raW5nIHNwZWNpZmljIHZhbGlkYXRvcnMgbGlrZSBnZXRWYWxpZGF0b3IoJ3Bhc3N3b3JkJyksIGVuc3VyaW5nIHRoZSBjb3JyZWN0XG4gKiBiZWhhdmlvciBmb3IgdHlwZS1iYXNlZCB2YWxpZGF0aW9uLlxuICpcbiAqIEBwYXJhbSBrZXkgLSBUaGUgdmFsaWRhdGlvbiBrZXkgKGUuZy4sICd0eXBlJywgJ3JlcXVpcmVkJywgZXRjLikuXG4gKiBAcGFyYW0gdmFsdWUgLSBUaGUgdmFsdWUgdGhhdCBuZWVkcyBiZSBwcm92aWRlZCB0byB0aGUgdmFsaWRhdG9yLlxuICogQHBhcmFtIHR5cGUgLSBUaGUgZmllbGQncyBkZWNsYXJlZCB0eXBlLlxuICogQHJldHVybnMgQW4gb2JqZWN0IGNvbnRhaW5pbmcgdGhlIHJlc29sdmVkIHZhbGlkYXRvciBrZXkgYW5kIGl0cyBjb3JyZXNwb25kaW5nIHByb3BzLlxuICovXG5jb25zdCByZXNvbHZlVmFsaWRhdG9yS2V5UHJvcHMgPSAoa2V5OiBzdHJpbmcsIHZhbHVlOiB1bmtub3duLCB0eXBlOiBzdHJpbmcpOiB7XG4gIHZhbGlkYXRvcktleTogc3RyaW5nO1xuICBwcm9wczogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG59ID0+IHtcbiAgY29uc3QgcGF0dGVyblZhbGlkYXRvcnM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0ge1xuICAgIFtWYWxpZGF0aW9uS2V5cy5QQVNTV09SRF06IERFRkFVTFRfUEFUVEVSTlMuUEFTU1dPUkQuQ0hBUjhfT05FX09GX0VBQ0gsXG4gICAgW1ZhbGlkYXRpb25LZXlzLkVNQUlMXTogREVGQVVMVF9QQVRURVJOUy5FTUFJTCxcbiAgICBbVmFsaWRhdGlvbktleXMuVVJMXTogREVGQVVMVF9QQVRURVJOUy5VUkwsXG4gIH07XG4gIGNvbnN0IGlzVHlwZUJhc2VkID0ga2V5ID09PSBWYWxpZGF0aW9uS2V5cy5UWVBFICYmIE9iamVjdC5rZXlzKHBhdHRlcm5WYWxpZGF0b3JzKS5pbmNsdWRlcyh0eXBlKTtcbiAgY29uc3QgdmFsaWRhdG9yS2V5ID0gaXNUeXBlQmFzZWQgPyB0eXBlIDoga2V5O1xuICBjb25zdCBwcm9wczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSB7XG4gICAgLy8gW3ZhbGlkYXRvcktleV06ICghaXNUeXBlQmFzZWQgJiYga2V5ID09PSAndHlwZScpID8gcGFyc2VUeXBlKHR5cGUpIDogdmFsdWUsXG4gICAgW3ZhbGlkYXRvcktleV06ICghaXNUeXBlQmFzZWQgJiYgdmFsaWRhdG9yS2V5ID09PSBWYWxpZGF0aW9uS2V5cy5UWVBFKSA/IE5neFJlbmRlcmluZ0VuZ2luZS5nZXQoKS50cmFuc2xhdGUodmFsdWUgYXMgc3RyaW5nLCBmYWxzZSkgOiB2YWx1ZSxcbiAgICAvLyBFbWFpbCwgUGFzc3dvcmQsIGFuZCBVUkwgYXJlIHZhbGlkYXRlZCB1c2luZyB0aGUgXCJwYXR0ZXJuXCIga2V5XG4gICAgLi4uKGlzVHlwZUJhc2VkICYmIHsgW1ZhbGlkYXRpb25LZXlzLlBBVFRFUk5dIDogcGF0dGVyblZhbGlkYXRvcnNbdHlwZV0gfSksXG4gIH07XG5cbiAgcmV0dXJuIHsgdmFsaWRhdG9yS2V5LCBwcm9wcyB9O1xufTtcblxuXG5leHBvcnQgY2xhc3MgVmFsaWRhdG9yRmFjdG9yeSB7XG4gIHN0YXRpYyBzcGF3bihmaWVsZFByb3BzOiBGaWVsZFByb3BlcnRpZXMsIGtleTogc3RyaW5nKTogVmFsaWRhdG9yRm4ge1xuICAgIGlmICghVmFsaWRhdGlvbi5rZXlzKCkuaW5jbHVkZXMoa2V5KSlcbiAgICAgIHRocm93IG5ldyBFcnJvcignVW5zdXBwb3J0ZWQgY3VzdG9tIHZhbGlkYXRpb24nKTtcblxuICAgIGNvbnN0IHZhbGlkYXRvckZuOiBWYWxpZGF0b3JGbiA9IChjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpOiBWYWxpZGF0aW9uRXJyb3JzIHwgbnVsbCA9PiB7XG4gICAgICBjb25zdCB7IG5hbWUsIHR5cGUgfSA9IGZpZWxkUHJvcHM7XG4gICAgICBjb25zdCB7IHZhbGlkYXRvcktleSwgcHJvcHMgfSA9IHJlc29sdmVWYWxpZGF0b3JLZXlQcm9wcyhrZXksIGZpZWxkUHJvcHNba2V5IGFzIGtleW9mIEZpZWxkUHJvcGVydGllc10sIHR5cGUpO1xuICAgICAgY29uc3QgdmFsaWRhdG9yID0gVmFsaWRhdGlvbi5nZXQodmFsaWRhdG9yS2V5KSBhcyBWYWxpZGF0b3I7XG5cbiAgICAgIC8vIHBhcnNlVmFsdWVCeVR5cGUgZG9lcyBub3Qgc3VwcG9ydCB1bmRlZmluZWQgdmFsdWVzXG4gICAgICBjb25zdCB2YWx1ZSA9IHR5cGVvZiBjb250cm9sLnZhbHVlICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICA/IHBhcnNlVmFsdWVCeVR5cGUodHlwZSwgdHlwZSA9PT0gSFRNTDVJbnB1dFR5cGVzLkNIRUNLQk9YID8gbmFtZSA6IGNvbnRyb2wudmFsdWUsIGZpZWxkUHJvcHMpXG4gICAgICAgIDogdW5kZWZpbmVkO1xuXG4gICAgICAvLyBDcmVhdGUgYSBwcm94eSB0byBlbmFibGUgYWNjZXNzIHRvIHBhcmVudCBhbmQgY2hpbGQgdmFsdWVzXG4gICAgICBsZXQgcHJveHk6IFBhdGhQcm94eTx1bmtub3duPiA9IFZhbGlkYXRvckZhY3RvcnkuY3JlYXRlUHJveHkoe30gYXMgQWJzdHJhY3RDb250cm9sKTtcbiAgICAgIGlmIChPYmplY3QudmFsdWVzKENvbXBhcmlzb25WYWxpZGF0aW9uS2V5cykuaW5jbHVkZXMoa2V5IGFzIENvbXBhcmlzb25WYWxpZGF0aW9uS2V5KSkge1xuICAgICAgICBjb25zdCBwYXJlbnQ6IEZvcm1Hcm91cCA9IGNvbnRyb2wgaW5zdGFuY2VvZiBGb3JtR3JvdXAgPyBjb250cm9sIDogKGNvbnRyb2wgYXMgS2V5VmFsdWUpW0FuZ3VsYXJFbmdpbmVLZXlzLlBBUkVOVF07XG4gICAgICAgIHByb3h5ID0gVmFsaWRhdG9yRmFjdG9yeS5jcmVhdGVQcm94eShwYXJlbnQpIGFzIFBhdGhQcm94eTx1bmtub3duPjtcbiAgICAgIH1cblxuICAgICAgbGV0IGVycnM6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICAgIHRyeSB7XG4gICAgICAgIGlmKCFwcm9wc1sndHlwZXMnXSAmJiAhcHJvcHNbJ2N1c3RvbVR5cGVzJ10pXG4gICAgICAgICAgcHJvcHNbJ3R5cGVzJ10gPSBwcm9wc1sndHlwZSddO1xuICAgICAgICBlcnJzID0gdmFsaWRhdG9yLmhhc0Vycm9ycyh2YWx1ZSwgcHJvcHMsIHByb3h5KTtcbiAgICAgIH0gY2F0Y2ggKGU6IHVua25vd24pIHtcbiAgICAgICAgZXJycyA9IGAke2tleX0gdmFsaWRhdG9yIGZhaWxlZCB0byB2YWxpZGF0ZTogJHtlfWA7XG4gICAgICAgIGNvbnNvbGUud2FybihlcnJzKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGVycnMgPyB7IFt2YWxpZGF0b3JLZXldOiB0cnVlIH0gOiBudWxsO1xuICAgIH07XG5cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodmFsaWRhdG9yRm4sICduYW1lJywge1xuICAgICAgdmFsdWU6IGAke2tleX1WYWxpZGF0b3JgLFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHZhbGlkYXRvckZuO1xuICB9XG5cbiAgLyoqXG4gICAqIEBzdW1tYXJ5IENyZWF0ZXMgYSBwcm94eSB3cmFwcGVyIGZvciBhbiBBbmd1bGFyIEFic3RyYWN0Q29udHJvbCB0byBhc3Npc3Qgd2l0aCBjdXN0b20gdmFsaWRhdGlvbiBsb2dpYy5cbiAgICogQGRlc2NyaXB0aW9uIFJldHVybnMgYSBzdHJ1Y3R1cmVkIHByb3h5IG9iamVjdCB0aGF0IHNpbXVsYXRlcyBhIGhpZXJhcmNoaWNhbCB0cmVlIG9mIGZvcm0gdmFsdWVzLlxuICAgKiBFbmFibGVzIFZhbGlkYXRvcnMgaGFuZGxpbmcgbWV0aG9kIHRvIGFjY2VzcyBwYXJlbnQgYW5kIGNoaWxkIHByb3BlcnRpZXMgdXNpbmcgY29uc2lzdGVudCBkb3Qtbm90YXRpb24gaW4gQW5ndWxhciBmb3Jtcy5cbiAgICpcbiAgICogQHBhcmFtIHtBYnN0cmFjdENvbnRyb2x9IGNvbnRyb2wgLSBUaGUgY29udHJvbCB0byB3cmFwIGluIGEgcHJveHkuXG4gICAqIEByZXR1cm5zIHtQYXRoUHJveHk8dW5rbm93bj59IEEgcHJveHkgb2JqZWN0IGV4cG9zaW5nIGZvcm0gdmFsdWVzIGFuZCBlbmFibGluZyByZWN1cnNpdmUgcGFyZW50IGFjY2Vzcy5cbiAgICovXG4gIHN0YXRpYyBjcmVhdGVQcm94eShjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpOiBQYXRoUHJveHk8dW5rbm93bj4ge1xuICAgIHJldHVybiBQYXRoUHJveHlFbmdpbmUuY3JlYXRlKGNvbnRyb2wsIHtcbiAgICAgIGdldFZhbHVlKHRhcmdldDogQWJzdHJhY3RDb250cm9sLCBwcm9wOiBzdHJpbmcpOiB1bmtub3duIHtcbiAgICAgICAgaWYgKHRhcmdldCBpbnN0YW5jZW9mIEZvcm1Db250cm9sKVxuICAgICAgICAgIHJldHVybiB0YXJnZXQudmFsdWU7XG5cbiAgICAgICAgaWYgKHRhcmdldCBpbnN0YW5jZW9mIEZvcm1Hcm91cCkge1xuICAgICAgICAgIGNvbnN0IGNvbnRyb2wgPSB0YXJnZXQuY29udHJvbHNbcHJvcF07XG4gICAgICAgICAgcmV0dXJuIGNvbnRyb2wgaW5zdGFuY2VvZiBGb3JtQ29udHJvbCA/IGNvbnRyb2wudmFsdWUgOiBjb250cm9sO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gY29uc3QgdmFsdWUgPSB0YXJnZXRbcHJvcF07XG4gICAgICAgIC8vIGlmICh2YWx1ZSBpbnN0YW5jZW9mIEZvcm1Db250cm9sKVxuICAgICAgICAvLyAgIHJldHVybiB2YWx1ZS52YWx1ZTtcbiAgICAgICAgLy9cbiAgICAgICAgLy8gaWYgKHZhbHVlIGluc3RhbmNlb2YgRm9ybUdyb3VwKSB7XG4gICAgICAgIC8vICAgY29uc3QgY29udHJvbCA9IHZhbHVlLmNvbnRyb2xzW3Byb3BdO1xuICAgICAgICAvLyAgIHJldHVybiBjb250cm9sIGluc3RhbmNlb2YgRm9ybUNvbnRyb2wgPyBjb250cm9sLnZhbHVlIDogY29udHJvbDtcbiAgICAgICAgLy8gfVxuXG4gICAgICAgIHJldHVybiAodGFyZ2V0IGFzIEtleVZhbHVlKT8uW3Byb3BdO1xuICAgICAgfSxcbiAgICAgIGdldFBhcmVudDogZnVuY3Rpb24odGFyZ2V0OiBBYnN0cmFjdENvbnRyb2wpICB7XG4gICAgICAgIHJldHVybiB0YXJnZXQ/LlsnX3BhcmVudCddO1xuICAgICAgfSxcbiAgICAgIGlnbm9yZVVuZGVmaW5lZDogdHJ1ZSxcbiAgICAgIGlnbm9yZU51bGw6IHRydWUsXG4gICAgfSk7XG4gIH1cbn1cbiJdfQ==
|