release: WRNexusJS 0.5.0

This commit is contained in:
2026-07-29 12:51:10 +05:30
parent 76c768099d
commit 6afe32f63f
456 changed files with 40879 additions and 8850 deletions
+56 -18
View File
@@ -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("");