@sqlite-sync/core 0.12.0 → 0.12.2

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.
@@ -1,178 +0,0 @@
1
- import { d as parseTableName, t as CRDT_EVENT_NO_OP_PAYLOAD } from "./crdt-table-schema-2w_AIpsV.js";
2
- import { sql } from "kysely";
3
- //#region src/sqlite-crdt/stored-value.ts
4
- function createStoredValue({ initialValue, saveToStorage }) {
5
- let currentValue = initialValue;
6
- return {
7
- get current() {
8
- return currentValue;
9
- },
10
- set current(newValue) {
11
- saveToStorage?.(newValue);
12
- currentValue = newValue;
13
- }
14
- };
15
- }
16
- //#endregion
17
- //#region src/sqlite-kv-store.ts
18
- function createKvStoreTableQuery(schema, tableName) {
19
- return schema.createTable(tableName).ifNotExists().addColumn("key", "text", (col) => col.notNull().primaryKey()).addColumn("value", "text", (col) => col.notNull()).modifyEnd(sql`without rowid`);
20
- }
21
- function createSQLiteKvStore({ db, metaTableName }) {
22
- const metaDb = db;
23
- const get = (key) => {
24
- const [result] = metaDb.executePrepared("get-meta-value", { key }, (db, params) => db.selectFrom(metaTableName).where("key", "=", params("key")).select("value").limit((eb) => eb.lit(1)), { loggerLevel: "system" });
25
- return result?.value ?? null;
26
- };
27
- const set = (key, value) => {
28
- metaDb.executePrepared("set-meta-value", {
29
- key,
30
- value
31
- }, (db, params) => db.insertInto(metaTableName).values({
32
- key: params("key"),
33
- value: params("value")
34
- }).onConflict((oc) => oc.doUpdateSet({ value: params("value") })), { loggerLevel: "system" });
35
- };
36
- const remove = (key) => {
37
- metaDb.executePrepared("remove-meta-value", { key }, (db, params) => db.deleteFrom(metaTableName).where("key", "=", params("key")), { loggerLevel: "system" });
38
- };
39
- const getNumberOrDefault = (key, defaultValue) => {
40
- const value = get(key);
41
- if (!value) return defaultValue;
42
- const parsedValue = Number.parseInt(value, 10);
43
- return Number.isNaN(parsedValue) ? defaultValue : parsedValue;
44
- };
45
- return {
46
- get,
47
- set,
48
- remove,
49
- createStringStoredValue: (key, defaultValue) => createStoredValue({
50
- initialValue: get(key) ?? defaultValue,
51
- saveToStorage: (val) => set(key, val)
52
- }),
53
- createNumberStoredValue: (key, defaultValue) => createStoredValue({
54
- initialValue: getNumberOrDefault(key, defaultValue),
55
- saveToStorage: (val) => set(key, val.toString())
56
- })
57
- };
58
- }
59
- //#endregion
60
- //#region src/migrations/system-schema.ts
61
- function createSystemDbConfig({ eventsTableName, updateLogTableName }) {
62
- return {
63
- eventsTable: parseTableName(eventsTableName),
64
- updateLogTable: parseTableName(updateLogTableName)
65
- };
66
- }
67
- const workerDbConfig = createSystemDbConfig({
68
- eventsTableName: "worker.crdt_events",
69
- updateLogTableName: "crdt_update_log"
70
- });
71
- const memoryDbConfig = createSystemDbConfig({
72
- eventsTableName: "persisted_crdt_events",
73
- updateLogTableName: "crdt_update_log"
74
- });
75
- const nonNoOpEventPredicate = `"payload" <> '${CRDT_EVENT_NO_OP_PAYLOAD}'`;
76
- const baseSystemMigrations = [
77
- {
78
- version: 0,
79
- up: (ctx) => {
80
- ctx.execute(`CREATE TABLE IF NOT EXISTS ${ctx.eventsTable.fullIdentifier} (
81
- "sync_id" integer NOT NULL PRIMARY KEY,
82
- "schema_version" integer NOT NULL,
83
- "status" text NOT NULL,
84
- "type" text NOT NULL,
85
- "timestamp" text NOT NULL,
86
- "origin" text NOT NULL,
87
- "dataset" text NOT NULL,
88
- "item_id" text NOT NULL,
89
- "payload" text NOT NULL
90
- )`);
91
- ctx.execute(`CREATE TABLE IF NOT EXISTS ${ctx.updateLogTable.fullIdentifier} (
92
- "dataset" text NOT NULL,
93
- "item_id" text NOT NULL,
94
- "payload" text NOT NULL,
95
- PRIMARY KEY ("item_id", "dataset")
96
- )`);
97
- }
98
- },
99
- {
100
- version: 1,
101
- up: (ctx) => {
102
- ctx.execute(`ALTER TABLE ${ctx.eventsTable.fullIdentifier} ADD COLUMN "source_node_id" TEXT NOT NULL DEFAULT ''`);
103
- }
104
- },
105
- {
106
- version: 2,
107
- up: (ctx) => {
108
- const indexName = `${ctx.eventsTable.table}_status_sync_id_idx`;
109
- ctx.execute(`CREATE INDEX IF NOT EXISTS ${ctx.eventsTable.schema}.${indexName} ON ${ctx.eventsTable.table} ("status", "sync_id")`);
110
- }
111
- },
112
- {
113
- version: 3,
114
- up: (ctx) => {
115
- const indexName = `${ctx.eventsTable.table}_timestamp_status_sync_id_idx`;
116
- ctx.execute(`CREATE INDEX IF NOT EXISTS ${ctx.eventsTable.schema}.${indexName} ON ${ctx.eventsTable.table} ("timestamp", "status", "sync_id")`);
117
- }
118
- },
119
- {
120
- version: 4,
121
- up: (ctx) => {
122
- const indexName = `${ctx.eventsTable.table}_dataset_item_id_non_no_op_idx`;
123
- ctx.execute(`CREATE INDEX IF NOT EXISTS ${ctx.eventsTable.schema}.${indexName} ON ${ctx.eventsTable.table} ("dataset", "item_id") WHERE ${nonNoOpEventPredicate}`);
124
- }
125
- }
126
- ];
127
- function runSystemMigrations(opts) {
128
- const ctx = {
129
- ...opts.dbConfig,
130
- execute: opts.execute
131
- };
132
- for (const migration of opts.migrations) if (migration.version > opts.version.current) opts.transaction(() => {
133
- migration.up(ctx);
134
- opts.version.current = migration.version;
135
- });
136
- }
137
- function applyWorkerDbSchema(db) {
138
- db.executeKysely((kysely) => createKvStoreTableQuery(kysely.schema, "worker.kv"), { loggerLevel: "system" });
139
- const kvStore = createSQLiteKvStore({
140
- db,
141
- metaTableName: "worker.kv"
142
- });
143
- runSystemMigrations({
144
- migrations: baseSystemMigrations,
145
- version: kvStore.createNumberStoredValue("internal-schema-version", -1),
146
- dbConfig: workerDbConfig,
147
- execute: (sql) => db.execute(sql, { loggerLevel: "system" }),
148
- transaction: (callback) => db.executeTransaction(callback)
149
- });
150
- return { kvStore };
151
- }
152
- function applyMemoryDbSchema(db) {
153
- db.execute(`CREATE TABLE IF NOT EXISTS ${memoryDbConfig.eventsTable.fullIdentifier} (
154
- "sync_id" integer NOT NULL PRIMARY KEY,
155
- "schema_version" integer NOT NULL,
156
- "status" text NOT NULL,
157
- "type" text NOT NULL,
158
- "timestamp" text NOT NULL,
159
- "origin" text NOT NULL,
160
- "source_node_id" text NOT NULL DEFAULT '',
161
- "dataset" text NOT NULL,
162
- "item_id" text NOT NULL,
163
- "payload" text NOT NULL
164
- )`, { loggerLevel: "system" });
165
- db.execute(`CREATE INDEX IF NOT EXISTS ${memoryDbConfig.eventsTable.table}_status_sync_id_idx ON ${memoryDbConfig.eventsTable.table} ("status", "sync_id")`, { loggerLevel: "system" });
166
- db.execute(`CREATE INDEX IF NOT EXISTS ${memoryDbConfig.eventsTable.table}_timestamp_status_sync_id_idx ON ${memoryDbConfig.eventsTable.table} ("timestamp", "status", "sync_id")`, { loggerLevel: "system" });
167
- db.execute(`CREATE INDEX IF NOT EXISTS ${memoryDbConfig.eventsTable.table}_dataset_item_id_non_no_op_idx ON ${memoryDbConfig.eventsTable.table} ("dataset", "item_id") WHERE ${nonNoOpEventPredicate}`, { loggerLevel: "system" });
168
- db.execute(`CREATE TABLE IF NOT EXISTS ${memoryDbConfig.updateLogTable.fullIdentifier} (
169
- "dataset" text NOT NULL,
170
- "item_id" text NOT NULL,
171
- "payload" text NOT NULL,
172
- PRIMARY KEY ("item_id", "dataset")
173
- )`, { loggerLevel: "system" });
174
- }
175
- //#endregion
176
- export { memoryDbConfig as a, createKvStoreTableQuery as c, createSystemDbConfig as i, createSQLiteKvStore as l, applyWorkerDbSchema as n, runSystemMigrations as o, baseSystemMigrations as r, workerDbConfig as s, applyMemoryDbSchema as t, createStoredValue as u };
177
-
178
- //# sourceMappingURL=system-schema-C2JZDv6L.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"system-schema-C2JZDv6L.js","names":[],"sources":["../src/sqlite-crdt/stored-value.ts","../src/sqlite-kv-store.ts","../src/migrations/system-schema.ts"],"sourcesContent":["export type StoredValue<T> = {\n get current(): T;\n set current(newValue: T);\n};\n\nexport function createStoredValue<T>({\n initialValue,\n saveToStorage,\n}: {\n initialValue: T;\n saveToStorage?: (value: T) => void;\n}): StoredValue<T> {\n let currentValue = initialValue;\n\n return {\n get current() {\n return currentValue;\n },\n set current(newValue: T) {\n saveToStorage?.(newValue);\n currentValue = newValue;\n },\n };\n}\n","import { type SchemaModule, sql } from \"kysely\";\nimport { createStoredValue } from \"./sqlite-crdt/stored-value\";\nimport type { InternalSQLiteWrapper } from \"./sqlite-db-wrapper\";\n\nexport type KvStoreItem = {\n key: string;\n value: string;\n};\n\nexport function createKvStoreTableQuery(schema: SchemaModule, tableName: string) {\n return schema\n .createTable(tableName)\n .ifNotExists()\n .addColumn(\"key\", \"text\", (col) => col.notNull().primaryKey())\n .addColumn(\"value\", \"text\", (col) => col.notNull())\n .modifyEnd(sql`without rowid`);\n}\n\nexport function createSQLiteKvStore({ db, metaTableName }: { db: InternalSQLiteWrapper<any>; metaTableName: string }) {\n const metaDb = db as InternalSQLiteWrapper<{\n meta: KvStoreItem;\n }>;\n\n const get = (key: string): string | null => {\n const [result] = metaDb.executePrepared(\n \"get-meta-value\",\n { key },\n (db, params) =>\n db\n .selectFrom(metaTableName as \"meta\")\n .where(\"key\", \"=\", params(\"key\"))\n .select(\"value\")\n .limit((eb) => eb.lit(1)),\n { loggerLevel: \"system\" },\n );\n\n return result?.value ?? null;\n };\n\n const set = (key: string, value: string) => {\n metaDb.executePrepared(\n \"set-meta-value\",\n { key, value },\n (db, params) =>\n db\n .insertInto(metaTableName as \"meta\")\n .values({ key: params(\"key\"), value: params(\"value\") })\n .onConflict((oc) => oc.doUpdateSet({ value: params(\"value\") })),\n { loggerLevel: \"system\" },\n );\n };\n\n const remove = (key: string) => {\n metaDb.executePrepared(\n \"remove-meta-value\",\n { key },\n (db, params) => db.deleteFrom(metaTableName as \"meta\").where(\"key\", \"=\", params(\"key\")),\n { loggerLevel: \"system\" },\n );\n };\n\n const getNumberOrDefault = <T>(key: string, defaultValue: T): T | number => {\n const value = get(key);\n if (!value) return defaultValue;\n const parsedValue = Number.parseInt(value, 10);\n return Number.isNaN(parsedValue) ? defaultValue : parsedValue;\n };\n\n return {\n get,\n set,\n remove,\n createStringStoredValue: (key: string, defaultValue: string) =>\n createStoredValue<string>({\n initialValue: get(key) ?? defaultValue,\n saveToStorage: (val) => set(key, val),\n }),\n createNumberStoredValue: (key: string, defaultValue: number) =>\n createStoredValue<number>({\n initialValue: getNumberOrDefault(key, defaultValue),\n saveToStorage: (val) => set(key, val.toString()),\n }),\n };\n}\n\nexport type KvStore = ReturnType<typeof createSQLiteKvStore>;\n","import {\n CRDT_EVENT_NO_OP_PAYLOAD,\n type CrdtUpdateLogItem,\n type PersistedCrdtEvent,\n} from \"../sqlite-crdt/crdt-table-schema\";\nimport type { StoredValue } from \"../sqlite-crdt/stored-value\";\nimport type { SQLiteDbWrapper } from \"../sqlite-db-wrapper\";\nimport { createKvStoreTableQuery, createSQLiteKvStore, type KvStoreItem } from \"../sqlite-kv-store\";\nimport { type ParsedTableName, parseTableName } from \"../utils\";\n\nexport type SystemDbConfig = {\n eventsTable: ParsedTableName;\n updateLogTable: ParsedTableName;\n};\n\nexport function createSystemDbConfig({\n eventsTableName,\n updateLogTableName,\n}: {\n eventsTableName: string;\n updateLogTableName: string;\n}): SystemDbConfig {\n return {\n eventsTable: parseTableName(eventsTableName),\n updateLogTable: parseTableName(updateLogTableName),\n };\n}\n\nexport type WorkerDbSchema = {\n crdt_update_log: CrdtUpdateLogItem;\n \"worker.kv\": KvStoreItem;\n \"worker.crdt_events\": PersistedCrdtEvent;\n};\n\nexport const workerDbConfig = createSystemDbConfig({\n eventsTableName: \"worker.crdt_events\",\n updateLogTableName: \"crdt_update_log\",\n});\n\nexport type MemoryDbSchema = {\n crdt_update_log: CrdtUpdateLogItem;\n persisted_crdt_events: PersistedCrdtEvent;\n};\n\nexport const memoryDbConfig = createSystemDbConfig({\n eventsTableName: \"persisted_crdt_events\",\n updateLogTableName: \"crdt_update_log\",\n});\n\nexport type SystemMigrationContext = SystemDbConfig & {\n execute: (sql: string) => void;\n};\n\nexport type SystemMigration = {\n version: number;\n up: (ctx: SystemMigrationContext) => void;\n};\n\nconst nonNoOpEventPredicate = `\"payload\" <> '${CRDT_EVENT_NO_OP_PAYLOAD}'`;\n\nexport const baseSystemMigrations: SystemMigration[] = [\n {\n version: 0,\n up: (ctx: SystemMigrationContext) => {\n ctx.execute(`CREATE TABLE IF NOT EXISTS ${ctx.eventsTable.fullIdentifier} (\n \"sync_id\" integer NOT NULL PRIMARY KEY,\n \"schema_version\" integer NOT NULL,\n \"status\" text NOT NULL,\n \"type\" text NOT NULL,\n \"timestamp\" text NOT NULL,\n \"origin\" text NOT NULL,\n \"dataset\" text NOT NULL,\n \"item_id\" text NOT NULL,\n \"payload\" text NOT NULL\n )`);\n ctx.execute(`CREATE TABLE IF NOT EXISTS ${ctx.updateLogTable.fullIdentifier} (\n \"dataset\" text NOT NULL,\n \"item_id\" text NOT NULL,\n \"payload\" text NOT NULL,\n PRIMARY KEY (\"item_id\", \"dataset\")\n )`);\n },\n },\n {\n version: 1,\n up: (ctx: SystemMigrationContext) => {\n ctx.execute(`ALTER TABLE ${ctx.eventsTable.fullIdentifier} ADD COLUMN \"source_node_id\" TEXT NOT NULL DEFAULT ''`);\n },\n },\n {\n version: 2,\n up: (ctx: SystemMigrationContext) => {\n const indexName = `${ctx.eventsTable.table}_status_sync_id_idx`;\n ctx.execute(\n `CREATE INDEX IF NOT EXISTS ${ctx.eventsTable.schema}.${indexName} ON ${ctx.eventsTable.table} (\"status\", \"sync_id\")`,\n );\n },\n },\n {\n version: 3,\n up: (ctx: SystemMigrationContext) => {\n const indexName = `${ctx.eventsTable.table}_timestamp_status_sync_id_idx`;\n ctx.execute(\n `CREATE INDEX IF NOT EXISTS ${ctx.eventsTable.schema}.${indexName} ON ${ctx.eventsTable.table} (\"timestamp\", \"status\", \"sync_id\")`,\n );\n },\n },\n {\n version: 4,\n up: (ctx: SystemMigrationContext) => {\n const indexName = `${ctx.eventsTable.table}_dataset_item_id_non_no_op_idx`;\n ctx.execute(\n `CREATE INDEX IF NOT EXISTS ${ctx.eventsTable.schema}.${indexName} ON ${ctx.eventsTable.table} (\"dataset\", \"item_id\") WHERE ${nonNoOpEventPredicate}`,\n );\n },\n },\n];\n\nexport function runSystemMigrations(opts: {\n version: StoredValue<number>;\n migrations: SystemMigration[];\n dbConfig: SystemDbConfig;\n execute: (sql: string) => void;\n transaction: (callback: () => void) => void;\n}): void {\n const ctx: SystemMigrationContext = {\n ...opts.dbConfig,\n execute: opts.execute,\n };\n for (const migration of opts.migrations) {\n if (migration.version > opts.version.current) {\n opts.transaction(() => {\n migration.up(ctx);\n opts.version.current = migration.version;\n });\n }\n }\n}\n\nexport function applyWorkerDbSchema(db: SQLiteDbWrapper<any>) {\n // KV table stays separate — needed before system migrations for version tracking\n db.executeKysely((kysely) => createKvStoreTableQuery(kysely.schema, \"worker.kv\"), { loggerLevel: \"system\" });\n\n // System schema migrations (each in its own transaction)\n const kvStore = createSQLiteKvStore({ db, metaTableName: \"worker.kv\" });\n runSystemMigrations({\n migrations: baseSystemMigrations,\n version: kvStore.createNumberStoredValue(\"internal-schema-version\", -1),\n dbConfig: workerDbConfig,\n execute: (sql) => db.execute(sql, { loggerLevel: \"system\" }),\n transaction: (callback) => db.executeTransaction(callback),\n });\n\n return { kvStore };\n}\n\nexport function applyMemoryDbSchema(db: SQLiteDbWrapper<any>) {\n db.execute(\n `CREATE TABLE IF NOT EXISTS ${memoryDbConfig.eventsTable.fullIdentifier} (\n \"sync_id\" integer NOT NULL PRIMARY KEY,\n \"schema_version\" integer NOT NULL,\n \"status\" text NOT NULL,\n \"type\" text NOT NULL,\n \"timestamp\" text NOT NULL,\n \"origin\" text NOT NULL,\n \"source_node_id\" text NOT NULL DEFAULT '',\n \"dataset\" text NOT NULL,\n \"item_id\" text NOT NULL,\n \"payload\" text NOT NULL\n )`,\n { loggerLevel: \"system\" },\n );\n db.execute(\n `CREATE INDEX IF NOT EXISTS ${memoryDbConfig.eventsTable.table}_status_sync_id_idx ON ${memoryDbConfig.eventsTable.table} (\"status\", \"sync_id\")`,\n {\n loggerLevel: \"system\",\n },\n );\n db.execute(\n `CREATE INDEX IF NOT EXISTS ${memoryDbConfig.eventsTable.table}_timestamp_status_sync_id_idx ON ${memoryDbConfig.eventsTable.table} (\"timestamp\", \"status\", \"sync_id\")`,\n {\n loggerLevel: \"system\",\n },\n );\n db.execute(\n `CREATE INDEX IF NOT EXISTS ${memoryDbConfig.eventsTable.table}_dataset_item_id_non_no_op_idx ON ${memoryDbConfig.eventsTable.table} (\"dataset\", \"item_id\") WHERE ${nonNoOpEventPredicate}`,\n {\n loggerLevel: \"system\",\n },\n );\n db.execute(\n `CREATE TABLE IF NOT EXISTS ${memoryDbConfig.updateLogTable.fullIdentifier} (\n \"dataset\" text NOT NULL,\n \"item_id\" text NOT NULL,\n \"payload\" text NOT NULL,\n PRIMARY KEY (\"item_id\", \"dataset\")\n)`,\n { loggerLevel: \"system\" },\n );\n}\n"],"mappings":"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"}