@adobe/data 0.9.47 → 0.9.50

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 (59) hide show
  1. package/README.md +18 -101
  2. package/dist/ecs/database/combine-plugins.d.ts +35 -19
  3. package/dist/ecs/database/combine-plugins.js.map +1 -1
  4. package/dist/ecs/database/create-plugin.d.ts +11 -10
  5. package/dist/ecs/database/create-plugin.js.map +1 -1
  6. package/dist/ecs/database/database.d.ts +17 -23
  7. package/dist/ecs/database/database.js.map +1 -1
  8. package/dist/ecs/database/deep-extends-chain.type-test.d.ts +40963 -0
  9. package/dist/ecs/database/deep-extends-chain.type-test.js +282 -0
  10. package/dist/ecs/database/deep-extends-chain.type-test.js.map +1 -0
  11. package/dist/ecs/database/observed/create-observed-database.js.map +1 -1
  12. package/dist/ecs/database/observed/observed-database.d.ts +1 -3
  13. package/dist/ecs/database/public/create-database.d.ts +2 -5
  14. package/dist/ecs/database/public/create-database.js.map +1 -1
  15. package/dist/ecs/plugins/scheduler/scheduler.d.ts +13 -8
  16. package/dist/ecs/store/core/core.d.ts +3 -7
  17. package/dist/functions/serialization/compression.d.ts +2 -0
  18. package/dist/functions/serialization/compression.js +32 -0
  19. package/dist/functions/serialization/compression.js.map +1 -0
  20. package/dist/functions/serialization/serialization.test.js +66 -0
  21. package/dist/functions/serialization/serialization.test.js.map +1 -1
  22. package/dist/functions/serialization/serialize-to-blobs.js +20 -4
  23. package/dist/functions/serialization/serialize-to-blobs.js.map +1 -1
  24. package/dist/functions/serialization/serialize-to-blobs.test.js +21 -0
  25. package/dist/functions/serialization/serialize-to-blobs.test.js.map +1 -1
  26. package/dist/functions/serialization/serialize-to-json.js +5 -70
  27. package/dist/functions/serialization/serialize-to-json.js.map +1 -1
  28. package/dist/observe/public.d.ts +1 -0
  29. package/dist/observe/public.js +1 -0
  30. package/dist/observe/public.js.map +1 -1
  31. package/dist/observe/with-switch.d.ts +18 -0
  32. package/dist/observe/with-switch.js +45 -0
  33. package/dist/observe/with-switch.js.map +1 -0
  34. package/dist/observe/with-switch.test.d.ts +1 -0
  35. package/dist/observe/with-switch.test.js +142 -0
  36. package/dist/observe/with-switch.test.js.map +1 -0
  37. package/dist/old-ecs/index.d.ts +4 -0
  38. package/dist/old-ecs/index.js +4 -0
  39. package/dist/old-ecs/index.js.map +1 -1
  40. package/dist/tsconfig.tsbuildinfo +1 -1
  41. package/dist/typed-buffer/create-enum-buffer.d.ts +4 -0
  42. package/dist/typed-buffer/create-enum-buffer.js +82 -0
  43. package/dist/typed-buffer/create-enum-buffer.js.map +1 -0
  44. package/dist/typed-buffer/create-enum-buffer.test.d.ts +1 -0
  45. package/dist/typed-buffer/create-enum-buffer.test.js +248 -0
  46. package/dist/typed-buffer/create-enum-buffer.test.js.map +1 -0
  47. package/dist/typed-buffer/create-typed-buffer.js +4 -0
  48. package/dist/typed-buffer/create-typed-buffer.js.map +1 -1
  49. package/dist/typed-buffer/register-typed-buffer-codecs.js +20 -2
  50. package/dist/typed-buffer/register-typed-buffer-codecs.js.map +1 -1
  51. package/dist/typed-buffer/typed-buffer.d.ts +1 -1
  52. package/dist/types/types.d.ts +9 -1
  53. package/dist/types/types.js.map +1 -1
  54. package/package.json +1 -2
  55. package/references/data-lit/package.json +1 -1
  56. package/references/data-lit-tictactoe/package.json +1 -1
  57. package/references/data-react/package.json +1 -1
  58. package/references/data-react-hello/package.json +1 -1
  59. package/references/data-react-pixie/package.json +1 -1
