@woosh/meep-engine 3.41.0 → 3.42.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 (344) hide show
  1. package/build/bundle-worker-image-decoder.js +1 -1
  2. package/build/bundle-worker-terrain.js +1 -1
  3. package/editor/selection/editor_pick.d.ts.map +1 -1
  4. package/editor/selection/editor_pick.js +2 -1
  5. package/editor/tools/TransformToolV2.d.ts.map +1 -1
  6. package/editor/tools/TransformToolV2.js +7 -1
  7. package/editor/tools/engine/ToolEngine.d.ts.map +1 -1
  8. package/editor/tools/engine/ToolEngine.js +10 -0
  9. package/editor/tools/v2/TransformControls.d.ts.map +1 -1
  10. package/editor/tools/v2/TransformControls.js +7 -20
  11. package/editor/tools/v2/handle/gizmo_drag_plane.d.ts.map +1 -1
  12. package/editor/tools/v2/handle/gizmo_drag_plane.js +4 -0
  13. package/editor/view/ecs/EntityEditor.d.ts.map +1 -1
  14. package/editor/view/ecs/EntityEditor.js +3 -1
  15. package/editor/view/node-graph/NodeGraphView.d.ts.map +1 -1
  16. package/editor/view/node-graph/NodeGraphView.js +28 -12
  17. package/package.json +1 -1
  18. package/samples/engine/first-scene/index.html +4 -1
  19. package/samples/engine/first-scene/main.js +14 -9
  20. package/src/core/binary/utf8/utf8_decode.js +3 -3
  21. package/src/core/bvh2/binary/2/bvh32_query_user_data_ray.d.ts.map +1 -1
  22. package/src/core/bvh2/binary/2/bvh32_query_user_data_ray.js +112 -113
  23. package/src/core/bvh2/bvh3/ebvh_nodes_sort_sah_local4.js +2 -2
  24. package/src/core/cache/wtinylfu/benchmark/CacheWTinylfu.bench.md +14 -14
  25. package/src/core/collection/RingBuffer.d.ts.map +1 -1
  26. package/src/core/collection/RingBuffer.js +4 -0
  27. package/src/core/collection/array/array_contains_duplicates.d.ts.map +1 -1
  28. package/src/core/collection/array/array_contains_duplicates.js +2 -1
  29. package/src/core/collection/array/array_copy.d.ts.map +1 -1
  30. package/src/core/collection/array/array_copy.js +23 -0
  31. package/src/core/collection/array/typed/sparse_typed_array_hash.d.ts +2 -2
  32. package/src/core/collection/array/typed/sparse_typed_array_hash.d.ts.map +1 -1
  33. package/src/core/collection/array/typed/sparse_typed_array_hash.js +9 -8
  34. package/src/core/collection/array/typed/uint16_array_hash.d.ts +2 -2
  35. package/src/core/collection/array/typed/uint16_array_hash.js +4 -4
  36. package/src/core/collection/array/typed/uint8_array_hash.d.ts +2 -2
  37. package/src/core/collection/array/typed/uint8_array_hash.js +4 -4
  38. package/src/core/collection/array/weightedRandomFromArray.d.ts +1 -0
  39. package/src/core/collection/array/weightedRandomFromArray.d.ts.map +1 -1
  40. package/src/core/collection/array/weightedRandomFromArray.js +9 -1
  41. package/src/core/collection/heap/BinaryHeap.d.ts.map +1 -1
  42. package/src/core/collection/heap/BinaryHeap.js +4 -0
  43. package/src/core/collection/list/List.d.ts.map +1 -1
  44. package/src/core/collection/list/List.js +4 -2
  45. package/src/core/collection/set/ArraySet.js +1 -1
  46. package/src/core/collection/set/HashSet.d.ts +1 -1
  47. package/src/core/collection/set/HashSet.d.ts.map +1 -1
  48. package/src/core/collection/set/HashSet.js +4 -2
  49. package/src/core/debug/matchers/IsEqual.js +1 -1
  50. package/src/core/debug/matchers/IsIterableContaining.d.ts.map +1 -1
  51. package/src/core/debug/matchers/IsIterableContaining.js +61 -74
  52. package/src/core/events/signal/SignalBinding.js +101 -101
  53. package/src/core/function/extractFunctionBody.js +13 -13
  54. package/src/core/function/objectsEqual.d.ts.map +1 -1
  55. package/src/core/function/objectsEqual.js +15 -14
  56. package/src/core/geom/3d/frustum/frustum3_compute_closest_point.d.ts.map +1 -1
  57. package/src/core/geom/3d/frustum/frustum3_compute_closest_point.js +207 -172
  58. package/src/core/geom/3d/gjk/gjk_epa_penetration.d.ts.map +1 -1
  59. package/src/core/geom/3d/gjk/gjk_epa_penetration.js +5 -4
  60. package/src/core/geom/3d/line/line3_compute_segment_point_distance_eikonal.d.ts.map +1 -1
  61. package/src/core/geom/3d/line/line3_compute_segment_point_distance_eikonal.js +8 -2
  62. package/src/core/geom/3d/triangle/tri3_ray_intersection.d.ts +20 -0
  63. package/src/core/geom/3d/triangle/tri3_ray_intersection.d.ts.map +1 -1
  64. package/src/core/geom/3d/triangle/tri3_ray_intersection.js +182 -0
  65. package/src/core/math/noise/curl_noise_3dt.d.ts.map +1 -1
  66. package/src/core/math/noise/curl_noise_3dt.js +20 -10
  67. package/src/core/math/noise/sdnoise.d.ts +16 -5
  68. package/src/core/math/noise/sdnoise.d.ts.map +1 -1
  69. package/src/core/math/noise/sdnoise.js +43 -9
  70. package/src/core/math/spline/spline3_hermite_nearest_point.d.ts +16 -1
  71. package/src/core/math/spline/spline3_hermite_nearest_point.d.ts.map +1 -1
  72. package/src/core/math/spline/spline3_hermite_nearest_point.js +44 -3
  73. package/src/engine/Engine.d.ts.map +1 -1
  74. package/src/engine/Engine.js +6 -2
  75. package/src/engine/control/first-person/FirstPersonPlayerController.d.ts +9 -0
  76. package/src/engine/control/first-person/FirstPersonPlayerController.d.ts.map +1 -1
  77. package/src/engine/control/first-person/FirstPersonPlayerControllerConfig.d.ts +26 -0
  78. package/src/engine/control/first-person/FirstPersonPlayerControllerConfig.d.ts.map +1 -1
  79. package/src/engine/control/first-person/FirstPersonPlayerControllerConfig.js +2 -0
  80. package/src/engine/control/first-person/abilities/AbilitySet.d.ts.map +1 -1
  81. package/src/engine/control/first-person/abilities/AbilitySet.js +9 -0
  82. package/src/engine/control/first-person/abilities/LedgeGrab.d.ts.map +1 -1
  83. package/src/engine/control/first-person/abilities/LedgeGrab.js +6 -0
  84. package/src/engine/control/first-person/abilities/Slide.d.ts.map +1 -1
  85. package/src/engine/control/first-person/abilities/Slide.js +1 -0
  86. package/src/engine/control/first-person/abilities/WallRun.d.ts +4 -1
  87. package/src/engine/control/first-person/abilities/WallRun.d.ts.map +1 -1
  88. package/src/engine/control/first-person/abilities/WallRun.js +13 -1
  89. package/src/engine/control/first-person/mastery/SlideInitiationTimingEvaluator.d.ts +1 -1
  90. package/src/engine/control/first-person/mastery/SlideInitiationTimingEvaluator.d.ts.map +1 -1
  91. package/src/engine/control/first-person/mastery/SlideInitiationTimingEvaluator.js +6 -5
  92. package/src/engine/control/first-person/mastery/StrideTimingJumpEvaluator.d.ts +3 -3
  93. package/src/engine/control/first-person/mastery/StrideTimingJumpEvaluator.d.ts.map +1 -1
  94. package/src/engine/control/first-person/mastery/StrideTimingJumpEvaluator.js +9 -8
  95. package/src/engine/control/first-person/sensors/FirstPersonSensorsSystem.d.ts.map +1 -1
  96. package/src/engine/control/first-person/sensors/FirstPersonSensorsSystem.js +13 -4
  97. package/src/engine/ecs/EntityManager.d.ts.map +1 -1
  98. package/src/engine/ecs/EntityManager.js +18 -15
  99. package/src/engine/ecs/dynamic_actions/rules/DynamicRuleDescription.d.ts.map +1 -1
  100. package/src/engine/ecs/dynamic_actions/rules/DynamicRuleDescription.js +2 -1
  101. package/src/engine/ecs/dynamic_actions/rules/DynamicRuleDescriptionTable.d.ts.map +1 -1
  102. package/src/engine/ecs/dynamic_actions/rules/DynamicRuleDescriptionTable.js +1 -0
  103. package/src/engine/ecs/fow/FogOfWarRevealerSystem.d.ts.map +1 -1
  104. package/src/engine/ecs/fow/FogOfWarRevealerSystem.js +3 -0
  105. package/src/engine/ecs/parent/EntityNode.js +3 -3
  106. package/src/engine/ecs/speaker/VoiceSystem.d.ts.map +1 -1
  107. package/src/engine/ecs/speaker/VoiceSystem.js +4 -0
  108. package/src/engine/ecs/storage/BinaryBufferDeSerializer.js +5 -5
  109. package/src/engine/ecs/storage/binary/BinarySerializationRegistry.d.ts.map +1 -1
  110. package/src/engine/ecs/storage/binary/BinarySerializationRegistry.js +3 -2
  111. package/src/engine/ecs/storage/binary/object/BinaryObjectSerializationAdapter2.js +1 -1
  112. package/src/engine/ecs/storage/binary/object-v2/BinaryObjectDeSerializer.d.ts.map +1 -1
  113. package/src/engine/ecs/storage/binary/object-v2/BinaryObjectDeSerializer.js +8 -1
  114. package/src/engine/ecs/storage/populateEngineSerializationRegistry.d.ts.map +1 -1
  115. package/src/engine/ecs/storage/populateEngineSerializationRegistry.js +8 -0
  116. package/src/engine/ecs/terrain/ecs/cling/ClingToTerrainSystem.d.ts.map +1 -1
  117. package/src/engine/ecs/terrain/ecs/cling/ClingToTerrainSystem.js +5 -2
  118. package/src/engine/ecs/terrain/ecs/layers/TerrainLayers.d.ts.map +1 -1
  119. package/src/engine/ecs/terrain/ecs/layers/TerrainLayers.js +3 -0
  120. package/src/engine/ecs/terrain/ecs/splat/SplatMapping.d.ts.map +1 -1
  121. package/src/engine/ecs/terrain/ecs/splat/SplatMapping.js +1 -0
  122. package/src/engine/ecs/terrain/overlay/TerrainOverlay.js +1 -1
  123. package/src/engine/ecs/terrain/tiles/TerrainTile.d.ts.map +1 -1
  124. package/src/engine/ecs/terrain/tiles/TerrainTile.js +13 -1
  125. package/src/engine/ecs/terrain/tiles/TerrainTileManager.d.ts.map +1 -1
  126. package/src/engine/ecs/terrain/tiles/TerrainTileManager.js +1 -0
  127. package/src/engine/graphics/ecs/light/LightSerializationAdapter.d.ts.map +1 -1
  128. package/src/engine/graphics/ecs/light/LightSerializationAdapter.js +13 -1
  129. package/src/engine/graphics/ecs/light/LightSerializationUpgrader_0_1.d.ts +5 -0
  130. package/src/engine/graphics/ecs/light/LightSerializationUpgrader_0_1.d.ts.map +1 -0
  131. package/src/engine/graphics/ecs/light/LightSerializationUpgrader_0_1.js +27 -0
  132. package/src/engine/graphics/ecs/water/Water.d.ts +11 -0
  133. package/src/engine/graphics/ecs/water/Water.d.ts.map +1 -1
  134. package/src/engine/graphics/ecs/water/Water.js +17 -0
  135. package/src/engine/graphics/ecs/water/WaterSerializationAdapter.d.ts.map +1 -1
  136. package/src/engine/graphics/ecs/water/WaterSerializationAdapter.js +3 -1
  137. package/src/engine/graphics/ecs/water/WaterSerializationUpgrader_4_5.d.ts +9 -0
  138. package/src/engine/graphics/ecs/water/WaterSerializationUpgrader_4_5.d.ts.map +1 -0
  139. package/src/engine/graphics/ecs/water/WaterSerializationUpgrader_4_5.js +24 -0
  140. package/src/engine/graphics/ecs/water/WaterWaves.d.ts +30 -9
  141. package/src/engine/graphics/ecs/water/WaterWaves.d.ts.map +1 -1
  142. package/src/engine/graphics/ecs/water/WaterWaves.js +41 -9
  143. package/src/engine/graphics/ecs/water/WaterWavesSerializationAdapter.d.ts.map +1 -1
  144. package/src/engine/graphics/ecs/water/WaterWavesSerializationAdapter.js +30 -26
  145. package/src/engine/graphics/ecs/water/WaterWavesSerializationUpgrader_0_1.d.ts +6 -0
  146. package/src/engine/graphics/ecs/water/WaterWavesSerializationUpgrader_0_1.d.ts.map +1 -0
  147. package/src/engine/graphics/ecs/water/WaterWavesSerializationUpgrader_0_1.js +22 -0
  148. package/src/engine/graphics/geometry/buffered/query/bvh32_geometry_raycast.d.ts.map +1 -1
  149. package/src/engine/graphics/geometry/buffered/query/bvh32_geometry_raycast.js +3 -5
  150. package/src/engine/graphics/texture/3d/scs3d_sample_linear3.d.ts +20 -0
  151. package/src/engine/graphics/texture/3d/scs3d_sample_linear3.d.ts.map +1 -1
  152. package/src/engine/graphics/texture/3d/scs3d_sample_linear3.js +36 -0
  153. package/src/engine/graphics3/WaterSystem.d.ts +12 -3
  154. package/src/engine/graphics3/WaterSystem.d.ts.map +1 -1
  155. package/src/engine/graphics3/WaterSystem.js +78 -46
  156. package/src/engine/input/devices/PointerDevice.d.ts.map +1 -1
  157. package/src/engine/input/devices/PointerDevice.js +29 -4
  158. package/src/engine/intelligence/behavior/selector/WeightedRandomBehavior.d.ts +1 -0
  159. package/src/engine/intelligence/behavior/selector/WeightedRandomBehavior.d.ts.map +1 -1
  160. package/src/engine/intelligence/behavior/selector/WeightedRandomBehavior.js +14 -3
  161. package/src/engine/physics/fluid/ecs/FluidObstacleSystem.d.ts +4 -4
  162. package/src/engine/physics/fluid/solver/v3_grid_advect_maccormack_velocity.d.ts.map +1 -1
  163. package/src/engine/physics/fluid/solver/v3_grid_advect_maccormack_velocity.js +12 -3
  164. package/src/engine/physics/fluid/solver/v3_grid_advect_sl_velocity.d.ts.map +1 -1
  165. package/src/engine/physics/fluid/solver/v3_grid_advect_sl_velocity.js +8 -2
  166. package/src/engine/physics/fluid/solver/v3_grid_sample_scalar_masked.d.ts +19 -0
  167. package/src/engine/physics/fluid/solver/v3_grid_sample_scalar_masked.d.ts.map +1 -1
  168. package/src/engine/physics/fluid/solver/v3_grid_sample_scalar_masked.js +41 -2
  169. package/src/engine/physics/fluid/solver/v3_mac_advect_scalar.d.ts.map +1 -1
  170. package/src/engine/physics/fluid/solver/v3_mac_advect_scalar.js +9 -3
  171. package/src/engine/physics/fluid/solver/v3_mac_advect_sl_velocity.d.ts.map +1 -1
  172. package/src/engine/physics/fluid/solver/v3_mac_advect_sl_velocity.js +26 -10
  173. package/src/engine/sound/sopra/definition/clip/RandomContainerAudioClip.d.ts +3 -6
  174. package/src/engine/sound/sopra/definition/clip/RandomContainerAudioClip.d.ts.map +1 -1
  175. package/src/engine/sound/sopra/definition/clip/RandomContainerAudioClip.js +22 -9
  176. package/src/engine/ui/DraggableAspect.d.ts +5 -1
  177. package/src/engine/ui/DraggableAspect.d.ts.map +1 -1
  178. package/src/engine/ui/DraggableAspect.js +61 -4
  179. package/src/format/image/avif/heif/ItemProperty.d.ts +1 -1
  180. package/src/format/image/avif/heif/ItemProperty.js +1 -1
  181. package/src/format/image/png/chunk/png_chunk_decode_iTXt.d.ts.map +1 -1
  182. package/src/format/image/png/chunk/png_chunk_decode_iTXt.js +17 -6
  183. package/src/shade/device/mock/SoftwareGPUDevice.d.ts +2 -4
  184. package/src/shade/device/mock/SoftwareGPUDevice.d.ts.map +1 -1
  185. package/src/shade/device/mock/SoftwareGPUDevice.js +20 -13
  186. package/src/shade/playground/skinned_blas_refit/sweep_views.d.ts.map +1 -1
  187. package/src/shade/playground/skinned_blas_refit/sweep_views.js +2 -1
  188. package/src/shade/playground/water_refraction/README.md +10 -11
  189. package/src/shade/playground/water_refraction/main.js +9 -8
  190. package/src/shade/playground/water_refraction/world.js +1 -1
  191. package/src/shade/playground/water_surface/README.md +43 -0
  192. package/src/shade/playground/water_surface/index.html +30 -0
  193. package/src/shade/playground/water_surface/main.d.ts +2 -0
  194. package/src/shade/playground/water_surface/main.d.ts.map +1 -0
  195. package/src/shade/playground/water_surface/main.js +154 -0
  196. package/src/shade/playground/water_surface/world.d.ts +44 -0
  197. package/src/shade/playground/water_surface/world.d.ts.map +1 -0
  198. package/src/shade/playground/water_surface/world.js +160 -0
  199. package/src/shade/renderer/animation/skinning/GPUMeshSkinningContext.d.ts.map +1 -1
  200. package/src/shade/renderer/animation/skinning/GPUMeshSkinningContext.js +5 -0
  201. package/src/shade/renderer/binding/BufferBinding.js +2 -2
  202. package/src/shade/renderer/buffer/table/GPUTypedTable.d.ts.map +1 -1
  203. package/src/shade/renderer/buffer/table/GPUTypedTable.js +5 -3
  204. package/src/shade/renderer/buffer/table/GPUTypedTableDescriptor.d.ts +10 -3
  205. package/src/shade/renderer/buffer/table/GPUTypedTableDescriptor.d.ts.map +1 -1
  206. package/src/shade/renderer/buffer/table/GPUTypedTableDescriptor.js +17 -9
  207. package/src/shade/renderer/camera/orbital/OrbitalCameraInput.d.ts +3 -0
  208. package/src/shade/renderer/camera/orbital/OrbitalCameraInput.d.ts.map +1 -1
  209. package/src/shade/renderer/camera/orbital/OrbitalCameraInput.js +16 -0
  210. package/src/shade/renderer/camera/orbital/OrbitalCameraRig.d.ts +2 -0
  211. package/src/shade/renderer/camera/orbital/OrbitalCameraRig.d.ts.map +1 -1
  212. package/src/shade/renderer/camera/orbital/OrbitalCameraRig.js +11 -0
  213. package/src/shade/renderer/geometry/meshlet/build/meshoptimizer/geometry_to_meshlets_meshoptimizer.d.ts +1 -1
  214. package/src/shade/renderer/geometry/meshlet/build/meshoptimizer/geometry_to_meshlets_meshoptimizer.d.ts.map +1 -1
  215. package/src/shade/renderer/geometry/meshlet/build/meshoptimizer/geometry_to_meshlets_meshoptimizer.js +9 -3
  216. package/src/shade/renderer/geometry/util/geometry_simplify_redundant_topology.d.ts.map +1 -1
  217. package/src/shade/renderer/geometry/util/geometry_simplify_redundant_topology.js +2 -2
  218. package/src/shade/renderer/geometry/virtual/format/vgeo_validate_container.d.ts.map +1 -1
  219. package/src/shade/renderer/geometry/virtual/format/vgeo_validate_container.js +85 -0
  220. package/src/shade/renderer/geometry/virtual/runtime/GPUVirtualGeometryRuntime.d.ts.map +1 -1
  221. package/src/shade/renderer/geometry/virtual/runtime/GPUVirtualGeometryRuntime.js +12 -6
  222. package/src/shade/renderer/geometry/virtual/runtime/VGeoPageFetcher.d.ts.map +1 -1
  223. package/src/shade/renderer/geometry/virtual/runtime/VGeoPageFetcher.js +7 -0
  224. package/src/shade/renderer/geometry/virtual/runtime/VGeoRuntimeTables.d.ts.map +1 -1
  225. package/src/shade/renderer/geometry/virtual/runtime/VGeoRuntimeTables.js +3 -1
  226. package/src/shade/renderer/loader/gltf/tiny-gltf.d.ts +1 -1
  227. package/src/shade/renderer/scene/SCENE_DATABASE_SPEC.js +2 -1
  228. package/src/shade/renderer/shader/chunk/math/fft/chunk_fft128_inverse.d.ts +13 -0
  229. package/src/shade/renderer/shader/chunk/math/fft/chunk_fft128_inverse.d.ts.map +1 -0
  230. package/src/shade/renderer/shader/chunk/math/fft/chunk_fft128_inverse.js +42 -0
  231. package/src/shade/renderer/shader/chunk/math/fft/chunk_fft128x4_inverse_workgroup.d.ts +15 -0
  232. package/src/shade/renderer/shader/chunk/math/fft/chunk_fft128x4_inverse_workgroup.d.ts.map +1 -0
  233. package/src/shade/renderer/shader/chunk/math/fft/chunk_fft128x4_inverse_workgroup.js +39 -0
  234. package/src/shade/renderer/shader/resource/ShaderResourceSetDescriptor.d.ts.map +1 -1
  235. package/src/shade/renderer/shader/resource/ShaderResourceSetDescriptor.js +2 -0
  236. package/src/shade/renderer/water/GPUWaterRenderer.d.ts +15 -0
  237. package/src/shade/renderer/water/GPUWaterRenderer.d.ts.map +1 -1
  238. package/src/shade/renderer/water/GPUWaterRenderer.js +110 -30
  239. package/src/shade/renderer/water/medium/GPUWaterBodies.d.ts +16 -8
  240. package/src/shade/renderer/water/medium/GPUWaterBodies.d.ts.map +1 -1
  241. package/src/shade/renderer/water/medium/GPUWaterBodies.js +31 -26
  242. package/src/shade/renderer/water/medium/shader_water_meshlets.d.ts +0 -1
  243. package/src/shade/renderer/water/medium/shader_water_meshlets.d.ts.map +1 -1
  244. package/src/shade/renderer/water/medium/shader_water_meshlets.js +1 -39
  245. package/src/shade/renderer/water/shader_water.d.ts +0 -1
  246. package/src/shade/renderer/water/shader_water.d.ts.map +1 -1
  247. package/src/shade/renderer/water/shader_water.js +201 -72
  248. package/src/shade/renderer/water/surface/GPUWaterSurface.d.ts +70 -0
  249. package/src/shade/renderer/water/surface/GPUWaterSurface.d.ts.map +1 -0
  250. package/src/shade/renderer/water/surface/GPUWaterSurface.js +199 -0
  251. package/src/shade/renderer/water/surface/WATER_WAVE_RECORD_STRUCT.d.ts +5 -2
  252. package/src/shade/renderer/water/surface/WATER_WAVE_RECORD_STRUCT.d.ts.map +1 -1
  253. package/src/shade/renderer/water/surface/WATER_WAVE_RECORD_STRUCT.js +32 -12
  254. package/src/shade/renderer/water/surface/chunk_water_surface_sample.d.ts +22 -0
  255. package/src/shade/renderer/water/surface/chunk_water_surface_sample.d.ts.map +1 -0
  256. package/src/shade/renderer/water/surface/chunk_water_surface_sample.js +217 -0
  257. package/src/shade/renderer/water/surface/graph_water_tessellation.d.ts +65 -11
  258. package/src/shade/renderer/water/surface/graph_water_tessellation.d.ts.map +1 -1
  259. package/src/shade/renderer/water/surface/graph_water_tessellation.js +163 -28
  260. package/src/shade/renderer/water/surface/lod/WATER_LOD.d.ts +51 -0
  261. package/src/shade/renderer/water/surface/lod/WATER_LOD.d.ts.map +1 -0
  262. package/src/shade/renderer/water/surface/lod/WATER_LOD.js +95 -0
  263. package/src/shade/renderer/water/surface/lod/chunk_water_lod.d.ts +10 -0
  264. package/src/shade/renderer/water/surface/lod/chunk_water_lod.d.ts.map +1 -0
  265. package/src/shade/renderer/water/surface/lod/chunk_water_lod.js +127 -0
  266. package/src/shade/renderer/water/surface/lod/chunk_water_lod_cell.d.ts +17 -0
  267. package/src/shade/renderer/water/surface/lod/chunk_water_lod_cell.d.ts.map +1 -0
  268. package/src/shade/renderer/water/surface/lod/chunk_water_lod_cell.js +246 -0
  269. package/src/shade/renderer/water/surface/lod/shader_water_lod.d.ts +118 -0
  270. package/src/shade/renderer/water/surface/lod/shader_water_lod.d.ts.map +1 -0
  271. package/src/shade/renderer/water/surface/lod/shader_water_lod.js +727 -0
  272. package/src/shade/renderer/water/surface/particles/GPUWaterParticles.d.ts +60 -0
  273. package/src/shade/renderer/water/surface/particles/GPUWaterParticles.d.ts.map +1 -0
  274. package/src/shade/renderer/water/surface/particles/GPUWaterParticles.js +228 -0
  275. package/src/shade/renderer/water/surface/particles/WATER_PARTICLE_STRUCT.d.ts +17 -0
  276. package/src/shade/renderer/water/surface/particles/WATER_PARTICLE_STRUCT.d.ts.map +1 -0
  277. package/src/shade/renderer/water/surface/particles/WATER_PARTICLE_STRUCT.js +49 -0
  278. package/src/shade/renderer/water/surface/particles/chunk_water_particle.d.ts +22 -0
  279. package/src/shade/renderer/water/surface/particles/chunk_water_particle.d.ts.map +1 -0
  280. package/src/shade/renderer/water/surface/particles/chunk_water_particle.js +143 -0
  281. package/src/shade/renderer/water/surface/particles/chunk_water_particle_step.d.ts +15 -0
  282. package/src/shade/renderer/water/surface/particles/chunk_water_particle_step.d.ts.map +1 -0
  283. package/src/shade/renderer/water/surface/particles/chunk_water_particle_step.js +121 -0
  284. package/src/shade/renderer/water/surface/particles/shader_water_particles.d.ts +83 -0
  285. package/src/shade/renderer/water/surface/particles/shader_water_particles.d.ts.map +1 -0
  286. package/src/shade/renderer/water/surface/particles/shader_water_particles.js +502 -0
  287. package/src/shade/renderer/water/surface/shader_water_cull.d.ts +42 -0
  288. package/src/shade/renderer/water/surface/shader_water_cull.d.ts.map +1 -0
  289. package/src/shade/renderer/water/surface/shader_water_cull.js +269 -0
  290. package/src/shade/renderer/water/surface/shader_water_waves_combine.d.ts +15 -0
  291. package/src/shade/renderer/water/surface/shader_water_waves_combine.d.ts.map +1 -0
  292. package/src/shade/renderer/water/surface/shader_water_waves_combine.js +73 -0
  293. package/src/shade/renderer/water/surface/shader_water_waves_derive.d.ts +11 -0
  294. package/src/shade/renderer/water/surface/shader_water_waves_derive.d.ts.map +1 -0
  295. package/src/shade/renderer/water/surface/shader_water_waves_derive.js +78 -0
  296. package/src/shade/renderer/water/surface/spectrum/GPUWaterSpectrum.d.ts +35 -0
  297. package/src/shade/renderer/water/surface/spectrum/GPUWaterSpectrum.d.ts.map +1 -0
  298. package/src/shade/renderer/water/surface/spectrum/GPUWaterSpectrum.js +103 -0
  299. package/src/shade/renderer/water/surface/spectrum/WATER_BAND_STATE.d.ts +22 -0
  300. package/src/shade/renderer/water/surface/spectrum/WATER_BAND_STATE.d.ts.map +1 -0
  301. package/src/shade/renderer/water/surface/spectrum/WATER_BAND_STATE.js +57 -0
  302. package/src/shade/renderer/water/surface/spectrum/WATER_SPECTRUM.d.ts +22 -0
  303. package/src/shade/renderer/water/surface/spectrum/WATER_SPECTRUM.d.ts.map +1 -0
  304. package/src/shade/renderer/water/surface/spectrum/WATER_SPECTRUM.js +25 -0
  305. package/src/shade/renderer/water/surface/spectrum/chunk_water_jonswap.d.ts +14 -0
  306. package/src/shade/renderer/water/surface/spectrum/chunk_water_jonswap.d.ts.map +1 -0
  307. package/src/shade/renderer/water/surface/spectrum/chunk_water_jonswap.js +48 -0
  308. package/src/shade/renderer/water/surface/spectrum/chunk_water_spectrum.d.ts +23 -0
  309. package/src/shade/renderer/water/surface/spectrum/chunk_water_spectrum.d.ts.map +1 -0
  310. package/src/shade/renderer/water/surface/spectrum/chunk_water_spectrum.js +169 -0
  311. package/src/shade/renderer/water/surface/spectrum/shader_water_spectrum.d.ts +26 -0
  312. package/src/shade/renderer/water/surface/spectrum/shader_water_spectrum.d.ts.map +1 -0
  313. package/src/shade/renderer/water/surface/spectrum/shader_water_spectrum.js +161 -0
  314. package/src/shade/wgsl/emulator/WGSLJavaScriptCompiler.d.ts.map +1 -1
  315. package/src/shade/wgsl/emulator/WGSLJavaScriptCompiler.js +18 -6
  316. package/src/shade/wgsl/emulator/WGSLLanguageCore.d.ts.map +1 -1
  317. package/src/shade/wgsl/emulator/WGSLLanguageCore.js +11 -3
  318. package/src/core/geom/2d/polygon/polygon2_triangulate.corpus.d.ts +0 -28
  319. package/src/core/geom/2d/polygon/polygon2_triangulate.corpus.d.ts.map +0 -1
  320. package/src/core/geom/2d/polygon/polygon2_triangulate.corpus.js +0 -86
  321. package/src/engine/ecs/storage/binary/object-v2/serializerTestHarness.d.ts +0 -29
  322. package/src/engine/ecs/storage/binary/object-v2/serializerTestHarness.d.ts.map +0 -1
  323. package/src/engine/ecs/storage/binary/object-v2/serializerTestHarness.js +0 -44
  324. package/src/shade/renderer/water/medium/shader_water_bodies_derive.d.ts +0 -4
  325. package/src/shade/renderer/water/medium/shader_water_bodies_derive.d.ts.map +0 -1
  326. package/src/shade/renderer/water/medium/shader_water_bodies_derive.js +0 -32
  327. package/src/shade/renderer/water/surface/GPUWaterWaveSimulation.d.ts +0 -25
  328. package/src/shade/renderer/water/surface/GPUWaterWaveSimulation.d.ts.map +0 -1
  329. package/src/shade/renderer/water/surface/GPUWaterWaveSimulation.js +0 -128
  330. package/src/shade/renderer/water/surface/chunk_water_tessellation.d.ts +0 -9
  331. package/src/shade/renderer/water/surface/chunk_water_tessellation.d.ts.map +0 -1
  332. package/src/shade/renderer/water/surface/chunk_water_tessellation.js +0 -144
  333. package/src/shade/renderer/water/surface/chunk_water_wave.d.ts +0 -13
  334. package/src/shade/renderer/water/surface/chunk_water_wave.d.ts.map +0 -1
  335. package/src/shade/renderer/water/surface/chunk_water_wave.js +0 -40
  336. package/src/shade/renderer/water/surface/shader_water_tiles.d.ts +0 -4
  337. package/src/shade/renderer/water/surface/shader_water_tiles.d.ts.map +0 -1
  338. package/src/shade/renderer/water/surface/shader_water_tiles.js +0 -123
  339. package/src/shade/renderer/water/surface/shader_water_wave_batch.d.ts +0 -6
  340. package/src/shade/renderer/water/surface/shader_water_wave_batch.d.ts.map +0 -1
  341. package/src/shade/renderer/water/surface/shader_water_wave_batch.js +0 -85
  342. package/src/shade/renderer/water/surface/shader_water_wave_domain.d.ts +0 -6
  343. package/src/shade/renderer/water/surface/shader_water_wave_domain.d.ts.map +0 -1
  344. package/src/shade/renderer/water/surface/shader_water_wave_domain.js +0 -83
