three-stdlib 2.8.9 → 2.8.10

Sign up to get free protection for your applications and to get access to all the features.
Files changed (318) hide show
  1. package/Nodes-607e9ed8.js +471 -0
  2. package/Nodes-627a8bdf.js +1 -0
  3. package/index.cjs.js +1 -1
  4. package/index.d.ts +0 -75
  5. package/index.js +70 -76
  6. package/loaders/NodeMaterialLoader.cjs.js +1 -1
  7. package/loaders/NodeMaterialLoader.js +2 -136
  8. package/nodes/Nodes.cjs.js +1 -1
  9. package/nodes/Nodes.js +203 -76
  10. package/nodes/ShaderNode.cjs.js +1 -0
  11. package/nodes/ShaderNode.js +308 -0
  12. package/nodes/accessors/BufferNode.cjs.js +1 -0
  13. package/nodes/accessors/BufferNode.js +18 -0
  14. package/nodes/accessors/CameraNode.cjs.js +1 -1
  15. package/nodes/accessors/CameraNode.js +32 -138
  16. package/nodes/accessors/CubeTextureNode.cjs.js +1 -0
  17. package/nodes/accessors/CubeTextureNode.js +53 -0
  18. package/nodes/accessors/MaterialNode.cjs.js +1 -0
  19. package/nodes/accessors/MaterialNode.js +80 -0
  20. package/nodes/accessors/MaterialReferenceNode.cjs.js +1 -0
  21. package/nodes/accessors/MaterialReferenceNode.js +16 -0
  22. package/nodes/accessors/ModelNode.cjs.js +1 -0
  23. package/nodes/accessors/ModelNode.js +10 -0
  24. package/nodes/accessors/ModelViewProjectionNode.cjs.js +1 -0
  25. package/nodes/accessors/ModelViewProjectionNode.js +22 -0
  26. package/nodes/accessors/NormalNode.cjs.js +1 -1
  27. package/nodes/accessors/NormalNode.js +48 -78
  28. package/nodes/accessors/Object3DNode.cjs.js +1 -0
  29. package/nodes/accessors/Object3DNode.js +85 -0
  30. package/nodes/accessors/PointUVNode.cjs.js +1 -0
  31. package/nodes/accessors/PointUVNode.js +16 -0
  32. package/nodes/accessors/PositionNode.cjs.js +1 -1
  33. package/nodes/accessors/PositionNode.js +49 -87
  34. package/nodes/accessors/ReferenceNode.cjs.js +1 -0
  35. package/nodes/accessors/ReferenceNode.js +43 -0
  36. package/nodes/accessors/ReflectNode.cjs.js +1 -1
  37. package/nodes/accessors/ReflectNode.js +35 -98
  38. package/nodes/accessors/SkinningNode.cjs.js +1 -0
  39. package/nodes/accessors/SkinningNode.js +59 -0
  40. package/nodes/accessors/TextureNode.cjs.js +1 -0
  41. package/nodes/accessors/TextureNode.js +68 -0
  42. package/nodes/accessors/UVNode.cjs.js +1 -1
  43. package/nodes/accessors/UVNode.js +20 -38
  44. package/nodes/core/ArrayUniformNode.cjs.js +1 -0
  45. package/nodes/core/ArrayUniformNode.js +17 -0
  46. package/nodes/core/AttributeNode.cjs.js +1 -1
  47. package/nodes/core/AttributeNode.js +31 -40
  48. package/nodes/core/BypassNode.cjs.js +1 -0
  49. package/nodes/core/BypassNode.js +28 -0
  50. package/nodes/core/CodeNode.cjs.js +1 -0
  51. package/nodes/core/CodeNode.js +35 -0
  52. package/nodes/core/ConstNode.cjs.js +1 -1
  53. package/nodes/core/ConstNode.js +10 -78
  54. package/nodes/core/ContextNode.cjs.js +1 -0
  55. package/nodes/core/ContextNode.js +26 -0
  56. package/nodes/core/ExpressionNode.cjs.js +1 -1
  57. package/nodes/core/ExpressionNode.js +19 -8
  58. package/nodes/core/FunctionCallNode.cjs.js +1 -1
  59. package/nodes/core/FunctionCallNode.js +31 -60
  60. package/nodes/core/FunctionNode.cjs.js +1 -1
  61. package/nodes/core/FunctionNode.js +45 -166
  62. package/nodes/core/InputNode.cjs.js +1 -1
  63. package/nodes/core/InputNode.js +43 -57
  64. package/nodes/core/Node.cjs.js +1 -1
  65. package/nodes/core/Node.js +155 -113
  66. package/nodes/core/NodeAttribute.cjs.js +1 -0
  67. package/nodes/core/NodeAttribute.js +11 -0
  68. package/nodes/core/NodeBuilder.cjs.js +1 -1
  69. package/nodes/core/NodeBuilder.js +422 -548
  70. package/nodes/core/NodeCode.cjs.js +1 -0
  71. package/nodes/core/NodeCode.js +13 -0
  72. package/nodes/core/NodeFrame.cjs.js +1 -1
  73. package/nodes/core/NodeFrame.js +34 -27
  74. package/nodes/core/NodeFunction.cjs.js +1 -0
  75. package/nodes/core/NodeFunction.js +17 -0
  76. package/nodes/core/NodeFunctionInput.cjs.js +1 -0
  77. package/nodes/core/NodeFunctionInput.js +14 -0
  78. package/nodes/core/NodeKeywords.cjs.js +1 -0
  79. package/nodes/core/NodeKeywords.js +54 -0
  80. package/nodes/core/NodeParser.cjs.js +1 -0
  81. package/nodes/core/NodeParser.js +8 -0
  82. package/nodes/core/NodeUniform.cjs.js +1 -1
  83. package/nodes/core/NodeUniform.js +18 -17
  84. package/nodes/core/NodeUtils.cjs.js +1 -1
  85. package/nodes/core/NodeUtils.js +55 -35
  86. package/nodes/core/NodeVar.cjs.js +1 -0
  87. package/nodes/core/NodeVar.js +11 -0
  88. package/nodes/core/NodeVary.cjs.js +1 -0
  89. package/nodes/core/NodeVary.js +11 -0
  90. package/nodes/core/PropertyNode.cjs.js +1 -0
  91. package/nodes/core/PropertyNode.js +26 -0
  92. package/nodes/core/TempNode.cjs.js +1 -1
  93. package/nodes/core/TempNode.js +21 -88
  94. package/nodes/core/UniformNode.cjs.js +1 -0
  95. package/nodes/core/UniformNode.js +28 -0
  96. package/nodes/core/VarNode.cjs.js +1 -1
  97. package/nodes/core/VarNode.js +28 -35
  98. package/nodes/core/VaryNode.cjs.js +1 -0
  99. package/nodes/core/VaryNode.js +38 -0
  100. package/nodes/core/constants.cjs.js +1 -0
  101. package/nodes/core/constants.js +11 -0
  102. package/nodes/display/ColorSpaceNode.cjs.js +1 -0
  103. package/nodes/display/ColorSpaceNode.js +67 -0
  104. package/nodes/display/NormalMapNode.cjs.js +1 -0
  105. package/nodes/display/NormalMapNode.js +71 -0
  106. package/nodes/fog/FogNode.cjs.js +1 -0
  107. package/nodes/fog/FogNode.js +18 -0
  108. package/nodes/fog/FogRangeNode.cjs.js +1 -0
  109. package/nodes/fog/FogRangeNode.js +20 -0
  110. package/nodes/functions/BSDFs.cjs.js +1 -0
  111. package/nodes/functions/BSDFs.js +121 -0
  112. package/nodes/functions/PhysicalMaterialFunctions.cjs.js +1 -0
  113. package/nodes/functions/PhysicalMaterialFunctions.js +57 -0
  114. package/nodes/lights/LightContextNode.cjs.js +1 -0
  115. package/nodes/lights/LightContextNode.js +43 -0
  116. package/nodes/lights/LightNode.cjs.js +1 -0
  117. package/nodes/lights/LightNode.js +61 -0
  118. package/nodes/lights/LightsNode.cjs.js +1 -0
  119. package/nodes/lights/LightsNode.js +77 -0
  120. package/nodes/loaders/NodeLoader.cjs.js +1 -0
  121. package/nodes/loaders/NodeLoader.js +80 -0
  122. package/nodes/loaders/NodeMaterialLoader.cjs.js +1 -0
  123. package/nodes/loaders/NodeMaterialLoader.js +29 -0
  124. package/nodes/loaders/NodeObjectLoader.cjs.js +1 -0
  125. package/nodes/loaders/NodeObjectLoader.js +49 -0
  126. package/nodes/materials/LineBasicNodeMaterial.cjs.js +1 -0
  127. package/nodes/materials/LineBasicNodeMaterial.js +31 -0
  128. package/nodes/materials/Materials.cjs.js +1 -0
  129. package/nodes/materials/Materials.js +27 -0
  130. package/nodes/materials/MeshBasicNodeMaterial.cjs.js +1 -0
  131. package/nodes/materials/MeshBasicNodeMaterial.js +32 -0
  132. package/nodes/materials/MeshStandardNodeMaterial.cjs.js +1 -1
  133. package/nodes/materials/MeshStandardNodeMaterial.js +41 -13
  134. package/nodes/materials/NodeMaterial.cjs.js +1 -1
  135. package/nodes/materials/NodeMaterial.js +67 -140
  136. package/nodes/materials/PointsNodeMaterial.cjs.js +1 -0
  137. package/nodes/materials/PointsNodeMaterial.js +34 -0
  138. package/nodes/math/CondNode.cjs.js +1 -1
  139. package/nodes/math/CondNode.js +33 -74
  140. package/nodes/math/MathNode.cjs.js +1 -1
  141. package/nodes/math/MathNode.js +193 -193
  142. package/nodes/math/OperatorNode.cjs.js +1 -1
  143. package/nodes/math/OperatorNode.js +116 -52
  144. package/nodes/parsers/GLSLNodeFunction.cjs.js +1 -0
  145. package/nodes/parsers/GLSLNodeFunction.js +101 -0
  146. package/nodes/parsers/GLSLNodeParser.cjs.js +1 -0
  147. package/nodes/parsers/GLSLNodeParser.js +13 -0
  148. package/nodes/parsers/WGSLNodeFunction.cjs.js +1 -0
  149. package/nodes/parsers/WGSLNodeFunction.js +71 -0
  150. package/nodes/parsers/WGSLNodeParser.cjs.js +1 -0
  151. package/nodes/parsers/WGSLNodeParser.js +13 -0
  152. package/nodes/procedural/CheckerNode.cjs.js +1 -1
  153. package/nodes/procedural/CheckerNode.js +22 -40
  154. package/nodes/utils/ArrayElementNode.cjs.js +1 -0
  155. package/nodes/utils/ArrayElementNode.js +22 -0
  156. package/nodes/utils/ConvertNode.cjs.js +1 -0
  157. package/nodes/utils/ConvertNode.js +29 -0
  158. package/nodes/utils/JoinNode.cjs.js +1 -1
  159. package/nodes/utils/JoinNode.js +19 -69
  160. package/nodes/utils/MatcapUVNode.cjs.js +1 -0
  161. package/nodes/utils/MatcapUVNode.js +18 -0
  162. package/nodes/utils/OscNode.cjs.js +1 -0
  163. package/nodes/utils/OscNode.js +55 -0
  164. package/nodes/utils/SplitNode.cjs.js +1 -0
  165. package/nodes/utils/SplitNode.js +58 -0
  166. package/nodes/utils/SpriteSheetUVNode.cjs.js +1 -0
  167. package/nodes/utils/SpriteSheetUVNode.js +39 -0
  168. package/nodes/utils/TimerNode.cjs.js +1 -1
  169. package/nodes/utils/TimerNode.js +38 -56
  170. package/package.json +1 -1
  171. package/Nodes-894ac9dc.js +0 -1
  172. package/Nodes-af575af7.js +0 -157
  173. package/nodes/accessors/ColorsNode.cjs.js +0 -1
  174. package/nodes/accessors/ColorsNode.d.ts +0 -10
  175. package/nodes/accessors/ColorsNode.js +0 -40
  176. package/nodes/accessors/LightNode.cjs.js +0 -1
  177. package/nodes/accessors/LightNode.d.ts +0 -12
  178. package/nodes/accessors/LightNode.js +0 -41
  179. package/nodes/accessors/ResolutionNode.cjs.js +0 -1
  180. package/nodes/accessors/ResolutionNode.d.ts +0 -14
  181. package/nodes/accessors/ResolutionNode.js +0 -41
  182. package/nodes/accessors/ScreenUVNode.cjs.js +0 -1
  183. package/nodes/accessors/ScreenUVNode.d.ts +0 -11
  184. package/nodes/accessors/ScreenUVNode.js +0 -43
  185. package/nodes/core/NodeLib.cjs.js +0 -1
  186. package/nodes/core/NodeLib.d.ts +0 -22
  187. package/nodes/core/NodeLib.js +0 -37
  188. package/nodes/core/StructNode.cjs.js +0 -1
  189. package/nodes/core/StructNode.d.ts +0 -19
  190. package/nodes/core/StructNode.js +0 -72
  191. package/nodes/effects/BlurNode.cjs.js +0 -1
  192. package/nodes/effects/BlurNode.d.ts +0 -31
  193. package/nodes/effects/BlurNode.js +0 -100
  194. package/nodes/effects/ColorAdjustmentNode.cjs.js +0 -1
  195. package/nodes/effects/ColorAdjustmentNode.d.ts +0 -27
  196. package/nodes/effects/ColorAdjustmentNode.js +0 -73
  197. package/nodes/effects/LuminanceNode.cjs.js +0 -1
  198. package/nodes/effects/LuminanceNode.d.ts +0 -18
  199. package/nodes/effects/LuminanceNode.js +0 -46
  200. package/nodes/inputs/BoolNode.cjs.js +0 -1
  201. package/nodes/inputs/BoolNode.d.ts +0 -19
  202. package/nodes/inputs/BoolNode.js +0 -36
  203. package/nodes/inputs/ColorNode.cjs.js +0 -1
  204. package/nodes/inputs/ColorNode.d.ts +0 -21
  205. package/nodes/inputs/ColorNode.js +0 -41
  206. package/nodes/inputs/CubeTextureNode.cjs.js +0 -1
  207. package/nodes/inputs/CubeTextureNode.d.ts +0 -17
  208. package/nodes/inputs/CubeTextureNode.js +0 -79
  209. package/nodes/inputs/FloatNode.cjs.js +0 -1
  210. package/nodes/inputs/FloatNode.d.ts +0 -19
  211. package/nodes/inputs/FloatNode.js +0 -36
  212. package/nodes/inputs/IntNode.cjs.js +0 -1
  213. package/nodes/inputs/IntNode.d.ts +0 -19
  214. package/nodes/inputs/IntNode.js +0 -36
  215. package/nodes/inputs/Matrix3Node.cjs.js +0 -1
  216. package/nodes/inputs/Matrix3Node.d.ts +0 -22
  217. package/nodes/inputs/Matrix3Node.js +0 -46
  218. package/nodes/inputs/Matrix4Node.cjs.js +0 -1
  219. package/nodes/inputs/Matrix4Node.d.ts +0 -22
  220. package/nodes/inputs/Matrix4Node.js +0 -46
  221. package/nodes/inputs/PropertyNode.cjs.js +0 -1
  222. package/nodes/inputs/PropertyNode.d.ts +0 -10
  223. package/nodes/inputs/PropertyNode.js +0 -35
  224. package/nodes/inputs/RTTNode.cjs.js +0 -1
  225. package/nodes/inputs/RTTNode.d.ts +0 -27
  226. package/nodes/inputs/RTTNode.js +0 -103
  227. package/nodes/inputs/ReflectorNode.cjs.js +0 -1
  228. package/nodes/inputs/ReflectorNode.d.ts +0 -21
  229. package/nodes/inputs/ReflectorNode.js +0 -60
  230. package/nodes/inputs/ScreenNode.cjs.js +0 -1
  231. package/nodes/inputs/ScreenNode.d.ts +0 -11
  232. package/nodes/inputs/ScreenNode.js +0 -20
  233. package/nodes/inputs/TextureNode.cjs.js +0 -1
  234. package/nodes/inputs/TextureNode.d.ts +0 -20
  235. package/nodes/inputs/TextureNode.js +0 -83
  236. package/nodes/inputs/Vector2Node.cjs.js +0 -1
  237. package/nodes/inputs/Vector2Node.d.ts +0 -21
  238. package/nodes/inputs/Vector2Node.js +0 -40
  239. package/nodes/inputs/Vector3Node.cjs.js +0 -1
  240. package/nodes/inputs/Vector3Node.d.ts +0 -21
  241. package/nodes/inputs/Vector3Node.js +0 -41
  242. package/nodes/inputs/Vector4Node.cjs.js +0 -1
  243. package/nodes/inputs/Vector4Node.d.ts +0 -21
  244. package/nodes/inputs/Vector4Node.js +0 -42
  245. package/nodes/materials/BasicNodeMaterial.cjs.js +0 -1
  246. package/nodes/materials/BasicNodeMaterial.d.ts +0 -11
  247. package/nodes/materials/BasicNodeMaterial.js +0 -15
  248. package/nodes/materials/PhongNodeMaterial.cjs.js +0 -1
  249. package/nodes/materials/PhongNodeMaterial.d.ts +0 -21
  250. package/nodes/materials/PhongNodeMaterial.js +0 -15
  251. package/nodes/materials/SpriteNodeMaterial.cjs.js +0 -1
  252. package/nodes/materials/SpriteNodeMaterial.d.ts +0 -12
  253. package/nodes/materials/SpriteNodeMaterial.js +0 -15
  254. package/nodes/materials/StandardNodeMaterial.cjs.js +0 -1
  255. package/nodes/materials/StandardNodeMaterial.d.ts +0 -25
  256. package/nodes/materials/StandardNodeMaterial.js +0 -15
  257. package/nodes/materials/nodes/BasicNode.cjs.js +0 -1
  258. package/nodes/materials/nodes/BasicNode.d.ts +0 -15
  259. package/nodes/materials/nodes/BasicNode.js +0 -91
  260. package/nodes/materials/nodes/MeshStandardNode.cjs.js +0 -1
  261. package/nodes/materials/nodes/MeshStandardNode.d.ts +0 -25
  262. package/nodes/materials/nodes/MeshStandardNode.js +0 -81
  263. package/nodes/materials/nodes/PhongNode.cjs.js +0 -1
  264. package/nodes/materials/nodes/PhongNode.d.ts +0 -14
  265. package/nodes/materials/nodes/PhongNode.js +0 -212
  266. package/nodes/materials/nodes/RawNode.cjs.js +0 -1
  267. package/nodes/materials/nodes/RawNode.d.ts +0 -10
  268. package/nodes/materials/nodes/RawNode.js +0 -42
  269. package/nodes/materials/nodes/SpriteNode.cjs.js +0 -1
  270. package/nodes/materials/nodes/SpriteNode.d.ts +0 -13
  271. package/nodes/materials/nodes/SpriteNode.js +0 -113
  272. package/nodes/materials/nodes/StandardNode.cjs.js +0 -1
  273. package/nodes/materials/nodes/StandardNode.d.ts +0 -15
  274. package/nodes/materials/nodes/StandardNode.js +0 -336
  275. package/nodes/misc/BumpMapNode.cjs.js +0 -1
  276. package/nodes/misc/BumpMapNode.d.ts +0 -21
  277. package/nodes/misc/BumpMapNode.js +0 -80
  278. package/nodes/misc/NormalMapNode.cjs.js +0 -1
  279. package/nodes/misc/NormalMapNode.d.ts +0 -19
  280. package/nodes/misc/NormalMapNode.js +0 -102
  281. package/nodes/misc/TextureCubeNode.cjs.js +0 -1
  282. package/nodes/misc/TextureCubeNode.d.ts +0 -21
  283. package/nodes/misc/TextureCubeNode.js +0 -52
  284. package/nodes/misc/TextureCubeUVNode.cjs.js +0 -1
  285. package/nodes/misc/TextureCubeUVNode.d.ts +0 -18
  286. package/nodes/misc/TextureCubeUVNode.js +0 -229
  287. package/nodes/postprocessing/NodePass.cjs.js +0 -1
  288. package/nodes/postprocessing/NodePass.d.ts +0 -15
  289. package/nodes/postprocessing/NodePass.js +0 -61
  290. package/nodes/postprocessing/NodePostProcessing.cjs.js +0 -1
  291. package/nodes/postprocessing/NodePostProcessing.d.ts +0 -26
  292. package/nodes/postprocessing/NodePostProcessing.js +0 -91
  293. package/nodes/procedural/NoiseNode.cjs.js +0 -1
  294. package/nodes/procedural/NoiseNode.d.ts +0 -17
  295. package/nodes/procedural/NoiseNode.js +0 -43
  296. package/nodes/utils/BypassNode.cjs.js +0 -1
  297. package/nodes/utils/BypassNode.d.ts +0 -11
  298. package/nodes/utils/BypassNode.js +0 -55
  299. package/nodes/utils/ColorSpaceNode.cjs.js +0 -1
  300. package/nodes/utils/ColorSpaceNode.d.ts +0 -55
  301. package/nodes/utils/ColorSpaceNode.js +0 -106
  302. package/nodes/utils/MaxMIPLevelNode.cjs.js +0 -1
  303. package/nodes/utils/MaxMIPLevelNode.d.ts +0 -11
  304. package/nodes/utils/MaxMIPLevelNode.js +0 -38
  305. package/nodes/utils/SpecularMIPLevelNode.cjs.js +0 -1
  306. package/nodes/utils/SpecularMIPLevelNode.d.ts +0 -17
  307. package/nodes/utils/SpecularMIPLevelNode.js +0 -61
  308. package/nodes/utils/SubSlotNode.cjs.js +0 -1
  309. package/nodes/utils/SubSlotNode.js +0 -53
  310. package/nodes/utils/SwitchNode.cjs.js +0 -1
  311. package/nodes/utils/SwitchNode.d.ts +0 -11
  312. package/nodes/utils/SwitchNode.js +0 -69
  313. package/nodes/utils/UVTransformNode.cjs.js +0 -1
  314. package/nodes/utils/UVTransformNode.d.ts +0 -15
  315. package/nodes/utils/UVTransformNode.js +0 -46
  316. package/nodes/utils/VelocityNode.cjs.js +0 -1
  317. package/nodes/utils/VelocityNode.d.ts +0 -28
  318. package/nodes/utils/VelocityNode.js +0 -115
