@jamesaphoenix/tx-test-utils 0.4.3 → 0.5.1
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/README.md +154 -299
- package/dist/chaos/chaos-utilities.js +3 -4
- package/dist/chaos/chaos-utilities.js.map +1 -1
- package/dist/database/test-database.d.ts +7 -7
- package/dist/database/test-database.d.ts.map +1 -1
- package/dist/database/test-database.js +41 -115
- package/dist/database/test-database.js.map +1 -1
- package/dist/factories/factories.test.d.ts +8 -0
- package/dist/factories/factories.test.d.ts.map +1 -0
- package/dist/factories/factories.test.js +419 -0
- package/dist/factories/factories.test.js.map +1 -0
- package/dist/factories/index.d.ts +3 -0
- package/dist/factories/index.d.ts.map +1 -1
- package/dist/factories/index.js +6 -0
- package/dist/factories/index.js.map +1 -1
- package/dist/helpers/index.js +1 -1
- package/dist/helpers/index.js.map +1 -1
- package/dist/helpers/shared-test-layer.d.ts +7 -12
- package/dist/helpers/shared-test-layer.d.ts.map +1 -1
- package/dist/helpers/shared-test-layer.js +14 -8
- package/dist/helpers/shared-test-layer.js.map +1 -1
- package/dist/helpers/sqlite-factory.d.ts +6 -31
- package/dist/helpers/sqlite-factory.d.ts.map +1 -1
- package/dist/helpers/sqlite-factory.js +9 -47
- package/dist/helpers/sqlite-factory.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +8 -2
- package/dist/index.js.map +1 -1
- package/package.json +11 -2
- package/dist/adapters/better-sqlite3-adapter.d.ts +0 -36
- package/dist/adapters/better-sqlite3-adapter.d.ts.map +0 -1
- package/dist/adapters/better-sqlite3-adapter.js +0 -78
- package/dist/adapters/better-sqlite3-adapter.js.map +0 -1
|
@@ -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":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA;AAC/B,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAA;AAEpE,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAA;AACzD,OAAO,EACL,WAAW,EACX,cAAc,EACd,eAAe,EACf,eAAe,EACf,kBAAkB,EAClB,mBAAmB,EACnB,WAAW,EACX,cAAc,EACd,0BAA0B,EAC1B,aAAa,EACb,gBAAgB,EAChB,gBAAgB,EAChB,mBAAmB,EACnB,SAAS,EACV,MAAM,YAAY,CAAA;AAEnB,QAAQ,CAAC,aAAa,EAAE,GAAG,EAAE;IAC3B,IAAI,EAAgB,CAAA;IAEpB,UAAU,CAAC,KAAK,IAAI,EAAE;QACpB,EAAE,GAAG,MAAM,MAAM,CAAC,UAAU,CAAC,kBAAkB,EAAE,CAAC,CAAA;IACpD,CAAC,CAAC,CAAA;IAEF,SAAS,CAAC,KAAK,IAAI,EAAE;QACnB,MAAM,MAAM,CAAC,UAAU,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC,CAAA;IACrC,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,0CAA0C,EAAE,GAAG,EAAE;QAClD,MAAM,IAAI,GAAG,cAAc,CAAC,EAAE,CAAC,CAAA;QAE/B,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAA;QAC3C,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAA;QAC7C,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;QACnC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;QAC5B,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;QACjC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,QAAQ,EAAE,CAAA;QAChC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,cAAc,CAAC,IAAI,CAAC,CAAA;IAC7C,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,yCAAyC,EAAE,GAAG,EAAE;QACjD,MAAM,IAAI,GAAG,cAAc,CAAC,EAAE,EAAE;YAC9B,EAAE,EAAE,aAAa;YACjB,KAAK,EAAE,aAAa;YACpB,WAAW,EAAE,sBAAsB;YACnC,MAAM,EAAE,QAAQ;YAChB,KAAK,EAAE,GAAG;SACX,CAAC,CAAA;QAEF,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAA;QACnC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAA;QACtC,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAA;QACrD,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;QAClC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;IAC9B,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,8BAA8B,EAAE,GAAG,EAAE;QACtC,MAAM,KAAK,GAAG,eAAe,CAAC,EAAE,EAAE,CAAC,CAAC,CAAA;QAEpC,MAAM,CAAC,KAAK,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAA;QAC7B,MAAM,GAAG,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAA;QAClC,MAAM,SAAS,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,CAAA;QAC9B,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA,CAAC,2BAA2B;IAC5D,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,4CAA4C,EAAE,GAAG,EAAE;QACpD,MAAM,OAAO,GAAG,IAAI,WAAW,CAAC,EAAE,CAAC,CAAA;QACnC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,OAAO,CAAC,YAAY,CAC/C,EAAE,KAAK,EAAE,aAAa,EAAE,EACxB,CAAC,EACD,EAAE,MAAM,EAAE,SAAS,EAAE,CACtB,CAAA;QAED,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAA;QACxC,MAAM,CAAC,QAAQ,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAA;QAChC,QAAQ,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE;YACzB,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAA;QACxC,CAAC,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,yDAAyD,EAAE,GAAG,EAAE;QACjE,MAAM,OAAO,GAAG,IAAI,WAAW,CAAC,EAAE,CAAC,CAAA;QACnC,MAAM,IAAI,GAAG,OAAO,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,WAAW,EAAE,CAAC,CAAA;QAEtD,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;QAChC,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,cAAc,CAAC,IAAI,CAAC,CAAA;IAC/C,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,iCAAiC,EAAE,GAAG,EAAE;QACzC,MAAM,IAAI,GAAG,cAAc,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,gBAAgB,EAAE,CAAC,CAAA;QAE5D,MAAM,IAAI,GAAG,EAAE,CAAC,KAAK,CACnB,0CAA0C,EAC1C,CAAC,IAAI,CAAC,EAAE,CAAC,CACV,CAAA;QACD,MAAM,CAAC,IAAI,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAA;QAC5B,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAA;IAC9C,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA;AAEF,QAAQ,CAAC,iBAAiB,EAAE,GAAG,EAAE;IAC/B,IAAI,EAAgB,CAAA;IAEpB,UAAU,CAAC,KAAK,IAAI,EAAE;QACpB,EAAE,GAAG,MAAM,MAAM,CAAC,UAAU,CAAC,kBAAkB,EAAE,CAAC,CAAA;IACpD,CAAC,CAAC,CAAA;IAEF,SAAS,CAAC,KAAK,IAAI,EAAE;QACnB,MAAM,MAAM,CAAC,UAAU,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC,CAAA;IACrC,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,8CAA8C,EAAE,GAAG,EAAE;QACtD,MAAM,QAAQ,GAAG,kBAAkB,CAAC,EAAE,CAAC,CAAA;QAEvC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAA;QACtC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,qBAAqB,CAAC,CAAA;QACvD,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;QAC1C,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,QAAQ,EAAE,CAAA;QACrC,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAA;QACrC,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,QAAQ,EAAE,CAAA;QACpC,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IACrC,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,6CAA6C,EAAE,GAAG,EAAE;QACrD,MAAM,QAAQ,GAAG,kBAAkB,CAAC,EAAE,EAAE;YACtC,OAAO,EAAE,uCAAuC;YAChD,QAAQ,EAAE,UAAU;YACpB,UAAU,EAAE,KAAK;YACjB,SAAS,EAAE,SAAS;YACpB,QAAQ,EAAE,CAAC,QAAQ,EAAE,YAAY,EAAE,QAAQ,CAAC;SAC7C,CAAC,CAAA;QAEF,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,uCAAuC,CAAC,CAAA;QACtE,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAA;QAC1C,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;QACvC,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;QAC1C,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,CAAC,QAAQ,EAAE,YAAY,EAAE,QAAQ,CAAC,CAAC,CAAA;IACvE,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,kCAAkC,EAAE,GAAG,EAAE;QAC1C,MAAM,SAAS,GAAG,mBAAmB,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,QAAQ,EAAE,SAAS,EAAE,CAAC,CAAA;QAErE,MAAM,CAAC,SAAS,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAA;QACjC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE;YACtB,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;QACpC,CAAC,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,uCAAuC,EAAE,GAAG,EAAE;QAC/C,MAAM,OAAO,GAAG,IAAI,eAAe,CAAC,EAAE,CAAC,CAAA;QACvC,MAAM,SAAS,GAAG,IAAI,YAAY,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,CAAA;QAC7D,MAAM,QAAQ,GAAG,OAAO,CAAC,aAAa,CAAC,SAAS,EAAE,EAAE,OAAO,EAAE,aAAa,EAAE,CAAC,CAAA;QAE7E,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,cAAc,CAAC,YAAY,CAAC,CAAA;QACvD,MAAM,CAAC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IAC5C,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,qCAAqC,EAAE,GAAG,EAAE;QAC7C,MAAM,QAAQ,GAAG,kBAAkB,CAAC,EAAE,EAAE,EAAE,OAAO,EAAE,oBAAoB,EAAE,CAAC,CAAA;QAE1E,MAAM,IAAI,GAAG,EAAE,CAAC,KAAK,CACnB,gDAAgD,EAChD,CAAC,QAAQ,CAAC,EAAE,CAAC,CACd,CAAA;QACD,MAAM,CAAC,IAAI,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAA;QAC5B,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAA;IACpD,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA;AAEF,QAAQ,CAAC,aAAa,EAAE,GAAG,EAAE;IAC3B,IAAI,EAAgB,CAAA;IAEpB,UAAU,CAAC,KAAK,IAAI,EAAE;QACpB,EAAE,GAAG,MAAM,MAAM,CAAC,UAAU,CAAC,kBAAkB,EAAE,CAAC,CAAA;IACpD,CAAC,CAAC,CAAA;IAEF,SAAS,CAAC,KAAK,IAAI,EAAE;QACnB,MAAM,MAAM,CAAC,UAAU,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC,CAAA;IACrC,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,2CAA2C,EAAE,GAAG,EAAE;QACnD,MAAM,IAAI,GAAG,cAAc,CAAC,EAAE,CAAC,CAAA;QAE/B,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAA;QAClC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAA;QACxC,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAA;QACxC,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAA;QACxC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;QAC7B,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAA;IACnC,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,0CAA0C,EAAE,GAAG,EAAE;QAClD,MAAM,IAAI,GAAG,0BAA0B,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,YAAY,EAAE,IAAI,CAAC,CAAA;QAErE,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAA;QACxC,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAA;QACxC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;QAC/B,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAA;QACxC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;QAC/B,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IAChC,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,mCAAmC,EAAE,GAAG,EAAE;QAC3C,MAAM,OAAO,GAAG,IAAI,WAAW,CAAC,EAAE,CAAC,CAAA;QACnC,MAAM,IAAI,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC,EAAE,gBAAgB,EAAE,GAAG,CAAC,CAAA;QAE3D,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAA;QACzC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;QAC/B,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;QACpC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAA;IAC9C,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,iCAAiC,EAAE,GAAG,EAAE;QACzC,MAAM,OAAO,GAAG,IAAI,WAAW,CAAC,EAAE,CAAC,CAAA;QACnC,MAAM,IAAI,GAAG,OAAO,CAAC,cAAc,CAAC,CAAC,EAAE,YAAY,CAAC,CAAA;QAEpD,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,CAAA;QAC1C,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;QACnC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAA;IAC1C,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,iCAAiC,EAAE,GAAG,EAAE;QACzC,MAAM,IAAI,GAAG,cAAc,CAAC,EAAE,EAAE;YAC9B,QAAQ,EAAE,GAAG;YACb,QAAQ,EAAE,GAAG;YACb,MAAM,EAAE,IAAI;SACb,CAAC,CAAA;QAEF,MAAM,IAAI,GAAG,EAAE,CAAC,KAAK,CACnB,oDAAoD,EACpD,CAAC,IAAI,CAAC,EAAE,CAAC,CACV,CAAA;QACD,MAAM,CAAC,IAAI,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAA;QAC5B,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IACnC,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA;AAEF,QAAQ,CAAC,eAAe,EAAE,GAAG,EAAE;IAC7B,IAAI,EAAgB,CAAA;IAEpB,UAAU,CAAC,KAAK,IAAI,EAAE;QACpB,EAAE,GAAG,MAAM,MAAM,CAAC,UAAU,CAAC,kBAAkB,EAAE,CAAC,CAAA;QAClD,6CAA6C;QAC7C,kBAAkB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAA;IACnC,CAAC,CAAC,CAAA;IAEF,SAAS,CAAC,KAAK,IAAI,EAAE;QACnB,MAAM,MAAM,CAAC,UAAU,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC,CAAA;IACrC,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,8CAA8C,EAAE,GAAG,EAAE;QACtD,MAAM,MAAM,GAAG,gBAAgB,CAAC,EAAE,EAAE,EAAE,UAAU,EAAE,CAAC,EAAE,CAAC,CAAA;QAEtD,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAA;QACpC,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;QACjC,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;QACxC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;IACrC,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,6BAA6B,EAAE,GAAG,EAAE;QACrC,MAAM,OAAO,GAAG,IAAI,aAAa,CAAC,EAAE,CAAC,CAAA;QACrC,MAAM,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC,EAAE,gBAAgB,EAAE,eAAe,CAAC,CAAA;QAEzE,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;QACxC,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC,CAAA;QAChD,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAA;QAC9C,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,+BAA+B,CAAC,CAAA;IACnE,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,2BAA2B,EAAE,GAAG,EAAE;QACnC,MAAM,OAAO,GAAG,IAAI,aAAa,CAAC,EAAE,CAAC,CAAA;QACrC,MAAM,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC,EAAE,eAAe,CAAC,CAAA;QAErD,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;QACtC,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC,CAAA;IAClD,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,iCAAiC,EAAE,GAAG,EAAE;QACzC,MAAM,OAAO,GAAG,IAAI,aAAa,CAAC,EAAE,CAAC,CAAA;QACrC,MAAM,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC,CAAC,EAAE,gBAAgB,EAAE,EAAE,EAAE,EAAE,CAAC,CAAA;QAEnE,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAA;QAC5C,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;QACjC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;IACjC,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,8BAA8B,EAAE,GAAG,EAAE;QACtC,MAAM,OAAO,GAAG,IAAI,aAAa,CAAC,EAAE,CAAC,CAAA;QACrC,MAAM,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC,CAAC,EAAE,gBAAgB,CAAC,CAAA;QAEzD,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;IACvC,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,mCAAmC,EAAE,GAAG,EAAE;QAC3C,MAAM,MAAM,GAAG,gBAAgB,CAAC,EAAE,EAAE;YAClC,UAAU,EAAE,CAAC;YACb,QAAQ,EAAE,aAAa;SACxB,CAAC,CAAA;QAEF,MAAM,IAAI,GAAG,EAAE,CAAC,KAAK,CACnB,yDAAyD,EACzD,CAAC,MAAM,CAAC,EAAE,CAAC,CACZ,CAAA;QACD,MAAM,CAAC,IAAI,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAA;QAC5B,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAA;IAC/C,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA;AAEF,QAAQ,CAAC,kBAAkB,EAAE,GAAG,EAAE;IAChC,IAAI,EAAgB,CAAA;IAEpB,UAAU,CAAC,KAAK,IAAI,EAAE;QACpB,EAAE,GAAG,MAAM,MAAM,CAAC,UAAU,CAAC,kBAAkB,EAAE,CAAC,CAAA;IACpD,CAAC,CAAC,CAAA;IAEF,SAAS,CAAC,KAAK,IAAI,EAAE;QACnB,MAAM,MAAM,CAAC,UAAU,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC,CAAA;IACrC,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,+CAA+C,EAAE,GAAG,EAAE;QACvD,MAAM,SAAS,GAAG,mBAAmB,CAAC,EAAE,CAAC,CAAA;QAEzC,MAAM,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAA;QACvC,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,+BAA+B,CAAC,CAAA;QAClE,MAAM,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;QAC3C,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;QACxC,MAAM,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC,OAAO,CAAC,kDAAkD,CAAC,CAAA;IAC1F,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,yCAAyC,EAAE,GAAG,EAAE;QACjD,MAAM,OAAO,GAAG,IAAI,gBAAgB,CAAC,EAAE,CAAC,CAAA;QACxC,MAAM,SAAS,GAAG,OAAO,CAAC,cAAc,CAAC,EAAE,OAAO,EAAE,mBAAmB,EAAE,CAAC,CAAA;QAE1E,MAAM,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;QACzC,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAA;IACrD,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,kCAAkC,EAAE,GAAG,EAAE;QAC1C,uCAAuC;QACvC,MAAM,QAAQ,GAAG,kBAAkB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC,CAAA;QAEpD,MAAM,OAAO,GAAG,IAAI,gBAAgB,CAAC,EAAE,CAAC,CAAA;QACxC,MAAM,SAAS,GAAG,OAAO,CAAC,QAAQ,CAAC;YACjC,OAAO,EAAE,mBAAmB;YAC5B,kBAAkB,EAAE,QAAQ,CAAC,EAAE;SAChC,CAAC,CAAA;QAEF,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAA;QACzC,MAAM,CAAC,SAAS,CAAC,kBAAkB,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAA;QACtD,MAAM,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;QACzC,MAAM,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC,cAAc,CAAC,IAAI,CAAC,CAAA;IACnD,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,kCAAkC,EAAE,GAAG,EAAE;QAC1C,MAAM,OAAO,GAAG,IAAI,gBAAgB,CAAC,EAAE,CAAC,CAAA;QACxC,MAAM,SAAS,GAAG,OAAO,CAAC,QAAQ,CAAC,yBAAyB,EAAE;YAC5D,OAAO,EAAE,wBAAwB;SAClC,CAAC,CAAA;QAEF,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAA;QACzC,MAAM,CAAC,SAAS,CAAC,eAAe,CAAC,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAA;QACjE,MAAM,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC,cAAc,CAAC,IAAI,CAAC,CAAA;IACnD,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,gCAAgC,EAAE,GAAG,EAAE;QACxC,MAAM,QAAQ,GAAG,kBAAkB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAA;QAEnD,MAAM,OAAO,GAAG,IAAI,gBAAgB,CAAC,EAAE,CAAC,CAAA;QACxC,MAAM,SAAS,GAAG,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,EAAE,EAAE,OAAO,EAAE,oBAAoB,EAAE,CAAC,CAAA;QAEhF,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;QACvC,MAAM,CAAC,SAAS,CAAC,kBAAkB,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAA;IACxD,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,sCAAsC,EAAE,GAAG,EAAE;QAC9C,MAAM,SAAS,GAAG,mBAAmB,CAAC,EAAE,EAAE;YACxC,OAAO,EAAE,qBAAqB;YAC9B,UAAU,EAAE,MAAM;SACnB,CAAC,CAAA;QAEF,MAAM,IAAI,GAAG,EAAE,CAAC,KAAK,CACnB,sEAAsE,EACtE,CAAC,SAAS,CAAC,EAAE,CAAC,CACf,CAAA;QACD,MAAM,CAAC,IAAI,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAA;QAC5B,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAA;QACnD,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;IACzC,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA;AAEF,QAAQ,CAAC,WAAW,EAAE,GAAG,EAAE;IACzB,EAAE,CAAC,mCAAmC,EAAE,GAAG,EAAE;QAC3C,MAAM,GAAG,GAAG,SAAS,CAAC,cAAc,CAAC,CAAA;QACrC,MAAM,GAAG,GAAG,SAAS,CAAC,cAAc,CAAC,CAAA;QAErC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;QACrB,MAAM,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAA;IACzC,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,oDAAoD,EAAE,GAAG,EAAE;QAC5D,MAAM,GAAG,GAAG,SAAS,CAAC,WAAW,CAAC,CAAA;QAClC,MAAM,GAAG,GAAG,SAAS,CAAC,WAAW,CAAC,CAAA;QAElC,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;IAC3B,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA;AAEF,QAAQ,CAAC,sCAAsC,EAAE,GAAG,EAAE;IACpD,IAAI,EAAgB,CAAA;IAEpB,UAAU,CAAC,KAAK,IAAI,EAAE;QACpB,EAAE,GAAG,MAAM,MAAM,CAAC,UAAU,CAAC,kBAAkB,EAAE,CAAC,CAAA;IACpD,CAAC,CAAC,CAAA;IAEF,SAAS,CAAC,KAAK,IAAI,EAAE;QACnB,MAAM,MAAM,CAAC,UAAU,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC,CAAA;IACrC,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,mDAAmD,EAAE,KAAK,IAAI,EAAE;QACjE,yCAAyC;QACzC,MAAM,EAAE,cAAc,EAAE,kBAAkB,EAAE,YAAY,EAAE,GAAG,MAAM,MAAM,CAAC,wBAAwB,CAAC,CAAA;QACnG,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,MAAM,CAAC,QAAQ,CAAC,CAAA;QAExC,qDAAqD;QACrD,MAAM,gBAAgB,GAAG,KAAK,CAAC,OAAO,CAAC,YAAY,EAAE,EAAE,CAAC,EAAS,CAAC,CAAA;QAClE,MAAM,iBAAiB,GAAG,KAAK,CAAC,OAAO,CAAC,kBAAkB,EAAE,gBAAgB,CAAC,CAAA;QAE7E,MAAM,OAAO,GAAG,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;YAClC,MAAM,QAAQ,GAAG,KAAK,CAAC,CAAC,cAAc,CAAA;YACtC,OAAO,KAAK,CAAC,CAAC,QAAQ,CAAC,qBAAqB,CAAC,UAAU,EAAE,EAAE,CAAC,CAAA;QAC9D,CAAC,CAAC,CAAA;QAEF,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO,EAAE,iBAAiB,CAAC,CAAC,CAAA;QAElF,MAAM,CAAC,MAAM,CAAC,CAAC,cAAc,CAAC,GAAG,CAAC,CAAA;QAClC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IAC7B,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,yDAAyD,EAAE,KAAK,IAAI,EAAE;QACvE,kEAAkE;QAClE,MAAM,WAAW,GAAG,IAAI,WAAW,CAAC,EAAE,CAAC,CAAA;QACvC,WAAW,CAAC,MAAM,CAAC,EAAE,UAAU,EAAE,UAAU,EAAE,QAAQ,EAAE,GAAG,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAA;QAC1F,WAAW,CAAC,MAAM,CAAC,EAAE,UAAU,EAAE,UAAU,EAAE,QAAQ,EAAE,GAAG,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAA;QAC1F,WAAW,CAAC,MAAM,CAAC,EAAE,UAAU,EAAE,UAAU,EAAE,QAAQ,EAAE,GAAG,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAA;QAC1F,WAAW,CAAC,MAAM,CAAC,EAAE,UAAU,EAAE,UAAU,EAAE,QAAQ,EAAE,GAAG,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAA;QAE1F,yCAAyC;QACzC,MAAM,EAAE,cAAc,EAAE,kBAAkB,EAAE,YAAY,EAAE,GAAG,MAAM,MAAM,CAAC,wBAAwB,CAAC,CAAA;QACnG,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,MAAM,CAAC,QAAQ,CAAC,CAAA;QAExC,MAAM,gBAAgB,GAAG,KAAK,CAAC,OAAO,CAAC,YAAY,EAAE,EAAE,CAAC,EAAS,CAAC,CAAA;QAClE,MAAM,iBAAiB,GAAG,KAAK,CAAC,OAAO,CAAC,kBAAkB,EAAE,gBAAgB,CAAC,CAAA;QAE7E,MAAM,OAAO,GAAG,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;YAClC,MAAM,QAAQ,GAAG,KAAK,CAAC,CAAC,cAAc,CAAA;YACtC,OAAO,KAAK,CAAC,CAAC,QAAQ,CAAC,qBAAqB,CAAC,UAAU,EAAE,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAA;QACtE,CAAC,CAAC,CAAA;QAEF,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO,EAAE,iBAAiB,CAAC,CAAC,CAAA;QAElF,MAAM,CAAC,MAAM,CAAC,CAAC,cAAc,CAAC,GAAG,CAAC,CAAA;QAClC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;QAE3B,6BAA6B;QAC7B,MAAM,YAAY,GAAG,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;QACpC,MAAM,CAAC,YAAY,CAAC,CAAC,WAAW,EAAE,CAAA;QAClC,MAAM,CAAC,YAAY,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAA;QACpC,wCAAwC;QACxC,MAAM,CAAC,YAAa,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;QACzC,MAAM,CAAC,YAAa,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;QAEzC,4BAA4B;QAC5B,MAAM,YAAY,GAAG,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;QACpC,MAAM,CAAC,YAAY,CAAC,CAAC,WAAW,EAAE,CAAA;QAClC,MAAM,CAAC,YAAY,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAA;QACpC,MAAM,CAAC,YAAa,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IAC9C,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,wDAAwD,EAAE,KAAK,IAAI,EAAE;QACtE,gCAAgC;QAChC,cAAc,CAAC,EAAE,EAAE,EAAE,UAAU,EAAE,UAAU,EAAE,QAAQ,EAAE,GAAG,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAA;QAE7E,MAAM,EAAE,cAAc,EAAE,kBAAkB,EAAE,YAAY,EAAE,GAAG,MAAM,MAAM,CAAC,wBAAwB,CAAC,CAAA;QACnG,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,MAAM,CAAC,QAAQ,CAAC,CAAA;QAExC,MAAM,gBAAgB,GAAG,KAAK,CAAC,OAAO,CAAC,YAAY,EAAE,EAAE,CAAC,EAAS,CAAC,CAAA;QAClE,MAAM,iBAAiB,GAAG,KAAK,CAAC,OAAO,CAAC,kBAAkB,EAAE,gBAAgB,CAAC,CAAA;QAE7E,MAAM,OAAO,GAAG,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;YAClC,MAAM,QAAQ,GAAG,KAAK,CAAC,CAAC,cAAc,CAAA;YACtC,OAAO,KAAK,CAAC,CAAC,QAAQ,CAAC,qBAAqB,CAAC,UAAU,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,CAAA;QAC3E,CAAC,CAAC,CAAA;QAEF,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO,EAAE,iBAAiB,CAAC,CAAC,CAAA;QAElF,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;QAC3B,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAA;QACvC,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAA;QACvC,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAA;IACzC,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,6BAA6B,EAAE,KAAK,IAAI,EAAE;QAC3C,kEAAkE;QAClE,MAAM,WAAW,GAAG,IAAI,WAAW,CAAC,EAAE,CAAC,CAAA;QACvC,WAAW,CAAC,MAAM,CAAC,EAAE,UAAU,EAAE,UAAU,EAAE,QAAQ,EAAE,GAAG,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAA;QAC7E,WAAW,CAAC,MAAM,CAAC,EAAE,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAA;QAEzE,MAAM,EAAE,cAAc,EAAE,kBAAkB,EAAE,YAAY,EAAE,GAAG,MAAM,MAAM,CAAC,wBAAwB,CAAC,CAAA;QACnG,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,MAAM,CAAC,QAAQ,CAAC,CAAA;QAExC,MAAM,gBAAgB,GAAG,KAAK,CAAC,OAAO,CAAC,YAAY,EAAE,EAAE,CAAC,EAAS,CAAC,CAAA;QAClE,MAAM,iBAAiB,GAAG,KAAK,CAAC,OAAO,CAAC,kBAAkB,EAAE,gBAAgB,CAAC,CAAA;QAE7E,MAAM,OAAO,GAAG,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;YAClC,MAAM,QAAQ,GAAG,KAAK,CAAC,CAAC,cAAc,CAAA;YACtC,OAAO,KAAK,CAAC,CAAC,QAAQ,CAAC,qBAAqB,CAAC,UAAU,EAAE,CAAC,GAAG,CAAC,CAAC,CAAA;QACjE,CAAC,CAAC,CAAA;QAEF,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO,EAAE,iBAAiB,CAAC,CAAC,CAAA;QAElF,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;QAC3B,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;QAC7B,MAAM,CAAC,KAAK,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAA;QAC7B,MAAM,CAAC,KAAM,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAA;IAC/C,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,kCAAkC,EAAE,KAAK,IAAI,EAAE;QAChD,sBAAsB;QACtB,cAAc,CAAC,EAAE,EAAE,EAAE,UAAU,EAAE,UAAU,EAAE,QAAQ,EAAE,GAAG,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAA;QAE7E,mDAAmD;QACnD,EAAE,CAAC,IAAI,CAAC;;;KAGP,CAAC,CAAA;QAEF,MAAM,EAAE,cAAc,EAAE,kBAAkB,EAAE,YAAY,EAAE,GAAG,MAAM,MAAM,CAAC,wBAAwB,CAAC,CAAA;QACnG,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,MAAM,CAAC,QAAQ,CAAC,CAAA;QAExC,MAAM,gBAAgB,GAAG,KAAK,CAAC,OAAO,CAAC,YAAY,EAAE,EAAE,CAAC,EAAS,CAAC,CAAA;QAClE,MAAM,iBAAiB,GAAG,KAAK,CAAC,OAAO,CAAC,kBAAkB,EAAE,gBAAgB,CAAC,CAAA;QAE7E,MAAM,OAAO,GAAG,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;YAClC,MAAM,QAAQ,GAAG,KAAK,CAAC,CAAC,cAAc,CAAA;YACtC,OAAO,KAAK,CAAC,CAAC,QAAQ,CAAC,qBAAqB,CAAC,UAAU,EAAE,CAAC,GAAG,CAAC,CAAC,CAAA;QACjE,CAAC,CAAC,CAAA;QAEF,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO,EAAE,iBAAiB,CAAC,CAAC,CAAA;QAElF,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;QAC3B,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;QAC7B,MAAM,CAAC,KAAK,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAA,CAAC,sBAAsB;QACpD,MAAM,CAAC,KAAM,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IACvC,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA"}
|
|
@@ -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"}
|
package/dist/factories/index.js
CHANGED
|
@@ -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"}
|
package/dist/helpers/index.js
CHANGED
|
@@ -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
|
|
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,
|
|
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 {
|
|
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
|
|
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
|
-
/**
|
|
27
|
-
readonly getDb: () =>
|
|
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").
|
|
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, import("@jamesaphoenix/tx-core").DatabaseError, never>;
|
|
65
60
|
reset: () => Promise<void>;
|
|
66
61
|
close: () => Promise<void>;
|
|
67
|
-
getDb: () =>
|
|
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,
|
|
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;;iBA+BR,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"}
|
|
@@ -43,11 +43,18 @@ import { Layer } from "effect";
|
|
|
43
43
|
*/
|
|
44
44
|
export const createSharedTestLayer = async () => {
|
|
45
45
|
// Dynamically import to avoid circular dependencies
|
|
46
|
-
|
|
47
|
-
//
|
|
48
|
-
|
|
49
|
-
const
|
|
50
|
-
|
|
46
|
+
// Use makeMinimalLayerFromInfra (Noop variants for LLM/embedding/reranker)
|
|
47
|
+
// instead of makeAppLayerFromInfra (Auto variants that probe for node-llama-cpp etc.)
|
|
48
|
+
// to avoid slow auto-detection overhead in tests.
|
|
49
|
+
const { makeMinimalLayerFromInfra, SqliteClient, applyMigrations } = await import("@jamesaphoenix/tx-core");
|
|
50
|
+
const { Database } = await import("bun:sqlite");
|
|
51
|
+
// Create ONE database instance directly — this ensures all tests share the
|
|
52
|
+
// exact same DB connection rather than each Layer build creating a new one
|
|
53
|
+
// (Layer.effect-based layers like SqliteClientLive create new connections per build).
|
|
54
|
+
const db = new Database(":memory:");
|
|
55
|
+
db.run("PRAGMA journal_mode = WAL");
|
|
56
|
+
db.run("PRAGMA foreign_keys = ON");
|
|
57
|
+
db.run("PRAGMA busy_timeout = " + (process.env.TX_DB_BUSY_TIMEOUT || "5000"));
|
|
51
58
|
applyMigrations(db);
|
|
52
59
|
// Use Layer.succeed to provide the concrete DB instance — this is a constant
|
|
53
60
|
// layer that always provides the same DB reference, unlike Layer.effect which
|
|
@@ -56,7 +63,7 @@ export const createSharedTestLayer = async () => {
|
|
|
56
63
|
// Wrap with Layer.fresh so that service layers (repos, services) are NOT
|
|
57
64
|
// memoized across separate Effect.provide calls. This ensures each test gets
|
|
58
65
|
// fresh service instances while sharing the same underlying database.
|
|
59
|
-
const layer = Layer.fresh(
|
|
66
|
+
const layer = Layer.fresh(makeMinimalLayerFromInfra(infra));
|
|
60
67
|
/**
|
|
61
68
|
* Reset all tables in the database.
|
|
62
69
|
* Preserves schema but deletes all data.
|
|
@@ -90,8 +97,7 @@ export const createSharedTestLayer = async () => {
|
|
|
90
97
|
db.close();
|
|
91
98
|
};
|
|
92
99
|
/**
|
|
93
|
-
* Get the underlying
|
|
94
|
-
* Use with Layer.succeed(SqliteClient, shared.getDb()) for custom layers.
|
|
100
|
+
* Get the underlying database instance.
|
|
95
101
|
*/
|
|
96
102
|
const getDb = () => db;
|
|
97
103
|
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;
|
|
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,2EAA2E;IAC3E,sFAAsF;IACtF,kDAAkD;IAClD,MAAM,EAAE,yBAAyB,EAAE,YAAY,EAAE,eAAe,EAAE,GAAG,MAAM,MAAM,CAAC,wBAAwB,CAAC,CAAA;IAC3G,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,yBAAyB,CAAC,KAAK,CAAC,CAAC,CAAA;IAE3D;;;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"}
|