@adobe/data 0.9.56 → 0.9.58
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/cache/blob-store.js +12 -7
- package/dist/cache/blob-store.js.map +1 -1
- package/dist/ecs/database/database.d.ts +59 -2
- package/dist/ecs/database/database.js.map +1 -1
- package/dist/ecs/database/database.reset.test.js +200 -0
- package/dist/ecs/database/database.reset.test.js.map +1 -0
- package/dist/ecs/database/deep-extends-chain.type-test.d.ts +208 -208
- package/dist/ecs/database/observed/create-observed-database.js +4 -0
- package/dist/ecs/database/observed/create-observed-database.js.map +1 -1
- package/dist/ecs/database/observed/observed-database.d.ts +5 -3
- package/dist/ecs/database/public/create-database.d.ts +32 -3
- package/dist/ecs/database/public/create-database.js +12 -69
- package/dist/ecs/database/public/create-database.js.map +1 -1
- package/dist/ecs/database/public/create-database.test.js +86 -4
- package/dist/ecs/database/public/create-database.test.js.map +1 -1
- package/dist/ecs/database/public/create-transaction-dispatcher.d.ts +60 -0
- package/dist/ecs/database/public/create-transaction-dispatcher.js +119 -0
- package/dist/ecs/database/public/create-transaction-dispatcher.js.map +1 -0
- package/dist/ecs/database/reconciling/create-reconciling-database.js +52 -18
- package/dist/ecs/database/reconciling/create-reconciling-database.js.map +1 -1
- package/dist/ecs/database/reconciling/create-reconciling-database.test.js +144 -0
- package/dist/ecs/database/reconciling/create-reconciling-database.test.js.map +1 -1
- package/dist/ecs/database/reconciling/reconciling-database.d.ts +8 -1
- package/dist/ecs/database/reconciling/reconciling-entry.d.ts +9 -3
- package/dist/ecs/database/reconciling/reconciling-entry.js.map +1 -1
- package/dist/ecs/database/transactional-store/create-transactional-store.js +3 -1
- package/dist/ecs/database/transactional-store/create-transactional-store.js.map +1 -1
- package/dist/ecs/database/transactional-store/transactional-store.d.ts +14 -1
- package/dist/ecs/entity-location-table/create-entity-location-table.js +6 -1
- package/dist/ecs/entity-location-table/create-entity-location-table.js.map +1 -1
- package/dist/ecs/entity-location-table/entity-location-table.d.ts +2 -0
- package/dist/ecs/store/core/core.d.ts +2 -0
- package/dist/ecs/store/core/create-core.js +8 -0
- package/dist/ecs/store/core/create-core.js.map +1 -1
- package/dist/ecs/store/public/create-store.js +6 -0
- package/dist/ecs/store/public/create-store.js.map +1 -1
- package/dist/ecs/store/store.d.ts +2 -0
- package/dist/ecs/store/store.js.map +1 -1
- package/dist/ecs/store/transaction-functions.d.ts +36 -4
- package/dist/ecs/store/transaction-functions.type-test.js +50 -0
- package/dist/ecs/store/transaction-functions.type-test.js.map +1 -0
- package/dist/observe/to-async-generator.js +18 -8
- package/dist/observe/to-async-generator.js.map +1 -1
- package/dist/observe/to-async-generator.test.js +24 -0
- package/dist/observe/to-async-generator.test.js.map +1 -1
- package/dist/service/async-data-service/async-data-service.d.ts +1 -0
- package/dist/service/async-data-service/async-data-service.js +3 -0
- package/dist/service/async-data-service/async-data-service.js.map +1 -0
- package/dist/service/async-data-service/example.js +1 -1
- package/dist/service/async-data-service/example.js.map +1 -1
- package/dist/service/index.d.ts +2 -1
- package/dist/service/index.js +2 -1
- package/dist/service/index.js.map +1 -1
- package/dist/service/{agentic-service/link.js → ui-service/example.js} +1 -1
- package/dist/service/ui-service/example.js.map +1 -0
- package/dist/service/ui-service/from-service.d.ts +35 -0
- package/dist/service/{async-data-service/is-valid.type-test.js → ui-service/from-service.js} +1 -1
- package/dist/service/ui-service/from-service.js.map +1 -0
- package/dist/service/ui-service/is-valid.d.ts +11 -0
- package/dist/service/ui-service/is-valid.js +3 -0
- package/dist/service/ui-service/is-valid.js.map +1 -0
- package/dist/service/ui-service/public.d.ts +2 -0
- package/dist/service/ui-service/public.js +4 -0
- package/dist/service/ui-service/public.js.map +1 -0
- package/dist/service/ui-service/ui-service.d.ts +1 -0
- package/dist/service/ui-service/ui-service.js +3 -0
- package/dist/service/ui-service/ui-service.js.map +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/src/elements/application-element.ts +11 -1
- package/references/data-lit/src/elements/database-element.ts +3 -2
- package/references/data-lit/src/elements/database-element.type-test.ts +85 -0
- package/references/data-lit/src/hooks/index.ts +2 -0
- package/references/data-lit/src/hooks/use-drag-generator.ts +43 -0
- package/references/data-lit/src/hooks/use-drag-observe.ts +8 -2
- package/references/data-lit/src/hooks/use-pointer-observe.ts +79 -0
- package/references/data-lit-tictactoe/package.json +4 -1
- package/references/data-lit-tictactoe/src/elements/tictactoe-app/tictactoe-app-element.ts +23 -0
- package/references/data-lit-tictactoe/src/elements/tictactoe-app/tictactoe-app-presentation.ts +12 -0
- package/references/data-lit-tictactoe/src/elements/tictactoe-app/tictactoe-app.ts +14 -18
- package/references/data-lit-tictactoe/src/elements/tictactoe-board/tictactoe-board-element.ts +23 -0
- package/references/data-lit-tictactoe/src/elements/tictactoe-board/tictactoe-board-presentation.ts +6 -7
- package/references/data-lit-tictactoe/src/elements/tictactoe-board/tictactoe-board.ts +5 -15
- package/references/data-lit-tictactoe/src/elements/tictactoe-cell/tictactoe-cell-element.ts +45 -0
- package/references/data-lit-tictactoe/src/elements/tictactoe-cell/tictactoe-cell-presentation.ts +2 -1
- package/references/data-lit-tictactoe/src/elements/tictactoe-cell/tictactoe-cell.ts +5 -38
- package/references/data-lit-tictactoe/src/elements/tictactoe-hud/tictactoe-hud-element.ts +57 -0
- package/references/data-lit-tictactoe/src/elements/tictactoe-hud/tictactoe-hud-presentation.ts +10 -2
- package/references/data-lit-tictactoe/src/elements/tictactoe-hud/tictactoe-hud.css.ts +36 -1
- package/references/data-lit-tictactoe/src/elements/tictactoe-hud/tictactoe-hud.ts +5 -41
- package/references/data-lit-tictactoe/src/index.ts +16 -0
- package/references/data-lit-tictactoe/src/main.ts +9 -3
- package/references/data-lit-tictactoe/src/state/tictactoe-plugin.ts +18 -10
- package/references/data-lit-tictactoe/src/tictactoe-element.ts +8 -3
- package/references/data-lit-tictactoe/src/types/board-state/current-player.ts +2 -2
- package/references/data-lit-tictactoe/src/types/player-mark/is.ts +8 -0
- package/references/data-lit-tictactoe/src/types/player-mark/mark-color.ts +12 -0
- package/references/data-lit-tictactoe/src/types/player-mark/opponent.ts +12 -0
- package/references/data-lit-tictactoe/src/types/player-mark/public.ts +4 -0
- package/references/data-lit-tictactoe/src/types/player-mark/values.ts +6 -0
- 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
- package/dist/cache/blob-store.test.js +0 -122
- package/dist/cache/blob-store.test.js.map +0 -1
- package/dist/cache/data-cache.test.js +0 -41
- package/dist/cache/data-cache.test.js.map +0 -1
- package/dist/cache/expiring-data-cache.test.js +0 -42
- package/dist/cache/expiring-data-cache.test.js.map +0 -1
- package/dist/cache/functions/functions.test.d.ts +0 -1
- package/dist/cache/functions/functions.test.js +0 -72
- package/dist/cache/functions/functions.test.js.map +0 -1
- package/dist/ecs/database/observe-select-deep.d.ts +0 -23
- package/dist/ecs/database/observe-select-deep.js +0 -15
- package/dist/ecs/database/observe-select-deep.js.map +0 -1
- package/dist/ecs/database/observe-select-deep.type-test.d.ts +0 -1
- package/dist/ecs/database/observe-select-deep.type-test.js +0 -111
- package/dist/ecs/database/observe-select-deep.type-test.js.map +0 -1
- package/dist/ecs/database/public/create-database-scheduler.test.d.ts +0 -1
- package/dist/ecs/database/public/create-database-scheduler.test.js +0 -67
- package/dist/ecs/database/public/create-database-scheduler.test.js.map +0 -1
- package/dist/ecs/database/public/create-database.type-test.d.ts +0 -1
- package/dist/ecs/database/public/create-database.type-test.js +0 -52
- package/dist/ecs/database/public/create-database.type-test.js.map +0 -1
- package/dist/ecs/entity.d.ts +0 -11
- package/dist/ecs/entity.js +0 -7
- package/dist/ecs/entity.js.map +0 -1
- package/dist/ecs/persistence-service/create-storage-persistence-service.test.d.ts +0 -1
- package/dist/ecs/persistence-service/create-storage-persistence-service.test.js +0 -52
- package/dist/ecs/persistence-service/create-storage-persistence-service.test.js.map +0 -1
- package/dist/functions/serialization/serialize-to-storage.test.d.ts +0 -1
- package/dist/functions/serialization/serialize-to-storage.test.js +0 -161
- package/dist/functions/serialization/serialize-to-storage.test.js.map +0 -1
- package/dist/math/aabb/face/aabb-face.test.d.ts +0 -1
- package/dist/math/aabb/face/aabb-face.test.js +0 -35
- package/dist/math/aabb/face/aabb-face.test.js.map +0 -1
- package/dist/math/aabb/face/functions.d.ts +0 -47
- package/dist/math/aabb/face/functions.js +0 -142
- package/dist/math/aabb/face/functions.js.map +0 -1
- package/dist/math/aabb/face/index.d.ts +0 -4
- package/dist/math/aabb/face/index.js +0 -3
- package/dist/math/aabb/face/index.js.map +0 -1
- package/dist/perftest/ecs-perf.d.ts +0 -49
- package/dist/perftest/ecs-perf.js +0 -210
- package/dist/perftest/ecs-perf.js.map +0 -1
- package/dist/service/agentic-service/link.d.ts +0 -15
- package/dist/service/agentic-service/link.js.map +0 -1
- package/dist/service/async-data-service/is-valid.type-test.d.ts +0 -1
- package/dist/service/async-data-service/is-valid.type-test.js.map +0 -1
- package/dist/service/dynamic-service/create-from-ecs.d.ts +0 -17
- package/dist/service/dynamic-service/create-from-ecs.js +0 -56
- package/dist/service/dynamic-service/create-from-ecs.js.map +0 -1
- package/dist/service/dynamic-service/create-from-ecs.test.d.ts +0 -1
- package/dist/service/dynamic-service/create-from-ecs.test.js +0 -636
- package/dist/service/dynamic-service/create-from-ecs.test.js.map +0 -1
- package/dist/service/dynamic-service/create.d.ts +0 -84
- package/dist/service/dynamic-service/create.js +0 -97
- package/dist/service/dynamic-service/create.js.map +0 -1
- package/dist/service/dynamic-service/create.test.d.ts +0 -1
- package/dist/service/dynamic-service/create.test.js +0 -688
- package/dist/service/dynamic-service/create.test.js.map +0 -1
- package/dist/service/dynamic-service/dynamic-service.d.ts +0 -29
- package/dist/service/dynamic-service/dynamic-service.js +0 -2
- package/dist/service/dynamic-service/dynamic-service.js.map +0 -1
- package/dist/service/dynamic-service/index.d.ts +0 -1
- package/dist/service/dynamic-service/index.js +0 -3
- package/dist/service/dynamic-service/index.js.map +0 -1
- package/dist/service/dynamic-service/public.d.ts +0 -2
- package/dist/service/dynamic-service/public.js +0 -3
- package/dist/service/dynamic-service/public.js.map +0 -1
- package/dist/service/dynamic-service/semantic-service.d.ts +0 -19
- package/dist/service/dynamic-service/semantic-service.js +0 -2
- package/dist/service/dynamic-service/semantic-service.js.map +0 -1
- package/dist/service/semantic-service/semantic-service.d.ts +0 -19
- package/dist/service/semantic-service/semantic-service.js +0 -2
- package/dist/service/semantic-service/semantic-service.js.map +0 -1
- /package/dist/{cache/blob-store.test.d.ts → ecs/database/database.reset.test.d.ts} +0 -0
- /package/dist/{cache/data-cache.test.d.ts → ecs/store/transaction-functions.type-test.d.ts} +0 -0
- /package/dist/{cache/expiring-data-cache.test.d.ts → service/ui-service/example.d.ts} +0 -0
package/dist/cache/blob-store.js
CHANGED
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
// © 2026 Adobe. MIT License. See /LICENSE for details.
|
|
2
1
|
import { getManagedPersistentCache } from "./get-persistent-cache.js";
|
|
3
2
|
import { blobToHash } from "./functions/hashing/blob-to-hash.js";
|
|
4
3
|
import { preventParallelExecution } from "./functions/prevent-parallel-execution.js";
|
|
@@ -49,16 +48,22 @@ export const hasBlobInternalDoNotUse = Symbol("hasBlob");
|
|
|
49
48
|
* Creates a new blob store instance.
|
|
50
49
|
*/
|
|
51
50
|
export function createBlobStore() {
|
|
52
|
-
|
|
51
|
+
// Lazy-init the persistent cache so that importing this module on a
|
|
52
|
+
// runtime without `globalThis.caches` (e.g. Node) does not produce an
|
|
53
|
+
// unhandled rejection. The cache promise is only kicked off the first
|
|
54
|
+
// time a blob store method actually needs it. See CLAUDE.md for the
|
|
55
|
+
// rationale behind the lazy-init pattern.
|
|
56
|
+
let cachePromiseInternal;
|
|
57
|
+
const cachePromise = () => (cachePromiseInternal ??= getManagedPersistentCache("blobstore", {
|
|
53
58
|
maximumMemoryEntries: 10,
|
|
54
59
|
maximumStorageEntries: 1000,
|
|
55
|
-
});
|
|
60
|
+
}));
|
|
56
61
|
// Track borrowed URLs and their reference counts
|
|
57
62
|
const borrowedUrls = new Map();
|
|
58
63
|
// Reverse mapping for O(1) lookup
|
|
59
64
|
const urlToKey = new Map();
|
|
60
65
|
async function getRef(blob) {
|
|
61
|
-
const cache = await cachePromise;
|
|
66
|
+
const cache = await cachePromise();
|
|
62
67
|
if (typeof blob === "string") {
|
|
63
68
|
// if this is not a remote url, then we can assume it is a data url and fetch the blob from it.
|
|
64
69
|
blob = await (await fetch(blob)).blob();
|
|
@@ -75,7 +80,7 @@ export function createBlobStore() {
|
|
|
75
80
|
if (isRemoteBlobRef(r)) {
|
|
76
81
|
return true;
|
|
77
82
|
}
|
|
78
|
-
const cache = await cachePromise;
|
|
83
|
+
const cache = await cachePromise();
|
|
79
84
|
const response = await cache.match(toRequest(r));
|
|
80
85
|
return response !== undefined;
|
|
81
86
|
}
|
|
@@ -85,7 +90,7 @@ export function createBlobStore() {
|
|
|
85
90
|
}
|
|
86
91
|
const response = await (isRemoteBlobRef(r)
|
|
87
92
|
? fetch(r.remoteBlobRef)
|
|
88
|
-
: (await cachePromise).match(toRequest(r)));
|
|
93
|
+
: (await cachePromise()).match(toRequest(r)));
|
|
89
94
|
if (!response) {
|
|
90
95
|
return null;
|
|
91
96
|
}
|
|
@@ -97,7 +102,7 @@ export function createBlobStore() {
|
|
|
97
102
|
}
|
|
98
103
|
async function releaseBlob(r) {
|
|
99
104
|
if (isLocalBlobRef(r)) {
|
|
100
|
-
const cache = await cachePromise;
|
|
105
|
+
const cache = await cachePromise();
|
|
101
106
|
cache.delete(toRequest(r));
|
|
102
107
|
}
|
|
103
108
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"blob-store.js","sourceRoot":"","sources":["../../src/cache/blob-store.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"blob-store.js","sourceRoot":"","sources":["../../src/cache/blob-store.ts"],"names":[],"mappings":"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"}
|
|
@@ -4,14 +4,15 @@ import { ReadonlyStore, Store } from "../store/index.js";
|
|
|
4
4
|
import { Entity } from "../entity/entity.js";
|
|
5
5
|
import { EntityReadValues } from "../store/core/index.js";
|
|
6
6
|
import { Observe } from "../../observe/index.js";
|
|
7
|
-
import { TransactionResult } from "./transactional-store/index.js";
|
|
7
|
+
import { TransactionContext, TransactionResult } from "./transactional-store/index.js";
|
|
8
|
+
import { TransactionEnvelope } from "./reconciling/reconciling-database.js";
|
|
8
9
|
import { StringKeyof, RemoveIndex } from "../../types/types.js";
|
|
9
10
|
import { Components } from "../store/components.js";
|
|
10
11
|
import { ArchetypeComponents } from "../store/archetype-components.js";
|
|
11
12
|
import { RequiredComponents } from "../required-components.js";
|
|
12
13
|
import { EntitySelectOptions } from "../store/entity-select-options.js";
|
|
13
14
|
import type { Service } from "../../service/index.js";
|
|
14
|
-
import { createDatabase } from "./public/create-database.js";
|
|
15
|
+
import { createDatabase, type DatabaseSyncOptions } from "./public/create-database.js";
|
|
15
16
|
import { ResourceSchemas } from "../resource-schemas.js";
|
|
16
17
|
import { ComponentSchemas } from "../component-schemas.js";
|
|
17
18
|
import { FromSchemas } from "../../schema/index.js";
|
|
@@ -90,11 +91,59 @@ export interface Database<C extends Components = {}, R extends ResourceComponent
|
|
|
90
91
|
readonly [K in StringKeyof<R>]: Observe<R[K]>;
|
|
91
92
|
};
|
|
92
93
|
readonly transactions: Observe<TransactionResult<C>>;
|
|
94
|
+
/**
|
|
95
|
+
* Fires once for every locally-initiated envelope produced by the
|
|
96
|
+
* transaction wrappers (`db.transactions.X(args)`). Replays inside the
|
|
97
|
+
* reconciler and inbound `db.apply()` calls do NOT fire it. The
|
|
98
|
+
* `intent` reflects the wrapper's decision regardless of whether the
|
|
99
|
+
* envelope was applied locally as a transient (deferred-commit / sync
|
|
100
|
+
* mode) or as a commit (local-only mode).
|
|
101
|
+
*
|
|
102
|
+
* Sync services route forwarding by `intent`:
|
|
103
|
+
* - `"commit"` → propose to the server (reliable)
|
|
104
|
+
* - `"transient"` → relay to peers (lossy)
|
|
105
|
+
* - `"cancel"` → cancel a pending transient (reliable)
|
|
106
|
+
*/
|
|
107
|
+
readonly envelopes: Observe<{
|
|
108
|
+
envelope: TransactionEnvelope;
|
|
109
|
+
result: TransactionResult<C> | undefined;
|
|
110
|
+
intent: "commit" | "transient" | "cancel";
|
|
111
|
+
}>;
|
|
93
112
|
entity<T extends RequiredComponents>(id: Entity, minArchetype?: ReadonlyArchetype<T> | Archetype<T>): Observe<Readonly<T> & EntityReadValues<C> | null>;
|
|
94
113
|
entity(id: Entity): Observe<EntityReadValues<C> | null>;
|
|
95
114
|
archetype(id: ArchetypeId): Observe<void>;
|
|
96
115
|
select<Include extends StringKeyof<C>, T extends Include>(include: readonly Include[] | ReadonlySet<string>, options?: EntitySelectOptions<C, Pick<C & RequiredComponents, T>>): Observe<readonly Entity[]>;
|
|
97
116
|
};
|
|
117
|
+
/**
|
|
118
|
+
* Wipes all entities and resets all resources to their plugin defaults,
|
|
119
|
+
* preserving database identity (observers, transaction wrappers, sync
|
|
120
|
+
* options stay intact). Equivalent in observable state to a freshly
|
|
121
|
+
* constructed Database with the same plugin.
|
|
122
|
+
*
|
|
123
|
+
* O(num_archetypes + num_resources) — does not walk individual entities.
|
|
124
|
+
* Clears any in-flight reconciler transient queue.
|
|
125
|
+
*/
|
|
126
|
+
readonly reset: () => void;
|
|
127
|
+
/**
|
|
128
|
+
* Apply a remotely-originated transaction envelope to the database. Used
|
|
129
|
+
* by sync services to feed in inbound commits and transients. Does not
|
|
130
|
+
* fire `observe.envelopes`.
|
|
131
|
+
*/
|
|
132
|
+
readonly apply: (envelope: TransactionEnvelope) => TransactionResult<C> | undefined;
|
|
133
|
+
/**
|
|
134
|
+
* Cancel a previously-applied transient envelope by its compound
|
|
135
|
+
* `(userId, id)` key. Used by sync services to forward server-broadcast
|
|
136
|
+
* cancellations.
|
|
137
|
+
*/
|
|
138
|
+
readonly cancel: (id: number, userId?: number | string) => void;
|
|
139
|
+
/**
|
|
140
|
+
* The sync options the database was created with, or `undefined` for a
|
|
141
|
+
* local-only database. Sync services read this to (a) confirm the
|
|
142
|
+
* database was created in sync mode and (b) recover the `userId` for
|
|
143
|
+
* authentication / logging without having to thread it through
|
|
144
|
+
* separately.
|
|
145
|
+
*/
|
|
146
|
+
readonly sync: DatabaseSyncOptions | undefined;
|
|
98
147
|
readonly system: {
|
|
99
148
|
/** System create() return value, or null when create() returns void. Key is always present. */
|
|
100
149
|
readonly functions: {
|
|
@@ -133,6 +182,14 @@ export declare namespace Database {
|
|
|
133
182
|
const combine: typeof combinePlugins;
|
|
134
183
|
type ToDatabase<P extends Database.Plugin> = Database.FromPlugin<P>;
|
|
135
184
|
type ToStore<P extends Database.Plugin> = Store<FromSchemas<RemoveIndex<P['components']>>, FromSchemas<RemoveIndex<P['resources']>>, RemoveIndex<P['archetypes']>>;
|
|
185
|
+
/**
|
|
186
|
+
* The plugin's store as seen *inside a transaction body* — i.e. `ToStore<P>`
|
|
187
|
+
* plus the `userId` field added by the transaction dispatcher. Use this
|
|
188
|
+
* when typing helper functions that forward a transaction's store into
|
|
189
|
+
* another plugin's transaction declaration; `ToStore<P>` is the bare
|
|
190
|
+
* store type and does not include `userId`.
|
|
191
|
+
*/
|
|
192
|
+
type ToTransactionContext<P extends Database.Plugin> = TransactionContext<FromSchemas<RemoveIndex<P['components']>>, FromSchemas<RemoveIndex<P['resources']>>, RemoveIndex<P['archetypes']>>;
|
|
136
193
|
type ToSystemDatabase<P extends Database.Plugin> = Database.FromPlugin<P> & {
|
|
137
194
|
readonly store: Database.Plugin.ToStore<P>;
|
|
138
195
|
services: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"database.js","sourceRoot":"","sources":["../../../src/ecs/database/database.ts"],"names":[],"mappings":"AAAA,uDAAuD;
|
|
1
|
+
{"version":3,"file":"database.js","sourceRoot":"","sources":["../../../src/ecs/database/database.ts"],"names":[],"mappings":"AAAA,uDAAuD;AAgBvD,OAAO,EAAE,cAAc,EAA4B,MAAM,6BAA6B,CAAC;AACvF,OAAO,EAAE,iBAAiB,IAAI,kBAAkB,EAAE,MAAM,iCAAiC,CAAC;AAc1F,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AA0JtD,MAAM,KAAW,QAAQ,CAqExB;AArED,WAAiB,QAAQ;IAkBV,eAAM,GAAG,cAAc,CAAC;IAExB,WAAE,GAAG,CAAC,KAAc,EAAqB,EAAE;QACtD,OAAO,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,cAAc,IAAI,KAAK,IAAI,SAAS,IAAI,KAAK,IAAI,OAAO,IAAI,KAAK,IAAI,SAAS,IAAI,KAAK,IAAI,QAAQ,IAAI,KAAK,IAAI,QAAQ,IAAI,KAAK,CAAC;IAC1L,CAAC,CAAA;IAEY,0BAAiB,GAAG,kBAAkB,CAAC;IAsBpD,IAAiB,MAAM,CAqBtB;IArBD,WAAiB,MAAM;QACR,aAAM,GAAG,YAAY,CAAC;QACtB,cAAO,GAAG,cAAc,CAAC;IAmBxC,CAAC,EArBgB,MAAM,GAAN,eAAM,KAAN,eAAM,QAqBtB;AAEH,CAAC,EArEgB,QAAQ,KAAR,QAAQ,QAqExB"}
|
|
@@ -0,0 +1,200 @@
|
|
|
1
|
+
// © 2026 Adobe. MIT License. See /LICENSE for details.
|
|
2
|
+
//
|
|
3
|
+
// Red/green equivalence tests for Database.reset().
|
|
4
|
+
//
|
|
5
|
+
// Strategy: create two databases from the same plugin — `fresh` and `mutated`.
|
|
6
|
+
// Mutate the second with a representative workload, call reset(), then assert
|
|
7
|
+
// every observable property equals the fresh baseline.
|
|
8
|
+
import { describe, it, expect, vi } from "vitest";
|
|
9
|
+
import { Database } from "./database.js";
|
|
10
|
+
// ---------------------------------------------------------------------------
|
|
11
|
+
// Shared plugin
|
|
12
|
+
// ---------------------------------------------------------------------------
|
|
13
|
+
const plugin = Database.Plugin.create({
|
|
14
|
+
components: {
|
|
15
|
+
x: { type: "number", default: 0 },
|
|
16
|
+
label: { type: "string" },
|
|
17
|
+
},
|
|
18
|
+
resources: {
|
|
19
|
+
score: { default: 0 },
|
|
20
|
+
banner: { default: "", ephemeral: true },
|
|
21
|
+
},
|
|
22
|
+
archetypes: {
|
|
23
|
+
Point: ["x", "label"],
|
|
24
|
+
},
|
|
25
|
+
transactions: {
|
|
26
|
+
addPoint(s, args) {
|
|
27
|
+
return s.archetypes.Point.insert(args);
|
|
28
|
+
},
|
|
29
|
+
bumpScore(s, args) {
|
|
30
|
+
s.resources.score = s.resources.score + args.delta;
|
|
31
|
+
},
|
|
32
|
+
setBanner(s, args) {
|
|
33
|
+
s.resources.banner = args.text;
|
|
34
|
+
},
|
|
35
|
+
deletePoint(s, args) {
|
|
36
|
+
s.delete(args.entity);
|
|
37
|
+
},
|
|
38
|
+
},
|
|
39
|
+
});
|
|
40
|
+
const makeFresh = () => Database.create(plugin);
|
|
41
|
+
// ---------------------------------------------------------------------------
|
|
42
|
+
// Helpers
|
|
43
|
+
// ---------------------------------------------------------------------------
|
|
44
|
+
const entityCount = (db) => db.select(["x", "label"]).length;
|
|
45
|
+
// ---------------------------------------------------------------------------
|
|
46
|
+
// Reset equivalence
|
|
47
|
+
// ---------------------------------------------------------------------------
|
|
48
|
+
describe("Database.reset()", () => {
|
|
49
|
+
it("select returns 0 entities after reset", () => {
|
|
50
|
+
const db = makeFresh();
|
|
51
|
+
db.transactions.addPoint({ x: 1, label: "a" });
|
|
52
|
+
db.transactions.addPoint({ x: 2, label: "b" });
|
|
53
|
+
expect(entityCount(db)).toBe(2);
|
|
54
|
+
db.reset();
|
|
55
|
+
expect(entityCount(db)).toBe(0);
|
|
56
|
+
});
|
|
57
|
+
it("resources revert to plugin defaults after reset", () => {
|
|
58
|
+
const db = makeFresh();
|
|
59
|
+
db.transactions.bumpScore({ delta: 42 });
|
|
60
|
+
db.transactions.setBanner({ text: "hello" });
|
|
61
|
+
expect(db.resources.score).toBe(42);
|
|
62
|
+
expect(db.resources.banner).toBe("hello");
|
|
63
|
+
db.reset();
|
|
64
|
+
expect(db.resources.score).toBe(0);
|
|
65
|
+
expect(db.resources.banner).toBe("");
|
|
66
|
+
});
|
|
67
|
+
it("resources and entity count match a fresh database after reset", () => {
|
|
68
|
+
const fresh = makeFresh();
|
|
69
|
+
const mutated = makeFresh();
|
|
70
|
+
mutated.transactions.addPoint({ x: 5, label: "x" });
|
|
71
|
+
mutated.transactions.bumpScore({ delta: 7 });
|
|
72
|
+
mutated.reset();
|
|
73
|
+
// Logical state matches — raw column buffers may retain stale bytes
|
|
74
|
+
// beyond rowCount (zeroing would be O(capacity), not O(archetypes)).
|
|
75
|
+
expect(entityCount(mutated)).toBe(entityCount(fresh));
|
|
76
|
+
expect(mutated.resources.score).toBe(fresh.resources.score);
|
|
77
|
+
expect(mutated.resources.banner).toBe(fresh.resources.banner);
|
|
78
|
+
});
|
|
79
|
+
it("is idempotent (double reset is a no-op)", () => {
|
|
80
|
+
const db = makeFresh();
|
|
81
|
+
db.transactions.addPoint({ x: 1, label: "a" });
|
|
82
|
+
db.reset();
|
|
83
|
+
db.reset();
|
|
84
|
+
expect(entityCount(db)).toBe(0);
|
|
85
|
+
expect(db.resources.score).toBe(0);
|
|
86
|
+
expect(db.resources.banner).toBe("");
|
|
87
|
+
});
|
|
88
|
+
it("new entities can be inserted after reset and entity IDs restart", () => {
|
|
89
|
+
const db = makeFresh();
|
|
90
|
+
const e1 = db.transactions.addPoint({ x: 1, label: "old" });
|
|
91
|
+
db.reset();
|
|
92
|
+
const e2 = db.transactions.addPoint({ x: 2, label: "new" });
|
|
93
|
+
expect(db.read(e2)?.label).toBe("new");
|
|
94
|
+
// entity IDs restart from the same base, so e2 should equal e1
|
|
95
|
+
expect(e2).toBe(e1);
|
|
96
|
+
expect(entityCount(db)).toBe(1);
|
|
97
|
+
});
|
|
98
|
+
it("transactions continue to work normally after reset", () => {
|
|
99
|
+
const db = makeFresh();
|
|
100
|
+
db.transactions.addPoint({ x: 9, label: "pre" });
|
|
101
|
+
db.reset();
|
|
102
|
+
db.transactions.addPoint({ x: 3, label: "post" });
|
|
103
|
+
db.transactions.bumpScore({ delta: 5 });
|
|
104
|
+
expect(entityCount(db)).toBe(1);
|
|
105
|
+
expect(db.resources.score).toBe(5);
|
|
106
|
+
});
|
|
107
|
+
});
|
|
108
|
+
// ---------------------------------------------------------------------------
|
|
109
|
+
// Observer fan-out
|
|
110
|
+
// ---------------------------------------------------------------------------
|
|
111
|
+
describe("Database.reset() — observer notification", () => {
|
|
112
|
+
it("resource observer fires after reset and sees default value", () => {
|
|
113
|
+
const db = makeFresh();
|
|
114
|
+
db.transactions.bumpScore({ delta: 10 });
|
|
115
|
+
const observed = [];
|
|
116
|
+
const unsub = db.observe.resources.score((v) => observed.push(v));
|
|
117
|
+
// initial callback
|
|
118
|
+
expect(observed).toEqual([10]);
|
|
119
|
+
db.reset();
|
|
120
|
+
// must fire again with default
|
|
121
|
+
expect(observed.at(-1)).toBe(0);
|
|
122
|
+
unsub();
|
|
123
|
+
});
|
|
124
|
+
it("ephemeral resource observer fires after reset", () => {
|
|
125
|
+
const db = makeFresh();
|
|
126
|
+
db.transactions.setBanner({ text: "hi" });
|
|
127
|
+
const observed = [];
|
|
128
|
+
const unsub = db.observe.resources.banner((v) => observed.push(v));
|
|
129
|
+
expect(observed).toEqual(["hi"]);
|
|
130
|
+
db.reset();
|
|
131
|
+
expect(observed.at(-1)).toBe("");
|
|
132
|
+
unsub();
|
|
133
|
+
});
|
|
134
|
+
it("entity observer fires null after reset for entities that no longer exist", () => {
|
|
135
|
+
const db = makeFresh();
|
|
136
|
+
const entity = db.transactions.addPoint({ x: 1, label: "a" });
|
|
137
|
+
const observed = [];
|
|
138
|
+
const unsub = db.observe.entity(entity)((v) => observed.push(v));
|
|
139
|
+
expect(observed.at(-1)).not.toBeNull();
|
|
140
|
+
db.reset();
|
|
141
|
+
expect(observed.at(-1)).toBeNull();
|
|
142
|
+
unsub();
|
|
143
|
+
});
|
|
144
|
+
it("component observer fires after reset", () => {
|
|
145
|
+
const db = makeFresh();
|
|
146
|
+
const fn = vi.fn();
|
|
147
|
+
const unsub = db.observe.components.x(fn);
|
|
148
|
+
db.transactions.addPoint({ x: 1, label: "a" });
|
|
149
|
+
fn.mockClear();
|
|
150
|
+
db.reset();
|
|
151
|
+
expect(fn).toHaveBeenCalled();
|
|
152
|
+
unsub();
|
|
153
|
+
});
|
|
154
|
+
});
|
|
155
|
+
// ---------------------------------------------------------------------------
|
|
156
|
+
// Reconciler transient queue cleared
|
|
157
|
+
// ---------------------------------------------------------------------------
|
|
158
|
+
describe("Database.reset() — reconciler queue", () => {
|
|
159
|
+
it("in-flight transients are discarded on reset", () => {
|
|
160
|
+
const db = Database.create(plugin, { sync: { userId: "u1" } });
|
|
161
|
+
// In sync mode, transactions apply as transients locally.
|
|
162
|
+
db.transactions.addPoint({ x: 1, label: "transient" });
|
|
163
|
+
expect(entityCount(db)).toBe(1);
|
|
164
|
+
db.reset();
|
|
165
|
+
expect(entityCount(db)).toBe(0);
|
|
166
|
+
// After reset, a fresh apply with the same transaction id should behave
|
|
167
|
+
// as if it were a first-time application.
|
|
168
|
+
db.apply({ id: 1, name: "addPoint", args: { x: 2, label: "from-apply" }, time: 1 });
|
|
169
|
+
expect(entityCount(db)).toBe(1);
|
|
170
|
+
expect(db.select(["label"])[0]).toBeDefined();
|
|
171
|
+
});
|
|
172
|
+
});
|
|
173
|
+
// ---------------------------------------------------------------------------
|
|
174
|
+
// Performance: O(archetypes) not O(entities)
|
|
175
|
+
// ---------------------------------------------------------------------------
|
|
176
|
+
describe("Database.reset() — performance", () => {
|
|
177
|
+
it("reset 10k entities faster than proportional construction time", () => {
|
|
178
|
+
const db = makeFresh();
|
|
179
|
+
for (let i = 0; i < 10_000; i++) {
|
|
180
|
+
db.transactions.addPoint({ x: i, label: String(i) });
|
|
181
|
+
}
|
|
182
|
+
const t0 = performance.now();
|
|
183
|
+
db.reset();
|
|
184
|
+
const resetMs = performance.now() - t0;
|
|
185
|
+
// Build a fresh DB as baseline — reset must be at least 10x faster per entity
|
|
186
|
+
const t1 = performance.now();
|
|
187
|
+
const fresh = makeFresh();
|
|
188
|
+
const constructMs = performance.now() - t1;
|
|
189
|
+
_ = fresh;
|
|
190
|
+
// Reset should take well under 10 ms regardless of entity count.
|
|
191
|
+
// (Construction of an empty DB is sub-millisecond; 10x still << 10 ms.)
|
|
192
|
+
expect(resetMs).toBeLessThan(10);
|
|
193
|
+
// Sanity: reset should be faster than inserting even one entity-worth
|
|
194
|
+
// of work relative to construction * 10k.
|
|
195
|
+
expect(resetMs).toBeLessThan(constructMs * 10_000);
|
|
196
|
+
});
|
|
197
|
+
});
|
|
198
|
+
// Suppress unused-variable lint for the fresh db in the perf test.
|
|
199
|
+
let _;
|
|
200
|
+
//# sourceMappingURL=database.reset.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"database.reset.test.js","sourceRoot":"","sources":["../../../src/ecs/database/database.reset.test.ts"],"names":[],"mappings":"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"}
|