@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,636 +0,0 @@
1
- // © 2026 Adobe. MIT License. See /LICENSE for details.
2
- import { describe, it, expect } from "vitest";
3
- import { Database } from "../../ecs/index.js";
4
- import { Observe } from "../../observe/index.js";
5
- import { createFromEcs } from "./create-from-ecs.js";
6
- import { createPlugin } from "../../ecs/database/create-plugin.js";
7
- const testPlugin = createPlugin({
8
- resources: {
9
- health: { default: 100 },
10
- name: { default: "" },
11
- alive: { default: true },
12
- },
13
- });
14
- const createTestDb = () => Database.create(testPlugin);
15
- describe("createFromEcs", () => {
16
- describe("type acceptance", () => {
17
- it("should accept matching state schema and value types", () => {
18
- const db = createTestDb();
19
- createFromEcs(db, {
20
- states: {
21
- currentHealth: {
22
- schema: { type: "number" },
23
- enabled: (db) => db.observe.resources.alive,
24
- value: (db) => db.observe.resources.health,
25
- },
26
- },
27
- actions: {},
28
- });
29
- });
30
- it("should accept string schema with string value", () => {
31
- const db = createTestDb();
32
- createFromEcs(db, {
33
- states: {
34
- playerName: {
35
- schema: { type: "string" },
36
- enabled: (db) => db.observe.resources.alive,
37
- value: (db) => db.observe.resources.name,
38
- },
39
- },
40
- actions: {},
41
- });
42
- });
43
- it("should accept multiple states with different schemas", () => {
44
- const db = createTestDb();
45
- createFromEcs(db, {
46
- states: {
47
- currentHealth: {
48
- schema: { type: "number" },
49
- enabled: (db) => db.observe.resources.alive,
50
- value: (db) => db.observe.resources.health,
51
- },
52
- playerName: {
53
- schema: { type: "string" },
54
- enabled: (db) => db.observe.resources.alive,
55
- value: (db) => db.observe.resources.name,
56
- },
57
- },
58
- actions: {},
59
- });
60
- });
61
- it("should accept action with schema-typed input", () => {
62
- const db = createTestDb();
63
- createFromEcs(db, {
64
- states: {},
65
- actions: {
66
- setHealth: {
67
- schema: { type: "number" },
68
- enabled: (db) => db.observe.resources.alive,
69
- execute: async (db, input) => {
70
- const _check = input;
71
- },
72
- },
73
- },
74
- });
75
- });
76
- it("should accept action with schema: false (void execute)", () => {
77
- const db = createTestDb();
78
- createFromEcs(db, {
79
- states: {},
80
- actions: {
81
- reset: {
82
- schema: false,
83
- enabled: (db) => db.observe.resources.alive,
84
- execute: async (db) => { },
85
- },
86
- },
87
- });
88
- });
89
- it("should accept object schema with matching value type", () => {
90
- const db = createTestDb();
91
- createFromEcs(db, {
92
- states: {
93
- stats: {
94
- schema: {
95
- type: "object",
96
- properties: {
97
- hp: { type: "number" },
98
- label: { type: "string" },
99
- },
100
- required: ["hp"],
101
- additionalProperties: false,
102
- },
103
- enabled: (db) => db.observe.resources.alive,
104
- value: (db) => Observe.fromConstant({ hp: 50, label: "test" }),
105
- },
106
- },
107
- actions: {},
108
- });
109
- });
110
- it("should accept action with object schema input", () => {
111
- const db = createTestDb();
112
- createFromEcs(db, {
113
- states: {},
114
- actions: {
115
- configure: {
116
- schema: {
117
- type: "object",
118
- properties: {
119
- hp: { type: "number" },
120
- name: { type: "string" },
121
- },
122
- required: ["hp", "name"],
123
- additionalProperties: false,
124
- },
125
- enabled: (db) => db.observe.resources.alive,
126
- execute: async (db, input) => {
127
- const _hp = input.hp;
128
- const _name = input.name;
129
- },
130
- },
131
- },
132
- });
133
- });
134
- it("should accept mixed actions with and without schemas", () => {
135
- const db = createTestDb();
136
- createFromEcs(db, {
137
- states: {},
138
- actions: {
139
- heal: {
140
- schema: { type: "number" },
141
- enabled: (db) => db.observe.resources.alive,
142
- execute: async (db, amount) => {
143
- const _check = amount;
144
- },
145
- },
146
- reset: {
147
- schema: false,
148
- enabled: (db) => db.observe.resources.alive,
149
- execute: async (db) => { },
150
- },
151
- },
152
- });
153
- });
154
- });
155
- describe("type rejection", () => {
156
- it("should reject mismatched state value type (number schema, string value)", () => {
157
- const db = createTestDb();
158
- createFromEcs(db, {
159
- states: {
160
- currentHealth: {
161
- schema: { type: "number" },
162
- enabled: (db) => db.observe.resources.alive,
163
- // @ts-expect-error - string value does not match number schema
164
- value: (db) => db.observe.resources.name,
165
- },
166
- },
167
- actions: {},
168
- });
169
- });
170
- it("should reject mismatched state value type (string schema, number value)", () => {
171
- const db = createTestDb();
172
- createFromEcs(db, {
173
- states: {
174
- playerName: {
175
- schema: { type: "string" },
176
- enabled: (db) => db.observe.resources.alive,
177
- // @ts-expect-error - number value does not match string schema
178
- value: (db) => db.observe.resources.health,
179
- },
180
- },
181
- actions: {},
182
- });
183
- });
184
- it("should reject access to nonexistent db resource in state value", () => {
185
- const db = createTestDb();
186
- createFromEcs(db, {
187
- states: {
188
- missing: {
189
- schema: { type: "number" },
190
- enabled: (db) => db.observe.resources.alive,
191
- // @ts-expect-error - nonExistent resource does not exist on db
192
- value: (db) => db.observe.resources.nonExistent,
193
- },
194
- },
195
- actions: {},
196
- });
197
- });
198
- it("should reject access to nonexistent db resource in enabled", () => {
199
- const db = createTestDb();
200
- createFromEcs(db, {
201
- states: {
202
- test: {
203
- schema: { type: "number" },
204
- // @ts-expect-error - nonExistent resource does not exist on db
205
- enabled: (db) => db.observe.resources.nonExistent,
206
- value: (db) => db.observe.resources.health,
207
- },
208
- },
209
- actions: {},
210
- });
211
- });
212
- it("should reject action execute with wrong input type", () => {
213
- const db = createTestDb();
214
- createFromEcs(db, {
215
- states: {},
216
- actions: {
217
- setHealth: {
218
- schema: { type: "number" },
219
- enabled: (db) => db.observe.resources.alive,
220
- // @ts-expect-error - execute receives string but schema requires number
221
- execute: async (db, input) => { },
222
- },
223
- },
224
- });
225
- });
226
- it("should reject void action that declares an input parameter", () => {
227
- const db = createTestDb();
228
- createFromEcs(db, {
229
- states: {},
230
- actions: {
231
- reset: {
232
- schema: false,
233
- enabled: (db) => db.observe.resources.alive,
234
- // @ts-expect-error - schema: false means no input parameter
235
- execute: async (db, input) => { },
236
- },
237
- },
238
- });
239
- });
240
- it("should reject access to nonexistent db resource in action", () => {
241
- const db = createTestDb();
242
- // Runtime throws because @ts-expect-error suppresses the type error
243
- // but the nonexistent resource produces undefined at runtime.
244
- // We only care that the type error is flagged at compile time.
245
- try {
246
- createFromEcs(db, {
247
- states: {},
248
- actions: {
249
- doThing: {
250
- schema: { type: "number" },
251
- // @ts-expect-error - nonExistent resource does not exist on db
252
- enabled: (db) => db.observe.resources.nonExistent,
253
- execute: async (db, input) => { },
254
- },
255
- },
256
- });
257
- }
258
- catch (_) { /* expected runtime error from undefined observable */ }
259
- });
260
- });
261
- describe("serviceName", () => {
262
- it("should set serviceName for isService compatibility", () => {
263
- const db = createTestDb();
264
- const service = createFromEcs(db, { states: {}, actions: {} });
265
- expect(service.serviceName).toBe("dynamic-service");
266
- });
267
- });
268
- describe("states observable", () => {
269
- it("should emit enabled states with resolved values", async () => {
270
- const db = createTestDb();
271
- const service = createFromEcs(db, {
272
- states: {
273
- currentHealth: {
274
- schema: { type: "number" },
275
- enabled: () => Observe.fromConstant(true),
276
- value: (db) => db.observe.resources.health,
277
- },
278
- },
279
- actions: {},
280
- });
281
- const states = await Observe.toPromise(service.states);
282
- expect(states).toHaveProperty("currentHealth");
283
- expect(states.currentHealth.schema).toEqual({ type: "number" });
284
- expect(states.currentHealth.value).toBe(100);
285
- });
286
- it("should omit disabled states", async () => {
287
- const db = createTestDb();
288
- const service = createFromEcs(db, {
289
- states: {
290
- visible: {
291
- schema: { type: "number" },
292
- enabled: () => Observe.fromConstant(true),
293
- value: (db) => db.observe.resources.health,
294
- },
295
- hidden: {
296
- schema: { type: "string" },
297
- enabled: () => Observe.fromConstant(false),
298
- value: (db) => db.observe.resources.name,
299
- },
300
- },
301
- actions: {},
302
- });
303
- const states = await Observe.toPromise(service.states);
304
- expect(states).toHaveProperty("visible");
305
- expect(states).not.toHaveProperty("hidden");
306
- });
307
- it("should update when enabled changes", async () => {
308
- const db = createTestDb();
309
- const [enabledObserve, setEnabled] = Observe.createState(true);
310
- const service = createFromEcs(db, {
311
- states: {
312
- health: {
313
- schema: { type: "number" },
314
- enabled: () => enabledObserve,
315
- value: (db) => db.observe.resources.health,
316
- },
317
- },
318
- actions: {},
319
- });
320
- const results = [];
321
- service.states((s) => results.push(s));
322
- expect(Object.keys(results[0])).toContain("health");
323
- setEnabled(false);
324
- expect(Object.keys(results[1])).not.toContain("health");
325
- setEnabled(true);
326
- expect(Object.keys(results[2])).toContain("health");
327
- });
328
- it("should update when value changes", async () => {
329
- const db = createTestDb();
330
- const [healthObserve, setHealth] = Observe.createState(100);
331
- const service = createFromEcs(db, {
332
- states: {
333
- health: {
334
- schema: { type: "number" },
335
- enabled: () => Observe.fromConstant(true),
336
- value: () => healthObserve,
337
- },
338
- },
339
- actions: {},
340
- });
341
- const results = [];
342
- service.states((s) => results.push(s));
343
- expect(results[0].health.value).toBe(100);
344
- setHealth(50);
345
- expect(results[1].health.value).toBe(50);
346
- });
347
- });
348
- describe("actions observable", () => {
349
- it("should emit enabled actions with bound execute", async () => {
350
- const db = createTestDb();
351
- const service = createFromEcs(db, {
352
- states: {},
353
- actions: {
354
- heal: {
355
- schema: { type: "number" },
356
- enabled: () => Observe.fromConstant(true),
357
- execute: async (db, amount) => { },
358
- },
359
- },
360
- });
361
- const actions = await Observe.toPromise(service.actions);
362
- expect(actions).toHaveProperty("heal");
363
- expect(actions.heal.schema).toEqual({ type: "number" });
364
- expect(typeof actions.heal.execute).toBe("function");
365
- });
366
- it("should omit disabled actions", async () => {
367
- const db = createTestDb();
368
- const service = createFromEcs(db, {
369
- states: {},
370
- actions: {
371
- available: {
372
- schema: { type: "number" },
373
- enabled: () => Observe.fromConstant(true),
374
- execute: async (db, input) => { },
375
- },
376
- unavailable: {
377
- schema: false,
378
- enabled: () => Observe.fromConstant(false),
379
- execute: async (db) => { },
380
- },
381
- },
382
- });
383
- const actions = await Observe.toPromise(service.actions);
384
- expect(actions).toHaveProperty("available");
385
- expect(actions).not.toHaveProperty("unavailable");
386
- });
387
- it("should update when enabled changes", () => {
388
- const db = createTestDb();
389
- const [enabledObserve, setEnabled] = Observe.createState(true);
390
- const service = createFromEcs(db, {
391
- states: {},
392
- actions: {
393
- heal: {
394
- schema: { type: "number" },
395
- enabled: () => enabledObserve,
396
- execute: async (db, input) => { },
397
- },
398
- },
399
- });
400
- const results = [];
401
- service.actions((a) => results.push(a));
402
- expect(Object.keys(results[0])).toContain("heal");
403
- setEnabled(false);
404
- expect(Object.keys(results[1])).not.toContain("heal");
405
- });
406
- });
407
- describe("execute", () => {
408
- it("should dispatch to the correct action with input", async () => {
409
- const db = createTestDb();
410
- let received;
411
- const service = createFromEcs(db, {
412
- states: {},
413
- actions: {
414
- setHealth: {
415
- schema: { type: "number" },
416
- enabled: () => Observe.fromConstant(true),
417
- execute: async (db, input) => {
418
- received = input;
419
- },
420
- },
421
- },
422
- });
423
- const result = await service.execute("setHealth", 42);
424
- expect(received).toBe(42);
425
- expect(result).toBeUndefined();
426
- });
427
- it("should dispatch void action (no input)", async () => {
428
- const db = createTestDb();
429
- let called = false;
430
- const service = createFromEcs(db, {
431
- states: {},
432
- actions: {
433
- reset: {
434
- schema: false,
435
- enabled: () => Observe.fromConstant(true),
436
- execute: async (db) => {
437
- called = true;
438
- },
439
- },
440
- },
441
- });
442
- await service.execute("reset", undefined);
443
- expect(called).toBe(true);
444
- });
445
- it("should return error for unavailable action", async () => {
446
- const db = createTestDb();
447
- const service = createFromEcs(db, {
448
- states: {},
449
- actions: {
450
- heal: {
451
- schema: { type: "number" },
452
- enabled: () => Observe.fromConstant(false),
453
- execute: async (db, input) => { },
454
- },
455
- },
456
- });
457
- const result = await service.execute("heal", 10);
458
- expect(typeof result).toBe("string");
459
- });
460
- it("should return error for nonexistent action", async () => {
461
- const db = createTestDb();
462
- const service = createFromEcs(db, {
463
- states: {},
464
- actions: {},
465
- });
466
- const result = await service.execute("doesNotExist", undefined);
467
- expect(typeof result).toBe("string");
468
- });
469
- it("should propagate ActionError from execute", async () => {
470
- const db = createTestDb();
471
- const service = createFromEcs(db, {
472
- states: {},
473
- actions: {
474
- fail: {
475
- schema: false,
476
- enabled: () => Observe.fromConstant(true),
477
- execute: async (db) => "something went wrong",
478
- },
479
- },
480
- });
481
- const result = await service.execute("fail", undefined);
482
- expect(result).toBe("something went wrong");
483
- });
484
- it("should reject action that was available but is now disabled", async () => {
485
- const db = createTestDb();
486
- const [enabledObserve, setEnabled] = Observe.createState(true);
487
- let called = false;
488
- const service = createFromEcs(db, {
489
- states: {},
490
- actions: {
491
- heal: {
492
- schema: { type: "number" },
493
- enabled: () => enabledObserve,
494
- execute: async (db, input) => { called = true; },
495
- },
496
- },
497
- });
498
- // Action is available, dispatch succeeds
499
- const ok = await service.execute("heal", 10);
500
- expect(called).toBe(true);
501
- expect(ok).toBeUndefined();
502
- // Disable the action
503
- called = false;
504
- setEnabled(false);
505
- // Action is now unavailable, dispatch returns error
506
- const err = await service.execute("heal", 10);
507
- expect(called).toBe(false);
508
- expect(typeof err).toBe("string");
509
- });
510
- });
511
- describe("independent conditional toggles", () => {
512
- it("should toggle states independently", () => {
513
- const db = createTestDb();
514
- const [enableA, setEnableA] = Observe.createState(true);
515
- const [enableB, setEnableB] = Observe.createState(true);
516
- const service = createFromEcs(db, {
517
- states: {
518
- health: {
519
- schema: { type: "number" },
520
- enabled: () => enableA,
521
- value: (db) => db.observe.resources.health,
522
- },
523
- name: {
524
- schema: { type: "string" },
525
- enabled: () => enableB,
526
- value: (db) => db.observe.resources.name,
527
- },
528
- },
529
- actions: {},
530
- });
531
- const results = [];
532
- service.states((s) => results.push(s));
533
- // Both enabled initially
534
- expect(Object.keys(results[0])).toEqual(expect.arrayContaining(["health", "name"]));
535
- // Disable A only — B remains
536
- setEnableA(false);
537
- expect(results[1]).not.toHaveProperty("health");
538
- expect(results[1]).toHaveProperty("name");
539
- // Disable B too — empty
540
- setEnableB(false);
541
- expect(Object.keys(results[2])).toEqual([]);
542
- // Re-enable B only — A stays off
543
- setEnableB(true);
544
- expect(results[3]).not.toHaveProperty("health");
545
- expect(results[3]).toHaveProperty("name");
546
- });
547
- it("should toggle actions independently", () => {
548
- const db = createTestDb();
549
- const [enableHeal, setEnableHeal] = Observe.createState(true);
550
- const [enableReset, setEnableReset] = Observe.createState(true);
551
- const service = createFromEcs(db, {
552
- states: {},
553
- actions: {
554
- heal: {
555
- schema: { type: "number" },
556
- enabled: () => enableHeal,
557
- execute: async (db, input) => { },
558
- },
559
- reset: {
560
- schema: false,
561
- enabled: () => enableReset,
562
- execute: async (db) => { },
563
- },
564
- },
565
- });
566
- const results = [];
567
- service.actions((a) => results.push(a));
568
- // Both enabled initially
569
- expect(Object.keys(results[0])).toEqual(expect.arrayContaining(["heal", "reset"]));
570
- // Disable heal only — reset remains
571
- setEnableHeal(false);
572
- expect(results[1]).not.toHaveProperty("heal");
573
- expect(results[1]).toHaveProperty("reset");
574
- // Re-enable heal, disable reset
575
- setEnableHeal(true);
576
- setEnableReset(false);
577
- // Two emissions: one for heal re-enabled, one for reset disabled
578
- const latest = results[results.length - 1];
579
- expect(latest).toHaveProperty("heal");
580
- expect(latest).not.toHaveProperty("reset");
581
- });
582
- });
583
- describe("bound action execute", () => {
584
- it("should execute bound action directly from actions observable", async () => {
585
- const db = createTestDb();
586
- let received;
587
- const service = createFromEcs(db, {
588
- states: {},
589
- actions: {
590
- heal: {
591
- schema: { type: "number" },
592
- enabled: () => Observe.fromConstant(true),
593
- execute: async (db, input) => { received = input; },
594
- },
595
- },
596
- });
597
- const actions = await Observe.toPromise(service.actions);
598
- await actions.heal.execute(77);
599
- expect(received).toBe(77);
600
- });
601
- it("should execute bound void action directly from actions observable", async () => {
602
- const db = createTestDb();
603
- let called = false;
604
- const service = createFromEcs(db, {
605
- states: {},
606
- actions: {
607
- reset: {
608
- schema: false,
609
- enabled: () => Observe.fromConstant(true),
610
- execute: async (db) => { called = true; },
611
- },
612
- },
613
- });
614
- const actions = await Observe.toPromise(service.actions);
615
- await actions.reset.execute();
616
- expect(called).toBe(true);
617
- });
618
- it("should propagate ActionError from bound action execute", async () => {
619
- const db = createTestDb();
620
- const service = createFromEcs(db, {
621
- states: {},
622
- actions: {
623
- fail: {
624
- schema: false,
625
- enabled: () => Observe.fromConstant(true),
626
- execute: async (db) => "bound error",
627
- },
628
- },
629
- });
630
- const actions = await Observe.toPromise(service.actions);
631
- const result = await actions.fail.execute();
632
- expect(result).toBe("bound error");
633
- });
634
- });
635
- });
636
- //# sourceMappingURL=create-from-ecs.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"create-from-ecs.test.js","sourceRoot":"","sources":["../../../src/service/dynamic-service/create-from-ecs.test.ts"],"names":[],"mappings":"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"}