@adobe/data 0.8.5 → 0.8.6

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 (846) hide show
  1. package/dist/blob/download-handle.d.ts +4 -0
  2. package/dist/blob/download-handle.js +2 -0
  3. package/dist/blob/download-handle.js.map +1 -0
  4. package/dist/blob/upload-handle.d.ts +4 -0
  5. package/dist/blob/upload-handle.js +2 -0
  6. package/dist/blob/upload-handle.js.map +1 -0
  7. package/dist/ecs/database/create-database.d.ts +6 -6
  8. package/dist/ecs/database/create-database.js +38 -10
  9. package/dist/ecs/database/create-database.js.map +1 -1
  10. package/dist/ecs/database/create-database.test.js +55 -11
  11. package/dist/ecs/database/create-database.test.js.map +1 -1
  12. package/dist/ecs/database/database-schema/create-database-schema.js +7 -3
  13. package/dist/ecs/database/database-schema/create-database-schema.js.map +1 -1
  14. package/dist/ecs/database/database.d.ts +5 -1
  15. package/dist/ecs/database/database.js +5 -1
  16. package/dist/ecs/database/database.js.map +1 -1
  17. package/dist/ecs/database/index.d.ts +1 -1
  18. package/dist/ecs/database/index.js +1 -1
  19. package/dist/ecs/database/index.js.map +1 -1
  20. package/dist/ecs/database/observe-dependent-value.test.js +8 -16
  21. package/dist/ecs/database/observe-dependent-value.test.js.map +1 -1
  22. package/dist/ecs/database/observe-select-entities.performance.test.js +21 -17
  23. package/dist/ecs/database/observe-select-entities.performance.test.js.map +1 -1
  24. package/dist/ecs/database/observe-select-entities.test.js +21 -17
  25. package/dist/ecs/database/observe-select-entities.test.js.map +1 -1
  26. package/dist/ecs/database/observed/create-observed-database.test.js +14 -10
  27. package/dist/ecs/database/observed/create-observed-database.test.js.map +1 -1
  28. package/dist/ecs/database/public/create-database.d.ts +7 -0
  29. package/dist/ecs/database/public/create-database.js +132 -0
  30. package/dist/ecs/database/public/create-database.js.map +1 -0
  31. package/dist/ecs/database/public/create-database.test.d.ts +1 -0
  32. package/dist/ecs/database/public/create-database.test.js +862 -0
  33. package/dist/ecs/database/public/create-database.test.js.map +1 -0
  34. package/dist/ecs/database/public/index.d.ts +1 -0
  35. package/dist/ecs/database/public/index.js +22 -0
  36. package/dist/ecs/database/public/index.js.map +1 -0
  37. package/dist/ecs/database/reconciling/create-reconciling-database.d.ts +1 -8
  38. package/dist/ecs/database/reconciling/create-reconciling-database.js +82 -118
  39. package/dist/ecs/database/reconciling/create-reconciling-database.js.map +1 -1
  40. package/dist/ecs/database/reconciling/create-reconciling-database.test.js +83 -165
  41. package/dist/ecs/database/reconciling/create-reconciling-database.test.js.map +1 -1
  42. package/dist/ecs/database/reconciling/reconciling-database.d.ts +1 -0
  43. package/dist/ecs/database/reconciling/reconciling-entry.d.ts +0 -11
  44. package/dist/ecs/database/reconciling/reconciling-entry.js +0 -34
  45. package/dist/ecs/database/reconciling/reconciling-entry.js.map +1 -1
  46. package/dist/ecs/database/transactional-store/create-transactional-store.test.js +85 -19
  47. package/dist/ecs/database/transactional-store/create-transactional-store.test.js.map +1 -1
  48. package/dist/ecs/database/transactional-store/entity-id-preservation.test.d.ts +1 -0
  49. package/dist/ecs/database/transactional-store/entity-id-preservation.test.js +106 -0
  50. package/dist/ecs/database/transactional-store/entity-id-preservation.test.js.map +1 -0
  51. package/dist/ecs/entity/entity.d.ts +8 -0
  52. package/dist/ecs/entity/entity.js +3 -0
  53. package/dist/ecs/entity/entity.js.map +1 -0
  54. package/dist/ecs/entity/u32.d.ts +8 -0
  55. package/dist/ecs/entity/u32.js +24 -0
  56. package/dist/ecs/entity/u32.js.map +1 -0
  57. package/dist/ecs/store/constants/functions.d.ts +14 -0
  58. package/dist/ecs/store/constants/functions.js +31 -0
  59. package/dist/ecs/store/constants/functions.js.map +1 -0
  60. package/dist/ecs/store/constants/index.d.ts +2 -0
  61. package/dist/ecs/store/constants/index.js +24 -0
  62. package/dist/ecs/store/constants/index.js.map +1 -0
  63. package/dist/ecs/store/constants/types.d.ts +18 -0
  64. package/dist/ecs/store/constants/types.js +23 -0
  65. package/dist/ecs/store/constants/types.js.map +1 -0
  66. package/dist/ecs/store/create-store.d.ts +1 -1
  67. package/dist/ecs/store/create-store.js +74 -24
  68. package/dist/ecs/store/create-store.js.map +1 -1
  69. package/dist/ecs/store/create-store.test.js +171 -171
  70. package/dist/ecs/store/create-store.test.js.map +1 -1
  71. package/dist/ecs/store/index.d.ts +0 -1
  72. package/dist/ecs/store/index.js +0 -1
  73. package/dist/ecs/store/index.js.map +1 -1
  74. package/dist/ecs/store/public/create-from-schema.d.ts +6 -0
  75. package/dist/ecs/store/public/create-from-schema.js +26 -0
  76. package/dist/ecs/store/public/create-from-schema.js.map +1 -0
  77. package/dist/ecs/store/public/create-store.d.ts +8 -0
  78. package/dist/ecs/store/public/create-store.js +126 -0
  79. package/dist/ecs/store/public/create-store.js.map +1 -0
  80. package/dist/ecs/store/public/create-store.test.d.ts +1 -0
  81. package/dist/ecs/store/public/create-store.test.js +725 -0
  82. package/dist/ecs/store/public/create-store.test.js.map +1 -0
  83. package/dist/ecs/store/public/index.d.ts +3 -0
  84. package/dist/ecs/store/public/index.js +25 -0
  85. package/dist/ecs/store/public/index.js.map +1 -0
  86. package/dist/ecs/store/public/readonly.d.ts +19 -0
  87. package/dist/ecs/store/public/readonly.js +2 -0
  88. package/dist/ecs/store/public/readonly.js.map +1 -0
  89. package/dist/ecs/store/public/schema/create-from-schema.d.ts +6 -0
  90. package/dist/ecs/store/public/schema/create-from-schema.js +26 -0
  91. package/dist/ecs/store/public/schema/create-from-schema.js.map +1 -0
  92. package/dist/ecs/store/public/schema/create.d.ts +10 -0
  93. package/dist/ecs/store/public/schema/create.js +25 -0
  94. package/dist/ecs/store/public/schema/create.js.map +1 -0
  95. package/dist/ecs/store/public/schema/createFromSchema.d.ts +6 -0
  96. package/dist/ecs/store/public/schema/createFromSchema.js +5 -0
  97. package/dist/ecs/store/public/schema/createFromSchema.js.map +1 -0
  98. package/dist/ecs/store/public/schema/public.d.ts +1 -0
  99. package/dist/ecs/store/public/schema/public.js +23 -0
  100. package/dist/ecs/store/public/schema/public.js.map +1 -0
  101. package/dist/ecs/store/public/schema/schema.d.ts +11 -0
  102. package/dist/ecs/store/public/schema/schema.js +23 -0
  103. package/dist/ecs/store/public/schema/schema.js.map +1 -0
  104. package/dist/ecs/store/public/types.d.ts +11 -0
  105. package/dist/ecs/store/public/types.js +23 -0
  106. package/dist/ecs/store/public/types.js.map +1 -0
  107. package/dist/ecs/store/store-schema/create-store-schema-test.d.ts +1 -0
  108. package/dist/ecs/store/store-schema/create-store-schema-test.js +33 -0
  109. package/dist/ecs/store/store-schema/create-store-schema-test.js.map +1 -0
  110. package/dist/ecs/store/store-schema/create-store-schema.d.ts +1 -0
  111. package/dist/ecs/store/store-schema/create-store-schema.js +45 -0
  112. package/dist/ecs/store/store-schema/create-store-schema.js.map +1 -0
  113. package/dist/ecs/store/store-schema/index.d.ts +1 -0
  114. package/dist/ecs/store/store-schema/index.js +21 -0
  115. package/dist/ecs/store/store-schema/index.js.map +1 -0
  116. package/dist/ecs/store/store-schema/store-schema.d.ts +1 -0
  117. package/dist/ecs/store/store-schema/store-schema.js +57 -0
  118. package/dist/ecs/store/store-schema/store-schema.js.map +1 -0
  119. package/dist/ecs/store/store.d.ts +4 -2
  120. package/dist/ecs/store/store.js +2 -6
  121. package/dist/ecs/store/store.js.map +1 -1
  122. package/dist/ecs/undo-redo-service/create-undo-redo-service.test.js +10 -6
  123. package/dist/ecs/undo-redo-service/create-undo-redo-service.test.js.map +1 -1
  124. package/dist/ecs/world/create-world.d.ts +7 -0
  125. package/dist/ecs/world/create-world.js +113 -0
  126. package/dist/ecs/world/create-world.js.map +1 -0
  127. package/dist/ecs/world/create-world.test.d.ts +1 -0
  128. package/dist/ecs/world/create-world.test.js +499 -0
  129. package/dist/ecs/world/create-world.test.js.map +1 -0
  130. package/dist/ecs/world/index.d.ts +5 -0
  131. package/dist/ecs/world/index.js +27 -0
  132. package/dist/ecs/world/index.js.map +1 -0
  133. package/dist/ecs/world/system-phase.d.ts +5 -0
  134. package/dist/ecs/world/system-phase.js +14 -0
  135. package/dist/ecs/world/system-phase.js.map +1 -0
  136. package/dist/ecs/world/system.d.ts +25 -0
  137. package/dist/ecs/world/system.js +2 -0
  138. package/dist/ecs/world/system.js.map +1 -0
  139. package/dist/ecs/world/world-schema/create-world-schema-test.d.ts +1 -0
  140. package/dist/ecs/world/world-schema/create-world-schema-test.js +55 -0
  141. package/dist/ecs/world/world-schema/create-world-schema-test.js.map +1 -0
  142. package/dist/ecs/world/world-schema/create-world-schema.d.ts +19 -0
  143. package/dist/ecs/world/world-schema/create-world-schema.js +33 -0
  144. package/dist/ecs/world/world-schema/create-world-schema.js.map +1 -0
  145. package/dist/ecs/world/world-schema/index.d.ts +2 -0
  146. package/dist/ecs/world/world-schema/index.js +24 -0
  147. package/dist/ecs/world/world-schema/index.js.map +1 -0
  148. package/dist/ecs/world/world-schema/world-schema.d.ts +18 -0
  149. package/dist/ecs/world/world-schema/world-schema.js +23 -0
  150. package/dist/ecs/world/world-schema/world-schema.js.map +1 -0
  151. package/dist/ecs/world/world.d.ts +11 -0
  152. package/dist/ecs/world/world.js +2 -0
  153. package/dist/ecs/world/world.js.map +1 -0
  154. package/dist/graphics/camera/camera.d.ts +62 -0
  155. package/dist/graphics/camera/camera.js +17 -0
  156. package/dist/graphics/camera/camera.js.map +1 -0
  157. package/dist/graphics/camera/index.d.ts +4 -0
  158. package/dist/graphics/camera/index.js +5 -0
  159. package/dist/graphics/camera/index.js.map +1 -0
  160. package/dist/graphics/camera/screen-to-world-ray.d.ts +12 -0
  161. package/dist/graphics/camera/screen-to-world-ray.js +49 -0
  162. package/dist/graphics/camera/screen-to-world-ray.js.map +1 -0
  163. package/dist/graphics/camera/screen-to-world-ray.test.d.ts +1 -0
  164. package/dist/graphics/camera/screen-to-world-ray.test.js +171 -0
  165. package/dist/graphics/camera/screen-to-world-ray.test.js.map +1 -0
  166. package/dist/graphics/camera/to-view-projection.d.ts +3 -0
  167. package/dist/graphics/camera/to-view-projection.js +8 -0
  168. package/dist/graphics/camera/to-view-projection.js.map +1 -0
  169. package/dist/graphics/camera/world-to-screen.d.ts +12 -0
  170. package/dist/graphics/camera/world-to-screen.js +38 -0
  171. package/dist/graphics/camera/world-to-screen.js.map +1 -0
  172. package/dist/graphics/camera/world-to-screen.test.d.ts +1 -0
  173. package/dist/graphics/camera/world-to-screen.test.js +124 -0
  174. package/dist/graphics/camera/world-to-screen.test.js.map +1 -0
  175. package/dist/graphics/create-struct-gpu-buffer.d.ts +7 -0
  176. package/dist/graphics/create-struct-gpu-buffer.js +17 -0
  177. package/dist/graphics/create-struct-gpu-buffer.js.map +1 -0
  178. package/dist/graphics/extract-wgsl-bindings.d.ts +5 -0
  179. package/dist/graphics/extract-wgsl-bindings.js +10 -0
  180. package/dist/graphics/extract-wgsl-bindings.js.map +1 -0
  181. package/dist/graphics/frame.d.ts +1 -0
  182. package/dist/graphics/frame.js +15 -0
  183. package/dist/graphics/frame.js.map +1 -0
  184. package/dist/graphics/get-web-gpu-device-and-context.d.ts +1 -0
  185. package/dist/graphics/get-web-gpu-device-and-context.js +24 -0
  186. package/dist/graphics/get-web-gpu-device-and-context.js.map +1 -0
  187. package/dist/graphics/graphics-context.d.ts +1 -0
  188. package/dist/graphics/graphics-context.js +7 -0
  189. package/dist/graphics/graphics-context.js.map +1 -0
  190. package/dist/graphics/index.d.ts +5 -0
  191. package/dist/graphics/index.js +5 -0
  192. package/dist/graphics/index.js.map +1 -0
  193. package/dist/graphics/to-gpu-buffer.d.ts +2 -0
  194. package/dist/graphics/to-gpu-buffer.js +14 -0
  195. package/dist/graphics/to-gpu-buffer.js.map +1 -0
  196. package/dist/internal/array-buffer-like/grow.d.ts +1 -0
  197. package/dist/internal/array-buffer-like/grow.js +9 -0
  198. package/dist/internal/array-buffer-like/grow.js.map +1 -0
  199. package/dist/math/aabb/aabb.d.ts +3 -52
  200. package/dist/math/aabb/aabb.js +2 -97
  201. package/dist/math/aabb/aabb.js.map +1 -1
  202. package/dist/math/aabb/constants/functions.d.ts +15 -0
  203. package/dist/math/aabb/constants/functions.js +76 -0
  204. package/dist/math/aabb/constants/functions.js.map +1 -0
  205. package/dist/math/aabb/constants/index.d.ts +3 -0
  206. package/dist/math/aabb/constants/index.js +25 -0
  207. package/dist/math/aabb/constants/index.js.map +1 -0
  208. package/dist/math/aabb/constants/layout.d.ts +1 -0
  209. package/dist/math/aabb/constants/layout.js +25 -0
  210. package/dist/math/aabb/constants/layout.js.map +1 -0
  211. package/dist/math/aabb/constants/schema.d.ts +33 -0
  212. package/dist/math/aabb/constants/schema.js +37 -0
  213. package/dist/math/aabb/constants/schema.js.map +1 -0
  214. package/dist/math/aabb/functions.d.ts +1 -0
  215. package/dist/math/aabb/functions.js +23 -0
  216. package/dist/math/aabb/functions.js.map +1 -0
  217. package/dist/math/aabb/lineIntersection.d.ts +10 -0
  218. package/dist/math/aabb/lineIntersection.js +42 -0
  219. package/dist/math/aabb/lineIntersection.js.map +1 -0
  220. package/dist/math/aabb-face/aabb-face.d.ts +3 -53
  221. package/dist/math/aabb-face/aabb-face.js +1 -135
  222. package/dist/math/aabb-face/aabb-face.js.map +1 -1
  223. package/dist/math/aabb-face/aabb-face.test.js +1 -1
  224. package/dist/math/aabb-face/aabb-face.test.js.map +1 -1
  225. package/dist/math/aabb-face/constants/functions.d.ts +47 -0
  226. package/dist/math/aabb-face/constants/functions.js +148 -0
  227. package/dist/math/aabb-face/constants/functions.js.map +1 -0
  228. package/dist/math/aabb-face/constants/index.d.ts +2 -0
  229. package/dist/math/aabb-face/constants/index.js +24 -0
  230. package/dist/math/aabb-face/constants/index.js.map +1 -0
  231. package/dist/math/aabb-face/constants/schema.d.ts +5 -0
  232. package/dist/math/aabb-face/constants/schema.js +27 -0
  233. package/dist/math/aabb-face/constants/schema.js.map +1 -0
  234. package/dist/math/aabb-face/face.d.ts +51 -0
  235. package/dist/math/aabb-face/face.js +110 -0
  236. package/dist/math/aabb-face/face.js.map +1 -0
  237. package/dist/math/aabb-face/face.test.d.ts +1 -0
  238. package/dist/math/aabb-face/face.test.js +94 -0
  239. package/dist/math/aabb-face/face.test.js.map +1 -0
  240. package/dist/math/aabb-face/functions.d.ts +47 -0
  241. package/dist/math/aabb-face/functions.js +148 -0
  242. package/dist/math/aabb-face/functions.js.map +1 -0
  243. package/dist/math/aabb-face/index.d.ts +4 -0
  244. package/dist/math/aabb-face/index.js +23 -0
  245. package/dist/math/aabb-face/index.js.map +1 -0
  246. package/dist/math/aabb-face/public.d.ts +2 -0
  247. package/dist/math/aabb-face/public.js +24 -0
  248. package/dist/math/aabb-face/public.js.map +1 -0
  249. package/dist/math/aabb-face/schema.d.ts +5 -0
  250. package/dist/math/aabb-face/schema.js +27 -0
  251. package/dist/math/aabb-face/schema.js.map +1 -0
  252. package/dist/math/box/box.d.ts +50 -0
  253. package/dist/math/box/box.js +23 -0
  254. package/dist/math/box/box.js.map +1 -0
  255. package/dist/math/f32/constants/index.d.ts +1 -0
  256. package/dist/math/f32/constants/index.js +23 -0
  257. package/dist/math/f32/constants/index.js.map +1 -0
  258. package/dist/math/f32/constants/schema.d.ts +5 -0
  259. package/dist/math/f32/constants/schema.js +24 -0
  260. package/dist/math/f32/constants/schema.js.map +1 -0
  261. package/dist/math/f32/f32.d.ts +3 -8
  262. package/dist/math/f32/f32.js +1 -6
  263. package/dist/math/f32/f32.js.map +1 -1
  264. package/dist/math/face/face.d.ts +51 -0
  265. package/dist/math/face/face.js +110 -0
  266. package/dist/math/face/face.js.map +1 -0
  267. package/dist/math/face/face.test.d.ts +1 -0
  268. package/dist/math/face/face.test.js +94 -0
  269. package/dist/math/face/face.test.js.map +1 -0
  270. package/dist/math/i32/constants/index.d.ts +1 -0
  271. package/dist/math/i32/constants/index.js +23 -0
  272. package/dist/math/i32/constants/index.js.map +1 -0
  273. package/dist/math/i32/constants/schema.d.ts +6 -0
  274. package/dist/math/i32/constants/schema.js +24 -0
  275. package/dist/math/i32/constants/schema.js.map +1 -0
  276. package/dist/math/i32/i32.d.ts +3 -9
  277. package/dist/math/i32/i32.js +1 -6
  278. package/dist/math/i32/i32.js.map +1 -1
  279. package/dist/math/line2/constants/functions.d.ts +5 -0
  280. package/dist/math/line2/constants/functions.js +61 -0
  281. package/dist/math/line2/constants/functions.js.map +1 -0
  282. package/dist/math/line2/constants/index.d.ts +3 -0
  283. package/dist/math/line2/constants/index.js +25 -0
  284. package/dist/math/line2/constants/index.js.map +1 -0
  285. package/dist/math/line2/constants/layout.d.ts +1 -0
  286. package/dist/math/line2/constants/layout.js +25 -0
  287. package/dist/math/line2/constants/layout.js.map +1 -0
  288. package/dist/math/line2/constants/schema.d.ts +33 -0
  289. package/dist/math/line2/constants/schema.js +37 -0
  290. package/dist/math/line2/constants/schema.js.map +1 -0
  291. package/dist/math/line2/line2.d.ts +3 -41
  292. package/dist/math/line2/line2.js +1 -60
  293. package/dist/math/line2/line2.js.map +1 -1
  294. package/dist/math/line3/constants/functions.d.ts +17 -0
  295. package/dist/math/line3/constants/functions.js +70 -0
  296. package/dist/math/line3/constants/functions.js.map +1 -0
  297. package/dist/math/line3/constants/index.d.ts +3 -0
  298. package/dist/math/line3/constants/index.js +25 -0
  299. package/dist/math/line3/constants/index.js.map +1 -0
  300. package/dist/math/line3/constants/layout.d.ts +1 -0
  301. package/dist/math/line3/constants/layout.js +25 -0
  302. package/dist/math/line3/constants/layout.js.map +1 -0
  303. package/dist/math/line3/constants/schema.d.ts +33 -0
  304. package/dist/math/line3/constants/schema.js +37 -0
  305. package/dist/math/line3/constants/schema.js.map +1 -0
  306. package/dist/math/line3/line3.d.ts +3 -53
  307. package/dist/math/line3/line3.js +1 -68
  308. package/dist/math/line3/line3.js.map +1 -1
  309. package/dist/math/mat4x4/constants/functions.d.ts +23 -0
  310. package/dist/math/mat4x4/constants/functions.js +236 -0
  311. package/dist/math/mat4x4/constants/functions.js.map +1 -0
  312. package/dist/math/mat4x4/constants/index.d.ts +3 -0
  313. package/dist/math/mat4x4/constants/index.js +25 -0
  314. package/dist/math/mat4x4/constants/index.js.map +1 -0
  315. package/dist/math/mat4x4/constants/layout.d.ts +1 -0
  316. package/dist/math/mat4x4/constants/layout.js +25 -0
  317. package/dist/math/mat4x4/constants/layout.js.map +1 -0
  318. package/dist/math/mat4x4/constants/schema.d.ts +11 -0
  319. package/dist/math/mat4x4/constants/schema.js +30 -0
  320. package/dist/math/mat4x4/constants/schema.js.map +1 -0
  321. package/dist/math/mat4x4/mat4x4.d.ts +3 -36
  322. package/dist/math/mat4x4/mat4x4.js +1 -228
  323. package/dist/math/mat4x4/mat4x4.js.map +1 -1
  324. package/dist/math/picking/face.d.ts +1 -0
  325. package/dist/math/picking/face.js +2 -0
  326. package/dist/math/picking/face.js.map +1 -0
  327. package/dist/math/picking/get-closest-entity-to-line.d.ts +4 -0
  328. package/dist/math/picking/get-closest-entity-to-line.js +30 -0
  329. package/dist/math/picking/get-closest-entity-to-line.js.map +1 -0
  330. package/dist/math/picking/get-closest-entity-to-point.d.ts +4 -0
  331. package/dist/math/picking/get-closest-entity-to-point.js +27 -0
  332. package/dist/math/picking/get-closest-entity-to-point.js.map +1 -0
  333. package/dist/math/picking/get-intersecting-entities.d.ts +12 -0
  334. package/dist/math/picking/get-intersecting-entities.js +15 -0
  335. package/dist/math/picking/get-intersecting-entities.js.map +1 -0
  336. package/dist/math/picking/getClosestEntityToLine.d.ts +4 -0
  337. package/dist/math/picking/getClosestEntityToLine.js +29 -0
  338. package/dist/math/picking/getClosestEntityToLine.js.map +1 -0
  339. package/dist/math/picking/getClosestEntityToPoint.d.ts +4 -0
  340. package/dist/math/picking/getClosestEntityToPoint.js +27 -0
  341. package/dist/math/picking/getClosestEntityToPoint.js.map +1 -0
  342. package/dist/math/picking/getIntersectingEntities.d.ts +12 -0
  343. package/dist/math/picking/getIntersectingEntities.js +15 -0
  344. package/dist/math/picking/getIntersectingEntities.js.map +1 -0
  345. package/dist/math/picking/index.d.ts +5 -0
  346. package/dist/math/picking/index.js +27 -0
  347. package/dist/math/picking/index.js.map +1 -0
  348. package/dist/math/picking/pick-from-tables.d.ts +19 -0
  349. package/dist/math/picking/pick-from-tables.js +63 -0
  350. package/dist/math/picking/pick-from-tables.js.map +1 -0
  351. package/dist/math/picking/pick-result.d.ts +12 -0
  352. package/dist/math/picking/pick-result.js +23 -0
  353. package/dist/math/picking/pick-result.js.map +1 -0
  354. package/dist/math/plane/constants/functions.d.ts +16 -0
  355. package/dist/math/plane/constants/functions.js +54 -0
  356. package/dist/math/plane/constants/functions.js.map +1 -0
  357. package/dist/math/plane/constants/index.d.ts +3 -0
  358. package/dist/math/plane/constants/index.js +25 -0
  359. package/dist/math/plane/constants/index.js.map +1 -0
  360. package/dist/math/plane/constants/layout.d.ts +1 -0
  361. package/dist/math/plane/constants/layout.js +25 -0
  362. package/dist/math/plane/constants/layout.js.map +1 -0
  363. package/dist/math/plane/constants/schema.d.ts +24 -0
  364. package/dist/{schema/type.js → math/plane/constants/schema.js} +7 -7
  365. package/dist/math/plane/constants/schema.js.map +1 -0
  366. package/dist/math/plane/plane.d.ts +3 -42
  367. package/dist/math/plane/plane.js +1 -49
  368. package/dist/math/plane/plane.js.map +1 -1
  369. package/dist/math/quat/constants/index.d.ts +3 -0
  370. package/dist/math/quat/constants/index.js +25 -0
  371. package/dist/math/quat/constants/index.js.map +1 -0
  372. package/dist/math/quat/constants/layout.d.ts +1 -0
  373. package/dist/math/quat/constants/layout.js +25 -0
  374. package/dist/math/quat/constants/layout.js.map +1 -0
  375. package/dist/math/quat/constants/schema.d.ts +11 -0
  376. package/dist/math/quat/constants/schema.js +30 -0
  377. package/dist/math/quat/constants/schema.js.map +1 -0
  378. package/dist/math/quat/quat.d.ts +3 -56
  379. package/dist/math/quat/quat.js +1 -250
  380. package/dist/math/quat/quat.js.map +1 -1
  381. package/dist/math/transform/debug-inverse.d.ts +1 -0
  382. package/dist/math/transform/debug-inverse.js +28 -0
  383. package/dist/math/transform/debug-inverse.js.map +1 -0
  384. package/dist/math/transform/debug-quat.d.ts +1 -0
  385. package/dist/math/transform/debug-quat.js +23 -0
  386. package/dist/math/transform/debug-quat.js.map +1 -0
  387. package/dist/math/transform/debug-test.d.ts +1 -0
  388. package/dist/math/transform/debug-test.js +34 -0
  389. package/dist/math/transform/debug-test.js.map +1 -0
  390. package/dist/math/transform/transform.d.ts +58 -0
  391. package/dist/math/transform/transform.js +101 -0
  392. package/dist/math/transform/transform.js.map +1 -0
  393. package/dist/math/transform/transform.test.d.ts +1 -0
  394. package/dist/math/transform/transform.test.js +309 -0
  395. package/dist/math/transform/transform.test.js.map +1 -0
  396. package/dist/math/u32/constants/index.d.ts +1 -0
  397. package/dist/math/u32/constants/index.js +23 -0
  398. package/dist/math/u32/constants/index.js.map +1 -0
  399. package/dist/math/u32/constants/schema.d.ts +6 -0
  400. package/dist/math/u32/constants/schema.js +24 -0
  401. package/dist/math/u32/constants/schema.js.map +1 -0
  402. package/dist/math/u32/u32.d.ts +3 -9
  403. package/dist/math/u32/u32.js +1 -6
  404. package/dist/math/u32/u32.js.map +1 -1
  405. package/dist/math/vec2/constants/functions.d.ts +48 -0
  406. package/dist/math/vec2/constants/functions.js +104 -0
  407. package/dist/math/vec2/constants/functions.js.map +1 -0
  408. package/dist/math/vec2/constants/index.d.ts +3 -0
  409. package/dist/math/vec2/constants/index.js +25 -0
  410. package/dist/math/vec2/constants/index.js.map +1 -0
  411. package/dist/math/vec2/constants/layout.d.ts +1 -0
  412. package/dist/math/vec2/constants/layout.js +25 -0
  413. package/dist/math/vec2/constants/layout.js.map +1 -0
  414. package/dist/math/vec2/constants/schema.d.ts +11 -0
  415. package/dist/math/vec2/constants/schema.js +30 -0
  416. package/dist/math/vec2/constants/schema.js.map +1 -0
  417. package/dist/math/vec2/functions/abs.d.ts +2 -0
  418. package/dist/math/vec2/functions/abs.js +23 -0
  419. package/dist/math/vec2/functions/abs.js.map +1 -0
  420. package/dist/math/vec2/functions/acos.d.ts +2 -0
  421. package/dist/math/vec2/functions/acos.js +23 -0
  422. package/dist/math/vec2/functions/acos.js.map +1 -0
  423. package/dist/math/vec2/functions/acosh.d.ts +2 -0
  424. package/dist/math/vec2/functions/acosh.js +23 -0
  425. package/dist/math/vec2/functions/acosh.js.map +1 -0
  426. package/dist/math/vec2/functions/add.d.ts +2 -0
  427. package/dist/math/vec2/functions/add.js +23 -0
  428. package/dist/math/vec2/functions/add.js.map +1 -0
  429. package/dist/math/vec2/functions/asin.d.ts +2 -0
  430. package/dist/math/vec2/functions/asin.js +23 -0
  431. package/dist/math/vec2/functions/asin.js.map +1 -0
  432. package/dist/math/vec2/functions/asinh.d.ts +2 -0
  433. package/dist/math/vec2/functions/asinh.js +23 -0
  434. package/dist/math/vec2/functions/asinh.js.map +1 -0
  435. package/dist/math/vec2/functions/atan.d.ts +2 -0
  436. package/dist/math/vec2/functions/atan.js +23 -0
  437. package/dist/math/vec2/functions/atan.js.map +1 -0
  438. package/dist/math/vec2/functions/atanh.d.ts +2 -0
  439. package/dist/math/vec2/functions/atanh.js +23 -0
  440. package/dist/math/vec2/functions/atanh.js.map +1 -0
  441. package/dist/math/vec2/functions/ceil.d.ts +2 -0
  442. package/dist/math/vec2/functions/ceil.js +23 -0
  443. package/dist/math/vec2/functions/ceil.js.map +1 -0
  444. package/dist/math/vec2/functions/clamp.d.ts +2 -0
  445. package/dist/math/vec2/functions/clamp.js +25 -0
  446. package/dist/math/vec2/functions/clamp.js.map +1 -0
  447. package/dist/math/vec2/functions/cos.d.ts +2 -0
  448. package/dist/math/vec2/functions/cos.js +23 -0
  449. package/dist/math/vec2/functions/cos.js.map +1 -0
  450. package/dist/math/vec2/functions/cosh.d.ts +2 -0
  451. package/dist/math/vec2/functions/cosh.js +23 -0
  452. package/dist/math/vec2/functions/cosh.js.map +1 -0
  453. package/dist/math/vec2/functions/distance.d.ts +2 -0
  454. package/dist/math/vec2/functions/distance.js +25 -0
  455. package/dist/math/vec2/functions/distance.js.map +1 -0
  456. package/dist/math/vec2/functions/dot.d.ts +2 -0
  457. package/dist/math/vec2/functions/dot.js +23 -0
  458. package/dist/math/vec2/functions/dot.js.map +1 -0
  459. package/dist/math/vec2/functions/exp-2.d.ts +2 -0
  460. package/dist/math/vec2/functions/exp-2.js +23 -0
  461. package/dist/math/vec2/functions/exp-2.js.map +1 -0
  462. package/dist/math/vec2/functions/exp.d.ts +2 -0
  463. package/dist/math/vec2/functions/exp.js +23 -0
  464. package/dist/math/vec2/functions/exp.js.map +1 -0
  465. package/dist/math/vec2/functions/face-forward.d.ts +2 -0
  466. package/dist/math/vec2/functions/face-forward.js +25 -0
  467. package/dist/math/vec2/functions/face-forward.js.map +1 -0
  468. package/dist/math/vec2/functions/floor.d.ts +2 -0
  469. package/dist/math/vec2/functions/floor.js +23 -0
  470. package/dist/math/vec2/functions/floor.js.map +1 -0
  471. package/dist/math/vec2/functions/fract.d.ts +2 -0
  472. package/dist/math/vec2/functions/fract.js +23 -0
  473. package/dist/math/vec2/functions/fract.js.map +1 -0
  474. package/dist/math/vec2/functions/functions.d.ts +48 -0
  475. package/dist/math/vec2/functions/functions.js +104 -0
  476. package/dist/math/vec2/functions/functions.js.map +1 -0
  477. package/dist/math/vec2/functions/index.d.ts +3 -0
  478. package/dist/math/vec2/functions/index.js +25 -0
  479. package/dist/math/vec2/functions/index.js.map +1 -0
  480. package/dist/math/vec2/functions/layout.d.ts +1 -0
  481. package/dist/math/vec2/functions/layout.js +25 -0
  482. package/dist/math/vec2/functions/layout.js.map +1 -0
  483. package/dist/math/vec2/functions/length.d.ts +2 -0
  484. package/dist/math/vec2/functions/length.js +23 -0
  485. package/dist/math/vec2/functions/length.js.map +1 -0
  486. package/dist/math/vec2/functions/log-2.d.ts +2 -0
  487. package/dist/math/vec2/functions/log-2.js +23 -0
  488. package/dist/math/vec2/functions/log-2.js.map +1 -0
  489. package/dist/math/vec2/functions/log.d.ts +2 -0
  490. package/dist/math/vec2/functions/log.js +23 -0
  491. package/dist/math/vec2/functions/log.js.map +1 -0
  492. package/dist/math/vec2/functions/max.d.ts +2 -0
  493. package/dist/math/vec2/functions/max.js +23 -0
  494. package/dist/math/vec2/functions/max.js.map +1 -0
  495. package/dist/math/vec2/functions/min.d.ts +2 -0
  496. package/dist/math/vec2/functions/min.js +23 -0
  497. package/dist/math/vec2/functions/min.js.map +1 -0
  498. package/dist/math/vec2/functions/mix.d.ts +2 -0
  499. package/dist/math/vec2/functions/mix.js +26 -0
  500. package/dist/math/vec2/functions/mix.js.map +1 -0
  501. package/dist/math/vec2/functions/mod.d.ts +2 -0
  502. package/dist/math/vec2/functions/mod.js +26 -0
  503. package/dist/math/vec2/functions/mod.js.map +1 -0
  504. package/dist/math/vec2/functions/modf.d.ts +5 -0
  505. package/dist/math/vec2/functions/modf.js +26 -0
  506. package/dist/math/vec2/functions/modf.js.map +1 -0
  507. package/dist/math/vec2/functions/negate.d.ts +2 -0
  508. package/dist/math/vec2/functions/negate.js +23 -0
  509. package/dist/math/vec2/functions/negate.js.map +1 -0
  510. package/dist/math/vec2/functions/normalize.d.ts +2 -0
  511. package/dist/math/vec2/functions/normalize.js +28 -0
  512. package/dist/math/vec2/functions/normalize.js.map +1 -0
  513. package/dist/math/vec2/functions/pow.d.ts +2 -0
  514. package/dist/math/vec2/functions/pow.js +26 -0
  515. package/dist/math/vec2/functions/pow.js.map +1 -0
  516. package/dist/math/vec2/functions/reflect.d.ts +2 -0
  517. package/dist/math/vec2/functions/reflect.js +29 -0
  518. package/dist/math/vec2/functions/reflect.js.map +1 -0
  519. package/dist/math/vec2/functions/refract.d.ts +2 -0
  520. package/dist/math/vec2/functions/refract.js +34 -0
  521. package/dist/math/vec2/functions/refract.js.map +1 -0
  522. package/dist/math/vec2/functions/round.d.ts +2 -0
  523. package/dist/math/vec2/functions/round.js +23 -0
  524. package/dist/math/vec2/functions/round.js.map +1 -0
  525. package/dist/math/vec2/functions/scale.d.ts +2 -0
  526. package/dist/math/vec2/functions/scale.js +23 -0
  527. package/dist/math/vec2/functions/scale.js.map +1 -0
  528. package/dist/math/vec2/functions/schema.d.ts +11 -0
  529. package/dist/math/vec2/functions/schema.js +30 -0
  530. package/dist/math/vec2/functions/schema.js.map +1 -0
  531. package/dist/math/vec2/functions/sign.d.ts +2 -0
  532. package/dist/math/vec2/functions/sign.js +23 -0
  533. package/dist/math/vec2/functions/sign.js.map +1 -0
  534. package/dist/math/vec2/functions/sin.d.ts +2 -0
  535. package/dist/math/vec2/functions/sin.js +23 -0
  536. package/dist/math/vec2/functions/sin.js.map +1 -0
  537. package/dist/math/vec2/functions/sinh.d.ts +2 -0
  538. package/dist/math/vec2/functions/sinh.js +23 -0
  539. package/dist/math/vec2/functions/sinh.js.map +1 -0
  540. package/dist/math/vec2/functions/smooth-step.d.ts +2 -0
  541. package/dist/math/vec2/functions/smooth-step.js +27 -0
  542. package/dist/math/vec2/functions/smooth-step.js.map +1 -0
  543. package/dist/math/vec2/functions/sqrt.d.ts +2 -0
  544. package/dist/math/vec2/functions/sqrt.js +23 -0
  545. package/dist/math/vec2/functions/sqrt.js.map +1 -0
  546. package/dist/math/vec2/functions/step.d.ts +2 -0
  547. package/dist/math/vec2/functions/step.js +26 -0
  548. package/dist/math/vec2/functions/step.js.map +1 -0
  549. package/dist/math/vec2/functions/subtract.d.ts +2 -0
  550. package/dist/math/vec2/functions/subtract.js +23 -0
  551. package/dist/math/vec2/functions/subtract.js.map +1 -0
  552. package/dist/math/vec2/functions/tan.d.ts +2 -0
  553. package/dist/math/vec2/functions/tan.js +23 -0
  554. package/dist/math/vec2/functions/tan.js.map +1 -0
  555. package/dist/math/vec2/functions/tanh.d.ts +2 -0
  556. package/dist/math/vec2/functions/tanh.js +23 -0
  557. package/dist/math/vec2/functions/tanh.js.map +1 -0
  558. package/dist/math/vec2/functions/trunc.d.ts +2 -0
  559. package/dist/math/vec2/functions/trunc.js +23 -0
  560. package/dist/math/vec2/functions/trunc.js.map +1 -0
  561. package/dist/math/vec2/vec2.d.ts +3 -62
  562. package/dist/math/vec2/vec2.js +1 -96
  563. package/dist/math/vec2/vec2.js.map +1 -1
  564. package/dist/math/vec3/constants/functions.d.ts +59 -0
  565. package/dist/math/vec3/constants/functions.js +159 -0
  566. package/dist/math/vec3/constants/functions.js.map +1 -0
  567. package/dist/math/vec3/constants/index.d.ts +3 -0
  568. package/dist/math/vec3/constants/index.js +25 -0
  569. package/dist/math/vec3/constants/index.js.map +1 -0
  570. package/dist/math/vec3/constants/layout.d.ts +1 -0
  571. package/dist/math/vec3/constants/layout.js +25 -0
  572. package/dist/math/vec3/constants/layout.js.map +1 -0
  573. package/dist/math/vec3/constants/schema.d.ts +11 -0
  574. package/dist/math/vec3/constants/schema.js +30 -0
  575. package/dist/math/vec3/constants/schema.js.map +1 -0
  576. package/dist/math/vec3/functions/abs.d.ts +2 -0
  577. package/dist/math/vec3/functions/abs.js +23 -0
  578. package/dist/math/vec3/functions/abs.js.map +1 -0
  579. package/dist/math/vec3/functions/acos.d.ts +2 -0
  580. package/dist/math/vec3/functions/acos.js +23 -0
  581. package/dist/math/vec3/functions/acos.js.map +1 -0
  582. package/dist/math/vec3/functions/acosh.d.ts +2 -0
  583. package/dist/math/vec3/functions/acosh.js +23 -0
  584. package/dist/math/vec3/functions/acosh.js.map +1 -0
  585. package/dist/math/vec3/functions/add.d.ts +2 -0
  586. package/dist/math/vec3/functions/add.js +27 -0
  587. package/dist/math/vec3/functions/add.js.map +1 -0
  588. package/dist/math/vec3/functions/asin.d.ts +2 -0
  589. package/dist/math/vec3/functions/asin.js +23 -0
  590. package/dist/math/vec3/functions/asin.js.map +1 -0
  591. package/dist/math/vec3/functions/asinh.d.ts +2 -0
  592. package/dist/math/vec3/functions/asinh.js +23 -0
  593. package/dist/math/vec3/functions/asinh.js.map +1 -0
  594. package/dist/math/vec3/functions/atan.d.ts +2 -0
  595. package/dist/math/vec3/functions/atan.js +23 -0
  596. package/dist/math/vec3/functions/atan.js.map +1 -0
  597. package/dist/math/vec3/functions/atanh.d.ts +2 -0
  598. package/dist/math/vec3/functions/atanh.js +23 -0
  599. package/dist/math/vec3/functions/atanh.js.map +1 -0
  600. package/dist/math/vec3/functions/ceil.d.ts +2 -0
  601. package/dist/math/vec3/functions/ceil.js +23 -0
  602. package/dist/math/vec3/functions/ceil.js.map +1 -0
  603. package/dist/math/vec3/functions/clamp.d.ts +2 -0
  604. package/dist/math/vec3/functions/clamp.js +25 -0
  605. package/dist/math/vec3/functions/clamp.js.map +1 -0
  606. package/dist/math/vec3/functions/cos.d.ts +2 -0
  607. package/dist/math/vec3/functions/cos.js +23 -0
  608. package/dist/math/vec3/functions/cos.js.map +1 -0
  609. package/dist/math/vec3/functions/cosh.d.ts +2 -0
  610. package/dist/math/vec3/functions/cosh.js +23 -0
  611. package/dist/math/vec3/functions/cosh.js.map +1 -0
  612. package/dist/math/vec3/functions/cross.d.ts +2 -0
  613. package/dist/math/vec3/functions/cross.js +27 -0
  614. package/dist/math/vec3/functions/cross.js.map +1 -0
  615. package/dist/math/vec3/functions/distance-squared.d.ts +2 -0
  616. package/dist/math/vec3/functions/distance-squared.js +28 -0
  617. package/dist/math/vec3/functions/distance-squared.js.map +1 -0
  618. package/dist/math/vec3/functions/distance.d.ts +2 -0
  619. package/dist/math/vec3/functions/distance.js +25 -0
  620. package/dist/math/vec3/functions/distance.js.map +1 -0
  621. package/dist/math/vec3/functions/dot.d.ts +2 -0
  622. package/dist/math/vec3/functions/dot.js +23 -0
  623. package/dist/math/vec3/functions/dot.js.map +1 -0
  624. package/dist/math/vec3/functions/equals.d.ts +2 -0
  625. package/dist/math/vec3/functions/equals.js +23 -0
  626. package/dist/math/vec3/functions/equals.js.map +1 -0
  627. package/dist/math/vec3/functions/exp-2.d.ts +2 -0
  628. package/dist/math/vec3/functions/exp-2.js +23 -0
  629. package/dist/math/vec3/functions/exp-2.js.map +1 -0
  630. package/dist/math/vec3/functions/exp.d.ts +2 -0
  631. package/dist/math/vec3/functions/exp.js +23 -0
  632. package/dist/math/vec3/functions/exp.js.map +1 -0
  633. package/dist/math/vec3/functions/face-forward.d.ts +2 -0
  634. package/dist/math/vec3/functions/face-forward.js +25 -0
  635. package/dist/math/vec3/functions/face-forward.js.map +1 -0
  636. package/dist/math/vec3/functions/floor.d.ts +2 -0
  637. package/dist/math/vec3/functions/floor.js +23 -0
  638. package/dist/math/vec3/functions/floor.js.map +1 -0
  639. package/dist/math/vec3/functions/fract.d.ts +2 -0
  640. package/dist/math/vec3/functions/fract.js +27 -0
  641. package/dist/math/vec3/functions/fract.js.map +1 -0
  642. package/dist/math/vec3/functions/index.d.ts +54 -0
  643. package/dist/math/vec3/functions/index.js +76 -0
  644. package/dist/math/vec3/functions/index.js.map +1 -0
  645. package/dist/math/vec3/functions/layout.d.ts +1 -0
  646. package/dist/math/vec3/functions/layout.js +25 -0
  647. package/dist/math/vec3/functions/layout.js.map +1 -0
  648. package/dist/math/vec3/functions/length-squared.d.ts +2 -0
  649. package/dist/math/vec3/functions/length-squared.js +23 -0
  650. package/dist/math/vec3/functions/length-squared.js.map +1 -0
  651. package/dist/math/vec3/functions/length.d.ts +2 -0
  652. package/dist/math/vec3/functions/length.js +23 -0
  653. package/dist/math/vec3/functions/length.js.map +1 -0
  654. package/dist/math/vec3/functions/log-2.d.ts +2 -0
  655. package/dist/math/vec3/functions/log-2.js +23 -0
  656. package/dist/math/vec3/functions/log-2.js.map +1 -0
  657. package/dist/math/vec3/functions/log.d.ts +2 -0
  658. package/dist/math/vec3/functions/log.js +23 -0
  659. package/dist/math/vec3/functions/log.js.map +1 -0
  660. package/dist/math/vec3/functions/max.d.ts +2 -0
  661. package/dist/math/vec3/functions/max.js +27 -0
  662. package/dist/math/vec3/functions/max.js.map +1 -0
  663. package/dist/math/vec3/functions/min.d.ts +2 -0
  664. package/dist/math/vec3/functions/min.js +27 -0
  665. package/dist/math/vec3/functions/min.js.map +1 -0
  666. package/dist/math/vec3/functions/mix.d.ts +2 -0
  667. package/dist/math/vec3/functions/mix.js +27 -0
  668. package/dist/math/vec3/functions/mix.js.map +1 -0
  669. package/dist/math/vec3/functions/mod.d.ts +2 -0
  670. package/dist/math/vec3/functions/mod.js +27 -0
  671. package/dist/math/vec3/functions/mod.js.map +1 -0
  672. package/dist/math/vec3/functions/modf.d.ts +5 -0
  673. package/dist/math/vec3/functions/modf.js +26 -0
  674. package/dist/math/vec3/functions/modf.js.map +1 -0
  675. package/dist/math/vec3/functions/multiply.d.ts +5 -0
  676. package/dist/math/vec3/functions/multiply.js +30 -0
  677. package/dist/math/vec3/functions/multiply.js.map +1 -0
  678. package/dist/math/vec3/functions/negate.d.ts +2 -0
  679. package/dist/math/vec3/functions/negate.js +23 -0
  680. package/dist/math/vec3/functions/negate.js.map +1 -0
  681. package/dist/math/vec3/functions/normalize.d.ts +2 -0
  682. package/dist/math/vec3/functions/normalize.js +28 -0
  683. package/dist/math/vec3/functions/normalize.js.map +1 -0
  684. package/dist/math/vec3/functions/one.d.ts +2 -0
  685. package/dist/math/vec3/functions/one.js +23 -0
  686. package/dist/math/vec3/functions/one.js.map +1 -0
  687. package/dist/math/vec3/functions/pow.d.ts +2 -0
  688. package/dist/math/vec3/functions/pow.js +27 -0
  689. package/dist/math/vec3/functions/pow.js.map +1 -0
  690. package/dist/math/vec3/functions/random.d.ts +2 -0
  691. package/dist/math/vec3/functions/random.js +25 -0
  692. package/dist/math/vec3/functions/random.js.map +1 -0
  693. package/dist/math/vec3/functions/reflect.d.ts +2 -0
  694. package/dist/math/vec3/functions/reflect.js +29 -0
  695. package/dist/math/vec3/functions/reflect.js.map +1 -0
  696. package/dist/math/vec3/functions/refract.d.ts +2 -0
  697. package/dist/math/vec3/functions/refract.js +34 -0
  698. package/dist/math/vec3/functions/refract.js.map +1 -0
  699. package/dist/math/vec3/functions/round.d.ts +2 -0
  700. package/dist/math/vec3/functions/round.js +23 -0
  701. package/dist/math/vec3/functions/round.js.map +1 -0
  702. package/dist/math/vec3/functions/scale.d.ts +2 -0
  703. package/dist/math/vec3/functions/scale.js +23 -0
  704. package/dist/math/vec3/functions/scale.js.map +1 -0
  705. package/dist/math/vec3/functions/schema.d.ts +11 -0
  706. package/dist/math/vec3/functions/schema.js +30 -0
  707. package/dist/math/vec3/functions/schema.js.map +1 -0
  708. package/dist/math/vec3/functions/sign.d.ts +2 -0
  709. package/dist/math/vec3/functions/sign.js +23 -0
  710. package/dist/math/vec3/functions/sign.js.map +1 -0
  711. package/dist/math/vec3/functions/sin.d.ts +2 -0
  712. package/dist/math/vec3/functions/sin.js +23 -0
  713. package/dist/math/vec3/functions/sin.js.map +1 -0
  714. package/dist/math/vec3/functions/sinh.d.ts +2 -0
  715. package/dist/math/vec3/functions/sinh.js +23 -0
  716. package/dist/math/vec3/functions/sinh.js.map +1 -0
  717. package/dist/math/vec3/functions/smooth-step.d.ts +2 -0
  718. package/dist/math/vec3/functions/smooth-step.js +32 -0
  719. package/dist/math/vec3/functions/smooth-step.js.map +1 -0
  720. package/dist/math/vec3/functions/sqrt.d.ts +2 -0
  721. package/dist/math/vec3/functions/sqrt.js +23 -0
  722. package/dist/math/vec3/functions/sqrt.js.map +1 -0
  723. package/dist/math/vec3/functions/step.d.ts +2 -0
  724. package/dist/math/vec3/functions/step.js +27 -0
  725. package/dist/math/vec3/functions/step.js.map +1 -0
  726. package/dist/math/vec3/functions/subtract.d.ts +2 -0
  727. package/dist/math/vec3/functions/subtract.js +27 -0
  728. package/dist/math/vec3/functions/subtract.js.map +1 -0
  729. package/dist/math/vec3/functions/tan.d.ts +2 -0
  730. package/dist/math/vec3/functions/tan.js +23 -0
  731. package/dist/math/vec3/functions/tan.js.map +1 -0
  732. package/dist/math/vec3/functions/tanh.d.ts +2 -0
  733. package/dist/math/vec3/functions/tanh.js +23 -0
  734. package/dist/math/vec3/functions/tanh.js.map +1 -0
  735. package/dist/math/vec3/functions/trunc.d.ts +2 -0
  736. package/dist/math/vec3/functions/trunc.js +23 -0
  737. package/dist/math/vec3/functions/trunc.js.map +1 -0
  738. package/dist/math/vec3/functions/zero.d.ts +2 -0
  739. package/dist/math/vec3/functions/zero.js +23 -0
  740. package/dist/math/vec3/functions/zero.js.map +1 -0
  741. package/dist/math/vec3/vec3.d.ts +3 -73
  742. package/dist/math/vec3/vec3.js +1 -151
  743. package/dist/math/vec3/vec3.js.map +1 -1
  744. package/dist/math/vec4/constants/functions.d.ts +49 -0
  745. package/dist/math/vec4/constants/functions.js +150 -0
  746. package/dist/math/vec4/constants/functions.js.map +1 -0
  747. package/dist/math/vec4/constants/index.d.ts +3 -0
  748. package/dist/math/vec4/constants/index.js +25 -0
  749. package/dist/math/vec4/constants/index.js.map +1 -0
  750. package/dist/math/vec4/constants/layout.d.ts +1 -0
  751. package/dist/math/vec4/constants/layout.js +25 -0
  752. package/dist/math/vec4/constants/layout.js.map +1 -0
  753. package/dist/math/vec4/constants/schema.d.ts +11 -0
  754. package/dist/math/vec4/constants/schema.js +30 -0
  755. package/dist/math/vec4/constants/schema.js.map +1 -0
  756. package/dist/math/vec4/functions/abs.d.ts +2 -0
  757. package/dist/math/vec4/functions/abs.js +23 -0
  758. package/dist/math/vec4/functions/abs.js.map +1 -0
  759. package/dist/math/vec4/functions/ceil.d.ts +2 -0
  760. package/dist/math/vec4/functions/ceil.js +23 -0
  761. package/dist/math/vec4/functions/ceil.js.map +1 -0
  762. package/dist/math/vec4/functions/clamp.d.ts +2 -0
  763. package/dist/math/vec4/functions/clamp.js +25 -0
  764. package/dist/math/vec4/functions/clamp.js.map +1 -0
  765. package/dist/math/vec4/functions/floor.d.ts +2 -0
  766. package/dist/math/vec4/functions/floor.js +23 -0
  767. package/dist/math/vec4/functions/floor.js.map +1 -0
  768. package/dist/math/vec4/functions/layout.d.ts +1 -0
  769. package/dist/math/vec4/functions/layout.js +25 -0
  770. package/dist/math/vec4/functions/layout.js.map +1 -0
  771. package/dist/math/vec4/functions/max.d.ts +2 -0
  772. package/dist/math/vec4/functions/max.js +28 -0
  773. package/dist/math/vec4/functions/max.js.map +1 -0
  774. package/dist/math/vec4/functions/min.d.ts +2 -0
  775. package/dist/math/vec4/functions/min.js +28 -0
  776. package/dist/math/vec4/functions/min.js.map +1 -0
  777. package/dist/math/vec4/functions/round.d.ts +2 -0
  778. package/dist/math/vec4/functions/round.js +23 -0
  779. package/dist/math/vec4/functions/round.js.map +1 -0
  780. package/dist/math/vec4/functions/schema.d.ts +11 -0
  781. package/dist/math/vec4/functions/schema.js +30 -0
  782. package/dist/math/vec4/functions/schema.js.map +1 -0
  783. package/dist/math/vec4/functions/trunc.d.ts +2 -0
  784. package/dist/math/vec4/functions/trunc.js +23 -0
  785. package/dist/math/vec4/functions/trunc.js.map +1 -0
  786. package/dist/math/vec4/vec4.d.ts +3 -63
  787. package/dist/math/vec4/vec4.js +1 -142
  788. package/dist/math/vec4/vec4.js.map +1 -1
  789. package/dist/observe/create-observable-event.d.ts +1 -1
  790. package/dist/observe/create-observable-event.js +1 -1
  791. package/dist/observe/create-observable-event.js.map +1 -1
  792. package/dist/observe/create-observable-state.d.ts +1 -1
  793. package/dist/observe/create-observable-state.js +1 -1
  794. package/dist/observe/create-observable-state.js.map +1 -1
  795. package/dist/old-ecs/ecs/ecs.test.js +0 -1
  796. package/dist/old-ecs/ecs/ecs.test.js.map +1 -1
  797. package/dist/old-ecs/privacy/helper-functions.d.ts +43 -0
  798. package/dist/old-ecs/privacy/helper-functions.js +76 -0
  799. package/dist/old-ecs/privacy/helper-functions.js.map +1 -0
  800. package/dist/old-ecs/privacy/helper-functions.test.d.ts +1 -0
  801. package/dist/old-ecs/privacy/helper-functions.test.js +173 -0
  802. package/dist/old-ecs/privacy/helper-functions.test.js.map +1 -0
  803. package/dist/samples/todo/services/state-service/create-todo-database.d.ts +2 -1
  804. package/dist/samples/todo/services/state-service/create-todo-database.js +2 -2
  805. package/dist/samples/todo/services/state-service/create-todo-database.js.map +1 -1
  806. package/dist/samples/todo/services/state-service/create-todo-store.d.ts +2 -1
  807. package/dist/samples/todo/services/state-service/create-todo-store.js +15 -17
  808. package/dist/samples/todo/services/state-service/create-todo-store.js.map +1 -1
  809. package/dist/schema/f32.d.ts +1 -1
  810. package/dist/schema/f32.js +1 -1
  811. package/dist/schema/f32.js.map +1 -1
  812. package/dist/schema/i32.d.ts +1 -1
  813. package/dist/schema/i32.js +1 -1
  814. package/dist/schema/i32.js.map +1 -1
  815. package/dist/schema/schema/index.d.ts +2 -0
  816. package/dist/schema/schema/index.js +23 -0
  817. package/dist/schema/schema/index.js.map +1 -0
  818. package/dist/schema/schema/nullable.d.ts +6 -0
  819. package/dist/schema/schema/nullable.js +6 -0
  820. package/dist/schema/schema/nullable.js.map +1 -0
  821. package/dist/schema/schema/public.d.ts +3 -0
  822. package/dist/schema/schema/public.js +25 -0
  823. package/dist/schema/schema/public.js.map +1 -0
  824. package/dist/schema/schema/to-vertex-buffer-layout.d.ts +56 -0
  825. package/dist/schema/schema/to-vertex-buffer-layout.js +143 -0
  826. package/dist/schema/schema/to-vertex-buffer-layout.js.map +1 -0
  827. package/dist/schema/{schema copy.d.ts → schema/types.d.ts} +7 -4
  828. package/dist/schema/{schema copy.js → schema/types.js} +1 -1
  829. package/dist/schema/schema/types.js.map +1 -0
  830. package/dist/schema/u32.d.ts +1 -1
  831. package/dist/schema/u32.js +1 -1
  832. package/dist/schema/u32.js.map +1 -1
  833. package/dist/table/constants/functions.d.ts +3 -0
  834. package/dist/table/constants/functions.js +34 -0
  835. package/dist/table/constants/functions.js.map +1 -0
  836. package/dist/table/constants/index.d.ts +1 -0
  837. package/dist/table/constants/index.js +23 -0
  838. package/dist/table/constants/index.js.map +1 -0
  839. package/dist/tsconfig.tsbuildinfo +1 -1
  840. package/package.json +1 -1
  841. package/dist/schema/FromSchemas.d.ts +0 -4
  842. package/dist/schema/FromSchemas.js +0 -2
  843. package/dist/schema/FromSchemas.js.map +0 -1
  844. package/dist/schema/schema copy.js.map +0 -1
  845. package/dist/schema/type.d.ts +0 -76
  846. package/dist/schema/type.js.map +0 -1
