| import { buildLocationServiceMap } from "../location-services" |
| import { LocationServiceMap } from "../location-service-map" |
| import { LayerNode } from "./layer-node" |
| import { makeGlobalNode } from "./app-node" |
|
|
| export function build<A, E>(root: LayerNode.Node<A, E, any>, replacements: LayerNode.Replacements = []) { |
| let allReplacements = replacements |
|
|
| |
| 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<unknown, unknown, any>) { |
| return replacements.some(([source]) => source.name === node.name) |
| } |
|
|
| export * as AppNodeBuilder from "./app-node-builder" |
|
|