@adobe/data 0.9.60 → 0.9.62

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 (222) hide show
  1. package/dist/ecs/archetype/archetype.d.ts +9 -2
  2. package/dist/ecs/archetype/archetype.js.map +1 -1
  3. package/dist/ecs/archetype/create-archetype.js +5 -2
  4. package/dist/ecs/archetype/create-archetype.js.map +1 -1
  5. package/dist/ecs/database/combine-plugins.d.ts +5 -1
  6. package/dist/ecs/database/combine-plugins.js +3 -3
  7. package/dist/ecs/database/combine-plugins.js.map +1 -1
  8. package/dist/ecs/database/concurrency/concurrency-strategy.d.ts +86 -0
  9. package/dist/ecs/database/concurrency/concurrency-strategy.js +3 -0
  10. package/dist/ecs/database/concurrency/concurrency-strategy.js.map +1 -0
  11. package/dist/ecs/database/concurrency/immediate-concurrency.d.ts +22 -0
  12. package/dist/ecs/database/concurrency/immediate-concurrency.js +74 -0
  13. package/dist/ecs/database/concurrency/immediate-concurrency.js.map +1 -0
  14. package/dist/ecs/database/concurrency/index.d.ts +4 -0
  15. package/dist/ecs/database/concurrency/index.js +5 -0
  16. package/dist/ecs/database/concurrency/index.js.map +1 -0
  17. package/dist/ecs/database/concurrency/rebase-replay-concurrency.d.ts +20 -0
  18. package/dist/ecs/database/concurrency/rebase-replay-concurrency.js +34 -0
  19. package/dist/ecs/database/concurrency/rebase-replay-concurrency.js.map +1 -0
  20. package/dist/ecs/database/concurrency/roll-forward-concurrency.d.ts +33 -0
  21. package/dist/ecs/database/concurrency/roll-forward-concurrency.js +115 -0
  22. package/dist/ecs/database/concurrency/roll-forward-concurrency.js.map +1 -0
  23. package/dist/ecs/database/concurrency/roll-forward-concurrency.test.d.ts +1 -0
  24. package/dist/ecs/database/concurrency/roll-forward-concurrency.test.js +136 -0
  25. package/dist/ecs/database/concurrency/roll-forward-concurrency.test.js.map +1 -0
  26. package/dist/ecs/database/create-plugin.d.ts +17 -14
  27. package/dist/ecs/database/create-plugin.js +2 -1
  28. package/dist/ecs/database/create-plugin.js.map +1 -1
  29. package/dist/ecs/database/database.d.ts +61 -11
  30. package/dist/ecs/database/database.index.performance.test.d.ts +1 -0
  31. package/dist/ecs/database/database.index.performance.test.js +417 -0
  32. package/dist/ecs/database/database.index.performance.test.js.map +1 -0
  33. package/dist/ecs/database/database.index.test.d.ts +1 -0
  34. package/dist/ecs/database/database.index.test.js +1142 -0
  35. package/dist/ecs/database/database.index.test.js.map +1 -0
  36. package/dist/ecs/database/database.index.type-test.d.ts +1 -0
  37. package/dist/ecs/database/database.index.type-test.js +275 -0
  38. package/dist/ecs/database/database.index.type-test.js.map +1 -0
  39. package/dist/ecs/database/database.js.map +1 -1
  40. package/dist/ecs/database/database.reset.test.js +2 -1
  41. package/dist/ecs/database/database.reset.test.js.map +1 -1
  42. package/dist/ecs/database/deep-extends-chain.type-test.d.ts +256 -256
  43. package/dist/ecs/database/index-api-proof.type-test.d.ts +1 -0
  44. package/dist/ecs/database/index-api-proof.type-test.js +88 -0
  45. package/dist/ecs/database/index-api-proof.type-test.js.map +1 -0
  46. package/dist/ecs/database/index-registry/create-index-registry.d.ts +53 -0
  47. package/dist/ecs/database/index-registry/create-index-registry.js +174 -0
  48. package/dist/ecs/database/index-registry/create-index-registry.js.map +1 -0
  49. package/dist/ecs/database/index-registry/create-index.d.ts +60 -0
  50. package/dist/ecs/database/index-registry/create-index.js +539 -0
  51. package/dist/ecs/database/index-registry/create-index.js.map +1 -0
  52. package/dist/ecs/database/index-registry/index.d.ts +4 -0
  53. package/dist/ecs/database/index-registry/index.js +4 -0
  54. package/dist/ecs/database/index-registry/index.js.map +1 -0
  55. package/dist/ecs/database/index.d.ts +1 -0
  56. package/dist/ecs/database/index.js +1 -0
  57. package/dist/ecs/database/index.js.map +1 -1
  58. package/dist/ecs/database/observe-index-entities.d.ts +26 -0
  59. package/dist/ecs/database/observe-index-entities.js +66 -0
  60. package/dist/ecs/database/observe-index-entities.js.map +1 -0
  61. package/dist/ecs/database/observed/create-observed-database.js +1 -1
  62. package/dist/ecs/database/observed/create-observed-database.js.map +1 -1
  63. package/dist/ecs/database/observed/observed-database.d.ts +1 -1
  64. package/dist/ecs/database/public/create-database.d.ts +12 -27
  65. package/dist/ecs/database/public/create-database.js +252 -10
  66. package/dist/ecs/database/public/create-database.js.map +1 -1
  67. package/dist/ecs/database/public/create-database.test.js +8 -7
  68. package/dist/ecs/database/public/create-database.test.js.map +1 -1
  69. package/dist/ecs/database/public/create-transaction-dispatcher.d.ts +4 -2
  70. package/dist/ecs/database/public/create-transaction-dispatcher.js +2 -8
  71. package/dist/ecs/database/public/create-transaction-dispatcher.js.map +1 -1
  72. package/dist/ecs/database/reconciling/create-rebase-replay-applier.d.ts +26 -0
  73. package/dist/ecs/database/reconciling/create-rebase-replay-applier.js +121 -0
  74. package/dist/ecs/database/reconciling/create-rebase-replay-applier.js.map +1 -0
  75. package/dist/ecs/database/reconciling/create-reconciling-database.d.ts +11 -0
  76. package/dist/ecs/database/reconciling/create-reconciling-database.js +28 -137
  77. package/dist/ecs/database/reconciling/create-reconciling-database.js.map +1 -1
  78. package/dist/ecs/database/transactional-store/create-transactional-store.js.map +1 -1
  79. package/dist/ecs/database/transactional-store/transactional-store.d.ts +4 -3
  80. package/dist/ecs/entity-location-table/create-entity-location-table.js +2 -2
  81. package/dist/ecs/entity-location-table/create-entity-location-table.js.map +1 -1
  82. package/dist/ecs/entity-location-table/entity-location-table.d.ts +7 -1
  83. package/dist/ecs/plugins/scheduler/scheduler.d.ts +1 -0
  84. package/dist/ecs/store/core/core.d.ts +7 -1
  85. package/dist/ecs/store/core/create-core.js +3 -3
  86. package/dist/ecs/store/core/create-core.js.map +1 -1
  87. package/dist/ecs/store/index-types.d.ts +142 -0
  88. package/dist/ecs/store/index-types.js +3 -0
  89. package/dist/ecs/store/index-types.js.map +1 -0
  90. package/dist/ecs/store/public/create-store.js +206 -4
  91. package/dist/ecs/store/public/create-store.js.map +1 -1
  92. package/dist/ecs/store/public/create-store.test.js +25 -0
  93. package/dist/ecs/store/public/create-store.test.js.map +1 -1
  94. package/dist/ecs/store/store.d.ts +38 -14
  95. package/dist/ecs/store/store.js +5 -4
  96. package/dist/ecs/store/store.js.map +1 -1
  97. package/dist/ecs/store/transaction-functions.d.ts +4 -3
  98. package/dist/schema/fractional-index/between-n.d.ts +2 -0
  99. package/dist/schema/fractional-index/between-n.js +34 -0
  100. package/dist/schema/fractional-index/between-n.js.map +1 -0
  101. package/dist/schema/fractional-index/between-n.test.d.ts +1 -0
  102. package/dist/schema/fractional-index/between-n.test.js +36 -0
  103. package/dist/schema/fractional-index/between-n.test.js.map +1 -0
  104. package/dist/schema/fractional-index/between.d.ts +2 -0
  105. package/dist/schema/fractional-index/between.js +3 -0
  106. package/dist/schema/fractional-index/between.js.map +1 -0
  107. package/dist/schema/fractional-index/between.test.d.ts +1 -0
  108. package/dist/schema/fractional-index/between.test.js +68 -0
  109. package/dist/schema/fractional-index/between.test.js.map +1 -0
  110. package/dist/schema/fractional-index/decrement-integer.d.ts +1 -0
  111. package/dist/schema/fractional-index/decrement-integer.js +32 -0
  112. package/dist/schema/fractional-index/decrement-integer.js.map +1 -0
  113. package/dist/schema/fractional-index/decrement-integer.test.d.ts +1 -0
  114. package/dist/schema/fractional-index/decrement-integer.test.js +31 -0
  115. package/dist/schema/fractional-index/decrement-integer.test.js.map +1 -0
  116. package/dist/schema/fractional-index/digits.d.ts +1 -0
  117. package/dist/schema/fractional-index/digits.js +3 -0
  118. package/dist/schema/fractional-index/digits.js.map +1 -0
  119. package/dist/schema/fractional-index/fractional-index.d.ts +4 -0
  120. package/dist/schema/fractional-index/fractional-index.js +2 -0
  121. package/dist/schema/fractional-index/fractional-index.js.map +1 -0
  122. package/dist/schema/fractional-index/increment-integer.d.ts +1 -0
  123. package/dist/schema/fractional-index/increment-integer.js +32 -0
  124. package/dist/schema/fractional-index/increment-integer.js.map +1 -0
  125. package/dist/schema/fractional-index/increment-integer.test.d.ts +1 -0
  126. package/dist/schema/fractional-index/increment-integer.test.js +34 -0
  127. package/dist/schema/fractional-index/increment-integer.test.js.map +1 -0
  128. package/dist/schema/fractional-index/initial.d.ts +2 -0
  129. package/dist/schema/fractional-index/initial.js +2 -0
  130. package/dist/schema/fractional-index/initial.js.map +1 -0
  131. package/dist/schema/fractional-index/integer-length.d.ts +1 -0
  132. package/dist/schema/fractional-index/integer-length.js +9 -0
  133. package/dist/schema/fractional-index/integer-length.js.map +1 -0
  134. package/dist/schema/fractional-index/integer-part.d.ts +1 -0
  135. package/dist/schema/fractional-index/integer-part.js +9 -0
  136. package/dist/schema/fractional-index/integer-part.js.map +1 -0
  137. package/dist/schema/fractional-index/key-between.d.ts +2 -0
  138. package/dist/schema/fractional-index/key-between.js +39 -0
  139. package/dist/schema/fractional-index/key-between.js.map +1 -0
  140. package/dist/schema/fractional-index/midpoint.d.ts +1 -0
  141. package/dist/schema/fractional-index/midpoint.js +23 -0
  142. package/dist/schema/fractional-index/midpoint.js.map +1 -0
  143. package/dist/schema/fractional-index/midpoint.test.d.ts +1 -0
  144. package/dist/schema/fractional-index/midpoint.test.js +83 -0
  145. package/dist/schema/fractional-index/midpoint.test.js.map +1 -0
  146. package/dist/schema/fractional-index/public.d.ts +4 -0
  147. package/dist/schema/fractional-index/public.js +6 -0
  148. package/dist/schema/fractional-index/public.js.map +1 -0
  149. package/dist/schema/fractional-index/schema.d.ts +4 -0
  150. package/dist/schema/fractional-index/schema.js +5 -0
  151. package/dist/schema/fractional-index/schema.js.map +1 -0
  152. package/dist/schema/fractional-index/smallest-integer.d.ts +1 -0
  153. package/dist/schema/fractional-index/smallest-integer.js +3 -0
  154. package/dist/schema/fractional-index/smallest-integer.js.map +1 -0
  155. package/dist/schema/fractional-index/validate-integer.d.ts +1 -0
  156. package/dist/schema/fractional-index/validate-integer.js +7 -0
  157. package/dist/schema/fractional-index/validate-integer.js.map +1 -0
  158. package/dist/schema/fractional-index/validate-order-key.d.ts +1 -0
  159. package/dist/schema/fractional-index/validate-order-key.js +11 -0
  160. package/dist/schema/fractional-index/validate-order-key.js.map +1 -0
  161. package/dist/schema/guid/create.d.ts +2 -0
  162. package/dist/schema/guid/create.js +10 -0
  163. package/dist/schema/guid/create.js.map +1 -0
  164. package/dist/schema/guid/create.test.d.ts +1 -0
  165. package/dist/schema/guid/create.test.js +39 -0
  166. package/dist/schema/guid/create.test.js.map +1 -0
  167. package/dist/schema/guid/equals.d.ts +2 -0
  168. package/dist/schema/guid/equals.js +3 -0
  169. package/dist/schema/guid/equals.js.map +1 -0
  170. package/dist/schema/guid/equals.test.d.ts +1 -0
  171. package/dist/schema/guid/equals.test.js +30 -0
  172. package/dist/schema/guid/equals.test.js.map +1 -0
  173. package/dist/schema/guid/from-uuid.d.ts +2 -0
  174. package/dist/schema/guid/from-uuid.js +15 -0
  175. package/dist/schema/guid/from-uuid.js.map +1 -0
  176. package/dist/schema/guid/from-uuid.test.d.ts +1 -0
  177. package/dist/schema/guid/from-uuid.test.js +39 -0
  178. package/dist/schema/guid/from-uuid.test.js.map +1 -0
  179. package/dist/schema/guid/guid.performance.test.d.ts +1 -0
  180. package/dist/schema/guid/guid.performance.test.js +297 -0
  181. package/dist/schema/guid/guid.performance.test.js.map +1 -0
  182. package/dist/schema/guid/index.d.ts +4 -0
  183. package/dist/schema/guid/index.js +3 -0
  184. package/dist/schema/guid/index.js.map +1 -0
  185. package/dist/schema/guid/layout.d.ts +1 -0
  186. package/dist/schema/guid/layout.js +5 -0
  187. package/dist/schema/guid/layout.js.map +1 -0
  188. package/dist/schema/guid/nil.d.ts +2 -0
  189. package/dist/schema/guid/nil.js +3 -0
  190. package/dist/schema/guid/nil.js.map +1 -0
  191. package/dist/schema/guid/public.d.ts +8 -0
  192. package/dist/schema/guid/public.js +10 -0
  193. package/dist/schema/guid/public.js.map +1 -0
  194. package/dist/schema/guid/schema.d.ts +12 -0
  195. package/dist/schema/guid/schema.js +10 -0
  196. package/dist/schema/guid/schema.js.map +1 -0
  197. package/dist/schema/guid/schema.test.d.ts +1 -0
  198. package/dist/schema/guid/schema.test.js +35 -0
  199. package/dist/schema/guid/schema.test.js.map +1 -0
  200. package/dist/schema/guid/to-unserializable-key.d.ts +2 -0
  201. package/dist/schema/guid/to-unserializable-key.js +10 -0
  202. package/dist/schema/guid/to-unserializable-key.js.map +1 -0
  203. package/dist/schema/guid/to-uuid.d.ts +2 -0
  204. package/dist/schema/guid/to-uuid.js +15 -0
  205. package/dist/schema/guid/to-uuid.js.map +1 -0
  206. package/dist/schema/guid/to-uuid.test.d.ts +1 -0
  207. package/dist/schema/guid/to-uuid.test.js +31 -0
  208. package/dist/schema/guid/to-uuid.test.js.map +1 -0
  209. package/dist/schema/index.d.ts +2 -0
  210. package/dist/schema/index.js +2 -0
  211. package/dist/schema/index.js.map +1 -1
  212. package/dist/table/select-rows.d.ts +7 -4
  213. package/dist/table/select-rows.js.map +1 -1
  214. package/dist/test-setup.js +2 -2
  215. package/dist/test-setup.js.map +1 -1
  216. package/dist/tsconfig.tsbuildinfo +1 -1
  217. package/package.json +3 -1
  218. package/references/data-lit/package.json +1 -1
  219. package/references/data-lit-tictactoe/package.json +1 -1
  220. package/references/data-react/package.json +1 -1
  221. package/references/data-react-hello/package.json +1 -1
  222. package/references/data-react-pixie/package.json +1 -1
