import type { ProxiedTuple, ShaderNodeFn } from 'three/src/nodes/TSL.js' import { Fn } from 'three/tsl' import type { NodeBuilder } from 'three/webgpu' type NonCallable = T extends (...args: any[]) => any ? never : T export function FnVar( callback: (...args: Args) => (builder: NodeBuilder) => R ): ShaderNodeFn> export function FnVar( callback: (...args: Args) => NonCallable ): ShaderNodeFn> export function FnVar( callback: | ((...args: Args) => R) | ((...args: Args) => (builder: NodeBuilder) => R) ): ShaderNodeFn> { return Fn((args: Args, builder: NodeBuilder) => { const result = callback(...args) return typeof result === 'function' ? (result as (builder: NodeBuilder) => R)(builder) : result }) }