@@ -1,18 +1,34 @@
1
1
  // © 2026 Adobe. MIT License. See /LICENSE for details.
2
2
  import { toArrayBufferBacked } from "../../internal/array-buffer-like/index.js";
3
+ import { compressDeflate, decompressDeflate } from "./compression.js";
3
4
  import { serialize, deserialize } from "./serialize.js";
5
+ const ENCODING_VERSION = 2;
6
+ const concatenateBuffers = (parts) => {
7
+ const totalSize = parts.reduce((sum, p) => sum + p.byteLength, 0);
8
+ const combined = new Uint8Array(totalSize);
9
+ let offset = 0;
10
+ for (const part of parts) {
11
+ combined.set(part, offset);
12
+ offset += part.byteLength;
13
+ }
14
+ return combined;
15
+ };
4
16
  export const serializeToBlobs = async (data) => {
5
17
  const serialized = serialize(data);
6
18
  const binarySizes = serialized.binary.map((array) => array.byteLength);
7
19
  const binaryParts = serialized.binary.map(toArrayBufferBacked);
8
- const json = new Blob([JSON.stringify({ json: serialized.json, binarySizes })], { type: "application/json" });
9
- const binary = new Blob(binaryParts, { type: "application/octet-stream" });
20
+ const compressed = await compressDeflate(concatenateBuffers(binaryParts));
21
+ const json = new Blob([JSON.stringify({ version: ENCODING_VERSION, json: serialized.json, binarySizes })], { type: "application/json" });
22
+ const binary = new Blob([compressed], { type: "application/octet-stream" });
10
23
  return { json, binary };
11
24
  };