@@ -0,0 +1,66 @@
1
+ // © 2026 Adobe. MIT License. See /LICENSE for details.
2
+ /**
3
+ * Reactive counterpart to an index handle's `find`. Mirrors
4
+ * {@link observeSelectEntities}: the initial value is emitted synchronously on
5
+ * subscribe, and subsequent values are emitted on a microtask after any
6
+ * transaction whose changed components intersect the index's read columns —
7
+ * the same commit boundary every other observer in the database fires on.
8
+ *
9
+ * Why route through transactions rather than notifying inside the index's own
10
+ * `add` / `remove` / `update`: those run *during* a transaction body, once per
11
+ * mutated entity, before the transaction commits. Emitting there would fire
12
+ * observers mid-transaction against half-applied state and at a different
13
+ * cadence than `db.observe.select`. Recomputing `find(arg)` at the commit
14
+ * boundary instead coalesces a whole transaction into one emission and keeps
15
+ * index reactivity consistent with the rest of the system.
16
+ *
17
+ * Bucket precision ("don't emit when an unrelated bucket changed") falls out
18
+ * of comparing the freshly-recomputed entity sequence against the last emitted
19
+ * one: an unrelated change recomputes to an identical sequence and is
20
+ * suppressed, while a reorder *within* the observed bucket — the regression
21
+ * case the index `find` already handles but a `where`-only `observe.select`
22
+ * silently swallows — produces a different sequence and is emitted.
23
+ */
24
+ export const observeIndexEntities = (observeTransactions) => (find, readColumns) => {
25
+ const readSet = new Set(readColumns);
26
+ return (arg) => (observer) => {
27
+ let last = find(arg);
28
+ let isMicrotaskQueued = false;
29
+ const notifyObserver = () => {
30
+ isMicrotaskQueued = false;
31
+ const next = find(arg);
32
+ if (sameSequence(last, next)) {
33
+ // The relevant transaction touched a different bucket — our
34
+ // result is unchanged, so suppress the emission.
35
+ return;
36
+ }
37
+ last = next;
38
+ observer(next);
39
+ };
40
+ const unobserveTransactions = observeTransactions((t) => {
41
+ if (t.changedComponents.isDisjointFrom(readSet)) {
42
+ // No component this index reads (key or sort) changed, so the
43
+ // bucket contents and their order cannot have changed.
44
+ return;
45
+ }
46
+ if (!isMicrotaskQueued) {
47
+ isMicrotaskQueued = true;
48
+ queueMicrotask(notifyObserver);
49
+ }
50
+ });
51
+ observer(last);
52
+ return () => {
53
+ unobserveTransactions();
54
+ };
55
+ };
56
+ };
57
+ const sameSequence = (a, b) => {
58
+ if (a.length !== b.length)
59
+ return false;
60
+ for (let i = 0; i < a.length; i++) {
61
+ if (a[i] !== b[i])
62
+ return false;
63
+ }
64
+ return true;
65
+ };
66
+ //# sourceMappingURL=observe-index-entities.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"observe-index-entities.js","sourceRoot":"","sources":["../../../src/ecs/database/observe-index-entities.ts"],"names":[],"mappings":"AAAA,uDAAuD;AAMvD;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAChC,mBAAoD,EACtD,EAAE,CAAC,CACD,IAAyC,EACzC,WAA8B,EAChC,EAAE;IACA,MAAM,OAAO,GAAG,IAAI,GAAG,CAAS,WAAW,CAAC,CAAC;IAC7C,OAAO,CAAC,GAAY,EAA8B,EAAE,CAAC,CAAC,QAAQ,EAAE,EAAE;QAC9D,IAAI,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC;QACrB,IAAI,iBAAiB,GAAG,KAAK,CAAC;QAE9B,MAAM,cAAc,GAAG,GAAG,EAAE;YACxB,iBAAiB,GAAG,KAAK,CAAC;YAC1B,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC;YACvB,IAAI,YAAY,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC;gBAC3B,4DAA4D;gBAC5D,iDAAiD;gBACjD,OAAO;YACX,CAAC;YACD,IAAI,GAAG,IAAI,CAAC;YACZ,QAAQ,CAAC,IAAI,CAAC,CAAC;QACnB,CAAC,CAAC;QAEF,MAAM,qBAAqB,GAAG,mBAAmB,CAAC,CAAC,CAAC,EAAE,EAAE;YACpD,IAAI,CAAC,CAAC,iBAAiB,CAAC,cAAc,CAAC,OAAO,CAAC,EAAE,CAAC;gBAC9C,8DAA8D;gBAC9D,uDAAuD;gBACvD,OAAO;YACX,CAAC;YACD,IAAI,CAAC,iBAAiB,EAAE,CAAC;gBACrB,iBAAiB,GAAG,IAAI,CAAC;gBACzB,cAAc,CAAC,cAAc,CAAC,CAAC;YACnC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,QAAQ,CAAC,IAAI,CAAC,CAAC;QAEf,OAAO,GAAG,EAAE;YACR,qBAAqB,EAAE,CAAC;QAC5B,CAAC,CAAC;IACN,CAAC,CAAC;AACN,CAAC,CAAC;AAEF,MAAM,YAAY,GAAG,CAAC,CAAoB,EAAE,CAAoB,EAAW,EAAE;IACzE,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,MAAM;QAAE,OAAO,KAAK,CAAC;IACxC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QAChC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YAAE,OAAO,KAAK,CAAC;IACpC,CAAC;IACD,OAAO,IAAI,CAAC;AAChB,CAAC,CAAC"}
@@ -146,7 +146,7 @@ export function createObservedDatabase(store) {
146
146
  store.reset();
147
147
  notifyAllObserversStoreReloaded();
148
148
  },
