hzl-core 1.6.0 → 1.7.0

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 (161) hide show
  1. package/dist/__tests__/backup/backup-restore.test.js +13 -12
  2. package/dist/__tests__/backup/backup-restore.test.js.map +1 -1
  3. package/dist/__tests__/backup/import-export.test.js +41 -39
  4. package/dist/__tests__/backup/import-export.test.js.map +1 -1
  5. package/dist/__tests__/concurrency/stress.test.js +2 -2
  6. package/dist/__tests__/concurrency/stress.test.js.map +1 -1
  7. package/dist/__tests__/concurrency/worker.js +3 -2
  8. package/dist/__tests__/concurrency/worker.js.map +1 -1
  9. package/dist/__tests__/migrations/upgrade.test.js +132 -117
  10. package/dist/__tests__/migrations/upgrade.test.js.map +1 -1
  11. package/dist/__tests__/projections/rebuild-equivalence.test.js +2 -2
  12. package/dist/__tests__/projections/rebuild-equivalence.test.js.map +1 -1
  13. package/dist/__tests__/properties/invariants.test.js +2 -2
  14. package/dist/__tests__/properties/invariants.test.js.map +1 -1
  15. package/dist/db/__tests__/append-only.test.d.ts +2 -0
  16. package/dist/db/__tests__/append-only.test.d.ts.map +1 -0
  17. package/dist/db/__tests__/append-only.test.js +46 -0
  18. package/dist/db/__tests__/append-only.test.js.map +1 -0
  19. package/dist/db/__tests__/datastore.test.d.ts +2 -0
  20. package/dist/db/__tests__/datastore.test.d.ts.map +1 -0
  21. package/dist/db/__tests__/datastore.test.js +68 -0
  22. package/dist/db/__tests__/datastore.test.js.map +1 -0
  23. package/dist/db/__tests__/libsql-compat.test.d.ts +2 -0
  24. package/dist/db/__tests__/libsql-compat.test.d.ts.map +1 -0
  25. package/dist/db/__tests__/libsql-compat.test.js +56 -0
  26. package/dist/db/__tests__/libsql-compat.test.js.map +1 -0
  27. package/dist/db/__tests__/lock.test.d.ts +2 -0
  28. package/dist/db/__tests__/lock.test.d.ts.map +1 -0
  29. package/dist/db/__tests__/lock.test.js +77 -0
  30. package/dist/db/__tests__/lock.test.js.map +1 -0
  31. package/dist/db/__tests__/meta.test.d.ts +2 -0
  32. package/dist/db/__tests__/meta.test.d.ts.map +1 -0
  33. package/dist/db/__tests__/meta.test.js +50 -0
  34. package/dist/db/__tests__/meta.test.js.map +1 -0
  35. package/dist/db/__tests__/migrations.test.d.ts +2 -0
  36. package/dist/db/__tests__/migrations.test.d.ts.map +1 -0
  37. package/dist/db/__tests__/migrations.test.js +57 -0
  38. package/dist/db/__tests__/migrations.test.js.map +1 -0
  39. package/dist/db/__tests__/sync-policy.test.d.ts +2 -0
  40. package/dist/db/__tests__/sync-policy.test.d.ts.map +1 -0
  41. package/dist/db/__tests__/sync-policy.test.js +118 -0
  42. package/dist/db/__tests__/sync-policy.test.js.map +1 -0
  43. package/dist/db/__tests__/types.test.d.ts +2 -0
  44. package/dist/db/__tests__/types.test.d.ts.map +1 -0
  45. package/dist/db/__tests__/types.test.js +91 -0
  46. package/dist/db/__tests__/types.test.js.map +1 -0
  47. package/dist/db/datastore.d.ts +16 -0
  48. package/dist/db/datastore.d.ts.map +1 -0
  49. package/dist/db/datastore.js +159 -0
  50. package/dist/db/datastore.js.map +1 -0
  51. package/dist/db/lock.d.ts +38 -0
  52. package/dist/db/lock.d.ts.map +1 -0
  53. package/dist/db/lock.js +114 -0
  54. package/dist/db/lock.js.map +1 -0
  55. package/dist/db/meta.d.ts +28 -0
  56. package/dist/db/meta.d.ts.map +1 -0
  57. package/dist/db/meta.js +95 -0
  58. package/dist/db/meta.js.map +1 -0
  59. package/dist/db/migrations.d.ts +23 -3
  60. package/dist/db/migrations.d.ts.map +1 -1
  61. package/dist/db/migrations.js +69 -99
  62. package/dist/db/migrations.js.map +1 -1
  63. package/dist/db/migrations.test.js +40 -105
  64. package/dist/db/migrations.test.js.map +1 -1
  65. package/dist/db/schema.d.ts +2 -1
  66. package/dist/db/schema.d.ts.map +1 -1
  67. package/dist/db/schema.js +52 -10
  68. package/dist/db/schema.js.map +1 -1
  69. package/dist/db/sync-policy.d.ts +21 -0
  70. package/dist/db/sync-policy.d.ts.map +1 -0
  71. package/dist/db/sync-policy.js +62 -0
  72. package/dist/db/sync-policy.js.map +1 -0
  73. package/dist/db/test-utils.d.ts +33 -0
  74. package/dist/db/test-utils.d.ts.map +1 -0
  75. package/dist/db/test-utils.js +58 -0
  76. package/dist/db/test-utils.js.map +1 -0
  77. package/dist/db/{connection.d.ts → transaction.d.ts} +2 -4
  78. package/dist/db/transaction.d.ts.map +1 -0
  79. package/dist/db/{connection.js → transaction.js} +1 -23
  80. package/dist/db/transaction.js.map +1 -0
  81. package/dist/db/types.d.ts +199 -0
  82. package/dist/db/types.d.ts.map +1 -0
  83. package/dist/db/types.js +43 -0
  84. package/dist/db/types.js.map +1 -0
  85. package/dist/events/store.d.ts +1 -1
  86. package/dist/events/store.d.ts.map +1 -1
  87. package/dist/events/store.test.js +2 -4
  88. package/dist/events/store.test.js.map +1 -1
  89. package/dist/index.d.ts +7 -2
  90. package/dist/index.d.ts.map +1 -1
  91. package/dist/index.js +6 -2
  92. package/dist/index.js.map +1 -1
  93. package/dist/index.test.js +13 -11
  94. package/dist/index.test.js.map +1 -1
  95. package/dist/projections/comments-checkpoints.d.ts +1 -1
  96. package/dist/projections/comments-checkpoints.d.ts.map +1 -1
  97. package/dist/projections/comments-checkpoints.test.js +3 -4
  98. package/dist/projections/comments-checkpoints.test.js.map +1 -1
  99. package/dist/projections/dependencies.d.ts +1 -1
  100. package/dist/projections/dependencies.d.ts.map +1 -1
  101. package/dist/projections/dependencies.test.js +3 -4
  102. package/dist/projections/dependencies.test.js.map +1 -1
  103. package/dist/projections/engine.d.ts +9 -2
  104. package/dist/projections/engine.d.ts.map +1 -1
  105. package/dist/projections/engine.js +22 -6
  106. package/dist/projections/engine.js.map +1 -1
  107. package/dist/projections/engine.test.js +3 -4
  108. package/dist/projections/engine.test.js.map +1 -1
  109. package/dist/projections/projects.d.ts +1 -1
  110. package/dist/projections/projects.d.ts.map +1 -1
  111. package/dist/projections/projects.test.js +2 -20
  112. package/dist/projections/projects.test.js.map +1 -1
  113. package/dist/projections/rebuild.d.ts +1 -1
  114. package/dist/projections/rebuild.d.ts.map +1 -1
  115. package/dist/projections/rebuild.test.js +3 -4
  116. package/dist/projections/rebuild.test.js.map +1 -1
  117. package/dist/projections/search.d.ts +1 -1
  118. package/dist/projections/search.d.ts.map +1 -1
  119. package/dist/projections/search.test.js +3 -4
  120. package/dist/projections/search.test.js.map +1 -1
  121. package/dist/projections/tags.d.ts +1 -1
  122. package/dist/projections/tags.d.ts.map +1 -1
  123. package/dist/projections/tags.test.js +3 -4
  124. package/dist/projections/tags.test.js.map +1 -1
  125. package/dist/projections/tasks-current.d.ts +1 -1
  126. package/dist/projections/tasks-current.d.ts.map +1 -1
  127. package/dist/projections/tasks-current.test.js +3 -4
  128. package/dist/projections/tasks-current.test.js.map +1 -1
  129. package/dist/projections/types.d.ts +1 -1
  130. package/dist/projections/types.d.ts.map +1 -1
  131. package/dist/services/backup-service.d.ts +2 -2
  132. package/dist/services/backup-service.d.ts.map +1 -1
  133. package/dist/services/backup-service.js +13 -3
  134. package/dist/services/backup-service.js.map +1 -1
  135. package/dist/services/project-service.d.ts +1 -1
  136. package/dist/services/project-service.d.ts.map +1 -1
  137. package/dist/services/project-service.js +1 -1
  138. package/dist/services/project-service.js.map +1 -1
  139. package/dist/services/project-service.test.js +2 -13
  140. package/dist/services/project-service.test.js.map +1 -1
  141. package/dist/services/search-service.d.ts +1 -1
  142. package/dist/services/search-service.d.ts.map +1 -1
  143. package/dist/services/search-service.test.js +3 -4
  144. package/dist/services/search-service.test.js.map +1 -1
  145. package/dist/services/task-service.d.ts +1 -1
  146. package/dist/services/task-service.d.ts.map +1 -1
  147. package/dist/services/task-service.js +1 -1
  148. package/dist/services/task-service.js.map +1 -1
  149. package/dist/services/task-service.test.js +3 -4
  150. package/dist/services/task-service.test.js.map +1 -1
  151. package/dist/services/validation-service.d.ts +1 -1
  152. package/dist/services/validation-service.d.ts.map +1 -1
  153. package/dist/services/validation-service.test.js +2 -4
  154. package/dist/services/validation-service.test.js.map +1 -1
  155. package/package.json +4 -4
  156. package/dist/db/connection.d.ts.map +0 -1
  157. package/dist/db/connection.js.map +0 -1
  158. package/dist/db/connection.test.d.ts +0 -2
  159. package/dist/db/connection.test.d.ts.map +0 -1
  160. package/dist/db/connection.test.js +0 -63
  161. package/dist/db/connection.test.js.map +0 -1
