import { createCompositionRoot } from "./composition-root.js"; import { loadReleaseManifest } from "./load-release-manifest.js"; import { loadRuntimeConfig } from "./load-runtime-config.js"; import { createRuntimeAdapters } from "./runtime-adapters.js"; /** * @param {{ * fetcher?: typeof fetch, * host?: Record * }} [dependencies] */ export function createRuntimeComposition(dependencies = {}) { return createCompositionRoot({ loadConfig: () => loadRuntimeConfig({ fetcher: dependencies.fetcher }), loadRelease: (runtime) => loadReleaseManifest( /** @type {Awaited>} */ (runtime), { fetcher: dependencies.fetcher }, ), createAdapters: ({ config: runtime, release }) => createRuntimeAdapters({ runtime: /** @type {Awaited>} */ (runtime), release: /** @type {Awaited>} */ ( release ), fetcher: dependencies.fetcher, host: dependencies.host, }), }); }