@powersync/common 0.0.0-dev-20250714144421 → 0.0.0-dev-20250715080712

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.
Files changed (36) hide show
  1. package/dist/bundle.cjs +5 -5
  2. package/dist/bundle.mjs +3 -3
  3. package/lib/client/AbstractPowerSyncDatabase.d.ts +59 -7
  4. package/lib/client/AbstractPowerSyncDatabase.js +105 -35
  5. package/lib/client/ConnectionManager.d.ts +4 -4
  6. package/lib/client/CustomQuery.d.ts +25 -0
  7. package/lib/client/CustomQuery.js +41 -0
  8. package/lib/client/Query.d.ts +79 -0
  9. package/lib/client/Query.js +1 -0
  10. package/lib/client/sync/bucket/BucketStorageAdapter.d.ts +2 -2
  11. package/lib/client/sync/bucket/SqliteBucketStorage.js +14 -14
  12. package/lib/client/sync/stream/AbstractStreamingSyncImplementation.d.ts +10 -4
  13. package/lib/client/sync/stream/AbstractStreamingSyncImplementation.js +26 -18
  14. package/lib/client/watched/GetAllQuery.d.ts +32 -0
  15. package/lib/client/watched/GetAllQuery.js +24 -0
  16. package/lib/client/watched/WatchedQuery.d.ts +93 -0
  17. package/lib/client/watched/WatchedQuery.js +12 -0
  18. package/lib/client/watched/processors/AbstractQueryProcessor.d.ts +67 -0
  19. package/lib/client/watched/processors/AbstractQueryProcessor.js +136 -0
  20. package/lib/client/watched/processors/DifferentialQueryProcessor.d.ts +129 -0
  21. package/lib/client/watched/processors/DifferentialQueryProcessor.js +175 -0
  22. package/lib/client/watched/processors/OnChangeQueryProcessor.d.ts +27 -0
  23. package/lib/client/watched/processors/OnChangeQueryProcessor.js +74 -0
  24. package/lib/client/watched/processors/comparators.d.ts +24 -0
  25. package/lib/client/watched/processors/comparators.js +33 -0
  26. package/lib/db/schema/RawTable.d.ts +57 -0
  27. package/lib/db/schema/RawTable.js +28 -0
  28. package/lib/db/schema/Schema.d.ts +14 -0
  29. package/lib/db/schema/Schema.js +20 -1
  30. package/lib/index.d.ts +7 -0
  31. package/lib/index.js +7 -0
  32. package/lib/utils/BaseObserver.d.ts +3 -4
  33. package/lib/utils/BaseObserver.js +3 -0
  34. package/lib/utils/MetaBaseObserver.d.ts +29 -0
  35. package/lib/utils/MetaBaseObserver.js +50 -0
  36. package/package.json +1 -1
@@ -1,15 +1,14 @@
1
1
  export interface Disposable {
2
- dispose: () => Promise<void>;
2
+ dispose: () => Promise<void> | void;
3
3
  }
4
+ export type BaseListener = Record<string, ((...event: any) => any) | undefined>;
4
5
  export interface BaseObserverInterface<T extends BaseListener> {
5
6
  registerListener(listener: Partial<T>): () => void;
6
7
  }
7
- export type BaseListener = {
8
- [key: string]: ((...event: any) => any) | undefined;
9
- };
10
8
  export declare class BaseObserver<T extends BaseListener = BaseListener> implements BaseObserverInterface<T> {
11
9
  protected listeners: Set<Partial<T>>;
12
10
  constructor();
11
+ dispose(): void;
13
12
  /**
14
13
  * Register a listener for updates to the PowerSync client.
15
14
  */
@@ -1,6 +1,9 @@
1
1
  export class BaseObserver {
2
2
  listeners = new Set();
3
3
  constructor() { }
4
+ dispose() {
5
+ this.listeners.clear();
6
+ }
4
7
  /**
5
8
  * Register a listener for updates to the PowerSync client.
6
9
  */
@@ -0,0 +1,29 @@
1
+ import { BaseListener, BaseObserver, BaseObserverInterface } from './BaseObserver.js';
2
+ /**
3
+ * Represents the counts of listeners for each event type in a BaseListener.
4
+ */
5
+ export type ListenerCounts<Listener extends BaseListener> = Partial<Record<keyof Listener, number>> & {
6
+ total: number;
7
+ };
8
+ /**
9
+ * Meta listener which reports the counts of listeners for each event type.
10
+ */
11
+ export interface MetaListener<ParentListener extends BaseListener> extends BaseListener {
12
+ listenersChanged?: (counts: ListenerCounts<ParentListener>) => void;
13
+ }
14
+ export interface ListenerMetaManager<Listener extends BaseListener> extends BaseObserverInterface<MetaListener<Listener>> {
15
+ counts: ListenerCounts<Listener>;
16
+ }
17
+ export interface MetaBaseObserverInterface<Listener extends BaseListener> extends BaseObserverInterface<Listener> {
18
+ listenerMeta: ListenerMetaManager<Listener>;
19
+ }
20
+ /**
21
+ * A BaseObserver that tracks the counts of listeners for each event type.
22
+ */
23
+ export declare class MetaBaseObserver<Listener extends BaseListener> extends BaseObserver<Listener> implements MetaBaseObserverInterface<Listener> {
24
+ protected get listenerCounts(): ListenerCounts<Listener>;
25
+ get listenerMeta(): ListenerMetaManager<Listener>;
26
+ protected metaListener: BaseObserver<MetaListener<Listener>>;
27
+ constructor();
28
+ registerListener(listener: Partial<Listener>): () => void;
29
+ }
@@ -0,0 +1,50 @@
1
+ import { BaseObserver } from './BaseObserver.js';
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
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@powersync/common",
3
- "version": "0.0.0-dev-20250714144421",
3
+ "version": "0.0.0-dev-20250715080712",
4
4
  "publishConfig": {
5
5
  "registry": "https://registry.npmjs.org/",
6
6
  "access": "public"