149
- toData: () => store.toData(),
149
+ toData: (copy = false) => store.toData(copy),
150
150
  fromData: (data) => {
151
151
  store.fromData(data);
152
152
  notifyAllObserversStoreReloaded();
@@ -1 +1 @@
1
- {"version":3,"file":"create-observed-database.js","sourceRoot":"","sources":["../../../../src/ecs/database/observed/create-observed-database.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"create-observed-database.js","sourceRoot":"","sources":["../../../../src/ecs/database/observed/create-observed-database.ts"],"names":[],"mappings":"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"}
@@ -33,7 +33,7 @@ export interface ObservedDatabase<C extends Components, R extends ResourceCompon
33
33
  userId?: number | string;
34
34
  }) => TransactionResult<C>;
35
35
  readonly reset: () => void;
36
- readonly toData: () => unknown;
36
+ readonly toData: (copy?: boolean) => unknown;
37
37
  readonly fromData: (data: unknown) => void;
38
38
  readonly extend: <P extends Database.Plugin<any, any, any, any, any>>(plugin: P) => ObservedDatabase<C & (P extends Database.Plugin<infer XC, infer XR, infer XA, infer XTD, any> ? FromSchemas<XC> : never), R & (P extends Database.Plugin<infer XC, infer XR, infer XA, infer XTD, any> ? FromSchemas<XR> : never), A & (P extends Database.Plugin<infer XC, infer XR, infer XA, infer XTD, any> ? XA : never)>;
39
39
  }
