@adobe/data 0.9.56 → 0.9.57
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 +50 -1
- 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 +15 -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
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"functions.test.js","sourceRoot":"","sources":["../../../src/cache/functions/functions.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
import { Observe } from "../../observe/index.js";
|
|
2
|
-
import { StringKeyof } from "../../types/types.js";
|
|
3
|
-
import { RequiredComponents } from "../required-components.js";
|
|
4
|
-
import { Components } from "../store/components.js";
|
|
5
|
-
import { EntitySelectOptions } from "../store/entity-select-options.js";
|
|
6
|
-
import { Database } from "./database.js";
|
|
7
|
-
/**
|
|
8
|
-
* Entity data shape returned by observeSelectDeep.
|
|
9
|
-
* Includes required components (id) and each queried component with its correct type.
|
|
10
|
-
*/
|
|
11
|
-
export type SelectDeepEntityData<C, Include extends StringKeyof<C>> = RequiredComponents & {
|
|
12
|
-
readonly [K in Include]: C[K];
|
|
13
|
-
};
|
|
14
|
-
/**
|
|
15
|
-
* Deeply observe entity data for an archetype query.
|
|
16
|
-
*
|
|
17
|
-
* Unlike `db.observe.select` (which returns entity IDs and only triggers on
|
|
18
|
-
* set membership changes), `observeSelectDeep` returns full typed entity data
|
|
19
|
-
* and re-emits whenever ANY included component value changes on any matched entity.
|
|
20
|
-
*
|
|
21
|
-
* This IS NOT an efficient pattern, so use sparingly and with small number of entities.
|
|
22
|
-
*/
|
|
23
|
-
export declare const observeSelectDeep: <C extends Components, Include extends StringKeyof<C>>(db: Database<C, any, any, any, any, any, any, any>, include: readonly Include[], options?: EntitySelectOptions<C, Pick<C & RequiredComponents, Include>>) => Observe<readonly SelectDeepEntityData<C, Include>[]>;
|
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
// © 2026 Adobe. MIT License. See /LICENSE for details.
|
|
2
|
-
/**
|
|
3
|
-
* Deeply observe entity data for an archetype query.
|
|
4
|
-
*
|
|
5
|
-
* Unlike `db.observe.select` (which returns entity IDs and only triggers on
|
|
6
|
-
* set membership changes), `observeSelectDeep` returns full typed entity data
|
|
7
|
-
* and re-emits whenever ANY included component value changes on any matched entity.
|
|
8
|
-
*
|
|
9
|
-
* This IS NOT an efficient pattern, so use sparingly and with small number of entities.
|
|
10
|
-
*/
|
|
11
|
-
export const observeSelectDeep = (db, include, options) => {
|
|
12
|
-
// TODO: implementation — returns a stub for now so the type signature compiles.
|
|
13
|
-
return (_notify) => () => { };
|
|
14
|
-
};
|
|
15
|
-
//# sourceMappingURL=observe-select-deep.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"observe-select-deep.js","sourceRoot":"","sources":["../../../src/ecs/database/observe-select-deep.ts"],"names":[],"mappings":"AAAA,uDAAuD;AAkBvD;;;;;;;;GAQG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAI/B,EAAkD,EAClD,OAA2B,EAC3B,OAAuE,EACjB,EAAE;IACxD,gFAAgF;IAChF,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;AAChC,CAAC,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export {};
|
|
@@ -1,111 +0,0 @@
|
|
|
1
|
-
// © 2026 Adobe. MIT License. See /LICENSE for details.
|
|
2
|
-
import { Database } from "./database.js";
|
|
3
|
-
import { observeSelectDeep } from "./observe-select-deep.js";
|
|
4
|
-
/**
|
|
5
|
-
* Type-only tests for observeSelectDeep type inference.
|
|
6
|
-
*
|
|
7
|
-
* These tests verify that:
|
|
8
|
-
* 1. observeSelectDeep infers entity data types from included components
|
|
9
|
-
* 2. Only queried components appear in the result type
|
|
10
|
-
* 3. RequiredComponents (id) is always included
|
|
11
|
-
* 4. The helper type SelectDeepEntityData resolves correctly
|
|
12
|
-
*
|
|
13
|
-
* Note: These are compile-time type checks only — they don't need to execute.
|
|
14
|
-
*/
|
|
15
|
-
// ============================================================================
|
|
16
|
-
// SelectDeepEntityData HELPER TYPE
|
|
17
|
-
// ============================================================================
|
|
18
|
-
function testSelectDeepEntityDataType() {
|
|
19
|
-
}
|
|
20
|
-
// ============================================================================
|
|
21
|
-
// BASIC INFERENCE FROM DATABASE
|
|
22
|
-
// ============================================================================
|
|
23
|
-
function testObserveSelectDeepBasicInference() {
|
|
24
|
-
const plugin = Database.Plugin.create({
|
|
25
|
-
components: {
|
|
26
|
-
position: { type: "number" },
|
|
27
|
-
velocity: { type: "number" },
|
|
28
|
-
name: { type: "string" },
|
|
29
|
-
},
|
|
30
|
-
archetypes: {
|
|
31
|
-
Moving: ["position", "velocity"],
|
|
32
|
-
},
|
|
33
|
-
});
|
|
34
|
-
const db = Database.create(plugin);
|
|
35
|
-
// Querying position and velocity should infer correct entity data
|
|
36
|
-
const observed = observeSelectDeep(db, ["position", "velocity"]);
|
|
37
|
-
}
|
|
38
|
-
// ============================================================================
|
|
39
|
-
// SINGLE COMPONENT QUERY
|
|
40
|
-
// ============================================================================
|
|
41
|
-
function testObserveSelectDeepSingleComponent() {
|
|
42
|
-
const plugin = Database.Plugin.create({
|
|
43
|
-
components: {
|
|
44
|
-
position: { type: "number" },
|
|
45
|
-
name: { type: "string" },
|
|
46
|
-
},
|
|
47
|
-
});
|
|
48
|
-
const db = Database.create(plugin);
|
|
49
|
-
// Querying only name should produce id + name
|
|
50
|
-
const observed = observeSelectDeep(db, ["name"]);
|
|
51
|
-
}
|
|
52
|
-
// ============================================================================
|
|
53
|
-
// INVALID COMPONENT NAMES REJECTED
|
|
54
|
-
// ============================================================================
|
|
55
|
-
function testObserveSelectDeepRejectsInvalidComponents() {
|
|
56
|
-
const plugin = Database.Plugin.create({
|
|
57
|
-
components: {
|
|
58
|
-
position: { type: "number" },
|
|
59
|
-
},
|
|
60
|
-
});
|
|
61
|
-
const db = Database.create(plugin);
|
|
62
|
-
// @ts-expect-error - "nonexistent" is not a valid component name
|
|
63
|
-
observeSelectDeep(db, ["nonexistent"]);
|
|
64
|
-
}
|
|
65
|
-
// ============================================================================
|
|
66
|
-
// WITH OPTIONS (where/order)
|
|
67
|
-
// ============================================================================
|
|
68
|
-
function testObserveSelectDeepWithOptions() {
|
|
69
|
-
const plugin = Database.Plugin.create({
|
|
70
|
-
components: {
|
|
71
|
-
position: { type: "number" },
|
|
72
|
-
velocity: { type: "number" },
|
|
73
|
-
name: { type: "string" },
|
|
74
|
-
},
|
|
75
|
-
archetypes: {
|
|
76
|
-
Moving: ["position", "velocity"],
|
|
77
|
-
},
|
|
78
|
-
});
|
|
79
|
-
const db = Database.create(plugin);
|
|
80
|
-
// Should accept where/order options scoped to included components
|
|
81
|
-
const observed = observeSelectDeep(db, ["position", "velocity"], {
|
|
82
|
-
where: { position: { ">": 0 } },
|
|
83
|
-
order: { velocity: true },
|
|
84
|
-
});
|
|
85
|
-
}
|
|
86
|
-
// ============================================================================
|
|
87
|
-
// EXTENDED PLUGIN INFERENCE
|
|
88
|
-
// ============================================================================
|
|
89
|
-
function testObserveSelectDeepWithExtendedPlugin() {
|
|
90
|
-
const basePlugin = Database.Plugin.create({
|
|
91
|
-
components: {
|
|
92
|
-
position: { type: "number" },
|
|
93
|
-
},
|
|
94
|
-
archetypes: {
|
|
95
|
-
Positioned: ["position"],
|
|
96
|
-
},
|
|
97
|
-
});
|
|
98
|
-
const extendedPlugin = Database.Plugin.create({
|
|
99
|
-
extends: basePlugin,
|
|
100
|
-
components: {
|
|
101
|
-
velocity: { type: "number" },
|
|
102
|
-
},
|
|
103
|
-
archetypes: {
|
|
104
|
-
Moving: ["position", "velocity"],
|
|
105
|
-
},
|
|
106
|
-
});
|
|
107
|
-
const db = Database.create(extendedPlugin);
|
|
108
|
-
// Should work with components from both base and extended plugins
|
|
109
|
-
const observed = observeSelectDeep(db, ["position", "velocity"]);
|
|
110
|
-
}
|
|
111
|
-
//# sourceMappingURL=observe-select-deep.type-test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"observe-select-deep.type-test.js","sourceRoot":"","sources":["../../../src/ecs/database/observe-select-deep.type-test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export {};
|
|
@@ -1,67 +0,0 @@
|
|
|
1
|
-
// © 2026 Adobe. MIT License. See /LICENSE for details.
|
|
2
|
-
import { describe, it, expect, vi, beforeEach, afterEach } from "vitest";
|
|
3
|
-
import { Database } from "../database.js";
|
|
4
|
-
import { scheduler } from "../../plugins/scheduler/scheduler.js";
|
|
5
|
-
describe("createDatabase with scheduler plugin extension", () => {
|
|
6
|
-
beforeEach(() => {
|
|
7
|
-
vi.useFakeTimers();
|
|
8
|
-
});
|
|
9
|
-
afterEach(() => {
|
|
10
|
-
vi.restoreAllMocks();
|
|
11
|
-
});
|
|
12
|
-
it("should have all systems in functions when scheduler executes", async () => {
|
|
13
|
-
// This test reproduces the bug: when a plugin extends scheduler,
|
|
14
|
-
// the scheduler's executeFrame is called immediately during system creation,
|
|
15
|
-
// but db.system.functions is still empty at that point because it's only
|
|
16
|
-
// populated after all systems are created. This causes the error:
|
|
17
|
-
// "db.system.functions[name] is not a function"
|
|
18
|
-
const basePlugin = scheduler;
|
|
19
|
-
const extendedPlugin = Database.Plugin.create({
|
|
20
|
-
extends: basePlugin,
|
|
21
|
-
transactions: {
|
|
22
|
-
stopScheduler(store) {
|
|
23
|
-
store.resources.schedulerState = "disposed";
|
|
24
|
-
}
|
|
25
|
-
},
|
|
26
|
-
systems: {
|
|
27
|
-
testSystem: {
|
|
28
|
-
create: (db) => () => {
|
|
29
|
-
// Test system
|
|
30
|
-
}
|
|
31
|
-
}
|
|
32
|
-
},
|
|
33
|
-
});
|
|
34
|
-
// The bug: Database.create should not throw even though scheduler
|
|
35
|
-
// executeFrame is called during system initialization
|
|
36
|
-
const db = Database.create(extendedPlugin);
|
|
37
|
-
// Verify all systems are in functions (this should pass after fix)
|
|
38
|
-
const allSystemNames = new Set();
|
|
39
|
-
for (const tier of db.system.order) {
|
|
40
|
-
for (const name of tier) {
|
|
41
|
-
allSystemNames.add(name);
|
|
42
|
-
}
|
|
43
|
-
}
|
|
44
|
-
// Check that all systems in order exist in functions
|
|
45
|
-
for (const name of allSystemNames) {
|
|
46
|
-
expect(db.system.functions[name]).toBeDefined();
|
|
47
|
-
expect(typeof db.system.functions[name]).toBe("function");
|
|
48
|
-
}
|
|
49
|
-
// Also verify the reverse: all functions are in the order
|
|
50
|
-
const functionNames = new Set(Object.keys(db.system.functions));
|
|
51
|
-
const orderNames = new Set();
|
|
52
|
-
for (const tier of db.system.order) {
|
|
53
|
-
for (const name of tier) {
|
|
54
|
-
orderNames.add(name);
|
|
55
|
-
}
|
|
56
|
-
}
|
|
57
|
-
// All functions should be in order
|
|
58
|
-
for (const name of functionNames) {
|
|
59
|
-
expect(orderNames.has(name)).toBe(true);
|
|
60
|
-
}
|
|
61
|
-
// Stop the scheduler
|
|
62
|
-
db.transactions.stopScheduler();
|
|
63
|
-
// Advance timers to let any pending RAF callbacks execute
|
|
64
|
-
await vi.runAllTimersAsync();
|
|
65
|
-
});
|
|
66
|
-
});
|
|
67
|
-
//# sourceMappingURL=create-database-scheduler.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"create-database-scheduler.test.js","sourceRoot":"","sources":["../../../../src/ecs/database/public/create-database-scheduler.test.ts"],"names":[],"mappings":"AAAA,uDAAuD;AAEvD,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AACzE,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,EAAE,SAAS,EAAE,MAAM,sCAAsC,CAAC;AAEjE,QAAQ,CAAC,gDAAgD,EAAE,GAAG,EAAE;IAC5D,UAAU,CAAC,GAAG,EAAE;QACZ,EAAE,CAAC,aAAa,EAAE,CAAC;IACvB,CAAC,CAAC,CAAC;IAEH,SAAS,CAAC,GAAG,EAAE;QACX,EAAE,CAAC,eAAe,EAAE,CAAC;IACzB,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,8DAA8D,EAAE,KAAK,IAAI,EAAE;QAC1E,iEAAiE;QACjE,6EAA6E;QAC7E,yEAAyE;QACzE,kEAAkE;QAClE,gDAAgD;QAEhD,MAAM,UAAU,GAAG,SAAS,CAAC;QAE7B,MAAM,cAAc,GAAG,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC;YAC1C,OAAO,EAAE,UAAU;YACnB,YAAY,EAAE;gBACV,aAAa,CAAC,KAAK;oBACf,KAAK,CAAC,SAAS,CAAC,cAAc,GAAG,UAAU,CAAC;gBAChD,CAAC;aACJ;YACD,OAAO,EAAE;gBACL,UAAU,EAAE;oBACR,MAAM,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,GAAG,EAAE;wBACjB,cAAc;oBAClB,CAAC;iBACJ;aACJ;SACJ,CAAC,CAAC;QAEH,kEAAkE;QAClE,sDAAsD;QACtD,MAAM,EAAE,GAAG,QAAQ,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC;QAE3C,mEAAmE;QACnE,MAAM,cAAc,GAAG,IAAI,GAAG,EAAU,CAAC;QACzC,KAAK,MAAM,IAAI,IAAI,EAAE,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;YACjC,KAAK,MAAM,IAAI,IAAI,IAAI,EAAE,CAAC;gBACtB,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YAC7B,CAAC;QACL,CAAC;QAED,qDAAqD;QACrD,KAAK,MAAM,IAAI,IAAI,cAAc,EAAE,CAAC;YAChC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,SAAS,CAAC,IAAwC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;YACpF,MAAM,CAAC,OAAO,EAAE,CAAC,MAAM,CAAC,SAAS,CAAC,IAAwC,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAClG,CAAC;QAED,0DAA0D;QAC1D,MAAM,aAAa,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC;QAChE,MAAM,UAAU,GAAG,IAAI,GAAG,EAAU,CAAC;QACrC,KAAK,MAAM,IAAI,IAAI,EAAE,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;YACjC,KAAK,MAAM,IAAI,IAAI,IAAI,EAAE,CAAC;gBACtB,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YACzB,CAAC;QACL,CAAC;QAED,mCAAmC;QACnC,KAAK,MAAM,IAAI,IAAI,aAAa,EAAE,CAAC;YAC/B,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC5C,CAAC;QAED,qBAAqB;QACrB,EAAE,CAAC,YAAY,CAAC,aAAa,EAAE,CAAC;QAEhC,0DAA0D;QAC1D,MAAM,EAAE,CAAC,iBAAiB,EAAE,CAAC;IACjC,CAAC,CAAC,CAAC;AACP,CAAC,CAAC,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export {};
|
|
@@ -1,52 +0,0 @@
|
|
|
1
|
-
// Temporary type verification — delete after confirming.
|
|
2
|
-
// Positive tests: valid usages that should compile.
|
|
3
|
-
// Negative tests: invalid usages that should produce type errors (marked with @ts-expect-error).
|
|
4
|
-
import { Database } from "../database.js";
|
|
5
|
-
const pluginWithServices = Database.Plugin.create({
|
|
6
|
-
services: {
|
|
7
|
-
auth: (_db) => ({ token: 'abc', isAuthenticated: true }),
|
|
8
|
-
config: (_db) => ({ apiUrl: 'https://example.com', debug: false }),
|
|
9
|
-
},
|
|
10
|
-
});
|
|
11
|
-
// --- Positive: no options ---
|
|
12
|
-
const db1 = Database.create(pluginWithServices);
|
|
13
|
-
db1.services.auth.token;
|
|
14
|
-
db1.services.config.apiUrl;
|
|
15
|
-
// --- Positive: empty options ---
|
|
16
|
-
const db2 = Database.create(pluginWithServices, {});
|
|
17
|
-
// --- Positive: override one service with correct type ---
|
|
18
|
-
const db3 = Database.create(pluginWithServices, {
|
|
19
|
-
services: { auth: { token: 'override', isAuthenticated: false } },
|
|
20
|
-
});
|
|
21
|
-
db3.services.auth.token;
|
|
22
|
-
// --- Positive: override both services ---
|
|
23
|
-
const db4 = Database.create(pluginWithServices, {
|
|
24
|
-
services: {
|
|
25
|
-
auth: { token: 'x', isAuthenticated: true },
|
|
26
|
-
config: { apiUrl: 'https://other.com', debug: true },
|
|
27
|
-
},
|
|
28
|
-
});
|
|
29
|
-
// --- Positive: no-arg call still works ---
|
|
30
|
-
const db5 = Database.create();
|
|
31
|
-
// --- Negative: wrong value type for an overridden service ---
|
|
32
|
-
const db6 = Database.create(pluginWithServices, {
|
|
33
|
-
services: {
|
|
34
|
-
// @ts-expect-error — token should be string, not number
|
|
35
|
-
auth: { token: 123, isAuthenticated: false },
|
|
36
|
-
},
|
|
37
|
-
});
|
|
38
|
-
// --- Negative: unknown service key ---
|
|
39
|
-
const db7 = Database.create(pluginWithServices, {
|
|
40
|
-
services: {
|
|
41
|
-
// @ts-expect-error — 'nonexistent' is not a declared service
|
|
42
|
-
nonexistent: { foo: 'bar' },
|
|
43
|
-
},
|
|
44
|
-
});
|
|
45
|
-
// --- Negative: missing required property in override ---
|
|
46
|
-
const db8 = Database.create(pluginWithServices, {
|
|
47
|
-
services: {
|
|
48
|
-
// @ts-expect-error — missing isAuthenticated
|
|
49
|
-
auth: { token: 'x' },
|
|
50
|
-
},
|
|
51
|
-
});
|
|
52
|
-
//# sourceMappingURL=create-database.type-test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"create-database.type-test.js","sourceRoot":"","sources":["../../../../src/ecs/database/public/create-database.type-test.ts"],"names":[],"mappings":"AAAA,yDAAyD;AACzD,oDAAoD;AACpD,iGAAiG;AAEjG,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAE1C,MAAM,kBAAkB,GAAG,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC;IAC9C,QAAQ,EAAE;QACN,IAAI,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,eAAe,EAAE,IAAI,EAAE,CAAC;QACxD,MAAM,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,qBAAqB,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC;KACrE;CACJ,CAAC,CAAC;AAEH,+BAA+B;AAC/B,MAAM,GAAG,GAAG,QAAQ,CAAC,MAAM,CAAC,kBAAkB,CAAC,CAAC;AAChD,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAsB,CAAC;AACzC,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAuB,CAAC;AAE5C,kCAAkC;AAClC,MAAM,GAAG,GAAG,QAAQ,CAAC,MAAM,CAAC,kBAAkB,EAAE,EAAE,CAAC,CAAC;AAEpD,2DAA2D;AAC3D,MAAM,GAAG,GAAG,QAAQ,CAAC,MAAM,CAAC,kBAAkB,EAAE;IAC5C,QAAQ,EAAE,EAAE,IAAI,EAAE,EAAE,KAAK,EAAE,UAAU,EAAE,eAAe,EAAE,KAAK,EAAE,EAAE;CACpE,CAAC,CAAC;AACH,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAsB,CAAC;AAEzC,2CAA2C;AAC3C,MAAM,GAAG,GAAG,QAAQ,CAAC,MAAM,CAAC,kBAAkB,EAAE;IAC5C,QAAQ,EAAE;QACN,IAAI,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,eAAe,EAAE,IAAI,EAAE;QAC3C,MAAM,EAAE,EAAE,MAAM,EAAE,mBAAmB,EAAE,KAAK,EAAE,IAAI,EAAE;KACvD;CACJ,CAAC,CAAC;AAEH,4CAA4C;AAC5C,MAAM,GAAG,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC;AAE9B,+DAA+D;AAC/D,MAAM,GAAG,GAAG,QAAQ,CAAC,MAAM,CAAC,kBAAkB,EAAE;IAC5C,QAAQ,EAAE;QACN,wDAAwD;QACxD,IAAI,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,eAAe,EAAE,KAAK,EAAE;KAC/C;CACJ,CAAC,CAAC;AAEH,wCAAwC;AACxC,MAAM,GAAG,GAAG,QAAQ,CAAC,MAAM,CAAC,kBAAkB,EAAE;IAC5C,QAAQ,EAAE;QACN,6DAA6D;QAC7D,WAAW,EAAE,EAAE,GAAG,EAAE,KAAK,EAAE;KAC9B;CACJ,CAAC,CAAC;AAEH,0DAA0D;AAC1D,MAAM,GAAG,GAAG,QAAQ,CAAC,MAAM,CAAC,kBAAkB,EAAE;IAC5C,QAAQ,EAAE;QACN,6CAA6C;QAC7C,IAAI,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE;KACvB;CACJ,CAAC,CAAC"}
|
package/dist/ecs/entity.d.ts
DELETED
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
import { Schema } from "../schema/index.js";
|
|
2
|
-
export type Entity = Schema.ToType<typeof Entity.schema>;
|
|
3
|
-
export declare namespace Entity {
|
|
4
|
-
const schema: {
|
|
5
|
-
readonly type: "integer";
|
|
6
|
-
readonly minimum: -2147483648;
|
|
7
|
-
readonly maximum: 2147483647;
|
|
8
|
-
readonly default: number;
|
|
9
|
-
};
|
|
10
|
-
const isEphemeral: (entity: Entity) => boolean;
|
|
11
|
-
}
|
package/dist/ecs/entity.js
DELETED
package/dist/ecs/entity.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"entity.js","sourceRoot":"","sources":["../../src/ecs/entity.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,GAAG,EAAE,MAAM,sBAAsB,CAAC;AAG3C,MAAM,KAAW,MAAM,CAGtB;AAHD,WAAiB,MAAM;IACN,aAAM,GAAG,GAAG,CAAC,MAAM,CAAC;IACpB,kBAAW,GAAG,CAAC,MAAc,EAAW,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC;AACvE,CAAC,EAHgB,MAAM,KAAN,MAAM,QAGtB"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export {};
|
|
@@ -1,52 +0,0 @@
|
|
|
1
|
-
// © 2026 Adobe. MIT License. See /LICENSE for details.
|
|
2
|
-
import { describe, it, expect, vi, beforeEach, afterEach } from "vitest";
|
|
3
|
-
import { createStoragePersistenceService } from "./create-storage-persistence-service.js";
|
|
4
|
-
import { Database } from "../index.js";
|
|
5
|
-
function createMinimalDatabase() {
|
|
6
|
-
return Database.create(Database.Plugin.create({
|
|
7
|
-
components: {
|
|
8
|
-
n: { type: "number" },
|
|
9
|
-
},
|
|
10
|
-
archetypes: { N: ["n"] },
|
|
11
|
-
transactions: {
|
|
12
|
-
tick(t, _args) {
|
|
13
|
-
t.archetypes.N.insert({ n: 0 });
|
|
14
|
-
},
|
|
15
|
-
},
|
|
16
|
-
}));
|
|
17
|
-
}
|
|
18
|
-
describe("createStoragePersistenceService", () => {
|
|
19
|
-
describe("autoSaveOnChange with rapid transactions", () => {
|
|
20
|
-
beforeEach(() => {
|
|
21
|
-
vi.useFakeTimers();
|
|
22
|
-
});
|
|
23
|
-
afterEach(() => {
|
|
24
|
-
vi.useRealTimers();
|
|
25
|
-
});
|
|
26
|
-
it("given rapid non-transient transactions, invokes save once after debounce window (debounced)", async () => {
|
|
27
|
-
let saveInvokeCount = 0;
|
|
28
|
-
const database = createMinimalDatabase();
|
|
29
|
-
const service = await createStoragePersistenceService({
|
|
30
|
-
database,
|
|
31
|
-
defaultFileId: "test-id",
|
|
32
|
-
autoSaveOnChange: true,
|
|
33
|
-
autoLoadOnStart: false,
|
|
34
|
-
});
|
|
35
|
-
const originalSave = service.save;
|
|
36
|
-
Object.assign(service, {
|
|
37
|
-
save: async (fileId) => {
|
|
38
|
-
saveInvokeCount++;
|
|
39
|
-
return originalSave.call(service, fileId);
|
|
40
|
-
},
|
|
41
|
-
});
|
|
42
|
-
const transactionCount = 5;
|
|
43
|
-
for (let i = 0; i < transactionCount; i++) {
|
|
44
|
-
database.transactions.tick({});
|
|
45
|
-
}
|
|
46
|
-
vi.advanceTimersByTime(350);
|
|
47
|
-
await vi.runAllTimersAsync();
|
|
48
|
-
expect(saveInvokeCount).toBe(1);
|
|
49
|
-
});
|
|
50
|
-
});
|
|
51
|
-
});
|
|
52
|
-
//# sourceMappingURL=create-storage-persistence-service.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"create-storage-persistence-service.test.js","sourceRoot":"","sources":["../../../src/ecs/persistence-service/create-storage-persistence-service.test.ts"],"names":[],"mappings":"AAAA,uDAAuD;AAEvD,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AACzE,OAAO,EAAE,+BAA+B,EAAE,MAAM,yCAAyC,CAAC;AAC1F,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAEvC,SAAS,qBAAqB;IAC1B,OAAO,QAAQ,CAAC,MAAM,CAClB,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC;QACnB,UAAU,EAAE;YACR,CAAC,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;SACxB;QACD,UAAU,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE;QACxB,YAAY,EAAE;YACV,IAAI,CAAC,CAAC,EAAE,KAA4B;gBAChC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;YACpC,CAAC;SACJ;KACJ,CAAC,CACL,CAAC;AACN,CAAC;AAED,QAAQ,CAAC,iCAAiC,EAAE,GAAG,EAAE;IAC7C,QAAQ,CAAC,0CAA0C,EAAE,GAAG,EAAE;QACtD,UAAU,CAAC,GAAG,EAAE;YACZ,EAAE,CAAC,aAAa,EAAE,CAAC;QACvB,CAAC,CAAC,CAAC;QAEH,SAAS,CAAC,GAAG,EAAE;YACX,EAAE,CAAC,aAAa,EAAE,CAAC;QACvB,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,6FAA6F,EAAE,KAAK,IAAI,EAAE;YACzG,IAAI,eAAe,GAAG,CAAC,CAAC;YACxB,MAAM,QAAQ,GAAG,qBAAqB,EAAE,CAAC;YACzC,MAAM,OAAO,GAAG,MAAM,+BAA+B,CAAC;gBAClD,QAAQ;gBACR,aAAa,EAAE,SAAS;gBACxB,gBAAgB,EAAE,IAAI;gBACtB,eAAe,EAAE,KAAK;aACzB,CAAC,CAAC;YACH,MAAM,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC;YAClC,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE;gBACnB,IAAI,EAAE,KAAK,EAAE,MAAe,EAAE,EAAE;oBAC5B,eAAe,EAAE,CAAC;oBAClB,OAAO,YAAY,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;gBAC9C,CAAC;aACJ,CAAC,CAAC;YAEH,MAAM,gBAAgB,GAAG,CAAC,CAAC;YAC3B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,gBAAgB,EAAE,CAAC,EAAE,EAAE,CAAC;gBACxC,QAAQ,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACnC,CAAC;YAED,EAAE,CAAC,mBAAmB,CAAC,GAAG,CAAC,CAAC;YAC5B,MAAM,EAAE,CAAC,iBAAiB,EAAE,CAAC;YAE7B,MAAM,CAAC,eAAe,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACpC,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;AACP,CAAC,CAAC,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export {};
|
|
@@ -1,161 +0,0 @@
|
|
|
1
|
-
// © 2026 Adobe. MIT License. See /LICENSE for details.
|
|
2
|
-
import { describe, it, expect, vi, beforeEach } from "vitest";
|
|
3
|
-
import { serializeToStorage, deserializeFromStorage } from "./serialize-to-storage.js";
|
|
4
|
-
import { createBlobStore } from "../../cache/blob-store.js";
|
|
5
|
-
describe("serializeToStorage", () => {
|
|
6
|
-
let mockStorage;
|
|
7
|
-
let testBlobStore;
|
|
8
|
-
beforeEach(async () => {
|
|
9
|
-
mockStorage = {
|
|
10
|
-
setItem: vi.fn(),
|
|
11
|
-
getItem: vi.fn(),
|
|
12
|
-
removeItem: vi.fn(),
|
|
13
|
-
clear: vi.fn(),
|
|
14
|
-
length: 0,
|
|
15
|
-
key: vi.fn(),
|
|
16
|
-
};
|
|
17
|
-
testBlobStore = await createBlobStore();
|
|
18
|
-
vi.clearAllMocks();
|
|
19
|
-
});
|
|
20
|
-
it("should serialize data to storage with blob references", async () => {
|
|
21
|
-
const data = {
|
|
22
|
-
message: "hello world",
|
|
23
|
-
numbers: new Uint8Array([1, 2, 3, 4, 5]),
|
|
24
|
-
coordinates: new Float32Array([10.5, 20.3])
|
|
25
|
-
};
|
|
26
|
-
// Use the real blobStore to get actual references
|
|
27
|
-
await serializeToStorage(data, "test-id", mockStorage);
|
|
28
|
-
expect(mockStorage.setItem).toHaveBeenCalledWith("test-id", expect.any(String));
|
|
29
|
-
const storedData = JSON.parse(mockStorage.setItem.mock.calls[0][1]);
|
|
30
|
-
expect(storedData).toHaveProperty("json");
|
|
31
|
-
expect(storedData).toHaveProperty("binary");
|
|
32
|
-
expect(storedData.json).toHaveProperty("localBlobRef");
|
|
33
|
-
expect(storedData.binary).toHaveProperty("localBlobRef");
|
|
34
|
-
});
|
|
35
|
-
it("should use sessionStorage by default", async () => {
|
|
36
|
-
const data = { test: "data" };
|
|
37
|
-
await serializeToStorage(data, "test-id");
|
|
38
|
-
// This test verifies the function doesn't throw when using default storage
|
|
39
|
-
// The actual storage interaction would be with the real sessionStorage
|
|
40
|
-
expect(true).toBe(true); // Placeholder assertion
|
|
41
|
-
});
|
|
42
|
-
});
|
|
43
|
-
describe("deserializeFromStorage", () => {
|
|
44
|
-
let mockStorage;
|
|
45
|
-
let testBlobStore;
|
|
46
|
-
beforeEach(async () => {
|
|
47
|
-
mockStorage = {
|
|
48
|
-
setItem: vi.fn(),
|
|
49
|
-
getItem: vi.fn(),
|
|
50
|
-
removeItem: vi.fn(),
|
|
51
|
-
clear: vi.fn(),
|
|
52
|
-
length: 0,
|
|
53
|
-
key: vi.fn(),
|
|
54
|
-
};
|
|
55
|
-
testBlobStore = await createBlobStore();
|
|
56
|
-
vi.clearAllMocks();
|
|
57
|
-
});
|
|
58
|
-
it("should deserialize data from storage", async () => {
|
|
59
|
-
const originalData = {
|
|
60
|
-
message: "hello world",
|
|
61
|
-
numbers: new Uint8Array([1, 2, 3, 4, 5]),
|
|
62
|
-
coordinates: new Float32Array([10.5, 20.3])
|
|
63
|
-
};
|
|
64
|
-
// First serialize the data to get real blob references
|
|
65
|
-
await serializeToStorage(originalData, "test-id", mockStorage);
|
|
66
|
-
// Get the stored data
|
|
67
|
-
const storedData = JSON.parse(mockStorage.setItem.mock.calls[0][1]);
|
|
68
|
-
// Mock the getItem to return our stored data
|
|
69
|
-
mockStorage.getItem.mockReturnValue(JSON.stringify(storedData));
|
|
70
|
-
const result = await deserializeFromStorage("test-id", mockStorage);
|
|
71
|
-
expect(mockStorage.getItem).toHaveBeenCalledWith("test-id");
|
|
72
|
-
expect(result).not.toBeNull();
|
|
73
|
-
expect(result).toEqual(originalData);
|
|
74
|
-
});
|
|
75
|
-
it("should return null when no data exists", async () => {
|
|
76
|
-
mockStorage.getItem.mockReturnValue(null);
|
|
77
|
-
const result = await deserializeFromStorage("test-id", mockStorage);
|
|
78
|
-
expect(result).toBeNull();
|
|
79
|
-
});
|
|
80
|
-
it("should return null when blob retrieval fails", async () => {
|
|
81
|
-
// Create invalid blob references
|
|
82
|
-
const invalidRefs = {
|
|
83
|
-
json: { localBlobRef: "invalid-hash" },
|
|
84
|
-
binary: { localBlobRef: "invalid-hash" }
|
|
85
|
-
};
|
|
86
|
-
mockStorage.getItem.mockReturnValue(JSON.stringify(invalidRefs));
|
|
87
|
-
const result = await deserializeFromStorage("test-id", mockStorage);
|
|
88
|
-
expect(result).toBeNull();
|
|
89
|
-
});
|
|
90
|
-
it("should use sessionStorage by default", async () => {
|
|
91
|
-
// For this test, we need to mock the real sessionStorage since the function uses it by default
|
|
92
|
-
const originalSessionStorage = globalThis.sessionStorage;
|
|
93
|
-
const mockSessionStorage = {
|
|
94
|
-
getItem: vi.fn().mockReturnValue(null),
|
|
95
|
-
setItem: vi.fn(),
|
|
96
|
-
removeItem: vi.fn(),
|
|
97
|
-
clear: vi.fn(),
|
|
98
|
-
length: 0,
|
|
99
|
-
key: vi.fn(),
|
|
100
|
-
};
|
|
101
|
-
Object.defineProperty(globalThis, 'sessionStorage', {
|
|
102
|
-
value: mockSessionStorage,
|
|
103
|
-
writable: true,
|
|
104
|
-
});
|
|
105
|
-
try {
|
|
106
|
-
await deserializeFromStorage("test-id");
|
|
107
|
-
expect(mockSessionStorage.getItem).toHaveBeenCalledWith("test-id");
|
|
108
|
-
}
|
|
109
|
-
finally {
|
|
110
|
-
Object.defineProperty(globalThis, 'sessionStorage', {
|
|
111
|
-
value: originalSessionStorage,
|
|
112
|
-
writable: true,
|
|
113
|
-
});
|
|
114
|
-
}
|
|
115
|
-
});
|
|
116
|
-
it("should handle complex nested data with all typed arrays", async () => {
|
|
117
|
-
const originalData = {
|
|
118
|
-
user: {
|
|
119
|
-
name: "John Doe",
|
|
120
|
-
scores: new Uint16Array([95, 87, 92, 88]),
|
|
121
|
-
coordinates: new Float32Array([10.5, 20.3, 30.7])
|
|
122
|
-
},
|
|
123
|
-
metadata: {
|
|
124
|
-
timestamp: 1234567890,
|
|
125
|
-
flags: new Uint8Array([1, 0, 1, 1, 0]),
|
|
126
|
-
measurements: new Float64Array([1.23456789, 2.34567890, 3.45678901])
|
|
127
|
-
}
|
|
128
|
-
};
|
|
129
|
-
// First serialize the data to get real blob references
|
|
130
|
-
await serializeToStorage(originalData, "test-id", mockStorage);
|
|
131
|
-
// Get the stored data
|
|
132
|
-
const storedData = JSON.parse(mockStorage.setItem.mock.calls[0][1]);
|
|
133
|
-
// Mock the getItem to return our stored data
|
|
134
|
-
mockStorage.getItem.mockReturnValue(JSON.stringify(storedData));
|
|
135
|
-
const result = await deserializeFromStorage("test-id", mockStorage);
|
|
136
|
-
expect(result).not.toBeNull();
|
|
137
|
-
expect(result).toEqual(originalData);
|
|
138
|
-
});
|
|
139
|
-
it("should handle all supported typed arrays", async () => {
|
|
140
|
-
const originalData = {
|
|
141
|
-
uint8Array: new Uint8Array([1, 2, 3, 4, 5]),
|
|
142
|
-
uint16Array: new Uint16Array([1000, 2000, 3000]),
|
|
143
|
-
uint32Array: new Uint32Array([1000000, 2000000]),
|
|
144
|
-
int8Array: new Int8Array([-1, -2, -3]),
|
|
145
|
-
int16Array: new Int16Array([-1000, -2000]),
|
|
146
|
-
int32Array: new Int32Array([-1000000, -2000000]),
|
|
147
|
-
float32Array: new Float32Array([1.5, 2.5, 3.5]),
|
|
148
|
-
float64Array: new Float64Array([1.123456789, 2.987654321])
|
|
149
|
-
};
|
|
150
|
-
// First serialize the data to get real blob references
|
|
151
|
-
await serializeToStorage(originalData, "test-id", mockStorage);
|
|
152
|
-
// Get the stored data
|
|
153
|
-
const storedData = JSON.parse(mockStorage.setItem.mock.calls[0][1]);
|
|
154
|
-
// Mock the getItem to return our stored data
|
|
155
|
-
mockStorage.getItem.mockReturnValue(JSON.stringify(storedData));
|
|
156
|
-
const result = await deserializeFromStorage("test-id", mockStorage);
|
|
157
|
-
expect(result).not.toBeNull();
|
|
158
|
-
expect(result).toEqual(originalData);
|
|
159
|
-
});
|
|
160
|
-
});
|
|
161
|
-
//# sourceMappingURL=serialize-to-storage.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"serialize-to-storage.test.js","sourceRoot":"","sources":["../../../src/functions/serialization/serialize-to-storage.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export {};
|
|
@@ -1,35 +0,0 @@
|
|
|
1
|
-
// © 2026 Adobe. MIT License. See /LICENSE for details.
|
|
2
|
-
import { describe, it, expect } from 'vitest';
|
|
3
|
-
import { Aabb } from '../index.js';
|
|
4
|
-
const Face = Aabb.Face;
|
|
5
|
-
describe('Aabb.Face', () => {
|
|
6
|
-
it('should get correct opposite faces', () => {
|
|
7
|
-
expect(Face.getOpposite(Face.POS_Z)).toBe(Face.NEG_Z);
|
|
8
|
-
expect(Face.getOpposite(Face.POS_X)).toBe(Face.NEG_X);
|
|
9
|
-
expect(Face.getOpposite(Face.POS_Y)).toBe(Face.NEG_Y);
|
|
10
|
-
});
|
|
11
|
-
it('should get correct adjacent faces for each axis', () => {
|
|
12
|
-
const posZAdjacent = Face.getAdjacent(Face.POS_Z);
|
|
13
|
-
expect(posZAdjacent).toEqual([Face.POS_X, Face.NEG_X, Face.POS_Y, Face.NEG_Y]);
|
|
14
|
-
const posXAdjacent = Face.getAdjacent(Face.POS_X);
|
|
15
|
-
expect(posXAdjacent).toEqual([Face.POS_Z, Face.NEG_Z, Face.POS_Y, Face.NEG_Y]);
|
|
16
|
-
const posYAdjacent = Face.getAdjacent(Face.POS_Y);
|
|
17
|
-
expect(posYAdjacent).toEqual([Face.POS_Z, Face.NEG_Z, Face.POS_X, Face.NEG_X]);
|
|
18
|
-
});
|
|
19
|
-
it('should throw error for invalid face indices', () => {
|
|
20
|
-
expect(() => Face.getNormal(6)).toThrow('Invalid face index: 6');
|
|
21
|
-
expect(() => Face.getOpposite(6)).toThrow('Invalid face index: 6');
|
|
22
|
-
expect(() => Face.getAdjacent(6)).toThrow('Invalid face index: 6');
|
|
23
|
-
});
|
|
24
|
-
it('should determine face from position correctly', () => {
|
|
25
|
-
const aabb = { min: [-1, -1, -1], max: [1, 1, 1] }; // Unit cube centered at origin
|
|
26
|
-
// Test positions on each face
|
|
27
|
-
expect(Face.fromPosition([1, 0, 0], aabb)).toBe(Face.POS_X);
|
|
28
|
-
expect(Face.fromPosition([-1, 0, 0], aabb)).toBe(Face.NEG_X);
|
|
29
|
-
expect(Face.fromPosition([0, 1, 0], aabb)).toBe(Face.POS_Y);
|
|
30
|
-
expect(Face.fromPosition([0, -1, 0], aabb)).toBe(Face.NEG_Y);
|
|
31
|
-
expect(Face.fromPosition([0, 0, 1], aabb)).toBe(Face.POS_Z);
|
|
32
|
-
expect(Face.fromPosition([0, 0, -1], aabb)).toBe(Face.NEG_Z);
|
|
33
|
-
});
|
|
34
|
-
});
|
|
35
|
-
//# sourceMappingURL=aabb-face.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"aabb-face.test.js","sourceRoot":"","sources":["../../../../src/math/aabb/face/aabb-face.test.ts"],"names":[],"mappings":"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"}
|