@woosh/meep-engine 3.45.0 → 3.46.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 (216) hide show
  1. package/build/bundle-worker-terrain.js +1 -1
  2. package/package.json +1 -1
  3. package/src/core/assert.d.ts.map +1 -1
  4. package/src/core/assert.js +5 -1
  5. package/src/core/binary/hash/XXH128Hash.d.ts +1 -37
  6. package/src/core/binary/hash/XXH128Hash.d.ts.map +1 -1
  7. package/src/core/binary/hash/XXH128Hash.js +4 -55
  8. package/src/core/binary/hash/XXH3_SECRET.d.ts +1 -12
  9. package/src/core/binary/hash/XXH3_SECRET.d.ts.map +1 -1
  10. package/src/core/binary/hash/XXH3_SECRET.js +4 -25
  11. package/src/core/binary/hash/crc32.d.ts +1 -15
  12. package/src/core/binary/hash/crc32.d.ts.map +1 -1
  13. package/src/core/binary/hash/crc32.js +4 -96
  14. package/src/core/binary/hash/xxh3_128.d.ts +1 -9
  15. package/src/core/binary/hash/xxh3_128.d.ts.map +1 -1
  16. package/src/core/binary/hash/xxh3_128.js +4 -341
  17. package/src/core/binary/hash/xxh3_64.d.ts +1 -8
  18. package/src/core/binary/hash/xxh3_64.d.ts.map +1 -1
  19. package/src/core/binary/hash/xxh3_64.js +4 -241
  20. package/src/core/binary/hash/xxh3_common.d.ts +1 -223
  21. package/src/core/binary/hash/xxh3_common.d.ts.map +1 -1
  22. package/src/core/binary/hash/xxh3_common.js +90 -476
  23. package/src/core/collection/array/combine_hash.d.ts +6 -0
  24. package/src/core/collection/array/combine_hash.d.ts.map +1 -1
  25. package/src/core/collection/array/combine_hash.js +6 -0
  26. package/src/core/function/FunctionCompiler.js +2 -2
  27. package/src/core/geom/3d/mat4/m4_multiply.d.ts +3 -0
  28. package/src/core/geom/3d/mat4/m4_multiply.d.ts.map +1 -1
  29. package/src/core/geom/3d/mat4/m4_multiply.js +3 -0
  30. package/src/core/geom/3d/mat4/m4_multiply_f64.d.ts +30 -0
  31. package/src/core/geom/3d/mat4/m4_multiply_f64.d.ts.map +1 -0
  32. package/src/core/geom/3d/mat4/m4_multiply_f64.js +106 -0
  33. package/src/core/geom/ConicRay.js +2 -2
  34. package/src/core/geom/Vector4.d.ts.map +1 -1
  35. package/src/core/geom/Vector4.js +8 -5
  36. package/src/core/math/hash/XXH128Hash.d.ts +38 -0
  37. package/src/core/math/hash/XXH128Hash.d.ts.map +1 -0
  38. package/src/core/math/hash/XXH128Hash.js +55 -0
  39. package/src/core/math/hash/XXH3_SECRET.d.ts +13 -0
  40. package/src/core/math/hash/XXH3_SECRET.d.ts.map +1 -0
  41. package/src/core/math/hash/XXH3_SECRET.js +25 -0
  42. package/src/core/math/hash/crc32.d.ts +16 -0
  43. package/src/core/math/hash/crc32.d.ts.map +1 -0
  44. package/src/core/math/hash/crc32.js +96 -0
  45. package/src/core/math/hash/xxh3_128.d.ts +10 -0
  46. package/src/core/math/hash/xxh3_128.d.ts.map +1 -0
  47. package/src/core/math/hash/xxh3_128.js +341 -0
  48. package/src/core/math/hash/xxh3_64.d.ts +9 -0
  49. package/src/core/math/hash/xxh3_64.d.ts.map +1 -0
  50. package/src/core/math/hash/xxh3_64.js +241 -0
  51. package/src/core/math/hash/xxh3_common.d.ts +224 -0
  52. package/src/core/math/hash/xxh3_common.d.ts.map +1 -0
  53. package/src/core/math/hash/xxh3_common.js +476 -0
  54. package/src/core/math/lookup/ParameterLookupTable.js +2 -2
  55. package/src/core/model/node-graph/node/NodeInstancePortReference.js +2 -2
  56. package/src/core/model/reactive/model/ReactiveBinaryExpression.js +2 -2
  57. package/src/core/model/reactive/model/terminal/ReactiveReference.js +2 -2
  58. package/src/engine/asset/AssetDescription.js +2 -2
  59. package/src/engine/ecs/animation/Animation.js +2 -2
  60. package/src/engine/ecs/animation/AnimationClip.d.ts.map +1 -1
  61. package/src/engine/ecs/animation/AnimationClip.js +7 -5
  62. package/src/engine/ecs/gui/GUIElement.d.ts.map +1 -1
  63. package/src/engine/ecs/gui/GUIElement.js +7 -5
  64. package/src/engine/ecs/gui/hud/HeadsUpDisplay.js +2 -2
  65. package/src/engine/ecs/gui/position/ViewportPosition.d.ts.map +1 -1
  66. package/src/engine/ecs/gui/position/ViewportPosition.js +11 -7
  67. package/src/engine/ecs/transform/Transform64.d.ts +1 -1
  68. package/src/engine/ecs/transform/Transform64.d.ts.map +1 -1
  69. package/src/engine/ecs/transform/Transform64.js +5 -4
  70. package/src/engine/graphics/ecs/animation/animator/AnimationClip.d.ts.map +1 -1
  71. package/src/engine/graphics/ecs/animation/animator/AnimationClip.js +8 -5
  72. package/src/engine/graphics/ecs/animation/animator/AnimationClipDefinition.js +2 -2
  73. package/src/engine/graphics/ecs/animation/animator/AnimationNotification.js +2 -2
  74. package/src/engine/graphics/ecs/animation/animator/AnimationNotificationDefinition.js +2 -2
  75. package/src/engine/graphics/ecs/animation/animator/graph/definition/AnimationGraphDefinition.js +2 -2
  76. package/src/engine/graphics/ecs/animation/animator/graph/definition/AnimationStateDefinition.js +2 -2
  77. package/src/engine/graphics/ecs/animation/animator/graph/definition/AnimationTransitionDefinition.d.ts.map +1 -1
  78. package/src/engine/graphics/ecs/animation/animator/graph/definition/AnimationTransitionDefinition.js +8 -5
  79. package/src/engine/graphics/ecs/decal/v2/Decal.d.ts.map +1 -1
  80. package/src/engine/graphics/ecs/decal/v2/Decal.js +9 -8
  81. package/src/engine/graphics/render/frame_graph/resource/TextureResourceDescriptor.d.ts.map +1 -1
  82. package/src/engine/graphics/render/frame_graph/resource/TextureResourceDescriptor.js +9 -6
  83. package/src/engine/graphics3/ParticipatingMedia.js +204 -204
  84. package/src/engine/graphics3/animation/AnimationClips.d.ts +5 -0
  85. package/src/engine/graphics3/animation/AnimationClips.d.ts.map +1 -1
  86. package/src/engine/graphics3/animation/AnimationClips.js +5 -0
  87. package/src/engine/grid/obstacle/GridObstacle.js +2 -2
  88. package/src/engine/intelligence/behavior/selector/WeightedElement.js +2 -2
  89. package/src/engine/interpolation/Interpolated.js +2 -2
  90. package/src/engine/physics/cloth/ecs/Cloth.d.ts.map +1 -1
  91. package/src/engine/physics/cloth/ecs/Cloth.js +7 -5
  92. package/src/engine/physics/cloth/ecs/ClothCollider.d.ts.map +1 -1
  93. package/src/engine/physics/cloth/ecs/ClothCollider.js +7 -5
  94. package/src/engine/physics/cloth/ecs/ClothDynamics.d.ts.map +1 -1
  95. package/src/engine/physics/cloth/ecs/ClothDynamics.js +20 -11
  96. package/src/engine/physics/fluid/FluidField.d.ts.map +1 -1
  97. package/src/engine/physics/fluid/FluidField.js +7 -5
  98. package/src/engine/physics/fluid/ecs/FluidComponent.d.ts.map +1 -1
  99. package/src/engine/physics/fluid/ecs/FluidComponent.js +19 -11
  100. package/src/engine/physics/fluid/effector/AbstractFluidEffector.d.ts +2 -2
  101. package/src/engine/physics/fluid/effector/AbstractFluidEffector.js +2 -2
  102. package/src/engine/physics/fluid/effector/GlobalFluidEffector.d.ts.map +1 -1
  103. package/src/engine/physics/fluid/effector/GlobalFluidEffector.js +11 -7
  104. package/src/engine/physics/fluid/effector/ImpulseFluidEffector.d.ts.map +1 -1
  105. package/src/engine/physics/fluid/effector/ImpulseFluidEffector.js +11 -7
  106. package/src/engine/physics/fluid/effector/WakeFluidEffector.d.ts.map +1 -1
  107. package/src/engine/physics/fluid/effector/WakeFluidEffector.js +16 -9
  108. package/src/engine/sound/ecs/audio/AudioEmitter.d.ts.map +1 -1
  109. package/src/engine/sound/ecs/audio/AudioEmitter.js +12 -7
  110. package/src/engine/sound/ecs/trigger/AudioEventTrigger.d.ts.map +1 -1
  111. package/src/engine/sound/ecs/trigger/AudioEventTrigger.js +192 -191
  112. package/src/engine/sound/simulation/core/AcousticMedium.js +2 -2
  113. package/src/engine/sound/simulation/definition/AcousticDirectivity.js +2 -2
  114. package/src/engine/sound/simulation/definition/AcousticMaterial.d.ts.map +1 -1
  115. package/src/engine/sound/simulation/definition/AcousticMaterial.js +11 -7
  116. package/src/engine/sound/sopra/definition/BusDefinition.d.ts.map +1 -1
  117. package/src/engine/sound/sopra/definition/BusDefinition.js +5 -4
  118. package/src/engine/sound/sopra/definition/DuckingRule.d.ts.map +1 -1
  119. package/src/engine/sound/sopra/definition/DuckingRule.js +7 -5
  120. package/src/engine/sound/sopra/definition/EventDescription.d.ts.map +1 -1
  121. package/src/engine/sound/sopra/definition/EventDescription.js +23 -13
  122. package/src/engine/sound/sopra/definition/MixerSnapshot.js +2 -2
  123. package/src/engine/sound/sopra/definition/ParameterDefinition.d.ts.map +1 -1
  124. package/src/engine/sound/sopra/definition/ParameterDefinition.js +7 -5
  125. package/src/engine/sound/sopra/definition/clip/AbstractAudioClip.js +2 -2
  126. package/src/engine/sound/sopra/definition/clip/BlendContainerAudioClip.d.ts.map +1 -1
  127. package/src/engine/sound/sopra/definition/clip/BlendContainerAudioClip.js +4 -3
  128. package/src/engine/sound/sopra/definition/clip/ContainerAudioClip.js +2 -2
  129. package/src/engine/sound/sopra/definition/clip/RandomContainerAudioClip.js +3 -3
  130. package/src/engine/sound/sopra/definition/clip/SampleAudioClip.d.ts.map +1 -1
  131. package/src/engine/sound/sopra/definition/clip/SampleAudioClip.js +16 -9
  132. package/src/engine/sound/sopra/definition/clip/SilenceAudioClip.js +2 -2
  133. package/src/engine/sound/sopra/definition/clip/SwitchContainerAudioClip.d.ts +1 -1
  134. package/src/engine/sound/sopra/definition/clip/SwitchContainerAudioClip.d.ts.map +1 -1
  135. package/src/engine/sound/sopra/definition/clip/SwitchContainerAudioClip.js +2 -2
  136. package/src/engine/sound/sopra/definition/effect/CompressorEffect.d.ts.map +1 -1
  137. package/src/engine/sound/sopra/definition/effect/CompressorEffect.js +7 -5
  138. package/src/engine/sound/sopra/definition/effect/EqEffect.d.ts.map +1 -1
  139. package/src/engine/sound/sopra/definition/effect/EqEffect.js +8 -5
  140. package/src/engine/sound/sopra/definition/effect/ReverbEffect.js +2 -2
  141. package/src/engine/sound/sopra/legacy/SoundEmitter.d.ts.map +1 -1
  142. package/src/engine/sound/sopra/legacy/SoundEmitter.js +357 -352
  143. package/src/engine/sound/sopra/legacy/SoundTrack.d.ts.map +1 -1
  144. package/src/engine/sound/sopra/legacy/SoundTrack.js +281 -278
  145. package/src/format/image/png/PNGReader.js +644 -644
  146. package/src/format/image/png/crc32.d.ts +1 -1
  147. package/src/format/image/png/crc32.js +7 -8
  148. package/src/shade/descriptor/binding/BindGroupLayoutDescriptor.js +2 -2
  149. package/src/shade/descriptor/binding/BindGroupLayoutEntry.d.ts.map +1 -1
  150. package/src/shade/descriptor/binding/BindGroupLayoutEntry.js +12 -8
  151. package/src/shade/descriptor/binding/StorageTextureBindingLayout.js +2 -2
  152. package/src/shade/descriptor/binding/TextureBindingLayout.js +2 -2
  153. package/src/shade/descriptor/blend/BlendComponent.js +2 -2
  154. package/src/shade/descriptor/pipeline/PipelineDescriptorBase.js +2 -2
  155. package/src/shade/descriptor/pipeline/PipelineLayoutDescriptor.js +2 -2
  156. package/src/shade/descriptor/pipeline/ProgrammableStage.js +2 -2
  157. package/src/shade/descriptor/pipeline/compute/ComputePipelineDescriptor.js +2 -2
  158. package/src/shade/descriptor/pipeline/render/ColorTargetState.js +2 -2
  159. package/src/shade/descriptor/pipeline/render/FragmentState.js +2 -2
  160. package/src/shade/descriptor/pipeline/render/PrimitiveState.js +2 -2
  161. package/src/shade/descriptor/pipeline/render/RenderPipelineDescriptor.d.ts.map +1 -1
  162. package/src/shade/descriptor/pipeline/render/RenderPipelineDescriptor.js +8 -5
  163. package/src/shade/descriptor/pipeline/render/VertexAttribute.js +2 -2
  164. package/src/shade/descriptor/texture/SamplerDescriptor.d.ts.map +1 -1
  165. package/src/shade/descriptor/texture/SamplerDescriptor.js +20 -12
  166. package/src/shade/descriptor/texture/TextureDescriptor.d.ts.map +1 -1
  167. package/src/shade/descriptor/texture/TextureDescriptor.js +11 -7
  168. package/src/shade/device/graph/BufferResourceDescriptor.d.ts.map +1 -1
  169. package/src/shade/device/graph/BufferResourceDescriptor.js +196 -193
  170. package/src/shade/device/graph/TextureResourceDescriptor.d.ts.map +1 -1
  171. package/src/shade/device/graph/TextureResourceDescriptor.js +178 -173
  172. package/src/shade/device/timing/profile/sgpt_read_header.js +1 -1
  173. package/src/shade/device/timing/profile/sgpt_read_records.js +1 -1
  174. package/src/shade/device/timing/profile/sgpt_write_header.js +1 -1
  175. package/src/shade/device/timing/profile/sgpt_write_record.js +1 -1
  176. package/src/shade/renderer/binding/BufferBinding.js +2 -2
  177. package/src/shade/renderer/camera/Camera.js +2 -2
  178. package/src/shade/renderer/geometry/Attribute.js +2 -2
  179. package/src/shade/renderer/geometry/Geometry.js +2 -2
  180. package/src/shade/renderer/geometry/geometry_deduplicate_vertices.js +2 -2
  181. package/src/shade/renderer/geometry/meshlet/MeshletBatch.js +2 -2
  182. package/src/shade/renderer/geometry/virtual/format/checksum/vgeo_compute_asset_id.js +13 -13
  183. package/src/shade/renderer/geometry/virtual/format/checksum/vgeo_compute_directory_block_checksum.js +41 -41
  184. package/src/shade/renderer/geometry/virtual/format/checksum/vgeo_compute_frame_checksum.js +41 -41
  185. package/src/shade/renderer/geometry/virtual/format/checksum/vgeo_compute_header_checksum.js +25 -25
  186. package/src/shade/renderer/material/StandardShadeMaterial.d.ts.map +1 -1
  187. package/src/shade/renderer/material/StandardShadeMaterial.js +13 -8
  188. package/src/shade/renderer/scene/optimization/geometry/internal/triangle_fingerprint_stream.d.ts.map +1 -1
  189. package/src/shade/renderer/scene/optimization/geometry/internal/triangle_fingerprint_stream.js +14 -5
  190. package/src/shade/renderer/scene/optimization/sampler2d_from_image_bitmap.js +1 -1
  191. package/src/shade/renderer/shader/type/WGSLStructField.js +2 -2
  192. package/src/shade/renderer/shader/type/WebGPUArray.js +2 -2
  193. package/src/shade/renderer/shader/type/WebGPUStruct.d.ts.map +1 -1
  194. package/src/shade/renderer/shader/type/WebGPUStruct.js +9 -6
  195. package/src/shade/renderer/texture/ShadeTexture.d.ts.map +1 -1
  196. package/src/shade/renderer/texture/ShadeTexture.js +17 -10
  197. package/src/shade/renderer/texture/mipmaps/WebGPUMipmapGenerator.js +2 -2
  198. package/src/shade/renderer/water/surface/chunk_water_surface_sample.d.ts +4 -4
  199. package/src/shade/renderer/water/surface/chunk_water_surface_sample.js +6 -6
  200. package/src/shade/renderer/water/surface/particles/GPUWaterParticles.d.ts.map +1 -1
  201. package/src/shade/renderer/water/surface/particles/GPUWaterParticles.js +46 -55
  202. package/src/shade/renderer/water/surface/particles/WATER_PARTICLE_STRUCT.d.ts +3 -3
  203. package/src/shade/renderer/water/surface/particles/WATER_PARTICLE_STRUCT.d.ts.map +1 -1
  204. package/src/shade/renderer/water/surface/particles/WATER_PARTICLE_STRUCT.js +14 -4
  205. package/src/shade/renderer/water/surface/particles/chunk_water_particle.d.ts +10 -1
  206. package/src/shade/renderer/water/surface/particles/chunk_water_particle.d.ts.map +1 -1
  207. package/src/shade/renderer/water/surface/particles/chunk_water_particle.js +82 -40
  208. package/src/shade/renderer/water/surface/particles/chunk_water_particle_step.d.ts +4 -1
  209. package/src/shade/renderer/water/surface/particles/chunk_water_particle_step.d.ts.map +1 -1
  210. package/src/shade/renderer/water/surface/particles/chunk_water_particle_step.js +8 -4
  211. package/src/shade/renderer/water/surface/particles/shader_water_particles.d.ts +98 -86
  212. package/src/shade/renderer/water/surface/particles/shader_water_particles.d.ts.map +1 -1
  213. package/src/shade/renderer/water/surface/particles/shader_water_particles.js +440 -298
  214. package/src/view/common/HTMLElementCacheKey.d.ts.map +1 -1
  215. package/src/view/common/HTMLElementCacheKey.js +4 -3
  216. package/src/view/minimap/MinimapMarker.js +2 -2
