import { buildLocationServiceMap } from "../location-services" import { LocationServiceMap } from "../location-service-map" import { LayerNode } from "@opencode-ai/util/effect/layer-node" import { makeGlobalNode } from "@opencode-ai/util/effect/app-node" export function build(root: LayerNode.Node, replacements: LayerNode.Replacements = []) { let allReplacements = replacements // Only build the location service map if it's actually needed if (LayerNode.hasUnbound(root, LocationServiceMap.node) && !hasReplacement(replacements, LocationServiceMap.node)) { const locationMap = buildLocationServiceMap(replacements) const locationMapNode = makeGlobalNode({ service: LocationServiceMap.Service, layer: locationMap, deps: [] }) allReplacements = replacements.concat([[LocationServiceMap.node, locationMapNode]]) } return LayerNode.compile(root, allReplacements) } function hasReplacement(replacements: LayerNode.Replacements, node: LayerNode.Node) { return replacements.some(([source]) => source.name === node.name) } export * as AppNodeBuilder from "./app-node-builder"