@@ -1,29 +1,5 @@
1
1
  import { Database, FromServiceFactories } from "../database.js";
2
- /**
3
- * Sync-related options. Presence of `sync` means "this database is going to
4
- * be attached to a sync service", which has two consequences:
5
- *
6
- * 1. Every locally-generated `TransactionEnvelope` is stamped with
7
- * `userId`, and the reconciler keys its transient queue by the
8
- * compound `(userId, id)` so two peers' independent local id counters
9
- * cannot collide.
10
- * 2. The transaction wrapper enters deferred-commit mode: calls to
11
- * `db.transactions.X(args)` apply locally as transients (negative
12
- * time) and wait for the server's echoed `committed` envelope to
13
- * promote them via the reconciler's rebase-replay. This is required
14
- * for cross-peer entity-id determinism under concurrent edits.
15
- *
16
- * If `sync` is omitted the database operates in local-only mode: commits
17
- * apply immediately with positive time, no envelope stamping, no deferred
18
- * promotion.
19
- */
20
- export interface DatabaseSyncOptions {
21
- /**
22
- * Stable peer/session identifier. Must be unique across all peers
23
- * sharing the same sync server.
24
- */
25
- readonly userId: number | string;
26
- }
2
+ import type { ConcurrencyStrategyFactory } from "../concurrency/concurrency-strategy.js";
27
3
  interface CreateDatabaseOptions<P extends Database.Plugin<any, any, any, any, any, any, any, any>> {
28
4
  /**
29
5
  * Optional services overrides to use.
@@ -32,8 +8,17 @@ interface CreateDatabaseOptions<P extends Database.Plugin<any, any, any, any, an
32
8
  services?: {
33
9
  [K in keyof FromServiceFactories<P['services']>]?: FromServiceFactories<P['services']>[K];
34
10
  };
35
- /** See {@link DatabaseSyncOptions}. */
36
- sync?: DatabaseSyncOptions;
11
+ /**
12
+ * Concurrency strategy that controls how locally-initiated transactions
13
+ * are applied and how inbound envelopes are reconciled.
14
+ *
15
+ * Built-in strategies:
16
+ * - `createImmediateConcurrency()` — commits apply immediately, no
17
+ * rollback queue. Default when omitted.
18
+ * - `createRebaseReplayConcurrency(userId)` — deferred-commit mode with
19
+ * full rollback-and-replay for multi-peer synchronisation.
20
+ */
21
+ concurrency?: ConcurrencyStrategyFactory;
37
22
  }
