@jamesaphoenix/tx-test-utils 0.4.3 → 0.5.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.
@@ -0,0 +1,419 @@
1
+ /**
2
+ * Tests for entity factories.
3
+ *
4
+ * Verifies that all factories correctly create test data with
5
+ * proper defaults and customizable options.
6
+ */
7
+ import { Effect } from "effect";
8
+ import { describe, it, expect, beforeEach, afterEach } from "vitest";
9
+ import { createTestDatabase } from "../database/index.js";
10
+ import { TaskFactory, createTestTask, createTestTasks, LearningFactory, createTestLearning, createTestLearnings, EdgeFactory, createTestEdge, createEdgeBetweenLearnings, AnchorFactory, createTestAnchor, CandidateFactory, createTestCandidate, fixtureId } from "./index.js";
11
+ describe("TaskFactory", () => {
12
+ let db;
13
+ beforeEach(async () => {
14
+ db = await Effect.runPromise(createTestDatabase());
15
+ });
16
+ afterEach(async () => {
17
+ await Effect.runPromise(db.close());
18
+ });
19
+ it("should create a task with default values", () => {
20
+ const task = createTestTask(db);
21
+ expect(task.id).toMatch(/^tx-[a-f0-9]{8}$/);
22
+ expect(task.title).toMatch(/^Test Task \d+$/);
23
+ expect(task.status).toBe("backlog");
24
+ expect(task.score).toBe(500);
25
+ expect(task.description).toBe("");
26
+ expect(task.parentId).toBeNull();
27
+ expect(task.createdAt).toBeInstanceOf(Date);
28
+ });
29
+ it("should create a task with custom values", () => {
30
+ const task = createTestTask(db, {
31
+ id: "tx-custom01",
32
+ title: "Custom Task",
33
+ description: "A custom description",
34
+ status: "active",
35
+ score: 800
36
+ });
37
+ expect(task.id).toBe("tx-custom01");
38
+ expect(task.title).toBe("Custom Task");
39
+ expect(task.description).toBe("A custom description");
40
+ expect(task.status).toBe("active");
41
+ expect(task.score).toBe(800);
42
+ });
43
+ it("should create multiple tasks", () => {
44
+ const tasks = createTestTasks(db, 5);
45
+ expect(tasks).toHaveLength(5);
46
+ const ids = tasks.map((t) => t.id);
47
+ const uniqueIds = new Set(ids);
48
+ expect(uniqueIds.size).toBe(5); // All IDs should be unique
49
+ });
50
+ it("should create task hierarchy with children", () => {
51
+ const factory = new TaskFactory(db);
52
+ const { parent, children } = factory.withChildren({ title: "Parent Task" }, 3, { status: "backlog" });
53
+ expect(parent.title).toBe("Parent Task");
54
+ expect(children).toHaveLength(3);
55
+ children.forEach((child) => {
56
+ expect(child.parentId).toBe(parent.id);
57
+ });
58
+ });
59
+ it("should create completed task with completedAt timestamp", () => {
60
+ const factory = new TaskFactory(db);
61
+ const task = factory.completed({ title: "Done Task" });
62
+ expect(task.status).toBe("done");
63
+ expect(task.completedAt).toBeInstanceOf(Date);
64
+ });
65
+ it("should persist task to database", () => {
66
+ const task = createTestTask(db, { title: "Persisted Task" });
67
+ const rows = db.query("SELECT id, title FROM tasks WHERE id = ?", [task.id]);
68
+ expect(rows).toHaveLength(1);
69
+ expect(rows[0].title).toBe("Persisted Task");
70
+ });
71
+ });
72
+ describe("LearningFactory", () => {
73
+ let db;
74
+ beforeEach(async () => {
75
+ db = await Effect.runPromise(createTestDatabase());
76
+ });
77
+ afterEach(async () => {
78
+ await Effect.runPromise(db.close());
79
+ });
80
+ it("should create a learning with default values", () => {
81
+ const learning = createTestLearning(db);
82
+ expect(learning.id).toBeGreaterThan(0);
83
+ expect(learning.content).toMatch(/^Test learning \d+$/);
84
+ expect(learning.sourceType).toBe("manual");
85
+ expect(learning.sourceRef).toBeNull();
86
+ expect(learning.keywords).toEqual([]);
87
+ expect(learning.category).toBeNull();
88
+ expect(learning.usageCount).toBe(0);
89
+ });
90
+ it("should create a learning with custom values", () => {
91
+ const learning = createTestLearning(db, {
92
+ content: "Always use Effect-TS for typed errors",
93
+ category: "patterns",
94
+ sourceType: "run",
95
+ sourceRef: "run-123",
96
+ keywords: ["effect", "typescript", "errors"]
97
+ });
98
+ expect(learning.content).toBe("Always use Effect-TS for typed errors");
99
+ expect(learning.category).toBe("patterns");
100
+ expect(learning.sourceType).toBe("run");
101
+ expect(learning.sourceRef).toBe("run-123");
102
+ expect(learning.keywords).toEqual(["effect", "typescript", "errors"]);
103
+ });
104
+ it("should create multiple learnings", () => {
105
+ const learnings = createTestLearnings(db, 5, { category: "testing" });
106
+ expect(learnings).toHaveLength(5);
107
+ learnings.forEach((l) => {
108
+ expect(l.category).toBe("testing");
109
+ });
110
+ });
111
+ it("should create learning with embedding", () => {
112
+ const factory = new LearningFactory(db);
113
+ const embedding = new Float32Array([0.1, 0.2, 0.3, 0.4, 0.5]);
114
+ const learning = factory.withEmbedding(embedding, { content: "Vector test" });
115
+ expect(learning.embedding).toBeInstanceOf(Float32Array);
116
+ expect(learning.embedding?.length).toBe(5);
117
+ });
118
+ it("should persist learning to database", () => {
119
+ const learning = createTestLearning(db, { content: "Persisted Learning" });
120
+ const rows = db.query("SELECT id, content FROM learnings WHERE id = ?", [learning.id]);
121
+ expect(rows).toHaveLength(1);
122
+ expect(rows[0].content).toBe("Persisted Learning");
123
+ });
124
+ });
125
+ describe("EdgeFactory", () => {
126
+ let db;
127
+ beforeEach(async () => {
128
+ db = await Effect.runPromise(createTestDatabase());
129
+ });
130
+ afterEach(async () => {
131
+ await Effect.runPromise(db.close());
132
+ });
133
+ it("should create an edge with default values", () => {
134
+ const edge = createTestEdge(db);
135
+ expect(edge.id).toBeGreaterThan(0);
136
+ expect(edge.edgeType).toBe("SIMILAR_TO");
137
+ expect(edge.sourceType).toBe("learning");
138
+ expect(edge.targetType).toBe("learning");
139
+ expect(edge.weight).toBe(1.0);
140
+ expect(edge.metadata).toEqual({});
141
+ });
142
+ it("should create edge between two learnings", () => {
143
+ const edge = createEdgeBetweenLearnings(db, 1, 2, "SIMILAR_TO", 0.85);
144
+ expect(edge.edgeType).toBe("SIMILAR_TO");
145
+ expect(edge.sourceType).toBe("learning");
146
+ expect(edge.sourceId).toBe("1");
147
+ expect(edge.targetType).toBe("learning");
148
+ expect(edge.targetId).toBe("2");
149
+ expect(edge.weight).toBe(0.85);
150
+ });
151
+ it("should create anchor edge to file", () => {
152
+ const factory = new EdgeFactory(db);
153
+ const edge = factory.anchorToFile(1, "src/service.ts", 0.9);
154
+ expect(edge.edgeType).toBe("ANCHORED_TO");
155
+ expect(edge.sourceId).toBe("1");
156
+ expect(edge.targetType).toBe("file");
157
+ expect(edge.targetId).toBe("src/service.ts");
158
+ });
159
+ it("should create derived-from edge", () => {
160
+ const factory = new EdgeFactory(db);
161
+ const edge = factory.derivedFromRun(1, "run-abc123");
162
+ expect(edge.edgeType).toBe("DERIVED_FROM");
163
+ expect(edge.targetType).toBe("run");
164
+ expect(edge.targetId).toBe("run-abc123");
165
+ });
166
+ it("should persist edge to database", () => {
167
+ const edge = createTestEdge(db, {
168
+ sourceId: "1",
169
+ targetId: "2",
170
+ weight: 0.75
171
+ });
172
+ const rows = db.query("SELECT id, weight FROM learning_edges WHERE id = ?", [edge.id]);
173
+ expect(rows).toHaveLength(1);
174
+ expect(rows[0].weight).toBe(0.75);
175
+ });
176
+ });
177
+ describe("AnchorFactory", () => {
178
+ let db;
179
+ beforeEach(async () => {
180
+ db = await Effect.runPromise(createTestDatabase());
181
+ // Create a learning for anchors to reference
182
+ createTestLearning(db, { id: 1 });
183
+ });
184
+ afterEach(async () => {
185
+ await Effect.runPromise(db.close());
186
+ });
187
+ it("should create an anchor with required values", () => {
188
+ const anchor = createTestAnchor(db, { learningId: 1 });
189
+ expect(anchor.id).toBeGreaterThan(0);
190
+ expect(anchor.learningId).toBe(1);
191
+ expect(anchor.anchorType).toBe("symbol");
192
+ expect(anchor.status).toBe("valid");
193
+ });
194
+ it("should create symbol anchor", () => {
195
+ const factory = new AnchorFactory(db);
196
+ const anchor = factory.symbolAnchor(1, "src/service.ts", "handleRequest");
197
+ expect(anchor.anchorType).toBe("symbol");
198
+ expect(anchor.anchorValue).toBe("handleRequest");
199
+ expect(anchor.filePath).toBe("src/service.ts");
200
+ expect(anchor.symbolFqname).toBe("src/service.ts::handleRequest");
201
+ });
202
+ it("should create glob anchor", () => {
203
+ const factory = new AnchorFactory(db);
204
+ const anchor = factory.globAnchor(1, "src/repo/*.ts");
205
+ expect(anchor.anchorType).toBe("glob");
206
+ expect(anchor.anchorValue).toBe("src/repo/*.ts");
207
+ });
208
+ it("should create line range anchor", () => {
209
+ const factory = new AnchorFactory(db);
210
+ const anchor = factory.lineRangeAnchor(1, "src/service.ts", 10, 25);
211
+ expect(anchor.anchorType).toBe("line_range");
212
+ expect(anchor.lineStart).toBe(10);
213
+ expect(anchor.lineEnd).toBe(25);
214
+ });
215
+ it("should create drifted anchor", () => {
216
+ const factory = new AnchorFactory(db);
217
+ const anchor = factory.driftedAnchor(1, "src/changed.ts");
218
+ expect(anchor.status).toBe("drifted");
219
+ });
220
+ it("should persist anchor to database", () => {
221
+ const anchor = createTestAnchor(db, {
222
+ learningId: 1,
223
+ filePath: "src/test.ts"
224
+ });
225
+ const rows = db.query("SELECT id, file_path FROM learning_anchors WHERE id = ?", [anchor.id]);
226
+ expect(rows).toHaveLength(1);
227
+ expect(rows[0].file_path).toBe("src/test.ts");
228
+ });
229
+ });
230
+ describe("CandidateFactory", () => {
231
+ let db;
232
+ beforeEach(async () => {
233
+ db = await Effect.runPromise(createTestDatabase());
234
+ });
235
+ afterEach(async () => {
236
+ await Effect.runPromise(db.close());
237
+ });
238
+ it("should create a candidate with default values", () => {
239
+ const candidate = createTestCandidate(db);
240
+ expect(candidate.id).toBeGreaterThan(0);
241
+ expect(candidate.content).toMatch(/^Test candidate learning \d+$/);
242
+ expect(candidate.confidence).toBe("medium");
243
+ expect(candidate.status).toBe("pending");
244
+ expect(candidate.sourceFile).toMatch(/^~\/.claude\/projects\/test\/session-\d+\.jsonl$/);
245
+ });
246
+ it("should create high-confidence candidate", () => {
247
+ const factory = new CandidateFactory(db);
248
+ const candidate = factory.highConfidence({ content: "Always use Effect" });
249
+ expect(candidate.confidence).toBe("high");
250
+ expect(candidate.content).toBe("Always use Effect");
251
+ });
252
+ it("should create promoted candidate", () => {
253
+ // First create a learning to reference
254
+ const learning = createTestLearning(db, { id: 100 });
255
+ const factory = new CandidateFactory(db);
256
+ const candidate = factory.promoted({
257
+ content: "Promoted learning",
258
+ promotedLearningId: learning.id
259
+ });
260
+ expect(candidate.status).toBe("promoted");
261
+ expect(candidate.promotedLearningId).toBe(learning.id);
262
+ expect(candidate.reviewedBy).toBe("auto");
263
+ expect(candidate.reviewedAt).toBeInstanceOf(Date);
264
+ });
265
+ it("should create rejected candidate", () => {
266
+ const factory = new CandidateFactory(db);
267
+ const candidate = factory.rejected("Too specific to context", {
268
+ content: "Very specific learning"
269
+ });
270
+ expect(candidate.status).toBe("rejected");
271
+ expect(candidate.rejectionReason).toBe("Too specific to context");
272
+ expect(candidate.reviewedAt).toBeInstanceOf(Date);
273
+ });
274
+ it("should create merged candidate", () => {
275
+ const learning = createTestLearning(db, { id: 50 });
276
+ const factory = new CandidateFactory(db);
277
+ const candidate = factory.merged(learning.id, { content: "Duplicate learning" });
278
+ expect(candidate.status).toBe("merged");
279
+ expect(candidate.promotedLearningId).toBe(learning.id);
280
+ });
281
+ it("should persist candidate to database", () => {
282
+ const candidate = createTestCandidate(db, {
283
+ content: "Persisted Candidate",
284
+ confidence: "high"
285
+ });
286
+ const rows = db.query("SELECT id, content, confidence FROM learning_candidates WHERE id = ?", [candidate.id]);
287
+ expect(rows).toHaveLength(1);
288
+ expect(rows[0].content).toBe("Persisted Candidate");
289
+ expect(rows[0].confidence).toBe("high");
290
+ });
291
+ });
292
+ describe("fixtureId", () => {
293
+ it("should generate deterministic IDs", () => {
294
+ const id1 = fixtureId("test-fixture");
295
+ const id2 = fixtureId("test-fixture");
296
+ expect(id1).toBe(id2);
297
+ expect(id1).toMatch(/^tx-[a-f0-9]{8}$/);
298
+ });
299
+ it("should generate different IDs for different inputs", () => {
300
+ const id1 = fixtureId("fixture-a");
301
+ const id2 = fixtureId("fixture-b");
302
+ expect(id1).not.toBe(id2);
303
+ });
304
+ });
305
+ describe("EdgeRepository.findByMultipleSources", () => {
306
+ let db;
307
+ beforeEach(async () => {
308
+ db = await Effect.runPromise(createTestDatabase());
309
+ });
310
+ afterEach(async () => {
311
+ await Effect.runPromise(db.close());
312
+ });
313
+ it("should return empty map for empty sourceIds array", async () => {
314
+ // Import EdgeRepository and create layer
315
+ const { EdgeRepository, EdgeRepositoryLive, SqliteClient } = await import("@jamesaphoenix/tx-core");
316
+ const { Layer } = await import("effect");
317
+ // Create a SqliteClient layer from the test database
318
+ const TestSqliteClient = Layer.succeed(SqliteClient, db.db);
319
+ const TestEdgeRepoLayer = Layer.provide(EdgeRepositoryLive, TestSqliteClient);
320
+ const program = Effect.gen(function* () {
321
+ const edgeRepo = yield* EdgeRepository;
322
+ return yield* edgeRepo.findByMultipleSources("learning", []);
323
+ });
324
+ const result = await Effect.runPromise(Effect.provide(program, TestEdgeRepoLayer));
325
+ expect(result).toBeInstanceOf(Map);
326
+ expect(result.size).toBe(0);
327
+ });
328
+ it("should fetch edges for multiple source IDs in one query", async () => {
329
+ // Create test edges using a single factory to avoid ID collisions
330
+ const edgeFactory = new EdgeFactory(db);
331
+ edgeFactory.create({ sourceType: "learning", sourceId: "1", targetId: "10", weight: 0.9 });
332
+ edgeFactory.create({ sourceType: "learning", sourceId: "1", targetId: "11", weight: 0.8 });
333
+ edgeFactory.create({ sourceType: "learning", sourceId: "2", targetId: "20", weight: 0.7 });
334
+ edgeFactory.create({ sourceType: "learning", sourceId: "3", targetId: "30", weight: 0.6 });
335
+ // Import EdgeRepository and create layer
336
+ const { EdgeRepository, EdgeRepositoryLive, SqliteClient } = await import("@jamesaphoenix/tx-core");
337
+ const { Layer } = await import("effect");
338
+ const TestSqliteClient = Layer.succeed(SqliteClient, db.db);
339
+ const TestEdgeRepoLayer = Layer.provide(EdgeRepositoryLive, TestSqliteClient);
340
+ const program = Effect.gen(function* () {
341
+ const edgeRepo = yield* EdgeRepository;
342
+ return yield* edgeRepo.findByMultipleSources("learning", ["1", "2"]);
343
+ });
344
+ const result = await Effect.runPromise(Effect.provide(program, TestEdgeRepoLayer));
345
+ expect(result).toBeInstanceOf(Map);
346
+ expect(result.size).toBe(2);
347
+ // Check source 1 has 2 edges
348
+ const source1Edges = result.get("1");
349
+ expect(source1Edges).toBeDefined();
350
+ expect(source1Edges).toHaveLength(2);
351
+ // Edges should be sorted by weight DESC
352
+ expect(source1Edges[0].weight).toBe(0.9);
353
+ expect(source1Edges[1].weight).toBe(0.8);
354
+ // Check source 2 has 1 edge
355
+ const source2Edges = result.get("2");
356
+ expect(source2Edges).toBeDefined();
357
+ expect(source2Edges).toHaveLength(1);
358
+ expect(source2Edges[0].targetId).toBe("20");
359
+ });
360
+ it("should return empty arrays for sourceIds with no edges", async () => {
361
+ // Create edge only for source 1
362
+ createTestEdge(db, { sourceType: "learning", sourceId: "1", targetId: "10" });
363
+ const { EdgeRepository, EdgeRepositoryLive, SqliteClient } = await import("@jamesaphoenix/tx-core");
364
+ const { Layer } = await import("effect");
365
+ const TestSqliteClient = Layer.succeed(SqliteClient, db.db);
366
+ const TestEdgeRepoLayer = Layer.provide(EdgeRepositoryLive, TestSqliteClient);
367
+ const program = Effect.gen(function* () {
368
+ const edgeRepo = yield* EdgeRepository;
369
+ return yield* edgeRepo.findByMultipleSources("learning", ["1", "2", "3"]);
370
+ });
371
+ const result = await Effect.runPromise(Effect.provide(program, TestEdgeRepoLayer));
372
+ expect(result.size).toBe(3);
373
+ expect(result.get("1")).toHaveLength(1);
374
+ expect(result.get("2")).toHaveLength(0);
375
+ expect(result.get("3")).toHaveLength(0);
376
+ });
377
+ it("should filter by sourceType", async () => {
378
+ // Create edges with different source types using a single factory
379
+ const edgeFactory = new EdgeFactory(db);
380
+ edgeFactory.create({ sourceType: "learning", sourceId: "1", targetId: "10" });
381
+ edgeFactory.create({ sourceType: "file", sourceId: "1", targetId: "20" });
382
+ const { EdgeRepository, EdgeRepositoryLive, SqliteClient } = await import("@jamesaphoenix/tx-core");
383
+ const { Layer } = await import("effect");
384
+ const TestSqliteClient = Layer.succeed(SqliteClient, db.db);
385
+ const TestEdgeRepoLayer = Layer.provide(EdgeRepositoryLive, TestSqliteClient);
386
+ const program = Effect.gen(function* () {
387
+ const edgeRepo = yield* EdgeRepository;
388
+ return yield* edgeRepo.findByMultipleSources("learning", ["1"]);
389
+ });
390
+ const result = await Effect.runPromise(Effect.provide(program, TestEdgeRepoLayer));
391
+ expect(result.size).toBe(1);
392
+ const edges = result.get("1");
393
+ expect(edges).toHaveLength(1);
394
+ expect(edges[0].sourceType).toBe("learning");
395
+ });
396
+ it("should exclude invalidated edges", async () => {
397
+ // Create a valid edge
398
+ createTestEdge(db, { sourceType: "learning", sourceId: "1", targetId: "10" });
399
+ // Create an invalidated edge by inserting directly
400
+ db.exec(`
401
+ INSERT INTO learning_edges (edge_type, source_type, source_id, target_type, target_id, weight, metadata, invalidated_at)
402
+ VALUES ('SIMILAR_TO', 'learning', '1', 'learning', '11', 1.0, '{}', datetime('now'))
403
+ `);
404
+ const { EdgeRepository, EdgeRepositoryLive, SqliteClient } = await import("@jamesaphoenix/tx-core");
405
+ const { Layer } = await import("effect");
406
+ const TestSqliteClient = Layer.succeed(SqliteClient, db.db);
407
+ const TestEdgeRepoLayer = Layer.provide(EdgeRepositoryLive, TestSqliteClient);
408
+ const program = Effect.gen(function* () {
409
+ const edgeRepo = yield* EdgeRepository;
410
+ return yield* edgeRepo.findByMultipleSources("learning", ["1"]);
411
+ });
412
+ const result = await Effect.runPromise(Effect.provide(program, TestEdgeRepoLayer));
413
+ expect(result.size).toBe(1);
414
+ const edges = result.get("1");
415
+ expect(edges).toHaveLength(1); // Only the valid edge
416
+ expect(edges[0].targetId).toBe("10");
417
+ });
418
+ });
419
+ //# sourceMappingURL=factories.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"factories.test.js","sourceRoot":"","sources":["../../src/factories/factories.test.ts"],"names":[],"mappings":"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"}
@@ -8,5 +8,8 @@
8
8
  */
