From 43025642b95b18a7ed34f07b084be5fe5c05b1fb Mon Sep 17 00:00:00 2001 From: Thomas Stokes Date: Mon, 27 Oct 2025 01:32:43 +0800 Subject: [PATCH] allow invalidating a non-rendered renderable often in your app it makes sense to unconditionally invalidate something that's conditionally rendered, and just hasn't been rendered yet. --- src/client/controller.ts | 3 +-- src/client/tests/renderable.test.ts | 20 +------------------- 2 files changed, 2 insertions(+), 21 deletions(-) diff --git a/src/client/controller.ts b/src/client/controller.ts index 73f4cc05..04609b67 100644 --- a/src/client/controller.ts +++ b/src/client/controller.ts @@ -26,8 +26,7 @@ export function get_controller(renderable: Renderable): Controller { export function invalidate(renderable: Renderable): void { const controller = controllers.get(renderable) - assert(controller, 'the renderable has not been rendered') - controller._invalidate.forEach(invalidate => invalidate()) + controller?._invalidate.forEach(invalidate => invalidate()) } export function onMount(renderable: Renderable, callback: () => Cleanup): void { diff --git a/src/client/tests/renderable.test.ts b/src/client/tests/renderable.test.ts index b93b70e5..db841260 100644 --- a/src/client/tests/renderable.test.ts +++ b/src/client/tests/renderable.test.ts @@ -1,6 +1,6 @@ import { html } from 'dhtml' import { invalidate, onMount, onUnmount } from 'dhtml/client' -import { assert, assert_deep_eq, assert_eq, test } from '../../../scripts/test/test.ts' +import { assert_deep_eq, assert_eq, test } from '../../../scripts/test/test.ts' import { setup } from './setup.ts' test('renderables work correctly', () => { @@ -474,24 +474,6 @@ test('invalidating an unmounted renderable does nothing', () => { assert_eq(el.textContent, 'app2') }) -if (__DEV__) { - test('invalidate throws error when renderable has not been rendered', () => { - const app = { - render() { - return 'never rendered' - }, - } - - try { - invalidate(app) - assert(false, 'Expected error to be thrown') - } catch (error) { - assert(error instanceof Error) - assert(/the renderable has not been rendered/.test(error.message)) - } - }) -} - test('onMount called on already mounted renderable executes immediately', () => { const { root } = setup()