ngx-reactify 0.0.3 → 0.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2022/util/angular-to-react.mjs +187 -113
- package/esm2022/util/react-to-angular.mjs +41 -16
- package/fesm2022/ngx-reactify.mjs +226 -127
- package/fesm2022/ngx-reactify.mjs.map +1 -1
- package/package.json +1 -1
- package/util/angular-to-react.d.ts +113 -19
- package/util/angular-to-react.d.ts.map +1 -1
- package/util/react-to-angular.d.ts +31 -5
- package/util/react-to-angular.d.ts.map +1 -1
|
@@ -10,137 +10,205 @@ import { firstValueFrom } from 'rxjs';
|
|
|
10
10
|
* Usage: An Angular top-level application with a ReactifyNgComponent react implementation
|
|
11
11
|
* that needs to embed Angular components as children of the react-wrapped component.
|
|
12
12
|
*
|
|
13
|
-
*
|
|
14
|
-
* @
|
|
15
|
-
* @param envInjector An `EnvironmentInjector` instance to be used for the component
|
|
16
|
-
* @param injector An `ElementInjector` instance
|
|
17
|
-
* @param _inputs
|
|
18
|
-
* @param _outputs
|
|
19
|
-
* @returns
|
|
13
|
+
* This is replaced by `WrapAngularComponentInReact`.
|
|
14
|
+
* @deprecated
|
|
20
15
|
*/
|
|
21
16
|
export const ReactifyAngularComponent = ({ component, appRef, injector, ngZone, staticInputs = {}, staticOutputs = {}, preSiblings = [], postSiblings = [], additionalChildren = [], rootElementName = '', containerElementName = '' }) => React.memo((args) => {
|
|
22
17
|
return ngZone.runOutsideAngular(() => {
|
|
23
|
-
|
|
18
|
+
let outputSubscriptions;
|
|
19
|
+
let componentInstance;
|
|
20
|
+
const tripChangeDetection = () => componentInstance?.changeDetectorRef?.detectChanges();
|
|
21
|
+
// These attributes will trigger change detection when they fire from
|
|
22
|
+
// the underlying React element.
|
|
23
|
+
// ... This will break things. FUCK.
|
|
24
|
+
const attributes = ['onCopy', 'onCut', 'onPaste', 'onAbort', 'onBlur', 'onFocus', 'onCanPlay', 'onCanPlayThrough', 'onChange', 'onClick', 'onContextMenu', 'onDoubleClick', 'onDrag', 'onDragEnd', 'onDragEnter', 'onDragLeave', 'onDragOver', 'onDragStart', 'onDrop', 'onDurationChange', 'onEmptied', 'onEnded', 'onInput', 'onInvalid', 'onKeyDown', 'onKeyPress', 'onKeyUp', 'onLoad', 'onLoadedData', 'onLoadedMetadata', 'onLoadStart', 'onMouseDown', 'onMouseEnter', 'onMouseLeave', 'onMouseMove', 'onMouseOut', 'onMouseOver', 'onMouseUp', 'onPause', 'onPlay', 'onPlaying', 'onProgress', 'onRateChange', 'onReset', 'onScroll', 'onSeeked', 'onSeeking', 'onSelect', 'onStalled', 'onSubmit', 'onSuspend', 'onTimeUpdate', 'onVolumeChange', 'onWaiting', 'onError'];
|
|
25
|
+
const attrObj = {};
|
|
26
|
+
attributes.forEach(a => attrObj[a] = tripChangeDetection);
|
|
24
27
|
React.useEffect(() => {
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
appRef.attachView(componentInstance.hostView);
|
|
32
|
-
// @ts-ignore
|
|
33
|
-
// component.hostView = hostView;
|
|
34
|
-
Object.assign(staticInputs, args);
|
|
35
|
-
const { inputs, outputs } = component['ɵcmp'];
|
|
36
|
-
// Returns a list of entries that need to be set
|
|
37
|
-
// This makes it so that unnecessary setters are not invoked.
|
|
38
|
-
const updated = Object.entries(inputs).filter(([parentKey, childKey]) => {
|
|
39
|
-
return componentInstance.instance[childKey] != staticInputs[parentKey];
|
|
40
|
-
});
|
|
41
|
-
updated.forEach(([parentKey, childKey]) => {
|
|
42
|
-
if (staticInputs.hasOwnProperty(parentKey))
|
|
43
|
-
componentInstance.instance[childKey] = staticInputs[parentKey];
|
|
44
|
-
});
|
|
45
|
-
const outputSubscriptions = {};
|
|
46
|
-
// Get a list of unregistered outputs
|
|
47
|
-
const newOutputs = Object.entries(outputs).filter(([parentKey, childKey]) => {
|
|
48
|
-
return !outputSubscriptions[parentKey];
|
|
49
|
-
});
|
|
50
|
-
// Reverse bind via subscription
|
|
51
|
-
newOutputs.forEach(([parentKey, childKey]) => {
|
|
52
|
-
if (!staticOutputs.hasOwnProperty(parentKey))
|
|
53
|
-
return;
|
|
54
|
-
const target = componentInstance.instance[childKey];
|
|
55
|
-
const outputs = staticOutputs;
|
|
56
|
-
const sub = target.subscribe((...args) => {
|
|
57
|
-
// Run the callback in the provided zone
|
|
58
|
-
ngZone.run(() => {
|
|
59
|
-
outputs[parentKey](...args);
|
|
60
|
-
});
|
|
61
|
-
}); // Subscription
|
|
62
|
-
outputSubscriptions[parentKey] = sub;
|
|
63
|
-
});
|
|
64
|
-
// Wrap the destroy method to safely release the subscriptions
|
|
65
|
-
const originalDestroy = componentInstance.onDestroy?.bind(componentInstance);
|
|
66
|
-
componentInstance.onDestroy = (cb) => {
|
|
67
|
-
Object.values(outputSubscriptions).forEach(s => s.unsubscribe());
|
|
68
|
-
originalDestroy?.(cb);
|
|
69
|
-
};
|
|
70
|
-
componentInstance.changeDetectorRef.detectChanges();
|
|
71
|
-
}
|
|
72
|
-
catch (err) {
|
|
73
|
-
console.error(err);
|
|
74
|
-
}
|
|
28
|
+
return () => {
|
|
29
|
+
// Code to run when the component unmounts
|
|
30
|
+
appRef?.detachView(componentInstance.hostView);
|
|
31
|
+
Object.values(outputSubscriptions).forEach(s => s.unsubscribe());
|
|
32
|
+
componentInstance?.destroy();
|
|
33
|
+
};
|
|
75
34
|
}, []);
|
|
76
35
|
const elements = [
|
|
77
36
|
...(preSiblings || []),
|
|
78
|
-
React.createElement(containerElementName || "div", {
|
|
37
|
+
React.createElement(containerElementName || "div", {
|
|
38
|
+
...attrObj,
|
|
39
|
+
ref: node => {
|
|
40
|
+
const { inputs, outputs } = component['ɵcmp'];
|
|
41
|
+
if (componentInstance)
|
|
42
|
+
return;
|
|
43
|
+
ngZone.run(() => {
|
|
44
|
+
componentInstance = createComponent(component, {
|
|
45
|
+
environmentInjector: appRef.injector,
|
|
46
|
+
elementInjector: injector,
|
|
47
|
+
hostElement: node
|
|
48
|
+
});
|
|
49
|
+
Object.assign(staticInputs, args);
|
|
50
|
+
appRef.attachView(componentInstance.hostView);
|
|
51
|
+
});
|
|
52
|
+
// Returns a list of entries that need to be set
|
|
53
|
+
// This makes it so that unnecessary setters are not invoked.
|
|
54
|
+
const updated = Object.entries(inputs).filter(([parentKey, childKey]) => {
|
|
55
|
+
return componentInstance.instance[childKey] != staticInputs[parentKey];
|
|
56
|
+
});
|
|
57
|
+
updated.forEach(([parentKey, childKey]) => {
|
|
58
|
+
if (staticInputs.hasOwnProperty(parentKey))
|
|
59
|
+
componentInstance.instance[childKey] = staticInputs[parentKey];
|
|
60
|
+
});
|
|
61
|
+
outputSubscriptions = {};
|
|
62
|
+
// Get a list of unregistered outputs
|
|
63
|
+
const newOutputs = Object.entries(outputs).filter(([parentKey, childKey]) => {
|
|
64
|
+
return !outputSubscriptions[parentKey];
|
|
65
|
+
});
|
|
66
|
+
// Reverse bind via subscription
|
|
67
|
+
newOutputs.forEach(([parentKey, childKey]) => {
|
|
68
|
+
if (!staticOutputs.hasOwnProperty(parentKey))
|
|
69
|
+
return;
|
|
70
|
+
const target = componentInstance.instance[childKey];
|
|
71
|
+
const outputs = staticOutputs;
|
|
72
|
+
const sub = target.subscribe((...args) => {
|
|
73
|
+
// Run the callback in the provided zone
|
|
74
|
+
ngZone.run(() => {
|
|
75
|
+
outputs[parentKey](...args);
|
|
76
|
+
});
|
|
77
|
+
}); // Subscription
|
|
78
|
+
outputSubscriptions[parentKey] = sub;
|
|
79
|
+
});
|
|
80
|
+
// Wrap the destroy method to safely release the subscriptions
|
|
81
|
+
const originalDestroy = componentInstance.onDestroy?.bind(componentInstance);
|
|
82
|
+
componentInstance.onDestroy = (cb) => {
|
|
83
|
+
Object.values(outputSubscriptions).forEach(s => s.unsubscribe());
|
|
84
|
+
originalDestroy?.(cb);
|
|
85
|
+
};
|
|
86
|
+
componentInstance.changeDetectorRef.detectChanges();
|
|
87
|
+
}
|
|
88
|
+
}),
|
|
79
89
|
...(postSiblings || []),
|
|
80
90
|
...(additionalChildren || [])
|
|
81
91
|
].filter(e => e);
|
|
82
92
|
return React.createElement(rootElementName || "div", {}, ...elements);
|
|
83
93
|
});
|
|
84
94
|
});
|
|
85
|
-
// TODO: Remove in major release.
|
|
86
|
-
export const ReactifyReactComponent = ReactifyAngularComponent;
|
|
87
95
|
/**
|
|
88
96
|
* Do not use this.
|
|
89
97
|
* @hidden
|
|
90
98
|
* @experimental
|
|
91
99
|
*/
|
|
92
|
-
export
|
|
100
|
+
export const ng2ReactProps = (obj = {}) => {
|
|
101
|
+
const props = {};
|
|
102
|
+
Object.entries(obj).forEach(([k, v]) => {
|
|
103
|
+
// Omit things prefixed with an underscore
|
|
104
|
+
if (k.startsWith('_'))
|
|
105
|
+
return;
|
|
106
|
+
// Omit output event emitters
|
|
107
|
+
if (v instanceof EventEmitter) {
|
|
108
|
+
props[k] = (...args) => v.emit([args]);
|
|
109
|
+
}
|
|
110
|
+
else {
|
|
111
|
+
props[k] = v;
|
|
112
|
+
}
|
|
113
|
+
});
|
|
114
|
+
return props;
|
|
115
|
+
};
|
|
116
|
+
/**
|
|
117
|
+
* This method will create a React component that
|
|
118
|
+
* wraps an Angular component.
|
|
119
|
+
* @returns React.NamedExoticComponent
|
|
120
|
+
*
|
|
121
|
+
* @hidden
|
|
122
|
+
* @experimental
|
|
123
|
+
*/
|
|
124
|
+
export function WrapAngularComponentInReact({ component, ngZone, appRef, injector, props, containerTag, reactTemplate, projectableNodes }) {
|
|
125
|
+
props ??= {};
|
|
126
|
+
containerTag ??= 'div';
|
|
93
127
|
const ctx = this;
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
}
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
128
|
+
const createWrappedElement = () => {
|
|
129
|
+
reactTemplate ??= (el) => el;
|
|
130
|
+
return React.memo((args) => {
|
|
131
|
+
// Is there a better way to do this?
|
|
132
|
+
let subscriptions;
|
|
133
|
+
let componentInstance;
|
|
134
|
+
Object.assign(props, args);
|
|
135
|
+
React.useEffect(() => {
|
|
136
|
+
return () => {
|
|
137
|
+
// Cleanup and dispose leftover Angular objects
|
|
138
|
+
appRef?.detachView(componentInstance.hostView);
|
|
139
|
+
subscriptions?.forEach(s => s?.unsubscribe());
|
|
140
|
+
componentInstance?.destroy();
|
|
141
|
+
};
|
|
142
|
+
}, []);
|
|
143
|
+
const tripChangeDetection = () => componentInstance?.changeDetectorRef?.detectChanges();
|
|
144
|
+
// These attributes will trigger change detection when they fire from
|
|
145
|
+
// the underlying React element.
|
|
146
|
+
// ... This will break things. FUCK.
|
|
147
|
+
const attributes = ['onCopy', 'onCut', 'onPaste', 'onAbort', 'onBlur', 'onFocus', 'onCanPlay', 'onCanPlayThrough', 'onChange', 'onClick', 'onContextMenu', 'onDoubleClick', 'onDrag', 'onDragEnd', 'onDragEnter', 'onDragLeave', 'onDragOver', 'onDragStart', 'onDrop', 'onDurationChange', 'onEmptied', 'onEnded', 'onInput', 'onInvalid', 'onKeyDown', 'onKeyPress', 'onKeyUp', 'onLoad', 'onLoadedData', 'onLoadedMetadata', 'onLoadStart', 'onMouseDown', 'onMouseEnter', 'onMouseLeave', 'onMouseMove', 'onMouseOut', 'onMouseOver', 'onMouseUp', 'onPause', 'onPlay', 'onPlaying', 'onProgress', 'onRateChange', 'onReset', 'onScroll', 'onSeeked', 'onSeeking', 'onSelect', 'onStalled', 'onSubmit', 'onSuspend', 'onTimeUpdate', 'onVolumeChange', 'onWaiting', 'onError'];
|
|
148
|
+
const attrObj = {};
|
|
149
|
+
attributes.forEach(a => attrObj[a] = tripChangeDetection);
|
|
150
|
+
return reactTemplate(React.createElement(containerTag, {
|
|
151
|
+
...attrObj,
|
|
152
|
+
ref: async (node) => {
|
|
153
|
+
if (componentInstance)
|
|
154
|
+
return;
|
|
155
|
+
// Not sure if this ever actually happens, added as a preventative measure
|
|
156
|
+
// to memory leaks.
|
|
157
|
+
subscriptions?.forEach(s => s?.unsubscribe());
|
|
158
|
+
const bootstrap = () => {
|
|
159
|
+
// Init the Angular component with the context of the root Angular app.
|
|
160
|
+
componentInstance = createComponent(component, {
|
|
161
|
+
environmentInjector: appRef.injector,
|
|
162
|
+
elementInjector: injector,
|
|
163
|
+
hostElement: node,
|
|
164
|
+
projectableNodes: projectableNodes
|
|
165
|
+
});
|
|
166
|
+
appRef.attachView(componentInstance.hostView);
|
|
167
|
+
};
|
|
168
|
+
ngZone?.runTask
|
|
169
|
+
? ngZone?.runTask(bootstrap)
|
|
170
|
+
: bootstrap();
|
|
171
|
+
// Now that everything has settled, bind inputs and outputs.
|
|
172
|
+
subscriptions = [];
|
|
173
|
+
Object.entries(props).filter(([k, v]) => {
|
|
174
|
+
// @Outputs are always Event Emitters (I think)
|
|
175
|
+
if (v instanceof EventEmitter) {
|
|
176
|
+
subscriptions.push(componentInstance.instance[k]?.subscribe(evt => props[k].call(ctx, evt)));
|
|
177
|
+
}
|
|
178
|
+
else {
|
|
179
|
+
componentInstance.instance[k] = props[k];
|
|
180
|
+
}
|
|
181
|
+
});
|
|
182
|
+
componentInstance.changeDetectorRef.detectChanges();
|
|
183
|
+
}
|
|
184
|
+
}));
|
|
141
185
|
});
|
|
142
|
-
}
|
|
186
|
+
};
|
|
187
|
+
return ngZone?.runOutsideAngular
|
|
188
|
+
? ngZone?.runOutsideAngular(createWrappedElement)
|
|
189
|
+
: createWrappedElement();
|
|
143
190
|
}
|
|
191
|
+
/**
|
|
192
|
+
* This method will automatically wrap an Angular
|
|
193
|
+
* Component or Directive into a React object.
|
|
194
|
+
* @Outputs (EventEmitters) will be automatically
|
|
195
|
+
* linked into the input properties along with
|
|
196
|
+
* all of the @Inputs.
|
|
197
|
+
* @returns React.NamedExoticComponent
|
|
198
|
+
* @experimental
|
|
199
|
+
*/
|
|
200
|
+
export const AutoWrapAngularObject = ({ component, appRef, ngZone, instance, injector, containerTag, reactTemplate, }) => {
|
|
201
|
+
const props = ng2ReactProps(instance);
|
|
202
|
+
return WrapAngularComponentInReact({
|
|
203
|
+
component,
|
|
204
|
+
ngZone,
|
|
205
|
+
appRef,
|
|
206
|
+
injector,
|
|
207
|
+
containerTag,
|
|
208
|
+
props,
|
|
209
|
+
reactTemplate
|
|
210
|
+
});
|
|
211
|
+
};
|
|
144
212
|
/**
|
|
145
213
|
* Bootstrap an Angular component with `createApplication` and export it under a
|
|
146
214
|
* react Element.
|
|
@@ -158,7 +226,8 @@ export function ReactifyStandaloneAngularComponent(component, props = {}, provid
|
|
|
158
226
|
app?.destroy();
|
|
159
227
|
};
|
|
160
228
|
}, []);
|
|
161
|
-
return React.createElement(containerTag, {
|
|
229
|
+
return React.createElement(containerTag, {
|
|
230
|
+
ref: async (node) => {
|
|
162
231
|
// Not sure if this ever actually happens, added as a preventative measure
|
|
163
232
|
// to memory leaks.
|
|
164
233
|
subscriptions?.forEach(s => s?.unsubscribe());
|
|
@@ -181,6 +250,11 @@ export function ReactifyStandaloneAngularComponent(component, props = {}, provid
|
|
|
181
250
|
}
|
|
182
251
|
});
|
|
183
252
|
base.changeDetectorRef.detectChanges();
|
|
184
|
-
}
|
|
253
|
+
}
|
|
254
|
+
});
|
|
185
255
|
}
|
|
186
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW5ndWxhci10by1yZWFjdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy91dGlsL2FuZ3VsYXItdG8tcmVhY3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUEwQyxlQUFlLEVBQUUsWUFBWSxFQUFnRCxNQUFNLGVBQWUsQ0FBQztBQUNwSixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUM5RCxPQUFPLEtBQUssS0FBSyxNQUFNLE9BQU8sQ0FBQztBQUMvQixPQUFPLEVBQUUsY0FBYyxFQUFnQixNQUFNLE1BQU0sQ0FBQztBQUdwRDs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFDSCxNQUFNLENBQUMsTUFBTSx3QkFBd0IsR0FBRyxDQUFDLEVBQ3JDLFNBQVMsRUFDVCxNQUFNLEVBQ04sUUFBUSxFQUNSLE1BQU0sRUFDTixZQUFZLEdBQUcsRUFBRSxFQUNqQixhQUFhLEdBQUcsRUFBRSxFQUNsQixXQUFXLEdBQUcsRUFBRSxFQUNoQixZQUFZLEdBQUcsRUFBRSxFQUNqQixrQkFBa0IsR0FBRyxFQUFFLEVBQ3ZCLGVBQWUsR0FBRyxFQUFFLEVBQ3BCLG9CQUFvQixHQUFHLEVBQUUsRUFhNUIsRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFO0lBRXRCLE9BQU8sTUFBTSxDQUFDLGlCQUFpQixDQUFDLEdBQUcsRUFBRTtRQUNqQyxNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDcEMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUU7WUFDakIsSUFBSSxDQUFDO2dCQUVELE1BQU0saUJBQWlCLEdBQUcsZUFBZSxDQUFDLFNBQVMsRUFBRTtvQkFDakQsbUJBQW1CLEVBQUUsTUFBTSxDQUFDLFFBQVE7b0JBQ3BDLGVBQWUsRUFBRSxRQUFRO29CQUN6QixXQUFXLEVBQUUsUUFB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RSxDQUFDLENBQUM7WUFDOUMsR0FBRyxFQUFFLE9BQU8sRUFBRSxDQUFDO1lBRWYsb0VBQW9FO1lBQ3BFLEdBQUcsR0FBRyxNQUFNLGlCQUFpQixDQUFDLEVBQUUsU0FBUyxFQUFFLENBQUMsQ0FBQztZQUM3QyxNQUFNLElBQUksR0FBRyxHQUFHLENBQUMsU0FBUyxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsQ0FBQztZQUM1QyxNQUFNLEVBQUUsUUFBUSxFQUFFLEdBQUcsSUFBSSxDQUFDO1lBRzFCLG1EQUFtRDtZQUNuRCxNQUFNLGNBQWMsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUM7WUFFbkMsNERBQTREO1lBQzVELGFBQWEsR0FBRyxFQUFFLENBQUM7WUFDbkIsTUFBTSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFO2dCQUNwQywrQ0FBK0M7Z0JBQy9DLElBQUksQ0FBQyxZQUFZLFlBQVksRUFBRSxDQUFDO29CQUM1QixhQUFhLENBQUMsSUFBSSxDQUNkLFFBQVEsQ0FBQyxDQUFDLENBQUMsRUFBRSxTQUFTLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUN6RCxDQUFDO2dCQUNOLENBQUM7cUJBQ0ksQ0FBQztvQkFDRixRQUFRLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUMzQixDQUFDO1lBQ0wsQ0FBQyxDQUFDLENBQUM7WUFFSCxJQUFJLENBQUMsaUJBQWlCLENBQUMsYUFBYSxFQUFFLENBQUM7UUFDM0MsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNULENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBUeXBlLCBBcHBsaWNhdGlvblJlZiwgSW5qZWN0b3IsIE5nWm9uZSwgY3JlYXRlQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIFByb3ZpZGVyLCBFbnZpcm9ubWVudFByb3ZpZGVycywgQ29tcG9uZW50UmVmIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBjcmVhdGVBcHBsaWNhdGlvbiB9IGZyb20gJ0Bhbmd1bGFyL3BsYXRmb3JtLWJyb3dzZXInO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgZmlyc3RWYWx1ZUZyb20sIFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuXG5cbi8qKlxuICogV3JhcCBhbiBBbmd1bGFyIGNvbXBvbmVudCBpbnNpZGUgb2YgYSBSZWFjdCBtZW1vIG9iamVjdC5cbiAqIFdpbGwgYXR0ZW1wdCB0byBiaW5kIEBJbnB1dCBhbmQgQE91dHB1dCBwcm9wZXJ0aWVzIGlmIHByb3ZpZGVkLFxuICogYW5kIHdpbGwgYmluZCB0aGUgcmVhY3QgYXJndW1lbnRzIGRpcmVjdGx5IGFzIEBJbnB1dCBwcm9wZXJ0aWVzLlxuICpcbiAqIFVzYWdlOiBBbiBBbmd1bGFyIHRvcC1sZXZlbCBhcHBsaWNhdGlvbiB3aXRoIGEgUmVhY3RpZnlOZ0NvbXBvbmVudCByZWFjdCBpbXBsZW1lbnRhdGlvblxuICogdGhhdCBuZWVkcyB0byBlbWJlZCBBbmd1bGFyIGNvbXBvbmVudHMgYXMgY2hpbGRyZW4gb2YgdGhlIHJlYWN0LXdyYXBwZWQgY29tcG9uZW50LlxuICpcbiAqIEBleHBlcmltZW50YWxcbiAqIEBwYXJhbSBjb21wb25lbnRDbGFzcyBBbmd1bGFyIGNvbXBvbmVudFxuICogQHBhcmFtIGVudkluamVjdG9yICAgIEFuIGBFbnZpcm9ubWVudEluamVjdG9yYCBpbnN0YW5jZSB0byBiZSB1c2VkIGZvciB0aGUgY29tcG9uZW50XG4gKiBAcGFyYW0gaW5qZWN0b3IgICAgICAgQW4gYEVsZW1lbnRJbmplY3RvcmAgaW5zdGFuY2VcbiAqIEBwYXJhbSBfaW5wdXRzXG4gKiBAcGFyYW0gX291dHB1dHNcbiAqIEByZXR1cm5zXG4gKi9cbmV4cG9ydCBjb25zdCBSZWFjdGlmeUFuZ3VsYXJDb21wb25lbnQgPSAoe1xuICAgIGNvbXBvbmVudCxcbiAgICBhcHBSZWYsXG4gICAgaW5qZWN0b3IsXG4gICAgbmdab25lLFxuICAgIHN0YXRpY0lucHV0cyA9IHt9LFxuICAgIHN0YXRpY091dHB1dHMgPSB7fSxcbiAgICBwcmVTaWJsaW5ncyA9IFtdLFxuICAgIHBvc3RTaWJsaW5ncyA9IFtdLFxuICAgIGFkZGl0aW9uYWxDaGlsZHJlbiA9IFtdLFxuICAgIHJvb3RFbGVtZW50TmFtZSA9ICcnLFxuICAgIGNvbnRhaW5lckVsZW1lbnROYW1lID0gJydcbn06IHtcbiAgICBjb21wb25lbnQ6IFR5cGU8YW55PixcbiAgICBhcHBSZWY6IE9taXQ8QXBwbGljYXRpb25SZWYsICdfcnVubmluZ1RpY2snPixcbiAgICBpbmplY3RvcjogSW5qZWN0b3IsXG4gICAgbmdab25lOiBOZ1pvbmUsXG4gICAgc3RhdGljSW5wdXRzPzogeyBba2V5OiBzdHJpbmddOiBhbnk7IH0sXG4gICAgc3RhdGljT3V0cHV0cz86IHsgW2tleTogc3RyaW5nXTogRnVuY3Rpb247IH0sXG4gICAgcHJlU2libGluZ3M/OiBSZWFjdC5SZWFjdE5vZGVbXSxcbiAgICBwb3N0U2libGluZ3M/OiBSZWFjdC5SZWFjdE5vZGVbXSxcbiAgICBhZGRpdGlvbmFsQ2hpbGRyZW4/OiBSZWFjdC5SZWFjdE5vZGVbXSxcbiAgICByb290RWxlbWVudE5hbWU/OiBQYXJhbWV0ZXJzPHR5cGVvZiBSZWFjdC5jcmVhdGVFbGVtZW50PlswXSxcbiAgICBjb250YWluZXJFbGVtZW50TmFtZT86IHN0cmluZztcbn0pID0+IFJlYWN0Lm1lbW8oKGFyZ3MpID0+IHtcblxuICAgIHJldHVybiBuZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT4ge1xuICAgICAgICBjb25zdCBpZCA9IE1hdGgucmFuZG9tKCkudG9TdHJpbmcoKTtcbiAgICAgICAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICAgICAgICAgIHRyeSB7XG5cbiAgICAgICAgICAgICAgICBjb25zdCBjb21wb25lbnRJbnN0YW5jZSA9IGNyZWF0ZUNvbXBvbmVudChjb21wb25lbnQsIHtcbiAgICAgICAgICAgICAgICAgICAgZW52aXJvbm1lbnRJbmplY3RvcjogYXBwUmVmLmluamVjdG9yLFxuICAgICAgICAgICAgICAgICAgICBlbGVtZW50SW5qZWN0b3I6IGluamVjdG9yLFxuICAgICAgICAgICAgICAgICAgICBob3N0RWxlbWVudDogZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQpXG4gICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICBhcHBSZWYuYXR0YWNoVmlldyhjb21wb25lbnRJbnN0YW5jZS5ob3N0Vmlldyk7XG4gICAgICAgICAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICAgICAgICAgIC8vIGNvbXBvbmVudC5ob3N0VmlldyA9IGhvc3RWaWV3O1xuXG4gICAgICAgICAgICAgICAgT2JqZWN0LmFzc2lnbihzdGF0aWNJbnB1dHMsIGFyZ3MpO1xuXG4gICAgICAgICAgICAgICAgY29uc3QgeyBpbnB1dHMsIG91dHB1dHMgfSA9IGNvbXBvbmVudFsnybVjbXAnXTtcblxuICAgICAgICAgICAgICAgIC8vIFJldHVybnMgYSBsaXN0IG9mIGVudHJpZXMgdGhhdCBuZWVkIHRvIGJlIHNldFxuICAgICAgICAgICAgICAgIC8vIFRoaXMgbWFrZXMgaXQgc28gdGhhdCB1bm5lY2Vzc2FyeSBzZXR0ZXJzIGFyZSBub3QgaW52b2tlZC5cbiAgICAgICAgICAgICAgICBjb25zdCB1cGRhdGVkID0gT2JqZWN0LmVudHJpZXMoaW5wdXRzKS5maWx0ZXIoKFtwYXJlbnRLZXksIGNoaWxkS2V5XTogW3N0cmluZywgc3RyaW5nXSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gY29tcG9uZW50SW5zdGFuY2UuaW5zdGFuY2VbY2hpbGRLZXldICE9IHN0YXRpY0lucHV0c1twYXJlbnRLZXldO1xuICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgdXBkYXRlZC5mb3JFYWNoKChbcGFyZW50S2V5LCBjaGlsZEtleV06IFtzdHJpbmcsIHN0cmluZ10pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHN0YXRpY0lucHV0cy5oYXNPd25Qcm9wZXJ0eShwYXJlbnRLZXkpKVxuICAgICAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50SW5zdGFuY2UuaW5zdGFuY2VbY2hpbGRLZXldID0gc3RhdGljSW5wdXRzW3BhcmVudEtleV07XG4gICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICBjb25zdCBvdXRwdXRTdWJzY3JpcHRpb25zOiB7IFtrZXk6IHN0cmluZ106IFN1YnNjcmlwdGlvbjsgfSA9IHt9O1xuICAgICAgICAgICAgICAgIC8vIEdldCBhIGxpc3Qgb2YgdW5yZWdpc3RlcmVkIG91dHB1dHNcbiAgICAgICAgICAgICAgICBjb25zdCBuZXdPdXRwdXRzID0gT2JqZWN0LmVudHJpZXMob3V0cHV0cykuZmlsdGVyKChbcGFyZW50S2V5LCBjaGlsZEtleV06IFtzdHJpbmcsIHN0cmluZ10pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICFvdXRwdXRTdWJzY3JpcHRpb25zW3BhcmVudEtleV07XG4gICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICAvLyBSZXZlcnNlIGJpbmQgdmlhIHN1YnNjcmlwdGlvblxuICAgICAgICAgICAgICAgIG5ld091dHB1dHMuZm9yRWFjaCgoW3BhcmVudEtleSwgY2hpbGRLZXldOiBbc3RyaW5nLCBzdHJpbmddKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghc3RhdGljT3V0cHV0cy5oYXNPd25Qcm9wZXJ0eShwYXJlbnRLZXkpKSByZXR1cm47XG5cbiAgICAgICAgICAgICAgICAgICAgY29uc3QgdGFyZ2V0OiBFdmVudEVtaXR0ZXI8dW5rbm93bj4gPSBjb21wb25lbnRJbnN0YW5jZS5pbnN0YW5jZVtjaGlsZEtleV07XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG91dHB1dHMgPSBzdGF0aWNPdXRwdXRzO1xuXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHN1YiA9IHRhcmdldC5zdWJzY3JpYmUoKC4uLmFyZ3MpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIFJ1biB0aGUgY2FsbGJhY2sgaW4gdGhlIHByb3ZpZGVkIHpvbmVcbiAgICAgICAgICAgICAgICAgICAgICAgIG5nWm9uZS5ydW4oKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dHNbcGFyZW50S2V5XSguLi5hcmdzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9KTsgLy8gU3Vic2NyaXB0aW9uXG5cbiAgICAgICAgICAgICAgICAgICAgb3V0cHV0U3Vic2NyaXB0aW9uc1twYXJlbnRLZXldID0gc3ViO1xuICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgLy8gV3JhcCB0aGUgZGVzdHJveSBtZXRob2QgdG8gc2FmZWx5IHJlbGVhc2UgdGhlIHN1YnNjcmlwdGlvbnNcbiAgICAgICAgICAgICAgICBjb25zdCBvcmlnaW5hbERlc3Ryb3kgPSBjb21wb25lbnRJbnN0YW5jZS5vbkRlc3Ryb3k/LmJpbmQoY29tcG9uZW50SW5zdGFuY2UpO1xuICAgICAgICAgICAgICAgIGNvbXBvbmVudEluc3RhbmNlLm9uRGVzdHJveSA9IChjYikgPT4ge1xuICAgICAgICAgICAgICAgICAgICBPYmplY3QudmFsdWVzKG91dHB1dFN1YnNjcmlwdGlvbnMpLmZvckVhY2gocyA9PiBzLnVuc3Vic2NyaWJlKCkpO1xuICAgICAgICAgICAgICAgICAgICBvcmlnaW5hbERlc3Ryb3k/LihjYik7XG4gICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgIGNvbXBvbmVudEluc3RhbmNlLmNoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKGVycik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sIFtdKTtcblxuICAgICAgICBjb25zdCBlbGVtZW50cyA9IFtcbiAgICAgICAgICAgIC4uLihwcmVTaWJsaW5ncyB8fCBbXSksXG4gICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KGNvbnRhaW5lckVsZW1lbnROYW1lIHx8IFwiZGl2XCIsIHsgaWQgfSksXG4gICAgICAgICAgICAuLi4ocG9zdFNpYmxpbmdzIHx8IFtdKSxcbiAgICAgICAgICAgIC4uLihhZGRpdGlvbmFsQ2hpbGRyZW4gfHwgW10pXG4gICAgICAgIF0uZmlsdGVyKGUgPT4gZSk7XG5cbiAgICAgICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQocm9vdEVsZW1lbnROYW1lIHx8IFwiZGl2XCIsIHt9LCAuLi5lbGVtZW50cyk7XG4gICAgfSlcbn0pO1xuLy8gVE9ETzogUmVtb3ZlIGluIG1ham9yIHJlbGVhc2UuXG5leHBvcnQgY29uc3QgUmVhY3RpZnlSZWFjdENvbXBvbmVudCA9IFJlYWN0aWZ5QW5ndWxhckNvbXBvbmVudDtcblxuLyoqXG4gKiBEbyBub3QgdXNlIHRoaXMuXG4gKiBAaGlkZGVuXG4gKiBAZXhwZXJpbWVudGFsXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBSZWFjdGlmeUFuZ3VsYXJDb21wb25lbnQzKFxuICAgIGNvbXBvbmVudDogVHlwZTxhbnk+LFxuICAgIG5nWm9uZTogTmdab25lLFxuICAgIGFwcFJlZjogT21pdDxBcHBsaWNhdGlvblJlZiwgJ19ydW5uaW5nVGljayc+LFxuICAgIGluamVjdG9yOiBJbmplY3RvcixcbiAgICBwcm9wczogYW55ID0ge30sXG4gICAgY29udGFpbmVyVGFnOiBzdHJpbmcgPSAnZGl2J1xuKSB7XG4gICAgY29uc3QgY3R4ID0gdGhpcztcbiAgICBjb25zb2xlLmxvZyhcIlJlYWN0aWZ5QW5ndWxhckNvbXBvbmVudDNcIilcblxuICAgIHJldHVybiBuZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT4ge1xuICAgICAgICAvLyBJcyB0aGVyZSBhIGJldHRlciB3YXkgdG8gZG8gdGhpcz9cbiAgICAgICAgbGV0IHN1YnNjcmlwdGlvbnM6IFN1YnNjcmlwdGlvbltdO1xuICAgICAgICBsZXQgYXBwOiBBcHBsaWNhdGlvblJlZjtcbiAgICAgICAgbGV0IGNvbXBvbmVudEluc3RhbmNlOiBDb21wb25lbnRSZWY8YW55PjtcblxuICAgICAgICBSZWFjdC51c2VFZmZlY3QoKCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuICgpID0+IHtcbiAgICAgICAgICAgICAgICAvLyBDb2RlIHRvIHJ1biB3aGVuIHRoZSBjb21wb25lbnQgdW5tb3VudHNcbiAgICAgICAgICAgICAgICBzdWJzY3JpcHRpb25zPy5mb3JFYWNoKHMgPT4gcz8udW5zdWJzY3JpYmUoKSk7XG4gICAgICAgICAgICAgICAgLy8gYXBwPy5kZXN0cm95KCk7XG5cbiAgICAgICAgICAgICAgICBhcHBSZWYuZGV0YWNoVmlldyhjb21wb25lbnRJbnN0YW5jZS5ob3N0Vmlldyk7XG4gICAgICAgICAgICB9O1xuICAgICAgICB9LCBbXSk7XG5cbiAgICAgICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoY29udGFpbmVyVGFnLCB7XG4gICAgICAgICAgICByZWY6IGFzeW5jIChub2RlKSA9PiB7XG4gICAgICAgICAgICAgICAgLy8gTm90IHN1cmUgaWYgdGhpcyBldmVyIGFjdHVhbGx5IGhhcHBlbnMsIGFkZGVkIGFzIGEgcHJldmVudGF0aXZlIG1lYXN1cmVcbiAgICAgICAgICAgICAgICAvLyB0byBtZW1vcnkgbGVha3MuXG4gICAgICAgICAgICAgICAgc3Vic2NyaXB0aW9ucz8uZm9yRWFjaChzID0+IHM/LnVuc3Vic2NyaWJlKCkpO1xuICAgICAgICAgICAgICAgIGFwcD8uZGVzdHJveSgpO1xuXG5cbiAgICAgICAgICAgICAgICAvLyBuZ1pvbmUucnVuKGFzeW5jICgpID0+IHtcbiAgICAgICAgICAgICAgICAvLyBJbml0IGFuIEFuZ3VsYXIgYXBwbGljYXRpb24gcm9vdCAmIGJvb3RzdHJhcCBpdCB0byBhIERPTSBlbGVtZW50LlxuXG4gICAgICAgICAgICAgICAgY29tcG9uZW50SW5zdGFuY2UgPSBjcmVhdGVDb21wb25lbnQoY29tcG9uZW50LCB7XG4gICAgICAgICAgICAgICAgICAgIGVudmlyb25tZW50SW5qZWN0b3I6IGFwcFJlZi5pbmplY3RvcixcbiAgICAgICAgICAgICAgICAgICAgZWxlbWVudEluamVjdG9yOiBpbmplY3RvcixcbiAgICAgICAgICAgICAgICAgICAgaG9zdEVsZW1lbnQ6IG5vZGVcbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgIGFwcFJlZi5hdHRhY2hWaWV3KGNvbXBvbmVudEluc3RhbmNlLmhvc3RWaWV3KTtcbiAgICAgICAgICAgICAgICAvLyBhcHAgPSBhd2FpdCBjcmVhdGVBcHBsaWNhdGlvbih7IHByb3ZpZGVycyB9KTtcbiAgICAgICAgICAgICAgICAvLyBjb25zdCBiYXNlID0gYXBwLmJvb3RzdHJhcChjb21wb25lbnQsIG5vZGUpO1xuICAgICAgICAgICAgICAgIC8vIGNvbnN0IHsgaW5zdGFuY2UgfSA9IGJhc2U7XG5cblxuICAgICAgICAgICAgICAgIC8vIFdhaXQgZm9yIHRoZSBKUyB0byBmaW5pc2ggcmVuZGVyaW5nIGFuZCBpbml0aW5nLlxuICAgICAgICAgICAgICAgIC8vIGF3YWl0IGZpcnN0VmFsdWVGcm9tKGFwcC5pc1N0YWJsZSk7XG5cbiAgICAgICAgICAgICAgICAvLyBOb3cgdGhhdCBldmVyeXRoaW5nIGhhcyBzZXR0bGVkLCBiaW5kIGlucHV0cyBhbmQgb3V0cHV0cy5cbiAgICAgICAgICAgICAgICBzdWJzY3JpcHRpb25zID0gW107XG4gICAgICAgICAgICAgICAgT2JqZWN0LmVudHJpZXMocHJvcHMpLmZpbHRlcigoW2ssIHZdKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIC8vIEBPdXRwdXRzIGFyZSBhbHdheXMgRXZlbnQgRW1pdHRlcnMgKEkgdGhpbmspXG4gICAgICAgICAgICAgICAgICAgIGlmICh2IGluc3RhbmNlb2YgRXZlbnRFbWl0dGVyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzdWJzY3JpcHRpb25zLnB1c2goXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50SW5zdGFuY2UuaW5zdGFuY2Vba10/LnN1YnNjcmliZShldnQgPT4gcHJvcHNba10uY2FsbChjdHgsIGV2dCkpXG4gICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50SW5zdGFuY2UuaW5zdGFuY2Vba10gPSBwcm9wc1trXTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIC8vIH0pXG5cbiAgICAgICAgICAgICAgICAvLyBhcHAudGljaygpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9KTtcbn1cblxuXG4vKipcbiAqIEJvb3RzdHJhcCBhbiBBbmd1bGFyIGNvbXBvbmVudCB3aXRoIGBjcmVhdGVBcHBsaWNhdGlvbmAgYW5kIGV4cG9ydCBpdCB1bmRlciBhXG4gKiByZWFjdCBFbGVtZW50LlxuICogVXNhZ2U6IFJlYWN0IHRvcC1sZXZlbCBhcHBsaWNhdGlvbiBlbWJlZGRpbmcgYW4gQW5ndWxhciBjb21wb25lbnQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBSZWFjdGlmeVN0YW5kYWxvbmVBbmd1bGFyQ29tcG9uZW50KFxuICAgIGNvbXBvbmVudDogVHlwZTxhbnk+LFxuICAgIHByb3BzOiBhbnkgPSB7fSxcbiAgICBwcm92aWRlcnM6IChQcm92aWRlciB8IEVudmlyb25tZW50UHJvdmlkZXJzKVtdID0gW10sXG4gICAgY29udGFpbmVyVGFnOiBzdHJpbmcgPSAnZGl2J1xuKSB7XG4gICAgY29uc3QgY3R4ID0gdGhpcztcblxuICAgIC8vIElzIHRoZXJlIGEgYmV0dGVyIHdheSB0byBkbyB0aGlzP1xuICAgIGxldCBzdWJzY3JpcHRpb25zOiBTdWJzY3JpcHRpb25bXTtcbiAgICBsZXQgYXBwOiBBcHBsaWNhdGlvblJlZjtcblxuICAgIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgICAgIHJldHVybiAoKSA9PiB7XG4gICAgICAgICAgICAvLyBDb2RlIHRvIHJ1biB3aGVuIHRoZSBjb21wb25lbnQgdW5tb3VudHNcbiAgICAgICAgICAgIHN1YnNjcmlwdGlvbnM/LmZvckVhY2gocyA9PiBzPy51bnN1YnNjcmliZSgpKTtcbiAgICAgICAgICAgIGFwcD8uZGVzdHJveSgpO1xuICAgICAgICB9O1xuICAgIH0sIFtdKTtcblxuICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KGNvbnRhaW5lclRhZywgeyByZWY6IGFzeW5jIChub2RlKSA9PiB7XG4gICAgICAgIC8vIE5vdCBzdXJlIGlmIHRoaXMgZXZlciBhY3R1YWxseSBoYXBwZW5zLCBhZGRlZCBhcyBhIHByZXZlbnRhdGl2ZSBtZWFzdXJlXG4gICAgICAgIC8vIHRvIG1lbW9yeSBsZWFrcy5cbiAgICAgICAgc3Vic2NyaXB0aW9ucz8uZm9yRWFjaChzID0+IHM/LnVuc3Vic2NyaWJlKCkpO1xuICAgICAgICBhcHA/LmRlc3Ryb3koKTtcblxuICAgICAgICAvLyBJbml0IGFuIEFuZ3VsYXIgYXBwbGljYXRpb24gcm9vdCAmIGJvb3RzdHJhcCBpdCB0byBhIERPTSBlbGVtZW50LlxuICAgICAgICBhcHAgPSBhd2FpdCBjcmVhdGVBcHBsaWNhdGlvbih7IHByb3ZpZGVycyB9KTtcbiAgICAgICAgY29uc3QgYmFzZSA9IGFwcC5ib290c3RyYXAoY29tcG9uZW50LCBub2RlKTtcbiAgICAgICAgY29uc3QgeyBpbnN0YW5jZSB9ID0gYmFzZTtcblxuXG4gICAgICAgIC8vIFdhaXQgZm9yIHRoZSBKUyB0byBmaW5pc2ggcmVuZGVyaW5nIGFuZCBpbml0aW5nLlxuICAgICAgICBhd2FpdCBmaXJzdFZhbHVlRnJvbShhcHAuaXNTdGFibGUpO1xuXG4gICAgICAgIC8vIE5vdyB0aGF0IGV2ZXJ5dGhpbmcgaGFzIHNldHRsZWQsIGJpbmQgaW5wdXRzIGFuZCBvdXRwdXRzLlxuICAgICAgICBzdWJzY3JpcHRpb25zID0gW107XG4gICAgICAgIE9iamVjdC5lbnRyaWVzKHByb3BzKS5maWx0ZXIoKFtrLCB2XSkgPT4ge1xuICAgICAgICAgICAgLy8gQE91dHB1dHMgYXJlIGFsd2F5cyBFdmVudCBFbWl0dGVycyAoSSB0aGluaylcbiAgICAgICAgICAgIGlmICh2IGluc3RhbmNlb2YgRXZlbnRFbWl0dGVyKSB7XG4gICAgICAgICAgICAgICAgc3Vic2NyaXB0aW9ucy5wdXNoKFxuICAgICAgICAgICAgICAgICAgICBpbnN0YW5jZVtrXT8uc3Vic2NyaWJlKGV2dCA9PiBwcm9wc1trXS5jYWxsKGN0eCwgZXZ0KSlcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgaW5zdGFuY2Vba10gPSBwcm9wc1trXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgYmFzZS5jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfSB9KTtcbn1cbiJdfQ==
|
|
256
|
+
// These exports exist to attempt to make the API have minimal breaking changes.
|
|
257
|
+
export const ReactifyReactComponent = ReactifyAngularComponent;
|
|
258
|
+
export const ReactifyAngularComponent3 = WrapAngularComponentInReact;
|
|
259
|
+
;
|
|
260
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW5ndWxhci10by1yZWFjdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy91dGlsL2FuZ3VsYXItdG8tcmVhY3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUEwQyxlQUFlLEVBQUUsWUFBWSxFQUFnRCxNQUFNLGVBQWUsQ0FBQztBQUNwSixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUM5RCxPQUFPLEtBQUssS0FBSyxNQUFNLE9BQU8sQ0FBQztBQUMvQixPQUFPLEVBQUUsY0FBYyxFQUFnQixNQUFNLE1BQU0sQ0FBQztBQUdwRDs7Ozs7Ozs7OztHQVVHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sd0JBQXdCLEdBQUcsQ0FBQyxFQUNyQyxTQUFTLEVBQ1QsTUFBTSxFQUNOLFFBQVEsRUFDUixNQUFNLEVBQ04sWUFBWSxHQUFHLEVBQUUsRUFDakIsYUFBYSxHQUFHLEVBQUUsRUFDbEIsV0FBVyxHQUFHLEVBQUUsRUFDaEIsWUFBWSxHQUFHLEVBQUUsRUFDakIsa0JBQWtCLEdBQUcsRUFBRSxFQUN2QixlQUFlLEdBQUcsRUFBRSxFQUNwQixvQkFBb0IsR0FBRyxFQUFFLEVBYTVCLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRTtJQUV0QixPQUFPLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLEVBQUU7UUFDakMsSUFBSSxtQkFBcUQsQ0FBQztRQUMxRCxJQUFJLGlCQUFvQyxDQUFDO1FBRXpDLE1BQU0sbUJBQW1CLEdBQUcsR0FBRyxFQUFFLENBQzdCLGlCQUFpQixFQUFFLGlCQUFpQixFQUFFLGFBQWEsRUFBRSxDQUFDO1FBRTFELHFFQUFxRTtRQUNyRSxnQ0FBZ0M7UUFDaEMsb0NBQW9DO1FBQ3BDLE1BQU0sVUFBVSxHQUEwQyxDQUFDLFFBQVEsRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxRQUFRLEVB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Q0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQ3pELENBQUM7Z0JBQ04sQ0FBQztxQkFDSSxDQUFDO29CQUNGLFFBQVEsQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQzNCLENBQUM7WUFDTCxDQUFDLENBQUMsQ0FBQztZQUVILElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUMzQyxDQUFDO0tBQ0osQ0FBQyxDQUFDO0FBQ1AsQ0FBQztBQUlELGdGQUFnRjtBQUNoRixNQUFNLENBQUMsTUFBTSxzQkFBc0IsR0FBRyx3QkFBd0IsQ0FBQztBQUMvRCxNQUFNLENBQUMsTUFBTSx5QkFBeUIsR0FBRywyQkFBMkIsQ0FBQztBQUFBLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBUeXBlLCBBcHBsaWNhdGlvblJlZiwgSW5qZWN0b3IsIE5nWm9uZSwgY3JlYXRlQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIFByb3ZpZGVyLCBFbnZpcm9ubWVudFByb3ZpZGVycywgQ29tcG9uZW50UmVmIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBjcmVhdGVBcHBsaWNhdGlvbiB9IGZyb20gJ0Bhbmd1bGFyL3BsYXRmb3JtLWJyb3dzZXInO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgZmlyc3RWYWx1ZUZyb20sIFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuXG5cbi8qKlxuICogV3JhcCBhbiBBbmd1bGFyIGNvbXBvbmVudCBpbnNpZGUgb2YgYSBSZWFjdCBtZW1vIG9iamVjdC5cbiAqIFdpbGwgYXR0ZW1wdCB0byBiaW5kIEBJbnB1dCBhbmQgQE91dHB1dCBwcm9wZXJ0aWVzIGlmIHByb3ZpZGVkLFxuICogYW5kIHdpbGwgYmluZCB0aGUgcmVhY3QgYXJndW1lbnRzIGRpcmVjdGx5IGFzIEBJbnB1dCBwcm9wZXJ0aWVzLlxuICpcbiAqIFVzYWdlOiBBbiBBbmd1bGFyIHRvcC1sZXZlbCBhcHBsaWNhdGlvbiB3aXRoIGEgUmVhY3RpZnlOZ0NvbXBvbmVudCByZWFjdCBpbXBsZW1lbnRhdGlvblxuICogdGhhdCBuZWVkcyB0byBlbWJlZCBBbmd1bGFyIGNvbXBvbmVudHMgYXMgY2hpbGRyZW4gb2YgdGhlIHJlYWN0LXdyYXBwZWQgY29tcG9uZW50LlxuICpcbiAqIFRoaXMgaXMgcmVwbGFjZWQgYnkgYFdyYXBBbmd1bGFyQ29tcG9uZW50SW5SZWFjdGAuXG4gKiBAZGVwcmVjYXRlZFxuICovXG5leHBvcnQgY29uc3QgUmVhY3RpZnlBbmd1bGFyQ29tcG9uZW50ID0gKHtcbiAgICBjb21wb25lbnQsXG4gICAgYXBwUmVmLFxuICAgIGluamVjdG9yLFxuICAgIG5nWm9uZSxcbiAgICBzdGF0aWNJbnB1dHMgPSB7fSxcbiAgICBzdGF0aWNPdXRwdXRzID0ge30sXG4gICAgcHJlU2libGluZ3MgPSBbXSxcbiAgICBwb3N0U2libGluZ3MgPSBbXSxcbiAgICBhZGRpdGlvbmFsQ2hpbGRyZW4gPSBbXSxcbiAgICByb290RWxlbWVudE5hbWUgPSAnJyxcbiAgICBjb250YWluZXJFbGVtZW50TmFtZSA9ICcnXG59OiB7XG4gICAgY29tcG9uZW50OiBUeXBlPGFueT4sXG4gICAgYXBwUmVmOiBPbWl0PEFwcGxpY2F0aW9uUmVmLCAnX3J1bm5pbmdUaWNrJz4sXG4gICAgaW5qZWN0b3I6IEluamVjdG9yLFxuICAgIG5nWm9uZTogTmdab25lLFxuICAgIHN0YXRpY0lucHV0cz86IHsgW2tleTogc3RyaW5nXTogYW55OyB9LFxuICAgIHN0YXRpY091dHB1dHM/OiB7IFtrZXk6IHN0cmluZ106IEZ1bmN0aW9uOyB9LFxuICAgIHByZVNpYmxpbmdzPzogUmVhY3QuUmVhY3ROb2RlW10sXG4gICAgcG9zdFNpYmxpbmdzPzogUmVhY3QuUmVhY3ROb2RlW10sXG4gICAgYWRkaXRpb25hbENoaWxkcmVuPzogUmVhY3QuUmVhY3ROb2RlW10sXG4gICAgcm9vdEVsZW1lbnROYW1lPzogUGFyYW1ldGVyczx0eXBlb2YgUmVhY3QuY3JlYXRlRWxlbWVudD5bMF0sXG4gICAgY29udGFpbmVyRWxlbWVudE5hbWU/OiBzdHJpbmc7XG59KSA9PiBSZWFjdC5tZW1vKChhcmdzKSA9PiB7XG5cbiAgICByZXR1cm4gbmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+IHtcbiAgICAgICAgbGV0IG91dHB1dFN1YnNjcmlwdGlvbnM6IHsgW2tleTogc3RyaW5nXTogU3Vic2NyaXB0aW9uOyB9O1xuICAgICAgICBsZXQgY29tcG9uZW50SW5zdGFuY2U6IENvbXBvbmVudFJlZjxhbnk+O1xuXG4gICAgICAgIGNvbnN0IHRyaXBDaGFuZ2VEZXRlY3Rpb24gPSAoKSA9PlxuICAgICAgICAgICAgY29tcG9uZW50SW5zdGFuY2U/LmNoYW5nZURldGVjdG9yUmVmPy5kZXRlY3RDaGFuZ2VzKCk7XG5cbiAgICAgICAgLy8gVGhlc2UgYXR0cmlidXRlcyB3aWxsIHRyaWdnZXIgY2hhbmdlIGRldGVjdGlvbiB3aGVuIHRoZXkgZmlyZSBmcm9tXG4gICAgICAgIC8vIHRoZSB1bmRlcmx5aW5nIFJlYWN0IGVsZW1lbnQuXG4gICAgICAgIC8vIC4uLiBUaGlzIHdpbGwgYnJlYWsgdGhpbmdzLiBGVUNLLlxuICAgICAgICBjb25zdCBhdHRyaWJ1dGVzOiBBcnJheTxrZXlvZiBSZWFjdC5ET01BdHRyaWJ1dGVzPGFueT4+ID0gWydvbkNvcHknLCAnb25DdXQnLCAnb25QYXN0ZScsICdvbkFib3J0JywgJ29uQmx1cicsICdvbkZvY3VzJywgJ29uQ2FuUGxheScsICdvbkNhblBsYXlUaHJvdWdoJywgJ29uQ2hhbmdlJywgJ29uQ2xpY2snLCAnb25Db250ZXh0TWVudScsICdvbkRvdWJsZUNsaWNrJywgJ29uRHJhZycsICdvbkRyYWdFbmQnLCAnb25EcmFnRW50ZXInLCAnb25EcmFnTGVhdmUnLCAnb25EcmFnT3ZlcicsICdvbkRyYWdTdGFydCcsICdvbkRyb3AnLCAnb25EdXJhdGlvbkNoYW5nZScsICdvbkVtcHRpZWQnLCAnb25FbmRlZCcsICdvbklucHV0JywgJ29uSW52YWxpZCcsICdvbktleURvd24nLCAnb25LZXlQcmVzcycsICdvbktleVVwJywgJ29uTG9hZCcsICdvbkxvYWRlZERhdGEnLCAnb25Mb2FkZWRNZXRhZGF0YScsICdvbkxvYWRTdGFydCcsICdvbk1vdXNlRG93bicsICdvbk1vdXNlRW50ZXInLCAnb25Nb3VzZUxlYXZlJywgJ29uTW91c2VNb3ZlJywgJ29uTW91c2VPdXQnLCAnb25Nb3VzZU92ZXInLCAnb25Nb3VzZVVwJywgJ29uUGF1c2UnLCAnb25QbGF5JywgJ29uUGxheWluZycsICdvblByb2dyZXNzJywgJ29uUmF0ZUNoYW5nZScsICdvblJlc2V0JywgJ29uU2Nyb2xsJywgJ29uU2Vla2VkJywgJ29uU2Vla2luZycsICdvblNlbGVjdCcsICdvblN0YWxsZWQnLCAnb25TdWJtaXQnLCAnb25TdXNwZW5kJywgJ29uVGltZVVwZGF0ZScsICdvblZvbHVtZUNoYW5nZScsICdvbldhaXRpbmcnLCAnb25FcnJvciddO1xuXG4gICAgICAgIGNvbnN0IGF0dHJPYmogPSB7fTtcbiAgICAgICAgYXR0cmlidXRlcy5mb3JFYWNoKGEgPT4gYXR0ck9ialthXSA9IHRyaXBDaGFuZ2VEZXRlY3Rpb24pO1xuXG4gICAgICAgIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgICAgICAgICAgIC8vIENvZGUgdG8gcnVuIHdoZW4gdGhlIGNvbXBvbmVudCB1bm1vdW50c1xuICAgICAgICAgICAgICAgIGFwcFJlZj8uZGV0YWNoVmlldyhjb21wb25lbnRJbnN0YW5jZS5ob3N0Vmlldyk7XG4gICAgICAgICAgICAgICAgT2JqZWN0LnZhbHVlcyhvdXRwdXRTdWJzY3JpcHRpb25zKS5mb3JFYWNoKHMgPT4gcy51bnN1YnNjcmliZSgpKTtcbiAgICAgICAgICAgICAgICBjb21wb25lbnRJbnN0YW5jZT8uZGVzdHJveSgpO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfSwgW10pO1xuXG5cbiAgICAgICAgY29uc3QgZWxlbWVudHMgPSBbXG4gICAgICAgICAgICAuLi4ocHJlU2libGluZ3MgfHwgW10pLFxuICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChjb250YWluZXJFbGVtZW50TmFtZSB8fCBcImRpdlwiLCB7XG4gICAgICAgICAgICAgICAgLi4uYXR0ck9iaixcbiAgICAgICAgICAgICAgICByZWY6IG5vZGUgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB7IGlucHV0cywgb3V0cHV0cyB9ID0gY29tcG9uZW50WyfJtWNtcCddO1xuXG4gICAgICAgICAgICAgICAgICAgIGlmIChjb21wb25lbnRJbnN0YW5jZSkgcmV0dXJuO1xuXG4gICAgICAgICAgICAgICAgICAgIG5nWm9uZS5ydW4oKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50SW5zdGFuY2UgPSBjcmVhdGVDb21wb25lbnQoY29tcG9uZW50LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZW52aXJvbm1lbnRJbmplY3RvcjogYXBwUmVmLmluamVjdG9yLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnRJbmplY3RvcjogaW5qZWN0b3IsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaG9zdEVsZW1lbnQ6IG5vZGVcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBPYmplY3QuYXNzaWduKHN0YXRpY0lucHV0cywgYXJncyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBhcHBSZWYuYXR0YWNoVmlldyhjb21wb25lbnRJbnN0YW5jZS5ob3N0Vmlldyk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgICAgIC8vIFJldHVybnMgYSBsaXN0IG9mIGVudHJpZXMgdGhhdCBuZWVkIHRvIGJlIHNldFxuICAgICAgICAgICAgICAgICAgICAvLyBUaGlzIG1ha2VzIGl0IHNvIHRoYXQgdW5uZWNlc3Nhcnkgc2V0dGVycyBhcmUgbm90IGludm9rZWQuXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHVwZGF0ZWQgPSBPYmplY3QuZW50cmllcyhpbnB1dHMpLmZpbHRlcigoW3BhcmVudEtleSwgY2hpbGRLZXldOiBbc3RyaW5nLCBzdHJpbmddKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY29tcG9uZW50SW5zdGFuY2UuaW5zdGFuY2VbY2hpbGRLZXldICE9IHN0YXRpY0lucHV0c1twYXJlbnRLZXldO1xuICAgICAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgICAgICB1cGRhdGVkLmZvckVhY2goKFtwYXJlbnRLZXksIGNoaWxkS2V5XTogW3N0cmluZywgc3RyaW5nXSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN0YXRpY0lucHV0cy5oYXNPd25Qcm9wZXJ0eShwYXJlbnRLZXkpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudEluc3RhbmNlLmluc3RhbmNlW2NoaWxkS2V5XSA9IHN0YXRpY0lucHV0c1twYXJlbnRLZXldO1xuICAgICAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgICAgICBvdXRwdXRTdWJzY3JpcHRpb25zID0ge307XG4gICAgICAgICAgICAgICAgICAgIC8vIEdldCBhIGxpc3Qgb2YgdW5yZWdpc3RlcmVkIG91dHB1dHNcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbmV3T3V0cHV0cyA9IE9iamVjdC5lbnRyaWVzKG91dHB1dHMpLmZpbHRlcigoW3BhcmVudEtleSwgY2hpbGRLZXldOiBbc3RyaW5nLCBzdHJpbmddKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gIW91dHB1dFN1YnNjcmlwdGlvbnNbcGFyZW50S2V5XTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICAgICAgLy8gUmV2ZXJzZSBiaW5kIHZpYSBzdWJzY3JpcHRpb25cbiAgICAgICAgICAgICAgICAgICAgbmV3T3V0cHV0cy5mb3JFYWNoKChbcGFyZW50S2V5LCBjaGlsZEtleV06IFtzdHJpbmcsIHN0cmluZ10pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghc3RhdGljT3V0cHV0cy5oYXNPd25Qcm9wZXJ0eShwYXJlbnRLZXkpKSByZXR1cm47XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHRhcmdldDogRXZlbnRFbWl0dGVyPHVua25vd24+ID0gY29tcG9uZW50SW5zdGFuY2UuaW5zdGFuY2VbY2hpbGRLZXldO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgb3V0cHV0cyA9IHN0YXRpY091dHB1dHM7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN1YiA9IHRhcmdldC5zdWJzY3JpYmUoKC4uLmFyZ3MpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBSdW4gdGhlIGNhbGxiYWNrIGluIHRoZSBwcm92aWRlZCB6b25lXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmdab25lLnJ1bigoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dHNbcGFyZW50S2V5XSguLi5hcmdzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pOyAvLyBTdWJzY3JpcHRpb25cblxuICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0U3Vic2NyaXB0aW9uc1twYXJlbnRLZXldID0gc3ViO1xuICAgICAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgICAgICAvLyBXcmFwIHRoZSBkZXN0cm95IG1ldGhvZCB0byBzYWZlbHkgcmVsZWFzZSB0aGUgc3Vic2NyaXB0aW9uc1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBvcmlnaW5hbERlc3Ryb3kgPSBjb21wb25lbnRJbnN0YW5jZS5vbkRlc3Ryb3k/LmJpbmQoY29tcG9uZW50SW5zdGFuY2UpO1xuICAgICAgICAgICAgICAgICAgICBjb21wb25lbnRJbnN0YW5jZS5vbkRlc3Ryb3kgPSAoY2IpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIE9iamVjdC52YWx1ZXMob3V0cHV0U3Vic2NyaXB0aW9ucykuZm9yRWFjaChzID0+IHMudW5zdWJzY3JpYmUoKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBvcmlnaW5hbERlc3Ryb3k/LihjYik7XG4gICAgICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50SW5zdGFuY2UuY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgLi4uKHBvc3RTaWJsaW5ncyB8fCBbXSksXG4gICAgICAgICAgICAuLi4oYWRkaXRpb25hbENoaWxkcmVuIHx8IFtdKVxuICAgICAgICBdLmZpbHRlcihlID0+IGUpO1xuXG4gICAgICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KHJvb3RFbGVtZW50TmFtZSB8fCBcImRpdlwiLCB7fSwgLi4uZWxlbWVudHMpO1xuICAgIH0pO1xufSk7XG5cblxuLyoqXG4gKiBEbyBub3QgdXNlIHRoaXMuXG4gKiBAaGlkZGVuXG4gKiBAZXhwZXJpbWVudGFsXG4gKi9cbmV4cG9ydCBjb25zdCBuZzJSZWFjdFByb3BzID0gKG9iaiA9IHt9KSA9PiB7XG4gICAgY29uc3QgcHJvcHMgPSB7fTtcbiAgICBPYmplY3QuZW50cmllcyhvYmopLmZvckVhY2goKFtrLCB2XSkgPT4ge1xuICAgICAgICAvLyBPbWl0IHRoaW5ncyBwcmVmaXhlZCB3aXRoIGFuIHVuZGVyc2NvcmVcbiAgICAgICAgaWYgKGsuc3RhcnRzV2l0aCgnXycpKSByZXR1cm47XG5cbiAgICAgICAgLy8gT21pdCBvdXRwdXQgZXZlbnQgZW1pdHRlcnNcbiAgICAgICAgaWYgKHYgaW5zdGFuY2VvZiBFdmVudEVtaXR0ZXIpIHtcbiAgICAgICAgICAgIHByb3BzW2tdID0gKC4uLmFyZ3MpID0+IHYuZW1pdChbYXJnc10pO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcHJvcHNba10gPSB2O1xuICAgICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIHByb3BzO1xufTtcblxuLyoqXG4gKiBUaGlzIG1ldGhvZCB3aWxsIGNyZWF0ZSBhIFJlYWN0IGNvbXBvbmVudCB0aGF0XG4gKiB3cmFwcyBhbiBBbmd1bGFyIGNvbXBvbmVudC5cbiAqIEByZXR1cm5zIFJlYWN0Lk5hbWVkRXhvdGljQ29tcG9uZW50XG4gKlxuICogQGhpZGRlblxuICogQGV4cGVyaW1lbnRhbFxuICovXG5leHBvcnQgZnVuY3Rpb24gV3JhcEFuZ3VsYXJDb21wb25lbnRJblJlYWN0KHtcbiAgICBjb21wb25lbnQsXG4gICAgbmdab25lLFxuICAgIGFwcFJlZixcbiAgICBpbmplY3RvcixcbiAgICBwcm9wcyxcbiAgICBjb250YWluZXJUYWcsXG4gICAgcmVhY3RUZW1wbGF0ZSxcbiAgICBwcm9qZWN0YWJsZU5vZGVzXG59OiB7XG4gICAgLyoqXG4gICAgICogQW5ndWxhciBDb21wb25lbnQgdG8gYmUgcmVuZGVyZWQgd2l0aGluIFJlYWN0XG4gICAgICovXG4gICAgY29tcG9uZW50OiBUeXBlPGFueT4sXG4gICAgLyoqXG4gICAgICogQW5ndWxhciBBcHBsaWNhdGlvbiBSZWZlcmVuY2UuIFVzZWQgZm9yIGJvb3RzdHJhcHBpbmdcbiAgICAgKiBhbmQgY2hhbmdlIGRldGVjdGlvbiBoaWVyYXJjaHkuXG4gICAgICovXG4gICAgYXBwUmVmOiBPbWl0PEFwcGxpY2F0aW9uUmVmLCAnX3J1bm5pbmdUaWNrJz4sXG4gICAgLyoqXG4gICAgICogSW5zdGFuY2Ugb2YgTmdab25lIGNsYXNzLlxuICAgICAqIFZlcnkgaW1wb3J0YW50IHRvIHByZXZlbnQgWm9uZS5qcyBldmVudCBwZXJmb3JtYW5jZSBpc3N1ZXMuXG4gICAgICogRG8gbm90IHNldCBpZiBydW5uaW5nIFpvbmVsZXNzIENELlxuICAgICAqL1xuICAgIG5nWm9uZT86IE5nWm9uZSxcbiAgICAvKipcbiAgICAgKiBTdGF0aWMgcHJvcGVydGllcyB0byBiZSBwYXNzZWQgaW50byB0aGUgQW5ndWxhciBpbnN0YW5jZS5cbiAgICAgKiBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlcyBldmVudCBwcm94aWVzIGZvciBBbmd1bGFyIEV2ZW50RW1pdHRlcnMuXG4gICAgICovXG4gICAgcHJvcHM/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+LFxuICAgIC8qKlxuICAgICAqIExvY2FsIEVsZW1lbnQgSW5qZWN0b3IgcHJvdmlkZWQgdG8gdGhlIEFuZ3VsYXIgb2JqZWN0XG4gICAgICovXG4gICAgaW5qZWN0b3I/OiBJbmplY3RvcixcbiAgICAvKipcbiAgICAgKiBIVE1MIFRhZyBmb3IgdGhlIGNyZWF0ZWQgRE9NIHdyYXBwZXIuIERlZmF1bHRzIHRvIGBkaXZgLlxuICAgICAqL1xuICAgIGNvbnRhaW5lclRhZz86IHN0cmluZyxcbiAgICAvKipcbiAgICAgKiBSZWFjdCBGdW5jdGlvbiB0ZW1wbGF0ZVxuICAgICAqL1xuICAgIHJlYWN0VGVtcGxhdGU/OiAoZWw6IFJlYWN0LlJlYWN0RWxlbWVudCkgPT4gUmVhY3QuUmVhY3RFbGVtZW50O1xuICAgIC8qKlxuICAgICAqIE5vZGVzIHRvIGJlIHBhc3NlZCB0byB0aGUgYG5nLWNvbnRlbnRgIG9mIHRoZSBjaGlsZCBBbmd1bGFyIGNvbXBvbmVudC5cbiAgICAgKi9cbiAgICBwcm9qZWN0YWJsZU5vZGVzPzogTm9kZVtdW107XG59KSB7XG4gICAgcHJvcHMgPz89IHt9O1xuICAgIGNvbnRhaW5lclRhZyA/Pz0gJ2Rpdic7XG4gICAgY29uc3QgY3R4ID0gdGhpcztcblxuICAgIGNvbnN0IGNyZWF0ZVdyYXBwZWRFbGVtZW50ID0gKCkgPT4ge1xuXG4gICAgICAgIHJlYWN0VGVtcGxhdGUgPz89IChlbCkgPT4gZWw7XG4gICAgICAgIHJldHVybiBSZWFjdC5tZW1vKChhcmdzKSA9PiB7XG4gICAgICAgICAgICAvLyBJcyB0aGVyZSBhIGJldHRlciB3YXkgdG8gZG8gdGhpcz9cbiAgICAgICAgICAgIGxldCBzdWJzY3JpcHRpb25zOiBTdWJzY3JpcHRpb25bXTtcbiAgICAgICAgICAgIGxldCBjb21wb25lbnRJbnN0YW5jZTogQ29tcG9uZW50UmVmPGFueT47XG5cbiAgICAgICAgICAgIE9iamVjdC5hc3NpZ24ocHJvcHMsIGFyZ3MpO1xuXG4gICAgICAgICAgICBSZWFjdC51c2VFZmZlY3QoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIC8vIENsZWFudXAgYW5kIGRpc3Bvc2UgbGVmdG92ZXIgQW5ndWxhciBvYmplY3RzXG4gICAgICAgICAgICAgICAgICAgIGFwcFJlZj8uZGV0YWNoVmlldyhjb21wb25lbnRJbnN0YW5jZS5ob3N0Vmlldyk7XG4gICAgICAgICAgICAgICAgICAgIHN1YnNjcmlwdGlvbnM/LmZvckVhY2gocyA9PiBzPy51bnN1YnNjcmliZSgpKTtcbiAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50SW5zdGFuY2U/LmRlc3Ryb3koKTtcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfSwgW10pO1xuXG4gICAgICAgICAgICBjb25zdCB0cmlwQ2hhbmdlRGV0ZWN0aW9uID0gKCkgPT5cbiAgICAgICAgICAgICAgICBjb21wb25lbnRJbnN0YW5jZT8uY2hhbmdlRGV0ZWN0b3JSZWY/LmRldGVjdENoYW5nZXMoKTtcblxuICAgICAgICAgICAgLy8gVGhlc2UgYXR0cmlidXRlcyB3aWxsIHRyaWdnZXIgY2hhbmdlIGRldGVjdGlvbiB3aGVuIHRoZXkgZmlyZSBmcm9tXG4gICAgICAgICAgICAvLyB0aGUgdW5kZXJseWluZyBSZWFjdCBlbGVtZW50LlxuICAgICAgICAgICAgLy8gLi4uIFRoaXMgd2lsbCBicmVhayB0aGluZ3MuIEZVQ0suXG4gICAgICAgICAgICBjb25zdCBhdHRyaWJ1dGVzOiBBcnJheTxrZXlvZiBSZWFjdC5ET01BdHRyaWJ1dGVzPGFueT4+ID0gWydvbkNvcHknLCAnb25DdXQnLCAnb25QYXN0ZScsICdvbkFib3J0JywgJ29uQmx1cicsICdvbkZvY3VzJywgJ29uQ2FuUGxheScsICdvbkNhblBsYXlUaHJvdWdoJywgJ29uQ2hhbmdlJywgJ29uQ2xpY2snLCAnb25Db250ZXh0TWVudScsICdvbkRvdWJsZUNsaWNrJywgJ29uRHJhZycsICdvbkRyYWdFbmQnLCAnb25EcmFnRW50ZXInLCAnb25EcmFnTGVhdmUnLCAnb25EcmFnT3ZlcicsICdvbkRyYWdTdGFydCcsICdvbkRyb3AnLCAnb25EdXJhdGlvbkNoYW5nZScsICdvbkVtcHRpZWQnLCAnb25FbmRlZCcsICdvbklucHV0JywgJ29uSW52YWxpZCcsICdvbktleURvd24nLCAnb25LZXlQcmVzcycsICdvbktleVVwJywgJ29uTG9hZCcsICdvbkxvYWRlZERhdGEnLCAnb25Mb2FkZWRNZXRhZGF0YScsICdvbkxvYWRTdGFydCcsICdvbk1vdXNlRG93bicsICdvbk1vdXNlRW50ZXInLCAnb25Nb3VzZUxlYXZlJywgJ29uTW91c2VNb3ZlJywgJ29uTW91c2VPdXQnLCAnb25Nb3VzZU92ZXInLCAnb25Nb3VzZVVwJywgJ29uUGF1c2UnLCAnb25QbGF5JywgJ29uUGxheWluZycsICdvblByb2dyZXNzJywgJ29uUmF0ZUNoYW5nZScsICdvblJlc2V0JywgJ29uU2Nyb2xsJywgJ29uU2Vla2VkJywgJ29uU2Vla2luZycsICdvblNlbGVjdCcsICdvblN0YWxsZWQnLCAnb25TdWJtaXQnLCAnb25TdXNwZW5kJywgJ29uVGltZVVwZGF0ZScsICdvblZvbHVtZUNoYW5nZScsICdvbldhaXRpbmcnLCAnb25FcnJvciddO1xuXG4gICAgICAgICAgICBjb25zdCBhdHRyT2JqID0ge307XG4gICAgICAgICAgICBhdHRyaWJ1dGVzLmZvckVhY2goYSA9PiBhdHRyT2JqW2FdID0gdHJpcENoYW5nZURldGVjdGlvbik7XG5cbiAgICAgICAgICAgIHJldHVybiByZWFjdFRlbXBsYXRlKFJlYWN0LmNyZWF0ZUVsZW1lbnQoY29udGFpbmVyVGFnLCB7XG4gICAgICAgICAgICAgICAgLi4uYXR0ck9iaixcbiAgICAgICAgICAgICAgICByZWY6IGFzeW5jIChub2RlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChjb21wb25lbnRJbnN0YW5jZSkgcmV0dXJuO1xuXG4gICAgICAgICAgICAgICAgICAgIC8vIE5vdCBzdXJlIGlmIHRoaXMgZXZlciBhY3R1YWxseSBoYXBwZW5zLCBhZGRlZCBhcyBhIHByZXZlbnRhdGl2ZSBtZWFzdXJlXG4gICAgICAgICAgICAgICAgICAgIC8vIHRvIG1lbW9yeSBsZWFrcy5cbiAgICAgICAgICAgICAgICAgICAgc3Vic2NyaXB0aW9ucz8uZm9yRWFjaChzID0+IHM/LnVuc3Vic2NyaWJlKCkpO1xuXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGJvb3RzdHJhcCA9ICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIEluaXQgdGhlIEFuZ3VsYXIgY29tcG9uZW50IHdpdGggdGhlIGNvbnRleHQgb2YgdGhlIHJvb3QgQW5ndWxhciBhcHAuXG4gICAgICAgICAgICAgICAgICAgICAgICBjb21wb25lbnRJbnN0YW5jZSA9IGNyZWF0ZUNvbXBvbmVudChjb21wb25lbnQsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnZpcm9ubWVudEluamVjdG9yOiBhcHBSZWYuaW5qZWN0b3IsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlbWVudEluamVjdG9yOiBpbmplY3RvcixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBob3N0RWxlbWVudDogbm9kZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9qZWN0YWJsZU5vZGVzOiBwcm9qZWN0YWJsZU5vZGVzXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFwcFJlZi5hdHRhY2hWaWV3KGNvbXBvbmVudEluc3RhbmNlLmhvc3RWaWV3KTtcbiAgICAgICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgICAgICBuZ1pvbmU/LnJ1blRhc2tcbiAgICAgICAgICAgICAgICAgICAgICAgID8gbmdab25lPy5ydW5UYXNrKGJvb3RzdHJhcClcbiAgICAgICAgICAgICAgICAgICAgICAgIDogYm9vdHN0cmFwKCk7XG5cbiAgICAgICAgICAgICAgICAgICAgLy8gTm93IHRoYXQgZXZlcnl0aGluZyBoYXMgc2V0dGxlZCwgYmluZCBpbnB1dHMgYW5kIG91dHB1dHMuXG4gICAgICAgICAgICAgICAgICAgIHN1YnNjcmlwdGlvbnMgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgT2JqZWN0LmVudHJpZXMocHJvcHMpLmZpbHRlcigoW2ssIHZdKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBAT3V0cHV0cyBhcmUgYWx3YXlzIEV2ZW50IEVtaXR0ZXJzIChJIHRoaW5rKVxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHYgaW5zdGFuY2VvZiBFdmVudEVtaXR0ZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWJzY3JpcHRpb25zLnB1c2goXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudEluc3RhbmNlLmluc3RhbmNlW2tdPy5zdWJzY3JpYmUoZXZ0ID0+IHByb3BzW2tdLmNhbGwoY3R4LCBldnQpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wb25lbnRJbnN0YW5jZS5pbnN0YW5jZVtrXSA9IHByb3BzW2tdO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgICAgICBjb21wb25lbnRJbnN0YW5jZS5jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9KTtcbiAgICB9O1xuXG4gICAgcmV0dXJuIG5nWm9uZT8ucnVuT3V0c2lkZUFuZ3VsYXJcbiAgICAgICAgPyBuZ1pvbmU/LnJ1bk91dHNpZGVBbmd1bGFyKGNyZWF0ZVdyYXBwZWRFbGVtZW50KVxuICAgICAgICA6IGNyZWF0ZVdyYXBwZWRFbGVtZW50KCk7XG59XG5cbi8qKlxuICogVGhpcyBtZXRob2Qgd2lsbCBhdXRvbWF0aWNhbGx5IHdyYXAgYW4gQW5ndWxhclxuICogQ29tcG9uZW50IG9yIERpcmVjdGl2ZSBpbnRvIGEgUmVhY3Qgb2JqZWN0LlxuICogQE91dHB1dHMgKEV2ZW50RW1pdHRlcnMpIHdpbGwgYmUgYXV0b21hdGljYWxseVxuICogbGlua2VkIGludG8gdGhlIGlucHV0IHByb3BlcnRpZXMgYWxvbmcgd2l0aFxuICogYWxsIG9mIHRoZSBASW5wdXRzLlxuICogQHJldHVybnMgUmVhY3QuTmFtZWRFeG90aWNDb21wb25lbnRcbiAqIEBleHBlcmltZW50YWxcbiAqL1xuZXhwb3J0IGNvbnN0IEF1dG9XcmFwQW5ndWxhck9iamVjdCA9ICh7XG4gICAgY29tcG9uZW50LFxuICAgIGFwcFJlZixcbiAgICBuZ1pvbmUsXG4gICAgaW5zdGFuY2UsXG4gICAgaW5qZWN0b3IsXG4gICAgY29udGFpbmVyVGFnLFxuICAgIHJlYWN0VGVtcGxhdGUsXG59OiAoUGFyYW1ldGVyczx0eXBlb2YgV3JhcEFuZ3VsYXJDb21wb25lbnRJblJlYWN0PlswXSAmIHtcbiAgICAvKipcbiAgICAgKiBBbmd1bGFyIENvbXBvbmVudC9EaXJlY3RpdmUgaW5zdGFuY2UgdGhhdCB3aWxsIGhhdmUgcHJvcGVydGllcyBib3VuZCB0byB0aGUgY3JlYXRlZFxuICAgICAqL1xuICAgIGluc3RhbmNlPzogSW5zdGFuY2VUeXBlPFR5cGU8YW55Pj4gfCBSZWNvcmQ8c3RyaW5nLCBhbnk+LFxuXG59KSkgPT4ge1xuICAgIGNvbnN0IHByb3BzID0gbmcyUmVhY3RQcm9wcyhpbnN0YW5jZSk7XG5cbiAgICByZXR1cm4gV3JhcEFuZ3VsYXJDb21wb25lbnRJblJlYWN0KHtcbiAgICAgICAgY29tcG9uZW50LFxuICAgICAgICBuZ1pvbmUsXG4gICAgICAgIGFwcFJlZixcbiAgICAgICAgaW5qZWN0b3IsXG4gICAgICAgIGNvbnRhaW5lclRhZyxcbiAgICAgICAgcHJvcHMsXG4gICAgICAgIHJlYWN0VGVtcGxhdGVcbiAgICB9KTtcbn07XG5cbi8qKlxuICogQm9vdHN0cmFwIGFuIEFuZ3VsYXIgY29tcG9uZW50IHdpdGggYGNyZWF0ZUFwcGxpY2F0aW9uYCBhbmQgZXhwb3J0IGl0IHVuZGVyIGFcbiAqIHJlYWN0IEVsZW1lbnQuXG4gKiBVc2FnZTogUmVhY3QgdG9wLWxldmVsIGFwcGxpY2F0aW9uIGVtYmVkZGluZyBhbiBBbmd1bGFyIGNvbXBvbmVudC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIFJlYWN0aWZ5U3RhbmRhbG9uZUFuZ3VsYXJDb21wb25lbnQoXG4gICAgY29tcG9uZW50OiBUeXBlPGFueT4sXG4gICAgcHJvcHM6IGFueSA9IHt9LFxuICAgIHByb3ZpZGVyczogKFByb3ZpZGVyIHwgRW52aXJvbm1lbnRQcm92aWRlcnMpW10gPSBbXSxcbiAgICBjb250YWluZXJUYWc6IHN0cmluZyA9ICdkaXYnXG4pIHtcbiAgICBjb25zdCBjdHggPSB0aGlzO1xuXG4gICAgLy8gSXMgdGhlcmUgYSBiZXR0ZXIgd2F5IHRvIGRvIHRoaXM/XG4gICAgbGV0IHN1YnNjcmlwdGlvbnM6IFN1YnNjcmlwdGlvbltdO1xuICAgIGxldCBhcHA6IEFwcGxpY2F0aW9uUmVmO1xuXG4gICAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICAgICAgcmV0dXJuICgpID0+IHtcbiAgICAgICAgICAgIC8vIENvZGUgdG8gcnVuIHdoZW4gdGhlIGNvbXBvbmVudCB1bm1vdW50c1xuICAgICAgICAgICAgc3Vic2NyaXB0aW9ucz8uZm9yRWFjaChzID0+IHM/LnVuc3Vic2NyaWJlKCkpO1xuICAgICAgICAgICAgYXBwPy5kZXN0cm95KCk7XG4gICAgICAgIH07XG4gICAgfSwgW10pO1xuXG4gICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoY29udGFpbmVyVGFnLCB7XG4gICAgICAgIHJlZjogYXN5bmMgKG5vZGUpID0+IHtcbiAgICAgICAgICAgIC8vIE5vdCBzdXJlIGlmIHRoaXMgZXZlciBhY3R1YWxseSBoYXBwZW5zLCBhZGRlZCBhcyBhIHByZXZlbnRhdGl2ZSBtZWFzdXJlXG4gICAgICAgICAgICAvLyB0byBtZW1vcnkgbGVha3MuXG4gICAgICAgICAgICBzdWJzY3JpcHRpb25zPy5mb3JFYWNoKHMgPT4gcz8udW5zdWJzY3JpYmUoKSk7XG4gICAgICAgICAgICBhcHA/LmRlc3Ryb3koKTtcblxuICAgICAgICAgICAgLy8gSW5pdCBhbiBBbmd1bGFyIGFwcGxpY2F0aW9uIHJvb3QgJiBib290c3RyYXAgaXQgdG8gYSBET00gZWxlbWVudC5cbiAgICAgICAgICAgIGFwcCA9IGF3YWl0IGNyZWF0ZUFwcGxpY2F0aW9uKHsgcHJvdmlkZXJzIH0pO1xuICAgICAgICAgICAgY29uc3QgYmFzZSA9IGFwcC5ib290c3RyYXAoY29tcG9uZW50LCBub2RlKTtcbiAgICAgICAgICAgIGNvbnN0IHsgaW5zdGFuY2UgfSA9IGJhc2U7XG5cblxuICAgICAgICAgICAgLy8gV2FpdCBmb3IgdGhlIEpTIHRvIGZpbmlzaCByZW5kZXJpbmcgYW5kIGluaXRpbmcuXG4gICAgICAgICAgICBhd2FpdCBmaXJzdFZhbHVlRnJvbShhcHAuaXNTdGFibGUpO1xuXG4gICAgICAgICAgICAvLyBOb3cgdGhhdCBldmVyeXRoaW5nIGhhcyBzZXR0bGVkLCBiaW5kIGlucHV0cyBhbmQgb3V0cHV0cy5cbiAgICAgICAgICAgIHN1YnNjcmlwdGlvbnMgPSBbXTtcbiAgICAgICAgICAgIE9iamVjdC5lbnRyaWVzKHByb3BzKS5maWx0ZXIoKFtrLCB2XSkgPT4ge1xuICAgICAgICAgICAgICAgIC8vIEBPdXRwdXRzIGFyZSBhbHdheXMgRXZlbnQgRW1pdHRlcnMgKEkgdGhpbmspXG4gICAgICAgICAgICAgICAgaWYgKHYgaW5zdGFuY2VvZiBFdmVudEVtaXR0ZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgc3Vic2NyaXB0aW9ucy5wdXNoKFxuICAgICAgICAgICAgICAgICAgICAgICAgaW5zdGFuY2Vba10/LnN1YnNjcmliZShldnQgPT4gcHJvcHNba10uY2FsbChjdHgsIGV2dCkpXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBpbnN0YW5jZVtrXSA9IHByb3BzW2tdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBiYXNlLmNoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgfVxuICAgIH0pO1xufVxuXG5cblxuLy8gVGhlc2UgZXhwb3J0cyBleGlzdCB0byBhdHRlbXB0IHRvIG1ha2UgdGhlIEFQSSBoYXZlIG1pbmltYWwgYnJlYWtpbmcgY2hhbmdlcy5cbmV4cG9ydCBjb25zdCBSZWFjdGlmeVJlYWN0Q29tcG9uZW50ID0gUmVhY3RpZnlBbmd1bGFyQ29tcG9uZW50O1xuZXhwb3J0IGNvbnN0IFJlYWN0aWZ5QW5ndWxhckNvbXBvbmVudDMgPSBXcmFwQW5ndWxhckNvbXBvbmVudEluUmVhY3Q7O1xuIl19
|
|
@@ -1,19 +1,44 @@
|
|
|
1
|
-
import { Component } from '@angular/core';
|
|
1
|
+
import { Component, EventEmitter } from '@angular/core';
|
|
2
2
|
import * as React from 'react';
|
|
3
3
|
import { createRoot } from 'react-dom/client';
|
|
4
4
|
import * as i0 from "@angular/core";
|
|
5
5
|
/**
|
|
6
|
-
*
|
|
7
|
-
* bindings
|
|
6
|
+
* This component can be used to automatically wrap a React
|
|
7
|
+
* component into Angular bindings with functional change detection.
|
|
8
|
+
* All you need to provide is the @Input and @Output interface
|
|
9
|
+
* for the component in order to tell Angular which keys correspond to what.
|
|
10
|
+
*
|
|
11
|
+
* ### You _must_ override the property `ngReactComponent`.
|
|
8
12
|
*
|
|
9
|
-
* ! You _must_ override the property `ngReactComponent`
|
|
10
13
|
* Failure to do so will result in errors
|
|
11
|
-
*
|
|
14
|
+
*
|
|
15
|
+
* `override readonly ngReactComponent = SomeReactFunction;`
|
|
16
|
+
*
|
|
17
|
+
* Example:
|
|
18
|
+
*
|
|
19
|
+
* ```ts
|
|
20
|
+
* @Component({
|
|
21
|
+
* selector: "app-react-wrapped",
|
|
22
|
+
* standalone: true
|
|
23
|
+
* })
|
|
24
|
+
* export class MyReactWrappedComponent extends ReactifyNgComponent {
|
|
25
|
+
*
|
|
26
|
+
* @Input() data: any;
|
|
27
|
+
* @Input() options: any;
|
|
28
|
+
* @Input() version: any;
|
|
29
|
+
*
|
|
30
|
+
* // Notice how we wrap the result in an array, this is important because
|
|
31
|
+
* // React can pass multiple properties to a callback and Angular can't.
|
|
32
|
+
* @Output() onClick = new EventEmitter<[any]>();
|
|
33
|
+
*
|
|
34
|
+
* }
|
|
35
|
+
* ```
|
|
12
36
|
*/
|
|
13
37
|
export class ReactifyNgComponent {
|
|
14
38
|
constructor(ngContainer, ngZone) {
|
|
15
39
|
this.ngContainer = ngContainer;
|
|
16
40
|
this.ngZone = ngZone;
|
|
41
|
+
this._props = {};
|
|
17
42
|
}
|
|
18
43
|
ngOnInit() {
|
|
19
44
|
if (!this.ngReactComponent) {
|
|
@@ -41,35 +66,35 @@ export class ReactifyNgComponent {
|
|
|
41
66
|
// List all keys that do not start with `_` nor `ng`
|
|
42
67
|
const keys = Object.keys(this).filter(k => !/^(?:_|ng)/.test(k));
|
|
43
68
|
// Get all property keys from the class
|
|
44
|
-
const propKeys = keys.filter(k => !k
|
|
69
|
+
const propKeys = keys.filter(k => !(this[k] instanceof EventEmitter));
|
|
45
70
|
// Get all event handler keys from the class
|
|
46
|
-
const evtKeys = keys.filter(k => k
|
|
47
|
-
const props = {};
|
|
71
|
+
const evtKeys = keys.filter(k => this[k] instanceof EventEmitter);
|
|
48
72
|
// Project all key properties onto `props`
|
|
49
|
-
propKeys.forEach(k =>
|
|
73
|
+
propKeys.forEach(k => this._props[k] = this[k]);
|
|
50
74
|
// Attempt to ensure no zone is lost during the event emitter fires
|
|
51
75
|
this.ngZone.runGuarded(() => {
|
|
52
76
|
// Bind all event handlers.
|
|
53
77
|
// ! important Angular uses EventEmitter, React uses
|
|
54
78
|
// a different method of event binding
|
|
55
|
-
evtKeys.forEach(k =>
|
|
79
|
+
evtKeys.forEach(k => this._props[k] = (...args) => this[k].next(args));
|
|
56
80
|
});
|
|
57
|
-
this.
|
|
81
|
+
this._reactElement = React.createElement(this.ngReactComponent, { props: this._props });
|
|
82
|
+
this._root.render(this._reactElement);
|
|
58
83
|
}
|
|
59
84
|
catch (err) {
|
|
60
85
|
console.error(err);
|
|
61
86
|
}
|
|
62
87
|
});
|
|
63
88
|
}
|
|
64
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.
|
|
65
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.
|
|
89
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: ReactifyNgComponent, deps: [{ token: i0.ViewContainerRef }, { token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
90
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: ReactifyNgComponent, isStandalone: true, selector: "ngx-reactify", usesOnChanges: true, ngImport: i0, template: ``, isInline: true }); }
|
|
66
91
|
}
|
|
67
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.
|
|
92
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: ReactifyNgComponent, decorators: [{
|
|
68
93
|
type: Component,
|
|
69
94
|
args: [{
|
|
70
|
-
selector: '
|
|
95
|
+
selector: 'ngx-reactify',
|
|
71
96
|
template: ``,
|
|
72
97
|
standalone: true
|
|
73
98
|
}]
|
|
74
99
|
}], ctorParameters: () => [{ type: i0.ViewContainerRef }, { type: i0.NgZone }] });
|
|
75
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
100
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVhY3QtdG8tYW5ndWxhci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy91dGlsL3JlYWN0LXRvLWFuZ3VsYXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFpQixTQUFTLEVBQUUsWUFBWSxFQUFpRSxNQUFNLGVBQWUsQ0FBQztBQUN0SSxPQUFPLEtBQUssS0FBSyxNQUFNLE9BQU8sQ0FBQztBQUMvQixPQUFPLEVBQUUsVUFBVSxFQUFRLE1BQU0sa0JBQWtCLENBQUM7O0FBR3BEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBK0JHO0FBTUgsTUFBTSxPQUFPLG1CQUFtQjtJQWM1QixZQUN1QixXQUE2QixFQUM3QixNQUFjO1FBRGQsZ0JBQVcsR0FBWCxXQUFXLENBQWtCO1FBQzdCLFdBQU0sR0FBTixNQUFNLENBQVE7UUFKN0IsV0FBTSxHQUFXLEVBQUUsQ0FBQztJQU01QixDQUFDO0lBRUQsUUFBUTtRQUNKLElBQUksQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztZQUN6QixNQUFNLElBQUksS0FBSyxDQUFDLDhFQUE4RSxDQUFDLENBQUM7UUFDcEcsQ0FBQztJQUNMLENBQUM7SUFFRCxXQUFXLENBQUMsT0FBdUI7UUFDL0IsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO0lBQ25CLENBQUM7SUFFRCxlQUFlO1FBQ1gsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO0lBQ25CLENBQUM7SUFFRCxXQUFXO1FBQ1AsSUFBSSxDQUFDLEtBQUssRUFBRSxPQUFPLEVBQUUsQ0FBQztJQUMxQixDQUFDO0lBRU8sT0FBTztRQUNYLElBQUksQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztZQUN6QixPQUFPLENBQUMsR0FBRyxDQUFDLDJDQUEyQyxDQUFDLENBQUE7WUFDeEQsT0FBTTtRQUNWLENBQUM7UUFBQSxDQUFDO1FBRUYsSUFBSSxDQUFDLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLEVBQUU7WUFDL0IsSUFBSSxDQUFDO2dCQUNELElBQUksQ0FBQyxLQUFLLEtBQUssVUFBVSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxDQUFDO2dCQUVsRSxvREFBb0Q7Z0JBQ3BELE1BQU0sSUFBSSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBRWpFLHVDQUF1QztnQkFDdkMsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLFlBQVksWUFBWSxDQUFDLENBQUMsQ0FBQztnQkFDdEUsNENBQTRDO2dCQUM1QyxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxZQUFZLFlBQVksQ0FBQyxDQUFDO2dCQUVsRSwwQ0FBMEM7Z0JBQzFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUVoRCxtRUFBbUU7Z0JBQ25FLElBQUksQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLEdBQUcsRUFBRTtvQkFDeEIsMkJBQTJCO29CQUMzQixvREFBb0Q7b0JBQ3BELHNDQUFzQztvQkFDdEMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO2dCQUMzRSxDQUFDLENBQUMsQ0FBQTtnQkFFRixJQUFJLENBQUMsYUFBYSxHQUFHLEtBQUssQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLGdCQUFnQixFQUFFLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxNQUFhLEVBQUUsQ0FBQyxDQUFDO2dCQUMvRixJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7WUFDMUMsQ0FBQztZQUNELE9BQU0sR0FBRyxFQUFFLENBQUM7Z0JBQ1IsT0FBTyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQTtZQUN0QixDQUFDO1FBQ0wsQ0FBQyxDQUFDLENBQUE7SUFDTixDQUFDOytHQTFFUSxtQkFBbUI7bUdBQW5CLG1CQUFtQiw2RkFIbEIsRUFBRTs7NEZBR0gsbUJBQW1CO2tCQUwvQixTQUFTO21CQUFDO29CQUNQLFFBQVEsRUFBRSxjQUFjO29CQUN4QixRQUFRLEVBQUUsRUFBRTtvQkFDWixVQUFVLEVBQUUsSUFBSTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBZnRlclZpZXdJbml0LCBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgTmdab25lLCBPbkNoYW5nZXMsIE9uRGVzdHJveSwgU2ltcGxlQ2hhbmdlcywgVmlld0NvbnRhaW5lclJlZiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgY3JlYXRlUm9vdCwgUm9vdCB9IGZyb20gJ3JlYWN0LWRvbS9jbGllbnQnO1xuXG5cbi8qKlxuICogVGhpcyBjb21wb25lbnQgY2FuIGJlIHVzZWQgdG8gYXV0b21hdGljYWxseSB3cmFwIGEgUmVhY3RcbiAqIGNvbXBvbmVudCBpbnRvIEFuZ3VsYXIgYmluZGluZ3Mgd2l0aCBmdW5jdGlvbmFsIGNoYW5nZSBkZXRlY3Rpb24uXG4gKiBBbGwgeW91IG5lZWQgdG8gcHJvdmlkZSBpcyB0aGUgQElucHV0IGFuZCBAT3V0cHV0IGludGVyZmFjZVxuICogZm9yIHRoZSBjb21wb25lbnQgaW4gb3JkZXIgdG8gdGVsbCBBbmd1bGFyIHdoaWNoIGtleXMgY29ycmVzcG9uZCB0byB3aGF0LlxuICpcbiAqICMjIyBZb3UgX211c3RfIG92ZXJyaWRlIHRoZSBwcm9wZXJ0eSBgbmdSZWFjdENvbXBvbmVudGAuXG4gKlxuICogRmFpbHVyZSB0byBkbyBzbyB3aWxsIHJlc3VsdCBpbiBlcnJvcnNcbiAqXG4gKiBgb3ZlcnJpZGUgcmVhZG9ubHkgbmdSZWFjdENvbXBvbmVudCA9IFNvbWVSZWFjdEZ1bmN0aW9uO2BcbiAqXG4gKiBFeGFtcGxlOlxuICpcbiAqIGBgYHRzXG4gKiAgQENvbXBvbmVudCh7XG4gKiAgICAgIHNlbGVjdG9yOiBcImFwcC1yZWFjdC13cmFwcGVkXCIsXG4gKiAgICAgIHN0YW5kYWxvbmU6IHRydWVcbiAqICB9KVxuICogIGV4cG9ydCBjbGFzcyBNeVJlYWN0V3JhcHBlZENvbXBvbmVudCBleHRlbmRzIFJlYWN0aWZ5TmdDb21wb25lbnQge1xuICpcbiAqICAgICAgQElucHV0KCkgZGF0YTogYW55O1xuICogICAgICBASW5wdXQoKSBvcHRpb25zOiBhbnk7XG4gKiAgICAgIEBJbnB1dCgpIHZlcnNpb246IGFueTtcbiAqXG4gKiAgICAgIC8vIE5vdGljZSBob3cgd2Ugd3JhcCB0aGUgcmVzdWx0IGluIGFuIGFycmF5LCB0aGlzIGlzIGltcG9ydGFudCBiZWNhdXNlXG4gKiAgICAgIC8vIFJlYWN0IGNhbiBwYXNzIG11bHRpcGxlIHByb3BlcnRpZXMgdG8gYSBjYWxsYmFjayBhbmQgQW5ndWxhciBjYW4ndC5cbiAqICAgICAgQE91dHB1dCgpIG9uQ2xpY2sgPSBuZXcgRXZlbnRFbWl0dGVyPFthbnldPigpO1xuICpcbiAqIH1cbiAqIGBgYFxuICovXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ25neC1yZWFjdGlmeScsXG4gICAgdGVtcGxhdGU6IGBgLFxuICAgIHN0YW5kYWxvbmU6IHRydWVcbn0pXG5leHBvcnQgY2xhc3MgUmVhY3RpZnlOZ0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uQ2hhbmdlcywgT25EZXN0cm95LCBBZnRlclZpZXdJbml0IHtcblxuICAgIC8qKlxuICAgICAqIFRoZSByZWFjdCBjb21wb25lbnQgdG8gYmUgd3JhcHBlZC5cbiAgICAgKiAhIE11c3QgYmUgb3ZlcnJpZGRlbiBmb3IgdGhpcyB3cmFwcGVyIHRvIHdvcmtcbiAgICAgKi9cbiAgICBuZ1JlYWN0Q29tcG9uZW50OiBSZWFjdC5GdW5jdGlvbkNvbXBvbmVudDxhbnk+IHwgUmVhY3QuQ29tcG9uZW50Q2xhc3M8YW55PjtcblxuICAgIHByaXZhdGUgX3Jvb3Q6IFJvb3Q7XG5cbiAgICBwcml2YXRlIF9yZWFjdEVsZW1lbnQ6IFJlYWN0LlJlYWN0RWxlbWVudDtcblxuICAgIHByaXZhdGUgX3Byb3BzOiBPYmplY3QgPSB7fTtcblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgbmdDb250YWluZXI6IFZpZXdDb250YWluZXJSZWYsXG4gICAgICAgIHByb3RlY3RlZCByZWFkb25seSBuZ1pvbmU6IE5nWm9uZVxuICAgICkge1xuICAgIH1cblxuICAgIG5nT25Jbml0KCkge1xuICAgICAgICBpZiAoIXRoaXMubmdSZWFjdENvbXBvbmVudCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiUmVhY3RpZnlOZ0NvbXBvbmVudCBjYW5ub3QgYmUgaW5oZXJpdGVkIHdpdGhvdXQgYSBwcm92aWRlZCBuZ1JlYWN0Q29tcG9uZW50IVwiKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG5nT25DaGFuZ2VzKGNoYW5nZXM/OiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3JlbmRlcigpO1xuICAgIH1cblxuICAgIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICAgICAgdGhpcy5fcmVuZGVyKCk7XG4gICAgfVxuXG4gICAgbmdPbkRlc3Ryb3koKSB7XG4gICAgICAgIHRoaXMuX3Jvb3Q/LnVubW91bnQoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9yZW5kZXIoKSB7XG4gICAgICAgIGlmICghdGhpcy5uZ1JlYWN0Q29tcG9uZW50KSB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhcIlJlbmRlciBubyBjb21wb25lbnQuIE1heSBiZSBjb250ZXh0IGlzc3VlXCIpXG4gICAgICAgICAgICByZXR1cm5cbiAgICAgICAgfTtcblxuICAgICAgICB0aGlzLm5nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKSA9PiB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIHRoaXMuX3Jvb3QgPz89IGNyZWF0ZVJvb3QodGhpcy5uZ0NvbnRhaW5lci5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQpO1xuXG4gICAgICAgICAgICAgICAgLy8gTGlzdCBhbGwga2V5cyB0aGF0IGRvIG5vdCBzdGFydCB3aXRoIGBfYCBub3IgYG5nYFxuICAgICAgICAgICAgICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyh0aGlzKS5maWx0ZXIoayA9PiAhL14oPzpffG5nKS8udGVzdChrKSk7XG5cbiAgICAgICAgICAgICAgICAvLyBHZXQgYWxsIHByb3BlcnR5IGtleXMgZnJvbSB0aGUgY2xhc3NcbiAgICAgICAgICAgICAgICBjb25zdCBwcm9wS2V5cyA9IGtleXMuZmlsdGVyKGsgPT4gISh0aGlzW2tdIGluc3RhbmNlb2YgRXZlbnRFbWl0dGVyKSk7XG4gICAgICAgICAgICAgICAgLy8gR2V0IGFsbCBldmVudCBoYW5kbGVyIGtleXMgZnJvbSB0aGUgY2xhc3NcbiAgICAgICAgICAgICAgICBjb25zdCBldnRLZXlzID0ga2V5cy5maWx0ZXIoayA9PiB0aGlzW2tdIGluc3RhbmNlb2YgRXZlbnRFbWl0dGVyKTtcblxuICAgICAgICAgICAgICAgIC8vIFByb2plY3QgYWxsIGtleSBwcm9wZXJ0aWVzIG9udG8gYHByb3BzYFxuICAgICAgICAgICAgICAgIHByb3BLZXlzLmZvckVhY2goayA9PiB0aGlzLl9wcm9wc1trXSA9IHRoaXNba10pO1xuXG4gICAgICAgICAgICAgICAgLy8gQXR0ZW1wdCB0byBlbnN1cmUgbm8gem9uZSBpcyBsb3N0IGR1cmluZyB0aGUgZXZlbnQgZW1pdHRlciBmaXJlc1xuICAgICAgICAgICAgICAgIHRoaXMubmdab25lLnJ1bkd1YXJkZWQoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAvLyBCaW5kIGFsbCBldmVudCBoYW5kbGVycy5cbiAgICAgICAgICAgICAgICAgICAgLy8gISBpbXBvcnRhbnQgQW5ndWxhciB1c2VzIEV2ZW50RW1pdHRlciwgUmVhY3QgdXNlc1xuICAgICAgICAgICAgICAgICAgICAvLyBhIGRpZmZlcmVudCBtZXRob2Qgb2YgZXZlbnQgYmluZGluZ1xuICAgICAgICAgICAgICAgICAgICBldnRLZXlzLmZvckVhY2goayA9PiB0aGlzLl9wcm9wc1trXSA9ICguLi5hcmdzKSA9PiB0aGlzW2tdLm5leHQoYXJncykpO1xuICAgICAgICAgICAgICAgIH0pXG5cbiAgICAgICAgICAgICAgICB0aGlzLl9yZWFjdEVsZW1lbnQgPSBSZWFjdC5jcmVhdGVFbGVtZW50KHRoaXMubmdSZWFjdENvbXBvbmVudCwgeyBwcm9wczogdGhpcy5fcHJvcHMgYXMgYW55IH0pO1xuICAgICAgICAgICAgICAgIHRoaXMuX3Jvb3QucmVuZGVyKHRoaXMuX3JlYWN0RWxlbWVudCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXRjaChlcnIpIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKGVycilcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICB9XG59XG4iXX0=
|