@adobe/data 0.4.4 → 0.4.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 (352) hide show
  1. package/dist/ecs/database/database-schema/create-database-from-schema.d.ts +12 -0
  2. package/dist/ecs/database/database-schema/create-database-from-schema.js +8 -0
  3. package/dist/ecs/database/database-schema/create-database-from-schema.js.map +1 -0
  4. package/dist/ecs/database/database-schema/create-database-schema-test.js +2 -2
  5. package/dist/ecs/database/database-schema/create-database-schema-test.js.map +1 -1
  6. package/dist/ecs/database/database-schema/create-database-schema.d.ts +3 -6
  7. package/dist/ecs/database/database-schema/create-database-schema.js +2 -2
  8. package/dist/ecs/database/database-schema/create-database-schema.js.map +1 -1
  9. package/dist/{core/schema/validation/is-valid.test.js → ecs/database/database-schema/create-store-schema-test.js} +14 -18
  10. package/dist/ecs/database/database-schema/create-store-schema-test.js.map +1 -0
  11. package/dist/ecs/database/database-schema/create-store-schema.d.ts +9 -0
  12. package/dist/{core/functions/is-async-generator.js → ecs/database/database-schema/create-store-schema.js} +4 -3
  13. package/dist/ecs/database/database-schema/create-store-schema.js.map +1 -0
  14. package/dist/ecs/database/database-schema/database-schema.d.ts +2 -5
  15. package/dist/ecs/database/database-schema/index.d.ts +2 -2
  16. package/dist/ecs/database/database-schema/index.js +2 -2
  17. package/dist/ecs/database/database-schema/index.js.map +1 -1
  18. package/dist/ecs/database/database-schema/store-schema.d.ts +12 -0
  19. package/dist/ecs/{ecs/ecs-types.js → database/database-schema/store-schema.js} +1 -1
  20. package/dist/ecs/database/database-schema/store-schema.js.map +1 -0
  21. package/dist/ecs/database/database.d.ts +4 -4
  22. package/dist/ecs/database/index.d.ts +0 -1
  23. package/dist/ecs/database/index.js +0 -1
  24. package/dist/ecs/database/index.js.map +1 -1
  25. package/dist/{cache/functions/omit.js → ecs/database/store-schema/create-store-schema-test.js} +15 -8
  26. package/dist/ecs/database/store-schema/create-store-schema-test.js.map +1 -0
  27. package/dist/ecs/database/store-schema/create-store-schema.d.ts +9 -0
  28. package/dist/{core/index.js → ecs/database/store-schema/create-store-schema.js} +5 -4
  29. package/dist/ecs/database/store-schema/create-store-schema.js.map +1 -0
  30. package/dist/ecs/database/store-schema/index.d.ts +2 -0
  31. package/dist/ecs/{action-ecs → database/store-schema}/index.js +2 -1
  32. package/dist/ecs/database/store-schema/index.js.map +1 -0
  33. package/dist/ecs/database/store-schema/store-schema.d.ts +12 -0
  34. package/dist/ecs/database/{transactional-store/undoable.js → store-schema/store-schema.js} +1 -1
  35. package/dist/ecs/database/store-schema/store-schema.js.map +1 -0
  36. package/dist/ecs/database/transactional-store/apply-operations.d.ts +2 -2
  37. package/dist/ecs/database/transactional-store/apply-operations.js.map +1 -1
  38. package/dist/ecs/database/transactional-store/create-test-transaction.d.ts +0 -1
  39. package/dist/ecs/database/transactional-store/create-test-transaction.js.map +1 -1
  40. package/dist/ecs/database/transactional-store/create-transactional-store.js +5 -6
  41. package/dist/ecs/database/transactional-store/create-transactional-store.js.map +1 -1
  42. package/dist/ecs/database/transactional-store/index.d.ts +0 -1
  43. package/dist/ecs/database/transactional-store/index.js +0 -1
  44. package/dist/ecs/database/transactional-store/index.js.map +1 -1
  45. package/dist/ecs/database/transactional-store/transactional-store.d.ts +1 -6
  46. package/dist/ecs/store/create-store.js.map +1 -1
  47. package/dist/ecs/store/index.d.ts +1 -0
  48. package/dist/ecs/store/index.js +1 -0
  49. package/dist/ecs/store/index.js.map +1 -1
  50. package/dist/{cache/functions/bind-functions.js → ecs/store/store-schema/create-store-schema-test.js} +15 -12
  51. package/dist/ecs/store/store-schema/create-store-schema-test.js.map +1 -0
  52. package/dist/ecs/store/store-schema/create-store-schema.d.ts +9 -0
  53. package/dist/{core/functions/index.js → ecs/store/store-schema/create-store-schema.js} +5 -4
  54. package/dist/ecs/store/store-schema/create-store-schema.js.map +1 -0
  55. package/dist/ecs/store/store-schema/index.d.ts +2 -0
  56. package/dist/ecs/{transaction-ecs → store/store-schema}/index.js +2 -2
  57. package/dist/ecs/store/store-schema/index.js.map +1 -0
  58. package/dist/ecs/store/store-schema/store-schema.d.ts +12 -0
  59. package/dist/{cache/functions/types.js → ecs/store/store-schema/store-schema.js} +1 -1
  60. package/dist/ecs/store/store-schema/store-schema.js.map +1 -0
  61. package/dist/ecs/store/store.d.ts +6 -0
  62. package/dist/ecs/undo-redo/create-undo-redo-actions.js +0 -21
  63. package/dist/ecs/undo-redo/create-undo-redo-actions.js.map +1 -1
  64. package/dist/ecs/undo-redo/create-undo-redo-actions.test.js.map +1 -1
  65. package/dist/functions/serialization/deserialize.d.ts +4 -1
  66. package/dist/functions/serialization/deserialize.js +14 -1
  67. package/dist/functions/serialization/deserialize.js.map +1 -1
  68. package/dist/functions/serialization/serialization.d.ts +23 -0
  69. package/dist/functions/serialization/serialization.js +58 -0
  70. package/dist/functions/serialization/serialization.js.map +1 -0
  71. package/dist/functions/serialization.d.ts +23 -0
  72. package/dist/functions/serialization.js +58 -0
  73. package/dist/functions/serialization.js.map +1 -0
  74. package/dist/{core/functions/with-validation.js → functions/serialization.test.js} +22 -16
  75. package/dist/functions/serialization.test.js.map +1 -0
  76. package/dist/functions/serialize.d.ts +17 -0
  77. package/dist/functions/serialize.js +66 -0
  78. package/dist/functions/serialize.js.map +1 -0
  79. package/dist/observe/to-async-generator.js +14 -11
  80. package/dist/observe/to-async-generator.js.map +1 -1
  81. package/dist/tsconfig.tsbuildinfo +1 -1
  82. package/dist/typed-buffer/structs/get-struct-layout.js +7 -10
  83. package/dist/typed-buffer/structs/get-struct-layout.js.map +1 -1
  84. package/dist/typed-buffer/structs/get-struct-layout.test.js +148 -11
  85. package/dist/typed-buffer/structs/get-struct-layout.test.js.map +1 -1
  86. package/package.json +1 -1
  87. package/dist/README.md +0 -310
  88. package/dist/cache/functions/bind-functions.d.ts +0 -6
  89. package/dist/cache/functions/bind-functions.js.map +0 -1
  90. package/dist/cache/functions/hashing/arrayBufferToHex.d.ts +0 -1
  91. package/dist/cache/functions/hashing/arrayBufferToHex.js +0 -27
  92. package/dist/cache/functions/hashing/arrayBufferToHex.js.map +0 -1
  93. package/dist/cache/functions/omit.d.ts +0 -1
  94. package/dist/cache/functions/omit.js.map +0 -1
  95. package/dist/cache/functions/types.d.ts +0 -1
  96. package/dist/cache/functions/types.js.map +0 -1
  97. package/dist/core/data.d.ts +0 -22
  98. package/dist/core/data.js +0 -52
  99. package/dist/core/data.js.map +0 -1
  100. package/dist/core/data.test.js +0 -48
  101. package/dist/core/data.test.js.map +0 -1
  102. package/dist/core/functions/array-equals.d.ts +0 -1
  103. package/dist/core/functions/array-equals.js +0 -34
  104. package/dist/core/functions/array-equals.js.map +0 -1
  105. package/dist/core/functions/deep-merge.d.ts +0 -32
  106. package/dist/core/functions/deep-merge.js +0 -54
  107. package/dist/core/functions/deep-merge.js.map +0 -1
  108. package/dist/core/functions/deep-merge.test.js +0 -94
  109. package/dist/core/functions/deep-merge.test.js.map +0 -1
  110. package/dist/core/functions/index.d.ts +0 -3
  111. package/dist/core/functions/index.js.map +0 -1
  112. package/dist/core/functions/is-async-generator.d.ts +0 -1
  113. package/dist/core/functions/is-async-generator.js.map +0 -1
  114. package/dist/core/functions/is-promise.d.ts +0 -1
  115. package/dist/core/functions/is-promise.js +0 -26
  116. package/dist/core/functions/is-promise.js.map +0 -1
  117. package/dist/core/functions/with-validation.d.ts +0 -5
  118. package/dist/core/functions/with-validation.js.map +0 -1
  119. package/dist/core/functions/with-validation.test.js +0 -96
  120. package/dist/core/functions/with-validation.test.js.map +0 -1
  121. package/dist/core/index.d.ts +0 -3
  122. package/dist/core/index.js.map +0 -1
  123. package/dist/core/schema/dynamic/dynamic-schema.d.ts +0 -27
  124. package/dist/core/schema/dynamic/dynamic-schema.js +0 -2
  125. package/dist/core/schema/dynamic/dynamic-schema.js.map +0 -1
  126. package/dist/core/schema/dynamic/enumerate-patches.d.ts +0 -9
  127. package/dist/core/schema/dynamic/enumerate-patches.js +0 -50
  128. package/dist/core/schema/dynamic/enumerate-patches.js.map +0 -1
  129. package/dist/core/schema/dynamic/enumerate-patches.test.d.ts +0 -134
  130. package/dist/core/schema/dynamic/enumerate-patches.test.js +0 -209
  131. package/dist/core/schema/dynamic/enumerate-patches.test.js.map +0 -1
  132. package/dist/core/schema/dynamic/get-dynamic-schema.d.ts +0 -5
  133. package/dist/core/schema/dynamic/get-dynamic-schema.js +0 -26
  134. package/dist/core/schema/dynamic/get-dynamic-schema.js.map +0 -1
  135. package/dist/core/schema/dynamic/get-dynamic-schema.test.d.ts +0 -1
  136. package/dist/core/schema/dynamic/get-dynamic-schema.test.js +0 -94
  137. package/dist/core/schema/dynamic/get-dynamic-schema.test.js.map +0 -1
  138. package/dist/core/schema/dynamic/index.d.ts +0 -1
  139. package/dist/core/schema/dynamic/index.js +0 -2
  140. package/dist/core/schema/dynamic/index.js.map +0 -1
  141. package/dist/core/schema/dynamic/schema-path-value-path.d.ts +0 -5
  142. package/dist/core/schema/dynamic/schema-path-value-path.js +0 -12
  143. package/dist/core/schema/dynamic/schema-path-value-path.js.map +0 -1
  144. package/dist/core/schema/dynamic-schema.d.ts +0 -27
  145. package/dist/core/schema/dynamic-schema.js +0 -2
  146. package/dist/core/schema/dynamic-schema.js.map +0 -1
  147. package/dist/core/schema/index.d.ts +0 -4
  148. package/dist/core/schema/index.js +0 -26
  149. package/dist/core/schema/index.js.map +0 -1
  150. package/dist/core/schema/schema.d.ts +0 -122
  151. package/dist/core/schema/schema.js +0 -34
  152. package/dist/core/schema/schema.js.map +0 -1
  153. package/dist/core/schema/schemas.d.ts +0 -45
  154. package/dist/core/schema/schemas.js +0 -39
  155. package/dist/core/schema/schemas.js.map +0 -1
  156. package/dist/core/schema/ui-schema.d.ts +0 -25
  157. package/dist/core/schema/ui-schema.js +0 -2
  158. package/dist/core/schema/ui-schema.js.map +0 -1
  159. package/dist/core/schema/validation/is-valid.d.ts +0 -2
  160. package/dist/core/schema/validation/is-valid.js +0 -14
  161. package/dist/core/schema/validation/is-valid.js.map +0 -1
  162. package/dist/core/schema/validation/is-valid.test.d.ts +0 -1
  163. package/dist/core/schema/validation/is-valid.test.js.map +0 -1
  164. package/dist/core/schema/validation/validate.d.ts +0 -2
  165. package/dist/core/schema/validation/validate.js +0 -38
  166. package/dist/core/schema/validation/validate.js.map +0 -1
  167. package/dist/core/schema/validation/validate.test.d.ts +0 -1
  168. package/dist/core/schema/validation/validate.test.js +0 -106
  169. package/dist/core/schema/validation/validate.test.js.map +0 -1
  170. package/dist/core/schema/validation/with-validation.d.ts +0 -5
  171. package/dist/core/schema/validation/with-validation.js +0 -16
  172. package/dist/core/schema/validation/with-validation.js.map +0 -1
  173. package/dist/core/schema/validation/with-validation.test.d.ts +0 -1
  174. package/dist/core/schema/validation/with-validation.test.js +0 -96
  175. package/dist/core/schema/validation/with-validation.test.js.map +0 -1
  176. package/dist/core/schema.d.ts +0 -86
  177. package/dist/core/schema.js +0 -33
  178. package/dist/core/schema.js.map +0 -1
  179. package/dist/core/schema.test.js +0 -16
  180. package/dist/core/schema.test.js.map +0 -1
  181. package/dist/core/schemas.d.ts +0 -45
  182. package/dist/core/schemas.js +0 -39
  183. package/dist/core/schemas.js.map +0 -1
  184. package/dist/ecs/action-ecs/action-ecs.d.ts +0 -19
  185. package/dist/ecs/action-ecs/action-ecs.js +0 -203
  186. package/dist/ecs/action-ecs/action-ecs.js.map +0 -1
  187. package/dist/ecs/action-ecs/action-ecs.test.d.ts +0 -1
  188. package/dist/ecs/action-ecs/action-ecs.test.js +0 -362
  189. package/dist/ecs/action-ecs/action-ecs.test.js.map +0 -1
  190. package/dist/ecs/action-ecs/action-types.d.ts +0 -106
  191. package/dist/ecs/action-ecs/action-types.js +0 -19
  192. package/dist/ecs/action-ecs/action-types.js.map +0 -1
  193. package/dist/ecs/action-ecs/index.d.ts +0 -2
  194. package/dist/ecs/action-ecs/index.js.map +0 -1
  195. package/dist/ecs/core-ecs/core-ecs-serialization.test.d.ts +0 -1
  196. package/dist/ecs/core-ecs/core-ecs-serialization.test.js +0 -230
  197. package/dist/ecs/core-ecs/core-ecs-serialization.test.js.map +0 -1
  198. package/dist/ecs/core-ecs/core-ecs-types.d.ts +0 -141
  199. package/dist/ecs/core-ecs/core-ecs-types.js +0 -23
  200. package/dist/ecs/core-ecs/core-ecs-types.js.map +0 -1
  201. package/dist/ecs/core-ecs/core-ecs.d.ts +0 -7
  202. package/dist/ecs/core-ecs/core-ecs.js +0 -492
  203. package/dist/ecs/core-ecs/core-ecs.js.map +0 -1
  204. package/dist/ecs/core-ecs/core-ecs.test.d.ts +0 -1
  205. package/dist/ecs/core-ecs/core-ecs.test.js +0 -425
  206. package/dist/ecs/core-ecs/core-ecs.test.js.map +0 -1
  207. package/dist/ecs/core-ecs/index.d.ts +0 -1
  208. package/dist/ecs/core-ecs/index.js +0 -2
  209. package/dist/ecs/core-ecs/index.js.map +0 -1
  210. package/dist/ecs/database/register-database-codec.d.ts +0 -1
  211. package/dist/ecs/database/register-database-codec.js +0 -35
  212. package/dist/ecs/database/register-database-codec.js.map +0 -1
  213. package/dist/ecs/database/register-database-codecs.d.ts +0 -1
  214. package/dist/ecs/database/register-database-codecs.js +0 -35
  215. package/dist/ecs/database/register-database-codecs.js.map +0 -1
  216. package/dist/ecs/database/register-store-codec.d.ts +0 -1
  217. package/dist/ecs/database/register-store-codec.js +0 -35
  218. package/dist/ecs/database/register-store-codec.js.map +0 -1
  219. package/dist/ecs/database/register-typed-buffer-codecs.d.ts +0 -1
  220. package/dist/ecs/database/register-typed-buffer-codecs.js +0 -80
  221. package/dist/ecs/database/register-typed-buffer-codecs.js.map +0 -1
  222. package/dist/ecs/database/transactional-store/apply-write-operations.d.ts +0 -7
  223. package/dist/ecs/database/transactional-store/apply-write-operations.js +0 -20
  224. package/dist/ecs/database/transactional-store/apply-write-operations.js.map +0 -1
  225. package/dist/ecs/database/transactional-store/applyWriteOperations.d.ts +0 -7
  226. package/dist/ecs/database/transactional-store/applyWriteOperations.js +0 -20
  227. package/dist/ecs/database/transactional-store/applyWriteOperations.js.map +0 -1
  228. package/dist/ecs/database/transactional-store/patch.d.ts +0 -3
  229. package/dist/ecs/database/transactional-store/patch.js +0 -7
  230. package/dist/ecs/database/transactional-store/patch.js.map +0 -1
  231. package/dist/ecs/database/transactional-store/undoable.d.ts +0 -13
  232. package/dist/ecs/database/transactional-store/undoable.js.map +0 -1
  233. package/dist/ecs/database/transactional-store/with-undoable.d.ts +0 -10
  234. package/dist/ecs/database/transactional-store/with-undoable.js +0 -13
  235. package/dist/ecs/database/transactional-store/with-undoable.js.map +0 -1
  236. package/dist/ecs/database/with-undoable.d.ts +0 -10
  237. package/dist/ecs/database/with-undoable.js +0 -13
  238. package/dist/ecs/database/with-undoable.js.map +0 -1
  239. package/dist/ecs/ecs/ecs-types.d.ts +0 -132
  240. package/dist/ecs/ecs/ecs-types.js.map +0 -1
  241. package/dist/ecs/ecs/ecs-where-functions.d.ts +0 -6
  242. package/dist/ecs/ecs/ecs-where-functions.js +0 -91
  243. package/dist/ecs/ecs/ecs-where-functions.js.map +0 -1
  244. package/dist/ecs/ecs/ecs.d.ts +0 -13
  245. package/dist/ecs/ecs/ecs.js +0 -177
  246. package/dist/ecs/ecs/ecs.js.map +0 -1
  247. package/dist/ecs/ecs/ecs.test.d.ts +0 -1
  248. package/dist/ecs/ecs/ecs.test.js +0 -399
  249. package/dist/ecs/ecs/ecs.test.js.map +0 -1
  250. package/dist/ecs/ecs/index.d.ts +0 -3
  251. package/dist/ecs/ecs/index.js +0 -3
  252. package/dist/ecs/ecs/index.js.map +0 -1
  253. package/dist/ecs/entity-location-table/register-database-codec.d.ts +0 -1
  254. package/dist/ecs/entity-location-table/register-database-codec.js +0 -35
  255. package/dist/ecs/entity-location-table/register-database-codec.js.map +0 -1
  256. package/dist/ecs/entity-location-table/register-entity-location-table-codec.d.ts +0 -1
  257. package/dist/ecs/entity-location-table/register-entity-location-table-codec.js +0 -42
  258. package/dist/ecs/entity-location-table/register-entity-location-table-codec.js.map +0 -1
  259. package/dist/ecs/entity-location-table/register-entity-location-table-codec.test.d.ts +0 -1
  260. package/dist/ecs/entity-location-table/register-entity-location-table-codec.test.js +0 -70
  261. package/dist/ecs/entity-location-table/register-entity-location-table-codec.test.js.map +0 -1
  262. package/dist/ecs/persistence-service/create-persistence-service.d.ts +0 -6
  263. package/dist/ecs/persistence-service/create-persistence-service.js +0 -24
  264. package/dist/ecs/persistence-service/create-persistence-service.js.map +0 -1
  265. package/dist/ecs/persistence-service/create-session-persistence-service.d.ts +0 -8
  266. package/dist/ecs/persistence-service/create-session-persistence-service.js +0 -49
  267. package/dist/ecs/persistence-service/create-session-persistence-service.js.map +0 -1
  268. package/dist/ecs/persistence-service/persistence-service copy.d.ts +0 -5
  269. package/dist/ecs/persistence-service/persistence-service copy.js +0 -2
  270. package/dist/ecs/persistence-service/persistence-service copy.js.map +0 -1
  271. package/dist/ecs/persistence-service/to-blob-refs.d.ts +0 -2
  272. package/dist/ecs/persistence-service/to-blob-refs.js +0 -3
  273. package/dist/ecs/persistence-service/to-blob-refs.js.map +0 -1
  274. package/dist/ecs/persistence-service/undo-redo-service.d.ts +0 -11
  275. package/dist/ecs/persistence-service/undo-redo-service.js +0 -23
  276. package/dist/ecs/persistence-service/undo-redo-service.js.map +0 -1
  277. package/dist/ecs/store/core/register-core-codec.d.ts +0 -1
  278. package/dist/ecs/store/core/register-core-codec.js +0 -45
  279. package/dist/ecs/store/core/register-core-codec.js.map +0 -1
  280. package/dist/ecs/store/core/register-core-codec.test.d.ts +0 -1
  281. package/dist/ecs/store/core/register-core-codec.test.js +0 -136
  282. package/dist/ecs/store/core/register-core-codec.test.js.map +0 -1
  283. package/dist/ecs/store/query.d.ts +0 -47
  284. package/dist/ecs/store/query.js +0 -2
  285. package/dist/ecs/store/query.js.map +0 -1
  286. package/dist/ecs/store/register-core-codec.d.ts +0 -1
  287. package/dist/ecs/store/register-core-codec.js +0 -38
  288. package/dist/ecs/store/register-core-codec.js.map +0 -1
  289. package/dist/ecs/store/register-store-codec.d.ts +0 -1
  290. package/dist/ecs/store/register-store-codec.js +0 -38
  291. package/dist/ecs/store/register-store-codec.js.map +0 -1
  292. package/dist/ecs/store/restore-store.d.ts +0 -12
  293. package/dist/ecs/store/restore-store.js +0 -91
  294. package/dist/ecs/store/restore-store.js.map +0 -1
  295. package/dist/ecs/store/select-options.d.ts +0 -1
  296. package/dist/ecs/store/select-options.js +0 -16
  297. package/dist/ecs/store/select-options.js.map +0 -1
  298. package/dist/ecs/store/select.d.ts +0 -44
  299. package/dist/ecs/store/select.js +0 -2
  300. package/dist/ecs/store/select.js.map +0 -1
  301. package/dist/ecs/transaction-ecs/index.d.ts +0 -2
  302. package/dist/ecs/transaction-ecs/index.js.map +0 -1
  303. package/dist/ecs/transaction-ecs/transaction-ecs.d.ts +0 -11
  304. package/dist/ecs/transaction-ecs/transaction-ecs.js +0 -184
  305. package/dist/ecs/transaction-ecs/transaction-ecs.js.map +0 -1
  306. package/dist/ecs/transaction-ecs/transaction-ecs.test.d.ts +0 -1
  307. package/dist/ecs/transaction-ecs/transaction-ecs.test.js +0 -599
  308. package/dist/ecs/transaction-ecs/transaction-ecs.test.js.map +0 -1
  309. package/dist/ecs/transaction-ecs/transaction-types.d.ts +0 -135
  310. package/dist/ecs/transaction-ecs/transaction-types.js +0 -2
  311. package/dist/ecs/transaction-ecs/transaction-types.js.map +0 -1
  312. package/dist/ecs/transaction-ecs/transactions.d.ts +0 -5
  313. package/dist/ecs/transaction-ecs/transactions.js +0 -158
  314. package/dist/ecs/transaction-ecs/transactions.js.map +0 -1
  315. package/dist/ecs/undo-redo/do.d.ts +0 -3
  316. package/dist/ecs/undo-redo/do.js +0 -3
  317. package/dist/ecs/undo-redo/do.js.map +0 -1
  318. package/dist/ecs/undo-redo/index.d.ts +0 -1
  319. package/dist/ecs/undo-redo/index.js +0 -23
  320. package/dist/ecs/undo-redo/index.js.map +0 -1
  321. package/dist/functions/serialization/register-typed-array-codecs copy.d.ts +0 -1
  322. package/dist/functions/serialization/register-typed-array-codecs copy.js +0 -13
  323. package/dist/functions/serialization/register-typed-array-codecs copy.js.map +0 -1
  324. package/dist/functions/serialization/serialize-to-blobs copy.d.ts +0 -8
  325. package/dist/functions/serialization/serialize-to-blobs copy.js +0 -21
  326. package/dist/functions/serialization/serialize-to-blobs copy.js.map +0 -1
  327. package/dist/observe/with-map copy.d.ts +0 -5
  328. package/dist/observe/with-map copy.js +0 -14
  329. package/dist/observe/with-map copy.js.map +0 -1
  330. package/dist/package.json +0 -129
  331. package/dist/schema/f32 copy.d.ts +0 -6
  332. package/dist/schema/f32 copy.js +0 -6
  333. package/dist/schema/f32 copy.js.map +0 -1
  334. package/dist/schemas/index.d.ts +0 -1
  335. package/dist/schemas/index.js +0 -23
  336. package/dist/schemas/index.js.map +0 -1
  337. package/dist/schemas/schemas.d.ts +0 -45
  338. package/dist/schemas/schemas.js +0 -39
  339. package/dist/schemas/schemas.js.map +0 -1
  340. package/dist/service/sequential-action.d.ts +0 -18
  341. package/dist/service/sequential-action.js +0 -45
  342. package/dist/service/sequential-action.js.map +0 -1
  343. package/dist/table/ensure-capacity copy.d.ts +0 -2
  344. package/dist/table/ensure-capacity copy.js +0 -15
  345. package/dist/table/ensure-capacity copy.js.map +0 -1
  346. package/dist/table/filter-rows.d.ts +0 -2
  347. package/dist/table/filter-rows.js +0 -15
  348. package/dist/table/filter-rows.js.map +0 -1
  349. /package/dist/{core/data.test.d.ts → ecs/database/database-schema/create-store-schema-test.d.ts} +0 -0
  350. /package/dist/{core/functions/deep-merge.test.d.ts → ecs/database/store-schema/create-store-schema-test.d.ts} +0 -0
  351. /package/dist/{core/functions/with-validation.test.d.ts → ecs/store/store-schema/create-store-schema-test.d.ts} +0 -0
  352. /package/dist/{core/schema.test.d.ts → functions/serialization.test.d.ts} +0 -0
