Renders the manifest source text for every active capability in
inventory, importing each from outputPath's own directory. Two
capabilities exporting the same identifier name from different files
produce a real name collision in the generated output -- surfaced to the
caller as a ReportFinding by generate-manifest.ts, not silently
renamed here (renaming would make the manifest's export names diverge
from the capability's own declared name, which is worse).
This is the trickiest consumer of OUT-01's root-relative
CapabilityNode.file: an import specifier is relative to the output
file's own directory, not to root, so neither path can be used
directly. Both sides are lifted to absolute first (outputPath already
is; capability.file via absolutePathFrom(root, ...)) and only then
related to each other -- which also keeps a --package-discovered
capability living outside root working exactly as before, since
absolutePathFrom returns such a path unchanged.
Emitted as import + a single export {...}, not as export {...} from:
a re-export forwards a binding without introducing a local one, so
manifest's own array literal below would reference names that don't
exist in the emitted module's scope. That was invisible while the
conventional output path (docs/) sat outside every example's own
tsconfiginclude; moving it to src/generated/ (OUT-03) put the
generated file under a real type-check for the first time and surfaced it
immediately.
Renders the manifest source text for every active capability in
inventory, importing each fromoutputPath's own directory. Two capabilities exporting the same identifier name from different files produce a real name collision in the generated output -- surfaced to the caller as aReportFindingbygenerate-manifest.ts, not silently renamed here (renaming would make the manifest's export names diverge from the capability's own declared name, which is worse).This is the trickiest consumer of OUT-01's root-relative
CapabilityNode.file: an import specifier is relative to the output file's own directory, not toroot, so neither path can be used directly. Both sides are lifted to absolute first (outputPathalready is;capability.fileviaabsolutePathFrom(root, ...)) and only then related to each other -- which also keeps a--package-discovered capability living outsiderootworking exactly as before, sinceabsolutePathFromreturns such a path unchanged.Emitted as
import+ a singleexport {...}, not asexport {...} from: a re-export forwards a binding without introducing a local one, somanifest's own array literal below would reference names that don't exist in the emitted module's scope. That was invisible while the conventional output path (docs/) sat outside every example's owntsconfiginclude; moving it tosrc/generated/(OUT-03) put the generated file under a real type-check for the first time and surfaced it immediately.