@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
JavaScript
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.`
);
};
}