@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 CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@openelement/core",
3
- "version": "0.41.0-alpha.1",
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.1",
122
- "@openelement/signal": "^0.41.0-alpha.1"
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
- /** Apply a single binding descriptor and return a dispose function. */ export declare function applyBindingDescriptor(desc: BindingDescriptor, lifecycle: BindingLifecycle): BindingDispose;
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
- /** Apply a single binding descriptor and return a dispose function. */ export function applyBindingDescriptor(desc, lifecycle) {
24
- switch(desc.kind){
25
- case 'static-attr':
26
- return applyStaticAttr(desc, lifecycle);
27
- case 'static-prop':
28
- return applyStaticProp(desc, lifecycle);
29
- case 'static-boolean':
30
- return applyStaticBoolean(desc, lifecycle);
31
- case 'static-style':
32
- return applyStaticStyle(desc, lifecycle);
33
- case 'signal-text':
34
- return applySignalText(desc, lifecycle);
35
- case 'signal-class':
36
- return applySignalClass(desc, lifecycle);
37
- case 'signal-attr':
38
- return applySignalAttr(desc, lifecycle);
39
- case 'signal-html':
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 = renderToDom(node, renderLifecycle);
200
- if (result.nodeType === 11 || result.nodeType === 0) {
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: BindingLifecycle;
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
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImZpbGU6Ly8vaG9tZS9ydW5uZXIvd29yay9vcGVuZWxlbWVudC9vcGVuZWxlbWVudC9wYWNrYWdlcy9jb3JlL3NyYy9iaW5kaW5nLWRlc2NyaXB0b3IudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAb3BlbmVsZW1lbnQvY29yZSAtIFVuaWZpZWQgYmluZGluZyBkZXNjcmlwdG9yIHR5cGVzIChBRFItMDEwOSBQaGFzZSAxKS5cbiAqXG4gKiBEZWNsYXJhdGl2ZSBET00gYmluZGluZyBjb250cmFjdHMgdXNlZCBieSB0aGUgcnVudGltZSBhbmQgaHlkcmF0aW9uIGxheWVycy5cbiAqIEVhY2ggZGVzY3JpcHRvciBjYXB0dXJlcyBvbmUgc2lkZSBlZmZlY3QgdG8gYXBwbHkgdG8gYSBob3N0IGVsZW1lbnQuXG4gKlxuICogQG1vZHVsZSBAb3BlbmVsZW1lbnQvY29yZS9iaW5kaW5nLWRlc2NyaXB0b3JcbiAqL1xuXG5pbXBvcnQgdHlwZSB7IFNpZ25hbCB9IGZyb20gJ0BvcGVuZWxlbWVudC9wcm90b2NvbC9zaWduYWwnO1xuXG4vKiogU2hhcmVkIGxpZmVjeWNsZSBjb250ZXh0IGZvciBhIHNldCBvZiBiaW5kaW5ncy4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQmluZGluZ0xpZmVjeWNsZSB7XG4gIC8qKiBBYm9ydFNpZ25hbCB0aGF0IHRyaWdnZXJzIGF1dG9tYXRpYyBkaXNwb3NhbCB3aGVuIGFib3J0ZWQuICovXG4gIHNpZ25hbD86IEFib3J0U2lnbmFsO1xuICAvKiogRXhwbGljaXQgZGlzcG9zZXJzIGNvbGxlY3RlZCBmb3IgYmF0Y2ggY2xlYW51cC4gKi9cbiAgZGlzcG9zZXJzPzogU2V0PCgpID0+IHZvaWQ+O1xufVxuXG4vKiogRGlzcG9zZSBmdW5jdGlvbiByZXR1cm5lZCBieSBiaW5kaW5ncyBhbmQgcmVnaXN0ZXJlZCBpbnRvIGxpZmVjeWNsZS4gKi9cbmV4cG9ydCB0eXBlIEJpbmRpbmdEaXNwb3NlID0gKCkgPT4gdm9pZDtcblxuLy8g4pSA4pSA4pSAIFN0YXRpYyBkZXNjcmlwdG9ycyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuZXhwb3J0IGludGVyZmFjZSBTdGF0aWNBdHRyQmluZGluZ0Rlc2NyaXB0b3Ige1xuICBraW5kOiAnc3RhdGljLWF0dHInO1xuICBlbDogRWxlbWVudDtcbiAga2V5OiBzdHJpbmc7XG4gIGF0dHJOYW1lOiBzdHJpbmc7XG4gIHZhbHVlOiB1bmtub3duO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFN0YXRpY1Byb3BCaW5kaW5nRGVzY3JpcHRvciB7XG4gIGtpbmQ6ICdzdGF0aWMtcHJvcCc7XG4gIGVsOiBFbGVtZW50O1xuICBwcm9wTmFtZTogc3RyaW5nO1xuICB2YWx1ZTogdW5rbm93bjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTdGF0aWNCb29sZWFuQmluZGluZ0Rlc2NyaXB0b3Ige1xuICBraW5kOiAnc3RhdGljLWJvb2xlYW4nO1xuICBlbDogRWxlbWVudDtcbiAgYXR0ck5hbWU6IHN0cmluZztcbiAgdmFsdWU6IGJvb2xlYW47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU3RhdGljU3R5bGVCaW5kaW5nRGVzY3JpcHRvciB7XG4gIGtpbmQ6ICdzdGF0aWMtc3R5bGUnO1xuICBlbDogRWxlbWVudDtcbiAgdmFsdWU6IFJlY29yZDxzdHJpbmcsIHN0cmluZyB8IG51bWJlcj47XG59XG5cbi8vIOKUgOKUgOKUgCBTaWduYWwgZGVzY3JpcHRvcnMg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbmV4cG9ydCBpbnRlcmZhY2UgU2lnbmFsVGV4dEJpbmRpbmdEZXNjcmlwdG9yIHtcbiAga2luZDogJ3NpZ25hbC10ZXh0JztcbiAgZWw6IEVsZW1lbnQgfCBUZXh0O1xuICBzaWduYWw6IFNpZ25hbDx1bmtub3duPjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTaWduYWxDbGFzc0JpbmRpbmdEZXNjcmlwdG9yIHtcbiAga2luZDogJ3NpZ25hbC1jbGFzcyc7XG4gIGVsOiBFbGVtZW50O1xuICBjbGFzc05hbWU6IHN0cmluZztcbiAgc2lnbmFsOiBTaWduYWw8dW5rbm93bj47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU2lnbmFsQXR0ckJpbmRpbmdEZXNjcmlwdG9yIHtcbiAga2luZDogJ3NpZ25hbC1hdHRyJztcbiAgZWw6IEVsZW1lbnQ7XG4gIGF0dHJOYW1lczogc3RyaW5nW107XG4gIHNpZ25hbDogU2lnbmFsPHVua25vd24+O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFNpZ25hbEh0bWxCaW5kaW5nRGVzY3JpcHRvciB7XG4gIGtpbmQ6ICdzaWduYWwtaHRtbCc7XG4gIGVsOiBFbGVtZW50O1xuICBzaWduYWw6IFNpZ25hbDx1bmtub3duPjtcbiAgdHJ1c3RlZDogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTaWduYWxSZW5kZXJCaW5kaW5nRGVzY3JpcHRvciB7XG4gIGtpbmQ6ICdzaWduYWwtcmVuZGVyJztcbiAgZWw6IEVsZW1lbnQ7XG4gIHNpZ25hbDogU2lnbmFsPHVua25vd24+O1xuICBsaWZlY3ljbGU6IEJpbmRpbmdMaWZlY3ljbGU7XG59XG5cbi8vIOKUgOKUgOKUgCBFdmVudCAvIHJlZiBkZXNjcmlwdG9ycyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuZXhwb3J0IGludGVyZmFjZSBFdmVudEJpbmRpbmdEZXNjcmlwdG9yIHtcbiAga2luZDogJ2V2ZW50JztcbiAgZWw6IEV2ZW50VGFyZ2V0O1xuICB0eXBlOiBzdHJpbmc7XG4gIGhhbmRsZXI6IEV2ZW50TGlzdGVuZXJPckV2ZW50TGlzdGVuZXJPYmplY3Q7XG4gIG9wdGlvbnM/OiBBZGRFdmVudExpc3RlbmVyT3B0aW9ucyB8IGJvb2xlYW47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUmVmQmluZGluZ0Rlc2NyaXB0b3Ige1xuICBraW5kOiAncmVmJztcbiAgZWw6IEVsZW1lbnQ7XG4gIGNhbGxiYWNrOiAoZWw6IEVsZW1lbnQpID0+IHZvaWQ7XG59XG5cbi8qKiBVbmlvbiBvZiBhbGwgc3VwcG9ydGVkIGJpbmRpbmcgZGVzY3JpcHRvcnMuICovXG5leHBvcnQgdHlwZSBCaW5kaW5nRGVzY3JpcHRvciA9XG4gIHwgU3RhdGljQXR0ckJpbmRpbmdEZXNjcmlwdG9yXG4gIHwgU3RhdGljUHJvcEJpbmRpbmdEZXNjcmlwdG9yXG4gIHwgU3RhdGljQm9vbGVhbkJpbmRpbmdEZXNjcmlwdG9yXG4gIHwgU3RhdGljU3R5bGVCaW5kaW5nRGVzY3JpcHRvclxuICB8IFNpZ25hbFRleHRCaW5kaW5nRGVzY3JpcHRvclxuICB8IFNpZ25hbENsYXNzQmluZGluZ0Rlc2NyaXB0b3JcbiAgfCBTaWduYWxBdHRyQmluZGluZ0Rlc2NyaXB0b3JcbiAgfCBTaWduYWxIdG1sQmluZGluZ0Rlc2NyaXB0b3JcbiAgfCBTaWduYWxSZW5kZXJCaW5kaW5nRGVzY3JpcHRvclxuICB8IEV2ZW50QmluZGluZ0Rlc2NyaXB0b3JcbiAgfCBSZWZCaW5kaW5nRGVzY3JpcHRvcjtcbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7OztDQU9DLEdBRUQifQ==
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 { applyBindingDescriptor } from "./binding-activation.js";
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";