@powersync/service-core 0.0.0-dev-20250313091552 → 0.0.0-dev-20250317113118
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/CHANGELOG.md +12 -3
- package/dist/index.d.ts +2 -0
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/storage/SyncRulesBucketStorage.d.ts +1 -1
- package/dist/storage/WriteCheckpointAPI.d.ts +24 -0
- package/dist/storage/WriteCheckpointAPI.js.map +1 -1
- package/dist/{sync → streams}/BroadcastIterable.js +2 -2
- package/dist/streams/BroadcastIterable.js.map +1 -0
- package/dist/streams/Demultiplexer.d.ts +52 -0
- package/dist/streams/Demultiplexer.js +128 -0
- package/dist/streams/Demultiplexer.js.map +1 -0
- package/dist/{sync → streams}/LastValueSink.d.ts +2 -2
- package/dist/{sync → streams}/LastValueSink.js +2 -2
- package/dist/streams/LastValueSink.js.map +1 -0
- package/dist/{sync → streams}/merge.js +1 -1
- package/dist/streams/merge.js.map +1 -0
- package/dist/streams/streams-index.d.ts +4 -0
- package/dist/streams/streams-index.js +5 -0
- package/dist/streams/streams-index.js.map +1 -0
- package/dist/sync/sync-index.d.ts +0 -3
- package/dist/sync/sync-index.js +0 -3
- package/dist/sync/sync-index.js.map +1 -1
- package/dist/sync/sync.js +2 -2
- package/dist/sync/sync.js.map +1 -1
- package/package.json +3 -3
- package/src/index.ts +3 -0
- package/src/storage/SyncRulesBucketStorage.ts +1 -1
- package/src/storage/WriteCheckpointAPI.ts +28 -0
- package/src/{sync → streams}/BroadcastIterable.ts +2 -2
- package/src/streams/Demultiplexer.ts +165 -0
- package/src/{sync → streams}/LastValueSink.ts +2 -2
- package/src/{sync → streams}/merge.ts +1 -1
- package/src/streams/streams-index.ts +4 -0
- package/src/sync/sync-index.ts +0 -3
- package/src/sync/sync.ts +2 -2
- package/test/src/broadcast_iterable.test.ts +8 -8
- package/test/src/demultiplexer.test.ts +205 -0
- package/test/src/merge_iterable.test.ts +1 -1
- package/tsconfig.tsbuildinfo +1 -1
- package/dist/sync/BroadcastIterable.js.map +0 -1
- package/dist/sync/LastValueSink.js.map +0 -1
- package/dist/sync/merge.js.map +0 -1
- /package/dist/{sync → streams}/BroadcastIterable.d.ts +0 -0
- /package/dist/{sync → streams}/merge.d.ts +0 -0
package/CHANGELOG.md
CHANGED
|
@@ -1,16 +1,25 @@
|
|
|
1
1
|
# @powersync/service-core
|
|
2
2
|
|
|
3
|
-
## 0.0.0-dev-
|
|
3
|
+
## 0.0.0-dev-20250317113118
|
|
4
4
|
|
|
5
5
|
### Minor Changes
|
|
6
6
|
|
|
7
|
-
- 7c2e36a: [Postgres] Only flush once per replicated chunk, increasing transaction replication throughput.
|
|
8
7
|
- b61b0ca: Cache parameter queries and buckets to reduce incremental sync overhead
|
|
9
8
|
|
|
10
9
|
### Patch Changes
|
|
11
10
|
|
|
12
11
|
- Updated dependencies [b61b0ca]
|
|
13
|
-
- @powersync/service-sync-rules@0.0.0-dev-
|
|
12
|
+
- @powersync/service-sync-rules@0.0.0-dev-20250317113118
|
|
13
|
+
|
|
14
|
+
## 1.9.0
|
|
15
|
+
|
|
16
|
+
### Minor Changes
|
|
17
|
+
|
|
18
|
+
- f049f68: [Postgres] Only flush once per replicated chunk, increasing transaction replication throughput.
|
|
19
|
+
|
|
20
|
+
### Patch Changes
|
|
21
|
+
|
|
22
|
+
- 8601d6c: [MySQL] Fix errors being hidden by ROLLBACK failure
|
|
14
23
|
|
|
15
24
|
## 1.8.1
|
|
16
25
|
|
package/dist/index.d.ts
CHANGED
|
@@ -23,3 +23,5 @@ export * from './system/system-index.js';
|
|
|
23
23
|
export * as system from './system/system-index.js';
|
|
24
24
|
export * from './util/util-index.js';
|
|
25
25
|
export * as utils from './util/util-index.js';
|
|
26
|
+
export * from './streams/streams-index.js';
|
|
27
|
+
export * as streams from './streams/streams-index.js';
|
package/dist/index.js
CHANGED
|
@@ -25,4 +25,6 @@ export * from './system/system-index.js';
|
|
|
25
25
|
export * as system from './system/system-index.js';
|
|
26
26
|
export * from './util/util-index.js';
|
|
27
27
|
export * as utils from './util/util-index.js';
|
|
28
|
+
export * from './streams/streams-index.js';
|
|
29
|
+
export * as streams from './streams/streams-index.js';
|
|
28
30
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,yCAAyC;AAEzC,cAAc,oBAAoB,CAAC;AACnC,OAAO,KAAK,GAAG,MAAM,oBAAoB,CAAC;AAE1C,cAAc,sBAAsB,CAAC;AACrC,OAAO,KAAK,IAAI,MAAM,sBAAsB,CAAC;AAE7C,cAAc,wBAAwB,CAAC;AACvC,OAAO,KAAK,KAAK,MAAM,wBAAwB,CAAC;AAEhD,oDAAoD;AACpD,OAAO,KAAK,SAAS,MAAM,mCAAmC,CAAC;AAE/D,cAAc,sBAAsB,CAAC;AACrC,OAAO,KAAK,OAAO,MAAM,sBAAsB,CAAC;AAEhD,cAAc,kCAAkC,CAAC;AACjD,OAAO,KAAK,UAAU,MAAM,kCAAkC,CAAC;AAE/D,cAAc,4BAA4B,CAAC;AAC3C,OAAO,KAAK,OAAO,MAAM,4BAA4B,CAAC;AAEtD,cAAc,oCAAoC,CAAC;AACnD,OAAO,KAAK,WAAW,MAAM,oCAAoC,CAAC;AAElE,cAAc,0BAA0B,CAAC;AACzC,OAAO,KAAK,MAAM,MAAM,0BAA0B,CAAC;AAEnD,cAAc,4BAA4B,CAAC;AAC3C,OAAO,KAAK,OAAO,MAAM,4BAA4B,CAAC;AAEtD,cAAc,sBAAsB,CAAC;AACrC,OAAO,KAAK,IAAI,MAAM,sBAAsB,CAAC;AAE7C,cAAc,0BAA0B,CAAC;AACzC,OAAO,KAAK,MAAM,MAAM,0BAA0B,CAAC;AAEnD,cAAc,sBAAsB,CAAC;AACrC,OAAO,KAAK,KAAK,MAAM,sBAAsB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,yCAAyC;AAEzC,cAAc,oBAAoB,CAAC;AACnC,OAAO,KAAK,GAAG,MAAM,oBAAoB,CAAC;AAE1C,cAAc,sBAAsB,CAAC;AACrC,OAAO,KAAK,IAAI,MAAM,sBAAsB,CAAC;AAE7C,cAAc,wBAAwB,CAAC;AACvC,OAAO,KAAK,KAAK,MAAM,wBAAwB,CAAC;AAEhD,oDAAoD;AACpD,OAAO,KAAK,SAAS,MAAM,mCAAmC,CAAC;AAE/D,cAAc,sBAAsB,CAAC;AACrC,OAAO,KAAK,OAAO,MAAM,sBAAsB,CAAC;AAEhD,cAAc,kCAAkC,CAAC;AACjD,OAAO,KAAK,UAAU,MAAM,kCAAkC,CAAC;AAE/D,cAAc,4BAA4B,CAAC;AAC3C,OAAO,KAAK,OAAO,MAAM,4BAA4B,CAAC;AAEtD,cAAc,oCAAoC,CAAC;AACnD,OAAO,KAAK,WAAW,MAAM,oCAAoC,CAAC;AAElE,cAAc,0BAA0B,CAAC;AACzC,OAAO,KAAK,MAAM,MAAM,0BAA0B,CAAC;AAEnD,cAAc,4BAA4B,CAAC;AAC3C,OAAO,KAAK,OAAO,MAAM,4BAA4B,CAAC;AAEtD,cAAc,sBAAsB,CAAC;AACrC,OAAO,KAAK,IAAI,MAAM,sBAAsB,CAAC;AAE7C,cAAc,0BAA0B,CAAC;AACzC,OAAO,KAAK,MAAM,MAAM,0BAA0B,CAAC;AAEnD,cAAc,sBAAsB,CAAC;AACrC,OAAO,KAAK,KAAK,MAAM,sBAAsB,CAAC;AAE9C,cAAc,4BAA4B,CAAC;AAC3C,OAAO,KAAK,OAAO,MAAM,4BAA4B,CAAC"}
|
|
@@ -58,7 +58,7 @@ export interface SyncRulesBucketStorage extends ObserverClient<SyncRulesBucketSt
|
|
|
58
58
|
*
|
|
59
59
|
* The stream stops or errors if this is not the active sync rules (anymore).
|
|
60
60
|
*/
|
|
61
|
-
|
|
61
|
+
watchCheckpointChanges(options: WatchWriteCheckpointOptions): AsyncIterable<StorageCheckpointUpdate>;
|
|
62
62
|
/**
|
|
63
63
|
* Get a "batch" of data for a checkpoint.
|
|
64
64
|
*
|
|
@@ -44,9 +44,32 @@ export interface ManagedWriteCheckpointFilters extends BaseWriteCheckpointIdenti
|
|
|
44
44
|
*/
|
|
45
45
|
heads: Record<string, string>;
|
|
46
46
|
}
|
|
47
|
+
export interface WriteCheckpointResult {
|
|
48
|
+
/**
|
|
49
|
+
* Write checkpoint id (also referred to as client_id).
|
|
50
|
+
*
|
|
51
|
+
* If null, there is no write checkpoint for the client.
|
|
52
|
+
*/
|
|
53
|
+
id: bigint | null;
|
|
54
|
+
/**
|
|
55
|
+
* LSN for the checkpoint.
|
|
56
|
+
*
|
|
57
|
+
* This will change when we support multiple connections.
|
|
58
|
+
*
|
|
59
|
+
* For managed write checkpoints, this LSN must be exceeded by the checkpoint / replication head to be valid.
|
|
60
|
+
*
|
|
61
|
+
* For custom write checkpoints, this will be null, and the write checkpoint is valid for all LSNs.
|
|
62
|
+
*/
|
|
63
|
+
lsn: string | null;
|
|
64
|
+
}
|
|
47
65
|
export type ManagedWriteCheckpointOptions = ManagedWriteCheckpointFilters;
|
|
48
66
|
export type SyncStorageLastWriteCheckpointFilters = BaseWriteCheckpointIdentifier | ManagedWriteCheckpointFilters;
|
|
49
67
|
export type LastWriteCheckpointFilters = CustomWriteCheckpointFilters | ManagedWriteCheckpointFilters;
|
|
68
|
+
export interface WatchUserWriteCheckpointOptions {
|
|
69
|
+
user_id: string;
|
|
70
|
+
sync_rules_id: number;
|
|
71
|
+
signal: AbortSignal;
|
|
72
|
+
}
|
|
50
73
|
export interface BaseWriteCheckpointAPI {
|
|
51
74
|
readonly writeCheckpointMode: WriteCheckpointMode;
|
|
52
75
|
setWriteCheckpointMode(mode: WriteCheckpointMode): void;
|
|
@@ -70,5 +93,6 @@ export interface WriteCheckpointAPI extends BaseWriteCheckpointAPI {
|
|
|
70
93
|
batchCreateCustomWriteCheckpoints(checkpoints: CustomWriteCheckpointOptions[]): Promise<void>;
|
|
71
94
|
createCustomWriteCheckpoint(checkpoint: CustomWriteCheckpointOptions): Promise<bigint>;
|
|
72
95
|
lastWriteCheckpoint(filters: LastWriteCheckpointFilters): Promise<bigint | null>;
|
|
96
|
+
watchUserWriteCheckpoint(options: WatchUserWriteCheckpointOptions): AsyncIterable<WriteCheckpointResult>;
|
|
73
97
|
}
|
|
74
98
|
export declare const DEFAULT_WRITE_CHECKPOINT_MODE = WriteCheckpointMode.MANAGED;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"WriteCheckpointAPI.js","sourceRoot":"","sources":["../../src/storage/WriteCheckpointAPI.ts"],"names":[],"mappings":"AAAA,MAAM,CAAN,IAAY,mBAYX;AAZD,WAAY,mBAAmB;IAC7B;;;OAGG;IACH,wCAAiB,CAAA;IACjB;;;;OAIG;IACH,0CAAmB,CAAA;AACrB,CAAC,EAZW,mBAAmB,KAAnB,mBAAmB,QAY9B;
|
|
1
|
+
{"version":3,"file":"WriteCheckpointAPI.js","sourceRoot":"","sources":["../../src/storage/WriteCheckpointAPI.ts"],"names":[],"mappings":"AAAA,MAAM,CAAN,IAAY,mBAYX;AAZD,WAAY,mBAAmB;IAC7B;;;OAGG;IACH,wCAAiB,CAAA;IACjB;;;;OAIG;IACH,0CAAmB,CAAA;AACrB,CAAC,EAZW,mBAAmB,KAAnB,mBAAmB,QAY9B;AAoGD,MAAM,CAAC,MAAM,6BAA6B,GAAG,mBAAmB,CAAC,OAAO,CAAC"}
|
|
@@ -47,12 +47,12 @@ export class BroadcastIterable {
|
|
|
47
47
|
}
|
|
48
48
|
this.last = doc;
|
|
49
49
|
for (let sink of sinks) {
|
|
50
|
-
sink.
|
|
50
|
+
sink.write(doc);
|
|
51
51
|
}
|
|
52
52
|
}
|
|
53
53
|
// End of stream
|
|
54
54
|
for (let sink of sinks) {
|
|
55
|
-
sink.
|
|
55
|
+
sink.end();
|
|
56
56
|
}
|
|
57
57
|
}
|
|
58
58
|
catch (e) {
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"BroadcastIterable.js","sourceRoot":"","sources":["../../src/streams/BroadcastIterable.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
export interface DemultiplexerValue<T> {
|
|
2
|
+
/**
|
|
3
|
+
* The key used for demultiplexing, for example the user id.
|
|
4
|
+
*/
|
|
5
|
+
key: string;
|
|
6
|
+
/**
|
|
7
|
+
* The stream value.
|
|
8
|
+
*/
|
|
9
|
+
value: T;
|
|
10
|
+
}
|
|
11
|
+
export interface DemultiplexerSource<T> {
|
|
12
|
+
/**
|
|
13
|
+
* The async iterator providing a stream of values.
|
|
14
|
+
*/
|
|
15
|
+
iterator: AsyncIterable<DemultiplexerValue<T>>;
|
|
16
|
+
/**
|
|
17
|
+
* Fetches the first value for a given key.
|
|
18
|
+
*
|
|
19
|
+
* This is used to get an initial value for each subscription.
|
|
20
|
+
*/
|
|
21
|
+
getFirstValue(key: string): Promise<T>;
|
|
22
|
+
}
|
|
23
|
+
export type DemultiplexerSourceFactory<T> = (signal: AbortSignal) => DemultiplexerSource<T>;
|
|
24
|
+
/**
|
|
25
|
+
* Takes a multiplexed stream (e.g. a changestream covering many individual users),
|
|
26
|
+
* and allows subscribing to individual streams.
|
|
27
|
+
*
|
|
28
|
+
* The source subscription is lazy:
|
|
29
|
+
* 1. We only start subscribing when there is a downstream subscriber.
|
|
30
|
+
* 2. When all downstream subscriptions have ended, we end the source subscription.
|
|
31
|
+
*
|
|
32
|
+
* For each subscriber, if backpressure builds up, we only keep the _last_ value.
|
|
33
|
+
*/
|
|
34
|
+
export declare class Demultiplexer<T> {
|
|
35
|
+
private source;
|
|
36
|
+
private subscribers;
|
|
37
|
+
private abortController;
|
|
38
|
+
private currentSource;
|
|
39
|
+
constructor(source: DemultiplexerSourceFactory<T>);
|
|
40
|
+
private start;
|
|
41
|
+
private loop;
|
|
42
|
+
private removeSink;
|
|
43
|
+
private addSink;
|
|
44
|
+
/**
|
|
45
|
+
* Subscribe to a specific stream.
|
|
46
|
+
*
|
|
47
|
+
* @param key The key used for demultiplexing, e.g. user id.
|
|
48
|
+
* @param signal
|
|
49
|
+
*/
|
|
50
|
+
subscribe(key: string, signal: AbortSignal): AsyncIterable<T>;
|
|
51
|
+
get active(): boolean;
|
|
52
|
+
}
|
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
import { AbortError } from 'ix/aborterror.js';
|
|
2
|
+
import { LastValueSink } from './LastValueSink.js';
|
|
3
|
+
/**
|
|
4
|
+
* Takes a multiplexed stream (e.g. a changestream covering many individual users),
|
|
5
|
+
* and allows subscribing to individual streams.
|
|
6
|
+
*
|
|
7
|
+
* The source subscription is lazy:
|
|
8
|
+
* 1. We only start subscribing when there is a downstream subscriber.
|
|
9
|
+
* 2. When all downstream subscriptions have ended, we end the source subscription.
|
|
10
|
+
*
|
|
11
|
+
* For each subscriber, if backpressure builds up, we only keep the _last_ value.
|
|
12
|
+
*/
|
|
13
|
+
export class Demultiplexer {
|
|
14
|
+
source;
|
|
15
|
+
subscribers = undefined;
|
|
16
|
+
abortController = undefined;
|
|
17
|
+
currentSource = undefined;
|
|
18
|
+
constructor(source) {
|
|
19
|
+
this.source = source;
|
|
20
|
+
}
|
|
21
|
+
start(filter, sink) {
|
|
22
|
+
const abortController = new AbortController();
|
|
23
|
+
const listeners = new Map();
|
|
24
|
+
listeners.set(filter, new Set([sink]));
|
|
25
|
+
this.abortController = abortController;
|
|
26
|
+
this.subscribers = listeners;
|
|
27
|
+
const source = this.source(abortController.signal);
|
|
28
|
+
this.currentSource = source;
|
|
29
|
+
this.loop(source, abortController, listeners);
|
|
30
|
+
return source;
|
|
31
|
+
}
|
|
32
|
+
async loop(source, abortController, sinks) {
|
|
33
|
+
try {
|
|
34
|
+
for await (let doc of source.iterator) {
|
|
35
|
+
if (abortController.signal.aborted || sinks.size == 0) {
|
|
36
|
+
throw new AbortError();
|
|
37
|
+
}
|
|
38
|
+
const key = doc.key;
|
|
39
|
+
const keySinks = sinks.get(key);
|
|
40
|
+
if (keySinks == null) {
|
|
41
|
+
continue;
|
|
42
|
+
}
|
|
43
|
+
for (let sink of keySinks) {
|
|
44
|
+
sink.write(doc.value);
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
// End of stream
|
|
48
|
+
for (let keySinks of sinks.values()) {
|
|
49
|
+
for (let sink of keySinks) {
|
|
50
|
+
sink.end();
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
catch (e) {
|
|
55
|
+
// Just in case the error is not from the source
|
|
56
|
+
abortController.abort();
|
|
57
|
+
for (let keySinks of sinks.values()) {
|
|
58
|
+
for (let sink of keySinks) {
|
|
59
|
+
sink.error(e);
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
finally {
|
|
64
|
+
// Clear state, so that a new subscription may be started
|
|
65
|
+
if (this.subscribers === sinks) {
|
|
66
|
+
this.subscribers = undefined;
|
|
67
|
+
this.abortController = undefined;
|
|
68
|
+
this.currentSource = undefined;
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
removeSink(key, sink) {
|
|
73
|
+
const existing = this.subscribers?.get(key);
|
|
74
|
+
if (existing == null) {
|
|
75
|
+
return;
|
|
76
|
+
}
|
|
77
|
+
existing.delete(sink);
|
|
78
|
+
if (existing.size == 0) {
|
|
79
|
+
this.subscribers.delete(key);
|
|
80
|
+
}
|
|
81
|
+
if (this.subscribers?.size == 0) {
|
|
82
|
+
// This is not immediate - there may be a delay until it is fully stopped,
|
|
83
|
+
// depending on the underlying source.
|
|
84
|
+
this.abortController?.abort();
|
|
85
|
+
this.subscribers = undefined;
|
|
86
|
+
this.abortController = undefined;
|
|
87
|
+
this.currentSource = undefined;
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
addSink(key, sink) {
|
|
91
|
+
if (this.currentSource == null) {
|
|
92
|
+
return this.start(key, sink);
|
|
93
|
+
}
|
|
94
|
+
else {
|
|
95
|
+
const existing = this.subscribers.get(key);
|
|
96
|
+
if (existing != null) {
|
|
97
|
+
existing.add(sink);
|
|
98
|
+
}
|
|
99
|
+
else {
|
|
100
|
+
this.subscribers.set(key, new Set([sink]));
|
|
101
|
+
}
|
|
102
|
+
return this.currentSource;
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
/**
|
|
106
|
+
* Subscribe to a specific stream.
|
|
107
|
+
*
|
|
108
|
+
* @param key The key used for demultiplexing, e.g. user id.
|
|
109
|
+
* @param signal
|
|
110
|
+
*/
|
|
111
|
+
async *subscribe(key, signal) {
|
|
112
|
+
const sink = new LastValueSink(undefined);
|
|
113
|
+
// Important that we register the sink before calling getFirstValue().
|
|
114
|
+
const source = this.addSink(key, sink);
|
|
115
|
+
try {
|
|
116
|
+
const firstValue = await source.getFirstValue(key);
|
|
117
|
+
yield firstValue;
|
|
118
|
+
yield* sink.withSignal(signal);
|
|
119
|
+
}
|
|
120
|
+
finally {
|
|
121
|
+
this.removeSink(key, sink);
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
get active() {
|
|
125
|
+
return this.subscribers != null;
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
//# sourceMappingURL=Demultiplexer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Demultiplexer.js","sourceRoot":"","sources":["../../src/streams/Demultiplexer.ts"],"names":[],"mappings":"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"}
|
|
@@ -9,8 +9,8 @@ export declare class LastValueSink<T> implements AsyncIterable<T> {
|
|
|
9
9
|
buffer: NextResult<T> | undefined;
|
|
10
10
|
nextResolve: undefined | (() => void);
|
|
11
11
|
constructor(initial: T | undefined);
|
|
12
|
-
|
|
13
|
-
|
|
12
|
+
write(value: T): void;
|
|
13
|
+
end(): void;
|
|
14
14
|
error(e: any): void;
|
|
15
15
|
private push;
|
|
16
16
|
withSignal(signal?: AbortSignal): AsyncIterable<T>;
|
|
@@ -14,14 +14,14 @@ export class LastValueSink {
|
|
|
14
14
|
this.buffer = { value: initial, done: false, error: undefined };
|
|
15
15
|
}
|
|
16
16
|
}
|
|
17
|
-
|
|
17
|
+
write(value) {
|
|
18
18
|
this.push({
|
|
19
19
|
value,
|
|
20
20
|
done: false,
|
|
21
21
|
error: undefined
|
|
22
22
|
});
|
|
23
23
|
}
|
|
24
|
-
|
|
24
|
+
end() {
|
|
25
25
|
this.push({
|
|
26
26
|
value: undefined,
|
|
27
27
|
done: true,
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"LastValueSink.js","sourceRoot":"","sources":["../../src/streams/LastValueSink.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAE9C;;;;;;GAMG;AACH,MAAM,OAAO,aAAa;IACxB,MAAM,CAA4B;IAClC,WAAW,CAA2B;IAEtC,YAAY,OAAsB;QAChC,IAAI,OAAO,IAAI,IAAI,EAAE,CAAC;YACpB,IAAI,CAAC,MAAM,GAAG,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC;QAClE,CAAC;IACH,CAAC;IAED,KAAK,CAAC,KAAQ;QACZ,IAAI,CAAC,IAAI,CAAC;YACR,KAAK;YACL,IAAI,EAAE,KAAK;YACX,KAAK,EAAE,SAAS;SACjB,CAAC,CAAC;IACL,CAAC;IAED,GAAG;QACD,IAAI,CAAC,IAAI,CAAC;YACR,KAAK,EAAE,SAAS;YAChB,IAAI,EAAE,IAAI;YACV,KAAK,EAAE,SAAS;SACjB,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,CAAM;QACV,IAAI,CAAC,IAAI,CAAC;YACR,KAAK,EAAE,SAAS;YAChB,IAAI,EAAE,IAAI;YACV,KAAK,EAAE,CAAC;SACT,CAAC,CAAC;IACL,CAAC;IAEO,IAAI,CAAC,CAAgB;QAC3B,IAAI,IAAI,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC;YACtB,OAAO;QACT,CAAC;QACD,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;QAChB,IAAI,CAAC,WAAW,EAAE,EAAE,CAAC;IACvB,CAAC;IAED,KAAK,CAAC,CAAC,UAAU,CAAC,MAAoB;QACpC,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,KAAK,CAAC,CAAC,IAAI,CAAC;YACZ,OAAO;QACT,CAAC;QAED,IAAI,MAAM,EAAE,OAAO,EAAE,CAAC;YACpB,MAAM,IAAI,UAAU,EAAE,CAAC;QACzB,CAAC;QAED,MAAM,OAAO,GAAG,GAAG,EAAE;YACnB,IAAI,CAAC,KAAK,CAAC,IAAI,UAAU,EAAE,CAAC,CAAC;QAC/B,CAAC,CAAC;QACF,MAAM,EAAE,gBAAgB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QAE3C,IAAI,CAAC;YACH,KAAK,CAAC,CAAC,IAAI,CAAC;QACd,CAAC;gBAAS,CAAC;YACT,MAAM,EAAE,mBAAmB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QAChD,CAAC;IACH,CAAC;IAED,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,aAAa,CAAC;QAC3B,OAAO,IAAI,EAAE,CAAC;YACZ,IAAI,IAAI,CAAC,MAAM,IAAI,IAAI,EAAE,CAAC;gBACxB,MAAM,OAAO,GAAG,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,EAAE;oBAC5C,IAAI,CAAC,WAAW,GAAG,OAAO,CAAC;gBAC7B,CAAC,CAAC,CAAC;gBACH,MAAM,OAAO,CAAC;YAChB,CAAC;YACD,MAAM,CAAC,GAAG,IAAI,CAAC,MAAO,CAAC;YACvB,IAAI,CAAC,MAAM,GAAG,SAAS,CAAC;YAExB,IAAI,CAAC,CAAC,KAAK,EAAE,CAAC;gBACZ,MAAM,CAAC,CAAC,KAAK,CAAC;YAChB,CAAC;iBAAM,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC;gBAClB,OAAO;YACT,CAAC;iBAAM,CAAC;gBACN,MAAM,CAAC,CAAC,KAAM,CAAC;YACjB,CAAC;QACH,CAAC;IACH,CAAC;CACF"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { throwIfAborted } from 'ix/aborterror.js';
|
|
2
2
|
import { AsyncIterableX } from 'ix/asynciterable/index.js';
|
|
3
3
|
import { wrapWithAbort } from 'ix/asynciterable/operators/withabort.js';
|
|
4
|
-
import { safeRace } from '
|
|
4
|
+
import { safeRace } from '../sync/safeRace.js';
|
|
5
5
|
/**
|
|
6
6
|
* Merge multiple source AsyncIterables into one output AsyncIterable.
|
|
7
7
|
*
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"merge.js","sourceRoot":"","sources":["../../src/streams/merge.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"streams-index.js","sourceRoot":"","sources":["../../src/streams/streams-index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,cAAc,oBAAoB,CAAC;AACnC,cAAc,oBAAoB,CAAC;AACnC,cAAc,wBAAwB,CAAC"}
|
package/dist/sync/sync-index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sync-index.js","sourceRoot":"","sources":["../../src/sync/sync-index.ts"],"names":[],"mappings":"AAAA,cAAc,
|
|
1
|
+
{"version":3,"file":"sync-index.js","sourceRoot":"","sources":["../../src/sync/sync-index.ts"],"names":[],"mappings":"AAAA,cAAc,qBAAqB,CAAC;AACpC,cAAc,eAAe,CAAC;AAC9B,cAAc,WAAW,CAAC;AAC1B,cAAc,WAAW,CAAC;AAC1B,cAAc,0BAA0B,CAAC;AACzC,cAAc,kBAAkB,CAAC"}
|
package/dist/sync/sync.js
CHANGED
|
@@ -3,7 +3,7 @@ import { AbortError } from 'ix/aborterror.js';
|
|
|
3
3
|
import * as util from '../util/util-index.js';
|
|
4
4
|
import { logger } from '@powersync/lib-services-framework';
|
|
5
5
|
import { BucketChecksumState } from './BucketChecksumState.js';
|
|
6
|
-
import { mergeAsyncIterables } from '
|
|
6
|
+
import { mergeAsyncIterables } from '../streams/streams-index.js';
|
|
7
7
|
import { acquireSemaphoreAbortable, settledPromise, tokenStream } from './util.js';
|
|
8
8
|
export async function* streamResponse(options) {
|
|
9
9
|
const { syncContext, bucketStorage, syncRules, params, syncParams, token, tokenStreamOptions, tracker, signal } = options;
|
|
@@ -51,7 +51,7 @@ async function* streamResponseInner(syncContext, bucketStorage, syncRules, param
|
|
|
51
51
|
after: BigInt(bucket.after)
|
|
52
52
|
}))
|
|
53
53
|
});
|
|
54
|
-
const stream = bucketStorage.
|
|
54
|
+
const stream = bucketStorage.watchCheckpointChanges({
|
|
55
55
|
user_id: checkpointUserId,
|
|
56
56
|
signal
|
|
57
57
|
});
|
package/dist/sync/sync.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sync.js","sourceRoot":"","sources":["../../src/sync/sync.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAGpE,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAI9C,OAAO,KAAK,IAAI,MAAM,uBAAuB,CAAC;AAE9C,OAAO,EAAE,MAAM,EAAE,MAAM,mCAAmC,CAAC;AAC3D,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAC/D,OAAO,EAAE,mBAAmB,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"sync.js","sourceRoot":"","sources":["../../src/sync/sync.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
"publishConfig": {
|
|
6
6
|
"access": "public"
|
|
7
7
|
},
|
|
8
|
-
"version": "0.0.0-dev-
|
|
8
|
+
"version": "0.0.0-dev-20250317113118",
|
|
9
9
|
"main": "dist/index.js",
|
|
10
10
|
"license": "FSL-1.1-Apache-2.0",
|
|
11
11
|
"type": "module",
|
|
@@ -35,8 +35,8 @@
|
|
|
35
35
|
"@powersync/lib-services-framework": "0.5.3",
|
|
36
36
|
"@powersync/service-jsonbig": "0.17.10",
|
|
37
37
|
"@powersync/service-rsocket-router": "0.0.20",
|
|
38
|
-
"@powersync/service-
|
|
39
|
-
"@powersync/service-
|
|
38
|
+
"@powersync/service-types": "0.9.0",
|
|
39
|
+
"@powersync/service-sync-rules": "0.0.0-dev-20250317113118"
|
|
40
40
|
},
|
|
41
41
|
"devDependencies": {
|
|
42
42
|
"@types/async": "^3.2.24",
|
package/src/index.ts
CHANGED
|
@@ -80,7 +80,7 @@ export interface SyncRulesBucketStorage
|
|
|
80
80
|
*
|
|
81
81
|
* The stream stops or errors if this is not the active sync rules (anymore).
|
|
82
82
|
*/
|
|
83
|
-
|
|
83
|
+
watchCheckpointChanges(options: WatchWriteCheckpointOptions): AsyncIterable<StorageCheckpointUpdate>;
|
|
84
84
|
|
|
85
85
|
/**
|
|
86
86
|
* Get a "batch" of data for a checkpoint.
|
|
@@ -50,11 +50,37 @@ export interface ManagedWriteCheckpointFilters extends BaseWriteCheckpointIdenti
|
|
|
50
50
|
heads: Record<string, string>;
|
|
51
51
|
}
|
|
52
52
|
|
|
53
|
+
export interface WriteCheckpointResult {
|
|
54
|
+
/**
|
|
55
|
+
* Write checkpoint id (also referred to as client_id).
|
|
56
|
+
*
|
|
57
|
+
* If null, there is no write checkpoint for the client.
|
|
58
|
+
*/
|
|
59
|
+
id: bigint | null;
|
|
60
|
+
|
|
61
|
+
/**
|
|
62
|
+
* LSN for the checkpoint.
|
|
63
|
+
*
|
|
64
|
+
* This will change when we support multiple connections.
|
|
65
|
+
*
|
|
66
|
+
* For managed write checkpoints, this LSN must be exceeded by the checkpoint / replication head to be valid.
|
|
67
|
+
*
|
|
68
|
+
* For custom write checkpoints, this will be null, and the write checkpoint is valid for all LSNs.
|
|
69
|
+
*/
|
|
70
|
+
lsn: string | null;
|
|
71
|
+
}
|
|
72
|
+
|
|
53
73
|
export type ManagedWriteCheckpointOptions = ManagedWriteCheckpointFilters;
|
|
54
74
|
|
|
55
75
|
export type SyncStorageLastWriteCheckpointFilters = BaseWriteCheckpointIdentifier | ManagedWriteCheckpointFilters;
|
|
56
76
|
export type LastWriteCheckpointFilters = CustomWriteCheckpointFilters | ManagedWriteCheckpointFilters;
|
|
57
77
|
|
|
78
|
+
export interface WatchUserWriteCheckpointOptions {
|
|
79
|
+
user_id: string;
|
|
80
|
+
sync_rules_id: number;
|
|
81
|
+
signal: AbortSignal;
|
|
82
|
+
}
|
|
83
|
+
|
|
58
84
|
export interface BaseWriteCheckpointAPI {
|
|
59
85
|
readonly writeCheckpointMode: WriteCheckpointMode;
|
|
60
86
|
setWriteCheckpointMode(mode: WriteCheckpointMode): void;
|
|
@@ -80,6 +106,8 @@ export interface WriteCheckpointAPI extends BaseWriteCheckpointAPI {
|
|
|
80
106
|
batchCreateCustomWriteCheckpoints(checkpoints: CustomWriteCheckpointOptions[]): Promise<void>;
|
|
81
107
|
createCustomWriteCheckpoint(checkpoint: CustomWriteCheckpointOptions): Promise<bigint>;
|
|
82
108
|
lastWriteCheckpoint(filters: LastWriteCheckpointFilters): Promise<bigint | null>;
|
|
109
|
+
|
|
110
|
+
watchUserWriteCheckpoint(options: WatchUserWriteCheckpointOptions): AsyncIterable<WriteCheckpointResult>;
|
|
83
111
|
}
|
|
84
112
|
|
|
85
113
|
export const DEFAULT_WRITE_CHECKPOINT_MODE = WriteCheckpointMode.MANAGED;
|
|
@@ -52,13 +52,13 @@ export class BroadcastIterable<T> implements AsyncIterable<T> {
|
|
|
52
52
|
}
|
|
53
53
|
this.last = doc;
|
|
54
54
|
for (let sink of sinks) {
|
|
55
|
-
sink.
|
|
55
|
+
sink.write(doc);
|
|
56
56
|
}
|
|
57
57
|
}
|
|
58
58
|
|
|
59
59
|
// End of stream
|
|
60
60
|
for (let sink of sinks) {
|
|
61
|
-
sink.
|
|
61
|
+
sink.end();
|
|
62
62
|
}
|
|
63
63
|
} catch (e) {
|
|
64
64
|
// Just in case the error is not from the source
|