@powersync/common 0.0.0-dev-20260504100448 → 0.0.0-dev-20260630141119
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/lib/attachments/AttachmentContext.d.ts +9 -8
- package/lib/attachments/AttachmentContext.js +8 -3
- package/lib/attachments/AttachmentContext.js.map +1 -1
- package/lib/attachments/AttachmentErrorHandler.d.ts +6 -6
- package/lib/attachments/AttachmentQueue.d.ts +85 -36
- package/lib/attachments/AttachmentQueue.js +19 -21
- package/lib/attachments/AttachmentQueue.js.map +1 -1
- package/lib/attachments/AttachmentService.d.ts +3 -3
- package/lib/attachments/AttachmentService.js +4 -3
- package/lib/attachments/AttachmentService.js.map +1 -1
- package/lib/attachments/LocalStorageAdapter.d.ts +14 -8
- package/lib/attachments/LocalStorageAdapter.js +3 -0
- package/lib/attachments/LocalStorageAdapter.js.map +1 -1
- package/lib/attachments/RemoteStorageAdapter.d.ts +4 -4
- package/lib/attachments/Schema.d.ts +14 -6
- package/lib/attachments/Schema.js +8 -3
- package/lib/attachments/Schema.js.map +1 -1
- package/lib/attachments/SyncingService.d.ts +2 -2
- package/lib/attachments/SyncingService.js +8 -3
- package/lib/attachments/SyncingService.js.map +1 -1
- package/lib/attachments/WatchedAttachmentItem.d.ts +3 -1
- package/lib/client/{AbstractPowerSyncDatabase.d.ts → CommonPowerSyncDatabase.d.ts} +112 -238
- package/lib/client/CommonPowerSyncDatabase.js +2 -0
- package/lib/client/CommonPowerSyncDatabase.js.map +1 -0
- package/lib/client/Query.d.ts +9 -0
- package/lib/client/SQLOpenFactory.d.ts +44 -10
- package/lib/client/SQLOpenFactory.js +1 -19
- package/lib/client/SQLOpenFactory.js.map +1 -1
- package/lib/client/compilableQueryWatch.d.ts +8 -2
- package/lib/client/compilableQueryWatch.js +4 -2
- package/lib/client/compilableQueryWatch.js.map +1 -1
- package/lib/client/connection/PowerSyncBackendConnector.d.ts +6 -3
- package/lib/client/connection/PowerSyncCredentials.d.ts +3 -0
- package/lib/client/runOnSchemaChange.d.ts +5 -2
- package/lib/client/runOnSchemaChange.js +3 -0
- package/lib/client/runOnSchemaChange.js.map +1 -1
- package/lib/client/sync/bucket/CrudBatch.d.ts +2 -0
- package/lib/client/sync/bucket/CrudBatch.js +2 -0
- package/lib/client/sync/bucket/CrudBatch.js.map +1 -1
- package/lib/client/sync/bucket/CrudEntry.d.ts +9 -31
- package/lib/client/sync/bucket/CrudEntry.js +2 -97
- package/lib/client/sync/bucket/CrudEntry.js.map +1 -1
- package/lib/client/sync/bucket/CrudTransaction.d.ts +3 -0
- package/lib/client/sync/bucket/CrudTransaction.js +3 -0
- package/lib/client/sync/bucket/CrudTransaction.js.map +1 -1
- package/lib/client/sync/options.d.ts +65 -0
- package/lib/client/sync/options.js +25 -0
- package/lib/client/sync/options.js.map +1 -0
- package/lib/client/sync/stream/JsonValue.d.ts +3 -0
- package/lib/client/sync/sync-streams.d.ts +23 -8
- package/lib/client/triggers/TriggerManager.d.ts +28 -56
- package/lib/client/triggers/TriggerManager.js +2 -1
- package/lib/client/triggers/TriggerManager.js.map +1 -1
- package/lib/client/triggers/sanitizeSQL.d.ts +4 -0
- package/lib/client/triggers/sanitizeSQL.js +4 -0
- package/lib/client/triggers/sanitizeSQL.js.map +1 -1
- package/lib/client/watched/GetAllQuery.d.ts +7 -3
- package/lib/client/watched/GetAllQuery.js +3 -1
- package/lib/client/watched/GetAllQuery.js.map +1 -1
- package/lib/client/watched/WatchedQuery.d.ts +20 -6
- package/lib/client/watched/WatchedQuery.js +3 -5
- package/lib/client/watched/WatchedQuery.js.map +1 -1
- package/lib/client/watched/processors/DifferentialQueryProcessor.d.ts +15 -45
- package/lib/client/watched/processors/DifferentialQueryProcessor.js +1 -172
- package/lib/client/watched/processors/DifferentialQueryProcessor.js.map +1 -1
- package/lib/client/watched/processors/OnChangeQueryProcessor.d.ts +4 -22
- package/lib/client/watched/processors/OnChangeQueryProcessor.js +1 -82
- package/lib/client/watched/processors/OnChangeQueryProcessor.js.map +1 -1
- package/lib/client/watched/processors/comparators.d.ts +8 -0
- package/lib/client/watched/processors/comparators.js +4 -0
- package/lib/client/watched/processors/comparators.js.map +1 -1
- package/lib/db/DBAdapter.d.ts +90 -113
- package/lib/db/DBAdapter.js +70 -89
- package/lib/db/DBAdapter.js.map +1 -1
- package/lib/db/QueryResult.d.ts +104 -0
- package/lib/db/QueryResult.js +96 -0
- package/lib/db/QueryResult.js.map +1 -0
- package/lib/db/crud/SyncProgress.d.ts +7 -14
- package/lib/db/crud/SyncProgress.js +1 -60
- package/lib/db/crud/SyncProgress.js.map +1 -1
- package/lib/db/crud/SyncStatus.d.ts +54 -91
- package/lib/db/crud/SyncStatus.js +1 -245
- package/lib/db/crud/SyncStatus.js.map +1 -1
- package/lib/db/crud/UploadQueueStatus.d.ts +3 -0
- package/lib/db/crud/UploadQueueStatus.js +3 -0
- package/lib/db/crud/UploadQueueStatus.js.map +1 -1
- package/lib/db/schema/Column.d.ts +22 -1
- package/lib/db/schema/Column.js +10 -4
- package/lib/db/schema/Column.js.map +1 -1
- package/lib/db/schema/Index.d.ts +8 -3
- package/lib/db/schema/Index.js +4 -1
- package/lib/db/schema/Index.js.map +1 -1
- package/lib/db/schema/IndexedColumn.d.ts +8 -3
- package/lib/db/schema/IndexedColumn.js +4 -1
- package/lib/db/schema/IndexedColumn.js.map +1 -1
- package/lib/db/schema/RawTable.d.ts +7 -1
- package/lib/db/schema/Schema.d.ts +10 -29
- package/lib/db/schema/Schema.js +3 -1
- package/lib/db/schema/Schema.js.map +1 -1
- package/lib/db/schema/Table.d.ts +69 -91
- package/lib/db/schema/Table.js +88 -87
- package/lib/db/schema/Table.js.map +1 -1
- package/lib/index.d.ts +6 -22
- package/lib/index.js +5 -22
- package/lib/index.js.map +1 -1
- package/lib/types/types.d.ts +6 -0
- package/lib/utils/BaseObserver.d.ts +12 -0
- package/lib/utils/BaseObserver.js +3 -0
- package/lib/utils/BaseObserver.js.map +1 -1
- package/lib/utils/Logger.d.ts +60 -22
- package/lib/utils/Logger.js +38 -30
- package/lib/utils/Logger.js.map +1 -1
- package/lib/utils/MetaBaseObserver.d.ts +11 -11
- package/lib/utils/MetaBaseObserver.js +1 -50
- package/lib/utils/MetaBaseObserver.js.map +1 -1
- package/lib/utils/mutex.d.ts +3 -45
- package/lib/utils/mutex.js +1 -153
- package/lib/utils/mutex.js.map +1 -1
- package/package.json +9 -46
- package/src/attachments/AttachmentContext.ts +15 -13
- package/src/attachments/AttachmentErrorHandler.ts +6 -6
- package/src/attachments/AttachmentQueue.ts +99 -42
- package/src/attachments/AttachmentService.ts +7 -6
- package/src/attachments/LocalStorageAdapter.ts +14 -8
- package/src/attachments/README.md +2 -0
- package/src/attachments/RemoteStorageAdapter.ts +4 -4
- package/src/attachments/Schema.ts +14 -6
- package/src/attachments/SyncingService.ts +10 -6
- package/src/attachments/WatchedAttachmentItem.ts +3 -1
- package/src/client/CommonPowerSyncDatabase.ts +540 -0
- package/src/client/Query.ts +9 -0
- package/src/client/SQLOpenFactory.ts +47 -19
- package/src/client/compilableQueryWatch.ts +9 -4
- package/src/client/connection/PowerSyncBackendConnector.ts +6 -3
- package/src/client/connection/PowerSyncCredentials.ts +3 -0
- package/src/client/runOnSchemaChange.ts +5 -2
- package/src/client/sync/bucket/CrudBatch.ts +2 -0
- package/src/client/sync/bucket/CrudEntry.ts +10 -101
- package/src/client/sync/bucket/CrudTransaction.ts +3 -0
- package/src/client/sync/options.ts +77 -0
- package/src/client/sync/stream/JsonValue.ts +3 -0
- package/src/client/sync/sync-streams.ts +23 -10
- package/src/client/triggers/TriggerManager.ts +29 -59
- package/src/client/triggers/sanitizeSQL.ts +5 -0
- package/src/client/watched/GetAllQuery.ts +8 -4
- package/src/client/watched/WatchedQuery.ts +20 -11
- package/src/client/watched/processors/DifferentialQueryProcessor.ts +19 -219
- package/src/client/watched/processors/OnChangeQueryProcessor.ts +4 -109
- package/src/client/watched/processors/comparators.ts +8 -0
- package/src/db/DBAdapter.ts +160 -175
- package/src/db/QueryResult.ts +195 -0
- package/src/db/crud/SyncProgress.ts +8 -43
- package/src/db/crud/SyncStatus.ts +66 -216
- package/src/db/crud/UploadQueueStatus.ts +3 -0
- package/src/db/schema/Column.ts +22 -5
- package/src/db/schema/Index.ts +9 -3
- package/src/db/schema/IndexedColumn.ts +9 -3
- package/src/db/schema/RawTable.ts +7 -1
- package/src/db/schema/Schema.ts +12 -7
- package/src/db/schema/Table.ts +130 -180
- package/src/index.ts +6 -22
- package/src/types/types.ts +6 -0
- package/src/utils/BaseObserver.ts +12 -0
- package/src/utils/Logger.ts +86 -31
- package/src/utils/MetaBaseObserver.ts +14 -60
- package/src/utils/mutex.ts +4 -189
- package/dist/bundle.cjs +0 -14136
- package/dist/bundle.cjs.map +0 -1
- package/dist/bundle.mjs +0 -14056
- package/dist/bundle.mjs.map +0 -1
- package/dist/bundle.node.cjs +0 -11613
- package/dist/bundle.node.cjs.map +0 -1
- package/dist/bundle.node.mjs +0 -11533
- package/dist/bundle.node.mjs.map +0 -1
- package/dist/index.d.cts +0 -4052
- package/legacy/sync_protocol.d.ts +0 -103
- package/lib/client/AbstractPowerSyncDatabase.js +0 -987
- package/lib/client/AbstractPowerSyncDatabase.js.map +0 -1
- package/lib/client/AbstractPowerSyncOpenFactory.d.ts +0 -22
- package/lib/client/AbstractPowerSyncOpenFactory.js +0 -25
- package/lib/client/AbstractPowerSyncOpenFactory.js.map +0 -1
- package/lib/client/ConnectionManager.d.ts +0 -112
- package/lib/client/ConnectionManager.js +0 -294
- package/lib/client/ConnectionManager.js.map +0 -1
- package/lib/client/CustomQuery.d.ts +0 -22
- package/lib/client/CustomQuery.js +0 -43
- package/lib/client/CustomQuery.js.map +0 -1
- package/lib/client/constants.d.ts +0 -1
- package/lib/client/constants.js +0 -2
- package/lib/client/constants.js.map +0 -1
- package/lib/client/sync/bucket/BucketStorageAdapter.d.ts +0 -40
- package/lib/client/sync/bucket/BucketStorageAdapter.js +0 -19
- package/lib/client/sync/bucket/BucketStorageAdapter.js.map +0 -1
- package/lib/client/sync/bucket/SqliteBucketStorage.d.ts +0 -34
- package/lib/client/sync/bucket/SqliteBucketStorage.js +0 -162
- package/lib/client/sync/bucket/SqliteBucketStorage.js.map +0 -1
- package/lib/client/sync/stream/AbstractRemote.d.ts +0 -151
- package/lib/client/sync/stream/AbstractRemote.js +0 -473
- package/lib/client/sync/stream/AbstractRemote.js.map +0 -1
- package/lib/client/sync/stream/AbstractStreamingSyncImplementation.d.ts +0 -218
- package/lib/client/sync/stream/AbstractStreamingSyncImplementation.js +0 -663
- package/lib/client/sync/stream/AbstractStreamingSyncImplementation.js.map +0 -1
- package/lib/client/sync/stream/WebsocketClientTransport.d.ts +0 -15
- package/lib/client/sync/stream/WebsocketClientTransport.js +0 -61
- package/lib/client/sync/stream/WebsocketClientTransport.js.map +0 -1
- package/lib/client/sync/stream/core-instruction.d.ts +0 -71
- package/lib/client/sync/stream/core-instruction.js +0 -27
- package/lib/client/sync/stream/core-instruction.js.map +0 -1
- package/lib/client/triggers/MemoryTriggerClaimManager.d.ts +0 -6
- package/lib/client/triggers/MemoryTriggerClaimManager.js +0 -21
- package/lib/client/triggers/MemoryTriggerClaimManager.js.map +0 -1
- package/lib/client/triggers/TriggerManagerImpl.d.ts +0 -39
- package/lib/client/triggers/TriggerManagerImpl.js +0 -405
- package/lib/client/triggers/TriggerManagerImpl.js.map +0 -1
- package/lib/client/watched/processors/AbstractQueryProcessor.d.ts +0 -68
- package/lib/client/watched/processors/AbstractQueryProcessor.js +0 -151
- package/lib/client/watched/processors/AbstractQueryProcessor.js.map +0 -1
- package/lib/db/ConnectionClosedError.d.ts +0 -10
- package/lib/db/ConnectionClosedError.js +0 -21
- package/lib/db/ConnectionClosedError.js.map +0 -1
- package/lib/db/schema/TableV2.d.ts +0 -9
- package/lib/db/schema/TableV2.js +0 -9
- package/lib/db/schema/TableV2.js.map +0 -1
- package/lib/utils/AbortOperation.d.ts +0 -9
- package/lib/utils/AbortOperation.js +0 -19
- package/lib/utils/AbortOperation.js.map +0 -1
- package/lib/utils/ControlledExecutor.d.ts +0 -25
- package/lib/utils/ControlledExecutor.js +0 -51
- package/lib/utils/ControlledExecutor.js.map +0 -1
- package/lib/utils/async.d.ts +0 -14
- package/lib/utils/async.js +0 -46
- package/lib/utils/async.js.map +0 -1
- package/lib/utils/parseQuery.d.ts +0 -6
- package/lib/utils/parseQuery.js +0 -17
- package/lib/utils/parseQuery.js.map +0 -1
- package/lib/utils/queue.d.ts +0 -16
- package/lib/utils/queue.js +0 -42
- package/lib/utils/queue.js.map +0 -1
- package/lib/utils/stream_transform.d.ts +0 -39
- package/lib/utils/stream_transform.js +0 -206
- package/lib/utils/stream_transform.js.map +0 -1
- package/src/client/AbstractPowerSyncDatabase.ts +0 -1362
- package/src/client/AbstractPowerSyncOpenFactory.ts +0 -39
- package/src/client/ConnectionManager.ts +0 -402
- package/src/client/CustomQuery.ts +0 -56
- package/src/client/constants.ts +0 -1
- package/src/client/sync/bucket/BucketStorageAdapter.ts +0 -49
- package/src/client/sync/bucket/SqliteBucketStorage.ts +0 -199
- package/src/client/sync/stream/AbstractRemote.ts +0 -602
- package/src/client/sync/stream/AbstractStreamingSyncImplementation.ts +0 -905
- package/src/client/sync/stream/WebsocketClientTransport.ts +0 -80
- package/src/client/sync/stream/core-instruction.ts +0 -98
- package/src/client/triggers/MemoryTriggerClaimManager.ts +0 -25
- package/src/client/triggers/TriggerManagerImpl.ts +0 -496
- package/src/client/watched/processors/AbstractQueryProcessor.ts +0 -226
- package/src/db/ConnectionClosedError.ts +0 -23
- package/src/db/schema/TableV2.ts +0 -9
- package/src/utils/AbortOperation.ts +0 -17
- package/src/utils/ControlledExecutor.ts +0 -72
- package/src/utils/async.ts +0 -50
- package/src/utils/parseQuery.ts +0 -25
- package/src/utils/queue.ts +0 -48
- package/src/utils/stream_transform.ts +0 -252
package/lib/index.js
CHANGED
|
@@ -1,57 +1,40 @@
|
|
|
1
1
|
export * from './attachments/AttachmentContext.js';
|
|
2
2
|
export * from './attachments/AttachmentErrorHandler.js';
|
|
3
3
|
export * from './attachments/AttachmentQueue.js';
|
|
4
|
-
export * from './attachments/AttachmentService.js';
|
|
5
4
|
export * from './attachments/LocalStorageAdapter.js';
|
|
6
5
|
export * from './attachments/RemoteStorageAdapter.js';
|
|
7
6
|
export * from './attachments/Schema.js';
|
|
8
|
-
export * from './attachments/SyncingService.js';
|
|
9
7
|
export * from './attachments/WatchedAttachmentItem.js';
|
|
10
|
-
export * from './client/
|
|
11
|
-
export * from './client/AbstractPowerSyncOpenFactory.js';
|
|
8
|
+
export * from './client/CommonPowerSyncDatabase.js';
|
|
12
9
|
export { compilableQueryWatch } from './client/compilableQueryWatch.js';
|
|
13
10
|
export * from './client/connection/PowerSyncBackendConnector.js';
|
|
14
11
|
export * from './client/connection/PowerSyncCredentials.js';
|
|
15
|
-
export { MAX_OP_ID } from './client/constants.js';
|
|
16
|
-
export { runOnSchemaChange } from './client/runOnSchemaChange.js';
|
|
17
12
|
export * from './client/SQLOpenFactory.js';
|
|
18
|
-
export * from './client/sync/bucket/BucketStorageAdapter.js';
|
|
19
13
|
export * from './client/sync/bucket/CrudBatch.js';
|
|
20
|
-
export {
|
|
14
|
+
export { UpdateType } from './client/sync/bucket/CrudEntry.js';
|
|
21
15
|
export * from './client/sync/bucket/CrudTransaction.js';
|
|
22
|
-
export * from './client/sync/bucket/SqliteBucketStorage.js';
|
|
23
|
-
export * from './client/sync/stream/AbstractRemote.js';
|
|
24
|
-
export * from './client/sync/stream/AbstractStreamingSyncImplementation.js';
|
|
25
16
|
export * from './client/sync/stream/JsonValue.js';
|
|
26
17
|
export * from './client/sync/sync-streams.js';
|
|
27
|
-
export
|
|
28
|
-
export * from './db/ConnectionClosedError.js';
|
|
29
|
-
export { SyncProgress } from './db/crud/SyncProgress.js';
|
|
18
|
+
export { SyncStreamConnectionMethod, FetchStrategy } from './client/sync/options.js';
|
|
30
19
|
export * from './db/crud/SyncStatus.js';
|
|
31
20
|
export * from './db/crud/UploadQueueStatus.js';
|
|
32
21
|
export * from './db/DBAdapter.js';
|
|
22
|
+
export * from './db/QueryResult.js';
|
|
33
23
|
export * from './db/schema/Column.js';
|
|
34
24
|
export * from './db/schema/Index.js';
|
|
35
25
|
export * from './db/schema/IndexedColumn.js';
|
|
36
26
|
export * from './db/schema/Schema.js';
|
|
37
27
|
export * from './db/schema/Table.js';
|
|
38
|
-
export * from './db/schema/TableV2.js';
|
|
39
28
|
export * from './client/Query.js';
|
|
40
|
-
export { MEMORY_TRIGGER_CLAIM_MANAGER } from './client/triggers/MemoryTriggerClaimManager.js';
|
|
41
29
|
export * from './client/triggers/sanitizeSQL.js';
|
|
42
30
|
export * from './client/triggers/TriggerManager.js';
|
|
43
|
-
export { TriggerManagerImpl } from './client/triggers/TriggerManagerImpl.js';
|
|
44
31
|
export * from './client/watched/GetAllQuery.js';
|
|
45
|
-
export * from './client/watched/processors/AbstractQueryProcessor.js';
|
|
46
32
|
export * from './client/watched/processors/comparators.js';
|
|
47
33
|
export * from './client/watched/processors/DifferentialQueryProcessor.js';
|
|
48
34
|
export * from './client/watched/processors/OnChangeQueryProcessor.js';
|
|
49
35
|
export * from './client/watched/WatchedQuery.js';
|
|
50
|
-
export * from './utils/AbortOperation.js';
|
|
51
36
|
export * from './utils/BaseObserver.js';
|
|
52
|
-
export * from './utils/
|
|
37
|
+
export * from './utils/MetaBaseObserver.js';
|
|
53
38
|
export * from './utils/Logger.js';
|
|
54
|
-
export * from './utils/mutex.js';
|
|
55
|
-
export * from './utils/parseQuery.js';
|
|
56
39
|
export * from './types/types.js';
|
|
57
40
|
//# sourceMappingURL=index.js.map
|
package/lib/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,oCAAoC,CAAC;AACnD,cAAc,yCAAyC,CAAC;AACxD,cAAc,kCAAkC,CAAC;AACjD,cAAc,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,oCAAoC,CAAC;AACnD,cAAc,yCAAyC,CAAC;AACxD,cAAc,kCAAkC,CAAC;AACjD,cAAc,sCAAsC,CAAC;AACrD,cAAc,uCAAuC,CAAC;AACtD,cAAc,yBAAyB,CAAC;AACxC,cAAc,wCAAwC,CAAC;AAEvD,cAAc,qCAAqC,CAAC;AACpD,OAAO,EAAE,oBAAoB,EAA+B,MAAM,kCAAkC,CAAC;AACrG,cAAc,kDAAkD,CAAC;AACjE,cAAc,6CAA6C,CAAC;AAC5D,cAAc,4BAA4B,CAAC;AAC3C,cAAc,mCAAmC,CAAC;AAClD,OAAO,EAAmB,UAAU,EAAE,MAAM,mCAAmC,CAAC;AAChF,cAAc,yCAAyC,CAAC;AACxD,cAAc,mCAAmC,CAAC;AAClD,cAAc,+BAA+B,CAAC;AAC9C,OAAO,EAAe,0BAA0B,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAGlG,cAAc,yBAAyB,CAAC;AACxC,cAAc,gCAAgC,CAAC;AAC/C,cAAc,mBAAmB,CAAC;AAClC,cAAc,qBAAqB,CAAC;AACpC,cAAc,uBAAuB,CAAC;AACtC,cAAc,sBAAsB,CAAC;AACrC,cAAc,8BAA8B,CAAC;AAE7C,cAAc,uBAAuB,CAAC;AACtC,cAAc,sBAAsB,CAAC;AAErC,cAAc,mBAAmB,CAAC;AAClC,cAAc,kCAAkC,CAAC;AACjD,cAAc,qCAAqC,CAAC;AACpD,cAAc,iCAAiC,CAAC;AAChD,cAAc,4CAA4C,CAAC;AAC3D,cAAc,2DAA2D,CAAC;AAC1E,cAAc,uDAAuD,CAAC;AACtE,cAAc,kCAAkC,CAAC;AAGjD,cAAc,yBAAyB,CAAC;AACxC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,mBAAmB,CAAC;AAElC,cAAc,kBAAkB,CAAC"}
|
package/lib/types/types.d.ts
CHANGED
|
@@ -1,10 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @public
|
|
3
|
+
*/
|
|
1
4
|
export interface Disposable {
|
|
2
5
|
dispose: () => Promise<void> | void;
|
|
3
6
|
}
|
|
7
|
+
/**
|
|
8
|
+
* @public
|
|
9
|
+
*/
|
|
4
10
|
export type BaseListener = Record<string, ((...event: any) => any) | undefined>;
|
|
11
|
+
/**
|
|
12
|
+
* @public
|
|
13
|
+
*/
|
|
5
14
|
export interface BaseObserverInterface<T extends BaseListener> {
|
|
6
15
|
registerListener(listener: Partial<T>): () => void;
|
|
7
16
|
}
|
|
17
|
+
/**
|
|
18
|
+
* @public
|
|
19
|
+
*/
|
|
8
20
|
export declare class BaseObserver<T extends BaseListener = BaseListener> implements BaseObserverInterface<T> {
|
|
9
21
|
protected listeners: Set<Partial<T>>;
|
|
10
22
|
constructor();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BaseObserver.js","sourceRoot":"","sources":["../../src/utils/BaseObserver.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"BaseObserver.js","sourceRoot":"","sources":["../../src/utils/BaseObserver.ts"],"names":[],"mappings":"AAmBA;;GAEG;AACH,MAAM,OAAO,YAAY;IACb,SAAS,GAAG,IAAI,GAAG,EAAc,CAAC;IAE5C,gBAAe,CAAC;IAEhB,OAAO;QACL,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC;IACzB,CAAC;IAED;;OAEG;IACH,gBAAgB,CAAC,QAAoB;QACnC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAC7B,OAAO,GAAG,EAAE;YACV,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QAClC,CAAC,CAAC;IACJ,CAAC;IAED,gBAAgB,CAAC,EAAiC;QAChD,KAAK,MAAM,QAAQ,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YACtC,EAAE,CAAC,QAAQ,CAAC,CAAC;QACf,CAAC;IACH,CAAC;IAED,KAAK,CAAC,qBAAqB,CAAC,EAA0C;QACpE,KAAK,IAAI,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC;YAClD,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC;QACd,CAAC;IACH,CAAC;CACF"}
|
package/lib/utils/Logger.d.ts
CHANGED
|
@@ -1,31 +1,69 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
OFF: Logger.ILogLevel;
|
|
1
|
+
/**
|
|
2
|
+
* @public
|
|
3
|
+
*/
|
|
4
|
+
export declare const LogLevels: {
|
|
5
|
+
readonly trace: 10;
|
|
6
|
+
readonly debug: 20;
|
|
7
|
+
readonly info: 30;
|
|
8
|
+
readonly warn: 40;
|
|
9
|
+
readonly error: 50;
|
|
11
10
|
};
|
|
12
|
-
|
|
13
|
-
|
|
11
|
+
/**
|
|
12
|
+
* A log record passed to a {@link PowerSyncLogger}.
|
|
13
|
+
*
|
|
14
|
+
* @public
|
|
15
|
+
*/
|
|
16
|
+
export interface LogRecord {
|
|
17
|
+
/**
|
|
18
|
+
* The log level (see {@link LogLevels} for preconfigured values) for the message. Depending on how a receiving logger
|
|
19
|
+
* has been configured, messages below a configured minimum level may be ignored.
|
|
20
|
+
*/
|
|
21
|
+
level: number;
|
|
22
|
+
/**
|
|
23
|
+
* The main message to log.
|
|
24
|
+
*/
|
|
25
|
+
message: string;
|
|
26
|
+
/**
|
|
27
|
+
* When the log message contains an error, the error causing the log.
|
|
28
|
+
*
|
|
29
|
+
* This is not guaranteed to be an `Error` instance. On the web, we might have to serialize objects across message
|
|
30
|
+
* channels and represent them as a string.
|
|
31
|
+
*/
|
|
32
|
+
error?: unknown;
|
|
14
33
|
}
|
|
15
34
|
/**
|
|
16
|
-
*
|
|
35
|
+
* A logger used by the PowerSync SDK.
|
|
17
36
|
*
|
|
18
|
-
* This
|
|
19
|
-
*
|
|
20
|
-
*
|
|
37
|
+
* This is deliberately a very simple interface, and it's not a designed to be a general-purpose logger you would use in
|
|
38
|
+
* your application. Instead, you can provide an implementation of this to PowerSync to make it use your preferred
|
|
39
|
+
* logging libraries.
|
|
21
40
|
*
|
|
41
|
+
* By default, the SDK uses a {@link createConsoleLogger} instance forwarding messages to `console.log`.
|
|
42
|
+
*
|
|
43
|
+
* @public
|
|
44
|
+
*/
|
|
45
|
+
export interface PowerSyncLogger {
|
|
46
|
+
log(record: LogRecord): void;
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* @public
|
|
22
50
|
*/
|
|
23
|
-
export
|
|
51
|
+
export interface CreateLoggerOptions {
|
|
52
|
+
/**
|
|
53
|
+
* A prefix for messages emitted by {@link createConsoleLogger} to make them more recognizable.
|
|
54
|
+
*
|
|
55
|
+
* Defaults to `'PowerSync'`.
|
|
56
|
+
*/
|
|
57
|
+
prefix: string;
|
|
58
|
+
/**
|
|
59
|
+
* The minimum log level to consider for messages. Defaults to {@link LogLevels.info}.
|
|
60
|
+
*/
|
|
61
|
+
minLevel: number;
|
|
62
|
+
}
|
|
24
63
|
/**
|
|
25
|
-
*
|
|
64
|
+
* A very simple {@link PowerSyncLogger} implementation forwarding messages to `console.log`.
|
|
26
65
|
*
|
|
27
|
-
*
|
|
28
|
-
*
|
|
29
|
-
* from the base logger by default but can override settings independently.
|
|
66
|
+
* @param options - Options to configure a minimum severity of the logger or a prefix to make messages more recognizable.
|
|
67
|
+
* @public
|
|
30
68
|
*/
|
|
31
|
-
export declare function
|
|
69
|
+
export declare function createConsoleLogger(options?: Partial<CreateLoggerOptions>): PowerSyncLogger & CreateLoggerOptions;
|
package/lib/utils/Logger.js
CHANGED
|
@@ -1,37 +1,45 @@
|
|
|
1
|
-
import Logger from 'js-logger';
|
|
2
|
-
const TypedLogger = Logger;
|
|
3
|
-
export const LogLevel = {
|
|
4
|
-
TRACE: TypedLogger.TRACE,
|
|
5
|
-
DEBUG: TypedLogger.DEBUG,
|
|
6
|
-
INFO: TypedLogger.INFO,
|
|
7
|
-
TIME: TypedLogger.TIME,
|
|
8
|
-
WARN: TypedLogger.WARN,
|
|
9
|
-
ERROR: TypedLogger.ERROR,
|
|
10
|
-
OFF: TypedLogger.OFF
|
|
11
|
-
};
|
|
12
1
|
/**
|
|
13
|
-
*
|
|
14
|
-
*
|
|
15
|
-
* This base logger controls the default logging configuration and is shared
|
|
16
|
-
* across all loggers created with `createLogger`. Adjusting settings on this
|
|
17
|
-
* base logger affects all loggers derived from it unless explicitly overridden.
|
|
18
|
-
*
|
|
2
|
+
* @public
|
|
19
3
|
*/
|
|
20
|
-
export
|
|
21
|
-
|
|
22
|
-
|
|
4
|
+
export const LogLevels = {
|
|
5
|
+
trace: 10,
|
|
6
|
+
debug: 20,
|
|
7
|
+
info: 30,
|
|
8
|
+
warn: 40,
|
|
9
|
+
error: 50
|
|
10
|
+
};
|
|
23
11
|
/**
|
|
24
|
-
*
|
|
12
|
+
* A very simple {@link PowerSyncLogger} implementation forwarding messages to `console.log`.
|
|
25
13
|
*
|
|
26
|
-
*
|
|
27
|
-
*
|
|
28
|
-
* from the base logger by default but can override settings independently.
|
|
14
|
+
* @param options - Options to configure a minimum severity of the logger or a prefix to make messages more recognizable.
|
|
15
|
+
* @public
|
|
29
16
|
*/
|
|
30
|
-
export function
|
|
31
|
-
const
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
17
|
+
export function createConsoleLogger(options) {
|
|
18
|
+
const { prefix = 'PowerSync', minLevel = LogLevels.info } = options ?? {};
|
|
19
|
+
return {
|
|
20
|
+
prefix,
|
|
21
|
+
minLevel,
|
|
22
|
+
log({ level, message, error }) {
|
|
23
|
+
if (level < this.minLevel)
|
|
24
|
+
return;
|
|
25
|
+
let emitter = console.log;
|
|
26
|
+
if (level >= LogLevels.error) {
|
|
27
|
+
emitter = console.error;
|
|
28
|
+
}
|
|
29
|
+
else if (level >= LogLevels.warn) {
|
|
30
|
+
emitter = console.warn;
|
|
31
|
+
}
|
|
32
|
+
else if (level >= LogLevels.info) {
|
|
33
|
+
emitter = console.info;
|
|
34
|
+
}
|
|
35
|
+
const messageWithPrefix = `[${prefix}]: ${message}`;
|
|
36
|
+
if (error) {
|
|
37
|
+
emitter(messageWithPrefix, error);
|
|
38
|
+
}
|
|
39
|
+
else {
|
|
40
|
+
emitter(messageWithPrefix);
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
};
|
|
36
44
|
}
|
|
37
45
|
//# sourceMappingURL=Logger.js.map
|
package/lib/utils/Logger.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Logger.js","sourceRoot":"","sources":["../../src/utils/Logger.ts"],"names":[],"mappings":"AAAA,
|
|
1
|
+
{"version":3,"file":"Logger.js","sourceRoot":"","sources":["../../src/utils/Logger.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,CAAC,MAAM,SAAS,GAAG;IACvB,KAAK,EAAE,EAAE;IACT,KAAK,EAAE,EAAE;IACT,IAAI,EAAE,EAAE;IACR,IAAI,EAAE,EAAE;IACR,KAAK,EAAE,EAAE;CACD,CAAC;AA4DX;;;;;GAKG;AACH,MAAM,UAAU,mBAAmB,CAAC,OAAsC;IACxE,MAAM,EAAE,MAAM,GAAG,WAAW,EAAE,QAAQ,GAAG,SAAS,CAAC,IAAI,EAAE,GAAG,OAAO,IAAI,EAAE,CAAC;IAE1E,OAAO;QACL,MAAM;QACN,QAAQ;QACR,GAAG,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE;YAC3B,IAAI,KAAK,GAAG,IAAI,CAAC,QAAQ;gBAAE,OAAO;YAElC,IAAI,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC;YAC1B,IAAI,KAAK,IAAI,SAAS,CAAC,KAAK,EAAE,CAAC;gBAC7B,OAAO,GAAG,OAAO,CAAC,KAAK,CAAC;YAC1B,CAAC;iBAAM,IAAI,KAAK,IAAI,SAAS,CAAC,IAAI,EAAE,CAAC;gBACnC,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;YACzB,CAAC;iBAAM,IAAI,KAAK,IAAI,SAAS,CAAC,IAAI,EAAE,CAAC;gBACnC,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;YACzB,CAAC;YAED,MAAM,iBAAiB,GAAG,IAAI,MAAM,MAAM,OAAO,EAAE,CAAC;YACpD,IAAI,KAAK,EAAE,CAAC;gBACV,OAAO,CAAC,iBAAiB,EAAE,KAAK,CAAC,CAAC;YACpC,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,iBAAiB,CAAC,CAAC;YAC7B,CAAC;QACH,CAAC;KACF,CAAC;AACJ,CAAC"}
|
|
@@ -1,29 +1,29 @@
|
|
|
1
|
-
import { BaseListener,
|
|
1
|
+
import { BaseListener, BaseObserverInterface } from './BaseObserver.js';
|
|
2
2
|
/**
|
|
3
3
|
* Represents the counts of listeners for each event type in a BaseListener.
|
|
4
|
+
*
|
|
5
|
+
* @public
|
|
4
6
|
*/
|
|
5
7
|
export type ListenerCounts<Listener extends BaseListener> = Partial<Record<keyof Listener, number>> & {
|
|
6
8
|
total: number;
|
|
7
9
|
};
|
|
8
10
|
/**
|
|
9
11
|
* Meta listener which reports the counts of listeners for each event type.
|
|
12
|
+
*
|
|
13
|
+
* @public
|
|
10
14
|
*/
|
|
11
15
|
export interface MetaListener<ParentListener extends BaseListener> extends BaseListener {
|
|
12
16
|
listenersChanged?: (counts: ListenerCounts<ParentListener>) => void;
|
|
13
17
|
}
|
|
18
|
+
/**
|
|
19
|
+
* @public
|
|
20
|
+
*/
|
|
14
21
|
export interface ListenerMetaManager<Listener extends BaseListener> extends BaseObserverInterface<MetaListener<Listener>> {
|
|
15
22
|
counts: ListenerCounts<Listener>;
|
|
16
23
|
}
|
|
17
|
-
export interface MetaBaseObserverInterface<Listener extends BaseListener> extends BaseObserverInterface<Listener> {
|
|
18
|
-
listenerMeta: ListenerMetaManager<Listener>;
|
|
19
|
-
}
|
|
20
24
|
/**
|
|
21
|
-
*
|
|
25
|
+
* @public
|
|
22
26
|
*/
|
|
23
|
-
export
|
|
24
|
-
|
|
25
|
-
get listenerMeta(): ListenerMetaManager<Listener>;
|
|
26
|
-
protected metaListener: BaseObserver<MetaListener<Listener>>;
|
|
27
|
-
constructor();
|
|
28
|
-
registerListener(listener: Partial<Listener>): () => void;
|
|
27
|
+
export interface MetaBaseObserverInterface<Listener extends BaseListener> extends BaseObserverInterface<Listener> {
|
|
28
|
+
listenerMeta: ListenerMetaManager<Listener>;
|
|
29
29
|
}
|
|
@@ -1,51 +1,2 @@
|
|
|
1
|
-
|
|
2
|
-
/**
|
|
3
|
-
* A BaseObserver that tracks the counts of listeners for each event type.
|
|
4
|
-
*/
|
|
5
|
-
export class MetaBaseObserver extends BaseObserver {
|
|
6
|
-
get listenerCounts() {
|
|
7
|
-
const counts = {};
|
|
8
|
-
let total = 0;
|
|
9
|
-
for (const listener of this.listeners) {
|
|
10
|
-
for (const key in listener) {
|
|
11
|
-
if (listener[key]) {
|
|
12
|
-
counts[key] = (counts[key] ?? 0) + 1;
|
|
13
|
-
total++;
|
|
14
|
-
}
|
|
15
|
-
}
|
|
16
|
-
}
|
|
17
|
-
return {
|
|
18
|
-
...counts,
|
|
19
|
-
total
|
|
20
|
-
};
|
|
21
|
-
}
|
|
22
|
-
get listenerMeta() {
|
|
23
|
-
return {
|
|
24
|
-
counts: this.listenerCounts,
|
|
25
|
-
// Allows registering a meta listener that will be notified of changes in listener counts
|
|
26
|
-
registerListener: (listener) => {
|
|
27
|
-
return this.metaListener.registerListener(listener);
|
|
28
|
-
}
|
|
29
|
-
};
|
|
30
|
-
}
|
|
31
|
-
metaListener;
|
|
32
|
-
constructor() {
|
|
33
|
-
super();
|
|
34
|
-
this.metaListener = new BaseObserver();
|
|
35
|
-
}
|
|
36
|
-
registerListener(listener) {
|
|
37
|
-
const dispose = super.registerListener(listener);
|
|
38
|
-
const updatedCount = this.listenerCounts;
|
|
39
|
-
this.metaListener.iterateListeners((l) => {
|
|
40
|
-
l.listenersChanged?.(updatedCount);
|
|
41
|
-
});
|
|
42
|
-
return () => {
|
|
43
|
-
dispose();
|
|
44
|
-
const updatedCount = this.listenerCounts;
|
|
45
|
-
this.metaListener.iterateListeners((l) => {
|
|
46
|
-
l.listenersChanged?.(updatedCount);
|
|
47
|
-
});
|
|
48
|
-
};
|
|
49
|
-
}
|
|
50
|
-
}
|
|
1
|
+
export {};
|
|
51
2
|
//# sourceMappingURL=MetaBaseObserver.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MetaBaseObserver.js","sourceRoot":"","sources":["../../src/utils/MetaBaseObserver.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"MetaBaseObserver.js","sourceRoot":"","sources":["../../src/utils/MetaBaseObserver.ts"],"names":[],"mappings":""}
|
package/lib/utils/mutex.d.ts
CHANGED
|
@@ -1,49 +1,7 @@
|
|
|
1
|
-
export type UnlockFn = () => void;
|
|
2
1
|
/**
|
|
3
|
-
*
|
|
4
|
-
*
|
|
5
|
-
* @internal This class is meant to be used in PowerSync SDKs only, and is not part of the public API.
|
|
2
|
+
* @internal This is implemented in `@powersync/shared-internals`, but we need it in the attachment service
|
|
3
|
+
* implementation.
|
|
6
4
|
*/
|
|
7
|
-
export
|
|
8
|
-
private readonly available;
|
|
9
|
-
readonly size: number;
|
|
10
|
-
private firstWaiter?;
|
|
11
|
-
private lastWaiter?;
|
|
12
|
-
constructor(elements: Iterable<T>);
|
|
13
|
-
private addWaiter;
|
|
14
|
-
private deactivateWaiter;
|
|
15
|
-
private requestPermits;
|
|
16
|
-
/**
|
|
17
|
-
* Requests a single item from the pool.
|
|
18
|
-
*
|
|
19
|
-
* The returned `release` callback must be invoked to return the item into the pool.
|
|
20
|
-
*/
|
|
21
|
-
requestOne(abort?: AbortSignal): Promise<{
|
|
22
|
-
item: T;
|
|
23
|
-
release: UnlockFn;
|
|
24
|
-
}>;
|
|
25
|
-
/**
|
|
26
|
-
* Requests access to all items from the pool.
|
|
27
|
-
*
|
|
28
|
-
* The returned `release` callback must be invoked to return items into the pool.
|
|
29
|
-
*/
|
|
30
|
-
requestAll(abort?: AbortSignal): Promise<{
|
|
31
|
-
items: T[];
|
|
32
|
-
release: UnlockFn;
|
|
33
|
-
}>;
|
|
34
|
-
}
|
|
35
|
-
/**
|
|
36
|
-
* An asynchronous mutex implementation.
|
|
37
|
-
*
|
|
38
|
-
* @internal This class is meant to be used in PowerSync SDKs only, and is not part of the public API.
|
|
39
|
-
*/
|
|
40
|
-
export declare class Mutex {
|
|
41
|
-
private inner;
|
|
42
|
-
acquire(abort?: AbortSignal): Promise<UnlockFn>;
|
|
5
|
+
export interface Mutex {
|
|
43
6
|
runExclusive<T>(fn: () => PromiseLike<T> | T, abort?: AbortSignal): Promise<T>;
|
|
44
7
|
}
|
|
45
|
-
/**
|
|
46
|
-
* Creates a signal aborting after the set timeout.
|
|
47
|
-
*/
|
|
48
|
-
export declare function timeoutSignal(timeout: number): AbortSignal;
|
|
49
|
-
export declare function timeoutSignal(timeout?: number): AbortSignal | undefined;
|
package/lib/utils/mutex.js
CHANGED
|
@@ -1,154 +1,2 @@
|
|
|
1
|
-
|
|
2
|
-
/**
|
|
3
|
-
* An asynchronous semaphore implementation with associated items per lease.
|
|
4
|
-
*
|
|
5
|
-
* @internal This class is meant to be used in PowerSync SDKs only, and is not part of the public API.
|
|
6
|
-
*/
|
|
7
|
-
export class Semaphore {
|
|
8
|
-
// Available items that are not currently assigned to a waiter.
|
|
9
|
-
available;
|
|
10
|
-
size;
|
|
11
|
-
// Linked list of waiters. We don't expect the wait list to become particularly large, and this allows removing
|
|
12
|
-
// aborted waiters from the middle of the list efficiently.
|
|
13
|
-
firstWaiter;
|
|
14
|
-
lastWaiter;
|
|
15
|
-
constructor(elements) {
|
|
16
|
-
this.available = new Queue(elements);
|
|
17
|
-
this.size = this.available.length;
|
|
18
|
-
}
|
|
19
|
-
addWaiter(requestedItems, onAcquire) {
|
|
20
|
-
const node = {
|
|
21
|
-
isActive: true,
|
|
22
|
-
acquiredItems: [],
|
|
23
|
-
remainingItems: requestedItems,
|
|
24
|
-
onAcquire,
|
|
25
|
-
prev: this.lastWaiter
|
|
26
|
-
};
|
|
27
|
-
if (this.lastWaiter) {
|
|
28
|
-
this.lastWaiter.next = node;
|
|
29
|
-
this.lastWaiter = node;
|
|
30
|
-
}
|
|
31
|
-
else {
|
|
32
|
-
// First waiter
|
|
33
|
-
this.lastWaiter = this.firstWaiter = node;
|
|
34
|
-
}
|
|
35
|
-
return node;
|
|
36
|
-
}
|
|
37
|
-
deactivateWaiter(waiter) {
|
|
38
|
-
const { prev, next } = waiter;
|
|
39
|
-
waiter.isActive = false;
|
|
40
|
-
if (prev)
|
|
41
|
-
prev.next = next;
|
|
42
|
-
if (next)
|
|
43
|
-
next.prev = prev;
|
|
44
|
-
if (waiter == this.firstWaiter)
|
|
45
|
-
this.firstWaiter = next;
|
|
46
|
-
if (waiter == this.lastWaiter)
|
|
47
|
-
this.lastWaiter = prev;
|
|
48
|
-
}
|
|
49
|
-
requestPermits(amount, abort) {
|
|
50
|
-
if (amount <= 0 || amount > this.size) {
|
|
51
|
-
throw new Error(`Invalid amount of items requested (${amount}), must be between 1 and ${this.size}`);
|
|
52
|
-
}
|
|
53
|
-
return new Promise((resolve, reject) => {
|
|
54
|
-
function rejectAborted() {
|
|
55
|
-
reject(abort?.reason ?? new Error('Semaphore acquire aborted'));
|
|
56
|
-
}
|
|
57
|
-
if (abort?.aborted) {
|
|
58
|
-
return rejectAborted();
|
|
59
|
-
}
|
|
60
|
-
let waiter;
|
|
61
|
-
const markCompleted = () => {
|
|
62
|
-
const items = waiter.acquiredItems;
|
|
63
|
-
waiter.acquiredItems = []; // Avoid releasing items twice.
|
|
64
|
-
for (const element of items) {
|
|
65
|
-
// Give to next waiter, if possible.
|
|
66
|
-
const nextWaiter = this.firstWaiter;
|
|
67
|
-
if (nextWaiter) {
|
|
68
|
-
nextWaiter.acquiredItems.push(element);
|
|
69
|
-
nextWaiter.remainingItems--;
|
|
70
|
-
if (nextWaiter.remainingItems == 0) {
|
|
71
|
-
nextWaiter.onAcquire();
|
|
72
|
-
}
|
|
73
|
-
}
|
|
74
|
-
else {
|
|
75
|
-
// No pending waiter, return lease into pool.
|
|
76
|
-
this.available.addLast(element);
|
|
77
|
-
}
|
|
78
|
-
}
|
|
79
|
-
};
|
|
80
|
-
const onAbort = () => {
|
|
81
|
-
abort?.removeEventListener('abort', onAbort);
|
|
82
|
-
if (waiter.isActive) {
|
|
83
|
-
this.deactivateWaiter(waiter);
|
|
84
|
-
rejectAborted();
|
|
85
|
-
}
|
|
86
|
-
};
|
|
87
|
-
const resolvePromise = () => {
|
|
88
|
-
this.deactivateWaiter(waiter);
|
|
89
|
-
abort?.removeEventListener('abort', onAbort);
|
|
90
|
-
const items = waiter.acquiredItems;
|
|
91
|
-
resolve({ items, release: markCompleted });
|
|
92
|
-
};
|
|
93
|
-
waiter = this.addWaiter(amount, resolvePromise);
|
|
94
|
-
// If there are items in the pool that haven't been assigned, we can pull them into this waiter. Note that this is
|
|
95
|
-
// only the case if we're the first waiter (otherwise, items would have been assigned to an earlier waiter).
|
|
96
|
-
while (!this.available.isEmpty && waiter.remainingItems > 0) {
|
|
97
|
-
waiter.acquiredItems.push(this.available.removeFirst());
|
|
98
|
-
waiter.remainingItems--;
|
|
99
|
-
}
|
|
100
|
-
if (waiter.remainingItems == 0) {
|
|
101
|
-
return resolvePromise();
|
|
102
|
-
}
|
|
103
|
-
abort?.addEventListener('abort', onAbort);
|
|
104
|
-
});
|
|
105
|
-
}
|
|
106
|
-
/**
|
|
107
|
-
* Requests a single item from the pool.
|
|
108
|
-
*
|
|
109
|
-
* The returned `release` callback must be invoked to return the item into the pool.
|
|
110
|
-
*/
|
|
111
|
-
async requestOne(abort) {
|
|
112
|
-
const { items, release } = await this.requestPermits(1, abort);
|
|
113
|
-
return { release, item: items[0] };
|
|
114
|
-
}
|
|
115
|
-
/**
|
|
116
|
-
* Requests access to all items from the pool.
|
|
117
|
-
*
|
|
118
|
-
* The returned `release` callback must be invoked to return items into the pool.
|
|
119
|
-
*/
|
|
120
|
-
requestAll(abort) {
|
|
121
|
-
return this.requestPermits(this.size, abort);
|
|
122
|
-
}
|
|
123
|
-
}
|
|
124
|
-
/**
|
|
125
|
-
* An asynchronous mutex implementation.
|
|
126
|
-
*
|
|
127
|
-
* @internal This class is meant to be used in PowerSync SDKs only, and is not part of the public API.
|
|
128
|
-
*/
|
|
129
|
-
export class Mutex {
|
|
130
|
-
inner = new Semaphore([null]);
|
|
131
|
-
async acquire(abort) {
|
|
132
|
-
const { release } = await this.inner.requestOne(abort);
|
|
133
|
-
return release;
|
|
134
|
-
}
|
|
135
|
-
async runExclusive(fn, abort) {
|
|
136
|
-
const returnMutex = await this.acquire(abort);
|
|
137
|
-
try {
|
|
138
|
-
return await fn();
|
|
139
|
-
}
|
|
140
|
-
finally {
|
|
141
|
-
returnMutex();
|
|
142
|
-
}
|
|
143
|
-
}
|
|
144
|
-
}
|
|
145
|
-
export function timeoutSignal(timeout) {
|
|
146
|
-
if (timeout == null)
|
|
147
|
-
return;
|
|
148
|
-
if ('timeout' in AbortSignal)
|
|
149
|
-
return AbortSignal.timeout(timeout);
|
|
150
|
-
const controller = new AbortController();
|
|
151
|
-
setTimeout(() => controller.abort(new Error('Timeout waiting for lock')), timeout);
|
|
152
|
-
return controller.signal;
|
|
153
|
-
}
|
|
1
|
+
export {};
|
|
154
2
|
//# sourceMappingURL=mutex.js.map
|
package/lib/utils/mutex.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mutex.js","sourceRoot":"","sources":["../../src/utils/mutex.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"mutex.js","sourceRoot":"","sources":["../../src/utils/mutex.ts"],"names":[],"mappings":""}
|