dexie-cloud-common 1.0.52 → 1.0.54
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/DBOperation.d.ts +3 -0
- package/dist/DBOperation.d.ts.map +1 -1
- package/dist/SyncChangeSet.d.ts +12 -0
- package/dist/SyncChangeSet.d.ts.map +1 -0
- package/dist/SyncChangeSet.js +1 -0
- package/dist/YMessage.d.ts +65 -0
- package/dist/YMessage.d.ts.map +1 -0
- package/dist/YMessage.js +7 -0
- package/dist/async-generators/asyncIterablePipeline.js +3 -18
- package/dist/async-generators/consumeChunkedBinaryStream.d.ts +1 -1
- package/dist/async-generators/consumeChunkedBinaryStream.d.ts.map +1 -1
- package/dist/async-generators/consumeChunkedBinaryStream.js +72 -88
- package/dist/async-generators/consumeChunkedBinaryStream.test.js +40 -60
- package/dist/async-generators/getFetchResponseBodyGenerator.d.ts +1 -1
- package/dist/async-generators/getFetchResponseBodyGenerator.d.ts.map +1 -1
- package/dist/async-generators/getFetchResponseBodyGenerator.js +14 -17
- package/dist/async-generators/produceChunkedBinaryStream.d.ts +1 -1
- package/dist/async-generators/produceChunkedBinaryStream.d.ts.map +1 -1
- package/dist/async-generators/produceChunkedBinaryStream.js +27 -43
- package/dist/change-processing/subtractChanges.js +3 -4
- package/dist/change-processing/toDBOperationSet.d.ts.map +1 -1
- package/dist/change-processing/toDBOperationSet.js +2 -6
- package/dist/change-processing/toSyncChangeSet.d.ts +10 -0
- package/dist/change-processing/toSyncChangeSet.d.ts.map +1 -0
- package/dist/change-processing/toSyncChangeSet.js +44 -0
- package/dist/decoding.d.ts +3 -0
- package/dist/decoding.d.ts.map +1 -0
- package/dist/decoding.js +70 -0
- package/dist/encoding.d.ts +3 -0
- package/dist/encoding.d.ts.map +1 -0
- package/dist/encoding.js +39 -0
- package/dist/utils.d.ts +1 -1
- package/dist/utils.d.ts.map +1 -1
- package/dist/yjs/encoding.js +1 -1
- package/package.json +7 -7
- package/tsconfig.tsbuildinfo +1 -1
package/dist/DBOperation.d.ts
CHANGED
|
@@ -33,6 +33,9 @@ export interface DBInsertOperation<PK = DBOpPrimaryKey> extends DBOperationCommo
|
|
|
33
33
|
export interface DBUpsertOperation<PK = DBOpPrimaryKey> extends DBOperationCommon<PK> {
|
|
34
34
|
type: "upsert";
|
|
35
35
|
values: readonly any[];
|
|
36
|
+
changeSpecs?: ({
|
|
37
|
+
[keyPath: string]: any;
|
|
38
|
+
} | null)[];
|
|
36
39
|
}
|
|
37
40
|
export interface DBUpdateOperation<PK = DBOpPrimaryKey> extends DBOperationCommon<PK> {
|
|
38
41
|
type: "update";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DBOperation.d.ts","sourceRoot":"","sources":["../src/DBOperation.ts"],"names":[],"mappings":"AACA,MAAM,MAAM,cAAc,GAAG,MAAM,GAAG,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,CAAC;AAE1D,mBAAW,eAAe;IACxB,KAAK,IAAI;IACT,KAAK,IAAI;IACT,GAAG,IAAI;IACP,KAAK,IAAI;CACV;AAED;;;EAGE;AACF,UAAU,cAAc;IACtB,QAAQ,CAAC,IAAI,EAAE,eAAe,GAAG,MAAM,CAAC;IACxC,QAAQ,CAAC,KAAK,EAAE,GAAG,CAAC;IACpB,QAAQ,CAAC,SAAS,CAAC,EAAE,OAAO,CAAC;IAC7B,QAAQ,CAAC,KAAK,EAAE,GAAG,CAAC;IACpB,QAAQ,CAAC,SAAS,CAAC,EAAE,OAAO,CAAC;CAC9B;AAED,MAAM,MAAM,WAAW,CAAC,EAAE,GAAC,cAAc,IACrC,iBAAiB,CAAC,EAAE,CAAC,GACrB,iBAAiB,CAAC,EAAE,CAAC,GACrB,iBAAiB,CAAC,EAAE,CAAC,GACrB,iBAAiB,CAAC,EAAE,CAAC,GACrB,iBAAiB,CAAC,EAAE,CAAC,CAAC;AAE1B,MAAM,WAAW,iBAAiB,CAAC,EAAE,GAAC,cAAc;IAClD,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,EAAE,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACnB,IAAI,EAAE,EAAE,EAAE,CAAC;IACX,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,iBAAiB,CAAC,EAAE,OAAO,CAAC;CAC7B;AACD,MAAM,WAAW,iBAAiB,CAAC,EAAE,GAAC,cAAc,CAAE,SAAQ,iBAAiB,CAAC,EAAE,CAAC;IACjF,IAAI,EAAE,QAAQ,CAAC;IACf,MAAM,EAAE,SAAS,GAAG,EAAE,CAAC;CACxB;AAED,MAAM,WAAW,iBAAiB,CAAC,EAAE,GAAC,cAAc,CAAE,SAAQ,iBAAiB,CAAC,EAAE,CAAC;IACjF,IAAI,EAAE,QAAQ,CAAC;IACf,MAAM,EAAE,SAAS,GAAG,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"DBOperation.d.ts","sourceRoot":"","sources":["../src/DBOperation.ts"],"names":[],"mappings":"AACA,MAAM,MAAM,cAAc,GAAG,MAAM,GAAG,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,CAAC;AAE1D,mBAAW,eAAe;IACxB,KAAK,IAAI;IACT,KAAK,IAAI;IACT,GAAG,IAAI;IACP,KAAK,IAAI;CACV;AAED;;;EAGE;AACF,UAAU,cAAc;IACtB,QAAQ,CAAC,IAAI,EAAE,eAAe,GAAG,MAAM,CAAC;IACxC,QAAQ,CAAC,KAAK,EAAE,GAAG,CAAC;IACpB,QAAQ,CAAC,SAAS,CAAC,EAAE,OAAO,CAAC;IAC7B,QAAQ,CAAC,KAAK,EAAE,GAAG,CAAC;IACpB,QAAQ,CAAC,SAAS,CAAC,EAAE,OAAO,CAAC;CAC9B;AAED,MAAM,MAAM,WAAW,CAAC,EAAE,GAAC,cAAc,IACrC,iBAAiB,CAAC,EAAE,CAAC,GACrB,iBAAiB,CAAC,EAAE,CAAC,GACrB,iBAAiB,CAAC,EAAE,CAAC,GACrB,iBAAiB,CAAC,EAAE,CAAC,GACrB,iBAAiB,CAAC,EAAE,CAAC,CAAC;AAE1B,MAAM,WAAW,iBAAiB,CAAC,EAAE,GAAC,cAAc;IAClD,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,EAAE,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACnB,IAAI,EAAE,EAAE,EAAE,CAAC;IACX,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,iBAAiB,CAAC,EAAE,OAAO,CAAC;CAC7B;AACD,MAAM,WAAW,iBAAiB,CAAC,EAAE,GAAC,cAAc,CAAE,SAAQ,iBAAiB,CAAC,EAAE,CAAC;IACjF,IAAI,EAAE,QAAQ,CAAC;IACf,MAAM,EAAE,SAAS,GAAG,EAAE,CAAC;CACxB;AAED,MAAM,WAAW,iBAAiB,CAAC,EAAE,GAAC,cAAc,CAAE,SAAQ,iBAAiB,CAAC,EAAE,CAAC;IACjF,IAAI,EAAE,QAAQ,CAAC;IACf,MAAM,EAAE,SAAS,GAAG,EAAE,CAAC;IACvB,WAAW,CAAC,EAAE,CAAC;QAAE,CAAC,OAAO,EAAE,MAAM,GAAG,GAAG,CAAA;KAAE,GAAG,IAAI,CAAC,EAAE,CAAC;CACrD;AAED,MAAM,WAAW,iBAAiB,CAAC,EAAE,GAAC,cAAc,CAAE,SAAQ,iBAAiB,CAAC,EAAE,CAAC;IACjF,IAAI,EAAE,QAAQ,CAAC;IACf,WAAW,EAAE;QAAE,CAAC,OAAO,EAAE,MAAM,GAAG,GAAG,CAAA;KAAE,EAAE,CAAC;CAC3C;AAED,MAAM,WAAW,iBAAiB,CAAC,EAAE,GAAC,cAAc,CAAE,SAAQ,iBAAiB,CAAC,EAAE,CAAC;IACjF,IAAI,EAAE,QAAQ,CAAC;IACf,QAAQ,EAAE;QACR,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;QACrB,KAAK,EAAE,cAAc,CAAC;KACvB,CAAC;IACF,UAAU,EAAE;QAAE,CAAC,OAAO,EAAE,MAAM,GAAG,GAAG,CAAA;KAAE,CAAC;CACxC;AAGD,MAAM,WAAW,iBAAiB,CAAC,EAAE,GAAC,cAAc,CAAE,SAAQ,iBAAiB,CAAC,EAAE,CAAC;IACjF,IAAI,EAAE,QAAQ,CAAC;IACf,QAAQ,CAAC,EACL;QACE,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;QACrB,KAAK,EAAE,cAAc,CAAC;KACvB,GACD,KAAK,CAAC;CACX"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SyncChangeSet.d.ts","sourceRoot":"","sources":["../src/SyncChangeSet.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,aAAa,GAAG;IAC1B,CAAC,KAAK,EAAE,MAAM,GAAG;QACf,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;QAClB,MAAM,CAAC,EAAE;YACP,CAAC,GAAG,EAAE,MAAM,GAAG;gBAAE,CAAC,OAAO,EAAE,MAAM,GAAG,GAAG,CAAA;aAAE,CAAC;SAC3C,CAAC;QACF,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;KACnB,CAAC;CACH,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
export type YMessage = YClientMessage | YServerMessage;
|
|
2
|
+
export type YClientMessage = YUpdateFromClientRequest | YStateVector | YDocumentOpen | YAwarenessUpdate | YDocumentClose;
|
|
3
|
+
export type YServerMessage = YUpdateFromClientAck | YUpdateFromClientReject | YUpdateFromServerMessage | YAwarenessUpdate | YInSyncMessage;
|
|
4
|
+
export interface YUpdateFromClientRequest {
|
|
5
|
+
type: 'u-c';
|
|
6
|
+
table: string;
|
|
7
|
+
prop: string;
|
|
8
|
+
k: any;
|
|
9
|
+
u: Uint8Array;
|
|
10
|
+
i: number;
|
|
11
|
+
}
|
|
12
|
+
export interface YDocumentOpen {
|
|
13
|
+
type: 'doc-open';
|
|
14
|
+
table: string;
|
|
15
|
+
prop: string;
|
|
16
|
+
k: any;
|
|
17
|
+
serverRev?: string;
|
|
18
|
+
sv?: Uint8Array;
|
|
19
|
+
}
|
|
20
|
+
export interface YStateVector {
|
|
21
|
+
type: 'sv';
|
|
22
|
+
table: string;
|
|
23
|
+
prop: string;
|
|
24
|
+
k: any;
|
|
25
|
+
sv: Uint8Array;
|
|
26
|
+
}
|
|
27
|
+
export interface YDocumentClose {
|
|
28
|
+
type: 'doc-close';
|
|
29
|
+
table: string;
|
|
30
|
+
prop: string;
|
|
31
|
+
k: any;
|
|
32
|
+
}
|
|
33
|
+
export interface YUpdateFromClientAck {
|
|
34
|
+
type: 'u-ack';
|
|
35
|
+
table: string;
|
|
36
|
+
prop: string;
|
|
37
|
+
i: number;
|
|
38
|
+
}
|
|
39
|
+
export interface YUpdateFromClientReject {
|
|
40
|
+
type: 'u-reject';
|
|
41
|
+
table: string;
|
|
42
|
+
prop: string;
|
|
43
|
+
i: number;
|
|
44
|
+
}
|
|
45
|
+
export interface YUpdateFromServerMessage {
|
|
46
|
+
type: 'u-s';
|
|
47
|
+
table: string;
|
|
48
|
+
prop: string;
|
|
49
|
+
k: any;
|
|
50
|
+
u: Uint8Array;
|
|
51
|
+
}
|
|
52
|
+
export interface YAwarenessUpdate {
|
|
53
|
+
type: 'aware';
|
|
54
|
+
table: string;
|
|
55
|
+
prop: string;
|
|
56
|
+
k: any;
|
|
57
|
+
u: Uint8Array;
|
|
58
|
+
}
|
|
59
|
+
export interface YInSyncMessage {
|
|
60
|
+
type: 'in-sync';
|
|
61
|
+
table: string;
|
|
62
|
+
prop: string;
|
|
63
|
+
k: any;
|
|
64
|
+
}
|
|
65
|
+
//# sourceMappingURL=YMessage.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"YMessage.d.ts","sourceRoot":"","sources":["../src/YMessage.ts"],"names":[],"mappings":"AACA,MAAM,MAAM,QAAQ,GAAG,cAAc,GAAG,cAAc,CAAC;AACvD,MAAM,MAAM,cAAc,GAAG,wBAAwB,GAAG,YAAY,GAAG,aAAa,GAAG,gBAAgB,GAAE,cAAc,CAAC;AACxH,MAAM,MAAM,cAAc,GAAG,oBAAoB,GAAG,uBAAuB,GAAG,wBAAwB,GAAG,gBAAgB,GAAG,cAAc,CAAC;AAE3I,MAAM,WAAW,wBAAwB;IACvC,IAAI,EAAE,KAAK,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,CAAC,EAAE,GAAG,CAAC;IACP,CAAC,EAAE,UAAU,CAAC;IACd,CAAC,EAAE,MAAM,CAAC;CACX;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,UAAU,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,CAAC,EAAE,GAAG,CAAC;IACP,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,EAAE,CAAC,EAAE,UAAU,CAAC;CACjB;AAED,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,IAAI,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,CAAC,EAAE,GAAG,CAAC;IACP,EAAE,EAAE,UAAU,CAAC;CAChB;AAGD,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,WAAW,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,CAAC,EAAE,GAAG,CAAC;CACR;AAED,MAAM,WAAW,oBAAoB;IACnC,IAAI,EAAE,OAAO,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,CAAC,EAAE,MAAM,CAAC;CACX;AAED,MAAM,WAAW,uBAAuB;IACtC,IAAI,EAAE,UAAU,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,CAAC,EAAE,MAAM,CAAC;CACX;AAGD,MAAM,WAAW,wBAAwB;IACvC,IAAI,EAAE,KAAK,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,CAAC,EAAE,GAAG,CAAC;IACP,CAAC,EAAE,UAAU,CAAC;CACf;AAED,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,OAAO,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,CAAC,EAAE,GAAG,CAAC;IACP,CAAC,EAAE,UAAU,CAAC;CACf;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,SAAS,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,CAAC,EAAE,GAAG,CAAC;CACR"}
|
package/dist/YMessage.js
ADDED
|
@@ -1,25 +1,10 @@
|
|
|
1
|
-
import { __asyncValues } from "tslib";
|
|
2
1
|
export async function asyncIterablePipeline(source, ...stages) {
|
|
3
|
-
var _a, e_1, _b, _c;
|
|
4
2
|
// Chain generators by sending outdata from one to another
|
|
5
3
|
let result = source(); // Start with the source generator
|
|
6
4
|
for (let i = 0; i < stages.length; i++) {
|
|
7
5
|
result = stages[i](result); // Pass on the result to next generator
|
|
8
6
|
}
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
for (var _d = true, result_1 = __asyncValues(result), result_1_1; result_1_1 = await result_1.next(), _a = result_1_1.done, !_a; _d = true) {
|
|
13
|
-
_c = result_1_1.value;
|
|
14
|
-
_d = false;
|
|
15
|
-
const chunk = _c;
|
|
16
|
-
}
|
|
17
|
-
}
|
|
18
|
-
catch (e_1_1) { e_1 = { error: e_1_1 }; }
|
|
19
|
-
finally {
|
|
20
|
-
try {
|
|
21
|
-
if (!_d && !_a && (_b = result_1.return)) await _b.call(result_1);
|
|
22
|
-
}
|
|
23
|
-
finally { if (e_1) throw e_1.error; }
|
|
24
|
-
}
|
|
7
|
+
// Start running the machine. If the last stage is a sink, it will consume the data and never emit anything
|
|
8
|
+
// to us here...
|
|
9
|
+
for await (const chunk of result) { }
|
|
25
10
|
}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export declare function consumeChunkedBinaryStream(source: AsyncIterable<Uint8Array>): AsyncGenerator<Uint8Array
|
|
1
|
+
export declare function consumeChunkedBinaryStream(source: AsyncIterable<Uint8Array>): AsyncGenerator<Uint8Array<ArrayBuffer>, void, unknown>;
|
|
2
2
|
//# sourceMappingURL=consumeChunkedBinaryStream.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"consumeChunkedBinaryStream.d.ts","sourceRoot":"","sources":["../../src/async-generators/consumeChunkedBinaryStream.ts"],"names":[],"mappings":"AAAA,wBAAuB,0BAA0B,CAC/C,MAAM,EAAE,aAAa,CAAC,UAAU,CAAC,
|
|
1
|
+
{"version":3,"file":"consumeChunkedBinaryStream.d.ts","sourceRoot":"","sources":["../../src/async-generators/consumeChunkedBinaryStream.ts"],"names":[],"mappings":"AAAA,wBAAuB,0BAA0B,CAC/C,MAAM,EAAE,aAAa,CAAC,UAAU,CAAC,0DAwElC"}
|
|
@@ -1,94 +1,78 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
let
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
while (pos < chunk.byteLength) {
|
|
18
|
-
switch (state) {
|
|
19
|
-
case 0:
|
|
20
|
-
// Beginning of a size header
|
|
21
|
-
if (pos + 4 > chunk.byteLength) {
|
|
22
|
-
for (const b of chunk.slice(pos)) {
|
|
23
|
-
if (sizeBufPos === 4)
|
|
24
|
-
break;
|
|
25
|
-
sizeBuf[sizeBufPos++] = b;
|
|
26
|
-
++pos;
|
|
27
|
-
}
|
|
28
|
-
if (sizeBufPos < 4) {
|
|
29
|
-
// Need more bytes in order to read length.
|
|
30
|
-
// Will go out from while loop as well because pos is defenitely = chunk.byteLength here.
|
|
31
|
-
break;
|
|
32
|
-
}
|
|
33
|
-
}
|
|
34
|
-
else if (sizeBufPos > 0 && sizeBufPos < 4) {
|
|
35
|
-
for (const b of chunk.slice(pos, pos + 4 - sizeBufPos)) {
|
|
36
|
-
sizeBuf[sizeBufPos++] = b;
|
|
37
|
-
++pos;
|
|
38
|
-
}
|
|
39
|
-
}
|
|
40
|
-
// Intentional fall-through...
|
|
41
|
-
case 1:
|
|
42
|
-
len =
|
|
43
|
-
sizeBufPos === 4
|
|
44
|
-
? new DataView(sizeBuf.buffer, 0, 4).getUint32(0, false)
|
|
45
|
-
: dw.getUint32(pos, false);
|
|
46
|
-
if (sizeBufPos)
|
|
47
|
-
sizeBufPos = 0; // in this case pos is already forwarded
|
|
48
|
-
else
|
|
49
|
-
pos += 4; // else pos is not yet forwarded - that's why we do it now
|
|
50
|
-
// Intentional fall-through...
|
|
51
|
-
case 2:
|
|
52
|
-
// Eat the chunk
|
|
53
|
-
if (pos >= chunk.byteLength) {
|
|
54
|
-
state = 2;
|
|
1
|
+
export async function* consumeChunkedBinaryStream(source) {
|
|
2
|
+
let state = 0;
|
|
3
|
+
let sizeBuf = new Uint8Array(4);
|
|
4
|
+
let sizeBufPos = 0;
|
|
5
|
+
let bufs = [];
|
|
6
|
+
let len = 0;
|
|
7
|
+
for await (const chunk of source) {
|
|
8
|
+
const dw = new DataView(chunk.buffer, chunk.byteOffset, chunk.byteLength);
|
|
9
|
+
let pos = 0;
|
|
10
|
+
while (pos < chunk.byteLength) {
|
|
11
|
+
switch (state) {
|
|
12
|
+
case 0:
|
|
13
|
+
// Beginning of a size header
|
|
14
|
+
if (pos + 4 > chunk.byteLength) {
|
|
15
|
+
for (const b of chunk.slice(pos)) {
|
|
16
|
+
if (sizeBufPos === 4)
|
|
55
17
|
break;
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
}
|
|
63
|
-
else {
|
|
64
|
-
if (bufs.length > 0) {
|
|
65
|
-
const concats = new Uint8Array(bufs.reduce((p, c) => p + c.byteLength, len));
|
|
66
|
-
let p = 0;
|
|
67
|
-
for (const buf of bufs) {
|
|
68
|
-
concats.set(buf, p);
|
|
69
|
-
p += buf.byteLength;
|
|
70
|
-
}
|
|
71
|
-
concats.set(chunk.slice(pos, pos + len), p);
|
|
72
|
-
bufs = [];
|
|
73
|
-
yield yield __await(concats);
|
|
74
|
-
}
|
|
75
|
-
else {
|
|
76
|
-
yield yield __await(chunk.slice(pos, pos + len));
|
|
77
|
-
}
|
|
78
|
-
pos += len;
|
|
79
|
-
state = 0;
|
|
80
|
-
}
|
|
18
|
+
sizeBuf[sizeBufPos++] = b;
|
|
19
|
+
++pos;
|
|
20
|
+
}
|
|
21
|
+
if (sizeBufPos < 4) {
|
|
22
|
+
// Need more bytes in order to read length.
|
|
23
|
+
// Will go out from while loop as well because pos is defenitely = chunk.byteLength here.
|
|
81
24
|
break;
|
|
25
|
+
}
|
|
82
26
|
}
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
27
|
+
else if (sizeBufPos > 0 && sizeBufPos < 4) {
|
|
28
|
+
for (const b of chunk.slice(pos, pos + 4 - sizeBufPos)) {
|
|
29
|
+
sizeBuf[sizeBufPos++] = b;
|
|
30
|
+
++pos;
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
// Intentional fall-through...
|
|
34
|
+
case 1:
|
|
35
|
+
len =
|
|
36
|
+
sizeBufPos === 4
|
|
37
|
+
? new DataView(sizeBuf.buffer, 0, 4).getUint32(0, false)
|
|
38
|
+
: dw.getUint32(pos, false);
|
|
39
|
+
if (sizeBufPos)
|
|
40
|
+
sizeBufPos = 0; // in this case pos is already forwarded
|
|
41
|
+
else
|
|
42
|
+
pos += 4; // else pos is not yet forwarded - that's why we do it now
|
|
43
|
+
// Intentional fall-through...
|
|
44
|
+
case 2:
|
|
45
|
+
// Eat the chunk
|
|
46
|
+
if (pos >= chunk.byteLength) {
|
|
47
|
+
state = 2;
|
|
48
|
+
break;
|
|
49
|
+
}
|
|
50
|
+
if (pos + len > chunk.byteLength) {
|
|
51
|
+
bufs.push(chunk.slice(pos));
|
|
52
|
+
len -= (chunk.byteLength - pos);
|
|
53
|
+
state = 2;
|
|
54
|
+
pos = chunk.byteLength; // will break while loop.
|
|
55
|
+
}
|
|
56
|
+
else {
|
|
57
|
+
if (bufs.length > 0) {
|
|
58
|
+
const concats = new Uint8Array(bufs.reduce((p, c) => p + c.byteLength, len));
|
|
59
|
+
let p = 0;
|
|
60
|
+
for (const buf of bufs) {
|
|
61
|
+
concats.set(buf, p);
|
|
62
|
+
p += buf.byteLength;
|
|
63
|
+
}
|
|
64
|
+
concats.set(chunk.slice(pos, pos + len), p);
|
|
65
|
+
bufs = [];
|
|
66
|
+
yield concats;
|
|
67
|
+
}
|
|
68
|
+
else {
|
|
69
|
+
yield chunk.slice(pos, pos + len);
|
|
70
|
+
}
|
|
71
|
+
pos += len;
|
|
72
|
+
state = 0;
|
|
73
|
+
}
|
|
74
|
+
break;
|
|
90
75
|
}
|
|
91
|
-
finally { if (e_1) throw e_1.error; }
|
|
92
76
|
}
|
|
93
|
-
}
|
|
77
|
+
}
|
|
94
78
|
}
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import { __asyncGenerator, __asyncValues, __await } from "tslib";
|
|
2
1
|
import { consumeChunkedBinaryStream } from './consumeChunkedBinaryStream';
|
|
3
2
|
import { asyncIterablePipeline } from './asyncIterablePipeline';
|
|
4
3
|
const inputData = generateInputData(256, 4);
|
|
@@ -21,68 +20,49 @@ function generateInputData(chunkSize, numChunks = 4) {
|
|
|
21
20
|
expect(ba[7]).toBe(3);
|
|
22
21
|
return ba;
|
|
23
22
|
}
|
|
24
|
-
function generateChunk(chunkSizes) {
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
_c = chunkSizes_1_1.value;
|
|
30
|
-
_d = false;
|
|
31
|
-
const chunkSize = _c;
|
|
32
|
-
for (let i = 0; i < inputData.length; i += chunkSize) {
|
|
33
|
-
//console.log('Yielding chunk of size ' + (''+i)+':'+(i + chunkSize));
|
|
34
|
-
yield yield __await(inputData.slice(i, i + chunkSize));
|
|
35
|
-
}
|
|
36
|
-
}
|
|
23
|
+
async function* generateChunk(chunkSizes) {
|
|
24
|
+
for await (const chunkSize of chunkSizes) {
|
|
25
|
+
for (let i = 0; i < inputData.length; i += chunkSize) {
|
|
26
|
+
//console.log('Yielding chunk of size ' + (''+i)+':'+(i + chunkSize));
|
|
27
|
+
yield inputData.slice(i, i + chunkSize);
|
|
37
28
|
}
|
|
38
|
-
|
|
39
|
-
finally {
|
|
40
|
-
try {
|
|
41
|
-
if (!_d && !_a && (_b = chunkSizes_1.return)) yield __await(_b.call(chunkSizes_1));
|
|
42
|
-
}
|
|
43
|
-
finally { if (e_1) throw e_1.error; }
|
|
44
|
-
}
|
|
45
|
-
});
|
|
29
|
+
}
|
|
46
30
|
}
|
|
47
|
-
function generateChunkSizes() {
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
yield yield __await(3);
|
|
60
|
-
});
|
|
31
|
+
async function* generateChunkSizes() {
|
|
32
|
+
//console.log('yield 1024');
|
|
33
|
+
yield 1040;
|
|
34
|
+
//console.log('yield 512');
|
|
35
|
+
yield 520;
|
|
36
|
+
yield 260;
|
|
37
|
+
yield 1;
|
|
38
|
+
yield 259;
|
|
39
|
+
yield 258;
|
|
40
|
+
yield 257;
|
|
41
|
+
yield 2;
|
|
42
|
+
yield 3;
|
|
61
43
|
}
|
|
62
44
|
test('test consumeChunkedBinaryStream', async () => {
|
|
63
|
-
await asyncIterablePipeline(generateChunkSizes, generateChunk, consumeChunkedBinaryStream, function (source) {
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
expect(itRes.done).toBe(true);
|
|
86
|
-
});
|
|
45
|
+
await asyncIterablePipeline(generateChunkSizes, generateChunk, consumeChunkedBinaryStream, async function* (source) {
|
|
46
|
+
let itRes;
|
|
47
|
+
for (let i = 0; i < 9; ++i) {
|
|
48
|
+
itRes = await source.next();
|
|
49
|
+
expect(itRes.done).toBe(false);
|
|
50
|
+
expect(itRes.value.byteLength).toBe(256);
|
|
51
|
+
expect(itRes.value).toEqual(inputData.slice(4, 260));
|
|
52
|
+
itRes = await source.next();
|
|
53
|
+
expect(itRes.done).toBe(false);
|
|
54
|
+
expect(itRes.value.byteLength).toBe(256);
|
|
55
|
+
expect(itRes.value).toEqual(inputData.slice(4, 260));
|
|
56
|
+
itRes = await source.next();
|
|
57
|
+
expect(itRes.done).toBe(false);
|
|
58
|
+
expect(itRes.value.byteLength).toBe(256);
|
|
59
|
+
expect(itRes.value).toEqual(inputData.slice(4, 260));
|
|
60
|
+
itRes = await source.next();
|
|
61
|
+
expect(itRes.done).toBe(false);
|
|
62
|
+
expect(itRes.value.byteLength).toBe(256);
|
|
63
|
+
expect(itRes.value).toEqual(inputData.slice(4, 260));
|
|
64
|
+
}
|
|
65
|
+
itRes = await source.next();
|
|
66
|
+
expect(itRes.done).toBe(true);
|
|
87
67
|
});
|
|
88
68
|
});
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export declare function getFetchResponseBodyGenerator(res: Response): () => AsyncGenerator<Uint8Array
|
|
1
|
+
export declare function getFetchResponseBodyGenerator(res: Response): () => AsyncGenerator<Uint8Array<ArrayBuffer>, void, unknown>;
|
|
2
2
|
//# sourceMappingURL=getFetchResponseBodyGenerator.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getFetchResponseBodyGenerator.d.ts","sourceRoot":"","sources":["../../src/async-generators/getFetchResponseBodyGenerator.ts"],"names":[],"mappings":"AACA,wBAAgB,6BAA6B,CAAC,GAAG,EAAE,QAAQ,
|
|
1
|
+
{"version":3,"file":"getFetchResponseBodyGenerator.d.ts","sourceRoot":"","sources":["../../src/async-generators/getFetchResponseBodyGenerator.ts"],"names":[],"mappings":"AACA,wBAAgB,6BAA6B,CAAC,GAAG,EAAE,QAAQ,gEAe1D"}
|
|
@@ -1,21 +1,18 @@
|
|
|
1
|
-
import { __asyncGenerator, __await } from "tslib";
|
|
2
1
|
export function getFetchResponseBodyGenerator(res) {
|
|
3
|
-
return function () {
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
yield yield __await(value);
|
|
14
|
-
}
|
|
2
|
+
return async function* () {
|
|
3
|
+
if (!res.body)
|
|
4
|
+
throw new Error("Response body is not readable");
|
|
5
|
+
const reader = res.body.getReader();
|
|
6
|
+
try {
|
|
7
|
+
while (true) {
|
|
8
|
+
const { done, value } = await reader.read();
|
|
9
|
+
if (done)
|
|
10
|
+
return;
|
|
11
|
+
yield value;
|
|
15
12
|
}
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
}
|
|
13
|
+
}
|
|
14
|
+
finally {
|
|
15
|
+
reader.releaseLock();
|
|
16
|
+
}
|
|
20
17
|
};
|
|
21
18
|
}
|
|
@@ -9,5 +9,5 @@
|
|
|
9
9
|
*
|
|
10
10
|
* The source iterable
|
|
11
11
|
*/
|
|
12
|
-
export declare function produceChunkedBinaryStream(source: AsyncIterable<Uint8Array>): AsyncGenerator<Uint8Array
|
|
12
|
+
export declare function produceChunkedBinaryStream(source: AsyncIterable<Uint8Array>): AsyncGenerator<Uint8Array<ArrayBuffer>, void, unknown>;
|
|
13
13
|
//# sourceMappingURL=produceChunkedBinaryStream.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"produceChunkedBinaryStream.d.ts","sourceRoot":"","sources":["../../src/async-generators/produceChunkedBinaryStream.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,wBAAuB,0BAA0B,CAAC,MAAM,EAAE,aAAa,CAAC,UAAU,CAAC,
|
|
1
|
+
{"version":3,"file":"produceChunkedBinaryStream.d.ts","sourceRoot":"","sources":["../../src/async-generators/produceChunkedBinaryStream.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,wBAAuB,0BAA0B,CAAC,MAAM,EAAE,aAAa,CAAC,UAAU,CAAC,0DA8BlF"}
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import { __asyncDelegator, __asyncGenerator, __asyncValues, __await } from "tslib";
|
|
2
1
|
/** Used with pipeline to preserve yielded chunks before they are send to peer.
|
|
3
2
|
* Peer can then decode these chunks using consumeChunkedBinaryStream.
|
|
4
3
|
*
|
|
@@ -10,48 +9,33 @@ import { __asyncDelegator, __asyncGenerator, __asyncValues, __await } from "tsli
|
|
|
10
9
|
*
|
|
11
10
|
* The source iterable
|
|
12
11
|
*/
|
|
13
|
-
export function produceChunkedBinaryStream(source) {
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
flushChunkArray.set(chunk, pos);
|
|
30
|
-
pos += chunk.length;
|
|
31
|
-
}
|
|
32
|
-
len = 0;
|
|
33
|
-
chunks = [];
|
|
34
|
-
yield flushChunkArray;
|
|
12
|
+
export async function* produceChunkedBinaryStream(source) {
|
|
13
|
+
const HIGH_WATER_MARK = 65535;
|
|
14
|
+
let len = 0;
|
|
15
|
+
let chunks = [];
|
|
16
|
+
function* flush() {
|
|
17
|
+
const chunkLength = chunks.reduce((a, b) => a + b.length, 0);
|
|
18
|
+
if (chunkLength === 0)
|
|
19
|
+
return;
|
|
20
|
+
const flushChunkBuffer = new ArrayBuffer(4 + chunkLength);
|
|
21
|
+
const flushChunkArray = new Uint8Array(flushChunkBuffer);
|
|
22
|
+
const dw = new DataView(flushChunkBuffer);
|
|
23
|
+
dw.setUint32(0, chunkLength, false);
|
|
24
|
+
let pos = 4;
|
|
25
|
+
for (const chunk of chunks) {
|
|
26
|
+
flushChunkArray.set(chunk, pos);
|
|
27
|
+
pos += chunk.length;
|
|
35
28
|
}
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
}
|
|
46
|
-
}
|
|
29
|
+
len = 0;
|
|
30
|
+
chunks = [];
|
|
31
|
+
yield flushChunkArray;
|
|
32
|
+
}
|
|
33
|
+
for await (const chunk of source) {
|
|
34
|
+
chunks.push(chunk);
|
|
35
|
+
len += chunk.length;
|
|
36
|
+
if (len > HIGH_WATER_MARK) {
|
|
37
|
+
yield* flush();
|
|
47
38
|
}
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
try {
|
|
51
|
-
if (!_d && !_a && (_b = source_1.return)) yield __await(_b.call(source_1));
|
|
52
|
-
}
|
|
53
|
-
finally { if (e_1) throw e_1.error; }
|
|
54
|
-
}
|
|
55
|
-
yield __await(yield* __asyncDelegator(__asyncValues(flush())));
|
|
56
|
-
});
|
|
39
|
+
}
|
|
40
|
+
yield* flush();
|
|
57
41
|
}
|
|
@@ -2,13 +2,12 @@ import { setByKeyPath } from '../utils.js';
|
|
|
2
2
|
export function subtractChanges(target, // Server change set
|
|
3
3
|
changesToSubtract // additional mutations on client during syncWithServer()
|
|
4
4
|
) {
|
|
5
|
-
var _a, _b, _c;
|
|
6
5
|
for (const [table, mutationSet] of Object.entries(changesToSubtract)) {
|
|
7
6
|
for (const [key, mut] of Object.entries(mutationSet)) {
|
|
8
7
|
switch (mut.type) {
|
|
9
8
|
case 'ups':
|
|
10
9
|
{
|
|
11
|
-
const targetMut =
|
|
10
|
+
const targetMut = target[table]?.[key];
|
|
12
11
|
if (targetMut) {
|
|
13
12
|
switch (targetMut.type) {
|
|
14
13
|
case 'ups':
|
|
@@ -26,10 +25,10 @@ changesToSubtract // additional mutations on client during syncWithServer()
|
|
|
26
25
|
}
|
|
27
26
|
break;
|
|
28
27
|
case 'del':
|
|
29
|
-
|
|
28
|
+
delete target[table]?.[key];
|
|
30
29
|
break;
|
|
31
30
|
case 'upd': {
|
|
32
|
-
const targetMut =
|
|
31
|
+
const targetMut = target[table]?.[key];
|
|
33
32
|
if (targetMut) {
|
|
34
33
|
switch (targetMut.type) {
|
|
35
34
|
case 'ups':
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"toDBOperationSet.d.ts","sourceRoot":"","sources":["../../src/change-processing/toDBOperationSet.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"toDBOperationSet.d.ts","sourceRoot":"","sources":["../../src/change-processing/toDBOperationSet.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAEzD;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,gBAAgB,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,eAAe,CAAC,MAAM,CAAC,CA0DhG"}
|