@livestore/common 0.3.0-dev.10 → 0.3.0-dev.12

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 (116) hide show
  1. package/dist/.tsbuildinfo +1 -1
  2. package/dist/adapter-types.d.ts +62 -30
  3. package/dist/adapter-types.d.ts.map +1 -1
  4. package/dist/adapter-types.js +12 -0
  5. package/dist/adapter-types.js.map +1 -1
  6. package/dist/devtools/devtool-message-leader.d.ts +2 -0
  7. package/dist/devtools/devtool-message-leader.d.ts.map +1 -0
  8. package/dist/devtools/devtool-message-leader.js +2 -0
  9. package/dist/devtools/devtool-message-leader.js.map +1 -0
  10. package/dist/devtools/devtools-bridge.d.ts +10 -7
  11. package/dist/devtools/devtools-bridge.d.ts.map +1 -1
  12. package/dist/devtools/devtools-messages-client-session.d.ts +370 -0
  13. package/dist/devtools/devtools-messages-client-session.d.ts.map +1 -0
  14. package/dist/devtools/devtools-messages-client-session.js +77 -0
  15. package/dist/devtools/devtools-messages-client-session.js.map +1 -0
  16. package/dist/devtools/devtools-messages-common.d.ts +57 -0
  17. package/dist/devtools/devtools-messages-common.d.ts.map +1 -0
  18. package/dist/devtools/devtools-messages-common.js +44 -0
  19. package/dist/devtools/devtools-messages-common.js.map +1 -0
  20. package/dist/devtools/devtools-messages-leader.d.ts +437 -0
  21. package/dist/devtools/devtools-messages-leader.d.ts.map +1 -0
  22. package/dist/devtools/devtools-messages-leader.js +132 -0
  23. package/dist/devtools/devtools-messages-leader.js.map +1 -0
  24. package/dist/devtools/devtools-messages.d.ts +3 -580
  25. package/dist/devtools/devtools-messages.d.ts.map +1 -1
  26. package/dist/devtools/devtools-messages.js +3 -174
  27. package/dist/devtools/devtools-messages.js.map +1 -1
  28. package/dist/init-singleton-tables.d.ts +2 -2
  29. package/dist/init-singleton-tables.d.ts.map +1 -1
  30. package/dist/init-singleton-tables.js.map +1 -1
  31. package/dist/leader-thread/LeaderSyncProcessor.d.ts +4 -4
  32. package/dist/leader-thread/LeaderSyncProcessor.d.ts.map +1 -1
  33. package/dist/leader-thread/LeaderSyncProcessor.js +64 -36
  34. package/dist/leader-thread/LeaderSyncProcessor.js.map +1 -1
  35. package/dist/leader-thread/apply-mutation.d.ts.map +1 -1
  36. package/dist/leader-thread/apply-mutation.js +4 -4
  37. package/dist/leader-thread/apply-mutation.js.map +1 -1
  38. package/dist/leader-thread/connection.d.ts +34 -6
  39. package/dist/leader-thread/connection.d.ts.map +1 -1
  40. package/dist/leader-thread/connection.js +22 -7
  41. package/dist/leader-thread/connection.js.map +1 -1
  42. package/dist/leader-thread/leader-worker-devtools.js +67 -36
  43. package/dist/leader-thread/leader-worker-devtools.js.map +1 -1
  44. package/dist/leader-thread/make-leader-thread-layer.d.ts +6 -6
  45. package/dist/leader-thread/make-leader-thread-layer.d.ts.map +1 -1
  46. package/dist/leader-thread/make-leader-thread-layer.js +38 -13
  47. package/dist/leader-thread/make-leader-thread-layer.js.map +1 -1
  48. package/dist/leader-thread/mutationlog.d.ts +4 -4
  49. package/dist/leader-thread/mutationlog.d.ts.map +1 -1
  50. package/dist/leader-thread/mutationlog.js +6 -6
  51. package/dist/leader-thread/mutationlog.js.map +1 -1
  52. package/dist/leader-thread/pull-queue-set.d.ts.map +1 -1
  53. package/dist/leader-thread/recreate-db.d.ts +4 -2
  54. package/dist/leader-thread/recreate-db.d.ts.map +1 -1
  55. package/dist/leader-thread/recreate-db.js +27 -22
  56. package/dist/leader-thread/recreate-db.js.map +1 -1
  57. package/dist/leader-thread/types.d.ts +32 -17
  58. package/dist/leader-thread/types.d.ts.map +1 -1
  59. package/dist/leader-thread/types.js +0 -2
  60. package/dist/leader-thread/types.js.map +1 -1
  61. package/dist/query-builder/api.d.ts +2 -2
  62. package/dist/query-builder/api.d.ts.map +1 -1
  63. package/dist/query-builder/impl.js.map +1 -1
  64. package/dist/query-builder/impl.test.js +16 -1
  65. package/dist/query-builder/impl.test.js.map +1 -1
  66. package/dist/query-info.d.ts +3 -3
  67. package/dist/query-info.d.ts.map +1 -1
  68. package/dist/rehydrate-from-mutationlog.d.ts +3 -3
  69. package/dist/rehydrate-from-mutationlog.d.ts.map +1 -1
  70. package/dist/rehydrate-from-mutationlog.js.map +1 -1
  71. package/dist/schema/EventId.d.ts +1 -0
  72. package/dist/schema/EventId.d.ts.map +1 -1
  73. package/dist/schema/EventId.js +3 -0
  74. package/dist/schema/EventId.js.map +1 -1
  75. package/dist/schema/mutations.d.ts +1 -1
  76. package/dist/schema/system-tables.d.ts +1 -1
  77. package/dist/schema-management/common.d.ts +3 -3
  78. package/dist/schema-management/common.d.ts.map +1 -1
  79. package/dist/schema-management/common.js.map +1 -1
  80. package/dist/schema-management/migrations.d.ts +5 -5
  81. package/dist/schema-management/migrations.d.ts.map +1 -1
  82. package/dist/schema-management/migrations.js +6 -1
  83. package/dist/schema-management/migrations.js.map +1 -1
  84. package/dist/sync/ClientSessionSyncProcessor.d.ts +8 -12
  85. package/dist/sync/ClientSessionSyncProcessor.d.ts.map +1 -1
  86. package/dist/sync/ClientSessionSyncProcessor.js +31 -13
  87. package/dist/sync/ClientSessionSyncProcessor.js.map +1 -1
  88. package/dist/sync/next/test/mutation-fixtures.d.ts +7 -7
  89. package/dist/version.d.ts +1 -1
  90. package/dist/version.js +1 -1
  91. package/package.json +3 -3
  92. package/src/adapter-types.ts +52 -33
  93. package/src/devtools/devtools-bridge.ts +10 -7
  94. package/src/devtools/devtools-messages-client-session.ts +125 -0
  95. package/src/devtools/devtools-messages-common.ts +81 -0
  96. package/src/devtools/devtools-messages-leader.ts +176 -0
  97. package/src/devtools/devtools-messages.ts +3 -246
  98. package/src/init-singleton-tables.ts +2 -2
  99. package/src/leader-thread/LeaderSyncProcessor.ts +94 -46
  100. package/src/leader-thread/apply-mutation.ts +5 -5
  101. package/src/leader-thread/connection.ts +54 -9
  102. package/src/leader-thread/leader-worker-devtools.ts +105 -41
  103. package/src/leader-thread/make-leader-thread-layer.ts +55 -22
  104. package/src/leader-thread/mutationlog.ts +9 -9
  105. package/src/leader-thread/recreate-db.ts +33 -24
  106. package/src/leader-thread/types.ts +38 -21
  107. package/src/query-builder/api.ts +3 -3
  108. package/src/query-builder/impl.test.ts +22 -1
  109. package/src/query-builder/impl.ts +2 -2
  110. package/src/query-info.ts +3 -3
  111. package/src/rehydrate-from-mutationlog.ts +3 -3
  112. package/src/schema/EventId.ts +4 -0
  113. package/src/schema-management/common.ts +3 -3
  114. package/src/schema-management/migrations.ts +12 -8
  115. package/src/sync/ClientSessionSyncProcessor.ts +38 -22
  116. package/src/version.ts +1 -1
