@adobe/data 0.9.61 → 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 (76) 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/concurrency/concurrency-strategy.d.ts +86 -0
  6. package/dist/ecs/database/concurrency/concurrency-strategy.js +3 -0
  7. package/dist/ecs/database/concurrency/concurrency-strategy.js.map +1 -0
  8. package/dist/ecs/database/concurrency/immediate-concurrency.d.ts +22 -0
  9. package/dist/ecs/database/concurrency/immediate-concurrency.js +74 -0
  10. package/dist/ecs/database/concurrency/immediate-concurrency.js.map +1 -0
  11. package/dist/ecs/database/concurrency/index.d.ts +4 -0
  12. package/dist/ecs/database/concurrency/index.js +5 -0
  13. package/dist/ecs/database/concurrency/index.js.map +1 -0
  14. package/dist/ecs/database/concurrency/rebase-replay-concurrency.d.ts +20 -0
  15. package/dist/ecs/database/concurrency/rebase-replay-concurrency.js +34 -0
  16. package/dist/ecs/database/concurrency/rebase-replay-concurrency.js.map +1 -0
  17. package/dist/ecs/database/concurrency/roll-forward-concurrency.d.ts +33 -0
  18. package/dist/ecs/database/concurrency/roll-forward-concurrency.js +115 -0
  19. package/dist/ecs/database/concurrency/roll-forward-concurrency.js.map +1 -0
  20. package/dist/ecs/database/concurrency/roll-forward-concurrency.test.d.ts +1 -0
  21. package/dist/ecs/database/concurrency/roll-forward-concurrency.test.js +136 -0
  22. package/dist/ecs/database/concurrency/roll-forward-concurrency.test.js.map +1 -0
  23. package/dist/ecs/database/database.d.ts +29 -7
  24. package/dist/ecs/database/database.index.test.js +380 -0
  25. package/dist/ecs/database/database.index.test.js.map +1 -1
  26. package/dist/ecs/database/database.index.type-test.js.map +1 -1
  27. package/dist/ecs/database/database.js.map +1 -1
  28. package/dist/ecs/database/database.reset.test.js +2 -1
  29. package/dist/ecs/database/database.reset.test.js.map +1 -1
  30. package/dist/ecs/database/index.d.ts +1 -0
  31. package/dist/ecs/database/index.js +1 -0
  32. package/dist/ecs/database/index.js.map +1 -1
  33. package/dist/ecs/database/observe-index-entities.d.ts +26 -0
  34. package/dist/ecs/database/observe-index-entities.js +66 -0
  35. package/dist/ecs/database/observe-index-entities.js.map +1 -0
  36. package/dist/ecs/database/observed/create-observed-database.js +1 -1
  37. package/dist/ecs/database/observed/create-observed-database.js.map +1 -1
  38. package/dist/ecs/database/observed/observed-database.d.ts +1 -1
  39. package/dist/ecs/database/public/create-database.d.ts +12 -27
  40. package/dist/ecs/database/public/create-database.js +126 -30
  41. package/dist/ecs/database/public/create-database.js.map +1 -1
  42. package/dist/ecs/database/public/create-database.test.js +8 -7
  43. package/dist/ecs/database/public/create-database.test.js.map +1 -1
  44. package/dist/ecs/database/public/create-transaction-dispatcher.d.ts +4 -2
  45. package/dist/ecs/database/public/create-transaction-dispatcher.js +2 -8
  46. package/dist/ecs/database/public/create-transaction-dispatcher.js.map +1 -1
  47. package/dist/ecs/database/reconciling/create-rebase-replay-applier.d.ts +26 -0
  48. package/dist/ecs/database/reconciling/create-rebase-replay-applier.js +121 -0
  49. package/dist/ecs/database/reconciling/create-rebase-replay-applier.js.map +1 -0
  50. package/dist/ecs/database/reconciling/create-reconciling-database.d.ts +11 -0
  51. package/dist/ecs/database/reconciling/create-reconciling-database.js +28 -137
  52. package/dist/ecs/database/reconciling/create-reconciling-database.js.map +1 -1
  53. package/dist/ecs/database/transactional-store/create-transactional-store.js.map +1 -1
  54. package/dist/ecs/database/transactional-store/transactional-store.d.ts +1 -1
  55. package/dist/ecs/entity-location-table/create-entity-location-table.js +2 -2
  56. package/dist/ecs/entity-location-table/create-entity-location-table.js.map +1 -1
  57. package/dist/ecs/entity-location-table/entity-location-table.d.ts +7 -1
  58. package/dist/ecs/store/core/core.d.ts +7 -1
  59. package/dist/ecs/store/core/create-core.js +3 -3
  60. package/dist/ecs/store/core/create-core.js.map +1 -1
  61. package/dist/ecs/store/index-types.d.ts +10 -0
  62. package/dist/ecs/store/public/create-store.js +17 -1
  63. package/dist/ecs/store/public/create-store.js.map +1 -1
  64. package/dist/ecs/store/public/create-store.test.js +25 -0
  65. package/dist/ecs/store/public/create-store.test.js.map +1 -1
  66. package/dist/ecs/store/store.d.ts +8 -1
  67. package/dist/ecs/store/store.js.map +1 -1
  68. package/dist/test-setup.js +2 -2
  69. package/dist/test-setup.js.map +1 -1
  70. package/dist/tsconfig.tsbuildinfo +1 -1
  71. package/package.json +3 -1
  72. package/references/data-lit/package.json +1 -1
  73. package/references/data-lit-tictactoe/package.json +1 -1
  74. package/references/data-react/package.json +1 -1
  75. package/references/data-react-hello/package.json +1 -1
  76. package/references/data-react-pixie/package.json +1 -1
