hzl-core 2.3.0 → 2.4.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.
- package/dist/__tests__/concurrency/stress.test.js +13 -9
- package/dist/__tests__/concurrency/stress.test.js.map +1 -1
- package/dist/__tests__/properties/invariants.test.js +31 -10
- package/dist/__tests__/properties/invariants.test.js.map +1 -1
- package/dist/db/__tests__/transaction.test.d.ts +2 -0
- package/dist/db/__tests__/transaction.test.d.ts.map +1 -0
- package/dist/db/__tests__/transaction.test.js +67 -0
- package/dist/db/__tests__/transaction.test.js.map +1 -0
- package/dist/db/migrations/index.d.ts +8 -3
- package/dist/db/migrations/index.d.ts.map +1 -1
- package/dist/db/migrations/index.js +14 -3
- package/dist/db/migrations/index.js.map +1 -1
- package/dist/db/migrations/index.test.d.ts +2 -0
- package/dist/db/migrations/index.test.d.ts.map +1 -0
- package/dist/db/migrations/index.test.js +53 -0
- package/dist/db/migrations/index.test.js.map +1 -0
- package/dist/db/schema.d.ts +2 -2
- package/dist/db/schema.d.ts.map +1 -1
- package/dist/db/schema.js +3 -1
- package/dist/db/schema.js.map +1 -1
- package/dist/db/transaction.d.ts.map +1 -1
- package/dist/db/transaction.js +16 -4
- package/dist/db/transaction.js.map +1 -1
- package/dist/events/store.d.ts +3 -1
- package/dist/events/store.d.ts.map +1 -1
- package/dist/events/store.js +23 -9
- package/dist/events/store.js.map +1 -1
- package/dist/events/store.test.js +49 -2
- package/dist/events/store.test.js.map +1 -1
- package/dist/events/types.d.ts +1 -0
- package/dist/events/types.d.ts.map +1 -1
- package/dist/events/types.js +1 -0
- package/dist/events/types.js.map +1 -1
- package/dist/events/upcasters.d.ts +16 -0
- package/dist/events/upcasters.d.ts.map +1 -0
- package/dist/events/upcasters.js +35 -0
- package/dist/events/upcasters.js.map +1 -0
- package/dist/events/upcasters.test.d.ts +2 -0
- package/dist/events/upcasters.test.d.ts.map +1 -0
- package/dist/events/upcasters.test.js +47 -0
- package/dist/events/upcasters.test.js.map +1 -0
- package/dist/index.d.ts +2 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -1
- package/dist/index.js.map +1 -1
- package/dist/index.test.js +0 -1
- package/dist/index.test.js.map +1 -1
- package/dist/projections/comments-checkpoints.d.ts +2 -2
- package/dist/projections/comments-checkpoints.d.ts.map +1 -1
- package/dist/projections/comments-checkpoints.js +4 -3
- package/dist/projections/comments-checkpoints.js.map +1 -1
- package/dist/projections/comments-checkpoints.test.js +30 -0
- package/dist/projections/comments-checkpoints.test.js.map +1 -1
- package/dist/projections/dependencies.d.ts +2 -2
- package/dist/projections/dependencies.d.ts.map +1 -1
- package/dist/projections/dependencies.js +5 -4
- package/dist/projections/dependencies.js.map +1 -1
- package/dist/projections/dependencies.test.js +29 -0
- package/dist/projections/dependencies.test.js.map +1 -1
- package/dist/projections/projects.d.ts +2 -2
- package/dist/projections/projects.d.ts.map +1 -1
- package/dist/projections/projects.js +8 -9
- package/dist/projections/projects.js.map +1 -1
- package/dist/projections/projects.test.js +34 -0
- package/dist/projections/projects.test.js.map +1 -1
- package/dist/projections/search.d.ts +2 -2
- package/dist/projections/search.d.ts.map +1 -1
- package/dist/projections/search.js +15 -12
- package/dist/projections/search.js.map +1 -1
- package/dist/projections/search.test.js +37 -0
- package/dist/projections/search.test.js.map +1 -1
- package/dist/projections/tags.d.ts +2 -2
- package/dist/projections/tags.d.ts.map +1 -1
- package/dist/projections/tags.js +4 -3
- package/dist/projections/tags.js.map +1 -1
- package/dist/projections/tags.test.js +29 -0
- package/dist/projections/tags.test.js.map +1 -1
- package/dist/projections/tasks-current.d.ts +2 -2
- package/dist/projections/tasks-current.d.ts.map +1 -1
- package/dist/projections/tasks-current.js +19 -14
- package/dist/projections/tasks-current.js.map +1 -1
- package/dist/projections/tasks-current.test.js +87 -0
- package/dist/projections/tasks-current.test.js.map +1 -1
- package/dist/projections/types.d.ts +14 -0
- package/dist/projections/types.d.ts.map +1 -1
- package/dist/projections/types.js +23 -1
- package/dist/projections/types.js.map +1 -1
- package/dist/services/search-service.js +1 -1
- package/dist/services/search-service.js.map +1 -1
- package/dist/services/search-service.test.js +23 -0
- package/dist/services/search-service.test.js.map +1 -1
- package/dist/services/task-service.d.ts +29 -4
- package/dist/services/task-service.d.ts.map +1 -1
- package/dist/services/task-service.js +272 -69
- package/dist/services/task-service.js.map +1 -1
- package/dist/services/task-service.test.js +313 -15
- package/dist/services/task-service.test.js.map +1 -1
- package/dist/services/workflow-service.test.js +525 -161
- package/dist/services/workflow-service.test.js.map +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"comments-checkpoints.js","sourceRoot":"","sources":["../../src/projections/comments-checkpoints.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"comments-checkpoints.js","sourceRoot":"","sources":["../../src/projections/comments-checkpoints.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAC9C,OAAO,EACL,SAAS,GAGV,MAAM,oBAAoB,CAAC;AAE5B,MAAM,OAAO,4BAA6B,SAAQ,gBAAgB;IAChE,IAAI,GAAG,sBAAsB,CAAC;IAE9B,KAAK,CAAC,KAA6B,EAAE,EAAqB;QACxD,QAAQ,KAAK,CAAC,IAAI,EAAE,CAAC;YACnB,KAAK,SAAS,CAAC,YAAY;gBACzB,IAAI,CAAC,kBAAkB,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;gBACnC,MAAM;YACR,KAAK,SAAS,CAAC,kBAAkB;gBAC/B,IAAI,CAAC,wBAAwB,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;gBACzC,MAAM;QACV,CAAC;IACH,CAAC;IAED,KAAK,CAAC,EAAqB;QACzB,EAAE,CAAC,IAAI,CAAC,2BAA2B,CAAC,CAAC;QACrC,EAAE,CAAC,IAAI,CAAC,8BAA8B,CAAC,CAAC;IAC1C,CAAC;IAEO,kBAAkB,CAAC,KAA6B,EAAE,EAAqB;QAC7E,MAAM,IAAI,GAAG,KAAK,CAAC,IAAwB,CAAC;QAC5C,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,eAAe,EAAE;;;KAG9B,CAAC,CAAC,GAAG,CACJ,KAAK,CAAC,KAAK,EACX,KAAK,CAAC,OAAO,EACb,KAAK,CAAC,MAAM,IAAI,IAAI,EACpB,KAAK,CAAC,QAAQ,IAAI,IAAI,EACtB,IAAI,CAAC,IAAI,EACT,KAAK,CAAC,SAAS,CAChB,CAAC;IACJ,CAAC;IAEO,wBAAwB,CAAC,KAA6B,EAAE,EAAqB;QACnF,MAAM,IAAI,GAAG,KAAK,CAAC,IAA8B,CAAC;QAClD,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,kBAAkB,EAAE;;;KAGjC,CAAC,CAAC,GAAG,CACJ,KAAK,CAAC,KAAK,EACX,KAAK,CAAC,OAAO,EACb,IAAI,CAAC,IAAI,EACT,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,IAAI,EAAE,CAAC,EAC/B,KAAK,CAAC,SAAS,CAChB,CAAC;IACJ,CAAC;CACF"}
|
|
@@ -66,6 +66,36 @@ describe('CommentsCheckpointsProjector', () => {
|
|
|
66
66
|
expect(commentCount.cnt).toBe(0);
|
|
67
67
|
expect(checkpointCount.cnt).toBe(0);
|
|
68
68
|
});
|
|
69
|
+
it('re-prepares statements when db reference changes', () => {
|
|
70
|
+
const firstDb = createTestDb();
|
|
71
|
+
const secondDb = createTestDb();
|
|
72
|
+
const firstStore = new EventStore(firstDb);
|
|
73
|
+
const secondStore = new EventStore(secondDb);
|
|
74
|
+
const localProjector = new CommentsCheckpointsProjector();
|
|
75
|
+
try {
|
|
76
|
+
const firstEvent = firstStore.append({
|
|
77
|
+
task_id: 'TASK1',
|
|
78
|
+
type: EventType.CommentAdded,
|
|
79
|
+
data: { text: 'first comment' },
|
|
80
|
+
});
|
|
81
|
+
localProjector.apply(firstEvent, firstDb);
|
|
82
|
+
const secondEvent = secondStore.append({
|
|
83
|
+
task_id: 'TASK2',
|
|
84
|
+
type: EventType.CommentAdded,
|
|
85
|
+
data: { text: 'second comment' },
|
|
86
|
+
});
|
|
87
|
+
localProjector.apply(secondEvent, secondDb);
|
|
88
|
+
const comment = secondDb
|
|
89
|
+
.prepare('SELECT * FROM task_comments WHERE task_id = ?')
|
|
90
|
+
.get('TASK2');
|
|
91
|
+
expect(comment).toBeDefined();
|
|
92
|
+
expect(comment.text).toBe('second comment');
|
|
93
|
+
}
|
|
94
|
+
finally {
|
|
95
|
+
firstDb.close();
|
|
96
|
+
secondDb.close();
|
|
97
|
+
}
|
|
98
|
+
});
|
|
69
99
|
});
|
|
70
100
|
});
|
|
71
101
|
//# sourceMappingURL=comments-checkpoints.test.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"comments-checkpoints.test.js","sourceRoot":"","sources":["../../src/projections/comments-checkpoints.test.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"comments-checkpoints.test.js","sourceRoot":"","sources":["../../src/projections/comments-checkpoints.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import type Database from 'libsql';
|
|
2
2
|
import type { PersistedEventEnvelope } from '../events/store.js';
|
|
3
|
-
import
|
|
4
|
-
export declare class DependenciesProjector
|
|
3
|
+
import { CachingProjector } from './types.js';
|
|
4
|
+
export declare class DependenciesProjector extends CachingProjector {
|
|
5
5
|
name: string;
|
|
6
6
|
apply(event: PersistedEventEnvelope, db: Database.Database): void;
|
|
7
7
|
reset(db: Database.Database): void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dependencies.d.ts","sourceRoot":"","sources":["../../src/projections/dependencies.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,QAAQ,MAAM,QAAQ,CAAC;AACnC,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,oBAAoB,CAAC;AACjE,OAAO,
|
|
1
|
+
{"version":3,"file":"dependencies.d.ts","sourceRoot":"","sources":["../../src/projections/dependencies.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,QAAQ,MAAM,QAAQ,CAAC;AACnC,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,oBAAoB,CAAC;AACjE,OAAO,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAG9C,qBAAa,qBAAsB,SAAQ,gBAAgB;IACzD,IAAI,SAAkB;IAEtB,KAAK,CAAC,KAAK,EAAE,sBAAsB,EAAE,EAAE,EAAE,QAAQ,CAAC,QAAQ,GAAG,IAAI;IAcjE,KAAK,CAAC,EAAE,EAAE,QAAQ,CAAC,QAAQ,GAAG,IAAI;IAIlC,OAAO,CAAC,iBAAiB;IAezB,OAAO,CAAC,qBAAqB;IAS7B,OAAO,CAAC,uBAAuB;CAQhC"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
|
+
import { CachingProjector } from './types.js';
|
|
1
2
|
import { EventType } from '../events/types.js';
|
|
2
|
-
export class DependenciesProjector {
|
|
3
|
+
export class DependenciesProjector extends CachingProjector {
|
|
3
4
|
name = 'dependencies';
|
|
4
5
|
apply(event, db) {
|
|
5
6
|
switch (event.type) {
|
|
@@ -22,18 +23,18 @@ export class DependenciesProjector {
|
|
|
22
23
|
const dependsOn = data.depends_on;
|
|
23
24
|
if (!dependsOn || dependsOn.length === 0)
|
|
24
25
|
return;
|
|
25
|
-
const insertStmt =
|
|
26
|
+
const insertStmt = this.stmt(db, 'insertDependency', 'INSERT OR IGNORE INTO task_dependencies (task_id, depends_on_id) VALUES (?, ?)');
|
|
26
27
|
for (const depId of dependsOn) {
|
|
27
28
|
insertStmt.run(event.task_id, depId);
|
|
28
29
|
}
|
|
29
30
|
}
|
|
30
31
|
handleDependencyAdded(event, db) {
|
|
31
32
|
const data = event.data;
|
|
32
|
-
|
|
33
|
+
this.stmt(db, 'insertDependency', 'INSERT OR IGNORE INTO task_dependencies (task_id, depends_on_id) VALUES (?, ?)').run(event.task_id, data.depends_on_id);
|
|
33
34
|
}
|
|
34
35
|
handleDependencyRemoved(event, db) {
|
|
35
36
|
const data = event.data;
|
|
36
|
-
|
|
37
|
+
this.stmt(db, 'deleteDependency', 'DELETE FROM task_dependencies WHERE task_id = ? AND depends_on_id = ?').run(event.task_id, data.depends_on_id);
|
|
37
38
|
}
|
|
38
39
|
}
|
|
39
40
|
//# sourceMappingURL=dependencies.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dependencies.js","sourceRoot":"","sources":["../../src/projections/dependencies.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"dependencies.js","sourceRoot":"","sources":["../../src/projections/dependencies.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAC9C,OAAO,EAAE,SAAS,EAA6C,MAAM,oBAAoB,CAAC;AAE1F,MAAM,OAAO,qBAAsB,SAAQ,gBAAgB;IACzD,IAAI,GAAG,cAAc,CAAC;IAEtB,KAAK,CAAC,KAA6B,EAAE,EAAqB;QACxD,QAAQ,KAAK,CAAC,IAAI,EAAE,CAAC;YACnB,KAAK,SAAS,CAAC,WAAW;gBACxB,IAAI,CAAC,iBAAiB,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;gBAClC,MAAM;YACR,KAAK,SAAS,CAAC,eAAe;gBAC5B,IAAI,CAAC,qBAAqB,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;gBACtC,MAAM;YACR,KAAK,SAAS,CAAC,iBAAiB;gBAC9B,IAAI,CAAC,uBAAuB,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;gBACxC,MAAM;QACV,CAAC;IACH,CAAC;IAED,KAAK,CAAC,EAAqB;QACzB,EAAE,CAAC,IAAI,CAAC,+BAA+B,CAAC,CAAC;IAC3C,CAAC;IAEO,iBAAiB,CAAC,KAA6B,EAAE,EAAqB;QAC5E,MAAM,IAAI,GAAG,KAAK,CAAC,IAAuB,CAAC;QAC3C,MAAM,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC;QAClC,IAAI,CAAC,SAAS,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO;QAEjD,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAC1B,EAAE,EACF,kBAAkB,EAClB,gFAAgF,CACjF,CAAC;QACF,KAAK,MAAM,KAAK,IAAI,SAAS,EAAE,CAAC;YAC9B,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;QACvC,CAAC;IACH,CAAC;IAEO,qBAAqB,CAAC,KAA6B,EAAE,EAAqB;QAChF,MAAM,IAAI,GAAG,KAAK,CAAC,IAAsB,CAAC;QAC1C,IAAI,CAAC,IAAI,CACP,EAAE,EACF,kBAAkB,EAClB,gFAAgF,CACjF,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC;IAC3C,CAAC;IAEO,uBAAuB,CAAC,KAA6B,EAAE,EAAqB;QAClF,MAAM,IAAI,GAAG,KAAK,CAAC,IAAsB,CAAC;QAC1C,IAAI,CAAC,IAAI,CACP,EAAE,EACF,kBAAkB,EAClB,uEAAuE,CACxE,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC;IAC3C,CAAC;CACF"}
|
|
@@ -91,6 +91,35 @@ describe('DependenciesProjector', () => {
|
|
|
91
91
|
const count = db.prepare('SELECT COUNT(*) as cnt FROM task_dependencies').get();
|
|
92
92
|
expect(count.cnt).toBe(0);
|
|
93
93
|
});
|
|
94
|
+
it('re-prepares statements when db reference changes', () => {
|
|
95
|
+
const firstDb = createTestDb();
|
|
96
|
+
const secondDb = createTestDb();
|
|
97
|
+
const firstStore = new EventStore(firstDb);
|
|
98
|
+
const secondStore = new EventStore(secondDb);
|
|
99
|
+
const localProjector = new DependenciesProjector();
|
|
100
|
+
try {
|
|
101
|
+
const firstEvent = firstStore.append({
|
|
102
|
+
task_id: 'TASK1',
|
|
103
|
+
type: EventType.DependencyAdded,
|
|
104
|
+
data: { depends_on_id: 'DEP1' },
|
|
105
|
+
});
|
|
106
|
+
localProjector.apply(firstEvent, firstDb);
|
|
107
|
+
const secondEvent = secondStore.append({
|
|
108
|
+
task_id: 'TASK2',
|
|
109
|
+
type: EventType.DependencyAdded,
|
|
110
|
+
data: { depends_on_id: 'DEP2' },
|
|
111
|
+
});
|
|
112
|
+
localProjector.apply(secondEvent, secondDb);
|
|
113
|
+
const dep = secondDb
|
|
114
|
+
.prepare('SELECT * FROM task_dependencies WHERE task_id = ? AND depends_on_id = ?')
|
|
115
|
+
.get('TASK2', 'DEP2');
|
|
116
|
+
expect(dep).toBeDefined();
|
|
117
|
+
}
|
|
118
|
+
finally {
|
|
119
|
+
firstDb.close();
|
|
120
|
+
secondDb.close();
|
|
121
|
+
}
|
|
122
|
+
});
|
|
94
123
|
});
|
|
95
124
|
});
|
|
96
125
|
//# sourceMappingURL=dependencies.test.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dependencies.test.js","sourceRoot":"","sources":["../../src/projections/dependencies.test.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"dependencies.test.js","sourceRoot":"","sources":["../../src/projections/dependencies.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import type Database from 'libsql';
|
|
2
2
|
import type { PersistedEventEnvelope } from '../events/store.js';
|
|
3
|
-
import
|
|
4
|
-
export declare class ProjectsProjector
|
|
3
|
+
import { CachingProjector } from './types.js';
|
|
4
|
+
export declare class ProjectsProjector extends CachingProjector {
|
|
5
5
|
name: string;
|
|
6
6
|
apply(event: PersistedEventEnvelope, db: Database.Database): void;
|
|
7
7
|
reset(db: Database.Database): void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"projects.d.ts","sourceRoot":"","sources":["../../src/projections/projects.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,QAAQ,MAAM,QAAQ,CAAC;AACnC,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,oBAAoB,CAAC;AACjE,OAAO,
|
|
1
|
+
{"version":3,"file":"projects.d.ts","sourceRoot":"","sources":["../../src/projections/projects.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,QAAQ,MAAM,QAAQ,CAAC;AACnC,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,oBAAoB,CAAC;AACjE,OAAO,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAQ9C,qBAAa,iBAAkB,SAAQ,gBAAgB;IACrD,IAAI,SAAc;IAElB,KAAK,CAAC,KAAK,EAAE,sBAAsB,EAAE,EAAE,EAAE,QAAQ,CAAC,QAAQ,GAAG,IAAI;IAcjE,KAAK,CAAC,EAAE,EAAE,QAAQ,CAAC,QAAQ,GAAG,IAAI;IAIlC,OAAO,CAAC,oBAAoB;IAqB5B,OAAO,CAAC,oBAAoB;IA2C5B,OAAO,CAAC,oBAAoB;CAS7B"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
|
+
import { CachingProjector } from './types.js';
|
|
1
2
|
import { EventType, } from '../events/types.js';
|
|
2
|
-
export class ProjectsProjector {
|
|
3
|
+
export class ProjectsProjector extends CachingProjector {
|
|
3
4
|
name = 'projects';
|
|
4
5
|
apply(event, db) {
|
|
5
6
|
switch (event.type) {
|
|
@@ -19,28 +20,26 @@ export class ProjectsProjector {
|
|
|
19
20
|
}
|
|
20
21
|
handleProjectCreated(event, db) {
|
|
21
22
|
const data = event.data;
|
|
22
|
-
|
|
23
|
+
this.stmt(db, 'insertProject', `
|
|
23
24
|
INSERT OR IGNORE INTO projects (name, description, is_protected, created_at, last_event_id)
|
|
24
25
|
VALUES (?, ?, ?, ?, ?)
|
|
25
26
|
`).run(data.name, data.description ?? null, data.is_protected ? 1 : 0, event.timestamp, event.rowid);
|
|
26
27
|
}
|
|
27
28
|
handleProjectRenamed(event, db) {
|
|
28
29
|
const data = event.data;
|
|
29
|
-
const oldProject = db
|
|
30
|
-
.prepare('SELECT * FROM projects WHERE name = ?')
|
|
31
|
-
.get(data.old_name);
|
|
30
|
+
const oldProject = this.stmt(db, 'selectProjectByName', 'SELECT * FROM projects WHERE name = ?').get(data.old_name);
|
|
32
31
|
if (!oldProject)
|
|
33
32
|
return;
|
|
34
|
-
|
|
35
|
-
|
|
33
|
+
this.stmt(db, 'deleteProjectByName', 'DELETE FROM projects WHERE name = ?').run(data.old_name);
|
|
34
|
+
this.stmt(db, 'insertProjectOnRename', `
|
|
36
35
|
INSERT INTO projects (name, description, is_protected, created_at, last_event_id)
|
|
37
36
|
VALUES (?, ?, ?, ?, ?)
|
|
38
37
|
`).run(data.new_name, oldProject.description, oldProject.is_protected, oldProject.created_at, event.rowid);
|
|
39
|
-
|
|
38
|
+
this.stmt(db, 'updateTasksCurrentProjectName', 'UPDATE tasks_current SET project = ? WHERE project = ?').run(data.new_name, data.old_name);
|
|
40
39
|
}
|
|
41
40
|
handleProjectDeleted(event, db) {
|
|
42
41
|
const data = event.data;
|
|
43
|
-
|
|
42
|
+
this.stmt(db, 'deleteProjectByName', 'DELETE FROM projects WHERE name = ?').run(data.name);
|
|
44
43
|
}
|
|
45
44
|
}
|
|
46
45
|
//# sourceMappingURL=projects.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"projects.js","sourceRoot":"","sources":["../../src/projections/projects.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"projects.js","sourceRoot":"","sources":["../../src/projections/projects.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAC9C,OAAO,EACL,SAAS,GAIV,MAAM,oBAAoB,CAAC;AAE5B,MAAM,OAAO,iBAAkB,SAAQ,gBAAgB;IACrD,IAAI,GAAG,UAAU,CAAC;IAElB,KAAK,CAAC,KAA6B,EAAE,EAAqB;QACxD,QAAQ,KAAK,CAAC,IAAI,EAAE,CAAC;YACnB,KAAK,SAAS,CAAC,cAAc;gBAC3B,IAAI,CAAC,oBAAoB,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;gBACrC,MAAM;YACR,KAAK,SAAS,CAAC,cAAc;gBAC3B,IAAI,CAAC,oBAAoB,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;gBACrC,MAAM;YACR,KAAK,SAAS,CAAC,cAAc;gBAC3B,IAAI,CAAC,oBAAoB,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;gBACrC,MAAM;QACV,CAAC;IACH,CAAC;IAED,KAAK,CAAC,EAAqB;QACzB,EAAE,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC;IAClC,CAAC;IAEO,oBAAoB,CAC1B,KAA6B,EAC7B,EAAqB;QAErB,MAAM,IAAI,GAAG,KAAK,CAAC,IAA0B,CAAC;QAC9C,IAAI,CAAC,IAAI,CACP,EAAE,EACF,eAAe,EACf;;;KAGD,CACA,CAAC,GAAG,CACH,IAAI,CAAC,IAAI,EACT,IAAI,CAAC,WAAW,IAAI,IAAI,EACxB,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EACzB,KAAK,CAAC,SAAS,EACf,KAAK,CAAC,KAAK,CACZ,CAAC;IACJ,CAAC;IAEO,oBAAoB,CAC1B,KAA6B,EAC7B,EAAqB;QAErB,MAAM,IAAI,GAAG,KAAK,CAAC,IAA0B,CAAC;QAE9C,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAC1B,EAAE,EACF,qBAAqB,EACrB,uCAAuC,CACxC,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAEN,CAAC;QACd,IAAI,CAAC,UAAU;YAAE,OAAO;QAExB,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,qBAAqB,EAAE,qCAAqC,CAAC,CAAC,GAAG,CAC7E,IAAI,CAAC,QAAQ,CACd,CAAC;QACF,IAAI,CAAC,IAAI,CACP,EAAE,EACF,uBAAuB,EACvB;;;KAGD,CACA,CAAC,GAAG,CACH,IAAI,CAAC,QAAQ,EACb,UAAU,CAAC,WAAW,EACtB,UAAU,CAAC,YAAY,EACvB,UAAU,CAAC,UAAU,EACrB,KAAK,CAAC,KAAK,CACZ,CAAC;QAEF,IAAI,CAAC,IAAI,CACP,EAAE,EACF,+BAA+B,EAC/B,wDAAwD,CACzD,CAAC,GAAG,CACH,IAAI,CAAC,QAAQ,EACb,IAAI,CAAC,QAAQ,CACd,CAAC;IACJ,CAAC;IAEO,oBAAoB,CAC1B,KAA6B,EAC7B,EAAqB;QAErB,MAAM,IAAI,GAAG,KAAK,CAAC,IAA0B,CAAC;QAC9C,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,qBAAqB,EAAE,qCAAqC,CAAC,CAAC,GAAG,CAC7E,IAAI,CAAC,IAAI,CACV,CAAC;IACJ,CAAC;CACF"}
|
|
@@ -81,5 +81,39 @@ describe('ProjectsProjector', () => {
|
|
|
81
81
|
const count = db.prepare('SELECT COUNT(*) as count FROM projects').get();
|
|
82
82
|
expect(count.count).toBe(0);
|
|
83
83
|
});
|
|
84
|
+
it('should re-prepare statements when db reference changes', () => {
|
|
85
|
+
const firstDb = createTestDb();
|
|
86
|
+
const secondDb = createTestDb();
|
|
87
|
+
const localProjector = new ProjectsProjector();
|
|
88
|
+
try {
|
|
89
|
+
const firstEvent = {
|
|
90
|
+
rowid: 1,
|
|
91
|
+
event_id: 'evt-1',
|
|
92
|
+
task_id: PROJECT_EVENT_TASK_ID,
|
|
93
|
+
type: EventType.ProjectCreated,
|
|
94
|
+
data: { name: 'first-project' },
|
|
95
|
+
timestamp: '2026-01-30T12:00:00.000Z',
|
|
96
|
+
};
|
|
97
|
+
localProjector.apply(firstEvent, firstDb);
|
|
98
|
+
const secondEvent = {
|
|
99
|
+
rowid: 2,
|
|
100
|
+
event_id: 'evt-2',
|
|
101
|
+
task_id: PROJECT_EVENT_TASK_ID,
|
|
102
|
+
type: EventType.ProjectCreated,
|
|
103
|
+
data: { name: 'second-project' },
|
|
104
|
+
timestamp: '2026-01-30T12:01:00.000Z',
|
|
105
|
+
};
|
|
106
|
+
localProjector.apply(secondEvent, secondDb);
|
|
107
|
+
const row = secondDb
|
|
108
|
+
.prepare('SELECT * FROM projects WHERE name = ?')
|
|
109
|
+
.get('second-project');
|
|
110
|
+
expect(row).toBeDefined();
|
|
111
|
+
expect(row.name).toBe('second-project');
|
|
112
|
+
}
|
|
113
|
+
finally {
|
|
114
|
+
firstDb.close();
|
|
115
|
+
secondDb.close();
|
|
116
|
+
}
|
|
117
|
+
});
|
|
84
118
|
});
|
|
85
119
|
//# sourceMappingURL=projects.test.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"projects.test.js","sourceRoot":"","sources":["../../src/projections/projects.test.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"projects.test.js","sourceRoot":"","sources":["../../src/projections/projects.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import type Database from 'libsql';
|
|
2
2
|
import type { PersistedEventEnvelope } from '../events/store.js';
|
|
3
|
-
import
|
|
4
|
-
export declare class SearchProjector
|
|
3
|
+
import { CachingProjector } from './types.js';
|
|
4
|
+
export declare class SearchProjector extends CachingProjector {
|
|
5
5
|
name: string;
|
|
6
6
|
apply(event: PersistedEventEnvelope, db: Database.Database): void;
|
|
7
7
|
reset(db: Database.Database): void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"search.d.ts","sourceRoot":"","sources":["../../src/projections/search.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,QAAQ,MAAM,QAAQ,CAAC;AACnC,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,oBAAoB,CAAC;AACjE,OAAO,
|
|
1
|
+
{"version":3,"file":"search.d.ts","sourceRoot":"","sources":["../../src/projections/search.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,QAAQ,MAAM,QAAQ,CAAC;AACnC,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,oBAAoB,CAAC;AACjE,OAAO,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAK9C,qBAAa,eAAgB,SAAQ,gBAAgB;IACnD,IAAI,SAAY;IAEhB,KAAK,CAAC,KAAK,EAAE,sBAAsB,EAAE,EAAE,EAAE,QAAQ,CAAC,QAAQ,GAAG,IAAI;IAWjE,KAAK,CAAC,EAAE,EAAE,QAAQ,CAAC,QAAQ,GAAG,IAAI;IAIlC,OAAO,CAAC,iBAAiB;IASzB,OAAO,CAAC,iBAAiB;CA0B1B"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
|
+
import { CachingProjector } from './types.js';
|
|
1
2
|
import { EventType } from '../events/types.js';
|
|
2
|
-
const SEARCHABLE_FIELDS = new Set(['title', 'description']);
|
|
3
|
-
export class SearchProjector {
|
|
3
|
+
const SEARCHABLE_FIELDS = new Set(['title', 'description', 'tags']);
|
|
4
|
+
export class SearchProjector extends CachingProjector {
|
|
4
5
|
name = 'search';
|
|
5
6
|
apply(event, db) {
|
|
6
7
|
switch (event.type) {
|
|
@@ -17,27 +18,29 @@ export class SearchProjector {
|
|
|
17
18
|
}
|
|
18
19
|
handleTaskCreated(event, db) {
|
|
19
20
|
const data = event.data;
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
21
|
+
const tags = Array.isArray(data.tags) ? data.tags.join(' ') : '';
|
|
22
|
+
this.stmt(db, 'insertTaskSearch', `
|
|
23
|
+
INSERT INTO task_search (task_id, title, description, tags)
|
|
24
|
+
VALUES (?, ?, ?, ?)
|
|
25
|
+
`).run(event.task_id, data.title, data.description ?? '', tags);
|
|
24
26
|
}
|
|
25
27
|
handleTaskUpdated(event, db) {
|
|
26
28
|
const data = event.data;
|
|
27
29
|
if (!SEARCHABLE_FIELDS.has(data.field))
|
|
28
30
|
return;
|
|
29
31
|
// Get current values from task_search (avoids N+1 query to tasks_current)
|
|
30
|
-
const current =
|
|
32
|
+
const current = this.stmt(db, 'selectTaskSearchById', 'SELECT title, description, tags FROM task_search WHERE task_id = ?').get(event.task_id);
|
|
31
33
|
if (!current)
|
|
32
34
|
return;
|
|
33
35
|
// Use the new value from the event for the changed field
|
|
34
36
|
const title = data.field === 'title' ? data.new_value : current.title;
|
|
35
37
|
const description = data.field === 'description' ? data.new_value ?? '' : current.description;
|
|
36
|
-
|
|
37
|
-
db.
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
38
|
+
const tags = data.field === 'tags' ? (Array.isArray(data.new_value) ? data.new_value.join(' ') : '') : current.tags;
|
|
39
|
+
this.stmt(db, 'deleteTaskSearchById', 'DELETE FROM task_search WHERE task_id = ?').run(event.task_id);
|
|
40
|
+
this.stmt(db, 'insertTaskSearch', `
|
|
41
|
+
INSERT INTO task_search (task_id, title, description, tags)
|
|
42
|
+
VALUES (?, ?, ?, ?)
|
|
43
|
+
`).run(event.task_id, title, description, tags);
|
|
41
44
|
}
|
|
42
45
|
}
|
|
43
46
|
//# sourceMappingURL=search.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"search.js","sourceRoot":"","sources":["../../src/projections/search.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"search.js","sourceRoot":"","sources":["../../src/projections/search.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAC9C,OAAO,EAAE,SAAS,EAA8C,MAAM,oBAAoB,CAAC;AAE3F,MAAM,iBAAiB,GAAG,IAAI,GAAG,CAAC,CAAC,OAAO,EAAE,aAAa,EAAE,MAAM,CAAC,CAAC,CAAC;AAEpE,MAAM,OAAO,eAAgB,SAAQ,gBAAgB;IACnD,IAAI,GAAG,QAAQ,CAAC;IAEhB,KAAK,CAAC,KAA6B,EAAE,EAAqB;QACxD,QAAQ,KAAK,CAAC,IAAI,EAAE,CAAC;YACnB,KAAK,SAAS,CAAC,WAAW;gBACxB,IAAI,CAAC,iBAAiB,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;gBAClC,MAAM;YACR,KAAK,SAAS,CAAC,WAAW;gBACxB,IAAI,CAAC,iBAAiB,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;gBAClC,MAAM;QACV,CAAC;IACH,CAAC;IAED,KAAK,CAAC,EAAqB;QACzB,EAAE,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC;IACrC,CAAC;IAEO,iBAAiB,CAAC,KAA6B,EAAE,EAAqB;QAC5E,MAAM,IAAI,GAAG,KAAK,CAAC,IAAuB,CAAC;QAC3C,MAAM,IAAI,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QACjE,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,kBAAkB,EAAE;;;KAGjC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,WAAW,IAAI,EAAE,EAAE,IAAI,CAAC,CAAC;IAClE,CAAC;IAEO,iBAAiB,CAAC,KAA6B,EAAE,EAAqB;QAC5E,MAAM,IAAI,GAAG,KAAK,CAAC,IAAuB,CAAC;QAC3C,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC;YAAE,OAAO;QAE/C,0EAA0E;QAC1E,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CACvB,EAAE,EACF,sBAAsB,EACtB,oEAAoE,CACrE,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAqE,CAAC;QAEzF,IAAI,CAAC,OAAO;YAAE,OAAO;QAErB,yDAAyD;QACzD,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,KAAK,OAAO,CAAC,CAAC,CAAE,IAAI,CAAC,SAAoB,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC;QAClF,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,KAAK,aAAa,CAAC,CAAC,CAAE,IAAI,CAAC,SAA2B,IAAI,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,WAAW,CAAC;QACjH,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,KAAK,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAE,IAAI,CAAC,SAAsB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC;QAElI,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,sBAAsB,EAAE,2CAA2C,CAAC,CAAC,GAAG,CACpF,KAAK,CAAC,OAAO,CACd,CAAC;QACF,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,kBAAkB,EAAE;;;KAGjC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,IAAI,CAAC,CAAC;IAClD,CAAC;CACF"}
|
|
@@ -72,6 +72,43 @@ describe('SearchProjector', () => {
|
|
|
72
72
|
const count = db.prepare('SELECT COUNT(*) as cnt FROM task_search').get();
|
|
73
73
|
expect(count.cnt).toBe(0);
|
|
74
74
|
});
|
|
75
|
+
it('re-prepares statements when db reference changes', () => {
|
|
76
|
+
const firstDb = createTestDb();
|
|
77
|
+
const secondDb = createTestDb();
|
|
78
|
+
const firstStore = new EventStore(firstDb);
|
|
79
|
+
const secondStore = new EventStore(secondDb);
|
|
80
|
+
const localProjector = new SearchProjector();
|
|
81
|
+
try {
|
|
82
|
+
const firstEvent = firstStore.append({
|
|
83
|
+
task_id: 'TASK1',
|
|
84
|
+
type: EventType.TaskCreated,
|
|
85
|
+
data: {
|
|
86
|
+
title: 'First title',
|
|
87
|
+
project: 'inbox',
|
|
88
|
+
description: 'First description',
|
|
89
|
+
},
|
|
90
|
+
});
|
|
91
|
+
localProjector.apply(firstEvent, firstDb);
|
|
92
|
+
const secondEvent = secondStore.append({
|
|
93
|
+
task_id: 'TASK2',
|
|
94
|
+
type: EventType.TaskCreated,
|
|
95
|
+
data: {
|
|
96
|
+
title: 'Second title',
|
|
97
|
+
project: 'inbox',
|
|
98
|
+
description: 'Second description',
|
|
99
|
+
},
|
|
100
|
+
});
|
|
101
|
+
localProjector.apply(secondEvent, secondDb);
|
|
102
|
+
const results = secondDb
|
|
103
|
+
.prepare("SELECT task_id FROM task_search WHERE task_search MATCH 'Second'")
|
|
104
|
+
.all();
|
|
105
|
+
expect(results.map(r => r.task_id)).toContain('TASK2');
|
|
106
|
+
}
|
|
107
|
+
finally {
|
|
108
|
+
firstDb.close();
|
|
109
|
+
secondDb.close();
|
|
110
|
+
}
|
|
111
|
+
});
|
|
75
112
|
});
|
|
76
113
|
});
|
|
77
114
|
//# sourceMappingURL=search.test.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"search.test.js","sourceRoot":"","sources":["../../src/projections/search.test.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"search.test.js","sourceRoot":"","sources":["../../src/projections/search.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import type Database from 'libsql';
|
|
2
2
|
import type { PersistedEventEnvelope } from '../events/store.js';
|
|
3
|
-
import
|
|
4
|
-
export declare class TagsProjector
|
|
3
|
+
import { CachingProjector } from './types.js';
|
|
4
|
+
export declare class TagsProjector extends CachingProjector {
|
|
5
5
|
name: string;
|
|
6
6
|
apply(event: PersistedEventEnvelope, db: Database.Database): void;
|
|
7
7
|
reset(db: Database.Database): void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tags.d.ts","sourceRoot":"","sources":["../../src/projections/tags.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,QAAQ,MAAM,QAAQ,CAAC;AACnC,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,oBAAoB,CAAC;AACjE,OAAO,
|
|
1
|
+
{"version":3,"file":"tags.d.ts","sourceRoot":"","sources":["../../src/projections/tags.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,QAAQ,MAAM,QAAQ,CAAC;AACnC,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,oBAAoB,CAAC;AACjE,OAAO,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAG9C,qBAAa,aAAc,SAAQ,gBAAgB;IACjD,IAAI,SAAU;IAEd,KAAK,CAAC,KAAK,EAAE,sBAAsB,EAAE,EAAE,EAAE,QAAQ,CAAC,QAAQ,GAAG,IAAI;IAWjE,KAAK,CAAC,EAAE,EAAE,QAAQ,CAAC,QAAQ,GAAG,IAAI;IAIlC,OAAO,CAAC,iBAAiB;IAQzB,OAAO,CAAC,iBAAiB;IAazB,OAAO,CAAC,UAAU;CAUnB"}
|
package/dist/projections/tags.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
|
+
import { CachingProjector } from './types.js';
|
|
1
2
|
import { EventType } from '../events/types.js';
|
|
2
|
-
export class TagsProjector {
|
|
3
|
+
export class TagsProjector extends CachingProjector {
|
|
3
4
|
name = 'tags';
|
|
4
5
|
apply(event, db) {
|
|
5
6
|
switch (event.type) {
|
|
@@ -26,13 +27,13 @@ export class TagsProjector {
|
|
|
26
27
|
if (data.field !== 'tags')
|
|
27
28
|
return;
|
|
28
29
|
const newTags = Array.isArray(data.new_value) ? data.new_value : [];
|
|
29
|
-
|
|
30
|
+
this.stmt(db, 'deleteTaskTags', 'DELETE FROM task_tags WHERE task_id = ?').run(event.task_id);
|
|
30
31
|
if (newTags && newTags.length > 0) {
|
|
31
32
|
this.insertTags(db, event.task_id, newTags);
|
|
32
33
|
}
|
|
33
34
|
}
|
|
34
35
|
insertTags(db, taskId, tags) {
|
|
35
|
-
const insertStmt =
|
|
36
|
+
const insertStmt = this.stmt(db, 'insertTag', 'INSERT OR IGNORE INTO task_tags (task_id, tag) VALUES (?, ?)');
|
|
36
37
|
for (const tag of tags) {
|
|
37
38
|
insertStmt.run(taskId, tag);
|
|
38
39
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tags.js","sourceRoot":"","sources":["../../src/projections/tags.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"tags.js","sourceRoot":"","sources":["../../src/projections/tags.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAC9C,OAAO,EAAE,SAAS,EAA8C,MAAM,oBAAoB,CAAC;AAE3F,MAAM,OAAO,aAAc,SAAQ,gBAAgB;IACjD,IAAI,GAAG,MAAM,CAAC;IAEd,KAAK,CAAC,KAA6B,EAAE,EAAqB;QACxD,QAAQ,KAAK,CAAC,IAAI,EAAE,CAAC;YACnB,KAAK,SAAS,CAAC,WAAW;gBACxB,IAAI,CAAC,iBAAiB,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;gBAClC,MAAM;YACR,KAAK,SAAS,CAAC,WAAW;gBACxB,IAAI,CAAC,iBAAiB,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;gBAClC,MAAM;QACV,CAAC;IACH,CAAC;IAED,KAAK,CAAC,EAAqB;QACzB,EAAE,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC;IACnC,CAAC;IAEO,iBAAiB,CAAC,KAA6B,EAAE,EAAqB;QAC5E,MAAM,IAAI,GAAG,KAAK,CAAC,IAAuB,CAAC;QAC3C,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;QACvB,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO;QAEvC,IAAI,CAAC,UAAU,CAAC,EAAE,EAAE,KAAK,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;IAC3C,CAAC;IAEO,iBAAiB,CAAC,KAA6B,EAAE,EAAqB;QAC5E,MAAM,IAAI,GAAG,KAAK,CAAC,IAAuB,CAAC;QAC3C,IAAI,IAAI,CAAC,KAAK,KAAK,MAAM;YAAE,OAAO;QAElC,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAE,IAAI,CAAC,SAAsB,CAAC,CAAC,CAAC,EAAE,CAAC;QAClF,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,gBAAgB,EAAE,yCAAyC,CAAC,CAAC,GAAG,CAC5E,KAAK,CAAC,OAAO,CACd,CAAC;QACF,IAAI,OAAO,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAClC,IAAI,CAAC,UAAU,CAAC,EAAE,EAAE,KAAK,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QAC9C,CAAC;IACH,CAAC;IAEO,UAAU,CAAC,EAAqB,EAAE,MAAc,EAAE,IAAc;QACtE,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAC1B,EAAE,EACF,WAAW,EACX,8DAA8D,CAC/D,CAAC;QACF,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;YACvB,UAAU,CAAC,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;QAC9B,CAAC;IACH,CAAC;CACF"}
|
|
@@ -63,6 +63,35 @@ describe('TagsProjector', () => {
|
|
|
63
63
|
const count = db.prepare('SELECT COUNT(*) as cnt FROM task_tags').get();
|
|
64
64
|
expect(count.cnt).toBe(0);
|
|
65
65
|
});
|
|
66
|
+
it('re-prepares statements when db reference changes', () => {
|
|
67
|
+
const firstDb = createTestDb();
|
|
68
|
+
const secondDb = createTestDb();
|
|
69
|
+
const firstStore = new EventStore(firstDb);
|
|
70
|
+
const secondStore = new EventStore(secondDb);
|
|
71
|
+
const localProjector = new TagsProjector();
|
|
72
|
+
try {
|
|
73
|
+
const firstEvent = firstStore.append({
|
|
74
|
+
task_id: 'TASK1',
|
|
75
|
+
type: EventType.TaskCreated,
|
|
76
|
+
data: { title: 'First', project: 'inbox', tags: ['first'] },
|
|
77
|
+
});
|
|
78
|
+
localProjector.apply(firstEvent, firstDb);
|
|
79
|
+
const secondEvent = secondStore.append({
|
|
80
|
+
task_id: 'TASK2',
|
|
81
|
+
type: EventType.TaskCreated,
|
|
82
|
+
data: { title: 'Second', project: 'inbox', tags: ['second'] },
|
|
83
|
+
});
|
|
84
|
+
localProjector.apply(secondEvent, secondDb);
|
|
85
|
+
const tags = secondDb
|
|
86
|
+
.prepare('SELECT tag FROM task_tags WHERE task_id = ? ORDER BY tag')
|
|
87
|
+
.all('TASK2');
|
|
88
|
+
expect(tags.map(t => t.tag)).toEqual(['second']);
|
|
89
|
+
}
|
|
90
|
+
finally {
|
|
91
|
+
firstDb.close();
|
|
92
|
+
secondDb.close();
|
|
93
|
+
}
|
|
94
|
+
});
|
|
66
95
|
});
|
|
67
96
|
});
|
|
68
97
|
//# sourceMappingURL=tags.test.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tags.test.js","sourceRoot":"","sources":["../../src/projections/tags.test.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"tags.test.js","sourceRoot":"","sources":["../../src/projections/tags.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import type Database from 'libsql';
|
|
2
2
|
import type { PersistedEventEnvelope } from '../events/store.js';
|
|
3
|
-
import
|
|
4
|
-
export declare class TasksCurrentProjector
|
|
3
|
+
import { CachingProjector } from './types.js';
|
|
4
|
+
export declare class TasksCurrentProjector extends CachingProjector {
|
|
5
5
|
name: string;
|
|
6
6
|
apply(event: PersistedEventEnvelope, db: Database.Database): void;
|
|
7
7
|
reset(db: Database.Database): void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tasks-current.d.ts","sourceRoot":"","sources":["../../src/projections/tasks-current.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,QAAQ,MAAM,QAAQ,CAAC;AACnC,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,oBAAoB,CAAC;AACjE,OAAO,
|
|
1
|
+
{"version":3,"file":"tasks-current.d.ts","sourceRoot":"","sources":["../../src/projections/tasks-current.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,QAAQ,MAAM,QAAQ,CAAC;AACnC,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,oBAAoB,CAAC;AACjE,OAAO,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAiB9C,qBAAa,qBAAsB,SAAQ,gBAAgB;IACzD,IAAI,SAAmB;IAEvB,KAAK,CAAC,KAAK,EAAE,sBAAsB,EAAE,EAAE,EAAE,QAAQ,CAAC,QAAQ,GAAG,IAAI;IAuBjE,KAAK,CAAC,EAAE,EAAE,QAAQ,CAAC,QAAQ,GAAG,IAAI;IAIlC,OAAO,CAAC,iBAAiB;IA4BzB,OAAO,CAAC,mBAAmB;IAiI3B,OAAO,CAAC,eAAe;IAWvB,OAAO,CAAC,iBAAiB;IAoBzB,OAAO,CAAC,kBAAkB;IAW1B,OAAO,CAAC,wBAAwB;CAajC"}
|