9
9
  export { TaskFactory, createTestTask, createTestTasks, type CreateTaskOptions } from "./task.factory.js";
10
10
  export { LearningFactory, createTestLearning, createTestLearnings, type CreateLearningOptions } from "./learning.factory.js";
11
+ export { EdgeFactory, createTestEdge, createEdgeBetweenLearnings, type CreateEdgeOptions } from "./edge.factory.js";
12
+ export { AnchorFactory, createTestAnchor, type CreateAnchorOptions } from "./anchor.factory.js";
13
+ export { CandidateFactory, createTestCandidate, type CreateCandidateOptions, type LearningCandidate, type CandidateConfidence, type CandidateStatus } from "./candidate.factory.js";
11
14
  export { fixtureId, namespacedFixtureId, sequentialFixtureIds, contentFixtureId } from "../fixtures/index.js";
12
15
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/factories/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAGH,OAAO,EACL,WAAW,EACX,cAAc,EACd,eAAe,EACf,KAAK,iBAAiB,EACvB,MAAM,mBAAmB,CAAA;AAG1B,OAAO,EACL,eAAe,EACf,kBAAkB,EAClB,mBAAmB,EACnB,KAAK,qBAAqB,EAC3B,MAAM,uBAAuB,CAAA;AAG9B,OAAO,EACL,SAAS,EACT,mBAAmB,EACnB,oBAAoB,EACpB,gBAAgB,EACjB,MAAM,sBAAsB,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/factories/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAGH,OAAO,EACL,WAAW,EACX,cAAc,EACd,eAAe,EACf,KAAK,iBAAiB,EACvB,MAAM,mBAAmB,CAAA;AAG1B,OAAO,EACL,eAAe,EACf,kBAAkB,EAClB,mBAAmB,EACnB,KAAK,qBAAqB,EAC3B,MAAM,uBAAuB,CAAA;AAG9B,OAAO,EACL,WAAW,EACX,cAAc,EACd,0BAA0B,EAC1B,KAAK,iBAAiB,EACvB,MAAM,mBAAmB,CAAA;AAG1B,OAAO,EACL,aAAa,EACb,gBAAgB,EAChB,KAAK,mBAAmB,EACzB,MAAM,qBAAqB,CAAA;AAG5B,OAAO,EACL,gBAAgB,EAChB,mBAAmB,EACnB,KAAK,sBAAsB,EAC3B,KAAK,iBAAiB,EACtB,KAAK,mBAAmB,EACxB,KAAK,eAAe,EACrB,MAAM,wBAAwB,CAAA;AAG/B,OAAO,EACL,SAAS,EACT,mBAAmB,EACnB,oBAAoB,EACpB,gBAAgB,EACjB,MAAM,sBAAsB,CAAA"}
@@ -10,6 +10,12 @@
10
10
  export { TaskFactory, createTestTask, createTestTasks } from "./task.factory.js";
