From 8d74ff16034889c49c0d92bc2c73c185e4ffaf51 Mon Sep 17 00:00:00 2001 From: thelazylama Date: Thu, 7 May 2026 22:32:09 +1000 Subject: [PATCH 1/2] TSL: Make ArrayNode Generic --- types/three/src/nodes/core/ArrayNode.d.ts | 23 +++++++++++++++++------ types/three/src/nodes/tsl/TSLCore.d.ts | 5 +++-- 2 files changed, 20 insertions(+), 8 deletions(-) diff --git a/types/three/src/nodes/core/ArrayNode.d.ts b/types/three/src/nodes/core/ArrayNode.d.ts index cad558884..4182fe73b 100644 --- a/types/three/src/nodes/core/ArrayNode.d.ts +++ b/types/three/src/nodes/core/ArrayNode.d.ts @@ -1,25 +1,36 @@ import Node from "./Node.js"; import TempNode from "./TempNode.js"; +import ArrayElementNode from "../utils/ArrayElementNode.js"; -declare class ArrayNode extends TempNode { +interface ArrayNodeInterface { count: number; - values: Node[]; + values: Node[] | null; readonly isArrayNode: true; - constructor(nodeType: string, count: number, values: Node[]); + element: (indexNode: Node | number) => ArrayElementNode; } +declare const ArrayNode: { + new( + nodeType: TNodeType | null, + count: number, + values?: Node[] | null, + ): ArrayNode; +}; + +type ArrayNode = TempNode & ArrayNodeInterface; + export default ArrayNode; interface ArrayFunction { - (values: Node[]): ArrayNode; - (nodeType: string, count: number): ArrayNode; + (values: Node[]): ArrayNode; + (nodeType: TNodeType, count: number): ArrayNode; } export const array: ArrayFunction; declare module "./Node.js" { interface NodeElements { - toArray: (count: number) => ArrayNode; + toArray: (this: Node, count: number) => ArrayNode; } } diff --git a/types/three/src/nodes/tsl/TSLCore.d.ts b/types/three/src/nodes/tsl/TSLCore.d.ts index 61edb0228..6296e5a9b 100644 --- a/types/three/src/nodes/tsl/TSLCore.d.ts +++ b/types/three/src/nodes/tsl/TSLCore.d.ts @@ -10,6 +10,7 @@ import Node, { MatType, NumOrBoolType } from "../core/Node.js"; import NodeBuilder from "../core/NodeBuilder.js"; import StackNode from "../core/StackNode.js"; import VarNode from "../core/VarNode.js"; +import ArrayElementNode from "../utils/ArrayElementNode.js"; import ConvertNode from "../utils/ConvertNode.js"; import JoinNode from "../utils/JoinNode.js"; @@ -2398,13 +2399,13 @@ declare module "../core/Node.js" { } } -export const element: (node: Node, indexNode: Node) => Node; +export const element: (node: Node, indexNode: Node | number) => ArrayElementNode; export const convert: (node: Node, types: string) => Node; export const split: (node: Node, channels?: string) => Node; declare module "../core/Node.js" { interface NodeElements { - element: (indexNode: Node) => Node; + element: (this: Node, indexNode: Node | number) => ArrayElementNode; convert: (types: string) => Node; } From e3b0ad2f0795c568ea7e1dbc4f53706cc77e68ba Mon Sep 17 00:00:00 2001 From: Nathan Bierema Date: Sat, 9 May 2026 08:41:39 -0400 Subject: [PATCH 2/2] Updates --- types/three/src/nodes/core/ArrayNode.d.ts | 9 +++------ types/three/src/nodes/tsl/TSLCore.d.ts | 11 ++++++++--- types/three/src/nodes/utils/ArrayElementNode.d.ts | 9 +++++---- 3 files changed, 16 insertions(+), 13 deletions(-) diff --git a/types/three/src/nodes/core/ArrayNode.d.ts b/types/three/src/nodes/core/ArrayNode.d.ts index 4182fe73b..1b82d4de1 100644 --- a/types/three/src/nodes/core/ArrayNode.d.ts +++ b/types/three/src/nodes/core/ArrayNode.d.ts @@ -1,13 +1,10 @@ import Node from "./Node.js"; import TempNode from "./TempNode.js"; -import ArrayElementNode from "../utils/ArrayElementNode.js"; -interface ArrayNodeInterface { +export interface ArrayNodeInterface { count: number; values: Node[] | null; readonly isArrayNode: true; - - element: (indexNode: Node | number) => ArrayElementNode; } declare const ArrayNode: { @@ -30,7 +27,7 @@ interface ArrayFunction { export const array: ArrayFunction; declare module "./Node.js" { - interface NodeElements { - toArray: (this: Node, count: number) => ArrayNode; + interface NodeExtensions { + toArray: (count: number) => ArrayNode; } } diff --git a/types/three/src/nodes/tsl/TSLCore.d.ts b/types/three/src/nodes/tsl/TSLCore.d.ts index 6296e5a9b..f97faf975 100644 --- a/types/three/src/nodes/tsl/TSLCore.d.ts +++ b/types/three/src/nodes/tsl/TSLCore.d.ts @@ -5,6 +5,7 @@ import { Matrix4 } from "../../math/Matrix4.js"; import { Vector2 } from "../../math/Vector2.js"; import { Vector3 } from "../../math/Vector3.js"; import { Vector4 } from "../../math/Vector4.js"; +import ArrayNode from "../core/ArrayNode.js"; import ConstNode from "../core/ConstNode.js"; import Node, { MatType, NumOrBoolType } from "../core/Node.js"; import NodeBuilder from "../core/NodeBuilder.js"; @@ -2399,14 +2400,18 @@ declare module "../core/Node.js" { } } -export const element: (node: Node, indexNode: Node | number) => ArrayElementNode; +export const element: (node: ArrayNode, indexNode: Node | number) => ArrayElementNode; export const convert: (node: Node, types: string) => Node; export const split: (node: Node, channels?: string) => Node; +declare module "../core/ArrayNode.js" { + interface ArrayNodeInterface { + element: (indexNode: Node | number) => ArrayElementNode; + } +} + declare module "../core/Node.js" { interface NodeElements { - element: (this: Node, indexNode: Node | number) => ArrayElementNode; - convert: (types: string) => Node; } } diff --git a/types/three/src/nodes/utils/ArrayElementNode.d.ts b/types/three/src/nodes/utils/ArrayElementNode.d.ts index b93aa3380..334be5ad2 100644 --- a/types/three/src/nodes/utils/ArrayElementNode.d.ts +++ b/types/three/src/nodes/utils/ArrayElementNode.d.ts @@ -1,14 +1,15 @@ +import ArrayNode from "../core/ArrayNode.js"; import Node from "../core/Node.js"; -interface ArrayElementNodeInterface { - node: Node; +interface ArrayElementNodeInterface { + node: ArrayNode; indexNode: Node; } declare const ArrayElementNode: { - new(node: Node, indexNode: Node): ArrayElementNode; + new(node: ArrayNode, indexNode: Node): ArrayElementNode; }; -type ArrayElementNode = Node & ArrayElementNodeInterface; +type ArrayElementNode = Node & ArrayElementNodeInterface; export default ArrayElementNode;