diff --git a/packages/react-godot-renderer/src/Component.ts b/packages/react-godot-renderer/src/Component.ts index 3152f9c..68ab98b 100644 --- a/packages/react-godot-renderer/src/Component.ts +++ b/packages/react-godot-renderer/src/Component.ts @@ -37,6 +37,16 @@ export const fromClass = >( Prototype, ) +export const fromSceneUnsafe = = Godot.Node>( + path: string +): Component => Object.setPrototypeOf( + Object.assign( + (props: Props) => React.createElement("scene", { ...props, path }), + { displayName: path }, + ), + Prototype, +) + export declare namespace fromScene { export type SceneNames = { [K in keyof Godot.ResourceTypes]: Godot.ResourceTypes[K] extends Godot.PackedScene ? K : never @@ -45,13 +55,7 @@ export declare namespace fromScene { export const fromScene = ( path: A -): Component ? T : never> => Object.setPrototypeOf( - Object.assign( - (props: Props) => React.createElement("scene", { ...props, path }), - { displayName: path }, - ), - Prototype, -) +): Component ? T : never> => fromSceneUnsafe(path) export declare namespace useSignal { export type SignalNames> = { diff --git a/packages/react-godot-renderer/src/Reconciler.ts b/packages/react-godot-renderer/src/Reconciler.ts index 0cfaf09..b4648be 100644 --- a/packages/react-godot-renderer/src/Reconciler.ts +++ b/packages/react-godot-renderer/src/Reconciler.ts @@ -1,4 +1,4 @@ -import { Node, type NodePathMap, type PackedScene, ResourceLoader } from "godot" +import { Node, type NodePathMap, PackedScene, ResourceLoader } from "godot" import ReactReconciler, { type HostConfig } from "react-reconciler" import { hasProperty } from "./utils.js" @@ -39,7 +39,10 @@ export const make = () => { throw new Error("Property 'path' required when using the 'scene' intrinsic type") if (typeof props.path !== "string") throw new Error("Property 'path' is not a string") - instance = (ResourceLoader.load(props.path) as PackedScene>).instantiate() + const res = ResourceLoader.load(props.path) + if (!(res instanceof PackedScene)) + throw new Error(`Resource at 'path' is not a PackedScene`) + instance = res.instantiate() } else { // const className = snakeToPascal(camelToSnake(type))