@openelement/core 0.41.0-alpha.1 → 0.41.0-alpha.3
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/package.json +3 -3
- package/src/binding-activation.d.ts +5 -2
- package/src/binding-activation.js +184 -39
- package/src/binding-descriptor.d.ts +32 -4
- package/src/binding-descriptor.js +105 -2
- package/src/csr.d.ts +3 -2
- package/src/csr.js +3 -2
- package/src/event-hydration.js +3 -7
- package/src/event-marker.js +3 -1
- package/src/hydrate.d.ts +5 -3
- package/src/hydrate.js +5 -3
- package/src/hydration-scope.d.ts +43 -0
- package/src/hydration-scope.js +160 -0
- package/src/index.d.ts +7 -7
- package/src/index.js +4 -4
- package/src/island.js +2 -2
- package/src/jsx-render-dom.d.ts +2 -2
- package/src/jsx-render-dom.js +40 -126
- package/src/static.d.ts +1 -1
- package/src/static.js +2 -2
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@openelement/core",
|
|
3
|
-
"version": "0.41.0-alpha.
|
|
3
|
+
"version": "0.41.0-alpha.3",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"main": "./src/index.js",
|
|
6
6
|
"types": "./src/index.d.ts",
|
|
@@ -118,7 +118,7 @@
|
|
|
118
118
|
"deno"
|
|
119
119
|
],
|
|
120
120
|
"dependencies": {
|
|
121
|
-
"@openelement/protocol": "^0.41.0-alpha.
|
|
122
|
-
"@openelement/signal": "^0.41.0-alpha.
|
|
121
|
+
"@openelement/protocol": "^0.41.0-alpha.3",
|
|
122
|
+
"@openelement/signal": "^0.41.0-alpha.3"
|
|
123
123
|
}
|
|
124
124
|
}
|
|
@@ -1,2 +1,5 @@
|
|
|
1
|
-
import type { BindingDescriptor, BindingDispose, BindingLifecycle } from "./binding-descriptor.js";
|
|
2
|
-
|
|
1
|
+
import type { BindingDescriptor, BindingDispose, BindingLifecycle, BindingRenderer } from "./binding-descriptor.js";
|
|
2
|
+
type ApplyFn = (desc: BindingDescriptor, lifecycle: BindingLifecycle, renderer?: BindingRenderer) => BindingDispose;
|
|
3
|
+
/** Register a custom binding kind in the activation registry. */ export declare function registerBindingKind(kind: string, applyFn: ApplyFn): void;
|
|
4
|
+
/** Apply a single binding descriptor and return a dispose function. */ export declare function applyBindingDescriptor(desc: BindingDescriptor, lifecycle: BindingLifecycle, renderer?: BindingRenderer): BindingDispose;
|
|
5
|
+
/** Commit all binding descriptors against the activation layer in document order. */ export declare function commitBindings(descriptors: BindingDescriptor[], lifecycle: BindingLifecycle, renderer?: BindingRenderer): void;
|
|
@@ -6,53 +6,52 @@
|
|
|
6
6
|
* @module @openelement/core/binding-activation
|
|
7
7
|
*/ import { effect, unwrapSignalLike } from '@openelement/signal';
|
|
8
8
|
import { trustRenderHtml } from './security.js';
|
|
9
|
-
import { renderToDom } from './jsx-render-dom.js';
|
|
10
9
|
import { Fragment } from './jsx-runtime.js';
|
|
11
10
|
import { createLogger } from './logger.js';
|
|
12
11
|
import { formatError } from './errors.js';
|
|
13
12
|
const bindingLog = createLogger('binding');
|
|
14
13
|
const noop = ()=>{};
|
|
15
14
|
/** Register a dispose function with the lifecycle. */ export function registerDispose(dispose, lifecycle) {
|
|
16
|
-
lifecycle.disposers?.add(dispose);
|
|
17
15
|
if (lifecycle.signal) {
|
|
18
16
|
lifecycle.signal.addEventListener('abort', dispose, {
|
|
19
17
|
once: true
|
|
20
18
|
});
|
|
19
|
+
} else {
|
|
20
|
+
lifecycle.disposers?.add(dispose);
|
|
21
21
|
}
|
|
22
22
|
}
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
return applySignalHtml(desc, lifecycle);
|
|
41
|
-
case 'signal-render':
|
|
42
|
-
return applySignalRender(desc, lifecycle);
|
|
43
|
-
case 'event':
|
|
44
|
-
return applyEvent(desc, lifecycle);
|
|
45
|
-
case 'ref':
|
|
46
|
-
return applyRef(desc, lifecycle);
|
|
47
|
-
default:
|
|
48
|
-
{
|
|
49
|
-
// Exhaustiveness guard: unknown descriptor kinds are no-ops.
|
|
50
|
-
const _exhaustive = desc;
|
|
51
|
-
void _exhaustive;
|
|
52
|
-
return noop;
|
|
53
|
-
}
|
|
23
|
+
const registry = new Map();
|
|
24
|
+
/** Register a custom binding kind in the activation registry. */ export function registerBindingKind(kind, applyFn) {
|
|
25
|
+
if (registry.has(kind)) {
|
|
26
|
+
bindingLog.warn(`Overwriting registered binding kind: ${kind}`);
|
|
27
|
+
}
|
|
28
|
+
registry.set(kind, applyFn);
|
|
29
|
+
}
|
|
30
|
+
/** Apply a single binding descriptor and return a dispose function. */ export function applyBindingDescriptor(desc, lifecycle, renderer) {
|
|
31
|
+
const apply = registry.get(desc.kind);
|
|
32
|
+
if (apply) {
|
|
33
|
+
return apply(desc, lifecycle, renderer);
|
|
34
|
+
}
|
|
35
|
+
return noop;
|
|
36
|
+
}
|
|
37
|
+
/** Commit all binding descriptors against the activation layer in document order. */ export function commitBindings(descriptors, lifecycle, renderer) {
|
|
38
|
+
for (const desc of descriptors){
|
|
39
|
+
applyBindingDescriptor(desc, lifecycle, renderer);
|
|
54
40
|
}
|
|
55
41
|
}
|
|
42
|
+
registry.set('static-attr', (desc, lifecycle)=>applyStaticAttr(desc, lifecycle));
|
|
43
|
+
registry.set('static-prop', (desc, lifecycle)=>applyStaticProp(desc, lifecycle));
|
|
44
|
+
registry.set('static-boolean', (desc, lifecycle)=>applyStaticBoolean(desc, lifecycle));
|
|
45
|
+
registry.set('static-style', (desc, lifecycle)=>applyStaticStyle(desc, lifecycle));
|
|
46
|
+
registry.set('signal-text', (desc, lifecycle)=>applySignalText(desc, lifecycle));
|
|
47
|
+
registry.set('signal-class', (desc, lifecycle)=>applySignalClass(desc, lifecycle));
|
|
48
|
+
registry.set('signal-attr', (desc, lifecycle)=>applySignalAttr(desc, lifecycle));
|
|
49
|
+
registry.set('signal-html', (desc, lifecycle)=>applySignalHtml(desc, lifecycle));
|
|
50
|
+
registry.set('signal-render', (desc, lifecycle, renderer)=>applySignalRender(desc, lifecycle, renderer));
|
|
51
|
+
registry.set('conditional', (desc, lifecycle, renderer)=>applyConditional(desc, lifecycle, renderer));
|
|
52
|
+
registry.set('list', (desc, lifecycle, renderer)=>applyList(desc, lifecycle, renderer));
|
|
53
|
+
registry.set('event', (desc, lifecycle)=>applyEvent(desc, lifecycle));
|
|
54
|
+
registry.set('ref', (desc, lifecycle)=>applyRef(desc, lifecycle));
|
|
56
55
|
function applyStaticAttr(desc, _lifecycle) {
|
|
57
56
|
if (desc.value == null) {
|
|
58
57
|
desc.el.removeAttribute(desc.attrName);
|
|
@@ -159,8 +158,9 @@ function applySignalHtml(desc, lifecycle) {
|
|
|
159
158
|
registerDispose(dispose, lifecycle);
|
|
160
159
|
return dispose;
|
|
161
160
|
}
|
|
162
|
-
function applySignalRender(desc, lifecycle) {
|
|
161
|
+
function applySignalRender(desc, lifecycle, renderer) {
|
|
163
162
|
const { el, signal } = desc;
|
|
163
|
+
const descLifecycle = desc.lifecycle ?? {};
|
|
164
164
|
let currentChildren = [];
|
|
165
165
|
const currentNestedDisposers = new Set();
|
|
166
166
|
const clearRender = ()=>{
|
|
@@ -181,13 +181,16 @@ function applySignalRender(desc, lifecycle) {
|
|
|
181
181
|
clearRender();
|
|
182
182
|
const raw = unwrapSignalLike(signal.value);
|
|
183
183
|
if (raw == null) return;
|
|
184
|
+
if (!renderer) {
|
|
185
|
+
throw new Error('signal-render binding requires a renderer');
|
|
186
|
+
}
|
|
184
187
|
// Render into a fresh child lifecycle so nested signal effects can be
|
|
185
188
|
// disposed per render without leaking into previous renders.
|
|
186
189
|
const renderLifecycle = {
|
|
187
190
|
disposers: currentNestedDisposers
|
|
188
191
|
};
|
|
189
|
-
if (lifecycle.signal) {
|
|
190
|
-
renderLifecycle.signal = lifecycle.signal;
|
|
192
|
+
if (descLifecycle.signal ?? lifecycle.signal) {
|
|
193
|
+
renderLifecycle.signal = descLifecycle.signal ?? lifecycle.signal;
|
|
191
194
|
}
|
|
192
195
|
// Normalize VNode[] into a Fragment so multiple rendered nodes can be
|
|
193
196
|
// tracked and replaced together across updates.
|
|
@@ -196,8 +199,8 @@ function applySignalRender(desc, lifecycle) {
|
|
|
196
199
|
props: {},
|
|
197
200
|
children: raw
|
|
198
201
|
} : raw;
|
|
199
|
-
const result =
|
|
200
|
-
if (result.nodeType === 11
|
|
202
|
+
const result = renderer.render(node, renderLifecycle);
|
|
203
|
+
if (result.nodeType === 11) {
|
|
201
204
|
const fragChildren = [];
|
|
202
205
|
while(result.firstChild){
|
|
203
206
|
const child = result.firstChild;
|
|
@@ -227,6 +230,148 @@ function applySignalRender(desc, lifecycle) {
|
|
|
227
230
|
registerDispose(fullDispose, lifecycle);
|
|
228
231
|
return fullDispose;
|
|
229
232
|
}
|
|
233
|
+
function applyConditional(desc, lifecycle, renderer) {
|
|
234
|
+
const { anchor, condition, renderTruthy, renderFalsy } = desc;
|
|
235
|
+
let currentChildren = [];
|
|
236
|
+
const currentNestedDisposers = new Set();
|
|
237
|
+
const clearRender = ()=>{
|
|
238
|
+
for (const dispose of currentNestedDisposers){
|
|
239
|
+
try {
|
|
240
|
+
dispose();
|
|
241
|
+
} catch (err) {
|
|
242
|
+
bindingLog.error(`conditional nested dispose failed: ${formatError(err)}`);
|
|
243
|
+
}
|
|
244
|
+
}
|
|
245
|
+
currentNestedDisposers.clear();
|
|
246
|
+
for (const child of currentChildren){
|
|
247
|
+
child.remove();
|
|
248
|
+
}
|
|
249
|
+
currentChildren = [];
|
|
250
|
+
};
|
|
251
|
+
const render = ()=>{
|
|
252
|
+
clearRender();
|
|
253
|
+
const show = Boolean(unwrapSignalLike(condition));
|
|
254
|
+
const target = show ? renderTruthy() : renderFalsy?.();
|
|
255
|
+
if (target == null) return;
|
|
256
|
+
if (!renderer) {
|
|
257
|
+
throw new Error('conditional binding requires a renderer');
|
|
258
|
+
}
|
|
259
|
+
const renderLifecycle = {
|
|
260
|
+
disposers: currentNestedDisposers
|
|
261
|
+
};
|
|
262
|
+
if (lifecycle.signal) {
|
|
263
|
+
renderLifecycle.signal = lifecycle.signal;
|
|
264
|
+
}
|
|
265
|
+
const node = Array.isArray(target) ? {
|
|
266
|
+
tag: Fragment,
|
|
267
|
+
props: {},
|
|
268
|
+
children: target
|
|
269
|
+
} : target;
|
|
270
|
+
const result = renderer.render(node, renderLifecycle);
|
|
271
|
+
if (result.nodeType === 11) {
|
|
272
|
+
const fragChildren = [];
|
|
273
|
+
while(result.firstChild){
|
|
274
|
+
fragChildren.push(result.firstChild);
|
|
275
|
+
}
|
|
276
|
+
const ref = anchor.nextSibling;
|
|
277
|
+
for(let i = fragChildren.length - 1; i >= 0; i--){
|
|
278
|
+
anchor.parentNode?.insertBefore(fragChildren[i], ref);
|
|
279
|
+
}
|
|
280
|
+
currentChildren = fragChildren;
|
|
281
|
+
} else {
|
|
282
|
+
const child = result;
|
|
283
|
+
anchor.parentNode?.insertBefore(child, anchor.nextSibling);
|
|
284
|
+
currentChildren = [
|
|
285
|
+
child
|
|
286
|
+
];
|
|
287
|
+
}
|
|
288
|
+
};
|
|
289
|
+
const dispose = effect(()=>{
|
|
290
|
+
try {
|
|
291
|
+
render();
|
|
292
|
+
} catch (err) {
|
|
293
|
+
bindingLog.error(`conditional binding failed: ${formatError(err)}`);
|
|
294
|
+
}
|
|
295
|
+
});
|
|
296
|
+
const fullDispose = ()=>{
|
|
297
|
+
clearRender();
|
|
298
|
+
dispose();
|
|
299
|
+
};
|
|
300
|
+
registerDispose(fullDispose, lifecycle);
|
|
301
|
+
return fullDispose;
|
|
302
|
+
}
|
|
303
|
+
function applyList(desc, lifecycle, renderer) {
|
|
304
|
+
const { anchor, items, renderItem } = desc;
|
|
305
|
+
let anchors = [];
|
|
306
|
+
const currentNestedDisposers = new Set();
|
|
307
|
+
const clearRender = ()=>{
|
|
308
|
+
for (const dispose of currentNestedDisposers){
|
|
309
|
+
try {
|
|
310
|
+
dispose();
|
|
311
|
+
} catch (err) {
|
|
312
|
+
bindingLog.error(`list nested dispose failed: ${formatError(err)}`);
|
|
313
|
+
}
|
|
314
|
+
}
|
|
315
|
+
currentNestedDisposers.clear();
|
|
316
|
+
for (const a of anchors){
|
|
317
|
+
a.remove();
|
|
318
|
+
}
|
|
319
|
+
anchors = [];
|
|
320
|
+
};
|
|
321
|
+
const render = ()=>{
|
|
322
|
+
clearRender();
|
|
323
|
+
const list = unwrapSignalLike(items);
|
|
324
|
+
if (!Array.isArray(list)) return;
|
|
325
|
+
if (!renderer) {
|
|
326
|
+
throw new Error('list binding requires a renderer');
|
|
327
|
+
}
|
|
328
|
+
const ref = anchor.nextSibling;
|
|
329
|
+
const rendered = [];
|
|
330
|
+
for(let i = 0; i < list.length; i++){
|
|
331
|
+
const renderLifecycle = {
|
|
332
|
+
disposers: currentNestedDisposers
|
|
333
|
+
};
|
|
334
|
+
if (lifecycle.signal) {
|
|
335
|
+
renderLifecycle.signal = lifecycle.signal;
|
|
336
|
+
}
|
|
337
|
+
const vn = renderItem(list[i], i);
|
|
338
|
+
const node = Array.isArray(vn) ? {
|
|
339
|
+
tag: Fragment,
|
|
340
|
+
props: {},
|
|
341
|
+
children: vn
|
|
342
|
+
} : vn;
|
|
343
|
+
const dom = renderer.render(node, renderLifecycle);
|
|
344
|
+
if (dom.nodeType === 11) {
|
|
345
|
+
const fragChildren = [];
|
|
346
|
+
while(dom.firstChild){
|
|
347
|
+
fragChildren.push(dom.firstChild);
|
|
348
|
+
}
|
|
349
|
+
for(let j = fragChildren.length - 1; j >= 0; j--){
|
|
350
|
+
anchor.parentNode?.insertBefore(fragChildren[j], ref);
|
|
351
|
+
}
|
|
352
|
+
rendered.push(...fragChildren);
|
|
353
|
+
} else {
|
|
354
|
+
const child = dom;
|
|
355
|
+
anchor.parentNode?.insertBefore(child, ref);
|
|
356
|
+
rendered.push(child);
|
|
357
|
+
}
|
|
358
|
+
}
|
|
359
|
+
anchors = rendered;
|
|
360
|
+
};
|
|
361
|
+
const dispose = effect(()=>{
|
|
362
|
+
try {
|
|
363
|
+
render();
|
|
364
|
+
} catch (err) {
|
|
365
|
+
bindingLog.error(`list binding failed: ${formatError(err)}`);
|
|
366
|
+
}
|
|
367
|
+
});
|
|
368
|
+
const fullDispose = ()=>{
|
|
369
|
+
clearRender();
|
|
370
|
+
dispose();
|
|
371
|
+
};
|
|
372
|
+
registerDispose(fullDispose, lifecycle);
|
|
373
|
+
return fullDispose;
|
|
374
|
+
}
|
|
230
375
|
function applyEvent(desc, lifecycle) {
|
|
231
376
|
const { el, type, handler, options } = desc;
|
|
232
377
|
const listenerOptions = lifecycle.signal ? {
|
|
@@ -251,4 +396,4 @@ function applyRef(desc, _lifecycle) {
|
|
|
251
396
|
}
|
|
252
397
|
return noop;
|
|
253
398
|
}
|
|
254
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImZpbGU6Ly8vaG9tZS9ydW5uZXIvd29yay9vcGVuZWxlbWVudC9vcGVuZWxlbWVudC9wYWNrYWdlcy9jb3JlL3NyYy9iaW5kaW5nLWFjdGl2YXRpb24udHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAb3BlbmVsZW1lbnQvY29yZSAtIFVuaWZpZWQgYmluZGluZyBhY3RpdmF0aW9uIChBRFItMDEwOSBQaGFzZSAxKS5cbiAqXG4gKiBBcHBsaWVzIGEgZGVjbGFyYXRpdmUgQmluZGluZ0Rlc2NyaXB0b3IgdG8gYSBob3N0IGVsZW1lbnQuXG4gKlxuICogQG1vZHVsZSBAb3BlbmVsZW1lbnQvY29yZS9iaW5kaW5nLWFjdGl2YXRpb25cbiAqL1xuXG5pbXBvcnQgeyBlZmZlY3QsIHVud3JhcFNpZ25hbExpa2UgfSBmcm9tICdAb3BlbmVsZW1lbnQvc2lnbmFsJztcbmltcG9ydCB7IHRydXN0UmVuZGVySHRtbCB9IGZyb20gJy4vc2VjdXJpdHkuanMnO1xuaW1wb3J0IHsgcmVuZGVyVG9Eb20gfSBmcm9tICcuL2pzeC1yZW5kZXItZG9tLmpzJztcbmltcG9ydCB7IEZyYWdtZW50IH0gZnJvbSAnLi9qc3gtcnVudGltZS5qcyc7XG5pbXBvcnQgeyBjcmVhdGVMb2dnZXIgfSBmcm9tICcuL2xvZ2dlci5qcyc7XG5pbXBvcnQgeyBmb3JtYXRFcnJvciB9IGZyb20gJy4vZXJyb3JzLmpzJztcbmltcG9ydCB0eXBlIHsgQmluZGluZ0Rlc2NyaXB0b3IsIEJpbmRpbmdEaXNwb3NlLCBCaW5kaW5nTGlmZWN5Y2xlIH0gZnJvbSAnLi9iaW5kaW5nLWRlc2NyaXB0b3IuanMnO1xuXG5jb25zdCBiaW5kaW5nTG9nID0gY3JlYXRlTG9nZ2VyKCdiaW5kaW5nJyk7XG5cbmNvbnN0IG5vb3A6IEJpbmRpbmdEaXNwb3NlID0gKCkgPT4ge307XG5cbi8qKiBSZWdpc3RlciBhIGRpc3Bvc2UgZnVuY3Rpb24gd2l0aCB0aGUgbGlmZWN5Y2xlLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlZ2lzdGVyRGlzcG9zZShkaXNwb3NlOiBCaW5kaW5nRGlzcG9zZSwgbGlmZWN5Y2xlOiBCaW5kaW5nTGlmZWN5Y2xlKTogdm9pZCB7XG4gIGxpZmVjeWNsZS5kaXNwb3NlcnM/LmFkZChkaXNwb3NlKTtcbiAgaWYgKGxpZmVjeWNsZS5zaWduYWwpIHtcbiAgICBsaWZlY3ljbGUuc2lnbmFsLmFkZEV2ZW50TGlzdGVuZXIoJ2Fib3J0JywgZGlzcG9zZSwgeyBvbmNlOiB0cnVlIH0pO1xuICB9XG59XG5cbi8qKiBBcHBseSBhIHNpbmdsZSBiaW5kaW5nIGRlc2NyaXB0b3IgYW5kIHJldHVybiBhIGRpc3Bvc2UgZnVuY3Rpb24uICovXG5leHBvcnQgZnVuY3Rpb24gYXBwbHlCaW5kaW5nRGVzY3JpcHRvcihcbiAgZGVzYzogQmluZGluZ0Rlc2NyaXB0b3IsXG4gIGxpZmVjeWNsZTogQmluZGluZ0xpZmVjeWNsZSxcbik6IEJpbmRpbmdEaXNwb3NlIHtcbiAgc3dpdGNoIChkZXNjLmtpbmQpIHtcbiAgICBjYXNlICdzdGF0aWMtYXR0cic6XG4gICAgICByZXR1cm4gYXBwbHlTdGF0aWNBdHRyKGRlc2MsIGxpZmVjeWNsZSk7XG4gICAgY2FzZSAnc3RhdGljLXByb3AnOlxuICAgICAgcmV0dXJuIGFwcGx5U3RhdGljUHJvcChkZXNjLCBsaWZlY3ljbGUpO1xuICAgIGNhc2UgJ3N0YXRpYy1ib29sZWFuJzpcbiAgICAgIHJldHVybiBhcHBseVN0YXRpY0Jvb2xlYW4oZGVzYywgbGlmZWN5Y2xlKTtcbiAgICBjYXNlICdzdGF0aWMtc3R5bGUnOlxuICAgICAgcmV0dXJuIGFwcGx5U3RhdGljU3R5bGUoZGVzYywgbGlmZWN5Y2xlKTtcbiAgICBjYXNlICdzaWduYWwtdGV4dCc6XG4gICAgICByZXR1cm4gYXBwbHlTaWduYWxUZXh0KGRlc2MsIGxpZmVjeWNsZSk7XG4gICAgY2FzZSAnc2lnbmFsLWNsYXNzJzpcbiAgICAgIHJldHVybiBhcHBseVNpZ25hbENsYXNzKGRlc2MsIGxpZmVjeWNsZSk7XG4gICAgY2FzZSAnc2lnbmFsLWF0dHInOlxuICAgICAgcmV0dXJuIGFwcGx5U2lnbmFsQXR0cihkZXNjLCBsaWZlY3ljbGUpO1xuICAgIGNhc2UgJ3NpZ25hbC1odG1sJzpcbiAgICAgIHJldHVybiBhcHBseVNpZ25hbEh0bWwoZGVzYywgbGlmZWN5Y2xlKTtcbiAgICBjYXNlICdzaWduYWwtcmVuZGVyJzpcbiAgICAgIHJldHVybiBhcHBseVNpZ25hbFJlbmRlcihkZXNjLCBsaWZlY3ljbGUpO1xuICAgIGNhc2UgJ2V2ZW50JzpcbiAgICAgIHJldHVybiBhcHBseUV2ZW50KGRlc2MsIGxpZmVjeWNsZSk7XG4gICAgY2FzZSAncmVmJzpcbiAgICAgIHJldHVybiBhcHBseVJlZihkZXNjLCBsaWZlY3ljbGUpO1xuICAgIGRlZmF1bHQ6IHtcbiAgICAgIC8vIEV4aGF1c3RpdmVuZXNzIGd1YXJkOiB1bmtub3duIGRlc2NyaXB0b3Iga2luZHMgYXJlIG5vLW9wcy5cbiAgICAgIGNvbnN0IF9leGhhdXN0aXZlOiBuZXZlciA9IGRlc2M7XG4gICAgICB2b2lkIF9leGhhdXN0aXZlO1xuICAgICAgcmV0dXJuIG5vb3A7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGFwcGx5U3RhdGljQXR0cihcbiAgZGVzYzogRXh0cmFjdDxCaW5kaW5nRGVzY3JpcHRvciwgeyBraW5kOiAnc3RhdGljLWF0dHInIH0+LFxuICBfbGlmZWN5Y2xlOiBCaW5kaW5nTGlmZWN5Y2xlLFxuKTogQmluZGluZ0Rpc3Bvc2Uge1xuICBpZiAoZGVzYy52YWx1ZSA9PSBudWxsKSB7XG4gICAgZGVzYy5lbC5yZW1vdmVBdHRyaWJ1dGUoZGVzYy5hdHRyTmFtZSk7XG4gIH0gZWxzZSB7XG4gICAgZGVzYy5lbC5zZXRBdHRyaWJ1dGUoZGVzYy5hdHRyTmFtZSwgU3RyaW5nKGRlc2MudmFsdWUpKTtcbiAgfVxuICByZXR1cm4gbm9vcDtcbn1cblxuZnVuY3Rpb24gYXBwbHlTdGF0aWNQcm9wKFxuICBkZXNjOiBFeHRyYWN0PEJpbmRpbmdEZXNjcmlwdG9yLCB7IGtpbmQ6ICdzdGF0aWMtcHJvcCcgfT4sXG4gIF9saWZlY3ljbGU6IEJpbmRpbmdMaWZlY3ljbGUsXG4pOiBCaW5kaW5nRGlzcG9zZSB7XG4gIChkZXNjLmVsIGFzIHVua25vd24gYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4pW2Rlc2MucHJvcE5hbWVdID0gZGVzYy52YWx1ZTtcbiAgcmV0dXJuIG5vb3A7XG59XG5cbmZ1bmN0aW9uIGFwcGx5U3RhdGljQm9vbGVhbihcbiAgZGVzYzogRXh0cmFjdDxCaW5kaW5nRGVzY3JpcHRvciwgeyBraW5kOiAnc3RhdGljLWJvb2xlYW4nIH0+LFxuICBfbGlmZWN5Y2xlOiBCaW5kaW5nTGlmZWN5Y2xlLFxuKTogQmluZGluZ0Rpc3Bvc2Uge1xuICBpZiAoZGVzYy52YWx1ZSkge1xuICAgIGRlc2MuZWwuc2V0QXR0cmlidXRlKGRlc2MuYXR0ck5hbWUsICcnKTtcbiAgfSBlbHNlIHtcbiAgICBkZXNjLmVsLnJlbW92ZUF0dHJpYnV0ZShkZXNjLmF0dHJOYW1lKTtcbiAgfVxuICByZXR1cm4gbm9vcDtcbn1cblxuZnVuY3Rpb24gYXBwbHlTdGF0aWNTdHlsZShcbiAgZGVzYzogRXh0cmFjdDxCaW5kaW5nRGVzY3JpcHRvciwgeyBraW5kOiAnc3RhdGljLXN0eWxlJyB9PixcbiAgX2xpZmVjeWNsZTogQmluZGluZ0xpZmVjeWNsZSxcbik6IEJpbmRpbmdEaXNwb3NlIHtcbiAgY29uc3QgdGFyZ2V0ID0gZGVzYy5lbCBhcyBIVE1MRWxlbWVudDtcbiAgZm9yIChjb25zdCBbaywgdl0gb2YgT2JqZWN0LmVudHJpZXMoZGVzYy52YWx1ZSkpIHtcbiAgICB0YXJnZXQuc3R5bGUuc2V0UHJvcGVydHkoaywgU3RyaW5nKHYpKTtcbiAgfVxuICByZXR1cm4gbm9vcDtcbn1cblxuZnVuY3Rpb24gYXBwbHlTaWduYWxUZXh0KFxuICBkZXNjOiBFeHRyYWN0PEJpbmRpbmdEZXNjcmlwdG9yLCB7IGtpbmQ6ICdzaWduYWwtdGV4dCcgfT4sXG4gIGxpZmVjeWNsZTogQmluZGluZ0xpZmVjeWNsZSxcbik6IEJpbmRpbmdEaXNwb3NlIHtcbiAgY29uc3QgdGFyZ2V0ID0gZGVzYy5lbCBhcyBUZXh0IHwgRWxlbWVudDtcbiAgY29uc3Qgc2lnID0gZGVzYy5zaWduYWw7XG5cbiAgY29uc3QgdXBkYXRlID0gKCkgPT4ge1xuICAgIGNvbnN0IHZhbHVlID0gdW53cmFwU2lnbmFsTGlrZShzaWcudmFsdWUpO1xuICAgIGNvbnN0IHRleHQgPSB2YWx1ZSA9PSBudWxsID8gJycgOiBTdHJpbmcodmFsdWUpO1xuICAgIHRhcmdldC50ZXh0Q29udGVudCA9IHRleHQ7XG4gIH07XG5cbiAgY29uc3QgZGlzcG9zZSA9IGVmZmVjdCgoKSA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIHVwZGF0ZSgpO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgYmluZGluZ0xvZy5lcnJvcihgc2lnbmFsLXRleHQgYmluZGluZyBmYWlsZWQ6ICR7Zm9ybWF0RXJyb3IoZXJyKX1gKTtcbiAgICB9XG4gIH0pO1xuICByZWdpc3RlckRpc3Bvc2UoZGlzcG9zZSwgbGlmZWN5Y2xlKTtcbiAgcmV0dXJuIGRpc3Bvc2U7XG59XG5cbmZ1bmN0aW9uIGFwcGx5U2lnbmFsQ2xhc3MoXG4gIGRlc2M6IEV4dHJhY3Q8QmluZGluZ0Rlc2NyaXB0b3IsIHsga2luZDogJ3NpZ25hbC1jbGFzcycgfT4sXG4gIGxpZmVjeWNsZTogQmluZGluZ0xpZmVjeWNsZSxcbik6IEJpbmRpbmdEaXNwb3NlIHtcbiAgY29uc3QgeyBlbCwgY2xhc3NOYW1lLCBzaWduYWwgfSA9IGRlc2M7XG5cbiAgY29uc3QgdXBkYXRlID0gKCkgPT4ge1xuICAgIGNvbnN0IHZhbHVlID0gQm9vbGVhbih1bndyYXBTaWduYWxMaWtlKHNpZ25hbC52YWx1ZSkpO1xuICAgIGVsLmNsYXNzTGlzdC50b2dnbGUoY2xhc3NOYW1lLCB2YWx1ZSk7XG4gIH07XG5cbiAgY29uc3QgZGlzcG9zZSA9IGVmZmVjdCgoKSA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIHVwZGF0ZSgpO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgYmluZGluZ0xvZy5lcnJvcihgc2lnbmFsLWNsYXNzIGJpbmRpbmcgZmFpbGVkOiAke2Zvcm1hdEVycm9yKGVycil9YCk7XG4gICAgfVxuICB9KTtcbiAgcmVnaXN0ZXJEaXNwb3NlKGRpc3Bvc2UsIGxpZmVjeWNsZSk7XG4gIHJldHVybiBkaXNwb3NlO1xufVxuXG5mdW5jdGlvbiBhcHBseVNpZ25hbEF0dHIoXG4gIGRlc2M6IEV4dHJhY3Q8QmluZGluZ0Rlc2NyaXB0b3IsIHsga2luZDogJ3NpZ25hbC1hdHRyJyB9PixcbiAgbGlmZWN5Y2xlOiBCaW5kaW5nTGlmZWN5Y2xlLFxuKTogQmluZGluZ0Rpc3Bvc2Uge1xuICBjb25zdCB7IGVsLCBhdHRyTmFtZXMsIHNpZ25hbCB9ID0gZGVzYztcblxuICBjb25zdCB1cGRhdGUgPSAoKSA9PiB7XG4gICAgY29uc3QgdmFsdWUgPSB1bndyYXBTaWduYWxMaWtlKHNpZ25hbC52YWx1ZSk7XG4gICAgZm9yIChjb25zdCBhdHRyTmFtZSBvZiBhdHRyTmFtZXMpIHtcbiAgICAgIGlmICh2YWx1ZSA9PSBudWxsIHx8IHZhbHVlID09PSBmYWxzZSkge1xuICAgICAgICBlbC5yZW1vdmVBdHRyaWJ1dGUoYXR0ck5hbWUpO1xuICAgICAgfSBlbHNlIGlmICh2YWx1ZSA9PT0gdHJ1ZSkge1xuICAgICAgICBlbC5zZXRBdHRyaWJ1dGUoYXR0ck5hbWUsICcnKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGVsLnNldEF0dHJpYnV0ZShhdHRyTmFtZSwgU3RyaW5nKHZhbHVlKSk7XG4gICAgICB9XG4gICAgfVxuICB9O1xuXG4gIGNvbnN0IGRpc3Bvc2UgPSBlZmZlY3QoKCkgPT4ge1xuICAgIHRyeSB7XG4gICAgICB1cGRhdGUoKTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGJpbmRpbmdMb2cuZXJyb3IoYHNpZ25hbC1hdHRyIGJpbmRpbmcgZmFpbGVkOiAke2Zvcm1hdEVycm9yKGVycil9YCk7XG4gICAgfVxuICB9KTtcbiAgcmVnaXN0ZXJEaXNwb3NlKGRpc3Bvc2UsIGxpZmVjeWNsZSk7XG4gIHJldHVybiBkaXNwb3NlO1xufVxuXG5mdW5jdGlvbiBhcHBseVNpZ25hbEh0bWwoXG4gIGRlc2M6IEV4dHJhY3Q8QmluZGluZ0Rlc2NyaXB0b3IsIHsga2luZDogJ3NpZ25hbC1odG1sJyB9PixcbiAgbGlmZWN5Y2xlOiBCaW5kaW5nTGlmZWN5Y2xlLFxuKTogQmluZGluZ0Rpc3Bvc2Uge1xuICBjb25zdCB7IGVsLCBzaWduYWwsIHRydXN0ZWQgfSA9IGRlc2M7XG5cbiAgY29uc3QgdXBkYXRlID0gKCkgPT4ge1xuICAgIGNvbnN0IHJhdyA9IHVud3JhcFNpZ25hbExpa2Uoc2lnbmFsLnZhbHVlKTtcbiAgICBjb25zdCBzdHIgPSByYXcgPT0gbnVsbCA/ICcnIDogU3RyaW5nKHJhdyk7XG4gICAgaWYgKHRydXN0ZWQpIHtcbiAgICAgIGVsLmlubmVySFRNTCA9IHRydXN0UmVuZGVySHRtbChzdHIpO1xuICAgIH0gZWxzZSB7XG4gICAgICBlbC50ZXh0Q29udGVudCA9IHN0cjtcbiAgICB9XG4gIH07XG5cbiAgY29uc3QgZGlzcG9zZSA9IGVmZmVjdCgoKSA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIHVwZGF0ZSgpO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgYmluZGluZ0xvZy5lcnJvcihgc2lnbmFsLWh0bWwgYmluZGluZyBmYWlsZWQ6ICR7Zm9ybWF0RXJyb3IoZXJyKX1gKTtcbiAgICB9XG4gIH0pO1xuICByZWdpc3RlckRpc3Bvc2UoZGlzcG9zZSwgbGlmZWN5Y2xlKTtcbiAgcmV0dXJuIGRpc3Bvc2U7XG59XG5cbmZ1bmN0aW9uIGFwcGx5U2lnbmFsUmVuZGVyKFxuICBkZXNjOiBFeHRyYWN0PEJpbmRpbmdEZXNjcmlwdG9yLCB7IGtpbmQ6ICdzaWduYWwtcmVuZGVyJyB9PixcbiAgbGlmZWN5Y2xlOiBCaW5kaW5nTGlmZWN5Y2xlLFxuKTogQmluZGluZ0Rpc3Bvc2Uge1xuICBjb25zdCB7IGVsLCBzaWduYWwgfSA9IGRlc2M7XG5cbiAgbGV0IGN1cnJlbnRDaGlsZHJlbjogQ2hpbGROb2RlW10gPSBbXTtcbiAgY29uc3QgY3VycmVudE5lc3RlZERpc3Bvc2VycyA9IG5ldyBTZXQ8KCkgPT4gdm9pZD4oKTtcblxuICBjb25zdCBjbGVhclJlbmRlciA9ICgpID0+IHtcbiAgICBmb3IgKGNvbnN0IGRpc3Bvc2Ugb2YgY3VycmVudE5lc3RlZERpc3Bvc2Vycykge1xuICAgICAgdHJ5IHtcbiAgICAgICAgZGlzcG9zZSgpO1xuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIGJpbmRpbmdMb2cuZXJyb3IoYHNpZ25hbC1yZW5kZXIgbmVzdGVkIGRpc3Bvc2UgZmFpbGVkOiAke2Zvcm1hdEVycm9yKGVycil9YCk7XG4gICAgICB9XG4gICAgfVxuICAgIGN1cnJlbnROZXN0ZWREaXNwb3NlcnMuY2xlYXIoKTtcbiAgICBmb3IgKGNvbnN0IGNoaWxkIG9mIGN1cnJlbnRDaGlsZHJlbikge1xuICAgICAgY2hpbGQucmVtb3ZlKCk7XG4gICAgfVxuICAgIGN1cnJlbnRDaGlsZHJlbiA9IFtdO1xuICB9O1xuXG4gIGNvbnN0IHJlbmRlciA9ICgpID0+IHtcbiAgICBjbGVhclJlbmRlcigpO1xuICAgIGNvbnN0IHJhdyA9IHVud3JhcFNpZ25hbExpa2Uoc2lnbmFsLnZhbHVlKTtcbiAgICBpZiAocmF3ID09IG51bGwpIHJldHVybjtcblxuICAgIC8vIFJlbmRlciBpbnRvIGEgZnJlc2ggY2hpbGQgbGlmZWN5Y2xlIHNvIG5lc3RlZCBzaWduYWwgZWZmZWN0cyBjYW4gYmVcbiAgICAvLyBkaXNwb3NlZCBwZXIgcmVuZGVyIHdpdGhvdXQgbGVha2luZyBpbnRvIHByZXZpb3VzIHJlbmRlcnMuXG4gICAgY29uc3QgcmVuZGVyTGlmZWN5Y2xlOiBCaW5kaW5nTGlmZWN5Y2xlID0ge1xuICAgICAgZGlzcG9zZXJzOiBjdXJyZW50TmVzdGVkRGlzcG9zZXJzLFxuICAgIH07XG4gICAgaWYgKGxpZmVjeWNsZS5zaWduYWwpIHtcbiAgICAgIHJlbmRlckxpZmVjeWNsZS5zaWduYWwgPSBsaWZlY3ljbGUuc2lnbmFsO1xuICAgIH1cblxuICAgIC8vIE5vcm1hbGl6ZSBWTm9kZVtdIGludG8gYSBGcmFnbWVudCBzbyBtdWx0aXBsZSByZW5kZXJlZCBub2RlcyBjYW4gYmVcbiAgICAvLyB0cmFja2VkIGFuZCByZXBsYWNlZCB0b2dldGhlciBhY3Jvc3MgdXBkYXRlcy5cbiAgICBjb25zdCBub2RlID0gQXJyYXkuaXNBcnJheShyYXcpID8geyB0YWc6IEZyYWdtZW50LCBwcm9wczoge30sIGNoaWxkcmVuOiByYXcgfSA6IHJhdztcbiAgICBjb25zdCByZXN1bHQgPSByZW5kZXJUb0RvbShub2RlLCByZW5kZXJMaWZlY3ljbGUpO1xuXG4gICAgaWYgKHJlc3VsdC5ub2RlVHlwZSA9PT0gMTEgfHwgcmVzdWx0Lm5vZGVUeXBlID09PSAwKSB7XG4gICAgICBjb25zdCBmcmFnQ2hpbGRyZW46IENoaWxkTm9kZVtdID0gW107XG4gICAgICB3aGlsZSAocmVzdWx0LmZpcnN0Q2hpbGQpIHtcbiAgICAgICAgY29uc3QgY2hpbGQgPSByZXN1bHQuZmlyc3RDaGlsZCBhcyBDaGlsZE5vZGU7XG4gICAgICAgIGZyYWdDaGlsZHJlbi5wdXNoKGNoaWxkKTtcbiAgICAgICAgZWwuYXBwZW5kQ2hpbGQoY2hpbGQpO1xuICAgICAgfVxuICAgICAgY3VycmVudENoaWxkcmVuID0gZnJhZ0NoaWxkcmVuO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBjaGlsZCA9IHJlc3VsdCBhcyBDaGlsZE5vZGU7XG4gICAgICBlbC5hcHBlbmRDaGlsZChjaGlsZCk7XG4gICAgICBjdXJyZW50Q2hpbGRyZW4gPSBbY2hpbGRdO1xuICAgIH1cbiAgfTtcblxuICBjb25zdCBkaXNwb3NlID0gZWZmZWN0KCgpID0+IHtcbiAgICB0cnkge1xuICAgICAgcmVuZGVyKCk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBiaW5kaW5nTG9nLmVycm9yKGBzaWduYWwtcmVuZGVyIGJpbmRpbmcgZmFpbGVkOiAke2Zvcm1hdEVycm9yKGVycil9YCk7XG4gICAgfVxuICB9KTtcblxuICBjb25zdCBmdWxsRGlzcG9zZTogQmluZGluZ0Rpc3Bvc2UgPSAoKSA9PiB7XG4gICAgY2xlYXJSZW5kZXIoKTtcbiAgICBkaXNwb3NlKCk7XG4gIH07XG4gIHJlZ2lzdGVyRGlzcG9zZShmdWxsRGlzcG9zZSwgbGlmZWN5Y2xlKTtcbiAgcmV0dXJuIGZ1bGxEaXNwb3NlO1xufVxuXG5mdW5jdGlvbiBhcHBseUV2ZW50KFxuICBkZXNjOiBFeHRyYWN0PEJpbmRpbmdEZXNjcmlwdG9yLCB7IGtpbmQ6ICdldmVudCcgfT4sXG4gIGxpZmVjeWNsZTogQmluZGluZ0xpZmVjeWNsZSxcbik6IEJpbmRpbmdEaXNwb3NlIHtcbiAgY29uc3QgeyBlbCwgdHlwZSwgaGFuZGxlciwgb3B0aW9ucyB9ID0gZGVzYztcblxuICBjb25zdCBsaXN0ZW5lck9wdGlvbnM6IEFkZEV2ZW50TGlzdGVuZXJPcHRpb25zIHwgYm9vbGVhbiA9IGxpZmVjeWNsZS5zaWduYWxcbiAgICA/IHtcbiAgICAgIC4uLih0eXBlb2Ygb3B0aW9ucyA9PT0gJ29iamVjdCcgJiYgb3B0aW9ucyAhPT0gbnVsbCA/IG9wdGlvbnMgOiB7fSksXG4gICAgICBzaWduYWw6IGxpZmVjeWNsZS5zaWduYWwsXG4gICAgfVxuICAgIDogKG9wdGlvbnMgPz8ge30pO1xuXG4gIGVsLmFkZEV2ZW50TGlzdGVuZXIodHlwZSwgaGFuZGxlciwgbGlzdGVuZXJPcHRpb25zKTtcblxuICBjb25zdCBkaXNwb3NlOiBCaW5kaW5nRGlzcG9zZSA9ICgpID0+IHtcbiAgICBlbC5yZW1vdmVFdmVudExpc3RlbmVyKHR5cGUsIGhhbmRsZXIsIGxpc3RlbmVyT3B0aW9ucyk7XG4gIH07XG5cbiAgLy8gV2hlbiBubyBBYm9ydFNpZ25hbCB3YXMgcHJvdmlkZWQgd2Ugc3RpbGwgd2FudCBhbiBleHBsaWNpdCBkaXNwb3NlIHBhdGguXG4gIGlmICghbGlmZWN5Y2xlLnNpZ25hbCkge1xuICAgIHJlZ2lzdGVyRGlzcG9zZShkaXNwb3NlLCBsaWZlY3ljbGUpO1xuICB9XG4gIHJldHVybiBkaXNwb3NlO1xufVxuXG5mdW5jdGlvbiBhcHBseVJlZihcbiAgZGVzYzogRXh0cmFjdDxCaW5kaW5nRGVzY3JpcHRvciwgeyBraW5kOiAncmVmJyB9PixcbiAgX2xpZmVjeWNsZTogQmluZGluZ0xpZmVjeWNsZSxcbik6IEJpbmRpbmdEaXNwb3NlIHtcbiAgdHJ5IHtcbiAgICBkZXNjLmNhbGxiYWNrKGRlc2MuZWwpO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICBiaW5kaW5nTG9nLmVycm9yKGByZWYgYmluZGluZyBmYWlsZWQ6ICR7Zm9ybWF0RXJyb3IoZXJyKX1gKTtcbiAgfVxuICByZXR1cm4gbm9vcDtcbn1cbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7O0NBTUMsR0FFRCxTQUFTLE1BQU0sRUFBRSxnQkFBZ0IsUUFBUSxzQkFBc0I7QUFDL0QsU0FBUyxlQUFlLFFBQVEsZ0JBQWdCO0FBQ2hELFNBQVMsV0FBVyxRQUFRLHNCQUFzQjtBQUNsRCxTQUFTLFFBQVEsUUFBUSxtQkFBbUI7QUFDNUMsU0FBUyxZQUFZLFFBQVEsY0FBYztBQUMzQyxTQUFTLFdBQVcsUUFBUSxjQUFjO0FBRzFDLE1BQU0sYUFBYSxhQUFhO0FBRWhDLE1BQU0sT0FBdUIsS0FBTztBQUVwQyxvREFBb0QsR0FDcEQsT0FBTyxTQUFTLGdCQUFnQixPQUF1QixFQUFFLFNBQTJCO0VBQ2xGLFVBQVUsU0FBUyxFQUFFLElBQUk7RUFDekIsSUFBSSxVQUFVLE1BQU0sRUFBRTtJQUNwQixVQUFVLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxTQUFTLFNBQVM7TUFBRSxNQUFNO0lBQUs7RUFDbkU7QUFDRjtBQUVBLHFFQUFxRSxHQUNyRSxPQUFPLFNBQVMsdUJBQ2QsSUFBdUIsRUFDdkIsU0FBMkI7RUFFM0IsT0FBUSxLQUFLLElBQUk7SUFDZixLQUFLO01BQ0gsT0FBTyxn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
|
|
399
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImZpbGU6Ly8vaG9tZS9ydW5uZXIvd29yay9vcGVuZWxlbWVudC9vcGVuZWxlbWVudC9wYWNrYWdlcy9jb3JlL3NyYy9iaW5kaW5nLWFjdGl2YXRpb24udHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAb3BlbmVsZW1lbnQvY29yZSAtIFVuaWZpZWQgYmluZGluZyBhY3RpdmF0aW9uIChBRFItMDEwOSBQaGFzZSAxKS5cbiAqXG4gKiBBcHBsaWVzIGEgZGVjbGFyYXRpdmUgQmluZGluZ0Rlc2NyaXB0b3IgdG8gYSBob3N0IGVsZW1lbnQuXG4gKlxuICogQG1vZHVsZSBAb3BlbmVsZW1lbnQvY29yZS9iaW5kaW5nLWFjdGl2YXRpb25cbiAqL1xuXG5pbXBvcnQgeyBlZmZlY3QsIHVud3JhcFNpZ25hbExpa2UgfSBmcm9tICdAb3BlbmVsZW1lbnQvc2lnbmFsJztcbmltcG9ydCB7IHRydXN0UmVuZGVySHRtbCB9IGZyb20gJy4vc2VjdXJpdHkuanMnO1xuaW1wb3J0IHsgRnJhZ21lbnQgfSBmcm9tICcuL2pzeC1ydW50aW1lLmpzJztcbmltcG9ydCB7IGNyZWF0ZUxvZ2dlciB9IGZyb20gJy4vbG9nZ2VyLmpzJztcbmltcG9ydCB7IGZvcm1hdEVycm9yIH0gZnJvbSAnLi9lcnJvcnMuanMnO1xuaW1wb3J0IHR5cGUge1xuICBCaW5kaW5nRGVzY3JpcHRvcixcbiAgQmluZGluZ0Rpc3Bvc2UsXG4gIEJpbmRpbmdMaWZlY3ljbGUsXG4gIEJpbmRpbmdSZW5kZXJlcixcbn0gZnJvbSAnLi9iaW5kaW5nLWRlc2NyaXB0b3IuanMnO1xuXG5jb25zdCBiaW5kaW5nTG9nID0gY3JlYXRlTG9nZ2VyKCdiaW5kaW5nJyk7XG5cbmNvbnN0IG5vb3A6IEJpbmRpbmdEaXNwb3NlID0gKCkgPT4ge307XG5cbi8qKiBSZWdpc3RlciBhIGRpc3Bvc2UgZnVuY3Rpb24gd2l0aCB0aGUgbGlmZWN5Y2xlLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlZ2lzdGVyRGlzcG9zZShkaXNwb3NlOiBCaW5kaW5nRGlzcG9zZSwgbGlmZWN5Y2xlOiBCaW5kaW5nTGlmZWN5Y2xlKTogdm9pZCB7XG4gIGlmIChsaWZlY3ljbGUuc2lnbmFsKSB7XG4gICAgbGlmZWN5Y2xlLnNpZ25hbC5hZGRFdmVudExpc3RlbmVyKCdhYm9ydCcsIGRpc3Bvc2UsIHsgb25jZTogdHJ1ZSB9KTtcbiAgfSBlbHNlIHtcbiAgICBsaWZlY3ljbGUuZGlzcG9zZXJzPy5hZGQoZGlzcG9zZSk7XG4gIH1cbn1cblxudHlwZSBBcHBseUZuID0gKFxuICBkZXNjOiBCaW5kaW5nRGVzY3JpcHRvcixcbiAgbGlmZWN5Y2xlOiBCaW5kaW5nTGlmZWN5Y2xlLFxuICByZW5kZXJlcj86IEJpbmRpbmdSZW5kZXJlcixcbikgPT4gQmluZGluZ0Rpc3Bvc2U7XG5cbmNvbnN0IHJlZ2lzdHJ5ID0gbmV3IE1hcDxzdHJpbmcsIEFwcGx5Rm4+KCk7XG5cbi8qKiBSZWdpc3RlciBhIGN1c3RvbSBiaW5kaW5nIGtpbmQgaW4gdGhlIGFjdGl2YXRpb24gcmVnaXN0cnkuICovXG5leHBvcnQgZnVuY3Rpb24gcmVnaXN0ZXJCaW5kaW5nS2luZChraW5kOiBzdHJpbmcsIGFwcGx5Rm46IEFwcGx5Rm4pOiB2b2lkIHtcbiAgaWYgKHJlZ2lzdHJ5LmhhcyhraW5kKSkge1xuICAgIGJpbmRpbmdMb2cud2FybihgT3ZlcndyaXRpbmcgcmVnaXN0ZXJlZCBiaW5kaW5nIGtpbmQ6ICR7a2luZH1gKTtcbiAgfVxuICByZWdpc3RyeS5zZXQoa2luZCwgYXBwbHlGbik7XG59XG5cbi8qKiBBcHBseSBhIHNpbmdsZSBiaW5kaW5nIGRlc2NyaXB0b3IgYW5kIHJldHVybiBhIGRpc3Bvc2UgZnVuY3Rpb24uICovXG5leHBvcnQgZnVuY3Rpb24gYXBwbHlCaW5kaW5nRGVzY3JpcHRvcihcbiAgZGVzYzogQmluZGluZ0Rlc2NyaXB0b3IsXG4gIGxpZmVjeWNsZTogQmluZGluZ0xpZmVjeWNsZSxcbiAgcmVuZGVyZXI/OiBCaW5kaW5nUmVuZGVyZXIsXG4pOiBCaW5kaW5nRGlzcG9zZSB7XG4gIGNvbnN0IGFwcGx5ID0gcmVnaXN0cnkuZ2V0KGRlc2Mua2luZCk7XG4gIGlmIChhcHBseSkge1xuICAgIHJldHVybiBhcHBseShkZXNjLCBsaWZlY3ljbGUsIHJlbmRlcmVyKTtcbiAgfVxuICByZXR1cm4gbm9vcDtcbn1cblxuLyoqIENvbW1pdCBhbGwgYmluZGluZyBkZXNjcmlwdG9ycyBhZ2FpbnN0IHRoZSBhY3RpdmF0aW9uIGxheWVyIGluIGRvY3VtZW50IG9yZGVyLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvbW1pdEJpbmRpbmdzKFxuICBkZXNjcmlwdG9yczogQmluZGluZ0Rlc2NyaXB0b3JbXSxcbiAgbGlmZWN5Y2xlOiBCaW5kaW5nTGlmZWN5Y2xlLFxuICByZW5kZXJlcj86IEJpbmRpbmdSZW5kZXJlcixcbik6IHZvaWQge1xuICBmb3IgKGNvbnN0IGRlc2Mgb2YgZGVzY3JpcHRvcnMpIHtcbiAgICBhcHBseUJpbmRpbmdEZXNjcmlwdG9yKGRlc2MsIGxpZmVjeWNsZSwgcmVuZGVyZXIpO1xuICB9XG59XG5cbnJlZ2lzdHJ5LnNldChcbiAgJ3N0YXRpYy1hdHRyJyxcbiAgKGRlc2MsIGxpZmVjeWNsZSkgPT5cbiAgICBhcHBseVN0YXRpY0F0dHIoZGVzYyBhcyBFeHRyYWN0PEJpbmRpbmdEZXNjcmlwdG9yLCB7IGtpbmQ6ICdzdGF0aWMtYXR0cicgfT4sIGxpZmVjeWNsZSksXG4pO1xucmVnaXN0cnkuc2V0KFxuICAnc3RhdGljLXByb3AnLFxuICAoZGVzYywgbGlmZWN5Y2xlKSA9PlxuICAgIGFwcGx5U3RhdGljUHJvcChkZXNjIGFzIEV4dHJhY3Q8QmluZGluZ0Rlc2NyaXB0b3IsIHsga2luZDogJ3N0YXRpYy1wcm9wJyB9PiwgbGlmZWN5Y2xlKSxcbik7XG5yZWdpc3RyeS5zZXQoXG4gICdzdGF0aWMtYm9vbGVhbicsXG4gIChkZXNjLCBsaWZlY3ljbGUpID0+XG4gICAgYXBwbHlTdGF0aWNCb29sZWFuKGRlc2MgYXMgRXh0cmFjdDxCaW5kaW5nRGVzY3JpcHRvciwgeyBraW5kOiAnc3RhdGljLWJvb2xlYW4nIH0+LCBsaWZlY3ljbGUpLFxuKTtcbnJlZ2lzdHJ5LnNldChcbiAgJ3N0YXRpYy1zdHlsZScsXG4gIChkZXNjLCBsaWZlY3ljbGUpID0+XG4gICAgYXBwbHlTdGF0aWNTdHlsZShkZXNjIGFzIEV4dHJhY3Q8QmluZGluZ0Rlc2NyaXB0b3IsIHsga2luZDogJ3N0YXRpYy1zdHlsZScgfT4sIGxpZmVjeWNsZSksXG4pO1xucmVnaXN0cnkuc2V0KFxuICAnc2lnbmFsLXRleHQnLFxuICAoZGVzYywgbGlmZWN5Y2xlKSA9PlxuICAgIGFwcGx5U2lnbmFsVGV4dChkZXNjIGFzIEV4dHJhY3Q8QmluZGluZ0Rlc2NyaXB0b3IsIHsga2luZDogJ3NpZ25hbC10ZXh0JyB9PiwgbGlmZWN5Y2xlKSxcbik7XG5yZWdpc3RyeS5zZXQoXG4gICdzaWduYWwtY2xhc3MnLFxuICAoZGVzYywgbGlmZWN5Y2xlKSA9PlxuICAgIGFwcGx5U2lnbmFsQ2xhc3MoZGVzYyBhcyBFeHRyYWN0PEJpbmRpbmdEZXNjcmlwdG9yLCB7IGtpbmQ6ICdzaWduYWwtY2xhc3MnIH0+LCBsaWZlY3ljbGUpLFxuKTtcbnJlZ2lzdHJ5LnNldChcbiAgJ3NpZ25hbC1hdHRyJyxcbiAgKGRlc2MsIGxpZmVjeWNsZSkgPT5cbiAgICBhcHBseVNpZ25hbEF0dHIoZGVzYyBhcyBFeHRyYWN0PEJpbmRpbmdEZXNjcmlwdG9yLCB7IGtpbmQ6ICdzaWduYWwtYXR0cicgfT4sIGxpZmVjeWNsZSksXG4pO1xucmVnaXN0cnkuc2V0KFxuICAnc2lnbmFsLWh0bWwnLFxuICAoZGVzYywgbGlmZWN5Y2xlKSA9PlxuICAgIGFwcGx5U2lnbmFsSHRtbChkZXNjIGFzIEV4dHJhY3Q8QmluZGluZ0Rlc2NyaXB0b3IsIHsga2luZDogJ3NpZ25hbC1odG1sJyB9PiwgbGlmZWN5Y2xlKSxcbik7XG5yZWdpc3RyeS5zZXQoJ3NpZ25hbC1yZW5kZXInLCAoZGVzYywgbGlmZWN5Y2xlLCByZW5kZXJlcikgPT5cbiAgYXBwbHlTaWduYWxSZW5kZXIoXG4gICAgZGVzYyBhcyBFeHRyYWN0PEJpbmRpbmdEZXNjcmlwdG9yLCB7IGtpbmQ6ICdzaWduYWwtcmVuZGVyJyB9PixcbiAgICBsaWZlY3ljbGUsXG4gICAgcmVuZGVyZXIsXG4gICkpO1xucmVnaXN0cnkuc2V0KCdjb25kaXRpb25hbCcsIChkZXNjLCBsaWZlY3ljbGUsIHJlbmRlcmVyKSA9PlxuICBhcHBseUNvbmRpdGlvbmFsKFxuICAgIGRlc2MgYXMgRXh0cmFjdDxCaW5kaW5nRGVzY3JpcHRvciwgeyBraW5kOiAnY29uZGl0aW9uYWwnIH0+LFxuICAgIGxpZmVjeWNsZSxcbiAgICByZW5kZXJlcixcbiAgKSk7XG5yZWdpc3RyeS5zZXQoXG4gICdsaXN0JyxcbiAgKGRlc2MsIGxpZmVjeWNsZSwgcmVuZGVyZXIpID0+XG4gICAgYXBwbHlMaXN0KGRlc2MgYXMgRXh0cmFjdDxCaW5kaW5nRGVzY3JpcHRvciwgeyBraW5kOiAnbGlzdCcgfT4sIGxpZmVjeWNsZSwgcmVuZGVyZXIpLFxuKTtcbnJlZ2lzdHJ5LnNldChcbiAgJ2V2ZW50JyxcbiAgKGRlc2MsIGxpZmVjeWNsZSkgPT4gYXBwbHlFdmVudChkZXNjIGFzIEV4dHJhY3Q8QmluZGluZ0Rlc2NyaXB0b3IsIHsga2luZDogJ2V2ZW50JyB9PiwgbGlmZWN5Y2xlKSxcbik7XG5yZWdpc3RyeS5zZXQoXG4gICdyZWYnLFxuICAoZGVzYywgbGlmZWN5Y2xlKSA9PiBhcHBseVJlZihkZXNjIGFzIEV4dHJhY3Q8QmluZGluZ0Rlc2NyaXB0b3IsIHsga2luZDogJ3JlZicgfT4sIGxpZmVjeWNsZSksXG4pO1xuXG5mdW5jdGlvbiBhcHBseVN0YXRpY0F0dHIoXG4gIGRlc2M6IEV4dHJhY3Q8QmluZGluZ0Rlc2NyaXB0b3IsIHsga2luZDogJ3N0YXRpYy1hdHRyJyB9PixcbiAgX2xpZmVjeWNsZTogQmluZGluZ0xpZmVjeWNsZSxcbik6IEJpbmRpbmdEaXNwb3NlIHtcbiAgaWYgKGRlc2MudmFsdWUgPT0gbnVsbCkge1xuICAgIGRlc2MuZWwucmVtb3ZlQXR0cmlidXRlKGRlc2MuYXR0ck5hbWUpO1xuICB9IGVsc2Uge1xuICAgIGRlc2MuZWwuc2V0QXR0cmlidXRlKGRlc2MuYXR0ck5hbWUsIFN0cmluZyhkZXNjLnZhbHVlKSk7XG4gIH1cbiAgcmV0dXJuIG5vb3A7XG59XG5cbmZ1bmN0aW9uIGFwcGx5U3RhdGljUHJvcChcbiAgZGVzYzogRXh0cmFjdDxCaW5kaW5nRGVzY3JpcHRvciwgeyBraW5kOiAnc3RhdGljLXByb3AnIH0+LFxuICBfbGlmZWN5Y2xlOiBCaW5kaW5nTGlmZWN5Y2xlLFxuKTogQmluZGluZ0Rpc3Bvc2Uge1xuICAoZGVzYy5lbCBhcyB1bmtub3duIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+KVtkZXNjLnByb3BOYW1lXSA9IGRlc2MudmFsdWU7XG4gIHJldHVybiBub29wO1xufVxuXG5mdW5jdGlvbiBhcHBseVN0YXRpY0Jvb2xlYW4oXG4gIGRlc2M6IEV4dHJhY3Q8QmluZGluZ0Rlc2NyaXB0b3IsIHsga2luZDogJ3N0YXRpYy1ib29sZWFuJyB9PixcbiAgX2xpZmVjeWNsZTogQmluZGluZ0xpZmVjeWNsZSxcbik6IEJpbmRpbmdEaXNwb3NlIHtcbiAgaWYgKGRlc2MudmFsdWUpIHtcbiAgICBkZXNjLmVsLnNldEF0dHJpYnV0ZShkZXNjLmF0dHJOYW1lLCAnJyk7XG4gIH0gZWxzZSB7XG4gICAgZGVzYy5lbC5yZW1vdmVBdHRyaWJ1dGUoZGVzYy5hdHRyTmFtZSk7XG4gIH1cbiAgcmV0dXJuIG5vb3A7XG59XG5cbmZ1bmN0aW9uIGFwcGx5U3RhdGljU3R5bGUoXG4gIGRlc2M6IEV4dHJhY3Q8QmluZGluZ0Rlc2NyaXB0b3IsIHsga2luZDogJ3N0YXRpYy1zdHlsZScgfT4sXG4gIF9saWZlY3ljbGU6IEJpbmRpbmdMaWZlY3ljbGUsXG4pOiBCaW5kaW5nRGlzcG9zZSB7XG4gIGNvbnN0IHRhcmdldCA9IGRlc2MuZWwgYXMgSFRNTEVsZW1lbnQ7XG4gIGZvciAoY29uc3QgW2ssIHZdIG9mIE9iamVjdC5lbnRyaWVzKGRlc2MudmFsdWUpKSB7XG4gICAgdGFyZ2V0LnN0eWxlLnNldFByb3BlcnR5KGssIFN0cmluZyh2KSk7XG4gIH1cbiAgcmV0dXJuIG5vb3A7XG59XG5cbmZ1bmN0aW9uIGFwcGx5U2lnbmFsVGV4dChcbiAgZGVzYzogRXh0cmFjdDxCaW5kaW5nRGVzY3JpcHRvciwgeyBraW5kOiAnc2lnbmFsLXRleHQnIH0+LFxuICBsaWZlY3ljbGU6IEJpbmRpbmdMaWZlY3ljbGUsXG4pOiBCaW5kaW5nRGlzcG9zZSB7XG4gIGNvbnN0IHRhcmdldCA9IGRlc2MuZWwgYXMgVGV4dCB8IEVsZW1lbnQ7XG4gIGNvbnN0IHNpZyA9IGRlc2Muc2lnbmFsO1xuXG4gIGNvbnN0IHVwZGF0ZSA9ICgpID0+IHtcbiAgICBjb25zdCB2YWx1ZSA9IHVud3JhcFNpZ25hbExpa2Uoc2lnLnZhbHVlKTtcbiAgICBjb25zdCB0ZXh0ID0gdmFsdWUgPT0gbnVsbCA/ICcnIDogU3RyaW5nKHZhbHVlKTtcbiAgICB0YXJnZXQudGV4dENvbnRlbnQgPSB0ZXh0O1xuICB9O1xuXG4gIGNvbnN0IGRpc3Bvc2UgPSBlZmZlY3QoKCkgPT4ge1xuICAgIHRyeSB7XG4gICAgICB1cGRhdGUoKTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGJpbmRpbmdMb2cuZXJyb3IoYHNpZ25hbC10ZXh0IGJpbmRpbmcgZmFpbGVkOiAke2Zvcm1hdEVycm9yKGVycil9YCk7XG4gICAgfVxuICB9KTtcbiAgcmVnaXN0ZXJEaXNwb3NlKGRpc3Bvc2UsIGxpZmVjeWNsZSk7XG4gIHJldHVybiBkaXNwb3NlO1xufVxuXG5mdW5jdGlvbiBhcHBseVNpZ25hbENsYXNzKFxuICBkZXNjOiBFeHRyYWN0PEJpbmRpbmdEZXNjcmlwdG9yLCB7IGtpbmQ6ICdzaWduYWwtY2xhc3MnIH0+LFxuICBsaWZlY3ljbGU6IEJpbmRpbmdMaWZlY3ljbGUsXG4pOiBCaW5kaW5nRGlzcG9zZSB7XG4gIGNvbnN0IHsgZWwsIGNsYXNzTmFtZSwgc2lnbmFsIH0gPSBkZXNjO1xuXG4gIGNvbnN0IHVwZGF0ZSA9ICgpID0+IHtcbiAgICBjb25zdCB2YWx1ZSA9IEJvb2xlYW4odW53cmFwU2lnbmFsTGlrZShzaWduYWwudmFsdWUpKTtcbiAgICBlbC5jbGFzc0xpc3QudG9nZ2xlKGNsYXNzTmFtZSwgdmFsdWUpO1xuICB9O1xuXG4gIGNvbnN0IGRpc3Bvc2UgPSBlZmZlY3QoKCkgPT4ge1xuICAgIHRyeSB7XG4gICAgICB1cGRhdGUoKTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGJpbmRpbmdMb2cuZXJyb3IoYHNpZ25hbC1jbGFzcyBiaW5kaW5nIGZhaWxlZDogJHtmb3JtYXRFcnJvcihlcnIpfWApO1xuICAgIH1cbiAgfSk7XG4gIHJlZ2lzdGVyRGlzcG9zZShkaXNwb3NlLCBsaWZlY3ljbGUpO1xuICByZXR1cm4gZGlzcG9zZTtcbn1cblxuZnVuY3Rpb24gYXBwbHlTaWduYWxBdHRyKFxuICBkZXNjOiBFeHRyYWN0PEJpbmRpbmdEZXNjcmlwdG9yLCB7IGtpbmQ6ICdzaWduYWwtYXR0cicgfT4sXG4gIGxpZmVjeWNsZTogQmluZGluZ0xpZmVjeWNsZSxcbik6IEJpbmRpbmdEaXNwb3NlIHtcbiAgY29uc3QgeyBlbCwgYXR0ck5hbWVzLCBzaWduYWwgfSA9IGRlc2M7XG5cbiAgY29uc3QgdXBkYXRlID0gKCkgPT4ge1xuICAgIGNvbnN0IHZhbHVlID0gdW53cmFwU2lnbmFsTGlrZShzaWduYWwudmFsdWUpO1xuICAgIGZvciAoY29uc3QgYXR0ck5hbWUgb2YgYXR0ck5hbWVzKSB7XG4gICAgICBpZiAodmFsdWUgPT0gbnVsbCB8fCB2YWx1ZSA9PT0gZmFsc2UpIHtcbiAgICAgICAgZWwucmVtb3ZlQXR0cmlidXRlKGF0dHJOYW1lKTtcbiAgICAgIH0gZWxzZSBpZiAodmFsdWUgPT09IHRydWUpIHtcbiAgICAgICAgZWwuc2V0QXR0cmlidXRlKGF0dHJOYW1lLCAnJyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBlbC5zZXRBdHRyaWJ1dGUoYXR0ck5hbWUsIFN0cmluZyh2YWx1ZSkpO1xuICAgICAgfVxuICAgIH1cbiAgfTtcblxuICBjb25zdCBkaXNwb3NlID0gZWZmZWN0KCgpID0+IHtcbiAgICB0cnkge1xuICAgICAgdXBkYXRlKCk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBiaW5kaW5nTG9nLmVycm9yKGBzaWduYWwtYXR0ciBiaW5kaW5nIGZhaWxlZDogJHtmb3JtYXRFcnJvcihlcnIpfWApO1xuICAgIH1cbiAgfSk7XG4gIHJlZ2lzdGVyRGlzcG9zZShkaXNwb3NlLCBsaWZlY3ljbGUpO1xuICByZXR1cm4gZGlzcG9zZTtcbn1cblxuZnVuY3Rpb24gYXBwbHlTaWduYWxIdG1sKFxuICBkZXNjOiBFeHRyYWN0PEJpbmRpbmdEZXNjcmlwdG9yLCB7IGtpbmQ6ICdzaWduYWwtaHRtbCcgfT4sXG4gIGxpZmVjeWNsZTogQmluZGluZ0xpZmVjeWNsZSxcbik6IEJpbmRpbmdEaXNwb3NlIHtcbiAgY29uc3QgeyBlbCwgc2lnbmFsLCB0cnVzdGVkIH0gPSBkZXNjO1xuXG4gIGNvbnN0IHVwZGF0ZSA9ICgpID0+IHtcbiAgICBjb25zdCByYXcgPSB1bndyYXBTaWduYWxMaWtlKHNpZ25hbC52YWx1ZSk7XG4gICAgY29uc3Qgc3RyID0gcmF3ID09IG51bGwgPyAnJyA6IFN0cmluZyhyYXcpO1xuICAgIGlmICh0cnVzdGVkKSB7XG4gICAgICBlbC5pbm5lckhUTUwgPSB0cnVzdFJlbmRlckh0bWwoc3RyKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZWwudGV4dENvbnRlbnQgPSBzdHI7XG4gICAgfVxuICB9O1xuXG4gIGNvbnN0IGRpc3Bvc2UgPSBlZmZlY3QoKCkgPT4ge1xuICAgIHRyeSB7XG4gICAgICB1cGRhdGUoKTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGJpbmRpbmdMb2cuZXJyb3IoYHNpZ25hbC1odG1sIGJpbmRpbmcgZmFpbGVkOiAke2Zvcm1hdEVycm9yKGVycil9YCk7XG4gICAgfVxuICB9KTtcbiAgcmVnaXN0ZXJEaXNwb3NlKGRpc3Bvc2UsIGxpZmVjeWNsZSk7XG4gIHJldHVybiBkaXNwb3NlO1xufVxuXG5mdW5jdGlvbiBhcHBseVNpZ25hbFJlbmRlcihcbiAgZGVzYzogRXh0cmFjdDxCaW5kaW5nRGVzY3JpcHRvciwgeyBraW5kOiAnc2lnbmFsLXJlbmRlcicgfT4sXG4gIGxpZmVjeWNsZTogQmluZGluZ0xpZmVjeWNsZSxcbiAgcmVuZGVyZXI/OiBCaW5kaW5nUmVuZGVyZXIsXG4pOiBCaW5kaW5nRGlzcG9zZSB7XG4gIGNvbnN0IHsgZWwsIHNpZ25hbCB9ID0gZGVzYztcbiAgY29uc3QgZGVzY0xpZmVjeWNsZSA9IGRlc2MubGlmZWN5Y2xlID8/IHt9O1xuXG4gIGxldCBjdXJyZW50Q2hpbGRyZW46IENoaWxkTm9kZVtdID0gW107XG4gIGNvbnN0IGN1cnJlbnROZXN0ZWREaXNwb3NlcnMgPSBuZXcgU2V0PCgpID0+IHZvaWQ+KCk7XG5cbiAgY29uc3QgY2xlYXJSZW5kZXIgPSAoKSA9PiB7XG4gICAgZm9yIChjb25zdCBkaXNwb3NlIG9mIGN1cnJlbnROZXN0ZWREaXNwb3NlcnMpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGRpc3Bvc2UoKTtcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICBiaW5kaW5nTG9nLmVycm9yKGBzaWduYWwtcmVuZGVyIG5lc3RlZCBkaXNwb3NlIGZhaWxlZDogJHtmb3JtYXRFcnJvcihlcnIpfWApO1xuICAgICAgfVxuICAgIH1cbiAgICBjdXJyZW50TmVzdGVkRGlzcG9zZXJzLmNsZWFyKCk7XG4gICAgZm9yIChjb25zdCBjaGlsZCBvZiBjdXJyZW50Q2hpbGRyZW4pIHtcbiAgICAgIGNoaWxkLnJlbW92ZSgpO1xuICAgIH1cbiAgICBjdXJyZW50Q2hpbGRyZW4gPSBbXTtcbiAgfTtcblxuICBjb25zdCByZW5kZXIgPSAoKSA9PiB7XG4gICAgY2xlYXJSZW5kZXIoKTtcbiAgICBjb25zdCByYXcgPSB1bndyYXBTaWduYWxMaWtlKHNpZ25hbC52YWx1ZSk7XG4gICAgaWYgKHJhdyA9PSBudWxsKSByZXR1cm47XG4gICAgaWYgKCFyZW5kZXJlcikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdzaWduYWwtcmVuZGVyIGJpbmRpbmcgcmVxdWlyZXMgYSByZW5kZXJlcicpO1xuICAgIH1cblxuICAgIC8vIFJlbmRlciBpbnRvIGEgZnJlc2ggY2hpbGQgbGlmZWN5Y2xlIHNvIG5lc3RlZCBzaWduYWwgZWZmZWN0cyBjYW4gYmVcbiAgICAvLyBkaXNwb3NlZCBwZXIgcmVuZGVyIHdpdGhvdXQgbGVha2luZyBpbnRvIHByZXZpb3VzIHJlbmRlcnMuXG4gICAgY29uc3QgcmVuZGVyTGlmZWN5Y2xlOiBCaW5kaW5nTGlmZWN5Y2xlID0ge1xuICAgICAgZGlzcG9zZXJzOiBjdXJyZW50TmVzdGVkRGlzcG9zZXJzLFxuICAgIH07XG4gICAgaWYgKGRlc2NMaWZlY3ljbGUuc2lnbmFsID8/IGxpZmVjeWNsZS5zaWduYWwpIHtcbiAgICAgIHJlbmRlckxpZmVjeWNsZS5zaWduYWwgPSBkZXNjTGlmZWN5Y2xlLnNpZ25hbCA/PyBsaWZlY3ljbGUuc2lnbmFsO1xuICAgIH1cblxuICAgIC8vIE5vcm1hbGl6ZSBWTm9kZVtdIGludG8gYSBGcmFnbWVudCBzbyBtdWx0aXBsZSByZW5kZXJlZCBub2RlcyBjYW4gYmVcbiAgICAvLyB0cmFja2VkIGFuZCByZXBsYWNlZCB0b2dldGhlciBhY3Jvc3MgdXBkYXRlcy5cbiAgICBjb25zdCBub2RlID0gQXJyYXkuaXNBcnJheShyYXcpID8geyB0YWc6IEZyYWdtZW50LCBwcm9wczoge30sIGNoaWxkcmVuOiByYXcgfSA6IHJhdztcbiAgICBjb25zdCByZXN1bHQgPSByZW5kZXJlci5yZW5kZXIobm9kZSwgcmVuZGVyTGlmZWN5Y2xlKTtcblxuICAgIGlmIChyZXN1bHQubm9kZVR5cGUgPT09IDExKSB7XG4gICAgICBjb25zdCBmcmFnQ2hpbGRyZW46IENoaWxkTm9kZVtdID0gW107XG4gICAgICB3aGlsZSAocmVzdWx0LmZpcnN0Q2hpbGQpIHtcbiAgICAgICAgY29uc3QgY2hpbGQgPSByZXN1bHQuZmlyc3RDaGlsZCBhcyBDaGlsZE5vZGU7XG4gICAgICAgIGZyYWdDaGlsZHJlbi5wdXNoKGNoaWxkKTtcbiAgICAgICAgZWwuYXBwZW5kQ2hpbGQoY2hpbGQpO1xuICAgICAgfVxuICAgICAgY3VycmVudENoaWxkcmVuID0gZnJhZ0NoaWxkcmVuO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBjaGlsZCA9IHJlc3VsdCBhcyBDaGlsZE5vZGU7XG4gICAgICBlbC5hcHBlbmRDaGlsZChjaGlsZCk7XG4gICAgICBjdXJyZW50Q2hpbGRyZW4gPSBbY2hpbGRdO1xuICAgIH1cbiAgfTtcblxuICBjb25zdCBkaXNwb3NlID0gZWZmZWN0KCgpID0+IHtcbiAgICB0cnkge1xuICAgICAgcmVuZGVyKCk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBiaW5kaW5nTG9nLmVycm9yKGBzaWduYWwtcmVuZGVyIGJpbmRpbmcgZmFpbGVkOiAke2Zvcm1hdEVycm9yKGVycil9YCk7XG4gICAgfVxuICB9KTtcblxuICBjb25zdCBmdWxsRGlzcG9zZTogQmluZGluZ0Rpc3Bvc2UgPSAoKSA9PiB7XG4gICAgY2xlYXJSZW5kZXIoKTtcbiAgICBkaXNwb3NlKCk7XG4gIH07XG4gIHJlZ2lzdGVyRGlzcG9zZShmdWxsRGlzcG9zZSwgbGlmZWN5Y2xlKTtcbiAgcmV0dXJuIGZ1bGxEaXNwb3NlO1xufVxuXG5mdW5jdGlvbiBhcHBseUNvbmRpdGlvbmFsKFxuICBkZXNjOiBFeHRyYWN0PEJpbmRpbmdEZXNjcmlwdG9yLCB7IGtpbmQ6ICdjb25kaXRpb25hbCcgfT4sXG4gIGxpZmVjeWNsZTogQmluZGluZ0xpZmVjeWNsZSxcbiAgcmVuZGVyZXI/OiBCaW5kaW5nUmVuZGVyZXIsXG4pOiBCaW5kaW5nRGlzcG9zZSB7XG4gIGNvbnN0IHsgYW5jaG9yLCBjb25kaXRpb24sIHJlbmRlclRydXRoeSwgcmVuZGVyRmFsc3kgfSA9IGRlc2M7XG5cbiAgbGV0IGN1cnJlbnRDaGlsZHJlbjogQ2hpbGROb2RlW10gPSBbXTtcbiAgY29uc3QgY3VycmVudE5lc3RlZERpc3Bvc2VycyA9IG5ldyBTZXQ8KCkgPT4gdm9pZD4oKTtcblxuICBjb25zdCBjbGVhclJlbmRlciA9ICgpID0+IHtcbiAgICBmb3IgKGNvbnN0IGRpc3Bvc2Ugb2YgY3VycmVudE5lc3RlZERpc3Bvc2Vycykge1xuICAgICAgdHJ5IHtcbiAgICAgICAgZGlzcG9zZSgpO1xuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIGJpbmRpbmdMb2cuZXJyb3IoYGNvbmRpdGlvbmFsIG5lc3RlZCBkaXNwb3NlIGZhaWxlZDogJHtmb3JtYXRFcnJvcihlcnIpfWApO1xuICAgICAgfVxuICAgIH1cbiAgICBjdXJyZW50TmVzdGVkRGlzcG9zZXJzLmNsZWFyKCk7XG4gICAgZm9yIChjb25zdCBjaGlsZCBvZiBjdXJyZW50Q2hpbGRyZW4pIHtcbiAgICAgIGNoaWxkLnJlbW92ZSgpO1xuICAgIH1cbiAgICBjdXJyZW50Q2hpbGRyZW4gPSBbXTtcbiAgfTtcblxuICBjb25zdCByZW5kZXIgPSAoKSA9PiB7XG4gICAgY2xlYXJSZW5kZXIoKTtcbiAgICBjb25zdCBzaG93ID0gQm9vbGVhbih1bndyYXBTaWduYWxMaWtlKGNvbmRpdGlvbikpO1xuICAgIGNvbnN0IHRhcmdldCA9IHNob3cgPyByZW5kZXJUcnV0aHkoKSA6IHJlbmRlckZhbHN5Py4oKTtcbiAgICBpZiAodGFyZ2V0ID09IG51bGwpIHJldHVybjtcbiAgICBpZiAoIXJlbmRlcmVyKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ2NvbmRpdGlvbmFsIGJpbmRpbmcgcmVxdWlyZXMgYSByZW5kZXJlcicpO1xuICAgIH1cblxuICAgIGNvbnN0IHJlbmRlckxpZmVjeWNsZTogQmluZGluZ0xpZmVjeWNsZSA9IHtcbiAgICAgIGRpc3Bvc2VyczogY3VycmVudE5lc3RlZERpc3Bvc2VycyxcbiAgICB9O1xuICAgIGlmIChsaWZlY3ljbGUuc2lnbmFsKSB7XG4gICAgICByZW5kZXJMaWZlY3ljbGUuc2lnbmFsID0gbGlmZWN5Y2xlLnNpZ25hbDtcbiAgICB9XG5cbiAgICBjb25zdCBub2RlID0gQXJyYXkuaXNBcnJheSh0YXJnZXQpID8geyB0YWc6IEZyYWdtZW50LCBwcm9wczoge30sIGNoaWxkcmVuOiB0YXJnZXQgfSA6IHRhcmdldDtcbiAgICBjb25zdCByZXN1bHQgPSByZW5kZXJlci5yZW5kZXIobm9kZSwgcmVuZGVyTGlmZWN5Y2xlKTtcblxuICAgIGlmIChyZXN1bHQubm9kZVR5cGUgPT09IDExKSB7XG4gICAgICBjb25zdCBmcmFnQ2hpbGRyZW46IENoaWxkTm9kZVtdID0gW107XG4gICAgICB3aGlsZSAocmVzdWx0LmZpcnN0Q2hpbGQpIHtcbiAgICAgICAgZnJhZ0NoaWxkcmVuLnB1c2gocmVzdWx0LmZpcnN0Q2hpbGQgYXMgQ2hpbGROb2RlKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHJlZiA9IGFuY2hvci5uZXh0U2libGluZztcbiAgICAgIGZvciAobGV0IGkgPSBmcmFnQ2hpbGRyZW4ubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgICAgYW5jaG9yLnBhcmVudE5vZGU/Lmluc2VydEJlZm9yZShmcmFnQ2hpbGRyZW5baV0sIHJlZik7XG4gICAgICB9XG4gICAgICBjdXJyZW50Q2hpbGRyZW4gPSBmcmFnQ2hpbGRyZW47XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGNoaWxkID0gcmVzdWx0IGFzIENoaWxkTm9kZTtcbiAgICAgIGFuY2hvci5wYXJlbnROb2RlPy5pbnNlcnRCZWZvcmUoY2hpbGQsIGFuY2hvci5uZXh0U2libGluZyk7XG4gICAgICBjdXJyZW50Q2hpbGRyZW4gPSBbY2hpbGRdO1xuICAgIH1cbiAgfTtcblxuICBjb25zdCBkaXNwb3NlID0gZWZmZWN0KCgpID0+IHtcbiAgICB0cnkge1xuICAgICAgcmVuZGVyKCk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBiaW5kaW5nTG9nLmVycm9yKGBjb25kaXRpb25hbCBiaW5kaW5nIGZhaWxlZDogJHtmb3JtYXRFcnJvcihlcnIpfWApO1xuICAgIH1cbiAgfSk7XG5cbiAgY29uc3QgZnVsbERpc3Bvc2U6IEJpbmRpbmdEaXNwb3NlID0gKCkgPT4ge1xuICAgIGNsZWFyUmVuZGVyKCk7XG4gICAgZGlzcG9zZSgpO1xuICB9O1xuICByZWdpc3RlckRpc3Bvc2UoZnVsbERpc3Bvc2UsIGxpZmVjeWNsZSk7XG4gIHJldHVybiBmdWxsRGlzcG9zZTtcbn1cblxuZnVuY3Rpb24gYXBwbHlMaXN0KFxuICBkZXNjOiBFeHRyYWN0PEJpbmRpbmdEZXNjcmlwdG9yLCB7IGtpbmQ6ICdsaXN0JyB9PixcbiAgbGlmZWN5Y2xlOiBCaW5kaW5nTGlmZWN5Y2xlLFxuICByZW5kZXJlcj86IEJpbmRpbmdSZW5kZXJlcixcbik6IEJpbmRpbmdEaXNwb3NlIHtcbiAgY29uc3QgeyBhbmNob3IsIGl0ZW1zLCByZW5kZXJJdGVtIH0gPSBkZXNjO1xuXG4gIGxldCBhbmNob3JzOiBDaGlsZE5vZGVbXSA9IFtdO1xuICBjb25zdCBjdXJyZW50TmVzdGVkRGlzcG9zZXJzID0gbmV3IFNldDwoKSA9PiB2b2lkPigpO1xuXG4gIGNvbnN0IGNsZWFyUmVuZGVyID0gKCkgPT4ge1xuICAgIGZvciAoY29uc3QgZGlzcG9zZSBvZiBjdXJyZW50TmVzdGVkRGlzcG9zZXJzKSB7XG4gICAgICB0cnkge1xuICAgICAgICBkaXNwb3NlKCk7XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgYmluZGluZ0xvZy5lcnJvcihgbGlzdCBuZXN0ZWQgZGlzcG9zZSBmYWlsZWQ6ICR7Zm9ybWF0RXJyb3IoZXJyKX1gKTtcbiAgICAgIH1cbiAgICB9XG4gICAgY3VycmVudE5lc3RlZERpc3Bvc2Vycy5jbGVhcigpO1xuICAgIGZvciAoY29uc3QgYSBvZiBhbmNob3JzKSB7XG4gICAgICBhLnJlbW92ZSgpO1xuICAgIH1cbiAgICBhbmNob3JzID0gW107XG4gIH07XG5cbiAgY29uc3QgcmVuZGVyID0gKCkgPT4ge1xuICAgIGNsZWFyUmVuZGVyKCk7XG4gICAgY29uc3QgbGlzdCA9IHVud3JhcFNpZ25hbExpa2UoaXRlbXMpO1xuICAgIGlmICghQXJyYXkuaXNBcnJheShsaXN0KSkgcmV0dXJuO1xuICAgIGlmICghcmVuZGVyZXIpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignbGlzdCBiaW5kaW5nIHJlcXVpcmVzIGEgcmVuZGVyZXInKTtcbiAgICB9XG5cbiAgICBjb25zdCByZWY6IENoaWxkTm9kZSB8IG51bGwgPSBhbmNob3IubmV4dFNpYmxpbmc7XG4gICAgY29uc3QgcmVuZGVyZWQ6IENoaWxkTm9kZVtdID0gW107XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxpc3QubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IHJlbmRlckxpZmVjeWNsZTogQmluZGluZ0xpZmVjeWNsZSA9IHtcbiAgICAgICAgZGlzcG9zZXJzOiBjdXJyZW50TmVzdGVkRGlzcG9zZXJzLFxuICAgICAgfTtcbiAgICAgIGlmIChsaWZlY3ljbGUuc2lnbmFsKSB7XG4gICAgICAgIHJlbmRlckxpZmVjeWNsZS5zaWduYWwgPSBsaWZlY3ljbGUuc2lnbmFsO1xuICAgICAgfVxuXG4gICAgICBjb25zdCB2biA9IHJlbmRlckl0ZW0obGlzdFtpXSwgaSk7XG4gICAgICBjb25zdCBub2RlID0gQXJyYXkuaXNBcnJheSh2bikgPyB7IHRhZzogRnJhZ21lbnQsIHByb3BzOiB7fSwgY2hpbGRyZW46IHZuIH0gOiB2bjtcbiAgICAgIGNvbnN0IGRvbSA9IHJlbmRlcmVyLnJlbmRlcihub2RlLCByZW5kZXJMaWZlY3ljbGUpO1xuXG4gICAgICBpZiAoZG9tLm5vZGVUeXBlID09PSAxMSkge1xuICAgICAgICBjb25zdCBmcmFnQ2hpbGRyZW46IENoaWxkTm9kZVtdID0gW107XG4gICAgICAgIHdoaWxlIChkb20uZmlyc3RDaGlsZCkge1xuICAgICAgICAgIGZyYWdDaGlsZHJlbi5wdXNoKGRvbS5maXJzdENoaWxkIGFzIENoaWxkTm9kZSk7XG4gICAgICAgIH1cbiAgICAgICAgZm9yIChsZXQgaiA9IGZyYWdDaGlsZHJlbi5sZW5ndGggLSAxOyBqID49IDA7IGotLSkge1xuICAgICAgICAgIGFuY2hvci5wYXJlbnROb2RlPy5pbnNlcnRCZWZvcmUoZnJhZ0NoaWxkcmVuW2pdLCByZWYpO1xuICAgICAgICB9XG4gICAgICAgIHJlbmRlcmVkLnB1c2goLi4uZnJhZ0NoaWxkcmVuKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IGNoaWxkID0gZG9tIGFzIENoaWxkTm9kZTtcbiAgICAgICAgYW5jaG9yLnBhcmVudE5vZGU/Lmluc2VydEJlZm9yZShjaGlsZCwgcmVmKTtcbiAgICAgICAgcmVuZGVyZWQucHVzaChjaGlsZCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgYW5jaG9ycyA9IHJlbmRlcmVkO1xuICB9O1xuXG4gIGNvbnN0IGRpc3Bvc2UgPSBlZmZlY3QoKCkgPT4ge1xuICAgIHRyeSB7XG4gICAgICByZW5kZXIoKTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGJpbmRpbmdMb2cuZXJyb3IoYGxpc3QgYmluZGluZyBmYWlsZWQ6ICR7Zm9ybWF0RXJyb3IoZXJyKX1gKTtcbiAgICB9XG4gIH0pO1xuXG4gIGNvbnN0IGZ1bGxEaXNwb3NlOiBCaW5kaW5nRGlzcG9zZSA9ICgpID0+IHtcbiAgICBjbGVhclJlbmRlcigpO1xuICAgIGRpc3Bvc2UoKTtcbiAgfTtcbiAgcmVnaXN0ZXJEaXNwb3NlKGZ1bGxEaXNwb3NlLCBsaWZlY3ljbGUpO1xuICByZXR1cm4gZnVsbERpc3Bvc2U7XG59XG5cbmZ1bmN0aW9uIGFwcGx5RXZlbnQoXG4gIGRlc2M6IEV4dHJhY3Q8QmluZGluZ0Rlc2NyaXB0b3IsIHsga2luZDogJ2V2ZW50JyB9PixcbiAgbGlmZWN5Y2xlOiBCaW5kaW5nTGlmZWN5Y2xlLFxuKTogQmluZGluZ0Rpc3Bvc2Uge1xuICBjb25zdCB7IGVsLCB0eXBlLCBoYW5kbGVyLCBvcHRpb25zIH0gPSBkZXNjO1xuXG4gIGNvbnN0IGxpc3RlbmVyT3B0aW9uczogQWRkRXZlbnRMaXN0ZW5lck9wdGlvbnMgfCBib29sZWFuID0gbGlmZWN5Y2xlLnNpZ25hbFxuICAgID8ge1xuICAgICAgLi4uKHR5cGVvZiBvcHRpb25zID09PSAnb2JqZWN0JyAmJiBvcHRpb25zICE9PSBudWxsID8gb3B0aW9ucyA6IHt9KSxcbiAgICAgIHNpZ25hbDogbGlmZWN5Y2xlLnNpZ25hbCxcbiAgICB9XG4gICAgOiAob3B0aW9ucyA/PyB7fSk7XG5cbiAgZWwuYWRkRXZlbnRMaXN0ZW5lcih0eXBlLCBoYW5kbGVyLCBsaXN0ZW5lck9wdGlvbnMpO1xuXG4gIGNvbnN0IGRpc3Bvc2U6IEJpbmRpbmdEaXNwb3NlID0gKCkgPT4ge1xuICAgIGVsLnJlbW92ZUV2ZW50TGlzdGVuZXIodHlwZSwgaGFuZGxlciwgbGlzdGVuZXJPcHRpb25zKTtcbiAgfTtcblxuICAvLyBXaGVuIG5vIEFib3J0U2lnbmFsIHdhcyBwcm92aWRlZCB3ZSBzdGlsbCB3YW50IGFuIGV4cGxpY2l0IGRpc3Bvc2UgcGF0aC5cbiAgaWYgKCFsaWZlY3ljbGUuc2lnbmFsKSB7XG4gICAgcmVnaXN0ZXJEaXNwb3NlKGRpc3Bvc2UsIGxpZmVjeWNsZSk7XG4gIH1cbiAgcmV0dXJuIGRpc3Bvc2U7XG59XG5cbmZ1bmN0aW9uIGFwcGx5UmVmKFxuICBkZXNjOiBFeHRyYWN0PEJpbmRpbmdEZXNjcmlwdG9yLCB7IGtpbmQ6ICdyZWYnIH0+LFxuICBfbGlmZWN5Y2xlOiBCaW5kaW5nTGlmZWN5Y2xlLFxuKTogQmluZGluZ0Rpc3Bvc2Uge1xuICB0cnkge1xuICAgIGRlc2MuY2FsbGJhY2soZGVzYy5lbCk7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGJpbmRpbmdMb2cuZXJyb3IoYHJlZiBiaW5kaW5nIGZhaWxlZDogJHtmb3JtYXRFcnJvcihlcnIpfWApO1xuICB9XG4gIHJldHVybiBub29wO1xufVxuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Q0FNQyxHQUVELFNBQVMsTUFB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
|
|
@@ -10,11 +10,13 @@
|
|
|
10
10
|
/** AbortSignal that triggers automatic disposal when aborted. */ signal?: AbortSignal;
|
|
11
11
|
/** Explicit disposers collected for batch cleanup. */ disposers?: Set<() => void>;
|
|
12
12
|
}
|
|
13
|
+
/** Renderer contract injected to avoid a core intra-package cycle. */ export interface BindingRenderer {
|
|
14
|
+
/** Render a VNode tree (or primitive) to a DOM node under the given lifecycle. */ render(node: unknown, lifecycle: BindingLifecycle): Node;
|
|
15
|
+
}
|
|
13
16
|
/** Dispose function returned by bindings and registered into lifecycle. */ export type BindingDispose = () => void;
|
|
14
17
|
export interface StaticAttrBindingDescriptor {
|
|
15
18
|
kind: 'static-attr';
|
|
16
19
|
el: Element;
|
|
17
|
-
key: string;
|
|
18
20
|
attrName: string;
|
|
19
21
|
value: unknown;
|
|
20
22
|
}
|
|
@@ -40,7 +42,7 @@ export interface SignalTextBindingDescriptor {
|
|
|
40
42
|
el: Element | Text;
|
|
41
43
|
signal: Signal<unknown>;
|
|
42
44
|
}
|
|
43
|
-
export interface SignalClassBindingDescriptor {
|
|
45
|
+
/** @internal DSD-only descriptor emitted by hydration-scope, never by CSR collectPropBindings. */ export interface SignalClassBindingDescriptor {
|
|
44
46
|
kind: 'signal-class';
|
|
45
47
|
el: Element;
|
|
46
48
|
className: string;
|
|
@@ -62,7 +64,20 @@ export interface SignalRenderBindingDescriptor {
|
|
|
62
64
|
kind: 'signal-render';
|
|
63
65
|
el: Element;
|
|
64
66
|
signal: Signal<unknown>;
|
|
65
|
-
lifecycle
|
|
67
|
+
lifecycle?: BindingLifecycle;
|
|
68
|
+
}
|
|
69
|
+
export interface ConditionalBindingDescriptor {
|
|
70
|
+
kind: 'conditional';
|
|
71
|
+
anchor: ChildNode;
|
|
72
|
+
condition: Signal<unknown> | unknown;
|
|
73
|
+
renderTruthy: () => unknown;
|
|
74
|
+
renderFalsy?: () => unknown;
|
|
75
|
+
}
|
|
76
|
+
export interface ListBindingDescriptor {
|
|
77
|
+
kind: 'list';
|
|
78
|
+
anchor: ChildNode;
|
|
79
|
+
items: Signal<unknown> | unknown;
|
|
80
|
+
renderItem: (item: unknown, index: number) => unknown;
|
|
66
81
|
}
|
|
67
82
|
export interface EventBindingDescriptor {
|
|
68
83
|
kind: 'event';
|
|
@@ -76,4 +91,17 @@ export interface RefBindingDescriptor {
|
|
|
76
91
|
el: Element;
|
|
77
92
|
callback: (el: Element) => void;
|
|
78
93
|
}
|
|
79
|
-
/** Union of all supported binding descriptors. */ export type BindingDescriptor = StaticAttrBindingDescriptor | StaticPropBindingDescriptor | StaticBooleanBindingDescriptor | StaticStyleBindingDescriptor | SignalTextBindingDescriptor | SignalClassBindingDescriptor | SignalAttrBindingDescriptor | SignalHtmlBindingDescriptor | SignalRenderBindingDescriptor | EventBindingDescriptor | RefBindingDescriptor;
|
|
94
|
+
/** Union of all supported binding descriptors. */ export type BindingDescriptor = StaticAttrBindingDescriptor | StaticPropBindingDescriptor | StaticBooleanBindingDescriptor | StaticStyleBindingDescriptor | SignalTextBindingDescriptor | SignalClassBindingDescriptor | SignalAttrBindingDescriptor | SignalHtmlBindingDescriptor | SignalRenderBindingDescriptor | ConditionalBindingDescriptor | ListBindingDescriptor | EventBindingDescriptor | RefBindingDescriptor;
|
|
95
|
+
/** Create a signal-text binding descriptor. */ export declare function bindText(node: Text | Element, signal: Signal<unknown>): SignalTextBindingDescriptor;
|
|
96
|
+
/** Create a signal-attribute binding descriptor. */ export declare function bindAttr(element: Element, names: string[], signal: Signal<unknown>): SignalAttrBindingDescriptor;
|
|
97
|
+
/** Create a signal-class binding descriptor. */ export declare function bindClass(element: Element, className: string, signal: Signal<unknown>): SignalClassBindingDescriptor;
|
|
98
|
+
/** Create a signal-html binding descriptor. */ export declare function bindHtml(element: Element, signal: Signal<unknown>, trusted: boolean): SignalHtmlBindingDescriptor;
|
|
99
|
+
/** Create an event binding descriptor. */ export declare function bindEvent(element: EventTarget, event: string, listener: EventListenerOrEventListenerObject, options?: AddEventListenerOptions | boolean): EventBindingDescriptor;
|
|
100
|
+
/** Create a signal-render binding descriptor. */ export declare function bindRender(element: Element, signal: Signal<unknown>, lifecycle: BindingLifecycle): SignalRenderBindingDescriptor;
|
|
101
|
+
/** Create a conditional ({@link Show}) binding descriptor. */ export declare function bindConditional(anchor: ChildNode, condition: Signal<unknown> | unknown, renderTruthy: () => unknown, renderFalsy?: () => unknown): ConditionalBindingDescriptor;
|
|
102
|
+
/** Create a list ({@link For}) binding descriptor. */ export declare function bindList(anchor: ChildNode, items: Signal<unknown> | unknown, renderItem: (item: unknown, index: number) => unknown): ListBindingDescriptor;
|
|
103
|
+
/** Create a static attribute binding descriptor. */ export declare function bindStaticAttr(element: Element, attrName: string, value: unknown): StaticAttrBindingDescriptor;
|
|
104
|
+
/** Create a static DOM property binding descriptor. */ export declare function bindStaticProp(element: Element, propName: string, value: unknown): StaticPropBindingDescriptor;
|
|
105
|
+
/** Create a static boolean attribute binding descriptor. */ export declare function bindStaticBoolean(element: Element, attrName: string, value: boolean): StaticBooleanBindingDescriptor;
|
|
106
|
+
/** Create a static inline style binding descriptor. */ export declare function bindStaticStyle(element: Element, value: Record<string, string | number>): StaticStyleBindingDescriptor;
|
|
107
|
+
/** Create a ref callback binding descriptor. */ export declare function bindRef(element: Element, callback: (el: Element) => void): RefBindingDescriptor;
|
|
@@ -5,5 +5,108 @@
|
|
|
5
5
|
* Each descriptor captures one side effect to apply to a host element.
|
|
6
6
|
*
|
|
7
7
|
* @module @openelement/core/binding-descriptor
|
|
8
|
-
*/
|
|
9
|
-
|
|
8
|
+
*/ // ─── Factory constructors ───────────────────────────────────────────────────
|
|
9
|
+
/** Create a signal-text binding descriptor. */ export function bindText(node, signal) {
|
|
10
|
+
return {
|
|
11
|
+
kind: 'signal-text',
|
|
12
|
+
el: node,
|
|
13
|
+
signal
|
|
14
|
+
};
|
|
15
|
+
}
|
|
16
|
+
/** Create a signal-attribute binding descriptor. */ export function bindAttr(element, names, signal) {
|
|
17
|
+
return {
|
|
18
|
+
kind: 'signal-attr',
|
|
19
|
+
el: element,
|
|
20
|
+
attrNames: names,
|
|
21
|
+
signal
|
|
22
|
+
};
|
|
23
|
+
}
|
|
24
|
+
/** Create a signal-class binding descriptor. */ export function bindClass(element, className, signal) {
|
|
25
|
+
return {
|
|
26
|
+
kind: 'signal-class',
|
|
27
|
+
el: element,
|
|
28
|
+
className,
|
|
29
|
+
signal
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
/** Create a signal-html binding descriptor. */ export function bindHtml(element, signal, trusted) {
|
|
33
|
+
return {
|
|
34
|
+
kind: 'signal-html',
|
|
35
|
+
el: element,
|
|
36
|
+
signal,
|
|
37
|
+
trusted
|
|
38
|
+
};
|
|
39
|
+
}
|
|
40
|
+
/** Create an event binding descriptor. */ export function bindEvent(element, event, listener, options) {
|
|
41
|
+
return {
|
|
42
|
+
kind: 'event',
|
|
43
|
+
el: element,
|
|
44
|
+
type: event,
|
|
45
|
+
handler: listener,
|
|
46
|
+
options
|
|
47
|
+
};
|
|
48
|
+
}
|
|
49
|
+
/** Create a signal-render binding descriptor. */ export function bindRender(element, signal, lifecycle) {
|
|
50
|
+
return {
|
|
51
|
+
kind: 'signal-render',
|
|
52
|
+
el: element,
|
|
53
|
+
signal,
|
|
54
|
+
lifecycle
|
|
55
|
+
};
|
|
56
|
+
}
|
|
57
|
+
/** Create a conditional ({@link Show}) binding descriptor. */ export function bindConditional(anchor, condition, renderTruthy, renderFalsy) {
|
|
58
|
+
return {
|
|
59
|
+
kind: 'conditional',
|
|
60
|
+
anchor,
|
|
61
|
+
condition,
|
|
62
|
+
renderTruthy,
|
|
63
|
+
renderFalsy
|
|
64
|
+
};
|
|
65
|
+
}
|
|
66
|
+
/** Create a list ({@link For}) binding descriptor. */ export function bindList(anchor, items, renderItem) {
|
|
67
|
+
return {
|
|
68
|
+
kind: 'list',
|
|
69
|
+
anchor,
|
|
70
|
+
items,
|
|
71
|
+
renderItem
|
|
72
|
+
};
|
|
73
|
+
}
|
|
74
|
+
/** Create a static attribute binding descriptor. */ export function bindStaticAttr(element, attrName, value) {
|
|
75
|
+
return {
|
|
76
|
+
kind: 'static-attr',
|
|
77
|
+
el: element,
|
|
78
|
+
attrName,
|
|
79
|
+
value
|
|
80
|
+
};
|
|
81
|
+
}
|
|
82
|
+
/** Create a static DOM property binding descriptor. */ export function bindStaticProp(element, propName, value) {
|
|
83
|
+
return {
|
|
84
|
+
kind: 'static-prop',
|
|
85
|
+
el: element,
|
|
86
|
+
propName,
|
|
87
|
+
value
|
|
88
|
+
};
|
|
89
|
+
}
|
|
90
|
+
/** Create a static boolean attribute binding descriptor. */ export function bindStaticBoolean(element, attrName, value) {
|
|
91
|
+
return {
|
|
92
|
+
kind: 'static-boolean',
|
|
93
|
+
el: element,
|
|
94
|
+
attrName,
|
|
95
|
+
value
|
|
96
|
+
};
|
|
97
|
+
}
|
|
98
|
+
/** Create a static inline style binding descriptor. */ export function bindStaticStyle(element, value) {
|
|
99
|
+
return {
|
|
100
|
+
kind: 'static-style',
|
|
101
|
+
el: element,
|
|
102
|
+
value
|
|
103
|
+
};
|
|
104
|
+
}
|
|
105
|
+
/** Create a ref callback binding descriptor. */ export function bindRef(element, callback) {
|
|
106
|
+
return {
|
|
107
|
+
kind: 'ref',
|
|
108
|
+
el: element,
|
|
109
|
+
callback
|
|
110
|
+
};
|
|
111
|
+
}
|
|
112
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImZpbGU6Ly8vaG9tZS9ydW5uZXIvd29yay9vcGVuZWxlbWVudC9vcGVuZWxlbWVudC9wYWNrYWdlcy9jb3JlL3NyYy9iaW5kaW5nLWRlc2NyaXB0b3IudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAb3BlbmVsZW1lbnQvY29yZSAtIFVuaWZpZWQgYmluZGluZyBkZXNjcmlwdG9yIHR5cGVzIChBRFItMDEwOSBQaGFzZSAxKS5cbiAqXG4gKiBEZWNsYXJhdGl2ZSBET00gYmluZGluZyBjb250cmFjdHMgdXNlZCBieSB0aGUgcnVudGltZSBhbmQgaHlkcmF0aW9uIGxheWVycy5cbiAqIEVhY2ggZGVzY3JpcHRvciBjYXB0dXJlcyBvbmUgc2lkZSBlZmZlY3QgdG8gYXBwbHkgdG8gYSBob3N0IGVsZW1lbnQuXG4gKlxuICogQG1vZHVsZSBAb3BlbmVsZW1lbnQvY29yZS9iaW5kaW5nLWRlc2NyaXB0b3JcbiAqL1xuXG5pbXBvcnQgdHlwZSB7IFNpZ25hbCB9IGZyb20gJ0BvcGVuZWxlbWVudC9wcm90b2NvbC9zaWduYWwnO1xuXG4vKiogU2hhcmVkIGxpZmVjeWNsZSBjb250ZXh0IGZvciBhIHNldCBvZiBiaW5kaW5ncy4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQmluZGluZ0xpZmVjeWNsZSB7XG4gIC8qKiBBYm9ydFNpZ25hbCB0aGF0IHRyaWdnZXJzIGF1dG9tYXRpYyBkaXNwb3NhbCB3aGVuIGFib3J0ZWQuICovXG4gIHNpZ25hbD86IEFib3J0U2lnbmFsO1xuICAvKiogRXhwbGljaXQgZGlzcG9zZXJzIGNvbGxlY3RlZCBmb3IgYmF0Y2ggY2xlYW51cC4gKi9cbiAgZGlzcG9zZXJzPzogU2V0PCgpID0+IHZvaWQ+O1xufVxuXG4vKiogUmVuZGVyZXIgY29udHJhY3QgaW5qZWN0ZWQgdG8gYXZvaWQgYSBjb3JlIGludHJhLXBhY2thZ2UgY3ljbGUuICovXG5leHBvcnQgaW50ZXJmYWNlIEJpbmRpbmdSZW5kZXJlciB7XG4gIC8qKiBSZW5kZXIgYSBWTm9kZSB0cmVlIChvciBwcmltaXRpdmUpIHRvIGEgRE9NIG5vZGUgdW5kZXIgdGhlIGdpdmVuIGxpZmVjeWNsZS4gKi9cbiAgcmVuZGVyKG5vZGU6IHVua25vd24sIGxpZmVjeWNsZTogQmluZGluZ0xpZmVjeWNsZSk6IE5vZGU7XG59XG5cbi8qKiBEaXNwb3NlIGZ1bmN0aW9uIHJldHVybmVkIGJ5IGJpbmRpbmdzIGFuZCByZWdpc3RlcmVkIGludG8gbGlmZWN5Y2xlLiAqL1xuZXhwb3J0IHR5cGUgQmluZGluZ0Rpc3Bvc2UgPSAoKSA9PiB2b2lkO1xuXG4vLyDilIDilIDilIAgU3RhdGljIGRlc2NyaXB0b3JzIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG5leHBvcnQgaW50ZXJmYWNlIFN0YXRpY0F0dHJCaW5kaW5nRGVzY3JpcHRvciB7XG4gIGtpbmQ6ICdzdGF0aWMtYXR0cic7XG4gIGVsOiBFbGVtZW50O1xuICBhdHRyTmFtZTogc3RyaW5nO1xuICB2YWx1ZTogdW5rbm93bjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTdGF0aWNQcm9wQmluZGluZ0Rlc2NyaXB0b3Ige1xuICBraW5kOiAnc3RhdGljLXByb3AnO1xuICBlbDogRWxlbWVudDtcbiAgcHJvcE5hbWU6IHN0cmluZztcbiAgdmFsdWU6IHVua25vd247XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU3RhdGljQm9vbGVhbkJpbmRpbmdEZXNjcmlwdG9yIHtcbiAga2luZDogJ3N0YXRpYy1ib29sZWFuJztcbiAgZWw6IEVsZW1lbnQ7XG4gIGF0dHJOYW1lOiBzdHJpbmc7XG4gIHZhbHVlOiBib29sZWFuO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFN0YXRpY1N0eWxlQmluZGluZ0Rlc2NyaXB0b3Ige1xuICBraW5kOiAnc3RhdGljLXN0eWxlJztcbiAgZWw6IEVsZW1lbnQ7XG4gIHZhbHVlOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmcgfCBudW1iZXI+O1xufVxuXG4vLyDilIDilIDilIAgU2lnbmFsIGRlc2NyaXB0b3JzIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG5leHBvcnQgaW50ZXJmYWNlIFNpZ25hbFRleHRCaW5kaW5nRGVzY3JpcHRvciB7XG4gIGtpbmQ6ICdzaWduYWwtdGV4dCc7XG4gIGVsOiBFbGVtZW50IHwgVGV4dDtcbiAgc2lnbmFsOiBTaWduYWw8dW5rbm93bj47XG59XG5cbi8qKiBAaW50ZXJuYWwgRFNELW9ubHkgZGVzY3JpcHRvciBlbWl0dGVkIGJ5IGh5ZHJhdGlvbi1zY29wZSwgbmV2ZXIgYnkgQ1NSIGNvbGxlY3RQcm9wQmluZGluZ3MuICovXG5leHBvcnQgaW50ZXJmYWNlIFNpZ25hbENsYXNzQmluZGluZ0Rlc2NyaXB0b3Ige1xuICBraW5kOiAnc2lnbmFsLWNsYXNzJztcbiAgZWw6IEVsZW1lbnQ7XG4gIGNsYXNzTmFtZTogc3RyaW5nO1xuICBzaWduYWw6IFNpZ25hbDx1bmtub3duPjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTaWduYWxBdHRyQmluZGluZ0Rlc2NyaXB0b3Ige1xuICBraW5kOiAnc2lnbmFsLWF0dHInO1xuICBlbDogRWxlbWVudDtcbiAgYXR0ck5hbWVzOiBzdHJpbmdbXTtcbiAgc2lnbmFsOiBTaWduYWw8dW5rbm93bj47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU2lnbmFsSHRtbEJpbmRpbmdEZXNjcmlwdG9yIHtcbiAga2luZDogJ3NpZ25hbC1odG1sJztcbiAgZWw6IEVsZW1lbnQ7XG4gIHNpZ25hbDogU2lnbmFsPHVua25vd24+O1xuICB0cnVzdGVkOiBib29sZWFuO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFNpZ25hbFJlbmRlckJpbmRpbmdEZXNjcmlwdG9yIHtcbiAga2luZDogJ3NpZ25hbC1yZW5kZXInO1xuICBlbDogRWxlbWVudDtcbiAgc2lnbmFsOiBTaWduYWw8dW5rbm93bj47XG4gIGxpZmVjeWNsZT86IEJpbmRpbmdMaWZlY3ljbGU7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ29uZGl0aW9uYWxCaW5kaW5nRGVzY3JpcHRvciB7XG4gIGtpbmQ6ICdjb25kaXRpb25hbCc7XG4gIGFuY2hvcjogQ2hpbGROb2RlO1xuICBjb25kaXRpb246IFNpZ25hbDx1bmtub3duPiB8IHVua25vd247XG4gIHJlbmRlclRydXRoeTogKCkgPT4gdW5rbm93bjtcbiAgcmVuZGVyRmFsc3k/OiAoKSA9PiB1bmtub3duO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIExpc3RCaW5kaW5nRGVzY3JpcHRvciB7XG4gIGtpbmQ6ICdsaXN0JztcbiAgYW5jaG9yOiBDaGlsZE5vZGU7XG4gIGl0ZW1zOiBTaWduYWw8dW5rbm93bj4gfCB1bmtub3duO1xuICByZW5kZXJJdGVtOiAoaXRlbTogdW5rbm93biwgaW5kZXg6IG51bWJlcikgPT4gdW5rbm93bjtcbn1cblxuLy8g4pSA4pSA4pSAIEV2ZW50IC8gcmVmIGRlc2NyaXB0b3JzIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG5leHBvcnQgaW50ZXJmYWNlIEV2ZW50QmluZGluZ0Rlc2NyaXB0b3Ige1xuICBraW5kOiAnZXZlbnQnO1xuICBlbDogRXZlbnRUYXJnZXQ7XG4gIHR5cGU6IHN0cmluZztcbiAgaGFuZGxlcjogRXZlbnRMaXN0ZW5lck9yRXZlbnRMaXN0ZW5lck9iamVjdDtcbiAgb3B0aW9ucz86IEFkZEV2ZW50TGlzdGVuZXJPcHRpb25zIHwgYm9vbGVhbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBSZWZCaW5kaW5nRGVzY3JpcHRvciB7XG4gIGtpbmQ6ICdyZWYnO1xuICBlbDogRWxlbWVudDtcbiAgY2FsbGJhY2s6IChlbDogRWxlbWVudCkgPT4gdm9pZDtcbn1cblxuLyoqIFVuaW9uIG9mIGFsbCBzdXBwb3J0ZWQgYmluZGluZyBkZXNjcmlwdG9ycy4gKi9cbmV4cG9ydCB0eXBlIEJpbmRpbmdEZXNjcmlwdG9yID1cbiAgfCBTdGF0aWNBdHRyQmluZGluZ0Rlc2NyaXB0b3JcbiAgfCBTdGF0aWNQcm9wQmluZGluZ0Rlc2NyaXB0b3JcbiAgfCBTdGF0aWNCb29sZWFuQmluZGluZ0Rlc2NyaXB0b3JcbiAgfCBTdGF0aWNTdHlsZUJpbmRpbmdEZXNjcmlwdG9yXG4gIHwgU2lnbmFsVGV4dEJpbmRpbmdEZXNjcmlwdG9yXG4gIHwgU2lnbmFsQ2xhc3NCaW5kaW5nRGVzY3JpcHRvclxuICB8IFNpZ25hbEF0dHJCaW5kaW5nRGVzY3JpcHRvclxuICB8IFNpZ25hbEh0bWxCaW5kaW5nRGVzY3JpcHRvclxuICB8IFNpZ25hbFJlbmRlckJpbmRpbmdEZXNjcmlwdG9yXG4gIHwgQ29uZGl0aW9uYWxCaW5kaW5nRGVzY3JpcHRvclxuICB8IExpc3RCaW5kaW5nRGVzY3JpcHRvclxuICB8IEV2ZW50QmluZGluZ0Rlc2NyaXB0b3JcbiAgfCBSZWZCaW5kaW5nRGVzY3JpcHRvcjtcblxuLy8g4pSA4pSA4pSAIEZhY3RvcnkgY29uc3RydWN0b3JzIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG4vKiogQ3JlYXRlIGEgc2lnbmFsLXRleHQgYmluZGluZyBkZXNjcmlwdG9yLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGJpbmRUZXh0KFxuICBub2RlOiBUZXh0IHwgRWxlbWVudCxcbiAgc2lnbmFsOiBTaWduYWw8dW5rbm93bj4sXG4pOiBTaWduYWxUZXh0QmluZGluZ0Rlc2NyaXB0b3Ige1xuICByZXR1cm4geyBraW5kOiAnc2lnbmFsLXRleHQnLCBlbDogbm9kZSwgc2lnbmFsIH07XG59XG5cbi8qKiBDcmVhdGUgYSBzaWduYWwtYXR0cmlidXRlIGJpbmRpbmcgZGVzY3JpcHRvci4gKi9cbmV4cG9ydCBmdW5jdGlvbiBiaW5kQXR0cihcbiAgZWxlbWVudDogRWxlbWVudCxcbiAgbmFtZXM6IHN0cmluZ1tdLFxuICBzaWduYWw6IFNpZ25hbDx1bmtub3duPixcbik6IFNpZ25hbEF0dHJCaW5kaW5nRGVzY3JpcHRvciB7XG4gIHJldHVybiB7IGtpbmQ6ICdzaWduYWwtYXR0cicsIGVsOiBlbGVtZW50LCBhdHRyTmFtZXM6IG5hbWVzLCBzaWduYWwgfTtcbn1cblxuLyoqIENyZWF0ZSBhIHNpZ25hbC1jbGFzcyBiaW5kaW5nIGRlc2NyaXB0b3IuICovXG5leHBvcnQgZnVuY3Rpb24gYmluZENsYXNzKFxuICBlbGVtZW50OiBFbGVtZW50LFxuICBjbGFzc05hbWU6IHN0cmluZyxcbiAgc2lnbmFsOiBTaWduYWw8dW5rbm93bj4sXG4pOiBTaWduYWxDbGFzc0JpbmRpbmdEZXNjcmlwdG9yIHtcbiAgcmV0dXJuIHsga2luZDogJ3NpZ25hbC1jbGFzcycsIGVsOiBlbGVtZW50LCBjbGFzc05hbWUsIHNpZ25hbCB9O1xufVxuXG4vKiogQ3JlYXRlIGEgc2lnbmFsLWh0bWwgYmluZGluZyBkZXNjcmlwdG9yLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGJpbmRIdG1sKFxuICBlbGVtZW50OiBFbGVtZW50LFxuICBzaWduYWw6IFNpZ25hbDx1bmtub3duPixcbiAgdHJ1c3RlZDogYm9vbGVhbixcbik6IFNpZ25hbEh0bWxCaW5kaW5nRGVzY3JpcHRvciB7XG4gIHJldHVybiB7IGtpbmQ6ICdzaWduYWwtaHRtbCcsIGVsOiBlbGVtZW50LCBzaWduYWwsIHRydXN0ZWQgfTtcbn1cblxuLyoqIENyZWF0ZSBhbiBldmVudCBiaW5kaW5nIGRlc2NyaXB0b3IuICovXG5leHBvcnQgZnVuY3Rpb24gYmluZEV2ZW50KFxuICBlbGVtZW50OiBFdmVudFRhcmdldCxcbiAgZXZlbnQ6IHN0cmluZyxcbiAgbGlzdGVuZXI6IEV2ZW50TGlzdGVuZXJPckV2ZW50TGlzdGVuZXJPYmplY3QsXG4gIG9wdGlvbnM/OiBBZGRFdmVudExpc3RlbmVyT3B0aW9ucyB8IGJvb2xlYW4sXG4pOiBFdmVudEJpbmRpbmdEZXNjcmlwdG9yIHtcbiAgcmV0dXJuIHsga2luZDogJ2V2ZW50JywgZWw6IGVsZW1lbnQsIHR5cGU6IGV2ZW50LCBoYW5kbGVyOiBsaXN0ZW5lciwgb3B0aW9ucyB9O1xufVxuXG4vKiogQ3JlYXRlIGEgc2lnbmFsLXJlbmRlciBiaW5kaW5nIGRlc2NyaXB0b3IuICovXG5leHBvcnQgZnVuY3Rpb24gYmluZFJlbmRlcihcbiAgZWxlbWVudDogRWxlbWVudCxcbiAgc2lnbmFsOiBTaWduYWw8dW5rbm93bj4sXG4gIGxpZmVjeWNsZTogQmluZGluZ0xpZmVjeWNsZSxcbik6IFNpZ25hbFJlbmRlckJpbmRpbmdEZXNjcmlwdG9yIHtcbiAgcmV0dXJuIHsga2luZDogJ3NpZ25hbC1yZW5kZXInLCBlbDogZWxlbWVudCwgc2lnbmFsLCBsaWZlY3ljbGUgfTtcbn1cblxuLyoqIENyZWF0ZSBhIGNvbmRpdGlvbmFsICh7QGxpbmsgU2hvd30pIGJpbmRpbmcgZGVzY3JpcHRvci4gKi9cbmV4cG9ydCBmdW5jdGlvbiBiaW5kQ29uZGl0aW9uYWwoXG4gIGFuY2hvcjogQ2hpbGROb2RlLFxuICBjb25kaXRpb246IFNpZ25hbDx1bmtub3duPiB8IHVua25vd24sXG4gIHJlbmRlclRydXRoeTogKCkgPT4gdW5rbm93bixcbiAgcmVuZGVyRmFsc3k/OiAoKSA9PiB1bmtub3duLFxuKTogQ29uZGl0aW9uYWxCaW5kaW5nRGVzY3JpcHRvciB7XG4gIHJldHVybiB7IGtpbmQ6ICdjb25kaXRpb25hbCcsIGFuY2hvciwgY29uZGl0aW9uLCByZW5kZXJUcnV0aHksIHJlbmRlckZhbHN5IH07XG59XG5cbi8qKiBDcmVhdGUgYSBsaXN0ICh7QGxpbmsgRm9yfSkgYmluZGluZyBkZXNjcmlwdG9yLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGJpbmRMaXN0KFxuICBhbmNob3I6IENoaWxkTm9kZSxcbiAgaXRlbXM6IFNpZ25hbDx1bmtub3duPiB8IHVua25vd24sXG4gIHJlbmRlckl0ZW06IChpdGVtOiB1bmtub3duLCBpbmRleDogbnVtYmVyKSA9PiB1bmtub3duLFxuKTogTGlzdEJpbmRpbmdEZXNjcmlwdG9yIHtcbiAgcmV0dXJuIHsga2luZDogJ2xpc3QnLCBhbmNob3IsIGl0ZW1zLCByZW5kZXJJdGVtIH07XG59XG5cbi8qKiBDcmVhdGUgYSBzdGF0aWMgYXR0cmlidXRlIGJpbmRpbmcgZGVzY3JpcHRvci4gKi9cbmV4cG9ydCBmdW5jdGlvbiBiaW5kU3RhdGljQXR0cihcbiAgZWxlbWVudDogRWxlbWVudCxcbiAgYXR0ck5hbWU6IHN0cmluZyxcbiAgdmFsdWU6IHVua25vd24sXG4pOiBTdGF0aWNBdHRyQmluZGluZ0Rlc2NyaXB0b3Ige1xuICByZXR1cm4geyBraW5kOiAnc3RhdGljLWF0dHInLCBlbDogZWxlbWVudCwgYXR0ck5hbWUsIHZhbHVlIH07XG59XG5cbi8qKiBDcmVhdGUgYSBzdGF0aWMgRE9NIHByb3BlcnR5IGJpbmRpbmcgZGVzY3JpcHRvci4gKi9cbmV4cG9ydCBmdW5jdGlvbiBiaW5kU3RhdGljUHJvcChcbiAgZWxlbWVudDogRWxlbWVudCxcbiAgcHJvcE5hbWU6IHN0cmluZyxcbiAgdmFsdWU6IHVua25vd24sXG4pOiBTdGF0aWNQcm9wQmluZGluZ0Rlc2NyaXB0b3Ige1xuICByZXR1cm4geyBraW5kOiAnc3RhdGljLXByb3AnLCBlbDogZWxlbWVudCwgcHJvcE5hbWUsIHZhbHVlIH07XG59XG5cbi8qKiBDcmVhdGUgYSBzdGF0aWMgYm9vbGVhbiBhdHRyaWJ1dGUgYmluZGluZyBkZXNjcmlwdG9yLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGJpbmRTdGF0aWNCb29sZWFuKFxuICBlbGVtZW50OiBFbGVtZW50LFxuICBhdHRyTmFtZTogc3RyaW5nLFxuICB2YWx1ZTogYm9vbGVhbixcbik6IFN0YXRpY0Jvb2xlYW5CaW5kaW5nRGVzY3JpcHRvciB7XG4gIHJldHVybiB7IGtpbmQ6ICdzdGF0aWMtYm9vbGVhbicsIGVsOiBlbGVtZW50LCBhdHRyTmFtZSwgdmFsdWUgfTtcbn1cblxuLyoqIENyZWF0ZSBhIHN0YXRpYyBpbmxpbmUgc3R5bGUgYmluZGluZyBkZXNjcmlwdG9yLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGJpbmRTdGF0aWNTdHlsZShcbiAgZWxlbWVudDogRWxlbWVudCxcbiAgdmFsdWU6IFJlY29yZDxzdHJpbmcsIHN0cmluZyB8IG51bWJlcj4sXG4pOiBTdGF0aWNTdHlsZUJpbmRpbmdEZXNjcmlwdG9yIHtcbiAgcmV0dXJuIHsga2luZDogJ3N0YXRpYy1zdHlsZScsIGVsOiBlbGVtZW50LCB2YWx1ZSB9O1xufVxuXG4vKiogQ3JlYXRlIGEgcmVmIGNhbGxiYWNrIGJpbmRpbmcgZGVzY3JpcHRvci4gKi9cbmV4cG9ydCBmdW5jdGlvbiBiaW5kUmVmKFxuICBlbGVtZW50OiBFbGVtZW50LFxuICBjYWxsYmFjazogKGVsOiBFbGVtZW50KSA9PiB2b2lkLFxuKTogUmVmQmluZGluZ0Rlc2NyaXB0b3Ige1xuICByZXR1cm4geyBraW5kOiAncmVmJywgZWw6IGVsZW1lbnQsIGNhbGxiYWNrIH07XG59XG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Q0FPQyxHQXNJRCwrRUFBK0U7QUFFL0UsNkNBQTZDLEdBQzdDLE9BQU8sU0FBUyxTQUNkLElBQW9CLEVBQ3BCLE1BQXVCO0VBRXZCLE9BQU87SUFBRSxNQUFNO0lBQWUsSUFBSTtJQUFNO0VBQU87QUFDakQ7QUFFQSxrREFBa0QsR0FDbEQsT0FBTyxTQUFTLFNBQ2QsT0FBZ0IsRUFDaEIsS0FBZSxFQUNmLE1BQXVCO0VBRXZCLE9BQU87SUFBRSxNQUFNO0lBQWUsSUFBSTtJQUFTLFdBQVc7SUFBTztFQUFPO0FBQ3RFO0FBRUEsOENBQThDLEdBQzlDLE9BQU8sU0FBUyxVQUNkLE9BQWdCLEVBQ2hCLFNBQWlCLEVBQ2pCLE1BQXVCO0VBRXZCLE9BQU87SUFBRSxNQUFNO0lBQWdCLElBQUk7SUFBUztJQUFXO0VBQU87QUFDaEU7QUFFQSw2Q0FBNkMsR0FDN0MsT0FBTyxTQUFTLFNBQ2QsT0FBZ0IsRUFDaEIsTUFBdUIsRUFDdkIsT0FBZ0I7RUFFaEIsT0FBTztJQUFFLE1BQU07SUFBZSxJQUFJO0lBQVM7SUFBUTtFQUFRO0FBQzdEO0FBRUEsd0NBQXdDLEdBQ3hDLE9BQU8sU0FBUyxVQUNkLE9BQW9CLEVBQ3BCLEtBQWEsRUFDYixRQUE0QyxFQUM1QyxPQUEyQztFQUUzQyxPQUFPO0lBQUUsTUFBTTtJQUFTLElBQUk7SUFBUyxNQUFNO0lBQU8sU0FBUztJQUFVO0VBQVE7QUFDL0U7QUFFQSwrQ0FBK0MsR0FDL0MsT0FBTyxTQUFTLFdBQ2QsT0FBZ0IsRUFDaEIsTUFBdUIsRUFDdkIsU0FBMkI7RUFFM0IsT0FBTztJQUFFLE1BQU07SUFBaUIsSUFBSTtJQUFTO0lBQVE7RUFBVTtBQUNqRTtBQUVBLDREQUE0RCxHQUM1RCxPQUFPLFNBQVMsZ0JBQ2QsTUFBaUIsRUFDakIsU0FBb0MsRUFDcEMsWUFBMkIsRUFDM0IsV0FBMkI7RUFFM0IsT0FBTztJQUFFLE1BQU07SUFBZTtJQUFRO0lBQVc7SUFBYztFQUFZO0FBQzdFO0FBRUEsb0RBQW9ELEdBQ3BELE9BQU8sU0FBUyxTQUNkLE1BQWlCLEVBQ2pCLEtBQWdDLEVBQ2hDLFVBQXFEO0VBRXJELE9BQU87SUFBRSxNQUFNO0lBQVE7SUFBUTtJQUFPO0VBQVc7QUFDbkQ7QUFFQSxrREFBa0QsR0FDbEQsT0FBTyxTQUFTLGVBQ2QsT0FBZ0IsRUFDaEIsUUFBZ0IsRUFDaEIsS0FBYztFQUVkLE9BQU87SUFBRSxNQUFNO0lBQWUsSUFBSTtJQUFTO0lBQVU7RUFBTTtBQUM3RDtBQUVBLHFEQUFxRCxHQUNyRCxPQUFPLFNBQVMsZUFDZCxPQUFnQixFQUNoQixRQUFnQixFQUNoQixLQUFjO0VBRWQsT0FBTztJQUFFLE1BQU07SUFBZSxJQUFJO0lBQVM7SUFBVTtFQUFNO0FBQzdEO0FBRUEsMERBQTBELEdBQzFELE9BQU8sU0FBUyxrQkFDZCxPQUFnQixFQUNoQixRQUFnQixFQUNoQixLQUFjO0VBRWQsT0FBTztJQUFFLE1BQU07SUFBa0IsSUFBSTtJQUFTO0lBQVU7RUFBTTtBQUNoRTtBQUVBLHFEQUFxRCxHQUNyRCxPQUFPLFNBQVMsZ0JBQ2QsT0FBZ0IsRUFDaEIsS0FBc0M7RUFFdEMsT0FBTztJQUFFLE1BQU07SUFBZ0IsSUFBSTtJQUFTO0VBQU07QUFDcEQ7QUFFQSw4Q0FBOEMsR0FDOUMsT0FBTyxTQUFTLFFBQ2QsT0FBZ0IsRUFDaEIsUUFBK0I7RUFFL0IsT0FBTztJQUFFLE1BQU07SUFBTyxJQUFJO0lBQVM7RUFBUztBQUM5QyJ9
|
package/src/csr.d.ts
CHANGED
|
@@ -6,8 +6,9 @@
|
|
|
6
6
|
*
|
|
7
7
|
* ADR-0109 Phase 1: split @openelement/core into static, hydrate, and csr.
|
|
8
8
|
*/ export * from "./static.js";
|
|
9
|
-
export type { BindingDescriptor, BindingDispose, BindingLifecycle } from "./binding-descriptor.js";
|
|
10
|
-
export {
|
|
9
|
+
export type { BindingDescriptor, BindingDispose, BindingLifecycle, BindingRenderer } from "./binding-descriptor.js";
|
|
10
|
+
export { bindAttr, bindClass, bindConditional, bindEvent, bindHtml, bindList, bindRef, bindRender, bindStaticAttr, bindStaticBoolean, bindStaticProp, bindStaticStyle, bindText } from "./binding-descriptor.js";
|
|
11
|
+
export { applyBindingDescriptor, commitBindings, registerBindingKind } from "./binding-activation.js";
|
|
11
12
|
export { applyProps, collectPropBindings, renderToDom } from "./jsx-render-dom.js";
|
|
12
13
|
export { collectEventBindings, eventRecordsToDescriptors, hydrateEventMarkers } from "./event-hydration.js";
|
|
13
14
|
export type { EventBinding, EventBindingRecord } from "./event-hydration.js";
|