refactor(server): migrate host options

This commit is contained in:
Dax Raad 2026-07-20 21:21:36 -04:00
commit 407ac2d8aa
20 changed files with 149 additions and 94 deletions

View file

@ -121,7 +121,7 @@ type CheckReplacementErrors<SourceError, ReplacementError> = [Exclude<Replacemen
type CheckReplacement<Item> = Item extends readonly [Node<infer A, infer E, infer T>, infer Replacement]
? Replacement extends Node<NoInfer<A>, infer E2, T>
? CheckReplacementErrors<E, NoInfer<E2>>
: Replacement extends Layer.Layer<NoInfer<A>, infer E2, infer _R>
: Replacement extends Layer.Layer<NoInfer<A>, infer E2, never>
? CheckReplacementErrors<E, NoInfer<E2>>
: { readonly "Invalid replacement": Replacement }
: { readonly "Invalid replacement": Item }
@ -133,16 +133,14 @@ type CheckReplacements<Items extends Replacements> = {
type ValidReplacements<Items extends Replacements> = Items & CheckReplacements<Items>
function replacementNode(source: AnyNode, replacement: AnyNode | Layer.Any) {
const replacementNode: AnyNode = isNode(replacement)
const replacementNode = isNode(replacement)
? replacement
: {
kind: "layer",
name: source.name,
service: source.service,
implementation: replacement,
dependencies: source.dependencies,
: make({
...nodeMakeIdentity(source),
layer: replacement as Layer.Layer<unknown, unknown>,
deps: [],
tag: source.tag,
}
})
if (source.name !== replacementNode.name) {
throw new Error(`Cannot replace ${source.name} with ${replacementNode.name}`)
}
@ -152,6 +150,11 @@ function replacementNode(source: AnyNode, replacement: AnyNode | Layer.Any) {
return replacementNode
}
function nodeMakeIdentity(node: AnyNode): NodeIdentity {
if (node.service !== undefined) return { service: node.service }
return { name: node.name }
}
function isNode(input: Layer.Any | AnyNode): input is AnyNode {
return "kind" in input && "dependencies" in input
}