glre 0.38.0 → 0.40.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 (295) hide show
  1. package/README.md +8 -4
  2. package/dist/addons.cjs +2 -0
  3. package/dist/addons.cjs.map +1 -0
  4. package/dist/addons.d.ts +1287 -0
  5. package/dist/addons.js +2 -0
  6. package/dist/addons.js.map +1 -0
  7. package/dist/index.cjs +31 -43
  8. package/dist/index.cjs.map +1 -1
  9. package/dist/index.d.ts +187 -323
  10. package/dist/index.js +31 -43
  11. package/dist/index.js.map +1 -1
  12. package/dist/native.cjs +1 -48
  13. package/dist/native.cjs.map +1 -1
  14. package/dist/native.d.ts +536 -10
  15. package/dist/native.js +1 -48
  16. package/dist/native.js.map +1 -1
  17. package/dist/node.cjs +69 -0
  18. package/dist/node.cjs.map +1 -0
  19. package/dist/node.d.ts +626 -0
  20. package/dist/node.js +69 -0
  21. package/dist/node.js.map +1 -0
  22. package/dist/react.cjs +1 -48
  23. package/dist/react.cjs.map +1 -1
  24. package/dist/react.d.ts +524 -4
  25. package/dist/react.js +1 -48
  26. package/dist/react.js.map +1 -1
  27. package/dist/solid.cjs +1 -48
  28. package/dist/solid.cjs.map +1 -1
  29. package/dist/solid.d.ts +524 -4
  30. package/dist/solid.js +1 -48
  31. package/dist/solid.js.map +1 -1
  32. package/package.json +64 -11
  33. package/src/addons/animation/easing/backIn.ts +10 -0
  34. package/src/addons/animation/easing/backInOut.ts +12 -0
  35. package/src/addons/animation/easing/backOut.ts +10 -0
  36. package/src/addons/animation/easing/bounceIn.ts +10 -0
  37. package/src/addons/animation/easing/bounceInOut.ts +13 -0
  38. package/src/addons/animation/easing/bounceOut.ts +30 -0
  39. package/src/addons/animation/easing/circularIn.ts +9 -0
  40. package/src/addons/animation/easing/circularInOut.ts +11 -0
  41. package/src/addons/animation/easing/circularOut.ts +9 -0
  42. package/src/addons/animation/easing/cubicIn.ts +9 -0
  43. package/src/addons/animation/easing/cubicInOut.ts +11 -0
  44. package/src/addons/animation/easing/cubicOut.ts +10 -0
  45. package/src/addons/animation/easing/elasticIn.ts +10 -0
  46. package/src/addons/animation/easing/elasticInOut.ts +21 -0
  47. package/src/addons/animation/easing/elasticOut.ts +12 -0
  48. package/src/addons/animation/easing/exponentialIn.ts +9 -0
  49. package/src/addons/animation/easing/exponentialInOut.ts +13 -0
  50. package/src/addons/animation/easing/exponentialOut.ts +9 -0
  51. package/src/addons/animation/easing/index.ts +33 -0
  52. package/src/addons/animation/easing/linearIn.ts +9 -0
  53. package/src/addons/animation/easing/linearInOut.ts +9 -0
  54. package/src/addons/animation/easing/linearOut.ts +9 -0
  55. package/src/addons/animation/easing/quadraticIn.ts +9 -0
  56. package/src/addons/animation/easing/quadraticInOut.ts +10 -0
  57. package/src/addons/animation/easing/quadraticOut.ts +9 -0
  58. package/src/addons/animation/easing/quarticIn.ts +9 -0
  59. package/src/addons/animation/easing/quarticInOut.ts +11 -0
  60. package/src/addons/animation/easing/quarticOut.ts +10 -0
  61. package/src/addons/animation/easing/quinticIn.ts +9 -0
  62. package/src/addons/animation/easing/quinticInOut.ts +11 -0
  63. package/src/addons/animation/easing/quinticOut.ts +9 -0
  64. package/src/addons/animation/easing/sineIn.ts +10 -0
  65. package/src/addons/animation/easing/sineInOut.ts +10 -0
  66. package/src/addons/animation/easing/sineOut.ts +10 -0
  67. package/src/addons/color/palette/macbeth.ts +42 -0
  68. package/src/addons/color/space/cmyk2rgb.ts +12 -0
  69. package/src/addons/color/space/gamma2linear.ts +19 -0
  70. package/src/addons/color/space/hsl2rgb.ts +20 -0
  71. package/src/addons/color/space/hsv2rgb.ts +18 -0
  72. package/src/addons/color/space/hue2rgb.ts +12 -0
  73. package/src/addons/color/space/index.ts +29 -0
  74. package/src/addons/color/space/lab2lch.ts +22 -0
  75. package/src/addons/color/space/lab2rgb.ts +19 -0
  76. package/src/addons/color/space/lab2xyz.ts +32 -0
  77. package/src/addons/color/space/lch2lab.ts +21 -0
  78. package/src/addons/color/space/lch2rgb.ts +22 -0
  79. package/src/addons/color/space/linear2gamma.ts +19 -0
  80. package/src/addons/color/space/oklab2rgb.ts +35 -0
  81. package/src/addons/color/space/rgb2cmyk.ts +13 -0
  82. package/src/addons/color/space/rgb2hcv.ts +29 -0
  83. package/src/addons/color/space/rgb2hsl.ts +23 -0
  84. package/src/addons/color/space/rgb2hsv.ts +36 -0
  85. package/src/addons/color/space/rgb2hue.ts +29 -0
  86. package/src/addons/color/space/rgb2lab.ts +19 -0
  87. package/src/addons/color/space/rgb2lch.ts +22 -0
  88. package/src/addons/color/space/rgb2oklab.ts +45 -0
  89. package/src/addons/color/space/rgb2srgb.ts +34 -0
  90. package/src/addons/color/space/rgb2xyz.ts +20 -0
  91. package/src/addons/color/space/rgb2yiq.ts +22 -0
  92. package/src/addons/color/space/rgb2yuv.ts +32 -0
  93. package/src/addons/color/space/srgb2rgb.ts +34 -0
  94. package/src/addons/color/space/xyz2lab.ts +27 -0
  95. package/src/addons/color/space/xyz2rgb.ts +30 -0
  96. package/src/addons/color/space/yiq2rgb.ts +22 -0
  97. package/src/addons/color/space/yuv2rgb.ts +32 -0
  98. package/src/addons/draw/arrows.ts +75 -0
  99. package/src/addons/draw/axis.ts +57 -0
  100. package/src/addons/draw/bridge.ts +81 -0
  101. package/src/addons/draw/char.ts +30 -0
  102. package/src/addons/draw/circle.ts +29 -0
  103. package/src/addons/draw/fill.ts +25 -0
  104. package/src/addons/draw/flip.ts +45 -0
  105. package/src/addons/draw/hex.ts +29 -0
  106. package/src/addons/draw/index.ts +13 -0
  107. package/src/addons/draw/line.ts +16 -0
  108. package/src/addons/draw/point.ts +30 -0
  109. package/src/addons/draw/rect.ts +52 -0
  110. package/src/addons/draw/stroke.ts +31 -0
  111. package/src/addons/draw/tri.ts +29 -0
  112. package/src/addons/generative/cnoise.ts +239 -0
  113. package/src/addons/generative/curl.ts +64 -0
  114. package/src/addons/generative/fbm.ts +69 -0
  115. package/src/addons/generative/gerstnerWave.ts +21 -0
  116. package/src/addons/generative/gnoise.ts +113 -0
  117. package/src/addons/generative/index.ts +15 -0
  118. package/src/addons/generative/noised.ts +139 -0
  119. package/src/addons/generative/pnoise.ts +249 -0
  120. package/src/addons/generative/psrdnoise.ts +277 -0
  121. package/src/addons/generative/random.ts +136 -0
  122. package/src/addons/generative/snoise.ts +199 -0
  123. package/src/addons/generative/srandom.ts +90 -0
  124. package/src/addons/generative/voronoi.ts +134 -0
  125. package/src/addons/generative/voronoise.ts +69 -0
  126. package/src/addons/generative/wavelet.ts +77 -0
  127. package/src/addons/generative/worley.ts +99 -0
  128. package/src/addons/geometry/aabb/aabb.ts +8 -0
  129. package/src/addons/geometry/aabb/centroid.ts +10 -0
  130. package/src/addons/geometry/aabb/contain.ts +19 -0
  131. package/src/addons/geometry/aabb/diagonal.ts +10 -0
  132. package/src/addons/geometry/aabb/expand.ts +16 -0
  133. package/src/addons/geometry/aabb/index.ts +7 -0
  134. package/src/addons/geometry/aabb/intersect.ts +20 -0
  135. package/src/addons/geometry/aabb/square.ts +17 -0
  136. package/src/addons/geometry/index.ts +2 -0
  137. package/src/addons/geometry/triangle/area.ts +10 -0
  138. package/src/addons/geometry/triangle/barycentric.ts +50 -0
  139. package/src/addons/geometry/triangle/centroid.ts +10 -0
  140. package/src/addons/geometry/triangle/closestPoint.ts +85 -0
  141. package/src/addons/geometry/triangle/contain.ts +19 -0
  142. package/src/addons/geometry/triangle/distanceSq.ts +38 -0
  143. package/src/addons/geometry/triangle/index.ts +10 -0
  144. package/src/addons/geometry/triangle/intersect.ts +49 -0
  145. package/src/addons/geometry/triangle/normal.ts +12 -0
  146. package/src/addons/geometry/triangle/signedDistance.ts +31 -0
  147. package/src/addons/geometry/triangle/triangle.ts +9 -0
  148. package/src/addons/index.ts +8 -0
  149. package/src/addons/lighting/ray.ts +8 -0
  150. package/src/addons/math/aafloor.ts +13 -0
  151. package/src/addons/math/aafract.ts +38 -0
  152. package/src/addons/math/aamirror.ts +12 -0
  153. package/src/addons/math/aastep.ts +14 -0
  154. package/src/addons/math/absi.ts +9 -0
  155. package/src/addons/math/adaptiveThreshold.ts +24 -0
  156. package/src/addons/math/bump.ts +20 -0
  157. package/src/addons/math/const.ts +19 -0
  158. package/src/addons/math/cubic.ts +101 -0
  159. package/src/addons/math/cubicMix.ts +49 -0
  160. package/src/addons/math/decimate.ts +12 -0
  161. package/src/addons/math/dist.ts +143 -0
  162. package/src/addons/math/fcos.ts +11 -0
  163. package/src/addons/math/frac.ts +9 -0
  164. package/src/addons/math/gain.ts +14 -0
  165. package/src/addons/math/gaussian.ts +14 -0
  166. package/src/addons/math/grad4.ts +19 -0
  167. package/src/addons/math/hammersley.ts +54 -0
  168. package/src/addons/math/highPass.ts +12 -0
  169. package/src/addons/math/index.ts +63 -0
  170. package/src/addons/math/inside.ts +68 -0
  171. package/src/addons/math/invCubic.ts +9 -0
  172. package/src/addons/math/invQuartic.ts +9 -0
  173. package/src/addons/math/inverse.ts +9 -0
  174. package/src/addons/math/lengthSq.ts +10 -0
  175. package/src/addons/math/map.ts +27 -0
  176. package/src/addons/math/mirror.ts +12 -0
  177. package/src/addons/math/mmax.ts +27 -0
  178. package/src/addons/math/mmin.ts +28 -0
  179. package/src/addons/math/mmix.ts +47 -0
  180. package/src/addons/math/mod2.ts +44 -0
  181. package/src/addons/math/mod289.ts +46 -0
  182. package/src/addons/math/modi.ts +15 -0
  183. package/src/addons/math/nyquist.ts +15 -0
  184. package/src/addons/math/pack.ts +15 -0
  185. package/src/addons/math/parabola.ts +12 -0
  186. package/src/addons/math/permute.ts +42 -0
  187. package/src/addons/math/pow2.ts +10 -0
  188. package/src/addons/math/pow3.ts +9 -0
  189. package/src/addons/math/pow5.ts +10 -0
  190. package/src/addons/math/pow7.ts +12 -0
  191. package/src/addons/math/powFast.ts +18 -0
  192. package/src/addons/math/quartic.ts +15 -0
  193. package/src/addons/math/quat/index.ts +14 -0
  194. package/src/addons/math/quat/quat2mat3.ts +28 -0
  195. package/src/addons/math/quat/quat2mat4.ts +16 -0
  196. package/src/addons/math/quat/quatAdd.ts +18 -0
  197. package/src/addons/math/quat/quatConj.ts +14 -0
  198. package/src/addons/math/quat/quatDiv.ts +18 -0
  199. package/src/addons/math/quat/quatIdentity.ts +9 -0
  200. package/src/addons/math/quat/quatInverse.ts +17 -0
  201. package/src/addons/math/quat/quatLength.ts +15 -0
  202. package/src/addons/math/quat/quatLengthSq.ts +14 -0
  203. package/src/addons/math/quat/quatLerp.ts +40 -0
  204. package/src/addons/math/quat/quatMul.ts +38 -0
  205. package/src/addons/math/quat/quatNeg.ts +14 -0
  206. package/src/addons/math/quat/quatNorm.ts +16 -0
  207. package/src/addons/math/quat/quatSub.ts +18 -0
  208. package/src/addons/math/quintic.ts +16 -0
  209. package/src/addons/math/rotate2d.ts +16 -0
  210. package/src/addons/math/rotate3d.ts +37 -0
  211. package/src/addons/math/rotate3dX.ts +20 -0
  212. package/src/addons/math/rotate3dY.ts +20 -0
  213. package/src/addons/math/rotate3dZ.ts +20 -0
  214. package/src/addons/math/rotate4d.ts +41 -0
  215. package/src/addons/math/rotate4dX.ts +21 -0
  216. package/src/addons/math/rotate4dY.ts +16 -0
  217. package/src/addons/math/rotate4dZ.ts +21 -0
  218. package/src/addons/math/saturateMediump.ts +11 -0
  219. package/src/addons/math/scale2d.ts +44 -0
  220. package/src/addons/math/scale3d.ts +17 -0
  221. package/src/addons/math/scale4d.ts +50 -0
  222. package/src/addons/math/smootherstep.ts +16 -0
  223. package/src/addons/math/taylorInvSqrt.ts +9 -0
  224. package/src/addons/math/toMat3.ts +14 -0
  225. package/src/addons/math/toMat4.ts +14 -0
  226. package/src/addons/math/translate4d.ts +31 -0
  227. package/src/addons/math/unpack.ts +88 -0
  228. package/src/addons/sdf/boxSDF.ts +24 -0
  229. package/src/addons/sdf/circleSDF.ts +20 -0
  230. package/src/addons/sdf/crossSDF.ts +17 -0
  231. package/src/addons/sdf/hexSDF.ts +18 -0
  232. package/src/addons/sdf/index.ts +7 -0
  233. package/src/addons/sdf/lineSDF.ts +33 -0
  234. package/src/addons/sdf/rectSDF.ts +46 -0
  235. package/src/addons/sdf/sphereSDF.ts +20 -0
  236. package/src/addons/sdf/triSDF.ts +14 -0
  237. package/src/addons/space/aspect.ts +14 -0
  238. package/src/addons/space/bracketing.ts +44 -0
  239. package/src/addons/space/brickTile.ts +44 -0
  240. package/src/addons/space/cart2polar.ts +20 -0
  241. package/src/addons/space/center.ts +32 -0
  242. package/src/addons/space/checkerTile.ts +41 -0
  243. package/src/addons/space/depth2viewZ.ts +43 -0
  244. package/src/addons/space/displace.ts +55 -0
  245. package/src/addons/space/equirect2xyz.ts +17 -0
  246. package/src/addons/space/eulerView.ts +19 -0
  247. package/src/addons/space/fisheye2xyz.ts +18 -0
  248. package/src/addons/space/flipY.ts +25 -0
  249. package/src/addons/space/hexTile.ts +18 -0
  250. package/src/addons/space/index.ts +38 -0
  251. package/src/addons/space/kaleidoscope.ts +48 -0
  252. package/src/addons/space/linearizeDepth.ts +17 -0
  253. package/src/addons/space/lookAt.ts +49 -0
  254. package/src/addons/space/lookAtView.ts +40 -0
  255. package/src/addons/space/mirrorTile.ts +73 -0
  256. package/src/addons/space/nearest.ts +13 -0
  257. package/src/addons/space/orthographic.ts +25 -0
  258. package/src/addons/space/parallaxMapping.ts +149 -0
  259. package/src/addons/space/perspective.ts +24 -0
  260. package/src/addons/space/polar2cart.ts +24 -0
  261. package/src/addons/space/ratio.ts +14 -0
  262. package/src/addons/space/rotate.ts +37 -0
  263. package/src/addons/space/rotateX.ts +54 -0
  264. package/src/addons/space/rotateY.ts +54 -0
  265. package/src/addons/space/rotateZ.ts +54 -0
  266. package/src/addons/space/scale.ts +13 -0
  267. package/src/addons/space/sprite.ts +16 -0
  268. package/src/addons/space/sqTile.ts +20 -0
  269. package/src/addons/space/tbn.ts +26 -0
  270. package/src/addons/space/translate.ts +12 -0
  271. package/src/addons/space/triTile.ts +32 -0
  272. package/src/addons/space/uncenter.ts +32 -0
  273. package/src/addons/space/unratio.ts +12 -0
  274. package/src/addons/space/viewZ2depth.ts +25 -0
  275. package/src/addons/space/windmillTile.ts +58 -0
  276. package/src/addons/space/xyz2equirect.ts +10 -0
  277. package/src/index.ts +10 -23
  278. package/src/node/build.ts +127 -0
  279. package/src/node/create.ts +76 -0
  280. package/src/node/index.ts +64 -49
  281. package/src/node/scope.ts +66 -62
  282. package/src/node/types.ts +221 -187
  283. package/src/node/utils/const.ts +74 -13
  284. package/src/node/utils/index.ts +19 -14
  285. package/src/node/utils/infer.ts +32 -34
  286. package/src/node/utils/parse.ts +48 -24
  287. package/src/node/utils/utils.ts +52 -29
  288. package/src/types.ts +11 -6
  289. package/src/utils/helpers.ts +56 -0
  290. package/src/utils/pipeline.ts +24 -8
  291. package/src/utils/program.ts +62 -38
  292. package/src/{webgl.ts → utils/webgl.ts} +46 -30
  293. package/src/{webgpu.ts → utils/webgpu.ts} +22 -17
  294. package/src/node/core.ts +0 -121
  295. package/src/node/node.ts +0 -65