11
11
  // Learning factory
12
12
  export { LearningFactory, createTestLearning, createTestLearnings } from "./learning.factory.js";
13
+ // Edge factory
14
+ export { EdgeFactory, createTestEdge, createEdgeBetweenLearnings } from "./edge.factory.js";
15
+ // Anchor factory
16
+ export { AnchorFactory, createTestAnchor } from "./anchor.factory.js";
17
+ // Candidate factory
18
+ export { CandidateFactory, createTestCandidate } from "./candidate.factory.js";
13
19
  // Re-export fixture ID utilities for convenience
14
20
  export { fixtureId, namespacedFixtureId, sequentialFixtureIds, contentFixtureId } from "../fixtures/index.js";
15
21
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/factories/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,eAAe;AACf,OAAO,EACL,WAAW,EACX,cAAc,EACd,eAAe,EAEhB,MAAM,mBAAmB,CAAA;AAE1B,mBAAmB;AACnB,OAAO,EACL,eAAe,EACf,kBAAkB,EAClB,mBAAmB,EAEpB,MAAM,uBAAuB,CAAA;AAE9B,iDAAiD;AACjD,OAAO,EACL,SAAS,EACT,mBAAmB,EACnB,oBAAoB,EACpB,gBAAgB,EACjB,MAAM,sBAAsB,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/factories/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,eAAe;AACf,OAAO,EACL,WAAW,EACX,cAAc,EACd,eAAe,EAEhB,MAAM,mBAAmB,CAAA;AAE1B,mBAAmB;AACnB,OAAO,EACL,eAAe,EACf,kBAAkB,EAClB,mBAAmB,EAEpB,MAAM,uBAAuB,CAAA;AAE9B,eAAe;AACf,OAAO,EACL,WAAW,EACX,cAAc,EACd,0BAA0B,EAE3B,MAAM,mBAAmB,CAAA;AAE1B,iBAAiB;AACjB,OAAO,EACL,aAAa,EACb,gBAAgB,EAEjB,MAAM,qBAAqB,CAAA;AAE5B,oBAAoB;AACpB,OAAO,EACL,gBAAgB,EAChB,mBAAmB,EAKpB,MAAM,wBAAwB,CAAA;AAE/B,iDAAiD;AACjD,OAAO,EACL,SAAS,EACT,mBAAmB,EACnB,oBAAoB,EACpB,gBAAgB,EACjB,MAAM,sBAAsB,CAAA"}
@@ -7,7 +7,7 @@
7
7
  export { runEffect, runEffectFail, runEffectEither, expectEffectSuccess, expectEffectFailure, mergeLayers, createTestContext } from "./effect.js";
