@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.
- package/dist/blobs/index.d.ts +7 -0
- package/dist/blobs/index.d.ts.map +1 -0
- package/dist/blobs/index.js +7 -0
- package/dist/blobs/index.js.map +1 -0
- package/dist/blobs/manager.d.ts +345 -0
- package/dist/blobs/manager.d.ts.map +1 -0
- package/dist/blobs/manager.js +749 -0
- package/dist/blobs/manager.js.map +1 -0
- package/dist/blobs/migrate.d.ts +14 -0
- package/dist/blobs/migrate.d.ts.map +1 -0
- package/dist/blobs/migrate.js +59 -0
- package/dist/blobs/migrate.js.map +1 -0
- package/dist/blobs/types.d.ts +62 -0
- package/dist/blobs/types.d.ts.map +1 -0
- package/dist/blobs/types.js +5 -0
- package/dist/blobs/types.js.map +1 -0
- package/dist/client.d.ts +338 -0
- package/dist/client.d.ts.map +1 -0
- package/dist/client.js +834 -0
- package/dist/client.js.map +1 -0
- package/dist/conflicts.d.ts +31 -0
- package/dist/conflicts.d.ts.map +1 -0
- package/dist/conflicts.js +118 -0
- package/dist/conflicts.js.map +1 -0
- package/dist/create-client.d.ts +115 -0
- package/dist/create-client.d.ts.map +1 -0
- package/dist/create-client.js +162 -0
- package/dist/create-client.js.map +1 -0
- package/dist/engine/SyncEngine.d.ts +215 -0
- package/dist/engine/SyncEngine.d.ts.map +1 -0
- package/dist/engine/SyncEngine.js +1066 -0
- package/dist/engine/SyncEngine.js.map +1 -0
- package/dist/engine/index.d.ts +6 -0
- package/dist/engine/index.d.ts.map +1 -0
- package/dist/engine/index.js +6 -0
- package/dist/engine/index.js.map +1 -0
- package/dist/engine/types.d.ts +230 -0
- package/dist/engine/types.d.ts.map +1 -0
- package/dist/engine/types.js +7 -0
- package/dist/engine/types.js.map +1 -0
- package/dist/handlers/create-handler.d.ts +110 -0
- package/dist/handlers/create-handler.d.ts.map +1 -0
- package/dist/handlers/create-handler.js +140 -0
- package/dist/handlers/create-handler.js.map +1 -0
- package/dist/handlers/registry.d.ts +15 -0
- package/dist/handlers/registry.d.ts.map +1 -0
- package/dist/handlers/registry.js +29 -0
- package/dist/handlers/registry.js.map +1 -0
- package/dist/handlers/types.d.ts +83 -0
- package/dist/handlers/types.d.ts.map +1 -0
- package/dist/handlers/types.js +5 -0
- package/dist/handlers/types.js.map +1 -0
- package/dist/index.d.ts +24 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +24 -0
- package/dist/index.js.map +1 -0
- package/dist/migrate.d.ts +19 -0
- package/dist/migrate.d.ts.map +1 -0
- package/dist/migrate.js +106 -0
- package/dist/migrate.js.map +1 -0
- package/dist/mutations.d.ts +138 -0
- package/dist/mutations.d.ts.map +1 -0
- package/dist/mutations.js +611 -0
- package/dist/mutations.js.map +1 -0
- package/dist/outbox.d.ts +112 -0
- package/dist/outbox.d.ts.map +1 -0
- package/dist/outbox.js +304 -0
- package/dist/outbox.js.map +1 -0
- package/dist/plugins/incrementing-version.d.ts +34 -0
- package/dist/plugins/incrementing-version.d.ts.map +1 -0
- package/dist/plugins/incrementing-version.js +83 -0
- package/dist/plugins/incrementing-version.js.map +1 -0
- package/dist/plugins/index.d.ts +3 -0
- package/dist/plugins/index.d.ts.map +1 -0
- package/dist/plugins/index.js +3 -0
- package/dist/plugins/index.js.map +1 -0
- package/dist/plugins/types.d.ts +49 -0
- package/dist/plugins/types.d.ts.map +1 -0
- package/dist/plugins/types.js +15 -0
- package/dist/plugins/types.js.map +1 -0
- package/dist/proxy/connection.d.ts +33 -0
- package/dist/proxy/connection.d.ts.map +1 -0
- package/dist/proxy/connection.js +153 -0
- package/dist/proxy/connection.js.map +1 -0
- package/dist/proxy/dialect.d.ts +46 -0
- package/dist/proxy/dialect.d.ts.map +1 -0
- package/dist/proxy/dialect.js +58 -0
- package/dist/proxy/dialect.js.map +1 -0
- package/dist/proxy/driver.d.ts +42 -0
- package/dist/proxy/driver.d.ts.map +1 -0
- package/dist/proxy/driver.js +78 -0
- package/dist/proxy/driver.js.map +1 -0
- package/dist/proxy/index.d.ts +10 -0
- package/dist/proxy/index.d.ts.map +1 -0
- package/dist/proxy/index.js +10 -0
- package/dist/proxy/index.js.map +1 -0
- package/dist/proxy/mutations.d.ts +9 -0
- package/dist/proxy/mutations.d.ts.map +1 -0
- package/dist/proxy/mutations.js +11 -0
- package/dist/proxy/mutations.js.map +1 -0
- package/dist/pull-engine.d.ts +45 -0
- package/dist/pull-engine.d.ts.map +1 -0
- package/dist/pull-engine.js +391 -0
- package/dist/pull-engine.js.map +1 -0
- package/dist/push-engine.d.ts +18 -0
- package/dist/push-engine.d.ts.map +1 -0
- package/dist/push-engine.js +155 -0
- package/dist/push-engine.js.map +1 -0
- package/dist/query/FingerprintCollector.d.ts +18 -0
- package/dist/query/FingerprintCollector.d.ts.map +1 -0
- package/dist/query/FingerprintCollector.js +28 -0
- package/dist/query/FingerprintCollector.js.map +1 -0
- package/dist/query/QueryContext.d.ts +33 -0
- package/dist/query/QueryContext.d.ts.map +1 -0
- package/dist/query/QueryContext.js +16 -0
- package/dist/query/QueryContext.js.map +1 -0
- package/dist/query/fingerprint.d.ts +61 -0
- package/dist/query/fingerprint.d.ts.map +1 -0
- package/dist/query/fingerprint.js +91 -0
- package/dist/query/fingerprint.js.map +1 -0
- package/dist/query/index.d.ts +7 -0
- package/dist/query/index.d.ts.map +1 -0
- package/dist/query/index.js +7 -0
- package/dist/query/index.js.map +1 -0
- package/dist/query/tracked-select.d.ts +18 -0
- package/dist/query/tracked-select.d.ts.map +1 -0
- package/dist/query/tracked-select.js +90 -0
- package/dist/query/tracked-select.js.map +1 -0
- package/dist/schema.d.ts +83 -0
- package/dist/schema.d.ts.map +1 -0
- package/dist/schema.js +7 -0
- package/dist/schema.js.map +1 -0
- package/dist/sync-loop.d.ts +32 -0
- package/dist/sync-loop.d.ts.map +1 -0
- package/dist/sync-loop.js +249 -0
- package/dist/sync-loop.js.map +1 -0
- package/dist/utils/id.d.ts +8 -0
- package/dist/utils/id.d.ts.map +1 -0
- package/dist/utils/id.js +19 -0
- package/dist/utils/id.js.map +1 -0
- package/package.json +58 -0
- package/src/blobs/index.ts +7 -0
- package/src/blobs/manager.ts +1027 -0
- package/src/blobs/migrate.ts +67 -0
- package/src/blobs/types.ts +84 -0
- package/src/client.ts +1222 -0
- package/src/conflicts.ts +180 -0
- package/src/create-client.ts +297 -0
- package/src/engine/SyncEngine.ts +1337 -0
- package/src/engine/index.ts +6 -0
- package/src/engine/types.ts +268 -0
- package/src/handlers/create-handler.ts +287 -0
- package/src/handlers/registry.ts +36 -0
- package/src/handlers/types.ts +102 -0
- package/src/index.ts +25 -0
- package/src/migrate.ts +122 -0
- package/src/mutations.ts +926 -0
- package/src/outbox.ts +397 -0
- package/src/plugins/incrementing-version.ts +133 -0
- package/src/plugins/index.ts +2 -0
- package/src/plugins/types.ts +63 -0
- package/src/proxy/connection.ts +191 -0
- package/src/proxy/dialect.ts +76 -0
- package/src/proxy/driver.ts +126 -0
- package/src/proxy/index.ts +10 -0
- package/src/proxy/mutations.ts +18 -0
- package/src/pull-engine.ts +518 -0
- package/src/push-engine.ts +201 -0
- package/src/query/FingerprintCollector.ts +29 -0
- package/src/query/QueryContext.ts +54 -0
- package/src/query/fingerprint.ts +109 -0
- package/src/query/index.ts +10 -0
- package/src/query/tracked-select.ts +139 -0
- package/src/schema.ts +94 -0
- package/src/sync-loop.ts +368 -0
- package/src/utils/id.ts +20 -0
package/src/index.ts
ADDED
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @syncular/client - Sync client engine (commit-log based)
|
|
3
|
+
*/
|
|
4
|
+
|
|
5
|
+
export * from '@syncular/core';
|
|
6
|
+
|
|
7
|
+
export * from './blobs';
|
|
8
|
+
export * from './client';
|
|
9
|
+
export * from './conflicts';
|
|
10
|
+
export * from './create-client';
|
|
11
|
+
export * from './engine';
|
|
12
|
+
export * from './handlers/create-handler';
|
|
13
|
+
export * from './handlers/registry';
|
|
14
|
+
export * from './handlers/types';
|
|
15
|
+
export * from './migrate';
|
|
16
|
+
export * from './mutations';
|
|
17
|
+
export * from './outbox';
|
|
18
|
+
export * from './plugins';
|
|
19
|
+
export * from './proxy';
|
|
20
|
+
export * from './pull-engine';
|
|
21
|
+
export * from './push-engine';
|
|
22
|
+
export * from './query';
|
|
23
|
+
export * from './schema';
|
|
24
|
+
export * from './sync-loop';
|
|
25
|
+
export * from './utils/id';
|
package/src/migrate.ts
ADDED
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @syncular/client - Sync migrations (SQLite reference)
|
|
3
|
+
*/
|
|
4
|
+
|
|
5
|
+
import type { Kysely } from 'kysely';
|
|
6
|
+
import type { SyncClientDb } from './schema';
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* Ensures the client sync schema exists in the database.
|
|
10
|
+
* Safe to call multiple times (idempotent).
|
|
11
|
+
*
|
|
12
|
+
* @typeParam DB - Your database type that extends SyncClientDb
|
|
13
|
+
*/
|
|
14
|
+
export async function ensureClientSyncSchema<DB extends SyncClientDb>(
|
|
15
|
+
db: Kysely<DB>
|
|
16
|
+
): Promise<void> {
|
|
17
|
+
// Schema builder doesn't need typed access - operates on raw SQL
|
|
18
|
+
await db.schema
|
|
19
|
+
.createTable('sync_subscription_state')
|
|
20
|
+
.ifNotExists()
|
|
21
|
+
.addColumn('state_id', 'text', (col) => col.notNull())
|
|
22
|
+
.addColumn('subscription_id', 'text', (col) => col.notNull())
|
|
23
|
+
.addColumn('shape', 'text', (col) => col.notNull())
|
|
24
|
+
.addColumn('scopes_json', 'text', (col) => col.notNull().defaultTo('{}'))
|
|
25
|
+
.addColumn('params_json', 'text', (col) => col.notNull())
|
|
26
|
+
.addColumn('cursor', 'bigint', (col) => col.notNull())
|
|
27
|
+
.addColumn('bootstrap_state_json', 'text')
|
|
28
|
+
.addColumn('status', 'text', (col) => col.notNull())
|
|
29
|
+
.addColumn('created_at', 'bigint', (col) => col.notNull())
|
|
30
|
+
.addColumn('updated_at', 'bigint', (col) => col.notNull())
|
|
31
|
+
.execute();
|
|
32
|
+
|
|
33
|
+
await db.schema
|
|
34
|
+
.createIndex('idx_sync_subscription_state_state_sub')
|
|
35
|
+
.ifNotExists()
|
|
36
|
+
.on('sync_subscription_state')
|
|
37
|
+
.columns(['state_id', 'subscription_id'])
|
|
38
|
+
.unique()
|
|
39
|
+
.execute();
|
|
40
|
+
|
|
41
|
+
await db.schema
|
|
42
|
+
.createIndex('idx_sync_subscription_state_state')
|
|
43
|
+
.ifNotExists()
|
|
44
|
+
.on('sync_subscription_state')
|
|
45
|
+
.columns(['state_id', 'updated_at'])
|
|
46
|
+
.execute();
|
|
47
|
+
|
|
48
|
+
await db.schema
|
|
49
|
+
.createTable('sync_outbox_commits')
|
|
50
|
+
.ifNotExists()
|
|
51
|
+
.addColumn('id', 'text', (col) => col.primaryKey())
|
|
52
|
+
.addColumn('client_commit_id', 'text', (col) => col.notNull())
|
|
53
|
+
.addColumn('status', 'text', (col) => col.notNull())
|
|
54
|
+
.addColumn('operations_json', 'text', (col) => col.notNull())
|
|
55
|
+
.addColumn('last_response_json', 'text')
|
|
56
|
+
.addColumn('error', 'text')
|
|
57
|
+
.addColumn('created_at', 'bigint', (col) => col.notNull())
|
|
58
|
+
.addColumn('updated_at', 'bigint', (col) => col.notNull())
|
|
59
|
+
.addColumn('attempt_count', 'integer', (col) => col.notNull().defaultTo(0))
|
|
60
|
+
.addColumn('acked_commit_seq', 'bigint')
|
|
61
|
+
.addColumn('schema_version', 'integer', (col) => col.notNull().defaultTo(1))
|
|
62
|
+
.execute();
|
|
63
|
+
|
|
64
|
+
await db.schema
|
|
65
|
+
.createIndex('idx_sync_outbox_commits_client_commit_id')
|
|
66
|
+
.ifNotExists()
|
|
67
|
+
.on('sync_outbox_commits')
|
|
68
|
+
.columns(['client_commit_id'])
|
|
69
|
+
.unique()
|
|
70
|
+
.execute();
|
|
71
|
+
|
|
72
|
+
await db.schema
|
|
73
|
+
.createIndex('idx_sync_outbox_commits_status_created_at')
|
|
74
|
+
.ifNotExists()
|
|
75
|
+
.on('sync_outbox_commits')
|
|
76
|
+
.columns(['status', 'created_at'])
|
|
77
|
+
.execute();
|
|
78
|
+
|
|
79
|
+
await db.schema
|
|
80
|
+
.createTable('sync_conflicts')
|
|
81
|
+
.ifNotExists()
|
|
82
|
+
.addColumn('id', 'text', (col) => col.primaryKey())
|
|
83
|
+
.addColumn('outbox_commit_id', 'text', (col) => col.notNull())
|
|
84
|
+
.addColumn('client_commit_id', 'text', (col) => col.notNull())
|
|
85
|
+
.addColumn('op_index', 'integer', (col) => col.notNull())
|
|
86
|
+
.addColumn('result_status', 'text', (col) => col.notNull())
|
|
87
|
+
.addColumn('message', 'text', (col) => col.notNull())
|
|
88
|
+
.addColumn('code', 'text')
|
|
89
|
+
.addColumn('server_version', 'bigint')
|
|
90
|
+
.addColumn('server_row_json', 'text')
|
|
91
|
+
.addColumn('created_at', 'bigint', (col) => col.notNull())
|
|
92
|
+
.addColumn('resolved_at', 'bigint')
|
|
93
|
+
.addColumn('resolution', 'text')
|
|
94
|
+
.execute();
|
|
95
|
+
|
|
96
|
+
await db.schema
|
|
97
|
+
.createIndex('idx_sync_conflicts_outbox_commit')
|
|
98
|
+
.ifNotExists()
|
|
99
|
+
.on('sync_conflicts')
|
|
100
|
+
.columns(['outbox_commit_id'])
|
|
101
|
+
.execute();
|
|
102
|
+
|
|
103
|
+
await db.schema
|
|
104
|
+
.createIndex('idx_sync_conflicts_resolved_at')
|
|
105
|
+
.ifNotExists()
|
|
106
|
+
.on('sync_conflicts')
|
|
107
|
+
.columns(['resolved_at'])
|
|
108
|
+
.execute();
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
/**
|
|
112
|
+
* Drops the client sync schema from the database.
|
|
113
|
+
*
|
|
114
|
+
* @typeParam DB - Your database type that extends SyncClientDb
|
|
115
|
+
*/
|
|
116
|
+
export async function dropClientSyncSchema<DB extends SyncClientDb>(
|
|
117
|
+
db: Kysely<DB>
|
|
118
|
+
): Promise<void> {
|
|
119
|
+
await db.schema.dropTable('sync_conflicts').ifExists().execute();
|
|
120
|
+
await db.schema.dropTable('sync_outbox_commits').ifExists().execute();
|
|
121
|
+
await db.schema.dropTable('sync_subscription_state').ifExists().execute();
|
|
122
|
+
}
|