@types/three 0.183.1 → 0.184.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (127) hide show
  1. three/README.md +2 -2
  2. three/examples/jsm/Addons.d.ts +11 -0
  3. three/examples/jsm/controls/FirstPersonControls.d.ts +5 -10
  4. three/examples/jsm/controls/TransformControls.d.ts +24 -0
  5. three/examples/jsm/geometries/TextGeometry.d.ts +43 -71
  6. three/examples/jsm/helpers/LightProbeGridHelper.d.ts +12 -0
  7. three/examples/jsm/inspector/Extension.d.ts +9 -0
  8. three/examples/jsm/inspector/Inspector.d.ts +21 -2
  9. three/examples/jsm/inspector/RendererInspector.d.ts +7 -2
  10. three/examples/jsm/inspector/extensions/tsl-graph/TSLGraphEditor.d.ts +20 -0
  11. three/examples/jsm/inspector/extensions/tsl-graph/TSLGraphLoader.d.ts +11 -0
  12. three/examples/jsm/inspector/tabs/Parameters.d.ts +22 -1
  13. three/examples/jsm/inspector/ui/Tab.d.ts +5 -1
  14. three/examples/jsm/inspector/ui/Values.d.ts +23 -3
  15. three/examples/jsm/interaction/InteractionManager.d.ts +18 -0
  16. three/examples/jsm/lighting/DynamicLighting.d.ts +16 -0
  17. three/examples/jsm/lighting/LightProbeGrid.d.ts +34 -0
  18. three/examples/jsm/loaders/ColladaLoader.d.ts +1 -0
  19. three/examples/jsm/loaders/EXRLoader.d.ts +2 -0
  20. three/examples/jsm/loaders/LDrawLoader.d.ts +1 -1
  21. three/examples/jsm/loaders/VTKLoader.d.ts +6 -0
  22. three/examples/jsm/objects/Reflector.d.ts +1 -2
  23. three/examples/jsm/objects/SkyMesh.d.ts +1 -0
  24. three/examples/jsm/tsl/WebGLNodesHandler.d.ts +14 -0
  25. three/examples/jsm/tsl/display/FSR1Node.d.ts +17 -0
  26. three/examples/jsm/tsl/display/SharpenNode.d.ts +22 -0
  27. three/examples/jsm/tsl/display/TAAUNode.d.ts +31 -0
  28. three/examples/jsm/tsl/lighting/DynamicLightsNode.d.ts +21 -0
  29. three/examples/jsm/tsl/lighting/TiledLightsNode.d.ts +1 -1
  30. three/examples/jsm/tsl/lighting/data/AmbientLightDataNode.d.ts +9 -0
  31. three/examples/jsm/tsl/lighting/data/DirectionalLightDataNode.d.ts +9 -0
  32. three/examples/jsm/tsl/lighting/data/HemisphereLightDataNode.d.ts +9 -0
  33. three/examples/jsm/tsl/lighting/data/PointLightDataNode.d.ts +9 -0
  34. three/examples/jsm/tsl/lighting/data/SpotLightDataNode.d.ts +9 -0
  35. three/examples/jsm/utils/ColorUtils.d.ts +5 -0
  36. three/examples/jsm/utils/SceneOptimizer.d.ts +18 -0
  37. three/examples/jsm/webxr/XRHandMeshModel.d.ts +1 -0
  38. three/package.json +4 -5
  39. three/src/Three.Core.d.ts +13 -1
  40. three/src/Three.TSL.d.ts +7 -1
  41. three/src/Three.WebGPU.Nodes.d.ts +8 -4
  42. three/src/Three.WebGPU.d.ts +11 -4
  43. three/src/Three.d.ts +0 -11
  44. three/src/animation/AnimationMixer.d.ts +3 -1
  45. three/src/audio/AudioContext.d.ts +2 -2
  46. three/src/core/BufferAttribute.d.ts +13 -1
  47. three/src/core/RenderTarget.d.ts +8 -1
  48. three/src/core/UniformsGroup.d.ts +7 -1
  49. three/src/extras/Controls.d.ts +5 -1
  50. three/src/geometries/ExtrudeGeometry.d.ts +39 -53
  51. three/src/loaders/FileLoader.d.ts +2 -2
  52. three/src/materials/Material.d.ts +5 -1
  53. three/src/materials/MeshToonMaterial.d.ts +1 -1
  54. three/src/materials/nodes/Line2NodeMaterial.d.ts +7 -0
  55. three/src/materials/nodes/VolumeNodeMaterial.d.ts +1 -1
  56. three/src/materials/nodes/manager/NodeMaterialObserver.d.ts +11 -1
  57. three/src/math/ColorManagement.d.ts +1 -1
  58. three/src/math/Matrix2.d.ts +1 -1
  59. three/src/math/Matrix3.d.ts +1 -1
  60. three/src/math/Matrix4.d.ts +1 -1
  61. three/src/math/Plane.d.ts +1 -1
  62. three/src/math/Vector2.d.ts +2 -1
  63. three/src/math/Vector3.d.ts +2 -1
  64. three/src/math/Vector4.d.ts +2 -1
  65. three/src/nodes/Nodes.d.ts +0 -1
  66. three/src/nodes/TSL.d.ts +1 -1
  67. three/src/nodes/accessors/BufferAttributeNode.d.ts +1 -1
  68. three/src/nodes/core/Node.d.ts +37 -9
  69. three/src/nodes/core/StackNode.d.ts +1 -1
  70. three/src/nodes/core/StructTypeNode.d.ts +0 -4
  71. three/src/nodes/core/UniformGroupNode.d.ts +4 -3
  72. three/src/nodes/core/UniformNode.d.ts +3 -0
  73. three/src/nodes/core/VarNode.d.ts +16 -10
  74. three/src/nodes/display/ViewportDepthTextureNode.d.ts +1 -3
  75. three/src/nodes/display/ViewportTextureNode.d.ts +5 -5
  76. three/src/nodes/functions/ShadowMaskModel.d.ts +2 -2
  77. three/src/nodes/gpgpu/BarrierNode.d.ts +2 -0
  78. three/src/nodes/gpgpu/ComputeBuiltinNode.d.ts +16 -7
  79. three/src/nodes/gpgpu/ComputeNode.d.ts +6 -2
  80. three/src/nodes/materialx/lib/mx_noise.d.ts +4 -5
  81. three/src/nodes/math/MathNode.d.ts +64 -6
  82. three/src/nodes/tsl/TSLBase.d.ts +1 -1
  83. three/src/nodes/tsl/TSLCore.d.ts +568 -160
  84. three/src/nodes/utils/ConvertNode.d.ts +9 -2
  85. three/src/nodes/utils/EventNode.d.ts +6 -0
  86. three/src/nodes/utils/JoinNode.d.ts +9 -5
  87. three/src/nodes/utils/LoopNode.d.ts +1 -2
  88. three/src/nodes/utils/{RemapNode.d.ts → Remap.d.ts} +6 -22
  89. three/src/objects/BatchedMesh.d.ts +2 -0
  90. three/src/objects/InstancedMesh.d.ts +6 -6
  91. three/src/objects/SkinnedMesh.d.ts +3 -0
  92. three/src/renderers/WebGLRenderer.d.ts +10 -1
  93. three/src/renderers/common/Animation.d.ts +2 -2
  94. three/src/renderers/common/Attributes.d.ts +9 -1
  95. three/src/renderers/common/Backend.d.ts +4 -0
  96. three/src/renderers/common/Background.d.ts +2 -2
  97. three/src/renderers/common/BindGroup.d.ts +0 -6
  98. three/src/renderers/common/Bindings.d.ts +2 -2
  99. three/src/renderers/common/CanvasTarget.d.ts +3 -1
  100. three/src/renderers/common/ComputePipeline.d.ts +1 -1
  101. three/src/renderers/common/Info.d.ts +132 -1
  102. three/src/renderers/common/InspectorBase.d.ts +7 -1
  103. three/src/renderers/common/Pipelines.d.ts +19 -3
  104. three/src/renderers/common/ReadbackBuffer.d.ts +63 -0
  105. three/src/renderers/common/RenderBundle.d.ts +4 -1
  106. three/src/renderers/common/RenderBundles.d.ts +3 -1
  107. three/src/renderers/common/RenderObject.d.ts +2 -2
  108. three/src/renderers/common/RenderObjects.d.ts +3 -3
  109. three/src/renderers/common/Renderer.d.ts +29 -16
  110. three/src/renderers/common/XRManager.d.ts +1 -7
  111. three/src/renderers/common/nodes/NodeManager.d.ts +51 -11
  112. three/src/renderers/shaders/ShaderChunk.d.ts +1 -0
  113. three/src/renderers/shaders/UniformsLib.d.ts +5 -1
  114. three/src/renderers/webgl/WebGLBufferRenderer.d.ts +0 -6
  115. three/src/renderers/webgl/WebGLIndexedBufferRenderer.d.ts +0 -6
  116. three/src/renderers/webgl/WebGLPrograms.d.ts +5 -0
  117. three/src/renderers/webgl-fallback/WebGLBackend.d.ts +2 -0
  118. three/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.d.ts +19 -0
  119. three/src/renderers/webgl-fallback/utils/WebGLCapabilities.d.ts +51 -0
  120. three/src/renderers/webgpu/WebGPUBackend.d.ts +9 -4
  121. three/src/renderers/webgpu/utils/WebGPUConstants.d.ts +6 -0
  122. three/src/renderers/webxr/WebXRController.d.ts +5 -1
  123. three/src/renderers/webxr/WebXRManager.d.ts +3 -1
  124. three/src/scenes/Scene.d.ts +2 -2
  125. three/src/textures/ExternalTexture.d.ts +3 -2
  126. three/src/textures/HTMLTexture.d.ts +27 -0
  127. three/src/textures/Texture.d.ts +16 -1
