effectable 1.1.0-canary.9 → 1.1.1-canary.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/build/bootstrap/bootstrap.d.ts.map +1 -1
- package/build/bootstrap/bootstrap.js +6 -2
- package/build/bootstrap/bootstrap.js.map +1 -1
- package/build/bootstrap/types.d.ts +4 -2
- package/build/bootstrap/types.d.ts.map +1 -1
- package/build/component/Component.d.ts.map +1 -1
- package/build/component/Component.js +16 -4
- package/build/component/Component.js.map +1 -1
- package/build/component/GraphRuntime.d.ts +18 -2
- package/build/component/GraphRuntime.d.ts.map +1 -1
- package/build/component/GraphRuntime.js +175 -55
- package/build/component/GraphRuntime.js.map +1 -1
- package/build/component/lifecycle.d.ts +11 -2
- package/build/component/lifecycle.d.ts.map +1 -1
- package/build/component/lifecycle.js +21 -4
- package/build/component/lifecycle.js.map +1 -1
- package/build/connect/connect.d.ts.map +1 -1
- package/build/connect/connect.js +64 -5
- package/build/connect/connect.js.map +1 -1
- package/build/runtime/BusDecorators.d.ts.map +1 -1
- package/build/runtime/BusDecorators.js +18 -9
- package/build/runtime/BusDecorators.js.map +1 -1
- package/build/runtime/EventBus.d.ts.map +1 -1
- package/build/runtime/EventBus.js +11 -5
- package/build/runtime/EventBus.js.map +1 -1
- package/build/store/middleware.d.ts.map +1 -1
- package/build/store/middleware.js +11 -1
- package/build/store/middleware.js.map +1 -1
- package/build/store/selector.d.ts.map +1 -1
- package/build/store/selector.js +6 -2
- package/build/store/selector.js.map +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bootstrap.d.ts","sourceRoot":"","sources":["../../src/bootstrap/bootstrap.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,SAAS,EAAwC,MAAM,cAAc,CAAC;AAC/E,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AAOzD,OAAO,KAAK,EACV,cAAc,EACd,YAAY,EACZ,YAAY,EACb,MAAM,YAAY,CAAC;AAEpB,OAAO,KAAK,EACV,eAAe,EACf,gBAAgB,EAGjB,MAAM,SAAS,CAAC;AAgIjB;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAsB,SAAS,CAC7B,MAAM,EACN,UAAU,SAAS,SAAS,CAAC,OAAO,EAAE,MAAM,CAAC,GAAG,SAAS,CAAC,OAAO,EAAE,MAAM,CAAC,EAC1E,QAAQ,SAAS,cAAc,GAAG,cAAc,EAChD,MAAM,SAAS,YAAY,GAAG,YAAY,EAC1C,MAAM,SAAS,YAAY,GAAG,YAAY,EAE1C,IAAI,EAAE,oBAAoB,CAAC,MAAM,CAAC,EAClC,KAAK,EAAE,MAAM,EACb,OAAO,CAAC,EAAE,gBAAgB,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC,GACnD,OAAO,CAAC,eAAe,CAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC,
|
|
1
|
+
{"version":3,"file":"bootstrap.d.ts","sourceRoot":"","sources":["../../src/bootstrap/bootstrap.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,SAAS,EAAwC,MAAM,cAAc,CAAC;AAC/E,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AAOzD,OAAO,KAAK,EACV,cAAc,EACd,YAAY,EACZ,YAAY,EACb,MAAM,YAAY,CAAC;AAEpB,OAAO,KAAK,EACV,eAAe,EACf,gBAAgB,EAGjB,MAAM,SAAS,CAAC;AAgIjB;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAsB,SAAS,CAC7B,MAAM,EACN,UAAU,SAAS,SAAS,CAAC,OAAO,EAAE,MAAM,CAAC,GAAG,SAAS,CAAC,OAAO,EAAE,MAAM,CAAC,EAC1E,QAAQ,SAAS,cAAc,GAAG,cAAc,EAChD,MAAM,SAAS,YAAY,GAAG,YAAY,EAC1C,MAAM,SAAS,YAAY,GAAG,YAAY,EAE1C,IAAI,EAAE,oBAAoB,CAAC,MAAM,CAAC,EAClC,KAAK,EAAE,MAAM,EACb,OAAO,CAAC,EAAE,gBAAgB,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC,GACnD,OAAO,CAAC,eAAe,CAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC,CAsFxE"}
|
|
@@ -159,10 +159,12 @@ async function bootstrap(type, props, options) {
|
|
|
159
159
|
runtime,
|
|
160
160
|
identity: rootIdentity,
|
|
161
161
|
isRunning() {
|
|
162
|
-
|
|
162
|
+
// Include GraphRuntime liveness: fail-stop tears the tree down without
|
|
163
|
+
// going through shutdown(), so `running` alone would lie about health.
|
|
164
|
+
return running && activeGraphRuntime.isActive();
|
|
163
165
|
},
|
|
164
166
|
async reconcile() {
|
|
165
|
-
if (!running) {
|
|
167
|
+
if (!running || !activeGraphRuntime.isActive()) {
|
|
166
168
|
return;
|
|
167
169
|
}
|
|
168
170
|
await activeGraphRuntime.reconcile((0, component_1.h)(type, props));
|
|
@@ -171,6 +173,8 @@ async function bootstrap(type, props, options) {
|
|
|
171
173
|
if (cachedShutdownPromise !== null) {
|
|
172
174
|
return cachedShutdownPromise;
|
|
173
175
|
}
|
|
176
|
+
// Use the latch (`running`), not isRunning(): after fail-stop the runtime
|
|
177
|
+
// is inactive but owned buses/registry still need clearing.
|
|
174
178
|
if (!running) {
|
|
175
179
|
return;
|
|
176
180
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bootstrap.js","sourceRoot":"","sources":["../../src/bootstrap/bootstrap.ts"],"names":[],"mappings":";AAAA;;;;;;;;GAQG;;AAsKH,
|
|
1
|
+
{"version":3,"file":"bootstrap.js","sourceRoot":"","sources":["../../src/bootstrap/bootstrap.ts"],"names":[],"mappings":"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"}
|
|
@@ -83,14 +83,16 @@ export interface BootstrapHandle<TComponent extends Component<unknown, TProps>,
|
|
|
83
83
|
/** Observability identity of the root runtime. */
|
|
84
84
|
identity: BootstrapRuntimeNodeIdentity;
|
|
85
85
|
/**
|
|
86
|
-
* Checks whether the handle is still
|
|
86
|
+
* Checks whether the handle is still live: shutdown has not been called and
|
|
87
|
+
* the underlying GraphRuntime has not fail-stopped.
|
|
87
88
|
*
|
|
88
|
-
* @returns {boolean} true
|
|
89
|
+
* @returns {boolean} true while the root runtime can still reconcile
|
|
89
90
|
*/
|
|
90
91
|
isRunning(): boolean;
|
|
91
92
|
/**
|
|
92
93
|
* Rebuilds the root runtime tree with the original props.
|
|
93
94
|
* Needed by external reactive sources because `Component.setState()` does not reconcile the subtree.
|
|
95
|
+
* No-op after shutdown or GraphRuntime fail-stop.
|
|
94
96
|
*
|
|
95
97
|
* @returns {Promise<void>} completion of the reconcile pass
|
|
96
98
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/bootstrap/types.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,KAAK,EACV,UAAU,EACV,QAAQ,EACR,cAAc,EACd,QAAQ,EACR,cAAc,EACd,YAAY,EACZ,YAAY,EACb,MAAM,YAAY,CAAC;AAEpB;;GAEG;AACH,eAAO,MAAM,2BAA2B;;;CAG9B,CAAC;AACX,MAAM,MAAM,wBAAwB,GAClC,CAAC,OAAO,2BAA2B,CAAC,CAAC,MAAM,OAAO,2BAA2B,CAAC,CAAC;AAEjF;;GAEG;AACH,eAAO,MAAM,gCAAgC;;;CAGnC,CAAC;AACX,MAAM,MAAM,6BAA6B,GACvC,CAAC,OAAO,gCAAgC,CAAC,CAAC,MAAM,OAAO,gCAAgC,CAAC,CAAC;AAE3F;;GAEG;AACH,MAAM,WAAW,4BAA4B;IAC3C,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,wBAAwB,CAAC;IAC/B,SAAS,EAAE,6BAA6B,CAAC;CAC1C;AAED;;;GAGG;AACH,MAAM,WAAW,0BAA0B,CACzC,QAAQ,SAAS,cAAc,GAAG,cAAc,EAChD,MAAM,SAAS,YAAY,GAAG,YAAY,EAC1C,MAAM,SAAS,YAAY,GAAG,YAAY;IAE1C,UAAU,EAAE,UAAU,CAAC,QAAQ,CAAC,CAAC;IACjC,QAAQ,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC;IAC3B,QAAQ,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC;IAC3B,cAAc,EAAE,cAAc,CAAC;CAChC;AAED;;;;;;GAMG;AACH,MAAM,WAAW,gBAAgB,CAC/B,QAAQ,SAAS,cAAc,GAAG,cAAc,EAChD,MAAM,SAAS,YAAY,GAAG,YAAY,EAC1C,MAAM,SAAS,YAAY,GAAG,YAAY;IAE1C,wDAAwD;IACxD,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,2FAA2F;IAC3F,OAAO,CAAC,EAAE,OAAO,CAAC,0BAA0B,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IACxE;;;OAGG;IACH,oBAAoB,CAAC,EAAE,CAAC,GAAG,EAAE,OAAO,KAAK,IAAI,CAAC;CAC/C;AAED;;;;;;;;GAQG;AACH,MAAM,WAAW,eAAe,CAC9B,UAAU,SAAS,SAAS,CAAC,OAAO,EAAE,MAAM,CAAC,EAC7C,MAAM,EACN,QAAQ,SAAS,cAAc,GAAG,cAAc,EAChD,MAAM,SAAS,YAAY,GAAG,YAAY,EAC1C,MAAM,SAAS,YAAY,GAAG,YAAY;IAE1C,yBAAyB;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,uEAAuE;IACvE,YAAY,EAAE,UAAU,CAAC;IACzB,uDAAuD;IACvD,KAAK,EAAE,MAAM,CAAC;IACd,qEAAqE;IACrE,OAAO,EAAE,0BAA0B,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IAC9D,kDAAkD;IAClD,QAAQ,EAAE,4BAA4B,CAAC;IACvC
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/bootstrap/types.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,KAAK,EACV,UAAU,EACV,QAAQ,EACR,cAAc,EACd,QAAQ,EACR,cAAc,EACd,YAAY,EACZ,YAAY,EACb,MAAM,YAAY,CAAC;AAEpB;;GAEG;AACH,eAAO,MAAM,2BAA2B;;;CAG9B,CAAC;AACX,MAAM,MAAM,wBAAwB,GAClC,CAAC,OAAO,2BAA2B,CAAC,CAAC,MAAM,OAAO,2BAA2B,CAAC,CAAC;AAEjF;;GAEG;AACH,eAAO,MAAM,gCAAgC;;;CAGnC,CAAC;AACX,MAAM,MAAM,6BAA6B,GACvC,CAAC,OAAO,gCAAgC,CAAC,CAAC,MAAM,OAAO,gCAAgC,CAAC,CAAC;AAE3F;;GAEG;AACH,MAAM,WAAW,4BAA4B;IAC3C,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,wBAAwB,CAAC;IAC/B,SAAS,EAAE,6BAA6B,CAAC;CAC1C;AAED;;;GAGG;AACH,MAAM,WAAW,0BAA0B,CACzC,QAAQ,SAAS,cAAc,GAAG,cAAc,EAChD,MAAM,SAAS,YAAY,GAAG,YAAY,EAC1C,MAAM,SAAS,YAAY,GAAG,YAAY;IAE1C,UAAU,EAAE,UAAU,CAAC,QAAQ,CAAC,CAAC;IACjC,QAAQ,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC;IAC3B,QAAQ,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC;IAC3B,cAAc,EAAE,cAAc,CAAC;CAChC;AAED;;;;;;GAMG;AACH,MAAM,WAAW,gBAAgB,CAC/B,QAAQ,SAAS,cAAc,GAAG,cAAc,EAChD,MAAM,SAAS,YAAY,GAAG,YAAY,EAC1C,MAAM,SAAS,YAAY,GAAG,YAAY;IAE1C,wDAAwD;IACxD,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,2FAA2F;IAC3F,OAAO,CAAC,EAAE,OAAO,CAAC,0BAA0B,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IACxE;;;OAGG;IACH,oBAAoB,CAAC,EAAE,CAAC,GAAG,EAAE,OAAO,KAAK,IAAI,CAAC;CAC/C;AAED;;;;;;;;GAQG;AACH,MAAM,WAAW,eAAe,CAC9B,UAAU,SAAS,SAAS,CAAC,OAAO,EAAE,MAAM,CAAC,EAC7C,MAAM,EACN,QAAQ,SAAS,cAAc,GAAG,cAAc,EAChD,MAAM,SAAS,YAAY,GAAG,YAAY,EAC1C,MAAM,SAAS,YAAY,GAAG,YAAY;IAE1C,yBAAyB;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,uEAAuE;IACvE,YAAY,EAAE,UAAU,CAAC;IACzB,uDAAuD;IACvD,KAAK,EAAE,MAAM,CAAC;IACd,qEAAqE;IACrE,OAAO,EAAE,0BAA0B,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IAC9D,kDAAkD;IAClD,QAAQ,EAAE,4BAA4B,CAAC;IACvC;;;;;OAKG;IACH,SAAS,IAAI,OAAO,CAAC;IACrB;;;;;;OAMG;IACH,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAC3B;;;;;;;;OAQG;IACH,QAAQ,CAAC,OAAO,CAAC,EAAE;QAAE,oBAAoB,CAAC,EAAE,OAAO,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACvE"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Component.d.ts","sourceRoot":"","sources":["../../src/component/Component.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AACzC,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAC;AAGlD;;;;;;GAMG;AACH,MAAM,MAAM,cAAc,CAAC,CAAC,EAAE,CAAC,GAAG,OAAO,IACrC,OAAO,CAAC,CAAC,CAAC,GACV,CAAC,CAAC,SAAS,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;AAE7C;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,8BAAsB,SAAS,CAAC,CAAC,GAAG,OAAO,EAAE,CAAC,GAAG,OAAO,CACxD,YAAW,SAAS;IAClB;;;;;;;;;;;;;;OAcG;IACH,gBAAuB,YAAY,EAAE,OAAO,CAAS;IAErD,sFAAsF;IAC/E,KAAK,EAAE,CAAC,CAAC;IAEhB,6EAA6E;IACtE,KAAK,EAAE,CAAC,CAAC;IAEhB;;;OAGG;gBACU,KAAK,EAAE,CAAC,EAAE,YAAY,CAAC,EAAE,CAAC;IAKvC;;;;;;;;;OASG;IACI,QAAQ,CAAE,MAAM,EAAE,cAAc,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,IAAI;
|
|
1
|
+
{"version":3,"file":"Component.d.ts","sourceRoot":"","sources":["../../src/component/Component.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AACzC,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAC;AAGlD;;;;;;GAMG;AACH,MAAM,MAAM,cAAc,CAAC,CAAC,EAAE,CAAC,GAAG,OAAO,IACrC,OAAO,CAAC,CAAC,CAAC,GACV,CAAC,CAAC,SAAS,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;AAE7C;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,8BAAsB,SAAS,CAAC,CAAC,GAAG,OAAO,EAAE,CAAC,GAAG,OAAO,CACxD,YAAW,SAAS;IAClB;;;;;;;;;;;;;;OAcG;IACH,gBAAuB,YAAY,EAAE,OAAO,CAAS;IAErD,sFAAsF;IAC/E,KAAK,EAAE,CAAC,CAAC;IAEhB,6EAA6E;IACtE,KAAK,EAAE,CAAC,CAAC;IAEhB;;;OAGG;gBACU,KAAK,EAAE,CAAC,EAAE,YAAY,CAAC,EAAE,CAAC;IAKvC;;;;;;;;;OASG;IACI,QAAQ,CAAE,MAAM,EAAE,cAAc,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,IAAI;IAoCpD;;;;;;;;;OASG;IACI,QAAQ,CAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,GAAG,IAAI;IAI1C;;;;;;OAMG;IACH,OAAO,CAAC,IAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;IAEjC;;;;;OAKG;IACH,SAAS,CAAC,IAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;IAEnC;;;;;;;;OAQG;IACH,OAAO,CAAC,IAAK,kBAAkB,GAAG,kBAAkB,EAAE,GAAG,IAAI;CAC9D"}
|
|
@@ -95,15 +95,27 @@ class Component {
|
|
|
95
95
|
for (const k in src) {
|
|
96
96
|
target[k] = src[k];
|
|
97
97
|
}
|
|
98
|
-
|
|
99
|
-
|
|
98
|
+
// State is already committed: always schedule even if onUpdate throws,
|
|
99
|
+
// otherwise mounted compose/children stay stale after a successful write.
|
|
100
|
+
try {
|
|
101
|
+
this.onUpdate(prev, prev);
|
|
102
|
+
}
|
|
103
|
+
finally {
|
|
104
|
+
this[types_1.SCHEDULE_UPDATE_HOOK]?.();
|
|
105
|
+
}
|
|
100
106
|
return;
|
|
101
107
|
}
|
|
102
108
|
// Shallow-copy previous state and delta to avoid mutating the original state
|
|
103
109
|
const next = { ...prev, ...delta };
|
|
104
110
|
this.state = next;
|
|
105
|
-
|
|
106
|
-
|
|
111
|
+
// State is already committed: always schedule even if onUpdate throws,
|
|
112
|
+
// otherwise mounted compose/children stay stale after a successful write.
|
|
113
|
+
try {
|
|
114
|
+
this.onUpdate(prev, next);
|
|
115
|
+
}
|
|
116
|
+
finally {
|
|
117
|
+
this[types_1.SCHEDULE_UPDATE_HOOK]?.();
|
|
118
|
+
}
|
|
107
119
|
}
|
|
108
120
|
/**
|
|
109
121
|
* Called on every `state` change (from {@link Component.setState} or from connect-HOC
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Component.js","sourceRoot":"","sources":["../../src/component/Component.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;GAkBG;;;AAIH,mCAA+C;AAa/C;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,MAAsB,SAAS;IAE7B;;;;;;;;;;;;;;OAcG;IACI,MAAM,CAAU,YAAY,GAAY,KAAK,CAAC;IAErD,sFAAsF;IAC/E,KAAK,CAAI;IAEhB,6EAA6E;IACtE,KAAK,CAAI;IAEhB;;;OAGG;IACH,YAAa,KAAQ,EAAE,YAAgB;QACrC,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,IAAI,CAAC,KAAK,GAAG,CAAC,YAAY,IAAI,EAAE,CAAM,CAAC;IACzC,CAAC;IAED;;;;;;;;;OASG;IACI,QAAQ,CAAE,MAA4B;QAC3C,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC;QACxB,MAAM,KAAK,GAAG,OAAO,MAAM,KAAK,UAAU;YACxC,CAAC,CAAE,MAA4C,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC;YACjE,CAAC,CAAC,MAAM,CAAC;QAEX,yEAAyE;QACzE,+DAA+D;QAC/D,IAAK,IAAI,CAAC,WAA0C,CAAC,YAAY,KAAK,IAAI,EAAE,CAAC;YAC3E,MAAM,MAAM,GAAG,IAA0C,CAAC;YAC1D,MAAM,GAAG,GAAG,KAA2C,CAAC;YACxD,KAAK,MAAM,CAAC,IAAI,GAAG,EAAE,CAAC;gBACpB,MAAM,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;YACrB,CAAC;YACD,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"Component.js","sourceRoot":"","sources":["../../src/component/Component.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;GAkBG;;;AAIH,mCAA+C;AAa/C;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,MAAsB,SAAS;IAE7B;;;;;;;;;;;;;;OAcG;IACI,MAAM,CAAU,YAAY,GAAY,KAAK,CAAC;IAErD,sFAAsF;IAC/E,KAAK,CAAI;IAEhB,6EAA6E;IACtE,KAAK,CAAI;IAEhB;;;OAGG;IACH,YAAa,KAAQ,EAAE,YAAgB;QACrC,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,IAAI,CAAC,KAAK,GAAG,CAAC,YAAY,IAAI,EAAE,CAAM,CAAC;IACzC,CAAC;IAED;;;;;;;;;OASG;IACI,QAAQ,CAAE,MAA4B;QAC3C,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC;QACxB,MAAM,KAAK,GAAG,OAAO,MAAM,KAAK,UAAU;YACxC,CAAC,CAAE,MAA4C,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC;YACjE,CAAC,CAAC,MAAM,CAAC;QAEX,yEAAyE;QACzE,+DAA+D;QAC/D,IAAK,IAAI,CAAC,WAA0C,CAAC,YAAY,KAAK,IAAI,EAAE,CAAC;YAC3E,MAAM,MAAM,GAAG,IAA0C,CAAC;YAC1D,MAAM,GAAG,GAAG,KAA2C,CAAC;YACxD,KAAK,MAAM,CAAC,IAAI,GAAG,EAAE,CAAC;gBACpB,MAAM,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;YACrB,CAAC;YACD,uEAAuE;YACvE,0EAA0E;YAC1E,IAAI,CAAC;gBACH,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;YAC5B,CAAC;oBAAS,CAAC;gBACR,IAA2D,CAAC,4BAAoB,CAAC,EAAE,EAAE,CAAC;YACzF,CAAC;YACD,OAAO;QACT,CAAC;QAED,6EAA6E;QAC7E,MAAM,IAAI,GAAG,EAAE,GAAG,IAAI,EAAE,GAAG,KAAK,EAAE,CAAC;QACnC,IAAI,CAAC,KAAK,GAAG,IAAS,CAAC;QACvB,uEAAuE;QACvE,0EAA0E;QAC1E,IAAI,CAAC;YACH,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QAC5B,CAAC;gBAAS,CAAC;YACR,IAA2D,CAAC,4BAAoB,CAAC,EAAE,EAAE,CAAC;QACzF,CAAC;IACH,CAAC;IAED;;;;;;;;;OASG;IACI,QAAQ,CAAE,KAAQ,EAAE,KAAQ;QACjC,kDAAkD;IACpD,CAAC;;AA5FH,8BAyHC"}
|
|
@@ -238,9 +238,22 @@ export declare class GraphRuntime {
|
|
|
238
238
|
* @param {Promise<void>} pending - Promise from destroying the previous child
|
|
239
239
|
* @param {Error} primaryError - original materialization error
|
|
240
240
|
* @param {Error[]} cleanupErrors - accumulated cleanup errors
|
|
241
|
+
* @param {RuntimeFiber<unknown>} fiber - parent fiber being rolled back
|
|
242
|
+
* @param {Component<unknown, unknown> | null} instance - parent instance (for post-child cleanup)
|
|
241
243
|
* @returns {Promise<void>}
|
|
242
244
|
*/
|
|
243
245
|
private continueRollbackDestroyAsync;
|
|
246
|
+
/**
|
|
247
|
+
* After rollback destroyed children: run parent failed-cleanup only when startup
|
|
248
|
+
* actually ran (`status !== 'registered'`), then attach cleanup errors and rethrow.
|
|
249
|
+
*
|
|
250
|
+
* @param {RuntimeFiber<unknown>} fiber - parent fiber being rolled back
|
|
251
|
+
* @param {Component<unknown, unknown> | null} instance - parent instance
|
|
252
|
+
* @param {Error} primaryError - original materialization error
|
|
253
|
+
* @param {Error[]} cleanupErrors - accumulated cleanup errors
|
|
254
|
+
* @returns {void | Promise<void>} always rejects via {@link finalizeRollback}
|
|
255
|
+
*/
|
|
256
|
+
private finishRollbackParentCleanup;
|
|
244
257
|
/**
|
|
245
258
|
* Attaches cleanup errors to the primary error and rethrows.
|
|
246
259
|
*
|
|
@@ -500,10 +513,13 @@ export declare class GraphRuntime {
|
|
|
500
513
|
*/
|
|
501
514
|
private updateFiber;
|
|
502
515
|
/**
|
|
503
|
-
* Fiber cleanup after update/compose error:
|
|
504
|
-
* Does not leave the node in `ready`.
|
|
516
|
+
* Fiber cleanup after update/compose error: destroy children first (children → parent),
|
|
517
|
+
* then `runFailedCleanup` + bus dispose. Does not leave the node in `ready`.
|
|
518
|
+
* Child destroy / disposer errors are attached to `primaryError.rollbackErrors` when provided
|
|
519
|
+
* so fail-stop observability still surfaces them (children are no longer destroyed in failStop).
|
|
505
520
|
*
|
|
506
521
|
* @param {RuntimeFiber<unknown>} fiber - fiber that failed
|
|
522
|
+
* @param {unknown} [primaryError] - originating error to attach cleanup failures onto
|
|
507
523
|
* @returns {void | Promise<void>}
|
|
508
524
|
*/
|
|
509
525
|
private runFiberFailedCleanup;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"GraphRuntime.d.ts","sourceRoot":"","sources":["../../src/component/GraphRuntime.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,KAAK,EAEV,cAAc,EACd,gBAAgB,EAGhB,kBAAkB,EACnB,MAAM,SAAS,CAAC;AASjB,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AAC9C,OAAO,KAAK,EACV,cAAc,EACd,YAAY,EACZ,YAAY,EACb,MAAM,kBAAkB,CAAC;AAC1B,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAyBnE;;;GAGG;AACH,QAAA,MAAM,aAAa;;;;;;CAMT,CAAC;AAEX;;;GAGG;AACH,KAAK,YAAY,GAAG,CAAC,OAAO,aAAa,CAAC,CAAC,MAAM,OAAO,aAAa,CAAC,CAAC;AAsDvE;;;;;;;;;GASG;AACH,qBAAa,YAAY;IACvB,8CAA8C;IAC9C,OAAO,CAAC,WAAW,CAA6B;IAChD;;;OAGG;IACH,OAAO,CAAC,wBAAwB,CAAK;IAErC;;;OAGG;IACH,OAAO,CAAC,MAAM,CAAoC;IAElD;;;;OAIG;IACH,OAAO,KAAK,KAAK,GAEhB;IAED,OAAO,KAAK,KAAK,QAEhB;IAED;;;OAGG;IACH,OAAO,CAAC,aAAa,CAAsB;IAE3C;;OAEG;IACH,OAAO,CAAC,sBAAsB,CAId;IAEhB;;;;OAIG;IACH,OAAO,CAAC,QAAQ,CAAC,YAAY,CAA4C;IAEzE;;;OAGG;IACH,OAAO,CAAC,cAAc,CAAK;IAE3B;;;OAGG;IACH,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAyC;IAErE,oDAAoD;IACpD,OAAO,CAAC,cAAc,CAAS;IAE/B,+EAA+E;IAC/E,OAAO,CAAC,QAAQ,CAAS;IAEzB;;;OAGG;IACH,OAAO,CAAC,WAAW,CAA8B;IAEjD;;;OAGG;IACH,OAAO,CAAC,mBAAmB,CAAK;IAEhC;;;OAGG;IACH,OAAO,CAAC,oBAAoB,CAAyC;IAErE;;;OAGG;IACH,OAAO,CAAC,cAAc,CAAkC;IAExD;;OAEG;IACH,OAAO,CAAC,mBAAmB,CAAS;IAEpC;;OAEG;IACH,OAAO,CAAC,oBAAoB,CAA8B;IAE1D;;;;OAIG;IACH,OAAO,CAAC,eAAe,CAA8B;IAErD;;OAEG;IACH,OAAO;IAEP;;;;;;;;;;;;;;OAcG;IACH,OAAO,CAAC,QAAQ;IA4ChB;;;;;;;OAOG;IACH,OAAO,CAAC,gCAAgC;IAcxC;;;;;OAKG;IACH,OAAO,CAAC,iCAAiC;IASzC;;;;;;;;OAQG;IACH,OAAO,CAAC,YAAY;IAMpB;;;;;;;;;;;;;;;;;OAiBG;IACH,OAAO,CAAC,SAAS;IAiBjB;;;;;;;;;;OAUG;IACH,OAAO,CAAC,oBAAoB;IA+B5B;;;;;;;;;;;;;;;;OAgBG;IACH,OAAO,CAAC,6BAA6B;
|
|
1
|
+
{"version":3,"file":"GraphRuntime.d.ts","sourceRoot":"","sources":["../../src/component/GraphRuntime.ts"],"names":[],"mappings":"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"}
|
|
@@ -383,46 +383,29 @@ class GraphRuntime {
|
|
|
383
383
|
cleanupErrors.push(err instanceof Error ? err : new Error(String(err)));
|
|
384
384
|
}
|
|
385
385
|
}
|
|
386
|
-
// 4.
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
const cleanupRes = fiber.engine.runFailedCleanup(instance, true);
|
|
391
|
-
if (isThenable(cleanupRes)) {
|
|
392
|
-
cleanupPromise = cleanupRes;
|
|
393
|
-
}
|
|
394
|
-
}
|
|
395
|
-
catch (err) {
|
|
396
|
-
cleanupErrors.push(err instanceof Error ? err : new Error(String(err)));
|
|
397
|
-
}
|
|
398
|
-
}
|
|
399
|
-
// 5. Destroy mounted children in reverse order.
|
|
386
|
+
// 4. Destroy mounted children in reverse order BEFORE parent onUnmount.
|
|
387
|
+
// Documented teardown contract is children → parent; running parent
|
|
388
|
+
// runFailedCleanup first left children alive during parent onUnmount and
|
|
389
|
+
// also called parent onUnmount when startup never ran (wasMounted=true).
|
|
400
390
|
// Pass cleanupErrors so nested destroy is best-effort: a throwing
|
|
401
391
|
// ref-clear/disposer on one grandchild must not skip remaining siblings.
|
|
402
392
|
// Those nodes were never attached to currentRoot, so failStop cannot reclaim them.
|
|
403
|
-
const
|
|
393
|
+
const destroyChildrenThenParentCleanup = () => {
|
|
404
394
|
const children = journal.mountedChildren;
|
|
405
395
|
for (let i = children.length - 1; i >= 0; i -= 1) {
|
|
406
396
|
try {
|
|
407
397
|
const destroyRes = this.destroyFiber(children[i], cleanupErrors);
|
|
408
398
|
if (isThenable(destroyRes)) {
|
|
409
|
-
return this.continueRollbackDestroyAsync(children, i, destroyRes, primaryError, cleanupErrors);
|
|
399
|
+
return this.continueRollbackDestroyAsync(children, i, destroyRes, primaryError, cleanupErrors, fiber, instance);
|
|
410
400
|
}
|
|
411
401
|
}
|
|
412
402
|
catch (err) {
|
|
413
403
|
cleanupErrors.push(err instanceof Error ? err : new Error(String(err)));
|
|
414
404
|
}
|
|
415
405
|
}
|
|
416
|
-
|
|
417
|
-
this.finalizeRollback(primaryError, cleanupErrors);
|
|
406
|
+
return this.finishRollbackParentCleanup(fiber, instance, primaryError, cleanupErrors);
|
|
418
407
|
};
|
|
419
|
-
|
|
420
|
-
return cleanupPromise.then(() => destroyChildrenAndFinalize(), (err) => {
|
|
421
|
-
cleanupErrors.push(err instanceof Error ? err : new Error(String(err)));
|
|
422
|
-
return destroyChildrenAndFinalize();
|
|
423
|
-
});
|
|
424
|
-
}
|
|
425
|
-
return destroyChildrenAndFinalize();
|
|
408
|
+
return destroyChildrenThenParentCleanup();
|
|
426
409
|
}
|
|
427
410
|
/**
|
|
428
411
|
* Async continuation of rollback child destruction after one child's destroy returned a Promise.
|
|
@@ -432,9 +415,11 @@ class GraphRuntime {
|
|
|
432
415
|
* @param {Promise<void>} pending - Promise from destroying the previous child
|
|
433
416
|
* @param {Error} primaryError - original materialization error
|
|
434
417
|
* @param {Error[]} cleanupErrors - accumulated cleanup errors
|
|
418
|
+
* @param {RuntimeFiber<unknown>} fiber - parent fiber being rolled back
|
|
419
|
+
* @param {Component<unknown, unknown> | null} instance - parent instance (for post-child cleanup)
|
|
435
420
|
* @returns {Promise<void>}
|
|
436
421
|
*/
|
|
437
|
-
async continueRollbackDestroyAsync(children, lastIdx, pending, primaryError, cleanupErrors) {
|
|
422
|
+
async continueRollbackDestroyAsync(children, lastIdx, pending, primaryError, cleanupErrors, fiber, instance) {
|
|
438
423
|
try {
|
|
439
424
|
await pending;
|
|
440
425
|
}
|
|
@@ -452,6 +437,44 @@ class GraphRuntime {
|
|
|
452
437
|
cleanupErrors.push(err instanceof Error ? err : new Error(String(err)));
|
|
453
438
|
}
|
|
454
439
|
}
|
|
440
|
+
const cleanupRes = this.finishRollbackParentCleanup(fiber, instance, primaryError, cleanupErrors);
|
|
441
|
+
if (isThenable(cleanupRes)) {
|
|
442
|
+
await cleanupRes;
|
|
443
|
+
}
|
|
444
|
+
}
|
|
445
|
+
/**
|
|
446
|
+
* After rollback destroyed children: run parent failed-cleanup only when startup
|
|
447
|
+
* actually ran (`status !== 'registered'`), then attach cleanup errors and rethrow.
|
|
448
|
+
*
|
|
449
|
+
* @param {RuntimeFiber<unknown>} fiber - parent fiber being rolled back
|
|
450
|
+
* @param {Component<unknown, unknown> | null} instance - parent instance
|
|
451
|
+
* @param {Error} primaryError - original materialization error
|
|
452
|
+
* @param {Error[]} cleanupErrors - accumulated cleanup errors
|
|
453
|
+
* @returns {void | Promise<void>} always rejects via {@link finalizeRollback}
|
|
454
|
+
*/
|
|
455
|
+
finishRollbackParentCleanup(fiber, instance, primaryError, cleanupErrors) {
|
|
456
|
+
if (instance !== null) {
|
|
457
|
+
// `registered` ⇒ runStartup never entered; do not invent an onUnmount.
|
|
458
|
+
// `failed` (deferFailedCleanup) / other post-startup statuses ⇒ wasMounted.
|
|
459
|
+
const wasMounted = fiber.engine.getStatus() !== 'registered';
|
|
460
|
+
if (wasMounted) {
|
|
461
|
+
try {
|
|
462
|
+
const cleanupRes = fiber.engine.runFailedCleanup(instance, true);
|
|
463
|
+
if (isThenable(cleanupRes)) {
|
|
464
|
+
return cleanupRes.then(() => {
|
|
465
|
+
this.finalizeRollback(primaryError, cleanupErrors);
|
|
466
|
+
}, (err) => {
|
|
467
|
+
cleanupErrors.push(err instanceof Error ? err : new Error(String(err)));
|
|
468
|
+
this.finalizeRollback(primaryError, cleanupErrors);
|
|
469
|
+
});
|
|
470
|
+
}
|
|
471
|
+
}
|
|
472
|
+
catch (err) {
|
|
473
|
+
cleanupErrors.push(err instanceof Error ? err : new Error(String(err)));
|
|
474
|
+
}
|
|
475
|
+
}
|
|
476
|
+
fiber.lifecycleStatus = fiber.engine.getStatus();
|
|
477
|
+
}
|
|
455
478
|
this.finalizeRollback(primaryError, cleanupErrors);
|
|
456
479
|
}
|
|
457
480
|
/**
|
|
@@ -700,9 +723,17 @@ class GraphRuntime {
|
|
|
700
723
|
}
|
|
701
724
|
catch (error) {
|
|
702
725
|
this.flushing = false;
|
|
703
|
-
// Notify error handler before fail-stop
|
|
726
|
+
// Notify error handler before fail-stop. The hook must not be allowed to
|
|
727
|
+
// skip fail-stop: a throwing observer would leave the runtime ACTIVE with
|
|
728
|
+
// fibers already run through runFiberFailedCleanup, and the microtask
|
|
729
|
+
// `.catch(() => {})` would swallow the failure silently.
|
|
704
730
|
if (this.onAutoReconcileError !== null) {
|
|
705
|
-
|
|
731
|
+
try {
|
|
732
|
+
this.onAutoReconcileError(error);
|
|
733
|
+
}
|
|
734
|
+
catch {
|
|
735
|
+
// Observer/logging failures are non-fatal relative to fail-stop.
|
|
736
|
+
}
|
|
706
737
|
}
|
|
707
738
|
// Fail-stop on unrecoverable dirty-flush error
|
|
708
739
|
const failError = error instanceof Error ? error : new Error(String(error));
|
|
@@ -721,9 +752,14 @@ class GraphRuntime {
|
|
|
721
752
|
this.dirtyFibers.clear();
|
|
722
753
|
this.dirtyFlushPassCount = 0;
|
|
723
754
|
const loopError = new Error(`GraphRuntime: dirty flush exceeded ${String(graphRuntime_constants_1.GRAPH_RUNTIME_MAX_DIRTY_FLUSH_PASSES)} passes (anti-loop)`);
|
|
724
|
-
//
|
|
755
|
+
// Same contract as the catch path: observer throw must not skip fail-stop.
|
|
725
756
|
if (this.onAutoReconcileError !== null) {
|
|
726
|
-
|
|
757
|
+
try {
|
|
758
|
+
this.onAutoReconcileError(loopError);
|
|
759
|
+
}
|
|
760
|
+
catch {
|
|
761
|
+
// Observer/logging failures are non-fatal relative to fail-stop.
|
|
762
|
+
}
|
|
727
763
|
}
|
|
728
764
|
// Fail-stop on loop limit
|
|
729
765
|
const failRes = this.failStop(loopError);
|
|
@@ -763,7 +799,7 @@ class GraphRuntime {
|
|
|
763
799
|
return childrenRes.then((nextChildren) => {
|
|
764
800
|
fiber.children = nextChildren;
|
|
765
801
|
}, (error) => {
|
|
766
|
-
const cleanupResult = this.runFiberFailedCleanup(fiber);
|
|
802
|
+
const cleanupResult = this.runFiberFailedCleanup(fiber, error);
|
|
767
803
|
if (isThenable(cleanupResult)) {
|
|
768
804
|
return cleanupResult.then(() => {
|
|
769
805
|
throw error;
|
|
@@ -775,7 +811,7 @@ class GraphRuntime {
|
|
|
775
811
|
fiber.children = childrenRes;
|
|
776
812
|
}
|
|
777
813
|
catch (error) {
|
|
778
|
-
const cleanupResult = this.runFiberFailedCleanup(fiber);
|
|
814
|
+
const cleanupResult = this.runFiberFailedCleanup(fiber, error);
|
|
779
815
|
if (isThenable(cleanupResult)) {
|
|
780
816
|
return cleanupResult.then(() => {
|
|
781
817
|
throw error;
|
|
@@ -1106,11 +1142,26 @@ class GraphRuntime {
|
|
|
1106
1142
|
// ancestor setState (via props callback). Without this hook, that update
|
|
1107
1143
|
// mutates state but never schedules reconcile.
|
|
1108
1144
|
this.injectPreMountUpdateHook(instance, fiber);
|
|
1109
|
-
//
|
|
1110
|
-
|
|
1111
|
-
//
|
|
1112
|
-
|
|
1113
|
-
|
|
1145
|
+
// compose() / duplicate-key validation can throw after the pre-mount hook is
|
|
1146
|
+
// attached. Roll back so the hook is cleared (otherwise the failed fiber is
|
|
1147
|
+
// abandoned with a live SCHEDULE_UPDATE_HOOK and no teardown).
|
|
1148
|
+
let childVnodes;
|
|
1149
|
+
try {
|
|
1150
|
+
childVnodes = this.getChildVnodes(instance, vnode.children);
|
|
1151
|
+
// Validate unique keys BEFORE materialization (Option A: React v16.5 contract)
|
|
1152
|
+
// Prevent partial tree construction when duplicate keys are present
|
|
1153
|
+
this.validateUniqueKeys(childVnodes.map(vnode => ({ vnode, instance: null })), fiber, 'current');
|
|
1154
|
+
}
|
|
1155
|
+
catch (err) {
|
|
1156
|
+
const error = err instanceof Error ? err : new Error(String(err));
|
|
1157
|
+
const rollbackRes = this.rollbackFailedMaterialization(fiber, error);
|
|
1158
|
+
if (isThenable(rollbackRes)) {
|
|
1159
|
+
return rollbackRes.then(() => {
|
|
1160
|
+
throw error;
|
|
1161
|
+
});
|
|
1162
|
+
}
|
|
1163
|
+
throw error;
|
|
1164
|
+
}
|
|
1114
1165
|
for (let i = 0; i < childVnodes.length; i++) {
|
|
1115
1166
|
const childVnode = childVnodes[i];
|
|
1116
1167
|
let childRes;
|
|
@@ -1170,7 +1221,7 @@ class GraphRuntime {
|
|
|
1170
1221
|
// Run lifecycle after all children are materialized.
|
|
1171
1222
|
// Pre-mount hook was injected before children (covers ancestor setState
|
|
1172
1223
|
// from descendant onMount and setState during this node's onMount).
|
|
1173
|
-
const startupRes = engine.runStartup(instance);
|
|
1224
|
+
const startupRes = engine.runStartup(instance, { deferFailedCleanup: true });
|
|
1174
1225
|
if (isThenable(startupRes)) {
|
|
1175
1226
|
return this.finalizeMaterializeAsync(fiber, engine, startupRes);
|
|
1176
1227
|
}
|
|
@@ -1263,7 +1314,7 @@ class GraphRuntime {
|
|
|
1263
1314
|
throw err;
|
|
1264
1315
|
}
|
|
1265
1316
|
// Pre-mount hook already injected at the start of materialize (before children).
|
|
1266
|
-
const startupRes = engine.runStartup(instance);
|
|
1317
|
+
const startupRes = engine.runStartup(instance, { deferFailedCleanup: true });
|
|
1267
1318
|
const resolved = isThenable(startupRes) ? await startupRes : startupRes;
|
|
1268
1319
|
if (!resolved.ok) {
|
|
1269
1320
|
const error = resolved.error instanceof Error ? resolved.error : new Error(String(resolved.error));
|
|
@@ -1367,7 +1418,7 @@ class GraphRuntime {
|
|
|
1367
1418
|
contextChanged = (0, context_1.injectContextFields)(instance, parentScope);
|
|
1368
1419
|
}
|
|
1369
1420
|
catch (error) {
|
|
1370
|
-
const cleanupResult = this.runFiberFailedCleanup(current);
|
|
1421
|
+
const cleanupResult = this.runFiberFailedCleanup(current, error);
|
|
1371
1422
|
if (isThenable(cleanupResult)) {
|
|
1372
1423
|
return cleanupResult.then(() => {
|
|
1373
1424
|
throw error;
|
|
@@ -1385,7 +1436,7 @@ class GraphRuntime {
|
|
|
1385
1436
|
instance.onUpdate(prevProps, instance.props);
|
|
1386
1437
|
}
|
|
1387
1438
|
catch (error) {
|
|
1388
|
-
const cleanupResult = this.runFiberFailedCleanup(current);
|
|
1439
|
+
const cleanupResult = this.runFiberFailedCleanup(current, error);
|
|
1389
1440
|
if (isThenable(cleanupResult)) {
|
|
1390
1441
|
return cleanupResult.then(() => {
|
|
1391
1442
|
throw error;
|
|
@@ -1394,15 +1445,16 @@ class GraphRuntime {
|
|
|
1394
1445
|
throw error;
|
|
1395
1446
|
}
|
|
1396
1447
|
}
|
|
1397
|
-
// Commit ref transition: clear old ref if changed, bind new ref
|
|
1398
|
-
this.commitRef(current.vnode.ref, instance, nextVnode.ref, instance);
|
|
1399
1448
|
// Reconcile child nodes (sync fast-path if all children are sync).
|
|
1449
|
+
// Ref commit is deferred to applyFiberUpdate so a compose()/child-reconcile
|
|
1450
|
+
// failure cannot leave nextRef.current pointing at an instance that failStop
|
|
1451
|
+
// will destroy while fiber.vnode.ref still holds the previous ref.
|
|
1400
1452
|
let nextChildVnodes;
|
|
1401
1453
|
try {
|
|
1402
1454
|
nextChildVnodes = this.getChildVnodes(instance, nextVnode.children);
|
|
1403
1455
|
}
|
|
1404
1456
|
catch (error) {
|
|
1405
|
-
const cleanupResult = this.runFiberFailedCleanup(current);
|
|
1457
|
+
const cleanupResult = this.runFiberFailedCleanup(current, error);
|
|
1406
1458
|
if (isThenable(cleanupResult)) {
|
|
1407
1459
|
return cleanupResult.then(() => {
|
|
1408
1460
|
throw error;
|
|
@@ -1421,28 +1473,91 @@ class GraphRuntime {
|
|
|
1421
1473
|
return current;
|
|
1422
1474
|
}
|
|
1423
1475
|
/**
|
|
1424
|
-
* Fiber cleanup after update/compose error:
|
|
1425
|
-
* Does not leave the node in `ready`.
|
|
1476
|
+
* Fiber cleanup after update/compose error: destroy children first (children → parent),
|
|
1477
|
+
* then `runFailedCleanup` + bus dispose. Does not leave the node in `ready`.
|
|
1478
|
+
* Child destroy / disposer errors are attached to `primaryError.rollbackErrors` when provided
|
|
1479
|
+
* so fail-stop observability still surfaces them (children are no longer destroyed in failStop).
|
|
1426
1480
|
*
|
|
1427
1481
|
* @param {RuntimeFiber<unknown>} fiber - fiber that failed
|
|
1482
|
+
* @param {unknown} [primaryError] - originating error to attach cleanup failures onto
|
|
1428
1483
|
* @returns {void | Promise<void>}
|
|
1429
1484
|
*/
|
|
1430
|
-
runFiberFailedCleanup(fiber) {
|
|
1485
|
+
runFiberFailedCleanup(fiber, primaryError) {
|
|
1431
1486
|
const instance = fiber.instance;
|
|
1432
1487
|
if (instance === null) {
|
|
1433
1488
|
return;
|
|
1434
1489
|
}
|
|
1435
1490
|
this.clearUpdateHook(instance);
|
|
1436
1491
|
this.dirtyFibers.delete(fiber);
|
|
1437
|
-
const
|
|
1438
|
-
|
|
1439
|
-
|
|
1440
|
-
|
|
1441
|
-
|
|
1442
|
-
|
|
1492
|
+
const cleanupErrors = [];
|
|
1493
|
+
const children = fiber.children;
|
|
1494
|
+
const attachCleanupErrors = () => {
|
|
1495
|
+
if (cleanupErrors.length > 0 &&
|
|
1496
|
+
primaryError instanceof Error) {
|
|
1497
|
+
const existing = primaryError.rollbackErrors;
|
|
1498
|
+
primaryError.rollbackErrors =
|
|
1499
|
+
existing !== undefined ? existing.concat(cleanupErrors) : cleanupErrors.slice();
|
|
1500
|
+
}
|
|
1501
|
+
};
|
|
1502
|
+
const finishParent = () => {
|
|
1503
|
+
fiber.children = [];
|
|
1504
|
+
const cleanupResult = fiber.engine.runFailedCleanup(instance, true);
|
|
1505
|
+
if (isThenable(cleanupResult)) {
|
|
1506
|
+
return cleanupResult.then(() => {
|
|
1507
|
+
this.disposeEffectableRuntimeBusWiring(fiber);
|
|
1508
|
+
fiber.lifecycleStatus = fiber.engine.getStatus();
|
|
1509
|
+
attachCleanupErrors();
|
|
1510
|
+
}, (err) => {
|
|
1511
|
+
cleanupErrors.push(err instanceof Error ? err : new Error(String(err)));
|
|
1512
|
+
this.disposeEffectableRuntimeBusWiring(fiber);
|
|
1513
|
+
fiber.lifecycleStatus = fiber.engine.getStatus();
|
|
1514
|
+
attachCleanupErrors();
|
|
1515
|
+
throw err;
|
|
1516
|
+
});
|
|
1517
|
+
}
|
|
1518
|
+
this.disposeEffectableRuntimeBusWiring(fiber);
|
|
1519
|
+
fiber.lifecycleStatus = fiber.engine.getStatus();
|
|
1520
|
+
attachCleanupErrors();
|
|
1521
|
+
};
|
|
1522
|
+
for (let i = children.length - 1; i >= 0; i -= 1) {
|
|
1523
|
+
try {
|
|
1524
|
+
const destroyRes = this.destroyFiber(children[i], cleanupErrors);
|
|
1525
|
+
if (isThenable(destroyRes)) {
|
|
1526
|
+
return destroyRes.then(async () => {
|
|
1527
|
+
for (let j = i - 1; j >= 0; j -= 1) {
|
|
1528
|
+
try {
|
|
1529
|
+
const r = this.destroyFiber(children[j], cleanupErrors);
|
|
1530
|
+
if (isThenable(r)) {
|
|
1531
|
+
await r;
|
|
1532
|
+
}
|
|
1533
|
+
}
|
|
1534
|
+
catch (err) {
|
|
1535
|
+
cleanupErrors.push(err instanceof Error ? err : new Error(String(err)));
|
|
1536
|
+
}
|
|
1537
|
+
}
|
|
1538
|
+
return finishParent();
|
|
1539
|
+
}, async (err) => {
|
|
1540
|
+
cleanupErrors.push(err instanceof Error ? err : new Error(String(err)));
|
|
1541
|
+
for (let j = i - 1; j >= 0; j -= 1) {
|
|
1542
|
+
try {
|
|
1543
|
+
const r = this.destroyFiber(children[j], cleanupErrors);
|
|
1544
|
+
if (isThenable(r)) {
|
|
1545
|
+
await r;
|
|
1546
|
+
}
|
|
1547
|
+
}
|
|
1548
|
+
catch (inner) {
|
|
1549
|
+
cleanupErrors.push(inner instanceof Error ? inner : new Error(String(inner)));
|
|
1550
|
+
}
|
|
1551
|
+
}
|
|
1552
|
+
return finishParent();
|
|
1553
|
+
});
|
|
1554
|
+
}
|
|
1555
|
+
}
|
|
1556
|
+
catch (err) {
|
|
1557
|
+
cleanupErrors.push(err instanceof Error ? err : new Error(String(err)));
|
|
1558
|
+
}
|
|
1443
1559
|
}
|
|
1444
|
-
|
|
1445
|
-
fiber.lifecycleStatus = fiber.engine.getStatus();
|
|
1560
|
+
return finishParent();
|
|
1446
1561
|
}
|
|
1447
1562
|
/**
|
|
1448
1563
|
* Applies the reconcile result to the current fiber in-place.
|
|
@@ -1457,6 +1572,11 @@ class GraphRuntime {
|
|
|
1457
1572
|
* @returns {void}
|
|
1458
1573
|
*/
|
|
1459
1574
|
applyFiberUpdate(current, nextVnode, parentFiber, parentScope, nextChildren) {
|
|
1575
|
+
const instance = current.instance;
|
|
1576
|
+
if (instance !== null) {
|
|
1577
|
+
// Commit ref only after compose + child reconcile succeeded.
|
|
1578
|
+
this.commitRef(current.vnode.ref, instance, nextVnode.ref, instance);
|
|
1579
|
+
}
|
|
1460
1580
|
current.vnode = nextVnode;
|
|
1461
1581
|
current.parentFiber = parentFiber;
|
|
1462
1582
|
current.children = nextChildren;
|