@syncular/core 0.0.6-212 → 0.0.6-219

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/types.d.ts CHANGED
@@ -99,6 +99,36 @@ export interface SyncTransportOptions {
99
99
  */
100
100
  signal?: AbortSignal;
101
101
  }
102
+ export type SyncSnapshotChunkReadMode = 'stream' | 'bytes';
103
+ export type SyncGzipDecompressionMode = 'stream' | 'buffered';
104
+ export type SyncBootstrapApplyMode = 'single-transaction' | 'per-subscription';
105
+ /**
106
+ * Declares transport/runtime capabilities that affect how the client should
107
+ * fetch, decode, and apply bootstrap snapshots.
108
+ */
109
+ export interface SyncTransportCapabilities {
110
+ /**
111
+ * Preferred snapshot chunk download mode for this runtime.
112
+ * - `stream`: consume the response body as a stream when available
113
+ * - `bytes`: buffer the whole response body before decode/apply
114
+ */
115
+ snapshotChunkReadMode?: SyncSnapshotChunkReadMode;
116
+ /**
117
+ * Preferred gzip decode mode for this runtime.
118
+ * - `stream`: use `DecompressionStream`
119
+ * - `buffered`: gunzip a materialized byte buffer
120
+ */
121
+ gzipDecompressionMode?: SyncGzipDecompressionMode;
122
+ /**
123
+ * Hint that chunked bootstrap snapshots should be materialized into rows
124
+ * before plugin/app consumption.
125
+ */
126
+ preferMaterializedSnapshots?: boolean;
127
+ /**
128
+ * Preferred default transaction strategy for bootstrap apply.
129
+ */
130
+ preferredBootstrapApplyMode?: SyncBootstrapApplyMode;
131
+ }
102
132
  /**
103
133
  * Blob transport operations (optional extension to SyncTransport).
104
134
  * When present, enables blob upload/download through the same transport.
@@ -138,6 +168,10 @@ export interface SyncTransportBlobs {
138
168
  * Transport interface for sync operations.
139
169
  */
140
170
  export interface SyncTransport {
171
+ /**
172
+ * Optional runtime/transport capabilities.
173
+ */
174
+ capabilities?: SyncTransportCapabilities;
141
175
  /**
142
176
  * Combined push+pull in a single round-trip.
143
177
  */
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
package/dist/types.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAmNH;;GAEG;AACH,MAAM,OAAO,kBAAmB,SAAQ,KAAK;IAGzB,MAAM;IACN,IAAI;IAHtB,YACE,OAAe,EACC,MAAe,EACf,IAAa,EAC7B;QACA,KAAK,CAAC,OAAO,CAAC,CAAC;sBAHC,MAAM;oBACN,IAAI;QAGpB,IAAI,CAAC,IAAI,GAAG,oBAAoB,CAAC;IAAA,CAClC;CACF"}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAyPH;;GAEG;AACH,MAAM,OAAO,kBAAmB,SAAQ,KAAK;IAGzB,MAAM;IACN,IAAI;IAHtB,YACE,OAAe,EACC,MAAe,EACf,IAAa,EAC7B;QACA,KAAK,CAAC,OAAO,CAAC,CAAC;sBAHC,MAAM;oBACN,IAAI;QAGpB,IAAI,CAAC,IAAI,GAAG,oBAAoB,CAAC;IAAA,CAClC;CACF"}
@@ -3,6 +3,11 @@
3
3
  * in the current runtime.
4
4
  */
5
5
  export declare function gzipBytes(payload: Uint8Array): Promise<Uint8Array>;
