| 123456789101112131415161718192021222324252627282930313233343536373839 |
- import { Context, Effect, Layer } from "effect"
- import { Info, Ref, response } from "@kirincode-ai/schema/location"
- import { Project } from "./project"
- import { LayerNode } from "./effect/layer-node"
- import { makeLocationNode, tags } from "./effect/app-node"
- export * as Location from "./location"
- export { Info, Ref, response }
- export interface Interface extends Info {
- readonly vcs?: Project.Vcs
- }
- export class Service extends Context.Service<Service, Interface>()("@kirincode/Location") {}
- export const node = LayerNode.unbound(Service, tags.values.location)
- const layer = (ref: Ref) =>
- Layer.effect(
- Service,
- Effect.gen(function* () {
- const project = yield* Project.Service
- const resolved = yield* project.resolve(ref.directory)
- return Service.of({
- directory: ref.directory,
- workspaceID: ref.workspaceID,
- project: { id: resolved.id, directory: resolved.directory },
- vcs: resolved.vcs,
- })
- }),
- )
- export const boundNode = (ref: Ref) =>
- makeLocationNode({
- service: Service,
- layer: layer(ref),
- deps: [Project.node],
- })
|