@syncular/client 0.0.1-60

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 (176) hide show
  1. package/dist/blobs/index.d.ts +7 -0
  2. package/dist/blobs/index.d.ts.map +1 -0
  3. package/dist/blobs/index.js +7 -0
  4. package/dist/blobs/index.js.map +1 -0
  5. package/dist/blobs/manager.d.ts +345 -0
  6. package/dist/blobs/manager.d.ts.map +1 -0
  7. package/dist/blobs/manager.js +749 -0
  8. package/dist/blobs/manager.js.map +1 -0
  9. package/dist/blobs/migrate.d.ts +14 -0
  10. package/dist/blobs/migrate.d.ts.map +1 -0
  11. package/dist/blobs/migrate.js +59 -0
  12. package/dist/blobs/migrate.js.map +1 -0
  13. package/dist/blobs/types.d.ts +62 -0
  14. package/dist/blobs/types.d.ts.map +1 -0
  15. package/dist/blobs/types.js +5 -0
  16. package/dist/blobs/types.js.map +1 -0
  17. package/dist/client.d.ts +338 -0
  18. package/dist/client.d.ts.map +1 -0
  19. package/dist/client.js +834 -0
  20. package/dist/client.js.map +1 -0
  21. package/dist/conflicts.d.ts +31 -0
  22. package/dist/conflicts.d.ts.map +1 -0
  23. package/dist/conflicts.js +118 -0
  24. package/dist/conflicts.js.map +1 -0
  25. package/dist/create-client.d.ts +115 -0
  26. package/dist/create-client.d.ts.map +1 -0
  27. package/dist/create-client.js +162 -0
  28. package/dist/create-client.js.map +1 -0
  29. package/dist/engine/SyncEngine.d.ts +215 -0
  30. package/dist/engine/SyncEngine.d.ts.map +1 -0
  31. package/dist/engine/SyncEngine.js +1066 -0
  32. package/dist/engine/SyncEngine.js.map +1 -0
  33. package/dist/engine/index.d.ts +6 -0
  34. package/dist/engine/index.d.ts.map +1 -0
  35. package/dist/engine/index.js +6 -0
  36. package/dist/engine/index.js.map +1 -0
  37. package/dist/engine/types.d.ts +230 -0
  38. package/dist/engine/types.d.ts.map +1 -0
  39. package/dist/engine/types.js +7 -0
  40. package/dist/engine/types.js.map +1 -0
  41. package/dist/handlers/create-handler.d.ts +110 -0
  42. package/dist/handlers/create-handler.d.ts.map +1 -0
  43. package/dist/handlers/create-handler.js +140 -0
  44. package/dist/handlers/create-handler.js.map +1 -0
  45. package/dist/handlers/registry.d.ts +15 -0
  46. package/dist/handlers/registry.d.ts.map +1 -0
  47. package/dist/handlers/registry.js +29 -0
  48. package/dist/handlers/registry.js.map +1 -0
  49. package/dist/handlers/types.d.ts +83 -0
  50. package/dist/handlers/types.d.ts.map +1 -0
  51. package/dist/handlers/types.js +5 -0
  52. package/dist/handlers/types.js.map +1 -0
  53. package/dist/index.d.ts +24 -0
  54. package/dist/index.d.ts.map +1 -0
  55. package/dist/index.js +24 -0
  56. package/dist/index.js.map +1 -0
  57. package/dist/migrate.d.ts +19 -0
  58. package/dist/migrate.d.ts.map +1 -0
  59. package/dist/migrate.js +106 -0
  60. package/dist/migrate.js.map +1 -0
  61. package/dist/mutations.d.ts +138 -0
  62. package/dist/mutations.d.ts.map +1 -0
  63. package/dist/mutations.js +611 -0
  64. package/dist/mutations.js.map +1 -0
  65. package/dist/outbox.d.ts +112 -0
  66. package/dist/outbox.d.ts.map +1 -0
  67. package/dist/outbox.js +304 -0
  68. package/dist/outbox.js.map +1 -0
  69. package/dist/plugins/incrementing-version.d.ts +34 -0
  70. package/dist/plugins/incrementing-version.d.ts.map +1 -0
  71. package/dist/plugins/incrementing-version.js +83 -0
  72. package/dist/plugins/incrementing-version.js.map +1 -0
  73. package/dist/plugins/index.d.ts +3 -0
  74. package/dist/plugins/index.d.ts.map +1 -0
  75. package/dist/plugins/index.js +3 -0
  76. package/dist/plugins/index.js.map +1 -0
  77. package/dist/plugins/types.d.ts +49 -0
  78. package/dist/plugins/types.d.ts.map +1 -0
  79. package/dist/plugins/types.js +15 -0
  80. package/dist/plugins/types.js.map +1 -0
  81. package/dist/proxy/connection.d.ts +33 -0
  82. package/dist/proxy/connection.d.ts.map +1 -0
  83. package/dist/proxy/connection.js +153 -0
  84. package/dist/proxy/connection.js.map +1 -0
  85. package/dist/proxy/dialect.d.ts +46 -0
  86. package/dist/proxy/dialect.d.ts.map +1 -0
  87. package/dist/proxy/dialect.js +58 -0
  88. package/dist/proxy/dialect.js.map +1 -0
  89. package/dist/proxy/driver.d.ts +42 -0
  90. package/dist/proxy/driver.d.ts.map +1 -0
  91. package/dist/proxy/driver.js +78 -0
  92. package/dist/proxy/driver.js.map +1 -0
  93. package/dist/proxy/index.d.ts +10 -0
  94. package/dist/proxy/index.d.ts.map +1 -0
  95. package/dist/proxy/index.js +10 -0
  96. package/dist/proxy/index.js.map +1 -0
  97. package/dist/proxy/mutations.d.ts +9 -0
  98. package/dist/proxy/mutations.d.ts.map +1 -0
  99. package/dist/proxy/mutations.js +11 -0
  100. package/dist/proxy/mutations.js.map +1 -0
  101. package/dist/pull-engine.d.ts +45 -0
  102. package/dist/pull-engine.d.ts.map +1 -0
  103. package/dist/pull-engine.js +391 -0
  104. package/dist/pull-engine.js.map +1 -0
  105. package/dist/push-engine.d.ts +18 -0
  106. package/dist/push-engine.d.ts.map +1 -0
  107. package/dist/push-engine.js +155 -0
  108. package/dist/push-engine.js.map +1 -0
  109. package/dist/query/FingerprintCollector.d.ts +18 -0
  110. package/dist/query/FingerprintCollector.d.ts.map +1 -0
  111. package/dist/query/FingerprintCollector.js +28 -0
  112. package/dist/query/FingerprintCollector.js.map +1 -0
  113. package/dist/query/QueryContext.d.ts +33 -0
  114. package/dist/query/QueryContext.d.ts.map +1 -0
  115. package/dist/query/QueryContext.js +16 -0
  116. package/dist/query/QueryContext.js.map +1 -0
  117. package/dist/query/fingerprint.d.ts +61 -0
  118. package/dist/query/fingerprint.d.ts.map +1 -0
  119. package/dist/query/fingerprint.js +91 -0
  120. package/dist/query/fingerprint.js.map +1 -0
  121. package/dist/query/index.d.ts +7 -0
  122. package/dist/query/index.d.ts.map +1 -0
  123. package/dist/query/index.js +7 -0
  124. package/dist/query/index.js.map +1 -0
  125. package/dist/query/tracked-select.d.ts +18 -0
  126. package/dist/query/tracked-select.d.ts.map +1 -0
  127. package/dist/query/tracked-select.js +90 -0
  128. package/dist/query/tracked-select.js.map +1 -0
  129. package/dist/schema.d.ts +83 -0
  130. package/dist/schema.d.ts.map +1 -0
  131. package/dist/schema.js +7 -0
  132. package/dist/schema.js.map +1 -0
  133. package/dist/sync-loop.d.ts +32 -0
  134. package/dist/sync-loop.d.ts.map +1 -0
  135. package/dist/sync-loop.js +249 -0
  136. package/dist/sync-loop.js.map +1 -0
  137. package/dist/utils/id.d.ts +8 -0
  138. package/dist/utils/id.d.ts.map +1 -0
  139. package/dist/utils/id.js +19 -0
  140. package/dist/utils/id.js.map +1 -0
  141. package/package.json +58 -0
  142. package/src/blobs/index.ts +7 -0
  143. package/src/blobs/manager.ts +1027 -0
  144. package/src/blobs/migrate.ts +67 -0
  145. package/src/blobs/types.ts +84 -0
  146. package/src/client.ts +1222 -0
  147. package/src/conflicts.ts +180 -0
  148. package/src/create-client.ts +297 -0
  149. package/src/engine/SyncEngine.ts +1337 -0
  150. package/src/engine/index.ts +6 -0
  151. package/src/engine/types.ts +268 -0
  152. package/src/handlers/create-handler.ts +287 -0
  153. package/src/handlers/registry.ts +36 -0
  154. package/src/handlers/types.ts +102 -0
  155. package/src/index.ts +25 -0
  156. package/src/migrate.ts +122 -0
  157. package/src/mutations.ts +926 -0
  158. package/src/outbox.ts +397 -0
  159. package/src/plugins/incrementing-version.ts +133 -0
  160. package/src/plugins/index.ts +2 -0
  161. package/src/plugins/types.ts +63 -0
  162. package/src/proxy/connection.ts +191 -0
  163. package/src/proxy/dialect.ts +76 -0
  164. package/src/proxy/driver.ts +126 -0
  165. package/src/proxy/index.ts +10 -0
  166. package/src/proxy/mutations.ts +18 -0
  167. package/src/pull-engine.ts +518 -0
  168. package/src/push-engine.ts +201 -0
  169. package/src/query/FingerprintCollector.ts +29 -0
  170. package/src/query/QueryContext.ts +54 -0
  171. package/src/query/fingerprint.ts +109 -0
  172. package/src/query/index.ts +10 -0
  173. package/src/query/tracked-select.ts +139 -0
  174. package/src/schema.ts +94 -0
  175. package/src/sync-loop.ts +368 -0
  176. package/src/utils/id.ts +20 -0