@@ -0,0 +1,33 @@
1
+ /**
2
+ * Test utilities for creating in-memory databases with the correct schema.
3
+ */
4
+ import Database from 'libsql';
5
+ /**
6
+ * Creates an in-memory database with the events schema applied.
7
+ * For tests that only need events.
8
+ */
9
+ export declare function createTestEventsDb(): Database.Database;
10
+ /**
11
+ * Creates an in-memory database with the cache schema applied.
12
+ * For tests that need projections (tasks_current, etc).
13
+ */
14
+ export declare function createTestCacheDb(): Database.Database;
15
+ /**
16
+ * Creates both events and cache databases for tests.
17
+ * Returns both databases.
18
+ */
19
+ export declare function createTestDatabases(): {
20
+ eventsDb: Database.Database;
21
+ cacheDb: Database.Database;
22
+ };
23
+ /**
24
+ * Creates a single combined in-memory database with both events and cache schemas.
25
+ * This is for tests that use a single database (simpler test setup).
26
+ */
27
+ export declare function createTestDb(): Database.Database;
28
+ /**
29
+ * Creates a file-based database with both events and cache schemas.
30
+ * For tests that need file I/O operations (backup, restore, etc).
31
+ */
32
+ export declare function createTestDbAtPath(dbPath: string): Database.Database;
33
+ //# sourceMappingURL=test-utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"test-utils.d.ts","sourceRoot":"","sources":["../../src/db/test-utils.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,QAAQ,MAAM,QAAQ,CAAC;AAG9B;;;GAGG;AACH,wBAAgB,kBAAkB,IAAI,QAAQ,CAAC,QAAQ,CAKtD;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,IAAI,QAAQ,CAAC,QAAQ,CAKrD;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,IAAI;IAAE,QAAQ,EAAE,QAAQ,CAAC,QAAQ,CAAC;IAAC,OAAO,EAAE,QAAQ,CAAC,QAAQ,CAAA;CAAE,CAKjG;AAED;;;GAGG;AACH,wBAAgB,YAAY,IAAI,QAAQ,CAAC,QAAQ,CAMhD;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,MAAM,GAAG,QAAQ,CAAC,QAAQ,CAMpE"}
@@ -0,0 +1,58 @@
1
+ /**
2
+ * Test utilities for creating in-memory databases with the correct schema.
3
+ */
4
+ import Database from 'libsql';
5
+ import { EVENTS_SCHEMA_V2, CACHE_SCHEMA_V1, PRAGMAS } from './schema.js';
6
+ /**
7
+ * Creates an in-memory database with the events schema applied.
8
+ * For tests that only need events.
9
+ */
10
+ export function createTestEventsDb() {
11
+ const db = new Database(':memory:');
12
+ db.exec(PRAGMAS);
13
+ db.exec(EVENTS_SCHEMA_V2);
14
+ return db;
15
+ }
16
+ /**
17
+ * Creates an in-memory database with the cache schema applied.
18
+ * For tests that need projections (tasks_current, etc).
19
+ */
20
+ export function createTestCacheDb() {
21
+ const db = new Database(':memory:');
22
+ db.exec(PRAGMAS);
23
+ db.exec(CACHE_SCHEMA_V1);
24
+ return db;
25
+ }
26
+ /**
27
+ * Creates both events and cache databases for tests.
28
+ * Returns both databases.
29
+ */
30
+ export function createTestDatabases() {
31
+ return {
32
+ eventsDb: createTestEventsDb(),
33
+ cacheDb: createTestCacheDb(),
34
+ };
35
+ }
36
+ /**
37
+ * Creates a single combined in-memory database with both events and cache schemas.
38
+ * This is for tests that use a single database (simpler test setup).
39
+ */
40
+ export function createTestDb() {
41
+ const db = new Database(':memory:');
42
+ db.exec(PRAGMAS);
43
+ db.exec(EVENTS_SCHEMA_V2);
44
+ db.exec(CACHE_SCHEMA_V1);
45
+ return db;
46
+ }
47
+ /**
48
+ * Creates a file-based database with both events and cache schemas.
49
+ * For tests that need file I/O operations (backup, restore, etc).
50
+ */
51
+ export function createTestDbAtPath(dbPath) {
52
+ const db = new Database(dbPath);
53
+ db.exec(PRAGMAS);
54
+ db.exec(EVENTS_SCHEMA_V2);
55
+ db.exec(CACHE_SCHEMA_V1);
56
+ return db;
57
+ }
58
+ //# sourceMappingURL=test-utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"test-utils.js","sourceRoot":"","sources":["../../src/db/test-utils.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,QAAQ,MAAM,QAAQ,CAAC;AAC9B,OAAO,EAAE,gBAAgB,EAAE,eAAe,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAEzE;;;GAGG;AACH,MAAM,UAAU,kBAAkB;IAChC,MAAM,EAAE,GAAG,IAAI,QAAQ,CAAC,UAAU,CAAC,CAAC;IACpC,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACjB,EAAE,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;IAC1B,OAAO,EAAE,CAAC;AACZ,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,iBAAiB;IAC/B,MAAM,EAAE,GAAG,IAAI,QAAQ,CAAC,UAAU,CAAC,CAAC;IACpC,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACjB,EAAE,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;IACzB,OAAO,EAAE,CAAC;AACZ,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,mBAAmB;IACjC,OAAO;QACL,QAAQ,EAAE,kBAAkB,EAAE;QAC9B,OAAO,EAAE,iBAAiB,EAAE;KAC7B,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,YAAY;IAC1B,MAAM,EAAE,GAAG,IAAI,QAAQ,CAAC,UAAU,CAAC,CAAC;IACpC,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACjB,EAAE,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;IAC1B,EAAE,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;IACzB,OAAO,EAAE,CAAC;AACZ,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,kBAAkB,CAAC,MAAc;IAC/C,MAAM,EAAE,GAAG,IAAI,QAAQ,CAAC,MAAM,CAAC,CAAC;IAChC,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACjB,EAAE,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;IAC1B,EAAE,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;IACzB,OAAO,EAAE,CAAC;AACZ,CAAC"}
@@ -1,6 +1,4 @@
1
- import Database from 'better-sqlite3';
2
- export declare function getDefaultDbPath(): string;
3
- export declare function createConnection(dbPath?: string): Database.Database;
1
+ import type Database from 'libsql';
4
2
  /**
5
3
  * Execute a function within a write transaction using BEGIN IMMEDIATE.
6
4
  * This ensures proper locking for concurrent access from multiple agents.
@@ -10,4 +8,4 @@ export declare function withWriteTransaction<T>(db: Database.Database, fn: () =>
10
8
  retries?: number;
11
9
  busySleepMs?: number;
12
10
  }): T;
13
- //# sourceMappingURL=connection.d.ts.map
11
+ //# sourceMappingURL=transaction.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transaction.d.ts","sourceRoot":"","sources":["../../src/db/transaction.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,QAAQ,MAAM,QAAQ,CAAC;AAEnC;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,CAAC,EACpC,EAAE,EAAE,QAAQ,CAAC,QAAQ,EACrB,EAAE,EAAE,MAAM,CAAC,EACX,IAAI,CAAC,EAAE;IAAE,OAAO,CAAC,EAAE,MAAM,CAAC;IAAC,WAAW,CAAC,EAAE,MAAM,CAAA;CAAE,GAChD,CAAC,CA0BH"}
@@ -1,25 +1,3 @@
1
- import Database from 'better-sqlite3';
2
- import path from 'path';
3
- import os from 'os';
4
- import fs from 'fs';
5
- import { runMigrations } from './migrations.js';
6
- export function getDefaultDbPath() {
7
- const hzlDir = path.join(os.homedir(), '.hzl');
8
- return path.join(hzlDir, 'data.db');
9
- }
10
- export function createConnection(dbPath) {
11
- const resolvedPath = dbPath ?? process.env.HZL_DB ?? getDefaultDbPath();
12
- // Handle in-memory databases
13
- if (resolvedPath !== ':memory:') {
14
- const dir = path.dirname(resolvedPath);
15
- if (!fs.existsSync(dir)) {
16
- fs.mkdirSync(dir, { recursive: true });
17
- }
18
- }
19
- const db = new Database(resolvedPath);
20
- runMigrations(db);
21
- return db;
22
- }
23
1
  /**
24
2
  * Execute a function within a write transaction using BEGIN IMMEDIATE.
25
3
  * This ensures proper locking for concurrent access from multiple agents.
@@ -51,4 +29,4 @@ export function withWriteTransaction(db, fn, opts) {
51
29
  }
52
30
  }
53
31
  }
54
- //# sourceMappingURL=connection.js.map
32
+ //# sourceMappingURL=transaction.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transaction.js","sourceRoot":"","sources":["../../src/db/transaction.ts"],"names":[],"mappings":"AAEA;;;;GAIG;AACH,MAAM,UAAU,oBAAoB,CAClC,EAAqB,EACrB,EAAW,EACX,IAAiD;IAEjD,MAAM,OAAO,GAAG,IAAI,EAAE,OAAO,IAAI,CAAC,CAAC;IACnC,MAAM,WAAW,GAAG,IAAI,EAAE,WAAW,IAAI,EAAE,CAAC;IAC5C,IAAI,OAAO,GAAG,CAAC,CAAC;IAEhB,OAAO,IAAI,EAAE,CAAC;QACZ,IAAI,CAAC;YACH,2CAA2C;YAC3C,OAAO,EAAE,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC,SAAS,EAAE,CAAC;QACxC,CAAC;QAAC,OAAO,GAAY,EAAE,CAAC;YACtB,MAAM,KAAK,GAAG,GAAiD,CAAC;YAChE,MAAM,MAAM,GACV,KAAK,EAAE,IAAI,KAAK,aAAa;gBAC7B,CAAC,OAAO,KAAK,EAAE,OAAO,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC,CAAC;YAChF,IAAI,CAAC,MAAM,IAAI,OAAO,IAAI,OAAO,EAAE,CAAC;gBAClC,MAAM,GAAG,CAAC;YACZ,CAAC;YACD,OAAO,IAAI,CAAC,CAAC;YACb,wCAAwC;YACxC,MAAM,SAAS,GAAG,WAAW,GAAG,OAAO,CAAC;YACxC,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;YACzB,OAAO,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,GAAG,SAAS,EAAE,CAAC;gBACtC,mDAAmD;YACrD,CAAC;QACH,CAAC;IACH,CAAC;AACH,CAAC"}
@@ -0,0 +1,199 @@
1
+ import { z } from 'zod';
2
+ export declare const UlidSchema: z.ZodString;
3
+ export declare const TursoUrlSchema: z.ZodString;
4
+ export declare const SyncModeSchema: z.ZodEnum<["replica", "offline"]>;
5
+ export type SyncMode = z.infer<typeof SyncModeSchema>;
6
+ export declare const SyncPolicySchema: z.ZodEnum<["manual", "opportunistic", "strict"]>;
7
+ export type SyncPolicy = z.infer<typeof SyncPolicySchema>;
8
+ export declare const ConflictStrategySchema: z.ZodEnum<["merge", "discard-local", "fail"]>;
9
+ export type ConflictStrategy = z.infer<typeof ConflictStrategySchema>;
10
+ export declare const EventsDbConfigSchema: z.ZodOptional<z.ZodObject<{
11
+ path: z.ZodOptional<z.ZodString>;
12
+ syncUrl: z.ZodOptional<z.ZodString>;
13
+ authToken: z.ZodOptional<z.ZodString>;
14
+ syncMode: z.ZodDefault<z.ZodOptional<z.ZodEnum<["replica", "offline"]>>>;
15
+ encryptionKey: z.ZodOptional<z.ZodString>;
16
+ encryptionCipher: z.ZodOptional<z.ZodString>;
17
+ readYourWrites: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
18
+ }, "strip", z.ZodTypeAny, {
19
+ syncMode: "replica" | "offline";
20
+ readYourWrites: boolean;
21
+ path?: string | undefined;
22
+ syncUrl?: string | undefined;
23
+ authToken?: string | undefined;
24
+ encryptionKey?: string | undefined;
25
+ encryptionCipher?: string | undefined;
26
+ }, {
27
+ path?: string | undefined;
28
+ syncUrl?: string | undefined;
29
+ authToken?: string | undefined;
30
+ syncMode?: "replica" | "offline" | undefined;
31
+ encryptionKey?: string | undefined;
32
+ encryptionCipher?: string | undefined;
33
+ readYourWrites?: boolean | undefined;
34
+ }>>;
35
+ export declare const CacheDbConfigSchema: z.ZodOptional<z.ZodObject<{
36
+ path: z.ZodOptional<z.ZodString>;
37
+ }, "strip", z.ZodTypeAny, {
38
+ path?: string | undefined;
39
+ }, {
40
+ path?: string | undefined;
41
+ }>>;
42
+ export declare const SyncConfigSchema: z.ZodOptional<z.ZodObject<{
43
+ policy: z.ZodDefault<z.ZodOptional<z.ZodEnum<["manual", "opportunistic", "strict"]>>>;
44
+ staleAfterMs: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
45
+ minIntervalMs: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
46
+ failureBackoffMs: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
47
+ lockTimeoutMs: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
48
+ syncTimeoutMs: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
49
+ maxSyncAttemptsPerMinute: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
50
+ conflictStrategy: z.ZodDefault<z.ZodOptional<z.ZodEnum<["merge", "discard-local", "fail"]>>>;
51
+ }, "strip", z.ZodTypeAny, {
52
+ policy: "manual" | "opportunistic" | "strict";
53
+ staleAfterMs: number;
54
+ minIntervalMs: number;
55
+ failureBackoffMs: number;
56
+ lockTimeoutMs: number;
57
+ syncTimeoutMs: number;
58
+ maxSyncAttemptsPerMinute: number;
59
+ conflictStrategy: "merge" | "discard-local" | "fail";
60
+ }, {
61
+ policy?: "manual" | "opportunistic" | "strict" | undefined;
62
+ staleAfterMs?: number | undefined;
63
+ minIntervalMs?: number | undefined;
64
+ failureBackoffMs?: number | undefined;
65
+ lockTimeoutMs?: number | undefined;
66
+ syncTimeoutMs?: number | undefined;
67
+ maxSyncAttemptsPerMinute?: number | undefined;
68
+ conflictStrategy?: "merge" | "discard-local" | "fail" | undefined;
69
+ }>>;
70
+ export declare const DbConfigSchema: z.ZodObject<{
71
+ events: z.ZodOptional<z.ZodOptional<z.ZodObject<{
72
+ path: z.ZodOptional<z.ZodString>;
73
+ syncUrl: z.ZodOptional<z.ZodString>;
74
+ authToken: z.ZodOptional<z.ZodString>;
75
+ syncMode: z.ZodDefault<z.ZodOptional<z.ZodEnum<["replica", "offline"]>>>;
76
+ encryptionKey: z.ZodOptional<z.ZodString>;
77
+ encryptionCipher: z.ZodOptional<z.ZodString>;
78
+ readYourWrites: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
79
+ }, "strip", z.ZodTypeAny, {
80
+ syncMode: "replica" | "offline";
81
+ readYourWrites: boolean;
82
+ path?: string | undefined;
83
+ syncUrl?: string | undefined;
84
+ authToken?: string | undefined;
85
+ encryptionKey?: string | undefined;
86
+ encryptionCipher?: string | undefined;
87
+ }, {
88
+ path?: string | undefined;
89
+ syncUrl?: string | undefined;
90
+ authToken?: string | undefined;
91
+ syncMode?: "replica" | "offline" | undefined;
92
+ encryptionKey?: string | undefined;
93
+ encryptionCipher?: string | undefined;
94
+ readYourWrites?: boolean | undefined;
95
+ }>>>;
96
+ cache: z.ZodOptional<z.ZodOptional<z.ZodObject<{
97
+ path: z.ZodOptional<z.ZodString>;
98
+ }, "strip", z.ZodTypeAny, {
99
+ path?: string | undefined;
100
+ }, {
101
+ path?: string | undefined;
102
+ }>>>;
103
+ timeoutSec: z.ZodOptional<z.ZodOptional<z.ZodNumber>>;
104
+ syncPeriod: z.ZodOptional<z.ZodOptional<z.ZodNumber>>;
105
+ sync: z.ZodOptional<z.ZodOptional<z.ZodObject<{
106
+ policy: z.ZodDefault<z.ZodOptional<z.ZodEnum<["manual", "opportunistic", "strict"]>>>;
107
+ staleAfterMs: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
108
+ minIntervalMs: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
109
+ failureBackoffMs: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
110
+ lockTimeoutMs: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
111
+ syncTimeoutMs: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
112
+ maxSyncAttemptsPerMinute: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
113
+ conflictStrategy: z.ZodDefault<z.ZodOptional<z.ZodEnum<["merge", "discard-local", "fail"]>>>;
114
+ }, "strip", z.ZodTypeAny, {
115
+ policy: "manual" | "opportunistic" | "strict";
116
+ staleAfterMs: number;
117
+ minIntervalMs: number;
118
+ failureBackoffMs: number;
119
+ lockTimeoutMs: number;
120
+ syncTimeoutMs: number;
121
+ maxSyncAttemptsPerMinute: number;
122
+ conflictStrategy: "merge" | "discard-local" | "fail";
123
+ }, {
124
+ policy?: "manual" | "opportunistic" | "strict" | undefined;
125
+ staleAfterMs?: number | undefined;
126
+ minIntervalMs?: number | undefined;
127
+ failureBackoffMs?: number | undefined;
128
+ lockTimeoutMs?: number | undefined;
129
+ syncTimeoutMs?: number | undefined;
130
+ maxSyncAttemptsPerMinute?: number | undefined;
131
+ conflictStrategy?: "merge" | "discard-local" | "fail" | undefined;
132
+ }>>>;
133
+ }, "strip", z.ZodTypeAny, {
134
+ events?: {
135
+ syncMode: "replica" | "offline";
136
+ readYourWrites: boolean;
137
+ path?: string | undefined;
138
+ syncUrl?: string | undefined;
139
+ authToken?: string | undefined;
140
+ encryptionKey?: string | undefined;
141
+ encryptionCipher?: string | undefined;
142
+ } | undefined;
143
+ cache?: {
144
+ path?: string | undefined;
145
+ } | undefined;
146
+ timeoutSec?: number | undefined;
147
+ syncPeriod?: number | undefined;
148
+ sync?: {
149
+ policy: "manual" | "opportunistic" | "strict";
150
+ staleAfterMs: number;
151
+ minIntervalMs: number;
152
+ failureBackoffMs: number;
153
+ lockTimeoutMs: number;
154
+ syncTimeoutMs: number;
155
+ maxSyncAttemptsPerMinute: number;
156
+ conflictStrategy: "merge" | "discard-local" | "fail";
157
+ } | undefined;
158
+ }, {
159
+ events?: {
160
+ path?: string | undefined;
161
+ syncUrl?: string | undefined;
162
+ authToken?: string | undefined;
163
+ syncMode?: "replica" | "offline" | undefined;
164
+ encryptionKey?: string | undefined;
165
+ encryptionCipher?: string | undefined;
166
+ readYourWrites?: boolean | undefined;
167
+ } | undefined;
168
+ cache?: {
169
+ path?: string | undefined;
170
+ } | undefined;
171
+ timeoutSec?: number | undefined;
172
+ syncPeriod?: number | undefined;
173
+ sync?: {
174
+ policy?: "manual" | "opportunistic" | "strict" | undefined;
175
+ staleAfterMs?: number | undefined;
176
+ minIntervalMs?: number | undefined;
177
+ failureBackoffMs?: number | undefined;
178
+ lockTimeoutMs?: number | undefined;
179
+ syncTimeoutMs?: number | undefined;
180
+ maxSyncAttemptsPerMinute?: number | undefined;
181
+ conflictStrategy?: "merge" | "discard-local" | "fail" | undefined;
182
+ } | undefined;
183
+ }>;
184
+ export type DbConfig = z.infer<typeof DbConfigSchema>;
185
+ export type EventsDbConfig = z.infer<typeof EventsDbConfigSchema>;
186
+ export type CacheDbConfig = z.infer<typeof CacheDbConfigSchema>;
187
+ export type SyncConfig = z.infer<typeof SyncConfigSchema>;
188
+ export interface SyncResult {
189
+ frames_synced: number;
190
+ frame_no: number;
191
+ }
192
+ export interface SyncStats {
193
+ attempted: boolean;
194
+ success: boolean;
195
+ framesSynced?: number;
196
+ frameNo?: number;
197
+ error?: string;
198
+ }
199
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/db/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAIxB,eAAO,MAAM,UAAU,aAAsD,CAAC;AAI9E,eAAO,MAAM,cAAc,aAAyF,CAAC;AAErH,eAAO,MAAM,cAAc,mCAAiC,CAAC;AAC7D,MAAM,MAAM,QAAQ,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,cAAc,CAAC,CAAC;AAEtD,eAAO,MAAM,gBAAgB,kDAAgD,CAAC;AAC9E,MAAM,MAAM,UAAU,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,gBAAgB,CAAC,CAAC;AAE1D,eAAO,MAAM,sBAAsB,+CAA6C,CAAC;AACjF,MAAM,MAAM,gBAAgB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,sBAAsB,CAAC,CAAC;AAEtE,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;;;;;;;;;;GASpB,CAAC;AAEd,eAAO,MAAM,mBAAmB;;;;;;GAEnB,CAAC;AAEd,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;;;;GAWhB,CAAC;AAEd,eAAO,MAAM,cAAc;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAMf,CAAC;AAEb,MAAM,MAAM,QAAQ,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,cAAc,CAAC,CAAC;AACtD,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAC;AAClE,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAC;AAChE,MAAM,MAAM,UAAU,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,gBAAgB,CAAC,CAAC;AAE1D,MAAM,WAAW,UAAU;IACvB,aAAa,EAAE,MAAM,CAAC;IACtB,QAAQ,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,SAAS;IACtB,SAAS,EAAE,OAAO,CAAC;IACnB,OAAO,EAAE,OAAO,CAAC;IACjB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;CAClB"}
@@ -0,0 +1,43 @@
1
+ import { z } from 'zod';
2
+ // ULID format validation (26 chars, Crockford's Base32)
3
+ const ULID_REGEX = /^[0-9A-HJKMNP-TV-Z]{26}$/i;
4
+ export const UlidSchema = z.string().regex(ULID_REGEX, 'Invalid ULID format');
5
+ // Turso/libsql URL validation (must be libsql:// or https://)
6
+ const TURSO_URL_REGEX = /^(libsql|https):\/\/[a-zA-Z0-9][a-zA-Z0-9-]*(\.[a-zA-Z0-9-]+)*(:\d+)?(\/.*)?$/;
7
+ export const TursoUrlSchema = z.string().regex(TURSO_URL_REGEX, 'Invalid Turso URL (must be libsql:// or https://)');
8
+ export const SyncModeSchema = z.enum(['replica', 'offline']);
9
+ export const SyncPolicySchema = z.enum(['manual', 'opportunistic', 'strict']);
10
+ export const ConflictStrategySchema = z.enum(['merge', 'discard-local', 'fail']);
11
+ export const EventsDbConfigSchema = z.object({
12
+ path: z.string().optional(),
13
+ // Validated Turso URL format (libsql:// or https://)
14
+ syncUrl: TursoUrlSchema.optional(),
15
+ authToken: z.string().optional(),
16
+ syncMode: SyncModeSchema.optional().default('offline'),
17
+ encryptionKey: z.string().optional(),
18
+ encryptionCipher: z.string().optional(),
19
+ readYourWrites: z.boolean().optional().default(true),
20
+ }).optional();
21
+ export const CacheDbConfigSchema = z.object({
22
+ path: z.string().optional(),
23
+ }).optional();
24
+ export const SyncConfigSchema = z.object({
25
+ policy: SyncPolicySchema.optional().default('opportunistic'),
26
+ staleAfterMs: z.number().positive().optional().default(60000),
27
+ minIntervalMs: z.number().positive().optional().default(15000),
28
+ failureBackoffMs: z.number().positive().optional().default(60000),
29
+ lockTimeoutMs: z.number().positive().optional().default(3000),
30
+ // Timeout for individual sync() calls (prevents hanging)
31
+ syncTimeoutMs: z.number().positive().optional().default(30000),
32
+ // Rate limiting: max sync attempts per minute
33
+ maxSyncAttemptsPerMinute: z.number().positive().optional().default(10),
34
+ conflictStrategy: ConflictStrategySchema.optional().default('merge'),
35
+ }).optional();
36
+ export const DbConfigSchema = z.object({
37
+ events: EventsDbConfigSchema,
38
+ cache: CacheDbConfigSchema,
39
+ timeoutSec: z.number().positive().optional(),
40
+ syncPeriod: z.number().nonnegative().optional(),
41
+ sync: SyncConfigSchema,
42
+ }).partial();
43
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/db/types.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import type Database from 'better-sqlite3';
1
+ import type Database from 'libsql';
2
2
  import { EventEnvelope, EventType } from './types.js';
3
3
  export interface AppendEventInput {
4
4
  event_id?: string;
@@ -1 +1 @@
1
- {"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../../src/events/store.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,QAAQ,MAAM,gBAAgB,CAAC;AAE3C,OAAO,EAAE,aAAa,EAAE,SAAS,EAAqB,MAAM,YAAY,CAAC;AAEzE,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,SAAS,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC9B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,sBAAuB,SAAQ,aAAa;IAC3D,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,kBAAkB;IACjC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAgBD,qBAAa,UAAU;IAMT,OAAO,CAAC,EAAE;IALtB,OAAO,CAAC,mBAAmB,CAAqB;IAChD,OAAO,CAAC,gBAAgB,CAAqB;IAC7C,OAAO,CAAC,gBAAgB,CAAqB;IAC7C,OAAO,CAAC,mBAAmB,CAAqB;gBAE5B,EAAE,EAAE,QAAQ,CAAC,QAAQ;IAyBzC,MAAM,CAAC,KAAK,EAAE,gBAAgB,GAAG,sBAAsB;IA+BvD,gBAAgB,CAAC,KAAK,EAAE,gBAAgB,GAAG,sBAAsB,GAAG,IAAI;IA6BxE,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,kBAAkB,GAAG,sBAAsB,EAAE;IAShF,OAAO,CAAC,aAAa;CAetB"}
1
+ {"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../../src/events/store.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,QAAQ,MAAM,QAAQ,CAAC;AAEnC,OAAO,EAAE,aAAa,EAAE,SAAS,EAAqB,MAAM,YAAY,CAAC;AAEzE,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,SAAS,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC9B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,sBAAuB,SAAQ,aAAa;IAC3D,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,kBAAkB;IACjC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAgBD,qBAAa,UAAU;IAMT,OAAO,CAAC,EAAE;IALtB,OAAO,CAAC,mBAAmB,CAAqB;IAChD,OAAO,CAAC,gBAAgB,CAAqB;IAC7C,OAAO,CAAC,gBAAgB,CAAqB;IAC7C,OAAO,CAAC,mBAAmB,CAAqB;gBAE5B,EAAE,EAAE,QAAQ,CAAC,QAAQ;IAyBzC,MAAM,CAAC,KAAK,EAAE,gBAAgB,GAAG,sBAAsB;IA+BvD,gBAAgB,CAAC,KAAK,EAAE,gBAAgB,GAAG,sBAAsB,GAAG,IAAI;IA6BxE,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,kBAAkB,GAAG,sBAAsB,EAAE;IAShF,OAAO,CAAC,aAAa;CAetB"}
@@ -1,14 +1,12 @@
1
1
  import { describe, it, expect, beforeEach, afterEach } from 'vitest';
2
- import Database from 'better-sqlite3';
3
2
  import { EventStore } from './store.js';
4
3
  import { EventType, TaskStatus } from './types.js';
5
- import { runMigrations } from '../db/migrations.js';
4
+ import { createTestDb } from '../db/test-utils.js';
6
5
  describe('EventStore', () => {
7
6
  let db;
8
7
  let store;
9
8
  beforeEach(() => {
10
- db = new Database(':memory:');
11
- runMigrations(db);
9
+ db = createTestDb();
12
10
  store = new EventStore(db);
13
11
  });
14
12
  afterEach(() => {
@@ -1 +1 @@
1
- {"version":3,"file":"store.test.js","sourceRoot":"","sources":["../../src/events/store.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AACrE,OAAO,QAAQ,MAAM,gBAAgB,CAAC;AACtC,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AACxC,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AACnD,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAEpD,QAAQ,CAAC,YAAY,EAAE,GAAG,EAAE;IAC1B,IAAI,EAAqB,CAAC;IAC1B,IAAI,KAAiB,CAAC;IAEtB,UAAU,CAAC,GAAG,EAAE;QACd,EAAE,GAAG,IAAI,QAAQ,CAAC,UAAU,CAAC,CAAC;QAC9B,aAAa,CAAC,EAAE,CAAC,CAAC;QAClB,KAAK,GAAG,IAAI,UAAU,CAAC,EAAE,CAAC,CAAC;IAC7B,CAAC,CAAC,CAAC;IAEH,SAAS,CAAC,GAAG,EAAE;QACb,EAAE,CAAC,KAAK,EAAE,CAAC;IACb,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,QAAQ,EAAE,GAAG,EAAE;QACtB,EAAE,CAAC,sDAAsD,EAAE,GAAG,EAAE;YAC9D,MAAM,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC;gBACzB,OAAO,EAAE,4BAA4B;gBACrC,IAAI,EAAE,SAAS,CAAC,WAAW;gBAC3B,IAAI,EAAE,EAAE,KAAK,EAAE,WAAW,EAAE,OAAO,EAAE,OAAO,EAAE;aAC/C,CAAC,CAAC;YAEH,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,WAAW,EAAE,CAAC;YACrC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,4BAA4B,CAAC,CAAC;YACzD,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC;YAC/C,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,WAAW,EAAE,CAAC;YACtC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;QACzC,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,4BAA4B,EAAE,GAAG,EAAE;YACpC,MAAM,OAAO,GAAG,4BAA4B,CAAC;YAC7C,KAAK,CAAC,MAAM,CAAC;gBACX,QAAQ,EAAE,OAAO;gBACjB,OAAO,EAAE,OAAO;gBAChB,IAAI,EAAE,SAAS,CAAC,WAAW;gBAC3B,IAAI,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE;aAC1C,CAAC,CAAC;YAEH,MAAM,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC;gBACxB,QAAQ,EAAE,OAAO;gBACjB,OAAO,EAAE,OAAO;gBAChB,IAAI,EAAE,SAAS,CAAC,WAAW;gBAC3B,IAAI,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE;aAC5C,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC;QAChB,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,sBAAsB,EAAE,GAAG,EAAE;YAC9B,MAAM,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC;gBACxB,OAAO,EAAE,OAAO;gBAChB,IAAI,EAAE,SAAS,CAAC,WAAW;gBAC3B,IAAI,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE,EAAE,gBAAgB;aAC7C,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC;QAChB,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,aAAa,EAAE,GAAG,EAAE;QAC3B,EAAE,CAAC,oCAAoC,EAAE,GAAG,EAAE;YAC5C,MAAM,MAAM,GAAG,4BAA4B,CAAC;YAE5C,KAAK,CAAC,MAAM,CAAC;gBACX,OAAO,EAAE,MAAM;gBACf,IAAI,EAAE,SAAS,CAAC,WAAW;gBAC3B,IAAI,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE;aAC1C,CAAC,CAAC;YAEH,KAAK,CAAC,MAAM,CAAC;gBACX,OAAO,EAAE,MAAM;gBACf,IAAI,EAAE,SAAS,CAAC,aAAa;gBAC7B,IAAI,EAAE,EAAE,IAAI,EAAE,UAAU,CAAC,OAAO,EAAE,EAAE,EAAE,UAAU,CAAC,KAAK,EAAE;aACzD,CAAC,CAAC;YAEH,MAAM,MAAM,GAAG,KAAK,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;YACzC,MAAM,CAAC,MAAM,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;YAC/B,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC;YACnD,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC;QACvD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,kCAAkC,EAAE,GAAG,EAAE;YAC1C,MAAM,MAAM,GAAG,OAAO,CAAC;YACvB,MAAM,EAAE,GAAG,KAAK,CAAC,MAAM,CAAC;gBACtB,OAAO,EAAE,MAAM;gBACf,IAAI,EAAE,SAAS,CAAC,WAAW;gBAC3B,IAAI,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE;aAC1C,CAAC,CAAC;YACH,KAAK,CAAC,MAAM,CAAC;gBACX,OAAO,EAAE,MAAM;gBACf,IAAI,EAAE,SAAS,CAAC,YAAY;gBAC5B,IAAI,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE;aAC5B,CAAC,CAAC;YACH,KAAK,CAAC,MAAM,CAAC;gBACX,OAAO,EAAE,MAAM;gBACf,IAAI,EAAE,SAAS,CAAC,YAAY;gBAC5B,IAAI,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE;aAC5B,CAAC,CAAC;YAEH,MAAM,MAAM,GAAG,KAAK,CAAC,WAAW,CAAC,MAAM,EAAE,EAAE,OAAO,EAAE,EAAE,CAAC,KAAK,EAAE,CAAC,CAAC;YAChE,MAAM,CAAC,MAAM,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;YAC/B,MAAM,CAAE,MAAM,CAAC,CAAC,CAAC,CAAC,IAAY,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QACzD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,gBAAgB,EAAE,GAAG,EAAE;YACxB,MAAM,MAAM,GAAG,OAAO,CAAC;YACvB,KAAK,CAAC,MAAM,CAAC;gBACX,OAAO,EAAE,MAAM;gBACf,IAAI,EAAE,SAAS,CAAC,WAAW;gBAC3B,IAAI,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE;aAC1C,CAAC,CAAC;YACH,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC;gBAC5B,KAAK,CAAC,MAAM,CAAC;oBACX,OAAO,EAAE,MAAM;oBACf,IAAI,EAAE,SAAS,CAAC,YAAY;oBAC5B,IAAI,EAAE,EAAE,IAAI,EAAE,WAAW,CAAC,EAAE,EAAE;iBAC/B,CAAC,CAAC;YACL,CAAC;YAED,MAAM,MAAM,GAAG,KAAK,CAAC,WAAW,CAAC,MAAM,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC;YACvD,MAAM,CAAC,MAAM,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;QACjC,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,kBAAkB,EAAE,GAAG,EAAE;QAChC,EAAE,CAAC,mBAAmB,EAAE,GAAG,EAAE;YAC3B,MAAM,MAAM,GAAG,KAAK,CAAC,gBAAgB,CAAC;gBACpC,QAAQ,EAAE,SAAS;gBACnB,OAAO,EAAE,OAAO;gBAChB,IAAI,EAAE,SAAS,CAAC,WAAW;gBAC3B,IAAI,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE;aAC1C,CAAC,CAAC;YAEH,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC;YAC9B,MAAM,CAAC,MAAO,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAC3C,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,qCAAqC,EAAE,GAAG,EAAE;YAC7C,KAAK,CAAC,MAAM,CAAC;gBACX,QAAQ,EAAE,SAAS;gBACnB,OAAO,EAAE,OAAO;gBAChB,IAAI,EAAE,SAAS,CAAC,WAAW;gBAC3B,IAAI,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE;aAC1C,CAAC,CAAC;YAEH,MAAM,MAAM,GAAG,KAAK,CAAC,gBAAgB,CAAC;gBACpC,QAAQ,EAAE,SAAS;gBACnB,OAAO,EAAE,OAAO;gBAChB,IAAI,EAAE,SAAS,CAAC,WAAW;gBAC3B,IAAI,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE;aAC1C,CAAC,CAAC;YAEH,MAAM,CAAC,MAAM,CAAC,CAAC,QAAQ,EAAE,CAAC;QAC5B,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"store.test.js","sourceRoot":"","sources":["../../src/events/store.test.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -6,8 +6,13 @@
6
6
  *
7
7
  * @packageDocumentation
8
8
  */