6
+ /**
7
+ * Gzip-decompress a byte array using the fastest implementation available in
8
+ * the current runtime, with a pure-JS fallback for runtimes like Expo/Hermes.
9
+ */
10
+ export declare function gunzipBytes(payload: Uint8Array): Promise<Uint8Array>;
6
11
  /**
7
12
  * Gzip-compress bytes and return a stream. When streaming compression is not
8
13
  * available, falls back to eager compression and includes byteLength metadata.
@@ -1 +1 @@
1
- {"version":3,"file":"compression.d.ts","sourceRoot":"","sources":["../../src/utils/compression.ts"],"names":[],"mappings":"AAgBA;;;GAGG;AACH,wBAAsB,SAAS,CAAC,OAAO,EAAE,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC,CA6BxE;AAED;;;GAGG;AACH,wBAAsB,iBAAiB,CAAC,OAAO,EAAE,UAAU,GAAG,OAAO,CAAC;IACpE,MAAM,EAAE,cAAc,CAAC,UAAU,CAAC,CAAC;IACnC,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB,CAAC,CAoBD"}
1
+ {"version":3,"file":"compression.d.ts","sourceRoot":"","sources":["../../src/utils/compression.ts"],"names":[],"mappings":"AAkCA;;;GAGG;AACH,wBAAsB,SAAS,CAAC,OAAO,EAAE,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC,CA6BxE;AAED;;;GAGG;AACH,wBAAsB,WAAW,CAAC,OAAO,EAAE,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC,CAkC1E;AAED;;;GAGG;AACH,wBAAsB,iBAAiB,CAAC,OAAO,EAAE,UAAU,GAAG,OAAO,CAAC;IACpE,MAAM,EAAE,cAAc,CAAC,UAAU,CAAC,CAAC;IACnC,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB,CAAC,CAoBD"}
@@ -1,12 +1,26 @@
1
+ import { gunzipSync as gunzipSyncFflate } from 'fflate';
1
2
  import { bytesToReadableStream, readAllBytesFromStream } from './bytes.js';
2
3
  import { getBunRuntime, usesNodeRuntimeModules } from './internal-runtime.js';
3
4
  let nodeZlibModulePromise = null;
5
+ function importNodeModule(specifier) {
6
+ return new Function('specifier', 'return import(specifier);')(specifier);
7
+ }
8
+ function tryImportNodeModule(specifier) {
9
+ try {
10
+ return importNodeModule(specifier);
11
+ }
12
+ catch {
13
+ return Promise.resolve(null);
14
+ }
15
+ }
4
16
  async function getNodeZlibModule() {
5
17
  if (!usesNodeRuntimeModules()) {
6
18
  return null;
7
19
  }
8
20
  if (!nodeZlibModulePromise) {
9
- nodeZlibModulePromise = import('node:zlib').catch(() => null);
21
+ nodeZlibModulePromise = tryImportNodeModule('node:zlib')
22
+ .then((module) => module)
23
+ .catch(() => null);
10
24
  }
11
25
  return nodeZlibModulePromise;
12
26
  }
@@ -37,6 +51,38 @@ export async function gzipBytes(payload) {
37
51
  }
38
52
  throw new Error('Failed to gzip bytes, no compression implementation available');
39
53
  }
54
+ /**
55
+ * Gzip-decompress a byte array using the fastest implementation available in
56
+ * the current runtime, with a pure-JS fallback for runtimes like Expo/Hermes.
57
+ */
58
+ export async function gunzipBytes(payload) {
59
+ const bun = getBunRuntime();
60
+ if (bun?.gunzipSync) {
61
+ return bun.gunzipSync(payload);
62
+ }
63
+ const nodeZlib = await getNodeZlibModule();
64
+ if (nodeZlib?.gunzip) {
65
+ return await new Promise((resolve, reject) => {
66
+ nodeZlib.gunzip(payload, (error, decompressed) => {
67
+ if (error) {
68
+ reject(error);
69
+ return;
70
+ }
71
+ resolve(new Uint8Array(decompressed));
72
+ });
73
+ });
74
+ }
75
+ if (typeof DecompressionStream !== 'undefined') {
76
+ const stream = bytesToReadableStream(payload).pipeThrough(new DecompressionStream('gzip'));
77
+ return readAllBytesFromStream(stream);
78
+ }
79
+ try {
80
+ return gunzipSyncFflate(payload);
81
+ }
82
+ catch (error) {
83
+ throw new Error('Failed to gunzip bytes, no decompression implementation available', { cause: error });
84
+ }
85
+ }
40
86
  /**
41
87
  * Gzip-compress bytes and return a stream. When streaming compression is not
42
88
  * available, falls back to eager compression and includes byteLength metadata.
@@ -1 +1 @@
1
- {"version":3,"file":"compression.js","sourceRoot":"","sources":["../../src/utils/compression.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,sBAAsB,EAAE,MAAM,SAAS,CAAC;AACxE,OAAO,EAAE,aAAa,EAAE,sBAAsB,EAAE,MAAM,oBAAoB,CAAC;AAE3E,IAAI,qBAAqB,GACvB,IAAI,CAAC;AAEP,KAAK,UAAU,iBAAiB,GAA+C;IAC7E,IAAI,CAAC,sBAAsB,EAAE,EAAE,CAAC;QAC9B,OAAO,IAAI,CAAC;IACd,CAAC;IACD,IAAI,CAAC,qBAAqB,EAAE,CAAC;QAC3B,qBAAqB,GAAG,MAAM,CAAC,WAAW,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC;IAChE,CAAC;IACD,OAAO,qBAAqB,CAAC;AAAA,CAC9B;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,OAAmB,EAAuB;IACxE,MAAM,GAAG,GAAG,aAAa,EAAE,CAAC;IAC5B,IAAI,GAAG,EAAE,QAAQ,EAAE,CAAC;QAClB,OAAO,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;IAC/B,CAAC;IAED,MAAM,QAAQ,GAAG,MAAM,iBAAiB,EAAE,CAAC;IAC3C,IAAI,QAAQ,EAAE,IAAI,EAAE,CAAC;QACnB,OAAO,MAAM,IAAI,OAAO,CAAa,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE,CAAC;YACxD,QAAQ,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,UAAU,EAAE,EAAE,CAAC;gBAC5C,IAAI,KAAK,EAAE,CAAC;oBACV,MAAM,CAAC,KAAK,CAAC,CAAC;oBACd,OAAO;gBACT,CAAC;gBACD,OAAO,CAAC,IAAI,UAAU,CAAC,UAAU,CAAC,CAAC,CAAC;YAAA,CACrC,CAAC,CAAC;QAAA,CACJ,CAAC,CAAC;IACL,CAAC;IAED,IAAI,OAAO,iBAAiB,KAAK,WAAW,EAAE,CAAC;QAC7C,MAAM,MAAM,GAAG,qBAAqB,CAAC,OAAO,CAAC,CAAC,WAAW,CACvD,IAAI,iBAAiB,CAAC,MAAM,CAA4C,CACzE,CAAC;QACF,OAAO,sBAAsB,CAAC,MAAM,CAAC,CAAC;IACxC,CAAC;IAED,MAAM,IAAI,KAAK,CACb,+DAA+D,CAChE,CAAC;AAAA,CACH;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,OAAmB,EAGxD;IACD,MAAM,GAAG,GAAG,aAAa,EAAE,CAAC;IAC5B,MAAM,QAAQ,GAAG,MAAM,iBAAiB,EAAE,CAAC;IAE3C,IAAI,CAAC,GAAG,EAAE,QAAQ,IAAI,CAAC,QAAQ,IAAI,OAAO,iBAAiB,KAAK,WAAW,EAAE,CAAC;QAC5E,MAAM,MAAM,GAAG,qBAAqB,CAAC,OAAO,CAAC,CAAC;QAC9C,MAAM,UAAU,GAAG,IAAI,iBAAiB,CAAC,MAAM,CAG9C,CAAC;QACF,OAAO;YACL,MAAM,EAAE,MAAM,CAAC,WAAW,CAAC,UAAU,CAAC;SACvC,CAAC;IACJ,CAAC;IAED,MAAM,UAAU,GAAG,MAAM,SAAS,CAAC,OAAO,CAAC,CAAC;IAC5C,OAAO;QACL,MAAM,EAAE,qBAAqB,CAAC,UAAU,CAAC;QACzC,UAAU,EAAE,UAAU,CAAC,MAAM;KAC9B,CAAC;AAAA,CACH"}
1
+ {"version":3,"file":"compression.js","sourceRoot":"","sources":["../../src/utils/compression.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"crypto.d.ts","sourceRoot":"","sources":["../../src/utils/crypto.ts"],"names":[],"mappings":"AAyCA,MAAM,WAAW,iBAAiB;IAChC,MAAM,CAAC,KAAK,EAAE,UAAU,GAAG,IAAI,CAAC;IAChC,SAAS,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC;CAC9B;AAED,wBAAsB,uBAAuB,IAAI,OAAO,CAAC,iBAAiB,CAAC,CAqC1E;AAED;;;;;GAKG;AACH,wBAAsB,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC,CA0B3E"}
1
+ {"version":3,"file":"crypto.d.ts","sourceRoot":"","sources":["../../src/utils/crypto.ts"],"names":[],"mappings":"AAsDA,MAAM,WAAW,iBAAiB;IAChC,MAAM,CAAC,KAAK,EAAE,UAAU,GAAG,IAAI,CAAC;IAChC,SAAS,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC;CAC9B;AAED,wBAAsB,uBAAuB,IAAI,OAAO,CAAC,iBAAiB,CAAC,CAqC1E;AAED;;;;;GAKG;AACH,wBAAsB,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC,CA0B3E"}
@@ -15,12 +15,25 @@ function toDigestBufferSource(payload) {
15
15
  return owned;
16
16
  }
17
17
  let nodeCryptoModulePromise = null;
18
+ function importNodeModule(specifier) {
19
+ return new Function('specifier', 'return import(specifier);')(specifier);
20
+ }
21
+ function tryImportNodeModule(specifier) {
22
+ try {
23
+ return importNodeModule(specifier);
24
+ }
25
+ catch {
26
+ return Promise.resolve(null);
27
+ }
28
+ }
18
29
  async function getNodeCryptoModule() {
19
30
  if (!usesNodeRuntimeModules()) {
20
31
  return null;
21
32
  }
22
33
  if (!nodeCryptoModulePromise) {
23
- nodeCryptoModulePromise = import('node:crypto').catch(() => null);
34
+ nodeCryptoModulePromise = tryImportNodeModule('node:crypto')
35
+ .then((module) => module)
36
+ .catch(() => null);
24
37
  }
25
38
  return nodeCryptoModulePromise;
26
39
  }
@@ -1 +1 @@
1
- {"version":3,"file":"crypto.js","sourceRoot":"","sources":["../../src/utils/crypto.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAC3C,OAAO,EAAE,aAAa,EAAE,sBAAsB,EAAE,MAAM,oBAAoB,CAAC;AAE3E,MAAM,WAAW,GAAG,IAAI,WAAW,EAAE,CAAC;AAEtC,SAAS,KAAK,CAAC,KAAiB,EAAU;IACxC,OAAO,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC;SACrB,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;SACjD,IAAI,CAAC,EAAE,CAAC,CAAC;AAAA,CACb;AAED,SAAS,oBAAoB,CAAC,OAAmB,EAA2B;IAC1E,IAAI,OAAO,CAAC,MAAM,YAAY,WAAW,EAAE,CAAC;QAC1C,OAAO,IAAI,UAAU,CACnB,OAAO,CAAC,MAAM,EACd,OAAO,CAAC,UAAU,EAClB,OAAO,CAAC,UAAU,CACnB,CAAC;IACJ,CAAC;IAED,MAAM,KAAK,GAAG,IAAI,UAAU,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;IACjD,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IACnB,OAAO,KAAK,CAAC;AAAA,CACd;AAED,IAAI,uBAAuB,GAEhB,IAAI,CAAC;AAEhB,KAAK,UAAU,mBAAmB,GAEhC;IACA,IAAI,CAAC,sBAAsB,EAAE,EAAE,CAAC;QAC9B,OAAO,IAAI,CAAC;IACd,CAAC;IACD,IAAI,CAAC,uBAAuB,EAAE,CAAC;QAC7B,uBAAuB,GAAG,MAAM,CAAC,aAAa,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC;IACpE,CAAC;IACD,OAAO,uBAAuB,CAAC;AAAA,CAChC;AAOD,MAAM,CAAC,KAAK,UAAU,uBAAuB,GAA+B;IAC1E,MAAM,GAAG,GAAG,aAAa,EAAE,CAAC;IAC5B,IAAI,GAAG,EAAE,YAAY,EAAE,CAAC;QACtB,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC;QAC9C,OAAO;YACL,MAAM,CAAC,KAAK,EAAE;gBACZ,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YAAA,CACtB;YACD,KAAK,CAAC,SAAS,GAAG;gBAChB,OAAO,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YAAA,CAC7B;SACF,CAAC;IACJ,CAAC;IAED,MAAM,UAAU,GAAG,MAAM,mBAAmB,EAAE,CAAC;IAC/C,IAAI,UAAU,EAAE,UAAU,EAAE,CAAC;QAC3B,MAAM,MAAM,GAAG,UAAU,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;QAC/C,OAAO;YACL,MAAM,CAAC,KAAK,EAAE;gBACZ,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YAAA,CACtB;YACD,KAAK,CAAC,SAAS,GAAG;gBAChB,OAAO,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YAAA,CAC7B;SACF,CAAC;IACJ,CAAC;IAED,MAAM,MAAM,GAAiB,EAAE,CAAC;IAChC,OAAO;QACL,MAAM,CAAC,KAAK,EAAE;YACZ,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;gBAAE,OAAO;YAC/B,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC;QAAA,CAC5B;QACD,KAAK,CAAC,SAAS,GAAG;YAChB,OAAO,SAAS,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC,CAAC;QAAA,CAC5C;KACF,CAAC;AAAA,CACH;AAED;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,KAA0B,EAAmB;IAC3E,MAAM,OAAO,GAAG,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,WAAW,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;IAE9E,MAAM,GAAG,GAAG,aAAa,EAAE,CAAC;IAC5B,IAAI,GAAG,EAAE,YAAY,EAAE,CAAC;QACtB,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC;QAC9C,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QACvB,OAAO,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAC9B,CAAC;IAED,MAAM,UAAU,GAAG,MAAM,mBAAmB,EAAE,CAAC;IAC/C,IAAI,UAAU,EAAE,UAAU,EAAE,CAAC;QAC3B,OAAO,UAAU,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IACvE,CAAC;IAED,IAAI,OAAO,MAAM,KAAK,WAAW,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;QACnD,MAAM,YAAY,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,MAAM,CAC7C,SAAS,EACT,oBAAoB,CAAC,OAAO,CAAC,CAC9B,CAAC;QACF,OAAO,KAAK,CAAC,IAAI,UAAU,CAAC,YAAY,CAAC,CAAC,CAAC;IAC7C,CAAC;IAED,MAAM,IAAI,KAAK,CACb,mEAAmE,CACpE,CAAC;AAAA,CACH"}
1
+ {"version":3,"file":"crypto.js","sourceRoot":"","sources":["../../src/utils/crypto.ts"],"names":[],"mappings":"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"}
@@ -5,6 +5,7 @@ interface BunCryptoHasher {
5
5
  interface BunRuntime {
6
6
  CryptoHasher?: new (algorithm: string) => BunCryptoHasher;
7
7
  gzipSync?: (data: Uint8Array) => Uint8Array;
8
+ gunzipSync?: (data: Uint8Array) => Uint8Array;
8
9
  readableStreamToBytes?: (stream: ReadableStream<Uint8Array>) => Promise<Uint8Array | ArrayBuffer>;
9
10
  }
10
11
  export declare function getBunRuntime(): BunRuntime | null;
@@ -1 +1 @@
1
- {"version":3,"file":"internal-runtime.d.ts","sourceRoot":"","sources":["../../src/utils/internal-runtime.ts"],"names":[],"mappings":"AAAA,UAAU,eAAe;IACvB,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,UAAU,GAAG,IAAI,CAAC;IACxC,MAAM,CAAC,QAAQ,EAAE,KAAK,GAAG,MAAM,CAAC;CACjC;AAED,UAAU,UAAU;IAClB,YAAY,CAAC,EAAE,KAAK,SAAS,EAAE,MAAM,KAAK,eAAe,CAAC;IAC1D,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,UAAU,KAAK,UAAU,CAAC;IAC5C,qBAAqB,CAAC,EAAE,CACtB,MAAM,EAAE,cAAc,CAAC,UAAU,CAAC,KAC/B,OAAO,CAAC,UAAU,GAAG,WAAW,CAAC,CAAC;CACxC;AAgBD,wBAAgB,aAAa,IAAI,UAAU,GAAG,IAAI,CAEjD;AAED,wBAAgB,sBAAsB,IAAI,OAAO,CAMhD"}
1
+ {"version":3,"file":"internal-runtime.d.ts","sourceRoot":"","sources":["../../src/utils/internal-runtime.ts"],"names":[],"mappings":"AAAA,UAAU,eAAe;IACvB,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,UAAU,GAAG,IAAI,CAAC;IACxC,MAAM,CAAC,QAAQ,EAAE,KAAK,GAAG,MAAM,CAAC;CACjC;AAED,UAAU,UAAU;IAClB,YAAY,CAAC,EAAE,KAAK,SAAS,EAAE,MAAM,KAAK,eAAe,CAAC;IAC1D,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,UAAU,KAAK,UAAU,CAAC;IAC5C,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,UAAU,KAAK,UAAU,CAAC;IAC9C,qBAAqB,CAAC,EAAE,CACtB,MAAM,EAAE,cAAc,CAAC,UAAU,CAAC,KAC/B,OAAO,CAAC,UAAU,GAAG,WAAW,CAAC,CAAC;CACxC;AAgBD,wBAAgB,aAAa,IAAI,UAAU,GAAG,IAAI,CAEjD;AAED,wBAAgB,sBAAsB,IAAI,OAAO,CAMhD"}
@@ -1 +1 @@
1
- {"version":3,"file":"internal-runtime.js","sourceRoot":"","sources":["../../src/utils/internal-runtime.ts"],"names":[],"mappings":"AAuBA,SAAS,iBAAiB,GAAmB;IAC3C,OAAO,UAA4B,CAAC;AAAA,CACrC;AAED,MAAM,UAAU,aAAa,GAAsB;IACjD,OAAO,iBAAiB,EAAE,CAAC,GAAG,IAAI,IAAI,CAAC;AAAA,CACxC;AAED,MAAM,UAAU,sBAAsB,GAAY;IAChD,MAAM,OAAO,GAAG,iBAAiB,EAAE,CAAC;IACpC,IAAI,OAAO,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;QAC/B,OAAO,IAAI,CAAC;IACd,CAAC;IACD,OAAO,OAAO,OAAO,CAAC,OAAO,EAAE,QAAQ,EAAE,IAAI,KAAK,QAAQ,CAAC;AAAA,CAC5D"}
1
+ {"version":3,"file":"internal-runtime.js","sourceRoot":"","sources":["../../src/utils/internal-runtime.ts"],"names":[],"mappings":"AAwBA,SAAS,iBAAiB,GAAmB;IAC3C,OAAO,UAA4B,CAAC;AAAA,CACrC;AAED,MAAM,UAAU,aAAa,GAAsB;IACjD,OAAO,iBAAiB,EAAE,CAAC,GAAG,IAAI,IAAI,CAAC;AAAA,CACxC;AAED,MAAM,UAAU,sBAAsB,GAAY;IAChD,MAAM,OAAO,GAAG,iBAAiB,EAAE,CAAC;IACpC,IAAI,OAAO,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;QAC/B,OAAO,IAAI,CAAC;IACd,CAAC;IACD,OAAO,OAAO,OAAO,CAAC,OAAO,EAAE,QAAQ,EAAE,IAAI,KAAK,QAAQ,CAAC;AAAA,CAC5D"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@syncular/core",
3
- "version": "0.0.6-212",
3
+ "version": "0.0.6-219",
4
4
  "description": "Core protocol types and shared utilities for the Syncular sync framework",
5
5
  "license": "Apache-2.0",
6
6
  "author": "Benjamin Kniffler",
@@ -54,5 +54,8 @@
54
54
  "files": [
55
55
  "dist",
56
56
  "src"
57
- ]
57
+ ],
58
+ "dependencies": {
59
+ "fflate": "^0.8.2"
60
+ }
58
61
  }
@@ -1,6 +1,6 @@
1
1
  import { describe, expect, it } from 'bun:test';
2
2
  import { gunzipSync } from 'node:zlib';
3
- import { gzipBytes, gzipBytesToStream } from '../utils';
3
+ import { gunzipBytes, gzipBytes, gzipBytesToStream } from '../utils';
4
4
 
5
5
  async function readStream(
6
6
  stream: ReadableStream<Uint8Array>
@@ -40,6 +40,17 @@ describe('gzipBytes', () => {
40
40
  });
41
41
  });
42
42
 
43
+ describe('gunzipBytes', () => {
44
+ it('decompresses gzip-compressed bytes', async () => {
45
+ const payload = new TextEncoder().encode(
46
+ 'syncular decompression test '.repeat(64)
47
+ );
48
+ const compressed = await gzipBytes(payload);
49
+ const decompressed = await gunzipBytes(compressed);
50
+ expect(decompressed).toEqual(payload);
51
+ });
52
+ });
53
+
43
54
  describe('gzipBytesToStream', () => {
44
55
  it('returns a gzip stream that round-trips', async () => {
45
56
  const payload = new TextEncoder().encode('stream compression '.repeat(64));
package/src/types.ts CHANGED
@@ -135,6 +135,40 @@ export interface SyncTransportOptions {
135
135
  signal?: AbortSignal;
136
136
  }
137
137
 
138
+ export type SyncSnapshotChunkReadMode = 'stream' | 'bytes';
139
+
140
+ export type SyncGzipDecompressionMode = 'stream' | 'buffered';
141
+
142
+ export type SyncBootstrapApplyMode = 'single-transaction' | 'per-subscription';
143
+
144
+ /**
145
+ * Declares transport/runtime capabilities that affect how the client should
146
+ * fetch, decode, and apply bootstrap snapshots.
147
+ */
148
+ export interface SyncTransportCapabilities {
149
+ /**
150
+ * Preferred snapshot chunk download mode for this runtime.
151
+ * - `stream`: consume the response body as a stream when available
152
+ * - `bytes`: buffer the whole response body before decode/apply
153
+ */
154
+ snapshotChunkReadMode?: SyncSnapshotChunkReadMode;
155
+ /**
156
+ * Preferred gzip decode mode for this runtime.
157
+ * - `stream`: use `DecompressionStream`
158
+ * - `buffered`: gunzip a materialized byte buffer
159
+ */
160
+ gzipDecompressionMode?: SyncGzipDecompressionMode;
161
+ /**
162
+ * Hint that chunked bootstrap snapshots should be materialized into rows
163
+ * before plugin/app consumption.
164
+ */
165
+ preferMaterializedSnapshots?: boolean;
166
+ /**
167
+ * Preferred default transaction strategy for bootstrap apply.
168
+ */
169
+ preferredBootstrapApplyMode?: SyncBootstrapApplyMode;
170
+ }
171
+
138
172
  /**
139
173
  * Blob transport operations (optional extension to SyncTransport).
140
174
  * When present, enables blob upload/download through the same transport.
@@ -174,6 +208,10 @@ export interface SyncTransportBlobs {
174
208
  * Transport interface for sync operations.
175
209
  */
