release: WRNexusJS 0.3.2
This commit is contained in:
@@ -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 =
|
||||
|
||||
Reference in New Issue
Block a user