@@ -6,9 +6,12 @@ import { Vector2 } from "../../math/Vector2.js";
6
6
  import { Vector3 } from "../../math/Vector3.js";
7
7
  import { Vector4 } from "../../math/Vector4.js";
8
8
  import ConstNode from "../core/ConstNode.js";
9
- import Node, { NumOrBoolType } from "../core/Node.js";
9
+ import Node, { MatType, NumOrBoolType } from "../core/Node.js";
10
10
  import NodeBuilder from "../core/NodeBuilder.js";
11
11
  import StackNode from "../core/StackNode.js";
12
+ import VarNode from "../core/VarNode.js";
13
+ import ConvertNode from "../utils/ConvertNode.js";
14
+ import JoinNode from "../utils/JoinNode.js";
12
15
 
13
16
  export function addMethodChaining(name: string, nodeElement: unknown): void;
14
17
 
@@ -1371,9 +1374,6 @@ interface SetSwizzle3<TNumOrBool extends NumOrBoolType> {
1371
1374
  setXY(value: Node<NumOrBoolToVec2<TNumOrBool>> | NumOrBool<TNumOrBool>): Node<NumOrBoolToVec3<TNumOrBool>>;
1372
1375
  setRG(value: Node<NumOrBoolToVec2<TNumOrBool>> | NumOrBool<TNumOrBool>): Node<NumOrBoolToVec3<TNumOrBool>>;
1373
1376
  setST(value: Node<NumOrBoolToVec2<TNumOrBool>> | NumOrBool<TNumOrBool>): Node<NumOrBoolToVec3<TNumOrBool>>;
1374
- setXZ(value: Node<NumOrBoolToVec2<TNumOrBool>> | NumOrBool<TNumOrBool>): Node<NumOrBoolToVec3<TNumOrBool>>;
1375
- setRB(value: Node<NumOrBoolToVec2<TNumOrBool>> | NumOrBool<TNumOrBool>): Node<NumOrBoolToVec3<TNumOrBool>>;
1376
- setSP(value: Node<NumOrBoolToVec2<TNumOrBool>> | NumOrBool<TNumOrBool>): Node<NumOrBoolToVec3<TNumOrBool>>;
1377
1377
  setYZ(value: Node<NumOrBoolToVec2<TNumOrBool>> | NumOrBool<TNumOrBool>): Node<NumOrBoolToVec3<TNumOrBool>>;
1378
1378
  setGB(value: Node<NumOrBoolToVec2<TNumOrBool>> | NumOrBool<TNumOrBool>): Node<NumOrBoolToVec3<TNumOrBool>>;
1379
1379
  setTP(value: Node<NumOrBoolToVec2<TNumOrBool>> | NumOrBool<TNumOrBool>): Node<NumOrBoolToVec3<TNumOrBool>>;
@@ -1398,30 +1398,15 @@ interface SetSwizzle4<TNumOrBool extends NumOrBoolType> {
1398
1398
  setXY(value: Node<NumOrBoolToVec2<TNumOrBool>> | NumOrBool<TNumOrBool>): Node<NumOrBoolToVec4<TNumOrBool>>;
1399
1399
  setRG(value: Node<NumOrBoolToVec2<TNumOrBool>> | NumOrBool<TNumOrBool>): Node<NumOrBoolToVec4<TNumOrBool>>;
1400
1400
  setST(value: Node<NumOrBoolToVec2<TNumOrBool>> | NumOrBool<TNumOrBool>): Node<NumOrBoolToVec4<TNumOrBool>>;
1401
- setXZ(value: Node<NumOrBoolToVec2<TNumOrBool>> | NumOrBool<TNumOrBool>): Node<NumOrBoolToVec4<TNumOrBool>>;
1402
- setRB(value: Node<NumOrBoolToVec2<TNumOrBool>> | NumOrBool<TNumOrBool>): Node<NumOrBoolToVec4<TNumOrBool>>;
1403
- setSP(value: Node<NumOrBoolToVec2<TNumOrBool>> | NumOrBool<TNumOrBool>): Node<NumOrBoolToVec4<TNumOrBool>>;
1404
1401
  setYZ(value: Node<NumOrBoolToVec2<TNumOrBool>> | NumOrBool<TNumOrBool>): Node<NumOrBoolToVec4<TNumOrBool>>;
1405
1402
  setGB(value: Node<NumOrBoolToVec2<TNumOrBool>> | NumOrBool<TNumOrBool>): Node<NumOrBoolToVec4<TNumOrBool>>;
1406
1403
  setTP(value: Node<NumOrBoolToVec2<TNumOrBool>> | NumOrBool<TNumOrBool>): Node<NumOrBoolToVec4<TNumOrBool>>;
1407
- setXW(value: Node<NumOrBoolToVec2<TNumOrBool>> | NumOrBool<TNumOrBool>): Node<NumOrBoolToVec4<TNumOrBool>>;
1408
- setRA(value: Node<NumOrBoolToVec2<TNumOrBool>> | NumOrBool<TNumOrBool>): Node<NumOrBoolToVec4<TNumOrBool>>;
1409
- setSQ(value: Node<NumOrBoolToVec2<TNumOrBool>> | NumOrBool<TNumOrBool>): Node<NumOrBoolToVec4<TNumOrBool>>;
1410
- setYW(value: Node<NumOrBoolToVec2<TNumOrBool>> | NumOrBool<TNumOrBool>): Node<NumOrBoolToVec4<TNumOrBool>>;
1411
- setGA(value: Node<NumOrBoolToVec2<TNumOrBool>> | NumOrBool<TNumOrBool>): Node<NumOrBoolToVec4<TNumOrBool>>;
1412
- setTQ(value: Node<NumOrBoolToVec2<TNumOrBool>> | NumOrBool<TNumOrBool>): Node<NumOrBoolToVec4<TNumOrBool>>;
1413
1404
  setZW(value: Node<NumOrBoolToVec2<TNumOrBool>> | NumOrBool<TNumOrBool>): Node<NumOrBoolToVec4<TNumOrBool>>;
1414
1405
  setBA(value: Node<NumOrBoolToVec2<TNumOrBool>> | NumOrBool<TNumOrBool>): Node<NumOrBoolToVec4<TNumOrBool>>;
1415
1406
  setPQ(value: Node<NumOrBoolToVec2<TNumOrBool>> | NumOrBool<TNumOrBool>): Node<NumOrBoolToVec4<TNumOrBool>>;
1416
1407
  setXYZ(value: Node<NumOrBoolToVec3<TNumOrBool>> | NumOrBool<TNumOrBool>): Node<NumOrBoolToVec4<TNumOrBool>>;
1417
1408
  setRGB(value: Node<NumOrBoolToVec3<TNumOrBool>> | NumOrBool<TNumOrBool>): Node<NumOrBoolToVec4<TNumOrBool>>;
1418
1409
  setSTP(value: Node<NumOrBoolToVec3<TNumOrBool>> | NumOrBool<TNumOrBool>): Node<NumOrBoolToVec4<TNumOrBool>>;
1419
- setXYW(value: Node<NumOrBoolToVec3<TNumOrBool>> | NumOrBool<TNumOrBool>): Node<NumOrBoolToVec4<TNumOrBool>>;
1420
- setRGA(value: Node<NumOrBoolToVec3<TNumOrBool>> | NumOrBool<TNumOrBool>): Node<NumOrBoolToVec4<TNumOrBool>>;
1421
- setSTQ(value: Node<NumOrBoolToVec3<TNumOrBool>> | NumOrBool<TNumOrBool>): Node<NumOrBoolToVec4<TNumOrBool>>;
1422
- setXZW(value: Node<NumOrBoolToVec3<TNumOrBool>> | NumOrBool<TNumOrBool>): Node<NumOrBoolToVec4<TNumOrBool>>;
1423
- setRBA(value: Node<NumOrBoolToVec3<TNumOrBool>> | NumOrBool<TNumOrBool>): Node<NumOrBoolToVec4<TNumOrBool>>;
1424
- setSPQ(value: Node<NumOrBoolToVec3<TNumOrBool>> | NumOrBool<TNumOrBool>): Node<NumOrBoolToVec4<TNumOrBool>>;
1425
1410
  setYZW(value: Node<NumOrBoolToVec3<TNumOrBool>> | NumOrBool<TNumOrBool>): Node<NumOrBoolToVec4<TNumOrBool>>;
1426
1411
  setGBA(value: Node<NumOrBoolToVec3<TNumOrBool>> | NumOrBool<TNumOrBool>): Node<NumOrBoolToVec4<TNumOrBool>>;
1427
1412
  setTPQ(value: Node<NumOrBoolToVec3<TNumOrBool>> | NumOrBool<TNumOrBool>): Node<NumOrBoolToVec4<TNumOrBool>>;
@@ -1564,21 +1549,51 @@ declare module "../core/Node.js" {
1564
1549
  }
1565
1550
  }
1566
1551
 
1567
- /** anything that can be passed to {@link nodeObject} */
1568
- export type NodeObjectOption = Node | number | string;
1569
-
1570
- // same logic as in ShaderNodeObject: number,boolean,node->node, otherwise do nothing
1571
1552
  export type NodeObject<T> = T extends Node ? T
1572
1553
  : T extends number ? Node<"float">
1573
1554
  : T extends boolean ? Node<"bool">
1555
+ : T extends (...args: never) => unknown ? unknown // FIXME This should return an FnNode
1556
+ : T extends Vector2 ? Node<"vec2">
1557
+ : T extends Vector3 ? Node<"vec3">
1558
+ : T extends Vector4 ? Node<"vec4">
1559
+ : T extends Matrix2 ? Node<"mat2">
1560
+ : T extends Matrix3 ? Node<"mat3">
1561
+ : T extends Matrix4 ? Node<"mat4">
1562
+ : T extends Color ? Node<"color">
1563
+ : T extends ArrayBuffer ? Node<"ArrayBuffer">
1564
+ : T;
1565
+
1566
+ type Proxied<T> = T extends Node<infer TNodeType>
1567
+ ? Node<TNodeType> extends T ? TNodeType extends "float" ? Node<"float"> | Node<"uint"> | number // FIXME remove Node<"uint">
1568
+ : TNodeType extends "bool" ? Node<"bool"> | boolean
1569
+ : TNodeType extends "vec2" ? Node<"vec2"> | Vector2
1570
+ : TNodeType extends "vec3" ? Node<"vec3"> | Vector3
1571
+ : TNodeType extends "vec4" ? Node<"vec4"> | Vector4
1572
+ : TNodeType extends "mat2" ? Node<"mat2"> | Matrix2
1573
+ : TNodeType extends "mat3" ? Node<"mat3"> | Matrix3
1574
+ : TNodeType extends "mat4" ? Node<"mat4"> | Matrix4
1575
+ : TNodeType extends "color" ? Node<"color"> | Color
1576
+ : TNodeType extends "ArrayBuffer" ? Node<"ArrayBuffer"> | ArrayBuffer
1577
+ : T
1578
+ : T
1574
1579
  : T;
1575
1580
 
1576
- // opposite of NodeObject: node -> node|boolean|number, otherwise do nothing
1577
- type Proxied<T> = T extends Node | number ? Node | number : T;
1581
+ type CoercibleToNodeType<TNodeType> = TNodeType extends "float" ? Node<"float"> | Node<"int"> | Node<"uint"> | number
1582
+ : TNodeType extends "bool" ? Node<"bool"> | boolean
1583
+ : TNodeType extends "vec2" ? Node<"vec2"> | Node<"ivec2"> | Node<"uvec2"> | Vector2
1584
+ : TNodeType extends "vec3" ? Node<"vec3"> | Node<"ivec3"> | Node<"uvec3"> | Vector3
1585
+ : TNodeType extends "vec4" ? Node<"vec4"> | Node<"ivec4"> | Node<"uvec4"> | Vector4
1586
+ : TNodeType extends "mat2" ? Node<"mat2"> | Matrix2
1587
+ : TNodeType extends "vec3" ? Node<"mat3"> | Matrix3
1588
+ : TNodeType extends "vec4" ? Node<"mat4"> | Matrix4
1589
+ : TNodeType extends "color" ? Node<"color"> | Color
1590
+ : TNodeType extends "ArrayBuffer" ? Node<"ArrayBuffer"> | ArrayBuffer
1591
+ : Node<TNodeType>;
1592
+
1578
1593
  // https://github.com/microsoft/TypeScript/issues/42435#issuecomment-765557874
1579
1594
  // eslint-disable-next-line @definitelytyped/no-single-element-tuple-type
1580
- export type ProxiedTuple<T extends readonly [...unknown[]]> = [...{ [index in keyof T]: Proxied<T[index]> }];
1581
- export type ProxiedObject<T> = { [index in keyof T]: Proxied<T[index]> };
1595
+ export type ProxiedTuple<T extends readonly [...unknown[]]> = [...{ [Index in keyof T]: Proxied<T[Index]> }];
1596
+ export type ProxiedObject<T> = { [Index in keyof T]: Proxied<T[Index]> };
1582
1597
  // eslint-disable-next-line @definitelytyped/no-single-element-tuple-type
1583
1598
  type RemoveTail<T extends readonly [...unknown[]]> = T extends [unknown, ...infer X] ? X : [];
1584
1599
  // eslint-disable-next-line @definitelytyped/no-single-element-tuple-type
@@ -1664,8 +1679,8 @@ type GetConstructorsByScope<T, S> = ConstructorUnion<FilterConstructorsByScope<O
1664
1679
  type GetConstructors<T> = ConstructorUnion<OverloadedConstructorsOf<T>>;
1665
1680
  type GetPossibleScopes<T> = ExtractScopes<OverloadedConstructorsOf<T>>;
1666
1681
 
1667
- type NodeArray<T extends NodeObjectOption[]> = { [index in keyof T]: NodeObject<T[index]> };
1668
- type NodeObjects<T> = { [key in keyof T]: T[key] extends NodeObjectOption ? NodeObject<T[key]> : T[key] };
1682
+ type NodeArray<T extends unknown[]> = { [Index in keyof T]: NodeObject<T[Index]> };
1683
+ type NodeObjects<T> = { [Key in keyof T]: NodeObject<T[Key]> };
1669
1684
  type ConstructedNode<T> = T extends new(...args: any[]) => infer R ? (R extends Node ? R : never) : never;
1670
1685
 
1671
1686
  export type NodeOrType = Node | string;
@@ -1686,12 +1701,12 @@ export class ShaderNode<T = {}, R extends Node = Node> {
1686
1701
  ) => R;
1687
1702
  }