9
- export { createConnection, getDefaultDbPath, withWriteTransaction, } from './db/connection.js';
10
- export { runMigrations, getCurrentVersion } from './db/migrations.js';
9
+ export { withWriteTransaction } from './db/transaction.js';
10
+ export { DatabaseLock, type LockMetadata } from './db/lock.js';
11
+ export { runMigrationsWithRollback, MigrationError, type Migration, type MigrationResult, } from './db/migrations.js';
12
+ export { createDatastore, type Datastore, type ConnectionMode, } from './db/datastore.js';
13
+ export { type DbConfig, type SyncConfig, type SyncResult, type SyncStats, type ConflictStrategy, } from './db/types.js';
14
+ export { createSyncPolicy, type SyncPolicy, } from './db/sync-policy.js';
15
+ export { getInstanceId, getDeviceId, getDirtySince, clearDirtySince, getLastSyncAt, getLastSyncError, getLastSyncFrameNo, getLastSyncAttemptAt, } from './db/meta.js';
11
16
  export { EventStore, type AppendEventInput, type PersistedEventEnvelope, type GetByTaskIdOptions, } from './events/store.js';
12
17
  export { EventType, TaskStatus, validateEventData, EventSchemas, PROJECT_EVENT_TASK_ID, type EventEnvelope, type TaskCreatedData, type StatusChangedData, type CommentAddedData, type CheckpointRecordedData, } from './events/types.js';