38
23
  export declare function createDatabase(): Database<{}, {}, {}, {}, never, {}, {}, {}>;
39
24
  export declare function createDatabase<P extends Database.Plugin<{}, {}, {}, {}, never, {}, any, any>>(plugin: P, options?: CreateDatabaseOptions<P>): Database.FromPlugin<P>;
@@ -1,8 +1,11 @@
1
1
  // © 2026 Adobe. MIT License. See /LICENSE for details.
2
2
  import { Store } from "../../store/index.js";
3
- import { createReconcilingDatabase } from "../reconciling/create-reconciling-database.js";
4
3
  import { calculateSystemOrder } from "../calculate-system-order.js";
5
4
  import { createTransactionDispatcher } from "./create-transaction-dispatcher.js";
5
+ import { observeSelectEntities } from "../observe-select-entities.js";
6
+ import { observeIndexEntities } from "../observe-index-entities.js";
7
+ import { createObservedDatabase } from "../observed/create-observed-database.js";
8
+ import { createImmediateConcurrency } from "../concurrency/immediate-concurrency.js";
6
9
  /**
7
10
  * For each system in newDeclarations that is not yet in systemFunctions: call create(db),
8
11
  * store the returned value in systemFunctions, and assign by name. Uses natural declaration order.
@@ -17,7 +20,7 @@ function createAndAssignSystems(db, systemFunctions, newDeclarations) {
17
20
  }
18
21
  }
19
22
  export function createDatabase(plugin, options) {
20
- const db = createEmptyDatabase(options?.sync);
23
+ const db = createEmptyDatabase(options?.concurrency);
21
24
  if (plugin === undefined) {
22
25
  return db;
23
26
  }
@@ -30,20 +33,29 @@ export function createDatabase(plugin, options) {
30
33
  * Creates a database with empty store, no transactions, actions, services, computed, or systems.
31
34
  * All content is added via .extend(plugin). Single code path for extension.
32
35
  */