12
25
  export const deserializeFromBlobs = async ({ json, binary }) => {
13
26
  const jsonText = await json.text();
14
- const { json: serializedJson, binarySizes } = JSON.parse(jsonText);
15
- const binaryArray = new Uint8Array(await binary.arrayBuffer());
27
+ const { version, json: serializedJson, binarySizes } = JSON.parse(jsonText);
28
+ const raw = new Uint8Array(await binary.arrayBuffer());
29
+ const binaryArray = version >= 2
30
+ ? await decompressDeflate(raw)
31
+ : toArrayBufferBacked(raw);
16
32
  const binaryChunks = [];
17
33
  let offset = 0;
18
34
  for (const size of binarySizes) {
@@ -1 +1 @@
1
- {"version":3,"file":"serialize-to-blobs.js","sourceRoot":"","sources":["../../../src/functions/serialization/serialize-to-blobs.ts"],"names":[],"mappings":"AAAA,uDAAuD;AACvD,OAAO,EAAE,mBAAmB,EAAE,MAAM,2CAA2C,CAAC;AAChF,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAExD,MAAM,CAAC,MAAM,gBAAgB,GAAG,KAAK,EAAK,IAAO,EAAyC,EAAE;IACxF,MAAM,UAAU,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;IACnC,MAAM,WAAW,GAAG,UAAU,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;IACvE,MAAM,WAAW,GAAG,UAAU,CAAC,MAAM,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAC;IAC/D,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,UAAU,CAAC,IAAI,EAAE,WAAW,EAAE,CAAC,CAAC,EAAE,EAAE,IAAI,EAAE,kBAAkB,EAAE,CAAC,CAAC;IAC9G,MAAM,MAAM,GAAG,IAAI,IAAI,CAAC,WAAW,EAAE,EAAE,IAAI,EAAE,0BAA0B,EAAE,CAAC,CAAC;IAC3E,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;AAC5B,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,oBAAoB,GAAG,KAAK,EAAK,EAAE,IAAI,EAAE,MAAM,EAAgC,EAAc,EAAE;IACxG,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,IAAI,EAAE,CAAC;IACnC,MAAM,EAAE,IAAI,EAAE,cAAc,EAAE,WAAW,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;IAEnE,MAAM,WAAW,GAAG,IAAI,UAAU,CAAC,MAAM,MAAM,CAAC,WAAW,EAAE,CAAC,CAAC;IAC/D,MAAM,YAAY,GAA8B,EAAE,CAAC;IACnD,IAAI,MAAM,GAAG,CAAC,CAAC;IAEf,KAAK,MAAM,IAAI,IAAI,WAAW,EAAE,CAAC;QAC7B,YAAY,CAAC,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC,CAAC,CAAC;QAC5D,MAAM,IAAI,IAAI,CAAC;IACnB,CAAC;IAED,OAAO,WAAW,CAAI,EAAE,IAAI,EAAE,cAAc,EAAE,MAAM,EAAE,YAAY,EAAE,CAAC,CAAC;AAC1E,CAAC,CAAC"}
1
+ {"version":3,"file":"serialize-to-blobs.js","sourceRoot":"","sources":["../../../src/functions/serialization/serialize-to-blobs.ts"],"names":[],"mappings":"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"}
@@ -1,7 +1,28 @@
1
1
  // © 2026 Adobe. MIT License. See /LICENSE for details.
2
2
  import { describe, it, expect } from "vitest";
3
3
  import { serializeToBlobs, deserializeFromBlobs } from "./serialize-to-blobs.js";
4
+ import { serialize } from "./serialize.js";
4
5
  describe("serializeToBlobs", () => {
6
+ it("should include version 2 in json metadata", async () => {
7
+ const data = { value: new Uint8Array([1, 2, 3]) };
8
+ const blobs = await serializeToBlobs(data);
9
+ const meta = JSON.parse(await blobs.json.text());
10
+ expect(meta.version).toBe(2);
11
+ });
12
+ it("should deserialize a legacy v1 payload (no version field, uncompressed binary)", async () => {
13
+ const data = {
14
+ scores: new Uint16Array([10, 20, 30]),
15
+ name: "legacy"
16
+ };
17
+ const serialized = serialize(data);
18
+ const binarySizes = serialized.binary.map((a) => a.byteLength);
19
+ const binaryParts = serialized.binary.map((a) => new Uint8Array(a.buffer, a.byteOffset, a.byteLength));
20
+ const jsonBlob = new Blob([JSON.stringify({ json: serialized.json, binarySizes })], { type: "application/json" });
21
+ const binaryBlob = new Blob(binaryParts, { type: "application/octet-stream" });
22
+ const result = await deserializeFromBlobs({ json: jsonBlob, binary: binaryBlob });
23
+ expect(result.name).toBe("legacy");
24
+ expect(result.scores).toEqual(data.scores);
25
+ });
5
26
  it("should serialize and deserialize primitive data", async () => {
6
27
  const data = {
7
28
  string: "hello world",
@@ -1 +1 @@
1
- {"version":3,"file":"serialize-to-blobs.test.js","sourceRoot":"","sources":["../../../src/functions/serialization/serialize-to-blobs.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"serialize-to-blobs.test.js","sourceRoot":"","sources":["../../../src/functions/serialization/serialize-to-blobs.test.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,6 @@
1
1
  // © 2026 Adobe. MIT License. See /LICENSE for details.
2
2
  import { toArrayBufferBacked } from "../../internal/array-buffer-like/index.js";
3
+ import { compressDeflate, decompressDeflate } from "./compression.js";
3
4
  import { serialize, deserialize } from "./serialize.js";
4
5
  /**
5
6
  * Converts a Uint8Array to a base64 string
@@ -31,73 +32,13 @@ const base64ToUint8Array = (base64) => {
31
32
  }
32
33
  return bytes;
33
34
  };
34
- /**
35
- * Compresses a Uint8Array using the deflate algorithm
36
- */
37
- const compressData = async (data) => {
38
- const stream = new ReadableStream({
39
- start(controller) {
40
- controller.enqueue(data);
41
- controller.close();
42
- }
43
- });
44
- const compressedStream = stream.pipeThrough(new CompressionStream('deflate'));
45
- const chunks = [];
46
- const reader = compressedStream.getReader();
47
- for (;;) {
48
- const { done, value } = await reader.read();
49
- if (done)
50
- break;
51
- chunks.push(toArrayBufferBacked(value));
52
- }
53
- // Concatenate all chunks
54
- const totalLength = chunks.reduce((sum, chunk) => sum + chunk.length, 0);
55
- const result = new Uint8Array(totalLength);
56
- let offset = 0;
57
- for (const chunk of chunks) {
58
- result.set(chunk, offset);
59
- offset += chunk.length;
60
- }
61
- return result;
62
- };
63
- /**
64
- * Decompresses a Uint8Array using the deflate algorithm
65
- */
66
- const decompressData = async (data) => {
67
- const stream = new ReadableStream({
68
- start(controller) {
69
- controller.enqueue(data);
70
- controller.close();
71
- }
72
- });
73
- const decompressedStream = stream.pipeThrough(new DecompressionStream('deflate'));
74
- const chunks = [];
75
- const reader = decompressedStream.getReader();
76
- for (;;) {
77
- const { done, value } = await reader.read();
78
- if (done)
79
- break;
80
- chunks.push(toArrayBufferBacked(value));
81
- }
82
- // Concatenate all chunks
83
- const totalLength = chunks.reduce((sum, chunk) => sum + chunk.length, 0);
84
- const result = new Uint8Array(totalLength);
85
- let offset = 0;
86
- for (const chunk of chunks) {
87
- result.set(chunk, offset);
88
- offset += chunk.length;
89
- }
90
- return result;
91
- };
92
35
  /**
93
36
  * Serializes data to a single JSON string with base64-encoded and compressed binary data.
94
37
  * The binary arrays are concatenated, compressed using deflate, and their original lengths are stored to allow reconstruction.
95
38
  */
96
39
  export const serializeToJSON = async (data) => {
97
40
  const serialized = serialize(data);
98
- // Store the length of each binary chunk
99
41
  const lengths = serialized.binary.map(chunk => chunk.byteLength);
100
- // Calculate total size and concatenate all binary arrays into a single Uint8Array
101
42
  const totalSize = lengths.reduce((sum, len) => sum + len, 0);
102
43
  const combinedBinary = new Uint8Array(totalSize);
103
44
  let offset = 0;
@@ -105,12 +46,10 @@ export const serializeToJSON = async (data) => {
105
46
  combinedBinary.set(binaryChunk, offset);
106
47
  offset += binaryChunk.byteLength;
107
48
  }
108
- // Compress the binary data
109
- const compressedBinary = await compressData(combinedBinary);
110
- // Convert to base64
49
+ const compressedBinary = await compressDeflate(combinedBinary);
111
50
  const base64Binary = uint8ArrayToBase64(compressedBinary);
112
51
  const result = {
113
- json: JSON.parse(serialized.json), // Parse to avoid double-encoding
52
+ json: JSON.parse(serialized.json),
114
53
  lengths,
115
54
  binary: base64Binary
116
55
  };
@@ -121,11 +60,8 @@ export const serializeToJSON = async (data) => {
121
60
  */
122
61
  export const deserializeFromJSON = async (jsonString) => {
123
62
  const parsed = JSON.parse(jsonString);
124
- // Convert base64 back to Uint8Array
125
63
  const compressedBinary = base64ToUint8Array(parsed.binary);
126
- // Decompress the binary data
127
- const combinedBinary = await decompressData(compressedBinary);
128
- // Split the combined binary back into chunks based on lengths
64
+ const combinedBinary = await decompressDeflate(compressedBinary);
129
65
  const binaryChunks = [];
130
66
  let offset = 0;
131
67
  for (const length of parsed.lengths) {
@@ -133,9 +69,8 @@ export const deserializeFromJSON = async (jsonString) => {
133
69
  binaryChunks.push(toArrayBufferBacked(chunk));
134
70
  offset += length;
135
71
  }
136
- // Deserialize using the original deserialize function
137
72
  return deserialize({
138
- json: JSON.stringify(parsed.json), // Convert back to string for deserialize()
73
+ json: JSON.stringify(parsed.json),
139
74
  binary: binaryChunks
140
75
  });
141
76
  };
@@ -1 +1 @@
1
- {"version":3,"file":"serialize-to-json.js","sourceRoot":"","sources":["../../../src/functions/serialization/serialize-to-json.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"serialize-to-json.js","sourceRoot":"","sources":["../../../src/functions/serialization/serialize-to-json.ts"],"names":[],"mappings":"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"}
@@ -23,6 +23,7 @@ export * from "./with-async-map.js";
23
23
  export * from "./with-map.js";
24
24
  export * from "./with-map-data.js";
25
25
  export * from "./with-optional.js";
26
+ export * from "./with-switch.js";
26
27
  export * from "./with-unwrap.js";
27
28
  export * from "./with-lazy.js";
28
29
  export * from "./with-batch.js";
@@ -24,6 +24,7 @@ export * from "./with-async-map.js";
24
24
  export * from "./with-map.js";
25
25
  export * from "./with-map-data.js";
26
26
  export * from "./with-optional.js";
27
+ export * from "./with-switch.js";
27
28
  export * from "./with-unwrap.js";
28
29
  export * from "./with-lazy.js";
29
30
  export * from "./with-batch.js";
@@ -1 +1 @@
1
- {"version":3,"file":"public.js","sourceRoot":"","sources":["../../src/observe/public.ts"],"names":[],"mappings":"AAAA,uDAAuD;AAEvD,cAAc,mBAAmB,CAAC;AAClC,cAAc,mBAAmB,CAAC;AAClC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,yBAAyB,CAAC;AACxC,cAAc,oBAAoB,CAAC;AACnC,cAAc,sBAAsB,CAAC;AACrC,cAAc,yCAAyC,CAAC;AACxD,cAAc,4BAA4B,CAAC;AAC3C,cAAc,iBAAiB,CAAC;AAChC,cAAc,sBAAsB,CAAC;AACrC,cAAc,8BAA8B,CAAC;AAC7C,cAAc,mBAAmB,CAAC;AAClC,cAAc,iBAAiB,CAAC;AAChC,cAAc,oBAAoB,CAAC;AACnC,cAAc,yBAAyB,CAAC;AACxC,cAAc,iBAAiB,CAAC;AAChC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,4BAA4B,CAAC;AAC3C,cAAc,uBAAuB,CAAC;AACtC,cAAc,mBAAmB,CAAC;AAClC,cAAc,kBAAkB,CAAC;AACjC,cAAc,qBAAqB,CAAC;AACpC,cAAc,eAAe,CAAC;AAC9B,cAAc,oBAAoB,CAAC;AACnC,cAAc,oBAAoB,CAAC;AACnC,cAAc,kBAAkB,CAAC;AACjC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,iBAAiB,CAAC"}
1
+ {"version":3,"file":"public.js","sourceRoot":"","sources":["../../src/observe/public.ts"],"names":[],"mappings":"AAAA,uDAAuD;AAEvD,cAAc,mBAAmB,CAAC;AAClC,cAAc,mBAAmB,CAAC;AAClC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,yBAAyB,CAAC;AACxC,cAAc,oBAAoB,CAAC;AACnC,cAAc,sBAAsB,CAAC;AACrC,cAAc,yCAAyC,CAAC;AACxD,cAAc,4BAA4B,CAAC;AAC3C,cAAc,iBAAiB,CAAC;AAChC,cAAc,sBAAsB,CAAC;AACrC,cAAc,8BAA8B,CAAC;AAC7C,cAAc,mBAAmB,CAAC;AAClC,cAAc,iBAAiB,CAAC;AAChC,cAAc,oBAAoB,CAAC;AACnC,cAAc,yBAAyB,CAAC;AACxC,cAAc,iBAAiB,CAAC;AAChC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,4BAA4B,CAAC;AAC3C,cAAc,uBAAuB,CAAC;AACtC,cAAc,mBAAmB,CAAC;AAClC,cAAc,kBAAkB,CAAC;AACjC,cAAc,qBAAqB,CAAC;AACpC,cAAc,eAAe,CAAC;AAC9B,cAAc,oBAAoB,CAAC;AACnC,cAAc,oBAAoB,CAAC;AACnC,cAAc,kBAAkB,CAAC;AACjC,cAAc,kBAAkB,CAAC;AACjC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,iBAAiB,CAAC"}
@@ -0,0 +1,18 @@
1
+ import { Observe } from "./index.js";
2
+ /**
3
+ * Dynamically switches between observables in a record based on a key observable.
4
+ * When the key changes, automatically unsubscribes from the previous observable and subscribes to the new one.
5
+ *
6
+ * @example
7
+ * ```typescript
8
+ * const data = {
9
+ * home: homeData$,
10
+ * profile: profileData$,
11
+ * settings: settingsData$
12
+ * };
13
+ * const currentTab$ = createState('home');
14
+ * const currentData$ = withSwitch(data, currentTab$);
15
+ * // When currentTab$ changes, automatically switches to observing the corresponding data observable
16
+ * ```
17
+ */
18
+ export declare function withSwitch<K extends string, T extends Record<K, Observe<any>>>(record: T, key: Observe<K>): Observe<T[K] extends Observe<infer U> ? U : never>;
@@ -0,0 +1,45 @@
1
+ /**
2
+ * Dynamically switches between observables in a record based on a key observable.
3
+ * When the key changes, automatically unsubscribes from the previous observable and subscribes to the new one.
4
+ *
5
+ * @example
6
+ * ```typescript
7
+ * const data = {
8
+ * home: homeData$,
9
+ * profile: profileData$,
10
+ * settings: settingsData$
11
+ * };
12
+ * const currentTab$ = createState('home');
13
+ * const currentData$ = withSwitch(data, currentTab$);
14
+ * // When currentTab$ changes, automatically switches to observing the corresponding data observable
15
+ * ```
16
+ */
17
+ export function withSwitch(record, key) {
18
+ return (observer) => {
19
+ let currentUnsubscribe = null;
20
+ const keyUnsubscribe = key((selectedKey) => {
21
+ // Unsubscribe from the previous observable before subscribing to the new one
22
+ currentUnsubscribe?.();
23
+ if (currentUnsubscribe) {
24
+ currentUnsubscribe();
25
+ currentUnsubscribe = null;
26
+ }
27
+ // Validate that the key exists in the record
28
+ if (!(selectedKey in record)) {
29
+ throw new Error(`Key "${selectedKey}" not found in observable record. Available keys: ${Object.keys(record).join(", ")}`);
30
+ }
31
+ // Subscribe to the newly selected observable
32
+ const selectedObservable = record[selectedKey];
33
+ currentUnsubscribe = selectedObservable(observer);
34
+ });
35
+ // Return a new unsubscribe function that unsubscribes from both the key observable and current selected observable
36
+ return () => {
37
+ keyUnsubscribe();
38
+ if (currentUnsubscribe) {
39
+ currentUnsubscribe();
40
+ currentUnsubscribe = null;
41
+ }
42
+ };
43
+ };
44
+ }
45
+ //# sourceMappingURL=with-switch.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"with-switch.js","sourceRoot":"","sources":["../../src/observe/with-switch.ts"],"names":[],"mappings":"AAGA;;;;;;;;;;;;;;;GAeG;AACH,MAAM,UAAU,UAAU,CACxB,MAAS,EACT,GAAe;IAEf,OAAO,CAAC,QAAQ,EAAE,EAAE;QAClB,IAAI,kBAAkB,GAAqB,IAAI,CAAC;QAEhD,MAAM,cAAc,GAAG,GAAG,CAAC,CAAC,WAAW,EAAE,EAAE;YACzC,6EAA6E;YAC7E,kBAAkB,EAAE,EAAE,CAAC;YACvB,IAAI,kBAAkB,EAAE,CAAC;gBACvB,kBAAkB,EAAE,CAAC;gBACrB,kBAAkB,GAAG,IAAI,CAAC;YAC5B,CAAC;YAED,6CAA6C;YAC7C,IAAI,CAAC,CAAC,WAAW,IAAI,MAAM,CAAC,EAAE,CAAC;gBAC7B,MAAM,IAAI,KAAK,CACb,QAAQ,WAAW,qDAAqD,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CACzG,CAAC;YACJ,CAAC;YAED,6CAA6C;YAC7C,MAAM,kBAAkB,GAAG,MAAM,CAAC,WAAW,CAAC,CAAC;YAC/C,kBAAkB,GAAG,kBAAkB,CAAC,QAAQ,CAAC,CAAC;QACpD,CAAC,CAAC,CAAC;QAEH,mHAAmH;QACnH,OAAO,GAAG,EAAE;YACV,cAAc,EAAE,CAAC;YACjB,IAAI,kBAAkB,EAAE,CAAC;gBACvB,kBAAkB,EAAE,CAAC;gBACrB,kBAAkB,GAAG,IAAI,CAAC;YAC5B,CAAC;QACH,CAAC,CAAC;IACJ,CAAC,CAAC;AACJ,CAAC"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,142 @@
1
+ // © 2026 Adobe. MIT License. See /LICENSE for details.
2
+ import { describe, test, expect, assertType } from "vitest";
3
+ import { withSwitch } from "./with-switch.js";
4
+ import { fromConstant } from "./from-constant.js";
5
+ import { createState } from "./create-state.js";
6
+ describe("withSwitch", () => {
7
+ test("should switch and observe the selected observable", () => {
8
+ const record = {
9
+ a: fromConstant(1),
10
+ b: fromConstant(2),
11
+ c: fromConstant(3),
12
+ };
13
+ const key = fromConstant("b");
14
+ const picked = withSwitch(record, key);
15
+ let result;
16
+ picked((value) => {
17
+ result = value;
18
+ })();
19
+ expect(result).toBe(2);
20
+ });
21
+ test("should switch observables when key changes", () => {
22
+ const record = {
23
+ a: fromConstant(10),
24
+ b: fromConstant(20),
25
+ c: fromConstant(30),
26
+ };
27
+ const [key, setKey] = createState("a");
28
+ const picked = withSwitch(record, key);
29
+ const values = [];
30
+ const unsubscribe = picked((value) => {
31
+ values.push(value);
32
+ });
33
+ setKey("b");
34
+ setKey("c");
35
+ unsubscribe();
36
+ expect(values).toEqual([10, 20, 30]);
37
+ });
38
+ test("should unsubscribe from previous observable when key changes", () => {
39
+ const [observableA, setA] = createState(100);
40
+ const [observableB, setB] = createState(200);
41
+ const record = { a: observableA, b: observableB };
42
+ const [key, setKey] = createState("a");
43
+ const picked = withSwitch(record, key);
44
+ const values = [];
45
+ const unsubscribe = picked((value) => {
46
+ values.push(value);
47
+ });
48
+ setA(101); // Should be observed
49
+ setKey("b"); // Switch to b
50
+ setA(102); // Should NOT be observed (unsubscribed from a)
51
+ setB(201); // Should be observed
52
+ unsubscribe();
53
+ expect(values).toEqual([100, 101, 200, 201]);
54
+ });
55
+ test("should clean up all subscriptions on unobserve", () => {
56
+ const [observableA, setA] = createState(1);
57
+ const [observableB, setB] = createState(2);
58
+ const record = { a: observableA, b: observableB };
59
+ const [key, setKey] = createState("a");
60
+ const picked = withSwitch(record, key);
61
+ const values = [];
62
+ const unsubscribe = picked((value) => {
63
+ values.push(value);
64
+ });
65
+ setA(10);
66
+ unsubscribe();
67
+ // After unsubscribe, no further notifications
68
+ setA(20);
69
+ setB(30);
70
+ setKey("b");
71
+ expect(values).toEqual([1, 10]);
72
+ });
73
+ test("should handle rapid key changes", () => {
74
+ const record = {
75
+ x: fromConstant("first"),
76
+ y: fromConstant("second"),
77
+ z: fromConstant("third"),
78
+ };
79
+ const [key, setKey] = createState("x");
80
+ const picked = withSwitch(record, key);
81
+ const values = [];
82
+ const unsubscribe = picked((value) => {
83
+ values.push(value);
84
+ });
85
+ setKey("y");
86
+ setKey("z");
87
+ setKey("x");
88
+ setKey("z");
89
+ unsubscribe();
90
+ expect(values).toEqual(["first", "second", "third", "first", "third"]);
91
+ });
92
+ test("should throw error when key is not in record", () => {
93
+ const record = {
94
+ a: fromConstant(1),
95
+ b: fromConstant(2),
96
+ };
97
+ const [key, setKey] = createState("a");
98
+ const picked = withSwitch(record, key);
99
+ const unsubscribe = picked(() => { });
100
+ expect(() => {
101
+ setKey("invalid");
102
+ }).toThrow('Key "invalid" not found in observable record');
103
+ unsubscribe();
104
+ });
105
+ test("type inference: should infer union type from subset of keys", () => {
106
+ // Compile-time type test
107
+ const record = {
108
+ a: fromConstant(true),
109
+ b: fromConstant("hello"),
110
+ c: fromConstant(42),
111
+ };
112
+ const key = fromConstant("a");
113
+ const result = withSwitch(record, key);
114
+ // Type should be Observe<boolean | string>, not Observe<boolean | string | number>
115
+ assertType(result);
116
+ });
117
+ test("type inference: should work with all keys", () => {
118
+ // Compile-time type test
119
+ const record = {
120
+ a: fromConstant(true),
121
+ b: fromConstant("hello"),
122
+ c: fromConstant(42),
123
+ };
124
+ const key = fromConstant("a");
125
+ const result = withSwitch(record, key);
126
+ // Type should be Observe<boolean | string | number>
127
+ assertType(result);
128
+ });
129
+ test("type inference: should work with single key", () => {
130
+ // Compile-time type test
131
+ const record = {
132
+ a: fromConstant(true),
133
+ b: fromConstant("hello"),
134
+ c: fromConstant(42),
135
+ };
136
+ const key = fromConstant("b");
137
+ const result = withSwitch(record, key);
138
+ // Type should be Observe<string>
139
+ assertType(result);
140
+ });
141
+ });
142
+ //# sourceMappingURL=with-switch.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"with-switch.test.js","sourceRoot":"","sources":["../../src/observe/with-switch.test.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,7 @@
1
+ /**
2
+ * @deprecated Use `@adobe/data/ecs` with `Database.Plugin.create` instead.
3
+ * This module will be removed in a future release.
4
+ */
1
5
  export * from "./core-ecs/index.js";
2
6
  export * from "./ecs/index.js";
3
7
  export * from "./transaction-ecs/index.js";
@@ -1,4 +1,8 @@
1
1
  // © 2026 Adobe. MIT License. See /LICENSE for details.
2
+ /**
3
+ * @deprecated Use `@adobe/data/ecs` with `Database.Plugin.create` instead.
4
+ * This module will be removed in a future release.
5
+ */
2
6
  export * from "./core-ecs/index.js";
3
7
  export * from "./ecs/index.js";
4
8
  export * from "./transaction-ecs/index.js";
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/old-ecs/index.ts"],"names":[],"mappings":"AAAA,uDAAuD;AACvD,cAAc,qBAAqB,CAAC;AACpC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,4BAA4B,CAAC;AAC3C,cAAc,uBAAuB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/old-ecs/index.ts"],"names":[],"mappings":"AAAA,uDAAuD;AAEvD;;;GAGG;AAEH,cAAc,qBAAqB,CAAC;AACpC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,4BAA4B,CAAC;AAC3C,cAAc,uBAAuB,CAAC"}