@powersync/service-core 1.27.2 → 1.28.0
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 +30 -0
- package/LICENSE +201 -67
- package/dist/api/RouteAPI.d.ts +6 -0
- package/dist/api/api-metrics.js +4 -0
- package/dist/api/api-metrics.js.map +1 -1
- package/dist/api/diagnostics.d.ts +5 -0
- package/dist/api/diagnostics.js +17 -2
- package/dist/api/diagnostics.js.map +1 -1
- package/dist/metrics/connection-metrics.d.ts +28 -0
- package/dist/metrics/connection-metrics.js +55 -0
- package/dist/metrics/connection-metrics.js.map +1 -0
- package/dist/metrics/metrics-index.d.ts +1 -0
- package/dist/metrics/metrics-index.js +1 -0
- package/dist/metrics/metrics-index.js.map +1 -1
- package/dist/metrics/metrics-interfaces.d.ts +7 -1
- package/dist/metrics/metrics-interfaces.js.map +1 -1
- package/dist/modules/loader.js +8 -2
- package/dist/modules/loader.js.map +1 -1
- package/dist/replication/AbstractReplicationJob.d.ts +2 -0
- package/dist/replication/AbstractReplicationJob.js +17 -1
- package/dist/replication/AbstractReplicationJob.js.map +1 -1
- package/dist/replication/AbstractReplicator.d.ts +8 -18
- package/dist/replication/AbstractReplicator.js +63 -64
- package/dist/replication/AbstractReplicator.js.map +1 -1
- package/dist/replication/ReplicationModule.js +0 -6
- package/dist/replication/ReplicationModule.js.map +1 -1
- package/dist/routes/configure-fastify.js +5 -1
- package/dist/routes/configure-fastify.js.map +1 -1
- package/dist/routes/endpoints/admin.js +24 -22
- package/dist/routes/endpoints/admin.js.map +1 -1
- package/dist/routes/endpoints/socket-route.js +19 -27
- package/dist/routes/endpoints/socket-route.js.map +1 -1
- package/dist/routes/endpoints/sync-rules.js +17 -40
- package/dist/routes/endpoints/sync-rules.js.map +1 -1
- package/dist/routes/endpoints/sync-stream.js +25 -23
- package/dist/routes/endpoints/sync-stream.js.map +1 -1
- package/dist/routes/hooks.d.ts +1 -1
- package/dist/routes/hooks.js +2 -1
- package/dist/routes/hooks.js.map +1 -1
- package/dist/routes/sync-connection.d.ts +7 -0
- package/dist/routes/sync-connection.js +34 -0
- package/dist/routes/sync-connection.js.map +1 -0
- package/dist/storage/BucketStorageFactory.d.ts +30 -22
- package/dist/storage/BucketStorageFactory.js +14 -14
- package/dist/storage/BucketStorageFactory.js.map +1 -1
- package/dist/storage/PersistedSyncConfigContent.js +2 -2
- package/dist/storage/PersistedSyncConfigContent.js.map +1 -1
- package/dist/storage/SyncRulesBucketStorage.d.ts +23 -2
- package/dist/storage/SyncRulesBucketStorage.js.map +1 -1
- package/dist/streams/BroadcastIterable.js +8 -7
- package/dist/streams/BroadcastIterable.js.map +1 -1
- package/dist/streams/LastValueSink.d.ts +2 -2
- package/dist/streams/LastValueSink.js +8 -13
- package/dist/streams/LastValueSink.js.map +1 -1
- package/dist/streams/merge.d.ts +15 -31
- package/dist/streams/merge.js +136 -152
- package/dist/streams/merge.js.map +1 -1
- package/dist/sync/BucketChecksumState.d.ts +3 -2
- package/dist/sync/BucketChecksumState.js +12 -5
- package/dist/sync/BucketChecksumState.js.map +1 -1
- package/dist/sync/sync.js +48 -38
- package/dist/sync/sync.js.map +1 -1
- package/dist/sync/util.d.ts +1 -2
- package/dist/sync/util.js +2 -5
- package/dist/sync/util.js.map +1 -1
- package/dist/system/ServiceContext.d.ts +7 -0
- package/dist/system/ServiceContext.js +3 -3
- package/dist/system/ServiceContext.js.map +1 -1
- package/dist/system/SyncConfigEngine.d.ts +135 -0
- package/dist/system/SyncConfigEngine.js +186 -0
- package/dist/system/SyncConfigEngine.js.map +1 -0
- package/dist/system/system-index.d.ts +1 -0
- package/dist/system/system-index.js +1 -0
- package/dist/system/system-index.js.map +1 -1
- package/dist/util/config/types.d.ts +4 -0
- package/package.json +8 -9
- package/src/api/RouteAPI.ts +6 -0
- package/src/api/api-metrics.ts +5 -0
- package/src/api/diagnostics.ts +22 -2
- package/src/metrics/connection-metrics.ts +75 -0
- package/src/metrics/metrics-index.ts +1 -0
- package/src/metrics/metrics-interfaces.ts +8 -1
- package/src/modules/loader.ts +16 -2
- package/src/replication/AbstractReplicationJob.ts +17 -1
- package/src/replication/AbstractReplicator.ts +83 -81
- package/src/replication/ReplicationModule.ts +0 -5
- package/src/routes/configure-fastify.ts +7 -1
- package/src/routes/endpoints/admin.ts +27 -20
- package/src/routes/endpoints/socket-route.ts +26 -38
- package/src/routes/endpoints/sync-rules.ts +22 -46
- package/src/routes/endpoints/sync-stream.ts +31 -27
- package/src/routes/hooks.ts +5 -1
- package/src/routes/sync-connection.ts +39 -0
- package/src/storage/BucketStorageFactory.ts +45 -29
- package/src/storage/PersistedSyncConfigContent.ts +2 -2
- package/src/storage/SyncRulesBucketStorage.ts +23 -2
- package/src/streams/BroadcastIterable.ts +8 -7
- package/src/streams/LastValueSink.ts +10 -16
- package/src/streams/merge.ts +149 -169
- package/src/sync/BucketChecksumState.ts +17 -5
- package/src/sync/sync.ts +71 -57
- package/src/sync/util.ts +2 -7
- package/src/system/ServiceContext.ts +8 -3
- package/src/system/SyncConfigEngine.ts +247 -0
- package/src/system/system-index.ts +1 -0
- package/src/util/config/types.ts +4 -0
- package/test/src/AbstractReplicator.test.ts +375 -45
- package/test/src/PersistedSyncConfigContent.test.ts +5 -5
- package/test/src/SyncConfigEngine.test.ts +208 -0
- package/test/src/broadcast_iterable.test.ts +59 -31
- package/test/src/config.test.ts +65 -3
- package/test/src/connection-metrics-export.test.ts +76 -0
- package/test/src/connection-metrics.test.ts +184 -0
- package/test/src/diagnostics.test.ts +3 -3
- package/test/src/last_value_sink.test.ts +34 -0
- package/test/src/merge_iterable.test.ts +304 -55
- package/test/src/module-loader.test.ts +14 -1
- package/test/src/recording-metrics.ts +36 -0
- package/test/src/routes/admin.test.ts +2 -2
- package/test/src/routes/concurrency-limit.test.ts +108 -0
- package/test/src/routes/connection-metrics.test.ts +269 -0
- package/test/src/routes/invalid-config.test.ts +184 -0
- package/test/src/routes/mocks.ts +26 -13
- package/test/src/routes/stream-disconnect.integration.test.ts +129 -0
- package/test/src/routes/stream.test.ts +200 -107
- package/test/src/routes/sync-rules.test.ts +19 -1
- package/test/src/source_table_config.test.ts +7 -7
- package/test/src/sync/BucketChecksumState.test.ts +10 -10
- package/test/src/sync/stream_response.test.ts +389 -0
- package/test/src/sync/util.test.ts +14 -3
- package/tsconfig.tsbuildinfo +1 -1
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { BaseObserver, logger } from '@powersync/lib-services-framework';
|
|
2
|
-
import { PrecompiledSyncConfig, serializeSyncPlan
|
|
2
|
+
import { parseSyncConfig, PrecompiledSyncConfig, serializeSyncPlan } from '@powersync/service-sync-rules';
|
|
3
3
|
import { syncConfigYamlErrorToReplicationError } from '../util/errors.js';
|
|
4
4
|
/**
|
|
5
5
|
* Represents a configured storage provider.
|
|
@@ -39,7 +39,7 @@ export class BucketStorageFactory extends BaseObserver {
|
|
|
39
39
|
}
|
|
40
40
|
export function updateSyncRulesFromYaml(content, options) {
|
|
41
41
|
const { validate, ...updateOptions } = options ?? {};
|
|
42
|
-
const config =
|
|
42
|
+
const config = parseSyncConfig(content, {
|
|
43
43
|
// No schema-based validation at this point
|
|
44
44
|
schema: undefined,
|
|
45
45
|
defaultSchema: options?.defaultSchema ?? 'not_applicable', // Not needed for validation
|
|
@@ -66,21 +66,21 @@ export function updateSyncRulesFromConfig(parsed, options) {
|
|
|
66
66
|
return { config: { yaml: config.content, plan, parsed }, ...options };
|
|
67
67
|
}
|
|
68
68
|
/**
|
|
69
|
-
*
|
|
70
|
-
*
|
|
71
|
-
*
|
|
72
|
-
*
|
|
73
|
-
*
|
|
74
|
-
* Fatal errors usually throw during parsing before this is reached. They can reach this when the sync config is parsed
|
|
75
|
-
* without validation, such as at startup with `exit_on_error: false`.
|
|
69
|
+
* Log parser errors and warnings from a parsed config, or combined parsing and source-capability
|
|
70
|
+
* diagnostics from SyncConfigEngine. Use when loading or deploying a sync config so operators see
|
|
71
|
+
* diagnostics in service logs as well as API responses. Fatal diagnostics are logged at error level;
|
|
72
|
+
* warnings remain advisory. Uses the supplied logger or the service logger by default.
|
|
76
73
|
*/
|
|
77
|
-
export function logSyncConfigErrors(
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
74
|
+
export function logSyncConfigErrors(result, log = logger) {
|
|
75
|
+
const diagnostics = Array.isArray(result)
|
|
76
|
+
? result
|
|
77
|
+
: result.errors.map((error) => ({ level: error.type, message: error.message }));
|
|
78
|
+
for (const diagnostic of diagnostics) {
|
|
79
|
+
if (diagnostic.level == 'warning') {
|
|
80
|
+
log.warn(`Sync config warning: ${diagnostic.message}`);
|
|
81
81
|
}
|
|
82
82
|
else {
|
|
83
|
-
log.error(`Sync config error: ${
|
|
83
|
+
log.error(`Sync config error: ${diagnostic.message}`);
|
|
84
84
|
}
|
|
85
85
|
}
|
|
86
86
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BucketStorageFactory.js","sourceRoot":"","sources":["../../src/storage/BucketStorageFactory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,mCAAmC,CAAC;AACzE,OAAO,EACL,qBAAqB,EAGrB,iBAAiB,
|
|
1
|
+
{"version":3,"file":"BucketStorageFactory.js","sourceRoot":"","sources":["../../src/storage/BucketStorageFactory.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import { logger as defaultLogger, ErrorCode, ServiceError } from '@powersync/lib-services-framework';
|
|
2
|
-
import { CompatibilityContext, CompatibilityOption, compileEventDefinitions, DEFAULT_HYDRATION_STATE, deserializeSyncPlan, nodeSqlite,
|
|
2
|
+
import { CompatibilityContext, CompatibilityOption, compileEventDefinitions, DEFAULT_HYDRATION_STATE, deserializeSyncPlan, nodeSqlite, parseSyncConfig, PrecompiledSyncConfig, versionedHydrationState, YamlError } from '@powersync/service-sync-rules';
|
|
3
3
|
import * as sqlite from 'node:sqlite';
|
|
4
4
|
import { STORAGE_VERSION_CONFIG } from './StorageVersionConfig.js';
|
|
5
5
|
export function parsePersistedSyncConfigContent(options) {
|
|
6
6
|
const { content, compiledPlan, storageVersion, parseOptions } = options;
|
|
7
7
|
if (compiledPlan == null) {
|
|
8
8
|
// Fallback: Only parse from YAML if no compiled plan is available.
|
|
9
|
-
return
|
|
9
|
+
return parseSyncConfig(content, parseOptions);
|
|
10
10
|
}
|
|
11
11
|
const plan = deserializeSyncPlan(compiledPlan.plan);
|
|
12
12
|
const compatibility = CompatibilityContext.deserialize(compiledPlan.compatibility);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PersistedSyncConfigContent.js","sourceRoot":"","sources":["../../src/storage/PersistedSyncConfigContent.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,IAAI,aAAa,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,mCAAmC,CAAC;AACrG,OAAO,EACL,oBAAoB,EACpB,mBAAmB,EACnB,uBAAuB,EACvB,uBAAuB,EACvB,mBAAmB,EAInB,UAAU,EACV,
|
|
1
|
+
{"version":3,"file":"PersistedSyncConfigContent.js","sourceRoot":"","sources":["../../src/storage/PersistedSyncConfigContent.ts"],"names":[],"mappings":"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"}
|
|
@@ -225,9 +225,25 @@ export interface CreateWriterOptions extends ParseSyncConfigOptions {
|
|
|
225
225
|
*/
|
|
226
226
|
skipExistingRows?: boolean;
|
|
227
227
|
/**
|
|
228
|
-
* Callback called
|
|
228
|
+
* Callback called when an update cannot reconstruct a complete current row,
|
|
229
|
+
* including replay of an update whose incomplete row was already persisted.
|
|
229
230
|
*
|
|
230
231
|
* This is expected to happen in some initial replication edge cases, only if storeCurrentData = true.
|
|
232
|
+
*
|
|
233
|
+
* The callback must synchronously enqueue repair keys, without mutating the
|
|
234
|
+
* record, throwing, returning a promise, or re-entering storage. It can run
|
|
235
|
+
* during flush rather than save, including after the data transaction commits.
|
|
236
|
+
* It is not an indication that a source checkpoint has advanced. Notifications
|
|
237
|
+
* can repeat on source replay; consumers must tolerate repeated repair keys.
|
|
238
|
+
*
|
|
239
|
+
* Consumers must explicitly await flush(), complete its queued repairs, and
|
|
240
|
+
* only then commit/keepalive, persist a resume position, or acknowledge the
|
|
241
|
+
* source. Do not rely on commit() auto-flushing pending rows when supplying
|
|
242
|
+
* this callback. Repair failures must stop progress and restart replication;
|
|
243
|
+
* the in-memory repair queue is not durable. Keep input records stable until
|
|
244
|
+
* their flush completes so deferred callbacks observe the original key. The
|
|
245
|
+
* update's after record must contain the full repair key; the callback receives
|
|
246
|
+
* that original update, rather than the merged current row.
|
|
231
247
|
*/
|
|
232
248
|
markRecordUnavailable?: BucketStorageMarkRecordUnavailable;
|
|
233
249
|
hooks?: StorageHooks;
|
|
@@ -472,4 +488,9 @@ export interface CheckpointChanges {
|
|
|
472
488
|
invalidateParameterBuckets: boolean;
|
|
473
489
|
}
|
|
474
490
|
export declare const CHECKPOINT_INVALIDATE_ALL: CheckpointChanges;
|
|
475
|
-
|
|
491
|
+
/**
|
|
492
|
+
* Synchronously queues a repair; see CreateWriterOptions.markRecordUnavailable for ordering requirements.
|
|
493
|
+
*
|
|
494
|
+
* Requires an explicit undefined return type to avoid accidental async usage.
|
|
495
|
+
*/
|
|
496
|
+
export type BucketStorageMarkRecordUnavailable = (record: SaveUpdate) => undefined;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SyncRulesBucketStorage.js","sourceRoot":"","sources":["../../src/storage/SyncRulesBucketStorage.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"SyncRulesBucketStorage.js","sourceRoot":"","sources":["../../src/storage/SyncRulesBucketStorage.ts"],"names":[],"mappings":"AA6fA,MAAM,UAAU,UAAU,CAAC,KAAmD;IAC5E,OAAQ,KAAgC,CAAC,OAAO,KAAK,SAAS,CAAC;AACjE,CAAC;AAiBD;;;;GAIG;AACH,MAAM,OAAO,8BAA+B,SAAQ,KAAK;IAE5C;IACA;IAFX,YACW,KAAa,EACb,SAAyC;QAElD,KAAK,CAAC,yCAAyC,KAAK,GAAG,CAAC,CAAC;QAHhD,UAAK,GAAL,KAAK,CAAQ;QACb,cAAS,GAAT,SAAS,CAAgC;IAGpD,CAAC;CACF;AAqDD,MAAM,CAAC,MAAM,yBAAyB,GAAsB;IAC1D,kBAAkB,EAAE,IAAI,GAAG,EAAU;IACrC,qBAAqB,EAAE,IAAI;IAC3B,uBAAuB,EAAE,IAAI,GAAG,EAAU;IAC1C,0BAA0B,EAAE,IAAI;CACjC,CAAC"}
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import { AbortError } from 'ix/aborterror.js';
|
|
2
1
|
import { LastValueSink } from './LastValueSink.js';
|
|
3
2
|
/**
|
|
4
3
|
* Loosely based on Dart's broadcast streams:
|
|
@@ -42,8 +41,9 @@ export class BroadcastIterable {
|
|
|
42
41
|
async loop(abortController, sinks) {
|
|
43
42
|
try {
|
|
44
43
|
for await (let doc of this.source(abortController.signal)) {
|
|
45
|
-
|
|
46
|
-
|
|
44
|
+
abortController.signal.throwIfAborted();
|
|
45
|
+
if (sinks.size == 0) {
|
|
46
|
+
throw new DOMException('No subscribers remain', 'AbortError');
|
|
47
47
|
}
|
|
48
48
|
this.last = doc;
|
|
49
49
|
for (let sink of sinks) {
|
|
@@ -57,7 +57,7 @@ export class BroadcastIterable {
|
|
|
57
57
|
}
|
|
58
58
|
catch (e) {
|
|
59
59
|
// Just in case the error is not from the source
|
|
60
|
-
abortController.abort();
|
|
60
|
+
abortController.abort(e);
|
|
61
61
|
for (let listener of sinks) {
|
|
62
62
|
listener.error(e);
|
|
63
63
|
}
|
|
@@ -71,12 +71,12 @@ export class BroadcastIterable {
|
|
|
71
71
|
}
|
|
72
72
|
}
|
|
73
73
|
}
|
|
74
|
-
removeSink(listener) {
|
|
74
|
+
removeSink(listener, reason) {
|
|
75
75
|
this.subscribers?.delete(listener);
|
|
76
76
|
if (this.subscribers?.size == 0) {
|
|
77
77
|
// This is not immediate - there may be a delay until it is fully stopped,
|
|
78
78
|
// depending on the underlying source.
|
|
79
|
-
this.abortController?.abort();
|
|
79
|
+
this.abortController?.abort(reason);
|
|
80
80
|
this.last = undefined;
|
|
81
81
|
this.subscribers = undefined;
|
|
82
82
|
this.abortController = undefined;
|
|
@@ -91,13 +91,14 @@ export class BroadcastIterable {
|
|
|
91
91
|
}
|
|
92
92
|
}
|
|
93
93
|
async *[Symbol.asyncIterator](signal) {
|
|
94
|
+
signal?.throwIfAborted();
|
|
94
95
|
const sink = new LastValueSink(this.last);
|
|
95
96
|
this.addSink(sink);
|
|
96
97
|
try {
|
|
97
98
|
yield* sink.withSignal(signal);
|
|
98
99
|
}
|
|
99
100
|
finally {
|
|
100
|
-
this.removeSink(sink);
|
|
101
|
+
this.removeSink(sink, signal?.reason);
|
|
101
102
|
}
|
|
102
103
|
}
|
|
103
104
|
get active() {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BroadcastIterable.js","sourceRoot":"","sources":["../../src/streams/BroadcastIterable.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"BroadcastIterable.js","sourceRoot":"","sources":["../../src/streams/BroadcastIterable.ts"],"names":[],"mappings":"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"}
|
|
@@ -11,7 +11,7 @@ export declare class LastValueSink<T> implements AsyncIterable<T> {
|
|
|
11
11
|
constructor(initial: T | undefined);
|
|
12
12
|
write(value: T): void;
|
|
13
13
|
end(): void;
|
|
14
|
-
error(e:
|
|
14
|
+
error(e: unknown): void;
|
|
15
15
|
private push;
|
|
16
16
|
withSignal(signal?: AbortSignal): AsyncIterable<T>;
|
|
17
17
|
[Symbol.asyncIterator](): AsyncIterator<T>;
|
|
@@ -19,6 +19,6 @@ export declare class LastValueSink<T> implements AsyncIterable<T> {
|
|
|
19
19
|
interface NextResult<T> {
|
|
20
20
|
value: T | undefined;
|
|
21
21
|
done: boolean;
|
|
22
|
-
error
|
|
22
|
+
error?: unknown;
|
|
23
23
|
}
|
|
24
24
|
export {};
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import { AbortError } from 'ix/aborterror.js';
|
|
2
1
|
/**
|
|
3
2
|
* An AsyncIterable that allows pushing values.
|
|
4
3
|
*
|
|
@@ -11,21 +10,19 @@ export class LastValueSink {
|
|
|
11
10
|
nextResolve;
|
|
12
11
|
constructor(initial) {
|
|
13
12
|
if (initial != null) {
|
|
14
|
-
this.buffer = { value: initial, done: false
|
|
13
|
+
this.buffer = { value: initial, done: false };
|
|
15
14
|
}
|
|
16
15
|
}
|
|
17
16
|
write(value) {
|
|
18
17
|
this.push({
|
|
19
18
|
value,
|
|
20
|
-
done: false
|
|
21
|
-
error: undefined
|
|
19
|
+
done: false
|
|
22
20
|
});
|
|
23
21
|
}
|
|
24
22
|
end() {
|
|
25
23
|
this.push({
|
|
26
24
|
value: undefined,
|
|
27
|
-
done: true
|
|
28
|
-
error: undefined
|
|
25
|
+
done: true
|
|
29
26
|
});
|
|
30
27
|
}
|
|
31
28
|
error(e) {
|
|
@@ -47,18 +44,16 @@ export class LastValueSink {
|
|
|
47
44
|
yield* this;
|
|
48
45
|
return;
|
|
49
46
|
}
|
|
50
|
-
|
|
51
|
-
throw new AbortError();
|
|
52
|
-
}
|
|
47
|
+
signal.throwIfAborted();
|
|
53
48
|
const onAbort = () => {
|
|
54
|
-
this.error(
|
|
49
|
+
this.error(signal.reason);
|
|
55
50
|
};
|
|
56
|
-
signal
|
|
51
|
+
signal.addEventListener('abort', onAbort, { once: true });
|
|
57
52
|
try {
|
|
58
53
|
yield* this;
|
|
59
54
|
}
|
|
60
55
|
finally {
|
|
61
|
-
signal
|
|
56
|
+
signal.removeEventListener('abort', onAbort);
|
|
62
57
|
}
|
|
63
58
|
}
|
|
64
59
|
async *[Symbol.asyncIterator]() {
|
|
@@ -71,7 +66,7 @@ export class LastValueSink {
|
|
|
71
66
|
}
|
|
72
67
|
const n = this.buffer;
|
|
73
68
|
this.buffer = undefined;
|
|
74
|
-
if (n
|
|
69
|
+
if ('error' in n) {
|
|
75
70
|
throw n.error;
|
|
76
71
|
}
|
|
77
72
|
else if (n.done) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LastValueSink.js","sourceRoot":"","sources":["../../src/streams/LastValueSink.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"LastValueSink.js","sourceRoot":"","sources":["../../src/streams/LastValueSink.ts"],"names":[],"mappings":"AAAA;;;;;;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,CAAC;QAChD,CAAC;IACH,CAAC;IAED,KAAK,CAAC,KAAQ;QACZ,IAAI,CAAC,IAAI,CAAC;YACR,KAAK;YACL,IAAI,EAAE,KAAK;SACZ,CAAC,CAAC;IACL,CAAC;IAED,GAAG;QACD,IAAI,CAAC,IAAI,CAAC;YACR,KAAK,EAAE,SAAS;YAChB,IAAI,EAAE,IAAI;SACX,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,CAAU;QACd,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,MAAM,CAAC,cAAc,EAAE,CAAC;QAExB,MAAM,OAAO,GAAG,GAAG,EAAE;YACnB,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QAC5B,CAAC,CAAC;QACF,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;QAE1D,IAAI,CAAC;YACH,KAAK,CAAC,CAAC,IAAI,CAAC;QACd,CAAC;gBAAS,CAAC;YACT,MAAM,CAAC,mBAAmB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QAC/C,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,OAAO,IAAI,CAAC,EAAE,CAAC;gBACjB,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"}
|
package/dist/streams/merge.d.ts
CHANGED
|
@@ -1,38 +1,22 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import type { IterableSource } from './BroadcastIterable.js';
|
|
2
2
|
/**
|
|
3
3
|
* Merge multiple source AsyncIterables into one output AsyncIterable.
|
|
4
|
+
* The results from all iterables are interleaved. When any iterable is done, the output stops.
|
|
4
5
|
*
|
|
5
|
-
*
|
|
6
|
+
* Sources receive a signal owned by this merge. They must use it to unblock pending reads:
|
|
7
|
+
* async generators queue return() behind next(), so closing an unabortable read can block forever.
|
|
8
|
+
* The signal is aborted before closing all source iterators, and completion waits for their cleanup.
|
|
9
|
+
* Cleanup failures propagate to the caller; multiple failures are combined in an AggregateError.
|
|
6
10
|
*
|
|
7
|
-
*
|
|
8
|
-
*
|
|
9
|
-
*
|
|
10
|
-
*
|
|
11
|
-
* @returns The merged AsyncIterable.
|
|
12
|
-
*/
|
|
13
|
-
export declare function mergeAsyncIterables<T>(source: AsyncIterable<T>[], signal?: AbortSignal): AsyncIterable<T>;
|
|
14
|
-
export declare function mergeAsyncIterablesNew<T>(source: AsyncIterable<T>[], signal?: AbortSignal): AsyncIterable<T>;
|
|
15
|
-
export declare function mergeAsyncIterablesOld<T>(source: AsyncIterable<T>[], signal?: AbortSignal): AsyncIterable<T>;
|
|
16
|
-
/**
|
|
17
|
-
* Loosely based on IxJS merge, but with some changes:
|
|
18
|
-
* 1. Fix an issue with uncaught errors.
|
|
19
|
-
* Partially fixed: https://github.com/ReactiveX/IxJS/pull/354
|
|
20
|
-
* Essentially, we only want to call next() on inner iterators when next() is called on the outer one.
|
|
11
|
+
* Loosely based on IxJS merge, with these differences:
|
|
12
|
+
* 1. Fix an issue with uncaught errors, partially fixed in https://github.com/ReactiveX/IxJS/pull/354.
|
|
13
|
+
* Only call next() on inner iterators when next() is called on the outer one, and handle every
|
|
14
|
+
* pending read immediately, including reads whose results are not consumed before shutdown.
|
|
21
15
|
* 2. Call return() on all inner iterators when the outer one returns.
|
|
22
|
-
* 3.
|
|
16
|
+
* 3. Return when the first iterator returns.
|
|
17
|
+
* Original implementation: https://github.com/ReactiveX/IxJS/blob/f07b7ef4095120f1ef21a4023030c75b36335cd1/src/asynciterable/merge.ts
|
|
23
18
|
*
|
|
24
|
-
*
|
|
19
|
+
* @param sources Factories for source iterables that observe the supplied abort signal.
|
|
20
|
+
* @param signal Optional signal to abort iteration.
|
|
25
21
|
*/
|
|
26
|
-
export declare
|
|
27
|
-
private _source;
|
|
28
|
-
private _race;
|
|
29
|
-
/**
|
|
30
|
-
*
|
|
31
|
-
* @param source
|
|
32
|
-
* @param options Specify `race: true` to stop the iterator when any inner one returns, instead of waiting for all.
|
|
33
|
-
*/
|
|
34
|
-
constructor(source: AsyncIterable<T>[], options?: {
|
|
35
|
-
race?: boolean;
|
|
36
|
-
});
|
|
37
|
-
[Symbol.asyncIterator](signal?: AbortSignal): AsyncIterator<T>;
|
|
38
|
-
}
|
|
22
|
+
export declare function mergeAsyncIterables<T>(sources: IterableSource<T>[], signal?: AbortSignal): AsyncIterable<T>;
|