8
8
  // Shared test layer for memory-efficient integration tests
9
9
  export { createSharedTestLayer } from "./shared-test-layer.js";
10
- // SQLite database factory — creates SqliteDatabase for both Vitest and Bun test
10
+ // SQLite database factory for tests
11
11
  export { createSqliteDatabase, createMigratedSqliteDatabase } from "./sqlite-factory.js";
12
12
  // TODO: Implement temp file helpers
13
13
  // export { createTempDir, writeTestTypeScriptFile, createTestSourceFiles } from './temp-files.js'
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/helpers/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,sBAAsB;AACtB,OAAO,EACL,SAAS,EACT,aAAa,EACb,eAAe,EACf,mBAAmB,EACnB,mBAAmB,EACnB,WAAW,EACX,iBAAiB,EAGlB,MAAM,aAAa,CAAA;AAEpB,2DAA2D;AAC3D,OAAO,EACL,qBAAqB,EAGtB,MAAM,wBAAwB,CAAA;AAE/B,gFAAgF;AAChF,OAAO,EACL,oBAAoB,EACpB,4BAA4B,EAC7B,MAAM,qBAAqB,CAAA;AAE5B,oCAAoC;AACpC,kGAAkG;AAClG,iDAAiD"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/helpers/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,sBAAsB;AACtB,OAAO,EACL,SAAS,EACT,aAAa,EACb,eAAe,EACf,mBAAmB,EACnB,mBAAmB,EACnB,WAAW,EACX,iBAAiB,EAGlB,MAAM,aAAa,CAAA;AAEpB,2DAA2D;AAC3D,OAAO,EACL,qBAAqB,EAGtB,MAAM,wBAAwB,CAAA;AAE/B,oCAAoC;AACpC,OAAO,EACL,oBAAoB,EACpB,4BAA4B,EAC7B,MAAM,qBAAqB,CAAA;AAE5B,oCAAoC;AACpC,kGAAkG;AAClG,iDAAiD"}
@@ -7,25 +7,20 @@
7
7
  * @module @tx/test-utils/helpers/shared-test-layer
