UNPKG

@esmx/core

Version:

A high-performance microfrontend framework supporting Vue, React, Preact, Solid, and Svelte with SSR and Module Federation capabilities.

35 lines (34 loc) 1.15 kB
import { pathToFileURL } from "node:url"; import { createLoaderImport } from "@esmx/import"; import { RenderContext } from "./render-context.mjs"; import { createMiddleware } from "./utils/middleware.mjs"; export async function createApp(esmx, command) { const render = command === esmx.COMMAND.start ? await createStartRender(esmx) : createErrorRender(esmx); return { middleware: createMiddleware(esmx), render }; } async function createStartRender(esmx) { const baseURL = pathToFileURL(esmx.resolvePath("dist/server")); const importMap = await esmx.getImportMap("server"); const loaderImport = createLoaderImport(baseURL, importMap); return async (options) => { const rc = new RenderContext(esmx, options); const result = await loaderImport(`${esmx.name}/src/entry.server`); const serverRender = result[rc.entryName]; if (typeof serverRender === "function") { await serverRender(rc); } return rc; }; } function createErrorRender(esmx) { return (options) => { throw new Error( `App instance is only available in production and can only execute built artifacts.` ); }; }