@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.
Files changed (180) hide show
  1. package/dist/cache/blob-store.js +12 -7
  2. package/dist/cache/blob-store.js.map +1 -1
  3. package/dist/ecs/database/database.d.ts +50 -1
  4. package/dist/ecs/database/database.js.map +1 -1
  5. package/dist/ecs/database/database.reset.test.js +200 -0
  6. package/dist/ecs/database/database.reset.test.js.map +1 -0
  7. package/dist/ecs/database/deep-extends-chain.type-test.d.ts +208 -208
  8. package/dist/ecs/database/observed/create-observed-database.js +4 -0
  9. package/dist/ecs/database/observed/create-observed-database.js.map +1 -1
  10. package/dist/ecs/database/observed/observed-database.d.ts +5 -3
  11. package/dist/ecs/database/public/create-database.d.ts +32 -3
  12. package/dist/ecs/database/public/create-database.js +12 -69
  13. package/dist/ecs/database/public/create-database.js.map +1 -1
  14. package/dist/ecs/database/public/create-database.test.js +86 -4
  15. package/dist/ecs/database/public/create-database.test.js.map +1 -1
  16. package/dist/ecs/database/public/create-transaction-dispatcher.d.ts +60 -0
  17. package/dist/ecs/database/public/create-transaction-dispatcher.js +119 -0
  18. package/dist/ecs/database/public/create-transaction-dispatcher.js.map +1 -0
  19. package/dist/ecs/database/reconciling/create-reconciling-database.js +52 -18
  20. package/dist/ecs/database/reconciling/create-reconciling-database.js.map +1 -1
  21. package/dist/ecs/database/reconciling/create-reconciling-database.test.js +144 -0
  22. package/dist/ecs/database/reconciling/create-reconciling-database.test.js.map +1 -1
  23. package/dist/ecs/database/reconciling/reconciling-database.d.ts +8 -1
  24. package/dist/ecs/database/reconciling/reconciling-entry.d.ts +9 -3
  25. package/dist/ecs/database/reconciling/reconciling-entry.js.map +1 -1
  26. package/dist/ecs/database/transactional-store/create-transactional-store.js +3 -1
  27. package/dist/ecs/database/transactional-store/create-transactional-store.js.map +1 -1
  28. package/dist/ecs/database/transactional-store/transactional-store.d.ts +14 -1
  29. package/dist/ecs/entity-location-table/create-entity-location-table.js +6 -1
  30. package/dist/ecs/entity-location-table/create-entity-location-table.js.map +1 -1
  31. package/dist/ecs/entity-location-table/entity-location-table.d.ts +2 -0
  32. package/dist/ecs/store/core/core.d.ts +2 -0
  33. package/dist/ecs/store/core/create-core.js +8 -0
  34. package/dist/ecs/store/core/create-core.js.map +1 -1
  35. package/dist/ecs/store/public/create-store.js +6 -0
  36. package/dist/ecs/store/public/create-store.js.map +1 -1
  37. package/dist/ecs/store/store.d.ts +2 -0
  38. package/dist/ecs/store/store.js.map +1 -1
  39. package/dist/ecs/store/transaction-functions.d.ts +15 -4
  40. package/dist/ecs/store/transaction-functions.type-test.js +50 -0
  41. package/dist/ecs/store/transaction-functions.type-test.js.map +1 -0
  42. package/dist/observe/to-async-generator.js +18 -8
  43. package/dist/observe/to-async-generator.js.map +1 -1
  44. package/dist/observe/to-async-generator.test.js +24 -0
  45. package/dist/observe/to-async-generator.test.js.map +1 -1
  46. package/dist/service/async-data-service/async-data-service.d.ts +1 -0
  47. package/dist/service/async-data-service/async-data-service.js +3 -0
  48. package/dist/service/async-data-service/async-data-service.js.map +1 -0
  49. package/dist/service/async-data-service/example.js +1 -1
  50. package/dist/service/async-data-service/example.js.map +1 -1
  51. package/dist/service/index.d.ts +2 -1
  52. package/dist/service/index.js +2 -1
  53. package/dist/service/index.js.map +1 -1
  54. package/dist/service/{agentic-service/link.js → ui-service/example.js} +1 -1
  55. package/dist/service/ui-service/example.js.map +1 -0
  56. package/dist/service/ui-service/from-service.d.ts +35 -0
  57. package/dist/service/{async-data-service/is-valid.type-test.js → ui-service/from-service.js} +1 -1
  58. package/dist/service/ui-service/from-service.js.map +1 -0
  59. package/dist/service/ui-service/is-valid.d.ts +11 -0
  60. package/dist/service/ui-service/is-valid.js +3 -0
  61. package/dist/service/ui-service/is-valid.js.map +1 -0
  62. package/dist/service/ui-service/public.d.ts +2 -0
  63. package/dist/service/ui-service/public.js +4 -0
  64. package/dist/service/ui-service/public.js.map +1 -0
  65. package/dist/service/ui-service/ui-service.d.ts +1 -0
  66. package/dist/service/ui-service/ui-service.js +3 -0
  67. package/dist/service/ui-service/ui-service.js.map +1 -0
  68. package/dist/tsconfig.tsbuildinfo +1 -1
  69. package/package.json +1 -1
  70. package/references/data-lit/package.json +1 -1
  71. package/references/data-lit/src/elements/application-element.ts +11 -1
  72. package/references/data-lit/src/elements/database-element.ts +3 -2
  73. package/references/data-lit/src/elements/database-element.type-test.ts +85 -0
  74. package/references/data-lit/src/hooks/index.ts +2 -0
  75. package/references/data-lit/src/hooks/use-drag-generator.ts +43 -0
  76. package/references/data-lit/src/hooks/use-drag-observe.ts +8 -2
  77. package/references/data-lit/src/hooks/use-pointer-observe.ts +79 -0
  78. package/references/data-lit-tictactoe/package.json +4 -1
  79. package/references/data-lit-tictactoe/src/elements/tictactoe-app/tictactoe-app-element.ts +23 -0
  80. package/references/data-lit-tictactoe/src/elements/tictactoe-app/tictactoe-app-presentation.ts +12 -0
  81. package/references/data-lit-tictactoe/src/elements/tictactoe-app/tictactoe-app.ts +14 -18
  82. package/references/data-lit-tictactoe/src/elements/tictactoe-board/tictactoe-board-element.ts +23 -0
  83. package/references/data-lit-tictactoe/src/elements/tictactoe-board/tictactoe-board-presentation.ts +6 -7
  84. package/references/data-lit-tictactoe/src/elements/tictactoe-board/tictactoe-board.ts +5 -15
  85. package/references/data-lit-tictactoe/src/elements/tictactoe-cell/tictactoe-cell-element.ts +45 -0
  86. package/references/data-lit-tictactoe/src/elements/tictactoe-cell/tictactoe-cell-presentation.ts +2 -1
  87. package/references/data-lit-tictactoe/src/elements/tictactoe-cell/tictactoe-cell.ts +5 -38
  88. package/references/data-lit-tictactoe/src/elements/tictactoe-hud/tictactoe-hud-element.ts +57 -0
  89. package/references/data-lit-tictactoe/src/elements/tictactoe-hud/tictactoe-hud-presentation.ts +10 -2
  90. package/references/data-lit-tictactoe/src/elements/tictactoe-hud/tictactoe-hud.css.ts +36 -1
  91. package/references/data-lit-tictactoe/src/elements/tictactoe-hud/tictactoe-hud.ts +5 -41
  92. package/references/data-lit-tictactoe/src/index.ts +16 -0
  93. package/references/data-lit-tictactoe/src/main.ts +9 -3
  94. package/references/data-lit-tictactoe/src/state/tictactoe-plugin.ts +18 -10
  95. package/references/data-lit-tictactoe/src/tictactoe-element.ts +8 -3
  96. package/references/data-lit-tictactoe/src/types/board-state/current-player.ts +2 -2
  97. package/references/data-lit-tictactoe/src/types/player-mark/is.ts +8 -0
  98. package/references/data-lit-tictactoe/src/types/player-mark/mark-color.ts +12 -0
  99. package/references/data-lit-tictactoe/src/types/player-mark/opponent.ts +12 -0
  100. package/references/data-lit-tictactoe/src/types/player-mark/public.ts +4 -0
  101. package/references/data-lit-tictactoe/src/types/player-mark/values.ts +6 -0
  102. package/references/data-react/package.json +1 -1
  103. package/references/data-react-hello/package.json +1 -1
  104. package/references/data-react-pixie/package.json +1 -1
  105. package/dist/cache/blob-store.test.js +0 -122
  106. package/dist/cache/blob-store.test.js.map +0 -1
  107. package/dist/cache/data-cache.test.js +0 -41
  108. package/dist/cache/data-cache.test.js.map +0 -1
  109. package/dist/cache/expiring-data-cache.test.js +0 -42
  110. package/dist/cache/expiring-data-cache.test.js.map +0 -1
  111. package/dist/cache/functions/functions.test.d.ts +0 -1
  112. package/dist/cache/functions/functions.test.js +0 -72
  113. package/dist/cache/functions/functions.test.js.map +0 -1
  114. package/dist/ecs/database/observe-select-deep.d.ts +0 -23
  115. package/dist/ecs/database/observe-select-deep.js +0 -15
  116. package/dist/ecs/database/observe-select-deep.js.map +0 -1
  117. package/dist/ecs/database/observe-select-deep.type-test.d.ts +0 -1
  118. package/dist/ecs/database/observe-select-deep.type-test.js +0 -111
  119. package/dist/ecs/database/observe-select-deep.type-test.js.map +0 -1
  120. package/dist/ecs/database/public/create-database-scheduler.test.d.ts +0 -1
  121. package/dist/ecs/database/public/create-database-scheduler.test.js +0 -67
  122. package/dist/ecs/database/public/create-database-scheduler.test.js.map +0 -1
  123. package/dist/ecs/database/public/create-database.type-test.d.ts +0 -1
  124. package/dist/ecs/database/public/create-database.type-test.js +0 -52
  125. package/dist/ecs/database/public/create-database.type-test.js.map +0 -1
  126. package/dist/ecs/entity.d.ts +0 -11
  127. package/dist/ecs/entity.js +0 -7
  128. package/dist/ecs/entity.js.map +0 -1
  129. package/dist/ecs/persistence-service/create-storage-persistence-service.test.d.ts +0 -1
  130. package/dist/ecs/persistence-service/create-storage-persistence-service.test.js +0 -52
  131. package/dist/ecs/persistence-service/create-storage-persistence-service.test.js.map +0 -1
  132. package/dist/functions/serialization/serialize-to-storage.test.d.ts +0 -1
  133. package/dist/functions/serialization/serialize-to-storage.test.js +0 -161
  134. package/dist/functions/serialization/serialize-to-storage.test.js.map +0 -1
  135. package/dist/math/aabb/face/aabb-face.test.d.ts +0 -1
  136. package/dist/math/aabb/face/aabb-face.test.js +0 -35
  137. package/dist/math/aabb/face/aabb-face.test.js.map +0 -1
  138. package/dist/math/aabb/face/functions.d.ts +0 -47
  139. package/dist/math/aabb/face/functions.js +0 -142
  140. package/dist/math/aabb/face/functions.js.map +0 -1
  141. package/dist/math/aabb/face/index.d.ts +0 -4
  142. package/dist/math/aabb/face/index.js +0 -3
  143. package/dist/math/aabb/face/index.js.map +0 -1
  144. package/dist/perftest/ecs-perf.d.ts +0 -49
  145. package/dist/perftest/ecs-perf.js +0 -210
  146. package/dist/perftest/ecs-perf.js.map +0 -1
  147. package/dist/service/agentic-service/link.d.ts +0 -15
  148. package/dist/service/agentic-service/link.js.map +0 -1
  149. package/dist/service/async-data-service/is-valid.type-test.d.ts +0 -1
  150. package/dist/service/async-data-service/is-valid.type-test.js.map +0 -1
  151. package/dist/service/dynamic-service/create-from-ecs.d.ts +0 -17
  152. package/dist/service/dynamic-service/create-from-ecs.js +0 -56
  153. package/dist/service/dynamic-service/create-from-ecs.js.map +0 -1
  154. package/dist/service/dynamic-service/create-from-ecs.test.d.ts +0 -1
  155. package/dist/service/dynamic-service/create-from-ecs.test.js +0 -636
  156. package/dist/service/dynamic-service/create-from-ecs.test.js.map +0 -1
  157. package/dist/service/dynamic-service/create.d.ts +0 -84
  158. package/dist/service/dynamic-service/create.js +0 -97
  159. package/dist/service/dynamic-service/create.js.map +0 -1
  160. package/dist/service/dynamic-service/create.test.d.ts +0 -1
  161. package/dist/service/dynamic-service/create.test.js +0 -688
  162. package/dist/service/dynamic-service/create.test.js.map +0 -1
  163. package/dist/service/dynamic-service/dynamic-service.d.ts +0 -29
  164. package/dist/service/dynamic-service/dynamic-service.js +0 -2
  165. package/dist/service/dynamic-service/dynamic-service.js.map +0 -1
  166. package/dist/service/dynamic-service/index.d.ts +0 -1
  167. package/dist/service/dynamic-service/index.js +0 -3
  168. package/dist/service/dynamic-service/index.js.map +0 -1
  169. package/dist/service/dynamic-service/public.d.ts +0 -2
  170. package/dist/service/dynamic-service/public.js +0 -3
  171. package/dist/service/dynamic-service/public.js.map +0 -1
  172. package/dist/service/dynamic-service/semantic-service.d.ts +0 -19
  173. package/dist/service/dynamic-service/semantic-service.js +0 -2
  174. package/dist/service/dynamic-service/semantic-service.js.map +0 -1
  175. package/dist/service/semantic-service/semantic-service.d.ts +0 -19
  176. package/dist/service/semantic-service/semantic-service.js +0 -2
  177. package/dist/service/semantic-service/semantic-service.js.map +0 -1
  178. /package/dist/{cache/blob-store.test.d.ts → ecs/database/database.reset.test.d.ts} +0 -0
  179. /package/dist/{cache/data-cache.test.d.ts → ecs/store/transaction-functions.type-test.d.ts} +0 -0
  180. /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,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,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"}
@@ -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
- }
@@ -1,7 +0,0 @@
1
- import { I32 } from "../math/i32/index.js";
2
- export var Entity;
3
- (function (Entity) {
4
- Entity.schema = I32.schema;
5
- Entity.isEphemeral = (entity) => entity < 0;
6
- })(Entity || (Entity = {}));
7
- //# sourceMappingURL=entity.js.map
@@ -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,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,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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"}