dom-expressions 0.41.0-next.21 → 0.41.0-next.22
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +2 -2
- package/src/server.js +63 -39
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "dom-expressions",
|
|
3
3
|
"description": "A Fine-Grained Runtime for Performant DOM Rendering",
|
|
4
|
-
"version": "0.41.0-next.
|
|
4
|
+
"version": "0.41.0-next.22",
|
|
5
5
|
"author": "Ryan Carniato",
|
|
6
6
|
"license": "MIT",
|
|
7
7
|
"repository": {
|
|
@@ -29,5 +29,5 @@
|
|
|
29
29
|
"seroval": "~1.5.0",
|
|
30
30
|
"seroval-plugins": "~1.5.0"
|
|
31
31
|
},
|
|
32
|
-
"gitHead": "
|
|
32
|
+
"gitHead": "82bd2edff39d186d53eaa102672e549d458ddd50"
|
|
33
33
|
}
|
package/src/server.js
CHANGED
|
@@ -422,10 +422,26 @@ export function renderToStream(code, options = {}) {
|
|
|
422
422
|
function doShell() {
|
|
423
423
|
if (shellCompleted) return;
|
|
424
424
|
if (rootHoles) {
|
|
425
|
+
const pending = [];
|
|
425
426
|
for (const { id, fn } of rootHoles) {
|
|
426
427
|
const marker = `<!--rh${id}-->`;
|
|
427
428
|
const res = resolveSSRNode(fn);
|
|
428
|
-
|
|
429
|
+
if (!res.h.length) {
|
|
430
|
+
html = html.replace(marker, res.t[0]);
|
|
431
|
+
} else {
|
|
432
|
+
let out = res.t[0];
|
|
433
|
+
for (let j = 0; j < res.h.length; j++) {
|
|
434
|
+
const newId = nextHoleId++;
|
|
435
|
+
pending.push({ id: newId, fn: res.h[j] });
|
|
436
|
+
out += `<!--rh${newId}-->` + res.t[j + 1];
|
|
437
|
+
}
|
|
438
|
+
html = html.replace(marker, out);
|
|
439
|
+
for (const p of res.p) blockingPromises.add(p);
|
|
440
|
+
}
|
|
441
|
+
}
|
|
442
|
+
if (pending.length) {
|
|
443
|
+
rootHoles = pending;
|
|
444
|
+
return;
|
|
429
445
|
}
|
|
430
446
|
rootHoles = null;
|
|
431
447
|
}
|
|
@@ -464,48 +480,56 @@ export function renderToStream(code, options = {}) {
|
|
|
464
480
|
queue(flushEnd);
|
|
465
481
|
},
|
|
466
482
|
pipe(w) {
|
|
467
|
-
|
|
468
|
-
|
|
469
|
-
|
|
470
|
-
|
|
471
|
-
|
|
472
|
-
|
|
473
|
-
|
|
474
|
-
|
|
475
|
-
|
|
476
|
-
|
|
483
|
+
function flush() {
|
|
484
|
+
allSettled(blockingPromises).then(() => {
|
|
485
|
+
setTimeout(() => {
|
|
486
|
+
doShell();
|
|
487
|
+
if (!shellCompleted) return flush();
|
|
488
|
+
buffer = writable = w;
|
|
489
|
+
buffer.write(tmp);
|
|
490
|
+
firstFlushed = true;
|
|
491
|
+
if (completed) {
|
|
492
|
+
dispose();
|
|
493
|
+
writable.end();
|
|
494
|
+
} else flushEnd();
|
|
495
|
+
});
|
|
477
496
|
});
|
|
478
|
-
}
|
|
497
|
+
}
|
|
498
|
+
flush();
|
|
479
499
|
},
|
|
480
500
|
pipeTo(w) {
|
|
481
|
-
|
|
482
|
-
|
|
483
|
-
|
|
484
|
-
|
|
485
|
-
|
|
486
|
-
|
|
487
|
-
|
|
488
|
-
|
|
489
|
-
|
|
490
|
-
|
|
491
|
-
|
|
492
|
-
|
|
493
|
-
|
|
494
|
-
|
|
495
|
-
|
|
496
|
-
|
|
497
|
-
|
|
498
|
-
|
|
499
|
-
|
|
500
|
-
|
|
501
|
-
|
|
502
|
-
|
|
503
|
-
|
|
504
|
-
|
|
505
|
-
|
|
501
|
+
let resolve;
|
|
502
|
+
const p = new Promise(r => (resolve = r));
|
|
503
|
+
function flush() {
|
|
504
|
+
allSettled(blockingPromises).then(() => {
|
|
505
|
+
setTimeout(() => {
|
|
506
|
+
doShell();
|
|
507
|
+
if (!shellCompleted) return flush();
|
|
508
|
+
const encoder = new TextEncoder();
|
|
509
|
+
const writer = w.getWriter();
|
|
510
|
+
writable = {
|
|
511
|
+
end() {
|
|
512
|
+
writer.releaseLock();
|
|
513
|
+
w.close().catch(() => {});
|
|
514
|
+
resolve();
|
|
515
|
+
}
|
|
516
|
+
};
|
|
517
|
+
buffer = {
|
|
518
|
+
write(payload) {
|
|
519
|
+
writer.write(encoder.encode(payload)).catch(() => {});
|
|
520
|
+
}
|
|
521
|
+
};
|
|
522
|
+
buffer.write(tmp);
|
|
523
|
+
firstFlushed = true;
|
|
524
|
+
if (completed) {
|
|
525
|
+
dispose();
|
|
526
|
+
writable.end();
|
|
527
|
+
} else flushEnd();
|
|
528
|
+
});
|
|
506
529
|
});
|
|
507
|
-
|
|
508
|
-
|
|
530
|
+
}
|
|
531
|
+
flush();
|
|
532
|
+
return p;
|
|
509
533
|
}
|
|
510
534
|
};
|
|
511
535
|
}
|