@@ -0,0 +1,29 @@
1
+ /**
2
+ * @syncular/client - Sync client table registry
3
+ */
4
+ /**
5
+ * Registry for client-side table handlers.
6
+ */
7
+ export class ClientTableRegistry {
8
+ handlers = new Map();
9
+ register(handler) {
10
+ if (this.handlers.has(handler.table)) {
11
+ throw new Error(`Client table handler already registered: ${handler.table}`);
12
+ }
13
+ this.handlers.set(handler.table, handler);
14
+ return this;
15
+ }
16
+ get(table) {
17
+ return this.handlers.get(table);
18
+ }
19
+ getOrThrow(table) {
20
+ const h = this.handlers.get(table);
21
+ if (!h)
22
+ throw new Error(`Missing client table handler for table: ${table}`);
23
+ return h;
24
+ }
25
+ getAll() {
26
+ return Array.from(this.handlers.values());
27
+ }
28
+ }
29
+ //# sourceMappingURL=registry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/handlers/registry.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH;;GAEG;AACH,MAAM,OAAO,mBAAmB;IACtB,QAAQ,GAAG,IAAI,GAAG,EAAkC,CAAC;IAE7D,QAAQ,CAAC,OAA+B,EAAQ;QAC9C,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;YACrC,MAAM,IAAI,KAAK,CACb,4CAA4C,OAAO,CAAC,KAAK,EAAE,CAC5D,CAAC;QACJ,CAAC;QACD,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;QAC1C,OAAO,IAAI,CAAC;IAAA,CACb;IAED,GAAG,CAAC,KAAa,EAAsC;QACrD,OAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IAAA,CACjC;IAED,UAAU,CAAC,KAAa,EAA0B;QAChD,MAAM,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QACnC,IAAI,CAAC,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,2CAA2C,KAAK,EAAE,CAAC,CAAC;QAC5E,OAAO,CAAC,CAAC;IAAA,CACV;IAED,MAAM,GAA6B;QACjC,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;IAAA,CAC3C;CACF"}
@@ -0,0 +1,83 @@
1
+ /**
2
+ * @syncular/client - Sync client table handler interface
3
+ */
4
+ import type { ScopeValues, SyncChange, SyncSnapshot } from '@syncular/core';
5
+ import type { Transaction } from 'kysely';
6
+ /**
7
+ * Context passed to client table handler methods.
8
+ */
9
+ export interface ClientHandlerContext<DB> {
10
+ /** Database transaction */
11
+ trx: Transaction<DB>;
12
+ }
13
+ /**
14
+ * Extended context for snapshot lifecycle hooks.
15
+ */
16
+ export interface ClientSnapshotHookContext<DB> extends ClientHandlerContext<DB> {
17
+ /** The table being snapshotted */
18
+ table: string;
19
+ /** The scope values for this subscription */
20
+ scopes: ScopeValues;
21
+ }
22
+ /**
23
+ * Context for clearAll/clearScope operations.
24
+ */
25
+ export interface ClientClearContext<DB> extends ClientHandlerContext<DB> {
26
+ /** The scope values to clear (data matching these scopes should be removed) */
27
+ scopes: ScopeValues;
28
+ }
29
+ /**
30
+ * Subscription configuration for a handler.
31
+ */
32
+ export interface HandlerSubscriptionConfig {
33
+ /** Scope values for this subscription */
34
+ scopes?: Record<string, string | string[]>;
35
+ /** Params for this subscription */
36
+ params?: Record<string, unknown>;
37
+ }
38
+ /**
39
+ * Client-side table handler for applying sync snapshots and changes.
40
+ */
41
+ export interface ClientTableHandler<DB, TableName extends keyof DB & string = keyof DB & string> {
42
+ /** Table name (used as identifier in sync operations) */
43
+ table: TableName;
44
+ /**
45
+ * Scope patterns used by this table.
46
+ * Used for deriving safe default subscriptions in `createClient`.
47
+ */
48
+ scopePatterns?: string[];
49
+ /**
50
+ * Subscription configuration.
51
+ * - `true`: Subscribe to this table (default)
52
+ * - `false`: Don't subscribe (local-only handler)
53
+ * - Object: Subscribe with custom scopes/params
54
+ */
55
+ subscribe?: boolean | HandlerSubscriptionConfig;
56
+ /**
57
+ * Apply a snapshot page for this table.
58
+ * The handler is responsible for upserting the rows.
59
+ */
60
+ applySnapshot(ctx: ClientHandlerContext<DB>, snapshot: SyncSnapshot): Promise<void>;
61
+ /**
62
+ * Clear local data for this table matching the given scopes.
63
+ * Used when subscription is removed or revoked.
64
+ * If scopes is empty, clear all data for this table.
65
+ */
66
+ clearAll(ctx: ClientClearContext<DB>): Promise<void>;
67
+ /**
68
+ * Apply a single change (upsert/delete).
69
+ * Must be idempotent (retries may re-apply).
70
+ */
71
+ applyChange(ctx: ClientHandlerContext<DB>, change: SyncChange): Promise<void>;
72
+ /**
73
+ * Optional: Called when a snapshot begins (isFirstPage = true).
74
+ * Use this for marking existing rows as stale before applying snapshot.
75
+ */
76
+ onSnapshotStart?(ctx: ClientSnapshotHookContext<DB>): Promise<void>;
77
+ /**
78
+ * Optional: Called when a snapshot ends (isLastPage = true).
79
+ * Use this for cleaning up stale rows after snapshot is complete.
80
+ */
81
+ onSnapshotEnd?(ctx: ClientSnapshotHookContext<DB>): Promise<void>;
82
+ }
83
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/handlers/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC5E,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,QAAQ,CAAC;AAE1C;;GAEG;AACH,MAAM,WAAW,oBAAoB,CAAC,EAAE;IACtC,2BAA2B;IAC3B,GAAG,EAAE,WAAW,CAAC,EAAE,CAAC,CAAC;CACtB;AAED;;GAEG;AACH,MAAM,WAAW,yBAAyB,CAAC,EAAE,CAC3C,SAAQ,oBAAoB,CAAC,EAAE,CAAC;IAChC,kCAAkC;IAClC,KAAK,EAAE,MAAM,CAAC;IACd,6CAA6C;IAC7C,MAAM,EAAE,WAAW,CAAC;CACrB;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB,CAAC,EAAE,CAAE,SAAQ,oBAAoB,CAAC,EAAE,CAAC;IACtE,+EAA+E;IAC/E,MAAM,EAAE,WAAW,CAAC;CACrB;AAED;;GAEG;AACH,MAAM,WAAW,yBAAyB;IACxC,yCAAyC;IACzC,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC,CAAC;IAC3C,mCAAmC;IACnC,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAClC;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB,CACjC,EAAE,EACF,SAAS,SAAS,MAAM,EAAE,GAAG,MAAM,GAAG,MAAM,EAAE,GAAG,MAAM;IAEvD,yDAAyD;IACzD,KAAK,EAAE,SAAS,CAAC;IAEjB;;;OAGG;IACH,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;IAEzB;;;;;OAKG;IACH,SAAS,CAAC,EAAE,OAAO,GAAG,yBAAyB,CAAC;IAEhD;;;OAGG;IACH,aAAa,CACX,GAAG,EAAE,oBAAoB,CAAC,EAAE,CAAC,EAC7B,QAAQ,EAAE,YAAY,GACrB,OAAO,CAAC,IAAI,CAAC,CAAC;IAEjB;;;;OAIG;IACH,QAAQ,CAAC,GAAG,EAAE,kBAAkB,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAErD;;;OAGG;IACH,WAAW,CAAC,GAAG,EAAE,oBAAoB,CAAC,EAAE,CAAC,EAAE,MAAM,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAE9E;;;OAGG;IACH,eAAe,CAAC,CAAC,GAAG,EAAE,yBAAyB,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAEpE;;;OAGG;IACH,aAAa,CAAC,CAAC,GAAG,EAAE,yBAAyB,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACnE"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * @syncular/client - Sync client table handler interface
3
+ */
4
+ export {};
5
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/handlers/types.ts"],"names":[],"mappings":"AAAA;;GAEG"}
@@ -0,0 +1,24 @@
1
+ /**
2
+ * @syncular/client - Sync client engine (commit-log based)
3
+ */
4
+ export * from '@syncular/core';
5
+ export * from './blobs';
6
+ export * from './client';
7
+ export * from './conflicts';
8
+ export * from './create-client';
9
+ export * from './engine';
10
+ export * from './handlers/create-handler';
11
+ export * from './handlers/registry';
12
+ export * from './handlers/types';
13
+ export * from './migrate';
14
+ export * from './mutations';
15
+ export * from './outbox';
16
+ export * from './plugins';
17
+ export * from './proxy';
18
+ export * from './pull-engine';
19
+ export * from './push-engine';
20
+ export * from './query';
21
+ export * from './schema';
22
+ export * from './sync-loop';
23
+ export * from './utils/id';
24
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,cAAc,gBAAgB,CAAC;AAE/B,cAAc,SAAS,CAAC;AACxB,cAAc,UAAU,CAAC;AACzB,cAAc,aAAa,CAAC;AAC5B,cAAc,iBAAiB,CAAC;AAChC,cAAc,UAAU,CAAC;AACzB,cAAc,2BAA2B,CAAC;AAC1C,cAAc,qBAAqB,CAAC;AACpC,cAAc,kBAAkB,CAAC;AACjC,cAAc,WAAW,CAAC;AAC1B,cAAc,aAAa,CAAC;AAC5B,cAAc,UAAU,CAAC;AACzB,cAAc,WAAW,CAAC;AAC1B,cAAc,SAAS,CAAC;AACxB,cAAc,eAAe,CAAC;AAC9B,cAAc,eAAe,CAAC;AAC9B,cAAc,SAAS,CAAC;AACxB,cAAc,UAAU,CAAC;AACzB,cAAc,aAAa,CAAC;AAC5B,cAAc,YAAY,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,24 @@
1
+ /**
2
+ * @syncular/client - Sync client engine (commit-log based)
3
+ */
4
+ export * from '@syncular/core';
5
+ export * from './blobs';
6
+ export * from './client';
7
+ export * from './conflicts';
8
+ export * from './create-client';
9
+ export * from './engine';
10
+ export * from './handlers/create-handler';
11
+ export * from './handlers/registry';
12
+ export * from './handlers/types';
13
+ export * from './migrate';
14
+ export * from './mutations';
15
+ export * from './outbox';
16
+ export * from './plugins';
17
+ export * from './proxy';
18
+ export * from './pull-engine';
19
+ export * from './push-engine';
20
+ export * from './query';
21
+ export * from './schema';
22
+ export * from './sync-loop';
23
+ export * from './utils/id';
24
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,cAAc,gBAAgB,CAAC;AAE/B,cAAc,SAAS,CAAC;AACxB,cAAc,UAAU,CAAC;AACzB,cAAc,aAAa,CAAC;AAC5B,cAAc,iBAAiB,CAAC;AAChC,cAAc,UAAU,CAAC;AACzB,cAAc,2BAA2B,CAAC;AAC1C,cAAc,qBAAqB,CAAC;AACpC,cAAc,kBAAkB,CAAC;AACjC,cAAc,WAAW,CAAC;AAC1B,cAAc,aAAa,CAAC;AAC5B,cAAc,UAAU,CAAC;AACzB,cAAc,WAAW,CAAC;AAC1B,cAAc,SAAS,CAAC;AACxB,cAAc,eAAe,CAAC;AAC9B,cAAc,eAAe,CAAC;AAC9B,cAAc,SAAS,CAAC;AACxB,cAAc,UAAU,CAAC;AACzB,cAAc,aAAa,CAAC;AAC5B,cAAc,YAAY,CAAC"}
@@ -0,0 +1,19 @@
1
+ /**
2
+ * @syncular/client - Sync migrations (SQLite reference)
3
+ */
4
+ import type { Kysely } from 'kysely';
5
+ import type { SyncClientDb } from './schema';
6
+ /**
7
+ * Ensures the client sync schema exists in the database.
8
+ * Safe to call multiple times (idempotent).
9
+ *
10
+ * @typeParam DB - Your database type that extends SyncClientDb
11
+ */
12
+ export declare function ensureClientSyncSchema<DB extends SyncClientDb>(db: Kysely<DB>): Promise<void>;
13
+ /**
14
+ * Drops the client sync schema from the database.
15
+ *
16
+ * @typeParam DB - Your database type that extends SyncClientDb
17
+ */
18
+ export declare function dropClientSyncSchema<DB extends SyncClientDb>(db: Kysely<DB>): Promise<void>;
19
+ //# sourceMappingURL=migrate.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"migrate.d.ts","sourceRoot":"","sources":["../src/migrate.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AACrC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAE7C;;;;;GAKG;AACH,wBAAsB,sBAAsB,CAAC,EAAE,SAAS,YAAY,EAClE,EAAE,EAAE,MAAM,CAAC,EAAE,CAAC,GACb,OAAO,CAAC,IAAI,CAAC,CA6Ff;AAED;;;;GAIG;AACH,wBAAsB,oBAAoB,CAAC,EAAE,SAAS,YAAY,EAChE,EAAE,EAAE,MAAM,CAAC,EAAE,CAAC,GACb,OAAO,CAAC,IAAI,CAAC,CAIf"}
@@ -0,0 +1,106 @@
1
+ /**
2
+ * @syncular/client - Sync migrations (SQLite reference)
3
+ */
4
+ /**
5
+ * Ensures the client sync schema exists in the database.
6
+ * Safe to call multiple times (idempotent).
7
+ *
8
+ * @typeParam DB - Your database type that extends SyncClientDb
9
+ */
10
+ export async function ensureClientSyncSchema(db) {
11
+ // Schema builder doesn't need typed access - operates on raw SQL
12
+ await db.schema
13
+ .createTable('sync_subscription_state')
14
+ .ifNotExists()
15
+ .addColumn('state_id', 'text', (col) => col.notNull())
16
+ .addColumn('subscription_id', 'text', (col) => col.notNull())
17
+ .addColumn('shape', 'text', (col) => col.notNull())
18
+ .addColumn('scopes_json', 'text', (col) => col.notNull().defaultTo('{}'))
19
+ .addColumn('params_json', 'text', (col) => col.notNull())
20
+ .addColumn('cursor', 'bigint', (col) => col.notNull())
21
+ .addColumn('bootstrap_state_json', 'text')
22
+ .addColumn('status', 'text', (col) => col.notNull())
23
+ .addColumn('created_at', 'bigint', (col) => col.notNull())
24
+ .addColumn('updated_at', 'bigint', (col) => col.notNull())
25
+ .execute();
26
+ await db.schema
27
+ .createIndex('idx_sync_subscription_state_state_sub')
28
+ .ifNotExists()
29
+ .on('sync_subscription_state')
30
+ .columns(['state_id', 'subscription_id'])
31
+ .unique()
32
+ .execute();
33
+ await db.schema
34
+ .createIndex('idx_sync_subscription_state_state')
35
+ .ifNotExists()
36
+ .on('sync_subscription_state')
37
+ .columns(['state_id', 'updated_at'])
38
+ .execute();
39
+ await db.schema
40
+ .createTable('sync_outbox_commits')
41
+ .ifNotExists()
42
+ .addColumn('id', 'text', (col) => col.primaryKey())
43
+ .addColumn('client_commit_id', 'text', (col) => col.notNull())
44
+ .addColumn('status', 'text', (col) => col.notNull())
45
+ .addColumn('operations_json', 'text', (col) => col.notNull())
46
+ .addColumn('last_response_json', 'text')
47
+ .addColumn('error', 'text')
48
+ .addColumn('created_at', 'bigint', (col) => col.notNull())
49
+ .addColumn('updated_at', 'bigint', (col) => col.notNull())
50
+ .addColumn('attempt_count', 'integer', (col) => col.notNull().defaultTo(0))
51
+ .addColumn('acked_commit_seq', 'bigint')
52
+ .addColumn('schema_version', 'integer', (col) => col.notNull().defaultTo(1))
53
+ .execute();
54
+ await db.schema
55
+ .createIndex('idx_sync_outbox_commits_client_commit_id')
56
+ .ifNotExists()
57
+ .on('sync_outbox_commits')
58
+ .columns(['client_commit_id'])
59
+ .unique()
60
+ .execute();
61
+ await db.schema
62
+ .createIndex('idx_sync_outbox_commits_status_created_at')
63
+ .ifNotExists()
64
+ .on('sync_outbox_commits')
65
+ .columns(['status', 'created_at'])
66
+ .execute();
67
+ await db.schema
68
+ .createTable('sync_conflicts')
69
+ .ifNotExists()
70
+ .addColumn('id', 'text', (col) => col.primaryKey())
71
+ .addColumn('outbox_commit_id', 'text', (col) => col.notNull())
72
+ .addColumn('client_commit_id', 'text', (col) => col.notNull())
73
+ .addColumn('op_index', 'integer', (col) => col.notNull())
74
+ .addColumn('result_status', 'text', (col) => col.notNull())
75
+ .addColumn('message', 'text', (col) => col.notNull())
76
+ .addColumn('code', 'text')
77
+ .addColumn('server_version', 'bigint')
78
+ .addColumn('server_row_json', 'text')
79
+ .addColumn('created_at', 'bigint', (col) => col.notNull())
80
+ .addColumn('resolved_at', 'bigint')
81
+ .addColumn('resolution', 'text')
82
+ .execute();
83
+ await db.schema
84
+ .createIndex('idx_sync_conflicts_outbox_commit')
85
+ .ifNotExists()
86
+ .on('sync_conflicts')
87
+ .columns(['outbox_commit_id'])
88
+ .execute();
89
+ await db.schema
90
+ .createIndex('idx_sync_conflicts_resolved_at')
91
+ .ifNotExists()
92
+ .on('sync_conflicts')
93
+ .columns(['resolved_at'])
94
+ .execute();
95
+ }
96
+ /**
97
+ * Drops the client sync schema from the database.
98
+ *
99
+ * @typeParam DB - Your database type that extends SyncClientDb
100
+ */
101
+ export async function dropClientSyncSchema(db) {
102
+ await db.schema.dropTable('sync_conflicts').ifExists().execute();
103
+ await db.schema.dropTable('sync_outbox_commits').ifExists().execute();
104
+ await db.schema.dropTable('sync_subscription_state').ifExists().execute();
105
+ }
106
+ //# sourceMappingURL=migrate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"migrate.js","sourceRoot":"","sources":["../src/migrate.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,138 @@
1
+ /**
2
+ * @syncular/client - Mutations API (Proxy-based, typed)
3
+ *
4
+ * Provides a dynamic `Proxy` mutation interface with Kysely typings:
5
+ * - `mutations.tasks.insert({ ... })` (auto-generates id)
6
+ * - `mutations.tasks.update(id, { ... })`
7
+ * - `mutations.tasks.delete(id)`
8
+ * - `mutations.$commit(async (tx) => { ... })` for batching
9
+ *
10
+ * Under the hood this compiles to sync `upsert/delete` operations.
11
+ *
12
+ * This module is framework-agnostic. `@syncular/client-react` wraps it to add
13
+ * React state and automatic sync triggering.
14
+ */
15
+ import type { SyncOperation, SyncPushResponse, SyncTransport } from '@syncular/core';
16
+ import type { Insertable, Kysely, Updateable } from 'kysely';
17
+ import type { SyncClientPlugin } from './plugins/types';
18
+ import type { SyncClientDb } from './schema';
19
+ /**
20
+ * Base type for any database schema.
21
+ * Uses an index signature to support runtime-determined table names.
22
+ */
23
+ type AnyDb = Record<string, Record<string, unknown>>;
24
+ type SyncOpKind = 'upsert' | 'delete';
25
+ type ReservedKeys = '$commit' | '$table';
26
+ type KnownKeys<T> = string extends keyof T ? never : keyof T & string;
27
+ type KnownTableKey<DB> = Exclude<KnownKeys<DB>, ReservedKeys>;
28
+ type InsertPayload<Row> = Insertable<Row> extends {
29
+ id?: infer I;
30
+ } ? Omit<Insertable<Row>, 'id'> & {
31
+ id?: I;
32
+ } : Insertable<Row>;
33
+ type UpdatePayload<Row> = Omit<Updateable<Row>, 'id'> & {
34
+ id?: never;
35
+ };
36
+ type BaseVersionOptions = {
37
+ baseVersion?: number | null;
38
+ };
39
+ export interface MutationReceipt {
40
+ /**
41
+ * Outbox commit id (when using outbox) or a generated id (when pushing directly).
42
+ */
43
+ commitId: string;
44
+ /**
45
+ * Protocol-level client commit id (sent to the server in push requests).
46
+ */
47
+ clientCommitId: string;
48
+ }
49
+ export interface OutboxCommitMeta {
50
+ operations: SyncOperation[];
51
+ localMutations: Array<{
52
+ table: string;
53
+ rowId: string;
54
+ op: SyncOpKind;
55
+ }>;
56
+ }
57
+ export interface PushCommitMeta {
58
+ operations: SyncOperation[];
59
+ localMutations: Array<{
60
+ table: string;
61
+ rowId: string;
62
+ op: SyncOpKind;
63
+ }>;
64
+ response: SyncPushResponse;
65
+ }
66
+ export type TableMutations<DB, T extends keyof DB & string> = {
67
+ insert: (values: InsertPayload<DB[T]>) => Promise<MutationReceipt & {
68
+ id: string;
69
+ }>;
70
+ insertMany: (rows: Array<InsertPayload<DB[T]>>) => Promise<MutationReceipt & {
71
+ ids: string[];
72
+ }>;
73
+ update: (id: string, patch: UpdatePayload<DB[T]>, options?: BaseVersionOptions) => Promise<MutationReceipt>;
74
+ delete: (id: string, options?: BaseVersionOptions) => Promise<MutationReceipt>;
75
+ /**
76
+ * Explicit upsert escape hatch. Prefer insert/update for clarity.
77
+ */
78
+ upsert: (id: string, patch: UpdatePayload<DB[T]>, options?: BaseVersionOptions) => Promise<MutationReceipt>;
79
+ };
80
+ export type TableMutationsTx<DB, T extends keyof DB & string> = {
81
+ insert: (values: InsertPayload<DB[T]>) => Promise<string>;
82
+ insertMany: (rows: Array<InsertPayload<DB[T]>>) => Promise<string[]>;
83
+ update: (id: string, patch: UpdatePayload<DB[T]>, options?: BaseVersionOptions) => Promise<void>;
84
+ delete: (id: string, options?: BaseVersionOptions) => Promise<void>;
85
+ upsert: (id: string, patch: UpdatePayload<DB[T]>, options?: BaseVersionOptions) => Promise<void>;
86
+ };
87
+ export type MutationsTx<DB> = {
88
+ [T in KnownTableKey<DB>]: TableMutationsTx<DB, T>;
89
+ } & {
90
+ [table: string]: TableMutationsTx<AnyDb, string>;
91
+ };
92
+ export type MutationsCommitFn<DB, Meta = unknown, Options = unknown> = <R>(fn: (tx: MutationsTx<DB>) => Promise<R> | R, options?: Options) => Promise<{
93
+ result: R;
94
+ receipt: MutationReceipt;
95
+ meta: Meta;
96
+ }>;
97
+ export type MutationsApi<DB, CommitOptions = unknown> = {
98
+ $commit: <R>(fn: (tx: MutationsTx<DB>) => Promise<R> | R, options?: CommitOptions) => Promise<{
99
+ result: R;
100
+ commit: MutationReceipt;
101
+ }>;
102
+ $table: {
103
+ <T extends KnownTableKey<DB>>(table: T): TableMutations<DB, T>;
104
+ (table: string): TableMutations<AnyDb, string>;
105
+ };
106
+ } & {
107
+ [T in KnownTableKey<DB>]: TableMutations<DB, T>;
108
+ };
109
+ export declare function createMutationsApi<DB, Meta = unknown, CommitOptions = unknown>(commit: MutationsCommitFn<DB, Meta, CommitOptions>): MutationsApi<DB, CommitOptions>;
110
+ export interface OutboxCommitConfig<DB extends SyncClientDb> {
111
+ db: Kysely<DB>;
112
+ idColumn?: string;
113
+ versionColumn?: string | null;
114
+ omitColumns?: string[];
115
+ }
116
+ export declare function createOutboxCommit<DB extends SyncClientDb>(config: OutboxCommitConfig<DB>): MutationsCommitFn<DB, OutboxCommitMeta, undefined>;
117
+ export declare function createOutboxMutations<DB extends SyncClientDb>(config: OutboxCommitConfig<DB>): MutationsApi<DB, undefined>;
118
+ export interface PushCommitConfig {
119
+ transport: SyncTransport;
120
+ clientId: string;
121
+ actorId?: string;
122
+ plugins?: SyncClientPlugin[];
123
+ idColumn?: string;
124
+ versionColumn?: string | null;
125
+ omitColumns?: string[];
126
+ /** Client schema version (default: 1) */
127
+ schemaVersion?: number;
128
+ readBaseVersion?: (args: {
129
+ table: string;
130
+ rowId: string;
131
+ idColumn: string;
132
+ versionColumn: string;
133
+ }) => Promise<number | null>;
134
+ }
135
+ export declare function createPushCommit<DB = AnyDb>(config: PushCommitConfig): MutationsCommitFn<DB, PushCommitMeta, undefined>;
136
+ export declare function createPushMutations<DB = AnyDb>(config: PushCommitConfig): MutationsApi<DB, undefined>;
137
+ export {};
138
+ //# sourceMappingURL=mutations.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mutations.d.ts","sourceRoot":"","sources":["../src/mutations.ts"],"names":[],"mappings":"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"}