13
18
  export { ProjectionEngine } from './projections/engine.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAMH,OAAO,EACL,gBAAgB,EAChB,gBAAgB,EAChB,oBAAoB,GACrB,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAMtE,OAAO,EACL,UAAU,EACV,KAAK,gBAAgB,EACrB,KAAK,sBAAsB,EAC3B,KAAK,kBAAkB,GACxB,MAAM,mBAAmB,CAAC;AAE3B,OAAO,EACL,SAAS,EACT,UAAU,EACV,iBAAiB,EACjB,YAAY,EACZ,qBAAqB,EACrB,KAAK,aAAa,EAClB,KAAK,eAAe,EACpB,KAAK,iBAAiB,EACtB,KAAK,gBAAgB,EACrB,KAAK,sBAAsB,GAC5B,MAAM,mBAAmB,CAAC;AAM3B,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAE3D,OAAO,EACL,KAAK,SAAS,EACd,KAAK,eAAe,GACrB,MAAM,wBAAwB,CAAC;AAEhC,OAAO,EAAE,qBAAqB,EAAE,MAAM,gCAAgC,CAAC;AACvE,OAAO,EAAE,qBAAqB,EAAE,MAAM,+BAA+B,CAAC;AACtE,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAC1D,OAAO,EAAE,4BAA4B,EAAE,MAAM,uCAAuC,CAAC;AACrF,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAE9D,OAAO,EAAE,qBAAqB,EAAE,MAAM,0BAA0B,CAAC;AAMjE,OAAO,EACL,WAAW,EACX,iBAAiB,EACjB,qBAAqB,EACrB,wBAAwB,EACxB,KAAK,eAAe,EACpB,KAAK,YAAY,EACjB,KAAK,IAAI,EACT,KAAK,gBAAgB,EACrB,KAAK,gBAAgB,EACrB,KAAK,YAAY,EACjB,KAAK,WAAW,EAChB,KAAK,SAAS,EACd,KAAK,aAAa,EAClB,KAAK,OAAO,EACZ,KAAK,UAAU,GAChB,MAAM,4BAA4B,CAAC;AAEpC,OAAO,EACL,cAAc,EACd,oBAAoB,EACpB,qBAAqB,EACrB,oBAAoB,EACpB,yBAAyB,EACzB,KAAK,OAAO,EACZ,KAAK,oBAAoB,GAC1B,MAAM,+BAA+B,CAAC;AAEvC,OAAO,EACL,iBAAiB,EACjB,KAAK,SAAS,EACd,KAAK,UAAU,EACf,KAAK,eAAe,EACpB,KAAK,gBAAgB,GACtB,MAAM,kCAAkC,CAAC;AAE1C,OAAO,EACL,aAAa,EACb,KAAK,gBAAgB,EACrB,KAAK,YAAY,EACjB,KAAK,aAAa,GACnB,MAAM,8BAA8B,CAAC;AAEtC,OAAO,EACL,aAAa,EACb,KAAK,YAAY,GAClB,MAAM,8BAA8B,CAAC;AAMtC,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAMtD,OAAO,EACL,YAAY,EACZ,mBAAmB,EACnB,KAAK,UAAU,GAChB,MAAM,2BAA2B,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -9,8 +9,12 @@
