@dcl/ecs 7.1.12-4982571416.commit-0b87aa7 → 7.1.12-4983011170.commit-adaaaa2

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 (303) hide show
  1. package/dist/components/generated/pb/decentraland/common/vectors.gen.d.ts +16 -0
  2. package/dist/components/generated/pb/decentraland/common/vectors.gen.js +65 -0
  3. package/dist/components/generated/pb/decentraland/sdk/components/nft_shape.gen.d.ts +3 -3
  4. package/dist/components/generated/pb/decentraland/sdk/components/nft_shape.gen.js +4 -4
  5. package/dist-cjs/components/component-number.d.ts +7 -0
  6. package/dist-cjs/components/component-number.js +44 -0
  7. package/dist-cjs/components/extended/Animator.d.ts +46 -0
  8. package/dist-cjs/components/extended/Animator.js +62 -0
  9. package/dist-cjs/components/extended/Material.d.ts +42 -0
  10. package/dist-cjs/components/extended/Material.js +54 -0
  11. package/dist-cjs/components/extended/MeshCollider.d.ts +38 -0
  12. package/dist-cjs/components/extended/MeshCollider.js +43 -0
  13. package/dist-cjs/components/extended/MeshRenderer.d.ts +36 -0
  14. package/dist-cjs/components/extended/MeshRenderer.js +31 -0
  15. package/dist-cjs/components/generated/Animator.gen.d.ts +1 -0
  16. package/dist-cjs/components/generated/Animator.gen.js +28 -0
  17. package/dist-cjs/components/generated/AudioSource.gen.d.ts +1 -0
  18. package/dist-cjs/components/generated/AudioSource.gen.js +28 -0
  19. package/dist-cjs/components/generated/AudioStream.gen.d.ts +1 -0
  20. package/dist-cjs/components/generated/AudioStream.gen.js +28 -0
  21. package/dist-cjs/components/generated/AvatarAttach.gen.d.ts +1 -0
  22. package/dist-cjs/components/generated/AvatarAttach.gen.js +28 -0
  23. package/dist-cjs/components/generated/AvatarModifierArea.gen.d.ts +1 -0
  24. package/dist-cjs/components/generated/AvatarModifierArea.gen.js +28 -0
  25. package/dist-cjs/components/generated/AvatarShape.gen.d.ts +1 -0
  26. package/dist-cjs/components/generated/AvatarShape.gen.js +28 -0
  27. package/dist-cjs/components/generated/Billboard.gen.d.ts +1 -0
  28. package/dist-cjs/components/generated/Billboard.gen.js +28 -0
  29. package/dist-cjs/components/generated/CameraMode.gen.d.ts +1 -0
  30. package/dist-cjs/components/generated/CameraMode.gen.js +28 -0
  31. package/dist-cjs/components/generated/CameraModeArea.gen.d.ts +1 -0
  32. package/dist-cjs/components/generated/CameraModeArea.gen.js +28 -0
  33. package/dist-cjs/components/generated/EngineInfo.gen.d.ts +1 -0
  34. package/dist-cjs/components/generated/EngineInfo.gen.js +28 -0
  35. package/dist-cjs/components/generated/GltfContainer.gen.d.ts +1 -0
  36. package/dist-cjs/components/generated/GltfContainer.gen.js +28 -0
  37. package/dist-cjs/components/generated/GltfContainerLoadingState.gen.d.ts +1 -0
  38. package/dist-cjs/components/generated/GltfContainerLoadingState.gen.js +28 -0
  39. package/dist-cjs/components/generated/Material.gen.d.ts +1 -0
  40. package/dist-cjs/components/generated/Material.gen.js +28 -0
  41. package/dist-cjs/components/generated/MeshCollider.gen.d.ts +1 -0
  42. package/dist-cjs/components/generated/MeshCollider.gen.js +28 -0
  43. package/dist-cjs/components/generated/MeshRenderer.gen.d.ts +1 -0
  44. package/dist-cjs/components/generated/MeshRenderer.gen.js +28 -0
  45. package/dist-cjs/components/generated/NftShape.gen.d.ts +1 -0
  46. package/dist-cjs/components/generated/NftShape.gen.js +28 -0
  47. package/dist-cjs/components/generated/PointerEvents.gen.d.ts +1 -0
  48. package/dist-cjs/components/generated/PointerEvents.gen.js +28 -0
  49. package/dist-cjs/components/generated/PointerEventsResult.gen.d.ts +1 -0
  50. package/dist-cjs/components/generated/PointerEventsResult.gen.js +28 -0
  51. package/dist-cjs/components/generated/PointerLock.gen.d.ts +1 -0
  52. package/dist-cjs/components/generated/PointerLock.gen.js +28 -0
  53. package/dist-cjs/components/generated/Raycast.gen.d.ts +1 -0
  54. package/dist-cjs/components/generated/Raycast.gen.js +28 -0
  55. package/dist-cjs/components/generated/RaycastResult.gen.d.ts +1 -0
  56. package/dist-cjs/components/generated/RaycastResult.gen.js +28 -0
  57. package/dist-cjs/components/generated/TextShape.gen.d.ts +1 -0
  58. package/dist-cjs/components/generated/TextShape.gen.js +28 -0
  59. package/dist-cjs/components/generated/UiBackground.gen.d.ts +1 -0
  60. package/dist-cjs/components/generated/UiBackground.gen.js +28 -0
  61. package/dist-cjs/components/generated/UiCanvasInformation.gen.d.ts +1 -0
  62. package/dist-cjs/components/generated/UiCanvasInformation.gen.js +28 -0
  63. package/dist-cjs/components/generated/UiDropdown.gen.d.ts +1 -0
  64. package/dist-cjs/components/generated/UiDropdown.gen.js +28 -0
  65. package/dist-cjs/components/generated/UiDropdownResult.gen.d.ts +1 -0
  66. package/dist-cjs/components/generated/UiDropdownResult.gen.js +28 -0
  67. package/dist-cjs/components/generated/UiInput.gen.d.ts +1 -0
  68. package/dist-cjs/components/generated/UiInput.gen.js +28 -0
  69. package/dist-cjs/components/generated/UiInputResult.gen.d.ts +1 -0
  70. package/dist-cjs/components/generated/UiInputResult.gen.js +28 -0
  71. package/dist-cjs/components/generated/UiText.gen.d.ts +1 -0
  72. package/dist-cjs/components/generated/UiText.gen.js +28 -0
  73. package/dist-cjs/components/generated/UiTransform.gen.d.ts +1 -0
  74. package/dist-cjs/components/generated/UiTransform.gen.js +28 -0
  75. package/dist-cjs/components/generated/VideoEvent.gen.d.ts +1 -0
  76. package/dist-cjs/components/generated/VideoEvent.gen.js +28 -0
  77. package/dist-cjs/components/generated/VideoPlayer.gen.d.ts +1 -0
  78. package/dist-cjs/components/generated/VideoPlayer.gen.js +28 -0
  79. package/dist-cjs/components/generated/VisibilityComponent.gen.d.ts +1 -0
  80. package/dist-cjs/components/generated/VisibilityComponent.gen.js +28 -0
  81. package/dist-cjs/components/generated/component-names.gen.d.ts +4 -0
  82. package/dist-cjs/components/generated/component-names.gen.js +42 -0
  83. package/dist-cjs/components/generated/global.gen.d.ts +60 -0
  84. package/dist-cjs/components/generated/global.gen.js +61 -0
  85. package/dist-cjs/components/generated/index.gen.d.ts +139 -0
  86. package/dist-cjs/components/generated/index.gen.js +222 -0
  87. package/dist-cjs/components/generated/pb/decentraland/common/border_rect.gen.d.ts +35 -0
  88. package/dist-cjs/components/generated/pb/decentraland/common/border_rect.gen.js +139 -0
  89. package/dist-cjs/components/generated/pb/decentraland/common/colors.gen.d.ts +32 -0
  90. package/dist-cjs/components/generated/pb/decentraland/common/colors.gen.js +130 -0
  91. package/dist-cjs/components/generated/pb/decentraland/common/texture.gen.d.ts +91 -0
  92. package/dist-cjs/components/generated/pb/decentraland/common/texture.gen.js +254 -0
  93. package/dist-cjs/components/generated/pb/decentraland/common/vectors.gen.d.ts +61 -0
  94. package/dist-cjs/components/generated/pb/decentraland/common/vectors.gen.js +233 -0
  95. package/dist-cjs/components/generated/pb/decentraland/sdk/components/animator.gen.d.ts +50 -0
  96. package/dist-cjs/components/generated/pb/decentraland/sdk/components/animator.gen.js +147 -0
  97. package/dist-cjs/components/generated/pb/decentraland/sdk/components/audio_source.gen.d.ts +34 -0
  98. package/dist-cjs/components/generated/pb/decentraland/sdk/components/audio_source.gen.js +83 -0
  99. package/dist-cjs/components/generated/pb/decentraland/sdk/components/audio_stream.gen.d.ts +24 -0
  100. package/dist-cjs/components/generated/pb/decentraland/sdk/components/audio_stream.gen.js +65 -0
  101. package/dist-cjs/components/generated/pb/decentraland/sdk/components/avatar_attach.gen.d.ts +37 -0
  102. package/dist-cjs/components/generated/pb/decentraland/sdk/components/avatar_attach.gen.js +67 -0
  103. package/dist-cjs/components/generated/pb/decentraland/sdk/components/avatar_modifier_area.gen.d.ts +44 -0
  104. package/dist-cjs/components/generated/pb/decentraland/sdk/components/avatar_modifier_area.gen.js +86 -0
  105. package/dist-cjs/components/generated/pb/decentraland/sdk/components/avatar_shape.gen.d.ts +56 -0
  106. package/dist-cjs/components/generated/pb/decentraland/sdk/components/avatar_shape.gen.js +176 -0
  107. package/dist-cjs/components/generated/pb/decentraland/sdk/components/billboard.gen.d.ts +38 -0
  108. package/dist-cjs/components/generated/pb/decentraland/sdk/components/billboard.gen.js +63 -0
  109. package/dist-cjs/components/generated/pb/decentraland/sdk/components/camera_mode.gen.d.ts +20 -0
  110. package/dist-cjs/components/generated/pb/decentraland/sdk/components/camera_mode.gen.js +47 -0
  111. package/dist-cjs/components/generated/pb/decentraland/sdk/components/camera_mode_area.gen.d.ts +32 -0
  112. package/dist-cjs/components/generated/pb/decentraland/sdk/components/camera_mode_area.gen.js +57 -0
  113. package/dist-cjs/components/generated/pb/decentraland/sdk/components/common/camera_type.gen.d.ts +9 -0
  114. package/dist-cjs/components/generated/pb/decentraland/sdk/components/common/camera_type.gen.js +15 -0
  115. package/dist-cjs/components/generated/pb/decentraland/sdk/components/common/id.gen.d.ts +1 -0
  116. package/dist-cjs/components/generated/pb/decentraland/sdk/components/common/id.gen.js +3 -0
  117. package/dist-cjs/components/generated/pb/decentraland/sdk/components/common/input_action.gen.d.ts +29 -0
  118. package/dist-cjs/components/generated/pb/decentraland/sdk/components/common/input_action.gen.js +36 -0
  119. package/dist-cjs/components/generated/pb/decentraland/sdk/components/common/loading_state.gen.d.ts +10 -0
  120. package/dist-cjs/components/generated/pb/decentraland/sdk/components/common/loading_state.gen.js +16 -0
  121. package/dist-cjs/components/generated/pb/decentraland/sdk/components/common/raycast_hit.gen.d.ts +29 -0
  122. package/dist-cjs/components/generated/pb/decentraland/sdk/components/common/raycast_hit.gen.js +110 -0
  123. package/dist-cjs/components/generated/pb/decentraland/sdk/components/common/texts.gen.d.ts +22 -0
  124. package/dist-cjs/components/generated/pb/decentraland/sdk/components/common/texts.gen.js +29 -0
  125. package/dist-cjs/components/generated/pb/decentraland/sdk/components/engine_info.gen.d.ts +25 -0
  126. package/dist-cjs/components/generated/pb/decentraland/sdk/components/engine_info.gen.js +65 -0
  127. package/dist-cjs/components/generated/pb/decentraland/sdk/components/gltf_container.gen.d.ts +25 -0
  128. package/dist-cjs/components/generated/pb/decentraland/sdk/components/gltf_container.gen.js +65 -0
  129. package/dist-cjs/components/generated/pb/decentraland/sdk/components/gltf_container_loading_state.gen.d.ts +19 -0
  130. package/dist-cjs/components/generated/pb/decentraland/sdk/components/gltf_container_loading_state.gen.js +47 -0
  131. package/dist-cjs/components/generated/pb/decentraland/sdk/components/material.gen.d.ts +96 -0
  132. package/dist-cjs/components/generated/pb/decentraland/sdk/components/material.gen.js +326 -0
  133. package/dist-cjs/components/generated/pb/decentraland/sdk/components/mesh_collider.gen.d.ts +120 -0
  134. package/dist-cjs/components/generated/pb/decentraland/sdk/components/mesh_collider.gen.js +246 -0
  135. package/dist-cjs/components/generated/pb/decentraland/sdk/components/mesh_renderer.gen.d.ts +96 -0
  136. package/dist-cjs/components/generated/pb/decentraland/sdk/components/mesh_renderer.gen.js +246 -0
  137. package/dist-cjs/components/generated/pb/decentraland/sdk/components/nft_shape.gen.d.ts +58 -0
  138. package/dist-cjs/components/generated/pb/decentraland/sdk/components/nft_shape.gen.js +96 -0
  139. package/dist-cjs/components/generated/pb/decentraland/sdk/components/pointer_events.gen.d.ts +67 -0
  140. package/dist-cjs/components/generated/pb/decentraland/sdk/components/pointer_events.gen.js +159 -0
  141. package/dist-cjs/components/generated/pb/decentraland/sdk/components/pointer_events_result.gen.d.ts +26 -0
  142. package/dist-cjs/components/generated/pb/decentraland/sdk/components/pointer_events_result.gen.js +93 -0
  143. package/dist-cjs/components/generated/pb/decentraland/sdk/components/pointer_lock.gen.d.ts +19 -0
  144. package/dist-cjs/components/generated/pb/decentraland/sdk/components/pointer_lock.gen.js +47 -0
  145. package/dist-cjs/components/generated/pb/decentraland/sdk/components/raycast.gen.d.ts +63 -0
  146. package/dist-cjs/components/generated/pb/decentraland/sdk/components/raycast.gen.js +152 -0
  147. package/dist-cjs/components/generated/pb/decentraland/sdk/components/raycast_result.gen.d.ts +32 -0
  148. package/dist-cjs/components/generated/pb/decentraland/sdk/components/raycast_result.gen.js +85 -0
  149. package/dist-cjs/components/generated/pb/decentraland/sdk/components/text_shape.gen.d.ts +65 -0
  150. package/dist-cjs/components/generated/pb/decentraland/sdk/components/text_shape.gen.js +250 -0
  151. package/dist-cjs/components/generated/pb/decentraland/sdk/components/ui_background.gen.d.ts +47 -0
  152. package/dist-cjs/components/generated/pb/decentraland/sdk/components/ui_background.gen.js +119 -0
  153. package/dist-cjs/components/generated/pb/decentraland/sdk/components/ui_canvas_information.gen.d.ts +29 -0
  154. package/dist-cjs/components/generated/pb/decentraland/sdk/components/ui_canvas_information.gen.js +75 -0
  155. package/dist-cjs/components/generated/pb/decentraland/sdk/components/ui_dropdown.gen.d.ts +29 -0
  156. package/dist-cjs/components/generated/pb/decentraland/sdk/components/ui_dropdown.gen.js +130 -0
  157. package/dist-cjs/components/generated/pb/decentraland/sdk/components/ui_dropdown_result.gen.d.ts +14 -0
  158. package/dist-cjs/components/generated/pb/decentraland/sdk/components/ui_dropdown_result.gen.js +47 -0
  159. package/dist-cjs/components/generated/pb/decentraland/sdk/components/ui_input.gen.d.ts +28 -0
  160. package/dist-cjs/components/generated/pb/decentraland/sdk/components/ui_input.gen.js +120 -0
  161. package/dist-cjs/components/generated/pb/decentraland/sdk/components/ui_input_result.gen.d.ts +14 -0
  162. package/dist-cjs/components/generated/pb/decentraland/sdk/components/ui_input_result.gen.js +47 -0
  163. package/dist-cjs/components/generated/pb/decentraland/sdk/components/ui_text.gen.d.ts +25 -0
  164. package/dist-cjs/components/generated/pb/decentraland/sdk/components/ui_text.gen.js +84 -0
  165. package/dist-cjs/components/generated/pb/decentraland/sdk/components/ui_transform.gen.d.ts +179 -0
  166. package/dist-cjs/components/generated/pb/decentraland/sdk/components/ui_transform.gen.js +644 -0
  167. package/dist-cjs/components/generated/pb/decentraland/sdk/components/video_event.gen.d.ts +33 -0
  168. package/dist-cjs/components/generated/pb/decentraland/sdk/components/video_event.gen.js +97 -0
  169. package/dist-cjs/components/generated/pb/decentraland/sdk/components/video_player.gen.d.ts +25 -0
  170. package/dist-cjs/components/generated/pb/decentraland/sdk/components/video_player.gen.js +99 -0
  171. package/dist-cjs/components/generated/pb/decentraland/sdk/components/visibility_component.gen.d.ts +15 -0
  172. package/dist-cjs/components/generated/pb/decentraland/sdk/components/visibility_component.gen.js +47 -0
  173. package/dist-cjs/components/generated/pb/google/protobuf/descriptor.gen.d.ts +468 -0
  174. package/dist-cjs/components/generated/pb/google/protobuf/descriptor.gen.js +1936 -0
  175. package/dist-cjs/components/generated/types.gen.d.ts +9 -0
  176. package/dist-cjs/components/generated/types.gen.js +30 -0
  177. package/dist-cjs/components/index.d.ts +14 -0
  178. package/dist-cjs/components/index.js +38 -0
  179. package/dist-cjs/components/manual/Transform.d.ts +40 -0
  180. package/dist-cjs/components/manual/Transform.js +110 -0
  181. package/dist-cjs/components/types.d.ts +5 -0
  182. package/dist-cjs/components/types.js +2 -0
  183. package/dist-cjs/composite/components.d.ts +18 -0
  184. package/dist-cjs/composite/components.js +22 -0
  185. package/dist-cjs/composite/index.d.ts +51 -0
  186. package/dist-cjs/composite/index.js +60 -0
  187. package/dist-cjs/composite/instance.d.ts +34 -0
  188. package/dist-cjs/composite/instance.js +201 -0
  189. package/dist-cjs/composite/path.d.ts +3 -0
  190. package/dist-cjs/composite/path.js +154 -0
  191. package/dist-cjs/composite/proto/gen/composite.gen.d.ts +71 -0
  192. package/dist-cjs/composite/proto/gen/composite.gen.js +337 -0
  193. package/dist-cjs/composite/proto/gen/google/protobuf/struct.gen.d.ts +138 -0
  194. package/dist-cjs/composite/proto/gen/google/protobuf/struct.gen.js +443 -0
  195. package/dist-cjs/engine/component.d.ts +149 -0
  196. package/dist-cjs/engine/component.js +12 -0
  197. package/dist-cjs/engine/entity.d.ts +49 -0
  198. package/dist-cjs/engine/entity.js +178 -0
  199. package/dist-cjs/engine/grow-only-value-set-component-definition.d.ts +8 -0
  200. package/dist-cjs/engine/grow-only-value-set-component-definition.js +145 -0
  201. package/dist-cjs/engine/index.d.ts +15 -0
  202. package/dist-cjs/engine/index.js +247 -0
  203. package/dist-cjs/engine/input.d.ts +34 -0
  204. package/dist-cjs/engine/input.js +219 -0
  205. package/dist-cjs/engine/lww-element-set-component-definition.d.ts +8 -0
  206. package/dist-cjs/engine/lww-element-set-component-definition.js +264 -0
  207. package/dist-cjs/engine/readonly.d.ts +29 -0
  208. package/dist-cjs/engine/readonly.js +10 -0
  209. package/dist-cjs/engine/systems.d.ts +15 -0
  210. package/dist-cjs/engine/systems.js +48 -0
  211. package/dist-cjs/engine/types.d.ts +215 -0
  212. package/dist-cjs/engine/types.js +17 -0
  213. package/dist-cjs/index.d.ts +22 -0
  214. package/dist-cjs/index.js +58 -0
  215. package/dist-cjs/runtime/crc.d.ts +1 -0
  216. package/dist-cjs/runtime/crc.js +45 -0
  217. package/dist-cjs/runtime/helpers/index.d.ts +1 -0
  218. package/dist-cjs/runtime/helpers/index.js +17 -0
  219. package/dist-cjs/runtime/helpers/tree.d.ts +32 -0
  220. package/dist-cjs/runtime/helpers/tree.js +77 -0
  221. package/dist-cjs/runtime/initialization/index.d.ts +61 -0
  222. package/dist-cjs/runtime/initialization/index.js +56 -0
  223. package/dist-cjs/runtime/invariant.d.ts +4 -0
  224. package/dist-cjs/runtime/invariant.js +17 -0
  225. package/dist-cjs/runtime/types.d.ts +6 -0
  226. package/dist-cjs/runtime/types.js +18 -0
  227. package/dist-cjs/schemas/Array.d.ts +1 -0
  228. package/dist-cjs/schemas/Array.js +33 -0
  229. package/dist-cjs/schemas/ISchema.d.ts +35 -0
  230. package/dist-cjs/schemas/ISchema.js +2 -0
  231. package/dist-cjs/schemas/Map.d.ts +20 -0
  232. package/dist-cjs/schemas/Map.js +49 -0
  233. package/dist-cjs/schemas/OneOf.d.ts +10 -0
  234. package/dist-cjs/schemas/OneOf.js +35 -0
  235. package/dist-cjs/schemas/Optional.d.ts +1 -0
  236. package/dist-cjs/schemas/Optional.js +34 -0
  237. package/dist-cjs/schemas/basic/Boolean.d.ts +1 -0
  238. package/dist-cjs/schemas/basic/Boolean.js +21 -0
  239. package/dist-cjs/schemas/basic/Enum.d.ts +1 -0
  240. package/dist-cjs/schemas/basic/Enum.js +101 -0
  241. package/dist-cjs/schemas/basic/Float.d.ts +1 -0
  242. package/dist-cjs/schemas/basic/Float.js +39 -0
  243. package/dist-cjs/schemas/basic/Integer.d.ts +9 -0
  244. package/dist-cjs/schemas/basic/Integer.js +75 -0
  245. package/dist-cjs/schemas/basic/String.d.ts +1 -0
  246. package/dist-cjs/schemas/basic/String.js +25 -0
  247. package/dist-cjs/schemas/buildSchema/index.d.ts +11 -0
  248. package/dist-cjs/schemas/buildSchema/index.js +114 -0
  249. package/dist-cjs/schemas/buildSchema/types.d.ts +5 -0
  250. package/dist-cjs/schemas/buildSchema/types.js +2 -0
  251. package/dist-cjs/schemas/buildSchema/utils.d.ts +12 -0
  252. package/dist-cjs/schemas/buildSchema/utils.js +30 -0
  253. package/dist-cjs/schemas/custom/Color3.d.ts +8 -0
  254. package/dist-cjs/schemas/custom/Color3.js +32 -0
  255. package/dist-cjs/schemas/custom/Color4.d.ts +9 -0
  256. package/dist-cjs/schemas/custom/Color4.js +35 -0
  257. package/dist-cjs/schemas/custom/Entity.d.ts +1 -0
  258. package/dist-cjs/schemas/custom/Entity.js +21 -0
  259. package/dist-cjs/schemas/custom/Quaternion.d.ts +9 -0
  260. package/dist-cjs/schemas/custom/Quaternion.js +35 -0
  261. package/dist-cjs/schemas/custom/Vector3.d.ts +8 -0
  262. package/dist-cjs/schemas/custom/Vector3.js +33 -0
  263. package/dist-cjs/schemas/index.d.ts +80 -0
  264. package/dist-cjs/schemas/index.js +84 -0
  265. package/dist-cjs/schemas/typing.d.ts +30 -0
  266. package/dist-cjs/schemas/typing.js +2 -0
  267. package/dist-cjs/serialization/ByteBuffer/index.d.ts +180 -0
  268. package/dist-cjs/serialization/ByteBuffer/index.js +272 -0
  269. package/dist-cjs/serialization/crdt/appendValue.d.ts +15 -0
  270. package/dist-cjs/serialization/crdt/appendValue.js +52 -0
  271. package/dist-cjs/serialization/crdt/crdtMessageProtocol.d.ts +30 -0
  272. package/dist-cjs/serialization/crdt/crdtMessageProtocol.js +71 -0
  273. package/dist-cjs/serialization/crdt/deleteComponent.d.ts +14 -0
  274. package/dist-cjs/serialization/crdt/deleteComponent.js +45 -0
  275. package/dist-cjs/serialization/crdt/deleteEntity.d.ts +11 -0
  276. package/dist-cjs/serialization/crdt/deleteEntity.js +34 -0
  277. package/dist-cjs/serialization/crdt/index.d.ts +6 -0
  278. package/dist-cjs/serialization/crdt/index.js +22 -0
  279. package/dist-cjs/serialization/crdt/message.d.ts +3 -0
  280. package/dist-cjs/serialization/crdt/message.js +28 -0
  281. package/dist-cjs/serialization/crdt/putComponent.d.ts +15 -0
  282. package/dist-cjs/serialization/crdt/putComponent.js +50 -0
  283. package/dist-cjs/serialization/crdt/types.d.ts +147 -0
  284. package/dist-cjs/serialization/crdt/types.js +77 -0
  285. package/dist-cjs/systems/async-task.d.ts +1 -0
  286. package/dist-cjs/systems/async-task.js +33 -0
  287. package/dist-cjs/systems/crdt/gset.d.ts +29 -0
  288. package/dist-cjs/systems/crdt/gset.js +54 -0
  289. package/dist-cjs/systems/crdt/index.d.ts +7 -0
  290. package/dist-cjs/systems/crdt/index.js +241 -0
  291. package/dist-cjs/systems/crdt/types.d.ts +20 -0
  292. package/dist-cjs/systems/crdt/types.js +2 -0
  293. package/dist-cjs/systems/crdt/utils.d.ts +15 -0
  294. package/dist-cjs/systems/crdt/utils.js +52 -0
  295. package/dist-cjs/systems/cyclicParentingChecker.d.ts +17 -0
  296. package/dist-cjs/systems/cyclicParentingChecker.js +60 -0
  297. package/dist-cjs/systems/events.d.ts +49 -0
  298. package/dist-cjs/systems/events.js +137 -0
  299. package/dist-cjs/systems/raycast.d.ts +80 -0
  300. package/dist-cjs/systems/raycast.js +124 -0
  301. package/dist-cjs/systems/videoEvents.d.ts +14 -0
  302. package/dist-cjs/systems/videoEvents.js +89 -0
  303. package/package.json +5 -4