1688
1703
 
1689
- export function nodeObject<T extends NodeObjectOption>(obj: T): NodeObject<T>;
1690
- export function nodeObjectIntent<T extends NodeObjectOption>(obj: T): NodeObject<T>;
1704
+ export function nodeObject<T>(obj: T): NodeObject<T>;
1705
+ export function nodeObjectIntent<T>(obj: T): NodeObject<T>;
1691
1706
  export function nodeObjects<T>(obj: T): NodeObjects<T>;
1692
1707
 
1693
1708
  // eslint-disable-next-line @definitelytyped/no-single-element-tuple-type
1694
- export function nodeArray<T extends NodeObjectOption[]>(obj: readonly [...T]): NodeArray<T>;
1709
+ export function nodeArray<T extends unknown[]>(obj: readonly [...T]): NodeArray<T>;
1695
1710
 
1696
1711
  export function nodeProxy<T>(
1697
1712
  nodeClass: T,
@@ -1705,7 +1720,7 @@ export function nodeProxy<T, S extends GetPossibleScopes<T>>(
1705
1720
  export function nodeProxy<T, S extends GetPossibleScopes<T>>(
1706
1721
  nodeClass: T,
1707
1722
  scope: S,
1708
- factor: NodeObjectOption,
1723
+ factor: unknown,
1709
1724
  ): (...params: ProxiedTuple<RemoveHeadAndTail<GetConstructorsByScope<T, S>>>) => ConstructedNode<T>;
1710
1725
 
1711
1726
  export function nodeImmutable<T>(
@@ -1725,10 +1740,10 @@ export function nodeProxyIntent<T, S extends GetPossibleScopes<T>>(
1725
1740
  export function nodeProxyIntent<T, S extends GetPossibleScopes<T>>(
1726
1741
  nodeClass: T,
1727
1742
  scope: S,
1728
- factor: NodeObjectOption,
1743
+ factor: unknown,
1729
1744
  ): (...params: ProxiedTuple<RemoveHeadAndTail<GetConstructorsByScope<T, S>>>) => ConstructedNode<T>;
1730
1745
 
1731
- interface Layout {
1746
+ interface FullLayout {
1732
1747
  name: string;
1733
1748
  type: string;
1734
1749
  inputs: {
@@ -1738,32 +1753,38 @@ interface Layout {
1738
1753
  }[];
1739
1754
  }
1740
1755
 
1741
- export interface FnNode<Args extends readonly unknown[], TReturn> {
1756
+ interface AbbreviatedLayout {
1757
+ [inputName: string]: string;
1758
+ return: string;
1759
+ }
1760
+
1761
+ type Layout = FullLayout | AbbreviatedLayout;
1762
+
1763
+ export interface FnNode<TArgs extends readonly unknown[], TReturn> {
1742
1764
  // eslint-disable-next-line @typescript-eslint/no-invalid-void-type
1743
- (...args: Args): TReturn extends void ? ShaderCallNodeInternal<void> : TReturn;
1765
+ (...args: TArgs): TReturn extends void ? ShaderCallNodeInternal<void> : TReturn;
1744
1766
 
1745
1767
  shaderNode: ShaderNodeInternal<TReturn>;
1746
1768
  id: number;
1747
1769
 
1748
- getNodeType: (builder: NodeBuilder) => string | null;
1749
- getCacheKey: (force?: boolean) => number;
1770
+ setLayout(layout: Layout): this;
1750
1771
 
1751
- setLayout: (layout: Layout) => this;
1772
+ generateNodeType(builder: NodeBuilder): string;
1752
1773
 
1753
- once: (subBuilds?: string[] | null) => this;
1774
+ once(subBuilds?: string[] | null): this;
1754
1775
  }
1755
1776
 
1756
1777
  export function Fn<TReturn>(
1757
1778
  jsFunc: (builder: NodeBuilder) => TReturn,
1758
- layout?: string | Record<string, string>,
1779
+ layout?: Layout | string,
1759
1780
  ): FnNode<[], TReturn>;
1760
1781
  export function Fn<TArgs extends readonly unknown[], TReturn>(
1761
1782
  jsFunc: (args: TArgs, builder: NodeBuilder) => TReturn,
1762
- layout?: string | Record<string, string>,
1783
+ layout?: Layout | string,
1763
1784
  ): FnNode<ProxiedTuple<TArgs>, TReturn>;
1764
1785
  export function Fn<TArgs extends { readonly [key: string]: unknown }, TReturn>(
1765
1786
  jsFunc: (args: TArgs, builder: NodeBuilder) => TReturn,
1766
- layout?: string | Record<string, string>,
1787
+ layout?: Layout | string,
1767
1788
  // eslint-disable-next-line @definitelytyped/no-single-element-tuple-type
1768
1789
  ): FnNode<[ProxiedObject<TArgs>], TReturn>;
1769
1790
 
@@ -1782,48 +1803,80 @@ declare module "../core/Node.js" {
1782
1803
  }
1783
1804
  }
1784
1805
 
1806
+ /**
1807
+ * Can be implicitly converted to a float
1808
+ */
1809
+ type ScalarNode = Node<"float"> | Node<"int"> | Node<"uint"> | Node<"bool">;
1810
+
1811
+ /**
1812
+ * Can be implicitly converted to a float
1813
+ */
1814
+ type Scalar = ScalarNode | number | boolean;
1815
+
1785
1816
  interface ColorFunction {
1786
1817
  // The first branch in `ConvertType` will forward the parameters to the `Color` constructor if there are no
1787
1818
  // parameters or all the parameters are non-objects
1788
- (color?: string | number): ConstNode<"color", Color>;
1789
- (r: number, g: number, b: number): ConstNode<"color", Color>;
1819
+ (color?: string | number): VarNode<"color", ConstNode<"color", Color>>;
1820
+ (r: number, g: number, b: number): VarNode<"color", ConstNode<"color", Color>>;
1790
1821
 
1791
1822
  // The second branch does not apply because `cacheMap` is `null`
1792
1823
 
1793
- // The third branch will be triggered if there is a single parameter.
1794
- (color: Color): ConstNode<"color", Color>;
1795
- (node: Node): Node<"color">;
1824
+ // The third branch will be triggered if there is a single parameter
1825
+ // ConstNode
1826
+ (color: Color | Vector3): VarNode<"color", ConstNode<"color", Color>>;
1827
+ // ConvertNode
1828
+ (node: Node<"float">): VarNode<"color", ConvertNode<"color">>;
1829
+ (node: Node<"color"> | Node<"vec3">): VarNode<"color", ConvertNode<"color">>;
1796
1830
 
1797
- // The fall-through branch will be triggered if there is more than one parameter, or one of the parameters is an
1798
- // object. Not sure which cases are worth considering here.
1831
+ // The fall-through branch will be triggered if there is more than one parameter, and one of the parameters is an
1832
+ // object
1833
+ (
1834
+ x: Node<"float"> | number,
1835
+ y: Node<"float"> | number,
1836
+ z: Node<"float"> | number,
1837
+ ): VarNode<"vec3", JoinNode<"vec3">>;
1838
+ (xy: Node<"vec2"> | Vector2, z: Node<"float"> | number): VarNode<"vec3", JoinNode<"vec3">>;
1839
+ (x: Node<"float"> | number, yz: Node<"vec2"> | Vector2): VarNode<"vec3", JoinNode<"vec3">>;
1799
1840
  }
1800
1841
 
1801
1842
  export const color: ColorFunction;
1802
1843
 
1803
1844
  interface FloatFunction {
1804
- (value?: number): ConstNode<"float", number>;
1805
- (node: Node): Node<"float">;
1845
+ // ConstNode
1846
+ (value?: number): VarNode<"float", ConstNode<"float", number>>;
1847
+
1848
+ // ConvertNode
1849
+ (node: ScalarNode): VarNode<"float", ConvertNode<"float">>;
1806
1850
  }
1807
1851
 
1808
1852
  export const float: FloatFunction;
1809
1853
 
1810
1854
  interface IntFunction {
1811
- (value?: number): ConstNode<"int", number>;
1812
- (node: Node): Node<"int">;
1855
+ // ConstNode
1856
+ (value?: number): VarNode<"int", ConstNode<"int", number>>;
1857
+
1858
+ // ConvertNode
1859
+ (node: ScalarNode): VarNode<"int", ConvertNode<"int">>;
1813
1860
  }
1814
1861
 
1815
1862
  export const int: IntFunction;
1816
1863
 
1817
1864
  interface UintFunction {
1818
- (value?: number): ConstNode<"uint", number>;
1819
- (node: Node): Node<"uint">;
1865
+ // ConstNode
1866
+ (value?: number): VarNode<"uint", ConstNode<"uint", number>>;
1867
+
1868
+ // ConvertNode
1869
+ (node: ScalarNode): VarNode<"uint", ConvertNode<"uint">>;
1820
1870
  }
1821
1871
 
1822
1872
  export const uint: UintFunction;
1823
1873
 
1824
1874
  interface BoolFunction {
1825
- (value?: boolean): ConstNode<"bool", boolean>;
1826
- (node: Node): Node<"bool">;
1875
+ // ConstNode
1876
+ (value?: boolean): VarNode<"bool", ConstNode<"bool", boolean>>;
1877
+
1878
+ // ConvertNode
1879
+ (node: ScalarNode): VarNode<"bool", ConvertNode<"bool">>;
1827
1880
  }
1828
1881
 
1829
1882
  export const bool: BoolFunction;
@@ -1831,162 +1884,517 @@ export const bool: BoolFunction;
1831
1884
  interface Vec2Function {
1832
1885
  // The first branch in `ConvertType` will forward the parameters to the `Vector2` constructor if there are no
1833
1886
  // parameters or all the parameters are non-objects
1834
- (x?: number, y?: number): ConstNode<"vec2", Vector2>;
1887
+ (x?: number, y?: number): VarNode<"vec2", ConstNode<"vec2", Vector2>>;
1835
1888
 
1836
1889
  // The second branch does not apply because `cacheMap` is `null`
1837
1890
 
1838
- // The third branch will be triggered if there is a single parameter.
1839
- (value: Vector2): ConstNode<"vec2", Vector2>;
1840
- (node: Node): Node<"vec2">;
1891
+ // The third branch will be triggered if there is a single parameter
1892
+ // ConstNode
1893
+ (value: Vector2): VarNode<"vec2", ConstNode<"vec2", Vector2>>;
1894
+ // ConvertNode
1895
+ (node: ScalarNode): VarNode<"vec2", ConvertNode<"vec2">>;
1896
+ (node: Node<"vec2"> | Node<"ivec2"> | Node<"uvec2"> | Node<"bvec2">): VarNode<"vec2", ConvertNode<"vec2">>;
1841
1897
 
1842
- // The fall-through branch will be triggered if there is more than one parameter, or one of the parameters is an
1843
- // object.
1844
- (x: Node | number, y: Node | number): Node<"vec2">;
1898
+ // The fall-through branch will be triggered if there is more than one parameter, and one of the parameters is an
1899
+ // object
1900
+ (x: Scalar, y: Scalar): VarNode<"vec2", JoinNode<"vec2">>;
1845
1901
  }
1846
1902
 
1847
1903
  export const vec2: Vec2Function;
1848
1904
 
1849
1905
  interface Ivec2Function {
1850
- (x: number, y: number): ConstNode<"ivec2", Vector2>;
1851
- (x: Node, y: Node): Node<"ivec2">;
1906
+ // The first branch in `ConvertType` will forward the parameters to the `Vector2` constructor if there are no
1907
+ // parameters or all the parameters are non-objects
1908
+ (x?: number, y?: number): VarNode<"ivec2", ConstNode<"ivec2", Vector2>>;
1909
+
1910
+ // The second branch does not apply because `cacheMap` is `null`
1911
+
1912
+ // The third branch will be triggered if there is a single parameter
1913
+ // ConstNode
1914
+ (value: Vector2): VarNode<"ivec2", ConstNode<"ivec2", Vector2>>;
1915
+ // ConvertNode
1916
+ (node: Node<"int">): VarNode<"ivec2", ConvertNode<"ivec2">>;
1917
+ (node: Node<"vec2"> | Node<"ivec2"> | Node<"uvec2"> | Node<"bvec2">): VarNode<"ivec2", ConvertNode<"ivec2">>;
1918
+
1919
+ // The fall-through branch will be triggered if there is more than one parameter, and one of the parameters is an
1920
+ // object
1921
+ (x: Node<"int"> | number, y: Node<"int"> | number): VarNode<"ivec2", JoinNode<"ivec2">>;
1852
1922
  }
1853
1923
 
1854
1924
  export const ivec2: Ivec2Function;
1855
1925
 
1856
- export const uvec2: (x: Node, y: Node) => Node<"uvec2">;
1857
- export const bvec2: (node: Node) => Node<"bvec2">;
1926
+ interface Uvec2Function {
1927
+ // The first branch in `ConvertType` will forward the parameters to the `Vector2` constructor if there are no
1928
+ // parameters or all the parameters are non-objects
1929
+ (x?: number, y?: number): VarNode<"uvec2", ConstNode<"uvec2", Vector2>>;
1930
+
1931
+ // The second branch does not apply because `cacheMap` is `null`
1932
+
1933
+ // The third branch will be triggered if there is a single parameter
1934
+ // ConstNode
1935
+ (value: Vector2): VarNode<"uvec2", ConstNode<"uvec2", Vector2>>;
1936
+ // ConvertNode
1937
+ (node: Node<"uint">): VarNode<"uvec2", ConvertNode<"uvec2">>;
1938
+ (node: Node<"vec2"> | Node<"ivec2"> | Node<"uvec2"> | Node<"bvec2">): VarNode<"uvec2", ConvertNode<"uvec2">>;
1939
+
1940
+ // The fall-through branch will be triggered if there is more than one parameter, and one of the parameters is an
1941
+ // object
1942
+ (x: Node<"uint"> | number, y: Node<"uint"> | number): VarNode<"uvec2", JoinNode<"uvec2">>;
1943
+ }
1944
+
1945
+ export const uvec2: Uvec2Function;
1946
+
1947
+ interface Bvec2Function {
1948
+ // The first branch in `ConvertType` will forward the parameters to the `Vector2` constructor if there are no
1949
+ // parameters or all the parameters are non-objects
1950
+ (x?: boolean, y?: boolean): VarNode<"bvec2", ConstNode<"bvec2", Vector2>>;
1951
+
1952
+ // The second branch does not apply because `cacheMap` is `null`
1953
+
1954
+ // The third branch will be triggered if there is a single parameter
1955
+ // ConstNode
1956
+ (value: Vector2): VarNode<"bvec2", ConstNode<"bvec2", Vector2>>;
1957
+ // ConvertNode
1958
+ (node: Node<"bool">): VarNode<"bvec2", ConvertNode<"bvec2">>;
1959
+ (node: Node<"vec2"> | Node<"ivec2"> | Node<"uvec2"> | Node<"bvec2">): VarNode<"bvec2", ConvertNode<"bvec2">>;
1960
+
1961
+ // The fall-through branch will be triggered if there is more than one parameter, and one of the parameters is an
1962
+ // object
1963
+ (x: Node<"bool"> | boolean, y: Node<"bool"> | boolean): VarNode<"bvec2", JoinNode<"bvec2">>;
1964
+ }
1965
+
1966
+ export const bvec2: Bvec2Function;
1858
1967
 
1859
1968
  interface Vec3Function {
1860
1969
  // The first branch in `ConvertType` will forward the parameters to the `Vector3` constructor if there are no
1861
1970
  // parameters or all the parameters are non-objects
1862
- (x?: number, y?: number, z?: number): ConstNode<"vec3", Vector3>;
1971
+ (x?: number, y?: number, z?: number): VarNode<"vec3", ConstNode<"vec3", Vector3>>;
1863
1972
 
1864
1973
  // The second branch does not apply because `cacheMap` is `null`
1865
1974
 
1866
- // The third branch will be triggered if there is a single parameter.
1867
- (value: Vector3): ConstNode<"vec3", Vector3>;
1868
- (value: [number, number, number]): ConstNode<"vec3", Vector3>;
1869
- (node: Node): Node<"vec3">;
1870
-
1871
- // The fall-through branch will be triggered if there is more than one parameter, or one of the parameters is an
1872
- // object.
1873
- (x: Node | number, y: Node | number, z?: Node | number): Node<"vec3">;
1975
+ // The third branch will be triggered if there is a single parameter
1976
+ // ConstNode
1977
+ (value: Vector3): VarNode<"vec3", ConstNode<"vec3", Vector3>>;
1978
+ // ConvertNode
1979
+ (node: ScalarNode): VarNode<"vec3", ConvertNode<"vec3">>;
1980
+ (node: Node<"vec3"> | Node<"ivec3"> | Node<"uvec3"> | Node<"bvec3">): VarNode<"vec3", ConvertNode<"vec3">>;
1981
+
1982
+ // The fall-through branch will be triggered if there is more than one parameter, and one of the parameters is an
1983
+ // object
1984
+ (x: Scalar, y: Scalar, z: Scalar): VarNode<"vec3", JoinNode<"vec3">>;
1985
+ (xy: Node<"vec2"> | Vector2, z: Scalar): VarNode<"vec3", JoinNode<"vec3">>;
1986
+ (x: Scalar, yz: Node<"vec2"> | Vector2): VarNode<"vec3", JoinNode<"vec3">>;
1874
1987
  }
1875
1988
 
1876
1989
  export const vec3: Vec3Function;
1877
- export const ivec3: (node: Node) => Node<"ivec3">;
1878
- export const uvec3: (node: Node) => Node<"uvec3">;
1879
- export const bvec3: (node: Node) => Node<"bvec3">;
1990
+
1991
+ interface Ivec3Function {
1992
+ // The first branch in `ConvertType` will forward the parameters to the `Vector3` constructor if there are no
1993
+ // parameters or all the parameters are non-objects
1994
+ (x?: number, y?: number, z?: number): VarNode<"ivec3", ConstNode<"ivec3", Vector3>>;
1995
+
1996
+ // The second branch does not apply because `cacheMap` is `null`
1997
+
1998
+ // The third branch will be triggered if there is a single parameter
1999
+ // ConstNode
2000
+ (value: Vector3): VarNode<"ivec3", ConstNode<"ivec3", Vector3>>;
2001
+ // ConvertNode
2002
+ (node: Node<"int">): VarNode<"ivec3", ConvertNode<"ivec3">>;
2003
+ (node: Node<"vec3"> | Node<"ivec3"> | Node<"uvec3"> | Node<"bvec3">): VarNode<"ivec3", ConvertNode<"ivec3">>;
2004
+
2005
+ // The fall-through branch will be triggered if there is more than one parameter, and one of the parameters is an
2006
+ // object
2007
+ (x: Node<"int"> | number, y: Node<"int"> | number, z: Node<"int"> | number): VarNode<"ivec3", JoinNode<"ivec3">>;
2008
+ (xy: Node<"ivec2"> | Vector2, z: Node<"int"> | number): VarNode<"ivec3", JoinNode<"ivec3">>;
2009
+ (x: Node<"int"> | number, yz: Node<"ivec2"> | Vector2): VarNode<"ivec3", JoinNode<"ivec3">>;
2010
+ }
2011
+
2012
+ export const ivec3: Ivec3Function;
2013
+
2014
+ interface Uvec3Function {
2015
+ // The first branch in `ConvertType` will forward the parameters to the `Vector3` constructor if there are no
2016
+ // parameters or all the parameters are non-objects
2017
+ (x?: number, y?: number, z?: number): VarNode<"uvec3", ConstNode<"uvec3", Vector3>>;
2018
+
2019
+ // The second branch does not apply because `cacheMap` is `null`
2020
+
2021
+ // The third branch will be triggered if there is a single parameter
2022
+ // ConstNode
2023
+ (value: Vector3): VarNode<"uvec3", ConstNode<"uvec3", Vector3>>;
2024
+ // ConvertNode
2025
+ (node: Node<"uint">): VarNode<"uvec3", ConvertNode<"uvec3">>;
2026
+ (node: Node<"vec3"> | Node<"ivec3"> | Node<"uvec3"> | Node<"bvec3">): VarNode<"uvec3", ConvertNode<"uvec3">>;
2027
+
2028
+ // The fall-through branch will be triggered if there is more than one parameter, and one of the parameters is an
2029
+ // object
2030
+ (x: Node<"uint"> | number, y: Node<"uint"> | number, z: Node<"uint"> | number): VarNode<"uvec3", JoinNode<"uvec3">>;
2031
+ (xy: Node<"uvec2"> | Vector2, z: Node<"uint"> | number): VarNode<"uvec3", JoinNode<"uvec3">>;
2032
+ (x: Node<"uint"> | number, yz: Node<"uvec2"> | Vector2): VarNode<"uvec3", JoinNode<"uvec3">>;
2033
+ }
2034
+
2035
+ export const uvec3: Uvec3Function;
2036
+
2037
+ interface Bvec3Function {
2038
+ // The first branch in `ConvertType` will forward the parameters to the `Vector3` constructor if there are no
2039
+ // parameters or all the parameters are non-objects
2040
+ (x?: boolean, y?: boolean, z?: boolean): VarNode<"bvec3", ConstNode<"bvec3", Vector3>>;
2041
+
2042
+ // The second branch does not apply because `cacheMap` is `null`
2043
+
2044
+ // The third branch will be triggered if there is a single parameter
2045
+ // ConstNode
2046
+ (value: Vector3): VarNode<"bvec3", ConstNode<"bvec3", Vector3>>;
2047
+ // ConvertNode
2048
+ (node: Node<"bool">): VarNode<"bvec3", ConvertNode<"bvec3">>;
2049
+ (node: Node<"vec3"> | Node<"ivec3"> | Node<"uvec3"> | Node<"bvec3">): VarNode<"bvec3", ConvertNode<"bvec3">>;
2050
+
2051
+ // The fall-through branch will be triggered if there is more than one parameter, and one of the parameters is an
2052
+ // object
2053
+ (
2054
+ x: Node<"bool"> | boolean,
2055
+ y: Node<"bool"> | boolean,
2056
+ z: Node<"bool"> | boolean,
2057
+ ): VarNode<"bvec3", JoinNode<"bvec3">>;
2058
+ (xy: Node<"bvec2"> | Vector2, z: Node<"bool"> | boolean): VarNode<"bvec3", JoinNode<"bvec3">>;
2059
+ (x: Node<"bool"> | boolean, yz: Node<"bvec2"> | Vector2): VarNode<"bvec3", JoinNode<"bvec3">>;
2060
+ }
2061
+
2062
+ export const bvec3: Bvec3Function;
1880
2063
 
1881
2064
  interface Vec4Function {
1882
2065
  // The first branch in `ConvertType` will forward the parameters to the `Vector4` constructor if there are no
1883
2066
  // parameters or all the parameters are non-objects
1884
- (x?: number, y?: number, z?: number, w?: number): ConstNode<"vec4", Vector4>;
2067
+ (x?: number, y?: number, z?: number, w?: number): VarNode<"vec4", ConstNode<"vec4", Vector4>>;
1885
2068
 
1886
2069
  // The second branch does not apply because `cacheMap` is `null`
1887
2070
 
1888
- // The third branch will be triggered if there is a single parameter.
1889
- (value: Vector4): ConstNode<"vec4", Vector4>;
1890
- (node: Node): Node<"vec4">;
1891
-
1892
- // The fall-through branch will be triggered if there is more than one parameter, or one of the parameters is an
1893
- // object.
1894
- (x: Node | number, y: Node | number, z?: Node | number, w?: Node | number): Node<"vec4">;
2071
+ // The third branch will be triggered if there is a single parameter
2072
+ // ConstNode
2073
+ (value: Vector4): VarNode<"vec4", ConstNode<"vec4", Vector4>>;
2074
+ // ConvertNode
2075
+ (node: ScalarNode): VarNode<"vec4", ConvertNode<"vec4">>;
2076
+ (node: Node<"vec4"> | Node<"ivec4"> | Node<"uvec4"> | Node<"bvec4">): VarNode<"vec4", ConvertNode<"vec4">>;
2077
+
2078
+ // The fall-through branch will be triggered if there is more than one parameter, and one of the parameters is an
2079
+ // object
2080
+ (x: Scalar, y: Scalar, z: Scalar, w: Scalar): VarNode<"vec4", JoinNode<"vec4">>;
2081
+ (x: Scalar, yz: Node<"vec2"> | Vector2, w: Scalar): VarNode<"vec4", JoinNode<"vec4">>;
2082
+ (x: Scalar, y: Scalar, zw: Node<"vec2"> | Vector2): VarNode<"vec4", JoinNode<"vec4">>;
2083
+ (xy: Node<"vec2"> | Vector2, zw: Node<"vec2"> | Vector2): VarNode<"vec4", JoinNode<"vec4">>;
2084
+ (xy: Node<"vec2"> | Vector2, z: Scalar, w: Scalar): VarNode<"vec4", JoinNode<"vec4">>;
2085
+ (xyz: Node<"vec3"> | Node<"color"> | Vector3 | Color, w: Scalar): VarNode<"vec4", JoinNode<"vec4">>;
2086
+ (x: Scalar, yzw: Node<"vec3"> | Node<"color"> | Vector3 | Color): VarNode<"vec4", JoinNode<"vec4">>;
1895
2087
  }
1896
2088
 
1897
2089
  export const vec4: Vec4Function;
1898
- export const ivec4: (node: Node) => Node<"ivec4">;
1899
- export const uvec4: (node: Node) => Node<"uvec4">;
1900
- export const bvec4: (node: Node) => Node<"bvec4">;
2090
+
2091
+ interface Ivec4Function {
2092
+ // The first branch in `ConvertType` will forward the parameters to the `Vector4` constructor if there are no
2093
+ // parameters or all the parameters are non-objects
2094
+ (x?: number, y?: number, z?: number, w?: number): VarNode<"ivec4", ConstNode<"ivec4", Vector4>>;
2095
+
2096
+ // The second branch does not apply because `cacheMap` is `null`
2097
+
2098
+ // The third branch will be triggered if there is a single parameter
2099
+ // ConstNode
2100
+ (value: Vector4): VarNode<"ivec4", ConstNode<"ivec4", Vector4>>;
2101
+ // ConvertNode
2102
+ (node: Node<"int">): VarNode<"ivec4", ConvertNode<"ivec4">>;
2103
+ (node: Node<"vec4"> | Node<"ivec4"> | Node<"uvec4"> | Node<"bvec4">): VarNode<"ivec4", ConvertNode<"ivec4">>;
2104
+
2105
+ // The fall-through branch will be triggered if there is more than one parameter, and one of the parameters is an
2106
+ // object
2107
+ (
2108
+ x: Node<"int"> | number,
2109
+ y: Node<"int"> | number,
2110
+ z: Node<"int"> | number,
2111
+ w: Node<"int"> | number,
2112
+ ): VarNode<"ivec4", JoinNode<"ivec4">>;
2113
+ (
2114
+ x: Node<"int"> | number,
2115
+ yz: Node<"ivec2"> | Vector2,
2116
+ w: Node<"int"> | number,
2117
+ ): VarNode<"ivec4", JoinNode<"ivec4">>;
2118
+ (
2119
+ x: Node<"int"> | number,
2120
+ y: Node<"int"> | number,
2121
+ zw: Node<"ivec2"> | Vector2,
2122
+ ): VarNode<"ivec4", JoinNode<"ivec4">>;
2123
+ (xy: Node<"ivec2"> | Vector2, zw: Node<"ivec2"> | Vector2): VarNode<"ivec4", JoinNode<"ivec4">>;
2124
+ (
2125
+ xy: Node<"ivec2"> | Vector2,
2126
+ z: Node<"int"> | number,
2127
+ w: Node<"int"> | number,
2128
+ ): VarNode<"ivec4", JoinNode<"ivec4">>;
2129
+ (xyz: Node<"ivec3"> | Vector3, w: Node<"int"> | number): VarNode<"ivec4", JoinNode<"ivec4">>;
2130
+ (x: Node<"int"> | number, yzw: Node<"ivec3"> | Vector3): VarNode<"ivec4", JoinNode<"ivec4">>;
2131
+ }
2132
+
2133
+ export const ivec4: Ivec4Function;
2134
+
2135
+ interface Uvec4Function {
2136
+ // The first branch in `ConvertType` will forward the parameters to the `Vector4` constructor if there are no
2137
+ // parameters or all the parameters are non-objects
2138
+ (x?: number, y?: number, z?: number, w?: number): VarNode<"uvec4", ConstNode<"uvec4", Vector4>>;
2139
+
2140
+ // The second branch does not apply because `cacheMap` is `null`
2141
+
2142
+ // The third branch will be triggered if there is a single parameter
2143
+ // ConstNode
2144
+ (value: Vector4): VarNode<"uvec4", ConstNode<"uvec4", Vector4>>;
2145
+ // ConvertNode
2146
+ (node: Node<"uint">): VarNode<"uvec4", ConvertNode<"uvec4">>;
2147
+ (node: Node<"vec4"> | Node<"ivec4"> | Node<"uvec4"> | Node<"bvec4">): VarNode<"uvec4", ConvertNode<"uvec4">>;
2148
+
2149
+ // The fall-through branch will be triggered if there is more than one parameter, and one of the parameters is an
2150
+ // object
2151
+ (
2152
+ x: Node<"uint"> | number,
2153
+ y: Node<"uint"> | number,
2154
+ z: Node<"uint"> | number,
2155
+ w: Node<"uint"> | number,
2156
+ ): VarNode<"uvec4", JoinNode<"uvec4">>;
2157
+ (
2158
+ x: Node<"uint"> | number,
2159
+ yz: Node<"uvec2"> | Vector2,
2160
+ w: Node<"uint"> | number,
2161
+ ): VarNode<"uvec4", JoinNode<"uvec4">>;
2162
+ (
2163
+ x: Node<"uint"> | number,
2164
+ y: Node<"uint"> | number,
2165
+ zw: Node<"uvec2"> | Vector2,
2166
+ ): VarNode<"uvec4", JoinNode<"uvec4">>;
2167
+ (xy: Node<"uvec2"> | Vector2, zw: Node<"uvec2"> | Vector2): VarNode<"uvec4", JoinNode<"uvec4">>;
2168
+ (
2169
+ xy: Node<"uvec2"> | Vector2,
2170
+ z: Node<"uint"> | number,
2171
+ w: Node<"uint"> | number,
2172
+ ): VarNode<"uvec4", JoinNode<"uvec4">>;
2173
+ (xyz: Node<"uvec3"> | Vector3, w: Node<"uint"> | number): VarNode<"uvec4", JoinNode<"uvec4">>;
2174
+ (x: Node<"uint"> | number, yzw: Node<"uvec3"> | Vector3): VarNode<"uvec4", JoinNode<"uvec4">>;
2175
+ }
2176
+
2177
+ export const uvec4: Uvec4Function;
2178
+
2179
+ interface Bvec4Function {
2180
+ // The first branch in `ConvertType` will forward the parameters to the `Vector4` constructor if there are no
2181
+ // parameters or all the parameters are non-objects
2182
+ (x?: boolean, y?: boolean, z?: boolean, w?: boolean): VarNode<"bvec4", ConstNode<"bvec4", Vector4>>;
2183
+
2184
+ // The second branch does not apply because `cacheMap` is `null`
2185
+
2186
+ // The third branch will be triggered if there is a single parameter
2187
+ // ConstNode
2188
+ (value: Vector4): VarNode<"bvec4", ConstNode<"bvec4", Vector4>>;
2189
+ // ConvertNode
2190
+ (node: Node<"bool">): VarNode<"bvec4", ConvertNode<"bvec4">>;
2191
+ (node: Node<"vec4"> | Node<"ivec4"> | Node<"uvec4"> | Node<"bvec4">): VarNode<"bvec4", ConvertNode<"bvec4">>;
2192
+
2193
+ // The fall-through branch will be triggered if there is more than one parameter, and one of the parameters is an
2194
+ // object
2195
+ (
2196
+ x: Node<"bool"> | boolean,
2197
+ y: Node<"bool"> | boolean,
2198
+ z: Node<"bool"> | boolean,
2199
+ w: Node<"bool"> | boolean,
2200
+ ): VarNode<"bvec4", JoinNode<"bvec4">>;
2201
+ (
2202
+ x: Node<"bool"> | boolean,
2203
+ yz: Node<"bvec2"> | Vector2,
2204
+ w: Node<"bool"> | boolean,
2205
+ ): VarNode<"bvec4", JoinNode<"bvec4">>;
2206
+ (
2207
+ x: Node<"bool"> | boolean,
2208
+ y: Node<"bool"> | boolean,
2209
+ zw: Node<"bvec2"> | Vector2,
2210
+ ): VarNode<"bvec4", JoinNode<"bvec4">>;
2211
+ (xy: Node<"bvec2"> | Vector2, zw: Node<"bvec2"> | Vector2): VarNode<"bvec4", JoinNode<"bvec4">>;
2212
+ (
2213
+ xy: Node<"bvec2"> | Vector2,
2214
+ z: Node<"bool"> | boolean,
2215
+ w: Node<"bool"> | boolean,
2216
+ ): VarNode<"bvec4", JoinNode<"bvec4">>;
2217
+ (xyz: Node<"bvec3"> | Vector3, w: Node<"bool"> | boolean): VarNode<"bvec4", JoinNode<"bvec4">>;
2218
+ (x: Node<"bool"> | boolean, yzw: Node<"bvec3"> | Vector3): VarNode<"bvec4", JoinNode<"bvec4">>;
2219
+ }
2220
+
2221
+ export const bvec4: Bvec4Function;
1901
2222
 
1902
2223
  interface Mat2Function {
1903
- (value: Matrix2): ConstNode<"mat2", Matrix2>;
1904
- (node: Node): Node<"mat2">;
2224
+ // The first branch in `ConvertType` will forward the parameters to the `Matrix2` constructor if there are no
2225
+ // parameters or all the parameters are non-objects
2226
+ (): VarNode<"mat2", ConstNode<"mat2", Matrix2>>;
2227
+ (n11: number, n12: number, n21: number, n22: number): VarNode<"mat2", ConstNode<"mat2", Matrix2>>;
2228
+
2229
+ // The second branch does not apply because `cacheMap` is `null`
2230
+
2231
+ // The third branch will be triggered if there is a single parameter
2232
+ // ConstNode
2233
+ (value: Matrix2): VarNode<"mat2", ConstNode<"mat2", Matrix2>>;
2234
+ // ConvertNode
2235
+ (node: Node<"mat2">): VarNode<"mat2", ConvertNode<"mat2">>;
2236
+
2237
+ // The fall-through branch will be triggered if there is more than one parameter, and one of the parameters is an
2238
+ // object
2239
+ (n1: Node<"vec2"> | Vector2, n2: Node<"vec2"> | Vector2): VarNode<"mat2", JoinNode<"mat2">>;
2240
+ (
2241
+ n11: Node<"float"> | number,
2242
+ n12: Node<"float"> | number,
2243
+ n21: Node<"float"> | number,
2244
+ n22: Node<"float"> | number,
2245
+ ): VarNode<"mat2", JoinNode<"mat2">>;
1905
2246
  }
1906
2247
 
1907
2248
  export const mat2: Mat2Function;
1908
2249
 
1909
2250
  interface Mat3Function {
1910
- (value: Matrix3): ConstNode<"mat3", Matrix3>;
2251
+ // The first branch in `ConvertType` will forward the parameters to the `Matrix3` constructor if there are no
2252
+ // parameters or all the parameters are non-objects
2253
+ (): VarNode<"mat3", ConstNode<"mat3", Matrix3>>;
2254
+ (
2255
+ n11: number,
2256
+ n12: number,
2257
+ n13: number,
2258
+ n21: number,
2259
+ n22: number,
2260
+ n23: number,
2261
+ n31: number,
2262
+ n32: number,
2263
+ n33: number,
2264
+ ): VarNode<"mat3", ConstNode<"mat3", Matrix3>>;
2265
+
2266
+ // The second branch does not apply because `cacheMap` is `null`
2267
+
2268
+ // The third branch will be triggered if there is a single parameter
2269
+ // ConstNode
2270
+ (value: Matrix3): VarNode<"mat3", ConstNode<"mat3", Matrix3>>;
2271
+ // ConvertNode
2272
+ (node: Node<"mat3">): VarNode<"mat3", ConvertNode<"mat3">>;
2273
+
2274
+ // The fall-through branch will be triggered if there is more than one parameter, and one of the parameters is an
2275
+ // object
1911
2276
  (
1912
- n11: number | Node,
1913
- n12: number | Node,
1914
- n13: number | Node,
1915
- n21: number | Node,
1916
- n22: number | Node,
1917
- n23: number | Node,
1918
- n31: number | Node,
1919
- n32: number | Node,
1920
- n33: number | Node,
1921
- ): Node<"mat3">;
1922
- (): ConstNode<"mat3", Matrix3>;
2277
+ n1: Node<"vec3"> | Vector3,
2278
+ n2: Node<"vec3"> | Vector3,
2279
+ n3: Node<"vec3"> | Vector3,
2280
+ ): VarNode<"mat3", JoinNode<"mat3">>;
1923
2281
  (
1924
- p1: Node,
1925
- p2: Node,
1926
- p3: Node,
1927
- ): Node<"mat3">;
1928
- (node: Node): Node<"mat3">;
2282
+ n11: Node<"float"> | number,
2283
+ n12: Node<"float"> | number,
2284
+ n13: Node<"float"> | number,
2285
+ n21: Node<"float"> | number,
2286
+ n22: Node<"float"> | number,
2287
+ n23: Node<"float"> | number,
2288
+ n31: Node<"float"> | number,
2289
+ n32: Node<"float"> | number,
2290
+ n33: Node<"float"> | number,
2291
+ ): VarNode<"mat3", JoinNode<"mat3">>;
1929
2292
  }
1930
2293
 
1931
2294
  export const mat3: Mat3Function;
1932
2295
 
1933
2296
  interface Mat4Function {
1934
- (value: Matrix4): ConstNode<"mat4", Matrix4>;
2297
+ // The first branch in `ConvertType` will forward the parameters to the `Matrix4` constructor if there are no
2298
+ // parameters or all the parameters are non-objects
2299
+ (): VarNode<"mat4", ConstNode<"mat4", Matrix4>>;
1935
2300
  (
1936
- n11: number | Node,
1937
- n12: number | Node,
1938
- n13: number | Node,
1939
- n14: number | Node,
1940
- n21: number | Node,
1941
- n22: number | Node,
1942
- n23: number | Node,
1943
- n24: number | Node,
1944
- n31: number | Node,
1945
- n32: number | Node,
1946
- n33: number | Node,
1947
- n34: number | Node,
1948
- n41: number | Node,
1949
- n42: number | Node,
1950
- n43: number | Node,
1951
- n44: number | Node,
1952
- ): Node<"mat4">;
1953
- (): ConstNode<"mat4", Matrix4>;
2301
+ n11: number,
2302
+ n12: number,
2303
+ n13: number,
2304
+ n14: number,
2305
+ n21: number,
2306
+ n22: number,
2307
+ n23: number,
2308
+ n24: number,
2309
+ n31: number,
2310
+ n32: number,
2311
+ n33: number,
2312
+ n34: number,
2313
+ n41: number,
2314
+ n42: number,
2315
+ n43: number,
2316
+ n44: number,
2317
+ ): VarNode<"mat4", ConstNode<"mat4", Matrix4>>;
2318
+
2319
+ // The second branch does not apply because `cacheMap` is `null`
2320
+
2321
+ // The third branch will be triggered if there is a single parameter
2322
+ // ConstNode
2323
+ (value: Matrix4): VarNode<"mat4", ConstNode<"mat4", Matrix4>>;
2324
+ // ConvertNode
2325
+ (node: Node<"mat4">): VarNode<"mat4", ConvertNode<"mat4">>;
2326
+
2327
+ // The fall-through branch will be triggered if there is more than one parameter, and one of the parameters is an
2328
+ // object
1954
2329
  (
1955
- p1: Node,
1956
- p2: Node,
1957
- p3: Node,
1958
- p4: Node,
1959
- ): Node<"mat4">;
1960
- (node: Node): Node<"mat4">;
2330
+ n1: Node<"vec4"> | Vector4,
2331
+ n2: Node<"vec4"> | Vector4,
2332
+ n3: Node<"vec4"> | Vector4,
2333
+ n4: Node<"vec4"> | Vector4,
2334
+ ): VarNode<"mat4", JoinNode<"mat4">>;
2335
+ (
2336
+ n11: Node<"float"> | number,
2337
+ n12: Node<"float"> | number,
2338
+ n13: Node<"float"> | number,
2339
+ n14: Node<"float"> | number,
2340
+ n21: Node<"float"> | number,
2341
+ n22: Node<"float"> | number,
2342
+ n23: Node<"float"> | number,
2343
+ n24: Node<"float"> | number,
2344
+ n31: Node<"float"> | number,
2345
+ n32: Node<"float"> | number,
2346
+ n33: Node<"float"> | number,
2347
+ n34: Node<"float"> | number,
2348
+ n41: Node<"float"> | number,
2349
+ n42: Node<"float"> | number,
2350
+ n43: Node<"float"> | number,
2351
+ n44: Node<"float"> | number,
2352
+ ): VarNode<"mat4", JoinNode<"mat4">>;
1961
2353
  }
1962
2354
 
1963
2355
  export const mat4: Mat4Function;
1964
2356
 
1965
- export const string: (value?: string) => Node<"string">;
1966
- export const arrayBuffer: (value: ArrayBuffer) => Node<"ArrayBuffer">;
2357
+ export const string: unknown;
2358
+ export const arrayBuffer: unknown;
1967
2359
 
1968
2360
  declare module "../core/Node.js" {
1969
- interface NodeElements {
1970
- toColor: () => Node<"color">;
1971
- toFloat: () => Node<"float">;
1972
- toInt: () => Node<"int">;
1973
- toUint: () => Node<"uint">;
1974
- toBool: () => Node<"bool">;
1975
- toVec2: () => Node<"vec2">;
1976
- toIVec2: () => Node<"ivec2">;
1977
- toUVec2: () => Node<"uvec2">;
1978
- toBVec2: () => Node<"bvec2">;
1979
- toVec3: () => Node<"vec3">;
1980
- toIVec3: () => Node<"ivec3">;
1981
- toUVec3: () => Node<"uvec3">;
1982
- toBVec3: () => Node<"bvec3">;
1983
- toVec4: () => Node<"vec4">;
1984
- toIVec4: () => Node<"ivec4">;
1985
- toUVec4: () => Node<"uvec4">;
1986
- toBVec4: () => Node<"bvec4">;
1987
- toMat2: () => Node<"mat2">;
1988
- toMat3: () => Node<"mat3">;
1989
- toMat4: () => Node<"mat4">;
2361
+ interface ColorExtensions {
2362
+ toColor: () => VarNode<"color", ConvertNode<"color">>;
2363
+ }
2364
+
2365
+ interface NumOrBoolExtensions<TNumOrBool extends NumOrBoolType> {
2366
+ toFloat: () => VarNode<"float", ConvertNode<"float">>;
2367
+ toInt: () => VarNode<"int", ConvertNode<"int">>;
2368
+ toUint: () => VarNode<"uint", ConvertNode<"uint">>;
2369
+ toBool: () => VarNode<"bool", ConvertNode<"bool">>;
2370
+ }
2371
+
2372
+ interface NumOrBoolVec2Extensions<TNumOrBool extends NumOrBoolType> {
2373
+ toVec2: () => VarNode<"vec2", ConvertNode<"vec2">>;
2374
+ toIVec2: () => VarNode<"ivec2", ConvertNode<"ivec2">>;
2375
+ toUVec2: () => VarNode<"uvec2", ConvertNode<"uvec2">>;
2376
+ toBVec2: () => VarNode<"bvec2", ConvertNode<"bvec2">>;
2377
+ }
2378
+
2379
+ interface NumOrBoolVec3Extensions<TNumOrBool extends NumOrBoolType> {
2380
+ toColor: () => VarNode<"color", ConvertNode<"color">>;
2381
+ toVec3: () => VarNode<"vec3", ConvertNode<"vec3">>;
2382
+ toIVec3: () => VarNode<"ivec3", ConvertNode<"ivec3">>;
2383
+ toUVec3: () => VarNode<"uvec3", ConvertNode<"uvec3">>;
2384
+ toBVec3: () => VarNode<"bvec3", ConvertNode<"bvec3">>;
2385
+ }
2386
+
2387
+ interface NumOrBoolVec4Extensions<TNumOrBool extends NumOrBoolType> {
2388
+ toVec4: () => VarNode<"vec4", ConvertNode<"vec4">>;
2389
+ toIVec4: () => VarNode<"ivec4", ConvertNode<"ivec4">>;
2390
+ toUVec4: () => VarNode<"uvec4", ConvertNode<"uvec4">>;
2391
+ toBVec4: () => VarNode<"bvec4", ConvertNode<"bvec4">>;
2392
+ }
2393
+
2394
+ interface MatExtensions<TMat extends MatType> {
2395
+ toMat2: () => VarNode<"mat2", ConvertNode<"mat2">>;
2396
+ toMat3: () => VarNode<"mat3", ConvertNode<"mat3">>;
2397
+ toMat4: () => VarNode<"mat4", ConvertNode<"mat4">>;
1990
2398
  }
1991
2399
  }
1992
2400