@@ -22,6 +22,9 @@ export const ROOT = { global: -1, local: localDefault };
22
22
  export const isGreaterThan = (a, b) => {
23
23
  return a.global > b.global || (a.global === b.global && a.local > b.local);
24
24
  };
25
+ export const isGreaterThanOrEqual = (a, b) => {
26
+ return a.global > b.global || (a.global === b.global && a.local >= b.local);
27
+ };
25
28
  export const make = (id) => {
26
29
  return Schema.is(EventId)(id) ? id : Schema.decodeSync(EventId)(id);
27
30
  };
@@ -1 +1 @@
1
- {"version":3,"file":"EventId.js","sourceRoot":"","sources":["../../src/schema/EventId.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAA;AAGvD,MAAM,CAAC,MAAM,YAAY,GAAG,KAAK,CAAC,OAAO,EAAgB,CAAA;AACzD,MAAM,CAAC,MAAM,YAAY,GAAG,MAAM,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAA;AAGtE,MAAM,CAAC,MAAM,aAAa,GAAG,KAAK,CAAC,OAAO,EAAiB,CAAA;AAC3D,MAAM,CAAC,MAAM,aAAa,GAAG,MAAM,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAA;AAExE,MAAM,CAAC,MAAM,YAAY,GAAG,CAAwB,CAAA;AAUpD,MAAM,CAAC,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC;IACnC,MAAM,EAAE,aAAa;IACrB,KAAK,EAAE,YAAY;CACpB,CAAC,CAAC,WAAW,CAAC,EAAE,KAAK,EAAE,mBAAmB,EAAE,CAAC,CAAA;AAE9C;;GAEG;AACH,MAAM,CAAC,MAAM,OAAO,GAAG,CAAC,CAAU,EAAE,CAAU,EAAE,EAAE;IAChD,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,MAAM,EAAE,CAAC;QAC1B,OAAO,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,MAAM,CAAA;IAC5B,CAAC;IACD,OAAO,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,CAAA;AAC1B,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,OAAO,GAAG,CAAC,CAAU,EAAE,CAAU,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,KAAK,CAAA;AAI/F,MAAM,CAAC,MAAM,IAAI,GAAG,EAAE,MAAM,EAAE,CAAC,CAAyB,EAAE,KAAK,EAAE,YAAY,EAAoB,CAAA;AAEjG,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,CAAU,EAAE,CAAU,EAAE,EAAE;IACtD,OAAO,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,CAAA;AAC5E,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,IAAI,GAAG,CAAC,EAAoC,EAAW,EAAE;IACpE,OAAO,MAAM,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,CAAA;AACrE,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,QAAQ,GAAG,CAAC,EAAW,EAAE,OAAgB,EAAe,EAAE;IACrE,IAAI,OAAO,EAAE,CAAC;QACZ,OAAO,EAAE,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,CAAC,MAAM,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,KAAK,GAAG,CAAC,CAAwB,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAA;IAClG,CAAC;IAED,OAAO;QACL,EAAE,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC,MAAM,GAAG,CAAC,CAAyB,EAAE,KAAK,EAAE,YAAY,EAAE;QAC5E,iEAAiE;QACjE,QAAQ,EAAE,EAAE,MAAM,EAAE,EAAE,CAAC,MAAM,EAAE,KAAK,EAAE,YAAY,EAAE;KACrD,CAAA;AACH,CAAC,CAAA"}
1
+ {"version":3,"file":"EventId.js","sourceRoot":"","sources":["../../src/schema/EventId.ts"],"names":[],"mappings":"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"}
@@ -96,10 +96,10 @@ export declare const rawSqlMutation: MutationDef<"livestore.RawSql", {
96
96
  } | undefined;
97
97
  readonly writeTables?: readonly string[] | undefined;
98
98
  }, {
99
+ readonly sql: string;
99
100
  readonly bindValues?: {
100
101
  readonly [x: string]: any;
101
102
  } | undefined;
102
- readonly sql: string;
103
103
  readonly writeTables?: ReadonlySet<string> | undefined;
104
104
  }>;
105
105
  export type RawSqlMutation = typeof rawSqlMutation;