@@ -0,0 +1,341 @@
1
+ import { XXH128Hash } from "./XXH128Hash.js";
2
+ import { XXH3_SECRET } from "./XXH3_SECRET.js";
3
+ import {
4
+ add64,
5
+ mul64,
6
+ mult32to64,
7
+ read_u32,
8
+ read_u64,
9
+ rotl32,
10
+ sub64,
11
+ swap32,
12
+ swap64,
13
+ u64,
14
+ XXH3_MIDSIZE_LASTOFFSET,
15
+ XXH3_MIDSIZE_MAX,
16
+ XXH3_MIDSIZE_STARTOFFSET,
17
+ XXH3_SECRET_SIZE_MIN,
18
+ xxh3_assert_arguments,
19
+ xxh3_avalanche,
20
+ xxh3_hash_long_loop,
21
+ xxh3_init_acc,
22
+ xxh3_long_secret,
23
+ xxh3_merge_accs,
24
+ xxh3_mix16b,
25
+ XXH_MASK_64,
26
+ XXH_PRIME32_2,
27
+ XXH_PRIME64_1,
28
+ XXH_PRIME64_2,
29
+ XXH_PRIME64_4,
30
+ XXH_PRIME_MX2,
31
+ XXH_SECRET_MERGEACCS_START,
32
+ XXH_STRIPE_LEN,
33
+ xorshift64,
34
+ xxh64_avalanche,
35
+ } from "./xxh3_common.js";
36
+
37
+ /**
38
+ * xxHash3, 128-bit output.
39
+ *
40
+ * A direct transcription of the reference implementation, verified against its published sanity
41
+ * vectors — see `xxh3_128.spec.js`. The low 64 bits are *not* in general equal to
42
+ * {@link xxh3_64} of the same input; they only coincide for inputs longer than
43
+ * {@link XXH3_MIDSIZE_MAX}, where both variants share the accumulator loop.
44
+ *
45
+ * @see https://github.com/Cyan4973/xxHash
46
+ *
47
+ * @author Alex Goldring
48
+ * @copyright Company Named Limited (c) 2026
49
+ */
50
+
51
+ /**
52
+ * Full 64x64 -> 128 multiply. The halves are returned separately because every caller manipulates
53
+ * them independently before folding.
54
+ *
55
+ * @param {bigint} a
56
+ * @param {bigint} b
57
+ * @returns {XXH128Hash}
58
+ */
59
+ function mult64to128(a, b) {
60
+ const product = a * b;
61
+
62
+ return new XXH128Hash(product & XXH_MASK_64, (product >> 64n) & XXH_MASK_64);
63
+ }
64
+
65
+ /**
66
+ * @param {Uint8Array} input 1..3 bytes
67
+ * @param {Uint8Array} secret
68
+ * @param {bigint} seed
69
+ * @returns {XXH128Hash}
70
+ */
71
+ function len_1to3(input, secret, seed) {
72
+ const len = input.length;
73
+
74
+ const c1 = input[0];
75
+ const c2 = input[len >> 1];
76
+ const c3 = input[len - 1];
77
+
78
+ const combined_lo = BigInt(((c1 << 16) | (c2 << 24) | c3 | (len << 8)) >>> 0);
79
+ const combined_hi = rotl32(swap32(combined_lo), 13);
80
+
81
+ const bitflip_lo = add64(read_u32(secret, 0) ^ read_u32(secret, 4), seed);
82
+ const bitflip_hi = sub64(read_u32(secret, 8) ^ read_u32(secret, 12), seed);
83
+
84
+ return new XXH128Hash(
85
+ xxh64_avalanche(combined_lo ^ bitflip_lo),
86
+ xxh64_avalanche(combined_hi ^ bitflip_hi)
87
+ );
88
+ }
89
+
90
+ /**
91
+ * @param {Uint8Array} input 4..8 bytes
92
+ * @param {Uint8Array} secret
93
+ * @param {bigint} seed
94
+ * @returns {XXH128Hash}
95
+ */
96
+ function len_4to8(input, secret, seed) {
97
+ const len = input.length;
98
+
99
+ const mixed_seed = seed ^ u64(swap32(seed) << 32n);
100
+
101
+ const input_lo = read_u32(input, 0);
102
+ const input_hi = read_u32(input, len - 4);
103
+
104
+ const input_64 = add64(input_lo, input_hi << 32n);
105
+ const bitflip = add64(read_u64(secret, 16) ^ read_u64(secret, 24), mixed_seed);
106
+ const keyed = input_64 ^ bitflip;
107
+
108
+ const m128 = mult64to128(keyed, add64(XXH_PRIME64_1, BigInt(len) << 2n));
109
+
110
+ m128.high64 = add64(m128.high64, u64(m128.low64 << 1n));
111
+ m128.low64 = m128.low64 ^ (m128.high64 >> 3n);
112
+
113
+ m128.low64 = xorshift64(m128.low64, 35);
114
+ m128.low64 = mul64(m128.low64, XXH_PRIME_MX2);
115
+ m128.low64 = xorshift64(m128.low64, 28);
116
+ m128.high64 = xxh3_avalanche(m128.high64);
117
+
118
+ return m128;
119
+ }
120
+
121
+ /**
122
+ * @param {Uint8Array} input 9..16 bytes
123
+ * @param {Uint8Array} secret
124
+ * @param {bigint} seed
125
+ * @returns {XXH128Hash}
126
+ */
127
+ function len_9to16(input, secret, seed) {
128
+ const len = input.length;
129
+
130
+ const bitflip_lo = sub64(read_u64(secret, 32) ^ read_u64(secret, 40), seed);
131
+ const bitflip_hi = add64(read_u64(secret, 48) ^ read_u64(secret, 56), seed);
132
+
133
+ const input_lo = read_u64(input, 0);
134
+
135
+ let input_hi = read_u64(input, len - 8);
136
+
137
+ const m128 = mult64to128(input_lo ^ input_hi ^ bitflip_lo, XXH_PRIME64_1);
138
+
139
+ m128.low64 = add64(m128.low64, BigInt(len - 1) << 54n);
140
+
141
+ input_hi ^= bitflip_hi;
142
+
143
+ m128.high64 = add64(
144
+ m128.high64,
145
+ add64(input_hi, mult32to64(input_hi, XXH_PRIME32_2 - 1n))
146
+ );
147
+
148
+ m128.low64 = m128.low64 ^ swap64(m128.high64);
149
+
150
+ const h128 = mult64to128(m128.low64, XXH_PRIME64_2);
151
+
152
+ h128.high64 = add64(h128.high64, mul64(m128.high64, XXH_PRIME64_2));
153
+
154
+ h128.low64 = xxh3_avalanche(h128.low64);
155
+ h128.high64 = xxh3_avalanche(h128.high64);
156
+
157
+ return h128;
158
+ }
159
+
160
+ /**
161
+ * @param {Uint8Array} input 0..16 bytes
162
+ * @param {Uint8Array} secret
163
+ * @param {bigint} seed
164
+ * @returns {XXH128Hash}
165
+ */
166
+ function len_0to16(input, secret, seed) {
167
+ const len = input.length;
168
+
169
+ if (len > 8) {
170
+ return len_9to16(input, secret, seed);
171
+ }
172
+
173
+ if (len >= 4) {
174
+ return len_4to8(input, secret, seed);
175
+ }
176
+
177
+ if (len > 0) {
178
+ return len_1to3(input, secret, seed);
179
+ }
180
+
181
+ const bitflip_lo = read_u64(secret, 64) ^ read_u64(secret, 72);
182
+ const bitflip_hi = read_u64(secret, 80) ^ read_u64(secret, 88);
183
+
184
+ return new XXH128Hash(
185
+ xxh64_avalanche(seed ^ bitflip_lo),
186
+ xxh64_avalanche(seed ^ bitflip_hi)
187
+ );
188
+ }
189
+
190
+ /**
191
+ * The 32-byte mixing step: two 16-byte windows, each folded into one half and cross-XOR'd into the
192
+ * other. Slower than the 64-bit path's `mix16B`, and better behaved when a product lands on zero.
193
+ *
194
+ * @param {XXH128Hash} acc mutated in place
195
+ * @param {Uint8Array} input
196
+ * @param {number} input_1
197
+ * @param {number} input_2
198
+ * @param {Uint8Array} secret
199
+ * @param {number} secret_offset
200
+ * @param {bigint} seed
201
+ */
202
+ function mix32b(acc, input, input_1, input_2, secret, secret_offset, seed) {
203
+ acc.low64 = add64(acc.low64, xxh3_mix16b(input, input_1, secret, secret_offset, seed));
204
+ acc.low64 = acc.low64 ^ add64(read_u64(input, input_2), read_u64(input, input_2 + 8));
205
+
206
+ acc.high64 = add64(acc.high64, xxh3_mix16b(input, input_2, secret, secret_offset + 16, seed));
207
+ acc.high64 = acc.high64 ^ add64(read_u64(input, input_1), read_u64(input, input_1 + 8));
208
+ }
209
+
210
+ /**
211
+ * The shared tail of both mid-size paths.
212
+ *
213
+ * @param {XXH128Hash} acc
214
+ * @param {number} len
215
+ * @param {bigint} seed
216
+ * @returns {XXH128Hash}
217
+ */
218
+ function finalize_midsize(acc, len, seed) {
219
+ const low64 = xxh3_avalanche(add64(acc.low64, acc.high64));
220
+
221
+ const high64 = xxh3_avalanche(add64(
222
+ add64(mul64(acc.low64, XXH_PRIME64_1), mul64(acc.high64, XXH_PRIME64_4)),
223
+ mul64(sub64(BigInt(len), seed), XXH_PRIME64_2)
224
+ ));
225
+
226
+ return new XXH128Hash(low64, sub64(0n, high64));
227
+ }
228
+
229
+ /**
230
+ * @param {Uint8Array} input 17..128 bytes
231
+ * @param {Uint8Array} secret
232
+ * @param {bigint} seed
233
+ * @returns {XXH128Hash}
234
+ */
235
+ function len_17to128(input, secret, seed) {
236
+ const len = input.length;
237
+
238
+ const acc = new XXH128Hash(mul64(BigInt(len), XXH_PRIME64_1), 0n);
239
+
240
+ if (len > 32) {
241
+ if (len > 64) {
242
+ if (len > 96) {
243
+ mix32b(acc, input, 48, len - 64, secret, 96, seed);
244
+ }
245
+
246
+ mix32b(acc, input, 32, len - 48, secret, 64, seed);
247
+ }
248
+
249
+ mix32b(acc, input, 16, len - 32, secret, 32, seed);
250
+ }
251
+
252
+ mix32b(acc, input, 0, len - 16, secret, 0, seed);
253
+
254
+ return finalize_midsize(acc, len, seed);
255
+ }
256
+
257
+ /**
258
+ * @param {Uint8Array} input 129..240 bytes
259
+ * @param {Uint8Array} secret
260
+ * @param {bigint} seed
261
+ * @returns {XXH128Hash}
262
+ */
263
+ function len_129to240(input, secret, seed) {
264
+ const len = input.length;
265
+
266
+ const acc = new XXH128Hash(mul64(BigInt(len), XXH_PRIME64_1), 0n);
267
+
268
+ for (let i = 32; i < 160; i += 32) {
269
+ mix32b(acc, input, i - 32, i - 16, secret, i - 32, seed);
270
+ }
271
+
272
+ acc.low64 = xxh3_avalanche(acc.low64);
273
+ acc.high64 = xxh3_avalanche(acc.high64);
274
+
275
+ for (let i = 160; i <= len; i += 32) {
276
+ mix32b(acc, input, i - 32, i - 16, secret, XXH3_MIDSIZE_STARTOFFSET + i - 160, seed);
277
+ }
278
+
279
+ mix32b(
280
+ acc,
281
+ input, len - 16, len - 32,
282
+ secret, XXH3_SECRET_SIZE_MIN - XXH3_MIDSIZE_LASTOFFSET - 16,
283
+ sub64(0n, seed)
284
+ );
285
+
286
+ return finalize_midsize(acc, len, seed);
287
+ }
288
+
289
+ /**
290
+ * @param {Uint8Array} input more than {@link XXH3_MIDSIZE_MAX} bytes
291
+ * @param {Uint8Array} secret
292
+ * @returns {XXH128Hash}
293
+ */
294
+ function hash_long(input, secret) {
295
+ const acc = xxh3_init_acc();
296
+
297
+ xxh3_hash_long_loop(acc, input, secret);
298
+
299
+ const len = BigInt(input.length);
300
+
301
+ const low64 = xxh3_merge_accs(
302
+ acc,
303
+ secret, XXH_SECRET_MERGEACCS_START,
304
+ mul64(len, XXH_PRIME64_1)
305
+ );
306
+
307
+ const high64 = xxh3_merge_accs(
308
+ acc,
309
+ secret, secret.length - XXH_STRIPE_LEN - XXH_SECRET_MERGEACCS_START,
310
+ XXH_MASK_64 ^ mul64(len, XXH_PRIME64_2)
311
+ );
312
+
313
+ return new XXH128Hash(low64, high64);
314
+ }
315
+
316
+ /**
317
+ * Hash `input` to a 128-bit value.
318
+ *
319
+ * @param {Uint8Array} input bytes to hash; an empty array is valid
320
+ * @param {bigint} [seed] alters the whole hash; 0 selects the reference's unseeded behaviour
321
+ * @returns {XXH128Hash}
322
+ */
323
+ export function xxh3_128(input, seed = 0n) {
324
+ xxh3_assert_arguments(input, seed);
325
+
326
+ const len = input.length;
327
+
328
+ if (len <= 16) {
329
+ return len_0to16(input, XXH3_SECRET, seed);
330
+ }
331
+
332
+ if (len <= 128) {
333
+ return len_17to128(input, XXH3_SECRET, seed);
334
+ }
335
+
336
+ if (len <= XXH3_MIDSIZE_MAX) {
337
+ return len_129to240(input, XXH3_SECRET, seed);
338
+ }
339
+
340
+ return hash_long(input, xxh3_long_secret(seed));
341
+ }
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Hash `input` to a 64-bit value.
3
+ *
4
+ * @param {Uint8Array} input bytes to hash; an empty array is valid
5
+ * @param {bigint} [seed] alters the whole hash; 0 selects the reference's unseeded behaviour
6
+ * @returns {bigint} in `[0, 2^64)`
7
+ */
8
+ export function xxh3_64(input: Uint8Array, seed?: bigint): bigint;
9
+ //# sourceMappingURL=xxh3_64.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"xxh3_64.d.ts","sourceRoot":"","sources":["../../../../../src/core/math/hash/xxh3_64.js"],"names":[],"mappings":"AAuNA;;;;;;GAMG;AACH,+BAJW,UAAU,SACV,MAAM,GACJ,MAAM,CAoBlB"}
@@ -0,0 +1,241 @@
1
+ import { XXH3_SECRET } from "./XXH3_SECRET.js";
2
+ import {
3
+ add64,
4
+ mul128_fold64,
5
+ mul64,
6
+ read_u32,
7
+ read_u64,
8
+ sub64,
9
+ swap32,
10
+ swap64,
11
+ u64,
12
+ XXH3_MIDSIZE_LASTOFFSET,
13
+ XXH3_MIDSIZE_MAX,
14
+ XXH3_MIDSIZE_STARTOFFSET,
15
+ XXH3_SECRET_SIZE_MIN,
16
+ xxh3_assert_arguments,
17
+ xxh3_avalanche,
18
+ xxh3_hash_long_loop,
19
+ xxh3_init_acc,
20
+ xxh3_long_secret,
21
+ xxh3_merge_accs,
22
+ xxh3_mix16b,
23
+ xxh3_rrmxmx,
24
+ XXH_PRIME64_1,
25
+ XXH_SECRET_MERGEACCS_START,
26
+ xxh64_avalanche,
27
+ } from "./xxh3_common.js";
28
+
29
+ /**
30
+ * xxHash3, 64-bit output.
31
+ *
32
+ * A direct transcription of the reference implementation, verified against its published sanity
33
+ * vectors — see `xxh3_64.spec.js`. Same bytes and same seed always produce the same value, on every
34
+ * platform, which is what makes it usable as a content address.
35
+ *
36
+ * @see https://github.com/Cyan4973/xxHash
37
+ *
38
+ * @author Alex Goldring
39
+ * @copyright Company Named Limited (c) 2026
40
+ */
41
+
42
+ /**
43
+ * @param {Uint8Array} input 1..3 bytes
44
+ * @param {Uint8Array} secret
45
+ * @param {bigint} seed
46
+ * @returns {bigint}
47
+ */
48
+ function len_1to3(input, secret, seed) {
49
+ const len = input.length;
50
+
51
+ const c1 = input[0];
52
+ const c2 = input[len >> 1];
53
+ const c3 = input[len - 1];
54
+
55
+ const combined = BigInt(
56
+ (((c1 << 16) | (c2 << 24) | c3 | (len << 8)) >>> 0)
57
+ );
58
+
59
+ const bitflip = add64(read_u32(secret, 0) ^ read_u32(secret, 4), seed);
60
+
61
+ return xxh64_avalanche(combined ^ bitflip);
62
+ }
63
+
64
+ /**
65
+ * @param {Uint8Array} input 4..8 bytes
66
+ * @param {Uint8Array} secret
67
+ * @param {bigint} seed
68
+ * @returns {bigint}
69
+ */
70
+ function len_4to8(input, secret, seed) {
71
+ const len = input.length;
72
+
73
+ const mixed_seed = seed ^ u64(swap32(seed) << 32n);
74
+
75
+ const input1 = read_u32(input, 0);
76
+ const input2 = read_u32(input, len - 4);
77
+
78
+ const bitflip = sub64(read_u64(secret, 8) ^ read_u64(secret, 16), mixed_seed);
79
+ const input64 = add64(input2, input1 << 32n);
80
+
81
+ return xxh3_rrmxmx(input64 ^ bitflip, len);
82
+ }
83
+
84
+ /**
85
+ * @param {Uint8Array} input 9..16 bytes
86
+ * @param {Uint8Array} secret
87
+ * @param {bigint} seed
88
+ * @returns {bigint}
89
+ */
90
+ function len_9to16(input, secret, seed) {
91
+ const len = input.length;
92
+
93
+ const bitflip1 = add64(read_u64(secret, 24) ^ read_u64(secret, 32), seed);
94
+ const bitflip2 = sub64(read_u64(secret, 40) ^ read_u64(secret, 48), seed);
95
+
96
+ const input_lo = read_u64(input, 0) ^ bitflip1;
97
+ const input_hi = read_u64(input, len - 8) ^ bitflip2;
98
+
99
+ const acc = add64(
100
+ add64(BigInt(len), add64(swap64(input_lo), input_hi)),
101
+ mul128_fold64(input_lo, input_hi)
102
+ );
103
+
104
+ return xxh3_avalanche(acc);
105
+ }
106
+
107
+ /**
108
+ * @param {Uint8Array} input 0..16 bytes
109
+ * @param {Uint8Array} secret
110
+ * @param {bigint} seed
111
+ * @returns {bigint}
112
+ */
113
+ function len_0to16(input, secret, seed) {
114
+ const len = input.length;
115
+
116
+ if (len > 8) {
117
+ return len_9to16(input, secret, seed);
118
+ }
119
+
120
+ if (len >= 4) {
121
+ return len_4to8(input, secret, seed);
122
+ }
123
+
124
+ if (len > 0) {
125
+ return len_1to3(input, secret, seed);
126
+ }
127
+
128
+ return xxh64_avalanche(seed ^ (read_u64(secret, 56) ^ read_u64(secret, 64)));
129
+ }
130
+
131
+ /**
132
+ * @param {Uint8Array} input 17..128 bytes
133
+ * @param {Uint8Array} secret
134
+ * @param {bigint} seed
135
+ * @returns {bigint}
136
+ */
137
+ function len_17to128(input, secret, seed) {
138
+ const len = input.length;
139
+
140
+ let acc = mul64(BigInt(len), XXH_PRIME64_1);
141
+
142
+ if (len > 32) {
143
+ if (len > 64) {
144
+ if (len > 96) {
145
+ acc = add64(acc, xxh3_mix16b(input, 48, secret, 96, seed));
146
+ acc = add64(acc, xxh3_mix16b(input, len - 64, secret, 112, seed));
147
+ }
148
+
149
+ acc = add64(acc, xxh3_mix16b(input, 32, secret, 64, seed));
150
+ acc = add64(acc, xxh3_mix16b(input, len - 48, secret, 80, seed));
151
+ }
152
+
153
+ acc = add64(acc, xxh3_mix16b(input, 16, secret, 32, seed));
154
+ acc = add64(acc, xxh3_mix16b(input, len - 32, secret, 48, seed));
155
+ }
156
+
157
+ acc = add64(acc, xxh3_mix16b(input, 0, secret, 0, seed));
158
+ acc = add64(acc, xxh3_mix16b(input, len - 16, secret, 16, seed));
159
+
160
+ return xxh3_avalanche(acc);
161
+ }
162
+
163
+ /**
164
+ * @param {Uint8Array} input 129..240 bytes
165
+ * @param {Uint8Array} secret
166
+ * @param {bigint} seed
167
+ * @returns {bigint}
168
+ */
169
+ function len_129to240(input, secret, seed) {
170
+ const len = input.length;
171
+
172
+ let acc = mul64(BigInt(len), XXH_PRIME64_1);
173
+
174
+ const round_count = (len / 16) | 0;
175
+
176
+ for (let i = 0; i < 8; i++) {
177
+ acc = add64(acc, xxh3_mix16b(input, 16 * i, secret, 16 * i, seed));
178
+ }
179
+
180
+ let acc_end = xxh3_mix16b(
181
+ input, len - 16,
182
+ secret, XXH3_SECRET_SIZE_MIN - XXH3_MIDSIZE_LASTOFFSET,
183
+ seed
184
+ );
185
+
186
+ acc = xxh3_avalanche(acc);
187
+
188
+ for (let i = 8; i < round_count; i++) {
189
+ acc_end = add64(acc_end, xxh3_mix16b(
190
+ input, 16 * i,
191
+ secret, 16 * (i - 8) + XXH3_MIDSIZE_STARTOFFSET,
192
+ seed
193
+ ));
194
+ }
195
+
196
+ return xxh3_avalanche(add64(acc, acc_end));
197
+ }
198
+
199
+ /**
200
+ * @param {Uint8Array} input more than {@link XXH3_MIDSIZE_MAX} bytes
201
+ * @param {Uint8Array} secret
202
+ * @returns {bigint}
203
+ */
204
+ function hash_long(input, secret) {
205
+ const acc = xxh3_init_acc();
206
+
207
+ xxh3_hash_long_loop(acc, input, secret);
208
+
209
+ return xxh3_merge_accs(
210
+ acc,
211
+ secret, XXH_SECRET_MERGEACCS_START,
212
+ mul64(BigInt(input.length), XXH_PRIME64_1)
213
+ );
214
+ }
215
+
216
+ /**
217
+ * Hash `input` to a 64-bit value.
218
+ *
219
+ * @param {Uint8Array} input bytes to hash; an empty array is valid
220
+ * @param {bigint} [seed] alters the whole hash; 0 selects the reference's unseeded behaviour
221
+ * @returns {bigint} in `[0, 2^64)`
222
+ */
223
+ export function xxh3_64(input, seed = 0n) {
224
+ xxh3_assert_arguments(input, seed);
225
+
226
+ const len = input.length;
227
+
228
+ if (len <= 16) {
229
+ return len_0to16(input, XXH3_SECRET, seed);
230
+ }
231
+
232
+ if (len <= 128) {
233
+ return len_17to128(input, XXH3_SECRET, seed);
234
+ }
235
+
236
+ if (len <= XXH3_MIDSIZE_MAX) {
237
+ return len_129to240(input, XXH3_SECRET, seed);
238
+ }
239
+
240
+ return hash_long(input, xxh3_long_secret(seed));
241
+ }