176
210
  export interface SyncTransport {
211
+ /**
212
+ * Optional runtime/transport capabilities.
213
+ */
214
+ capabilities?: SyncTransportCapabilities;
177
215
  /**
178
216
  * Combined push+pull in a single round-trip.
179
217
  */
@@ -1,15 +1,33 @@
1
+ import { gunzipSync as gunzipSyncFflate } from 'fflate';
1
2
  import { bytesToReadableStream, readAllBytesFromStream } from './bytes';
2
3
  import { getBunRuntime, usesNodeRuntimeModules } from './internal-runtime';
3
4
 
4
- let nodeZlibModulePromise: Promise<typeof import('node:zlib') | null> | null =
5
- null;
5
+ type NodeZlibModule = typeof import('node:zlib');
6
6
 
7
- async function getNodeZlibModule(): Promise<typeof import('node:zlib') | null> {
7
+ let nodeZlibModulePromise: Promise<NodeZlibModule | null> | null = null;
8
+
9
+ function importNodeModule(specifier: string): Promise<unknown> {
10
+ return new Function('specifier', 'return import(specifier);')(
11
+ specifier
12
+ ) as Promise<unknown>;
13
+ }
14
+
15
+ function tryImportNodeModule(specifier: string): Promise<unknown> {
16
+ try {
17
+ return importNodeModule(specifier);
18
+ } catch {
19
+ return Promise.resolve(null);
20
+ }
21
+ }
22
+
23
+ async function getNodeZlibModule(): Promise<NodeZlibModule | null> {
8
24
  if (!usesNodeRuntimeModules()) {
9
25
  return null;
10
26
  }
11
27
  if (!nodeZlibModulePromise) {
12
- nodeZlibModulePromise = import('node:zlib').catch(() => null);
28
+ nodeZlibModulePromise = tryImportNodeModule('node:zlib')
29
+ .then((module) => module as NodeZlibModule)
30
+ .catch(() => null);
13
31
  }
14
32
  return nodeZlibModulePromise;
15
33
  }
@@ -49,6 +67,46 @@ export async function gzipBytes(payload: Uint8Array): Promise<Uint8Array> {
49
67
  );
50
68
  }
51
69
 
70
+ /**
71
+ * Gzip-decompress a byte array using the fastest implementation available in
72
+ * the current runtime, with a pure-JS fallback for runtimes like Expo/Hermes.
73
+ */
74
+ export async function gunzipBytes(payload: Uint8Array): Promise<Uint8Array> {
75
+ const bun = getBunRuntime();
76
+ if (bun?.gunzipSync) {
77
+ return bun.gunzipSync(payload);
78
+ }
79
+
80
+ const nodeZlib = await getNodeZlibModule();
81
+ if (nodeZlib?.gunzip) {
82
+ return await new Promise<Uint8Array>((resolve, reject) => {
83
+ nodeZlib.gunzip(payload, (error, decompressed) => {
84
+ if (error) {
85
+ reject(error);
86
+ return;
87
+ }
88
+ resolve(new Uint8Array(decompressed));
89
+ });
90
+ });
91
+ }
92
+
93
+ if (typeof DecompressionStream !== 'undefined') {
94
+ const stream = bytesToReadableStream(payload).pipeThrough(
95
+ new DecompressionStream('gzip') as TransformStream<Uint8Array, Uint8Array>
96
+ );
97
+ return readAllBytesFromStream(stream);
98
+ }
99
+
100
+ try {
101
+ return gunzipSyncFflate(payload);
102
+ } catch (error) {
103
+ throw new Error(
104
+ 'Failed to gunzip bytes, no decompression implementation available',
105
+ { cause: error }
106
+ );
107
+ }
108
+ }
109
+
52
110
  /**
53
111
  * Gzip-compress bytes and return a stream. When streaming compression is not
54
112
  * available, falls back to eager compression and includes byteLength metadata.
@@ -2,6 +2,7 @@ import { concatByteChunks } from './bytes';
2
2
  import { getBunRuntime, usesNodeRuntimeModules } from './internal-runtime';
3
3
 
4
4
  const textEncoder = new TextEncoder();
5
+ type NodeCryptoModule = typeof import('node:crypto');
5
6
 
6
7
  function toHex(bytes: Uint8Array): string {
7
8
  return Array.from(bytes)
@@ -23,18 +24,30 @@ function toDigestBufferSource(payload: Uint8Array): Uint8Array<ArrayBuffer> {
23
24
  return owned;
24
25
  }
25
26
 
26
- let nodeCryptoModulePromise: Promise<
27
- typeof import('node:crypto') | null
28
- > | null = null;
27
+ let nodeCryptoModulePromise: Promise<NodeCryptoModule | null> | null = null;
29
28
 
30
- async function getNodeCryptoModule(): Promise<
31
- typeof import('node:crypto') | null
32
- > {
29
+ function importNodeModule(specifier: string): Promise<unknown> {
30
+ return new Function('specifier', 'return import(specifier);')(
31
+ specifier
32
+ ) as Promise<unknown>;
33
+ }
34
+
35
+ function tryImportNodeModule(specifier: string): Promise<unknown> {
36
+ try {
37
+ return importNodeModule(specifier);
38
+ } catch {
39
+ return Promise.resolve(null);
40
+ }
41
+ }
42
+
43
+ async function getNodeCryptoModule(): Promise<NodeCryptoModule | null> {
33
44
  if (!usesNodeRuntimeModules()) {
34
45
  return null;
35
46
  }
36
47
  if (!nodeCryptoModulePromise) {
37
- nodeCryptoModulePromise = import('node:crypto').catch(() => null);
48
+ nodeCryptoModulePromise = tryImportNodeModule('node:crypto')
49
+ .then((module) => module as NodeCryptoModule)
50
+ .catch(() => null);
38
51
  }
39
52
  return nodeCryptoModulePromise;
40
53
  }
@@ -6,6 +6,7 @@ interface BunCryptoHasher {
6
6
  interface BunRuntime {
7
7
  CryptoHasher?: new (algorithm: string) => BunCryptoHasher;
8
8
  gzipSync?: (data: Uint8Array) => Uint8Array;
9
+ gunzipSync?: (data: Uint8Array) => Uint8Array;
9
10
  readableStreamToBytes?: (
10
11
  stream: ReadableStream<Uint8Array>
11
12
  ) => Promise<Uint8Array | ArrayBuffer>;