8
8
  */
9
9
  import { Layer } from "effect";
10
- import type { SqliteDatabase } from "@jamesaphoenix/tx-core";
10
+ import type { Database } from "bun:sqlite";
11
11
  /**
12
12
  * Result of creating a shared test layer.
13
- *
14
- * Note: This uses a type alias instead of Schema.Struct because:
15
- * - It contains function properties (reset, close, getDb) which Schema.Struct doesn't support
16
- * - It's a test utility type, not a domain type
17
- * - The generic Layer type cannot be represented in Schema
18
13
  */
19
- export type SharedTestLayer<L> = {
14
+ export interface SharedTestLayer<L> {
20
15
  /** The Effect layer - pass to Effect.provide() */
21
16
  readonly layer: Layer.Layer<L, never, never>;
22
17
  /** Reset all database tables (call in afterEach) */
23
18
  readonly reset: () => Promise<void>;
24
19
  /** Close the database (call in afterAll) */
25
20
  readonly close: () => Promise<void>;
26
- /** The underlying SqliteDatabase instance */
27
- readonly getDb: () => SqliteDatabase;
28
- };
21
+ /** Access to underlying database for advanced use cases */
22
+ readonly getDb: () => Database;
23
+ }
29
24
  /**
30
25
  * Create a shared app layer for testing.
31
26
  *
@@ -61,10 +56,10 @@ export type SharedTestLayer<L> = {
61
56
  * ```
62
57
  */