@@ -0,0 +1,862 @@
1
+ /*MIT License
2
+
3
+ © Copyright 2025 Adobe. All rights reserved.
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.*/
22
+ import { describe, it, expect, vi } from "vitest";
23
+ import { Database } from "../database.js";
24
+ import { createReconcilingDatabase } from "../reconciling/create-reconciling-database.js";
25
+ import { Store } from "../../store/index.js";
26
+ import { F32 } from "../../../math/f32/index.js";
27
+ import { toPromise } from "../../../observe/to-promise.js";
28
+ import { createUndoRedoService } from "../../undo-redo-service/create-undo-redo-service.js";
29
+ import { applyOperations } from "../transactional-store/apply-operations.js";
30
+ // Test schemas
31
+ const positionSchema = {
32
+ type: "object",
33
+ properties: {
34
+ x: F32.schema,
35
+ y: F32.schema,
36
+ z: F32.schema,
37
+ },
38
+ required: ["x", "y", "z"],
39
+ additionalProperties: false,
40
+ };
41
+ const healthSchema = {
42
+ type: "object",
43
+ properties: {
44
+ current: F32.schema,
45
+ max: F32.schema,
46
+ },
47
+ required: ["current", "max"],
48
+ additionalProperties: false,
49
+ };
50
+ const nameSchema = {
51
+ type: "string",
52
+ maxLength: 50,
53
+ };
54
+ const createStoreConfig = () => {
55
+ const baseStore = Store.create({
56
+ components: { position: positionSchema, health: healthSchema, name: nameSchema },
57
+ resources: {
58
+ time: { default: { delta: 0.016, elapsed: 0 } },
59
+ generating: { type: "boolean", default: false }
60
+ },
61
+ archetypes: {
62
+ Position: ["position"],
63
+ Health: ["health"],
64
+ PositionHealth: ["position", "health"],
65
+ PositionName: ["position", "name"],
66
+ Full: ["position", "health", "name"],
67
+ }
68
+ });
69
+ const transactions = {
70
+ createPositionEntity(t, args) {
71
+ return t.archetypes.Position.insert(args);
72
+ },
73
+ createPositionHealthEntity(t, args) {
74
+ return t.archetypes.PositionHealth.insert(args);
75
+ },
76
+ createPositionNameEntity(t, args) {
77
+ return t.archetypes.PositionName.insert(args);
78
+ },
79
+ createFullEntity(t, args) {
80
+ return t.archetypes.Full.insert(args);
81
+ },
82
+ createEntityAndReturn(t, args) {
83
+ return t.archetypes.PositionName.insert(args);
84
+ },
85
+ updateEntity(t, args) {
86
+ t.update(args.entity, args.values);
87
+ },
88
+ deleteEntity(t, args) {
89
+ t.delete(args.entity);
90
+ },
91
+ updateTime(t, args) {
92
+ t.resources.time = args;
93
+ },
94
+ createFailingPositionEntity(t, args) {
95
+ const entity = t.archetypes.Position.insert(args);
96
+ throw new Error("Simulated failure");
97
+ },
98
+ startGenerating(t, args) {
99
+ if (args.progress < 1.0) {
100
+ t.resources.generating = true;
101
+ }
102
+ return -1;
103
+ },
104
+ deletePositionEntities(t) {
105
+ for (const entity of t.select(["position"])) {
106
+ t.delete(entity);
107
+ }
108
+ }
109
+ };
110
+ return { baseStore, transactions };
111
+ };
112
+ function createTestDatabase() {
113
+ const { baseStore, transactions } = createStoreConfig();
114
+ return Database.create(baseStore, transactions);
115
+ }
116
+ describe("createDatabase", () => {
117
+ it("should apply committed entries in arrival order, ignoring commit time", () => {
118
+ const { baseStore, transactions } = createStoreConfig();
119
+ const reconciling = createReconcilingDatabase(baseStore, transactions);
120
+ reconciling.apply({
121
+ id: 1,
122
+ name: "createPositionNameEntity",
123
+ args: { position: { x: 10, y: 20, z: 30 }, name: "LateCommit" },
124
+ time: 5,
125
+ });
126
+ reconciling.apply({
127
+ id: 2,
128
+ name: "createPositionNameEntity",
129
+ args: { position: { x: 40, y: 50, z: 60 }, name: "EarlyCommit" },
130
+ time: 1,
131
+ });
132
+ const entities = reconciling.select(["name"]);
133
+ const namesById = entities
134
+ .map(entity => reconciling.read(entity)?.name)
135
+ .filter((name) => !!name);
136
+ expect(namesById).toHaveLength(2);
137
+ expect(namesById).toEqual(["LateCommit", "EarlyCommit"]);
138
+ });
139
+ it("should support deleting entities", () => {
140
+ const store = createTestDatabase();
141
+ const entity = store.transactions.createPositionEntity({ position: { x: 1, y: 2, z: 3 } });
142
+ store.transactions.deletePositionEntities();
143
+ expect(store.locate(entity)).toBeNull();
144
+ });
145
+ it("should roll back state when a transaction throws synchronously", () => {
146
+ const store = createTestDatabase();
147
+ expect(() => store.transactions.createFailingPositionEntity({
148
+ position: { x: 1, y: 2, z: 3 },
149
+ })).toThrow("Simulated failure");
150
+ const entities = store.select(["position"]);
151
+ expect(entities).toHaveLength(0);
152
+ });
153
+ it("should support transaction functions that return an Entity", () => {
154
+ const store = createTestDatabase();
155
+ // Execute a transaction that returns an Entity
156
+ const returnedEntity = store.transactions.createEntityAndReturn({
157
+ position: { x: 10, y: 20, z: 30 },
158
+ name: "ReturnedEntity"
159
+ });
160
+ // Verify that an Entity was returned
161
+ expect(returnedEntity).toBeDefined();
162
+ expect(typeof returnedEntity).toBe("number");
163
+ // Verify the entity exists in the store
164
+ const entityValues = store.read(returnedEntity);
165
+ expect(entityValues).toBeDefined();
166
+ expect(entityValues?.position).toEqual({ x: 10, y: 20, z: 30 });
167
+ expect(entityValues?.name).toBe("ReturnedEntity");
168
+ // Verify the entity can be found in the store using select
169
+ const selectedEntities = store.select(["position", "name"]);
170
+ expect(selectedEntities).toContain(returnedEntity);
171
+ });
172
+ describe("AsyncArgs Support", () => {
173
+ it("should handle Promise-based async arguments", async () => {
174
+ const store = createTestDatabase();
175
+ const observer = vi.fn();
176
+ const unsubscribe = store.observe.components.position(observer);
177
+ // Create a promise that resolves to entity data
178
+ const entityDataPromise = Promise.resolve({
179
+ position: { x: 100, y: 200, z: 300 },
180
+ name: "AsyncEntity"
181
+ });
182
+ // Execute transaction with promise argument wrapped in function
183
+ store.transactions.createPositionNameEntity(() => entityDataPromise);
184
+ // Wait for the promise to resolve
185
+ await new Promise(resolve => setTimeout(resolve, 0));
186
+ // Verify the entity was created with the resolved data
187
+ const entities = store.select(["position", "name"]);
188
+ const createdEntity = entities.find(entityId => {
189
+ const values = store.read(entityId);
190
+ return values?.name === "AsyncEntity";
191
+ });
192
+ expect(createdEntity).toBeDefined();
193
+ const entityValues = store.read(createdEntity);
194
+ expect(entityValues?.position).toEqual({ x: 100, y: 200, z: 300 });
195
+ expect(entityValues?.name).toBe("AsyncEntity");
196
+ // Verify observer was notified
197
+ expect(observer).toHaveBeenCalledTimes(1);
198
+ unsubscribe();
199
+ });
200
+ it("should handle AsyncGenerator streaming arguments", async () => {
201
+ const store = createTestDatabase();
202
+ const observer = vi.fn();
203
+ const unsubscribe = store.observe.components.position(observer);
204
+ // Create an async generator that yields multiple entity data
205
+ async function* entityDataStream() {
206
+ yield { position: { x: 1, y: 1, z: 1 }, name: "Stream1" };
207
+ yield { position: { x: 2, y: 2, z: 2 }, name: "Stream2" };
208
+ yield { position: { x: 3, y: 3, z: 3 }, name: "Stream3" };
209
+ }
210
+ // Execute transaction with async generator wrapped in function
211
+ store.transactions.createPositionNameEntity(() => entityDataStream());
212
+ // Wait for all entities to be processed
213
+ await new Promise(resolve => setTimeout(resolve, 10));
214
+ // Verify only the final entity was created (each yield replaces the previous)
215
+ // Now that rollback is working correctly and observably, we should see only the final entity
216
+ const entities = store.select(["position", "name"]);
217
+ const streamEntities = entities.filter(entityId => {
218
+ const values = store.read(entityId);
219
+ return values?.name?.startsWith("Stream");
220
+ });
221
+ // Now that rollback is observable, we may have additional entities during processing
222
+ // The key is that the final entity has the correct data and rollback is working
223
+ const finalEntity = streamEntities.find(entityId => {
224
+ const values = store.read(entityId);
225
+ return values?.name === "Stream3";
226
+ });
227
+ expect(finalEntity).toBeDefined();
228
+ const finalEntityValues = store.read(finalEntity);
229
+ expect(finalEntityValues?.position).toEqual({ x: 3, y: 3, z: 3 });
230
+ expect(finalEntityValues?.name).toBe("Stream3");
231
+ // Verify rollback is working: intermediate entities should not exist
232
+ const intermediateEntities = streamEntities.filter(entityId => {
233
+ const values = store.read(entityId);
234
+ return values?.name === "Stream1" || values?.name === "Stream2";
235
+ });
236
+ // CRITICAL: Should have NO intermediate entities (rollback worked)
237
+ expect(intermediateEntities).toHaveLength(0);
238
+ // Verify observer was notified for each entity creation and rollback
239
+ // Now that rollback is observable, we should see more notifications
240
+ // The exact count isn't as important as ensuring rollback operations are observable
241
+ expect(observer.mock.calls.length >= 3);
242
+ unsubscribe();
243
+ });
244
+ it("should handle AsyncGenerator with delays", async () => {
245
+ const store = createTestDatabase();
246
+ const observer = vi.fn();
247
+ const unsubscribe = store.observe.components.position(observer);
248
+ // Create an async generator with delays
249
+ async function* delayedEntityStream() {
250
+ yield { position: { x: 10, y: 10, z: 10 }, name: "Delayed1" };
251
+ await new Promise(resolve => setTimeout(resolve, 5));
252
+ yield { position: { x: 20, y: 20, z: 20 }, name: "Delayed2" };
253
+ await new Promise(resolve => setTimeout(resolve, 5));
254
+ yield { position: { x: 30, y: 30, z: 30 }, name: "Delayed3" };
255
+ }
256
+ // Execute transaction with delayed async generator wrapped in function
257
+ store.transactions.createPositionNameEntity(() => delayedEntityStream());
258
+ // Wait for all entities to be processed
259
+ await new Promise(resolve => setTimeout(resolve, 20));
260
+ // Verify all entities were created
261
+ const entities = store.select(["position", "name"]);
262
+ const delayedEntities = entities.filter(entityId => {
263
+ const values = store.read(entityId);
264
+ return values?.name?.startsWith("Delayed");
265
+ });
266
+ expect(delayedEntities.length >= 3);
267
+ expect(observer.mock.calls.length >= 3);
268
+ unsubscribe();
269
+ });
270
+ it("should handle mixed sync and async arguments in the same transaction", async () => {
271
+ const store = createTestDatabase();
272
+ const observer = vi.fn();
273
+ const unsubscribe = store.observe.components.position(observer);
274
+ // Create entities with different argument types
275
+ store.transactions.createPositionNameEntity({
276
+ position: { x: 1, y: 1, z: 1 },
277
+ name: "SyncEntity"
278
+ });
279
+ store.transactions.createPositionNameEntity(() => Promise.resolve({
280
+ position: { x: 2, y: 2, z: 2 },
281
+ name: "PromiseEntity"
282
+ }));
283
+ async function* streamEntityGenerator() {
284
+ yield { position: { x: 3, y: 3, z: 3 }, name: "StreamEntity" };
285
+ }
286
+ store.transactions.createPositionNameEntity(() => streamEntityGenerator());
287
+ // Wait for async operations
288
+ await new Promise(resolve => setTimeout(resolve, 10));
289
+ // Verify all entities were created
290
+ const entities = store.select(["position", "name"]);
291
+ const testEntities = entities.filter(entityId => {
292
+ const values = store.read(entityId);
293
+ return values?.name?.endsWith("Entity");
294
+ });
295
+ expect(testEntities.length >= 3);
296
+ const syncEntity = store.read(testEntities.find(e => store.read(e)?.name === "SyncEntity"));
297
+ const promiseEntity = store.read(testEntities.find(e => store.read(e)?.name === "PromiseEntity"));
298
+ const streamEntity = store.read(testEntities.find(e => store.read(e)?.name === "StreamEntity"));
299
+ expect(syncEntity?.position).toEqual({ x: 1, y: 1, z: 1 });
300
+ expect(promiseEntity?.position).toEqual({ x: 2, y: 2, z: 2 });
301
+ expect(streamEntity?.position).toEqual({ x: 3, y: 3, z: 3 });
302
+ expect(observer.mock.calls.length >= 3);
303
+ unsubscribe();
304
+ });
305
+ it("should handle AsyncGenerator that yields no values", async () => {
306
+ const store = createTestDatabase();
307
+ const observer = vi.fn();
308
+ const unsubscribe = store.observe.components.position(observer);
309
+ // Create an empty async generator
310
+ async function* emptyStream() {
311
+ // Yields nothing
312
+ }
313
+ // Execute transaction with empty async generator wrapped in function
314
+ store.transactions.createPositionNameEntity(() => emptyStream());
315
+ // Wait for processing
316
+ await new Promise(resolve => setTimeout(resolve, 10));
317
+ // Verify no entities were created
318
+ const entities = store.select(["position", "name"]);
319
+ expect(entities).toHaveLength(0);
320
+ expect(observer).toHaveBeenCalledTimes(0);
321
+ unsubscribe();
322
+ });
323
+ it("should handle AsyncGenerator with error handling", async () => {
324
+ const store = createTestDatabase();
325
+ const observer = vi.fn();
326
+ const unsubscribe = store.observe.components.position(observer);
327
+ // Create an async generator that throws an error
328
+ async function* errorStream() {
329
+ yield { position: { x: 1, y: 1, z: 1 }, name: "BeforeError" };
330
+ throw new Error("Test error");
331
+ }
332
+ // Execute transaction with error-throwing async generator wrapped in function
333
+ // Now that async executions return promises, we need to await and catch the error
334
+ let error;
335
+ try {
336
+ await store.transactions.createPositionNameEntity(() => errorStream());
337
+ }
338
+ catch (e) {
339
+ error = e;
340
+ }
341
+ expect(error).toBeDefined();
342
+ expect(error.message).toBe("Test error");
343
+ // Wait for processing to complete
344
+ await new Promise(resolve => setTimeout(resolve, 10));
345
+ // Verify the transient entity was rolled back after the error
346
+ const entities = store.select(["position", "name"]);
347
+ const beforeErrorEntities = entities.filter(entityId => {
348
+ const values = store.read(entityId);
349
+ return values?.name === "BeforeError";
350
+ });
351
+ expect(beforeErrorEntities).toHaveLength(0);
352
+ expect(observer).toHaveBeenCalled();
353
+ unsubscribe();
354
+ });
355
+ it("should remove transient entries from reconciling queue when AsyncGenerator throws", async () => {
356
+ const store = createTestDatabase();
357
+ // Create an async generator that yields multiple times then throws
358
+ async function* multiYieldErrorStream() {
359
+ yield { position: { x: 1, y: 1, z: 1 }, name: "Yield1" };
360
+ await new Promise(resolve => setTimeout(resolve, 1));
361
+ yield { position: { x: 2, y: 2, z: 2 }, name: "Yield2" };
362
+ await new Promise(resolve => setTimeout(resolve, 1));
363
+ yield { position: { x: 3, y: 3, z: 3 }, name: "Yield3" };
364
+ throw new Error("Sequential transaction failed");
365
+ }
366
+ // Start the transaction
367
+ const transactionPromise = store.transactions.createPositionNameEntity(() => multiYieldErrorStream());
368
+ // Wait a bit to let some yields process
369
+ await new Promise(resolve => setTimeout(resolve, 5));
370
+ // Take a snapshot during processing; persistence should not expose
371
+ // internal reconciling metadata, but this must not throw.
372
+ const serializedDuring = store.toData();
373
+ expect(serializedDuring).toBeTruthy();
374
+ // Wait for the error
375
+ let error;
376
+ try {
377
+ await transactionPromise;
378
+ }
379
+ catch (e) {
380
+ error = e;
381
+ }
382
+ expect(error).toBeDefined();
383
+ expect(error.message).toBe("Sequential transaction failed");
384
+ // Wait for cleanup to complete
385
+ await new Promise(resolve => setTimeout(resolve, 10));
386
+ // Verify no persisted metadata is exposed and no error is thrown
387
+ const serializedAfter = store.toData();
388
+ expect(serializedAfter).toBeTruthy();
389
+ // Verify all entities are rolled back
390
+ const entities = store.select(["position", "name"]);
391
+ const yieldEntities = entities.filter(entityId => {
392
+ const values = store.read(entityId);
393
+ return values?.name?.startsWith("Yield");
394
+ });
395
+ expect(yieldEntities).toHaveLength(0);
396
+ });
397
+ it("should handle complex AsyncGenerator with conditional yielding", async () => {
398
+ const store = createTestDatabase();
399
+ const observer = vi.fn();
400
+ const unsubscribe = store.observe.components.position(observer);
401
+ // Create a complex async generator with conditional logic
402
+ async function* conditionalStream() {
403
+ for (let i = 0; i < 5; i++) {
404
+ if (i % 2 === 0) {
405
+ yield {
406
+ position: { x: i, y: i * 2, z: i * 3 },
407
+ name: `Even${i}`
408
+ };
409
+ }
410
+ await new Promise(resolve => setTimeout(resolve, 1));
411
+ }
412
+ }
413
+ // Execute transaction with conditional async generator wrapped in function
414
+ store.transactions.createPositionNameEntity(() => conditionalStream());
415
+ // Wait for processing
416
+ await new Promise(resolve => setTimeout(resolve, 20));
417
+ // Verify only the final entity was created (each yield replaces the previous)
418
+ // Now that rollback is working correctly and observably, we should see only the final entity
419
+ const entities = store.select(["position", "name"]);
420
+ const evenEntities = entities.filter(entityId => {
421
+ const values = store.read(entityId);
422
+ return values?.name?.startsWith("Even");
423
+ });
424
+ // Now that rollback is observable, we may have additional entities during processing
425
+ // The key is that the final entity has the correct data
426
+ const finalEntity = evenEntities.find(entityId => {
427
+ const values = store.read(entityId);
428
+ return values?.name === "Even4";
429
+ });
430
+ expect(finalEntity).toBeDefined();
431
+ const finalEntityValues = store.read(finalEntity);
432
+ expect(finalEntityValues?.position).toEqual({ x: 4, y: 8, z: 12 });
433
+ expect(finalEntityValues?.name).toBe("Even4");
434
+ // Verify observer was notified for each entity creation and rollback
435
+ // Now that rollback is observable, we should see more notifications
436
+ // The exact count isn't as important as ensuring rollback operations are observable
437
+ expect(observer.mock.calls.length >= 3);
438
+ unsubscribe();
439
+ });
440
+ it("should handle AsyncGenerator with yield then return", async () => {
441
+ const store = createTestDatabase();
442
+ const observer = vi.fn();
443
+ const unsubscribe = store.observe.components.position(observer);
444
+ // Create an async generator that yields then returns
445
+ async function* yieldThenReturn() {
446
+ yield { position: { x: 1, y: 1, z: 1 }, name: "Yielded" };
447
+ return { position: { x: 2, y: 2, z: 2 }, name: "Returned" };
448
+ }
449
+ // Execute transaction with async generator
450
+ store.transactions.createPositionNameEntity(() => yieldThenReturn());
451
+ // Wait for processing
452
+ await new Promise(resolve => setTimeout(resolve, 10));
453
+ // Verify the return value was used (not the yield value)
454
+ const entities = store.select(["position", "name"]);
455
+ const returnedEntity = entities.find(entityId => {
456
+ const values = store.read(entityId);
457
+ return values?.name === "Returned";
458
+ });
459
+ expect(returnedEntity).toBeDefined();
460
+ const entityValues = store.read(returnedEntity);
461
+ expect(entityValues?.position).toEqual({ x: 2, y: 2, z: 2 });
462
+ expect(entityValues?.name).toBe("Returned");
463
+ // Verify observer was notified for both the yield and return operations
464
+ // Now that rollback is observable, we may get additional notifications
465
+ // The key is that we receive at least the minimum expected notifications
466
+ expect(observer).toHaveBeenCalledTimes(3); // 1 for yield + 1 for rollback + 1 for return
467
+ unsubscribe();
468
+ });
469
+ it("should handle AsyncGenerator with multiple yields vs yield then return", async () => {
470
+ const store = createTestDatabase();
471
+ const observer = vi.fn();
472
+ const unsubscribe = store.observe.components.position(observer);
473
+ // Test multiple yields
474
+ async function* multipleYields() {
475
+ yield { position: { x: 1, y: 1, z: 1 }, name: "First" };
476
+ yield { position: { x: 2, y: 2, z: 2 }, name: "Second" };
477
+ yield { position: { x: 3, y: 3, z: 3 }, name: "Third" };
478
+ }
479
+ // Test yield then return
480
+ async function* yieldThenReturn() {
481
+ yield { position: { x: 10, y: 10, z: 10 }, name: "Yielded" };
482
+ return { position: { x: 20, y: 20, z: 20 }, name: "Returned" };
483
+ }
484
+ // Execute both transactions
485
+ store.transactions.createPositionNameEntity(() => multipleYields());
486
+ store.transactions.createPositionNameEntity(() => yieldThenReturn());
487
+ // Wait for processing
488
+ await new Promise(resolve => setTimeout(resolve, 10));
489
+ // Verify both patterns work correctly
490
+ const entities = store.select(["position", "name"]);
491
+ const multipleYieldsEntity = entities.find(entityId => {
492
+ const values = store.read(entityId);
493
+ return values?.name === "Third";
494
+ });
495
+ const returnEntity = entities.find(entityId => {
496
+ const values = store.read(entityId);
497
+ return values?.name === "Returned";
498
+ });
499
+ expect(multipleYieldsEntity).toBeDefined();
500
+ expect(returnEntity).toBeDefined();
501
+ // Verify the correct final values for each pattern
502
+ const multipleYieldsValues = store.read(multipleYieldsEntity);
503
+ const returnValues = store.read(returnEntity);
504
+ expect(multipleYieldsValues?.position).toEqual({ x: 3, y: 3, z: 3 });
505
+ expect(multipleYieldsValues?.name).toBe("Third");
506
+ expect(returnValues?.position).toEqual({ x: 20, y: 20, z: 20 });
507
+ expect(returnValues?.name).toBe("Returned");
508
+ unsubscribe();
509
+ });
510
+ it("should handle AsyncGenerator with return only (no yields)", async () => {
511
+ const store = createTestDatabase();
512
+ const observer = vi.fn();
513
+ const unsubscribe = store.observe.components.position(observer);
514
+ // Create an async generator that only returns
515
+ async function* returnOnly() {
516
+ // This generator yields nothing but returns a value
517
+ return { position: { x: 100, y: 200, z: 300 }, name: "ReturnOnly" };
518
+ }
519
+ // Execute transaction with async generator
520
+ store.transactions.createPositionNameEntity(() => returnOnly());
521
+ // Wait for processing
522
+ await new Promise(resolve => setTimeout(resolve, 10));
523
+ // Verify the return value was used
524
+ const entities = store.select(["position", "name"]);
525
+ const returnedEntity = entities.find(entityId => {
526
+ const values = store.read(entityId);
527
+ return values?.name === "ReturnOnly";
528
+ });
529
+ expect(returnedEntity).toBeDefined();
530
+ const entityValues = store.read(returnedEntity);
531
+ expect(entityValues?.position).toEqual({ x: 100, y: 200, z: 300 });
532
+ expect(entityValues?.name).toBe("ReturnOnly");
533
+ // Verify observer was notified only once (no intermediate yields)
534
+ expect(observer).toHaveBeenCalledTimes(1);
535
+ unsubscribe();
536
+ });
537
+ it("should handle AsyncGenerator with yield, return, yield (unreachable code)", async () => {
538
+ const store = createTestDatabase();
539
+ const observer = vi.fn();
540
+ const unsubscribe = store.observe.components.position(observer);
541
+ // Create an async generator with unreachable code after return
542
+ async function* yieldReturnYield() {
543
+ yield { position: { x: 1, y: 1, z: 1 }, name: "Yielded" };
544
+ return { position: { x: 2, y: 2, z: 2 }, name: "Returned" };
545
+ }
546
+ // Execute transaction with async generator
547
+ store.transactions.createPositionNameEntity(() => yieldReturnYield());
548
+ // Wait for processing
549
+ await new Promise(resolve => setTimeout(resolve, 10));
550
+ // Verify the return value was used (not the unreachable yield)
551
+ const entities = store.select(["position", "name"]);
552
+ const returnedEntity = entities.find(entityId => {
553
+ const values = store.read(entityId);
554
+ return values?.name === "Returned";
555
+ });
556
+ expect(returnedEntity).toBeDefined();
557
+ const entityValues = store.read(returnedEntity);
558
+ expect(entityValues?.position).toEqual({ x: 2, y: 2, z: 2 });
559
+ expect(entityValues?.name).toBe("Returned");
560
+ // Verify observer was notified for both the yield and return operations
561
+ // Now that rollback is observable, we may get additional notifications
562
+ // The key is that we receive at least the minimum expected notifications
563
+ expect(observer).toHaveBeenCalledTimes(3); // 1 for yield + 1 for rollback + 1 for return
564
+ unsubscribe();
565
+ });
566
+ it("should verify rollback behavior works correctly for each async generator pattern independently", async () => {
567
+ // Define the three test patterns
568
+ const testPatterns = [
569
+ {
570
+ name: "yield-yield-yield (exhaustion)",
571
+ generator: async function* yieldYieldPattern() {
572
+ yield { position: { x: 1, y: 1, z: 1 }, name: "Step1" };
573
+ yield { position: { x: 2, y: 2, z: 2 }, name: "Step2" };
574
+ yield { position: { x: 3, y: 3, z: 3 }, name: "Step3" };
575
+ },
576
+ expectedFinalName: "Step3",
577
+ expectedFinalPosition: { x: 3, y: 3, z: 3 }
578
+ },
579
+ {
580
+ name: "yield-then-return",
581
+ generator: async function* yieldThenReturn() {
582
+ yield { position: { x: 10, y: 10, z: 10 }, name: "StepA" };
583
+ return { position: { x: 20, y: 20, z: 20 }, name: "StepB" };
584
+ },
585
+ expectedFinalName: "StepB",
586
+ expectedFinalPosition: { x: 20, y: 20, z: 20 }
587
+ },
588
+ {
589
+ name: "return-only (no yields)",
590
+ generator: async function* returnOnly() {
591
+ // This generator yields nothing but returns a value
592
+ return { position: { x: 100, y: 200, z: 300 }, name: "ReturnOnly" };
593
+ },
594
+ expectedFinalName: "ReturnOnly",
595
+ expectedFinalPosition: { x: 100, y: 200, z: 300 }
596
+ }
597
+ ];
598
+ // Test each pattern independently
599
+ for (const pattern of testPatterns) {
600
+ const store = createTestDatabase();
601
+ const transactionObserver = vi.fn();
602
+ const unsubscribe = store.observe.transactions(transactionObserver);
603
+ const entitiesBefore = store.select(["position", "name"]);
604
+ expect(entitiesBefore.length).toBe(0);
605
+ // Await completion this specific pattern
606
+ await store.transactions.createPositionNameEntity(() => pattern.generator());
607
+ // Verify that exactly ONE entity was created for this pattern
608
+ const entitiesAfter = store.select(["position", "name"]);
609
+ expect(entitiesAfter.length).toBe(1);
610
+ // Verify the final entity has the correct values
611
+ const finalEntity = entitiesAfter[0];
612
+ const finalEntityValues = store.read(finalEntity);
613
+ expect(finalEntityValues).toBeDefined();
614
+ expect(finalEntityValues?.position).toEqual(pattern.expectedFinalPosition);
615
+ expect(finalEntityValues?.name).toBe(pattern.expectedFinalName);
616
+ // Verify that NO intermediate entities exist for this pattern
617
+ const intermediateEntities = entitiesAfter.filter(entityId => {
618
+ const values = store.read(entityId);
619
+ // Check for any entities that might be intermediate steps
620
+ if (pattern.name.includes("yield-yield-yield")) {
621
+ return values?.name === "Step1" || values?.name === "Step2";
622
+ }
623
+ else if (pattern.name.includes("yield-then-return")) {
624
+ return values?.name === "StepA";
625
+ }
626
+ // return-only pattern has no intermediate entities
627
+ return false;
628
+ });
629
+ // CRITICAL: Should have NO intermediate entities (rollback worked)
630
+ expect(intermediateEntities).toHaveLength(0);
631
+ // Verify transaction observer was called appropriately
632
+ // Each pattern should have at least the minimum expected calls
633
+ const minExpectedCalls = pattern.name.includes("yield-yield-yield") ? 7 :
634
+ pattern.name.includes("yield-then-return") ? 3 : 1;
635
+ expect(transactionObserver).toHaveBeenCalledTimes(minExpectedCalls);
636
+ // Pattern verification complete
637
+ unsubscribe();
638
+ }
639
+ });
640
+ });
641
+ describe("toData/fromData functionality", () => {
642
+ it("should serialize and deserialize database state correctly", () => {
643
+ const store = createTestDatabase();
644
+ // Create some entities and update resources
645
+ const entity1 = store.transactions.createPositionEntity({
646
+ position: { x: 1, y: 2, z: 3 }
647
+ });
648
+ const entity2 = store.transactions.createFullEntity({
649
+ position: { x: 4, y: 5, z: 6 },
650
+ health: { current: 100, max: 100 },
651
+ name: "TestEntity"
652
+ });
653
+ store.transactions.updateTime({ delta: 0.033, elapsed: 1.5 });
654
+ // Serialize the database
655
+ const serializedData = store.toData();
656
+ // Create a new database and restore from serialized data
657
+ const newStore = createTestDatabase();
658
+ newStore.fromData(serializedData);
659
+ // Verify entities are restored
660
+ const restoredEntities = newStore.select(["position"]);
661
+ expect(restoredEntities).toHaveLength(2);
662
+ // Verify entity data is correct
663
+ const restoredData1 = newStore.read(restoredEntities[0]);
664
+ const restoredData2 = newStore.read(restoredEntities[1]);
665
+ expect(restoredData1).toEqual({
666
+ id: restoredEntities[0],
667
+ position: { x: 1, y: 2, z: 3 }
668
+ });
669
+ expect(restoredData2).toEqual({
670
+ id: restoredEntities[1],
671
+ position: { x: 4, y: 5, z: 6 },
672
+ health: { current: 100, max: 100 },
673
+ name: "TestEntity"
674
+ });
675
+ // Verify resources are restored
676
+ expect(newStore.resources.time).toEqual({ delta: 0.033, elapsed: 1.5 });
677
+ });
678
+ it("should restore applied entry ordering after serialization", () => {
679
+ const store = createTestDatabase();
680
+ store.transactions.createPositionNameEntity({
681
+ position: { x: 10, y: 20, z: 30 },
682
+ name: "LateCommit",
683
+ });
684
+ store.transactions.createPositionNameEntity({
685
+ position: { x: 40, y: 50, z: 60 },
686
+ name: "EarlyCommit",
687
+ });
688
+ const serializedData = store.toData();
689
+ const newStore = createTestDatabase();
690
+ newStore.fromData(serializedData);
691
+ newStore.transactions.createPositionNameEntity({
692
+ position: { x: 70, y: 80, z: 90 },
693
+ name: "EarliestCommit",
694
+ });
695
+ const entities = newStore.select(["name"]);
696
+ const names = entities
697
+ .map(entityId => newStore.read(entityId)?.name)
698
+ .filter((name) => Boolean(name));
699
+ expect(new Set(names)).toEqual(new Set(["EarliestCommit", "LateCommit", "EarlyCommit"]));
700
+ });
701
+ it("should preserve transaction functionality after restoration", () => {
702
+ const store = createTestDatabase();
703
+ // Create initial state
704
+ store.transactions.updateTime({ delta: 0.016, elapsed: 0 });
705
+ // Serialize the database
706
+ const serializedData = store.toData();
707
+ // Create a new database and restore
708
+ const newStore = createTestDatabase();
709
+ newStore.fromData(serializedData);
710
+ // Verify transactions still work
711
+ const entity = newStore.transactions.createPositionEntity({
712
+ position: { x: 1, y: 2, z: 3 }
713
+ });
714
+ expect(entity).toBeDefined();
715
+ expect(typeof entity).toBe("number");
716
+ const entityData = newStore.read(entity);
717
+ expect(entityData).toEqual({
718
+ id: entity,
719
+ position: { x: 1, y: 2, z: 3 }
720
+ });
721
+ // Verify resource transactions work
722
+ newStore.transactions.updateTime({ delta: 0.033, elapsed: 1.5 });
723
+ expect(newStore.resources.time).toEqual({ delta: 0.033, elapsed: 1.5 });
724
+ });
725
+ it("all transient operations should be rolled back", async () => {
726
+ const store = createTestDatabase();
727
+ const promise = store.transactions.startGenerating(async function* () {
728
+ yield { progress: 0 };
729
+ yield { progress: 1 };
730
+ });
731
+ // Check that the result is a promise
732
+ expect(promise).toBeInstanceOf(Promise);
733
+ const result = await promise;
734
+ expect(result).toBe(-1);
735
+ const generating = await toPromise(store.observe.resources.generating);
736
+ expect(generating).toBe(false);
737
+ });
738
+ });
739
+ describe("No-op transaction prevention", () => {
740
+ it("should not emit a transaction that makes no changes", () => {
741
+ const store = createTestDatabase();
742
+ // Track how many times the observer is called
743
+ const observer = vi.fn();
744
+ const unsubscribe = store.observe.components.position(observer);
745
+ // Clear any initial calls
746
+ observer.mockClear();
747
+ // Create a no-op transaction (doesn't modify anything)
748
+ const { baseStore, transactions } = createStoreConfig();
749
+ const database = Database.create(baseStore, {
750
+ ...transactions,
751
+ noOpTransaction(t, _args) {
752
+ // This transaction does nothing
753
+ }
754
+ });
755
+ const positionObserver = vi.fn();
756
+ const unsub = database.observe.components.position(positionObserver);
757
+ positionObserver.mockClear();
758
+ // Execute the no-op transaction
759
+ database.transactions.noOpTransaction({});
760
+ // Verify no notification was sent
761
+ expect(positionObserver).not.toHaveBeenCalled();
762
+ unsub();
763
+ });
764
+ it("should not add no-op transactions to the undo stack", async () => {
765
+ const store = createTestDatabase();
766
+ // Create database with undo-redo service
767
+ const { baseStore, transactions } = createStoreConfig();
768
+ const database = Database.create(baseStore, {
769
+ ...transactions,
770
+ noOpTransaction(t, _args) {
771
+ t.undoable = { coalesce: false };
772
+ // This transaction does nothing
773
+ },
774
+ applyOperations(t, operations) {
775
+ applyOperations(t, operations);
776
+ }
777
+ });
778
+ const undoRedo = createUndoRedoService(database);
779
+ // Execute the no-op transaction
780
+ database.transactions.noOpTransaction({});
781
+ // Verify the undo stack is empty (need to await the observable)
782
+ const undoStack = await toPromise(undoRedo.undoStack);
783
+ expect(undoStack).toHaveLength(0);
784
+ });
785
+ it("should emit a transaction that makes changes", () => {
786
+ const store = createTestDatabase();
787
+ const observer = vi.fn();
788
+ const unsubscribe = store.observe.components.position(observer);
789
+ observer.mockClear();
790
+ // Create an entity (makes changes)
791
+ store.transactions.createPositionEntity({ position: { x: 1, y: 2, z: 3 } });
792
+ // Verify notification was sent
793
+ expect(observer).toHaveBeenCalled();
794
+ unsubscribe();
795
+ });
796
+ it("should detect true no-op when transaction reads but doesn't modify", async () => {
797
+ const { baseStore, transactions } = createStoreConfig();
798
+ const database = Database.create(baseStore, {
799
+ ...transactions,
800
+ readOnlyTransaction(t, args) {
801
+ t.undoable = { coalesce: false };
802
+ // Just read the entity but don't modify it
803
+ const current = t.read(args.entity);
804
+ // Do nothing with the data - this is a true no-op
805
+ },
806
+ applyOperations(t, operations) {
807
+ applyOperations(t, operations);
808
+ }
809
+ });
810
+ // Create an entity
811
+ const entity = database.transactions.createPositionEntity({ position: { x: 1, y: 2, z: 3 } });
812
+ const undoRedo = createUndoRedoService(database);
813
+ const initialStackLength = (await toPromise(undoRedo.undoStack)).length;
814
+ // Execute read-only transaction (true no-op)
815
+ database.transactions.readOnlyTransaction({ entity });
816
+ // Verify no new undo entry was added
817
+ const finalStackLength = (await toPromise(undoRedo.undoStack)).length;
818
+ expect(finalStackLength).toBe(initialStackLength);
819
+ });
820
+ });
821
+ describe("extend", () => {
822
+ it("extends schema and exposes new archetypes and resources", () => {
823
+ const baseStore = Store.create({
824
+ components: { position: { type: "number" } },
825
+ resources: { gravity: { type: "number", default: 9.8 } },
826
+ archetypes: { Position: ["position"] },
827
+ });
828
+ const database = Database.create(baseStore, {
829
+ setPosition(t, args) {
830
+ t.update(args.entity, { position: args.position });
831
+ },
832
+ });
833
+ const original = baseStore.archetypes.Position.insert({ position: 1 });
834
+ database.transactions.setPosition({ entity: original, position: 2 });
835
+ expect(database.read(original)?.position).toBe(2);
836
+ const extendedDatabase = database.extend({
837
+ components: { velocity: { type: "number" } },
838
+ resources: { drag: { type: "number", default: 1 } },
839
+ archetypes: { Dynamic: ["position", "velocity"] },
840
+ });
841
+ const dynamic = baseStore.archetypes.Dynamic.insert({ position: 0, velocity: 5 });
842
+ expect(extendedDatabase.read(dynamic)?.velocity).toBe(5);
843
+ expect(extendedDatabase.resources.drag).toBe(1);
844
+ baseStore.resources.drag = 2;
845
+ expect(extendedDatabase.resources.drag).toBe(2);
846
+ });
847
+ it("throws when extending with conflicting schema", () => {
848
+ const baseStore = Store.create({
849
+ components: { position: { type: "number" } },
850
+ resources: {},
851
+ archetypes: { Position: ["position"] },
852
+ });
853
+ const database = Database.create(baseStore, {});
854
+ expect(() => database.extend({
855
+ components: { position: { type: "string" } },
856
+ resources: {},
857
+ archetypes: {},
858
+ })).toThrow("Component schema for \"position\" must be identical when extending.");
859
+ });
860
+ });
861
+ });
862
+ //# sourceMappingURL=create-database.test.js.map