release: WRNexusJS 0.5.0
This commit is contained in:
@@ -9,29 +9,43 @@
|
||||
*/
|
||||
|
||||
import { dirname } from "node:path";
|
||||
import { startServer } from "./index.ts";
|
||||
import { loadAppConfig, headToString, findStyleEntry, renderFontHead } from "@wrnexus/styles";
|
||||
import type { Mode } from "@wrnexus/core";
|
||||
import { findStyleEntry, headToString, loadAppConfig, renderFontHead } from "@wrnexus/styles";
|
||||
import { startServer } from "./index.ts";
|
||||
|
||||
const [appDir, portStr, modeStr, hostname, hmrStr] = process.argv.slice(2);
|
||||
|
||||
const mode = (modeStr as Mode) || "development";
|
||||
|
||||
const port = Number(portStr) || 3000;
|
||||
|
||||
// Load optional wrnexus.config.ts (sits next to the app/ dir) + resolve styles.
|
||||
const appRoot = dirname(appDir!);
|
||||
if (!appDir) {
|
||||
throw new Error("WRN-DEV-APP-DIR: app directory argument is required.");
|
||||
}
|
||||
|
||||
// Load optional wrnexus.config.ts next to the app directory.
|
||||
const appRoot = dirname(appDir);
|
||||
|
||||
const config = await loadAppConfig(appRoot);
|
||||
const styleEntry = findStyleEntry(appDir!, appRoot, config.styles?.entry);
|
||||
|
||||
const styleEntry = findStyleEntry(appDir, appRoot, config.styles?.entry);
|
||||
|
||||
const server = await startServer({
|
||||
appDir: appDir!,
|
||||
appConfig: {
|
||||
...config,
|
||||
},
|
||||
|
||||
port,
|
||||
hostname,
|
||||
mode,
|
||||
hmr: hmrStr === undefined ? undefined : hmrStr === "true",
|
||||
|
||||
styleEntry,
|
||||
stylesConfig: config.styles,
|
||||
|
||||
head: [renderFontHead(config.fonts), headToString(config.head)].filter(Boolean).join("\n "),
|
||||
|
||||
seo: config.seo,
|
||||
security: config.security,
|
||||
theme: config.theme,
|
||||
@@ -47,20 +61,44 @@ const server = await startServer({
|
||||
observability: config.observability,
|
||||
tenancy: config.tenancy,
|
||||
});
|
||||
const r = server.router;
|
||||
|
||||
const group = (label: string, items: { raw: string }[]) => {
|
||||
if (!items.length) return;
|
||||
console.log(` ${label}`);
|
||||
for (const it of items) console.log(` ${it.raw}`);
|
||||
};
|
||||
const router = server.router;
|
||||
|
||||
interface PrintableRoute {
|
||||
raw: string;
|
||||
}
|
||||
|
||||
function printRouteGroup(label: string, items: readonly PrintableRoute[]): void {
|
||||
const routes = Array.from(new Set(items.map((item) => item.raw.trim()).filter(Boolean))).sort(
|
||||
(left, right) => left.localeCompare(right),
|
||||
);
|
||||
|
||||
console.log(` ${label}: ${routes.length}`);
|
||||
|
||||
if (routes.length === 0) {
|
||||
console.warn(` ⚠ No ${label.toLowerCase()} registered`);
|
||||
return;
|
||||
}
|
||||
|
||||
for (const route of routes) {
|
||||
console.log(` ${route}`);
|
||||
}
|
||||
}
|
||||
|
||||
console.log(`\n ⚡ WrNexus — ${server.url}\n`);
|
||||
group("Pages", r.pages);
|
||||
group("API", r.api);
|
||||
group("Realtime", r.realtime);
|
||||
if (r.components.length) {
|
||||
console.log(" Components");
|
||||
for (const c of r.components) console.log(` ${c.name}`);
|
||||
}
|
||||
|
||||
printRouteGroup("Pages", router.pages);
|
||||
|
||||
console.log("");
|
||||
|
||||
printRouteGroup("API Routes", router.api);
|
||||
|
||||
if (router.realtime.length > 0) {
|
||||
console.log("");
|
||||
|
||||
printRouteGroup("Realtime Routes", router.realtime);
|
||||
}
|
||||
|
||||
console.log(`\n Components: ${router.components.length}`);
|
||||
|
||||
console.log("");
|
||||
|
||||
Reference in New Issue
Block a user