UNPKG

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