import { Effects } from "../types" import { _ } from "../util" import { Path, ManifestId, VolumeName, NamedPath, matchPath, } from "./setupDependencyMounts" export type MountDependenciesOut = _< // prettier-ignore A extends Path ? string : A extends Record ? { [P in keyof A]: MountDependenciesOut; } : never > export async function mountDependencies< In extends | Record>> | Record> | Record | Path, >(effects: Effects, value: In): Promise> { if (matchPath.test(value)) { const mountPath = `${value.manifestId}/${value.volume}/${value.name}` return (await effects.mount({ location: { path: mountPath, }, target: { packageId: value.manifestId, path: value.path, readonly: value.readonly, volumeId: value.volume, }, })) as MountDependenciesOut } return Object.fromEntries( Object.entries(value).map(([key, value]) => [ key, mountDependencies(effects, value), ]), ) as Record as MountDependenciesOut }