63
58
  export declare const createSharedTestLayer: () => Promise<{
64
- layer: Layer.Layer<import("@jamesaphoenix/tx-core").SyncService | import("@jamesaphoenix/tx-core").SqliteClient | import("@jamesaphoenix/tx-core").TaskService | import("@jamesaphoenix/tx-core").TaskRepository | import("@jamesaphoenix/tx-core").DependencyRepository | import("@jamesaphoenix/tx-core").DependencyService | import("@jamesaphoenix/tx-core").ReadyService | import("@jamesaphoenix/tx-core").HierarchyService | import("@jamesaphoenix/tx-core").LearningService | import("@jamesaphoenix/tx-core").LearningRepository | import("@jamesaphoenix/tx-core").RetrieverService | import("@jamesaphoenix/tx-core").FileLearningService | import("@jamesaphoenix/tx-core").FileLearningRepository | import("@jamesaphoenix/tx-core").AttemptService | import("@jamesaphoenix/tx-core").AttemptRepository | import("@jamesaphoenix/tx-core").RunRepository | import("@jamesaphoenix/tx-core").WorkerRepository | import("@jamesaphoenix/tx-core").ClaimRepository | import("@jamesaphoenix/tx-core").OrchestratorStateRepository | import("@jamesaphoenix/tx-core").DeduplicationRepository | import("@jamesaphoenix/tx-core").TrackedProjectRepository | import("@jamesaphoenix/tx-core").DocRepository | import("@jamesaphoenix/tx-core").DiversifierService | import("@jamesaphoenix/tx-core").WorkerService | import("@jamesaphoenix/tx-core").ClaimService | import("@jamesaphoenix/tx-core").OrchestratorService | import("@jamesaphoenix/tx-core").TracingService | import("@jamesaphoenix/tx-core").ValidationService | import("@jamesaphoenix/tx-core").LlmService | import("@jamesaphoenix/tx-core").DeduplicationService | import("@jamesaphoenix/tx-core").DocService | import("@jamesaphoenix/tx-core").AgentService | import("@jamesaphoenix/tx-core").CycleScanService | import("@jamesaphoenix/tx-core").MigrationService, import("@jamesaphoenix/tx-core").DatabaseError | import("@jamesaphoenix/tx-core").LlmUnavailableError | import("@jamesaphoenix/tx-core").AgentError, never>;
59
+ layer: Layer.Layer<import("@jamesaphoenix/tx-core").MigrationService | import("@jamesaphoenix/tx-core").SqliteClient | import("@jamesaphoenix/tx-core").TaskRepository | import("@jamesaphoenix/tx-core").DependencyRepository | import("@jamesaphoenix/tx-core").LearningRepository | import("@jamesaphoenix/tx-core").FileLearningRepository | import("@jamesaphoenix/tx-core").AttemptRepository | import("@jamesaphoenix/tx-core").RunRepository | import("@jamesaphoenix/tx-core").AnchorRepository | import("@jamesaphoenix/tx-core").EdgeRepository | import("@jamesaphoenix/tx-core").DeduplicationRepository | import("@jamesaphoenix/tx-core").CandidateRepository | import("@jamesaphoenix/tx-core").TrackedProjectRepository | import("@jamesaphoenix/tx-core").WorkerRepository | import("@jamesaphoenix/tx-core").ClaimRepository | import("@jamesaphoenix/tx-core").OrchestratorStateRepository | import("@jamesaphoenix/tx-core").TaskService | import("@jamesaphoenix/tx-core").DependencyService | import("@jamesaphoenix/tx-core").ReadyService | import("@jamesaphoenix/tx-core").HierarchyService | import("@jamesaphoenix/tx-core").EdgeService | import("@jamesaphoenix/tx-core").GraphExpansionService | import("@jamesaphoenix/tx-core").FeedbackTrackerService | import("@jamesaphoenix/tx-core").DiversifierService | import("@jamesaphoenix/tx-core").RetrieverService | import("@jamesaphoenix/tx-core").LearningService | import("@jamesaphoenix/tx-core").FileLearningService | import("@jamesaphoenix/tx-core").AttemptService | import("@jamesaphoenix/tx-core").AnchorVerificationService | import("@jamesaphoenix/tx-core").AnchorService | import("@jamesaphoenix/tx-core").DeduplicationService | import("@jamesaphoenix/tx-core").SyncService | import("@jamesaphoenix/tx-core").SwarmVerificationService | import("@jamesaphoenix/tx-core").PromotionService | import("@jamesaphoenix/tx-core").WorkerService | import("@jamesaphoenix/tx-core").ClaimService | import("@jamesaphoenix/tx-core").OrchestratorService | import("@jamesaphoenix/tx-core").DaemonService | import("@jamesaphoenix/tx-core").TracingService | import("@jamesaphoenix/tx-core").CompactionRepository | import("@jamesaphoenix/tx-core").CompactionService | import("@jamesaphoenix/tx-core").ValidationService | import("@jamesaphoenix/tx-core").MessageRepository | import("@jamesaphoenix/tx-core").MessageService | import("@jamesaphoenix/tx-core").DocRepository | import("@jamesaphoenix/tx-core").DocService, boolean | import("@jamesaphoenix/tx-core").DatabaseError | import("@jamesaphoenix/tx-core").EmbeddingUnavailableError | import("@jamesaphoenix/tx-core").LlmUnavailableError, never>;
65
60
  reset: () => Promise<void>;
66
61
  close: () => Promise<void>;
67
- getDb: () => SqliteDatabase;
62
+ getDb: () => Database;
68
63
  }>;