@@ -33,12 +33,8 @@ const getStructFieldAlignment = (type) => {
33
33
  if (typeof type === "string") {
34
34
  return 4;
35
35
  }
36
- // Arrays are aligned to vec4 (16 bytes)
37
- if (type.type === "array") {
38
- return VEC4_SIZE;
39
- }
40
- // Structs are aligned to 4 bytes within other structs
41
- return 4;
36
+ // Arrays and structs are aligned to vec4 (16 bytes)
37
+ return VEC4_SIZE;
42
38
  };
43
39
  /**
44
40
  * Gets size in bytes for a field type
@@ -47,6 +43,7 @@ const getFieldSize = (type) => {
47
43
  if (typeof type === "string") {
48
44
  return 4; // All primitives are 4 bytes
49
45
  }
46
+ // For arrays and structs, use their actual size
50
47
  return type.size;
51
48
  };
52
49
  /**
@@ -111,8 +108,8 @@ const getStructLayoutInternal = memoizeFactory((schema) => {
111
108
  if (schema.minItems !== schema.maxItems || !schema.minItems) {
112
109
  throw new Error("Array must have fixed length");
113
110
  }
114
- if (schema.minItems < 2) {
115
- throw new Error("Array length must be at least 2");
111
+ if (schema.minItems < 1) {
112
+ throw new Error("Array length must be at least 1");
116
113
  }
117
114
  // Special case for vec3
118
115
  const primitiveType = getPrimitiveType(schema.items);
@@ -126,7 +123,7 @@ const getStructLayoutInternal = memoizeFactory((schema) => {
126
123
  }
127
124
  return {
128
125
  type: "array",
129
- size: VEC4_SIZE, // vec3 is padded to vec4
126
+ size: 12, // vec3 is 12 bytes, not padded to vec4
130
127
  fields
131
128
  };
132
129
  }
@@ -180,7 +177,7 @@ const getStructLayoutInternal = memoizeFactory((schema) => {
180
177
  };
181
178
  currentOffset += getFieldSize(fieldType);
182
179
  }
183
- // Round up total size to vec4
180
+ // Round up total size to vec4 (std140 requirement)
184
181
  const size = roundUpToAlignment(currentOffset, VEC4_SIZE);
185
182
  return {
186
183
  type: "object",
@@ -1 +1 @@
1
- {"version":3,"file":"get-struct-layout.js","sourceRoot":"","sources":["../../../src/typed-buffer/structs/get-struct-layout.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"get-struct-layout.js","sourceRoot":"","sources":["../../../src/typed-buffer/structs/get-struct-layout.ts"],"names":[],"mappings":"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"}
@@ -50,7 +50,7 @@ describe("getStructLayout", () => {
50
50
  };
51
51
  const layout = getStructLayout(schema);
52
52
  expect(layout.type).toBe("array");
53
- expect(layout.size).toBe(16); // padded to vec4
53
+ expect(layout.size).toBe(12); // vec3 is 12 bytes, not padded to vec4
54
54
  expect(layout.fields["0"].offset).toBe(0);
55
55
  expect(layout.fields["1"].offset).toBe(4);
56
56
  expect(layout.fields["2"].offset).toBe(8);
@@ -76,17 +76,17 @@ describe("getStructLayout", () => {
76
76
  };
77
77
  const layout = getStructLayout(schema);
78
78
  expect(layout.type).toBe("object");
79
- // transform (32 bytes) + active (4 bytes) = 36 bytes
80
- // rounded up to largest member alignment (16 bytes) = 48 bytes
81
- expect(layout.size).toBe(48);
79
+ // transform (16 bytes) + active (4 bytes) = 20 bytes
80
+ // rounded up to largest member alignment (16 bytes) = 32 bytes
81
+ expect(layout.size).toBe(32);
82
82
  const transform = layout.fields.transform.type;
83
83
  expect(typeof transform).not.toBe("string");
84
84
  if (typeof transform !== "string") {
85
- // position (vec3 = 16 bytes) + scale (4 bytes) = 20 bytes
86
- // rounded up to largest member alignment (16 bytes) = 32 bytes
87
- expect(transform.size).toBe(32);
85
+ // position (vec3 = 12 bytes) + scale (4 bytes) = 16 bytes
86
+ // no padding needed, struct alignment is 16 bytes
87
+ expect(transform.size).toBe(16);
88
88
  const position = transform.fields.position.type;
89
- expect(typeof position !== "string" && position.size).toBe(16);
89
+ expect(typeof position !== "string" && position.size).toBe(12);
90
90
  }
91
91
  });
92
92
  it("should handle array of structs", () => {
@@ -108,6 +108,143 @@ describe("getStructLayout", () => {
108
108
  expect(layout.fields["0"].offset).toBe(0);
109
109
  expect(layout.fields["1"].offset).toBe(16); // aligned to vec4
110
110
  });
111
+ it("should demonstrate std140 vec4 + f32 + f32 alignment issue", () => {
112
+ const schema = {
113
+ type: "object",
114
+ properties: {
115
+ // vec4 (16 bytes, offset 0)
116
+ viewProjection: {
117
+ type: "array",
118
+ items: { type: "number", precision: 1 },
119
+ minItems: 4,
120
+ maxItems: 4
121
+ },
122
+ // f32 (4 bytes, offset 16)
123
+ lightDirection: {
124
+ type: "array",
125
+ items: { type: "number", precision: 1 },
126
+ minItems: 3,
127
+ maxItems: 3
128
+ },
129
+ // f32 (4 bytes, offset 32) - CORRECT for std140!
130
+ lightColor: {
131
+ type: "array",
132
+ items: { type: "number", precision: 1 },
133
+ minItems: 3,
134
+ maxItems: 3
135
+ }
136
+ }
137
+ };
138
+ const layout = getStructLayout(schema);
139
+ expect(layout.type).toBe("object");
140
+ // The getStructLayout function is actually working correctly for std140!
141
+ // It's properly padding vec3s to 16-byte boundaries
142
+ expect(layout.fields.lightColor.offset).toBe(32); // This is correct!
143
+ // The correct std140 layout is:
144
+ // - viewProjection: offset 0, size 16 bytes
145
+ // - lightDirection: offset 16, size 16 bytes (padded to vec4)
146
+ // - lightColor: offset 32, size 16 bytes (padded to vec4)
147
+ // Total size: 48 bytes
148
+ expect(layout.size).toBe(48); // This is correct
149
+ });
150
+ it("should handle vec3<f32> + f32 struct layout correctly", () => {
151
+ const schema = {
152
+ type: "object",
153
+ properties: {
154
+ // vec3<f32> (12 bytes, padded to 16 bytes, offset 0)
155
+ position: {
156
+ type: "array",
157
+ items: { type: "number", precision: 1 },
158
+ minItems: 3,
159
+ maxItems: 3
160
+ },
161
+ // f32 (4 bytes, offset 16)
162
+ scale: { type: "number", precision: 1 }
163
+ }
164
+ };
165
+ const layout = getStructLayout(schema);
166
+ expect(layout.type).toBe("object");
167
+ // vec3<f32> should be 16-byte aligned and take 12 bytes
168
+ expect(layout.fields.position.offset).toBe(0);
169
+ const positionType = layout.fields.position.type;
170
+ if (typeof positionType !== "string") {
171
+ expect(positionType.size).toBe(12);
172
+ }
173
+ // f32 should follow immediately at offset 12
174
+ expect(layout.fields.scale.offset).toBe(12);
175
+ // Total size should be 12 bytes (vec3) + 4 bytes (f32) = 16 bytes
176
+ // no padding needed, struct alignment is 16 bytes
177
+ expect(layout.size).toBe(16);
178
+ });
179
+ // This sample was pulled from here: https://webgpufundamentals.org/webgpu/lessons/webgpu-memory-layout.html
180
+ it("should handle complex struct with arrays and nested structs (std140 example)", () => {
181
+ const schema = {
182
+ type: "object",
183
+ properties: {
184
+ // Main struct fields in expected order
185
+ orientation: {
186
+ type: "array",
187
+ items: { type: "number", precision: 1 },
188
+ minItems: 3,
189
+ maxItems: 3
190
+ },
191
+ size: { type: "number", precision: 1 },
192
+ direction: {
193
+ type: "array",
194
+ items: {
195
+ type: "array",
196
+ items: { type: "number", precision: 1 },
197
+ minItems: 3,
198
+ maxItems: 3
199
+ },
200
+ minItems: 1,
201
+ maxItems: 1
202
+ },
203
+ scale: { type: "number", precision: 1 },
204
+ // Ex4a struct
205
+ info: {
206
+ type: "object",
207
+ properties: {
208
+ velocity: {
209
+ type: "array",
210
+ items: { type: "number", precision: 1 },
211
+ minItems: 3,
212
+ maxItems: 3
213
+ }
214
+ }
215
+ },
216
+ friction: { type: "number", precision: 1 }
217
+ }
218
+ };
219
+ const layout = getStructLayout(schema);
220
+ expect(layout.type).toBe("object");
221
+ // orientation: vec3f at offset 0, size 12 bytes
222
+ expect(layout.fields.orientation.offset).toBe(0);
223
+ const orientationType = layout.fields.orientation.type;
224
+ if (typeof orientationType !== "string") {
225
+ expect(orientationType.size).toBe(12);
226
+ }
227
+ // size: f32 at offset 12 (fits right after vec3f)
228
+ expect(layout.fields.size.offset).toBe(12);
229
+ // direction: array<vec3f, 1> at offset 16 (aligned to vec4)
230
+ expect(layout.fields.direction.offset).toBe(16);
231
+ const directionType = layout.fields.direction.type;
232
+ if (typeof directionType !== "string") {
233
+ expect(directionType.size).toBe(16); // vec3f padded to vec4
234
+ }
235
+ // scale: f32 at offset 32 (after array)
236
+ expect(layout.fields.scale.offset).toBe(32);
237
+ // info: Ex4a struct at offset 48 (aligned to vec4)
238
+ expect(layout.fields.info.offset).toBe(48);
239
+ const infoType = layout.fields.info.type;
240
+ if (typeof infoType !== "string") {
241
+ expect(infoType.size).toBe(16); // vec3f padded to vec4
242
+ }
243
+ // friction: f32 at offset 64 (after struct)
244
+ expect(layout.fields.friction.offset).toBe(64);
245
+ // Total size should be 68 bytes, rounded up to vec4 = 80 bytes
246
+ expect(layout.size).toBe(80);
247
+ });
111
248
  it("should reject invalid schemas", () => {
112
249
  // Non-fixed length array
113
250
  expect(() => getStructLayout({
@@ -121,12 +258,12 @@ describe("getStructLayout", () => {
121
258
  a: { type: "string" }
122
259
  }
123
260
  })).toThrow();
124
- // Array length < 2
261
+ // Array length < 1
125
262
  expect(() => getStructLayout({
126
263
  type: "array",
127
264
  items: { type: "number", precision: 1 },
128
- minItems: 1,
129
- maxItems: 1
265
+ minItems: 0,
266
+ maxItems: 0
130
267
  })).toThrow();
131
268
  });
132
269
  });
@@ -1 +1 @@
1
- {"version":3,"file":"get-struct-layout.test.js","sourceRoot":"","sources":["../../../src/typed-buffer/structs/get-struct-layout.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"get-struct-layout.test.js","sourceRoot":"","sources":["../../../src/typed-buffer/structs/get-struct-layout.test.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@adobe/data",
3
- "version": "0.4.4",
3
+ "version": "0.4.6",
4
4
  "description": "Adobe data oriented programming library",
5
5
  "type": "module",
6
6
  "sideEffects": true,
package/dist/README.md DELETED
@@ -1,310 +0,0 @@
1
- # @adobe/data
2
- Adobe Data Oriented Programming Library
3
-
4
- ## Documentation
5
-
6
- [Main Page](https://git.corp.adobe.com/pages/neuralfiltersplatform/firefly-data/docs/api/)
7
-
8
- [ECS Performance Test](https://git.corp.adobe.com/pages/neuralfiltersplatform/firefly-data/docs/perftest.html)
9
-
10
- ## Breaking API Changes
11
-
12
- Until we reach 1.0.0, minor version changes may be API breaking.
13
-
14
- ## Data
15
-
16
- This library uses data oriented design paradigm and prefers pure functional interfaces whenever practical.
17
-
18
- For our purposes, `Data` is immutable `JSON` (de)serializable objects and primitives.
19
-
20
- ### Why immutable Data?
21
-
22
- We prefer Data because it is easy to:
23
- - serialize
24
- - deserialize
25
- - inspect
26
- - compare
27
- - hash
28
- - validate
29
-
30
- We prefer immutable Data because it is easy to:
31
- - reason about
32
- - avoid side effects
33
- - avoid defensive copying
34
- - use for pure function arguments and return values
35
- - use with concurrency
36
- - memoize results
37
- - use as cache key (stringified)
38
- - use as cache value
39
-
40
- ### What is Data Oriented Design?
41
-
42
- Sanders Mertens covers this thoroughly in his ECS FAQ:
43
-
44
- [https://github.com/SanderMertens/ecs-faq?tab=readme-ov-file#what-is-data-oriented-design](https://github.com/SanderMertens/ecs-faq?tab=readme-ov-file#what-is-data-oriented-design)
45
-
46
- ### Data Schemas
47
-
48
- When runtime type information is required we use `JSON Schema`. In order to avoid redundancy, we can use `FromSchema` to derive a typescript type at compile time.
49
-
50
- Example:
51
-
52
- ```typescript
53
- const Float32Schema = { type: "number", precision: 1 } as const satisfies Schema;
54
- const Float32 = FromSchema<typeof Float32Schema>; // number
55
- ```
56
-
57
- It is important that we use `as const` for the schema definition. Without that, the typeof Float32Schema would be `{ type: string, precision: number }` instead of `{ type: "number", precision: 1 }` and we would not be able to derive a correct type using `FromSchema`.
58
-
59
- ### Normalized Data
60
-
61
- Data is considered "Normalized" when all object keys contained anywhere within it are alphabetically sorted. We include a `normalize` function which performs this conversion. This is particularly useful when you want to use data as a cache key.
62
-
63
- ```typescript
64
- const notNormalized = { b: 2, a: 1 };
65
- const normalized = normalize(notNormalized); // { a: 1, b: 2 }
66
- ```
67
-
68
- ## Observables
69
-
70
- An `Observable<T>` is a subscription function that you can pass a callback function to. Your callback function can accept a single argument of type `T`. The subscription function returns a dispose function that accepts no parameters and can be called at any point in the future to cancel your subscription.
71
-
72
- Your callback function *may* be called back synchronously (before the initial call returns) zero or one times and asynchronously later any number of times.
73
-
74
- For more information see the [Observable API documentation](./docs/api/modules/observe.html)
75
-
76
- ### Observable Types
77
-
78
- ```typescript
79
- /**
80
- * Called to add a new observer to an Observable.
81
- * Returns an Unobserve function that can be called to stop observing the Observable.
82
- */
83
- export type Observable<T> = (observer: Callback<T>) => Unobserve;
84
- /**
85
- * Callback function called zero or more times with a sequence of values.
86
- * *may* be called back synchronously, immediately when selector function is called.
87
- * *may* also be called back asynchronously later any number of times.
88
- * *may* be called multiple sequential times with the same value.
89
- */
90
- export type Callback<T> = (value: T) => void;
91
- /**
92
- * Function called to stop observing an Observable.
93
- */
94
- export type Unobserve = () => void;
95
- ```
96
-
97
- An Observable can be thought of sort of like a Promise but with a few important differences.
98
- - A Promise only yields a single value, an Observable yields a sequence of values.
99
- - A Promise can reject with an error, an Observable can not. (It could yield type `MyResult | MyError` though.)
100
- - A Promise can only resolve asynchronously, an Observable *may* yield an initial result synchronously.
101
- - An Observable is allowed to call the Callback callback function immediately upon observation if it has a value.
102
- - A Promise begins executing immediately, an Observable may lazily wait for a first observer before taking any action.
103
- - An Observable can be unobserved.
104
-
105
- ### Observable Creation
106
-
107
- This simple definition of an Observable makes it very easy to create them from various sources.
108
-
109
- - `fromConstant<T>(value: T) => Observable<T>`
110
- - `fromPromise<T>(promise: Promise<T>): Observable<T>`
111
- - `fromPromiseWithError<T, E extends Error>(promise: Promise<T>): Observable<T | E>`
112
- - `fromObservableProperties` converts an object with named Observable values into a single Observable of an object with corresponding types.
113
-
114
- For instance:
115
-
116
- ```typescript
117
- fromObservables({ a: fromConstant(1), b: fromConstant("s")})
118
- // yields type Observable<{ a: number, b: string }>
119
- ```
120
-
121
- `fromObservableProperties` will only yield a result once every contained observable has provided a result. If some properties are optional then use the `withOptional` higher order function described below.
122
-
123
- ### Observable Modification
124
-
125
- They are also very easy to modify in order to build higher order Observables.
126
-
127
- For the purposes of discussion let us use an array to indicate the sequential values yielded by an Observable with the first element being any synchronous callback and `void` meaning no synchronous callback.
128
-
129
- So our `fromConstant(12)` would yield `[12]` and `fromPromise(Promise.resolve(12))` would yield `[void, 12]`
130
-
131
- These examples will use the form of: Sequence Before => Higher Order Function => Sequence After.
132
-
133
- withDeduplicate removes any sequentially equivalent values:
134
-
135
- `[1, 1, 2, 2, 2, 3]` => `withDeduplicate` => `[1, 2, 3]`
136
-
137
- withDefault replaces any undefined values, including initial synchronous value with a default value:
138
-
139
- `[void, 1, 2, undefined, 4]` => `withDefault(-1)` => `[-1, 1, 2, -1, 4]`
140
-
141
- withMap applies a mapping function to each value at notification time:
142
-
143
- `[void, 1, 2, 3]` => `withMap(x => x * 2)` => `[void, 2, 4, 6]`
144
-
145
- withOptional converts an `Observable<T>` to `Observable<T | undefined>` and will always respond synchronously.
146
-
147
- `[void, 1, 2, 3, 4]` => `withOptional` => `[undefined, 1, 2, 3, 4]`
148
-
149
- ## Cache
150
-
151
- The cache module contains functions and interfaces related to caching, hashing, memoization and storage and retrieval of `Blob`s.
152
-
153
- The `memoize` function and `BlobStore` are the most important public interfaces in the cache submodule. They are described below. See the API reference for hashing and other lower level functions.
154
-
155
- The `memoize` function can be used to cache expensive, deterministic, asynchronous functions that take data arguments and return data results. In addition to caching the results, it also blocks multiple simultaneous calls with the same arguments and makes them wait for the first result.
156
-
157
- ### BlobStore
158
-
159
- It is important to handle `Blob`s correctly within an application. Retaining references to a large number of them can cause memory problems depending upon their size.
160
-
161
- The `BlobStore` interface and corresponding `blobStore` exported instance provide a convenient way to convert `Blob`s into small JSON handles to them called `BlobRef`s. Those `BlobRef`s can later be converted back into a `Blob`.
162
-
163
- `Blob`s within the `blobStore` are generally persisted across sessions using the browsers buid in `Cache` storage.
164
-
165
- `BlobRef`s have a number of advantages over directly using blobs.
166
- `BlobRef`s are:
167
- - small json objects
168
- - use negligible memory since the `Blob` is stored on disc till needed.
169
- - deterministic for each `Blob` based on mime type and content.
170
- - suitable for persistence to locations with limited size.
171
- - suitable for use as a cache key
172
- - suitable for use as a cache value
173
-
174
- ## Schemas
175
-
176
- Contains some standard data type schemas in JSON Schema format for convenience. These types are most frequently used when describing components within the Entity Component System. Knowing the precise size and signedness of primitive numeric types allows the ECS to store these values within tightly packed typed arrays internally. This makes memory usage and processing time more efficient.
177
-
178
- ## Entity Component System (ECS)
179
-
180
- This ECS database is a high performance, strongly typed typescript implementation inspired by the Sanders Mertens C++ based [Flecs](https://www.flecs.dev/flecs/md_docs_2Docs.html).
181
-
182
- This library provides three different high performance ECS interfaces. They each share the same basic read API but differ in their interface for writing and observability of changes.
183
-
184
- - [ECS](./docs/api/interfaces/ecs.ECS.html)
185
- - allows direct write access to the data.
186
- - no changes are observability.
187
- - [Transaction ECS](./docs/api/interfaces/ecs.TransactionECS.html)
188
- - requires transactions for writing changes.
189
- - all changes are observable.
190
- - [Action ECS](./docs/api/interfaces/ecs.ActionECS.html)
191
- - requires pre-defined actions for writing changes.
192
- - actions are implemented using transactions.
193
- - action functions must be synchronous and may never throw.
194
- - all changes are observable.
195
- - provides Operational Transform to resolve concurrent multi player edits.
196
-
197
- ### What is an ECS?
198
-
199
- Sanders Mertens also covers this thoroughly in his ECS FAQ:
200
-
201
- [https://github.com/SanderMertens/ecs-faq?tab=readme-ov-file#what-is-ecs](https://github.com/SanderMertens/ecs-faq?tab=readme-ov-file#what-is-ecs)
202
-
203
- In addition to the Entity, Component and System definitions which are standard, we also use the term Resource. A Resource is just a value which is defined globally on the ECS itself and not attached to any specific Entity.
204
-
205
- ### Action ECS Usage
206
-
207
- ```typescript
208
- // create an action ecs
209
- const ecs = createActionECS()
210
- // define components with schemas
211
- .withComponents({
212
- position: Vector3Schema,
213
- velocity: Vector3Schema,
214
- color: Vector4Schema,
215
- size: { type: "number" },
216
- health: { type: "number" },
217
- player: { const: true },
218
- } as const)
219
- // define archetypes with component names
220
- .withArchetypes({
221
- particle: ["position", "velocity", "color", "size"],
222
- player: ["position", "health", "player"],
223
- })
224
- // define resources with initial values
225
- .withResources({
226
- gravity: 9.8,
227
- })
228
- // define actions with transactional functions
229
- .withActions({
230
- createParticle(t, props: { position: Vector3, velocity: Vector3, color: Vector4, size: number }) {
231
- t.createEntity(t.ecs.archetypes.particle, props);
232
- },
233
- deleteParticle(t, entity: number) {
234
- t.deleteEntity(entity);
235
- },
236
- createPlayer(t, position: Vector3) {
237
- t.createEntity(t.ecs.archetypes.player, { position, health: 100, player: true });
238
- },
239
- movePlayer(t, entity: number, position: Vector3) {
240
- t.setComponentValue(entity, "position", position);
241
- },
242
- setGravity(t, gravity: number) {
243
- t.resources.gravity = gravity;
244
- },
245
- })
246
-
247
- // call some actions to modify the ECS
248
- ecs.actions.createParticle({ position: [0, 0, 0], velocity: [1, 0, 0], color: [1, 1, 1, 1], size: 1 });
249
- ecs.actions.createParticle({ position: [1, 1, 1], velocity: [1, 1, 1], color: [1, 1, 1, 1], size: 2 });
250
- ecs.actions.createPlayer([10, 20, 0]);
251
- ecs.actions.movePlayer(1, [10, 20, 0]);
252
-
253
- // read some values from the ECS
254
- const players = ecs.selectEntities(ecs.archetypes.player);
255
- const particles = ecs.selectEntities(ecs.archetypes.particle);
256
-
257
- // observe changes to the ECS
258
- ecs.observe.archetypeEntities(ecs.archetypes.player)((playerEntities) => {
259
- for (const playerEntity of playerEntities) {
260
- const player = ecs.getEntityValues(playerEntity);
261
- console.log("Player entity changed", player);
262
- }
263
- });
264
-
265
- ```
266
-
267
- ### ECS Persistence
268
-
269
- The ECS can be converted to JSON and from JSON.
270
-
271
- The persistence format is logically consistent with the internal ECS data format so studying it may help you understand how an ECS is structured:
272
-
273
- ```typescript
274
- {
275
- ecs: true,
276
- version: 2,
277
- components: {
278
- id: { type: 'integer', minimum: +0, maximum: 4294967295 },
279
- position: { type: 'array', items: { type: 'number', precision: 1 }, minItems: 3, maxItems: 3 },
280
- velocity: { type: 'array', items: { type: 'number', precision: 1 }, minItems: 3, maxItems: 3 },
281
- color: { type: 'array', items: { type: 'number', precision: 1 }, minItems: 3, maxItems: 3 },
282
- size: { type: 'number' }, health: { type: 'number' }, player: { const: true },
283
- gravity: {}
284
- },
285
- // The main entities table has two entries for each entity.
286
- // The first value is the index of the tables array and represents the entities archetype.
287
- // The second value is the row of the entity within the archetype table.
288
- entities: [ 3, +0, 1, +0, 1, +1, 2, +0 ],
289
- tables: [
290
- { rows: +0, columns: { id: [] } }, // the empty archetype contains only an id component
291
- {
292
- rows: 2,
293
- columns: {
294
- // component data is stored as Structure of Arrays (SoA)
295
- id: [ 1, 2 ],
296
- color: [ [1, 0, 0, 0], [1, 1, 1, 1] ],
297
- position: [ [0, 0, 0, 0], [1, 1, 1, 1] ],
298
- size: [ 1, 2 ],
299
- velocity: [ [0, 0, 0], [1, 1, 1] ]
300
- }
301
- },
302
- { rows: 1, columns: { id: [ 3 ], health: [ 100 ], player: true, position: [ [ 10, 20, +0 ] ] } },
303
- { rows: 1, columns: { gravity: [ 9.8 ], id: [ +0 ] } } // resources are stored internally as components
304
- ]
305
- }
306
- ```
307
-
308
- ## Performance Test
309
-
310
- [Performance Test](https://git.corp.adobe.com/pages/neuralfiltersplatform/firefly-data/docs/perftest.html)
@@ -1,6 +0,0 @@
1
- /**
2
- * Binds all functions to the object containing them.
3
- * @param obj
4
- * @returns
5
- */
6
- export declare function bindFunctions<T extends object>(obj: T): void;
@@ -1 +0,0 @@
1
- {"version":3,"file":"bind-functions.js","sourceRoot":"","sources":["../../../src/cache/functions/bind-functions.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;WAoBW;AACX;;;;GAIG;AACH,MAAM,UAAU,aAAa,CAAmB,GAAM;IAEpD,KAAK,MAAM,GAAG,IAAI,GAAG,EAAE,CAAC;QACtB,wFAAwF;QACxF,GAAG,CAAC,GAAG,CAAC,GAAI,GAAG,CAAC,GAAG,CAAiB,CAAC,IAAI,CAAC,GAAG,CAAQ,CAAC;IACxD,CAAC;AACH,CAAC"}
@@ -1 +0,0 @@
1
- export declare function arrayBufferToHex(buffer: ArrayBuffer): string;
@@ -1,27 +0,0 @@
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
- export function arrayBufferToHex(buffer) {
23
- return [...new Uint8Array(buffer)]
24
- .map((x) => x.toString(16).padStart(2, "0"))
25
- .join("");
26
- }
27
- //# sourceMappingURL=arrayBufferToHex.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"arrayBufferToHex.js","sourceRoot":"","sources":["../../../../src/cache/functions/hashing/arrayBufferToHex.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;WAoBW;AACX,MAAM,UAAU,gBAAgB,CAAC,MAAmB;IAChD,OAAO,CAAC,GAAG,IAAI,UAAU,CAAC,MAAM,CAAC,CAAC;SAC7B,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;SAC3C,IAAI,CAAC,EAAE,CAAC,CAAC;AAClB,CAAC"}