package/src/node/core.ts DELETED
@@ -1,121 +0,0 @@
1
- import { code } from './utils'
2
- import { is } from '../utils/helpers'
3
- import type { NodeContext, X } from './types'
4
-
5
- const GLSL_FRAGMENT_HEAD = `
6
- #version 300 es
7
- precision mediump float;
8
- out vec4 fragColor;
9
- `.trim()
10
-
11
- const topological = (headers: Map<string, string>, dependencies: Map<string, Set<string>>) => {
12
- const sorted: [string, string][] = []
13
- const visited = new Set<string>()
14
- const visiting = new Set<string>()
15
- const visit = (id: string) => {
16
- if (visiting.has(id)) return
17
- if (visited.has(id)) return
18
- visiting.add(id)
19
- const deps = dependencies.get(id) || new Set()
20
- for (const dep of deps) if (headers.has(dep)) visit(dep)
21
- visiting.delete(id)
22
- visited.add(id)
23
- if (headers.has(id)) sorted.push([id, headers.get(id)!])
24
- }
25
- for (const [id] of headers) visit(id)
26
- return sorted
27
- }
28
-
29
- const generateHead = (x: X, c: NodeContext) => {
30
- const body = code(x, c)
31
- let head = ''
32
- if (c.isWebGL && c.code?.dependencies) {
33
- const sorted = topological(c.code.headers, c.code.dependencies)
34
- head = sorted.map(([, value]) => value).join('\n')
35
- } else head = Array.from(c.code?.headers?.values() || []).join('\n')
36
- return [head, body]
37
- }
38
-
39
- const generateStruct = (id: string, map: Map<string, string>) => {
40
- return `struct ${id} {\n ${Array.from(map.values()).join(',\n ')}\n}`
41
- }
42
-
43
- export const fragment = (x: X, c: NodeContext) => {
44
- if (is.str(x)) return x.trim()
45
- c.code?.headers?.clear()
46
- c.label = 'frag' // for varying inputs or outputs
47
- const [head, body] = generateHead(x, c)
48
- const ret = []
49
- if (c.isWebGL) {
50
- ret.push(GLSL_FRAGMENT_HEAD)
51
- for (const code of c.code?.fragInputs?.values() || []) ret.push(`in ${code}`)
52
- ret.push(head)
53
- ret.push(`void main() {\n fragColor = ${body};`)
54
- } else {
55
- if (c.code?.fragInputs?.size) ret.push(generateStruct('Out', c.code.fragInputs))
56
- ret.push(head)
57
- ret.push(`@fragment\nfn main(out: Out) -> @location(0) vec4f {`)
58
- ret.push(` return ${body};`)
59
- }
60
- ret.push('}')
61
- const main = ret.filter(Boolean).join('\n').trim()
62
- // console.log(`↓↓↓generated↓↓↓\n${main}`)
63
- return main
64
- }
65
-
66
- export const vertex = (x: X, c: NodeContext) => {
67
- if (is.str(x)) return x.trim()
68
- c.code?.headers?.clear()
69
- c.label = 'vert' // for varying inputs or outputs
70
- const [head, body] = generateHead(x, c)
71
- const ret = []
72
- if (c.isWebGL) {
73
- ret.push('#version 300 es')
74
- for (const code of c.code?.vertInputs?.values() || []) ret.push(`in ${code}`)
75
- for (const code of c.code?.vertOutputs?.values() || []) ret.push(`out ${code}`)
76
- ret.push(head)
77
- ret.push('void main() {')
78
- ret.push(` gl_Position = ${body};`)
79
- for (const [id, code] of c.code?.vertVaryings?.entries() || []) ret.push(` ${id} = ${code};`)
80
- } else {
81
- if (c.code?.vertInputs?.size) ret.push(generateStruct('In', c.code.vertInputs))
82
- if (c.code?.vertOutputs?.size) ret.push(generateStruct('Out', c.code.vertOutputs))
83
- ret.push(head)
84
- ret.push('@vertex')
85
- ret.push(`fn main(${c.code?.vertInputs?.size ? 'in: In' : ''}) -> Out {`)
86
- ret.push(' var out: Out;')
87
- ret.push(` out.position = ${body};`)
88
- for (const [id, code] of c.code?.vertVaryings?.entries() || []) ret.push(` out.${id} = ${code};`)
89
- ret.push(' return out;')
90
- }
91
- ret.push('}')
92
- const main = ret.filter(Boolean).join('\n').trim()
93
- // console.log(`↓↓↓generated↓↓↓\n${main}`)
94
- return main
95
- }
96
-
97
- export const compute = (x: X, c: NodeContext) => {
98
- if (is.str(x)) return x.trim()
99
- c.code?.headers?.clear()
100
- c.label = 'compute'
101
- const [head, body] = generateHead(x, c)
102
- const ret = []
103
- if (c.isWebGL) {
104
- ret.push('#version 300 es')
105
- ret.push('precision mediump float;')
106
- ret.push(head)
107
- ret.push('void main() {')
108
- ret.push(` ${body};`)
109
- ret.push('}')
110
- } else {
111
- if (c.code?.computeInputs?.size) ret.push(generateStruct('In', c.code.computeInputs))
112
- ret.push(head)
113
- ret.push('@compute @workgroup_size(32)')
114
- ret.push(`fn main(${c.code?.computeInputs?.size ? 'in: In' : ''}) {`)
115
- ret.push(` ${body};`)
116
- ret.push('}')
117
- }
118
- const main = ret.filter(Boolean).join('\n').trim()
119
- // console.log(`↓↓↓generated↓↓↓\n${main}`)
120
- return main
121
- }
package/src/node/node.ts DELETED
@@ -1,65 +0,0 @@
1
- import { code, getConstant, isConversion, isFunction, isOperator, getId, isArrayAccess } from './utils'
2
- import { assign, toVar } from './scope'
3
- import { is } from '../utils/helpers'
4
- import type { Functions, NodeProps, NodeProxy, NodeTypes, Operators, X, Constants as C } from './types'
5
-
6
- const toPrimitive = (x: X, hint: string) => {
7
- if (hint === 'string') return code(x, null)
8
- }
9
-
10
- export const node = <T extends C>(type: NodeTypes, props?: NodeProps | null, ...args: X[]) => {
11
- if (!props) props = {}
12
- if (args.length) props.children = args
13
- const listeners = new Set<(value: any) => void>()
14
- const get = (_: unknown, y: string | Symbol) => {
15
- if (y === 'type') return type
16
- if (y === 'props') return props
17
- if (y === '__nodeType') return undefined // Will be inferred by TypeScript
18
- if (y === 'toVar') return toVar.bind(null, x as any)
19
- if (y === 'isProxy') return true
20
- if (y === 'toString') return code.bind(null, x)
21
- if (y === Symbol.toPrimitive) return toPrimitive.bind(null, x)
22
- if (y === 'listeners') return listeners
23
- if (y === 'attribute') return (id = getId()) => attribute(x, id)
24
- if (y === 'constant') return (id = getId()) => constant(x, id)
25
- if (y === 'uniform') return (id = getId()) => uniform(x, id)
26
- if (y === 'variable') return (id = getId()) => variable(id)
27
- if (y === 'builtin') return (id = getId()) => builtin(id)
28
- if (y === 'vertexStage') return (id = getId()) => vertexStage(x, id)
29
- if (y === 'element') return (z: X) => (type === 'storage' ? gather(x, z) : element(x, z))
30
- if (y === 'member') return (z: X) => member(x, z)
31
- if (y === 'assign') return assign.bind(null, x, x.type === 'gather')
32
- if (isOperator(y)) return (...z: X[]) => operator(y, x, ...z)
33
- if (isFunction(y)) return (...z: X[]) => function_(y, x, ...z)
34
- if (isConversion(y)) return () => conversion(getConstant(y), x)
35
- if (is.str(y)) return isArrayAccess(y) ? element(x, y) : member(x, y)
36
- }
37
- const set = (_: unknown, y: string, z: X) => {
38
- if (y === 'value') listeners.forEach((fun) => fun(z))
39
- if (is.str(y)) member(x, y).assign(z)
40
- return true
41
- }
42
- const x = new Proxy({}, { get, set }) as unknown as NodeProxy<T>
43
- return x
44
- }
45
-
46
- // headers with proper type inference
47
- export const attribute = <T extends C>(x: X<T>, id = getId()) => node<T>('attribute', { id }, x)
48
- export const constant = <T extends C>(x: X<T>, id = getId()) => node<T>('constant', { id }, x)
49
- export const uniform = <T extends C>(x: X<T>, id = getId()) => node<T>('uniform', { id }, x)
50
- export const storage = <T extends C>(x: X<T>, id = getId()) => node<T>('storage', { id }, x)
51
- export const variable = <T extends C>(id = getId()) => node<T>('variable', { id })
52
- export const builtin = <T extends C>(id = getId()) => node<T>('builtin', { id })
53
- export const vertexStage = <T extends C>(x: X<T>, id = getId()) => {
54
- return node<T>('varying', { id, inferFrom: [x] }, x)
55
- }
56
-
57
- // Node shorthands with proper typing
58
- export const member = <T extends C>(x: X, index: X) => node<T>('member', null, x, index)
59
- export const element = <T extends C>(x: X, index: X) => node<T>('element', null, x, index)
60
- export const gather = <T extends C>(x: X, index: X) => node<T>('gather', null, x, index)
61
- export const scatter = <T extends C>(x: X, index: X) => node<T>('scatter', null, x, index)
62
- export const select = <T extends C>(x: X<T>, y: X<T>, z: X) => node<T>('ternary', null, x, y, z) // z ? x : y @TODO REMOVE
63
- export const operator = <T extends C>(key: Operators, ...x: X[]) => node<T>('operator', null, key, ...x)
64
- export const function_ = <T extends C>(key: Functions, ...x: X[]) => node<T>('function', null, key, ...x)
65
- export const conversion = <T extends C>(key: T, ...x: X[]) => node<T>('conversion', null, key, ...x)