From 65ec32210044e51ef4931c8e158816af6d550d24 Mon Sep 17 00:00:00 2001 From: Benjamin Lu Date: Tue, 23 Sep 2025 12:44:23 -0700 Subject: [PATCH] Those who type --- src/lib/litegraph/src/canvas/MovingLinkBase.ts | 9 +++++++++ src/lib/litegraph/src/canvas/RenderLink.ts | 12 ++++++++++++ .../core/canvas/links/linkConnectorAdapter.ts | 4 ++-- 3 files changed, 23 insertions(+), 2 deletions(-) diff --git a/src/lib/litegraph/src/canvas/MovingLinkBase.ts b/src/lib/litegraph/src/canvas/MovingLinkBase.ts index b06c238b8..825a26856 100644 --- a/src/lib/litegraph/src/canvas/MovingLinkBase.ts +++ b/src/lib/litegraph/src/canvas/MovingLinkBase.ts @@ -11,6 +11,7 @@ import type { } from '@/lib/litegraph/src/interfaces' import type { SubgraphInput } from '@/lib/litegraph/src/subgraph/SubgraphInput' import type { SubgraphOutput } from '@/lib/litegraph/src/subgraph/SubgraphOutput' +import type { NodeLike } from '@/lib/litegraph/src/types/NodeLike' import { LinkDirection } from '@/lib/litegraph/src/types/globalEnums' import type { RenderLink } from './RenderLink' @@ -99,6 +100,14 @@ export abstract class MovingLinkBase implements RenderLink { this.inputPos = inputNode.getInputPos(inputIndex) } + abstract canConnectToInput( + inputNode: NodeLike, + input: INodeInputSlot + ): boolean + abstract canConnectToOutput( + outputNode: NodeLike, + output: INodeOutputSlot + ): boolean abstract connectToInput( node: LGraphNode, input: INodeInputSlot, diff --git a/src/lib/litegraph/src/canvas/RenderLink.ts b/src/lib/litegraph/src/canvas/RenderLink.ts index 88a8d3abf..1c8f73bb7 100644 --- a/src/lib/litegraph/src/canvas/RenderLink.ts +++ b/src/lib/litegraph/src/canvas/RenderLink.ts @@ -11,6 +11,7 @@ import type { import type { SubgraphIONodeBase } from '@/lib/litegraph/src/subgraph/SubgraphIONodeBase' import type { SubgraphInput } from '@/lib/litegraph/src/subgraph/SubgraphInput' import type { SubgraphOutput } from '@/lib/litegraph/src/subgraph/SubgraphOutput' +import type { NodeLike } from '@/lib/litegraph/src/types/NodeLike' import type { LinkDirection } from '@/lib/litegraph/src/types/globalEnums' export interface RenderLink { @@ -38,6 +39,17 @@ export interface RenderLink { /** The reroute that the link is being connected from. */ readonly fromReroute?: Reroute + /** + * Capability checks used for hit-testing and validation during drag. + * Implementations should return `false` when a connection is not possible + * rather than throwing. + */ + canConnectToInput(node: NodeLike, input: INodeInputSlot): boolean + canConnectToOutput(node: NodeLike, output: INodeOutputSlot): boolean + /** Optional: only some links support validating subgraph IO or reroutes. */ + canConnectToSubgraphInput?(input: SubgraphInput): boolean + canConnectToReroute?(reroute: Reroute): boolean + connectToInput( node: LGraphNode, input: INodeInputSlot, diff --git a/src/renderer/core/canvas/links/linkConnectorAdapter.ts b/src/renderer/core/canvas/links/linkConnectorAdapter.ts index 78d1b678a..7a0ec3c2f 100644 --- a/src/renderer/core/canvas/links/linkConnectorAdapter.ts +++ b/src/renderer/core/canvas/links/linkConnectorAdapter.ts @@ -115,8 +115,8 @@ export class LinkConnectorAdapter { const node = this.network.getNodeById(nodeId) const output = node?.outputs?.[outputIndex] if (!node || !output) return false - return (this.linkConnector.renderLinks as any[]).some( - (link) => link?.canConnectToOutput?.(node, output) === true + return this.linkConnector.renderLinks.some((link) => + link.canConnectToOutput(node, output) ) }