effectable 1.2.0-canary.5 → 1.2.0-canary.7
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/build/component/GraphRuntime.d.ts +102 -8
- package/build/component/GraphRuntime.d.ts.map +1 -1
- package/build/component/GraphRuntime.js +362 -107
- package/build/component/GraphRuntime.js.map +1 -1
- package/build/connect/connect.d.ts +13 -0
- package/build/connect/connect.d.ts.map +1 -1
- package/build/connect/connect.js +306 -24
- package/build/connect/connect.js.map +1 -1
- package/build/connect/index.d.ts +1 -1
- package/build/connect/index.d.ts.map +1 -1
- package/build/connect/index.js +2 -1
- package/build/connect/index.js.map +1 -1
- package/build/runtime/HandleRegistry.d.ts +14 -1
- package/build/runtime/HandleRegistry.d.ts.map +1 -1
- package/build/runtime/HandleRegistry.js +21 -2
- package/build/runtime/HandleRegistry.js.map +1 -1
- package/build/store/createStore.d.ts.map +1 -1
- package/build/store/createStore.js +39 -5
- package/build/store/createStore.js.map +1 -1
- package/build/store/middleware.d.ts.map +1 -1
- package/build/store/middleware.js +33 -8
- package/build/store/middleware.js.map +1 -1
- package/build/store/selector.d.ts.map +1 -1
- package/build/store/selector.js +9 -1
- package/build/store/selector.js.map +1 -1
- package/build/store/semanticStateTree.d.ts.map +1 -1
- package/build/store/semanticStateTree.js +5 -1
- package/build/store/semanticStateTree.js.map +1 -1
- package/package.json +1 -1
|
@@ -147,6 +147,12 @@ export declare class GraphRuntime {
|
|
|
147
147
|
* unmount() must await this before concluding teardown is finished.
|
|
148
148
|
*/
|
|
149
149
|
private pendingTeardown;
|
|
150
|
+
/**
|
|
151
|
+
* Imperative ref values bound for owners that expose `@UseImperativeHandle` methods.
|
|
152
|
+
* `commitRef` assigns a limited handle (not the Component instance) into `ref.current`;
|
|
153
|
+
* identity-safe clear must still recognize that handle as owned by the instance.
|
|
154
|
+
*/
|
|
155
|
+
private readonly imperativeRefByOwner;
|
|
150
156
|
/**
|
|
151
157
|
* Instances are created only via {@link GraphRuntime.mount}; direct `new GraphRuntime()` is unavailable externally.
|
|
152
158
|
*/
|
|
@@ -184,9 +190,20 @@ export declare class GraphRuntime {
|
|
|
184
190
|
*/
|
|
185
191
|
private disposeEffectableRuntimeBusWiring;
|
|
186
192
|
/**
|
|
187
|
-
*
|
|
193
|
+
* Builds the value assigned to `ref.current` for a mounted instance.
|
|
194
|
+
*
|
|
195
|
+
* When the constructor declares `@UseImperativeHandle` methods, only those methods
|
|
196
|
+
* are exposed (bound to the instance) — matching the refs.ts / CONCEPT contract.
|
|
197
|
+
* Without an allowlist, the full instance is assigned (legacy escape hatch).
|
|
198
|
+
*
|
|
199
|
+
* @param {Component<unknown, unknown>} instance - mounted component instance
|
|
200
|
+
* @returns {unknown} instance or limited imperative handle object
|
|
201
|
+
*/
|
|
202
|
+
private resolveRefCurrentValue;
|
|
203
|
+
/**
|
|
204
|
+
* Identity-safe ref clearing: clears ref.current only if it still points to the expected owner
|
|
205
|
+
* (full instance) or the limited imperative handle previously bound for that owner.
|
|
188
206
|
* Prevents an old rollback from clearing a ref that a newer materialization already reused.
|
|
189
|
-
* No cast required (Component | null → unknown | null is assignable).
|
|
190
207
|
*
|
|
191
208
|
* @param {RefObject<unknown>} ref - ref object
|
|
192
209
|
* @param {Component<unknown, unknown>} expectedOwner - expected current owner
|
|
@@ -199,12 +216,10 @@ export declare class GraphRuntime {
|
|
|
199
216
|
*
|
|
200
217
|
* Rules:
|
|
201
218
|
* - Clear previousRef only if it still points to expectedPreviousOwner (identity-safe).
|
|
202
|
-
* - Bind nextRef to instance
|
|
219
|
+
* - Bind nextRef to the instance, or to a limited `@UseImperativeHandle` surface when declared.
|
|
203
220
|
* - previousRef and nextRef can be the same object (ref reuse) or different (ref swap).
|
|
204
221
|
* - Do not let an old disposer clear a newer owner.
|
|
205
222
|
*
|
|
206
|
-
* No casts: Component | null → unknown | null is assignable (widening).
|
|
207
|
-
*
|
|
208
223
|
* @param {RefObject<unknown> | undefined} previousRef - ref to clear (can be undefined if no previous ref)
|
|
209
224
|
* @param {Component<unknown, unknown> | null} expectedPreviousOwner - expected owner of previousRef (null if unknown)
|
|
210
225
|
* @param {RefObject<unknown> | undefined} nextRef - ref to bind to instance (can be undefined if removing ref)
|
|
@@ -228,7 +243,7 @@ export declare class GraphRuntime {
|
|
|
228
243
|
* Transactional rollback for failed fiber materialization.
|
|
229
244
|
* Releases acquired resources in reverse acquisition order:
|
|
230
245
|
* 1. disable scheduler hook
|
|
231
|
-
* 2. destroy mounted children in
|
|
246
|
+
* 2. destroy mounted children in compose order (same as {@link destroyFiber})
|
|
232
247
|
* 3. run failed-startup cleanup (parent onUnmount when startup ran)
|
|
233
248
|
* 4. dispose runtime bus registrations
|
|
234
249
|
* 5. clear bound ref (identity-safe)
|
|
@@ -251,7 +266,7 @@ export declare class GraphRuntime {
|
|
|
251
266
|
* Async continuation of rollback child destruction after one child's destroy returned a Promise.
|
|
252
267
|
*
|
|
253
268
|
* @param {RuntimeFiber<unknown>[]} children - mounted children
|
|
254
|
-
* @param {number}
|
|
269
|
+
* @param {number} pendingIdx - index of the child whose destroy is pending
|
|
255
270
|
* @param {Promise<void>} pending - Promise from destroying the previous child
|
|
256
271
|
* @param {Error} primaryError - original materialization error
|
|
257
272
|
* @param {Error[]} cleanupErrors - accumulated cleanup errors
|
|
@@ -476,6 +491,79 @@ export declare class GraphRuntime {
|
|
|
476
491
|
* @returns {FiberInspectNode} node snapshot
|
|
477
492
|
*/
|
|
478
493
|
private toFiberInspectNode;
|
|
494
|
+
/**
|
|
495
|
+
* Runs deferred {@link LifecycleEngine.runStartup} for a fiber subtree in
|
|
496
|
+
* children→parent order (siblings in compose order).
|
|
497
|
+
*
|
|
498
|
+
* Call only after the subtree (and any later siblings that must observe
|
|
499
|
+
* publishes) have completed bus wiring. Idempotent for fibers that already
|
|
500
|
+
* started.
|
|
501
|
+
*
|
|
502
|
+
* @param {RuntimeFiber<unknown>} fiber - subtree root
|
|
503
|
+
* @returns {void | Promise<void>}
|
|
504
|
+
*/
|
|
505
|
+
private flushDeferredLifecycleTree;
|
|
506
|
+
/**
|
|
507
|
+
* Async continuation of {@link flushDeferredLifecycleTree} after a child flush returns a Promise.
|
|
508
|
+
*
|
|
509
|
+
* @param {RuntimeFiber<unknown>} fiber - subtree root
|
|
510
|
+
* @param {RuntimeFiber<unknown>[]} children - child fibers
|
|
511
|
+
* @param {number} pendingIdx - index of the pending child
|
|
512
|
+
* @param {PromiseLike<void>} pending - pending child flush
|
|
513
|
+
* @returns {Promise<void>}
|
|
514
|
+
*/
|
|
515
|
+
private continueFlushDeferredLifecycleAsync;
|
|
516
|
+
/**
|
|
517
|
+
* Runs startup + update-hook injection when {@link FiberConstructionJournal.lifecycleDeferred}
|
|
518
|
+
* is set; no-op otherwise.
|
|
519
|
+
*
|
|
520
|
+
* @param {RuntimeFiber<unknown>} fiber - fiber to start
|
|
521
|
+
* @returns {void | Promise<void>}
|
|
522
|
+
*/
|
|
523
|
+
private runDeferredLifecycleIfNeeded;
|
|
524
|
+
/**
|
|
525
|
+
* Async path for {@link runDeferredLifecycleIfNeeded} when startup returns a Promise.
|
|
526
|
+
*
|
|
527
|
+
* @param {RuntimeFiber<unknown>} fiber - fiber being started
|
|
528
|
+
* @param {PromiseLike<import('./lifecycle').LifecycleTransitionResult>} pendingStartup - pending startup
|
|
529
|
+
* @returns {Promise<void>}
|
|
530
|
+
*/
|
|
531
|
+
private finalizeDeferredLifecycleAsync;
|
|
532
|
+
/**
|
|
533
|
+
* After bus wiring: either defer lifecycle (sibling/parent batching) or flush
|
|
534
|
+
* deferred children and run this fiber's startup.
|
|
535
|
+
*
|
|
536
|
+
* @template P node props type
|
|
537
|
+
* @param {RuntimeFiber<P>} fiber - fiber that just finished wiring
|
|
538
|
+
* @param {Component<unknown, P>} instance - component instance
|
|
539
|
+
* @param {LifecycleEngine} engine - lifecycle engine
|
|
540
|
+
* @param {boolean} deferLifecycle - when true, skip startup until a parent flush
|
|
541
|
+
* @returns {RuntimeFiber<P> | Promise<RuntimeFiber<P>>}
|
|
542
|
+
*/
|
|
543
|
+
private completeMaterializeAfterWiring;
|
|
544
|
+
/**
|
|
545
|
+
* Async continuation after a deferred child flush during materialize completion.
|
|
546
|
+
*
|
|
547
|
+
* @template P node props type
|
|
548
|
+
* @param {RuntimeFiber<P>} fiber - parent fiber
|
|
549
|
+
* @param {Component<unknown, P>} instance - parent instance
|
|
550
|
+
* @param {LifecycleEngine} engine - parent engine
|
|
551
|
+
* @param {RuntimeFiber<unknown>[]} children - child fibers
|
|
552
|
+
* @param {number} pendingIdx - pending child index
|
|
553
|
+
* @param {PromiseLike<void>} pending - pending flush
|
|
554
|
+
* @returns {Promise<RuntimeFiber<P>>}
|
|
555
|
+
*/
|
|
556
|
+
private continueCompleteMaterializeAfterWiringAsync;
|
|
557
|
+
/**
|
|
558
|
+
* Runs startup for a fiber that is completing materialize (not deferred).
|
|
559
|
+
*
|
|
560
|
+
* @template P node props type
|
|
561
|
+
* @param {RuntimeFiber<P>} fiber - fiber
|
|
562
|
+
* @param {Component<unknown, P>} instance - instance
|
|
563
|
+
* @param {LifecycleEngine} engine - engine
|
|
564
|
+
* @returns {RuntimeFiber<P> | Promise<RuntimeFiber<P>>}
|
|
565
|
+
*/
|
|
566
|
+
private runMaterializeStartup;
|
|
479
567
|
/**
|
|
480
568
|
* Creates a RuntimeFiber for a virtual node: instantiates the component,
|
|
481
569
|
* injects contexts, builds the child scope (for ContextProvider),
|
|
@@ -488,12 +576,14 @@ export declare class GraphRuntime {
|
|
|
488
576
|
* @param {VirtualServiceNode<P>} vnode - virtual node
|
|
489
577
|
* @param {RuntimeFiber | null} parentFiber - parent fiber
|
|
490
578
|
* @param {ContextScope} parentScope - parent scope
|
|
579
|
+
* @param {boolean} [deferLifecycle=false] - when true, wire buses but defer onMount
|
|
580
|
+
* until {@link flushDeferredLifecycleTree} (used for sibling batching)
|
|
491
581
|
* @returns {RuntimeFiber<P> | Promise<RuntimeFiber<P>>}
|
|
492
582
|
*/
|
|
493
583
|
private materialize;
|
|
494
584
|
/**
|
|
495
585
|
* Async continuation of {@link materialize} after a child returned a Promise.
|
|
496
|
-
* Finishes remaining child fibers with `await`, then
|
|
586
|
+
* Finishes remaining child fibers with `await`, then completes wiring / lifecycle.
|
|
497
587
|
*
|
|
498
588
|
* @param {RuntimeFiber<P>} fiber - current fiber
|
|
499
589
|
* @param {Component<unknown, P>} instance - component instance
|
|
@@ -503,6 +593,7 @@ export declare class GraphRuntime {
|
|
|
503
593
|
* @param {ContextScope} childScope - scope for child nodes
|
|
504
594
|
* @param {Promise<RuntimeFiber<unknown>>} pending - Promise for the current child
|
|
505
595
|
* @param {number} pendingIdx - index of the current child
|
|
596
|
+
* @param {boolean} deferLifecycle - parent defer flag from {@link materialize}
|
|
506
597
|
* @returns {Promise<RuntimeFiber<P>>}
|
|
507
598
|
*/
|
|
508
599
|
private continueMaterializeAsync;
|
|
@@ -525,6 +616,9 @@ export declare class GraphRuntime {
|
|
|
525
616
|
* @param {VirtualServiceNode<P>} nextVnode - new virtual node
|
|
526
617
|
* @param {RuntimeFiber | null} parentFiber - parent fiber
|
|
527
618
|
* @param {ContextScope} parentScope - parent scope
|
|
619
|
+
* @param {boolean} [deferLifecycle=false] - when true, REPLACE materialize wires buses but
|
|
620
|
+
* defers onMount until the sibling batch flush in {@link reconcileChildren} (same contract
|
|
621
|
+
* as PLACE). Root reconcile must leave this false — nothing else flushes the root.
|
|
528
622
|
* @returns {Promise<RuntimeFiber<P>>}
|
|
529
623
|
*/
|
|
530
624
|
private reconcileFiber;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"GraphRuntime.d.ts","sourceRoot":"","sources":["../../src/component/GraphRuntime.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,KAAK,EAEV,cAAc,EACd,gBAAgB,EAGhB,kBAAkB,EACnB,MAAM,SAAS,CAAC;AAcjB,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"GraphRuntime.d.ts","sourceRoot":"","sources":["../../src/component/GraphRuntime.ts"],"names":[],"mappings":"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"}
|