@@ -0,0 +1,50 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.PutComponentOperation = void 0;
4
+ const crdtMessageProtocol_1 = require("./crdtMessageProtocol");
5
+ const types_1 = require("./types");
6
+ /**
7
+ * @public
8
+ */
9
+ var PutComponentOperation;
10
+ (function (PutComponentOperation) {
11
+ PutComponentOperation.MESSAGE_HEADER_LENGTH = 16;
12
+ /**
13
+ * Call this function for an optimal writing data passing the ByteBuffer
14
+ * already allocated
15
+ */
16
+ function write(entity, timestamp, componentId, data, buf) {
17
+ // reserve the beginning
18
+ const startMessageOffset = buf.incrementWriteOffset(types_1.CRDT_MESSAGE_HEADER_LENGTH + PutComponentOperation.MESSAGE_HEADER_LENGTH);
19
+ // write body
20
+ buf.writeBuffer(data, false);
21
+ const messageLength = buf.currentWriteOffset() - startMessageOffset;
22
+ // Write CrdtMessage header
23
+ buf.setUint32(startMessageOffset, messageLength);
24
+ buf.setUint32(startMessageOffset + 4, types_1.CrdtMessageType.PUT_COMPONENT);
25
+ // Write ComponentOperation header
26
+ buf.setUint32(startMessageOffset + 8, entity);
27
+ buf.setUint32(startMessageOffset + 12, componentId);
28
+ buf.setUint32(startMessageOffset + 16, timestamp);
29
+ const newLocal = messageLength - PutComponentOperation.MESSAGE_HEADER_LENGTH - types_1.CRDT_MESSAGE_HEADER_LENGTH;
30
+ buf.setUint32(startMessageOffset + 20, newLocal);
31
+ }
32
+ PutComponentOperation.write = write;
33
+ function read(buf) {
34
+ const header = crdtMessageProtocol_1.CrdtMessageProtocol.readHeader(buf);
35
+ if (!header) {
36
+ return null;
37
+ }
38
+ if (header.type !== types_1.CrdtMessageType.PUT_COMPONENT) {
39
+ throw new Error('PutComponentOperation tried to read another message type.');
40
+ }
41
+ return {
42
+ ...header,
43
+ entityId: buf.readUint32(),
44
+ componentId: buf.readUint32(),
45
+ timestamp: buf.readUint32(),
46
+ data: buf.readBuffer()
47
+ };
48
+ }
49
+ PutComponentOperation.read = read;
50
+ })(PutComponentOperation = exports.PutComponentOperation || (exports.PutComponentOperation = {}));
@@ -0,0 +1,147 @@
1
+ import { Entity, uint32 } from '../../engine/entity';
2
+ /**
3
+ * @public
4
+ */
5
+ export declare enum CrdtMessageType {
6
+ RESERVED = 0,
7
+ PUT_COMPONENT = 1,
8
+ DELETE_COMPONENT = 2,
9
+ DELETE_ENTITY = 3,
10
+ APPEND_VALUE = 4,
11
+ MAX_MESSAGE_TYPE = 5
12
+ }
13
+ /**
14
+ * Min length = 8 bytes
15
+ * All message length including
16
+ * @param length - uint32 the length of all message (including the header)
17
+ * @param type - define the function which handles the data
18
+ * @public
19
+ */
20
+ export type CrdtMessageHeader = {
21
+ length: uint32;
22
+ type: uint32;
23
+ };
24
+ /**
25
+ * @public
26
+ */
27
+ export declare const CRDT_MESSAGE_HEADER_LENGTH = 8;
28
+ /**
29
+ * Min. length = header (8 bytes) + 16 bytes = 24 bytes
30
+ *
31
+ * @param entity - Uint32 number of the entity
32
+ * @param componentId - Uint32 number of id
33
+ * @param timestamp - Uint32 Lamport timestamp
34
+ * @param data - Uint8[] data of component => length(4 bytes) + block of bytes[0..length-1]
35
+ * @public
36
+ */
37
+ export type PutComponentMessageBody = {
38
+ type: CrdtMessageType.PUT_COMPONENT;
39
+ entityId: Entity;
40
+ componentId: number;
41
+ timestamp: number;
42
+ data: Uint8Array;
43
+ };
44
+ /**
45
+ * Min. length = header (8 bytes) + 16 bytes = 24 bytes
46
+ *
47
+ * @param entity - Uint32 number of the entity
48
+ * @param componentId - Uint32 number of id
49
+ * @param timestamp - Uint32 timestamp
50
+ * @param data - Uint8[] data of component => length(4 bytes) + block of bytes[0..length-1]
51
+ * @public
52
+ */
53
+ export type AppendValueMessageBody = {
54
+ type: CrdtMessageType.APPEND_VALUE;
55
+ entityId: Entity;
56
+ componentId: number;
57
+ timestamp: number;
58
+ data: Uint8Array;
59
+ };
60
+ /**
61
+ * @param entity - Uint32 number of the entity
62
+ * @param componentId - Uint32 number of id
63
+ * @param timestamp - Uint32 Lamport timestamp
64
+ * @public
65
+ */
66
+ export type DeleteComponentMessageBody = {
67
+ type: CrdtMessageType.DELETE_COMPONENT;
68
+ entityId: Entity;
69
+ componentId: number;
70
+ timestamp: number;
71
+ };
72
+ /**
73
+ * @param entity - uint32 number of the entity
74
+ * @public
75
+ */
76
+ export type DeleteEntityMessageBody = {
77
+ type: CrdtMessageType.DELETE_ENTITY;
78
+ entityId: Entity;
79
+ };
80
+ /**
81
+ * @public
82
+ */
83
+ export type AppendValueMessage = CrdtMessageHeader & AppendValueMessageBody;
84
+ /**
85
+ * @public
86
+ */
87
+ export type PutComponentMessage = CrdtMessageHeader & PutComponentMessageBody;
88
+ /**
89
+ * @public
90
+ */
91
+ export type DeleteComponentMessage = CrdtMessageHeader & DeleteComponentMessageBody;
92
+ /**
93
+ * @public
94
+ */
95
+ export type DeleteEntityMessage = CrdtMessageHeader & DeleteEntityMessageBody;
96
+ /**
97
+ * @public
98
+ */
99
+ export type CrdtMessage = PutComponentMessage | DeleteComponentMessage | DeleteEntityMessage | AppendValueMessage;
100
+ /**
101
+ * @public
102
+ */
103
+ export type CrdtMessageBody = PutComponentMessageBody | DeleteComponentMessageBody | DeleteEntityMessageBody | AppendValueMessageBody;
104
+ export declare enum ProcessMessageResultType {
105
+ /**
106
+ * Typical message and new state set.
107
+ * @state CHANGE
108
+ * @reason Incoming message has a timestamp greater
109
+ */
110
+ StateUpdatedTimestamp = 1,
111
+ /**
112
+ * Typical message when it is considered old.
113
+ * @state it does NOT CHANGE.
114
+ * @reason incoming message has a timestamp lower.
115
+ */
116
+ StateOutdatedTimestamp = 2,
117
+ /**
118
+ * Weird message, same timestamp and data.
119
+ * @state it does NOT CHANGE.
120
+ * @reason consistent state between peers.
121
+ */
122
+ NoChanges = 3,
123
+ /**
124
+ * Less but typical message, same timestamp, resolution by data.
125
+ * @state it does NOT CHANGE.
126
+ * @reason incoming message has a LOWER data.
127
+ */
128
+ StateOutdatedData = 4,
129
+ /**
130
+ * Less but typical message, same timestamp, resolution by data.
131
+ * @state CHANGE.
132
+ * @reason incoming message has a GREATER data.
133
+ */
134
+ StateUpdatedData = 5,
135
+ /**
136
+ * Entity was previously deleted.
137
+ * @state it does NOT CHANGE.
138
+ * @reason The message is considered old.
139
+ */
140
+ EntityWasDeleted = 6,
141
+ /**
142
+ * Entity should be deleted.
143
+ * @state CHANGE.
144
+ * @reason the state is storing old entities
145
+ */
146
+ EntityDeleted = 7
147
+ }
@@ -0,0 +1,77 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ProcessMessageResultType = exports.CRDT_MESSAGE_HEADER_LENGTH = exports.CrdtMessageType = void 0;
4
+ /**
5
+ * @public
6
+ */
7
+ var CrdtMessageType;
8
+ (function (CrdtMessageType) {
9
+ CrdtMessageType[CrdtMessageType["RESERVED"] = 0] = "RESERVED";
10
+ // Component Operation
11
+ CrdtMessageType[CrdtMessageType["PUT_COMPONENT"] = 1] = "PUT_COMPONENT";
12
+ CrdtMessageType[CrdtMessageType["DELETE_COMPONENT"] = 2] = "DELETE_COMPONENT";
13
+ CrdtMessageType[CrdtMessageType["DELETE_ENTITY"] = 3] = "DELETE_ENTITY";
14
+ CrdtMessageType[CrdtMessageType["APPEND_VALUE"] = 4] = "APPEND_VALUE";
15
+ CrdtMessageType[CrdtMessageType["MAX_MESSAGE_TYPE"] = 5] = "MAX_MESSAGE_TYPE";
16
+ })(CrdtMessageType = exports.CrdtMessageType || (exports.CrdtMessageType = {}));
17
+ /**
18
+ * @public
19
+ */
20
+ exports.CRDT_MESSAGE_HEADER_LENGTH = 8;
21
+ var ProcessMessageResultType;
22
+ (function (ProcessMessageResultType) {
23
+ /**
24
+ * Typical message and new state set.
25
+ * @state CHANGE
26
+ * @reason Incoming message has a timestamp greater
27
+ */
28
+ ProcessMessageResultType[ProcessMessageResultType["StateUpdatedTimestamp"] = 1] = "StateUpdatedTimestamp";
29
+ /**
30
+ * Typical message when it is considered old.
31
+ * @state it does NOT CHANGE.
32
+ * @reason incoming message has a timestamp lower.
33
+ */
34
+ ProcessMessageResultType[ProcessMessageResultType["StateOutdatedTimestamp"] = 2] = "StateOutdatedTimestamp";
35
+ /**
36
+ * Weird message, same timestamp and data.
37
+ * @state it does NOT CHANGE.
38
+ * @reason consistent state between peers.
39
+ */
40
+ ProcessMessageResultType[ProcessMessageResultType["NoChanges"] = 3] = "NoChanges";
41
+ /**
42
+ * Less but typical message, same timestamp, resolution by data.
43
+ * @state it does NOT CHANGE.
44
+ * @reason incoming message has a LOWER data.
45
+ */
46
+ ProcessMessageResultType[ProcessMessageResultType["StateOutdatedData"] = 4] = "StateOutdatedData";
47
+ /**
48
+ * Less but typical message, same timestamp, resolution by data.
49
+ * @state CHANGE.
50
+ * @reason incoming message has a GREATER data.
51
+ */
52
+ ProcessMessageResultType[ProcessMessageResultType["StateUpdatedData"] = 5] = "StateUpdatedData";
53
+ /**
54
+ * Entity was previously deleted.
55
+ * @state it does NOT CHANGE.
56
+ * @reason The message is considered old.
57
+ */
58
+ ProcessMessageResultType[ProcessMessageResultType["EntityWasDeleted"] = 6] = "EntityWasDeleted";
59
+ /**
60
+ * Entity should be deleted.
61
+ * @state CHANGE.
62
+ * @reason the state is storing old entities
63
+ */
64
+ ProcessMessageResultType[ProcessMessageResultType["EntityDeleted"] = 7] = "EntityDeleted";
65
+ })(ProcessMessageResultType = exports.ProcessMessageResultType || (exports.ProcessMessageResultType = {}));
66
+ // we receive LWW, v=6, we have v=5 => we receive with delay the deleteEntity(v=5)
67
+ // => we should generate the deleteEntity message effects internally with deleteEntity(v=5),
68
+ // but don't resend the deleteEntity
69
+ // - (CRDT) addDeletedEntitySet v=5 (with crdt state cleaning) and then LWW v=6
70
+ // - (engine) engine.deleteEntity v=5
71
+ // we receive LWW, v=7, we have v=5 => we receive with delay the deleteEntity(v=5), deleteEntity(v=6), ..., N
72
+ // => we should generate the deleteEntity message effects internally with deleteEntity(v=5),
73
+ // but don't resend the deleteEntity
74
+ // - (CRDT) addDeletedEntitySet v=5 (with crdt state cleaning) and then LWW v=6
75
+ // - (engine) engine.deleteEntity v=5
76
+ // msg delete entity: it only should be sent by deleter
77
+ //
@@ -0,0 +1 @@
1
+ export type Task<T = unknown> = () => Promise<T>;
@@ -0,0 +1,33 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.createTaskSystem = void 0;
4
+ function getAndClean(value) {
5
+ const messagesToProcess = Array.from(value);
6
+ value.length = 0;
7
+ return messagesToProcess;
8
+ }
9
+ /**
10
+ * @internal
11
+ */
12
+ function createTaskSystem(engine) {
13
+ const tasks = [];
14
+ async function runTask(task) {
15
+ try {
16
+ const resp = await task();
17
+ return resp;
18
+ }
19
+ catch (e) {
20
+ console.error(e);
21
+ }
22
+ }
23
+ function executeTasks() {
24
+ for (const task of getAndClean(tasks)) {
25
+ runTask(task).catch(console.error);
26
+ }
27
+ }
28
+ engine.addSystem(executeTasks);
29
+ return function (task) {
30
+ tasks.push(task);
31
+ };
32
+ }
33
+ exports.createTaskSystem = createTaskSystem;
@@ -0,0 +1,29 @@
1
+ /**
2
+ * This Grow-only set is a implementation with a memory optimization.
3
+ *
4
+ * Each number has a version, no matter how the final compound number is mixed.
5
+ *
6
+ * The function `add` isn't defined (for this implementation), instead, the addTo is: add all versions of a number `n` until (and including) `v`.
7
+ *
8
+ */
9
+ export type OptimizedGrowonlySet = {
10
+ /**
11
+ * @public
12
+ *
13
+ * @param n
14
+ * @param v
15
+ * @returns
16
+ */
17
+ addTo(n: number, v: number): boolean;
18
+ /**
19
+ * @public
20
+ *
21
+ * @returns the set with [number, version] of each value
22
+ */
23
+ has(n: number, v: number): boolean;
24
+ };
25
+ /**
26
+ *
27
+ * @returns a new GSet
28
+ */
29
+ export declare function createVersionGSet(): OptimizedGrowonlySet;
@@ -0,0 +1,54 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.createVersionGSet = void 0;
4
+ /**
5
+ *
6
+ * @returns a new GSet
7
+ */
8
+ function createVersionGSet() {
9
+ const lastVersion = new Map();
10
+ return {
11
+ /**
12
+ *
13
+ * @param number
14
+ * @param version
15
+ * @returns
16
+ */
17
+ addTo(number, version) {
18
+ /* istanbul ignore next */
19
+ if (version < 0) {
20
+ /* istanbul ignore next */
21
+ return false;
22
+ }
23
+ const currentValue = lastVersion.get(number);
24
+ // If the version is >=, it means the value it's already in the set
25
+ if (currentValue !== undefined && currentValue >= version) {
26
+ return true;
27
+ }
28
+ lastVersion.set(number, version);
29
+ return true;
30
+ },
31
+ /**
32
+ * @returns the set with [number, version] of each value
33
+ */
34
+ has(n, v) {
35
+ const currentValue = lastVersion.get(n);
36
+ // If the version is >=, it means the value it's already in the set
37
+ if (currentValue !== undefined && currentValue >= v) {
38
+ return true;
39
+ }
40
+ return false;
41
+ },
42
+ /**
43
+ * Warning: this function returns the reference to the internal map,
44
+ * if you need to mutate some value, make a copy.
45
+ * For optimization purpose the copy isn't made here.
46
+ *
47
+ * @returns the map of number to version
48
+ */
49
+ getMap() {
50
+ return lastVersion;
51
+ }
52
+ };
53
+ }
54
+ exports.createVersionGSet = createVersionGSet;
@@ -0,0 +1,7 @@
1
+ import { Entity } from '../../engine/entity';
2
+ import type { ComponentDefinition } from '../../engine';
3
+ import { CrdtMessageType } from '../../serialization/crdt/types';
4
+ /**
5
+ * @public
6
+ */
7
+ export type OnChangeFunction = (entity: Entity, operation: CrdtMessageType, component?: ComponentDefinition<any>, componentValue?: any) => void;
@@ -0,0 +1,241 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.crdtSceneSystem = void 0;
4
+ const entity_1 = require("../../engine/entity");
5
+ const ByteBuffer_1 = require("../../serialization/ByteBuffer");
6
+ const crdt_1 = require("../../serialization/crdt");
7
+ const deleteComponent_1 = require("../../serialization/crdt/deleteComponent");
8
+ const deleteEntity_1 = require("../../serialization/crdt/deleteEntity");
9
+ const putComponent_1 = require("../../serialization/crdt/putComponent");
10
+ const types_1 = require("../../serialization/crdt/types");
11
+ /**
12
+ * @internal
13
+ */
14
+ function crdtSceneSystem(engine, onProcessEntityComponentChange) {
15
+ const transports = [];
16
+ // Messages that we received at transport.onMessage waiting to be processed
17
+ const receivedMessages = [];
18
+ // Messages already processed by the engine but that we need to broadcast to other transports.
19
+ const broadcastMessages = [];
20
+ // Messages receieved by a transport that were outdated. We need to correct them
21
+ const outdatedMessages = [];
22
+ /**
23
+ *
24
+ * @param transportId tranport id to identiy messages
25
+ * @returns a function to process received messages
26
+ */
27
+ function parseChunkMessage(transportId) {
28
+ /**
29
+ * Receives a chunk of binary messages and stores all the valid
30
+ * Component Operation Messages at messages queue
31
+ * @param chunkMessage A chunk of binary messages
32
+ */
33
+ return function parseChunkMessage(chunkMessage) {
34
+ const buffer = new ByteBuffer_1.ReadWriteByteBuffer(chunkMessage);
35
+ let header;
36
+ while ((header = crdt_1.CrdtMessageProtocol.getHeader(buffer))) {
37
+ const offset = buffer.currentReadOffset();
38
+ if (header.type === types_1.CrdtMessageType.DELETE_COMPONENT) {
39
+ const message = deleteComponent_1.DeleteComponent.read(buffer);
40
+ receivedMessages.push({
41
+ ...message,
42
+ transportId,
43
+ messageBuffer: buffer.buffer().subarray(offset, buffer.currentReadOffset())
44
+ });
45
+ }
46
+ else if (header.type === types_1.CrdtMessageType.PUT_COMPONENT) {
47
+ const message = putComponent_1.PutComponentOperation.read(buffer);
48
+ receivedMessages.push({
49
+ ...message,
50
+ transportId,
51
+ messageBuffer: buffer.buffer().subarray(offset, buffer.currentReadOffset())
52
+ });
53
+ }
54
+ else if (header.type === types_1.CrdtMessageType.DELETE_ENTITY) {
55
+ const message = deleteEntity_1.DeleteEntity.read(buffer);
56
+ receivedMessages.push({
57
+ ...message,
58
+ transportId,
59
+ messageBuffer: buffer.buffer().subarray(offset, buffer.currentReadOffset())
60
+ });
61
+ }
62
+ else if (header.type === types_1.CrdtMessageType.APPEND_VALUE) {
63
+ const message = crdt_1.AppendValueOperation.read(buffer);
64
+ receivedMessages.push({
65
+ ...message,
66
+ transportId,
67
+ messageBuffer: buffer.buffer().subarray(offset, buffer.currentReadOffset())
68
+ });
69
+ // Unknown message, we skip it
70
+ }
71
+ else {
72
+ // consume the message
73
+ buffer.incrementReadOffset(header.length);
74
+ }
75
+ }
76
+ // TODO: do something if buffler.len>0
77
+ };
78
+ }
79
+ /**
80
+ * Return and clear the messaes queue
81
+ * @returns messages recieved by the transport to process on the next tick
82
+ */
83
+ function getMessages(value) {
84
+ const messagesToProcess = value.splice(0, value.length);
85
+ return messagesToProcess;
86
+ }
87
+ /**
88
+ * This fn will be called on every tick.
89
+ * Process all the messages queue received by the transport
90
+ */
91
+ async function receiveMessages() {
92
+ const messagesToProcess = getMessages(receivedMessages);
93
+ const bufferForOutdated = new ByteBuffer_1.ReadWriteByteBuffer();
94
+ const entitiesShouldBeCleaned = [];
95
+ for (const msg of messagesToProcess) {
96
+ if (msg.type === types_1.CrdtMessageType.DELETE_ENTITY) {
97
+ entitiesShouldBeCleaned.push(msg.entityId);
98
+ }
99
+ else {
100
+ const entityState = engine.entityContainer.getEntityState(msg.entityId);
101
+ // Skip updates from removed entityes
102
+ if (entityState === entity_1.EntityState.Removed)
103
+ continue;
104
+ // Entities with unknown entities should update its entity state
105
+ if (entityState === entity_1.EntityState.Unknown) {
106
+ engine.entityContainer.updateUsedEntity(msg.entityId);
107
+ }
108
+ const component = engine.getComponentOrNull(msg.componentId);
109
+ /* istanbul ignore else */
110
+ if (component) {
111
+ const [conflictMessage, value] = component.updateFromCrdt(msg);
112
+ if (conflictMessage) {
113
+ const offset = bufferForOutdated.currentWriteOffset();
114
+ if (conflictMessage.type === types_1.CrdtMessageType.PUT_COMPONENT) {
115
+ putComponent_1.PutComponentOperation.write(msg.entityId, conflictMessage.timestamp, conflictMessage.componentId, conflictMessage.data, bufferForOutdated);
116
+ }
117
+ else if (conflictMessage.type === types_1.CrdtMessageType.DELETE_COMPONENT) {
118
+ deleteComponent_1.DeleteComponent.write(msg.entityId, component.componentId, conflictMessage.timestamp, bufferForOutdated);
119
+ }
120
+ outdatedMessages.push({
121
+ ...msg,
122
+ messageBuffer: bufferForOutdated.buffer().subarray(offset, bufferForOutdated.currentWriteOffset())
123
+ });
124
+ }
125
+ else {
126
+ // Add message to transport queue to be processed by others transports
127
+ broadcastMessages.push(msg);
128
+ onProcessEntityComponentChange && onProcessEntityComponentChange(msg.entityId, msg.type, component, value);
129
+ }
130
+ }
131
+ else {
132
+ // TODO: test this line, it is fundammental to make the editor work
133
+ broadcastMessages.push(msg);
134
+ }
135
+ }
136
+ }
137
+ // the last stage of the syncrhonization is to delete the entities
138
+ for (const entity of entitiesShouldBeCleaned) {
139
+ // If we tried to resend outdated message and the entity was deleted before, we avoid sending them.
140
+ for (let i = outdatedMessages.length - 1; i >= 0; i--) {
141
+ if (outdatedMessages[i].entityId === entity && outdatedMessages[i].type !== types_1.CrdtMessageType.DELETE_ENTITY) {
142
+ outdatedMessages.splice(i, 1);
143
+ }
144
+ }
145
+ for (const definition of engine.componentsIter()) {
146
+ definition.entityDeleted(entity, false);
147
+ }
148
+ engine.entityContainer.updateRemovedEntity(entity);
149
+ onProcessEntityComponentChange && onProcessEntityComponentChange(entity, types_1.CrdtMessageType.DELETE_ENTITY);
150
+ }
151
+ }
152
+ /**
153
+ * Iterates the dirty map and generates crdt messages to be send
154
+ */
155
+ async function sendMessages(entitiesDeletedThisTick) {
156
+ // CRDT Messages will be the merge between the recieved transport messages and the new crdt messages
157
+ const crdtMessages = getMessages(broadcastMessages);
158
+ const outdatedMessagesBkp = getMessages(outdatedMessages);
159
+ const buffer = new ByteBuffer_1.ReadWriteByteBuffer();
160
+ for (const component of engine.componentsIter()) {
161
+ for (const message of component.getCrdtUpdates()) {
162
+ const offset = buffer.currentWriteOffset();
163
+ // Avoid creating messages if there is no transport that will handle it
164
+ if (transports.some((t) => t.filter(message))) {
165
+ if (message.type === types_1.CrdtMessageType.PUT_COMPONENT) {
166
+ putComponent_1.PutComponentOperation.write(message.entityId, message.timestamp, message.componentId, message.data, buffer);
167
+ }
168
+ else if (message.type === types_1.CrdtMessageType.DELETE_COMPONENT) {
169
+ deleteComponent_1.DeleteComponent.write(message.entityId, component.componentId, message.timestamp, buffer);
170
+ }
171
+ else if (message.type === types_1.CrdtMessageType.APPEND_VALUE) {
172
+ crdt_1.AppendValueOperation.write(message.entityId, message.timestamp, message.componentId, message.data, buffer);
173
+ }
174
+ crdtMessages.push({
175
+ ...message,
176
+ messageBuffer: buffer.buffer().subarray(offset, buffer.currentWriteOffset())
177
+ });
178
+ if (onProcessEntityComponentChange) {
179
+ const rawValue = message.type === types_1.CrdtMessageType.PUT_COMPONENT || message.type === types_1.CrdtMessageType.APPEND_VALUE
180
+ ? component.get(message.entityId)
181
+ : undefined;
182
+ onProcessEntityComponentChange(message.entityId, message.type, component, rawValue);
183
+ }
184
+ }
185
+ }
186
+ }
187
+ // After all updates, I execute the DeletedEntity messages
188
+ for (const entityId of entitiesDeletedThisTick) {
189
+ const offset = buffer.currentWriteOffset();
190
+ deleteEntity_1.DeleteEntity.write(entityId, buffer);
191
+ crdtMessages.push({
192
+ type: types_1.CrdtMessageType.DELETE_ENTITY,
193
+ entityId,
194
+ messageBuffer: buffer.buffer().subarray(offset, buffer.currentWriteOffset())
195
+ });
196
+ onProcessEntityComponentChange && onProcessEntityComponentChange(entityId, types_1.CrdtMessageType.DELETE_ENTITY);
197
+ }
198
+ // Send CRDT messages to transports
199
+ const transportBuffer = new ByteBuffer_1.ReadWriteByteBuffer();
200
+ for (const index in transports) {
201
+ const transportIndex = Number(index);
202
+ const transport = transports[transportIndex];
203
+ transportBuffer.resetBuffer();
204
+ // First we need to send all the messages that were outdated from a transport
205
+ // So we can fix their crdt state
206
+ for (const message of outdatedMessagesBkp) {
207
+ if (message.transportId === transportIndex &&
208
+ // TODO: This is an optimization, the state should converge anyway, whatever the message is sent.
209
+ // Avoid sending multiple messages for the same entity-componentId
210
+ !crdtMessages.find((m) => m.entityId === message.entityId &&
211
+ // TODO: as any, with multiple type of messages, it should have many checks before the check for similar messages
212
+ m.componentId &&
213
+ m.componentId === message.componentId)) {
214
+ transportBuffer.writeBuffer(message.messageBuffer, false);
215
+ }
216
+ }
217
+ // Then we send all the new crdtMessages that the transport needs to process
218
+ for (const message of crdtMessages) {
219
+ if (message.transportId !== transportIndex && transport.filter(message)) {
220
+ transportBuffer.writeBuffer(message.messageBuffer, false);
221
+ }
222
+ }
223
+ const message = transportBuffer.currentWriteOffset() ? transportBuffer.toBinary() : new Uint8Array([]);
224
+ await transport.send(message);
225
+ }
226
+ }
227
+ /**
228
+ * @public
229
+ * Add a transport to the crdt system
230
+ */
231
+ function addTransport(transport) {
232
+ const id = transports.push(transport) - 1;
233
+ transport.onmessage = parseChunkMessage(id);
234
+ }
235
+ return {
236
+ sendMessages,
237
+ receiveMessages,
238
+ addTransport
239
+ };
240
+ }
241
+ exports.crdtSceneSystem = crdtSceneSystem;
@@ -0,0 +1,20 @@
1
+ import { CrdtMessageBody } from '../../serialization/crdt/types';
2
+ /**
3
+ * @public
4
+ */
5
+ export type ReceiveMessage = CrdtMessageBody & {
6
+ transportId?: number;
7
+ messageBuffer: Uint8Array;
8
+ };
9
+ /**
10
+ * @public
11
+ */
12
+ export type TransportMessage = Omit<ReceiveMessage, 'data'>;
13
+ /**
14
+ * @public
15
+ */
16
+ export type Transport = {
17
+ send(message: Uint8Array): Promise<void>;
18
+ onmessage?(message: Uint8Array): void;
19
+ filter(message: Omit<TransportMessage, 'messageBuffer'>): boolean;
20
+ };
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });