Files
WRNexusJS/WRNexusJS-0.3.0-test-fixes.patch
T
2026-07-22 17:29:08 +05:30

196 lines
4.9 KiB
Diff

--- a/packages/compiler/src/codegen.ts
+++ b/packages/compiler/src/codegen.ts
@@ -859,7 +859,11 @@
out.push(`export async function __wrnexusLoad(ctx: any) {\n${serverLoads.map((entry) => entry.body).join("\n")}\n}`);
}
if (clientLoads.length > 0) {
- out.push(`export const __wrnexusClientLoad = ${JSON.stringify(clientLoads.map((entry) => entry.body))};`);
+ out.push(
+ `export async function __wrnexusClientLoad(ctx: any) {
+${clientLoads.map((entry) => entry.body).join("\n")}
+}`,
+ );
}
}
--- a/packages/csr/src/reactive-runtime.ts
+++ b/packages/csr/src/reactive-runtime.ts
@@ -480,18 +480,39 @@
// signal.subscribe dedupes, so re-subscribing each run is cheap and bounded.
var currentRenderer = null;
var pendingRenderers = new Set();
- var renderScheduled = false;
+ var batchDepth = 0;
+ var flushingRenderers = false;
+
+ function flushRenderers() {
+ if (flushingRenderers || batchDepth > 0) return;
+
+ flushingRenderers = true;
+
+ try {
+ while (pendingRenderers.size > 0) {
+ var queue = Array.from(pendingRenderers);
+ pendingRenderers.clear();
+ queue.forEach(function (run) { run(); });
+ }
+ } finally {
+ flushingRenderers = false;
+ }
+ }
function scheduleRenderer(renderer) {
pendingRenderers.add(renderer);
- if (renderScheduled) return;
- renderScheduled = true;
- queueMicrotask(function () {
- renderScheduled = false;
- var queue = Array.from(pendingRenderers);
- pendingRenderers.clear();
- queue.forEach(function (run) { run(); });
- });
+ flushRenderers();
+ }
+
+ function batchUpdates(callback) {
+ batchDepth++;
+
+ try {
+ return callback();
+ } finally {
+ batchDepth--;
+ flushRenderers();
+ }
}
function reactive(fn) {
@@ -723,68 +744,70 @@
source,
locals,
) {
- var statements =
- splitStatements(source);
+ return batchUpdates(function () {
+ var statements =
+ splitStatements(source);
- for (
- var statementIndex = 0;
- statementIndex <
- statements.length;
- statementIndex++
- ) {
- var result = runStatement(
- statements[statementIndex],
- function (expression) {
- return evalExpr(
- expression,
- locals,
- );
- },
- function (name) {
- if (
- locals &&
- Object.prototype
- .hasOwnProperty.call(
- locals,
- name,
- )
- ) {
- return locals[name];
- }
-
- return peekScope(name);
- },
- function (name, value) {
- if (
- locals &&
- Object.prototype
- .hasOwnProperty.call(
- locals,
- name,
- )
- ) {
- locals[name] = value;
- } else {
- writeScope(name, value);
- }
- },
- function (body) {
- return runStmt(
- body,
- locals,
- );
- },
- );
+ for (
+ var statementIndex = 0;
+ statementIndex <
+ statements.length;
+ statementIndex++
+ ) {
+ var result = runStatement(
+ statements[statementIndex],
+ function (expression) {
+ return evalExpr(
+ expression,
+ locals,
+ );
+ },
+ function (name) {
+ if (
+ locals &&
+ Object.prototype
+ .hasOwnProperty.call(
+ locals,
+ name,
+ )
+ ) {
+ return locals[name];
+ }
+
+ return peekScope(name);
+ },
+ function (name, value) {
+ if (
+ locals &&
+ Object.prototype
+ .hasOwnProperty.call(
+ locals,
+ name,
+ )
+ ) {
+ locals[name] = value;
+ } else {
+ writeScope(name, value);
+ }
+ },
+ function (body) {
+ return runStmt(
+ body,
+ locals,
+ );
+ },
+ );
- if (result.returned) {
- return result;
+ if (result.returned) {
+ return result;
+ }
}
- }
- return {
- returned: false,
- value: undefined,
- };
+ return {
+ returned: false,
+ value: undefined,
+ };
+ });
}
function installBehaviorFunctions(source) {