@@ -1,191 +1,70 @@
1
- import { TempNode } from './TempNode.js';
2
- import { NodeLib } from './NodeLib.js';
1
+ import CodeNode from './CodeNode.js';
2
+ import FunctionCallNode from './FunctionCallNode.js';
3
3
 
4
- var declarationRegexp = /^\s*([a-z_0-9]+)\s([a-z_0-9]+)\s*\((.*?)\)/i,
5
- propertiesRegexp = /[a-z_0-9]+/gi;
6
-
7
- function FunctionNode(src, includes, extensions, keywords, type) {
8
- this.isMethod = type === undefined;
9
- this.isInterface = false;
10
- TempNode.call(this, type);
11
- this.parse(src, includes, extensions, keywords);
12
- }
13
-
14
- FunctionNode.prototype = Object.create(TempNode.prototype);
15
- FunctionNode.prototype.constructor = FunctionNode;
16
- FunctionNode.prototype.nodeType = 'Function';
17
- FunctionNode.prototype.useKeywords = true;
18
-
19
- FunctionNode.prototype.getShared = function
20
- /* builder, output */
21
- () {
22
- return !this.isMethod;
23
- };
24
-
25
- FunctionNode.prototype.getType = function (builder) {
26
- return builder.getTypeByFormat(this.type);
27
- };
28
-
29
- FunctionNode.prototype.getInputByName = function (name) {
30
- var i = this.inputs.length;
31
-
32
- while (i--) {
33
- if (this.inputs[i].name === name) {
34
- return this.inputs[i];
35
- }
4
+ class FunctionNode extends CodeNode {
5
+ constructor(code = '') {
6
+ super(code);
7
+ this.keywords = {};
36
8
  }
37
- };
38
9
 
39
- FunctionNode.prototype.getIncludeByName = function (name) {
40
- var i = this.includes.length;
41
-
42
- while (i--) {
43
- if (this.includes[i].name === name) {
44
- return this.includes[i];
45
- }
10
+ getNodeType(builder) {
11
+ return this.getNodeFunction(builder).type;
46
12
  }
47
- };
48
13
 
49
- FunctionNode.prototype.generate = function (builder, output) {
50
- var match,
51
- offset = 0,
52
- src = this.src;
53
-
54
- for (let i = 0; i < this.includes.length; i++) {
55
- builder.include(this.includes[i], this);
56
- }
57
-
58
- for (let ext in this.extensions) {
59
- builder.extensions[ext] = true;
14
+ getInputs(builder) {
15
+ return this.getNodeFunction(builder).inputs;
60
16
  }
61
17
 
62
- var matches = [];
63
-
64
- while (match = propertiesRegexp.exec(this.src)) matches.push(match);
65
-
66
- for (let i = 0; i < matches.length; i++) {
67
- var match = matches[i];
68
- var prop = match[0],
69
- isGlobal = this.isMethod ? !this.getInputByName(prop) : true,
70
- reference = prop;
71
-
72
- if (this.keywords[prop] || this.useKeywords && isGlobal && NodeLib.containsKeyword(prop)) {
73
- var node = this.keywords[prop];
74
-
75
- if (!node) {
76
- var keyword = NodeLib.getKeywordData(prop);
77
- if (keyword.cache) node = builder.keywords[prop];
78
- node = node || NodeLib.getKeyword(prop, builder);
79
- if (keyword.cache) builder.keywords[prop] = node;
80
- }
81
-
82
- reference = node.build(builder);
83
- }
18
+ getNodeFunction(builder) {
19
+ const nodeData = builder.getDataFromNode(this);
20
+ let nodeFunction = nodeData.nodeFunction;
84
21
 
85
- if (prop !== reference) {
86
- src = src.substring(0, match.index + offset) + reference + src.substring(match.index + prop.length + offset);
87
- offset += reference.length - prop.length;
22
+ if (nodeFunction === undefined) {
23
+ nodeFunction = builder.parser.parseFunction(this.code);
24
+ nodeData.nodeFunction = nodeFunction;
88
25
  }
89
26
 
90
- if (this.getIncludeByName(reference) === undefined && NodeLib.contains(reference)) {
91
- builder.include(NodeLib.get(reference));
92
- }
27
+ return nodeFunction;
93
28
  }
94
29
 
95
- if (output === 'source') {
96
- return src;
97
- } else if (this.isMethod) {
98
- if (!this.isInterface) {
99
- builder.include(this, false, src);
100
- }
101
-
102
- return this.name;
103
- } else {
104
- return builder.format('( ' + src + ' )', this.getType(builder), output);
30
+ call(parameters = {}) {
31
+ return new FunctionCallNode(this, parameters);
105
32
  }
106
- };
107
-
108
- FunctionNode.prototype.parse = function (src, includes, extensions, keywords) {
109
- this.src = src || '';
110
- this.includes = includes || [];
111
- this.extensions = extensions || {};
112
- this.keywords = keywords || {};
113
33
 
114
- if (this.isMethod) {
115
- var match = this.src.match(declarationRegexp);
116
- this.inputs = [];
34
+ generate(builder, output) {
35
+ super.generate(builder);
36
+ const nodeFunction = this.getNodeFunction(builder);
37
+ const name = nodeFunction.name;
38
+ const type = nodeFunction.type;
39
+ const nodeCode = builder.getCodeFromNode(this, type);
117
40
 
118
- if (match && match.length == 4) {
119
- this.type = match[1];
120
- this.name = match[2];
121
- var inputs = match[3].match(propertiesRegexp);
122
-
123
- if (inputs) {
124
- var i = 0;
125
-
126
- while (i < inputs.length) {
127
- var qualifier = inputs[i++];
128
- var type, name;
129
-
130
- if (qualifier === 'in' || qualifier === 'out' || qualifier === 'inout') {
131
- type = inputs[i++];
132
- } else {
133
- type = qualifier;
134
- qualifier = '';
135
- }
136
-
137
- name = inputs[i++];
138
- this.inputs.push({
139
- name: name,
140
- type: type,
141
- qualifier: qualifier
142
- });
143
- }
144
- }
145
-
146
- this.isInterface = this.src.indexOf('{') === -1;
147
- } else {
148
- this.type = '';
149
- this.name = '';
41
+ if (name !== '') {
42
+ // use a custom property name
43
+ nodeCode.name = name;
150
44
  }
151
- }
152
- };
153
-
154
- FunctionNode.prototype.copy = function (source) {
155
- TempNode.prototype.copy.call(this, source);
156
- this.isMethod = source.isMethod;
157
- this.useKeywords = source.useKeywords;
158
- this.parse(source.src, source.includes, source.extensions, source.keywords);
159
- if (source.type !== undefined) this.type = source.type;
160
- return this;
161
- };
162
-
163
- FunctionNode.prototype.toJSON = function (meta) {
164
- var data = this.getJSONNode(meta);
165
45
 
166
- if (!data) {
167
- data = this.createJSONNode(meta);
168
- data.src = this.src;
169
- data.isMethod = this.isMethod;
170
- data.useKeywords = this.useKeywords;
171
- if (!this.isMethod) data.type = this.type;
172
- data.extensions = JSON.parse(JSON.stringify(this.extensions));
173
- data.keywords = {};
46
+ const propertyName = builder.getPropertyName(nodeCode);
47
+ let code = this.getNodeFunction(builder).getCode(propertyName);
48
+ const keywords = this.keywords;
49
+ const keywordsProperties = Object.keys(keywords);
174
50
 
175
- for (let keyword in this.keywords) {
176
- data.keywords[keyword] = this.keywords[keyword].toJSON(meta).uuid;
51
+ if (keywordsProperties.length > 0) {
52
+ for (const property of keywordsProperties) {
53
+ const propertyRegExp = new RegExp(`\\b${property}\\b`, 'g');
54
+ const nodeProperty = keywords[property].build(builder, 'property');
55
+ code = code.replace(propertyRegExp, nodeProperty);
56
+ }
177
57
  }
178
58
 
179
- if (this.includes.length) {
180
- data.includes = [];
59
+ nodeCode.code = code;
181
60
 
182
- for (let i = 0; i < this.includes.length; i++) {
183
- data.includes.push(this.includes[i].toJSON(meta).uuid);
184
- }
61
+ if (output === 'property') {
62
+ return propertyName;
63
+ } else {
64
+ return builder.format(`${propertyName}()`, type, output);
185
65
  }
186
66
  }
187
67
 
188
- return data;
189
- };
68
+ }
190
69
 
191
- export { FunctionNode };
70
+ export default FunctionNode;
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("./TempNode.cjs.js");function t(t,r){(r=r||{}).shared=void 0!==r.shared&&r.shared,e.TempNode.call(this,t,r),this.readonly=!1}require("three"),require("./Node.cjs.js"),t.prototype=Object.create(e.TempNode.prototype),t.prototype.constructor=t,t.prototype.setReadonly=function(e){return this.readonly=e,this.hashProperties=this.readonly?["value"]:void 0,this},t.prototype.getReadonly=function(){return this.readonly},t.prototype.copy=function(t){return e.TempNode.prototype.copy.call(this,t),void 0!==t.readonly&&(this.readonly=t.readonly),this},t.prototype.createJSONNode=function(t){var r=e.TempNode.prototype.createJSONNode.call(this,t);return!0===this.readonly&&(r.readonly=this.readonly),r},t.prototype.generate=function(e,t,r,o,a,n){r=e.getUuid(r||this.getUuid()),o=o||this.getType(e);var i=e.getNodeData(r);return this.getReadonly(e)&&void 0!==this.generateReadonly?this.generateReadonly(e,t,r,o,a,n):e.isShader("vertex")?(i.vertex||(i.vertex=e.createVertexUniform(o,this,a,n,this.getLabel())),e.format(i.vertex.name,o,t)):(i.fragment||(i.fragment=e.createFragmentUniform(o,this,a,n,this.getLabel())),e.format(i.fragment.name,o,t))},exports.InputNode=t;
1
+ "use strict";var e=require("./Node.cjs.js"),l=require("./NodeUtils.cjs.js");require("./constants.cjs.js"),require("three");class t extends e{constructor(e,l=null){super(l),this.value=e}getNodeType(){return null===this.nodeType?l.getValueType(this.value):this.nodeType}getInputType(e){return this.getNodeType(e)}serialize(e){var t,s;super.serialize(e),e.value=(null===(t=this.value)||void 0===t||null===(s=t.toArray)||void 0===s?void 0:s.call(t))||this.value,e.valueType=l.getValueType(this.value),e.nodeType=this.nodeType}deserialize(e){var t,s;super.deserialize(e),this.nodeType=e.nodeType,this.value=l.getValueFromType(e.valueType),this.value=(null===(t=this.value)||void 0===t||null===(s=t.fromArray)||void 0===s?void 0:s.call(t,e.value))||e.value}generate(){console.warn("Abstract function.")}}t.prototype.isInputNode=!0,module.exports=t;
@@ -1,62 +1,48 @@
1
- import { TempNode } from './TempNode.js';
1
+ import Node from './Node.js';
2
+ import { getValueType, getValueFromType } from './NodeUtils.js';
2
3
 
3
- function InputNode(type, params) {
4
- params = params || {};
5
- params.shared = params.shared !== undefined ? params.shared : false;
6
- TempNode.call(this, type, params);
7
- this.readonly = false;
8
- }
4
+ class InputNode extends Node {
5
+ constructor(value, nodeType = null) {
6
+ super(nodeType);
7
+ this.value = value;
8
+ }
9
9
 
10
- InputNode.prototype = Object.create(TempNode.prototype);
11
- InputNode.prototype.constructor = InputNode;
12
-
13
- InputNode.prototype.setReadonly = function (value) {
14
- this.readonly = value;
15
- this.hashProperties = this.readonly ? ['value'] : undefined;
16
- return this;
17
- };
18
-
19
- InputNode.prototype.getReadonly = function
20
- /* builder */
21
- () {
22
- return this.readonly;
23
- };
24
-
25
- InputNode.prototype.copy = function (source) {
26
- TempNode.prototype.copy.call(this, source);
27
- if (source.readonly !== undefined) this.readonly = source.readonly;
28
- return this;
29
- };
30
-
31
- InputNode.prototype.createJSONNode = function (meta) {
32
- var data = TempNode.prototype.createJSONNode.call(this, meta);
33
- if (this.readonly === true) data.readonly = this.readonly;
34
- return data;
35
- };
36
-
37
- InputNode.prototype.generate = function (builder, output, uuid, type, ns, needsUpdate) {
38
- uuid = builder.getUuid(uuid || this.getUuid());
39
- type = type || this.getType(builder);
40
- var data = builder.getNodeData(uuid),
41
- readonly = this.getReadonly(builder) && this.generateReadonly !== undefined;
42
-
43
- if (readonly) {
44
- return this.generateReadonly(builder, output, uuid, type, ns, needsUpdate);
45
- } else {
46
- if (builder.isShader('vertex')) {
47
- if (!data.vertex) {
48
- data.vertex = builder.createVertexUniform(type, this, ns, needsUpdate, this.getLabel());
49
- }
50
-
51
- return builder.format(data.vertex.name, type, output);
52
- } else {
53
- if (!data.fragment) {
54
- data.fragment = builder.createFragmentUniform(type, this, ns, needsUpdate, this.getLabel());
55
- }
56
-
57
- return builder.format(data.fragment.name, type, output);
10
+ getNodeType() {
11
+ if (this.nodeType === null) {
12
+ return getValueType(this.value);
58
13
  }
14
+
15
+ return this.nodeType;
16
+ }
17
+
18
+ getInputType(builder) {
19
+ return this.getNodeType(builder);
20
+ }
21
+
22
+ serialize(data) {
23
+ var _this$value, _this$value$toArray;
24
+
25
+ super.serialize(data);
26
+ data.value = ((_this$value = this.value) === null || _this$value === void 0 ? void 0 : (_this$value$toArray = _this$value.toArray) === null || _this$value$toArray === void 0 ? void 0 : _this$value$toArray.call(_this$value)) || this.value;
27
+ data.valueType = getValueType(this.value);
28
+ data.nodeType = this.nodeType;
59
29
  }
60
- };
61
30
 
62
- export { InputNode };
31
+ deserialize(data) {
32
+ var _this$value2, _this$value2$fromArra;
33
+
34
+ super.deserialize(data);
35
+ this.nodeType = data.nodeType;
36
+ this.value = getValueFromType(data.valueType);
37
+ this.value = ((_this$value2 = this.value) === null || _this$value2 === void 0 ? void 0 : (_this$value2$fromArra = _this$value2.fromArray) === null || _this$value2$fromArra === void 0 ? void 0 : _this$value2$fromArra.call(_this$value2, data.value)) || data.value;
38
+ }
39
+
40
+ generate() {
41
+ console.warn('Abstract function.');
42
+ }
43
+
44
+ }
45
+
46
+ InputNode.prototype.isInputNode = true;
47
+
48
+ export default InputNode;
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("three");function t(t){this.uuid=e.MathUtils.generateUUID(),this.name="",this.type=t,this.userData={}}t.prototype={constructor:t,isNode:!0,hashProperties:void 0,analyze:function(e,t){t=t||{},e.analyzing=!0,this.build(e.addFlow(t.slot,t.cache,t.context),"v4"),e.clearVertexNodeCode(),e.clearFragmentNodeCode(),e.removeFlow(),e.analyzing=!1},analyzeAndFlow:function(e,t,i){return i=i||{},this.analyze(e,i),this.flow(e,t,i)},flow:function(e,t,i){i=i||{},e.addFlow(i.slot,i.cache,i.context);var s={};return s.result=this.build(e,t),s.code=e.clearNodeCode(),s.extra=e.context.extra,e.removeFlow(),s},build:function(e,t,i){t=t||this.getType(e,t);var s=e.getNodeData(i||this);return e.analyzing&&this.appendDepsNode(e,s,t),-1===e.nodes.indexOf(this)&&e.nodes.push(this),void 0!==this.updateFrame&&-1===e.updaters.indexOf(this)&&e.updaters.push(this),this.generate(e,t,i)},generate:function(){},getHash:function(){var e,i,s="{";for(e in this)(i=this[e])instanceof t&&(s+='"'+e+'":'+i.getHash()+",");if(this.hashProperties)for(let t=0;t<this.hashProperties.length;t++)i=this[e=this.hashProperties[t]],s+='"'+e+'":"'+String(i)+'",';return s+='"id":"'+this.uuid+'"}'},appendDepsNode:function(e,t,i){t.deps=(t.deps||0)+1;var s=e.getTypeLength(i);(s>(t.outputMax||0)||this.getType(e,i))&&(t.outputMax=s,t.output=i)},setName:function(e){return this.name=e,this},getName:function(){return this.name},getType:function(e,t){return"sampler2D"===t||"samplerCube"===t?t:this.type},getJSONNode:function(e){if(!(void 0===e||"string"==typeof e)&&void 0!==e.nodes[this.uuid])return e.nodes[this.uuid]},copy:function(e){return void 0!==e.name&&(this.name=e.name),void 0!==e.userData&&(this.userData=JSON.parse(JSON.stringify(e.userData))),this},createJSONNode:function(e){var t=void 0===e||"string"==typeof e,i={};if("string"!=typeof this.nodeType)throw new Error("Node does not allow serialization.");return i.uuid=this.uuid,i.nodeType=this.nodeType,""!==this.name&&(i.name=this.name),"{}"!==JSON.stringify(this.userData)&&(i.userData=this.userData),t||(e.nodes[this.uuid]=i),i},toJSON:function(e){return this.getJSONNode(e)||this.createJSONNode(e)}},exports.Node=t;
1
+ "use strict";var e=require("./constants.cjs.js"),t=require("./NodeUtils.cjs.js"),s=require("three");let o=0;class n{constructor(t=null){this.nodeType=t,this.updateType=e.NodeUpdateType.None,this.uuid=s.MathUtils.generateUUID(),Object.defineProperty(this,"id",{value:o++})}get type(){return this.constructor.name}getHash(){return this.uuid}getUpdateType(){return this.updateType}getNodeType(){return this.nodeType}update(){console.warn("Abstract function.")}generate(){console.warn("Abstract function.")}analyze(e){const s=this.getHash(e),o=e.getNodeFromHash(s);if(void 0!==o&&this!==o)return o.analyze(e);const n=e.getDataFromNode(this);n.dependenciesCount=void 0===n.dependenciesCount?1:n.dependenciesCount+1;const i=t.getNodesKeys(this);for(const t of i)this[t].analyze(e)}build(e,t=null){const s=this.getHash(e),o=e.getNodeFromHash(s);if(void 0!==o&&this!==o)return o.build(e,t);e.addNode(this),e.addStack(this);const n=e.getDataFromNode(this);let i=null;if(1===this.generate.length){const s=this.getNodeType(e);i=n.snippet,void 0===i&&(i=this.generate(e)||"",n.snippet=i),i=e.format(i,s,t)}else i=this.generate(e,t)||"";return e.removeStack(this),i}serialize(e){const s=t.getNodesKeys(this);if(s.length>0){const t={};for(const o of s)t[o]=this[o].toJSON(e.meta).uuid;e.inputNodes=t}}deserialize(e){if(void 0!==e.inputNodes){const t=e.meta.nodes;for(const s in e.inputNodes){const o=e.inputNodes[s];this[s]=t[o]}}}toJSON(e){const{uuid:t,type:s}=this,o=void 0===e||"string"==typeof e;o&&(e={textures:{},images:{},nodes:{}});let n=e.nodes[t];function i(e){const t=[];for(const s in e){const o=e[s];delete o.metadata,t.push(o)}return t}if(void 0===n&&(n={uuid:t,type:s,meta:e,metadata:{version:4.5,type:"Node",generator:"Node.toJSON"}},e.nodes[n.uuid]=n,this.serialize(n),delete n.meta),o){const t=i(e.textures),s=i(e.images),o=i(e.nodes);t.length>0&&(n.textures=t),s.length>0&&(n.images=s),o.length>0&&(n.nodes=o)}return n}}n.prototype.isNode=!0,module.exports=n;
@@ -1,136 +1,178 @@
1
+ import { NodeUpdateType } from './constants.js';
2
+ import { getNodesKeys } from './NodeUtils.js';
1
3
  import { MathUtils } from 'three';
2
4
 
3
- function Node(type) {
4
- this.uuid = MathUtils.generateUUID();
5
- this.name = '';
6
- this.type = type;
7
- this.userData = {};
8
- }
5
+ let _nodeId = 0;
6
+
7
+ class Node {
8
+ constructor(nodeType = null) {
9
+ this.nodeType = nodeType;
10
+ this.updateType = NodeUpdateType.None;
11
+ this.uuid = MathUtils.generateUUID();
12
+ Object.defineProperty(this, 'id', {
13
+ value: _nodeId++
14
+ });
15
+ }
16
+
17
+ get type() {
18
+ return this.constructor.name;
19
+ }
20
+
21
+ getHash() {
22
+ return this.uuid;
23
+ }
24
+
25
+ getUpdateType() {
26
+ return this.updateType;
27
+ }
28
+
29
+ getNodeType() {
30
+ return this.nodeType;
31
+ }
9
32
 
10
- Node.prototype = {
11
- constructor: Node,
12
- isNode: true,
13
- hashProperties: undefined,
14
- analyze: function (builder, settings) {
15
- settings = settings || {};
16
- builder.analyzing = true;
17
- this.build(builder.addFlow(settings.slot, settings.cache, settings.context), 'v4');
18
- builder.clearVertexNodeCode();
19
- builder.clearFragmentNodeCode();
20
- builder.removeFlow();
21
- builder.analyzing = false;
22
- },
23
- analyzeAndFlow: function (builder, output, settings) {
24
- settings = settings || {};
25
- this.analyze(builder, settings);
26
- return this.flow(builder, output, settings);
27
- },
28
- flow: function (builder, output, settings) {
29
- settings = settings || {};
30
- builder.addFlow(settings.slot, settings.cache, settings.context);
31
- var flow = {};
32
- flow.result = this.build(builder, output);
33
- flow.code = builder.clearNodeCode();
34
- flow.extra = builder.context.extra;
35
- builder.removeFlow();
36
- return flow;
37
- },
38
- build: function (builder, output, uuid) {
39
- output = output || this.getType(builder, output);
40
- var data = builder.getNodeData(uuid || this);
41
-
42
- if (builder.analyzing) {
43
- this.appendDepsNode(builder, data, output);
33
+ update() {
34
+ console.warn('Abstract function.');
35
+ }
36
+
37
+ generate() {
38
+ console.warn('Abstract function.');
39
+ }
40
+
41
+ analyze(builder) {
42
+ const hash = this.getHash(builder);
43
+ const sharedNode = builder.getNodeFromHash(hash);
44
+
45
+ if (sharedNode !== undefined && this !== sharedNode) {
46
+ return sharedNode.analyze(builder);
44
47
  }
45
48
 
46
- if (builder.nodes.indexOf(this) === -1) {
47
- builder.nodes.push(this);
49
+ const nodeData = builder.getDataFromNode(this);
50
+ nodeData.dependenciesCount = nodeData.dependenciesCount === undefined ? 1 : nodeData.dependenciesCount + 1;
51
+ const nodeKeys = getNodesKeys(this);
52
+
53
+ for (const property of nodeKeys) {
54
+ this[property].analyze(builder);
48
55
  }
56
+ }
57
+
58
+ build(builder, output = null) {
59
+ const hash = this.getHash(builder);
60
+ const sharedNode = builder.getNodeFromHash(hash);
49
61
 
50
- if (this.updateFrame !== undefined && builder.updaters.indexOf(this) === -1) {
51
- builder.updaters.push(this);
62
+ if (sharedNode !== undefined && this !== sharedNode) {
63
+ return sharedNode.build(builder, output);
52
64
  }
53
65
 
54
- return this.generate(builder, output, uuid);
55
- },
56
- generate: function
57
- /* builder, output, uuid, type, ns */
58
- () {// This method needs to be implemented in subclasses
59
- },
60
- getHash: function () {
61
- var hash = '{';
62
- var prop, obj;
63
-
64
- for (prop in this) {
65
- obj = this[prop];
66
-
67
- if (obj instanceof Node) {
68
- hash += '"' + prop + '":' + obj.getHash() + ',';
66
+ builder.addNode(this);
67
+ builder.addStack(this);
68
+ const nodeData = builder.getDataFromNode(this);
69
+ const isGenerateOnce = this.generate.length === 1;
70
+ let snippet = null;
71
+
72
+ if (isGenerateOnce) {
73
+ const type = this.getNodeType(builder);
74
+ snippet = nodeData.snippet;
75
+
76
+ if (snippet === undefined) {
77
+ snippet = this.generate(builder) || '';
78
+ nodeData.snippet = snippet;
69
79
  }
80
+
81
+ snippet = builder.format(snippet, type, output);
82
+ } else {
83
+ snippet = this.generate(builder, output) || '';
70
84
  }
71
85
 
72
- if (this.hashProperties) {
73
- for (let i = 0; i < this.hashProperties.length; i++) {
74
- prop = this.hashProperties[i];
75
- obj = this[prop];
76
- hash += '"' + prop + '":"' + String(obj) + '",';
86
+ builder.removeStack(this);
87
+ return snippet;
88
+ }
89
+
90
+ serialize(json) {
91
+ const nodeKeys = getNodesKeys(this);
92
+
93
+ if (nodeKeys.length > 0) {
94
+ const inputNodes = {};
95
+
96
+ for (const property of nodeKeys) {
97
+ inputNodes[property] = this[property].toJSON(json.meta).uuid;
77
98
  }
99
+
100
+ json.inputNodes = inputNodes;
78
101
  }
102
+ }
79
103
 
80
- hash += '"id":"' + this.uuid + '"}';
81
- return hash;
82
- },
83
- appendDepsNode: function (builder, data, output) {
84
- data.deps = (data.deps || 0) + 1;
85
- var outputLen = builder.getTypeLength(output);
104
+ deserialize(json) {
105
+ if (json.inputNodes !== undefined) {
106
+ const nodes = json.meta.nodes;
86
107
 
87
- if (outputLen > (data.outputMax || 0) || this.getType(builder, output)) {
88
- data.outputMax = outputLen;
89
- data.output = output;
108
+ for (const property in json.inputNodes) {
109
+ const uuid = json.inputNodes[property];
110
+ this[property] = nodes[uuid];
111
+ }
90
112
  }
91
- },
92
- setName: function (name) {
93
- this.name = name;
94
- return this;
95
- },
96
- getName: function
97
- /* builder */
98
- () {
99
- return this.name;
100
- },
101
- getType: function (builder, output) {
102
- return output === 'sampler2D' || output === 'samplerCube' ? output : this.type;
103
- },
104
- getJSONNode: function (meta) {
105
- var isRootObject = meta === undefined || typeof meta === 'string';
106
-
107
- if (!isRootObject && meta.nodes[this.uuid] !== undefined) {
108
- return meta.nodes[this.uuid];
113
+ }
114
+
115
+ toJSON(meta) {
116
+ const {
117
+ uuid,
118
+ type
119
+ } = this;
120
+ const isRoot = meta === undefined || typeof meta === 'string';
121
+
122
+ if (isRoot) {
123
+ meta = {
124
+ textures: {},
125
+ images: {},
126
+ nodes: {}
127
+ };
128
+ } // serialize
129
+
130
+
131
+ let data = meta.nodes[uuid];
132
+
133
+ if (data === undefined) {
134
+ data = {
135
+ uuid,
136
+ type,
137
+ meta,
138
+ metadata: {
139
+ version: 4.5,
140
+ type: 'Node',
141
+ generator: 'Node.toJSON'
142
+ }
143
+ };
144
+ meta.nodes[data.uuid] = data;
145
+ this.serialize(data);
146
+ delete data.meta;
147
+ } // TODO: Copied from Object3D.toJSON
148
+
149
+
150
+ function extractFromCache(cache) {
151
+ const values = [];
152
+
153
+ for (const key in cache) {
154
+ const data = cache[key];
155
+ delete data.metadata;
156
+ values.push(data);
157
+ }
158
+
159
+ return values;
109
160
  }
110
- },
111
- copy: function (source) {
112
- if (source.name !== undefined) this.name = source.name;
113
- if (source.userData !== undefined) this.userData = JSON.parse(JSON.stringify(source.userData));
114
- return this;
115
- },
116
- createJSONNode: function (meta) {
117
- var isRootObject = meta === undefined || typeof meta === 'string';
118
- var data = {};
119
- if (typeof this.nodeType !== 'string') throw new Error('Node does not allow serialization.');
120
- data.uuid = this.uuid;
121
- data.nodeType = this.nodeType;
122
- if (this.name !== '') data.name = this.name;
123
- if (JSON.stringify(this.userData) !== '{}') data.userData = this.userData;
124
-
125
- if (!isRootObject) {
126
- meta.nodes[this.uuid] = data;
161
+
162
+ if (isRoot) {
163
+ const textures = extractFromCache(meta.textures);
164
+ const images = extractFromCache(meta.images);
165
+ const nodes = extractFromCache(meta.nodes);
166
+ if (textures.length > 0) data.textures = textures;
167
+ if (images.length > 0) data.images = images;
168
+ if (nodes.length > 0) data.nodes = nodes;
127
169
  }
128
170
 
129
171
  return data;
130
- },
131
- toJSON: function (meta) {
132
- return this.getJSONNode(meta) || this.createJSONNode(meta);
133
172
  }
134
- };
135
173
 
136
- export { Node };
174
+ }
175
+
176
+ Node.prototype.isNode = true;
177
+
178
+ export default Node;
@@ -0,0 +1 @@
1
+ "use strict";class t{constructor(t,s){this.name=t,this.type=s}}t.prototype.isNodeAttribute=!0,module.exports=t;