import { Code } from "./code.js"; /** * Substituting values into a template's holes. The rules, in order of how * much damage getting them wrong would do: * * - Plain values are LIFTED to literal nodes and never parsed. Filling a * string hole with `readFile("/etc/passwd")` yields a string literal * containing those characters, not a call. * - `Code` values graft as trees, with fragment kind checked against the * hole's sort. * - Identifier holes are the one exception to lifting: the filler string * becomes a NAME, so it is validated against the identifier grammar, * the reserved words, and the hygiene prefix. * - A partially filled template is an ordinary Code value; grafting it * carries its remaining holes along, and a later fill completes them. * Build the shape first, parameterize last — this is the feature's core * workflow, so nothing here may reject Code containing holes. */ export declare function fillHoles(code: Code, values: Record): Code;