@@ -22,37 +22,37 @@ the cost of a miss in your system (a disk/network miss dwarfs a few hundred ns;
22
22
 
23
23
  ## Running
24
24
 
25
- Each benchmark is a **self-executing spec**: a single `<name>.spec.js` that is *both* a runnable Node
26
- benchmark and a Jest spec. The measurement **only ever runs under plain `node`** — never in-process under
25
+ Each benchmark is a self-contained `<name>.spec.js` with a skipped test entry and an explicit manual Node
26
+ entry. The measurement **only ever runs under plain `node`** — never in-process under
27
27
  Jest, because Jest's babel transform badly distorts the timings (see *Why not measure under Jest* below).
28
28
  The files are stripped from the published npm package by the `*.spec.js` rule.
29
29
 
30
- **To get numbers — run it directly with `node`, from the repo root:**
30
+ **To get numbers — run it directly with `node`, from `packages/meep-engine`:**
31
31
 
32
32
  ```bash
33
- node src/core/cache/wtinylfu/benchmark/<name>.spec.js
33
+ node src/core/cache/wtinylfu/benchmark/<name>.spec.js --benchmark
34
34
  ```
35
35
 
36
36
  where `<name>` is one of: `hitRate`, `fillDrain`, `readAll`, `continuousPut`, `mixed`, `latency`, `scaling`,
37
37
  `memory`.
38
38
 
39
- **Under Jest** each file is a `describe.skip`, so `npx jest` collects but skips them (zero CI cost). Un-skip
40
- one (flip `describe.skip` → `describe`) and Jest will **spawn a clean `node` child on the file** and check the
41
- output is sane — you get the same pristine numbers, never the transformed ones.
39
+ The files remain `describe.skip` under the test runner. Vitest's `--mode all` includes them in collection;
40
+ un-skipping one makes its test spawn a native Node child and check that the report contains finite
41
+ measurements. Importing a file or invoking it without `--benchmark` performs no workload setup.
42
42
 
43
- Two flags (for the `node` invocation):
43
+ Options for the manual `node` invocation:
44
44
 
45
45
  - **`--expose-gc`** (a Node flag, goes *before* the script path): lets a benchmark force GC between trials for
46
46
  cleaner numbers. Optional for most; **required** for `memory` (it refuses to run without it). *(When run via
47
47
  Jest, the child is always spawned with `--expose-gc`.)*
48
48
  ```bash
49
- node --expose-gc src/core/cache/wtinylfu/benchmark/fillDrain.spec.js
49
+ node --expose-gc src/core/cache/wtinylfu/benchmark/fillDrain.spec.js --benchmark
50
50
  ```
51
51
  - **`HASH=int`** (an env var): the **isolated-hash toggle** — use integer keys + an identity hash instead of
52
52
  string keys + `computeStringHash`, to strip string-hashing cost and see pure-policy overhead. Works on
53
53
  **every** benchmark.
54
54
  ```bash
55
- HASH=int node --expose-gc src/core/cache/wtinylfu/benchmark/readAll.spec.js
55
+ HASH=int node --expose-gc src/core/cache/wtinylfu/benchmark/readAll.spec.js --benchmark
56
56
  ```
57
57
 
58
58
  All workloads are **seeded**, so runs are reproducible. Both caches are always built at **matched capacity**
@@ -69,15 +69,15 @@ run it, read it without chasing imports). Every file follows the same skeleton:
69
69
  2. CONFIG the knobs: CAPACITY / WARMUP / TRIALS / SEED