33
- function createEmptyDatabase(sync) {
36
+ function createEmptyDatabase(concurrency) {
34
37
  const store = Store.create({
35
38
  components: {},
36
39
  resources: {},
37
40
  archetypes: {},
38
41
  });
39
- const reconcilingDatabase = createReconcilingDatabase(store, {});
42
+ const observedDatabase = createObservedDatabase(store);
43
+ // The transaction declarations dict is shared with the strategy via the
44
+ // getTransaction closure: extend() updates it, the strategy reads from it.
45
+ const transactionDeclarationsRef = {};
46
+ const getTransaction = (name) => transactionDeclarationsRef[name];
47
+ const strategyFactory = concurrency ?? createImmediateConcurrency();
48
+ const strategy = strategyFactory(observedDatabase.execute, getTransaction);
40
49
  // The dispatcher owns everything envelope-related: id allocation,
41
50
  // commit/transient/cancel intent decisions, the deferred-commit
42
- // behaviour implied by sync mode, and resolving plain/promise/async-
51
+ // behaviour implied by the strategy, and resolving plain/promise/async-
43
52
  // generator argument shapes. We just plug its outputs into the
44
53
  // database surface.
45
- const dispatcher = createTransactionDispatcher(reconcilingDatabase.apply, sync);
46
- reconcilingDatabase.observe.envelopes = dispatcher.envelopes;
54
+ const dispatcher = createTransactionDispatcher(strategy.apply, {
55
+ deferredCommit: strategy.deferredCommit,
56
+ userId: strategy.userId,
57
+ });
58
+ observedDatabase.observe.envelopes = dispatcher.envelopes;
47
59
  const transactions = { serviceName: "ecs-database-transactions-service" };
48
60
  const addTransactionWrappers = (transactionDecls) => {
49
61
  for (const name of Object.keys(transactionDecls)) {
@@ -63,22 +75,108 @@ function createEmptyDatabase(sync) {
63
75
  const services = {};
64
76
  const computed = {};
65
77
  const extendedPlugins = new Set();
78
+ // The Store layer owns the IndexRegistry: it instantiates the registry,
79
+ // maintains it eagerly on every insert/update/delete, and exposes the
80
+ // typed handle map as `store.indexes`. The Database layer just surfaces
81
+ // the same reference (via spread / explicit field below) so users see
82
+ // `db.indexes.<name>` and `t.indexes.<name>` pointing at one source of
83
+ // truth.
84
+ const toData = () => {
85
+ // Fast path: a strategy with no replay hook leaves the store untouched
86
+ // after serialization, so a live-reference snapshot is safe.
87
+ if (!strategy.onAfterToData) {
88
+ return observedDatabase.toData();
89
+ }
90
+ // A replay strategy mutates the live buffers in `onAfterToData`, which
91
+ // would corrupt a live-reference snapshot. Capture a detached copy of
92
+ // the committed (rolled-back) state before replaying.
93
+ strategy.onBeforeToData?.();
94
+ const data = observedDatabase.toData(true);
95
+ strategy.onAfterToData();
96
+ return data;
97
+ };
98
+ const fromData = (data) => {
99
+ observedDatabase.fromData(data);
100
+ strategy.onAfterFromData?.();
101
+ };
66
102
  const partialDatabase = {
67
103
  serviceName: "ecs-database-service",
68
- ...reconcilingDatabase,
69
- sync,
104
+ ...observedDatabase,
105
+ concurrency: strategy,
106
+ apply: strategy.apply,
107
+ cancel: strategy.cancel,
108
+ reset: () => {
109
+ strategy.onReset();
110
+ observedDatabase.reset();
111
+ },
112
+ toData,
113
+ fromData,
70
114
  transactions,
71
115
  actions,
72
116
  services,
73
117
  computed,
118
+ indexes: store.indexes,
74
119
  store,
75
120
  system: { functions: systemFunctions, order: systemOrder },
76
121
  extend: undefined,
77
122
  };
123
+ // Auto-route `db.select(include, { where })` and `db.observe.select(...)`
124
+ // through a declared index when the where clause is exactly an equality
125
+ // match on the index's full key tuple and there is no order clause. Other
126
+ // shapes fall back to the archetype scan in the underlying store.
127
+ //
128
+ // The router dispatches through the user-visible handles in `store.indexes`
129
+ // so any override applied to the public handle — tests, instrumentation —
130
+ // takes effect for the routed path too.
131
+ const baseSelect = partialDatabase.select.bind(partialDatabase);
132
+ const indexAwareSelect = (include, options) => {
133
+ const routed = trySelectViaIndex(store, include, options);
134
+ if (routed !== null)
135
+ return routed;
136
+ return baseSelect(include, options);
137
+ };
138
+ partialDatabase.select = indexAwareSelect;
139
+ // `observeSelectEntities` reads from its `store` parameter via only
140
+ // `store.select` and `store.locate`. A minimal façade backed by the
141
+ // index-aware select + the real `store.locate` satisfies that contract,
142
+ // and replacing `observe.select` here mutates the shared `observe` object
143
+ // (same reference as `observedDatabase.observe`) before any user code
144
+ // can subscribe — so the default instance created inside
145
+ // `createObservedDatabase` is cleanly dropped, with no stale closures.
146
+ const indexAwareStoreFacade = {
147
+ select: indexAwareSelect,
148
+ locate: store.locate.bind(store),
149
+ };
150
+ partialDatabase.observe.select = observeSelectEntities(indexAwareStoreFacade, partialDatabase.observe.transactions);
151
+ // Reactive index handles. Each index's `observe(arg)` is built from its
152
+ // handle's `find` + `readColumns` and fires on the same transaction-commit
153
+ // boundary as `observe.select` (see `observeIndexEntities`). Attached at
154
+ // the Database layer because the Store layer that creates the handles has
155
+ // no transaction observable. `db.indexes` and `t.indexes` share the same
156
+ // handle objects, so attaching here covers both.
157
+ const observeIndex = observeIndexEntities(partialDatabase.observe.transactions);
158
+ const attachIndexObservers = () => {
159
+ // Structural view of the handle map: the Store augments each handle
160
+ // with `find` + `readColumns` (the same internal contract the query
161
+ // planner relies on for `find` + `routableColumns`).
162
+ const handles = store.indexes;
163
+ for (const name in handles) {
164
+ const handle = handles[name];
165
+ if (handle.observe)
166
+ continue;
167
+ handle.observe = observeIndex(handle.find, handle.readColumns);
168
+ }
169
+ };
170
+ attachIndexObservers();
78
171
  const extend = (plugin) => {
79
172
  if (!extendedPlugins.has(plugin)) {
80
173
  extendedPlugins.add(plugin);
81
- reconcilingDatabase.extend(plugin);
174
+ observedDatabase.extend(plugin);
175
+ // Update the shared transaction declarations ref so the strategy's
176
+ // getTransaction closure sees the new names during replay.
177
+ if (plugin.transactions) {
178
+ Object.assign(transactionDeclarationsRef, plugin.transactions);
179
+ }
82
180
  const pluginTransactions = plugin.transactions ?? {};
83
181
  const pluginActions = plugin.actions ?? {};
84
182
  const pluginServices = plugin.services ?? {};
@@ -93,6 +191,13 @@ function createEmptyDatabase(sync) {
93
191
  if (!(name in computed))
94
192
  computed[name] = pluginComputed[name](partialDatabase);
95
193
  }
194
+ // `observedDatabase.extend(plugin)` above propagates down to
195
+ // `store.extend({ components, resources, archetypes, indexes })`,
196
+ // so the Store has already absorbed `plugin.indexes`. We refresh
197
+ // our local indexes reference in case the underlying map got a
198
+ // new identity (it doesn't today, but stay defensive).
199
+ partialDatabase.indexes = store.indexes;
200
+ attachIndexObservers();
96
201
  if (plugin.systems && Object.keys(plugin.systems).length > 0) {
97
202
  Object.assign(allSystemDeclarations, plugin.systems);
98
203
  systemOrder = calculateSystemOrder(allSystemDeclarations);
@@ -106,4 +211,141 @@ function createEmptyDatabase(sync) {
106
211
  partialDatabase.extend = extend;
107
212
  return partialDatabase;
108
213
  }
214
+ /**
215
+ * Returns the equality value implied by `where[key]` if and only if the
216
+ * condition is a pure equality — either a direct primitive value or a
217
+ * comparison object with exactly `{ "==": v }`. Returns the sentinel
218
+ * `NOT_EQUALITY` when the condition uses any other operator.
219
+ */
220
+ const NOT_EQUALITY = Symbol("not-equality");
221
+ const equalityValue = (cond) => {
222
+ if (cond === null || typeof cond !== "object")
223
+ return cond;
224
+ const keys = Object.keys(cond);
225
+ if (keys.length === 1 && keys[0] === "==")
226
+ return cond["=="];
227
+ return NOT_EQUALITY;
228
+ };
229
+ /**
230
+ * Attempts to serve `select(include, options)` from a declared index.
231
+ *
232
+ * Returns `null` when no index applies; the caller must fall back to the
233
+ * archetype scan. Returns an `Entity[]` when an index can answer the query.
234
+ *
235
+ * Match conditions (intentionally conservative):
236
+ * - `options.where` is non-empty.
237
+ * - Every `where` key is a pure equality (`v` or `{ "==": v }`).
238
+ * - The `where` keys, as a set, equal some index's key columns.
239
+ * - When `options.order` is present, that same index must be sorted with
240
+ * the default comparator on exactly the requested order columns (in
241
+ * sequence), and every requested direction must be ascending. A
242
+ * descending clause, a mismatched / partial column sequence, or a custom
243
+ * comparator falls back to the scan. (A sorted index's `find` already
244
+ * returns its bucket pre-sorted, so a matched ordered query is served
245
+ * without a second sort.)
246
+ *
247
+ * The query planner accesses `store.indexes` (the user-visible handle map),
248
+ * so test spies and any future user-installed instrumentation see the call.
249
+ * The column / sort metadata for each index lives on the registry-internal
250
+ * `RuntimeIndex`; `createStore` copies the routable subset onto each handle
251
+ * as `routableColumns` / `routableOrder`, which is the structural shape the
252
+ * planner reads below.
253
+ *
254
+ * After the index lookup returns candidate entities, each candidate is
255
+ * checked for archetype membership of every `include` component so the
256
+ * returned set respects the same archetype filter as the scan path. Index
257
+ * order is preserved through that filter, so a matched ordered query stays
258
+ * sorted.
259
+ */
260
+ function trySelectViaIndex(store, include, options) {
261
+ const where = options?.where;
262
+ if (!where)
263
+ return null;
264
+ const whereKeys = Object.keys(where);
265
+ if (whereKeys.length === 0)
266
+ return null;
267
+ // Collapse where to an { component -> equality-value } record, bailing if
268
+ // any condition is not a pure equality.
269
+ const values = {};
270
+ for (const k of whereKeys) {
271
+ const eq = equalityValue(where[k]);
272
+ if (eq === NOT_EQUALITY)
273
+ return null;
274
+ values[k] = eq;
275
+ }
276
+ // Resolve the order constraint, if any. An empty order object is treated
277
+ // as no order. Any descending (falsy) direction opts the whole query out
278
+ // of routing — a sorted index only materializes its single ascending
279
+ // order, so it cannot serve a descending request without re-sorting.
280
+ let orderCols = null;
281
+ if (options?.order) {
282
+ const cols = Object.keys(options.order);
283
+ if (cols.length > 0) {
284
+ for (const c of cols) {
285
+ if (!options.order[c])
286
+ return null;
287
+ }
288
+ orderCols = cols;
289
+ }
290
+ }
291
+ // Iterate the public handle map (store.indexes). Each handle carries the
292
+ // non-public `routableColumns` / `routableOrder` fields placed by
293
+ // `createStore`. `routableColumns: null` opts an index out of raw-where
294
+ // auto-routing (function and slot-map keys live in a value space the
295
+ // planner cannot infer from a where clause); `routableOrder: null` opts it
296
+ // out of serving an `order` clause (unsorted, or custom comparator).
297
+ //
298
+ // For a matched index the planner builds the appropriate `find`
299
+ // argument: a scalar for a single-column key, the full values object
300
+ // for a multi-column key. The call goes through `handle.find` so any
301
+ // user-installed spy or instrumentation on the handle sees the
302
+ // dispatch.
303
+ const handles = store.indexes;
304
+ let matchedHandle;
305
+ let matchedCols;
306
+ for (const name of Object.keys(handles)) {
307
+ const handle = handles[name];
308
+ const cols = handle.routableColumns;
309
+ if (cols === null)
310
+ continue;
311
+ if (cols.length !== whereKeys.length)
312
+ continue;
313
+ if (!cols.every(c => c in values))
314
+ continue;
315
+ // Key matches. If an order was requested, the same index must be
316
+ // sorted on exactly those columns in the same sequence.
317
+ if (orderCols !== null) {
318
+ const sortCols = handle.routableOrder;
319
+ if (sortCols === null)
320
+ continue;
321
+ if (sortCols.length !== orderCols.length)
322
+ continue;
323
+ if (!sortCols.every((c, i) => c === orderCols[i]))
324
+ continue;
325
+ }
326
+ matchedHandle = handle;
327
+ matchedCols = cols;
328
+ break;
329
+ }
330
+ if (!matchedHandle || !matchedCols)
331
+ return null;
332
+ const findArg = matchedCols.length === 1 ? values[matchedCols[0]] : values;
333
+ const candidates = matchedHandle.find(findArg);
334
+ if (candidates.length === 0)
335
+ return [];
336
+ const includeArr = Array.from(include);
337
+ if (includeArr.length === 0)
338
+ return candidates.slice();
339
+ const result = [];
340
+ for (const entity of candidates) {
341
+ const location = store.locate(entity);
342
+ if (!location)
343
+ continue;
344
+ const cols = location.archetype.columns;
345
+ if (includeArr.every(c => cols[c] !== undefined)) {
346
+ result.push(entity);
347
+ }
348
+ }
349
+ return result;
350
+ }
109
351
  //# sourceMappingURL=create-database.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"create-database.js","sourceRoot":"","sources":["../../../../src/ecs/database/public/create-database.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"create-database.js","sourceRoot":"","sources":["../../../../src/ecs/database/public/create-database.ts"],"names":[],"mappings":"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"}
@@ -2,6 +2,7 @@
2
2
  import { describe, it, expect, vi } from "vitest";
3
3
  import { Database } from "../database.js";
4
4
  import { createReconcilingDatabase } from "../reconciling/create-reconciling-database.js";
5
+ import { createRebaseReplayConcurrency } from "../concurrency/index.js";
5
6
  import { Store } from "../../store/index.js";
6
7
  import { F32 } from "../../../math/f32/index.js";
7
8
  import { Observe } from "../../../observe/index.js";
@@ -1050,13 +1051,13 @@ describe("createDatabase", () => {
1050
1051
  },
1051
1052
  });
1052
1053
  // Wrong value type: token should be string, not number
1053
- // @ts-expect-error
1054
+ // @ts-expect-error token must be a string
1054
1055
  Database.create(plugin, { services: { auth: { token: 123, isAuthenticated: false } } });
1055
1056
  // Unknown service key
1056
- // @ts-expect-error
1057
+ // @ts-expect-error nonexistent is not a declared service
1057
1058
  Database.create(plugin, { services: { nonexistent: { foo: 'bar' } } });
1058
1059
  // Missing required property (isAuthenticated)
1059
- // @ts-expect-error
1060
+ // @ts-expect-error auth override is missing isAuthenticated
1060
1061
  Database.create(plugin, { services: { auth: { token: 'x' } } });
1061
1062
  });
1062
1063
  });
@@ -1371,13 +1372,13 @@ describe("userId in transaction context", () => {
1371
1372
  expect(db.resources.seen).toBeUndefined();
1372
1373
  });
1373
1374
  it("t.userId matches sync.userId for locally-initiated transactions", () => {
1374
- const db = Database.create(makePlugin(), { sync: { userId: "alice" } });
1375
+ const db = Database.create(makePlugin(), { concurrency: createRebaseReplayConcurrency("alice") });
1375
1376
  db.transactions.capture();
1376
1377
  expect(db.resources.seen).toBe("alice");
1377
1378
  });
1378
1379
  it("t.userId matches the envelope userId for inbound db.apply(envelope) calls", () => {
1379
1380
  const plugin = makePlugin();
1380
- const db = Database.create(plugin, { sync: { userId: "alice" } });
1381
+ const db = Database.create(plugin, { concurrency: createRebaseReplayConcurrency("alice") });
1381
1382
  // Build a committed envelope that looks like it came from "bob"
1382
1383
  const envelope = { id: 1, userId: "bob", name: "capture", args: undefined, time: 1 };
1383
1384
  db.apply(envelope);
@@ -1403,7 +1404,7 @@ describe("no-op envelope suppression", () => {
1403
1404
  },
1404
1405
  });
1405
1406
  it("a no-op commit (wrong userId) does not fire observe.envelopes", () => {
1406
- const db = Database.create(makeGatedPlugin(), { sync: { userId: "O" } });
1407
+ const db = Database.create(makeGatedPlugin(), { concurrency: createRebaseReplayConcurrency("O") });
1407
1408
  const listener = vi.fn();
1408
1409
  db.observe.envelopes(listener);
1409
1410
  db.transactions.setIfX({ v: 99 });
@@ -1411,7 +1412,7 @@ describe("no-op envelope suppression", () => {
1411
1412
  expect(db.resources.value).toBe(0);
1412
1413
  });
1413
1414
  it("an effective commit (correct userId) does fire observe.envelopes", () => {
1414
- const db = Database.create(makeGatedPlugin(), { sync: { userId: "X" } });
1415
+ const db = Database.create(makeGatedPlugin(), { concurrency: createRebaseReplayConcurrency("X") });
1415
1416
  const listener = vi.fn();
1416
1417
  db.observe.envelopes(listener);
1417
1418
  db.transactions.setIfX({ v: 99 });