release: WRNexusJS 0.3.2

This commit is contained in:
2026-07-22 20:10:44 +05:30
parent 304819dfe9
commit 58ba2f2046
63 changed files with 242 additions and 121 deletions
+19 -2
View File
@@ -675,6 +675,20 @@ function hydrationId(ast: PageAst): string {
return `${ast.name}:${stableHash(shape)}`;
}
function isSafeGeneratedIdentifier(name: string): boolean {
return /^[A-Za-z_$][A-Za-z0-9_$]*$/.test(name);
}
function generateSsrStateAliases(stateNames: string[]): string {
const names = [...new Set(stateNames)].filter(isSafeGeneratedIdentifier);
if (!names.length) {
return "";
}
return `const { ${names.join(", ")} } = __state;\n`;
}
function hydrationAttribute(ast: PageAst): string {
const strategy = ast.hydrate ?? "load";
return ` data-wrn-hydration="${attrEscape(hydrationId(ast))}" data-wrn-hydrate="${attrEscape(strategy)}" data-wrn-runtime="${attrEscape(ast.runtime ?? "universal")}"`;
@@ -776,6 +790,9 @@ export function generate(ast: PageAst): string {
.map((state) => `${JSON.stringify(state.name)}: ${state.valueType ?? "unknown"}`)
.join("; ")} }`
: "Record<string, never>";
const ssrStateAliases = generateSsrStateAliases(ast.states.map((state) => state.name));
loops.forEach((code, idx) => {
body = body.replace(`\x00WRNEACH${idx}\x00`, () => code);
});
@@ -806,7 +823,7 @@ export function generate(ast: PageAst): string {
`export default async function ${ast.name}(ctx: any) {
${decls}
const __state: ${stateType} = { ${dynamicStateScope} };
${ssrStateAliases}
const __scopeValue = Object.entries(__state)
.map(([key, value]) => {
const encoded =
@@ -834,7 +851,7 @@ export function generate(ast: PageAst): string {
out.push(
`export default function ${ast.name}(ctx: any) {
const __state: ${stateType} = { ${dynamicStateScope} };
${ssrStateAliases}
const __scopeValue = Object.entries(__state)
.map(([key, value]) => {
const encoded =