9
9
  // ============================================================================
10
10
  // Database
11
11
  // ============================================================================
12
- export { createConnection, getDefaultDbPath, withWriteTransaction, } from './db/connection.js';
13
- export { runMigrations, getCurrentVersion } from './db/migrations.js';
12
+ export { withWriteTransaction } from './db/transaction.js';
13
+ export { DatabaseLock } from './db/lock.js';
14
+ export { runMigrationsWithRollback, MigrationError, } from './db/migrations.js';
15
+ export { createDatastore, } from './db/datastore.js';
16
+ export { createSyncPolicy, } from './db/sync-policy.js';
17
+ export { getInstanceId, getDeviceId, getDirtySince, clearDirtySince, getLastSyncAt, getLastSyncError, getLastSyncFrameNo, getLastSyncAttemptAt, } from './db/meta.js';
14
18
  // ============================================================================
15
19
  // Events
16
20
  // ============================================================================
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,+EAA+E;AAC/E,WAAW;AACX,+EAA+E;AAE/E,OAAO,EACL,gBAAgB,EAChB,gBAAgB,EAChB,oBAAoB,GACrB,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAEtE,+EAA+E;AAC/E,SAAS;AACT,+EAA+E;AAE/E,OAAO,EACL,UAAU,GAIX,MAAM,mBAAmB,CAAC;AAE3B,OAAO,EACL,SAAS,EACT,UAAU,EACV,iBAAiB,EACjB,YAAY,EACZ,qBAAqB,GAMtB,MAAM,mBAAmB,CAAC;AAE3B,+EAA+E;AAC/E,cAAc;AACd,+EAA+E;AAE/E,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAO3D,OAAO,EAAE,qBAAqB,EAAE,MAAM,gCAAgC,CAAC;AACvE,OAAO,EAAE,qBAAqB,EAAE,MAAM,+BAA+B,CAAC;AACtE,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAC1D,OAAO,EAAE,4BAA4B,EAAE,MAAM,uCAAuC,CAAC;AACrF,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAE9D,OAAO,EAAE,qBAAqB,EAAE,MAAM,0BAA0B,CAAC;AAEjE,+EAA+E;AAC/E,WAAW;AACX,+EAA+E;AAE/E,OAAO,EACL,WAAW,EACX,iBAAiB,EACjB,qBAAqB,EACrB,wBAAwB,GAYzB,MAAM,4BAA4B,CAAC;AAEpC,OAAO,EACL,cAAc,EACd,oBAAoB,EACpB,qBAAqB,EACrB,oBAAoB,EACpB,yBAAyB,GAG1B,MAAM,+BAA+B,CAAC;AAEvC,OAAO,EACL,iBAAiB,GAKlB,MAAM,kCAAkC,CAAC;AAE1C,OAAO,EACL,aAAa,GAId,MAAM,8BAA8B,CAAC;AAEtC,OAAO,EACL,aAAa,GAEd,MAAM,8BAA8B,CAAC;AAEtC,+EAA+E;AAC/E,YAAY;AACZ,+EAA+E;AAE/E,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAEtD,+EAA+E;AAC/E,WAAW;AACX,+EAA+E;AAE/E,OAAO,EACL,YAAY,EACZ,mBAAmB,GAEpB,MAAM,2BAA2B,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,+EAA+E;AAC/E,WAAW;AACX,+EAA+E;AAE/E,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAE3D,OAAO,EACL,YAAY,EAEb,MAAM,cAAc,CAAC;AAEtB,OAAO,EACL,yBAAyB,EACzB,cAAc,GAGf,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EACL,eAAe,GAGhB,MAAM,mBAAmB,CAAC;AAU3B,OAAO,EACL,gBAAgB,GAEjB,MAAM,qBAAqB,CAAC;AAE7B,OAAO,EACL,aAAa,EACb,WAAW,EACX,aAAa,EACb,eAAe,EACf,aAAa,EACb,gBAAgB,EAChB,kBAAkB,EAClB,oBAAoB,GACrB,MAAM,cAAc,CAAC;AAEtB,+EAA+E;AAC/E,SAAS;AACT,+EAA+E;AAE/E,OAAO,EACL,UAAU,GAIX,MAAM,mBAAmB,CAAC;AAE3B,OAAO,EACL,SAAS,EACT,UAAU,EACV,iBAAiB,EACjB,YAAY,EACZ,qBAAqB,GAMtB,MAAM,mBAAmB,CAAC;AAE3B,+EAA+E;AAC/E,cAAc;AACd,+EAA+E;AAE/E,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAO3D,OAAO,EAAE,qBAAqB,EAAE,MAAM,gCAAgC,CAAC;AACvE,OAAO,EAAE,qBAAqB,EAAE,MAAM,+BAA+B,CAAC;AACtE,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAC1D,OAAO,EAAE,4BAA4B,EAAE,MAAM,uCAAuC,CAAC;AACrF,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAE9D,OAAO,EAAE,qBAAqB,EAAE,MAAM,0BAA0B,CAAC;AAEjE,+EAA+E;AAC/E,WAAW;AACX,+EAA+E;AAE/E,OAAO,EACL,WAAW,EACX,iBAAiB,EACjB,qBAAqB,EACrB,wBAAwB,GAYzB,MAAM,4BAA4B,CAAC;AAEpC,OAAO,EACL,cAAc,EACd,oBAAoB,EACpB,qBAAqB,EACrB,oBAAoB,EACpB,yBAAyB,GAG1B,MAAM,+BAA+B,CAAC;AAEvC,OAAO,EACL,iBAAiB,GAKlB,MAAM,kCAAkC,CAAC;AAE1C,OAAO,EACL,aAAa,GAId,MAAM,8BAA8B,CAAC;AAEtC,OAAO,EACL,aAAa,GAEd,MAAM,8BAA8B,CAAC;AAEtC,+EAA+E;AAC/E,YAAY;AACZ,+EAA+E;AAE/E,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAEtD,+EAA+E;AAC/E,WAAW;AACX,+EAA+E;AAE/E,OAAO,EACL,YAAY,EACZ,mBAAmB,GAEpB,MAAM,2BAA2B,CAAC"}
@@ -2,21 +2,23 @@ import { describe, it, expect } from 'vitest';
2
2
  import * as hzlCore from './index.js';