70
70
  3. SCAFFOLDING inlined: clock, rng, matched-capacity factories, measureInterleaved, any workload
71
71
  (top-level — pure definitions, safe when Jest imports the file)
72
- if (under Jest) → spawn a clean `node` on this file + assert the output is sane
73
- else → the actual benchmark:
72
+ if (under tests) → skipped native Node child + finite report checks
73
+ if (manual entry with --benchmark) → runBenchmark():
74
74
  4. WORKLOAD the setup + the timed body (the "arrange")
75
75
  5. MEASURE measureInterleaved([LRU, W-TinyLFU], {...}) (the "act")
76
76
  6. REPORT formatting + console.log (the "assert" analog — reports, no pass/fail)
77
77
  ```
78
78
 
79
- The `if (typeof describe === "function")` split is what keeps the measurement out of Jest's transform: under
80
- Jest only the spawn-branch runs; under `node` only the `else` (measurement) branch runs.
79
+ The `if (typeof describe === "function")` split keeps measurements in the native child. Workload setup is
80
+ inside `runBenchmark()`, called only by the explicit main-file `--benchmark` entry.
81
81
 
82
82
  A benchmark **reports** numbers; it does not **assert** pass/fail. That's why the measurement always runs
83
83
  under plain `node` — the Jest side only launches it and checks the output isn't empty.
@@ -1 +1 @@
1
- {"version":3,"file":"RingBuffer.d.ts","sourceRoot":"","sources":["../../../../src/core/collection/RingBuffer.js"],"names":[],"mappings":"AAGA;;;;;GAKG;AACH;IAmBI;;OAEG;IACH,kBAFW,MAAM,EAkBhB;IArCD;;;OAGG;IACH,MAFU,MAAM,CAEP;IAET;;;OAGG;IACH,MAFU,MAAM,CAEP;IAET;;;OAGG;IACH,OAFU,MAAM,CAEN;IAUN;;;OAGG;IACH,MAFU,MAAM,CAEA;IAEhB;;;OAGG;IACH,MAFU,CAAC,EAAE,CAEc;IAG/B;;;OAGG;IACH,iBAFW,MAAM,QAwBhB;IAED;;;OAGG;IACH,WAFY,CAAC,CAKZ;IAED;;;;OAIG;IACH,oBAHW,MAAM,GACJ,CAAC,CAYb;IAED,cAIC;IAED;;;OAGG;IACH,cAFW,CAAC,QAuBX;IAED;;;OAGG;IACH,SAFa,CAAC,GAAC,SAAS,CAcvB;IAED;;;OAGG;IACH,4BAFW,MAAM,QA8BhB;IAED;;;;;OAKG;IACH,2BAJoB,CAAC,KAAE,OAAO,kBAEjB,CAAC,GAAC,SAAS,CAsBvB;IAED;;;;OAIG;IACH,wBAHoB,CAAC,+BAmBpB;IAED;;;;OAIG;IACH,gBAHW,CAAC,GACC,OAAO,CAgBnB;CACJ"}
1
+ {"version":3,"file":"RingBuffer.d.ts","sourceRoot":"","sources":["../../../../src/core/collection/RingBuffer.js"],"names":[],"mappings":"AAGA;;;;;GAKG;AACH;IAmBI;;OAEG;IACH,kBAFW,MAAM,EAkBhB;IArCD;;;OAGG;IACH,MAFU,MAAM,CAEP;IAET;;;OAGG;IACH,MAFU,MAAM,CAEP;IAET;;;OAGG;IACH,OAFU,MAAM,CAEN;IAUN;;;OAGG;IACH,MAFU,MAAM,CAEA;IAEhB;;;OAGG;IACH,MAFU,CAAC,EAAE,CAEc;IAG/B;;;OAGG;IACH,iBAFW,MAAM,QAwBhB;IAED;;;OAGG;IACH,WAFY,CAAC,CAKZ;IAED;;;;OAIG;IACH,oBAHW,MAAM,GACJ,CAAC,CAgBb;IAED,cAIC;IAED;;;OAGG;IACH,cAFW,CAAC,QAuBX;IAED;;;OAGG;IACH,SAFa,CAAC,GAAC,SAAS,CAcvB;IAED;;;OAGG;IACH,4BAFW,MAAM,QA8BhB;IAED;;;;;OAKG;IACH,2BAJoB,CAAC,KAAE,OAAO,kBAEjB,CAAC,GAAC,SAAS,CAsBvB;IAED;;;;OAIG;IACH,wBAHoB,CAAC,+BAmBpB;IAED;;;;OAIG;IACH,gBAHW,CAAC,GACC,OAAO,CAgBnB;CACJ"}
@@ -92,6 +92,10 @@ export class RingBuffer {
92
92
  getFromHead(offset) {
93
93
  assert.isNonNegativeInteger(offset, 'offset');
94
94
 
95
+ if (offset >= this.count) {
96
+ return undefined;
97
+ }
98
+
95
99
  let i = this.head - (offset + 1);
96
100
 
97
101
  while (i < 0) {
@@ -1 +1 @@
1
- {"version":3,"file":"array_contains_duplicates.d.ts","sourceRoot":"","sources":["../../../../../src/core/collection/array/array_contains_duplicates.js"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,wEAJW,MAAM,cACN,MAAM,GACL,OAAO,CAuBlB"}
1
+ {"version":3,"file":"array_contains_duplicates.d.ts","sourceRoot":"","sources":["../../../../../src/core/collection/array/array_contains_duplicates.js"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,wEAJW,MAAM,cACN,MAAM,GACL,OAAO,CAwBlB"}
@@ -19,7 +19,8 @@ export function array_contains_duplicates(
19
19
  const element = source[k];
20
20
 
21
21
  // look for future occurrences of the same element
22
- if (source.indexOf(element, k + 1) !== -1) {
22
+ const match = source.indexOf(element, k + 1);
23
+ if (match !== -1 && match <= end_index) {
23
24
  return true;
24
25
  }
25
26
 
@@ -1 +1 @@
1
- {"version":3,"file":"array_copy.d.ts","sourceRoot":"","sources":["../../../../../src/core/collection/array/array_copy.js"],"names":[],"mappings":"AAEA;;;;;;;;;GASG;AACH,4DALW,MAAM,0CAEN,MAAM,UACN,MAAM,QAqBhB"}
1
+ {"version":3,"file":"array_copy.d.ts","sourceRoot":"","sources":["../../../../../src/core/collection/array/array_copy.js"],"names":[],"mappings":"AAEA;;;;;;;;;GASG;AACH,4DALW,MAAM,0CAEN,MAAM,UACN,MAAM,QA4ChB"}
@@ -21,6 +21,29 @@ export function array_copy(
21
21
  assert.isNonNegativeInteger(destination_position, 'destination_position');
22
22
  assert.isNonNegativeInteger(length, 'length');
23
23
 
24
+ if (ArrayBuffer.isView(source)
25
+ && ArrayBuffer.isView(destination)
26
+ && source.buffer === destination.buffer
27
+ && source.BYTES_PER_ELEMENT !== undefined
28
+ && destination.BYTES_PER_ELEMENT !== undefined) {
29
+ const source_start = source.byteOffset + source_position * source.BYTES_PER_ELEMENT;
30
+ const destination_start = destination.byteOffset + destination_position * destination.BYTES_PER_ELEMENT;
31
+ if (source_start < destination_start + length * destination.BYTES_PER_ELEMENT
32
+ && destination_start < source_start + length * source.BYTES_PER_ELEMENT) {
33
+ destination.set(source.subarray(source_position, source_position + length), destination_position);
34
+ return;
35
+ }
36
+ }
37
+
38
+ if (source === destination
39
+ && destination_position > source_position
40
+ && destination_position < source_position + length) {
41
+ for (let k = length - 1; k >= 0; k--) {
42
+ destination[destination_position + k] = source[source_position + k];
43
+ }
44
+ return;
45
+ }
46
+
24
47
  let i, j, k;
25
48
 
26
49
  for (k = 0; k < length; k++) {
@@ -1,8 +1,8 @@
1
1
  /**
2
2
  *
3
3
  * @param {Uint32Array} array
4
- * @param {number} offset
5
- * @param {number} length
4
+ * @param {number} offset first index to hash
5
+ * @param {number} length exclusive stopping index
6
6
  * @param {number} [sample_limit]
7
7
  * @returns {number}
8
8
  */
@@ -1 +1 @@
1
- {"version":3,"file":"sparse_typed_array_hash.d.ts","sourceRoot":"","sources":["../../../../../../src/core/collection/array/typed/sparse_typed_array_hash.js"],"names":[],"mappings":"AAIA;;;;;;;GAOG;AACH,+CANW,WAAW,UACX,MAAM,UACN,MAAM,iBACN,MAAM,GACJ,MAAM,CAelB"}
1
+ {"version":3,"file":"sparse_typed_array_hash.d.ts","sourceRoot":"","sources":["../../../../../../src/core/collection/array/typed/sparse_typed_array_hash.js"],"names":[],"mappings":"AAIA;;;;;;;GAOG;AACH,+CANW,WAAW,UACX,MAAM,UACN,MAAM,iBACN,MAAM,GACJ,MAAM,CAgBlB"}
@@ -5,22 +5,23 @@ import { computeStridedArrayHash } from "../computeStridedArrayHash.js";
5
5
  /**
6
6
  *
7
7
  * @param {Uint32Array} array
8
- * @param {number} offset
9
- * @param {number} length
8
+ * @param {number} offset first index to hash
9
+ * @param {number} length exclusive stopping index
10
10
  * @param {number} [sample_limit]
11
11
  * @returns {number}
12
12
  */
13
13
  export function sparse_typed_array_hash(array, offset, length, sample_limit = 31) {
14
- // limit hash evaluation to first 1k of the data to random memory access and keep CPU cache usage more coherent
15
- const hash_evaluation_length = min2(length, 1024);
14
+ // Limit evaluation to the first 1k elements of the selected range.
15
+ const hash_evaluation_span = min2(length - offset, 1024);
16
+ const hash_evaluation_end = offset + hash_evaluation_span;
16
17
 
17
- // compute stride so that we don't have to iterate over the entire buffer, instead picking at most X(509) values to consider
18
- const stride = Math.max(1, Math.ceil(hash_evaluation_length / sample_limit));
18
+ // Pick at most sample_limit values from that selected span.
19
+ const stride = Math.max(1, Math.ceil(hash_evaluation_span / sample_limit));
19
20
 
20
21
  // TODO implement fast dedicated float and int paths
21
22
 
22
23
  return computeStridedArrayHash(
23
- array, 0, hash_evaluation_length, stride,
24
+ array, offset, hash_evaluation_end, stride,
24
25
  computeHashFloat
25
26
  );
26
- }
27
+ }
@@ -1,8 +1,8 @@
1
1
  /**
2
2
  *
3
3
  * @param {Uint16Array|Int16Array} array
4
- * @param {number} offset
5
- * @param {number} length
4
+ * @param {number} offset first index to hash
5
+ * @param {number} length exclusive stopping index
6
6
  * @return {number}
7
7
  */
8
8
  export function uint16_array_hash(array: Uint16Array | Int16Array, offset: number, length: number): number;
@@ -1,8 +1,8 @@
1
1
  /**
2
2
  *
3
3
  * @param {Uint16Array|Int16Array} array
4
- * @param {number} offset
5
- * @param {number} length
4
+ * @param {number} offset first index to hash
5
+ * @param {number} length exclusive stopping index
6
6
  * @return {number}
7
7
  */
8
8
  export function uint16_array_hash(array, offset, length) {
@@ -10,7 +10,7 @@ export function uint16_array_hash(array, offset, length) {
10
10
 
11
11
  let i = offset;
12
12
 
13
- if ((length & 1) !== 0) {
13
+ if (((length - offset) & 1) !== 0) {
14
14
  hash = (hash << 5) - hash + array[i++];
15
15
  }
16
16
 
@@ -26,4 +26,4 @@ export function uint16_array_hash(array, offset, length) {
26
26
  }
27
27
 
28
28
  return hash;
29
- }
29
+ }
@@ -1,8 +1,8 @@
1
1
  /**
2
2
  *
3
3
  * @param {Uint8Array|Int8Array} array
4
- * @param {number} offset
5
- * @param {number} length
4
+ * @param {number} offset first index to hash
5
+ * @param {number} length exclusive stopping index
6
6
  * @return {number}
7
7
  */
8
8
  export function uint8_array_hash(array: Uint8Array | Int8Array, offset: number, length: number): number;
@@ -1,8 +1,8 @@
1
1
  /**
2
2
  *
3
3
  * @param {Uint8Array|Int8Array} array
4
- * @param {number} offset
5
- * @param {number} length
4
+ * @param {number} offset first index to hash
5
+ * @param {number} length exclusive stopping index
6
6
  * @return {number}
7
7
  */
8
8
  export function uint8_array_hash(array, offset, length) {
@@ -10,7 +10,7 @@ export function uint8_array_hash(array, offset, length) {
10
10
 
11
11
  let i = offset;
12
12
 
13
- const overflow = length & 3;
13
+ const overflow = (length - offset) & 3;
14
14
 
15
15
  for (; i < offset + overflow; i++) {
16
16
  hash = (hash << 5) - hash + array[i];
@@ -33,4 +33,4 @@ export function uint8_array_hash(array, offset, length) {
33
33
  }
34
34
 
35
35
  return hash;
36
- }
36
+ }
@@ -5,6 +5,7 @@
5
5
  * @param {function(T):number} weight
6
6
  * @param {*} [weightContext]
7
7
  * @param {number} [length]
8
+ * @description Returns undefined when the selected prefix has no positive weight.
8
9
  * @returns {T|undefined}
9
10
  */
10
11
  export function weightedRandomFromArray<T>(array: T[], random: Function, weight: (arg0: T) => number, weightContext?: any, length?: number): T;
@@ -1 +1 @@
1
- {"version":3,"file":"weightedRandomFromArray.d.ts","sourceRoot":"","sources":["../../../../../src/core/collection/array/weightedRandomFromArray.js"],"names":[],"mappings":"AAWA;;;;;;;;GAQG;AACH,8FALuB,MAAM,gCAElB,MAAM,KAiChB"}
1
+ {"version":3,"file":"weightedRandomFromArray.d.ts","sourceRoot":"","sources":["../../../../../src/core/collection/array/weightedRandomFromArray.js"],"names":[],"mappings":"AAWA;;;;;;;;;GASG;AACH,8FANuB,MAAM,gCAElB,MAAM,KAyChB"}
@@ -16,6 +16,7 @@ const scratch_weights = [];
16
16
  * @param {function(T):number} weight
17
17
  * @param {*} [weightContext]
18
18
  * @param {number} [length]
19
+ * @description Returns undefined when the selected prefix has no positive weight.
19
20
  * @returns {T|undefined}
20
21
  */
21
22
  export function weightedRandomFromArray(array, random, weight, weightContext, length = array.length) {
@@ -43,9 +44,16 @@ export function weightedRandomFromArray(array, random, weight, weightContext, le
43
44
  scratch_weights[i] = weight_total;
44
45
  }
45
46
 
47
+ if (weight_total === 0) {
48
+ return undefined;
49
+ }
50
+
46
51
  const target_weight = random() * weight_total;
47
52
 
48
- const index = binarySearchHighIndex(scratch_weights, target_weight, number_compare_ascending, 0, length - 1);
53
+ let index = binarySearchHighIndex(scratch_weights, target_weight, number_compare_ascending, 0, length - 1);
54
+ while (index < length && scratch_weights[index] <= target_weight) {
55
+ index++;
56
+ }
49
57
 
50
58
  return array[index];
51
59
  }
@@ -1 +1 @@
1
- {"version":3,"file":"BinaryHeap.d.ts","sourceRoot":"","sources":["../../../../../src/core/collection/heap/BinaryHeap.js"],"names":[],"mappings":";AAEA;;;;;;;;;GASG;AACH;IAaI;;;;OAIG;IACH,6CAHsB,MAAM,EAa3B;IA3BD;;;OAGG;IACH,aAAU;IAEV;;;OAGG;IACH,eAAW;IAWP;;;OAGG;IACH,8BAFuB,MAAM,CAEU;IAI3C;;;OAGG;IACH,iBAkCC;IAED;;;OAGG;IACH,mBAmEC;IAED;;;OAGG;IACH,OAFY,CAAC,CA0BZ;IAED;;;OAGG;IACH,QAFa,CAAC,GAAC,SAAS,CAIvB;IAED;;;;OAIG;IACH,aAHW,CAAC,GACC,OAAO,CAYnB;IAED;;;OAGG;IACH,iBAFW,MAAM,QAehB;IAED;;OAEG;IACH,cAGC;IAED;;;;OAIG;IACH,eAHW,CAAC,GACC,OAAO,CAKnB;IAED;;;OAGG;IACH,WAFa,OAAO,CAInB;IAED;;;OAGG;IACH,QAFa,MAAM,CAIlB;IAED;;;;OAIG;IACH,yBAHW,CAAC,GACC,OAAO,CAanB;IAED;;;OAGG;IACH,SAFW,CAAC,QAUX;IAGL;;;;OAIG;IACH,uBAFU,OAAO,CAEgB;CAPhC"}
1
+ {"version":3,"file":"BinaryHeap.d.ts","sourceRoot":"","sources":["../../../../../src/core/collection/heap/BinaryHeap.js"],"names":[],"mappings":";AAEA;;;;;;;;;GASG;AACH;IAaI;;;;OAIG;IACH,6CAHsB,MAAM,EAa3B;IA3BD;;;OAGG;IACH,aAAU;IAEV;;;OAGG;IACH,eAAW;IAWP;;;OAGG;IACH,8BAFuB,MAAM,CAEU;IAI3C;;;OAGG;IACH,iBAkCC;IAED;;;OAGG;IACH,mBAmEC;IAED;;;OAGG;IACH,OAFY,CAAC,CA8BZ;IAED;;;OAGG;IACH,QAFa,CAAC,GAAC,SAAS,CAIvB;IAED;;;;OAIG;IACH,aAHW,CAAC,GACC,OAAO,CAYnB;IAED;;;OAGG;IACH,iBAFW,MAAM,QAehB;IAED;;OAEG;IACH,cAGC;IAED;;;;OAIG;IACH,eAHW,CAAC,GACC,OAAO,CAKnB;IAED;;;OAGG;IACH,WAFa,OAAO,CAInB;IAED;;;OAGG;IACH,QAFa,MAAM,CAIlB;IAED;;;;OAIG;IACH,yBAHW,CAAC,GACC,OAAO,CAanB;IAED;;;OAGG;IACH,SAFW,CAAC,QAUX;IAGL;;;;OAIG;IACH,uBAFU,OAAO,CAEgB;CAPhC"}
@@ -159,6 +159,10 @@ class BinaryHeap {
159
159
  */
160
160
  pop() {
161
161
 
162
+ if (this.length === 0) {
163
+ return undefined;
164
+ }
165
+
162
166
  this.length--;
163
167
 
164
168
  const new_length = this.length;
@@ -1 +1 @@
1
- {"version":3,"file":"List.d.ts","sourceRoot":"","sources":["../../../../../src/core/collection/list/List.js"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"List.d.ts","sourceRoot":"","sources":["../../../../../src/core/collection/list/List.js"],"names":[],"mappings":"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"}
@@ -389,7 +389,7 @@ class List {
389
389
  * @return {boolean}
390
390
  */
391
391
  removeOneOf(value) {
392
- if (typeof value === "object" && typeof value.equals === "function") {
392
+ if (value !== null && typeof value === "object" && typeof value.equals === "function") {
393
393
  return this.removeOneIf(conditionEqualsViaMethod, value);
394
394
  } else {
395
395
  return this.removeOneIf(conditionEqualsStrict, value);
@@ -973,7 +973,9 @@ class List {
973
973
  continue;
974
974
  }
975
975
 
976
- if (typeof a === "object" && typeof b === "object" && typeof a.equals === "function" && a.equals(b)) {
976
+ if (a !== null && b !== null
977
+ && typeof a === "object" && typeof b === "object"
978
+ && typeof a.equals === "function" && a.equals(b)) {
977
979
  //test via "equals" method
978
980
  continue;
979
981
  }
@@ -109,7 +109,7 @@ class ArraySet {
109
109
  */
110
110
  clear() {
111
111
  while (!this.isEmpty()) {
112
- this.remove(this.data[0]);
112
+ this.__removeByIndex(0, this.data[0]);
113
113
  }
114
114
  }
115
115
 
@@ -40,7 +40,7 @@ export class HashSet<T> {
40
40
  has(value: T): boolean;
41
41
  keys(): Iterator<T_1, any, undefined>;
42
42
  values(): Iterator<T_1, any, undefined>;
43
- entries(): void;
43
+ entries(): Generator<any[], void, unknown>;
44
44
  /**
45
45
  *
46
46
  * @param {T} value
@@ -1 +1 @@
1
- {"version":3,"file":"HashSet.d.ts","sourceRoot":"","sources":["../../../../../src/core/collection/set/HashSet.js"],"names":[],"mappings":"AAKA;;;;GAIG;AACH;IACI;;OAEG;IACH;;;;OAgBC;IAVG;;;;OAIG;IACH,cAIE;IAGN,mBAEC;IAED;;;;OAIG;IACH,WAHW,CAAC,GACC,IAAI,CAMhB;IAED,cAEC;IAED;;;;OAIG;IACH,cAHW,CAAC,GACC,OAAO,CAInB;IAED;;;;OAIG;IACH,WAHW,CAAC,GACC,OAAO,CAInB;IAQD,sCAEC;IAED,wCAEC;IAED,gBAEC;IAED;;;;OAIG;IACH,WAHW,CAAC,GACC,CAAC,GAAC,SAAS,CAIvB;IAED;;;;OAIG;IACH,yBAHoB,CAAC,QAAE,CAAC,0CAOvB;IAED;;;;OAIG;IACH,cAHW,CAAC,GACA,CAAC,CAWZ;IApDD,mDAIC;CAiDJ;iCAzHgC,wCAAwC;mCADtC,0CAA0C"}
1
+ {"version":3,"file":"HashSet.d.ts","sourceRoot":"","sources":["../../../../../src/core/collection/set/HashSet.js"],"names":[],"mappings":"AAKA;;;;GAIG;AACH;IACI;;OAEG;IACH;;;;OAgBC;IAVG;;;;OAIG;IACH,cAIE;IAGN,mBAEC;IAED;;;;OAIG;IACH,WAHW,CAAC,GACC,IAAI,CAMhB;IAED,cAEC;IAED;;;;OAIG;IACH,cAHW,CAAC,GACC,OAAO,CAInB;IAED;;;;OAIG;IACH,WAHW,CAAC,GACC,OAAO,CAInB;IAQD,sCAEC;IAED,wCAEC;IAED,2CAIC;IAED;;;;OAIG;IACH,WAHW,CAAC,GACC,CAAC,GAAC,SAAS,CAIvB;IAED;;;;OAIG;IACH,yBAHoB,CAAC,QAAE,CAAC,0CAOvB;IAED;;;;OAIG;IACH,cAHW,CAAC,GACA,CAAC,CAWZ;IAtDD,mDAIC;CAmDJ;iCA3HgC,wCAAwC;mCADtC,0CAA0C"}
@@ -81,8 +81,10 @@ export class HashSet {
81
81
  return this.__map.keys();
82
82
  }
83
83
 
84
- entries() {
85
- throw new Error('Not implemented');
84
+ * entries() {
85
+ for (const value of this.values()) {
86
+ yield [value, value];
87
+ }
86
88
  }
87
89
 
88
90
  /**
@@ -32,7 +32,7 @@ export class IsEqual extends BaseMatcher {
32
32
  return Array.isArray(expected) && isArrayEqualStrict(actual, expected);
33
33
  }
34
34
 
35
- if (typeof actual === "object" && typeof expected === "object" && typeof actual.equals === "function") {
35
+ if (expected !== null && typeof actual === "object" && typeof expected === "object" && typeof actual.equals === "function") {
36
36
 
37
37
  return actual.equals(expected);
38
38
 
@@ -1 +1 @@
1
- {"version":3,"file":"IsIterableContaining.d.ts","sourceRoot":"","sources":["../../../../../src/core/debug/matchers/IsIterableContaining.js"],"names":[],"mappings":"AAGA;IAMI;;;OAGG;IACH,8BAIC;IAED,oEA+BC;IAgBD,mCAMC;;CACJ;4BAzE2B,mBAAmB;gCACf,uBAAuB"}
1
+ {"version":3,"file":"IsIterableContaining.d.ts","sourceRoot":"","sources":["../../../../../src/core/debug/matchers/IsIterableContaining.js"],"names":[],"mappings":"AAGA;IAMI;;;OAGG;IACH,8BAIC;IAED,oEAgCC;IAED,mCAMC;;CACJ;4BA5D2B,mBAAmB;gCACf,uBAAuB"}
@@ -1,74 +1,61 @@
1
- import { BaseMatcher } from "../BaseMatcher.js";
2
- import { NullDescription } from "../NullDescription.js";
3
-
4
- export class IsIterableContaining extends BaseMatcher {
5
- /**
6
- * @type {Matcher}
7
- */
8
- #element_matcher
9
-
10
- /**
11
- *
12
- * @param {Matcher} matcher
13
- */
14
- constructor(matcher) {
15
- super();
16
-
17
- this.#element_matcher = matcher;
18
- }
19
-
20
- matches(item, mismatch_description = NullDescription.INSTANCE) {
21
- if (this.#isEmpty(item)) {
22
- mismatch_description.appendText("was empty");
23
- return false;
24
- }
25
-
26
- for (const itemElement of item) {
27
- if (this.#element_matcher.matches(itemElement, NullDescription.INSTANCE)) {
28
- return true;
29
- }
30
- }
31
-
32
- mismatch_description.appendText("mismatches were: [");
33
-
34
- let is_past_first = false;
35
-
36
- for (const itemElement of item) {
37
- if (is_past_first) {
38
- mismatch_description.appendText(", ");
39
- }
40
-
41
- this.#element_matcher.describeMismatch(item, mismatch_description);
42
-
43
- is_past_first = true;
44
- }
45
-
46
-
47
- mismatch_description.appendText("]");
48
-
49
- return false;
50
-
51
- }
52
-
53
- /**
54
- *
55
- * @param {Iterable} iterable
56
- * @return {boolean}
57
- */
58
- #isEmpty(iterable) {
59
- const iterator = iterable[Symbol.iterator]();
60
-
61
- const el = iterator.next();
62
-
63
- return el.done === true;
64
- }
65
-
66
-
67
- describeTo(description) {
68
-
69
- description
70
- .appendText("a collection containing ")
71
- .appendDescriptionOf(this.#element_matcher);
72
-
73
- }
74
- }
1
+ import { BaseMatcher } from "../BaseMatcher.js";
2
+ import { NullDescription } from "../NullDescription.js";
3
+
4
+ export class IsIterableContaining extends BaseMatcher {
5
+ /**
6
+ * @type {Matcher}
7
+ */
8
+ #element_matcher
9
+
10
+ /**
11
+ *
12
+ * @param {Matcher} matcher
13
+ */
14
+ constructor(matcher) {
15
+ super();
16
+
17
+ this.#element_matcher = matcher;
18
+ }
19
+
20
+ matches(item, mismatch_description = NullDescription.INSTANCE) {
21
+ const mismatches = [];
22
+
23
+ for (const itemElement of item) {
24
+ if (this.#element_matcher.matches(itemElement, NullDescription.INSTANCE)) {
25
+ return true;
26
+ }
27
+
28
+ mismatches.push(itemElement);
29
+ }
30
+
31
+ if (mismatches.length === 0) {
32
+ mismatch_description.appendText("was empty");
33
+ return false;
34
+ }
35
+
36
+ mismatch_description.appendText("mismatches were: [");
37
+
38
+ let is_past_first = false;
39
+
40
+ for (const itemElement of mismatches) {
41
+ if (is_past_first) {
42
+ mismatch_description.appendText(", ");
43
+ }
44
+
45
+ this.#element_matcher.describeMismatch(itemElement, mismatch_description);
46
+ is_past_first = true;
47
+ }
48
+
49
+ mismatch_description.appendText("]");
50
+
51
+ return false;
52
+ }
53
+
54
+ describeTo(description) {
55
+
56
+ description
57
+ .appendText("a collection containing ")
58
+ .appendDescriptionOf(this.#element_matcher);
59
+
60
+ }
61
+ }