69
64
  /**
70
65
  * Type helper for the return type of createSharedTestLayer.
@@ -1 +1 @@
1
- {"version":3,"file":"shared-test-layer.d.ts","sourceRoot":"","sources":["../../src/helpers/shared-test-layer.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAA;AAC9B,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAA;AAE5D;;;;;;;GAOG;AACH,MAAM,MAAM,eAAe,CAAC,CAAC,IAAI;IAC/B,kDAAkD;IAClD,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,CAAA;IAC5C,oDAAoD;IACpD,QAAQ,CAAC,KAAK,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;IACnC,4CAA4C;IAC5C,QAAQ,CAAC,KAAK,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;IACnC,6CAA6C;IAC7C,QAAQ,CAAC,KAAK,EAAE,MAAM,cAAc,CAAA;CACrC,CAAA;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AACH,eAAO,MAAM,qBAAqB;;iBAyBR,OAAO,CAAC,IAAI,CAAC;iBA6Bb,OAAO,CAAC,IAAI,CAAC;iBAQnB,cAAc;EAQjC,CAAA;AAED;;;GAGG;AACH,MAAM,MAAM,qBAAqB,GAAG,OAAO,CAAC,UAAU,CAAC,OAAO,qBAAqB,CAAC,CAAC,CAAA"}
1
+ {"version":3,"file":"shared-test-layer.d.ts","sourceRoot":"","sources":["../../src/helpers/shared-test-layer.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAA;AAC9B,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AAG1C;;GAEG;AACH,MAAM,WAAW,eAAe,CAAC,CAAC;IAChC,kDAAkD;IAClD,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,CAAA;IAC5C,oDAAoD;IACpD,QAAQ,CAAC,KAAK,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;IACnC,4CAA4C;IAC5C,QAAQ,CAAC,KAAK,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;IACnC,2DAA2D;IAC3D,QAAQ,CAAC,KAAK,EAAE,MAAM,QAAQ,CAAA;CAC/B;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AACH,eAAO,MAAM,qBAAqB;;iBA4BR,OAAO,CAAC,IAAI,CAAC;iBA6Bb,OAAO,CAAC,IAAI,CAAC;iBAOnB,QAAQ;EAQ3B,CAAA;AAED;;;GAGG;AACH,MAAM,MAAM,qBAAqB,GAAG,OAAO,CAAC,UAAU,CAAC,OAAO,qBAAqB,CAAC,CAAC,CAAA"}
@@ -44,10 +44,14 @@ import { Layer } from "effect";
44
44
  export const createSharedTestLayer = async () => {
45
45
  // Dynamically import to avoid circular dependencies
46
46
  const { makeAppLayerFromInfra, SqliteClient, applyMigrations } = await import("@jamesaphoenix/tx-core");
47
- // Use the shared factory handles Vitest (better-sqlite3) vs Bun (bun:sqlite) detection
48
- const { createSqliteDatabase } = await import("./sqlite-factory.js");
49
- const db = await createSqliteDatabase();
50
- // Apply migrations (now works with both implementations via SqliteDatabase interface)
47
+ const { Database } = await import("bun:sqlite");
48
+ // Create ONE database instance directly — this ensures all tests share the
49
+ // exact same DB connection rather than each Layer build creating a new one
50
+ // (Layer.effect-based layers like SqliteClientLive create new connections per build).
51
+ const db = new Database(":memory:");
52
+ db.run("PRAGMA journal_mode = WAL");
53
+ db.run("PRAGMA foreign_keys = ON");
54
+ db.run("PRAGMA busy_timeout = " + (process.env.TX_DB_BUSY_TIMEOUT || "5000"));
51
55
  applyMigrations(db);
52
56
  // Use Layer.succeed to provide the concrete DB instance — this is a constant
53
57
  // layer that always provides the same DB reference, unlike Layer.effect which
@@ -90,8 +94,7 @@ export const createSharedTestLayer = async () => {
90
94
  db.close();
91
95
  };
92
96
  /**
93
- * Get the underlying SqliteDatabase instance.
94
- * Use with Layer.succeed(SqliteClient, shared.getDb()) for custom layers.
97
+ * Get the underlying database instance.
95
98
  */
96
99
  const getDb = () => db;