3
3
  describe('hzl-core public API', () => {
4
4
  describe('database exports', () => {
5
- it('exports createConnection', () => {
6
- expect(hzlCore.createConnection).toBeDefined();
7
- expect(typeof hzlCore.createConnection).toBe('function');
8
- });
9
- it('exports getDefaultDbPath', () => {
10
- expect(hzlCore.getDefaultDbPath).toBeDefined();
11
- expect(typeof hzlCore.getDefaultDbPath).toBe('function');
12
- });
13
5
  it('exports withWriteTransaction', () => {
14
6
  expect(hzlCore.withWriteTransaction).toBeDefined();
15
7
  expect(typeof hzlCore.withWriteTransaction).toBe('function');
16
8
  });
17
- it('exports runMigrations', () => {
18
- expect(hzlCore.runMigrations).toBeDefined();
19
- expect(typeof hzlCore.runMigrations).toBe('function');
9
+ it('exports createDatastore', () => {
10
+ expect(hzlCore.createDatastore).toBeDefined();
11
+ expect(typeof hzlCore.createDatastore).toBe('function');
12
+ });
13
+ it('exports runMigrationsWithRollback', () => {
14
+ expect(hzlCore.runMigrationsWithRollback).toBeDefined();
15
+ expect(typeof hzlCore.runMigrationsWithRollback).toBe('function');
16
+ });
17
+ it('exports MigrationError', () => {
18
+ expect(hzlCore.MigrationError).toBeDefined();
19
+ });
20
+ it('exports DatabaseLock', () => {
21
+ expect(hzlCore.DatabaseLock).toBeDefined();
20
22
  });
21
23
  });
22
24
  describe('event exports', () => {
@@ -1 +1 @@
1
- {"version":3,"file":"index.test.js","sourceRoot":"","sources":["../src/index.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.test.js","sourceRoot":"","sources":["../src/index.test.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import type Database from 'better-sqlite3';
1
+ import type Database from 'libsql';
2
2
  import type { PersistedEventEnvelope } from '../events/store.js';
3
3
  import type { Projector } from './types.js';
4
4
  export declare class CommentsCheckpointsProjector implements Projector {
@@ -1 +1 @@
1
- {"version":3,"file":"comments-checkpoints.d.ts","sourceRoot":"","sources":["../../src/projections/comments-checkpoints.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,QAAQ,MAAM,gBAAgB,CAAC;AAC3C,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,oBAAoB,CAAC;AACjE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAO5C,qBAAa,4BAA6B,YAAW,SAAS;IAC5D,IAAI,SAA0B;IAE9B,KAAK,CAAC,KAAK,EAAE,sBAAsB,EAAE,EAAE,EAAE,QAAQ,CAAC,QAAQ,GAAG,IAAI;IAWjE,KAAK,CAAC,EAAE,EAAE,QAAQ,CAAC,QAAQ,GAAG,IAAI;IAKlC,OAAO,CAAC,kBAAkB;IAe1B,OAAO,CAAC,wBAAwB;CAajC"}
1
+ {"version":3,"file":"comments-checkpoints.d.ts","sourceRoot":"","sources":["../../src/projections/comments-checkpoints.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,QAAQ,MAAM,QAAQ,CAAC;AACnC,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,oBAAoB,CAAC;AACjE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAO5C,qBAAa,4BAA6B,YAAW,SAAS;IAC5D,IAAI,SAA0B;IAE9B,KAAK,CAAC,KAAK,EAAE,sBAAsB,EAAE,EAAE,EAAE,QAAQ,CAAC,QAAQ,GAAG,IAAI;IAWjE,KAAK,CAAC,EAAE,EAAE,QAAQ,CAAC,QAAQ,GAAG,IAAI;IAKlC,OAAO,CAAC,kBAAkB;IAe1B,OAAO,CAAC,wBAAwB;CAajC"}
@@ -1,8 +1,7 @@
1
1
  // packages/hzl-core/src/projections/comments-checkpoints.test.ts
2
2
  import { describe, it, expect, beforeEach, afterEach } from 'vitest';
3
- import Database from 'better-sqlite3';
4
3
  import { CommentsCheckpointsProjector } from './comments-checkpoints.js';
5
- import { runMigrations } from '../db/migrations.js';
4
+ import { createTestDb } from '../db/test-utils.js';
6
5
  import { EventStore } from '../events/store.js';
7
6
  import { EventType } from '../events/types.js';
8
7
  describe('CommentsCheckpointsProjector', () => {
@@ -10,8 +9,8 @@ describe('CommentsCheckpointsProjector', () => {
10
9
  let eventStore;
11
10
  let projector;
12
11
  beforeEach(() => {
13
- db = new Database(':memory:');
14
- runMigrations(db);
12
+ db = createTestDb();
13
+ // Schema applied by createTestDb
15
14
  eventStore = new EventStore(db);
16
15
  projector = new CommentsCheckpointsProjector();
17
16
  });