@adobe/data 0.9.81 → 0.9.83
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.
- package/dist/ecs/archetype/archetype.d.ts +23 -0
- package/dist/ecs/archetype/archetype.js.map +1 -1
- package/dist/ecs/database/create-plugin.d.ts +2 -1
- package/dist/ecs/database/create-plugin.js.map +1 -1
- package/dist/ecs/database/database-read.type-test.js +25 -0
- package/dist/ecs/database/database-read.type-test.js.map +1 -1
- package/dist/ecs/database/database.d.ts +26 -7
- package/dist/ecs/database/database.js.map +1 -1
- package/dist/ecs/database/database.partition.test.d.ts +1 -0
- package/dist/ecs/database/database.partition.test.js +45 -0
- package/dist/ecs/database/database.partition.test.js.map +1 -0
- package/dist/ecs/database/database.partition.type-test.d.ts +1 -0
- package/dist/ecs/database/database.partition.type-test.js +41 -0
- package/dist/ecs/database/database.partition.type-test.js.map +1 -0
- package/dist/ecs/database/deep-extends-chain.type-test.d.ts +255 -255
- package/dist/ecs/database/index.d.ts +0 -1
- package/dist/ecs/database/index.js +0 -1
- package/dist/ecs/database/index.js.map +1 -1
- package/dist/ecs/database/observe-derive.d.ts +4 -1
- package/dist/ecs/database/observe-derive.js +66 -35
- package/dist/ecs/database/observe-derive.js.map +1 -1
- package/dist/ecs/database/observe-derive.test.js +124 -0
- package/dist/ecs/database/observe-derive.test.js.map +1 -1
- package/dist/ecs/database/observed/observed-database.d.ts +3 -0
- package/dist/ecs/database/transactional-store/transactional-store.d.ts +6 -5
- package/dist/ecs/store/core/core.d.ts +33 -8
- package/dist/ecs/store/core/create-core.d.ts +12 -2
- package/dist/ecs/store/core/create-core.js +141 -22
- package/dist/ecs/store/core/create-core.js.map +1 -1
- package/dist/ecs/store/core/create-core.partition.test.d.ts +1 -0
- package/dist/ecs/store/core/create-core.partition.test.js +229 -0
- package/dist/ecs/store/core/create-core.partition.test.js.map +1 -0
- package/dist/ecs/store/core/select-entities.js +87 -21
- package/dist/ecs/store/core/select-entities.js.map +1 -1
- package/dist/ecs/store/core/select-entities.partition.test.d.ts +1 -0
- package/dist/ecs/store/core/select-entities.partition.test.js +93 -0
- package/dist/ecs/store/core/select-entities.partition.test.js.map +1 -0
- package/dist/ecs/store/entity-select-options.d.ts +5 -1
- package/dist/ecs/store/partition.d.ts +63 -0
- package/dist/ecs/store/partition.js +3 -0
- package/dist/ecs/store/partition.js.map +1 -0
- package/dist/ecs/store/partition.type-test.d.ts +1 -0
- package/dist/ecs/store/partition.type-test.js +15 -0
- package/dist/ecs/store/partition.type-test.js.map +1 -0
- package/dist/ecs/store/public/create-store.d.ts +3 -1
- package/dist/ecs/store/public/create-store.js +19 -50
- package/dist/ecs/store/public/create-store.js.map +1 -1
- package/dist/ecs/store/public/create-store.partition.test.d.ts +1 -0
- package/dist/ecs/store/public/create-store.partition.test.js +111 -0
- package/dist/ecs/store/public/create-store.partition.test.js.map +1 -0
- package/dist/ecs/store/public/create-store.partition.type-test.d.ts +1 -0
- package/dist/ecs/store/public/create-store.partition.type-test.js +61 -0
- package/dist/ecs/store/public/create-store.partition.type-test.js.map +1 -0
- package/dist/ecs/store/store.d.ts +15 -10
- package/dist/ecs/store/store.js.map +1 -1
- package/dist/ecs/store/transaction-functions.d.ts +3 -3
- package/dist/schema/schema.d.ts +1 -0
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +1 -1
- package/references/data-lit/package.json +1 -1
- package/references/data-lit-tictactoe/package.json +1 -1
- package/references/data-react/package.json +1 -1
- package/references/data-react-hello/package.json +1 -1
- package/references/data-react-pixie/package.json +1 -1
|
@@ -7,7 +7,6 @@ export * from "./reconciling/reconciling-entry.js";
|
|
|
7
7
|
export * from "./observed/create-observed-database.js";
|
|
8
8
|
export * from "./observed/observed-database.js";
|
|
9
9
|
export * from "./database.js";
|
|
10
|
-
export * from "./observe-dependent-value.js";
|
|
11
10
|
export * from "./transactional-store/index.js";
|
|
12
11
|
export * from "./database-schema/index.js";
|
|
13
12
|
export type { Undoable } from "./undoable.js";
|
|
@@ -8,7 +8,6 @@ export * from "./reconciling/reconciling-entry.js";
|
|
|
8
8
|
export * from "./observed/create-observed-database.js";
|
|
9
9
|
export * from "./observed/observed-database.js";
|
|
10
10
|
export * from "./database.js";
|
|
11
|
-
export * from "./observe-dependent-value.js";
|
|
12
11
|
export * from "./transactional-store/index.js";
|
|
13
12
|
export * from "./database-schema/index.js";
|
|
14
13
|
export * from "./combine-plugins.js";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/ecs/database/index.ts"],"names":[],"mappings":"AAAA,uDAAuD;AAEvD,cAAc,6BAA6B,CAAC;AAC5C,cAAc,iCAAiC,CAAC;AAChD,cAAc,wBAAwB,CAAC;AACvC,cAAc,8CAA8C,CAAC;AAC7D,cAAc,uCAAuC,CAAC;AACtD,cAAc,oCAAoC,CAAC;AACnD,cAAc,wCAAwC,CAAC;AACvD,cAAc,iCAAiC,CAAC;AAChD,cAAc,eAAe,CAAC;AAC9B,cAAc,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/ecs/database/index.ts"],"names":[],"mappings":"AAAA,uDAAuD;AAEvD,cAAc,6BAA6B,CAAC;AAC5C,cAAc,iCAAiC,CAAC;AAChD,cAAc,wBAAwB,CAAC;AACvC,cAAc,8CAA8C,CAAC;AAC7D,cAAc,uCAAuC,CAAC;AACtD,cAAc,oCAAoC,CAAC;AACnD,cAAc,wCAAwC,CAAC;AACvD,cAAc,iCAAiC,CAAC;AAChD,cAAc,eAAe,CAAC;AAC9B,cAAc,gCAAgC,CAAC;AAC/C,cAAc,4BAA4B,CAAC;AAE3C,cAAc,sBAAsB,CAAC"}
|
|
@@ -8,4 +8,7 @@ import { TransactionResult } from "./transactional-store/transactional-store.js"
|
|
|
8
8
|
* overlap, so the wrapper's "currently-recording" target is reset per run and
|
|
9
9
|
* safely reused.
|
|
10
10
|
*/
|
|
11
|
-
export declare const createDerive: <C extends object>(store: ReadonlyStore<C, any, any, any>, observeTransactions: Observe<TransactionResult<C>>) =>
|
|
11
|
+
export declare const createDerive: <C extends object>(store: ReadonlyStore<C, any, any, any>, observeTransactions: Observe<TransactionResult<C>>) => {
|
|
12
|
+
<T>(compute: (db: any) => T): Observe<T>;
|
|
13
|
+
<I extends Record<string, Observe<unknown>>, T>(inputs: I, compute: (db: any, inputs: { readonly [K in keyof I]: I[K] extends Observe<infer U> ? U : never; }) => T): Observe<T>;
|
|
14
|
+
};
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
// © 2026 Adobe. MIT License. See /LICENSE for details.
|
|
2
|
+
import { Observe } from "../../observe/index.js";
|
|
2
3
|
import { equals } from "../../equals.js";
|
|
3
4
|
const emptyDeps = () => ({
|
|
4
5
|
entityWhole: new Set(),
|
|
@@ -184,43 +185,73 @@ export const createDerive = (store, observeTransactions) => {
|
|
|
184
185
|
// no dependency; delegate to the real archetypes.
|
|
185
186
|
archetypes: store.archetypes,
|
|
186
187
|
};
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
188
|
+
// Implementation signature — hidden; callers only ever see the two typed
|
|
189
|
+
// overloads above. `inputs` is `any` here solely because an overloaded impl
|
|
190
|
+
// signature must remain callable for the typed overload (whose `inputs` param
|
|
191
|
+
// is checked contravariantly); the public surface stays fully typed.
|
|
192
|
+
function derive(arg1, arg2) {
|
|
193
|
+
const inputObservables = typeof arg1 === "function" ? undefined : arg1;
|
|
194
|
+
const compute = typeof arg1 === "function" ? arg1 : arg2;
|
|
195
|
+
if (compute === undefined) {
|
|
196
|
+
throw new Error("db.derive requires a compute function");
|
|
197
|
+
}
|
|
198
|
+
return (notify) => {
|
|
199
|
+
let last;
|
|
200
|
+
let hasLast = false;
|
|
201
|
+
let deps = emptyDeps();
|
|
202
|
+
// Latest injected input snapshot; `ready` gates the ECS commit path
|
|
203
|
+
// until the inputs exist (no inputs → ready immediately).
|
|
204
|
+
let latestInputs;
|
|
205
|
+
let ready = inputObservables === undefined;
|
|
206
|
+
const run = () => {
|
|
207
|
+
recording = emptyDeps();
|
|
208
|
+
try {
|
|
209
|
+
return compute(recorder, latestInputs);
|
|
210
|
+
}
|
|
211
|
+
finally {
|
|
212
|
+
deps = recording;
|
|
213
|
+
recording = null;
|
|
214
|
+
}
|
|
215
|
+
};
|
|
216
|
+
const emit = (value) => {
|
|
217
|
+
if (!hasLast || !equals(last, value)) {
|
|
218
|
+
last = value;
|
|
219
|
+
hasLast = true;
|
|
220
|
+
notify(value);
|
|
221
|
+
}
|
|
222
|
+
};
|
|
223
|
+
// ECS commit gate — recompute when a recorded read could have changed.
|
|
224
|
+
// `observeTransactions` fires once per committed transaction, so a
|
|
225
|
+
// recompute happens at most once per commit, synchronously at the
|
|
226
|
+
// commit boundary (the same cadence as `observe.entity` / the raw
|
|
227
|
+
// component observers a hand-written computed would use). Guarded by
|
|
228
|
+
// `ready` so it never runs before the first dep set is recorded.
|
|
229
|
+
const unobserveTransactions = observeTransactions((result) => {
|
|
230
|
+
if (ready && affected(deps, result)) {
|
|
231
|
+
emit(run());
|
|
232
|
+
}
|
|
233
|
+
});
|
|
234
|
+
if (inputObservables === undefined) {
|
|
218
235
|
emit(run());
|
|
236
|
+
return () => {
|
|
237
|
+
unobserveTransactions();
|
|
238
|
+
};
|
|
219
239
|
}
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
240
|
+
// Inputs are subscribed once here at the root — never read inside the
|
|
241
|
+
// recording run — so the set is fixed for the derive's lifetime. Each
|
|
242
|
+
// emission refreshes the injected snapshot and recomputes; the first
|
|
243
|
+
// (all inputs present) is also the derive's first value.
|
|
244
|
+
const unobserveInputs = Observe.fromProperties(inputObservables)((values) => {
|
|
245
|
+
latestInputs = values;
|
|
246
|
+
ready = true;
|
|
247
|
+
emit(run());
|
|
248
|
+
});
|
|
249
|
+
return () => {
|
|
250
|
+
unobserveInputs();
|
|
251
|
+
unobserveTransactions();
|
|
252
|
+
};
|
|
223
253
|
};
|
|
224
|
-
}
|
|
254
|
+
}
|
|
255
|
+
return derive;
|
|
225
256
|
};
|
|
226
257
|
//# sourceMappingURL=observe-derive.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"observe-derive.js","sourceRoot":"","sources":["../../../src/ecs/database/observe-derive.ts"],"names":[],"mappings":"AAAA,uDAAuD;
|
|
1
|
+
{"version":3,"file":"observe-derive.js","sourceRoot":"","sources":["../../../src/ecs/database/observe-derive.ts"],"names":[],"mappings":"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"}
|
|
@@ -31,6 +31,25 @@ const createTestDatabase = () => Database.create(Database.Plugin.create({
|
|
|
31
31
|
},
|
|
32
32
|
}));
|
|
33
33
|
const flush = () => new Promise((resolve) => queueMicrotask(() => resolve()));
|
|
34
|
+
// A minimal external (non-ECS) observable, standing in for a value a service
|
|
35
|
+
// might expose: emits the current value on subscribe, re-emits on `set`.
|
|
36
|
+
const makeSource = (initial) => {
|
|
37
|
+
let value = initial;
|
|
38
|
+
const observers = new Set();
|
|
39
|
+
const observe = (notify) => {
|
|
40
|
+
observers.add(notify);
|
|
41
|
+
notify(value);
|
|
42
|
+
return () => {
|
|
43
|
+
observers.delete(notify);
|
|
44
|
+
};
|
|
45
|
+
};
|
|
46
|
+
const set = (v) => {
|
|
47
|
+
value = v;
|
|
48
|
+
for (const o of observers)
|
|
49
|
+
o(v);
|
|
50
|
+
};
|
|
51
|
+
return { observe, set };
|
|
52
|
+
};
|
|
34
53
|
describe("db.derive", () => {
|
|
35
54
|
let db;
|
|
36
55
|
let foo;
|
|
@@ -109,6 +128,111 @@ describe("db.derive", () => {
|
|
|
109
128
|
expect(observer).toHaveBeenLastCalledWith(42);
|
|
110
129
|
unsubscribe();
|
|
111
130
|
});
|
|
131
|
+
// Documents the composition → derive migration for resource reads:
|
|
132
|
+
// before: Observe.withMap(
|
|
133
|
+
// Observe.fromProperties({ x: db.observe.resources.x, y: db.observe.resources.y }),
|
|
134
|
+
// ({ x, y }) => x + y)
|
|
135
|
+
// after: db.derive(db => db.resources.x + db.resources.y)
|
|
136
|
+
// The derive records BOTH resource reads and recomputes when either changes,
|
|
137
|
+
// with no hand-listed inputs. The callback param is deliberately named `db`
|
|
138
|
+
// to shadow the outer db, so a read cannot bind the outer (full) db and
|
|
139
|
+
// escape dependency tracking.
|
|
140
|
+
it("derives a value from multiple resources, recomputing when either changes", () => {
|
|
141
|
+
const sumDb = Database.create(Database.Plugin.create({
|
|
142
|
+
resources: {
|
|
143
|
+
x: { type: "number", default: 1 },
|
|
144
|
+
y: { type: "number", default: 2 },
|
|
145
|
+
},
|
|
146
|
+
transactions: {
|
|
147
|
+
setX(store, args) {
|
|
148
|
+
store.resources.x = args.x;
|
|
149
|
+
},
|
|
150
|
+
setY(store, args) {
|
|
151
|
+
store.resources.y = args.y;
|
|
152
|
+
},
|
|
153
|
+
},
|
|
154
|
+
}));
|
|
155
|
+
const observer = vi.fn();
|
|
156
|
+
const unsubscribe = sumDb.derive((db) => db.resources.x + db.resources.y)(observer);
|
|
157
|
+
expect(observer).toHaveBeenLastCalledWith(3); // initial: 1 + 2
|
|
158
|
+
sumDb.transactions.setX({ x: 10 });
|
|
159
|
+
expect(observer).toHaveBeenLastCalledWith(12); // 10 + 2
|
|
160
|
+
sumDb.transactions.setY({ y: 5 });
|
|
161
|
+
expect(observer).toHaveBeenLastCalledWith(15); // 10 + 5
|
|
162
|
+
expect(observer).toHaveBeenCalledTimes(3);
|
|
163
|
+
unsubscribe();
|
|
164
|
+
});
|
|
165
|
+
it("re-execution rebuilds the dependency set: a read dropped last run no longer triggers", () => {
|
|
166
|
+
// Reads `b` only while `a > 0`. Once `a` flips non-positive, the next run
|
|
167
|
+
// records deps WITHOUT `b`, so a later `b` change must not re-run the body.
|
|
168
|
+
const compute = vi.fn((d) => (d.get(foo, "a") > 0 ? d.get(foo, "b") : -1));
|
|
169
|
+
const unsubscribe = db.derive(compute)(() => { });
|
|
170
|
+
expect(compute).toHaveBeenCalledTimes(1); // a=1>0 → reads a AND b
|
|
171
|
+
db.transactions.setB({ e: foo, b: 20 });
|
|
172
|
+
expect(compute).toHaveBeenCalledTimes(2); // b is a dep → re-runs
|
|
173
|
+
db.transactions.setA({ e: foo, a: -1 });
|
|
174
|
+
expect(compute).toHaveBeenCalledTimes(3); // a is a dep → re-runs; now reads a only
|
|
175
|
+
db.transactions.setB({ e: foo, b: 30 });
|
|
176
|
+
expect(compute).toHaveBeenCalledTimes(3); // b dropped from deps → NO re-run
|
|
177
|
+
unsubscribe();
|
|
178
|
+
});
|
|
179
|
+
// ── inputs overload: fold external (non-ECS) observables into a derive ──
|
|
180
|
+
it("injects external input values and recomputes when either an input or an ECS read changes", () => {
|
|
181
|
+
const scale = makeSource(2);
|
|
182
|
+
const observer = vi.fn();
|
|
183
|
+
// one body reads an ECS value (`a` on foo) AND the injected external input
|
|
184
|
+
const unsubscribe = db.derive({ scale: scale.observe }, (d, inputs) => (d.get(foo, "a") ?? 0) * inputs.scale)(observer);
|
|
185
|
+
expect(observer).toHaveBeenLastCalledWith(2); // a=1 * scale=2
|
|
186
|
+
db.transactions.setA({ e: foo, a: 5 }); // ECS dep changed
|
|
187
|
+
expect(observer).toHaveBeenLastCalledWith(10); // 5 * 2 (latest input reused)
|
|
188
|
+
scale.set(3); // external input changed
|
|
189
|
+
expect(observer).toHaveBeenLastCalledWith(15); // 5 * 3 (latest ECS read reused)
|
|
190
|
+
unsubscribe();
|
|
191
|
+
});
|
|
192
|
+
it("combines two external inputs with an ECS index read", () => {
|
|
193
|
+
db.transactions.makeFoo({ a: 1, b: 0 }); // bucket a=1 now holds 2 entities
|
|
194
|
+
const weight = makeSource(10);
|
|
195
|
+
const label = makeSource("count");
|
|
196
|
+
const observer = vi.fn();
|
|
197
|
+
const unsubscribe = db.derive({ weight: weight.observe, label: label.observe }, (d, inputs) => `${inputs.label}=${d.indexes.byA.find({ a: 1 }).length * inputs.weight}`)(observer);
|
|
198
|
+
expect(observer).toHaveBeenLastCalledWith("count=20"); // 2 entities * 10
|
|
199
|
+
weight.set(100);
|
|
200
|
+
expect(observer).toHaveBeenLastCalledWith("count=200");
|
|
201
|
+
label.set("total");
|
|
202
|
+
expect(observer).toHaveBeenLastCalledWith("total=200");
|
|
203
|
+
unsubscribe();
|
|
204
|
+
});
|
|
205
|
+
it("withholds the first value until every input has emitted", () => {
|
|
206
|
+
// an input that does not emit synchronously on subscribe
|
|
207
|
+
let emitInput;
|
|
208
|
+
const deferred = (notify) => {
|
|
209
|
+
emitInput = notify;
|
|
210
|
+
return () => {
|
|
211
|
+
emitInput = undefined;
|
|
212
|
+
};
|
|
213
|
+
};
|
|
214
|
+
const observer = vi.fn();
|
|
215
|
+
const unsubscribe = db.derive({ d: deferred }, (_db, inputs) => inputs.d + 1)(observer);
|
|
216
|
+
expect(observer).not.toHaveBeenCalled(); // no input value yet → nothing computed
|
|
217
|
+
emitInput?.(10);
|
|
218
|
+
expect(observer).toHaveBeenCalledTimes(1);
|
|
219
|
+
expect(observer).toHaveBeenLastCalledWith(11);
|
|
220
|
+
unsubscribe();
|
|
221
|
+
});
|
|
222
|
+
it("structurally dedupes across input changes", () => {
|
|
223
|
+
const flag = makeSource(1);
|
|
224
|
+
const compute = vi.fn((_db, inputs) => (inputs.flag > 0 ? "pos" : "neg"));
|
|
225
|
+
const observer = vi.fn();
|
|
226
|
+
const unsubscribe = db.derive({ flag: flag.observe }, compute)(observer);
|
|
227
|
+
expect(observer).toHaveBeenCalledTimes(1); // "pos"
|
|
228
|
+
flag.set(5); // still positive → recompute runs but result unchanged → no emit
|
|
229
|
+
expect(compute).toHaveBeenCalledTimes(2);
|
|
230
|
+
expect(observer).toHaveBeenCalledTimes(1);
|
|
231
|
+
flag.set(-1); // flips
|
|
232
|
+
expect(observer).toHaveBeenCalledTimes(2);
|
|
233
|
+
expect(observer).toHaveBeenLastCalledWith("neg");
|
|
234
|
+
unsubscribe();
|
|
235
|
+
});
|
|
112
236
|
it("re-emits on a change to an index bucket it read", async () => {
|
|
113
237
|
const observer = vi.fn();
|
|
114
238
|
const unsubscribe = db.derive((d) => d.indexes.byA.find({ a: 1 }).length)(observer);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"observe-derive.test.js","sourceRoot":"","sources":["../../../src/ecs/database/observe-derive.test.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"observe-derive.test.js","sourceRoot":"","sources":["../../../src/ecs/database/observe-derive.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -29,6 +29,9 @@ export interface ObservedDatabase<C extends Components, R extends ResourceCompon
|
|
|
29
29
|
select<Include extends StringKeyof<C>, T extends Include>(include: readonly Include[] | ReadonlySet<string>, options?: any): Observe<readonly Entity[]>;
|
|
30
30
|
};
|
|
31
31
|
derive<T>(compute: (db: any) => T): Observe<T>;
|
|
32
|
+
derive<I extends Record<string, Observe<unknown>>, T>(inputs: I, compute: (db: any, inputs: {
|
|
33
|
+
readonly [K in keyof I]: I[K] extends Observe<infer U> ? U : never;
|
|
34
|
+
}) => T): Observe<T>;
|
|
32
35
|
readonly execute: (handler: (ctx: TransactionContext<C, R, A>) => Entity | void, options?: {
|
|
33
36
|
transient?: boolean;
|
|
34
37
|
userId?: number | string;
|
|
@@ -9,6 +9,7 @@ import { ArchetypeComponents } from "../../store/archetype-components.js";
|
|
|
9
9
|
import { FromSchemas } from "../../../schema/from-schemas.js";
|
|
10
10
|
import { Undoable } from "../undoable.js";
|
|
11
11
|
import { IndexDeclarations } from "../../store/index-types.js";
|
|
12
|
+
import { PartitionKeysOf } from "../../store/partition.js";
|
|
12
13
|
/**
|
|
13
14
|
* The first argument passed to every transaction function. Extends the full
|
|
14
15
|
* store read/write surface with `userId` — the identifier of the peer or user
|
|
@@ -18,10 +19,10 @@ import { IndexDeclarations } from "../../store/index-types.js";
|
|
|
18
19
|
*
|
|
19
20
|
* `userId` is `undefined` in local-only (no-sync) databases.
|
|
20
21
|
*/
|
|
21
|
-
export type TransactionContext<C extends Components, R extends ResourceComponents, A extends ArchetypeComponents<StringKeyof<C>>, IX extends IndexDeclarations<C> = {}> = Store<C, R, A, IX> & {
|
|
22
|
+
export type TransactionContext<C extends Components, R extends ResourceComponents, A extends ArchetypeComponents<StringKeyof<C>>, IX extends IndexDeclarations<C> = {}, PK extends string = never> = Store<C, R, A, IX, PK> & {
|
|
22
23
|
readonly userId: number | string | undefined;
|
|
23
24
|
};
|
|
24
|
-
export interface TransactionalStore<C extends Components = never, R extends ResourceComponents = never, A extends ArchetypeComponents<StringKeyof<C>> = never, IX extends IndexDeclarations<C> = {}> extends ReadonlyStore<C, R, A, IX> {
|
|
25
|
+
export interface TransactionalStore<C extends Components = never, R extends ResourceComponents = never, A extends ArchetypeComponents<StringKeyof<C>> = never, IX extends IndexDeclarations<C> = {}, PK extends string = never> extends ReadonlyStore<C, R, A, IX, PK> {
|
|
25
26
|
/**
|
|
26
27
|
* Execute a transaction on the store.
|
|
27
28
|
* The transactionFunction must NOT directly mutate archetype rows as those changes would not be captured.
|
|
@@ -29,12 +30,12 @@ export interface TransactionalStore<C extends Components = never, R extends Reso
|
|
|
29
30
|
* @param transactionFunction - A function that takes the store as an argument and performs some operations on it.
|
|
30
31
|
* @returns A promise that resolves when the transaction is complete.
|
|
31
32
|
*/
|
|
32
|
-
execute(transactionFunction: (t: TransactionContext<C, R, A>) => Entity | void, options?: {
|
|
33
|
+
execute(transactionFunction: (t: TransactionContext<C, R, A, IX, PK>) => Entity | void, options?: {
|
|
33
34
|
intermediate?: boolean;
|
|
34
35
|
userId?: number | string;
|
|
35
36
|
}): TransactionResult<C>;
|
|
36
|
-
extend<S extends Store.Schema<any, any, any>>(schema: S): TransactionalStore<C & (S extends Store.Schema<infer XC, any, any> ? FromSchemas<XC> : never), R & (S extends Store.Schema<any, infer XR, any> ? FromSchemas<XR> : never), A & (S extends Store.Schema<any, any, infer XA> ? XA : never)>;
|
|
37
|
-
transactionStore: Store<C, R, A>;
|
|
37
|
+
extend<S extends Store.Schema<any, any, any>>(schema: S): TransactionalStore<C & (S extends Store.Schema<infer XC, any, any> ? FromSchemas<XC> : never), R & (S extends Store.Schema<any, infer XR, any> ? FromSchemas<XR> : never), A & (S extends Store.Schema<any, any, infer XA> ? XA : never), IX, PK | (S extends Store.Schema<infer XC, any, any> ? PartitionKeysOf<XC> : never)>;
|
|
38
|
+
transactionStore: Store<C, R, A, IX, PK>;
|
|
38
39
|
}
|
|
39
40
|
export type TransactionInsertOperation<C> = {
|
|
40
41
|
type: "insert";
|
|
@@ -5,6 +5,7 @@ import { RequiredComponents } from "../../required-components.js";
|
|
|
5
5
|
import { StringKeyof } from "../../../types/index.js";
|
|
6
6
|
import { Components } from "../components.js";
|
|
7
7
|
import { OptionalComponents } from "../../optional-components.js";
|
|
8
|
+
import { HasPartitionKey } from "../partition.js";
|
|
8
9
|
export type EntityValues<C> = {
|
|
9
10
|
readonly [K in (RequiredComponents & StringKeyof<C & OptionalComponents>)]: (C & OptionalComponents)[K];
|
|
10
11
|
};
|
|
@@ -12,15 +13,32 @@ export type EntityReadValues<C> = RequiredComponents & {
|
|
|
12
13
|
readonly [K in StringKeyof<C & OptionalComponents> as string extends K ? never : K]?: (C & OptionalComponents)[K];
|
|
13
14
|
};
|
|
14
15
|
export type EntityUpdateValues<C> = Partial<Omit<C, "id">>;
|
|
15
|
-
export type ArchetypeQueryOptions<C extends object> = {
|
|
16
|
-
exclude?: readonly StringKeyof<C & OptionalComponents>[];
|
|
16
|
+
export type ArchetypeQueryOptions<C extends object, PK extends string = never> = {
|
|
17
|
+
exclude?: readonly StringKeyof<C & RequiredComponents & OptionalComponents>[];
|
|
18
|
+
/**
|
|
19
|
+
* Filter to archetypes whose partition component equals the given value.
|
|
20
|
+
* A partition column is const per archetype, so this is decided at
|
|
21
|
+
* archetype granularity (O(archetypes), no row scan). Keyed to the store's
|
|
22
|
+
* partition components only — a non-partition column is not const per
|
|
23
|
+
* archetype, so a value filter on it is not archetype-decidable.
|
|
24
|
+
*/
|
|
25
|
+
where?: {
|
|
26
|
+
readonly [K in Extract<PK, StringKeyof<C & OptionalComponents>>]?: (C & RequiredComponents & OptionalComponents)[K];
|
|
27
|
+
};
|
|
17
28
|
};
|
|
18
|
-
export interface ReadonlyCore<C extends Components = never> {
|
|
29
|
+
export interface ReadonlyCore<C extends Components = never, PK extends string = never> {
|
|
19
30
|
readonly componentSchemas: {
|
|
20
31
|
readonly [K in StringKeyof<C & RequiredComponents & OptionalComponents>]: Schema;
|
|
21
32
|
};
|
|
22
|
-
queryArchetypes<Include extends StringKeyof<C & RequiredComponents & OptionalComponents>>(include: readonly Include[] | ReadonlySet<string>, options?: ArchetypeQueryOptions<C>): readonly ReadonlyArchetype<RequiredComponents & Pick<C & RequiredComponents & OptionalComponents, Include>>[];
|
|
23
|
-
ensureArchetype
|
|
33
|
+
queryArchetypes<Include extends StringKeyof<C & RequiredComponents & OptionalComponents>>(include: readonly Include[] | ReadonlySet<string>, options?: ArchetypeQueryOptions<C, PK>): readonly ReadonlyArchetype<RequiredComponents & Pick<C & RequiredComponents & OptionalComponents, Include>>[];
|
|
34
|
+
ensureArchetype<const CC extends StringKeyof<C & RequiredComponents & OptionalComponents>>(components: readonly CC[] | ReadonlySet<CC>): HasPartitionKey<CC, PK> extends true ? Archetype.Router<RequiredComponents & {
|
|
35
|
+
[K in CC]: (C & RequiredComponents & OptionalComponents)[K];
|
|
36
|
+
}> : ReadonlyArchetype<RequiredComponents & {
|
|
37
|
+
[K in CC]: (C & RequiredComponents & OptionalComponents)[K];
|
|
38
|
+
}>;
|
|
39
|
+
ensureArchetype<const CC extends StringKeyof<C & RequiredComponents & OptionalComponents>>(components: readonly CC[] | ReadonlySet<CC>, partitionValues: {
|
|
40
|
+
readonly [K in Extract<CC, PK>]: (C & RequiredComponents & OptionalComponents)[K];
|
|
41
|
+
}): ReadonlyArchetype<RequiredComponents & {
|
|
24
42
|
[K in CC]: (C & RequiredComponents & OptionalComponents)[K];
|
|
25
43
|
}>;
|
|
26
44
|
locate: (entity: Entity) => {
|
|
@@ -62,9 +80,16 @@ export interface ReadonlyCore<C extends Components = never> {
|
|
|
62
80
|
/**
|
|
63
81
|
* This is the main interface for the low level ECS Core.
|
|
64
82
|
*/
|
|
65
|
-
export interface Core<C extends Components = never> extends ReadonlyCore<C> {
|
|
66
|
-
queryArchetypes<Include extends StringKeyof<C & RequiredComponents & OptionalComponents>>(include: readonly Include[] | ReadonlySet<string>, options?: ArchetypeQueryOptions<C>): readonly Archetype<RequiredComponents & Pick<C & RequiredComponents & OptionalComponents, Include>>[];
|
|
67
|
-
ensureArchetype
|
|
83
|
+
export interface Core<C extends Components = never, PK extends string = never> extends ReadonlyCore<C, PK> {
|
|
84
|
+
queryArchetypes<Include extends StringKeyof<C & RequiredComponents & OptionalComponents>>(include: readonly Include[] | ReadonlySet<string>, options?: ArchetypeQueryOptions<C, PK>): readonly Archetype<RequiredComponents & Pick<C & RequiredComponents & OptionalComponents, Include>>[];
|
|
85
|
+
ensureArchetype<const CC extends StringKeyof<C & RequiredComponents & OptionalComponents>>(components: readonly CC[] | ReadonlySet<CC>): HasPartitionKey<CC, PK> extends true ? Archetype.Router<RequiredComponents & {
|
|
86
|
+
[K in CC]: (C & RequiredComponents & OptionalComponents)[K];
|
|
87
|
+
}> : Archetype<RequiredComponents & {
|
|
88
|
+
[K in CC]: (C & RequiredComponents & OptionalComponents)[K];
|
|
89
|
+
}>;
|
|
90
|
+
ensureArchetype<const CC extends StringKeyof<C & RequiredComponents & OptionalComponents>>(components: readonly CC[] | ReadonlySet<CC>, partitionValues: {
|
|
91
|
+
readonly [K in Extract<CC, PK>]: (C & RequiredComponents & OptionalComponents)[K];
|
|
92
|
+
}): Archetype<RequiredComponents & {
|
|
68
93
|
[K in CC]: (C & RequiredComponents & OptionalComponents)[K];
|
|
69
94
|
}>;
|
|
70
95
|
locate: (entity: Entity) => {
|
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
import { Schema } from "../../../schema/index.js";
|
|
2
|
+
import { Archetype } from "../../archetype/archetype.js";
|
|
2
3
|
import { Core } from "./core.js";
|
|
3
4
|
import { Simplify, StringKeyof } from "../../../types/index.js";
|
|
4
5
|
import { ComponentSchemas } from "../../component-schemas.js";
|
|
5
6
|
import { OptionalComponents } from "../../optional-components.js";
|
|
7
|
+
import { PartitionKeysOf } from "../partition.js";
|
|
6
8
|
/**
|
|
7
9
|
* Serialization format version stamped into every `toData` snapshot and
|
|
8
10
|
* checked by `fromData`. A mismatch is thrown rather than silently
|
|
@@ -14,6 +16,14 @@ import { OptionalComponents } from "../../optional-components.js";
|
|
|
14
16
|
* changes in a way older readers cannot load.
|
|
15
17
|
*/
|
|
16
18
|
export declare const ECS_SNAPSHOT_VERSION = 1;
|
|
17
|
-
export declare function createCore<NC extends ComponentSchemas>(newComponentSchemas: NC
|
|
19
|
+
export declare function createCore<NC extends ComponentSchemas>(newComponentSchemas: NC,
|
|
20
|
+
/**
|
|
21
|
+
* Called once, right after each archetype is created (direct or lazily as a
|
|
22
|
+
* partition value-child). The Store layer uses it to decorate the
|
|
23
|
+
* archetype's `insert` in place with index maintenance — so every write
|
|
24
|
+
* path (direct insert, router routing, migration target) shares one
|
|
25
|
+
* maintained insert with no wrapper or Proxy indirection.
|
|
26
|
+
*/
|
|
27
|
+
onArchetypeCreated?: (archetype: Archetype<any>) => void): Core<Simplify<OptionalComponents & {
|
|
18
28
|
[K in StringKeyof<NC>]: Schema.ToType<NC[K]>;
|
|
19
|
-
}>>;
|
|
29
|
+
}>, PartitionKeysOf<NC>>;
|