@@ -1,9 +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";
6
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";
7
9
  /**
8
10
  * For each system in newDeclarations that is not yet in systemFunctions: call create(db),
9
11
  * store the returned value in systemFunctions, and assign by name. Uses natural declaration order.
@@ -18,7 +20,7 @@ function createAndAssignSystems(db, systemFunctions, newDeclarations) {
18
20
  }
19
21
  }
20
22
  export function createDatabase(plugin, options) {
21
- const db = createEmptyDatabase(options?.sync);
23
+ const db = createEmptyDatabase(options?.concurrency);
22
24
  if (plugin === undefined) {
23
25
  return db;
24
26
  }
@@ -31,20 +33,29 @@ export function createDatabase(plugin, options) {
31
33
  * Creates a database with empty store, no transactions, actions, services, computed, or systems.
32
34
  * All content is added via .extend(plugin). Single code path for extension.
33
35
  */
34
- function createEmptyDatabase(sync) {
36
+ function createEmptyDatabase(concurrency) {
35
37
  const store = Store.create({
36
38
  components: {},
37
39
  resources: {},
38
40
  archetypes: {},
39
41
  });
40
- 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);
41
49
  // The dispatcher owns everything envelope-related: id allocation,
42
50
  // commit/transient/cancel intent decisions, the deferred-commit
43
- // behaviour implied by sync mode, and resolving plain/promise/async-
51
+ // behaviour implied by the strategy, and resolving plain/promise/async-
44
52
  // generator argument shapes. We just plug its outputs into the
45
53
  // database surface.
46
- const dispatcher = createTransactionDispatcher(reconcilingDatabase.apply, sync);
47
- 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;
48
59
  const transactions = { serviceName: "ecs-database-transactions-service" };
49
60
  const addTransactionWrappers = (transactionDecls) => {
50
61
  for (const name of Object.keys(transactionDecls)) {
@@ -70,10 +81,36 @@ function createEmptyDatabase(sync) {
70
81
  // the same reference (via spread / explicit field below) so users see
71
82
  // `db.indexes.<name>` and `t.indexes.<name>` pointing at one source of
72
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
+ };
73
102
  const partialDatabase = {
74
103
  serviceName: "ecs-database-service",
75
- ...reconcilingDatabase,
76
- 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,
77
114
  transactions,
78
115
  actions,
79
116
  services,
@@ -111,10 +148,35 @@ function createEmptyDatabase(sync) {
111
148
  locate: store.locate.bind(store),
112
149
  };
113
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();
114
171
  const extend = (plugin) => {
115
172
  if (!extendedPlugins.has(plugin)) {
116
173
  extendedPlugins.add(plugin);
117
- 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
+ }
118
180
  const pluginTransactions = plugin.transactions ?? {};
119
181
  const pluginActions = plugin.actions ?? {};
120
182
  const pluginServices = plugin.services ?? {};
@@ -129,12 +191,13 @@ function createEmptyDatabase(sync) {
129
191
  if (!(name in computed))
130
192
  computed[name] = pluginComputed[name](partialDatabase);
131
193
  }
132
- // `reconcilingDatabase.extend(plugin)` above propagates down to
194
+ // `observedDatabase.extend(plugin)` above propagates down to
133
195
  // `store.extend({ components, resources, archetypes, indexes })`,
134
196
  // so the Store has already absorbed `plugin.indexes`. We refresh
135
197
  // our local indexes reference in case the underlying map got a
136
198
  // new identity (it doesn't today, but stay defensive).
137
199
  partialDatabase.indexes = store.indexes;
200
+ attachIndexObservers();
138
201
  if (plugin.systems && Object.keys(plugin.systems).length > 0) {
139
202
  Object.assign(allSystemDeclarations, plugin.systems);
140
203
  systemOrder = calculateSystemOrder(allSystemDeclarations);
@@ -169,28 +232,34 @@ const equalityValue = (cond) => {
169
232
  * Returns `null` when no index applies; the caller must fall back to the
170
233
  * archetype scan. Returns an `Entity[]` when an index can answer the query.
171
234
  *
172
- * Match conditions (intentionally conservative for V2):
235
+ * Match conditions (intentionally conservative):
173
236
  * - `options.where` is non-empty.
174
- * - `options.order` is absent (sort orders are routed in a follow-up).
175
237
  * - Every `where` key is a pure equality (`v` or `{ "==": v }`).
176
- * - The `where` keys, as a set, equal some index's `components`.
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.)
177
246
  *
178
247
  * The query planner accesses `store.indexes` (the user-visible handle map),
179
248
  * so test spies and any future user-installed instrumentation see the call.
180
- * Components for each index are recovered from the registry-internal handle
181
- * (the handle exposes `find`/`findRange`/`get`; the column set is held by
182
- * the underlying `RuntimeIndex`, which is the registry's source of truth).
183
- * For the planner we treat the handle map structurally as
184
- * `{ [name]: { findByValues, routableColumns } }` because Store internally
185
- * augments each handle with these fields — see `createStore`.
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.
186
253
  *
187
254
  * After the index lookup returns candidate entities, each candidate is
188
255
  * checked for archetype membership of every `include` component so the
189
- * returned set respects the same archetype filter as the scan path.
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.
190
259
  */
191
260
  function trySelectViaIndex(store, include, options) {
192
261
  const where = options?.where;
193
- if (!where || options?.order)
262
+ if (!where)
194
263
  return null;
195
264
  const whereKeys = Object.keys(where);
196
265
  if (whereKeys.length === 0)
@@ -204,11 +273,27 @@ function trySelectViaIndex(store, include, options) {
204
273
  return null;
205
274
  values[k] = eq;
206
275
  }
207
- // Iterate the public handle map (store.indexes). Each handle carries a
208
- // non-public `routableColumns` field placed by `createStore` for exactly
209
- // this purpose. `routableColumns: null` opts an index out of raw-where
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
210
294
  // auto-routing (function and slot-map keys live in a value space the
211
- // planner cannot infer from a where clause).
295
+ // planner cannot infer from a where clause); `routableOrder: null` opts it
296
+ // out of serving an `order` clause (unsorted, or custom comparator).
212
297
  //
213
298
  // For a matched index the planner builds the appropriate `find`
214
299
  // argument: a scalar for a single-column key, the full values object
@@ -225,11 +310,22 @@ function trySelectViaIndex(store, include, options) {
225
310
  continue;
226
311
  if (cols.length !== whereKeys.length)
227
312
  continue;
228
- if (cols.every(c => c in values)) {
229
- matchedHandle = handle;
230
- matchedCols = cols;
231
- break;
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;
232
325
  }
326
+ matchedHandle = handle;
327
+ matchedCols = cols;
328
+ break;
233
329
  }
234
330
  if (!matchedHandle || !matchedCols)
235
331
  return null;
@@ -1 +1 @@
1
- {"version":3,"file":"create-database.js","sourceRoot":"","sources":["../../../../src/ecs/database/public/create-database.ts"],"names":[],"mappings":"AAAA,uDAAuD;AAEvD,OAAO,EAAiB,KAAK,EAAE,MAAM,sBAAsB,CAAC;AAE5D,OAAO,EAAE,yBAAyB,EAAE,MAAM,+CAA+C,CAAC;AAC1F,OAAO,EAAE,oBAAoB,EAAE,MAAM,8BAA8B,CAAC;AACpE,OAAO,EAAE,2BAA2B,EAAE,MAAM,oCAAoC,CAAC;AACjF,OAAO,EAAE,qBAAqB,EAAE,MAAM,+BAA+B,CAAC;AAGtE;;;;;GAKG;AACH,SAAS,sBAAsB,CAC3B,EAAO,EACP,eAAwC,EACxC,eAAiE;IAEjE,KAAK,MAAM,IAAI,IAAI,eAAe,EAAE,CAAC;QACjC,IAAI,IAAI,IAAI,eAAe;YAAE,SAAS;QACtC,eAAe,CAAC,IAAI,CAAC,GAAG,eAAe,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,IAAI,CAAC;IACrE,CAAC;AACL,CAAC;AA6CD,MAAM,UAAU,cAAc,CAC1B,MAAgE,EAChE,OAAoC;IAEpC,MAAM,EAAE,GAAG,mBAAmB,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;IAC9C,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;QACvB,OAAO,EAAE,CAAC;IACd,CAAC;IACD,IAAI,OAAO,EAAE,QAAQ,EAAE,CAAC;QACpB,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,QAAQ,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC;IACjD,CAAC;IACD,OAAO,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;AAC7B,CAAC;AAED;;;GAGG;AACH,SAAS,mBAAmB,CAAC,IAAqC;IAC9D,MAAM,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC;QACvB,UAAU,EAAE,EAAE;QACd,SAAS,EAAE,EAAE;QACb,UAAU,EAAE,EAAE;KACjB,CAAC,CAAC;IACH,MAAM,mBAAmB,GAAG,yBAAyB,CAAC,KAAK,EAAE,EAAS,CAAC,CAAC;IAExE,kEAAkE;IAClE,gEAAgE;IAChE,qEAAqE;IACrE,+DAA+D;IAC/D,oBAAoB;IACpB,MAAM,UAAU,GAAG,2BAA2B,CAAC,mBAAmB,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;IAC/E,mBAAmB,CAAC,OAAe,CAAC,SAAS,GAAG,UAAU,CAAC,SAAS,CAAC;IAEtE,MAAM,YAAY,GAAQ,EAAE,WAAW,EAAE,mCAAmC,EAAE,CAAC;IAC/E,MAAM,sBAAsB,GAAG,CAAC,gBAAqC,EAAE,EAAE;QACrE,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,IAAI,CAAC,gBAAgB,CAAC,EAAE,CAAC;YAC/C,YAAY,CAAC,IAAI,CAAC,GAAG,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC/C,CAAC;IACL,CAAC,CAAC;IAEF,MAAM,OAAO,GAAQ,EAAE,WAAW,EAAE,8BAA8B,EAAE,CAAC;IACrE,MAAM,iBAAiB,GAAG,CAAC,WAAgC,EAAE,EAAO,EAAE,EAAE;QACpE,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC;YAC1C,MAAM,UAAU,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC;YACrC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,IAAa,EAAE,EAAE,CAAC,UAAU,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;QAC5D,CAAC;IACL,CAAC,CAAC;IAEF,MAAM,qBAAqB,GAAqD,EAAE,CAAC;IACnF,IAAI,WAAW,GAAe,EAAE,CAAC;IACjC,MAAM,eAAe,GAAQ,EAAE,CAAC;IAChC,MAAM,QAAQ,GAA4B,EAAE,CAAC;IAC7C,MAAM,QAAQ,GAA4B,EAAE,CAAC;IAC7C,MAAM,eAAe,GAAG,IAAI,GAAG,EAA2D,CAAC;IAE3F,wEAAwE;IACxE,sEAAsE;IACtE,wEAAwE;IACxE,sEAAsE;IACtE,uEAAuE;IACvE,SAAS;IAET,MAAM,eAAe,GAAQ;QACzB,WAAW,EAAE,sBAAsB;QACnC,GAAG,mBAAmB;QACtB,IAAI;QACJ,YAAY;QACZ,OAAO;QACP,QAAQ;QACR,QAAQ;QACR,OAAO,EAAE,KAAK,CAAC,OAAO;QACtB,KAAK;QACL,MAAM,EAAE,EAAE,SAAS,EAAE,eAAe,EAAE,KAAK,EAAE,WAAW,EAAE;QAC1D,MAAM,EAAE,SAAS;KACpB,CAAC;IAEF,0EAA0E;IAC1E,wEAAwE;IACxE,0EAA0E;IAC1E,kEAAkE;IAClE,EAAE;IACF,4EAA4E;IAC5E,0EAA0E;IAC1E,wCAAwC;IACxC,MAAM,UAAU,GAAG,eAAe,CAAC,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;IAChE,MAAM,gBAAgB,GAAG,CAAC,OAAY,EAAE,OAAY,EAAqB,EAAE;QACvE,MAAM,MAAM,GAAG,iBAAiB,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;QAC1D,IAAI,MAAM,KAAK,IAAI;YAAE,OAAO,MAAM,CAAC;QACnC,OAAO,UAAU,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IACxC,CAAC,CAAC;IACF,eAAe,CAAC,MAAM,GAAG,gBAAgB,CAAC;IAE1C,oEAAoE;IACpE,oEAAoE;IACpE,wEAAwE;IACxE,0EAA0E;IAC1E,sEAAsE;IACtE,yDAAyD;IACzD,uEAAuE;IACvE,MAAM,qBAAqB,GAAG;QAC1B,MAAM,EAAE,gBAAgB;QACxB,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC;KACQ,CAAC;IAC7C,eAAe,CAAC,OAAO,CAAC,MAAM,GAAG,qBAAqB,CAClD,qBAAqB,EACrB,eAAe,CAAC,OAAO,CAAC,YAAY,CACvC,CAAC;IAEF,MAAM,MAAM,GAAG,CAAC,MAA+D,EAAE,EAAE;QAC/E,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;YAC/B,eAAe,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;YAC5B,mBAAmB,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;YACnC,MAAM,kBAAkB,GAAG,MAAM,CAAC,YAAY,IAAI,EAAE,CAAC;YACrD,MAAM,aAAa,GAAG,MAAM,CAAC,OAAO,IAAI,EAAE,CAAC;YAC3C,MAAM,cAAc,GAAG,MAAM,CAAC,QAAQ,IAAI,EAAE,CAAC;YAC7C,MAAM,cAAc,GAAG,MAAM,CAAC,QAAQ,IAAI,EAAE,CAAC;YAC7C,sBAAsB,CAAC,kBAAkB,CAAC,CAAC;YAC3C,iBAAiB,CAAC,aAAa,EAAE,eAAe,CAAC,CAAC;YAClD,KAAK,MAAM,IAAI,IAAI,cAAc,EAAE,CAAC;gBAChC,IAAI,CAAC,CAAC,IAAI,IAAI,QAAQ,CAAC;oBAAE,QAAQ,CAAC,IAAI,CAAC,GAAI,cAAc,CAAC,IAAI,CAA0B,CAAC,eAAe,CAAC,CAAC;YAC9G,CAAC;YACD,KAAK,MAAM,IAAI,IAAI,cAAc,EAAE,CAAC;gBAChC,IAAI,CAAC,CAAC,IAAI,IAAI,QAAQ,CAAC;oBAAE,QAAQ,CAAC,IAAI,CAAC,GAAI,cAAc,CAAC,IAAI,CAA0B,CAAC,eAAe,CAAC,CAAC;YAC9G,CAAC;YACD,gEAAgE;YAChE,kEAAkE;YAClE,iEAAiE;YACjE,+DAA+D;YAC/D,uDAAuD;YACvD,eAAe,CAAC,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC;YACxC,IAAI,MAAM,CAAC,OAAO,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC3D,MAAM,CAAC,MAAM,CAAC,qBAAqB,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC;gBACrD,WAAW,GAAG,oBAAoB,CAAC,qBAAqB,CAAC,CAAC;gBAC1D,sBAAsB,CAAC,eAAe,EAAE,eAAe,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC;gBACzE,eAAe,CAAC,MAAM,CAAC,KAAK,GAAG,WAAW,CAAC;gBAC3C,eAAe,CAAC,MAAM,CAAC,SAAS,GAAG,eAAe,CAAC;YACvD,CAAC;QACL,CAAC;QACD,OAAO,eAAe,CAAC;IAC3B,CAAC,CAAC;IAEF,eAAe,CAAC,MAAM,GAAG,MAAM,CAAC;IAChC,OAAO,eAAe,CAAC;AAC3B,CAAC;AAED;;;;;GAKG;AACH,MAAM,YAAY,GAAG,MAAM,CAAC,cAAc,CAAC,CAAC;AAC5C,MAAM,aAAa,GAAG,CAAC,IAAa,EAAiC,EAAE;IACnE,IAAI,IAAI,KAAK,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ;QAAE,OAAO,IAAI,CAAC;IAC3D,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,IAAc,CAAC,CAAC;IACzC,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI;QAAE,OAAQ,IAAgC,CAAC,IAAI,CAAC,CAAC;IAC1F,OAAO,YAAY,CAAC;AACxB,CAAC,CAAC;AAEF;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,SAAS,iBAAiB,CACtB,KAA2B,EAC3B,OAAgD,EAChD,OAAyF;IAEzF,MAAM,KAAK,GAAG,OAAO,EAAE,KAAK,CAAC;IAC7B,IAAI,CAAC,KAAK,IAAI,OAAO,EAAE,KAAK;QAAE,OAAO,IAAI,CAAC;IAC1C,MAAM,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACrC,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IAExC,0EAA0E;IAC1E,wCAAwC;IACxC,MAAM,MAAM,GAA4B,EAAE,CAAC;IAC3C,KAAK,MAAM,CAAC,IAAI,SAAS,EAAE,CAAC;QACxB,MAAM,EAAE,GAAG,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;QACnC,IAAI,EAAE,KAAK,YAAY;YAAE,OAAO,IAAI,CAAC;QACrC,MAAM,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC;IACnB,CAAC;IAED,uEAAuE;IACvE,yEAAyE;IACzE,uEAAuE;IACvE,qEAAqE;IACrE,6CAA6C;IAC7C,EAAE;IACF,gEAAgE;IAChE,qEAAqE;IACrE,qEAAqE;IACrE,+DAA+D;IAC/D,YAAY;IACZ,MAAM,OAAO,GAAG,KAAK,CAAC,OAGnB,CAAC;IACJ,IAAI,aAAiD,CAAC;IACtD,IAAI,WAA0C,CAAC;IAC/C,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;QACtC,MAAM,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;QAC7B,MAAM,IAAI,GAAG,MAAM,CAAC,eAAe,CAAC;QACpC,IAAI,IAAI,KAAK,IAAI;YAAE,SAAS;QAC5B,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS,CAAC,MAAM;YAAE,SAAS;QAC/C,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,EAAE,CAAC;YAC/B,aAAa,GAAG,MAAM,CAAC;YACvB,WAAW,GAAG,IAAI,CAAC;YACnB,MAAM;QACV,CAAC;IACL,CAAC;IACD,IAAI,CAAC,aAAa,IAAI,CAAC,WAAW;QAAE,OAAO,IAAI,CAAC;IAEhD,MAAM,OAAO,GAAG,WAAW,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;IAC3E,MAAM,UAAU,GAAG,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAC/C,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IAEvC,MAAM,UAAU,GAAG,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACvC,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,UAAU,CAAC,KAAK,EAAE,CAAC;IAEvD,MAAM,MAAM,GAAa,EAAE,CAAC;IAC5B,KAAK,MAAM,MAAM,IAAI,UAAU,EAAE,CAAC;QAC9B,MAAM,QAAQ,GAAG,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QACtC,IAAI,CAAC,QAAQ;YAAE,SAAS;QACxB,MAAM,IAAI,GAAI,QAAQ,CAAC,SAAkD,CAAC,OAAO,CAAC;QAClF,IAAI,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,SAAS,CAAC,EAAE,CAAC;YAC/C,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACxB,CAAC;IACL,CAAC;IACD,OAAO,MAAM,CAAC;AAClB,CAAC"}
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 });