mirror of
https://github.com/odoo/owl.git
synced 2025-10-06 19:59:41 +07:00
[FIX] remove cyclic dependency, improve error typing (#982)
This commit is contained in:
@@ -127,7 +127,7 @@ export class ComponentNode<T extends typeof Component = any> implements VNode<Co
|
||||
try {
|
||||
await Promise.all(this.willStart.map((f) => f.call(component)));
|
||||
} catch (e) {
|
||||
handleError(this, e as Error);
|
||||
handleError({ node: this, error: e });
|
||||
return;
|
||||
}
|
||||
if (this.status === STATUS.NEW && this.fiber === fiber) {
|
||||
@@ -161,7 +161,7 @@ export class ComponentNode<T extends typeof Component = any> implements VNode<Co
|
||||
fiber.bdom = this.renderFn();
|
||||
fiber.root.counter--;
|
||||
} catch (e) {
|
||||
handleError(this, e as Error);
|
||||
handleError({ node: this, error: e });
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -1,10 +1,11 @@
|
||||
import type { ComponentNode } from "./component_node";
|
||||
import { Fiber } from "./fibers";
|
||||
import type { Fiber } from "./fibers";
|
||||
|
||||
export const fibersInError: WeakMap<Fiber, Error> = new WeakMap();
|
||||
export const nodeErrorHandlers: WeakMap<ComponentNode, ((error: Error) => void)[]> = new WeakMap();
|
||||
// Maps fibers to thrown errors
|
||||
export const fibersInError: WeakMap<Fiber, any> = new WeakMap();
|
||||
export const nodeErrorHandlers: WeakMap<ComponentNode, ((error: any) => void)[]> = new WeakMap();
|
||||
|
||||
function _handleError(node: ComponentNode | null, error: Error, isFirstRound = false): boolean {
|
||||
function _handleError(node: ComponentNode | null, error: any, isFirstRound = false): boolean {
|
||||
if (!node) {
|
||||
return false;
|
||||
}
|
||||
@@ -38,16 +39,12 @@ function _handleError(node: ComponentNode | null, error: Error, isFirstRound = f
|
||||
}
|
||||
}
|
||||
|
||||
export function handleError(entity: ComponentNode | Fiber, error: Error) {
|
||||
let node: ComponentNode;
|
||||
let fiber: Fiber;
|
||||
if (entity instanceof Fiber) {
|
||||
fiber = entity;
|
||||
node = entity.node;
|
||||
} else {
|
||||
node = entity;
|
||||
fiber = entity.fiber!;
|
||||
}
|
||||
type ErrorParams = { error: any } & ({ node: ComponentNode } | { fiber: Fiber });
|
||||
export function handleError(params: ErrorParams) {
|
||||
const error = params.error;
|
||||
const node = "node" in params ? params.node : params.fiber.node;
|
||||
const fiber = "fiber" in params ? params.fiber : node.fiber!;
|
||||
|
||||
fibersInError.set(fiber.root, error);
|
||||
|
||||
const handled = _handleError(node, error, true);
|
||||
|
||||
@@ -159,7 +159,7 @@ export class RootFiber extends Fiber {
|
||||
// unregistering the fiber
|
||||
node.fiber = null;
|
||||
} catch (e) {
|
||||
if (!handleError(current || this, e)) {
|
||||
if (!handleError({ fiber: current || this, error: e })) {
|
||||
this.reject(e);
|
||||
}
|
||||
}
|
||||
@@ -206,7 +206,7 @@ export class MountFiber extends RootFiber {
|
||||
}
|
||||
node.fiber = null;
|
||||
} catch (e) {
|
||||
if (!handleError(current as Fiber, e)) {
|
||||
if (!handleError({ fiber: current as Fiber, error: e })) {
|
||||
this.reject(e);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user