release: WRNexusJS 0.7.0

This commit is contained in:
2026-08-01 10:04:42 +05:30
parent c54144f2e4
commit 87507edf59
207 changed files with 12607 additions and 679 deletions
+21 -1
View File
@@ -24,7 +24,13 @@ import {
import { basename, extname, join, resolve } from "node:path";
import { buildRouter, type Route } from "@wrnexus/router";
import { getReactiveRuntime } from "@wrnexus/csr";
import { assertValidAst, generate, parse } from "@wrnexus/compiler";
import {
analyzeRuntimeRequirements,
assertValidAst,
generate,
parse,
type RuntimeRequirements,
} from "@wrnexus/compiler";
import {
loadAppConfig,
headToString,
@@ -102,12 +108,14 @@ export async function runBuild(appRoot: string): Promise<void> {
// keep the exact compiler path and output contract by default.
let compiledCount = 0;
const compiledFiles = new Map<string, string>();
const runtimeAnalysis = new Map<string, RuntimeRequirements>();
const compileWrn = async (file: string): Promise<void> => {
if (!file.endsWith(".wrn") || compiledFiles.has(file)) return;
const source = readFileSync(file, "utf8");
let ast = parse(source);
assertValidAst(ast, { file, accessibility: true });
ast = await pluginRunner.transformAst(ast, file);
runtimeAnalysis.set(file, analyzeRuntimeRequirements(ast));
const pluginDiagnostics = await pluginRunner.diagnostics(ast, file);
const errors = pluginDiagnostics.filter((diagnostic) => diagnostic.severity === "error");
for (const diagnostic of pluginDiagnostics.filter((item) => item.severity !== "error")) {
@@ -453,6 +461,7 @@ await createProductionServer(
],
runtimeFile: reactivePath,
cssFile: hasStyles ? join(distDir, "styles.css") : join(distDir, "framework.css"),
runtimeAnalysis,
});
report.pluginAssets = emittedPluginAssets.assets.map((asset) => ({
id: asset.id,
@@ -636,6 +645,11 @@ interface BuildReport {
source: string;
sourceBytes: number;
dynamicParams: string[];
execution: RuntimeRequirements["kind"];
canPrerender: boolean;
needsClientRuntime: boolean;
needsServerRuntime: boolean;
hydrationStrategy: string | null;
}>;
assets: Array<{ file: string; bytes: number }>;
measurements: { routeJsBytes: number; routeCssBytes: number; imageBytes: number };
@@ -666,6 +680,7 @@ function createBuildReport(input: {
routes: Array<{ kind: "page" | "api" | "realtime"; route: Route }>;
runtimeFile: string;
cssFile: string;
runtimeAnalysis: ReadonlyMap<string, RuntimeRequirements>;
}): BuildReport {
const assets = walkFiles(input.distDir)
.filter((file) => !file.endsWith("build-report.json") && !fwd(file).includes("/compiled/"))
@@ -689,6 +704,11 @@ function createBuildReport(input: {
source: fwd(route.file.replace(input.root, "").replace(/^\//, "")),
sourceBytes: fileBytes(route.file),
dynamicParams: route.paramNames,
execution: input.runtimeAnalysis.get(route.file)?.kind ?? "dynamic",
canPrerender: input.runtimeAnalysis.get(route.file)?.canPrerender ?? false,
needsClientRuntime: input.runtimeAnalysis.get(route.file)?.needsClientRuntime ?? true,
needsServerRuntime: input.runtimeAnalysis.get(route.file)?.needsServerRuntime ?? true,
hydrationStrategy: input.runtimeAnalysis.get(route.file)?.hydrationStrategy ?? null,
})),
assets,
measurements: {