@jamesaphoenix/tx-core 0.4.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/dist/db.d.ts +42 -0
- package/dist/db.d.ts.map +1 -0
- package/dist/db.js +46 -0
- package/dist/db.js.map +1 -0
- package/dist/errors.d.ts +231 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/errors.js +139 -0
- package/dist/errors.js.map +1 -0
- package/dist/id.d.ts +6 -0
- package/dist/id.d.ts.map +1 -0
- package/dist/id.js +21 -0
- package/dist/id.js.map +1 -0
- package/dist/index.d.ts +25 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +56 -0
- package/dist/index.js.map +1 -0
- package/dist/layer.d.ts +50 -0
- package/dist/layer.d.ts.map +1 -0
- package/dist/layer.js +155 -0
- package/dist/layer.js.map +1 -0
- package/dist/mappers/anchor.d.ts +14 -0
- package/dist/mappers/anchor.d.ts.map +1 -0
- package/dist/mappers/anchor.js +38 -0
- package/dist/mappers/anchor.js.map +1 -0
- package/dist/mappers/attempt.d.ts +15 -0
- package/dist/mappers/attempt.d.ts.map +1 -0
- package/dist/mappers/attempt.js +23 -0
- package/dist/mappers/attempt.js.map +1 -0
- package/dist/mappers/candidate.d.ts +23 -0
- package/dist/mappers/candidate.d.ts.map +1 -0
- package/dist/mappers/candidate.js +53 -0
- package/dist/mappers/candidate.js.map +1 -0
- package/dist/mappers/claim.d.ts +30 -0
- package/dist/mappers/claim.d.ts.map +1 -0
- package/dist/mappers/claim.js +32 -0
- package/dist/mappers/claim.js.map +1 -0
- package/dist/mappers/deduplication.d.ts +39 -0
- package/dist/mappers/deduplication.d.ts.map +1 -0
- package/dist/mappers/deduplication.js +53 -0
- package/dist/mappers/deduplication.js.map +1 -0
- package/dist/mappers/edge.d.ts +10 -0
- package/dist/mappers/edge.d.ts.map +1 -0
- package/dist/mappers/edge.js +19 -0
- package/dist/mappers/edge.js.map +1 -0
- package/dist/mappers/file-learning.d.ts +14 -0
- package/dist/mappers/file-learning.d.ts.map +1 -0
- package/dist/mappers/file-learning.js +75 -0
- package/dist/mappers/file-learning.js.map +1 -0
- package/dist/mappers/index.d.ts +17 -0
- package/dist/mappers/index.d.ts.map +1 -0
- package/dist/mappers/index.js +30 -0
- package/dist/mappers/index.js.map +1 -0
- package/dist/mappers/learning.d.ts +19 -0
- package/dist/mappers/learning.d.ts.map +1 -0
- package/dist/mappers/learning.js +41 -0
- package/dist/mappers/learning.js.map +1 -0
- package/dist/mappers/orchestrator-state.d.ts +33 -0
- package/dist/mappers/orchestrator-state.d.ts.map +1 -0
- package/dist/mappers/orchestrator-state.js +34 -0
- package/dist/mappers/orchestrator-state.js.map +1 -0
- package/dist/mappers/run.d.ts +32 -0
- package/dist/mappers/run.d.ts.map +1 -0
- package/dist/mappers/run.js +64 -0
- package/dist/mappers/run.js.map +1 -0
- package/dist/mappers/task.d.ts +23 -0
- package/dist/mappers/task.d.ts.map +1 -0
- package/dist/mappers/task.js +54 -0
- package/dist/mappers/task.js.map +1 -0
- package/dist/mappers/tracked-project.d.ts +15 -0
- package/dist/mappers/tracked-project.d.ts.map +1 -0
- package/dist/mappers/tracked-project.js +23 -0
- package/dist/mappers/tracked-project.js.map +1 -0
- package/dist/mappers/worker.d.ts +33 -0
- package/dist/mappers/worker.d.ts.map +1 -0
- package/dist/mappers/worker.js +35 -0
- package/dist/mappers/worker.js.map +1 -0
- package/dist/repo/anchor-repo.d.ts +52 -0
- package/dist/repo/anchor-repo.d.ts.map +1 -0
- package/dist/repo/anchor-repo.js +204 -0
- package/dist/repo/anchor-repo.js.map +1 -0
- package/dist/repo/attempt-repo.d.ts +25 -0
- package/dist/repo/attempt-repo.d.ts.map +1 -0
- package/dist/repo/attempt-repo.js +78 -0
- package/dist/repo/attempt-repo.js.map +1 -0
- package/dist/repo/candidate-repo.d.ts +16 -0
- package/dist/repo/candidate-repo.d.ts.map +1 -0
- package/dist/repo/candidate-repo.js +143 -0
- package/dist/repo/candidate-repo.js.map +1 -0
- package/dist/repo/claim-repo.d.ts +17 -0
- package/dist/repo/claim-repo.d.ts.map +1 -0
- package/dist/repo/claim-repo.js +62 -0
- package/dist/repo/claim-repo.js.map +1 -0
- package/dist/repo/deduplication-repo.d.ts +37 -0
- package/dist/repo/deduplication-repo.d.ts.map +1 -0
- package/dist/repo/deduplication-repo.js +133 -0
- package/dist/repo/deduplication-repo.js.map +1 -0
- package/dist/repo/dep-repo.d.ts +19 -0
- package/dist/repo/dep-repo.d.ts.map +1 -0
- package/dist/repo/dep-repo.js +104 -0
- package/dist/repo/dep-repo.js.map +1 -0
- package/dist/repo/edge-repo.d.ts +26 -0
- package/dist/repo/edge-repo.d.ts.map +1 -0
- package/dist/repo/edge-repo.js +227 -0
- package/dist/repo/edge-repo.js.map +1 -0
- package/dist/repo/file-learning-repo.d.ts +17 -0
- package/dist/repo/file-learning-repo.d.ts.map +1 -0
- package/dist/repo/file-learning-repo.js +60 -0
- package/dist/repo/file-learning-repo.js.map +1 -0
- package/dist/repo/index.d.ts +18 -0
- package/dist/repo/index.d.ts.map +1 -0
- package/dist/repo/index.js +18 -0
- package/dist/repo/index.js.map +1 -0
- package/dist/repo/learning-repo.d.ts +31 -0
- package/dist/repo/learning-repo.d.ts.map +1 -0
- package/dist/repo/learning-repo.js +165 -0
- package/dist/repo/learning-repo.js.map +1 -0
- package/dist/repo/orchestrator-state-repo.d.ts +27 -0
- package/dist/repo/orchestrator-state-repo.d.ts.map +1 -0
- package/dist/repo/orchestrator-state-repo.js +96 -0
- package/dist/repo/orchestrator-state-repo.js.map +1 -0
- package/dist/repo/run-repo.d.ts +31 -0
- package/dist/repo/run-repo.d.ts.map +1 -0
- package/dist/repo/run-repo.js +132 -0
- package/dist/repo/run-repo.js.map +1 -0
- package/dist/repo/task-repo.d.ts +21 -0
- package/dist/repo/task-repo.d.ts.map +1 -0
- package/dist/repo/task-repo.js +169 -0
- package/dist/repo/task-repo.js.map +1 -0
- package/dist/repo/tracked-project-repo.d.ts +16 -0
- package/dist/repo/tracked-project-repo.d.ts.map +1 -0
- package/dist/repo/tracked-project-repo.js +54 -0
- package/dist/repo/tracked-project-repo.js.map +1 -0
- package/dist/repo/worker-repo.d.ts +19 -0
- package/dist/repo/worker-repo.d.ts.map +1 -0
- package/dist/repo/worker-repo.js +72 -0
- package/dist/repo/worker-repo.js.map +1 -0
- package/dist/schemas/index.d.ts +8 -0
- package/dist/schemas/index.d.ts.map +1 -0
- package/dist/schemas/index.js +7 -0
- package/dist/schemas/index.js.map +1 -0
- package/dist/schemas/sync.d.ts +296 -0
- package/dist/schemas/sync.d.ts.map +1 -0
- package/dist/schemas/sync.js +146 -0
- package/dist/schemas/sync.js.map +1 -0
- package/dist/schemas/worker.d.ts +77 -0
- package/dist/schemas/worker.d.ts.map +1 -0
- package/dist/schemas/worker.js +80 -0
- package/dist/schemas/worker.js.map +1 -0
- package/dist/services/anchor-service.d.ts +147 -0
- package/dist/services/anchor-service.d.ts.map +1 -0
- package/dist/services/anchor-service.js +540 -0
- package/dist/services/anchor-service.js.map +1 -0
- package/dist/services/anchor-verification.d.ts +94 -0
- package/dist/services/anchor-verification.d.ts.map +1 -0
- package/dist/services/anchor-verification.js +617 -0
- package/dist/services/anchor-verification.js.map +1 -0
- package/dist/services/ast-grep-service.d.ts +58 -0
- package/dist/services/ast-grep-service.d.ts.map +1 -0
- package/dist/services/ast-grep-service.js +356 -0
- package/dist/services/ast-grep-service.js.map +1 -0
- package/dist/services/attempt-service.d.ts +24 -0
- package/dist/services/attempt-service.d.ts.map +1 -0
- package/dist/services/attempt-service.js +55 -0
- package/dist/services/attempt-service.js.map +1 -0
- package/dist/services/auto-sync-service.d.ts +56 -0
- package/dist/services/auto-sync-service.d.ts.map +1 -0
- package/dist/services/auto-sync-service.js +66 -0
- package/dist/services/auto-sync-service.js.map +1 -0
- package/dist/services/candidate-extractor-service.d.ts +56 -0
- package/dist/services/candidate-extractor-service.d.ts.map +1 -0
- package/dist/services/candidate-extractor-service.js +365 -0
- package/dist/services/candidate-extractor-service.js.map +1 -0
- package/dist/services/claim-service.d.ts +52 -0
- package/dist/services/claim-service.d.ts.map +1 -0
- package/dist/services/claim-service.js +134 -0
- package/dist/services/claim-service.js.map +1 -0
- package/dist/services/daemon-service.d.ts +214 -0
- package/dist/services/daemon-service.d.ts.map +1 -0
- package/dist/services/daemon-service.js +522 -0
- package/dist/services/daemon-service.js.map +1 -0
- package/dist/services/deduplication-service.d.ts +67 -0
- package/dist/services/deduplication-service.d.ts.map +1 -0
- package/dist/services/deduplication-service.js +145 -0
- package/dist/services/deduplication-service.js.map +1 -0
- package/dist/services/dep-service.d.ts +14 -0
- package/dist/services/dep-service.d.ts.map +1 -0
- package/dist/services/dep-service.js +34 -0
- package/dist/services/dep-service.js.map +1 -0
- package/dist/services/diversifier-service.d.ts +46 -0
- package/dist/services/diversifier-service.d.ts.map +1 -0
- package/dist/services/diversifier-service.js +197 -0
- package/dist/services/diversifier-service.js.map +1 -0
- package/dist/services/edge-service.d.ts +78 -0
- package/dist/services/edge-service.d.ts.map +1 -0
- package/dist/services/edge-service.js +158 -0
- package/dist/services/edge-service.js.map +1 -0
- package/dist/services/embedding-service.d.ts +138 -0
- package/dist/services/embedding-service.d.ts.map +1 -0
- package/dist/services/embedding-service.js +318 -0
- package/dist/services/embedding-service.js.map +1 -0
- package/dist/services/feedback-tracker.d.ts +64 -0
- package/dist/services/feedback-tracker.d.ts.map +1 -0
- package/dist/services/feedback-tracker.js +110 -0
- package/dist/services/feedback-tracker.js.map +1 -0
- package/dist/services/file-learning-service.d.ts +17 -0
- package/dist/services/file-learning-service.d.ts.map +1 -0
- package/dist/services/file-learning-service.js +41 -0
- package/dist/services/file-learning-service.js.map +1 -0
- package/dist/services/file-watcher-service.d.ts +141 -0
- package/dist/services/file-watcher-service.d.ts.map +1 -0
- package/dist/services/file-watcher-service.js +278 -0
- package/dist/services/file-watcher-service.js.map +1 -0
- package/dist/services/graph-expansion.d.ts +155 -0
- package/dist/services/graph-expansion.d.ts.map +1 -0
- package/dist/services/graph-expansion.js +466 -0
- package/dist/services/graph-expansion.js.map +1 -0
- package/dist/services/hierarchy-service.d.ts +16 -0
- package/dist/services/hierarchy-service.d.ts.map +1 -0
- package/dist/services/hierarchy-service.js +66 -0
- package/dist/services/hierarchy-service.js.map +1 -0
- package/dist/services/index.d.ts +36 -0
- package/dist/services/index.d.ts.map +1 -0
- package/dist/services/index.js +36 -0
- package/dist/services/index.js.map +1 -0
- package/dist/services/learning-service.d.ts +39 -0
- package/dist/services/learning-service.d.ts.map +1 -0
- package/dist/services/learning-service.js +151 -0
- package/dist/services/learning-service.js.map +1 -0
- package/dist/services/migration-service.d.ts +67 -0
- package/dist/services/migration-service.d.ts.map +1 -0
- package/dist/services/migration-service.js +144 -0
- package/dist/services/migration-service.js.map +1 -0
- package/dist/services/orchestrator-service.d.ts +52 -0
- package/dist/services/orchestrator-service.d.ts.map +1 -0
- package/dist/services/orchestrator-service.js +203 -0
- package/dist/services/orchestrator-service.js.map +1 -0
- package/dist/services/promotion-service.d.ts +67 -0
- package/dist/services/promotion-service.d.ts.map +1 -0
- package/dist/services/promotion-service.js +151 -0
- package/dist/services/promotion-service.js.map +1 -0
- package/dist/services/query-expansion-service.d.ts +55 -0
- package/dist/services/query-expansion-service.d.ts.map +1 -0
- package/dist/services/query-expansion-service.js +174 -0
- package/dist/services/query-expansion-service.js.map +1 -0
- package/dist/services/ready-service.d.ts +16 -0
- package/dist/services/ready-service.d.ts.map +1 -0
- package/dist/services/ready-service.js +70 -0
- package/dist/services/ready-service.js.map +1 -0
- package/dist/services/reranker-service.d.ts +51 -0
- package/dist/services/reranker-service.d.ts.map +1 -0
- package/dist/services/reranker-service.js +128 -0
- package/dist/services/reranker-service.js.map +1 -0
- package/dist/services/retriever-service.d.ts +49 -0
- package/dist/services/retriever-service.d.ts.map +1 -0
- package/dist/services/retriever-service.js +419 -0
- package/dist/services/retriever-service.js.map +1 -0
- package/dist/services/score-service.d.ts +43 -0
- package/dist/services/score-service.d.ts.map +1 -0
- package/dist/services/score-service.js +82 -0
- package/dist/services/score-service.js.map +1 -0
- package/dist/services/swarm-verification.d.ts +104 -0
- package/dist/services/swarm-verification.d.ts.map +1 -0
- package/dist/services/swarm-verification.js +400 -0
- package/dist/services/swarm-verification.js.map +1 -0
- package/dist/services/sync-service.d.ts +115 -0
- package/dist/services/sync-service.d.ts.map +1 -0
- package/dist/services/sync-service.js +350 -0
- package/dist/services/sync-service.js.map +1 -0
- package/dist/services/task-service.d.ts +22 -0
- package/dist/services/task-service.d.ts.map +1 -0
- package/dist/services/task-service.js +221 -0
- package/dist/services/task-service.js.map +1 -0
- package/dist/services/worker-process.d.ts +41 -0
- package/dist/services/worker-process.d.ts.map +1 -0
- package/dist/services/worker-process.js +280 -0
- package/dist/services/worker-process.js.map +1 -0
- package/dist/services/worker-service.d.ts +74 -0
- package/dist/services/worker-service.d.ts.map +1 -0
- package/dist/services/worker-service.js +148 -0
- package/dist/services/worker-service.js.map +1 -0
- package/dist/utils/glob.d.ts +15 -0
- package/dist/utils/glob.d.ts.map +1 -0
- package/dist/utils/glob.js +27 -0
- package/dist/utils/glob.js.map +1 -0
- package/dist/utils/math.d.ts +6 -0
- package/dist/utils/math.d.ts.map +1 -0
- package/dist/utils/math.js +21 -0
- package/dist/utils/math.js.map +1 -0
- package/package.json +72 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"claim-repo.d.ts","sourceRoot":"","sources":["../../src/repo/claim-repo.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAA;AAC/C,OAAO,EAAE,YAAY,EAAE,MAAM,UAAU,CAAA;AACvC,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAA;AAE5C,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAA;;qBAKhC,CAAC,KAAK,EAAE,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,KAAK,MAAM,CAAC,MAAM,CAAC,SAAS,EAAE,aAAa,CAAC;qBACzE,CAAC,KAAK,EAAE,SAAS,KAAK,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,aAAa,CAAC;uBACtD,CAAC,EAAE,EAAE,MAAM,KAAK,MAAM,CAAC,MAAM,CAAC,SAAS,GAAG,IAAI,EAAE,aAAa,CAAC;iCACpD,CAAC,MAAM,EAAE,MAAM,KAAK,MAAM,CAAC,MAAM,CAAC,SAAS,GAAG,IAAI,EAAE,aAAa,CAAC;0BACzE,CAAC,GAAG,EAAE,IAAI,KAAK,MAAM,CAAC,MAAM,CAAC,SAAS,SAAS,EAAE,EAAE,aAAa,CAAC;mCACxD,CAAC,QAAQ,EAAE,MAAM,KAAK,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC;;AAR7F,qBAAa,eAAgB,SAAQ,oBAUlC;CAAG;AAEN,eAAO,MAAM,mBAAmB,mDAkG/B,CAAA"}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import { Context, Effect, Layer } from "effect";
|
|
2
|
+
import { SqliteClient } from "../db.js";
|
|
3
|
+
import { DatabaseError } from "../errors.js";
|
|
4
|
+
import { rowToClaim } from "../mappers/claim.js";
|
|
5
|
+
export class ClaimRepository extends Context.Tag("ClaimRepository")() {
|
|
6
|
+
}
|
|
7
|
+
export const ClaimRepositoryLive = Layer.effect(ClaimRepository, Effect.gen(function* () {
|
|
8
|
+
const db = yield* SqliteClient;
|
|
9
|
+
return {
|
|
10
|
+
insert: (claim) => Effect.try({
|
|
11
|
+
try: () => {
|
|
12
|
+
const result = db.prepare(`INSERT INTO task_claims
|
|
13
|
+
(task_id, worker_id, claimed_at, lease_expires_at, renewed_count, status)
|
|
14
|
+
VALUES (?, ?, ?, ?, ?, ?)`).run(claim.taskId, claim.workerId, claim.claimedAt.toISOString(), claim.leaseExpiresAt.toISOString(), claim.renewedCount, claim.status);
|
|
15
|
+
const row = db.prepare("SELECT * FROM task_claims WHERE id = ?").get(result.lastInsertRowid);
|
|
16
|
+
return rowToClaim(row);
|
|
17
|
+
},
|
|
18
|
+
catch: (cause) => new DatabaseError({ cause })
|
|
19
|
+
}),
|
|
20
|
+
update: (claim) => Effect.try({
|
|
21
|
+
try: () => {
|
|
22
|
+
db.prepare(`UPDATE task_claims SET
|
|
23
|
+
task_id = ?, worker_id = ?, claimed_at = ?,
|
|
24
|
+
lease_expires_at = ?, renewed_count = ?, status = ?
|
|
25
|
+
WHERE id = ?`).run(claim.taskId, claim.workerId, claim.claimedAt.toISOString(), claim.leaseExpiresAt.toISOString(), claim.renewedCount, claim.status, claim.id);
|
|
26
|
+
},
|
|
27
|
+
catch: (cause) => new DatabaseError({ cause })
|
|
28
|
+
}),
|
|
29
|
+
findById: (id) => Effect.try({
|
|
30
|
+
try: () => {
|
|
31
|
+
const row = db.prepare("SELECT * FROM task_claims WHERE id = ?").get(id);
|
|
32
|
+
return row ? rowToClaim(row) : null;
|
|
33
|
+
},
|
|
34
|
+
catch: (cause) => new DatabaseError({ cause })
|
|
35
|
+
}),
|
|
36
|
+
findActiveByTaskId: (taskId) => Effect.try({
|
|
37
|
+
try: () => {
|
|
38
|
+
const row = db.prepare("SELECT * FROM task_claims WHERE task_id = ? AND status = 'active' LIMIT 1").get(taskId);
|
|
39
|
+
return row ? rowToClaim(row) : null;
|
|
40
|
+
},
|
|
41
|
+
catch: (cause) => new DatabaseError({ cause })
|
|
42
|
+
}),
|
|
43
|
+
findExpired: (now) => Effect.try({
|
|
44
|
+
try: () => {
|
|
45
|
+
const rows = db.prepare(`SELECT * FROM task_claims
|
|
46
|
+
WHERE status = 'active' AND lease_expires_at < ?
|
|
47
|
+
ORDER BY lease_expires_at ASC`).all(now.toISOString());
|
|
48
|
+
return rows.map(rowToClaim);
|
|
49
|
+
},
|
|
50
|
+
catch: (cause) => new DatabaseError({ cause })
|
|
51
|
+
}),
|
|
52
|
+
releaseAllByWorkerId: (workerId) => Effect.try({
|
|
53
|
+
try: () => {
|
|
54
|
+
const result = db.prepare(`UPDATE task_claims SET status = 'released'
|
|
55
|
+
WHERE worker_id = ? AND status = 'active'`).run(workerId);
|
|
56
|
+
return result.changes;
|
|
57
|
+
},
|
|
58
|
+
catch: (cause) => new DatabaseError({ cause })
|
|
59
|
+
})
|
|
60
|
+
};
|
|
61
|
+
}));
|
|
62
|
+
//# sourceMappingURL=claim-repo.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"claim-repo.js","sourceRoot":"","sources":["../../src/repo/claim-repo.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { Context, Effect, Layer } from "effect";
|
|
2
|
+
import { SqliteClient } from "../db.js";
|
|
3
|
+
import { DatabaseError } from "../errors.js";
|
|
4
|
+
import type { ProcessedHash, CreateProcessedHashInput, FileProgress, UpsertFileProgressInput } from "@jamesaphoenix/tx-types";
|
|
5
|
+
declare const DeduplicationRepository_base: Context.TagClass<DeduplicationRepository, "DeduplicationRepository", {
|
|
6
|
+
/** Check if a content hash already exists */
|
|
7
|
+
readonly hashExists: (contentHash: string) => Effect.Effect<boolean, DatabaseError>;
|
|
8
|
+
/** Check multiple hashes at once (batch operation) */
|
|
9
|
+
readonly hashesExist: (contentHashes: readonly string[]) => Effect.Effect<Set<string>, DatabaseError>;
|
|
10
|
+
/** Record a processed hash */
|
|
11
|
+
readonly insertHash: (input: CreateProcessedHashInput) => Effect.Effect<ProcessedHash, DatabaseError>;
|
|
12
|
+
/** Record multiple hashes at once (batch operation) */
|
|
13
|
+
readonly insertHashes: (inputs: readonly CreateProcessedHashInput[]) => Effect.Effect<number, DatabaseError>;
|
|
14
|
+
/** Find a hash record by content hash */
|
|
15
|
+
readonly findByHash: (contentHash: string) => Effect.Effect<ProcessedHash | null, DatabaseError>;
|
|
16
|
+
/** Get total count of processed hashes */
|
|
17
|
+
readonly countHashes: () => Effect.Effect<number, DatabaseError>;
|
|
18
|
+
/** Get hashes for a specific file */
|
|
19
|
+
readonly getHashesForFile: (filePath: string) => Effect.Effect<readonly ProcessedHash[], DatabaseError>;
|
|
20
|
+
/** Delete all hashes for a file (for reprocessing) */
|
|
21
|
+
readonly deleteHashesForFile: (filePath: string) => Effect.Effect<number, DatabaseError>;
|
|
22
|
+
/** Get progress for a file */
|
|
23
|
+
readonly getFileProgress: (filePath: string) => Effect.Effect<FileProgress | null, DatabaseError>;
|
|
24
|
+
/** Update or create progress for a file */
|
|
25
|
+
readonly upsertFileProgress: (input: UpsertFileProgressInput) => Effect.Effect<FileProgress, DatabaseError>;
|
|
26
|
+
/** Delete progress for a file */
|
|
27
|
+
readonly deleteFileProgress: (filePath: string) => Effect.Effect<void, DatabaseError>;
|
|
28
|
+
/** Get all tracked files */
|
|
29
|
+
readonly getAllFileProgress: () => Effect.Effect<readonly FileProgress[], DatabaseError>;
|
|
30
|
+
/** Count tracked files */
|
|
31
|
+
readonly countFiles: () => Effect.Effect<number, DatabaseError>;
|
|
32
|
+
}>;
|
|
33
|
+
export declare class DeduplicationRepository extends DeduplicationRepository_base {
|
|
34
|
+
}
|
|
35
|
+
export declare const DeduplicationRepositoryLive: Layer.Layer<DeduplicationRepository, never, SqliteClient>;
|
|
36
|
+
export {};
|
|
37
|
+
//# sourceMappingURL=deduplication-repo.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"deduplication-repo.d.ts","sourceRoot":"","sources":["../../src/repo/deduplication-repo.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAA;AAC/C,OAAO,EAAE,YAAY,EAAE,MAAM,UAAU,CAAA;AACvC,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAA;AAE5C,OAAO,KAAK,EACV,aAAa,EAEb,wBAAwB,EACxB,YAAY,EAEZ,uBAAuB,EACxB,MAAM,yBAAyB,CAAA;;IAO5B,6CAA6C;yBACxB,CAAC,WAAW,EAAE,MAAM,KAAK,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,aAAa,CAAC;IAEnF,sDAAsD;0BAChC,CAAC,aAAa,EAAE,SAAS,MAAM,EAAE,KAAK,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,aAAa,CAAC;IAErG,8BAA8B;yBACT,CAAC,KAAK,EAAE,wBAAwB,KAAK,MAAM,CAAC,MAAM,CAAC,aAAa,EAAE,aAAa,CAAC;IAErG,uDAAuD;2BAChC,CAAC,MAAM,EAAE,SAAS,wBAAwB,EAAE,KAAK,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC;IAE5G,yCAAyC;yBACpB,CAAC,WAAW,EAAE,MAAM,KAAK,MAAM,CAAC,MAAM,CAAC,aAAa,GAAG,IAAI,EAAE,aAAa,CAAC;IAEhG,0CAA0C;0BACpB,MAAM,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC;IAEhE,qCAAqC;+BACV,CAAC,QAAQ,EAAE,MAAM,KAAK,MAAM,CAAC,MAAM,CAAC,SAAS,aAAa,EAAE,EAAE,aAAa,CAAC;IAEvG,sDAAsD;kCACxB,CAAC,QAAQ,EAAE,MAAM,KAAK,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC;IAIxF,8BAA8B;8BACJ,CAAC,QAAQ,EAAE,MAAM,KAAK,MAAM,CAAC,MAAM,CAAC,YAAY,GAAG,IAAI,EAAE,aAAa,CAAC;IAEjG,2CAA2C;iCACd,CAAC,KAAK,EAAE,uBAAuB,KAAK,MAAM,CAAC,MAAM,CAAC,YAAY,EAAE,aAAa,CAAC;IAE3G,iCAAiC;iCACJ,CAAC,QAAQ,EAAE,MAAM,KAAK,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,aAAa,CAAC;IAErF,4BAA4B;iCACC,MAAM,MAAM,CAAC,MAAM,CAAC,SAAS,YAAY,EAAE,EAAE,aAAa,CAAC;IAExF,0BAA0B;yBACL,MAAM,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC;;AA5CnE,qBAAa,uBAAwB,SAAQ,4BA8C1C;CAAG;AAEN,eAAO,MAAM,2BAA2B,2DA+LvC,CAAA"}
|
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
import { Context, Effect, Layer } from "effect";
|
|
2
|
+
import { SqliteClient } from "../db.js";
|
|
3
|
+
import { DatabaseError } from "../errors.js";
|
|
4
|
+
import { rowToProcessedHash, rowToFileProgress } from "../mappers/deduplication.js";
|
|
5
|
+
export class DeduplicationRepository extends Context.Tag("DeduplicationRepository")() {
|
|
6
|
+
}
|
|
7
|
+
export const DeduplicationRepositoryLive = Layer.effect(DeduplicationRepository, Effect.gen(function* () {
|
|
8
|
+
const db = yield* SqliteClient;
|
|
9
|
+
return {
|
|
10
|
+
// --- Processed Hashes ---
|
|
11
|
+
hashExists: (contentHash) => Effect.try({
|
|
12
|
+
try: () => {
|
|
13
|
+
const row = db.prepare("SELECT 1 FROM processed_hashes WHERE content_hash = ? LIMIT 1").get(contentHash);
|
|
14
|
+
return row !== undefined;
|
|
15
|
+
},
|
|
16
|
+
catch: (cause) => new DatabaseError({ cause })
|
|
17
|
+
}),
|
|
18
|
+
hashesExist: (contentHashes) => Effect.try({
|
|
19
|
+
try: () => {
|
|
20
|
+
if (contentHashes.length === 0)
|
|
21
|
+
return new Set();
|
|
22
|
+
// Use batch query with placeholders
|
|
23
|
+
const placeholders = contentHashes.map(() => "?").join(",");
|
|
24
|
+
const rows = db.prepare(`SELECT content_hash FROM processed_hashes WHERE content_hash IN (${placeholders})`).all(...contentHashes);
|
|
25
|
+
return new Set(rows.map(r => r.content_hash));
|
|
26
|
+
},
|
|
27
|
+
catch: (cause) => new DatabaseError({ cause })
|
|
28
|
+
}),
|
|
29
|
+
insertHash: (input) => Effect.try({
|
|
30
|
+
try: () => {
|
|
31
|
+
db.prepare(`
|
|
32
|
+
INSERT INTO processed_hashes (content_hash, source_file, source_line)
|
|
33
|
+
VALUES (?, ?, ?)
|
|
34
|
+
`).run(input.contentHash, input.sourceFile, input.sourceLine);
|
|
35
|
+
const row = db.prepare("SELECT * FROM processed_hashes WHERE content_hash = ?").get(input.contentHash);
|
|
36
|
+
return rowToProcessedHash(row);
|
|
37
|
+
},
|
|
38
|
+
catch: (cause) => new DatabaseError({ cause })
|
|
39
|
+
}),
|
|
40
|
+
insertHashes: (inputs) => Effect.try({
|
|
41
|
+
try: () => {
|
|
42
|
+
if (inputs.length === 0)
|
|
43
|
+
return 0;
|
|
44
|
+
const stmt = db.prepare(`
|
|
45
|
+
INSERT OR IGNORE INTO processed_hashes (content_hash, source_file, source_line)
|
|
46
|
+
VALUES (?, ?, ?)
|
|
47
|
+
`);
|
|
48
|
+
let inserted = 0;
|
|
49
|
+
for (const input of inputs) {
|
|
50
|
+
const result = stmt.run(input.contentHash, input.sourceFile, input.sourceLine);
|
|
51
|
+
if (result.changes > 0)
|
|
52
|
+
inserted++;
|
|
53
|
+
}
|
|
54
|
+
return inserted;
|
|
55
|
+
},
|
|
56
|
+
catch: (cause) => new DatabaseError({ cause })
|
|
57
|
+
}),
|
|
58
|
+
findByHash: (contentHash) => Effect.try({
|
|
59
|
+
try: () => {
|
|
60
|
+
const row = db.prepare("SELECT * FROM processed_hashes WHERE content_hash = ?").get(contentHash);
|
|
61
|
+
return row ? rowToProcessedHash(row) : null;
|
|
62
|
+
},
|
|
63
|
+
catch: (cause) => new DatabaseError({ cause })
|
|
64
|
+
}),
|
|
65
|
+
countHashes: () => Effect.try({
|
|
66
|
+
try: () => {
|
|
67
|
+
const row = db.prepare("SELECT COUNT(*) as count FROM processed_hashes").get();
|
|
68
|
+
return row.count;
|
|
69
|
+
},
|
|
70
|
+
catch: (cause) => new DatabaseError({ cause })
|
|
71
|
+
}),
|
|
72
|
+
getHashesForFile: (filePath) => Effect.try({
|
|
73
|
+
try: () => {
|
|
74
|
+
const rows = db.prepare("SELECT * FROM processed_hashes WHERE source_file = ? ORDER BY source_line").all(filePath);
|
|
75
|
+
return rows.map(rowToProcessedHash);
|
|
76
|
+
},
|
|
77
|
+
catch: (cause) => new DatabaseError({ cause })
|
|
78
|
+
}),
|
|
79
|
+
deleteHashesForFile: (filePath) => Effect.try({
|
|
80
|
+
try: () => {
|
|
81
|
+
const result = db.prepare("DELETE FROM processed_hashes WHERE source_file = ?").run(filePath);
|
|
82
|
+
return result.changes;
|
|
83
|
+
},
|
|
84
|
+
catch: (cause) => new DatabaseError({ cause })
|
|
85
|
+
}),
|
|
86
|
+
// --- File Progress ---
|
|
87
|
+
getFileProgress: (filePath) => Effect.try({
|
|
88
|
+
try: () => {
|
|
89
|
+
const row = db.prepare("SELECT * FROM file_progress WHERE file_path = ?").get(filePath);
|
|
90
|
+
return row ? rowToFileProgress(row) : null;
|
|
91
|
+
},
|
|
92
|
+
catch: (cause) => new DatabaseError({ cause })
|
|
93
|
+
}),
|
|
94
|
+
upsertFileProgress: (input) => Effect.try({
|
|
95
|
+
try: () => {
|
|
96
|
+
db.prepare(`
|
|
97
|
+
INSERT INTO file_progress (file_path, last_line_processed, last_byte_offset, file_size, file_checksum, last_processed_at)
|
|
98
|
+
VALUES (?, ?, ?, ?, ?, datetime('now'))
|
|
99
|
+
ON CONFLICT(file_path) DO UPDATE SET
|
|
100
|
+
last_line_processed = excluded.last_line_processed,
|
|
101
|
+
last_byte_offset = excluded.last_byte_offset,
|
|
102
|
+
file_size = excluded.file_size,
|
|
103
|
+
file_checksum = excluded.file_checksum,
|
|
104
|
+
last_processed_at = datetime('now')
|
|
105
|
+
`).run(input.filePath, input.lastLineProcessed, input.lastByteOffset, input.fileSize ?? null, input.fileChecksum ?? null);
|
|
106
|
+
const row = db.prepare("SELECT * FROM file_progress WHERE file_path = ?").get(input.filePath);
|
|
107
|
+
return rowToFileProgress(row);
|
|
108
|
+
},
|
|
109
|
+
catch: (cause) => new DatabaseError({ cause })
|
|
110
|
+
}),
|
|
111
|
+
deleteFileProgress: (filePath) => Effect.try({
|
|
112
|
+
try: () => {
|
|
113
|
+
db.prepare("DELETE FROM file_progress WHERE file_path = ?").run(filePath);
|
|
114
|
+
},
|
|
115
|
+
catch: (cause) => new DatabaseError({ cause })
|
|
116
|
+
}),
|
|
117
|
+
getAllFileProgress: () => Effect.try({
|
|
118
|
+
try: () => {
|
|
119
|
+
const rows = db.prepare("SELECT * FROM file_progress ORDER BY last_processed_at DESC").all();
|
|
120
|
+
return rows.map(rowToFileProgress);
|
|
121
|
+
},
|
|
122
|
+
catch: (cause) => new DatabaseError({ cause })
|
|
123
|
+
}),
|
|
124
|
+
countFiles: () => Effect.try({
|
|
125
|
+
try: () => {
|
|
126
|
+
const row = db.prepare("SELECT COUNT(*) as count FROM file_progress").get();
|
|
127
|
+
return row.count;
|
|
128
|
+
},
|
|
129
|
+
catch: (cause) => new DatabaseError({ cause })
|
|
130
|
+
})
|
|
131
|
+
};
|
|
132
|
+
}));
|
|
133
|
+
//# sourceMappingURL=deduplication-repo.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"deduplication-repo.js","sourceRoot":"","sources":["../../src/repo/deduplication-repo.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { Context, Effect, Layer } from "effect";
|
|
2
|
+
import { SqliteClient } from "../db.js";
|
|
3
|
+
import { DatabaseError } from "../errors.js";
|
|
4
|
+
import type { TaskId, TaskDependency } from "@jamesaphoenix/tx-types";
|
|
5
|
+
declare const DependencyRepository_base: Context.TagClass<DependencyRepository, "DependencyRepository", {
|
|
6
|
+
readonly insert: (blockerId: string, blockedId: string) => Effect.Effect<void, DatabaseError>;
|
|
7
|
+
readonly remove: (blockerId: string, blockedId: string) => Effect.Effect<void, DatabaseError>;
|
|
8
|
+
readonly getBlockerIds: (blockedId: string) => Effect.Effect<readonly TaskId[], DatabaseError>;
|
|
9
|
+
readonly getBlockingIds: (blockerId: string) => Effect.Effect<readonly TaskId[], DatabaseError>;
|
|
10
|
+
readonly getBlockerIdsForMany: (blockedIds: readonly string[]) => Effect.Effect<Map<string, readonly TaskId[]>, DatabaseError>;
|
|
11
|
+
readonly getBlockingIdsForMany: (blockerIds: readonly string[]) => Effect.Effect<Map<string, readonly TaskId[]>, DatabaseError>;
|
|
12
|
+
readonly hasPath: (fromId: string, toId: string) => Effect.Effect<boolean, DatabaseError>;
|
|
13
|
+
readonly getAll: () => Effect.Effect<readonly TaskDependency[], DatabaseError>;
|
|
14
|
+
}>;
|
|
15
|
+
export declare class DependencyRepository extends DependencyRepository_base {
|
|
16
|
+
}
|
|
17
|
+
export declare const DependencyRepositoryLive: Layer.Layer<DependencyRepository, never, SqliteClient>;
|
|
18
|
+
export {};
|
|
19
|
+
//# sourceMappingURL=dep-repo.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dep-repo.d.ts","sourceRoot":"","sources":["../../src/repo/dep-repo.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAA;AAC/C,OAAO,EAAE,YAAY,EAAE,MAAM,UAAU,CAAA;AACvC,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAA;AAE5C,OAAO,KAAK,EAAE,MAAM,EAAE,cAAc,EAAiB,MAAM,yBAAyB,CAAA;;qBAK/D,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,KAAK,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,aAAa,CAAC;qBAC5E,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,KAAK,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,aAAa,CAAC;4BACrE,CAAC,SAAS,EAAE,MAAM,KAAK,MAAM,CAAC,MAAM,CAAC,SAAS,MAAM,EAAE,EAAE,aAAa,CAAC;6BACrE,CAAC,SAAS,EAAE,MAAM,KAAK,MAAM,CAAC,MAAM,CAAC,SAAS,MAAM,EAAE,EAAE,aAAa,CAAC;mCAChE,CAAC,UAAU,EAAE,SAAS,MAAM,EAAE,KAAK,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC,EAAE,aAAa,CAAC;oCAC9F,CAAC,UAAU,EAAE,SAAS,MAAM,EAAE,KAAK,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC,EAAE,aAAa,CAAC;sBAC7G,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,KAAK,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,aAAa,CAAC;qBACxE,MAAM,MAAM,CAAC,MAAM,CAAC,SAAS,cAAc,EAAE,EAAE,aAAa,CAAC;;AAVlF,qBAAa,oBAAqB,SAAQ,yBAYvC;CAAG;AAEN,eAAO,MAAM,wBAAwB,wDA0IpC,CAAA"}
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
import { Context, Effect, Layer } from "effect";
|
|
2
|
+
import { SqliteClient } from "../db.js";
|
|
3
|
+
import { DatabaseError } from "../errors.js";
|
|
4
|
+
import { rowToDependency } from "../mappers/task.js";
|
|
5
|
+
export class DependencyRepository extends Context.Tag("DependencyRepository")() {
|
|
6
|
+
}
|
|
7
|
+
export const DependencyRepositoryLive = Layer.effect(DependencyRepository, Effect.gen(function* () {
|
|
8
|
+
const db = yield* SqliteClient;
|
|
9
|
+
return {
|
|
10
|
+
insert: (blockerId, blockedId) => Effect.try({
|
|
11
|
+
try: () => {
|
|
12
|
+
db.prepare("INSERT INTO task_dependencies (blocker_id, blocked_id, created_at) VALUES (?, ?, ?)").run(blockerId, blockedId, new Date().toISOString());
|
|
13
|
+
},
|
|
14
|
+
catch: (cause) => new DatabaseError({ cause })
|
|
15
|
+
}),
|
|
16
|
+
remove: (blockerId, blockedId) => Effect.try({
|
|
17
|
+
try: () => {
|
|
18
|
+
db.prepare("DELETE FROM task_dependencies WHERE blocker_id = ? AND blocked_id = ?").run(blockerId, blockedId);
|
|
19
|
+
},
|
|
20
|
+
catch: (cause) => new DatabaseError({ cause })
|
|
21
|
+
}),
|
|
22
|
+
getBlockerIds: (blockedId) => Effect.try({
|
|
23
|
+
try: () => {
|
|
24
|
+
const rows = db.prepare("SELECT blocker_id FROM task_dependencies WHERE blocked_id = ?").all(blockedId);
|
|
25
|
+
return rows.map(r => r.blocker_id);
|
|
26
|
+
},
|
|
27
|
+
catch: (cause) => new DatabaseError({ cause })
|
|
28
|
+
}),
|
|
29
|
+
getBlockingIds: (blockerId) => Effect.try({
|
|
30
|
+
try: () => {
|
|
31
|
+
const rows = db.prepare("SELECT blocked_id FROM task_dependencies WHERE blocker_id = ?").all(blockerId);
|
|
32
|
+
return rows.map(r => r.blocked_id);
|
|
33
|
+
},
|
|
34
|
+
catch: (cause) => new DatabaseError({ cause })
|
|
35
|
+
}),
|
|
36
|
+
getBlockerIdsForMany: (blockedIds) => Effect.try({
|
|
37
|
+
try: () => {
|
|
38
|
+
const result = new Map();
|
|
39
|
+
if (blockedIds.length === 0)
|
|
40
|
+
return result;
|
|
41
|
+
const placeholders = blockedIds.map(() => "?").join(",");
|
|
42
|
+
const rows = db.prepare(`SELECT blocked_id, blocker_id FROM task_dependencies WHERE blocked_id IN (${placeholders})`).all(...blockedIds);
|
|
43
|
+
// Initialize all requested IDs with empty arrays
|
|
44
|
+
for (const id of blockedIds) {
|
|
45
|
+
result.set(id, []);
|
|
46
|
+
}
|
|
47
|
+
// Group by blocked_id
|
|
48
|
+
for (const row of rows) {
|
|
49
|
+
const existing = result.get(row.blocked_id) ?? [];
|
|
50
|
+
result.set(row.blocked_id, [...existing, row.blocker_id]);
|
|
51
|
+
}
|
|
52
|
+
return result;
|
|
53
|
+
},
|
|
54
|
+
catch: (cause) => new DatabaseError({ cause })
|
|
55
|
+
}),
|
|
56
|
+
getBlockingIdsForMany: (blockerIds) => Effect.try({
|
|
57
|
+
try: () => {
|
|
58
|
+
const result = new Map();
|
|
59
|
+
if (blockerIds.length === 0)
|
|
60
|
+
return result;
|
|
61
|
+
const placeholders = blockerIds.map(() => "?").join(",");
|
|
62
|
+
const rows = db.prepare(`SELECT blocker_id, blocked_id FROM task_dependencies WHERE blocker_id IN (${placeholders})`).all(...blockerIds);
|
|
63
|
+
// Initialize all requested IDs with empty arrays
|
|
64
|
+
for (const id of blockerIds) {
|
|
65
|
+
result.set(id, []);
|
|
66
|
+
}
|
|
67
|
+
// Group by blocker_id
|
|
68
|
+
for (const row of rows) {
|
|
69
|
+
const existing = result.get(row.blocker_id) ?? [];
|
|
70
|
+
result.set(row.blocker_id, [...existing, row.blocked_id]);
|
|
71
|
+
}
|
|
72
|
+
return result;
|
|
73
|
+
},
|
|
74
|
+
catch: (cause) => new DatabaseError({ cause })
|
|
75
|
+
}),
|
|
76
|
+
// BFS cycle detection: can we reach toId by following blocker chains from fromId?
|
|
77
|
+
hasPath: (fromId, toId) => Effect.try({
|
|
78
|
+
try: () => {
|
|
79
|
+
const visited = new Set();
|
|
80
|
+
const queue = [fromId];
|
|
81
|
+
while (queue.length > 0) {
|
|
82
|
+
const current = queue.shift();
|
|
83
|
+
if (current === toId)
|
|
84
|
+
return true;
|
|
85
|
+
if (visited.has(current))
|
|
86
|
+
continue;
|
|
87
|
+
visited.add(current);
|
|
88
|
+
const rows = db.prepare("SELECT blocker_id FROM task_dependencies WHERE blocked_id = ?").all(current);
|
|
89
|
+
queue.push(...rows.map(r => r.blocker_id));
|
|
90
|
+
}
|
|
91
|
+
return false;
|
|
92
|
+
},
|
|
93
|
+
catch: (cause) => new DatabaseError({ cause })
|
|
94
|
+
}),
|
|
95
|
+
getAll: () => Effect.try({
|
|
96
|
+
try: () => {
|
|
97
|
+
const rows = db.prepare("SELECT blocker_id, blocked_id, created_at FROM task_dependencies").all();
|
|
98
|
+
return rows.map(rowToDependency);
|
|
99
|
+
},
|
|
100
|
+
catch: (cause) => new DatabaseError({ cause })
|
|
101
|
+
})
|
|
102
|
+
};
|
|
103
|
+
}));
|
|
104
|
+
//# sourceMappingURL=dep-repo.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dep-repo.js","sourceRoot":"","sources":["../../src/repo/dep-repo.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { Context, Effect, Layer } from "effect";
|
|
2
|
+
import { SqliteClient } from "../db.js";
|
|
3
|
+
import { DatabaseError, EdgeNotFoundError } from "../errors.js";
|
|
4
|
+
import type { Edge, NodeType, EdgeType, CreateEdgeInput, UpdateEdgeInput, NeighborNode } from "@jamesaphoenix/tx-types";
|
|
5
|
+
declare const EdgeRepository_base: Context.TagClass<EdgeRepository, "EdgeRepository", {
|
|
6
|
+
readonly create: (input: CreateEdgeInput) => Effect.Effect<Edge, DatabaseError>;
|
|
7
|
+
readonly findById: (id: number) => Effect.Effect<Edge | null, DatabaseError>;
|
|
8
|
+
readonly findBySource: (sourceType: NodeType, sourceId: string) => Effect.Effect<readonly Edge[], DatabaseError>;
|
|
9
|
+
readonly findByTarget: (targetType: NodeType, targetId: string) => Effect.Effect<readonly Edge[], DatabaseError>;
|
|
10
|
+
readonly findByMultipleSources: (sourceType: NodeType, sourceIds: readonly string[]) => Effect.Effect<ReadonlyMap<string, readonly Edge[]>, DatabaseError>;
|
|
11
|
+
readonly findByEdgeType: (edgeType: EdgeType) => Effect.Effect<readonly Edge[], DatabaseError>;
|
|
12
|
+
readonly countByType: () => Effect.Effect<ReadonlyMap<EdgeType, number>, DatabaseError>;
|
|
13
|
+
readonly findNeighbors: (nodeType: NodeType, nodeId: string, options?: {
|
|
14
|
+
direction?: "outgoing" | "incoming" | "both";
|
|
15
|
+
edgeTypes?: readonly EdgeType[];
|
|
16
|
+
}) => Effect.Effect<readonly NeighborNode[], DatabaseError>;
|
|
17
|
+
readonly findPath: (fromType: NodeType, fromId: string, toType: NodeType, toId: string, maxDepth?: number) => Effect.Effect<readonly Edge[] | null, DatabaseError>;
|
|
18
|
+
readonly update: (id: number, input: UpdateEdgeInput) => Effect.Effect<Edge | null, DatabaseError>;
|
|
19
|
+
readonly invalidate: (id: number) => Effect.Effect<boolean, EdgeNotFoundError | DatabaseError>;
|
|
20
|
+
readonly findAll: () => Effect.Effect<readonly Edge[], DatabaseError>;
|
|
21
|
+
}>;
|
|
22
|
+
export declare class EdgeRepository extends EdgeRepository_base {
|
|
23
|
+
}
|
|
24
|
+
export declare const EdgeRepositoryLive: Layer.Layer<EdgeRepository, never, SqliteClient>;
|
|
25
|
+
export {};
|
|
26
|
+
//# sourceMappingURL=edge-repo.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"edge-repo.d.ts","sourceRoot":"","sources":["../../src/repo/edge-repo.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAA;AAC/C,OAAO,EAAE,YAAY,EAAE,MAAM,UAAU,CAAA;AACvC,OAAO,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAA;AAE/D,OAAO,KAAK,EACV,IAAI,EAEJ,QAAQ,EACR,QAAQ,EACR,eAAe,EACf,eAAe,EACf,YAAY,EACb,MAAM,yBAAyB,CAAA;;qBAKX,CAAC,KAAK,EAAE,eAAe,KAAK,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,aAAa,CAAC;uBAC5D,CAAC,EAAE,EAAE,MAAM,KAAK,MAAM,CAAC,MAAM,CAAC,IAAI,GAAG,IAAI,EAAE,aAAa,CAAC;2BACrD,CAAC,UAAU,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,KAAK,MAAM,CAAC,MAAM,CAAC,SAAS,IAAI,EAAE,EAAE,aAAa,CAAC;2BACzF,CAAC,UAAU,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,KAAK,MAAM,CAAC,MAAM,CAAC,SAAS,IAAI,EAAE,EAAE,aAAa,CAAC;oCAChF,CAAC,UAAU,EAAE,QAAQ,EAAE,SAAS,EAAE,SAAS,MAAM,EAAE,KAAK,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,MAAM,EAAE,SAAS,IAAI,EAAE,CAAC,EAAE,aAAa,CAAC;6BACjI,CAAC,QAAQ,EAAE,QAAQ,KAAK,MAAM,CAAC,MAAM,CAAC,SAAS,IAAI,EAAE,EAAE,aAAa,CAAC;0BACxE,MAAM,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,QAAQ,EAAE,MAAM,CAAC,EAAE,aAAa,CAAC;4BAC/D,CACtB,QAAQ,EAAE,QAAQ,EAClB,MAAM,EAAE,MAAM,EACd,OAAO,CAAC,EAAE;QACR,SAAS,CAAC,EAAE,UAAU,GAAG,UAAU,GAAG,MAAM,CAAA;QAC5C,SAAS,CAAC,EAAE,SAAS,QAAQ,EAAE,CAAA;KAChC,KACE,MAAM,CAAC,MAAM,CAAC,SAAS,YAAY,EAAE,EAAE,aAAa,CAAC;uBACvC,CACjB,QAAQ,EAAE,QAAQ,EAClB,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,QAAQ,EAChB,IAAI,EAAE,MAAM,EACZ,QAAQ,CAAC,EAAE,MAAM,KACd,MAAM,CAAC,MAAM,CAAC,SAAS,IAAI,EAAE,GAAG,IAAI,EAAE,aAAa,CAAC;qBACxC,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,eAAe,KAAK,MAAM,CAAC,MAAM,CAAC,IAAI,GAAG,IAAI,EAAE,aAAa,CAAC;yBAC7E,CAAC,EAAE,EAAE,MAAM,KAAK,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,iBAAiB,GAAG,aAAa,CAAC;sBAC5E,MAAM,MAAM,CAAC,MAAM,CAAC,SAAS,IAAI,EAAE,EAAE,aAAa,CAAC;;AA3BzE,qBAAa,cAAe,SAAQ,mBA6BjC;CAAG;AAEN,eAAO,MAAM,kBAAkB,kDAqT9B,CAAA"}
|