97
100
  return {
@@ -1 +1 @@
1
- {"version":3,"file":"shared-test-layer.js","sourceRoot":"","sources":["../../src/helpers/shared-test-layer.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAA;AAsB9B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAAG,KAAK,IAAI,EAAE;IAC9C,oDAAoD;IACpD,MAAM,EAAE,qBAAqB,EAAE,YAAY,EAAE,eAAe,EAAE,GAAG,MAAM,MAAM,CAAC,wBAAwB,CAAC,CAAA;IAEvG,yFAAyF;IACzF,MAAM,EAAE,oBAAoB,EAAE,GAAG,MAAM,MAAM,CAAC,qBAAqB,CAAC,CAAA;IACpE,MAAM,EAAE,GAAG,MAAM,oBAAoB,EAAE,CAAA;IAEvC,sFAAsF;IACtF,eAAe,CAAC,EAAE,CAAC,CAAA;IAEnB,6EAA6E;IAC7E,8EAA8E;IAC9E,+CAA+C;IAC/C,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,YAAY,EAAE,EAAE,CAAC,CAAA;IAE7C,yEAAyE;IACzE,6EAA6E;IAC7E,sEAAsE;IACtE,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,qBAAqB,CAAC,KAAK,CAAC,CAAC,CAAA;IAEvD;;;OAGG;IACH,MAAM,KAAK,GAAG,KAAK,IAAmB,EAAE;QACtC,sFAAsF;QACtF,MAAM,MAAM,GAAG,EAAE;aACd,OAAO,CACN;;;;;;;;OAQD,CACA;aACA,GAAG,EAA6B,CAAA;QAEnC,kEAAkE;QAClE,EAAE,CAAC,GAAG,CAAC,2BAA2B,CAAC,CAAA;QACnC,KAAK,MAAM,EAAE,IAAI,EAAE,IAAI,MAAM,EAAE,CAAC;YAC9B,EAAE,CAAC,IAAI,CAAC,gBAAgB,IAAI,GAAG,CAAC,CAAA;QAClC,CAAC;QACD,iEAAiE;QACjE,EAAE,CAAC,IAAI,CAAC,6BAA6B,CAAC,CAAA;QACtC,EAAE,CAAC,GAAG,CAAC,0BAA0B,CAAC,CAAA;IACpC,CAAC,CAAA;IAED;;OAEG;IACH,MAAM,KAAK,GAAG,KAAK,IAAmB,EAAE;QACtC,EAAE,CAAC,KAAK,EAAE,CAAA;IACZ,CAAC,CAAA;IAED;;;OAGG;IACH,MAAM,KAAK,GAAG,GAAmB,EAAE,CAAC,EAAE,CAAA;IAEtC,OAAO;QACL,KAAK;QACL,KAAK;QACL,KAAK;QACL,KAAK;KACN,CAAA;AACH,CAAC,CAAA"}
1
+ {"version":3,"file":"shared-test-layer.js","sourceRoot":"","sources":["../../src/helpers/shared-test-layer.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAA;AAkB9B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAAG,KAAK,IAAI,EAAE;IAC9C,oDAAoD;IACpD,MAAM,EAAE,qBAAqB,EAAE,YAAY,EAAE,eAAe,EAAE,GAAG,MAAM,MAAM,CAAC,wBAAwB,CAAC,CAAA;IACvG,MAAM,EAAE,QAAQ,EAAE,GAAG,MAAM,MAAM,CAAC,YAAY,CAAC,CAAA;IAE/C,2EAA2E;IAC3E,2EAA2E;IAC3E,sFAAsF;IACtF,MAAM,EAAE,GAAG,IAAI,QAAQ,CAAC,UAAU,CAAC,CAAA;IACnC,EAAE,CAAC,GAAG,CAAC,2BAA2B,CAAC,CAAA;IACnC,EAAE,CAAC,GAAG,CAAC,0BAA0B,CAAC,CAAA;IAClC,EAAE,CAAC,GAAG,CAAC,wBAAwB,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,kBAAkB,IAAI,MAAM,CAAC,CAAC,CAAA;IAC7E,eAAe,CAAC,EAAE,CAAC,CAAA;IAEnB,6EAA6E;IAC7E,8EAA8E;IAC9E,+CAA+C;IAC/C,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,YAAY,EAAE,EAA+B,CAAC,CAAA;IAE1E,yEAAyE;IACzE,6EAA6E;IAC7E,sEAAsE;IACtE,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,qBAAqB,CAAC,KAAK,CAAC,CAAC,CAAA;IAEvD;;;OAGG;IACH,MAAM,KAAK,GAAG,KAAK,IAAmB,EAAE;QACtC,sFAAsF;QACtF,MAAM,MAAM,GAAG,EAAE;aACd,OAAO,CACN;;;;;;;;OAQD,CACA;aACA,GAAG,EAA6B,CAAA;QAEnC,kEAAkE;QAClE,EAAE,CAAC,GAAG,CAAC,2BAA2B,CAAC,CAAA;QACnC,KAAK,MAAM,EAAE,IAAI,EAAE,IAAI,MAAM,EAAE,CAAC;YAC9B,EAAE,CAAC,IAAI,CAAC,gBAAgB,IAAI,GAAG,CAAC,CAAA;QAClC,CAAC;QACD,iEAAiE;QACjE,EAAE,CAAC,IAAI,CAAC,6BAA6B,CAAC,CAAA;QACtC,EAAE,CAAC,GAAG,CAAC,0BAA0B,CAAC,CAAA;IACpC,CAAC,CAAA;IAED;;OAEG;IACH,MAAM,KAAK,GAAG,KAAK,IAAmB,EAAE;QACtC,EAAE,CAAC,KAAK,EAAE,CAAA;IACZ,CAAC,CAAA;IAED;;OAEG;IACH,MAAM,KAAK,GAAG,GAAa,EAAE,CAAC,EAAE,CAAA;IAEhC,OAAO;QACL,KAAK;QACL,KAAK;QACL,KAAK;QACL,KAAK;KACN,CAAA;AACH,CAAC,CAAA"}