@@ -349,7 +349,7 @@ export declare const mutationLogMetaTable: import("./table-def.js").TableDef<{
349
349
  disableAutomaticIdColumn: true;
350
350
  deriveMutations: never;
351
351
  isSingleColumn: false;
352
- requiredInsertColumnNames: "schemaHash" | "idGlobal" | "idLocal" | "parentIdGlobal" | "parentIdLocal" | "mutation" | "argsJson" | "syncMetadataJson";
352
+ requiredInsertColumnNames: "schemaHash" | "idGlobal" | "idLocal" | "mutation" | "parentIdGlobal" | "parentIdLocal" | "argsJson" | "syncMetadataJson";
353
353
  }, Schema.Schema<{
354
354
  readonly idGlobal: number & import("effect/Brand").Brand<"GlobalEventId">;
355
355
  readonly idLocal: number & import("effect/Brand").Brand<"LocalEventId">;
@@ -1,7 +1,7 @@
1
- import type { SynchronousDatabase } from '../adapter-types.js';
1
+ import type { SqliteDb } from '../adapter-types.js';
2
2
  import type { ParamsObject } from '../util.js';
3
- export declare const dbExecute: (db: SynchronousDatabase, queryStr: string, bindValues?: ParamsObject) => void;
4
- export declare const dbSelect: <T>(db: SynchronousDatabase, queryStr: string, bindValues?: ParamsObject) => readonly T[];
3
+ export declare const dbExecute: (db: SqliteDb, queryStr: string, bindValues?: ParamsObject) => void;
4
+ export declare const dbSelect: <T>(db: SqliteDb, queryStr: string, bindValues?: ParamsObject) => readonly T[];
5
5
  export interface SchemaManager {
6
6
  getMutationDefInfos: () => ReadonlyArray<MutationDefInfo>;
7
7
  setMutationDefInfo: (mutationDefInfo: MutationDefInfo) => void;
@@ -1 +1 @@
1
- {"version":3,"file":"common.d.ts","sourceRoot":"","sources":["../../src/schema-management/common.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAA;AAC9D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AAO9C,eAAO,MAAM,SAAS,OAAQ,mBAAmB,YAAY,MAAM,eAAe,YAAY,SAY7F,CAAA;AAED,eAAO,MAAM,QAAQ,GAAI,CAAC,MAAM,mBAAmB,YAAY,MAAM,eAAe,YAAY,iBAU/F,CAAA;AAED,MAAM,WAAW,aAAa;IAC5B,mBAAmB,EAAE,MAAM,aAAa,CAAC,eAAe,CAAC,CAAA;IAEzD,kBAAkB,EAAE,CAAC,eAAe,EAAE,eAAe,KAAK,IAAI,CAAA;CAC/D;AAED,MAAM,MAAM,eAAe,GAAG;IAC5B,YAAY,EAAE,MAAM,CAAA;IACpB,UAAU,EAAE,MAAM,CAAA;CACnB,CAAA"}
1
+ {"version":3,"file":"common.d.ts","sourceRoot":"","sources":["../../src/schema-management/common.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAA;AACnD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AAO9C,eAAO,MAAM,SAAS,OAAQ,QAAQ,YAAY,MAAM,eAAe,YAAY,SAYlF,CAAA;AAED,eAAO,MAAM,QAAQ,GAAI,CAAC,MAAM,QAAQ,YAAY,MAAM,eAAe,YAAY,iBAUpF,CAAA;AAED,MAAM,WAAW,aAAa;IAC5B,mBAAmB,EAAE,MAAM,aAAa,CAAC,eAAe,CAAC,CAAA;IAEzD,kBAAkB,EAAE,CAAC,eAAe,EAAE,eAAe,KAAK,IAAI,CAAA;CAC/D;AAED,MAAM,MAAM,eAAe,GAAG;IAC5B,YAAY,EAAE,MAAM,CAAA;IACpB,UAAU,EAAE,MAAM,CAAA;CACnB,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"common.js","sourceRoot":"","sources":["../../src/schema-management/common.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAA;AAE9C,oCAAoC;AACpC,uGAAuG;AACvG,2DAA2D;AAE3D,MAAM,CAAC,MAAM,SAAS,GAAG,CAAC,EAAuB,EAAE,QAAgB,EAAE,UAAyB,EAAE,EAAE;IAChG,uCAAuC;IACvC,eAAe;IACf,MAAM,IAAI,GAAG,EAAE,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAA;IACjC,kCAAkC;IAClC,IAAI;IAEJ,MAAM,kBAAkB,GAAG,UAAU,CAAC,CAAC,CAAC,iBAAiB,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,SAAS,CAAA;IAE3F,IAAI,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAA;IAEhC,IAAI,CAAC,QAAQ,EAAE,CAAA;AACjB,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,QAAQ,GAAG,CAAI,EAAuB,EAAE,QAAgB,EAAE,UAAyB,EAAE,EAAE;IAClG,uCAAuC;IACvC,eAAe;IACf,MAAM,IAAI,GAAG,EAAE,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAA;IACjC,kCAAkC;IAClC,IAAI;IAEJ,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAI,UAAU,CAAC,CAAC,CAAC,iBAAiB,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAA;IAC5F,IAAI,CAAC,QAAQ,EAAE,CAAA;IACf,OAAO,GAAG,CAAA;AACZ,CAAC,CAAA"}
1
+ {"version":3,"file":"common.js","sourceRoot":"","sources":["../../src/schema-management/common.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAA;AAE9C,oCAAoC;AACpC,uGAAuG;AACvG,2DAA2D;AAE3D,MAAM,CAAC,MAAM,SAAS,GAAG,CAAC,EAAY,EAAE,QAAgB,EAAE,UAAyB,EAAE,EAAE;IACrF,uCAAuC;IACvC,eAAe;IACf,MAAM,IAAI,GAAG,EAAE,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAA;IACjC,kCAAkC;IAClC,IAAI;IAEJ,MAAM,kBAAkB,GAAG,UAAU,CAAC,CAAC,CAAC,iBAAiB,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,SAAS,CAAA;IAE3F,IAAI,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAA;IAEhC,IAAI,CAAC,QAAQ,EAAE,CAAA;AACjB,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,QAAQ,GAAG,CAAI,EAAY,EAAE,QAAgB,EAAE,UAAyB,EAAE,EAAE;IACvF,uCAAuC;IACvC,eAAe;IACf,MAAM,IAAI,GAAG,EAAE,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAA;IACjC,kCAAkC;IAClC,IAAI;IAEJ,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAI,UAAU,CAAC,CAAC,CAAC,iBAAiB,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAA;IAC5F,IAAI,CAAC,QAAQ,EAAE,CAAA;IACf,OAAO,GAAG,CAAA;AACZ,CAAC,CAAA"}
@@ -1,19 +1,19 @@
1
1
  import { SqliteAst } from '@livestore/db-schema';
2
2
  import { Effect } from '@livestore/utils/effect';
3
- import type { SynchronousDatabase } from '../adapter-types.js';
3
+ import type { MigrationsReport, SqliteDb, UnexpectedError } from '../adapter-types.js';
4
4
  import type { LiveStoreSchema } from '../schema/mod.js';
5
5
  import type { SchemaManager } from './common.js';
6
- export declare const makeSchemaManager: (db: SynchronousDatabase) => Effect.Effect<SchemaManager>;
6
+ export declare const makeSchemaManager: (db: SqliteDb) => Effect.Effect<SchemaManager>;
7
7
  export declare const migrateDb: ({ db, schema, onProgress, }: {
8
- db: SynchronousDatabase;
8
+ db: SqliteDb;
9
9
  schema: LiveStoreSchema;
10
10
  onProgress?: (opts: {
11
11
  done: number;
12
12
  total: number;
13
13
  }) => Effect.Effect<void>;
14
- }) => Effect.Effect<void, import("../adapter-types.js").UnexpectedError, never>;
14
+ }) => Effect.Effect<MigrationsReport, UnexpectedError>;
15
15
  export declare const migrateTable: ({ db, tableAst, schemaHash, behaviour, skipMetaTable, }: {
16
- db: SynchronousDatabase;
16
+ db: SqliteDb;
17
17
  tableAst: SqliteAst.Table;
18
18
  schemaHash?: number;
19
19
  behaviour: "drop-and-recreate" | "create-if-not-exists";
@@ -1 +1 @@
1
- {"version":3,"file":"migrations.d.ts","sourceRoot":"","sources":["../../src/schema-management/migrations.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAa,MAAM,sBAAsB,CAAA;AAE3D,OAAO,EAAE,MAAM,EAA0B,MAAM,yBAAyB,CAAA;AAExE,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAA;AAC9D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAA;AAUvD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AAMhD,eAAO,MAAM,iBAAiB,OAAQ,mBAAmB,KAAG,MAAM,CAAC,MAAM,CAAC,aAAa,CAwBnF,CAAA;AAGJ,eAAO,MAAM,SAAS,gCAInB;IACD,EAAE,EAAE,mBAAmB,CAAA;IACvB,MAAM,EAAE,eAAe,CAAA;IACvB,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,KAAK,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;CAC5E,8EAqDG,CAAA;AAEJ,eAAO,MAAM,YAAY,4DAMtB;IACD,EAAE,EAAE,mBAAmB,CAAA;IACvB,QAAQ,EAAE,SAAS,CAAC,KAAK,CAAA;IACzB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,SAAS,EAAE,mBAAmB,GAAG,sBAAsB,CAAA;IACvD,aAAa,CAAC,EAAE,OAAO,CAAA;CACxB,sCAqCE,CAAA;AAOH,eAAO,MAAM,cAAc,aAAc,SAAS,CAAC,KAAK,WAQvD,CAAA"}
1
+ {"version":3,"file":"migrations.d.ts","sourceRoot":"","sources":["../../src/schema-management/migrations.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAa,MAAM,sBAAsB,CAAA;AAE3D,OAAO,EAAE,MAAM,EAA0B,MAAM,yBAAyB,CAAA;AAExE,OAAO,KAAK,EAAE,gBAAgB,EAAyB,QAAQ,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAA;AAC7G,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAA;AAUvD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AAMhD,eAAO,MAAM,iBAAiB,OAAQ,QAAQ,KAAG,MAAM,CAAC,MAAM,CAAC,aAAa,CAwBxE,CAAA;AAGJ,eAAO,MAAM,SAAS,gCAInB;IACD,EAAE,EAAE,QAAQ,CAAA;IACZ,MAAM,EAAE,eAAe,CAAA;IACvB,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,KAAK,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;CAC5E,KAAG,MAAM,CAAC,MAAM,CAAC,gBAAgB,EAAE,eAAe,CAyD/C,CAAA;AAEJ,eAAO,MAAM,YAAY,4DAMtB;IACD,EAAE,EAAE,QAAQ,CAAA;IACZ,QAAQ,EAAE,SAAS,CAAC,KAAK,CAAA;IACzB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,SAAS,EAAE,mBAAmB,GAAG,sBAAsB,CAAA;IACvD,aAAa,CAAC,EAAE,OAAO,CAAA;CACxB,sCAqCE,CAAA;AAOH,eAAO,MAAM,cAAc,aAAc,SAAS,CAAC,KAAK,WAQvD,CAAA"}
@@ -41,6 +41,7 @@ export const migrateDb = ({ db, schema, onProgress, }) => Effect.gen(function* (
41
41
  ...Array.from(schema.tables.values()).filter((_) => _.sqliteDef.name !== SCHEMA_META_TABLE),
42
42
  ]);
43
43
  const tablesToMigrate = new Set();
44
+ const migrationsReportEntries = [];
44
45
  for (const tableDef of tableDefs) {
45
46
  const tableAst = tableDef.sqliteDef.ast;
46
47
  const tableName = tableAst.name;
@@ -48,7 +49,10 @@ export const migrateDb = ({ db, schema, onProgress, }) => Effect.gen(function* (
48
49
  const schemaHash = SqliteAst.hash(tableAst);
49
50
  if (schemaHash !== dbSchemaHash) {
50
51
  tablesToMigrate.add({ tableAst, schemaHash });
51
- console.log(`Schema hash mismatch for table '${tableName}' (DB: ${dbSchemaHash}, expected: ${schemaHash}), migrating table...`);
52
+ migrationsReportEntries.push({
53
+ tableName,
54
+ hashes: { expected: schemaHash, actual: dbSchemaHash },
55
+ });
52
56
  }
53
57
  }
54
58
  let processedTables = 0;
@@ -60,6 +64,7 @@ export const migrateDb = ({ db, schema, onProgress, }) => Effect.gen(function* (
60
64
  yield* onProgress({ done: processedTables, total: tablesCount });
61
65
  }
62
66
  }
67
+ return { migrations: migrationsReportEntries };
63
68
  });
64
69
  export const migrateTable = ({ db, tableAst, schemaHash = SqliteAst.hash(tableAst), behaviour, skipMetaTable = false, }) => Effect.gen(function* () {
65
70
  // console.log(`Migrating table '${tableAst.name}'...`)
@@ -1 +1 @@
1
- {"version":3,"file":"migrations.js","sourceRoot":"","sources":["../../src/schema-management/migrations.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"migrations.js","sourceRoot":"","sources":["../../src/schema-management/migrations.ts"],"names":[],"mappings":"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"}
@@ -1,11 +1,10 @@
1
- import type { Scope } from '@livestore/utils/effect';
2
- import { Effect } from '@livestore/utils/effect';
1
+ import type { Runtime, Scope } from '@livestore/utils/effect';
2
+ import { Effect, Subscribable } from '@livestore/utils/effect';
3
3
  import * as otel from '@opentelemetry/api';
4
- import type { ClientSessionLeaderThreadProxy, UnexpectedError } from '../adapter-types.js';
5
- import * as EventId from '../schema/EventId.js';
4
+ import type { ClientSession, UnexpectedError } from '../adapter-types.js';
6
5
  import { type LiveStoreSchema } from '../schema/mod.js';
7
6
  import * as MutationEvent from '../schema/MutationEvent.js';
8
- import { SyncState } from './syncstate.js';
7
+ import * as SyncState from './syncstate.js';
9
8
  /**
10
9
  * Rebase behaviour:
11
10
  * - We continously pull mutations from the leader and apply them to the local store.
@@ -15,11 +14,10 @@ import { SyncState } from './syncstate.js';
15
14
  * - We also want to avoid "backwards-jumping" in the UI, so we'll transactionally apply a read model changes during a rebase.
16
15
  * - We might need to make the rebase behaviour configurable e.g. to let users manually trigger a rebase
17
16
  */
18
- export declare const makeClientSessionSyncProcessor: ({ schema, initialLeaderHead, pushToLeader, pullFromLeader, applyMutation, rollback, refreshTables, span, }: {
17
+ export declare const makeClientSessionSyncProcessor: ({ schema, clientSession, runtime, applyMutation, rollback, refreshTables, span, }: {
19
18
  schema: LiveStoreSchema;
20
- initialLeaderHead: EventId.EventId;
21
- pushToLeader: (batch: ReadonlyArray<MutationEvent.AnyEncoded>) => void;
22
- pullFromLeader: ClientSessionLeaderThreadProxy["mutations"]["pull"];
19
+ clientSession: ClientSession;
20
+ runtime: Runtime.Runtime<Scope.Scope>;
23
21
  applyMutation: (mutationEventDecoded: MutationEvent.PartialAnyDecoded, options: {
24
22
  otelContext: otel.Context;
25
23
  withChangeset: boolean;
@@ -38,8 +36,6 @@ export interface ClientSessionSyncProcessor {
38
36
  writeTables: Set<string>;
39
37
  };
40
38
  boot: Effect.Effect<void, UnexpectedError, Scope.Scope>;
41
- syncStateRef: {
42
- current: SyncState;
43
- };
39
+ syncState: Subscribable.Subscribable<SyncState.SyncState>;
44
40
  }
45
41
  //# sourceMappingURL=ClientSessionSyncProcessor.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"ClientSessionSyncProcessor.d.ts","sourceRoot":"","sources":["../../src/sync/ClientSessionSyncProcessor.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,yBAAyB,CAAA;AACpD,OAAO,EAAE,MAAM,EAAkB,MAAM,yBAAyB,CAAA;AAChE,OAAO,KAAK,IAAI,MAAM,oBAAoB,CAAA;AAE1C,OAAO,KAAK,EAAE,8BAA8B,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAA;AAC1F,OAAO,KAAK,OAAO,MAAM,sBAAsB,CAAA;AAC/C,OAAO,EAAE,KAAK,eAAe,EAAE,MAAM,kBAAkB,CAAA;AACvD,OAAO,KAAK,aAAa,MAAM,4BAA4B,CAAA;AAC3D,OAAO,EAAE,SAAS,EAAmB,MAAM,gBAAgB,CAAA;AAE3D;;;;;;;;GAQG;AACH,eAAO,MAAM,8BAA8B,+GASxC;IACD,MAAM,EAAE,eAAe,CAAA;IACvB,iBAAiB,EAAE,OAAO,CAAC,OAAO,CAAA;IAClC,YAAY,EAAE,CAAC,KAAK,EAAE,aAAa,CAAC,aAAa,CAAC,UAAU,CAAC,KAAK,IAAI,CAAA;IACtE,cAAc,EAAE,8BAA8B,CAAC,WAAW,CAAC,CAAC,MAAM,CAAC,CAAA;IACnE,aAAa,EAAE,CACb,oBAAoB,EAAE,aAAa,CAAC,iBAAiB,EACrD,OAAO,EAAE;QAAE,WAAW,EAAE,IAAI,CAAC,OAAO,CAAC;QAAC,aAAa,EAAE,OAAO,CAAA;KAAE,KAC3D;QACH,WAAW,EAAE,GAAG,CAAC,MAAM,CAAC,CAAA;QACxB,gBAAgB,EAAE,UAAU,GAAG,SAAS,CAAA;KACzC,CAAA;IACD,QAAQ,EAAE,CAAC,SAAS,EAAE,UAAU,KAAK,IAAI,CAAA;IACzC,aAAa,EAAE,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC,KAAK,IAAI,CAAA;IAC5C,IAAI,EAAE,IAAI,CAAC,IAAI,CAAA;CAChB,KAAG,0BAwJH,CAAA;AAED,MAAM,WAAW,0BAA0B;IACzC,IAAI,EAAE,CACJ,KAAK,EAAE,aAAa,CAAC,aAAa,CAAC,iBAAiB,CAAC,EACrD,OAAO,EAAE;QAAE,WAAW,EAAE,IAAI,CAAC,OAAO,CAAA;KAAE,KACnC;QACH,WAAW,EAAE,GAAG,CAAC,MAAM,CAAC,CAAA;KACzB,CAAA;IACD,IAAI,EAAE,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,eAAe,EAAE,KAAK,CAAC,KAAK,CAAC,CAAA;IAEvD,YAAY,EAAE;QAAE,OAAO,EAAE,SAAS,CAAA;KAAE,CAAA;CACrC"}
1
+ {"version":3,"file":"ClientSessionSyncProcessor.d.ts","sourceRoot":"","sources":["../../src/sync/ClientSessionSyncProcessor.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,yBAAyB,CAAA;AAC7D,OAAO,EAAE,MAAM,EAAyB,YAAY,EAAE,MAAM,yBAAyB,CAAA;AACrF,OAAO,KAAK,IAAI,MAAM,oBAAoB,CAAA;AAE1C,OAAO,KAAK,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAA;AAEzE,OAAO,EAAE,KAAK,eAAe,EAAE,MAAM,kBAAkB,CAAA;AACvD,OAAO,KAAK,aAAa,MAAM,4BAA4B,CAAA;AAC3D,OAAO,KAAK,SAAS,MAAM,gBAAgB,CAAA;AAE3C;;;;;;;;GAQG;AACH,eAAO,MAAM,8BAA8B,sFAQxC;IACD,MAAM,EAAE,eAAe,CAAA;IACvB,aAAa,EAAE,aAAa,CAAA;IAC5B,OAAO,EAAE,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAA;IACrC,aAAa,EAAE,CACb,oBAAoB,EAAE,aAAa,CAAC,iBAAiB,EACrD,OAAO,EAAE;QAAE,WAAW,EAAE,IAAI,CAAC,OAAO,CAAC;QAAC,aAAa,EAAE,OAAO,CAAA;KAAE,KAC3D;QACH,WAAW,EAAE,GAAG,CAAC,MAAM,CAAC,CAAA;QACxB,gBAAgB,EAAE,UAAU,GAAG,SAAS,CAAA;KACzC,CAAA;IACD,QAAQ,EAAE,CAAC,SAAS,EAAE,UAAU,KAAK,IAAI,CAAA;IACzC,aAAa,EAAE,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC,KAAK,IAAI,CAAA;IAC5C,IAAI,EAAE,IAAI,CAAC,IAAI,CAAA;CAChB,KAAG,0BA0KH,CAAA;AAED,MAAM,WAAW,0BAA0B;IACzC,IAAI,EAAE,CACJ,KAAK,EAAE,aAAa,CAAC,aAAa,CAAC,iBAAiB,CAAC,EACrD,OAAO,EAAE;QAAE,WAAW,EAAE,IAAI,CAAC,OAAO,CAAA;KAAE,KACnC;QACH,WAAW,EAAE,GAAG,CAAC,MAAM,CAAC,CAAA;KACzB,CAAA;IACD,IAAI,EAAE,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,eAAe,EAAE,KAAK,CAAC,KAAK,CAAC,CAAA;IAEvD,SAAS,EAAE,YAAY,CAAC,YAAY,CAAC,SAAS,CAAC,SAAS,CAAC,CAAA;CAC1D"}
@@ -1,9 +1,9 @@
1
1
  import { LS_DEV, shouldNeverHappen, TRACE_VERBOSE } from '@livestore/utils';
2
- import { Effect, Schema, Stream } from '@livestore/utils/effect';
2
+ import { Effect, Queue, Schema, Stream, Subscribable } from '@livestore/utils/effect';
3
3
  import * as otel from '@opentelemetry/api';
4
4
  import * as EventId from '../schema/EventId.js';
5
5
  import * as MutationEvent from '../schema/MutationEvent.js';
6
- import { SyncState, updateSyncState } from './syncstate.js';
6
+ import * as SyncState from './syncstate.js';
7
7
  /**
8
8
  * Rebase behaviour:
9
9
  * - We continously pull mutations from the leader and apply them to the local store.
@@ -13,17 +13,18 @@ import { SyncState, updateSyncState } from './syncstate.js';
13
13
  * - We also want to avoid "backwards-jumping" in the UI, so we'll transactionally apply a read model changes during a rebase.
14
14
  * - We might need to make the rebase behaviour configurable e.g. to let users manually trigger a rebase
15
15
  */
16
- export const makeClientSessionSyncProcessor = ({ schema, initialLeaderHead, pushToLeader, pullFromLeader, applyMutation, rollback, refreshTables, span, }) => {
16
+ export const makeClientSessionSyncProcessor = ({ schema, clientSession, runtime, applyMutation, rollback, refreshTables, span, }) => {
17
17
  const mutationEventSchema = MutationEvent.makeMutationEventSchemaMemo(schema);
18
18
  const syncStateRef = {
19
- current: new SyncState({
20
- localHead: initialLeaderHead,
21
- upstreamHead: initialLeaderHead,
19
+ current: new SyncState.SyncState({
20
+ localHead: clientSession.leaderThread.initialState.leaderHead,
21
+ upstreamHead: clientSession.leaderThread.initialState.leaderHead,
22
22
  pending: [],
23
23
  // TODO init rollbackTail from leader to be ready for backend rebasing
24
24
  rollbackTail: [],
25
25
  }),
26
26
  };
27
+ const syncStateUpdateQueue = Queue.unbounded().pipe(Effect.runSync);
27
28
  const isLocalEvent = (mutationEventEncoded) => {
28
29
  const mutationDef = schema.mutations.get(mutationEventEncoded.mutation);
29
30
  return mutationDef.options.localOnly;
@@ -37,7 +38,7 @@ export const makeClientSessionSyncProcessor = ({ schema, initialLeaderHead, push
37
38
  baseEventId = nextIdPair.id;
38
39
  return new MutationEvent.EncodedWithMeta(Schema.encodeUnknownSync(mutationEventSchema)({ ...mutationEvent, ...nextIdPair }));
39
40
  });
40
- const updateResult = updateSyncState({
41
+ const updateResult = SyncState.updateSyncState({
41
42
  syncState: syncStateRef.current,
42
43
  payload: { _tag: 'local-push', newEvents: encodedMutationEvents },
43
44
  isLocalEvent,
@@ -51,6 +52,7 @@ export const makeClientSessionSyncProcessor = ({ schema, initialLeaderHead, push
51
52
  return shouldNeverHappen(`Expected advance, got ${updateResult._tag}`);
52
53
  }
53
54
  syncStateRef.current = updateResult.newSyncState;
55
+ syncStateUpdateQueue.offer(updateResult.newSyncState).pipe(Effect.runSync);
54
56
  const writeTables = new Set();
55
57
  for (const mutationEvent of updateResult.newEvents) {
56
58
  // TODO avoid encoding and decoding here again
@@ -62,14 +64,19 @@ export const makeClientSessionSyncProcessor = ({ schema, initialLeaderHead, push
62
64
  mutationEvent.meta.sessionChangeset = res.sessionChangeset;
63
65
  }
64
66
  // console.debug('pushToLeader', encodedMutationEvents.length, ...encodedMutationEvents.map((_) => _.toJSON()))
65
- pushToLeader(encodedMutationEvents);
67
+ clientSession.leaderThread.mutations
68
+ .push(encodedMutationEvents)
69
+ .pipe(Effect.tapCauseLogPretty, Effect.provide(runtime), Effect.runFork);
66
70
  return { writeTables };
67
71
  };
68
72
  const otelContext = otel.trace.setSpan(otel.context.active(), span);
69
73
  const boot = Effect.gen(function* () {
70
- yield* pullFromLeader.pipe(Stream.tap(({ payload, remaining }) => Effect.gen(function* () {
74
+ yield* clientSession.leaderThread.mutations.pull.pipe(Stream.tap(({ payload, remaining }) => Effect.gen(function* () {
71
75
  // console.log('pulled payload from leader', { payload, remaining })
72
- const updateResult = updateSyncState({
76
+ if (clientSession.devtools.enabled) {
77
+ yield* clientSession.devtools.pullLatch.await;
78
+ }
79
+ const updateResult = SyncState.updateSyncState({
73
80
  syncState: syncStateRef.current,
74
81
  payload,
75
82
  isLocalEvent,
@@ -80,6 +87,7 @@ export const makeClientSessionSyncProcessor = ({ schema, initialLeaderHead, push
80
87
  throw new Error('TODO: implement reject in client-session-sync-queue for pull');
81
88
  }
82
89
  syncStateRef.current = updateResult.newSyncState;
90
+ syncStateUpdateQueue.offer(updateResult.newSyncState).pipe(Effect.runSync);
83
91
  if (updateResult._tag === 'rebase') {
84
92
  span.addEvent('pull:rebase', {
85
93
  payloadTag: payload._tag,
@@ -90,7 +98,7 @@ export const makeClientSessionSyncProcessor = ({ schema, initialLeaderHead, push
90
98
  remaining,
91
99
  });
92
100
  if (LS_DEV) {
93
- console.debug('pull:rebase: rollback', updateResult.eventsToRollback.length, ...updateResult.eventsToRollback.map((_) => _.toJSON()));
101
+ Effect.logDebug('pull:rebase: rollback', updateResult.eventsToRollback.length, ...updateResult.eventsToRollback.map((_) => _.toJSON())).pipe(Effect.provide(runtime), Effect.runSync);
94
102
  }
95
103
  for (let i = updateResult.eventsToRollback.length - 1; i >= 0; i--) {
96
104
  const event = updateResult.eventsToRollback[i];
@@ -99,7 +107,9 @@ export const makeClientSessionSyncProcessor = ({ schema, initialLeaderHead, push
99
107
  event.meta.sessionChangeset = undefined;
100
108
  }
101
109
  }
102
- pushToLeader(updateResult.newSyncState.pending);
110
+ clientSession.leaderThread.mutations
111
+ .push(updateResult.newSyncState.pending)
112
+ .pipe(Effect.tapCauseLogPretty, Effect.provide(runtime), Effect.runFork);
103
113
  }
104
114
  else {
105
115
  span.addEvent('pull:advance', {
@@ -128,7 +138,15 @@ export const makeClientSessionSyncProcessor = ({ schema, initialLeaderHead, push
128
138
  return {
129
139
  push,
130
140
  boot,
131
- syncStateRef,
141
+ syncState: Subscribable.make({
142
+ get: Effect.gen(function* () {
143
+ const syncState = syncStateRef.current;
144
+ if (syncStateRef === undefined)
145
+ return shouldNeverHappen('Not initialized');
146
+ return syncState;
147
+ }),
148
+ changes: Stream.fromQueue(syncStateUpdateQueue),
149
+ }),
132
150
  };
133
151
  };
134
152
  //# sourceMappingURL=ClientSessionSyncProcessor.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ClientSessionSyncProcessor.js","sourceRoot":"","sources":["../../src/sync/ClientSessionSyncProcessor.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ClientSessionSyncProcessor.js","sourceRoot":"","sources":["../../src/sync/ClientSessionSyncProcessor.ts"],"names":[],"mappings":"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"}
@@ -10,18 +10,18 @@ export declare const facts: {
10
10
  };
11
11
  export declare const mutations: {
12
12
  createTodo: MutationDef<"createTodo", {
13
- readonly text: string;
14
13
  readonly id: string;
15
- }, {
16
14
  readonly text: string;
15
+ }, {
17
16
  readonly id: string;
17
+ readonly text: string;
18
18
  }>;
19
19
  upsertTodo: MutationDef<"upsertTodo", {
20
20
  readonly id: string;
21
21
  readonly text?: string | undefined;
22
22
  }, {
23
- readonly text?: string | undefined;
24
23
  readonly id: string;
24
+ readonly text?: string | undefined;
25
25
  }>;
26
26
  completeTodo: MutationDef<"completeTodo", {
27
27
  readonly id: string;
@@ -51,18 +51,18 @@ export declare const mutations: {
51
51
  readonly readonly: boolean;
52
52
  }>;
53
53
  setTextTodo: MutationDef<"setTextTodo", {
54
- readonly text: string;
55
54
  readonly id: string;
56
- }, {
57
55
  readonly text: string;
56
+ }, {
58
57
  readonly id: string;
58
+ readonly text: string;
59
59
  }>;
60
60
  setInputValue: MutationDef<"setInputValue", {
61
- readonly text: string;
62
61
  readonly id: string;
63
- }, {
64
62
  readonly text: string;
63
+ }, {
65
64
  readonly id: string;
65
+ readonly text: string;
66
66
  }>;
67
67
  };
68
68
  export type PartialEvent = {
package/dist/version.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- export declare const liveStoreVersion: "0.3.0-dev.10";
1
+ export declare const liveStoreVersion: "0.3.0-dev.12";
2
2
  /**
3
3
  * This version number is incremented whenever the internal storage format changes in a breaking way.
4
4
  * Whenever this version changes, LiveStore will start with fresh database files. Old database files are not deleted.
package/dist/version.js CHANGED
@@ -1,7 +1,7 @@
1
1
  // TODO bring back when Expo and Playwright supports `with` imports
2
2
  // import packageJson from '../package.json' with { type: 'json' }
3
3
  // export const liveStoreVersion = packageJson.version
4
- export const liveStoreVersion = '0.3.0-dev.10';
4
+ export const liveStoreVersion = '0.3.0-dev.12';
5
5
  /**
6
6
  * This version number is incremented whenever the internal storage format changes in a breaking way.
7
7
  * Whenever this version changes, LiveStore will start with fresh database files. Old database files are not deleted.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@livestore/common",
3
- "version": "0.3.0-dev.10",
3
+ "version": "0.3.0-dev.12",
4
4
  "type": "module",
5
5
  "sideEffects": false,
6
6
  "exports": {
@@ -54,8 +54,8 @@
54
54
  "graphology": "0.26.0-alpha1",
55
55
  "graphology-dag": "0.4.1",
56
56
  "graphology-types": "0.24.8",
57
- "@livestore/db-schema": "0.3.0-dev.10",
58
- "@livestore/utils": "0.3.0-dev.10"
57
+ "@livestore/db-schema": "0.3.0-dev.12",
58
+ "@livestore/utils": "0.3.0-dev.12"
59
59
  },
60
60
  "devDependencies": {
61
61
  "vitest": "^2.1.4"
@@ -2,8 +2,7 @@ import type { Cause, Queue, Scope, SubscriptionRef, WebChannel } from '@livestor
2
2
  import { Effect, Schema, Stream } from '@livestore/utils/effect'
3
3
 
4
4
  import type * as Devtools from './devtools/index.js'
5
- import type { EventId } from './schema/EventId.js'
6
- import type { LiveStoreSchema, MutationEvent } from './schema/mod.js'
5
+ import type { EventId, LiveStoreSchema, MutationEvent } from './schema/mod.js'
7
6
  import type { InvalidPushError } from './sync/sync.js'
8
7
  import type { PayloadUpstream, SyncState } from './sync/syncstate.js'
9
8
  import type { PreparedBindValues } from './util.js'
@@ -15,21 +14,21 @@ export interface PreparedStatement {
15
14
  sql: string
16
15
  }
17
16
 
18
- export type SynchronousDatabaseSession = {
17
+ export type SqliteDbSession = {
19
18
  changeset: () => Uint8Array | undefined
20
19
  finish: () => void
21
20
  }
22
21
 
23
- export type SynchronousDatabaseChangeset = {
22
+ export type SqliteDbChangeset = {
24
23
  // TODO combining changesets (requires changes in the SQLite WASM binding)
25
- invert: () => SynchronousDatabaseChangeset
24
+ invert: () => SqliteDbChangeset
26
25
  apply: () => void
27
26
  }
28
27
 
29
- export type ClientSession = {
28
+ export interface ClientSession {
30
29
  /** SQLite database with synchronous API running in the same thread (usually in-memory) */
31
- syncDb: SynchronousDatabase
32
- devtools: { enabled: boolean }
30
+ sqliteDb: SqliteDb
31
+ devtools: { enabled: false } | { enabled: true; pullLatch: Effect.Latch; pushLatch: Effect.Latch }
33
32
  clientId: string
34
33
  sessionId: string
35
34
  /** Status info whether current session is leader or not */
@@ -39,22 +38,33 @@ export type ClientSession = {
39
38
  leaderThread: ClientSessionLeaderThreadProxy
40
39
  }
41
40
 
42
- export type ClientSessionLeaderThreadProxy = {
41
+ export interface ClientSessionLeaderThreadProxy {
43
42
  mutations: {
44
43
  pull: Stream.Stream<{ payload: PayloadUpstream; remaining: number }, UnexpectedError>
45
44
  push(batch: ReadonlyArray<MutationEvent.AnyEncoded>): Effect.Effect<void, UnexpectedError | InvalidPushError>
46
- initialMutationEventId: EventId
45
+ }
46
+ /** The initial state after the leader thread has booted */
47
+ readonly initialState: {
48
+ /** The latest mutation event id during boot. Used for the client session to resume syncing. */
49
+ readonly leaderHead: EventId.EventId
50
+ /** The migrations report from the leader thread */
51
+ readonly migrationsReport: MigrationsReport
47
52
  }
48
53
  export: Effect.Effect<Uint8Array, UnexpectedError>
49
54
  getMutationLogData: Effect.Effect<Uint8Array, UnexpectedError>
50
55
  getSyncState: Effect.Effect<SyncState, UnexpectedError>
51
56
  networkStatus: SubscriptionRef.SubscriptionRef<NetworkStatus>
52
57
  /** For debugging purposes it can be useful to manually trigger devtools messages (e.g. to reset the database) */
53
- sendDevtoolsMessage: (message: Devtools.MessageToAppLeader) => Effect.Effect<void, UnexpectedError>
58
+ sendDevtoolsMessage: (message: Devtools.Leader.MessageToApp) => Effect.Effect<void, UnexpectedError>
54
59
  }
55
60
 
56
- export type SynchronousDatabase<TReq = any, TMetadata extends TReq = TReq> = {
57
- _tag: 'SynchronousDatabase'
61
+ /**
62
+ * Common interface for SQLite databases used by LiveStore to facilitate a consistent API across different platforms.
63
+ * Always assumes a synchronous SQLite build with the `bytecode` and `session` extensions enabled.
64
+ * Can be either in-memory or persisted to disk.
65
+ */
66
+ export interface SqliteDb<TReq = any, TMetadata extends TReq = TReq> {
67
+ _tag: 'SqliteDb'
58
68
  metadata: TMetadata
59
69
  prepare(queryStr: string): PreparedStatement
60
70
  execute(
@@ -64,14 +74,14 @@ export type SynchronousDatabase<TReq = any, TMetadata extends TReq = TReq> = {
64
74
  ): void
65
75
  select<T>(queryStr: string, bindValues?: PreparedBindValues | undefined): ReadonlyArray<T>
66
76
  export(): Uint8Array
67
- import: (data: Uint8Array | SynchronousDatabase<TReq>) => void
77
+ import: (data: Uint8Array | SqliteDb<TReq>) => void
68
78
  close(): void
69
79
  destroy(): void
70
- session(): SynchronousDatabaseSession
71
- makeChangeset: (data: Uint8Array) => SynchronousDatabaseChangeset
80
+ session(): SqliteDbSession
81
+ makeChangeset: (data: Uint8Array) => SqliteDbChangeset
72
82
  }
73
83
 
74
- export type MakeSynchronousDatabase<
84
+ export type MakeSqliteDb<
75
85
  TReq = { dbPointer: number; persistenceInfo: PersistenceInfo },
76
86
  TInput_ extends { _tag: string } = { _tag: string },
77
87
  TMetadata_ extends TReq = TReq,
@@ -81,11 +91,7 @@ export type MakeSynchronousDatabase<
81
91
  TMetadata extends TMetadata_ & { _tag: TInput['_tag'] } = TMetadata_ & { _tag: TInput['_tag'] },
82
92
  >(
83
93
  input: TInput,
84
- ) => Effect.Effect<
85
- SynchronousDatabase<TReq, Extract<TMetadata, { _tag: TInput['_tag'] }>>,
86
- SqliteError | UnexpectedError,
87
- R
88
- >
94
+ ) => Effect.Effect<SqliteDb<TReq, Extract<TMetadata, { _tag: TInput['_tag'] }>>, SqliteError | UnexpectedError, R>
89
95
 
90
96
  export const PersistenceInfo = Schema.Struct(
91
97
  {
@@ -101,12 +107,11 @@ export type ResetMode = 'all-data' | 'only-app-db'
101
107
  export const NetworkStatus = Schema.Struct({
102
108
  isConnected: Schema.Boolean,
103
109
  timestampMs: Schema.Number,
110
+ /** Whether the network status devtools latch is closed. Used to simulate network disconnection. */
111
+ latchClosed: Schema.Boolean,
104
112
  })
105
113
 
106
- export type NetworkStatus = {
107
- isConnected: boolean
108
- timestampMs: number
109
- }
114
+ export type NetworkStatus = typeof NetworkStatus.Type
110
115
 
111
116
  export const BootStateProgress = Schema.Struct({
112
117
  done: Schema.Number,
@@ -196,9 +201,9 @@ export type MigrationHooks = {
196
201
  post: MigrationHook
197
202
  }
198
203
 
199
- export type MigrationHook = (db: SynchronousDatabase) => void | Promise<void> | Effect.Effect<void, unknown>
204
+ export type MigrationHook = (db: SqliteDb) => void | Promise<void> | Effect.Effect<void, unknown>
200
205
 
201
- export type MigrationOptionsFromMutationLog<TSchema extends LiveStoreSchema = LiveStoreSchema> = {
206
+ export interface MigrationOptionsFromMutationLog<TSchema extends LiveStoreSchema = LiveStoreSchema> {
202
207
  strategy: 'from-mutation-log'
203
208
  /**
204
209
  * Mutations to exclude in the mutation log
@@ -212,13 +217,11 @@ export type MigrationOptionsFromMutationLog<TSchema extends LiveStoreSchema = Li
212
217
  }
213
218
  }
214
219
 
215
- export type StoreDevtoolsChannel = WebChannel.WebChannel<
216
- Devtools.MessageToAppClientSession,
217
- Devtools.MessageFromAppClientSession
218
- >
220
+ export interface ClientSessionDevtoolsChannel
221
+ extends WebChannel.WebChannel<Devtools.ClientSession.MessageToApp, Devtools.ClientSession.MessageFromApp> {}
219
222
 
220
223
  export type ConnectDevtoolsToStore = (
221
- storeDevtoolsChannel: StoreDevtoolsChannel,
224
+ storeDevtoolsChannel: ClientSessionDevtoolsChannel,
222
225
  ) => Effect.Effect<void, UnexpectedError, Scope.Scope>
223
226
 
224
227
  export type Adapter = (opts: {
@@ -230,3 +233,19 @@ export type Adapter = (opts: {
230
233
  shutdown: (cause: Cause.Cause<any>) => Effect.Effect<void>
231
234
  connectDevtoolsToStore: ConnectDevtoolsToStore
232
235
  }) => Effect.Effect<ClientSession, UnexpectedError, Scope.Scope>
236
+
237
+ export const MigrationsReportEntry = Schema.Struct({
238
+ tableName: Schema.String,
239
+ hashes: Schema.Struct({
240
+ expected: Schema.Number,
241
+ actual: Schema.optional(Schema.Number),
242
+ }),
243
+ })
244
+
245
+ export const MigrationsReport = Schema.Struct({
246
+ migrations: Schema.Array(MigrationsReportEntry),
247
+ })
248
+
249
+ export type MigrationsReport = typeof MigrationsReport.Type
250
+
251
+ export type MigrationsReportEntry = typeof MigrationsReportEntry.Type