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