From 64c36470cdc91bd8b6683051fad7c4e340876ab8 Mon Sep 17 00:00:00 2001 From: Ben Chidlow <26830309+fezproof@users.noreply.github.com> Date: Tue, 17 Sep 2024 13:42:21 +0800 Subject: [PATCH 1/4] Update nodes.ts to allow strong NodeType Update the NodeBase type to have a stronger NodeType field that can be undefined even if you specifically define it. --- packages/system/src/types/nodes.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/system/src/types/nodes.ts b/packages/system/src/types/nodes.ts index b405b5ba..ae4bbc27 100644 --- a/packages/system/src/types/nodes.ts +++ b/packages/system/src/types/nodes.ts @@ -9,7 +9,7 @@ import { Optional } from '../utils/types'; */ export type NodeBase< NodeData extends Record = Record, - NodeType extends string = string + NodeType extends string | undefined = string | undefined > = { /** Unique id of a node */ id: string; @@ -20,7 +20,7 @@ export type NodeBase< /** Arbitrary data passed to a node */ data: NodeData; /** Type of node defined in nodeTypes */ - type?: NodeType; + type: NodeType; /** Only relevant for default, source, target nodeType. controls source position * @example 'right', 'left', 'top', 'bottom' */ From 37e9f02f80b4632dba4427c2821206874cb9f567 Mon Sep 17 00:00:00 2001 From: fezproof <26830309+fezproof@users.noreply.github.com> Date: Wed, 18 Sep 2024 11:50:21 +0800 Subject: [PATCH 2/4] Updated `NodeBase` to allow undefined types and still handle explicit ones Updated svelte and react packages to accommodate this --- packages/react/src/types/nodes.ts | 2 +- packages/svelte/src/lib/types/nodes.ts | 2 +- packages/system/src/types/nodes.ts | 12 +++++++++--- 3 files changed, 11 insertions(+), 5 deletions(-) diff --git a/packages/react/src/types/nodes.ts b/packages/react/src/types/nodes.ts index f4ad2820..4307742d 100644 --- a/packages/react/src/types/nodes.ts +++ b/packages/react/src/types/nodes.ts @@ -9,7 +9,7 @@ import { NodeTypes } from './general'; */ export type Node< NodeData extends Record = Record, - NodeType extends string = string + NodeType extends string | undefined = undefined > = NodeBase & { style?: CSSProperties; className?: string; diff --git a/packages/svelte/src/lib/types/nodes.ts b/packages/svelte/src/lib/types/nodes.ts index 0e741c00..021dad70 100644 --- a/packages/svelte/src/lib/types/nodes.ts +++ b/packages/svelte/src/lib/types/nodes.ts @@ -15,7 +15,7 @@ export type InternalNode = InternalNodeBase = Record, - NodeType extends string = string + NodeType extends string | undefined = undefined > = NodeBase & { class?: string; style?: string; diff --git a/packages/system/src/types/nodes.ts b/packages/system/src/types/nodes.ts index ae4bbc27..b1d93369 100644 --- a/packages/system/src/types/nodes.ts +++ b/packages/system/src/types/nodes.ts @@ -19,8 +19,6 @@ export type NodeBase< position: XYPosition; /** Arbitrary data passed to a node */ data: NodeData; - /** Type of node defined in nodeTypes */ - type: NodeType; /** Only relevant for default, source, target nodeType. controls source position * @example 'right', 'left', 'top', 'bottom' */ @@ -63,7 +61,15 @@ export type NodeBase< width?: number; height?: number; }; -}; +} & (undefined extends NodeType + ? { + /** Type of node defined in nodeTypes */ + type?: string | undefined; + } + : { + /** Type of node defined in nodeTypes */ + type: NodeType; + }); export type InternalNodeBase = NodeType & { measured: { From 43388a18e88abc3747cd272af73dbb5ba647483c Mon Sep 17 00:00:00 2001 From: moklick Date: Tue, 20 May 2025 10:10:03 +0200 Subject: [PATCH 3/4] refactor(node-type): adjust --- packages/react/src/types/nodes.ts | 2 +- packages/svelte/src/lib/types/nodes.ts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/react/src/types/nodes.ts b/packages/react/src/types/nodes.ts index 9214778c..8dc213d7 100644 --- a/packages/react/src/types/nodes.ts +++ b/packages/react/src/types/nodes.ts @@ -12,7 +12,7 @@ import { NodeTypes } from './general'; */ export type Node< NodeData extends Record = Record, - NodeType extends string | undefined = undefined + NodeType extends string | undefined = string | undefined > = NodeBase & { style?: CSSProperties; className?: string; diff --git a/packages/svelte/src/lib/types/nodes.ts b/packages/svelte/src/lib/types/nodes.ts index 266f7cc3..f861c13b 100644 --- a/packages/svelte/src/lib/types/nodes.ts +++ b/packages/svelte/src/lib/types/nodes.ts @@ -16,7 +16,7 @@ export type InternalNode = InternalNodeBase = Record, - NodeType extends string | undefined = undefined + NodeType extends string | undefined = string | undefined > = NodeBase & { class?: ClassValue; style?: string; From dba6faf20e7ec2524d5270d177331d3bd260f3ac Mon Sep 17 00:00:00 2001 From: moklick Date: Tue, 20 May 2025 11:19:09 +0200 Subject: [PATCH 4/4] chore(changeset): add --- .changeset/grumpy-spiders-play.md | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 .changeset/grumpy-spiders-play.md diff --git a/.changeset/grumpy-spiders-play.md b/.changeset/grumpy-spiders-play.md new file mode 100644 index 00000000..cf7d295f --- /dev/null +++ b/.changeset/grumpy-spiders-play.md @@ -0,0 +1,7 @@ +--- +'@xyflow/react': minor +'@xyflow/svelte': minor +'@xyflow/system': minor +--- + +Improve typing for Nodes