From 56ea2dd929906f065544a1fa768cebc53d51c463 Mon Sep 17 00:00:00 2001
From: Dylan Piercey
Date: Sat, 29 Aug 2026 09:22:15 -0700
Subject: [PATCH] feat(runtime-tags): lazy readiness, $global fills,
controllables, and client-owned child inputs
Continues the persisted-pages line: lazy patch readiness and failure
reporting (a dead channel settles pending appliers and rejects later
frames naming it, never reloading the page), boundary pairing through
content sections (a settle from an earlier response no longer hides a
later frame's pending UI), $global-derived values as fills, the
controllables protocol (value/checked/checkedValue/selectedIndex/open,
spread claims), client-owned child input channels (tag vars, attribute
tags, arguments), and fold-ins from origin/main (#4048, #4053).
Fail-closed shapes are pinned as rejection fixtures; behavioral fixtures
pin client state surviving patches.
Co-Authored-By: Claude Fable 5
---
.sizes.json | 4 +-
.sizes/dom.js | 28 +-
...dies-generically-in-persisted-admission.md | 12 -
...ort-lazy-load-failure-reporting-to-main.md | 20 ++
...lobal-skew-policy-for-persisted-patches.md | 21 --
...patches-into-still-streaming-boundaries.md | 18 ++
.../sizes.json | 8 +-
.../sizes.json | 8 +-
.../lazy-tag-dynamic-placeholder/sizes.json | 8 +-
.../sizes.json | 8 +-
.../fixtures/lazy-tag-dynamic/sizes.json | 8 +-
.../sizes.json | 8 +-
.../sizes.json | 8 +-
.../sizes.json | 8 +-
.../fixtures/lazy-tag-load-error/sizes.json | 8 +-
.../sizes.json | 8 +-
.../lazy-tag-unmount-before-load/sizes.json | 8 +-
.../__snapshots__/html.bundle.debug.js | 2 +-
.../__snapshots__/html.bundle.js | 2 +-
.../sizes.json | 4 +-
.../__snapshots__/html.bundle.debug.js | 2 +-
.../__snapshots__/html.bundle.js | 2 +-
.../sizes.json | 4 +-
.../__snapshots__/html.bundle.debug.js | 2 +-
.../__snapshots__/html.bundle.js | 2 +-
.../sizes.json | 4 +-
.../__snapshots__/html.bundle.debug.js | 2 +-
.../__snapshots__/html.bundle.js | 2 +-
.../sizes.json | 4 +-
.../__snapshots__/html.bundle.debug.js | 2 +-
.../__snapshots__/html.bundle.js | 2 +-
.../__snapshots__/render.debug.md | 3 +-
.../__snapshots__/render.md | 3 +-
.../sizes.json | 4 +-
.../__snapshots__/html.bundle.debug.js | 2 +-
.../__snapshots__/html.bundle.js | 2 +-
.../persisted-async-await-in-loop/sizes.json | 4 +-
.../__snapshots__/html.bundle.debug.js | 2 +-
.../__snapshots__/html.bundle.js | 2 +-
.../sizes.json | 4 +-
.../__snapshots__/html.bundle.debug.js | 2 +-
.../__snapshots__/html.bundle.js | 2 +-
.../sizes.json | 4 +-
.../__snapshots__/html.bundle.debug.js | 4 +-
.../__snapshots__/html.bundle.js | 4 +-
.../persisted-async-await-lazy/sizes.json | 4 +-
.../__snapshots__/html.bundle.debug.js | 4 +-
.../__snapshots__/html.bundle.js | 4 +-
.../sizes.json | 4 +-
.../__snapshots__/dom.bundle.debug.js | 15 +
.../__snapshots__/html.bundle.debug.js | 20 ++
.../__snapshots__/html.bundle.js | 18 ++
.../__snapshots__/patches.debug.js | 21 ++
.../__snapshots__/patches.js | 21 ++
.../__snapshots__/render.debug.md | 47 +++
.../__snapshots__/render.md | 47 +++
.../__snapshots__/writes.debug.html | 8 +
.../__snapshots__/writes.html | 7 +
.../sizes.json | 16 +
.../template.marko | 6 +
.../test.ts | 21 ++
.../__snapshots__/html.bundle.debug.js | 2 +-
.../__snapshots__/html.bundle.js | 2 +-
.../persisted-async-await-pending/sizes.json | 4 +-
.../__snapshots__/html.bundle.debug.js | 2 +-
.../__snapshots__/html.bundle.js | 2 +-
.../sizes.json | 4 +-
.../__snapshots__/html.bundle.debug.js | 2 +-
.../__snapshots__/html.bundle.js | 2 +-
.../persisted-async-await-settled/sizes.json | 4 +-
.../__snapshots__/html.bundle.debug.js | 2 +-
.../__snapshots__/html.bundle.js | 2 +-
.../persisted-async-catch-fill/sizes.json | 4 +-
.../__snapshots__/dom.bundle.debug.js | 31 ++
.../__snapshots__/dom.bundle.js | 6 +
.../__snapshots__/error-compile-dom.debug.txt | 9 -
.../__snapshots__/error-compile-dom.txt | 9 -
.../error-compile-html.debug.txt | 9 -
.../__snapshots__/error-compile-html.txt | 9 -
.../__snapshots__/html.bundle.debug.js | 47 +++
.../__snapshots__/html.bundle.js | 41 +++
.../__snapshots__/patches.debug.js | 8 +
.../__snapshots__/patches.js | 8 +
.../__snapshots__/render.debug.md | 29 ++
.../__snapshots__/render.md | 29 ++
.../__snapshots__/writes.debug.html | 21 ++
.../__snapshots__/writes.html | 17 ++
.../sizes.json | 16 +
.../test.ts | 10 +-
.../__snapshots__/html.bundle.debug.js | 2 +-
.../__snapshots__/html.bundle.js | 2 +-
.../sizes.json | 4 +-
.../__snapshots__/html.bundle.debug.js | 2 +-
.../__snapshots__/html.bundle.js | 2 +-
.../sizes.json | 4 +-
.../__snapshots__/html.bundle.debug.js | 2 +-
.../__snapshots__/html.bundle.js | 2 +-
.../sizes.json | 4 +-
.../persisted-async-try-catch-only/sizes.json | 4 +-
.../__snapshots__/html.bundle.debug.js | 2 +-
.../__snapshots__/html.bundle.js | 2 +-
.../sizes.json | 4 +-
.../__snapshots__/html.bundle.debug.js | 2 +-
.../__snapshots__/html.bundle.js | 2 +-
.../sizes.json | 4 +-
.../__snapshots__/html.bundle.debug.js | 2 +-
.../__snapshots__/html.bundle.js | 2 +-
.../sizes.json | 4 +-
.../__snapshots__/dom.bundle.debug.js | 44 +++
.../__snapshots__/dom.bundle.js | 6 +
.../__snapshots__/html.bundle.debug.js | 65 +++++
.../__snapshots__/html.bundle.js | 59 ++++
.../__snapshots__/patches.debug.js | 13 +
.../__snapshots__/patches.js | 13 +
.../__snapshots__/render.debug.md | 50 ++++
.../__snapshots__/render.md | 50 ++++
.../__snapshots__/writes.debug.html | 43 +++
.../__snapshots__/writes.html | 39 +++
.../persisted-await-in-content/sizes.json | 16 +
.../tags/wrap/index.marko | 1 +
.../persisted-await-in-content/template.marko | 12 +
.../persisted-await-in-content/test.ts | 18 ++
.../__snapshots__/dom.bundle.debug.js | 32 ++
.../__snapshots__/dom.bundle.js | 6 +
.../__snapshots__/html.bundle.debug.js | 42 +++
.../__snapshots__/html.bundle.js | 37 +++
.../__snapshots__/patches.debug.js | 9 +
.../__snapshots__/patches.js | 9 +
.../__snapshots__/render.debug.md | 41 +++
.../__snapshots__/render.md | 41 +++
.../__snapshots__/writes.debug.html | 38 +++
.../__snapshots__/writes.html | 32 ++
.../sizes.json | 16 +
.../template.marko | 10 +
.../test.ts | 16 +
.../__snapshots__/html.bundle.debug.js | 2 +-
.../__snapshots__/html.bundle.js | 2 +-
.../sizes.json | 4 +-
.../sizes.json | 4 +-
.../__snapshots__/html.bundle.debug.js | 2 +-
.../__snapshots__/html.bundle.js | 2 +-
.../sizes.json | 4 +-
.../persisted-branch-child-const/sizes.json | 4 +-
.../persisted-branch-child-nested/sizes.json | 4 +-
.../persisted-branch-child-state/sizes.json | 4 +-
.../persisted-branch-child-tag/sizes.json | 4 +-
.../persisted-branch-child-var/sizes.json | 4 +-
.../sizes.json | 4 +-
.../sizes.json | 4 +-
.../persisted-branch-client-arrow/sizes.json | 4 +-
.../sizes.json | 4 +-
.../persisted-branch-client-child/sizes.json | 4 +-
.../sizes.json | 4 +-
.../sizes.json | 4 +-
.../sizes.json | 4 +-
.../sizes.json | 4 +-
.../persisted-branch-client-else/sizes.json | 4 +-
.../sizes.json | 4 +-
.../persisted-branch-client-for/sizes.json | 4 +-
.../__snapshots__/dom.bundle.debug.js | 15 +
.../__snapshots__/dom.bundle.js | 7 +
.../__snapshots__/error-compile-dom.debug.txt | 9 -
.../__snapshots__/error-compile-dom.txt | 9 -
.../error-compile-html.debug.txt | 9 -
.../__snapshots__/error-compile-html.txt | 9 -
.../__snapshots__/html.bundle.debug.js | 29 ++
.../__snapshots__/html.bundle.js | 17 ++
.../__snapshots__/patches.debug.js | 4 +
.../__snapshots__/patches.js | 4 +
.../__snapshots__/render.debug.md | 35 +++
.../__snapshots__/render.md | 35 +++
.../__snapshots__/writes.debug.html | 11 +
.../__snapshots__/writes.html | 9 +
.../persisted-branch-client-global/sizes.json | 16 +
.../persisted-branch-client-global/test.ts | 16 +-
.../__snapshots__/dom.bundle.debug.js | 18 ++
.../__snapshots__/dom.bundle.js | 9 +
.../__snapshots__/error-compile-dom.debug.txt | 9 -
.../__snapshots__/error-compile-dom.txt | 9 -
.../error-compile-html.debug.txt | 9 -
.../__snapshots__/error-compile-html.txt | 9 -
.../__snapshots__/html.bundle.debug.js | 25 ++
.../__snapshots__/html.bundle.js | 13 +
.../__snapshots__/patches.debug.js | 4 +
.../__snapshots__/patches.js | 4 +
.../__snapshots__/render.debug.md | 85 ++++++
.../__snapshots__/render.md | 85 ++++++
.../__snapshots__/writes.debug.html | 11 +
.../__snapshots__/writes.html | 8 +
.../sizes.json | 16 +
.../test.ts | 20 +-
.../sizes.json | 4 +-
.../sizes.json | 4 +-
.../persisted-branch-client-inner/sizes.json | 4 +-
.../sizes.json | 4 +-
.../sizes.json | 4 +-
.../sizes.json | 4 +-
.../sizes.json | 4 +-
.../persisted-branch-client-nested/sizes.json | 4 +-
.../sizes.json | 4 +-
.../persisted-branch-client-owned/sizes.json | 4 +-
.../persisted-branch-closure-deep/sizes.json | 4 +-
.../sizes.json | 4 +-
.../sizes.json | 4 +-
.../persisted-branch-closure/sizes.json | 4 +-
.../persisted-branch-const-mixed/sizes.json | 4 +-
.../persisted-branch-const/sizes.json | 4 +-
.../sizes.json | 4 +-
.../sizes.json | 4 +-
.../__snapshots__/dom.bundle.debug.js | 17 ++
.../__snapshots__/dom.bundle.js | 7 +
.../__snapshots__/html.bundle.debug.js | 27 ++
.../__snapshots__/html.bundle.js | 22 ++
.../__snapshots__/patches.debug.js | 9 +
.../__snapshots__/patches.js | 9 +
.../__snapshots__/render.debug.md | 65 +++++
.../__snapshots__/render.md | 65 +++++
.../__snapshots__/writes.debug.html | 11 +
.../__snapshots__/writes.html | 9 +
.../persisted-branch-deep-input/sizes.json | 16 +
.../template.marko | 5 +
.../persisted-branch-deep-input/test.ts | 17 ++
.../sizes.json | 4 +-
.../sizes.json | 4 +-
.../sizes.json | 4 +-
.../persisted-branch-frozen-let/sizes.json | 4 +-
.../persisted-branch-handler-input/sizes.json | 4 +-
.../persisted-branch-inert-test/sizes.json | 4 +-
.../sizes.json | 4 +-
.../sizes.json | 4 +-
.../persisted-branch-intersection/sizes.json | 4 +-
.../sizes.json | 4 +-
.../persisted-branch-late-state/sizes.json | 4 +-
.../sizes.json | 4 +-
.../sizes.json | 4 +-
.../sizes.json | 4 +-
.../persisted-branch-let-change/sizes.json | 4 +-
.../persisted-branch-let-mixed/sizes.json | 4 +-
.../persisted-branch-let-siblings/sizes.json | 4 +-
.../persisted-branch-let-static/sizes.json | 4 +-
.../fixtures/persisted-branch-let/sizes.json | 4 +-
.../persisted-branch-mixed-alias/sizes.json | 4 +-
.../sizes.json | 4 +-
.../persisted-branch-mixed-derived/sizes.json | 4 +-
.../sizes.json | 4 +-
.../sizes.json | 4 +-
.../sizes.json | 4 +-
.../sizes.json | 4 +-
.../__snapshots__/dom.bundle.debug.js | 20 ++
.../__snapshots__/dom.bundle.js | 7 +
.../__snapshots__/html.bundle.debug.js | 28 ++
.../__snapshots__/html.bundle.js | 23 ++
.../__snapshots__/patches.debug.js | 11 +
.../__snapshots__/patches.js | 11 +
.../__snapshots__/render.debug.md | 67 +++++
.../__snapshots__/render.md | 67 +++++
.../__snapshots__/writes.debug.html | 11 +
.../__snapshots__/writes.html | 9 +
.../persisted-branch-rest-input/sizes.json | 16 +
.../template.marko | 6 +
.../persisted-branch-rest-input/test.ts | 17 ++
.../persisted-branch-script-el/sizes.json | 4 +-
.../__snapshots__/dom.bundle.debug.js | 13 +-
.../__snapshots__/dom.bundle.js | 6 +-
.../__snapshots__/html.bundle.debug.js | 10 +-
.../__snapshots__/html.bundle.js | 9 +-
.../__snapshots__/patches.debug.js | 17 +-
.../__snapshots__/patches.js | 13 +-
.../__snapshots__/writes.debug.html | 6 +-
.../__snapshots__/writes.html | 4 +
.../persisted-branch-script-global/sizes.json | 12 +-
.../persisted-branch-script-input/sizes.json | 4 +-
.../__snapshots__/dom.bundle.debug.js | 13 +-
.../__snapshots__/dom.bundle.js | 4 +-
.../__snapshots__/html.bundle.debug.js | 14 +-
.../__snapshots__/html.bundle.js | 9 +-
.../__snapshots__/patches.debug.js | 21 +-
.../__snapshots__/patches.js | 15 +-
.../__snapshots__/writes.debug.html | 5 +-
.../__snapshots__/writes.html | 3 +-
.../persisted-branch-script-mixed/sizes.json | 12 +-
.../persisted-branch-script-state/sizes.json | 4 +-
.../persisted-branch-script/sizes.json | 4 +-
.../persisted-branch-state/sizes.json | 4 +-
.../sizes.json | 4 +-
.../sizes.json | 4 +-
.../fixtures/persisted-branch/sizes.json | 4 +-
.../persisted-capture-escapes/sizes.json | 4 +-
.../persisted-child-alias-patch/sizes.json | 4 +-
.../__snapshots__/error-compile-dom.debug.txt | 9 +
.../__snapshots__/error-compile-dom.txt | 9 +
.../error-compile-html.debug.txt | 9 +
.../__snapshots__/error-compile-html.txt | 9 +
.../persisted-child-arg-structural/helper.ts | 1 +
.../tags/struct/index.marko | 6 +
.../template.marko | 8 +
.../persisted-child-arg-structural/test.ts | 8 +
.../__snapshots__/error-compile-dom.debug.txt | 9 +
.../__snapshots__/error-compile-dom.txt | 9 +
.../error-compile-html.debug.txt | 9 +
.../__snapshots__/error-compile-html.txt | 9 +
.../tags/badge/index.marko | 1 +
.../template.marko | 7 +
.../persisted-child-args-spread/test.ts | 8 +
.../__snapshots__/dom.bundle.debug.js | 27 ++
.../__snapshots__/dom.bundle.js | 15 +
.../__snapshots__/error-compile-dom.debug.txt | 9 -
.../__snapshots__/error-compile-dom.txt | 9 -
.../error-compile-html.debug.txt | 9 -
.../__snapshots__/error-compile-html.txt | 9 -
.../__snapshots__/html.bundle.debug.js | 47 +++
.../__snapshots__/html.bundle.js | 40 +++
.../__snapshots__/patches.debug.js | 9 +
.../__snapshots__/patches.js | 9 +
.../__snapshots__/render.debug.md | 76 +++++
.../__snapshots__/render.md | 76 +++++
.../__snapshots__/writes.debug.html | 16 +
.../__snapshots__/writes.html | 14 +
.../fixtures/persisted-child-args/sizes.json | 22 ++
.../persisted-child-args/template.marko | 1 +
.../fixtures/persisted-child-args/test.ts | 8 +-
.../__snapshots__/error-compile-dom.debug.txt | 9 +
.../__snapshots__/error-compile-dom.txt | 9 +
.../error-compile-html.debug.txt | 9 +
.../__snapshots__/error-compile-html.txt | 9 +
.../persisted-child-attr-tag-spread/helper.ts | 1 +
.../tags/tabs/index.marko | 6 +
.../template.marko | 10 +
.../persisted-child-attr-tag-spread/test.ts | 8 +
.../__snapshots__/dom.bundle.debug.js | 37 +++
.../__snapshots__/dom.bundle.js | 23 ++
.../__snapshots__/html.bundle.debug.js | 58 ++++
.../__snapshots__/html.bundle.js | 51 ++++
.../__snapshots__/patches.debug.js | 7 +
.../__snapshots__/patches.js | 7 +
.../__snapshots__/render.debug.md | 94 ++++++
.../__snapshots__/render.md | 94 ++++++
.../__snapshots__/writes.debug.html | 22 ++
.../__snapshots__/writes.html | 19 ++
.../persisted-child-attr-tag-state/sizes.json | 22 ++
.../tags/tabs/index.marko | 6 +
.../template.marko | 11 +
.../persisted-child-attr-tag-state/test.ts | 15 +
.../fixtures/persisted-child-body/sizes.json | 4 +-
.../persisted-child-branch-const/sizes.json | 4 +-
.../persisted-child-client-const/sizes.json | 4 +-
.../sizes.json | 4 +-
.../persisted-child-client-mix/sizes.json | 4 +-
.../__snapshots__/dom.bundle.debug.js | 40 +++
.../__snapshots__/dom.bundle.js | 29 ++
.../__snapshots__/error-compile-dom.debug.txt | 9 -
.../__snapshots__/error-compile-dom.txt | 9 -
.../error-compile-html.debug.txt | 9 -
.../__snapshots__/error-compile-html.txt | 9 -
.../__snapshots__/html.bundle.debug.js | 49 ++++
.../__snapshots__/html.bundle.js | 42 +++
.../__snapshots__/patches.debug.js | 14 +
.../__snapshots__/patches.js | 14 +
.../__snapshots__/render.debug.md | 167 +++++++++++
.../__snapshots__/render.md | 167 +++++++++++
.../__snapshots__/writes.debug.html | 24 ++
.../__snapshots__/writes.html | 20 ++
.../persisted-child-client-tag-var/sizes.json | 22 ++
.../tags/price-card.marko | 5 -
.../tags/widget/index.marko | 5 +-
.../template.marko | 5 +-
.../persisted-child-client-tag-var/test.ts | 19 +-
.../persisted-child-composed-mixed/sizes.json | 4 +-
.../persisted-child-composed/sizes.json | 2 +-
.../persisted-child-const-attr/sizes.json | 4 +-
.../persisted-child-const-branch/sizes.json | 4 +-
.../persisted-child-const-clobber/sizes.json | 4 +-
.../__snapshots__/dom.bundle.debug.js | 30 ++
.../__snapshots__/dom.bundle.js | 14 +
.../__snapshots__/error-compile-dom.debug.txt | 9 -
.../__snapshots__/error-compile-dom.txt | 9 -
.../error-compile-html.debug.txt | 9 -
.../__snapshots__/error-compile-html.txt | 9 -
.../__snapshots__/html.bundle.debug.js | 55 ++++
.../__snapshots__/html.bundle.js | 33 +++
.../__snapshots__/patches.debug.js | 14 +
.../__snapshots__/patches.js | 14 +
.../__snapshots__/render.debug.md | 116 ++++++++
.../__snapshots__/render.md | 116 ++++++++
.../__snapshots__/writes.debug.html | 12 +
.../__snapshots__/writes.html | 10 +
.../sizes.json | 22 ++
.../template.marko | 2 +-
.../persisted-child-content-attr-tags/test.ts | 18 +-
.../persisted-child-content-deep/sizes.json | 4 +-
.../persisted-child-content-open/sizes.json | 4 +-
.../sizes.json | 4 +-
.../persisted-child-content/sizes.json | 4 +-
.../sizes.json | 4 +-
.../sizes.json | 4 +-
.../sizes.json | 4 +-
.../sizes.json | 4 +-
.../sizes.json | 4 +-
.../persisted-child-controllable/sizes.json | 4 +-
.../persisted-child-ctrl-input/sizes.json | 4 +-
.../sizes.json | 4 +-
.../persisted-child-fn-server/sizes.json | 4 +-
.../__snapshots__/dom.bundle.debug.js | 24 ++
.../__snapshots__/dom.bundle.js | 11 +
.../__snapshots__/error-compile-dom.debug.txt | 9 -
.../__snapshots__/error-compile-dom.txt | 9 -
.../error-compile-html.debug.txt | 9 -
.../__snapshots__/error-compile-html.txt | 9 -
.../__snapshots__/html.bundle.debug.js | 43 +++
.../__snapshots__/html.bundle.js | 35 +++
.../__snapshots__/patches.debug.js | 4 +
.../__snapshots__/patches.js | 4 +
.../__snapshots__/render.debug.md | 63 ++++
.../__snapshots__/render.md | 63 ++++
.../__snapshots__/writes.debug.html | 15 +
.../__snapshots__/writes.html | 12 +
.../persisted-child-global-derived/sizes.json | 22 ++
.../persisted-child-global-derived/test.ts | 15 +-
.../__snapshots__/dom.bundle.debug.js | 7 +-
.../persisted-child-global-owned/sizes.json | 4 +-
.../__snapshots__/error-compile-dom.debug.txt | 2 +-
.../__snapshots__/error-compile-dom.txt | 2 +-
.../error-compile-html.debug.txt | 2 +-
.../__snapshots__/error-compile-html.txt | 2 +-
.../__snapshots__/error-compile-dom.debug.txt | 9 +
.../__snapshots__/error-compile-dom.txt | 9 +
.../error-compile-html.debug.txt | 9 +
.../__snapshots__/error-compile-html.txt | 9 +
.../tags/widget/index.marko | 3 +
.../tags/widget/tags/inner/index.marko | 3 +
.../template.marko | 7 +
.../test.ts | 8 +
.../__snapshots__/dom.bundle.debug.js | 39 +++
.../__snapshots__/dom.bundle.js | 29 ++
.../__snapshots__/html.bundle.debug.js | 54 ++++
.../__snapshots__/html.bundle.js | 48 +++
.../__snapshots__/patches.debug.js | 7 +
.../__snapshots__/patches.js | 7 +
.../__snapshots__/render.debug.md | 90 ++++++
.../__snapshots__/render.md | 90 ++++++
.../__snapshots__/writes.debug.html | 23 ++
.../__snapshots__/writes.html | 19 ++
.../persisted-child-grandchild-var/sizes.json | 23 ++
.../tags/widget/index.marko | 2 +
.../tags/widget/tags/inner/index.marko | 3 +
.../template.marko | 7 +
.../persisted-child-grandchild-var/test.ts | 15 +
.../persisted-child-grandchild/sizes.json | 2 +-
.../persisted-child-handler-import/sizes.json | 4 +-
.../persisted-child-in-loop/sizes.json | 4 +-
.../persisted-child-intersection/sizes.json | 4 +-
.../sizes.json | 4 +-
.../persisted-child-mixed-attr/sizes.json | 2 +-
.../__snapshots__/error-compile-dom.debug.txt | 9 +
.../__snapshots__/error-compile-dom.txt | 9 +
.../error-compile-html.debug.txt | 9 +
.../__snapshots__/error-compile-html.txt | 9 +
.../helper.ts | 1 +
.../tags/tabs2/index.marko | 6 +
.../template.marko | 8 +
.../test.ts | 8 +
.../__snapshots__/error-compile-dom.debug.txt | 9 +
.../__snapshots__/error-compile-dom.txt | 9 +
.../error-compile-html.debug.txt | 9 +
.../__snapshots__/error-compile-html.txt | 9 +
.../helper.ts | 1 +
.../tags/tabs/index.marko | 6 +
.../template.marko | 10 +
.../persisted-child-nested-structural/test.ts | 8 +
.../persisted-child-rest-attr/sizes.json | 4 +-
.../persisted-child-rest-deep/sizes.json | 4 +-
.../persisted-child-rest-effect/sizes.json | 4 +-
.../sizes.json | 4 +-
.../persisted-child-rest-mixed/sizes.json | 4 +-
.../persisted-child-rest-named/sizes.json | 4 +-
.../persisted-child-rest-patch/sizes.json | 4 +-
.../__snapshots__/dom.bundle.debug.js | 17 +-
.../__snapshots__/dom.bundle.js | 4 +-
.../__snapshots__/html.bundle.debug.js | 8 +-
.../__snapshots__/html.bundle.js | 7 +-
.../__snapshots__/patches.debug.js | 6 +-
.../__snapshots__/patches.js | 6 +-
.../__snapshots__/writes.debug.html | 4 +-
.../__snapshots__/writes.html | 2 +
.../persisted-child-script-global/sizes.json | 12 +-
.../sizes.json | 4 +-
.../persisted-child-slot-optional/sizes.json | 4 +-
.../persisted-child-spread-state/sizes.json | 4 +-
.../persisted-child-spread/sizes.json | 4 +-
.../persisted-child-state-arg/sizes.json | 4 +-
.../persisted-child-state-attr/sizes.json | 4 +-
.../__snapshots__/dom.bundle.debug.js | 49 ++++
.../__snapshots__/dom.bundle.js | 36 +++
.../__snapshots__/html.bundle.debug.js | 71 +++++
.../__snapshots__/html.bundle.js | 63 ++++
.../__snapshots__/patches.debug.js | 7 +
.../__snapshots__/patches.js | 7 +
.../__snapshots__/render.debug.md | 120 ++++++++
.../__snapshots__/render.md | 120 ++++++++
.../__snapshots__/writes.debug.html | 37 +++
.../__snapshots__/writes.html | 34 +++
.../sizes.json | 22 ++
.../tags/tabs/index.marko | 6 +
.../template.marko | 16 +
.../persisted-child-state-spread-feed/test.ts | 15 +
.../persisted-child-stateful/sizes.json | 4 +-
.../__snapshots__/error-compile-dom.debug.txt | 9 +
.../__snapshots__/error-compile-dom.txt | 9 +
.../error-compile-html.debug.txt | 9 +
.../__snapshots__/error-compile-html.txt | 9 +
.../tags/counter-box/index.marko | 3 +
.../template.marko | 9 +
.../persisted-child-tag-var-assigned/test.ts | 8 +
.../__snapshots__/error-compile-dom.debug.txt | 9 +
.../__snapshots__/error-compile-dom.txt | 9 +
.../error-compile-html.debug.txt | 9 +
.../__snapshots__/error-compile-html.txt | 9 +
.../tags/counter/index.marko | 3 +
.../template.marko | 9 +
.../test.ts | 8 +
.../fixtures/persisted-child-try/sizes.json | 4 +-
.../persisted-child-two-fills/sizes.json | 4 +-
.../sizes.json | 4 +-
.../fixtures/persisted-child-var/sizes.json | 4 +-
.../persisted-child-whole-member/sizes.json | 4 +-
.../persisted-class-attribute/sizes.json | 4 +-
.../persisted-class-intersection/sizes.json | 4 +-
.../__snapshots__/dom.bundle.debug.js | 2 -
.../persisted-client-intersections/sizes.json | 4 +-
.../persisted-content-alias-render/sizes.json | 4 +-
.../sizes.json | 4 +-
.../sizes.json | 4 +-
.../persisted-content-attr-tags/sizes.json | 4 +-
.../__snapshots__/html.bundle.debug.js | 2 +-
.../__snapshots__/html.bundle.js | 2 +-
.../persisted-content-await/sizes.json | 4 +-
.../persisted-content-body-branch/sizes.json | 4 +-
.../sizes.json | 4 +-
.../sizes.json | 4 +-
.../sizes.json | 4 +-
.../persisted-content-child-branch/sizes.json | 4 +-
.../sizes.json | 4 +-
.../sizes.json | 4 +-
.../persisted-content-child-loop/sizes.json | 4 +-
.../persisted-content-client-owned/sizes.json | 4 +-
.../__snapshots__/dom.bundle.debug.js | 3 +-
.../__snapshots__/html.bundle.debug.js | 12 +-
.../__snapshots__/html.bundle.js | 7 +-
.../__snapshots__/writes.debug.html | 4 +-
.../__snapshots__/writes.html | 4 +-
.../persisted-content-closure-mix/sizes.json | 8 +-
.../sizes.json | 4 +-
.../persisted-content-dynamic-body/sizes.json | 4 +-
.../sizes.json | 4 +-
.../__snapshots__/dom.bundle.debug.js | 6 +-
.../__snapshots__/html.bundle.debug.js | 21 +-
.../__snapshots__/html.bundle.js | 21 +-
.../__snapshots__/writes.debug.html | 4 +
.../__snapshots__/writes.html | 4 +
.../sizes.json | 8 +-
.../__snapshots__/dom.bundle.debug.js | 3 +-
.../__snapshots__/html.bundle.debug.js | 5 +-
.../__snapshots__/html.bundle.js | 5 +-
.../__snapshots__/writes.debug.html | 3 +
.../__snapshots__/writes.html | 3 +
.../persisted-content-global/sizes.json | 8 +-
.../persisted-content-hole/sizes.json | 4 +-
.../persisted-content-inner-branch/sizes.json | 4 +-
.../sizes.json | 4 +-
.../persisted-content-intersect/sizes.json | 4 +-
.../persisted-content-loop/sizes.json | 4 +-
.../sizes.json | 4 +-
.../sizes.json | 4 +-
.../sizes.json | 4 +-
.../sizes.json | 4 +-
.../persisted-content-nested-swap/sizes.json | 4 +-
.../persisted-content-nested/sizes.json | 4 +-
.../__snapshots__/html.bundle.debug.js | 2 +-
.../__snapshots__/html.bundle.js | 2 +-
.../__snapshots__/patches.debug.js | 3 +-
.../__snapshots__/patches.js | 3 +-
.../__snapshots__/render.debug.md | 2 -
.../__snapshots__/render.md | 2 -
.../__snapshots__/writes.debug.html | 4 +-
.../__snapshots__/writes.html | 3 +-
.../sizes.json | 12 +-
.../test.ts | 6 +-
.../persisted-content-root-pair/sizes.json | 4 +-
.../persisted-content-root-swap/sizes.json | 4 +-
.../persisted-content-state/sizes.json | 4 +-
.../persisted-content-static-body/sizes.json | 4 +-
.../sizes.json | 4 +-
.../persisted-content-switch/sizes.json | 4 +-
.../__snapshots__/html.bundle.debug.js | 2 +-
.../__snapshots__/html.bundle.js | 2 +-
.../fixtures/persisted-content-try/sizes.json | 4 +-
.../sizes.json | 4 +-
.../sizes.json | 4 +-
.../sizes.json | 4 +-
.../persisted-controllable-branch/sizes.json | 4 +-
.../__snapshots__/dom.bundle.debug.js | 26 ++
.../__snapshots__/dom.bundle.js | 14 +
.../__snapshots__/html.bundle.debug.js | 24 ++
.../__snapshots__/html.bundle.js | 19 ++
.../__snapshots__/patches.debug.js | 15 +
.../__snapshots__/patches.js | 15 +
.../__snapshots__/render.debug.md | 136 +++++++++
.../__snapshots__/render.md | 136 +++++++++
.../__snapshots__/writes.debug.html | 20 ++
.../__snapshots__/writes.html | 13 +
.../sizes.json | 16 +
.../template.marko | 6 +
.../test.ts | 25 ++
.../__snapshots__/dom.bundle.debug.js | 26 ++
.../__snapshots__/dom.bundle.js | 14 +
.../__snapshots__/error-compile-dom.debug.txt | 5 -
.../__snapshots__/error-compile-dom.txt | 5 -
.../error-compile-html.debug.txt | 5 -
.../__snapshots__/error-compile-html.txt | 5 -
.../__snapshots__/html.bundle.debug.js | 24 ++
.../__snapshots__/html.bundle.js | 19 ++
.../__snapshots__/patches.debug.js | 15 +
.../__snapshots__/patches.js | 15 +
.../__snapshots__/render.debug.md | 136 +++++++++
.../__snapshots__/render.md | 136 +++++++++
.../__snapshots__/writes.debug.html | 17 ++
.../__snapshots__/writes.html | 11 +
.../sizes.json | 16 +
.../template.marko | 7 +-
.../test.ts | 23 +-
.../persisted-controllable-checked/sizes.json | 4 +-
.../persisted-controllable-details/sizes.json | 4 +-
.../sizes.json | 4 +-
.../persisted-controllable-removal/sizes.json | 4 +-
.../persisted-controllable-select/sizes.json | 4 +-
.../__snapshots__/dom.bundle.debug.js | 25 ++
.../__snapshots__/dom.bundle.js | 7 +
.../__snapshots__/error-compile-dom.debug.txt | 5 -
.../__snapshots__/error-compile-dom.txt | 5 -
.../error-compile-html.debug.txt | 5 -
.../__snapshots__/error-compile-html.txt | 5 -
.../__snapshots__/html.bundle.debug.js | 25 ++
.../__snapshots__/html.bundle.js | 17 ++
.../__snapshots__/patches.debug.js | 21 ++
.../__snapshots__/patches.js | 21 ++
.../__snapshots__/render.debug.md | 112 +++++++
.../__snapshots__/render.md | 112 +++++++
.../__snapshots__/writes.debug.html | 14 +
.../__snapshots__/writes.html | 10 +
.../persisted-controllable-spread/sizes.json | 16 +
.../template.marko | 5 +-
.../persisted-controllable-spread/test.ts | 26 +-
.../__snapshots__/dom.bundle.debug.js | 26 ++
.../__snapshots__/dom.bundle.js | 18 ++
.../__snapshots__/html.bundle.debug.js | 27 ++
.../__snapshots__/html.bundle.js | 20 ++
.../__snapshots__/patches.debug.js | 6 +
.../__snapshots__/patches.js | 6 +
.../__snapshots__/render.debug.md | 96 ++++++
.../__snapshots__/render.md | 96 ++++++
.../__snapshots__/writes.debug.html | 18 ++
.../__snapshots__/writes.html | 14 +
.../sizes.json | 16 +
.../template.marko | 3 +
.../test.ts | 27 ++
.../persisted-controllable-swap/sizes.json | 4 +-
.../sizes.json | 4 +-
.../persisted-controllable-value/sizes.json | 4 +-
.../persisted-ctrl-handler-param/sizes.json | 4 +-
.../persisted-dynamic-attribute/sizes.json | 4 +-
.../persisted-dynamic-body/sizes.json | 4 +-
.../sizes.json | 4 +-
.../sizes.json | 4 +-
.../persisted-dynamic-swap-effects/sizes.json | 4 +-
.../fixtures/persisted-effect-only/sizes.json | 4 +-
.../fixtures/persisted-effects/sizes.json | 4 +-
.../persisted-fill-asymmetric-if/sizes.json | 4 +-
.../persisted-fill-bound-pair/sizes.json | 4 +-
.../persisted-fill-content-attr/sizes.json | 4 +-
.../__snapshots__/html.bundle.debug.js | 2 +-
.../__snapshots__/html.bundle.js | 2 +-
.../persisted-fill-content-await/sizes.json | 4 +-
.../__snapshots__/dom.bundle.debug.js | 39 +++
.../__snapshots__/dom.bundle.js | 23 ++
.../__snapshots__/html.bundle.debug.js | 56 ++++
.../__snapshots__/html.bundle.js | 49 ++++
.../__snapshots__/patches.debug.js | 9 +
.../__snapshots__/patches.js | 9 +
.../__snapshots__/render.debug.md | 62 ++++
.../__snapshots__/render.md | 62 ++++
.../__snapshots__/writes.debug.html | 21 ++
.../__snapshots__/writes.html | 18 ++
.../sizes.json | 22 ++
.../tags/wrap/index.marko | 1 +
.../template.marko | 7 +
.../test.ts | 13 +
.../persisted-fill-content-section/sizes.json | 4 +-
.../sizes.json | 4 +-
.../persisted-fill-depth-3/sizes.json | 4 +-
.../persisted-fill-embedded-fn/sizes.json | 4 +-
.../persisted-fill-fn-destructure/sizes.json | 4 +-
.../persisted-fill-fn-select/sizes.json | 4 +-
.../persisted-fill-loops-grow/sizes.json | 4 +-
.../persisted-fill-loops-of-loops/sizes.json | 4 +-
.../persisted-fill-multicap/sizes.json | 4 +-
.../persisted-fill-offset-if/sizes.json | 4 +-
.../persisted-fill-offset-loops/sizes.json | 4 +-
.../__snapshots__/dom.bundle.debug.js | 28 ++
.../__snapshots__/dom.bundle.js | 15 +
.../__snapshots__/html.bundle.debug.js | 31 ++
.../__snapshots__/html.bundle.js | 25 ++
.../__snapshots__/patches.debug.js | 9 +
.../__snapshots__/patches.js | 9 +
.../__snapshots__/render.debug.md | 56 ++++
.../__snapshots__/render.md | 56 ++++
.../__snapshots__/writes.debug.html | 14 +
.../__snapshots__/writes.html | 12 +
.../persisted-global-derived-fill/sizes.json | 16 +
.../template.marko | 6 +
.../persisted-global-derived-fill/test.ts | 19 ++
.../__snapshots__/dom.bundle.debug.js | 15 +
.../__snapshots__/dom.bundle.js | 7 +
.../__snapshots__/html.bundle.debug.js | 28 ++
.../__snapshots__/html.bundle.js | 23 ++
.../__snapshots__/patches.debug.js | 4 +
.../__snapshots__/patches.js | 4 +
.../__snapshots__/render.debug.md | 55 ++++
.../__snapshots__/render.md | 55 ++++
.../__snapshots__/writes.debug.html | 11 +
.../__snapshots__/writes.html | 9 +
.../sizes.json | 16 +
.../template.marko | 5 +
.../persisted-global-read-in-stateful/test.ts | 18 ++
.../__snapshots__/dom.bundle.debug.js | 7 +-
.../persisted-global-reads/sizes.json | 4 +-
.../__snapshots__/dom.bundle.debug.js | 8 +-
.../__snapshots__/dom.bundle.js | 4 +-
.../__snapshots__/html.bundle.debug.js | 7 +-
.../__snapshots__/html.bundle.js | 6 +-
.../__snapshots__/patches.debug.js | 8 +-
.../__snapshots__/patches.js | 8 +-
.../__snapshots__/writes.debug.html | 4 +-
.../__snapshots__/writes.html | 2 +
.../persisted-global-update/sizes.json | 12 +-
.../persisted-grand-arrow-shadow/sizes.json | 4 +-
.../fixtures/persisted-grand-arrow/sizes.json | 4 +-
.../fixtures/persisted-grand-deep/sizes.json | 4 +-
.../persisted-grand-diamond/sizes.json | 4 +-
.../fixtures/persisted-grand-fill/sizes.json | 4 +-
.../__snapshots__/error-compile-dom.debug.txt | 2 +-
.../__snapshots__/error-compile-dom.txt | 2 +-
.../error-compile-html.debug.txt | 2 +-
.../__snapshots__/error-compile-html.txt | 2 +-
.../persisted-grand-server-fn/sizes.json | 4 +-
.../sizes.json | 4 +-
.../persisted-grand-spread/sizes.json | 4 +-
.../sizes.json | 4 +-
.../persisted-handler-input/sizes.json | 4 +-
.../persisted-input-branches/sizes.json | 4 +-
.../persisted-intersection/sizes.json | 4 +-
.../__snapshots__/dom.bundle.debug.js | 32 ++
.../__snapshots__/dom.bundle.js | 5 +
.../__snapshots__/html.bundle.debug.js | 34 +++
.../__snapshots__/html.bundle.js | 30 ++
.../__snapshots__/patches.debug.js | 8 +
.../__snapshots__/patches.js | 8 +
.../__snapshots__/render-ssr.debug.md | 21 ++
.../__snapshots__/render-ssr.md | 17 ++
.../__snapshots__/writes.debug.html | 30 ++
.../__snapshots__/writes.html | 21 ++
.../child.marko | 2 +
.../sizes.json | 28 ++
.../template.marko | 3 +
.../persisted-lazy-tag-chunk-failed/test.ts | 19 ++
.../__snapshots__/dom.bundle.debug.js | 4 +-
.../__snapshots__/dom.bundle.js | 20 ++
.../__snapshots__/html.bundle.debug.js | 9 +-
.../__snapshots__/html.bundle.js | 9 +-
.../__snapshots__/patches.debug.js | 10 +-
.../__snapshots__/patches.js | 10 +-
.../__snapshots__/render-ssr.debug.md | 13 +-
.../__snapshots__/render-ssr.md | 13 +-
.../__snapshots__/writes.debug.html | 6 +-
.../__snapshots__/writes.html | 4 +-
.../persisted-lazy-tag-conditional/sizes.json | 28 +-
.../__snapshots__/dom.bundle.debug.js | 41 +++
.../__snapshots__/dom.bundle.js | 24 ++
.../__snapshots__/html.bundle.debug.js | 44 +++
.../__snapshots__/html.bundle.js | 40 +++
.../__snapshots__/patches.debug.js | 16 +
.../__snapshots__/patches.js | 16 +
.../__snapshots__/render-ssr.debug.md | 33 +++
.../__snapshots__/render-ssr.md | 33 +++
.../__snapshots__/writes.debug.html | 8 +
.../__snapshots__/writes.html | 8 +
.../persisted-lazy-tag-construct/child.marko | 2 +
.../persisted-lazy-tag-construct/sizes.json | 32 ++
.../template.marko | 7 +
.../persisted-lazy-tag-construct/test.ts | 16 +
.../__snapshots__/dom.bundle.debug.js | 32 ++
.../__snapshots__/dom.bundle.js | 5 +
.../__snapshots__/html.bundle.debug.js | 34 +++
.../__snapshots__/html.bundle.js | 30 ++
.../__snapshots__/patches.debug.js | 8 +
.../__snapshots__/patches.js | 8 +
.../__snapshots__/render-ssr.debug.md | 23 ++
.../__snapshots__/render-ssr.md | 17 ++
.../__snapshots__/writes.debug.html | 30 ++
.../__snapshots__/writes.html | 21 ++
.../child.marko | 2 +
.../sizes.json | 28 ++
.../template.marko | 3 +
.../test.ts | 19 ++
.../__snapshots__/dom.bundle.debug.js | 32 ++
.../__snapshots__/dom.bundle.js | 5 +
.../__snapshots__/html.bundle.debug.js | 34 +++
.../__snapshots__/html.bundle.js | 30 ++
.../__snapshots__/patches.debug.js | 8 +
.../__snapshots__/patches.js | 8 +
.../__snapshots__/render-ssr.debug.md | 22 ++
.../__snapshots__/render-ssr.md | 17 ++
.../__snapshots__/writes.debug.html | 30 ++
.../__snapshots__/writes.html | 21 ++
.../child.marko | 2 +
.../persisted-lazy-tag-load-failed/sizes.json | 28 ++
.../template.marko | 3 +
.../persisted-lazy-tag-load-failed/test.ts | 19 ++
.../__snapshots__/dom.bundle.debug.js | 2 +-
.../__snapshots__/html.bundle.debug.js | 3 +-
.../__snapshots__/html.bundle.js | 3 +-
.../__snapshots__/render-ssr.debug.md | 13 +-
.../__snapshots__/render-ssr.md | 13 +-
.../__snapshots__/writes.debug.html | 6 +-
.../__snapshots__/writes.html | 4 +-
.../persisted-lazy-tag-pending/sizes.json | 20 +-
.../__snapshots__/dom.bundle.debug.js | 2 +-
.../__snapshots__/html.bundle.debug.js | 3 +-
.../__snapshots__/html.bundle.js | 3 +-
.../persisted-lazy-tag-ready-first/sizes.json | 16 +-
.../sizes.json | 4 +-
.../persisted-loop-alias-state/sizes.json | 4 +-
.../sizes.json | 4 +-
.../__snapshots__/dom.bundle.debug.js | 29 ++
.../__snapshots__/dom.bundle.js | 14 +
.../__snapshots__/html.bundle.debug.js | 33 +++
.../__snapshots__/html.bundle.js | 28 ++
.../__snapshots__/patches.debug.js | 1 +
.../__snapshots__/patches.js | 1 +
.../__snapshots__/render.debug.md | 43 +++
.../__snapshots__/render.md | 43 +++
.../__snapshots__/writes.debug.html | 26 ++
.../__snapshots__/writes.html | 24 ++
.../persisted-loop-by-fill/sizes.json | 16 +
.../persisted-loop-by-fill/template.marko | 9 +
.../fixtures/persisted-loop-by-fill/test.ts | 12 +
.../persisted-loop-by-local/sizes.json | 4 +-
.../persisted-loop-child-tag/sizes.json | 4 +-
.../persisted-loop-client-inner/sizes.json | 4 +-
.../persisted-loop-client-owned/sizes.json | 4 +-
.../persisted-loop-closure/sizes.json | 4 +-
.../persisted-loop-content-branch/sizes.json | 4 +-
.../persisted-loop-empty-growth/sizes.json | 4 +-
.../sizes.json | 4 +-
.../persisted-loop-frozen-inner/sizes.json | 4 +-
.../persisted-loop-grow-state/sizes.json | 4 +-
.../persisted-loop-handler/sizes.json | 4 +-
.../persisted-loop-in-client-if/sizes.json | 4 +-
.../persisted-loop-in-object/sizes.json | 4 +-
.../sizes.json | 4 +-
.../persisted-loop-intersection/sizes.json | 4 +-
.../persisted-loop-item-content/sizes.json | 4 +-
.../persisted-loop-let-index/sizes.json | 4 +-
.../persisted-loop-let-nested/sizes.json | 4 +-
.../fixtures/persisted-loop-let/sizes.json | 4 +-
.../fixtures/persisted-loop-mixed/sizes.json | 4 +-
.../sizes.json | 4 +-
.../fixtures/persisted-loop-nested/sizes.json | 4 +-
.../persisted-loop-pure-call/sizes.json | 4 +-
.../persisted-loop-reorder-fill/sizes.json | 4 +-
.../persisted-loop-rest-state/sizes.json | 4 +-
.../persisted-loop-selector-fill/sizes.json | 4 +-
.../persisted-loop-server-nested/sizes.json | 4 +-
.../fixtures/persisted-loop-shift/sizes.json | 4 +-
.../__snapshots__/html.bundle.debug.js | 2 +-
.../__snapshots__/html.bundle.js | 2 +-
.../fixtures/persisted-loop-spread/sizes.json | 4 +-
.../fixtures/persisted-loop-state/sizes.json | 4 +-
.../persisted-loop-static-content/sizes.json | 4 +-
.../persisted-loop-static-holes/sizes.json | 4 +-
.../fixtures/persisted-loop-static/sizes.json | 4 +-
.../persisted-loop-to-range/sizes.json | 4 +-
.../persisted-loop-until-step/sizes.json | 4 +-
.../fixtures/persisted-loop/sizes.json | 4 +-
.../persisted-native-content-attr/sizes.json | 4 +-
.../fixtures/persisted-nested-flow/sizes.json | 4 +-
.../persisted-only-child-branch/sizes.json | 4 +-
.../persisted-option-attrs/sizes.json | 4 +-
.../__snapshots__/dom.bundle.debug.js | 44 +++
.../__snapshots__/dom.bundle.js | 7 +
.../__snapshots__/html.bundle.debug.js | 66 +++++
.../__snapshots__/html.bundle.js | 59 ++++
.../__snapshots__/patches.debug.js | 12 +
.../__snapshots__/patches.js | 12 +
.../__snapshots__/render.debug.md | 33 +++
.../__snapshots__/render.md | 33 +++
.../__snapshots__/writes.debug.html | 43 +++
.../__snapshots__/writes.html | 37 +++
.../sizes.json | 16 +
.../tags/wrap/index.marko | 1 +
.../template.marko | 12 +
.../test.ts | 17 ++
.../__snapshots__/dom.bundle.debug.js | 32 ++
.../__snapshots__/dom.bundle.js | 7 +
.../__snapshots__/html.bundle.debug.js | 43 +++
.../__snapshots__/html.bundle.js | 38 +++
.../__snapshots__/patches.debug.js | 8 +
.../__snapshots__/patches.js | 8 +
.../__snapshots__/render.debug.md | 29 ++
.../__snapshots__/render.md | 29 ++
.../__snapshots__/writes.debug.html | 35 +++
.../__snapshots__/writes.html | 30 ++
.../sizes.json | 16 +
.../template.marko | 10 +
.../persisted-placeholder-server-read/test.ts | 17 ++
.../__snapshots__/dom.bundle.debug.js | 10 +
.../__snapshots__/dom.bundle.js | 2 +
.../__snapshots__/error-compile-dom.debug.txt | 2 -
.../__snapshots__/error-compile-dom.txt | 2 -
.../error-compile-html.debug.txt | 2 -
.../__snapshots__/error-compile-html.txt | 2 -
.../__snapshots__/html.bundle.debug.js | 14 +
.../__snapshots__/html.bundle.js | 11 +
.../__snapshots__/patches.debug.js | 6 +
.../__snapshots__/patches.js | 6 +
.../__snapshots__/render.debug.md | 26 ++
.../__snapshots__/render.md | 26 ++
.../__snapshots__/writes.debug.html | 12 +
.../__snapshots__/writes.html | 10 +
.../persisted-script-global-alias/sizes.json | 16 +
.../persisted-script-global-alias/test.ts | 9 +-
.../__snapshots__/dom.bundle.debug.js | 12 +-
.../__snapshots__/dom.bundle.js | 4 +-
.../__snapshots__/html.bundle.debug.js | 14 +-
.../__snapshots__/html.bundle.js | 10 +-
.../__snapshots__/patches.debug.js | 12 +-
.../__snapshots__/patches.js | 12 +-
.../__snapshots__/writes.debug.html | 5 +-
.../__snapshots__/writes.html | 3 +
.../persisted-script-global-keys/sizes.json | 12 +-
.../__snapshots__/dom.bundle.debug.js | 5 +-
.../persisted-script-global-opaque/sizes.json | 4 +-
.../__snapshots__/dom.bundle.debug.js | 11 +-
.../__snapshots__/dom.bundle.js | 4 +-
.../__snapshots__/html.bundle.debug.js | 8 +-
.../__snapshots__/html.bundle.js | 7 +-
.../__snapshots__/patches.debug.js | 6 +-
.../__snapshots__/patches.js | 6 +-
.../__snapshots__/writes.debug.html | 4 +-
.../__snapshots__/writes.html | 2 +
.../persisted-script-global/sizes.json | 12 +-
.../persisted-script-input/sizes.json | 4 +-
.../persisted-script-inputs/sizes.json | 4 +-
.../fixtures/persisted-shell-holes/sizes.json | 4 +-
.../__snapshots__/html.bundle.debug.js | 4 +-
.../__snapshots__/html.bundle.js | 4 +-
.../persisted-spread-attributes/sizes.json | 4 +-
.../persisted-spread-client-owned/sizes.json | 4 +-
.../__snapshots__/html.bundle.debug.js | 2 +-
.../__snapshots__/html.bundle.js | 2 +-
.../persisted-spread-handler/sizes.json | 4 +-
.../__snapshots__/html.bundle.debug.js | 2 +-
.../__snapshots__/html.bundle.js | 2 +-
.../persisted-spread-partial/sizes.json | 4 +-
.../persisted-spread-state/sizes.json | 4 +-
.../fixtures/persisted-state/sizes.json | 4 +-
.../persisted-static-scriptlets/sizes.json | 4 +-
.../fixtures/persisted-text-holes/sizes.json | 4 +-
.../__snapshots__/dom.bundle.debug.js | 31 ++
.../__snapshots__/dom.bundle.js | 7 +
.../__snapshots__/html.bundle.debug.js | 38 +++
.../__snapshots__/html.bundle.js | 36 +++
.../__snapshots__/patches.debug.js | 1 +
.../__snapshots__/patches.js | 1 +
.../__snapshots__/render.debug.md | 26 ++
.../__snapshots__/render.md | 26 ++
.../__snapshots__/writes.debug.html | 22 ++
.../__snapshots__/writes.html | 16 +
.../persisted-try-abort-disconnect/sizes.json | 16 +
.../template.marko | 9 +
.../persisted-try-abort-disconnect/test.ts | 29 ++
.../fixtures/persisted-var-effect/sizes.json | 4 +-
.../__snapshots__/dom.bundle.debug.js | 7 +-
.../__snapshots__/dom.bundle.js | 2 +-
.../persisted-var-global-child/sizes.json | 4 +-
.../persisted-var-pure-server/sizes.json | 4 +-
.../persisted-var-server-if/sizes.json | 4 +-
.../fixtures/persisted-var-server/sizes.json | 4 +-
.../fixtures/persisted-var-state/sizes.json | 4 +-
.../persisted-var-structure/sizes.json | 4 +-
.../fixtures/persisted-var-two-hop/sizes.json | 4 +-
packages/runtime-tags/src/dom.ts | 7 +
packages/runtime-tags/src/dom/load.ts | 29 +-
.../runtime-tags/src/dom/patch-attrs.feat.ts | 26 +-
.../src/dom/patch-boundary.feat.ts | 14 +-
.../runtime-tags/src/dom/patch-child.feat.ts | 2 +
.../dom/patch-control-checked-value.feat.ts | 19 ++
.../src/dom/patch-control.feat.ts | 5 +-
.../src/dom/patch-dynamic-tag.feat.ts | 12 +-
.../runtime-tags/src/dom/patch-ready.feat.ts | 29 +-
packages/runtime-tags/src/dom/patch-shells.ts | 9 +-
.../src/dom/patch-value-bind.feat.ts | 4 +-
.../runtime-tags/src/dom/patch-value.feat.ts | 12 +-
packages/runtime-tags/src/dom/resume.ts | 65 +++--
packages/runtime-tags/src/html/assets.ts | 60 +++-
packages/runtime-tags/src/html/patch.ts | 62 ++--
packages/runtime-tags/src/html/writer.ts | 53 +++-
.../runtime-tags/src/translator/core/await.ts | 15 +-
.../runtime-tags/src/translator/core/for.ts | 12 +-
.../translator/util/persisted/admission.ts | 274 ++++++++++++------
.../translator/util/persisted/decisions.ts | 23 +-
.../src/translator/util/persisted/delivery.ts | 45 ++-
.../translator/util/persisted/structure.ts | 3 +
.../src/translator/util/references.ts | 35 ++-
.../src/translator/util/runtime.ts | 1 +
.../src/translator/util/sections.ts | 3 +
.../runtime-tags/src/translator/util/shell.ts | 7 +-
.../src/translator/util/signals.ts | 75 +++--
.../translator/visitors/import-declaration.ts | 5 +-
.../src/translator/visitors/program/html.ts | 5 +
.../src/translator/visitors/program/index.ts | 8 +-
.../visitors/referenced-identifier.ts | 12 +
.../src/translator/visitors/tag/custom-tag.ts | 68 ++++-
.../src/translator/visitors/tag/native-tag.ts | 85 ++++--
1033 files changed, 13177 insertions(+), 1773 deletions(-)
delete mode 100644 agent-feedback/items/2026-08-12-validate-attribute-tag-bodies-generically-in-persisted-admission.md
create mode 100644 agent-feedback/items/2026-08-21-backport-lazy-load-failure-reporting-to-main.md
delete mode 100644 agent-feedback/items/2026-08-21-decide-global-skew-policy-for-persisted-patches.md
create mode 100644 agent-feedback/items/2026-08-23-pair-patches-into-still-streaming-boundaries.md
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-async-await-pending-twice/__snapshots__/dom.bundle.debug.js
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-async-await-pending-twice/__snapshots__/html.bundle.debug.js
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-async-await-pending-twice/__snapshots__/html.bundle.js
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-async-await-pending-twice/__snapshots__/patches.debug.js
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-async-await-pending-twice/__snapshots__/patches.js
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-async-await-pending-twice/__snapshots__/render.debug.md
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-async-await-pending-twice/__snapshots__/render.md
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-async-await-pending-twice/__snapshots__/writes.debug.html
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-async-await-pending-twice/__snapshots__/writes.html
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-async-await-pending-twice/sizes.json
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-async-await-pending-twice/template.marko
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-async-await-pending-twice/test.ts
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-async-catch-global-derived/__snapshots__/dom.bundle.debug.js
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-async-catch-global-derived/__snapshots__/dom.bundle.js
delete mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-async-catch-global-derived/__snapshots__/error-compile-dom.debug.txt
delete mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-async-catch-global-derived/__snapshots__/error-compile-dom.txt
delete mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-async-catch-global-derived/__snapshots__/error-compile-html.debug.txt
delete mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-async-catch-global-derived/__snapshots__/error-compile-html.txt
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-async-catch-global-derived/__snapshots__/html.bundle.debug.js
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-async-catch-global-derived/__snapshots__/html.bundle.js
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-async-catch-global-derived/__snapshots__/patches.debug.js
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-async-catch-global-derived/__snapshots__/patches.js
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-async-catch-global-derived/__snapshots__/render.debug.md
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-async-catch-global-derived/__snapshots__/render.md
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-async-catch-global-derived/__snapshots__/writes.debug.html
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-async-catch-global-derived/__snapshots__/writes.html
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-async-catch-global-derived/sizes.json
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-await-in-content/__snapshots__/dom.bundle.debug.js
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-await-in-content/__snapshots__/dom.bundle.js
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-await-in-content/__snapshots__/html.bundle.debug.js
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-await-in-content/__snapshots__/html.bundle.js
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-await-in-content/__snapshots__/patches.debug.js
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-await-in-content/__snapshots__/patches.js
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-await-in-content/__snapshots__/render.debug.md
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-await-in-content/__snapshots__/render.md
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-await-in-content/__snapshots__/writes.debug.html
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-await-in-content/__snapshots__/writes.html
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-await-in-content/sizes.json
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-await-in-content/tags/wrap/index.marko
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-await-in-content/template.marko
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-await-in-content/test.ts
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-await-patch-while-pending/__snapshots__/dom.bundle.debug.js
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-await-patch-while-pending/__snapshots__/dom.bundle.js
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-await-patch-while-pending/__snapshots__/html.bundle.debug.js
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-await-patch-while-pending/__snapshots__/html.bundle.js
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-await-patch-while-pending/__snapshots__/patches.debug.js
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-await-patch-while-pending/__snapshots__/patches.js
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-await-patch-while-pending/__snapshots__/render.debug.md
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-await-patch-while-pending/__snapshots__/render.md
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-await-patch-while-pending/__snapshots__/writes.debug.html
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-await-patch-while-pending/__snapshots__/writes.html
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-await-patch-while-pending/sizes.json
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-await-patch-while-pending/template.marko
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-await-patch-while-pending/test.ts
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-branch-client-global/__snapshots__/dom.bundle.debug.js
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-branch-client-global/__snapshots__/dom.bundle.js
delete mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-branch-client-global/__snapshots__/error-compile-dom.debug.txt
delete mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-branch-client-global/__snapshots__/error-compile-dom.txt
delete mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-branch-client-global/__snapshots__/error-compile-html.debug.txt
delete mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-branch-client-global/__snapshots__/error-compile-html.txt
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-branch-client-global/__snapshots__/html.bundle.debug.js
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-branch-client-global/__snapshots__/html.bundle.js
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-branch-client-global/__snapshots__/patches.debug.js
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-branch-client-global/__snapshots__/patches.js
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-branch-client-global/__snapshots__/render.debug.md
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-branch-client-global/__snapshots__/render.md
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-branch-client-global/__snapshots__/writes.debug.html
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-branch-client-global/__snapshots__/writes.html
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-branch-client-global/sizes.json
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-branch-client-handler-global/__snapshots__/dom.bundle.debug.js
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-branch-client-handler-global/__snapshots__/dom.bundle.js
delete mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-branch-client-handler-global/__snapshots__/error-compile-dom.debug.txt
delete mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-branch-client-handler-global/__snapshots__/error-compile-dom.txt
delete mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-branch-client-handler-global/__snapshots__/error-compile-html.debug.txt
delete mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-branch-client-handler-global/__snapshots__/error-compile-html.txt
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-branch-client-handler-global/__snapshots__/html.bundle.debug.js
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-branch-client-handler-global/__snapshots__/html.bundle.js
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-branch-client-handler-global/__snapshots__/patches.debug.js
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-branch-client-handler-global/__snapshots__/patches.js
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-branch-client-handler-global/__snapshots__/render.debug.md
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-branch-client-handler-global/__snapshots__/render.md
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-branch-client-handler-global/__snapshots__/writes.debug.html
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-branch-client-handler-global/__snapshots__/writes.html
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-branch-client-handler-global/sizes.json
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-branch-deep-input/__snapshots__/dom.bundle.debug.js
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-branch-deep-input/__snapshots__/dom.bundle.js
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-branch-deep-input/__snapshots__/html.bundle.debug.js
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-branch-deep-input/__snapshots__/html.bundle.js
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-branch-deep-input/__snapshots__/patches.debug.js
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-branch-deep-input/__snapshots__/patches.js
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-branch-deep-input/__snapshots__/render.debug.md
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-branch-deep-input/__snapshots__/render.md
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-branch-deep-input/__snapshots__/writes.debug.html
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-branch-deep-input/__snapshots__/writes.html
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-branch-deep-input/sizes.json
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-branch-deep-input/template.marko
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-branch-deep-input/test.ts
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-branch-rest-input/__snapshots__/dom.bundle.debug.js
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-branch-rest-input/__snapshots__/dom.bundle.js
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-branch-rest-input/__snapshots__/html.bundle.debug.js
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-branch-rest-input/__snapshots__/html.bundle.js
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-branch-rest-input/__snapshots__/patches.debug.js
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-branch-rest-input/__snapshots__/patches.js
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-branch-rest-input/__snapshots__/render.debug.md
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-branch-rest-input/__snapshots__/render.md
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-branch-rest-input/__snapshots__/writes.debug.html
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-branch-rest-input/__snapshots__/writes.html
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-branch-rest-input/sizes.json
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-branch-rest-input/template.marko
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-branch-rest-input/test.ts
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-child-arg-structural/__snapshots__/error-compile-dom.debug.txt
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-child-arg-structural/__snapshots__/error-compile-dom.txt
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-child-arg-structural/__snapshots__/error-compile-html.debug.txt
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-child-arg-structural/__snapshots__/error-compile-html.txt
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-child-arg-structural/helper.ts
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-child-arg-structural/tags/struct/index.marko
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-child-arg-structural/template.marko
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-child-arg-structural/test.ts
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-child-args-spread/__snapshots__/error-compile-dom.debug.txt
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-child-args-spread/__snapshots__/error-compile-dom.txt
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-child-args-spread/__snapshots__/error-compile-html.debug.txt
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-child-args-spread/__snapshots__/error-compile-html.txt
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-child-args-spread/tags/badge/index.marko
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-child-args-spread/template.marko
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-child-args-spread/test.ts
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-child-args/__snapshots__/dom.bundle.debug.js
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-child-args/__snapshots__/dom.bundle.js
delete mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-child-args/__snapshots__/error-compile-dom.debug.txt
delete mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-child-args/__snapshots__/error-compile-dom.txt
delete mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-child-args/__snapshots__/error-compile-html.debug.txt
delete mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-child-args/__snapshots__/error-compile-html.txt
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-child-args/__snapshots__/html.bundle.debug.js
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-child-args/__snapshots__/html.bundle.js
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-child-args/__snapshots__/patches.debug.js
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-child-args/__snapshots__/patches.js
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-child-args/__snapshots__/render.debug.md
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-child-args/__snapshots__/render.md
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-child-args/__snapshots__/writes.debug.html
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-child-args/__snapshots__/writes.html
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-child-args/sizes.json
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-child-attr-tag-spread/__snapshots__/error-compile-dom.debug.txt
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-child-attr-tag-spread/__snapshots__/error-compile-dom.txt
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-child-attr-tag-spread/__snapshots__/error-compile-html.debug.txt
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-child-attr-tag-spread/__snapshots__/error-compile-html.txt
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-child-attr-tag-spread/helper.ts
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-child-attr-tag-spread/tags/tabs/index.marko
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-child-attr-tag-spread/template.marko
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-child-attr-tag-spread/test.ts
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-child-attr-tag-state/__snapshots__/dom.bundle.debug.js
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-child-attr-tag-state/__snapshots__/dom.bundle.js
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-child-attr-tag-state/__snapshots__/html.bundle.debug.js
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-child-attr-tag-state/__snapshots__/html.bundle.js
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-child-attr-tag-state/__snapshots__/patches.debug.js
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-child-attr-tag-state/__snapshots__/patches.js
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-child-attr-tag-state/__snapshots__/render.debug.md
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-child-attr-tag-state/__snapshots__/render.md
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-child-attr-tag-state/__snapshots__/writes.debug.html
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-child-attr-tag-state/__snapshots__/writes.html
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-child-attr-tag-state/sizes.json
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-child-attr-tag-state/tags/tabs/index.marko
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-child-attr-tag-state/template.marko
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-child-attr-tag-state/test.ts
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-child-client-tag-var/__snapshots__/dom.bundle.debug.js
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-child-client-tag-var/__snapshots__/dom.bundle.js
delete mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-child-client-tag-var/__snapshots__/error-compile-dom.debug.txt
delete mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-child-client-tag-var/__snapshots__/error-compile-dom.txt
delete mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-child-client-tag-var/__snapshots__/error-compile-html.debug.txt
delete mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-child-client-tag-var/__snapshots__/error-compile-html.txt
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-child-client-tag-var/__snapshots__/html.bundle.debug.js
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-child-client-tag-var/__snapshots__/html.bundle.js
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-child-client-tag-var/__snapshots__/patches.debug.js
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-child-client-tag-var/__snapshots__/patches.js
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-child-client-tag-var/__snapshots__/render.debug.md
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-child-client-tag-var/__snapshots__/render.md
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-child-client-tag-var/__snapshots__/writes.debug.html
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-child-client-tag-var/__snapshots__/writes.html
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-child-client-tag-var/sizes.json
delete mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-child-client-tag-var/tags/price-card.marko
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-child-content-attr-tags/__snapshots__/dom.bundle.debug.js
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-child-content-attr-tags/__snapshots__/dom.bundle.js
delete mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-child-content-attr-tags/__snapshots__/error-compile-dom.debug.txt
delete mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-child-content-attr-tags/__snapshots__/error-compile-dom.txt
delete mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-child-content-attr-tags/__snapshots__/error-compile-html.debug.txt
delete mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-child-content-attr-tags/__snapshots__/error-compile-html.txt
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-child-content-attr-tags/__snapshots__/html.bundle.debug.js
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-child-content-attr-tags/__snapshots__/html.bundle.js
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-child-content-attr-tags/__snapshots__/patches.debug.js
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-child-content-attr-tags/__snapshots__/patches.js
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-child-content-attr-tags/__snapshots__/render.debug.md
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-child-content-attr-tags/__snapshots__/render.md
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-child-content-attr-tags/__snapshots__/writes.debug.html
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-child-content-attr-tags/__snapshots__/writes.html
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-child-content-attr-tags/sizes.json
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-child-global-derived/__snapshots__/dom.bundle.debug.js
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-child-global-derived/__snapshots__/dom.bundle.js
delete mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-child-global-derived/__snapshots__/error-compile-dom.debug.txt
delete mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-child-global-derived/__snapshots__/error-compile-dom.txt
delete mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-child-global-derived/__snapshots__/error-compile-html.debug.txt
delete mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-child-global-derived/__snapshots__/error-compile-html.txt
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-child-global-derived/__snapshots__/html.bundle.debug.js
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-child-global-derived/__snapshots__/html.bundle.js
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-child-global-derived/__snapshots__/patches.debug.js
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-child-global-derived/__snapshots__/patches.js
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-child-global-derived/__snapshots__/render.debug.md
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-child-global-derived/__snapshots__/render.md
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-child-global-derived/__snapshots__/writes.debug.html
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-child-global-derived/__snapshots__/writes.html
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-child-global-derived/sizes.json
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-child-grandchild-var-assigned/__snapshots__/error-compile-dom.debug.txt
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-child-grandchild-var-assigned/__snapshots__/error-compile-dom.txt
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-child-grandchild-var-assigned/__snapshots__/error-compile-html.debug.txt
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-child-grandchild-var-assigned/__snapshots__/error-compile-html.txt
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-child-grandchild-var-assigned/tags/widget/index.marko
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-child-grandchild-var-assigned/tags/widget/tags/inner/index.marko
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-child-grandchild-var-assigned/template.marko
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-child-grandchild-var-assigned/test.ts
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-child-grandchild-var/__snapshots__/dom.bundle.debug.js
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-child-grandchild-var/__snapshots__/dom.bundle.js
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-child-grandchild-var/__snapshots__/html.bundle.debug.js
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-child-grandchild-var/__snapshots__/html.bundle.js
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-child-grandchild-var/__snapshots__/patches.debug.js
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-child-grandchild-var/__snapshots__/patches.js
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-child-grandchild-var/__snapshots__/render.debug.md
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-child-grandchild-var/__snapshots__/render.md
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-child-grandchild-var/__snapshots__/writes.debug.html
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-child-grandchild-var/__snapshots__/writes.html
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-child-grandchild-var/sizes.json
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-child-grandchild-var/tags/widget/index.marko
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-child-grandchild-var/tags/widget/tags/inner/index.marko
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-child-grandchild-var/template.marko
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-child-grandchild-var/test.ts
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-child-nested-structural-attr/__snapshots__/error-compile-dom.debug.txt
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-child-nested-structural-attr/__snapshots__/error-compile-dom.txt
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-child-nested-structural-attr/__snapshots__/error-compile-html.debug.txt
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-child-nested-structural-attr/__snapshots__/error-compile-html.txt
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-child-nested-structural-attr/helper.ts
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-child-nested-structural-attr/tags/tabs2/index.marko
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-child-nested-structural-attr/template.marko
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-child-nested-structural-attr/test.ts
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-child-nested-structural/__snapshots__/error-compile-dom.debug.txt
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-child-nested-structural/__snapshots__/error-compile-dom.txt
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-child-nested-structural/__snapshots__/error-compile-html.debug.txt
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-child-nested-structural/__snapshots__/error-compile-html.txt
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-child-nested-structural/helper.ts
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-child-nested-structural/tags/tabs/index.marko
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-child-nested-structural/template.marko
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-child-nested-structural/test.ts
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-child-state-spread-feed/__snapshots__/dom.bundle.debug.js
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-child-state-spread-feed/__snapshots__/dom.bundle.js
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-child-state-spread-feed/__snapshots__/html.bundle.debug.js
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-child-state-spread-feed/__snapshots__/html.bundle.js
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-child-state-spread-feed/__snapshots__/patches.debug.js
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-child-state-spread-feed/__snapshots__/patches.js
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-child-state-spread-feed/__snapshots__/render.debug.md
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-child-state-spread-feed/__snapshots__/render.md
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-child-state-spread-feed/__snapshots__/writes.debug.html
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-child-state-spread-feed/__snapshots__/writes.html
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-child-state-spread-feed/sizes.json
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-child-state-spread-feed/tags/tabs/index.marko
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-child-state-spread-feed/template.marko
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-child-state-spread-feed/test.ts
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-child-tag-var-assigned/__snapshots__/error-compile-dom.debug.txt
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-child-tag-var-assigned/__snapshots__/error-compile-dom.txt
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-child-tag-var-assigned/__snapshots__/error-compile-html.debug.txt
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-child-tag-var-assigned/__snapshots__/error-compile-html.txt
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-child-tag-var-assigned/tags/counter-box/index.marko
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-child-tag-var-assigned/template.marko
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-child-tag-var-assigned/test.ts
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-child-tag-var-destructured/__snapshots__/error-compile-dom.debug.txt
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-child-tag-var-destructured/__snapshots__/error-compile-dom.txt
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-child-tag-var-destructured/__snapshots__/error-compile-html.debug.txt
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-child-tag-var-destructured/__snapshots__/error-compile-html.txt
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-child-tag-var-destructured/tags/counter/index.marko
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-child-tag-var-destructured/template.marko
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-child-tag-var-destructured/test.ts
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-controllable-checked-value-multiple/__snapshots__/dom.bundle.debug.js
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-controllable-checked-value-multiple/__snapshots__/dom.bundle.js
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-controllable-checked-value-multiple/__snapshots__/html.bundle.debug.js
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-controllable-checked-value-multiple/__snapshots__/html.bundle.js
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-controllable-checked-value-multiple/__snapshots__/patches.debug.js
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-controllable-checked-value-multiple/__snapshots__/patches.js
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-controllable-checked-value-multiple/__snapshots__/render.debug.md
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-controllable-checked-value-multiple/__snapshots__/render.md
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-controllable-checked-value-multiple/__snapshots__/writes.debug.html
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-controllable-checked-value-multiple/__snapshots__/writes.html
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-controllable-checked-value-multiple/sizes.json
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-controllable-checked-value-multiple/template.marko
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-controllable-checked-value-multiple/test.ts
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-controllable-checked-value/__snapshots__/dom.bundle.debug.js
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-controllable-checked-value/__snapshots__/dom.bundle.js
delete mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-controllable-checked-value/__snapshots__/error-compile-dom.debug.txt
delete mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-controllable-checked-value/__snapshots__/error-compile-dom.txt
delete mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-controllable-checked-value/__snapshots__/error-compile-html.debug.txt
delete mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-controllable-checked-value/__snapshots__/error-compile-html.txt
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-controllable-checked-value/__snapshots__/html.bundle.debug.js
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-controllable-checked-value/__snapshots__/html.bundle.js
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-controllable-checked-value/__snapshots__/patches.debug.js
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-controllable-checked-value/__snapshots__/patches.js
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-controllable-checked-value/__snapshots__/render.debug.md
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-controllable-checked-value/__snapshots__/render.md
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-controllable-checked-value/__snapshots__/writes.debug.html
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-controllable-checked-value/__snapshots__/writes.html
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-controllable-checked-value/sizes.json
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-controllable-spread/__snapshots__/dom.bundle.debug.js
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-controllable-spread/__snapshots__/dom.bundle.js
delete mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-controllable-spread/__snapshots__/error-compile-dom.debug.txt
delete mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-controllable-spread/__snapshots__/error-compile-dom.txt
delete mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-controllable-spread/__snapshots__/error-compile-html.debug.txt
delete mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-controllable-spread/__snapshots__/error-compile-html.txt
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-controllable-spread/__snapshots__/html.bundle.debug.js
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-controllable-spread/__snapshots__/html.bundle.js
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-controllable-spread/__snapshots__/patches.debug.js
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-controllable-spread/__snapshots__/patches.js
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-controllable-spread/__snapshots__/render.debug.md
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-controllable-spread/__snapshots__/render.md
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-controllable-spread/__snapshots__/writes.debug.html
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-controllable-spread/__snapshots__/writes.html
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-controllable-spread/sizes.json
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-controllable-static-with-spread/__snapshots__/dom.bundle.debug.js
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-controllable-static-with-spread/__snapshots__/dom.bundle.js
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-controllable-static-with-spread/__snapshots__/html.bundle.debug.js
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-controllable-static-with-spread/__snapshots__/html.bundle.js
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-controllable-static-with-spread/__snapshots__/patches.debug.js
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-controllable-static-with-spread/__snapshots__/patches.js
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-controllable-static-with-spread/__snapshots__/render.debug.md
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-controllable-static-with-spread/__snapshots__/render.md
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-controllable-static-with-spread/__snapshots__/writes.debug.html
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-controllable-static-with-spread/__snapshots__/writes.html
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-controllable-static-with-spread/sizes.json
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-controllable-static-with-spread/template.marko
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-controllable-static-with-spread/test.ts
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-fill-content-in-stateful/__snapshots__/dom.bundle.debug.js
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-fill-content-in-stateful/__snapshots__/dom.bundle.js
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-fill-content-in-stateful/__snapshots__/html.bundle.debug.js
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-fill-content-in-stateful/__snapshots__/html.bundle.js
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-fill-content-in-stateful/__snapshots__/patches.debug.js
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-fill-content-in-stateful/__snapshots__/patches.js
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-fill-content-in-stateful/__snapshots__/render.debug.md
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-fill-content-in-stateful/__snapshots__/render.md
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-fill-content-in-stateful/__snapshots__/writes.debug.html
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-fill-content-in-stateful/__snapshots__/writes.html
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-fill-content-in-stateful/sizes.json
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-fill-content-in-stateful/tags/wrap/index.marko
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-fill-content-in-stateful/template.marko
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-fill-content-in-stateful/test.ts
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-global-derived-fill/__snapshots__/dom.bundle.debug.js
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-global-derived-fill/__snapshots__/dom.bundle.js
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-global-derived-fill/__snapshots__/html.bundle.debug.js
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-global-derived-fill/__snapshots__/html.bundle.js
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-global-derived-fill/__snapshots__/patches.debug.js
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-global-derived-fill/__snapshots__/patches.js
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-global-derived-fill/__snapshots__/render.debug.md
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-global-derived-fill/__snapshots__/render.md
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-global-derived-fill/__snapshots__/writes.debug.html
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-global-derived-fill/__snapshots__/writes.html
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-global-derived-fill/sizes.json
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-global-derived-fill/template.marko
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-global-derived-fill/test.ts
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-global-read-in-stateful/__snapshots__/dom.bundle.debug.js
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-global-read-in-stateful/__snapshots__/dom.bundle.js
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-global-read-in-stateful/__snapshots__/html.bundle.debug.js
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-global-read-in-stateful/__snapshots__/html.bundle.js
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-global-read-in-stateful/__snapshots__/patches.debug.js
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-global-read-in-stateful/__snapshots__/patches.js
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-global-read-in-stateful/__snapshots__/render.debug.md
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-global-read-in-stateful/__snapshots__/render.md
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-global-read-in-stateful/__snapshots__/writes.debug.html
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-global-read-in-stateful/__snapshots__/writes.html
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-global-read-in-stateful/sizes.json
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-global-read-in-stateful/template.marko
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-global-read-in-stateful/test.ts
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-lazy-tag-chunk-failed/__snapshots__/dom.bundle.debug.js
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-lazy-tag-chunk-failed/__snapshots__/dom.bundle.js
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-lazy-tag-chunk-failed/__snapshots__/html.bundle.debug.js
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-lazy-tag-chunk-failed/__snapshots__/html.bundle.js
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-lazy-tag-chunk-failed/__snapshots__/patches.debug.js
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-lazy-tag-chunk-failed/__snapshots__/patches.js
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-lazy-tag-chunk-failed/__snapshots__/render-ssr.debug.md
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-lazy-tag-chunk-failed/__snapshots__/render-ssr.md
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-lazy-tag-chunk-failed/__snapshots__/writes.debug.html
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-lazy-tag-chunk-failed/__snapshots__/writes.html
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-lazy-tag-chunk-failed/child.marko
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-lazy-tag-chunk-failed/sizes.json
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-lazy-tag-chunk-failed/template.marko
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-lazy-tag-chunk-failed/test.ts
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-lazy-tag-construct/__snapshots__/dom.bundle.debug.js
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-lazy-tag-construct/__snapshots__/dom.bundle.js
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-lazy-tag-construct/__snapshots__/html.bundle.debug.js
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-lazy-tag-construct/__snapshots__/html.bundle.js
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-lazy-tag-construct/__snapshots__/patches.debug.js
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-lazy-tag-construct/__snapshots__/patches.js
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-lazy-tag-construct/__snapshots__/render-ssr.debug.md
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-lazy-tag-construct/__snapshots__/render-ssr.md
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-lazy-tag-construct/__snapshots__/writes.debug.html
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-lazy-tag-construct/__snapshots__/writes.html
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-lazy-tag-construct/child.marko
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-lazy-tag-construct/sizes.json
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-lazy-tag-construct/template.marko
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-lazy-tag-construct/test.ts
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-lazy-tag-failed-before-patch/__snapshots__/dom.bundle.debug.js
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-lazy-tag-failed-before-patch/__snapshots__/dom.bundle.js
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-lazy-tag-failed-before-patch/__snapshots__/html.bundle.debug.js
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-lazy-tag-failed-before-patch/__snapshots__/html.bundle.js
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-lazy-tag-failed-before-patch/__snapshots__/patches.debug.js
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-lazy-tag-failed-before-patch/__snapshots__/patches.js
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-lazy-tag-failed-before-patch/__snapshots__/render-ssr.debug.md
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-lazy-tag-failed-before-patch/__snapshots__/render-ssr.md
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-lazy-tag-failed-before-patch/__snapshots__/writes.debug.html
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-lazy-tag-failed-before-patch/__snapshots__/writes.html
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-lazy-tag-failed-before-patch/child.marko
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-lazy-tag-failed-before-patch/sizes.json
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-lazy-tag-failed-before-patch/template.marko
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-lazy-tag-failed-before-patch/test.ts
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-lazy-tag-load-failed/__snapshots__/dom.bundle.debug.js
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-lazy-tag-load-failed/__snapshots__/dom.bundle.js
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-lazy-tag-load-failed/__snapshots__/html.bundle.debug.js
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-lazy-tag-load-failed/__snapshots__/html.bundle.js
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-lazy-tag-load-failed/__snapshots__/patches.debug.js
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-lazy-tag-load-failed/__snapshots__/patches.js
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-lazy-tag-load-failed/__snapshots__/render-ssr.debug.md
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-lazy-tag-load-failed/__snapshots__/render-ssr.md
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-lazy-tag-load-failed/__snapshots__/writes.debug.html
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-lazy-tag-load-failed/__snapshots__/writes.html
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-lazy-tag-load-failed/child.marko
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-lazy-tag-load-failed/sizes.json
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-lazy-tag-load-failed/template.marko
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-lazy-tag-load-failed/test.ts
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-loop-by-fill/__snapshots__/dom.bundle.debug.js
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-loop-by-fill/__snapshots__/dom.bundle.js
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-loop-by-fill/__snapshots__/html.bundle.debug.js
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-loop-by-fill/__snapshots__/html.bundle.js
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-loop-by-fill/__snapshots__/patches.debug.js
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-loop-by-fill/__snapshots__/patches.js
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-loop-by-fill/__snapshots__/render.debug.md
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-loop-by-fill/__snapshots__/render.md
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-loop-by-fill/__snapshots__/writes.debug.html
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-loop-by-fill/__snapshots__/writes.html
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-loop-by-fill/sizes.json
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-loop-by-fill/template.marko
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-loop-by-fill/test.ts
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-placeholder-server-read-in-content/__snapshots__/dom.bundle.debug.js
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-placeholder-server-read-in-content/__snapshots__/dom.bundle.js
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-placeholder-server-read-in-content/__snapshots__/html.bundle.debug.js
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-placeholder-server-read-in-content/__snapshots__/html.bundle.js
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-placeholder-server-read-in-content/__snapshots__/patches.debug.js
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-placeholder-server-read-in-content/__snapshots__/patches.js
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-placeholder-server-read-in-content/__snapshots__/render.debug.md
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-placeholder-server-read-in-content/__snapshots__/render.md
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-placeholder-server-read-in-content/__snapshots__/writes.debug.html
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-placeholder-server-read-in-content/__snapshots__/writes.html
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-placeholder-server-read-in-content/sizes.json
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-placeholder-server-read-in-content/tags/wrap/index.marko
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-placeholder-server-read-in-content/template.marko
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-placeholder-server-read-in-content/test.ts
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-placeholder-server-read/__snapshots__/dom.bundle.debug.js
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-placeholder-server-read/__snapshots__/dom.bundle.js
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-placeholder-server-read/__snapshots__/html.bundle.debug.js
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-placeholder-server-read/__snapshots__/html.bundle.js
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-placeholder-server-read/__snapshots__/patches.debug.js
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-placeholder-server-read/__snapshots__/patches.js
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-placeholder-server-read/__snapshots__/render.debug.md
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-placeholder-server-read/__snapshots__/render.md
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-placeholder-server-read/__snapshots__/writes.debug.html
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-placeholder-server-read/__snapshots__/writes.html
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-placeholder-server-read/sizes.json
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-placeholder-server-read/template.marko
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-placeholder-server-read/test.ts
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-script-global-alias/__snapshots__/dom.bundle.debug.js
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-script-global-alias/__snapshots__/dom.bundle.js
delete mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-script-global-alias/__snapshots__/error-compile-dom.debug.txt
delete mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-script-global-alias/__snapshots__/error-compile-dom.txt
delete mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-script-global-alias/__snapshots__/error-compile-html.debug.txt
delete mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-script-global-alias/__snapshots__/error-compile-html.txt
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-script-global-alias/__snapshots__/html.bundle.debug.js
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-script-global-alias/__snapshots__/html.bundle.js
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-script-global-alias/__snapshots__/patches.debug.js
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-script-global-alias/__snapshots__/patches.js
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-script-global-alias/__snapshots__/render.debug.md
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-script-global-alias/__snapshots__/render.md
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-script-global-alias/__snapshots__/writes.debug.html
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-script-global-alias/__snapshots__/writes.html
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-script-global-alias/sizes.json
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-try-abort-disconnect/__snapshots__/dom.bundle.debug.js
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-try-abort-disconnect/__snapshots__/dom.bundle.js
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-try-abort-disconnect/__snapshots__/html.bundle.debug.js
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-try-abort-disconnect/__snapshots__/html.bundle.js
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-try-abort-disconnect/__snapshots__/patches.debug.js
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-try-abort-disconnect/__snapshots__/patches.js
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-try-abort-disconnect/__snapshots__/render.debug.md
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-try-abort-disconnect/__snapshots__/render.md
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-try-abort-disconnect/__snapshots__/writes.debug.html
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-try-abort-disconnect/__snapshots__/writes.html
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-try-abort-disconnect/sizes.json
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-try-abort-disconnect/template.marko
create mode 100644 packages/runtime-tags/src/__tests__/fixtures/persisted-try-abort-disconnect/test.ts
create mode 100644 packages/runtime-tags/src/dom/patch-control-checked-value.feat.ts
diff --git a/.sizes.json b/.sizes.json
index f2e731cf2b1..dada4911fab 100644
--- a/.sizes.json
+++ b/.sizes.json
@@ -7,8 +7,8 @@
{
"name": "*",
"total": {
- "min": 28306,
- "brotli": 10486
+ "min": 28323,
+ "brotli": 10466
}
},
{
diff --git a/.sizes/dom.js b/.sizes/dom.js
index d7390c94724..17cb025e06d 100644
--- a/.sizes/dom.js
+++ b/.sizes/dom.js
@@ -1,4 +1,4 @@
-// size: 28306 (min) 10486 (brotli)
+// size: 28323 (min) 10466 (brotli)
//#region packages/runtime-tags/dist/dom.mjs
let unsafeStyleAttrReg = /[\\;]/g,
replaceUnsafeStyleAttr = (c) => (c === ";" ? "\\3B " : "\\\\"),
@@ -97,11 +97,8 @@ let unsafeStyleAttrReg = /[\\;]/g,
registeredValues = {},
patchers = {},
onPatchRecord,
- failPatch = () => {
- throw 0;
- },
patchScope = (partial, live) => {
- for (let key in partial) (patchers[key[0]] || failPatch())(live, key, partial[key]);
+ for (let key in partial) patchers[key[0]](live, key, partial[key]);
},
curRenders,
embedRenders,
@@ -979,7 +976,7 @@ function walk(startNode, walkCodes, branch) {
}
function beginPatch(renderId) {
let render = (patchRender = curRenders[renderId]);
- return ((patching = 1), patchId++, render);
+ return (render.w(), (patching = 1), patchId++, render);
}
function abortPatch() {
patchRender = patching = 0;
@@ -2268,14 +2265,14 @@ let empty = [],
insertLoaded(renderer, branch, branch.S, awaitCounter),
));
},
- loadFailed(branch, awaitCounter),
+ loadFailed(branch, awaitCounter, "_" + id),
));
},
_load_signal(() => (pending ||= load()).then((r) => ({ _: r.d }))),
);
return lazyTemplate;
}),
- _load_setup = /*@__PURE__*/ withLazy((nodeAccessor, childScopeAccessor, load) => {
+ _load_setup = /*@__PURE__*/ withLazy((nodeAccessor, childScopeAccessor, load, readyId) => {
((nodeAccessor = decodeAccessor(nodeAccessor)),
(childScopeAccessor = decodeAccessor(childScopeAccessor)));
let pending, renderer;
@@ -2289,10 +2286,10 @@ let empty = [],
(mod) => {
((renderer = _content("", ...mod._)()),
queueAsyncRender(child, (child) =>
- insertLoaded(renderer, child, owner[nodeAccessor], awaitCounter),
+ insertLoaded(renderer, child, owner[nodeAccessor], awaitCounter, readyId),
));
},
- loadFailed(child, awaitCounter),
+ loadFailed(child, awaitCounter, readyId),
));
}
};
@@ -2386,11 +2383,14 @@ function mount(input = {}, reference, position) {
}
);
}
-function insertLoaded(renderer, branch, marker, awaitCounter) {
+function insertLoaded(renderer, branch, marker, awaitCounter, readyId) {
let parent = marker.parentNode,
values = branch.X,
insert = () => {
- (insertBranchBefore(branch, parent, marker), marker.remove(), awaitCounter?.c());
+ (insertBranchBefore(branch, parent, marker),
+ marker.remove(),
+ awaitCounter?.c(),
+ readyId && queueEffect(branch, () => ready(readyId)));
},
remaining;
if (
@@ -2399,7 +2399,7 @@ function insertLoaded(renderer, branch, marker, awaitCounter) {
(branch.X = 0),
(remaining = values?.size))
) {
- let fail = loadFailed(branch, awaitCounter);
+ let fail = loadFailed(branch, awaitCounter, readyId);
for (let [promise, entry] of values)
promise.then(
(signal) => {
@@ -2416,7 +2416,7 @@ function insertLoaded(renderer, branch, marker, awaitCounter) {
);
} else (setupBranch(renderer, branch), insert());
}
-function loadFailed(scope, awaitCounter) {
+function loadFailed(scope, awaitCounter, readyId) {
return (error) => {
(awaitCounter && (awaitCounter.m ? (awaitCounter.i = 0) : awaitCounter.c()),
queueAsyncRender(scope, renderCatch, error));
diff --git a/agent-feedback/items/2026-08-12-validate-attribute-tag-bodies-generically-in-persisted-admission.md b/agent-feedback/items/2026-08-12-validate-attribute-tag-bodies-generically-in-persisted-admission.md
deleted file mode 100644
index cf6e669e387..00000000000
--- a/agent-feedback/items/2026-08-12-validate-attribute-tag-bodies-generically-in-persisted-admission.md
+++ /dev/null
@@ -1,12 +0,0 @@
----
-type: cleanup
-impact: low
-effort: low
-site: packages/runtime-tags/src/translator/util/persisted/admission.ts › assertSupportedPatch
----
-
-# Validate attribute-tag bodies generically in persisted admission
-
-`assertSupportedPatch`'s MarkoTag visitor returns early for any `@`-named tag so `<@catch>` under an admitted `` doesn't hit the generic "unsupported tag" fallback; `` then traverses its own attr tags for server reads. Attribute tags on other owners are still rejected at the owner (template children gate `attributeTags?.length`), so nothing leaks today, but a future owner that admits attr tags would silently skip validating their contents unless it re-traverses like `` does. Validate attr-tag bodies generically (the placeholder/scriptlet visitors still visit them) or assert the parent is a core `` in the early return.
-
-Check: the `tagName[0] === "@"` early return in `assertSupportedPatch` and ``'s `traverseFast` over `node.attributeTags`.
diff --git a/agent-feedback/items/2026-08-21-backport-lazy-load-failure-reporting-to-main.md b/agent-feedback/items/2026-08-21-backport-lazy-load-failure-reporting-to-main.md
new file mode 100644
index 00000000000..e1dc5971ff2
--- /dev/null
+++ b/agent-feedback/items/2026-08-21-backport-lazy-load-failure-reporting-to-main.md
@@ -0,0 +1,20 @@
+---
+type: cleanup
+impact: med
+effort: med
+site: packages/runtime-tags/src/translator/visitors/program/index.ts › isLoadEntry
+---
+
+Lazy load failure reporting (`readyFailed` in `src/dom/resume.ts`, the load
+entry's rejection arm, and the loader-script `onerror` wiring in
+`src/html/assets.ts` › `writeTriggerScript`) is gated on `isPersisted()`
+because persisted patches need it to settle. The gap it closes is general:
+on ANY page a failed lazy chunk currently leaves inert SSR content silently
+(no `@catch`, no signal). Backporting the protocol to main — un-gating the
+rejection arm and onerror wiring, and driving the ready-channel branches'
+`@catch`/await-counter machinery from `readyFailed` — would give lazy SSR a
+real failure story and dissolve the persisted-only gates here.
+
+Check: non-persisted fixture with `load: "on-click body"` +
+`reject_load: ["load.mjs"]` — the child stays inert with no catch UI and no
+console signal.
diff --git a/agent-feedback/items/2026-08-21-decide-global-skew-policy-for-persisted-patches.md b/agent-feedback/items/2026-08-21-decide-global-skew-policy-for-persisted-patches.md
deleted file mode 100644
index 71f6847f4b2..00000000000
--- a/agent-feedback/items/2026-08-21-decide-global-skew-policy-for-persisted-patches.md
+++ /dev/null
@@ -1,21 +0,0 @@
----
-type: bug
-impact: med
-effort: high
-site: packages/runtime-tags/src/html/patch.ts › PatchState
----
-
-`PatchState` sets `hasGlobals = true` ("the live page owns its serialized
-globals; a frame never re-ships them"), but servers commonly vary `$global`
-per request (locale, auth, feature flags). A patch re-renders with the new
-globals — global-derived attr/text entries update — while anything the
-client seeded from the old globals stays stale, so two related values can
-silently diverge across a patch. The admission guard
-(`src/translator/util/persisted/admission.ts`) blocks `$global` reads inside
-client-owned structure but cannot see this cross-request skew. Decide a
-policy: ship changed globals in frames, or reject/warn when a persisted
-template's rendered output reads `$global`.
-
-Check: template rendering `$global.x` into text; renderPatch with a
-different `$global.x` updates the text while a ``-seeded
-value keeps the old one.
diff --git a/agent-feedback/items/2026-08-23-pair-patches-into-still-streaming-boundaries.md b/agent-feedback/items/2026-08-23-pair-patches-into-still-streaming-boundaries.md
new file mode 100644
index 00000000000..852abe65b92
--- /dev/null
+++ b/agent-feedback/items/2026-08-23-pair-patches-into-still-streaming-boundaries.md
@@ -0,0 +1,18 @@
+---
+type: feature
+impact: med
+effort: high
+site: packages/runtime-tags/src/dom/patch-boundary.feat.ts › PatchKey.Pending
+---
+
+# Pair patches into still-streaming boundaries
+
+A patch arriving while a boundary's initial stream is still pending rejects
+into navigation (safe: the construct's marker anchor has not streamed —
+pinned by `persisted-await-patch-while-pending`). Supporting it needs the
+frame to defer against the initial render's own reorder machinery (apply
+once the anchor lands, or supersede the pending chunk outright) rather
+than pairing against a node that does not exist yet.
+
+Check: `persisted-await-patch-while-pending` drops `expect_rejection` and
+shows the second update applying once mid-stream pairing lands.
diff --git a/packages/runtime-tags/src/__tests__/fixtures/lazy-tag-conditional-child-inert/sizes.json b/packages/runtime-tags/src/__tests__/fixtures/lazy-tag-conditional-child-inert/sizes.json
index e25993f5575..f509b2b6c0b 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/lazy-tag-conditional-child-inert/sizes.json
+++ b/packages/runtime-tags/src/__tests__/fixtures/lazy-tag-conditional-child-inert/sizes.json
@@ -5,8 +5,8 @@
"brotli": 90
},
"template.marko.page.mjs": {
- "min": 1470,
- "brotli": 802
+ "min": 1524,
+ "brotli": 831
},
"child.mjs": {
"min": 162,
@@ -17,8 +17,8 @@
"brotli": 80
},
"shared": {
- "min": 7449,
- "brotli": 3339
+ "min": 7456,
+ "brotli": 3337
}
},
"html": {
diff --git a/packages/runtime-tags/src/__tests__/fixtures/lazy-tag-conditional-child-state/sizes.json b/packages/runtime-tags/src/__tests__/fixtures/lazy-tag-conditional-child-state/sizes.json
index 917117adbc0..fe3954a91fb 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/lazy-tag-conditional-child-state/sizes.json
+++ b/packages/runtime-tags/src/__tests__/fixtures/lazy-tag-conditional-child-state/sizes.json
@@ -5,8 +5,8 @@
"brotli": 69
},
"template.marko.page.mjs": {
- "min": 1474,
- "brotli": 799
+ "min": 1528,
+ "brotli": 814
},
"child.mjs": {
"min": 297,
@@ -17,8 +17,8 @@
"brotli": 81
},
"shared": {
- "min": 7471,
- "brotli": 3342
+ "min": 7478,
+ "brotli": 3340
}
},
"html": {
diff --git a/packages/runtime-tags/src/__tests__/fixtures/lazy-tag-dynamic-placeholder/sizes.json b/packages/runtime-tags/src/__tests__/fixtures/lazy-tag-dynamic-placeholder/sizes.json
index 70373edd694..2b96a1ad069 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/lazy-tag-dynamic-placeholder/sizes.json
+++ b/packages/runtime-tags/src/__tests__/fixtures/lazy-tag-dynamic-placeholder/sizes.json
@@ -5,16 +5,16 @@
"brotli": 69
},
"template.marko.page.mjs": {
- "min": 1524,
- "brotli": 820
+ "min": 1556,
+ "brotli": 848
},
"child.mjs": {
"min": 212,
"brotli": 143
},
"shared": {
- "min": 11182,
- "brotli": 4825
+ "min": 11189,
+ "brotli": 4818
}
},
"html": {
diff --git a/packages/runtime-tags/src/__tests__/fixtures/lazy-tag-dynamic-unmount-before-load/sizes.json b/packages/runtime-tags/src/__tests__/fixtures/lazy-tag-dynamic-unmount-before-load/sizes.json
index 196a2acd580..e1eb4774b4e 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/lazy-tag-dynamic-unmount-before-load/sizes.json
+++ b/packages/runtime-tags/src/__tests__/fixtures/lazy-tag-dynamic-unmount-before-load/sizes.json
@@ -5,16 +5,16 @@
"brotli": 69
},
"template.marko.page.mjs": {
- "min": 1464,
- "brotli": 800
+ "min": 1513,
+ "brotli": 824
},
"child.mjs": {
"min": 223,
"brotli": 161
},
"shared": {
- "min": 11058,
- "brotli": 4761
+ "min": 11065,
+ "brotli": 4760
}
},
"html": {
diff --git a/packages/runtime-tags/src/__tests__/fixtures/lazy-tag-dynamic/sizes.json b/packages/runtime-tags/src/__tests__/fixtures/lazy-tag-dynamic/sizes.json
index 1f15d3ea8cb..83ac4d3dba2 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/lazy-tag-dynamic/sizes.json
+++ b/packages/runtime-tags/src/__tests__/fixtures/lazy-tag-dynamic/sizes.json
@@ -5,16 +5,16 @@
"brotli": 69
},
"template.marko.page.mjs": {
- "min": 1405,
- "brotli": 764
+ "min": 1446,
+ "brotli": 783
},
"child.mjs": {
"min": 212,
"brotli": 143
},
"shared": {
- "min": 10831,
- "brotli": 4684
+ "min": 10838,
+ "brotli": 4685
}
},
"html": {
diff --git a/packages/runtime-tags/src/__tests__/fixtures/lazy-tag-event-unmount-before-load/sizes.json b/packages/runtime-tags/src/__tests__/fixtures/lazy-tag-event-unmount-before-load/sizes.json
index 74a73f6dbf5..4587869e7e5 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/lazy-tag-event-unmount-before-load/sizes.json
+++ b/packages/runtime-tags/src/__tests__/fixtures/lazy-tag-event-unmount-before-load/sizes.json
@@ -5,8 +5,8 @@
"brotli": 69
},
"template.marko.page.mjs": {
- "min": 1641,
- "brotli": 874
+ "min": 1695,
+ "brotli": 890
},
"child.mjs": {
"min": 177,
@@ -17,8 +17,8 @@
"brotli": 75
},
"shared": {
- "min": 7413,
- "brotli": 3289
+ "min": 7420,
+ "brotli": 3287
}
},
"html": {
diff --git a/packages/runtime-tags/src/__tests__/fixtures/lazy-tag-idle-unmount-before-load/sizes.json b/packages/runtime-tags/src/__tests__/fixtures/lazy-tag-idle-unmount-before-load/sizes.json
index f2d7684b55d..5ba8fe76ff2 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/lazy-tag-idle-unmount-before-load/sizes.json
+++ b/packages/runtime-tags/src/__tests__/fixtures/lazy-tag-idle-unmount-before-load/sizes.json
@@ -5,8 +5,8 @@
"brotli": 69
},
"template.marko.page.mjs": {
- "min": 1578,
- "brotli": 864
+ "min": 1632,
+ "brotli": 872
},
"child.mjs": {
"min": 177,
@@ -17,8 +17,8 @@
"brotli": 75
},
"shared": {
- "min": 7413,
- "brotli": 3289
+ "min": 7420,
+ "brotli": 3287
}
},
"html": {
diff --git a/packages/runtime-tags/src/__tests__/fixtures/lazy-tag-input-chunk-load-error/sizes.json b/packages/runtime-tags/src/__tests__/fixtures/lazy-tag-input-chunk-load-error/sizes.json
index d6022178fc9..81372ae1dae 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/lazy-tag-input-chunk-load-error/sizes.json
+++ b/packages/runtime-tags/src/__tests__/fixtures/lazy-tag-input-chunk-load-error/sizes.json
@@ -5,8 +5,8 @@
"brotli": 90
},
"template.marko.page.mjs": {
- "min": 1575,
- "brotli": 867
+ "min": 1629,
+ "brotli": 883
},
"child.mjs": {
"min": 124,
@@ -17,8 +17,8 @@
"brotli": 69
},
"shared": {
- "min": 7842,
- "brotli": 3466
+ "min": 7849,
+ "brotli": 3469
}
},
"html": {
diff --git a/packages/runtime-tags/src/__tests__/fixtures/lazy-tag-load-error/sizes.json b/packages/runtime-tags/src/__tests__/fixtures/lazy-tag-load-error/sizes.json
index 1f4ce66abf0..d667ba097c7 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/lazy-tag-load-error/sizes.json
+++ b/packages/runtime-tags/src/__tests__/fixtures/lazy-tag-load-error/sizes.json
@@ -5,8 +5,8 @@
"brotli": 69
},
"template.marko.page.mjs": {
- "min": 1575,
- "brotli": 867
+ "min": 1629,
+ "brotli": 883
},
"child.mjs": {
"min": 145,
@@ -17,8 +17,8 @@
"brotli": 75
},
"shared": {
- "min": 7853,
- "brotli": 3467
+ "min": 7860,
+ "brotli": 3470
}
},
"html": {
diff --git a/packages/runtime-tags/src/__tests__/fixtures/lazy-tag-mixed-known-and-dynamic/sizes.json b/packages/runtime-tags/src/__tests__/fixtures/lazy-tag-mixed-known-and-dynamic/sizes.json
index 80ad5d550fa..094bb908d15 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/lazy-tag-mixed-known-and-dynamic/sizes.json
+++ b/packages/runtime-tags/src/__tests__/fixtures/lazy-tag-mixed-known-and-dynamic/sizes.json
@@ -5,16 +5,16 @@
"brotli": 69
},
"template.marko.page.mjs": {
- "min": 1475,
- "brotli": 792
+ "min": 1516,
+ "brotli": 806
},
"child.mjs": {
"min": 190,
"brotli": 132
},
"shared": {
- "min": 10889,
- "brotli": 4736
+ "min": 10896,
+ "brotli": 4737
}
},
"html": {
diff --git a/packages/runtime-tags/src/__tests__/fixtures/lazy-tag-unmount-before-load/sizes.json b/packages/runtime-tags/src/__tests__/fixtures/lazy-tag-unmount-before-load/sizes.json
index d99a5649ef5..364db49320f 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/lazy-tag-unmount-before-load/sizes.json
+++ b/packages/runtime-tags/src/__tests__/fixtures/lazy-tag-unmount-before-load/sizes.json
@@ -5,8 +5,8 @@
"brotli": 69
},
"template.marko.page.mjs": {
- "min": 1735,
- "brotli": 921
+ "min": 1779,
+ "brotli": 950
},
"child.mjs": {
"min": 177,
@@ -17,8 +17,8 @@
"brotli": 75
},
"shared": {
- "min": 8958,
- "brotli": 3878
+ "min": 8965,
+ "brotli": 3885
}
},
"html": {
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-async-await-child-mount/__snapshots__/html.bundle.debug.js b/packages/runtime-tags/src/__tests__/fixtures/persisted-async-await-child-mount/__snapshots__/html.bundle.debug.js
index e6b1de3cfcf..f46dc48fdea 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-async-await-child-mount/__snapshots__/html.bundle.debug.js
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-async-await-child-mount/__snapshots__/html.bundle.debug.js
@@ -40,7 +40,7 @@ var template_default = _template_persisted("__tests__/template.marko", (input) =
start: 1
});
_scope($scope2_id, { "#childScope/0": _existing_scope($childScope) }, "__tests__/template.marko", "4:6");
- }, void 0, "__tests__/template.marko_1_#text#0/await");
+ }, 1, "__tests__/template.marko_1_#text#0/await");
$scope0_reason && _scope($scope1_id, { _: _scope_with_id($scope0_id) }, "__tests__/template.marko", "3:4");
return 0;
}
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-async-await-child-mount/__snapshots__/html.bundle.js b/packages/runtime-tags/src/__tests__/fixtures/persisted-async-await-child-mount/__snapshots__/html.bundle.js
index 0e67eac243d..fd546590ba5 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-async-await-child-mount/__snapshots__/html.bundle.js
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-async-await-child-mount/__snapshots__/html.bundle.js
@@ -38,7 +38,7 @@ var template_default = _template_persisted("a", (input) => {
start: 1
});
_scope($scope2_id, { a: _existing_scope($childScope) });
- }, void 0, "a2");
+ }, 1, "a2");
$scope0_reason && _scope($scope1_id, { _: _scope_with_id($scope0_id) });
return 0;
}
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-async-await-child-mount/sizes.json b/packages/runtime-tags/src/__tests__/fixtures/persisted-async-await-child-mount/sizes.json
index 2a29c866f4d..4a39c989fc0 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-async-await-child-mount/sizes.json
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-async-await-child-mount/sizes.json
@@ -2,8 +2,8 @@
"dom": {
"template.marko.page.mjs": {
"total": {
- "min": 10967,
- "brotli": 4634
+ "min": 10909,
+ "brotli": 4615
},
"files": {
"tags/counter.marko": 372,
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-async-await-child-pending-scriptless/__snapshots__/html.bundle.debug.js b/packages/runtime-tags/src/__tests__/fixtures/persisted-async-await-child-pending-scriptless/__snapshots__/html.bundle.debug.js
index 6c5fb0a1fc3..520295b2d1c 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-async-await-child-pending-scriptless/__snapshots__/html.bundle.debug.js
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-async-await-child-pending-scriptless/__snapshots__/html.bundle.debug.js
@@ -40,7 +40,7 @@ var template_default = _template_persisted("__tests__/template.marko", (input) =
start: 2
});
_scope($scope3_id, { "#childScope/0": _existing_scope($childScope) }, "__tests__/template.marko", "3:6");
- }, void 0, "__tests__/template.marko_1_#text#0/await");
+ }, 1, "__tests__/template.marko_1_#text#0/await");
$scope0_reason && _scope($scope1_id, { _: _scope_with_id($scope0_id) }, "__tests__/template.marko", "2:4");
return 0;
} else {
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-async-await-child-pending-scriptless/__snapshots__/html.bundle.js b/packages/runtime-tags/src/__tests__/fixtures/persisted-async-await-child-pending-scriptless/__snapshots__/html.bundle.js
index 7e6d6f15bf9..794a07a05f6 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-async-await-child-pending-scriptless/__snapshots__/html.bundle.js
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-async-await-child-pending-scriptless/__snapshots__/html.bundle.js
@@ -38,7 +38,7 @@ var template_default = _template_persisted("a", (input) => {
start: 2
});
_scope($scope3_id, { a: _existing_scope($childScope) });
- }, void 0, "a2");
+ }, 1, "a2");
$scope0_reason && _scope($scope1_id, { _: _scope_with_id($scope0_id) });
return 0;
} else {
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-async-await-child-pending-scriptless/sizes.json b/packages/runtime-tags/src/__tests__/fixtures/persisted-async-await-child-pending-scriptless/sizes.json
index ee77560cc0d..c06d6836911 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-async-await-child-pending-scriptless/sizes.json
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-async-await-child-pending-scriptless/sizes.json
@@ -1,8 +1,8 @@
{
"dom": {
"template.marko.page.mjs": {
- "min": 10794,
- "brotli": 4576
+ "min": 10736,
+ "brotli": 4554
}
},
"html": {
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-async-await-child-scriptless/__snapshots__/html.bundle.debug.js b/packages/runtime-tags/src/__tests__/fixtures/persisted-async-await-child-scriptless/__snapshots__/html.bundle.debug.js
index a99f69aaf14..67905964be1 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-async-await-child-scriptless/__snapshots__/html.bundle.debug.js
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-async-await-child-scriptless/__snapshots__/html.bundle.debug.js
@@ -33,7 +33,7 @@ var template_default = _template_persisted("__tests__/template.marko", (input) =
_patch_child($scope3_id, "#childScope/0", $childScope);
pill_default({ text: value });
_scope($scope3_id, { "#childScope/0": _existing_scope($childScope) }, "__tests__/template.marko", "3:6");
- }, void 0, "__tests__/template.marko_1_#text#0/await");
+ }, 1, "__tests__/template.marko_1_#text#0/await");
$scope0_reason && _scope($scope1_id, { _: _scope_with_id($scope0_id) }, "__tests__/template.marko", "2:4");
return 0;
} else {
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-async-await-child-scriptless/__snapshots__/html.bundle.js b/packages/runtime-tags/src/__tests__/fixtures/persisted-async-await-child-scriptless/__snapshots__/html.bundle.js
index 84c8baac5a8..e0daec955a8 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-async-await-child-scriptless/__snapshots__/html.bundle.js
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-async-await-child-scriptless/__snapshots__/html.bundle.js
@@ -30,7 +30,7 @@ var template_default = _template_persisted("a", (input) => {
_patch_child($scope3_id, "a", $childScope);
pill_default({ text: value });
_scope($scope3_id, { a: _existing_scope($childScope) });
- }, void 0, "a2");
+ }, 1, "a2");
$scope0_reason && _scope($scope1_id, { _: _scope_with_id($scope0_id) });
return 0;
} else {
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-async-await-child-scriptless/sizes.json b/packages/runtime-tags/src/__tests__/fixtures/persisted-async-await-child-scriptless/sizes.json
index b64d3d6cca5..f058869bf03 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-async-await-child-scriptless/sizes.json
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-async-await-child-scriptless/sizes.json
@@ -1,8 +1,8 @@
{
"dom": {
"template.marko.page.mjs": {
- "min": 9175,
- "brotli": 3964
+ "min": 9138,
+ "brotli": 3950
}
},
"html": {
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-async-await-in-branch-scriptless/__snapshots__/html.bundle.debug.js b/packages/runtime-tags/src/__tests__/fixtures/persisted-async-await-in-branch-scriptless/__snapshots__/html.bundle.debug.js
index d18e986d125..f77262f32b4 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-async-await-in-branch-scriptless/__snapshots__/html.bundle.debug.js
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-async-await-in-branch-scriptless/__snapshots__/html.bundle.debug.js
@@ -19,7 +19,7 @@ var template_default = _template_persisted("__tests__/template.marko", (input) =
const $scope3_id = _scope_id();
_html(`${_patch_text($scope3_id, "#text/0", value, void 0, $scope0_owned, 2)}`);
_scope($scope3_id, {}, "__tests__/template.marko", "3:6");
- }, void 0, "__tests__/template.marko_1_#text#0/await");
+ }, 1, "__tests__/template.marko_1_#text#0/await");
$scope0_reason && _scope($scope1_id, { _: _scope_with_id($scope0_id) }, "__tests__/template.marko", "2:4");
return 0;
} else {
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-async-await-in-branch-scriptless/__snapshots__/html.bundle.js b/packages/runtime-tags/src/__tests__/fixtures/persisted-async-await-in-branch-scriptless/__snapshots__/html.bundle.js
index 48328cc9a4d..ceba9eb9fce 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-async-await-in-branch-scriptless/__snapshots__/html.bundle.js
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-async-await-in-branch-scriptless/__snapshots__/html.bundle.js
@@ -17,7 +17,7 @@ var template_default = _template_persisted("a", (input) => {
const $scope3_id = _scope_id();
_html(`${_patch_text($scope3_id, "a", value, void 0, $scope0_owned, 2)}`);
_scope($scope3_id, {});
- }, void 0, "a2");
+ }, 1, "a2");
$scope0_reason && _scope($scope1_id, { _: _scope_with_id($scope0_id) });
return 0;
} else {
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-async-await-in-branch-scriptless/sizes.json b/packages/runtime-tags/src/__tests__/fixtures/persisted-async-await-in-branch-scriptless/sizes.json
index 4abec561c9b..2e4730a924e 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-async-await-in-branch-scriptless/sizes.json
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-async-await-in-branch-scriptless/sizes.json
@@ -1,8 +1,8 @@
{
"dom": {
"template.marko.page.mjs": {
- "min": 9175,
- "brotli": 3964
+ "min": 9138,
+ "brotli": 3950
}
},
"html": {
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-async-await-in-branch/__snapshots__/html.bundle.debug.js b/packages/runtime-tags/src/__tests__/fixtures/persisted-async-await-in-branch/__snapshots__/html.bundle.debug.js
index bbcd445f8b0..bfb173fcb20 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-async-await-in-branch/__snapshots__/html.bundle.debug.js
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-async-await-in-branch/__snapshots__/html.bundle.debug.js
@@ -20,7 +20,7 @@ var template_default = _template_persisted("__tests__/template.marko", (input) =
const $scope3_id = _scope_id();
_html(`${_patch_text($scope3_id, "#text/0", value, void 0, $scope0_owned, 3)}`);
_scope($scope3_id, {}, "__tests__/template.marko", "5:6");
- }, void 0, "__tests__/template.marko_1_#text#0/await");
+ }, 1, "__tests__/template.marko_1_#text#0/await");
$scope0_reason && _scope($scope1_id, { _: _scope_with_id($scope0_id) }, "__tests__/template.marko", "4:4");
return 0;
} else {
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-async-await-in-branch/__snapshots__/html.bundle.js b/packages/runtime-tags/src/__tests__/fixtures/persisted-async-await-in-branch/__snapshots__/html.bundle.js
index 2af48b2a03b..7d4486eab02 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-async-await-in-branch/__snapshots__/html.bundle.js
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-async-await-in-branch/__snapshots__/html.bundle.js
@@ -18,7 +18,7 @@ var template_default = _template_persisted("a", (input) => {
const $scope3_id = _scope_id();
_html(`${_patch_text($scope3_id, "a", value, void 0, $scope0_owned, 3)}`);
_scope($scope3_id, {});
- }, void 0, "a2");
+ }, 1, "a2");
$scope0_reason && _scope($scope1_id, { _: _scope_with_id($scope0_id) });
return 0;
} else {
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-async-await-in-branch/__snapshots__/render.debug.md b/packages/runtime-tags/src/__tests__/fixtures/persisted-async-await-in-branch/__snapshots__/render.debug.md
index 33d03e7955a..c2c7b3e3164 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-async-await-in-branch/__snapshots__/render.debug.md
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-async-await-in-branch/__snapshots__/render.debug.md
@@ -95,7 +95,8 @@ UPDATE: main > button::text@6 "1" => "2"
## Change
```
UPDATE: main > h1::text "Store" => "Store!"
-UPDATE: main > em::text "hi" => "slow"
+REMOVE: main > em
+INSERT: main > h1 + em
```
# Update `{"title":"Store!","show":false,"promise":{}}`
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-async-await-in-branch/__snapshots__/render.md b/packages/runtime-tags/src/__tests__/fixtures/persisted-async-await-in-branch/__snapshots__/render.md
index 33d03e7955a..c2c7b3e3164 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-async-await-in-branch/__snapshots__/render.md
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-async-await-in-branch/__snapshots__/render.md
@@ -95,7 +95,8 @@ UPDATE: main > button::text@6 "1" => "2"
## Change
```
UPDATE: main > h1::text "Store" => "Store!"
-UPDATE: main > em::text "hi" => "slow"
+REMOVE: main > em
+INSERT: main > h1 + em
```
# Update `{"title":"Store!","show":false,"promise":{}}`
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-async-await-in-branch/sizes.json b/packages/runtime-tags/src/__tests__/fixtures/persisted-async-await-in-branch/sizes.json
index 0c0c09cf9b9..84545d96a7f 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-async-await-in-branch/sizes.json
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-async-await-in-branch/sizes.json
@@ -1,8 +1,8 @@
{
"dom": {
"template.marko.page.mjs": {
- "min": 10327,
- "brotli": 4417
+ "min": 10290,
+ "brotli": 4398
}
},
"html": {
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-async-await-in-loop/__snapshots__/html.bundle.debug.js b/packages/runtime-tags/src/__tests__/fixtures/persisted-async-await-in-loop/__snapshots__/html.bundle.debug.js
index 9fb4d095cf6..1e90ab8ae7f 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-async-await-in-loop/__snapshots__/html.bundle.debug.js
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-async-await-in-loop/__snapshots__/html.bundle.debug.js
@@ -17,7 +17,7 @@ var template_default = _template_persisted("__tests__/template.marko", (input) =
const $scope2_id = _scope_id();
_html(`${_patch_text($scope2_id, "#text/0", value, void 0, $scope0_owned, 0)}`);
_scope($scope2_id, {}, "__tests__/template.marko", "3:6");
- }, void 0, "__tests__/template.marko_1_#text#0/await");
+ }, 1, "__tests__/template.marko_1_#text#0/await");
$scope0_reason && _scope($scope1_id, {}, "__tests__/template.marko", "2:4");
}, "id", $scope0_id, "#text/0", 1, $sg__input_items, $sg__input_items, void 0, void 0, "__tests__/template.marko_1*shell");
_html(`${_el_resume($scope0_id, "#button/1")}`);
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-async-await-in-loop/__snapshots__/html.bundle.js b/packages/runtime-tags/src/__tests__/fixtures/persisted-async-await-in-loop/__snapshots__/html.bundle.js
index 6a2f2475fe9..4fc799de9af 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-async-await-in-loop/__snapshots__/html.bundle.js
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-async-await-in-loop/__snapshots__/html.bundle.js
@@ -15,7 +15,7 @@ var template_default = _template_persisted("a", (input) => {
const $scope2_id = _scope_id();
_html(`${_patch_text($scope2_id, "a", value, void 0, $scope0_owned, 0)}`);
_scope($scope2_id, {});
- }, void 0, "a2");
+ }, 1, "a2");
$scope0_reason && _scope($scope1_id, {});
}, "id", $scope0_id, "a", 1, $sg__input_items, $sg__input_items, void 0, void 0, "a1");
_html(`${_el_resume($scope0_id, "b")}`);
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-async-await-in-loop/sizes.json b/packages/runtime-tags/src/__tests__/fixtures/persisted-async-await-in-loop/sizes.json
index f7ccb56e89e..16e1de1fdc0 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-async-await-in-loop/sizes.json
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-async-await-in-loop/sizes.json
@@ -1,8 +1,8 @@
{
"dom": {
"template.marko.page.mjs": {
- "min": 11265,
- "brotli": 4875
+ "min": 11228,
+ "brotli": 4896
}
},
"html": {
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-async-await-inexpressible-scriptless/__snapshots__/html.bundle.debug.js b/packages/runtime-tags/src/__tests__/fixtures/persisted-async-await-inexpressible-scriptless/__snapshots__/html.bundle.debug.js
index 474aa0216f7..b152783a5e1 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-async-await-inexpressible-scriptless/__snapshots__/html.bundle.debug.js
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-async-await-inexpressible-scriptless/__snapshots__/html.bundle.debug.js
@@ -34,7 +34,7 @@ var template_default = _template_persisted("__tests__/template.marko", (input) =
"#childScope/0": _existing_scope($childScope)
}, "__tests__/template.marko", "3:6"));
_resume_branch($scope2_id);
- });
+ }, 1);
$scope0_reason && _scope($scope1_id, { _: _scope_with_id($scope0_id) }, "__tests__/template.marko", "2:4");
return 0;
}
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-async-await-inexpressible-scriptless/__snapshots__/html.bundle.js b/packages/runtime-tags/src/__tests__/fixtures/persisted-async-await-inexpressible-scriptless/__snapshots__/html.bundle.js
index cd8d8b967d8..ddda0bada68 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-async-await-inexpressible-scriptless/__snapshots__/html.bundle.js
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-async-await-inexpressible-scriptless/__snapshots__/html.bundle.js
@@ -29,7 +29,7 @@ var template_default = _template_persisted("a", (input) => {
a: _existing_scope($childScope)
}));
_resume_branch($scope2_id);
- });
+ }, 1);
$scope0_reason && _scope($scope1_id, { _: _scope_with_id($scope0_id) });
return 0;
}
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-async-await-inexpressible-scriptless/sizes.json b/packages/runtime-tags/src/__tests__/fixtures/persisted-async-await-inexpressible-scriptless/sizes.json
index 9d63f700b36..02934495bc4 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-async-await-inexpressible-scriptless/sizes.json
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-async-await-inexpressible-scriptless/sizes.json
@@ -1,8 +1,8 @@
{
"dom": {
"template.marko.page.mjs": {
- "min": 9175,
- "brotli": 3964
+ "min": 9138,
+ "brotli": 3950
}
},
"html": {
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-async-await-lazy-client/__snapshots__/html.bundle.debug.js b/packages/runtime-tags/src/__tests__/fixtures/persisted-async-await-lazy-client/__snapshots__/html.bundle.debug.js
index a71812fab35..83c5d32c96b 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-async-await-lazy-client/__snapshots__/html.bundle.debug.js
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-async-await-lazy-client/__snapshots__/html.bundle.debug.js
@@ -21,7 +21,7 @@ var template_default = _template_persisted("__tests__/template.marko", (input) =
const $scope3_id = _scope_id();
_html(`${_text_resume($scope3_id, "#text/0", value)}`);
_scope($scope3_id, {}, "__tests__/template.marko", "8:6");
- }, void 0, 0, 1);
+ }, 1, 0, 1);
_subscribe($n__closures, _scope($scope1_id, { _: _scope_with_id($scope0_id) }, "__tests__/template.marko", "6:4"));
_resume_branch($scope1_id);
}, $scope0_id), { placeholder: attrTag({ content: _content_record("__tests__/template.marko_2*content", $scope0_id) }) }, 1);
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-async-await-lazy-client/__snapshots__/html.bundle.js b/packages/runtime-tags/src/__tests__/fixtures/persisted-async-await-lazy-client/__snapshots__/html.bundle.js
index b338cdb6aaa..a594e32920a 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-async-await-lazy-client/__snapshots__/html.bundle.js
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-async-await-lazy-client/__snapshots__/html.bundle.js
@@ -19,7 +19,7 @@ var template_default = _template_persisted("a", (input) => {
const $scope3_id = _scope_id();
_html(`${_text_resume($scope3_id, "a", value)}`);
_scope($scope3_id, {});
- }, void 0, 0, 1);
+ }, 1, 0, 1);
_subscribe($n__closures, _scope($scope1_id, { _: _scope_with_id($scope0_id) }));
_resume_branch($scope1_id);
}, $scope0_id), { placeholder: attrTag({ content: _content_record("a1", $scope0_id) }) }, 1);
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-async-await-lazy-client/sizes.json b/packages/runtime-tags/src/__tests__/fixtures/persisted-async-await-lazy-client/sizes.json
index 29c3b5dadc7..08d460fea25 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-async-await-lazy-client/sizes.json
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-async-await-lazy-client/sizes.json
@@ -1,8 +1,8 @@
{
"dom": {
"template.marko.page.mjs": {
- "min": 12077,
- "brotli": 5087
+ "min": 12040,
+ "brotli": 5076
}
},
"html": {
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-async-await-lazy/__snapshots__/html.bundle.debug.js b/packages/runtime-tags/src/__tests__/fixtures/persisted-async-await-lazy/__snapshots__/html.bundle.debug.js
index e650c0e5266..6405ee01ec0 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-async-await-lazy/__snapshots__/html.bundle.debug.js
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-async-await-lazy/__snapshots__/html.bundle.debug.js
@@ -24,7 +24,7 @@ var template_default = _template_persisted("__tests__/template.marko", (input) =
const $scope3_id = _scope_id();
_html(`${_patch_text($scope3_id, "#text/0", related, void 0, $scope0_owned, 0)}`);
_scope($scope3_id, {}, "__tests__/template.marko", "9:8");
- }, void 0, "__tests__/template.marko_1_#text#0/await", 1);
+ }, 1, "__tests__/template.marko_1_#text#0/await", 1);
$scope0_reason && _subscribe(_source_if($scope0_reason, 6) && $input_slow__closures, _subscribe(_source_if($scope0_reason, 5) && $input_related__closures, _scope($scope1_id, { _: _scope_with_id($scope0_id) }, "__tests__/template.marko", "7:6")));
_resume_branch($scope1_id);
}, $scope0_id), { placeholder: attrTag({ content: _content_record("__tests__/template.marko_2*content", $scope0_id) }) }, 1);
@@ -33,7 +33,7 @@ var template_default = _template_persisted("__tests__/template.marko", (input) =
const $scope4_id = _scope_id();
_html(`${_patch_text($scope4_id, "#text/0", note, void 0, $scope0_owned, 2)}`);
_scope($scope4_id, {}, "__tests__/template.marko", "15:6");
- }, void 0, "__tests__/template.marko_0_#text#2/await", 1);
+ }, 1, "__tests__/template.marko_0_#text#2/await", 1);
_html(`${_el_resume($scope0_id, "#button/3")}`);
_script($scope0_id, "__tests__/template.marko_0");
$scope0_reason && _scope($scope0_id, {
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-async-await-lazy/__snapshots__/html.bundle.js b/packages/runtime-tags/src/__tests__/fixtures/persisted-async-await-lazy/__snapshots__/html.bundle.js
index 3f907bf2514..015f8a7df44 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-async-await-lazy/__snapshots__/html.bundle.js
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-async-await-lazy/__snapshots__/html.bundle.js
@@ -22,7 +22,7 @@ var template_default = _template_persisted("a", (input) => {
const $scope3_id = _scope_id();
_html(`${_patch_text($scope3_id, "a", related, void 0, $scope0_owned, 0)}`);
_scope($scope3_id, {});
- }, void 0, "a3", 1);
+ }, 1, "a3", 1);
$scope0_reason && _subscribe(_source_if($scope0_reason, 6) && $input_slow__closures, _subscribe(_source_if($scope0_reason, 5) && $input_related__closures, _scope($scope1_id, { _: _scope_with_id($scope0_id) })));
_resume_branch($scope1_id);
}, $scope0_id), { placeholder: attrTag({ content: _content_record("a2", $scope0_id) }) }, 1);
@@ -31,7 +31,7 @@ var template_default = _template_persisted("a", (input) => {
const $scope4_id = _scope_id();
_html(`${_patch_text($scope4_id, "a", note, void 0, $scope0_owned, 2)}`);
_scope($scope4_id, {});
- }, void 0, "a5", 1);
+ }, 1, "a5", 1);
_html(`${_el_resume($scope0_id, "d")}`);
_script($scope0_id, "a6");
$scope0_reason && _scope($scope0_id, {
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-async-await-lazy/sizes.json b/packages/runtime-tags/src/__tests__/fixtures/persisted-async-await-lazy/sizes.json
index e676f46b64a..b52185a327c 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-async-await-lazy/sizes.json
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-async-await-lazy/sizes.json
@@ -1,8 +1,8 @@
{
"dom": {
"template.marko.page.mjs": {
- "min": 10069,
- "brotli": 4318
+ "min": 10032,
+ "brotli": 4312
}
},
"html": {
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-async-await-nested-in-branch/__snapshots__/html.bundle.debug.js b/packages/runtime-tags/src/__tests__/fixtures/persisted-async-await-nested-in-branch/__snapshots__/html.bundle.debug.js
index 3f35a785a30..cde98de93fa 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-async-await-nested-in-branch/__snapshots__/html.bundle.debug.js
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-async-await-nested-in-branch/__snapshots__/html.bundle.debug.js
@@ -25,14 +25,14 @@ var template_default = _template_persisted("__tests__/template.marko", (input) =
_html(`${_patch_text($scope3_id, "#text/0", outer, void 0, $scope0_owned, 4)}:${_patch_text($scope3_id, "#text/1", inner, 2, $scope0_owned, 5)}`);
_subscribe($scope0_reason && $await_content__outer__closures, _scope($scope3_id, { _: _scope_with_id($scope2_id) }, "__tests__/template.marko", "4:8"));
_resume_branch($scope3_id);
- }, void 0, "__tests__/template.marko_2_#text#0/await");
+ }, 1, "__tests__/template.marko_2_#text#0/await");
$scope0_reason && _subscribe(_source_if($scope0_reason, 5) && $input_inner__closures, _scope($scope2_id, {
outer,
_: _scope_with_id($scope1_id),
"ClosureScopes:outer": $await_content__outer__closures
}, "__tests__/template.marko", "3:6", { outer: "3:12" }));
_resume_branch($scope2_id);
- }, _source_guard($scope0_reason, 2), "__tests__/template.marko_1_#text#0/await");
+ }, 1, "__tests__/template.marko_1_#text#0/await");
$scope0_reason && _scope($scope1_id, { _: _scope_with_id($scope0_id) }, "__tests__/template.marko", "2:4");
return 0;
}
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-async-await-nested-in-branch/__snapshots__/html.bundle.js b/packages/runtime-tags/src/__tests__/fixtures/persisted-async-await-nested-in-branch/__snapshots__/html.bundle.js
index 9e70f3793a8..3521abb5a3d 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-async-await-nested-in-branch/__snapshots__/html.bundle.js
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-async-await-nested-in-branch/__snapshots__/html.bundle.js
@@ -23,14 +23,14 @@ var template_default = _template_persisted("a", (input) => {
_html(`${_patch_text($scope3_id, "a", outer, void 0, $scope0_owned, 4)}:${_patch_text($scope3_id, "b", inner, 2, $scope0_owned, 5)}`);
_subscribe($scope0_reason && $await_content__outer__closures, _scope($scope3_id, { _: _scope_with_id($scope2_id) }));
_resume_branch($scope3_id);
- }, void 0, "a1");
+ }, 1, "a1");
$scope0_reason && _subscribe(_source_if($scope0_reason, 5) && $input_inner__closures, _scope($scope2_id, {
c: outer,
_: _scope_with_id($scope1_id),
d: $await_content__outer__closures
}));
_resume_branch($scope2_id);
- }, _source_guard($scope0_reason, 2), "a4");
+ }, 1, "a4");
$scope0_reason && _scope($scope1_id, { _: _scope_with_id($scope0_id) });
return 0;
}
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-async-await-nested-in-branch/sizes.json b/packages/runtime-tags/src/__tests__/fixtures/persisted-async-await-nested-in-branch/sizes.json
index 0a4a1cfa73c..45298ffb643 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-async-await-nested-in-branch/sizes.json
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-async-await-nested-in-branch/sizes.json
@@ -1,8 +1,8 @@
{
"dom": {
"template.marko.page.mjs": {
- "min": 9875,
- "brotli": 4221
+ "min": 9838,
+ "brotli": 4216
}
},
"html": {
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-async-await-pending-twice/__snapshots__/dom.bundle.debug.js b/packages/runtime-tags/src/__tests__/fixtures/persisted-async-await-pending-twice/__snapshots__/dom.bundle.debug.js
new file mode 100644
index 00000000000..b8073a9417c
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-async-await-pending-twice/__snapshots__/dom.bundle.debug.js
@@ -0,0 +1,15 @@
+// template.marko
+const $template = "
";
+const $walks = "E l%l";
+const $await_content__value = ($scope, value) => _text($scope["#text/0"], value);
+const $await_content__$params = ($scope, $params2) => $await_content__value($scope, $params2[0]);
+const $input_title = ($scope, input_title) => _text($scope["#text/0"], input_title);
+const $await_content = /*@__PURE__*/ _await_content("#text/1", " ", "D ");
+const $await_promise = /*@__PURE__*/ _await_promise("#text/1", $await_content__$params);
+const $setup = $await_content;
+const $input_promise = $await_promise;
+const $input = ($scope, input) => {
+ $input_title($scope, input.title);
+ $input_promise($scope, input.promise);
+};
+var template_default = /*@__PURE__*/ _template("__tests__/template.marko", $template, $walks, $setup, $input);
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-async-await-pending-twice/__snapshots__/html.bundle.debug.js b/packages/runtime-tags/src/__tests__/fixtures/persisted-async-await-pending-twice/__snapshots__/html.bundle.debug.js
new file mode 100644
index 00000000000..7b1bfd44d24
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-async-await-pending-twice/__snapshots__/html.bundle.debug.js
@@ -0,0 +1,20 @@
+// template.marko
+const $template = "
";
+const $walks = "E l%l";
+_shells({
+ "__tests__/template.marko_1*content": "__tests__/template.marko_1*content;D ; ",
+ "__tests__/template.marko_0_#text#1/await": "__tests__/template.marko_0_#text#1/await;D ; ",
+ "__tests__/template.marko": "__tests__/template.marko;E l%;
"
+});
+var template_default = _template_persisted("__tests__/template.marko", (input) => {
+ const $scope0_owned = _persisted_ownership(), $scope0_reason = _persisted_reason();
+ const $scope0_id = _scope_id();
+ _html(`${_patch_text($scope0_id, "#text/0", input.title, void 0, $scope0_owned, 0)}
`);
+ _await($scope0_id, "#text/1", input.promise, (value) => {
+ const $scope1_id = _scope_id();
+ _html(`${_patch_text($scope1_id, "#text/0", value, void 0, $scope0_owned, 1)}`);
+ _scope($scope1_id, {}, "__tests__/template.marko", "3:4");
+ }, 1, "__tests__/template.marko_0_#text#1/await", 1);
+ _html("");
+ $scope0_reason && _scope($scope0_id, {}, "__tests__/template.marko", 0);
+}, 1, 0);
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-async-await-pending-twice/__snapshots__/html.bundle.js b/packages/runtime-tags/src/__tests__/fixtures/persisted-async-await-pending-twice/__snapshots__/html.bundle.js
new file mode 100644
index 00000000000..6976482644b
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-async-await-pending-twice/__snapshots__/html.bundle.js
@@ -0,0 +1,18 @@
+// template.marko
+_shells({
+ a0: "a0;D ; ",
+ a1: "a1;D ; ",
+ a: "a;E l%;
"
+});
+var template_default = _template_persisted("a", (input) => {
+ const $scope0_owned = _persisted_ownership(), $scope0_reason = _persisted_reason();
+ const $scope0_id = _scope_id();
+ _html(`${_patch_text($scope0_id, "a", input.title, void 0, $scope0_owned, 0)}
`);
+ _await($scope0_id, "b", input.promise, (value) => {
+ const $scope1_id = _scope_id();
+ _html(`${_patch_text($scope1_id, "a", value, void 0, $scope0_owned, 1)}`);
+ _scope($scope1_id, {});
+ }, 1, "a1", 1);
+ _html("");
+ $scope0_reason && _scope($scope0_id, {});
+}, 1, 0);
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-async-await-pending-twice/__snapshots__/patches.debug.js b/packages/runtime-tags/src/__tests__/fixtures/persisted-async-await-pending-twice/__snapshots__/patches.debug.js
new file mode 100644
index 00000000000..9fdebf649c8
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-async-await-pending-twice/__snapshots__/patches.debug.js
@@ -0,0 +1,21 @@
+// PATCH
+{
+ "PatchText:#text/0": "Store!",
+ "PatchPending:#text/1": 1
+}
+{
+ "PatchChild:BranchScopes:#text/1": {
+ "PatchText:#text/0": "slow"
+ }
+}
+
+// PATCH
+{
+ "PatchText:#text/0": "Store!!",
+ "PatchPending:#text/1": 1
+}
+{
+ "PatchChild:BranchScopes:#text/1": {
+ "PatchText:#text/0": "slower"
+ }
+}
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-async-await-pending-twice/__snapshots__/patches.js b/packages/runtime-tags/src/__tests__/fixtures/persisted-async-await-pending-twice/__snapshots__/patches.js
new file mode 100644
index 00000000000..a312b852f1c
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-async-await-pending-twice/__snapshots__/patches.js
@@ -0,0 +1,21 @@
+// PATCH
+{
+ ta: "Store!",
+ pb: 1
+}
+{
+ cAb: {
+ ta: "slow"
+ }
+}
+
+// PATCH
+{
+ ta: "Store!!",
+ pb: 1
+}
+{
+ cAb: {
+ ta: "slower"
+ }
+}
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-async-await-pending-twice/__snapshots__/render.debug.md b/packages/runtime-tags/src/__tests__/fixtures/persisted-async-await-pending-twice/__snapshots__/render.debug.md
new file mode 100644
index 00000000000..ec9b5f45c1f
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-async-await-pending-twice/__snapshots__/render.debug.md
@@ -0,0 +1,47 @@
+# Render `{"title":"Store","promise":{}}`
+```html
+
+
+ Store
+
+
+ hi
+
+
+```
+
+# Update `{"title":"Store!","promise":{}}`
+```html
+
+
+ Store!
+
+
+ slow
+
+
+```
+## Change
+```
+UPDATE: main > h1::text "Store" => "Store!"
+REMOVE: main > em
+INSERT: main > h1 + em
+```
+
+# Update `{"title":"Store!!","promise":{}}`
+```html
+
+
+ Store!!
+
+
+ slower
+
+
+```
+## Change
+```
+UPDATE: main > h1::text "Store!" => "Store!!"
+REMOVE: main > em
+INSERT: main > h1 + em
+```
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-async-await-pending-twice/__snapshots__/render.md b/packages/runtime-tags/src/__tests__/fixtures/persisted-async-await-pending-twice/__snapshots__/render.md
new file mode 100644
index 00000000000..ec9b5f45c1f
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-async-await-pending-twice/__snapshots__/render.md
@@ -0,0 +1,47 @@
+# Render `{"title":"Store","promise":{}}`
+```html
+
+
+ Store
+
+
+ hi
+
+
+```
+
+# Update `{"title":"Store!","promise":{}}`
+```html
+
+
+ Store!
+
+
+ slow
+
+
+```
+## Change
+```
+UPDATE: main > h1::text "Store" => "Store!"
+REMOVE: main > em
+INSERT: main > h1 + em
+```
+
+# Update `{"title":"Store!!","promise":{}}`
+```html
+
+
+ Store!!
+
+
+ slower
+
+
+```
+## Change
+```
+UPDATE: main > h1::text "Store!" => "Store!!"
+REMOVE: main > em
+INSERT: main > h1 + em
+```
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-async-await-pending-twice/__snapshots__/writes.debug.html b/packages/runtime-tags/src/__tests__/fixtures/persisted-async-await-pending-twice/__snapshots__/writes.debug.html
new file mode 100644
index 00000000000..01e1260015c
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-async-await-pending-twice/__snapshots__/writes.debug.html
@@ -0,0 +1,8 @@
+
+ Store
+ hi
+
+
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-async-await-pending-twice/__snapshots__/writes.html b/packages/runtime-tags/src/__tests__/fixtures/persisted-async-await-pending-twice/__snapshots__/writes.html
new file mode 100644
index 00000000000..d2718ff77ec
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-async-await-pending-twice/__snapshots__/writes.html
@@ -0,0 +1,7 @@
+
+ Store
hi
+
+
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-async-await-pending-twice/sizes.json b/packages/runtime-tags/src/__tests__/fixtures/persisted-async-await-pending-twice/sizes.json
new file mode 100644
index 00000000000..b43aeb1dff4
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-async-await-pending-twice/sizes.json
@@ -0,0 +1,16 @@
+{
+ "dom": {
+ "template.marko.page.mjs": {
+ "min": 8705,
+ "brotli": 3767
+ }
+ },
+ "html": {
+ "min": 369,
+ "brotli": 250
+ },
+ "patch": {
+ "min": 77,
+ "brotli": 72
+ }
+}
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-async-await-pending-twice/template.marko b/packages/runtime-tags/src/__tests__/fixtures/persisted-async-await-pending-twice/template.marko
new file mode 100644
index 00000000000..e3770ad6076
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-async-await-pending-twice/template.marko
@@ -0,0 +1,6 @@
+
+ ${input.title}
+
+ ${value}
+
+
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-async-await-pending-twice/test.ts b/packages/runtime-tags/src/__tests__/fixtures/persisted-async-await-pending-twice/test.ts
new file mode 100644
index 00000000000..fa8433d1435
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-async-await-pending-twice/test.ts
@@ -0,0 +1,21 @@
+import type { TestConfig } from "../../main.test";
+
+const slow = (value: string) => ({
+ // then() starts the timer so the delay begins at render, not at
+ // getSteps (which runs before the first document render).
+ then: (onFulfilled: (value: string) => unknown) =>
+ new Promise((resolve) => setTimeout(resolve, 10, value)).then(
+ onFulfilled,
+ ),
+});
+
+// Two consecutive responses with a pending ``: the second must show
+// its pending UI again (a settle from the first response is not sticky).
+export const config: TestConfig = {
+ persisted: true,
+ steps: () => [
+ { title: "Store", promise: Promise.resolve("hi") },
+ { title: "Store!", promise: slow("slow") },
+ { title: "Store!!", promise: slow("slower") },
+ ],
+};
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-async-await-pending/__snapshots__/html.bundle.debug.js b/packages/runtime-tags/src/__tests__/fixtures/persisted-async-await-pending/__snapshots__/html.bundle.debug.js
index ff34ac9fee2..7b1bfd44d24 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-async-await-pending/__snapshots__/html.bundle.debug.js
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-async-await-pending/__snapshots__/html.bundle.debug.js
@@ -14,7 +14,7 @@ var template_default = _template_persisted("__tests__/template.marko", (input) =
const $scope1_id = _scope_id();
_html(`${_patch_text($scope1_id, "#text/0", value, void 0, $scope0_owned, 1)}`);
_scope($scope1_id, {}, "__tests__/template.marko", "3:4");
- }, void 0, "__tests__/template.marko_0_#text#1/await", 1);
+ }, 1, "__tests__/template.marko_0_#text#1/await", 1);
_html("");
$scope0_reason && _scope($scope0_id, {}, "__tests__/template.marko", 0);
}, 1, 0);
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-async-await-pending/__snapshots__/html.bundle.js b/packages/runtime-tags/src/__tests__/fixtures/persisted-async-await-pending/__snapshots__/html.bundle.js
index 669fefce817..6976482644b 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-async-await-pending/__snapshots__/html.bundle.js
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-async-await-pending/__snapshots__/html.bundle.js
@@ -12,7 +12,7 @@ var template_default = _template_persisted("a", (input) => {
const $scope1_id = _scope_id();
_html(`${_patch_text($scope1_id, "a", value, void 0, $scope0_owned, 1)}`);
_scope($scope1_id, {});
- }, void 0, "a1", 1);
+ }, 1, "a1", 1);
_html("");
$scope0_reason && _scope($scope0_id, {});
}, 1, 0);
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-async-await-pending/sizes.json b/packages/runtime-tags/src/__tests__/fixtures/persisted-async-await-pending/sizes.json
index c151657a7cd..7fd0a060518 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-async-await-pending/sizes.json
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-async-await-pending/sizes.json
@@ -1,8 +1,8 @@
{
"dom": {
"template.marko.page.mjs": {
- "min": 8742,
- "brotli": 3787
+ "min": 8705,
+ "brotli": 3767
}
},
"html": {
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-async-await-reject-try/__snapshots__/html.bundle.debug.js b/packages/runtime-tags/src/__tests__/fixtures/persisted-async-await-reject-try/__snapshots__/html.bundle.debug.js
index bd0441049df..c55e85cd2ae 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-async-await-reject-try/__snapshots__/html.bundle.debug.js
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-async-await-reject-try/__snapshots__/html.bundle.debug.js
@@ -19,7 +19,7 @@ var template_default = _template_persisted("__tests__/template.marko", (input) =
const $scope4_id = _scope_id();
_html(`${_patch_text($scope4_id, "#text/0", value, void 0, $scope0_owned, 0)}`);
_scope($scope4_id, {}, "__tests__/template.marko", "4:6");
- }, void 0, "__tests__/template.marko_1_#text#0/await", 1);
+ }, 1, "__tests__/template.marko_1_#text#0/await", 1);
$scope0_reason && _subscribe($input_promise__closures, _scope($scope1_id, { _: _scope_with_id($scope0_id) }, "__tests__/template.marko", "2:4"));
_resume_branch($scope1_id);
}, $scope0_id), {
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-async-await-reject-try/__snapshots__/html.bundle.js b/packages/runtime-tags/src/__tests__/fixtures/persisted-async-await-reject-try/__snapshots__/html.bundle.js
index 45cef53bc93..a53d436ea7e 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-async-await-reject-try/__snapshots__/html.bundle.js
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-async-await-reject-try/__snapshots__/html.bundle.js
@@ -17,7 +17,7 @@ var template_default = _template_persisted("a", (input) => {
const $scope4_id = _scope_id();
_html(`${_patch_text($scope4_id, "a", value, void 0, $scope0_owned, 0)}`);
_scope($scope4_id, {});
- }, void 0, "a2", 1);
+ }, 1, "a2", 1);
$scope0_reason && _subscribe($input_promise__closures, _scope($scope1_id, { _: _scope_with_id($scope0_id) }));
_resume_branch($scope1_id);
}, $scope0_id), {
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-async-await-reject-try/sizes.json b/packages/runtime-tags/src/__tests__/fixtures/persisted-async-await-reject-try/sizes.json
index 9c5fdb4d8b0..10852dfc1ba 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-async-await-reject-try/sizes.json
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-async-await-reject-try/sizes.json
@@ -1,8 +1,8 @@
{
"dom": {
"template.marko.page.mjs": {
- "min": 9175,
- "brotli": 3976
+ "min": 9138,
+ "brotli": 3948
}
},
"html": {
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-async-await-settled/__snapshots__/html.bundle.debug.js b/packages/runtime-tags/src/__tests__/fixtures/persisted-async-await-settled/__snapshots__/html.bundle.debug.js
index 4e5ebfcea02..79a7e258ebc 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-async-await-settled/__snapshots__/html.bundle.debug.js
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-async-await-settled/__snapshots__/html.bundle.debug.js
@@ -15,7 +15,7 @@ var template_default = _template_persisted("__tests__/template.marko", (input) =
const $scope1_id = _scope_id();
_html(`${_patch_text($scope1_id, "#text/0", value, void 0, $scope0_owned, 1)}`);
_scope($scope1_id, {}, "__tests__/template.marko", "4:4");
- }, void 0, "__tests__/template.marko_0_#text#1/await", 1);
+ }, 1, "__tests__/template.marko_0_#text#1/await", 1);
_html(`${_el_resume($scope0_id, "#button/2")}`);
_script($scope0_id, "__tests__/template.marko_0");
$scope0_reason && _scope($scope0_id, { count }, "__tests__/template.marko", 0, { count: "1:6" });
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-async-await-settled/__snapshots__/html.bundle.js b/packages/runtime-tags/src/__tests__/fixtures/persisted-async-await-settled/__snapshots__/html.bundle.js
index 49d29f790c5..e62d28721c7 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-async-await-settled/__snapshots__/html.bundle.js
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-async-await-settled/__snapshots__/html.bundle.js
@@ -13,7 +13,7 @@ var template_default = _template_persisted("a", (input) => {
const $scope1_id = _scope_id();
_html(`${_patch_text($scope1_id, "a", value, void 0, $scope0_owned, 1)}`);
_scope($scope1_id, {});
- }, void 0, "a1", 1);
+ }, 1, "a1", 1);
_html(`${_el_resume($scope0_id, "c")}`);
_script($scope0_id, "a2");
$scope0_reason && _scope($scope0_id, { i: count });
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-async-await-settled/sizes.json b/packages/runtime-tags/src/__tests__/fixtures/persisted-async-await-settled/sizes.json
index d9f24e622e7..839a7011134 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-async-await-settled/sizes.json
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-async-await-settled/sizes.json
@@ -1,8 +1,8 @@
{
"dom": {
"template.marko.page.mjs": {
- "min": 9889,
- "brotli": 4240
+ "min": 9853,
+ "brotli": 4229
}
},
"html": {
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-async-catch-fill/__snapshots__/html.bundle.debug.js b/packages/runtime-tags/src/__tests__/fixtures/persisted-async-catch-fill/__snapshots__/html.bundle.debug.js
index 350d466b7f2..fba6eca4664 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-async-catch-fill/__snapshots__/html.bundle.debug.js
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-async-catch-fill/__snapshots__/html.bundle.debug.js
@@ -20,7 +20,7 @@ var template_default = _template_persisted("__tests__/template.marko", (input) =
const $scope3_id = _scope_id();
_html(`${_patch_text($scope3_id, "#text/0", value, void 0, $scope0_owned, 1)}`);
_scope($scope3_id, {}, "__tests__/template.marko", "4:6");
- }, void 0, "__tests__/template.marko_2_#text#0/await", 1);
+ }, 1, "__tests__/template.marko_2_#text#0/await", 1);
$scope0_reason && _subscribe($input_promise__closures, _scope($scope2_id, { _: _scope_with_id($scope0_id) }, "__tests__/template.marko", "3:4"));
_resume_branch($scope2_id);
}, $scope0_id), { catch: attrTag({ content: _content_resume("__tests__/template.marko_1*content", (err) => {
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-async-catch-fill/__snapshots__/html.bundle.js b/packages/runtime-tags/src/__tests__/fixtures/persisted-async-catch-fill/__snapshots__/html.bundle.js
index 45cc0afde62..5026574bb06 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-async-catch-fill/__snapshots__/html.bundle.js
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-async-catch-fill/__snapshots__/html.bundle.js
@@ -18,7 +18,7 @@ var template_default = _template_persisted("a", (input) => {
const $scope3_id = _scope_id();
_html(`${_patch_text($scope3_id, "a", value, void 0, $scope0_owned, 1)}`);
_scope($scope3_id, {});
- }, void 0, "a1", 1);
+ }, 1, "a1", 1);
$scope0_reason && _subscribe($input_promise__closures, _scope($scope2_id, { _: _scope_with_id($scope0_id) }));
_resume_branch($scope2_id);
}, $scope0_id), { catch: attrTag({ content: _content_resume("a3", (err) => {
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-async-catch-fill/sizes.json b/packages/runtime-tags/src/__tests__/fixtures/persisted-async-catch-fill/sizes.json
index 8c635638100..a7a42561c30 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-async-catch-fill/sizes.json
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-async-catch-fill/sizes.json
@@ -1,8 +1,8 @@
{
"dom": {
"template.marko.page.mjs": {
- "min": 11170,
- "brotli": 4729
+ "min": 11112,
+ "brotli": 4706
}
},
"html": {
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-async-catch-global-derived/__snapshots__/dom.bundle.debug.js b/packages/runtime-tags/src/__tests__/fixtures/persisted-async-catch-global-derived/__snapshots__/dom.bundle.debug.js
new file mode 100644
index 00000000000..5f8a82d8241
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-async-catch-global-derived/__snapshots__/dom.bundle.debug.js
@@ -0,0 +1,31 @@
+// template.marko
+const $template = "";
+const $walks = "D%b D m";
+const $await_content__value = ($scope, value) => _text($scope["#text/0"], value);
+const $await_content__$params = ($scope, $params2) => $await_content__value($scope, $params2[0]);
+const $catch_content__tag = /*@__PURE__*/ _fill_join_closure("__tests__/template.marko0", "tag", /*@__PURE__*/ _closure_get("tag", ($scope) => _text($scope["#text/0"], $scope._.tag)), 0);
+const $catch_content__setup = $catch_content__tag;
+const $catch_content = _content_resume("__tests__/template.marko_2*content", "
", "D ", $catch_content__setup);
+const $await_content = /*@__PURE__*/ _await_content("#text/0", " ", "D ");
+const $try_content__await_promise = /*@__PURE__*/ _await_promise("#text/0", $await_content__$params);
+const $try_content__input_promise = /*@__PURE__*/ _closure_get("input_promise", ($scope) => $try_content__await_promise($scope, $scope._.input_promise));
+const $try_content__setup = ($scope) => {
+ $try_content__input_promise($scope);
+ $await_content($scope);
+};
+const $tag__closure = /*@__PURE__*/ _closure($catch_content__tag);
+const $tag = /*@__PURE__*/ _fill_const("__tests__/template.marko0", "tag", $tag__closure);
+const $n = /*@__PURE__*/ _let("n/8", ($scope) => _text($scope["#text/2"], $scope.n));
+const $try = /*@__PURE__*/ _try("#text/0", "", "b%", $try_content__setup);
+const $setup__script = _script("__tests__/template.marko_0", ($scope) => _on($scope["#button/1"], "click", function() {
+ $n($scope, +$scope.n + 1);
+}));
+function $setup($scope) {
+ $n($scope, 0);
+ $try($scope, { catch: attrTag({ content: $catch_content($scope) }) });
+ $setup__script($scope);
+}
+const $input = ($scope, input) => $input_promise($scope, input.promise);
+const $input_promise__closure = /*@__PURE__*/ _closure($try_content__input_promise);
+const $input_promise = /*@__PURE__*/ _const("input_promise", $input_promise__closure);
+var template_default = /*@__PURE__*/ _template("__tests__/template.marko", $template, $walks, $setup, $input);
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-async-catch-global-derived/__snapshots__/dom.bundle.js b/packages/runtime-tags/src/__tests__/fixtures/persisted-async-catch-global-derived/__snapshots__/dom.bundle.js
new file mode 100644
index 00000000000..62c7295ed1e
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-async-catch-global-derived/__snapshots__/dom.bundle.js
@@ -0,0 +1,6 @@
+// template.marko
+const $catch_content = _content_resume("a3", "
", "D ", /* @__PURE__ */ _fill_join_closure("a0", 6, /*@__PURE__*/ _closure_get(10, ($scope) => _text($scope.a, $scope._.g)), 0));
+const $n = /*@__PURE__*/ _let(8, ($scope) => _text($scope.c, $scope.i));
+const $setup__script = _script("a4", ($scope) => _on($scope.b, "click", function() {
+ $n($scope, +$scope.i + 1);
+}));
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-async-catch-global-derived/__snapshots__/error-compile-dom.debug.txt b/packages/runtime-tags/src/__tests__/fixtures/persisted-async-catch-global-derived/__snapshots__/error-compile-dom.debug.txt
deleted file mode 100644
index 79bc469388e..00000000000
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-async-catch-global-derived/__snapshots__/error-compile-dom.debug.txt
+++ /dev/null
@@ -1,9 +0,0 @@
-
- at packages/runtime-tags/src/__tests__/fixtures/persisted-async-catch-global-derived/template.marko:8:18
- 6 | ${value}
- 7 |
- > 8 | <@catch>${tag}
@catch>
- | ^^^ Persisted templates cannot patch this faithfully yet: a `$global`-derived value inside `<@catch>` content would go stale.
- 9 |
- 10 |
- 11 |
\ No newline at end of file
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-async-catch-global-derived/__snapshots__/error-compile-dom.txt b/packages/runtime-tags/src/__tests__/fixtures/persisted-async-catch-global-derived/__snapshots__/error-compile-dom.txt
deleted file mode 100644
index 79bc469388e..00000000000
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-async-catch-global-derived/__snapshots__/error-compile-dom.txt
+++ /dev/null
@@ -1,9 +0,0 @@
-
- at packages/runtime-tags/src/__tests__/fixtures/persisted-async-catch-global-derived/template.marko:8:18
- 6 | ${value}
- 7 |
- > 8 | <@catch>${tag}
@catch>
- | ^^^ Persisted templates cannot patch this faithfully yet: a `$global`-derived value inside `<@catch>` content would go stale.
- 9 |
- 10 |
- 11 |
\ No newline at end of file
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-async-catch-global-derived/__snapshots__/error-compile-html.debug.txt b/packages/runtime-tags/src/__tests__/fixtures/persisted-async-catch-global-derived/__snapshots__/error-compile-html.debug.txt
deleted file mode 100644
index 79bc469388e..00000000000
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-async-catch-global-derived/__snapshots__/error-compile-html.debug.txt
+++ /dev/null
@@ -1,9 +0,0 @@
-
- at packages/runtime-tags/src/__tests__/fixtures/persisted-async-catch-global-derived/template.marko:8:18
- 6 | ${value}
- 7 |
- > 8 | <@catch>${tag}
@catch>
- | ^^^ Persisted templates cannot patch this faithfully yet: a `$global`-derived value inside `<@catch>` content would go stale.
- 9 |
- 10 |
- 11 |
\ No newline at end of file
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-async-catch-global-derived/__snapshots__/error-compile-html.txt b/packages/runtime-tags/src/__tests__/fixtures/persisted-async-catch-global-derived/__snapshots__/error-compile-html.txt
deleted file mode 100644
index 79bc469388e..00000000000
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-async-catch-global-derived/__snapshots__/error-compile-html.txt
+++ /dev/null
@@ -1,9 +0,0 @@
-
- at packages/runtime-tags/src/__tests__/fixtures/persisted-async-catch-global-derived/template.marko:8:18
- 6 | ${value}
- 7 |
- > 8 | <@catch>${tag}
@catch>
- | ^^^ Persisted templates cannot patch this faithfully yet: a `$global`-derived value inside `<@catch>` content would go stale.
- 9 |
- 10 |
- 11 |
\ No newline at end of file
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-async-catch-global-derived/__snapshots__/html.bundle.debug.js b/packages/runtime-tags/src/__tests__/fixtures/persisted-async-catch-global-derived/__snapshots__/html.bundle.debug.js
new file mode 100644
index 00000000000..d2fd568bd0d
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-async-catch-global-derived/__snapshots__/html.bundle.debug.js
@@ -0,0 +1,47 @@
+// template.marko
+const $template = "";
+const $walks = "D%b D m";
+_shells({
+ "__tests__/template.marko_3*content": "__tests__/template.marko_3*content;D ; ",
+ "__tests__/template.marko_1_#text#0/await": "__tests__/template.marko_1_#text#0/await;D ; ",
+ "__tests__/template.marko_1*content": "__tests__/template.marko_1*content;b%;"
+});
+var template_default = _template_persisted("__tests__/template.marko", (input) => {
+ const $scope0_owned = _persisted_ownership(), $scope0_reason = _persisted_reason();
+ const $scope0_id = _scope_id();
+ const $tag__closures = new Set();
+ const $input_promise__closures = new Set();
+ const $global$1 = $global();
+ const tag = `${$global$1.brand}!`;
+ let n = 0;
+ _html("");
+ _try($scope0_id, "#text/0", _content_resume("__tests__/template.marko_1*content", () => {
+ const $scope1_id = _scope_id();
+ const $scope1_reason = _persisted_reason();
+ _await($scope1_id, "#text/0", input.promise, (value) => {
+ const $scope3_id = _scope_id();
+ _html(`${_patch_text($scope3_id, "#text/0", value, void 0, $scope0_owned, 0)}`);
+ _scope($scope3_id, {}, "__tests__/template.marko", "5:6");
+ }, 1, "__tests__/template.marko_1_#text#0/await", 1);
+ $scope0_reason && _subscribe($input_promise__closures, _scope($scope1_id, { _: _scope_with_id($scope0_id) }, "__tests__/template.marko", "4:4"));
+ _resume_branch($scope1_id);
+ }, $scope0_id), { catch: attrTag({ content: _content_resume("__tests__/template.marko_2*content", () => {
+ const $scope2_reason = _persisted_reason();
+ const $scope2_id = _scope_id();
+ _html(`${_text_resume($scope2_id, "#text/0", tag)}
`);
+ _subscribe($scope0_reason && $tag__closures, _scope($scope2_id, { _: _scope_with_id($scope0_id) }, "__tests__/template.marko", "8:6"));
+ _resume_branch($scope2_id);
+ }, $scope0_id) }) }, 1);
+ _html(`${_el_resume($scope0_id, "#button/1")}`);
+ _script($scope0_id, "__tests__/template.marko_0");
+ $scope0_reason ? _scope($scope0_id, {
+ tag,
+ n,
+ "ClosureScopes:tag": $tag__closures,
+ "ClosureScopes:input_promise": $input_promise__closures
+ }, "__tests__/template.marko", 0, {
+ tag: "1:8",
+ n: "2:6"
+ }) : _patch_value($scope0_id, "__tests__/template.marko0", tag);
+ _resume_branch($scope0_id);
+}, 1, 1);
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-async-catch-global-derived/__snapshots__/html.bundle.js b/packages/runtime-tags/src/__tests__/fixtures/persisted-async-catch-global-derived/__snapshots__/html.bundle.js
new file mode 100644
index 00000000000..7c335c3913a
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-async-catch-global-derived/__snapshots__/html.bundle.js
@@ -0,0 +1,41 @@
+// template.marko
+_shells({
+ a0: "a0;D ; ",
+ a1: "a1;D ; ",
+ a2: "a2;b%;"
+});
+var template_default = _template_persisted("a", (input) => {
+ const $scope0_owned = _persisted_ownership(), $scope0_reason = _persisted_reason();
+ const $scope0_id = _scope_id();
+ const $tag__closures = /* @__PURE__ */ new Set();
+ const $input_promise__closures = /* @__PURE__ */ new Set();
+ const tag = `${$global().brand}!`;
+ let n = 0;
+ _html("");
+ _try($scope0_id, "a", _content_resume("a2", () => {
+ const $scope1_id = _scope_id();
+ _persisted_reason();
+ _await($scope1_id, "a", input.promise, (value) => {
+ const $scope3_id = _scope_id();
+ _html(`${_patch_text($scope3_id, "a", value, void 0, $scope0_owned, 0)}`);
+ _scope($scope3_id, {});
+ }, 1, "a1", 1);
+ $scope0_reason && _subscribe($input_promise__closures, _scope($scope1_id, { _: _scope_with_id($scope0_id) }));
+ _resume_branch($scope1_id);
+ }, $scope0_id), { catch: attrTag({ content: _content_resume("a3", () => {
+ _persisted_reason();
+ const $scope2_id = _scope_id();
+ _html(`${_text_resume($scope2_id, "a", tag)}
`);
+ _subscribe($scope0_reason && $tag__closures, _scope($scope2_id, { _: _scope_with_id($scope0_id) }));
+ _resume_branch($scope2_id);
+ }, $scope0_id) }) }, 1);
+ _html(`${_el_resume($scope0_id, "b")}`);
+ _script($scope0_id, "a4");
+ $scope0_reason ? _scope($scope0_id, {
+ g: tag,
+ i: n,
+ k: $tag__closures,
+ j: $input_promise__closures
+ }) : _patch_value($scope0_id, "a0", tag);
+ _resume_branch($scope0_id);
+}, 1, 1);
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-async-catch-global-derived/__snapshots__/patches.debug.js b/packages/runtime-tags/src/__tests__/fixtures/persisted-async-catch-global-derived/__snapshots__/patches.debug.js
new file mode 100644
index 00000000000..16b62d5b47d
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-async-catch-global-derived/__snapshots__/patches.debug.js
@@ -0,0 +1,8 @@
+// PATCH
+{
+ "PatchChild:BranchScopes:#text/0": {
+ "PatchPending:#text/0": 1,
+ "PatchCatch:#text/0": new Error("boom")
+ },
+ "PatchValue:packages/runtime-tags/src/__tests__/fixtures/persisted-async-catch-global-derived/template.marko0": "bmce!"
+}
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-async-catch-global-derived/__snapshots__/patches.js b/packages/runtime-tags/src/__tests__/fixtures/persisted-async-catch-global-derived/__snapshots__/patches.js
new file mode 100644
index 00000000000..745a5b2856e
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-async-catch-global-derived/__snapshots__/patches.js
@@ -0,0 +1,8 @@
+// PATCH
+{
+ cAa: {
+ pa: 1,
+ ka: new Error("boom")
+ },
+ va0: "bmce!"
+}
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-async-catch-global-derived/__snapshots__/render.debug.md b/packages/runtime-tags/src/__tests__/fixtures/persisted-async-catch-global-derived/__snapshots__/render.debug.md
new file mode 100644
index 00000000000..ebec67eb4a9
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-async-catch-global-derived/__snapshots__/render.debug.md
@@ -0,0 +1,29 @@
+# Render `{"promise":{},"$global":{"brand":"acme"}}`
+```html
+
+
+ ok
+
+
+
+```
+
+# Update `{"promise":{},"$global":{"brand":"bmce"}}`
+```html
+
+
+ bmce!
+
+
+
+```
+## Change
+```
+INSERT: main > p
+REMOVE: main > p + em
+UPDATE: main > p::text " " => "bmce!"
+```
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-async-catch-global-derived/__snapshots__/render.md b/packages/runtime-tags/src/__tests__/fixtures/persisted-async-catch-global-derived/__snapshots__/render.md
new file mode 100644
index 00000000000..ebec67eb4a9
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-async-catch-global-derived/__snapshots__/render.md
@@ -0,0 +1,29 @@
+# Render `{"promise":{},"$global":{"brand":"acme"}}`
+```html
+
+
+ ok
+
+
+
+```
+
+# Update `{"promise":{},"$global":{"brand":"bmce"}}`
+```html
+
+
+ bmce!
+
+
+
+```
+## Change
+```
+INSERT: main > p
+REMOVE: main > p + em
+UPDATE: main > p::text " " => "bmce!"
+```
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-async-catch-global-derived/__snapshots__/writes.debug.html b/packages/runtime-tags/src/__tests__/fixtures/persisted-async-catch-global-derived/__snapshots__/writes.debug.html
new file mode 100644
index 00000000000..2368ef4b614
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-async-catch-global-derived/__snapshots__/writes.debug.html
@@ -0,0 +1,21 @@
+
+ ok
+
+
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-async-catch-global-derived/__snapshots__/writes.html b/packages/runtime-tags/src/__tests__/fixtures/persisted-async-catch-global-derived/__snapshots__/writes.html
new file mode 100644
index 00000000000..62898faadfd
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-async-catch-global-derived/__snapshots__/writes.html
@@ -0,0 +1,17 @@
+
+ ok
+
+
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-async-catch-global-derived/sizes.json b/packages/runtime-tags/src/__tests__/fixtures/persisted-async-catch-global-derived/sizes.json
new file mode 100644
index 00000000000..6e85718c295
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-async-catch-global-derived/sizes.json
@@ -0,0 +1,16 @@
+{
+ "dom": {
+ "template.marko.page.mjs": {
+ "min": 11047,
+ "brotli": 4675
+ }
+ },
+ "html": {
+ "min": 527,
+ "brotli": 337
+ },
+ "patch": {
+ "min": 46,
+ "brotli": 50
+ }
+}
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-async-catch-global-derived/test.ts b/packages/runtime-tags/src/__tests__/fixtures/persisted-async-catch-global-derived/test.ts
index dc731ec6969..5046f71fd8f 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-async-catch-global-derived/test.ts
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-async-catch-global-derived/test.ts
@@ -1,8 +1,12 @@
import type { TestConfig } from "../../main.test";
-// A `$global`-derived value never re-ships, so reading it inside `<@catch>`
-// content on an interactive page stays closed.
+// `@catch` content reading a `$global`-derived value: the derivation
+// delivers as a fill each frame, so the catch UI renders the rejecting
+// patch's brand, not the initial render's.
export const config: TestConfig = {
- error_compiler: true,
persisted: true,
+ steps: () => [
+ { promise: Promise.resolve("ok"), $global: { brand: "acme" } },
+ { promise: Promise.reject(new Error("boom")), $global: { brand: "bmce" } },
+ ],
};
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-async-catch-scriptless/__snapshots__/html.bundle.debug.js b/packages/runtime-tags/src/__tests__/fixtures/persisted-async-catch-scriptless/__snapshots__/html.bundle.debug.js
index c545b807df8..ce5c2ba6166 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-async-catch-scriptless/__snapshots__/html.bundle.debug.js
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-async-catch-scriptless/__snapshots__/html.bundle.debug.js
@@ -18,7 +18,7 @@ var template_default = _template_persisted("__tests__/template.marko", (input) =
const $scope3_id = _scope_id();
_html(`${_patch_text($scope3_id, "#text/0", value, void 0, $scope0_owned, 0)}`);
_scope($scope3_id, {}, "__tests__/template.marko", "3:6");
- }, void 0, "__tests__/template.marko_1_#text#0/await", 1);
+ }, 1, "__tests__/template.marko_1_#text#0/await", 1);
$scope0_reason && _subscribe($input_promise__closures, _scope($scope1_id, { _: _scope_with_id($scope0_id) }, "__tests__/template.marko", "2:4"));
_resume_branch($scope1_id);
}, $scope0_id), { catch: attrTag({ content: _content_elide("__tests__/template.marko_2*content", (err) => {
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-async-catch-scriptless/__snapshots__/html.bundle.js b/packages/runtime-tags/src/__tests__/fixtures/persisted-async-catch-scriptless/__snapshots__/html.bundle.js
index 16606edf828..9048b4375e7 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-async-catch-scriptless/__snapshots__/html.bundle.js
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-async-catch-scriptless/__snapshots__/html.bundle.js
@@ -16,7 +16,7 @@ var template_default = _template_persisted("a", (input) => {
const $scope3_id = _scope_id();
_html(`${_patch_text($scope3_id, "a", value, void 0, $scope0_owned, 0)}`);
_scope($scope3_id, {});
- }, void 0, "a1", 1);
+ }, 1, "a1", 1);
$scope0_reason && _subscribe($input_promise__closures, _scope($scope1_id, { _: _scope_with_id($scope0_id) }));
_resume_branch($scope1_id);
}, $scope0_id), { catch: attrTag({ content: _content_elide("a3", (err) => {
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-async-catch-scriptless/sizes.json b/packages/runtime-tags/src/__tests__/fixtures/persisted-async-catch-scriptless/sizes.json
index 48f52649b02..ade6576bd81 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-async-catch-scriptless/sizes.json
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-async-catch-scriptless/sizes.json
@@ -1,8 +1,8 @@
{
"dom": {
"template.marko.page.mjs": {
- "min": 9089,
- "brotli": 3937
+ "min": 9052,
+ "brotli": 3924
}
},
"html": {
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-async-catch-server-read/__snapshots__/html.bundle.debug.js b/packages/runtime-tags/src/__tests__/fixtures/persisted-async-catch-server-read/__snapshots__/html.bundle.debug.js
index 114beac2575..b5631f29e47 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-async-catch-server-read/__snapshots__/html.bundle.debug.js
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-async-catch-server-read/__snapshots__/html.bundle.debug.js
@@ -19,7 +19,7 @@ var template_default = _template_persisted("__tests__/template.marko", (input) =
const $scope3_id = _scope_id();
_html(`${_patch_text($scope3_id, "#text/0", value, void 0, $scope0_owned, 1)}`);
_scope($scope3_id, {}, "__tests__/template.marko", "3:6");
- }, void 0, "__tests__/template.marko_2_#text#0/await", 1);
+ }, 1, "__tests__/template.marko_2_#text#0/await", 1);
$scope0_reason && _subscribe($input_promise__closures, _scope($scope2_id, { _: _scope_with_id($scope0_id) }, "__tests__/template.marko", "2:4"));
_resume_branch($scope2_id);
}, $scope0_id), { catch: attrTag({ content: _content_elide("__tests__/template.marko_1*content", (err) => {
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-async-catch-server-read/__snapshots__/html.bundle.js b/packages/runtime-tags/src/__tests__/fixtures/persisted-async-catch-server-read/__snapshots__/html.bundle.js
index ccb3f949799..4ef2402af9f 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-async-catch-server-read/__snapshots__/html.bundle.js
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-async-catch-server-read/__snapshots__/html.bundle.js
@@ -17,7 +17,7 @@ var template_default = _template_persisted("a", (input) => {
const $scope3_id = _scope_id();
_html(`${_patch_text($scope3_id, "a", value, void 0, $scope0_owned, 1)}`);
_scope($scope3_id, {});
- }, void 0, "a1", 1);
+ }, 1, "a1", 1);
$scope0_reason && _subscribe($input_promise__closures, _scope($scope2_id, { _: _scope_with_id($scope0_id) }));
_resume_branch($scope2_id);
}, $scope0_id), { catch: attrTag({ content: _content_elide("a3", (err) => {
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-async-catch-server-read/sizes.json b/packages/runtime-tags/src/__tests__/fixtures/persisted-async-catch-server-read/sizes.json
index 5c2236e69dc..9031cd42eb8 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-async-catch-server-read/sizes.json
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-async-catch-server-read/sizes.json
@@ -1,8 +1,8 @@
{
"dom": {
"template.marko.page.mjs": {
- "min": 9089,
- "brotli": 3937
+ "min": 9052,
+ "brotli": 3924
}
},
"html": {
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-async-placeholder-fill/__snapshots__/html.bundle.debug.js b/packages/runtime-tags/src/__tests__/fixtures/persisted-async-placeholder-fill/__snapshots__/html.bundle.debug.js
index debdea38a72..403468c648d 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-async-placeholder-fill/__snapshots__/html.bundle.debug.js
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-async-placeholder-fill/__snapshots__/html.bundle.debug.js
@@ -20,7 +20,7 @@ var template_default = _template_persisted("__tests__/template.marko", (input) =
const $scope3_id = _scope_id();
_html(`${_patch_text($scope3_id, "#text/0", value, void 0, $scope0_owned, 1)}`);
_scope($scope3_id, {}, "__tests__/template.marko", "4:6");
- }, void 0, "__tests__/template.marko_2_#text#0/await", 1);
+ }, 1, "__tests__/template.marko_2_#text#0/await", 1);
$scope0_reason && _subscribe($input_promise__closures, _scope($scope2_id, { _: _scope_with_id($scope0_id) }, "__tests__/template.marko", "3:4"));
_resume_branch($scope2_id);
}, $scope0_id), { placeholder: attrTag({ content: _content_resume("__tests__/template.marko_1*content", () => {
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-async-placeholder-fill/__snapshots__/html.bundle.js b/packages/runtime-tags/src/__tests__/fixtures/persisted-async-placeholder-fill/__snapshots__/html.bundle.js
index a6300a23c36..a37eb6f5d78 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-async-placeholder-fill/__snapshots__/html.bundle.js
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-async-placeholder-fill/__snapshots__/html.bundle.js
@@ -18,7 +18,7 @@ var template_default = _template_persisted("a", (input) => {
const $scope3_id = _scope_id();
_html(`${_patch_text($scope3_id, "a", value, void 0, $scope0_owned, 1)}`);
_scope($scope3_id, {});
- }, void 0, "a1", 1);
+ }, 1, "a1", 1);
$scope0_reason && _subscribe($input_promise__closures, _scope($scope2_id, { _: _scope_with_id($scope0_id) }));
_resume_branch($scope2_id);
}, $scope0_id), { placeholder: attrTag({ content: _content_resume("a3", () => {
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-async-placeholder-fill/sizes.json b/packages/runtime-tags/src/__tests__/fixtures/persisted-async-placeholder-fill/sizes.json
index 7806e872ab0..9434d120f70 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-async-placeholder-fill/sizes.json
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-async-placeholder-fill/sizes.json
@@ -1,8 +1,8 @@
{
"dom": {
"template.marko.page.mjs": {
- "min": 11131,
- "brotli": 4708
+ "min": 11073,
+ "brotli": 4689
}
},
"html": {
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-async-try-catch-only/sizes.json b/packages/runtime-tags/src/__tests__/fixtures/persisted-async-try-catch-only/sizes.json
index 658c289878f..effb6dad055 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-async-try-catch-only/sizes.json
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-async-try-catch-only/sizes.json
@@ -1,8 +1,8 @@
{
"dom": {
"template.marko.page.mjs": {
- "min": 9175,
- "brotli": 3976
+ "min": 9138,
+ "brotli": 3948
}
},
"html": {
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-async-try-in-branch-scriptless/__snapshots__/html.bundle.debug.js b/packages/runtime-tags/src/__tests__/fixtures/persisted-async-try-in-branch-scriptless/__snapshots__/html.bundle.debug.js
index 15f4fdbc410..d8ab95381a0 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-async-try-in-branch-scriptless/__snapshots__/html.bundle.debug.js
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-async-try-in-branch-scriptless/__snapshots__/html.bundle.debug.js
@@ -28,7 +28,7 @@ var template_default = _template_persisted("__tests__/template.marko", (input) =
"ClosureSignalIndex:input_value": 1
}, "__tests__/template.marko", "4:8");
_resume_branch($scope3_id);
- }, void 0, "__tests__/template.marko_2_#text#0/await");
+ }, 1, "__tests__/template.marko_2_#text#0/await");
$scope0_reason && _subscribe(_source_if($scope0_reason, 2) && $input_value__closures, _scope($scope2_id, { _: _scope_with_id($scope1_id) }, "__tests__/template.marko", "3:6"));
_resume_branch($scope2_id);
}, $scope1_id), { placeholder: attrTag({ content: _content_record("__tests__/template.marko_4*content", $scope1_id) }) });
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-async-try-in-branch-scriptless/__snapshots__/html.bundle.js b/packages/runtime-tags/src/__tests__/fixtures/persisted-async-try-in-branch-scriptless/__snapshots__/html.bundle.js
index f8c785e48cb..9e26e21a87b 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-async-try-in-branch-scriptless/__snapshots__/html.bundle.js
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-async-try-in-branch-scriptless/__snapshots__/html.bundle.js
@@ -26,7 +26,7 @@ var template_default = _template_persisted("a", (input) => {
Cf: 1
});
_resume_branch($scope3_id);
- }, void 0, "a2");
+ }, 1, "a2");
$scope0_reason && _subscribe(_source_if($scope0_reason, 2) && $input_value__closures, _scope($scope2_id, { _: _scope_with_id($scope1_id) }));
_resume_branch($scope2_id);
}, $scope1_id), { placeholder: attrTag({ content: _content_record("a0", $scope1_id) }) });
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-async-try-in-branch-scriptless/sizes.json b/packages/runtime-tags/src/__tests__/fixtures/persisted-async-try-in-branch-scriptless/sizes.json
index c66dbfa8f97..89c129a79b7 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-async-try-in-branch-scriptless/sizes.json
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-async-try-in-branch-scriptless/sizes.json
@@ -1,8 +1,8 @@
{
"dom": {
"template.marko.page.mjs": {
- "min": 9612,
- "brotli": 4144
+ "min": 9575,
+ "brotli": 4122
}
},
"html": {
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-async-try-nested-await/__snapshots__/html.bundle.debug.js b/packages/runtime-tags/src/__tests__/fixtures/persisted-async-try-nested-await/__snapshots__/html.bundle.debug.js
index 77bacaec375..dc24e995386 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-async-try-nested-await/__snapshots__/html.bundle.debug.js
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-async-try-nested-await/__snapshots__/html.bundle.debug.js
@@ -25,7 +25,7 @@ var template_default = _template_persisted("__tests__/template.marko", (input) =
const $scope5_id = _scope_id();
_html(`${_patch_text($scope5_id, "#text/0", value, void 0, $scope0_owned, 0)}`);
_scope($scope5_id, {}, "__tests__/template.marko", "4:8");
- }, void 0, "__tests__/template.marko_2_#text#0/await", 1);
+ }, 1, "__tests__/template.marko_2_#text#0/await", 1);
$scope0_reason && _subscribe($input_promise__closures, _scope($scope2_id, { _: _scope_with_id($scope1_id) }, "__tests__/template.marko", "3:6"));
_resume_branch($scope2_id);
}, $scope1_id), { catch: attrTag({ content: _content_record("__tests__/template.marko_4*content", $scope1_id) }) }, 1);
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-async-try-nested-await/__snapshots__/html.bundle.js b/packages/runtime-tags/src/__tests__/fixtures/persisted-async-try-nested-await/__snapshots__/html.bundle.js
index abe3660c839..b7f56fd62d9 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-async-try-nested-await/__snapshots__/html.bundle.js
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-async-try-nested-await/__snapshots__/html.bundle.js
@@ -23,7 +23,7 @@ var template_default = _template_persisted("a", (input) => {
const $scope5_id = _scope_id();
_html(`${_patch_text($scope5_id, "a", value, void 0, $scope0_owned, 0)}`);
_scope($scope5_id, {});
- }, void 0, "a3", 1);
+ }, 1, "a3", 1);
$scope0_reason && _subscribe($input_promise__closures, _scope($scope2_id, { _: _scope_with_id($scope1_id) }));
_resume_branch($scope2_id);
}, $scope1_id), { catch: attrTag({ content: _content_record("a1", $scope1_id) }) }, 1);
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-async-try-nested-await/sizes.json b/packages/runtime-tags/src/__tests__/fixtures/persisted-async-try-nested-await/sizes.json
index 817b1eafbc5..1b1c03139d8 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-async-try-nested-await/sizes.json
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-async-try-nested-await/sizes.json
@@ -1,8 +1,8 @@
{
"dom": {
"template.marko.page.mjs": {
- "min": 9175,
- "brotli": 3976
+ "min": 9138,
+ "brotli": 3948
}
},
"html": {
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-async-try-placeholder/__snapshots__/html.bundle.debug.js b/packages/runtime-tags/src/__tests__/fixtures/persisted-async-try-placeholder/__snapshots__/html.bundle.debug.js
index 3ecc8e5c1fc..32dd2d060fe 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-async-try-placeholder/__snapshots__/html.bundle.debug.js
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-async-try-placeholder/__snapshots__/html.bundle.debug.js
@@ -20,7 +20,7 @@ var template_default = _template_persisted("__tests__/template.marko", (input) =
const $scope3_id = _scope_id();
_html(`${_patch_text($scope3_id, "#text/0", value, void 0, $scope0_owned, 1)}`);
_scope($scope3_id, {}, "__tests__/template.marko", "4:6");
- }, void 0, "__tests__/template.marko_1_#text#0/await", 1);
+ }, 1, "__tests__/template.marko_1_#text#0/await", 1);
$scope0_reason && _subscribe($input_promise__closures, _scope($scope1_id, { _: _scope_with_id($scope0_id) }, "__tests__/template.marko", "3:4"));
_resume_branch($scope1_id);
}, $scope0_id), { placeholder: attrTag({ content: _content_record("__tests__/template.marko_2*content", $scope0_id) }) }, 1);
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-async-try-placeholder/__snapshots__/html.bundle.js b/packages/runtime-tags/src/__tests__/fixtures/persisted-async-try-placeholder/__snapshots__/html.bundle.js
index 0406eb8ae77..dde8d5b40be 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-async-try-placeholder/__snapshots__/html.bundle.js
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-async-try-placeholder/__snapshots__/html.bundle.js
@@ -18,7 +18,7 @@ var template_default = _template_persisted("a", (input) => {
const $scope3_id = _scope_id();
_html(`${_patch_text($scope3_id, "a", value, void 0, $scope0_owned, 1)}`);
_scope($scope3_id, {});
- }, void 0, "a2", 1);
+ }, 1, "a2", 1);
$scope0_reason && _subscribe($input_promise__closures, _scope($scope1_id, { _: _scope_with_id($scope0_id) }));
_resume_branch($scope1_id);
}, $scope0_id), { placeholder: attrTag({ content: _content_record("a1", $scope0_id) }) }, 1);
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-async-try-placeholder/sizes.json b/packages/runtime-tags/src/__tests__/fixtures/persisted-async-try-placeholder/sizes.json
index c5ddbada1d2..683fe0490e7 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-async-try-placeholder/sizes.json
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-async-try-placeholder/sizes.json
@@ -1,8 +1,8 @@
{
"dom": {
"template.marko.page.mjs": {
- "min": 9181,
- "brotli": 3958
+ "min": 9144,
+ "brotli": 3948
}
},
"html": {
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-await-in-content/__snapshots__/dom.bundle.debug.js b/packages/runtime-tags/src/__tests__/fixtures/persisted-await-in-content/__snapshots__/dom.bundle.debug.js
new file mode 100644
index 00000000000..cbe896b2828
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-await-in-content/__snapshots__/dom.bundle.debug.js
@@ -0,0 +1,44 @@
+// tags/wrap/index.marko
+const $template$1 = "";
+const $walks$1 = "D%l";
+const $setup$1 = () => {};
+const $input_content_direct = /*@__PURE__*/ _dynamic_tag_content("#text/0");
+const $dynamicTag = /*@__PURE__*/ _dynamic_tag("#text/0");
+const $input_content = $dynamicTag;
+const $input$1 = ($scope, input) => $input_content($scope, input.content);
+var wrap_default = /*@__PURE__*/ _template("__tests__/tags/wrap/index.marko", $template$1, "D%l", 0, $input$1);
+
+// template.marko
+const $template = /*@__PURE__*/ ((_w0) => `${_w0}`)($template$1);
+const $walks = /*@__PURE__*/ ((_w0) => ` D l/${_w0}&`)("D%l");
+const $placeholder_content = _content_resume("__tests__/template.marko_4*content", "loading");
+const $await_content__input_msg = /*@__PURE__*/ _closure_get("input_msg", ($scope) => _text($scope["#text/0"], $scope._._._.input_msg), ($scope) => $scope._._._, "__tests__/template.marko_3_input_msg#6/pending");
+const $await_content__setup = $await_content__input_msg;
+const $await_content = /*@__PURE__*/ _await_content("#text/0", " done
", "D%", $await_content__setup);
+const $try_content__await_promise = /*@__PURE__*/ _await_promise("#text/0");
+const $try_content__input_promise = /*@__PURE__*/ _closure_get("input_promise", ($scope) => $try_content__await_promise($scope, $scope._._.input_promise), ($scope) => $scope._._);
+const $try_content__setup = ($scope) => {
+ $try_content__input_promise($scope);
+ $await_content($scope);
+};
+const $wrap_content__try = /*@__PURE__*/ _try("#text/0", "", "b%", $try_content__setup);
+const $wrap_content__setup = ($scope) => $wrap_content__try($scope, { placeholder: attrTag({ content: $placeholder_content($scope) }) });
+const $wrap_content = /*@__PURE__*/ _content("__tests__/template.marko_1*content", "", "b%", $wrap_content__setup);
+const $count = /*@__PURE__*/ _let("count/7", ($scope) => _text($scope["#text/1"], $scope.count));
+const $setup__script = _script("__tests__/template.marko_0", ($scope) => _on($scope["#button/0"], "click", function() {
+ $count($scope, +$scope.count + 1);
+}));
+function $setup($scope) {
+ $input_content_direct($scope["#childScope/2"], $wrap_content($scope));
+ $count($scope, 0);
+ $setup__script($scope);
+}
+const $input = ($scope, input) => {
+ $input_promise($scope, input.promise);
+ $input_msg($scope, input.msg);
+};
+const $input_promise__closure = /*@__PURE__*/ _closure($try_content__input_promise);
+const $input_promise = /*@__PURE__*/ _const("input_promise", $input_promise__closure);
+const $input_msg__closure = /*@__PURE__*/ _closure($await_content__input_msg);
+const $input_msg = /*@__PURE__*/ _const("input_msg", $input_msg__closure);
+var template_default = /*@__PURE__*/ _template("__tests__/template.marko", $template, $walks, $setup, $input);
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-await-in-content/__snapshots__/dom.bundle.js b/packages/runtime-tags/src/__tests__/fixtures/persisted-await-in-content/__snapshots__/dom.bundle.js
new file mode 100644
index 00000000000..308d2ad32fe
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-await-in-content/__snapshots__/dom.bundle.js
@@ -0,0 +1,6 @@
+// template.marko
+const $placeholder_content = _content_resume("a0", "loading");
+const $count = /*@__PURE__*/ _let(7, ($scope) => _text($scope.b, $scope.h));
+const $setup__script = _script("a5", ($scope) => _on($scope.a, "click", function() {
+ $count($scope, +$scope.h + 1);
+}));
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-await-in-content/__snapshots__/html.bundle.debug.js b/packages/runtime-tags/src/__tests__/fixtures/persisted-await-in-content/__snapshots__/html.bundle.debug.js
new file mode 100644
index 00000000000..74b5504e7b0
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-await-in-content/__snapshots__/html.bundle.debug.js
@@ -0,0 +1,65 @@
+// tags/wrap/index.marko
+const $template$1 = "";
+const $walks$1 = "D%l";
+_shells({ "__tests__/tags/wrap/index.marko": "__tests__/tags/wrap/index.marko;D%;" });
+var wrap_default = _template_persisted("__tests__/tags/wrap/index.marko", (input) => {
+ const $scope0_owned = _persisted_ownership(), $scope0_reason = _persisted_reason();
+ const $scope0_id = _scope_id();
+ _html("");
+ _patch_dynamic_tag($scope0_id, "#text/0", input.content, $scope0_owned, 0);
+ _dynamic_tag($scope0_id, "#text/0", input.content, {}, 0, 0, _source_guard($scope0_reason, 0), 1);
+ _html("");
+ $scope0_reason && _scope($scope0_id, {}, "__tests__/tags/wrap/index.marko", 0);
+}, 0, 0);
+
+// template.marko
+const $template = /*@__PURE__*/ ((_w0) => `${_w0}`)($template$1);
+const $walks = /*@__PURE__*/ ((_w0) => ` D l/${_w0}&`)("D%l");
+_shells({
+ "__tests__/template.marko_4*content": "__tests__/template.marko_4*content,loading",
+ "__tests__/template.marko_3*content": "__tests__/template.marko_3*content;D%; done
",
+ "__tests__/template.marko_2_#text#0/await": "__tests__/template.marko_2_#text#0/await;D%; done
",
+ "__tests__/template.marko_2*content": "__tests__/template.marko_2*content;b%;",
+ "__tests__/template.marko_1*content": "__tests__/template.marko_1*content;b%;",
+ "__tests__/template.marko": /*@__PURE__*/ ((_w0, _w1) => `__tests__/template.marko !__tests__/template.marko_0;${_w0};${_w1}`)(((_w0) => ` D l/${_w0}&`)("D%l"), ((_w0) => `${_w0}`)($template$1))
+});
+var template_default = _template_persisted("__tests__/template.marko", (input) => {
+ const $scope0_owned = _persisted_ownership(), $scope0_reason = _persisted_reason();
+ const $scope0_id = _scope_id();
+ const $input_msg__closures = new Set();
+ const $input_promise__closures = new Set();
+ let count = 0;
+ _html(`${_el_resume($scope0_id, "#button/0")}`);
+ _set_serialize_reason(0);
+ const $childScope = _peek_scope_id();
+ _patch_child($scope0_id, "#childScope/2", $childScope);
+ wrap_default({ content: _content_elide("__tests__/template.marko_1*content", () => {
+ const $scope1_reason = _persisted_reason();
+ const $scope1_id = _scope_id();
+ _try($scope1_id, "#text/0", _content_resume("__tests__/template.marko_2*content", () => {
+ const $scope2_id = _scope_id();
+ const $scope2_reason = _persisted_reason();
+ _await($scope2_id, "#text/0", input.promise, () => {
+ const $scope3_id = _scope_id();
+ _html(`${_patch_text($scope3_id, "#text/0", input.msg, void 0, $scope0_owned, 2)} done
`);
+ _scope($scope3_id, { _: _scope_with_id($scope2_id) }, "__tests__/template.marko", "5:6");
+ _resume_branch($scope3_id);
+ }, 1, "__tests__/template.marko_2_#text#0/await");
+ $scope0_reason && _subscribe(_source_if($scope0_reason, 1) && $input_promise__closures, _scope($scope2_id, { _: _scope_with_id($scope1_id) }, "__tests__/template.marko", "4:4"));
+ _resume_branch($scope2_id);
+ }, $scope1_id), { placeholder: attrTag({ content: _content_record("__tests__/template.marko_4*content", $scope1_id) }) });
+ $scope0_reason && _scope($scope1_id, { _: _scope_with_id($scope0_id) }, "__tests__/template.marko", "3:2");
+ }, $scope0_id) });
+ _script($scope0_id, "__tests__/template.marko_0");
+ $scope0_reason && _scope($scope0_id, {
+ input_msg: input.msg,
+ count,
+ "ClosureScopes:input_msg": $input_msg__closures,
+ "ClosureScopes:input_promise": $input_promise__closures,
+ "#childScope/2": _existing_scope($childScope)
+ }, "__tests__/template.marko", 0, {
+ input_msg: ["input.msg"],
+ count: "1:6"
+ });
+ _resume_branch($scope0_id);
+}, 1, () => [wrap_default]);
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-await-in-content/__snapshots__/html.bundle.js b/packages/runtime-tags/src/__tests__/fixtures/persisted-await-in-content/__snapshots__/html.bundle.js
new file mode 100644
index 00000000000..ea4f9937b97
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-await-in-content/__snapshots__/html.bundle.js
@@ -0,0 +1,59 @@
+// tags/wrap/index.marko
+const $template = "";
+_shells({ b: "b;D%;" });
+var wrap_default = _template_persisted("b", (input) => {
+ const $scope0_owned = _persisted_ownership(), $scope0_reason = _persisted_reason();
+ const $scope0_id = _scope_id();
+ _html("");
+ _patch_dynamic_tag($scope0_id, "a", input.content, $scope0_owned, 0);
+ _dynamic_tag($scope0_id, "a", input.content, {}, 0, 0, _source_guard($scope0_reason, 0), 1);
+ _html("");
+ $scope0_reason && _scope($scope0_id, {});
+}, 0, 0);
+
+// template.marko
+_shells({
+ a0: "a0,loading",
+ a1: "a1;D%; done
",
+ a2: "a2;D%; done
",
+ a3: "a3;b%;",
+ a4: "a4;b%;",
+ a: /*@__PURE__*/ ((_w0, _w1) => `a !a5;${_w0};${_w1}`)(((_w0) => ` D l/${_w0}&`)("D%l"), ((_w0) => `${_w0}`)($template))
+});
+var template_default = _template_persisted("a", (input) => {
+ const $scope0_owned = _persisted_ownership(), $scope0_reason = _persisted_reason();
+ const $scope0_id = _scope_id();
+ const $input_msg__closures = /* @__PURE__ */ new Set();
+ const $input_promise__closures = /* @__PURE__ */ new Set();
+ let count = 0;
+ _html(`${_el_resume($scope0_id, "a")}`);
+ _set_serialize_reason(0);
+ const $childScope = _peek_scope_id();
+ _patch_child($scope0_id, "c", $childScope);
+ wrap_default({ content: _content_elide("a4", () => {
+ _persisted_reason();
+ const $scope1_id = _scope_id();
+ _try($scope1_id, "a", _content_resume("a3", () => {
+ const $scope2_id = _scope_id();
+ _persisted_reason();
+ _await($scope2_id, "a", input.promise, () => {
+ const $scope3_id = _scope_id();
+ _html(`${_patch_text($scope3_id, "a", input.msg, void 0, $scope0_owned, 2)} done
`);
+ _scope($scope3_id, { _: _scope_with_id($scope2_id) });
+ _resume_branch($scope3_id);
+ }, 1, "a2");
+ $scope0_reason && _subscribe(_source_if($scope0_reason, 1) && $input_promise__closures, _scope($scope2_id, { _: _scope_with_id($scope1_id) }));
+ _resume_branch($scope2_id);
+ }, $scope1_id), { placeholder: attrTag({ content: _content_record("a0", $scope1_id) }) });
+ $scope0_reason && _scope($scope1_id, { _: _scope_with_id($scope0_id) });
+ }, $scope0_id) });
+ _script($scope0_id, "a5");
+ $scope0_reason && _scope($scope0_id, {
+ g: input.msg,
+ h: count,
+ j: $input_msg__closures,
+ i: $input_promise__closures,
+ c: _existing_scope($childScope)
+ });
+ _resume_branch($scope0_id);
+}, 1, () => [wrap_default]);
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-await-in-content/__snapshots__/patches.debug.js b/packages/runtime-tags/src/__tests__/fixtures/persisted-await-in-content/__snapshots__/patches.debug.js
new file mode 100644
index 00000000000..40459b1155e
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-await-in-content/__snapshots__/patches.debug.js
@@ -0,0 +1,13 @@
+// PATCH
+[`packages/runtime-tags/src/__tests__/fixtures/persisted-await-in-content/template.marko_2_#text#0/await;D%; done
`, `packages/runtime-tags/src/__tests__/fixtures/persisted-await-in-content/template.marko_2*content;b%;`, `packages/runtime-tags/src/__tests__/fixtures/persisted-await-in-content/template.marko_4*content,loading`, {
+ "PatchChild:#childScope/2": {
+ "PatchChild:BranchScopes:#text/0": {
+ "PatchChild:BranchScopes:#text/0": [{
+ "PatchPending:#text/0": "packages/runtime-tags/src/__tests__/fixtures/persisted-await-in-content/template.marko_2_#text#0/await",
+ "PatchChild:BranchScopes:#text/0": {
+ "PatchText:#text/0": "b"
+ }
+ }, "packages/runtime-tags/src/__tests__/fixtures/persisted-await-in-content/template.marko_2*content", $, "packages/runtime-tags/src/__tests__/fixtures/persisted-await-in-content/template.marko_4*content"]
+ }
+ }
+}]
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-await-in-content/__snapshots__/patches.js b/packages/runtime-tags/src/__tests__/fixtures/persisted-await-in-content/__snapshots__/patches.js
new file mode 100644
index 00000000000..f44b807af5b
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-await-in-content/__snapshots__/patches.js
@@ -0,0 +1,13 @@
+// PATCH
+[`a2;D%; done
`, `a3;b%;`, `a0,loading`, {
+ cc: {
+ cAa: {
+ cAa: [{
+ pa: "a2",
+ cAa: {
+ ta: "b"
+ }
+ }, "a3", $, "a0"]
+ }
+ }
+}]
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-await-in-content/__snapshots__/render.debug.md b/packages/runtime-tags/src/__tests__/fixtures/persisted-await-in-content/__snapshots__/render.debug.md
new file mode 100644
index 00000000000..3179de2e4fb
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-await-in-content/__snapshots__/render.debug.md
@@ -0,0 +1,50 @@
+# Render `{"msg":"a","promise":{"value":2}}`
+```html
+
+
+```
+
+# Update
+```html
+
+
+```
+## Change
+```
+INSERT: #done::text("a")
+INSERT: #done::text@0 + ::text(" done")
+REMOVE: section > em
+INSERT: section > #done
+```
+
+# Update `{"msg":"b","promise":{"value":2}}`
+```html
+
+
+```
+## Change
+```
+UPDATE: #done::text@0 "a" => "b"
+```
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-await-in-content/__snapshots__/render.md b/packages/runtime-tags/src/__tests__/fixtures/persisted-await-in-content/__snapshots__/render.md
new file mode 100644
index 00000000000..3179de2e4fb
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-await-in-content/__snapshots__/render.md
@@ -0,0 +1,50 @@
+# Render `{"msg":"a","promise":{"value":2}}`
+```html
+
+
+```
+
+# Update
+```html
+
+
+```
+## Change
+```
+INSERT: #done::text("a")
+INSERT: #done::text@0 + ::text(" done")
+REMOVE: section > em
+INSERT: section > #done
+```
+
+# Update `{"msg":"b","promise":{"value":2}}`
+```html
+
+
+```
+## Change
+```
+UPDATE: #done::text@0 "a" => "b"
+```
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-await-in-content/__snapshots__/writes.debug.html b/packages/runtime-tags/src/__tests__/fixtures/persisted-await-in-content/__snapshots__/writes.debug.html
new file mode 100644
index 00000000000..802bce1729d
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-await-in-content/__snapshots__/writes.debug.html
@@ -0,0 +1,43 @@
+
+
+
+
+
+
+
+
+ a done
+
+
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-await-in-content/__snapshots__/writes.html b/packages/runtime-tags/src/__tests__/fixtures/persisted-await-in-content/__snapshots__/writes.html
new file mode 100644
index 00000000000..c0cb6a9c919
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-await-in-content/__snapshots__/writes.html
@@ -0,0 +1,39 @@
+
+
+
+
+
+
+
+
+ a done
+
+
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-await-in-content/sizes.json b/packages/runtime-tags/src/__tests__/fixtures/persisted-await-in-content/sizes.json
new file mode 100644
index 00000000000..f0a2eb0bf88
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-await-in-content/sizes.json
@@ -0,0 +1,16 @@
+{
+ "dom": {
+ "template.marko.page.mjs": {
+ "min": 13131,
+ "brotli": 5453
+ }
+ },
+ "html": {
+ "min": 1223,
+ "brotli": 675
+ },
+ "patch": {
+ "min": 132,
+ "brotli": 119
+ }
+}
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-await-in-content/tags/wrap/index.marko b/packages/runtime-tags/src/__tests__/fixtures/persisted-await-in-content/tags/wrap/index.marko
new file mode 100644
index 00000000000..e74490cbca8
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-await-in-content/tags/wrap/index.marko
@@ -0,0 +1 @@
+
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-await-in-content/template.marko b/packages/runtime-tags/src/__tests__/fixtures/persisted-await-in-content/template.marko
new file mode 100644
index 00000000000..3d5b594d59c
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-await-in-content/template.marko
@@ -0,0 +1,12 @@
+
+
+
+
+
+ ${input.msg} done
+
+ <@placeholder>
+ loading
+ @placeholder>
+
+
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-await-in-content/test.ts b/packages/runtime-tags/src/__tests__/fixtures/persisted-await-in-content/test.ts
new file mode 100644
index 00000000000..d4b7eb082cf
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-await-in-content/test.ts
@@ -0,0 +1,18 @@
+import type { TestConfig } from "../../main.test";
+import { flush, resolveAfter, wait } from "../../utils/resolve";
+
+// A server value rendered inside an `` body whose chain to the owner
+// crosses a non-branch content section: the boundary's marker always
+// resumes on persisted pages, so a patch pairs the settled body and updates
+// the text through the content chain.
+export const config: TestConfig = {
+ persisted: true,
+ steps: () => [
+ { msg: "a", promise: resolveAfter(2) },
+ wait,
+ flush,
+ { msg: "b", promise: resolveAfter(2) },
+ wait,
+ flush,
+ ],
+};
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-await-patch-while-pending/__snapshots__/dom.bundle.debug.js b/packages/runtime-tags/src/__tests__/fixtures/persisted-await-patch-while-pending/__snapshots__/dom.bundle.debug.js
new file mode 100644
index 00000000000..b0891ea71e8
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-await-patch-while-pending/__snapshots__/dom.bundle.debug.js
@@ -0,0 +1,32 @@
+// template.marko
+const $template = "";
+const $walks = " D l%c";
+const $placeholder_content = _content_resume("__tests__/template.marko_3*content", "loading");
+const $await_content__input_msg = /*@__PURE__*/ _closure_get("input_msg", ($scope) => _text($scope["#text/0"], $scope._._.input_msg), ($scope) => $scope._._, "__tests__/template.marko_2_input_msg#6/pending");
+const $await_content__setup = $await_content__input_msg;
+const $await_content = /*@__PURE__*/ _await_content("#text/0", " done
", "D%", $await_content__setup);
+const $try_content__await_promise = /*@__PURE__*/ _await_promise("#text/0");
+const $try_content__input_promise = /*@__PURE__*/ _closure_get("input_promise", ($scope) => $try_content__await_promise($scope, $scope._.input_promise));
+const $try_content__setup = ($scope) => {
+ $try_content__input_promise($scope);
+ $await_content($scope);
+};
+const $count = /*@__PURE__*/ _let("count/7", ($scope) => _text($scope["#text/1"], $scope.count));
+const $try = /*@__PURE__*/ _try("#text/2", "", "b%", $try_content__setup);
+const $setup__script = _script("__tests__/template.marko_0", ($scope) => _on($scope["#button/0"], "click", function() {
+ $count($scope, +$scope.count + 1);
+}));
+function $setup($scope) {
+ $count($scope, 0);
+ $try($scope, { placeholder: attrTag({ content: $placeholder_content($scope) }) });
+ $setup__script($scope);
+}
+const $input = ($scope, input) => {
+ $input_promise($scope, input.promise);
+ $input_msg($scope, input.msg);
+};
+const $input_promise__closure = /*@__PURE__*/ _closure($try_content__input_promise);
+const $input_promise = /*@__PURE__*/ _const("input_promise", $input_promise__closure);
+const $input_msg__closure = /*@__PURE__*/ _closure($await_content__input_msg);
+const $input_msg = /*@__PURE__*/ _const("input_msg", $input_msg__closure);
+var template_default = /*@__PURE__*/ _template("__tests__/template.marko", $template, $walks, $setup, $input);
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-await-patch-while-pending/__snapshots__/dom.bundle.js b/packages/runtime-tags/src/__tests__/fixtures/persisted-await-patch-while-pending/__snapshots__/dom.bundle.js
new file mode 100644
index 00000000000..308d2ad32fe
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-await-patch-while-pending/__snapshots__/dom.bundle.js
@@ -0,0 +1,6 @@
+// template.marko
+const $placeholder_content = _content_resume("a0", "loading");
+const $count = /*@__PURE__*/ _let(7, ($scope) => _text($scope.b, $scope.h));
+const $setup__script = _script("a5", ($scope) => _on($scope.a, "click", function() {
+ $count($scope, +$scope.h + 1);
+}));
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-await-patch-while-pending/__snapshots__/html.bundle.debug.js b/packages/runtime-tags/src/__tests__/fixtures/persisted-await-patch-while-pending/__snapshots__/html.bundle.debug.js
new file mode 100644
index 00000000000..f98200a93bc
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-await-patch-while-pending/__snapshots__/html.bundle.debug.js
@@ -0,0 +1,42 @@
+// template.marko
+const $template = "";
+const $walks = " D l%c";
+_shells({
+ "__tests__/template.marko_3*content": "__tests__/template.marko_3*content,loading",
+ "__tests__/template.marko_2*content": "__tests__/template.marko_2*content;D%; done
",
+ "__tests__/template.marko_1_#text#0/await": "__tests__/template.marko_1_#text#0/await;D%; done
",
+ "__tests__/template.marko_1*content": "__tests__/template.marko_1*content;b%;",
+ "__tests__/template.marko": "__tests__/template.marko !__tests__/template.marko_0; D l%;"
+});
+var template_default = _template_persisted("__tests__/template.marko", (input) => {
+ const $scope0_owned = _persisted_ownership(), $scope0_reason = _persisted_reason();
+ const $scope0_id = _scope_id();
+ const $input_msg__closures = new Set();
+ const $input_promise__closures = new Set();
+ let count = 0;
+ _html(`${_el_resume($scope0_id, "#button/0")}`);
+ _try($scope0_id, "#text/2", _content_resume("__tests__/template.marko_1*content", () => {
+ const $scope1_id = _scope_id();
+ const $scope1_reason = _persisted_reason();
+ _await($scope1_id, "#text/0", input.promise, () => {
+ const $scope2_id = _scope_id();
+ _script($scope2_id, "__tests__/template.marko_2_input_msg#6/pending");
+ _html(`${_patch_text($scope2_id, "#text/0", input.msg, void 0, $scope0_owned, 2)} done
`);
+ _scope($scope2_id, { _: _scope_with_id($scope1_id) }, "__tests__/template.marko", "4:4");
+ _resume_branch($scope2_id);
+ }, 1, "__tests__/template.marko_1_#text#0/await", 1);
+ $scope0_reason && _subscribe(_source_if($scope0_reason, 1) && $input_promise__closures, _scope($scope1_id, { _: _scope_with_id($scope0_id) }, "__tests__/template.marko", "3:2"));
+ _resume_branch($scope1_id);
+ }, $scope0_id), { placeholder: attrTag({ content: _content_record("__tests__/template.marko_3*content", $scope0_id) }) }, 1);
+ _script($scope0_id, "__tests__/template.marko_0");
+ $scope0_reason && _scope($scope0_id, {
+ input_msg: input.msg,
+ count,
+ "ClosureScopes:input_msg": $input_msg__closures,
+ "ClosureScopes:input_promise": $input_promise__closures
+ }, "__tests__/template.marko", 0, {
+ input_msg: ["input.msg"],
+ count: "1:6"
+ });
+ _resume_branch($scope0_id);
+}, 1, 0);
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-await-patch-while-pending/__snapshots__/html.bundle.js b/packages/runtime-tags/src/__tests__/fixtures/persisted-await-patch-while-pending/__snapshots__/html.bundle.js
new file mode 100644
index 00000000000..4f9a7d04ba9
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-await-patch-while-pending/__snapshots__/html.bundle.js
@@ -0,0 +1,37 @@
+// template.marko
+_shells({
+ a0: "a0,loading",
+ a1: "a1;D%; done
",
+ a2: "a2;D%; done
",
+ a3: "a3;b%;",
+ a: "a !a5; D l%;"
+});
+var template_default = _template_persisted("a", (input) => {
+ const $scope0_owned = _persisted_ownership(), $scope0_reason = _persisted_reason();
+ const $scope0_id = _scope_id();
+ const $input_msg__closures = /* @__PURE__ */ new Set();
+ const $input_promise__closures = /* @__PURE__ */ new Set();
+ let count = 0;
+ _html(`${_el_resume($scope0_id, "a")}`);
+ _try($scope0_id, "c", _content_resume("a3", () => {
+ const $scope1_id = _scope_id();
+ _persisted_reason();
+ _await($scope1_id, "a", input.promise, () => {
+ const $scope2_id = _scope_id();
+ _script($scope2_id, "a4");
+ _html(`${_patch_text($scope2_id, "a", input.msg, void 0, $scope0_owned, 2)} done
`);
+ _scope($scope2_id, { _: _scope_with_id($scope1_id) });
+ _resume_branch($scope2_id);
+ }, 1, "a2", 1);
+ $scope0_reason && _subscribe(_source_if($scope0_reason, 1) && $input_promise__closures, _scope($scope1_id, { _: _scope_with_id($scope0_id) }));
+ _resume_branch($scope1_id);
+ }, $scope0_id), { placeholder: attrTag({ content: _content_record("a0", $scope0_id) }) }, 1);
+ _script($scope0_id, "a5");
+ $scope0_reason && _scope($scope0_id, {
+ g: input.msg,
+ h: count,
+ j: $input_msg__closures,
+ i: $input_promise__closures
+ });
+ _resume_branch($scope0_id);
+}, 1, 0);
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-await-patch-while-pending/__snapshots__/patches.debug.js b/packages/runtime-tags/src/__tests__/fixtures/persisted-await-patch-while-pending/__snapshots__/patches.debug.js
new file mode 100644
index 00000000000..750c5867e3b
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-await-patch-while-pending/__snapshots__/patches.debug.js
@@ -0,0 +1,9 @@
+// PATCH
+{
+ "PatchChild:BranchScopes:#text/2": {
+ "PatchPending:#text/0": 1,
+ "PatchChild:BranchScopes:#text/0": {
+ "PatchText:#text/0": "b"
+ }
+ }
+}
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-await-patch-while-pending/__snapshots__/patches.js b/packages/runtime-tags/src/__tests__/fixtures/persisted-await-patch-while-pending/__snapshots__/patches.js
new file mode 100644
index 00000000000..3ed27b3c3dc
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-await-patch-while-pending/__snapshots__/patches.js
@@ -0,0 +1,9 @@
+// PATCH
+{
+ cAc: {
+ pa: 1,
+ cAa: {
+ ta: "b"
+ }
+ }
+}
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-await-patch-while-pending/__snapshots__/render.debug.md b/packages/runtime-tags/src/__tests__/fixtures/persisted-await-patch-while-pending/__snapshots__/render.debug.md
new file mode 100644
index 00000000000..d34b7a9cc32
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-await-patch-while-pending/__snapshots__/render.debug.md
@@ -0,0 +1,41 @@
+# Render `{"msg":"a","promise":{"value":2}}`
+```html
+
+
+ loading
+
+```
+
+# Update `{"msg":"b","promise":{"value":2}}`
+```html
+
+
+ loading
+
+```
+## Change
+```
+INSERT: button + em
+REMOVE: em + em
+```
+
+## Patch rejected (navigate)
+
+# Update
+```html
+
+
+ loading
+
+```
+## Change
+```
+INSERT: #done::text("a")
+INSERT: #done::text@0 + ::text(" done")
+```
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-await-patch-while-pending/__snapshots__/render.md b/packages/runtime-tags/src/__tests__/fixtures/persisted-await-patch-while-pending/__snapshots__/render.md
new file mode 100644
index 00000000000..d34b7a9cc32
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-await-patch-while-pending/__snapshots__/render.md
@@ -0,0 +1,41 @@
+# Render `{"msg":"a","promise":{"value":2}}`
+```html
+
+
+ loading
+
+```
+
+# Update `{"msg":"b","promise":{"value":2}}`
+```html
+
+
+ loading
+
+```
+## Change
+```
+INSERT: button + em
+REMOVE: em + em
+```
+
+## Patch rejected (navigate)
+
+# Update
+```html
+
+
+ loading
+
+```
+## Change
+```
+INSERT: #done::text("a")
+INSERT: #done::text@0 + ::text(" done")
+```
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-await-patch-while-pending/__snapshots__/writes.debug.html b/packages/runtime-tags/src/__tests__/fixtures/persisted-await-patch-while-pending/__snapshots__/writes.debug.html
new file mode 100644
index 00000000000..ad59b0ad09a
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-await-patch-while-pending/__snapshots__/writes.debug.html
@@ -0,0 +1,38 @@
+loading
+
+
+
+
+
+
+ a done
+
+
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-await-patch-while-pending/__snapshots__/writes.html b/packages/runtime-tags/src/__tests__/fixtures/persisted-await-patch-while-pending/__snapshots__/writes.html
new file mode 100644
index 00000000000..caca99e1a12
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-await-patch-while-pending/__snapshots__/writes.html
@@ -0,0 +1,32 @@
+loading
+
+
+
+
+
+
+ a done
+
+
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-await-patch-while-pending/sizes.json b/packages/runtime-tags/src/__tests__/fixtures/persisted-await-patch-while-pending/sizes.json
new file mode 100644
index 00000000000..e66fc6ab527
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-await-patch-while-pending/sizes.json
@@ -0,0 +1,16 @@
+{
+ "dom": {
+ "template.marko.page.mjs": {
+ "min": 10015,
+ "brotli": 4296
+ }
+ },
+ "html": {
+ "min": 1171,
+ "brotli": 666
+ },
+ "patch": {
+ "min": 26,
+ "brotli": 30
+ }
+}
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-await-patch-while-pending/template.marko b/packages/runtime-tags/src/__tests__/fixtures/persisted-await-patch-while-pending/template.marko
new file mode 100644
index 00000000000..7f277977203
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-await-patch-while-pending/template.marko
@@ -0,0 +1,10 @@
+
+
+
+
+ ${input.msg} done
+
+ <@placeholder>
+ loading
+ @placeholder>
+
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-await-patch-while-pending/test.ts b/packages/runtime-tags/src/__tests__/fixtures/persisted-await-patch-while-pending/test.ts
new file mode 100644
index 00000000000..d653ef58b30
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-await-patch-while-pending/test.ts
@@ -0,0 +1,16 @@
+import type { TestConfig } from "../../main.test";
+import { flush, resolveAfter, wait } from "../../utils/resolve";
+
+// A patch arriving while the boundary's initial stream is still pending:
+// the construct's marker anchor has not streamed, so the frame rejects
+// (safe fallback to navigation) — pinned until mid-stream pairing lands.
+export const config: TestConfig = {
+ persisted: true,
+ expect_rejection: true,
+ steps: () => [
+ { msg: "a", promise: resolveAfter(2) },
+ { msg: "b", promise: resolveAfter(2) },
+ wait,
+ flush,
+ ],
+};
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-child-boundary/__snapshots__/html.bundle.debug.js b/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-child-boundary/__snapshots__/html.bundle.debug.js
index b5e18c65834..7fc16a9daac 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-child-boundary/__snapshots__/html.bundle.debug.js
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-child-boundary/__snapshots__/html.bundle.debug.js
@@ -14,7 +14,7 @@ var loader_default = _template_persisted("__tests__/tags/loader.marko", (input)
const $scope1_id = _scope_id();
_html(_patch_text($scope1_id, "#text/0", v, void 0, $scope0_owned, 0));
_scope($scope1_id, {}, "__tests__/tags/loader.marko", "1:18");
- }, void 0, "__tests__/tags/loader.marko_0_#text#0/await", 1);
+ }, 1, "__tests__/tags/loader.marko_0_#text#0/await", 1);
_html("");
}, 0, 0);
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-child-boundary/__snapshots__/html.bundle.js b/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-child-boundary/__snapshots__/html.bundle.js
index c22207d98b8..553c9fec345 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-child-boundary/__snapshots__/html.bundle.js
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-child-boundary/__snapshots__/html.bundle.js
@@ -14,7 +14,7 @@ var loader_default = _template_persisted("b", (input) => {
const $scope1_id = _scope_id();
_html(_patch_text($scope1_id, "a", v, void 0, $scope0_owned, 0));
_scope($scope1_id, {});
- }, void 0, "b1", 1);
+ }, 1, "b1", 1);
_html("");
}, 0, 0);
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-child-boundary/sizes.json b/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-child-boundary/sizes.json
index 3056c8701c7..dbc6ccb8b64 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-child-boundary/sizes.json
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-child-boundary/sizes.json
@@ -1,8 +1,8 @@
{
"dom": {
"template.marko.page.mjs": {
- "min": 9178,
- "brotli": 3946
+ "min": 9141,
+ "brotli": 3936
}
},
"html": {
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-child-const-paired/sizes.json b/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-child-const-paired/sizes.json
index f34c937d8ab..970bbc9ba42 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-child-const-paired/sizes.json
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-child-const-paired/sizes.json
@@ -1,8 +1,8 @@
{
"dom": {
"template.marko.page.mjs": {
- "min": 6761,
- "brotli": 3052
+ "min": 6743,
+ "brotli": 3046
}
},
"html": {
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-child-const-spread/__snapshots__/html.bundle.debug.js b/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-child-const-spread/__snapshots__/html.bundle.debug.js
index 895fc8ef16a..942d74cae1d 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-child-const-spread/__snapshots__/html.bundle.debug.js
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-child-const-spread/__snapshots__/html.bundle.debug.js
@@ -5,7 +5,7 @@ _shells({ "__tests__/tags/card/index.marko": "__tests__/tags/card/index.marko !_
var card_default = _template_persisted("__tests__/tags/card/index.marko", (input) => {
const $scope0_owned = _persisted_ownership(), $scope0_reason = _persisted_reason();
const $scope0_id = _scope_id();
- _html(`${_patch_text($scope0_id, "#text/1", input.title, void 0, $scope0_owned, 1)}
${_el_resume($scope0_id, "#div/0")}`);
+ _html(`${_patch_text($scope0_id, "#text/1", input.title, void 0, $scope0_owned, 1)}
${_el_resume($scope0_id, "#div/0")}`);
_script($scope0_id, "__tests__/tags/card/index.marko_0_input_attrs#4");
$scope0_reason && _scope($scope0_id, {}, "__tests__/tags/card/index.marko", 0, { "EventAttributes:#div/0": ["...input.attrs", "1:9"] });
}, 0, 0);
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-child-const-spread/__snapshots__/html.bundle.js b/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-child-const-spread/__snapshots__/html.bundle.js
index be07eae1c18..221bd8e055a 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-child-const-spread/__snapshots__/html.bundle.js
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-child-const-spread/__snapshots__/html.bundle.js
@@ -5,7 +5,7 @@ _shells({ b: "b !b0; D ;
" });
var card_default = _template_persisted("b", (input) => {
const $scope0_owned = _persisted_ownership(), $scope0_reason = _persisted_reason();
const $scope0_id = _scope_id();
- _html(`${_patch_text($scope0_id, "b", input.title, void 0, $scope0_owned, 1)}
${_el_resume($scope0_id, "a")}`);
+ _html(`${_patch_text($scope0_id, "b", input.title, void 0, $scope0_owned, 1)}
${_el_resume($scope0_id, "a")}`);
_script($scope0_id, "b0");
$scope0_reason && _scope($scope0_id, {});
}, 0, 0);
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-child-const-spread/sizes.json b/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-child-const-spread/sizes.json
index 9924d2551df..e78422c06f2 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-child-const-spread/sizes.json
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-child-const-spread/sizes.json
@@ -1,8 +1,8 @@
{
"dom": {
"template.marko.page.mjs": {
- "min": 9359,
- "brotli": 4007
+ "min": 9350,
+ "brotli": 4013
}
},
"html": {
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-child-const/sizes.json b/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-child-const/sizes.json
index 8ce348486fe..fc8b7a22dd2 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-child-const/sizes.json
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-child-const/sizes.json
@@ -1,8 +1,8 @@
{
"dom": {
"template.marko.page.mjs": {
- "min": 6582,
- "brotli": 2984
+ "min": 6564,
+ "brotli": 2966
}
},
"html": {
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-child-nested/sizes.json b/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-child-nested/sizes.json
index 0ad4a6af0c4..25bf01a6517 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-child-nested/sizes.json
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-child-nested/sizes.json
@@ -2,8 +2,8 @@
"dom": {
"template.marko.page.mjs": {
"total": {
- "min": 8753,
- "brotli": 3859
+ "min": 8714,
+ "brotli": 3849
},
"files": {
"tags/badge.marko": 185,
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-child-state/sizes.json b/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-child-state/sizes.json
index eaa35f559c2..00ad7f24ded 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-child-state/sizes.json
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-child-state/sizes.json
@@ -1,8 +1,8 @@
{
"dom": {
"template.marko.page.mjs": {
- "min": 7850,
- "brotli": 3486
+ "min": 7811,
+ "brotli": 3478
}
},
"html": {
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-child-tag/sizes.json b/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-child-tag/sizes.json
index fd8a0e4a779..a745e865a76 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-child-tag/sizes.json
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-child-tag/sizes.json
@@ -1,8 +1,8 @@
{
"dom": {
"template.marko.page.mjs": {
- "min": 7384,
- "brotli": 3329
+ "min": 7366,
+ "brotli": 3318
}
},
"html": {
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-child-var/sizes.json b/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-child-var/sizes.json
index 54d3a181406..098b924c7cd 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-child-var/sizes.json
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-child-var/sizes.json
@@ -2,8 +2,8 @@
"dom": {
"template.marko.page.mjs": {
"total": {
- "min": 7678,
- "brotli": 3445
+ "min": 7660,
+ "brotli": 3442
},
"files": {
"tags/box.marko": 73,
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-client-arrow-curried/sizes.json b/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-client-arrow-curried/sizes.json
index e7919c024be..b6212982706 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-client-arrow-curried/sizes.json
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-client-arrow-curried/sizes.json
@@ -1,8 +1,8 @@
{
"dom": {
"template.marko.page.mjs": {
- "min": 7661,
- "brotli": 3435
+ "min": 7632,
+ "brotli": 3427
}
},
"html": {
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-client-arrow-launder/sizes.json b/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-client-arrow-launder/sizes.json
index 8e806f2fb65..bc5f023f176 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-client-arrow-launder/sizes.json
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-client-arrow-launder/sizes.json
@@ -1,8 +1,8 @@
{
"dom": {
"template.marko.page.mjs": {
- "min": 7412,
- "brotli": 3322
+ "min": 7390,
+ "brotli": 3327
}
},
"html": {
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-client-arrow/sizes.json b/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-client-arrow/sizes.json
index 68f57b64efb..ef813578bce 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-client-arrow/sizes.json
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-client-arrow/sizes.json
@@ -1,8 +1,8 @@
{
"dom": {
"template.marko.page.mjs": {
- "min": 7387,
- "brotli": 3317
+ "min": 7365,
+ "brotli": 3309
}
},
"html": {
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-client-both-arms/sizes.json b/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-client-both-arms/sizes.json
index fa91a9f9011..b00a0879700 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-client-both-arms/sizes.json
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-client-both-arms/sizes.json
@@ -1,8 +1,8 @@
{
"dom": {
"template.marko.page.mjs": {
- "min": 7407,
- "brotli": 3323
+ "min": 7385,
+ "brotli": 3311
}
},
"html": {
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-client-child/sizes.json b/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-client-child/sizes.json
index 9907680be6a..90206920403 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-client-child/sizes.json
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-client-child/sizes.json
@@ -2,8 +2,8 @@
"dom": {
"template.marko.page.mjs": {
"total": {
- "min": 7442,
- "brotli": 3345
+ "min": 7420,
+ "brotli": 3327
},
"files": {
"tags/widget/index.marko": 155,
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-client-closure-adopt/sizes.json b/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-client-closure-adopt/sizes.json
index d28ac48f491..f03e9a44eb1 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-client-closure-adopt/sizes.json
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-client-closure-adopt/sizes.json
@@ -1,8 +1,8 @@
{
"dom": {
"template.marko.page.mjs": {
- "min": 8350,
- "brotli": 3687
+ "min": 8327,
+ "brotli": 3681
}
},
"html": {
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-client-closure-dual/sizes.json b/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-client-closure-dual/sizes.json
index d8f03f486bb..d90cd290536 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-client-closure-dual/sizes.json
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-client-closure-dual/sizes.json
@@ -1,8 +1,8 @@
{
"dom": {
"template.marko.page.mjs": {
- "min": 8038,
- "brotli": 3573
+ "min": 8016,
+ "brotli": 3559
}
},
"html": {
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-client-closure-tree/sizes.json b/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-client-closure-tree/sizes.json
index 75cf5e62767..63d9e1f38eb 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-client-closure-tree/sizes.json
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-client-closure-tree/sizes.json
@@ -2,8 +2,8 @@
"dom": {
"template.marko.page.mjs": {
"total": {
- "min": 8139,
- "brotli": 3622
+ "min": 8117,
+ "brotli": 3604
},
"files": {
"tags/note/index.marko": 155,
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-client-closure-tri/sizes.json b/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-client-closure-tri/sizes.json
index 95b821da2c2..b6d35921125 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-client-closure-tri/sizes.json
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-client-closure-tri/sizes.json
@@ -1,8 +1,8 @@
{
"dom": {
"template.marko.page.mjs": {
- "min": 8350,
- "brotli": 3687
+ "min": 8327,
+ "brotli": 3681
}
},
"html": {
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-client-else/sizes.json b/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-client-else/sizes.json
index 56e5923227a..efaf1728ad2 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-client-else/sizes.json
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-client-else/sizes.json
@@ -1,8 +1,8 @@
{
"dom": {
"template.marko.page.mjs": {
- "min": 7441,
- "brotli": 3335
+ "min": 7419,
+ "brotli": 3327
}
},
"html": {
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-client-fn-fill/sizes.json b/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-client-fn-fill/sizes.json
index e3ef6f237de..5f49017374b 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-client-fn-fill/sizes.json
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-client-fn-fill/sizes.json
@@ -1,8 +1,8 @@
{
"dom": {
"template.marko.page.mjs": {
- "min": 7635,
- "brotli": 3425
+ "min": 7606,
+ "brotli": 3414
}
},
"html": {
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-client-for/sizes.json b/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-client-for/sizes.json
index e92bdc1010a..5895f296cd6 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-client-for/sizes.json
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-client-for/sizes.json
@@ -1,8 +1,8 @@
{
"dom": {
"template.marko.page.mjs": {
- "min": 8739,
- "brotli": 3922
+ "min": 8717,
+ "brotli": 3917
}
},
"html": {
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-client-global/__snapshots__/dom.bundle.debug.js b/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-client-global/__snapshots__/dom.bundle.debug.js
new file mode 100644
index 00000000000..7b010263ebb
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-client-global/__snapshots__/dom.bundle.debug.js
@@ -0,0 +1,15 @@
+// template.marko
+const $template = "";
+const $walks = "D%b l";
+const $if_content__$global_brand = /*@__PURE__*/ _fill_join("__tests__/template.marko0", "$global_brand", /*@__PURE__*/ _if_closure("#text/0", 0, ($scope) => _text($scope["#text/0"], $scope._.$global_brand)));
+const $if_content__setup = $if_content__$global_brand;
+const $if = /*@__PURE__*/ _if("#text/0", "
", "D ", $if_content__setup);
+const $count = /*@__PURE__*/ _let("count/2", ($scope) => $if($scope, $scope.count > 1 ? 0 : 1));
+const $setup__script = _script("__tests__/template.marko_0", ($scope) => _on($scope["#button/1"], "click", function() {
+ $count($scope, +$scope.count + 1);
+}));
+function $setup($scope) {
+ $count($scope, 0);
+ $setup__script($scope);
+}
+var template_default = /*@__PURE__*/ _template("__tests__/template.marko", $template, $walks, $setup);
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-client-global/__snapshots__/dom.bundle.js b/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-client-global/__snapshots__/dom.bundle.js
new file mode 100644
index 00000000000..2ec72857d5e
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-client-global/__snapshots__/dom.bundle.js
@@ -0,0 +1,7 @@
+// template.marko
+const $if_content__setup = /* @__PURE__ */ _fill_join("a0", 3, /*@__PURE__*/ _if_closure(0, 0, ($scope) => _text($scope.a, $scope._.d)));
+const $if = /*@__PURE__*/ _if(0, "
", "D ", $if_content__setup);
+const $count = /*@__PURE__*/ _let(2, ($scope) => $if($scope, $scope.c > 1 ? 0 : 1));
+const $setup__script = _script("a0", ($scope) => _on($scope.b, "click", function() {
+ $count($scope, +$scope.c + 1);
+}));
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-client-global/__snapshots__/error-compile-dom.debug.txt b/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-client-global/__snapshots__/error-compile-dom.debug.txt
deleted file mode 100644
index 0e52a2bd8ad..00000000000
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-client-global/__snapshots__/error-compile-dom.debug.txt
+++ /dev/null
@@ -1,9 +0,0 @@
-
- at packages/runtime-tags/src/__tests__/fixtures/persisted-branch-client-global/template.marko:4:8
- 2 |
- 3 | 1)>
- > 4 | ${$global.brand}
- | ^^^^^^^^^^^^^^^^ Persisted templates cannot patch this faithfully yet: `$global` cannot be read inside client-owned structure.
- 5 |
- 6 |
- 7 |
\ No newline at end of file
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-client-global/__snapshots__/error-compile-dom.txt b/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-client-global/__snapshots__/error-compile-dom.txt
deleted file mode 100644
index 0e52a2bd8ad..00000000000
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-client-global/__snapshots__/error-compile-dom.txt
+++ /dev/null
@@ -1,9 +0,0 @@
-
- at packages/runtime-tags/src/__tests__/fixtures/persisted-branch-client-global/template.marko:4:8
- 2 |
- 3 | 1)>
- > 4 | ${$global.brand}
- | ^^^^^^^^^^^^^^^^ Persisted templates cannot patch this faithfully yet: `$global` cannot be read inside client-owned structure.
- 5 |
- 6 |
- 7 |
\ No newline at end of file
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-client-global/__snapshots__/error-compile-html.debug.txt b/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-client-global/__snapshots__/error-compile-html.debug.txt
deleted file mode 100644
index 0e52a2bd8ad..00000000000
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-client-global/__snapshots__/error-compile-html.debug.txt
+++ /dev/null
@@ -1,9 +0,0 @@
-
- at packages/runtime-tags/src/__tests__/fixtures/persisted-branch-client-global/template.marko:4:8
- 2 |
- 3 | 1)>
- > 4 | ${$global.brand}
- | ^^^^^^^^^^^^^^^^ Persisted templates cannot patch this faithfully yet: `$global` cannot be read inside client-owned structure.
- 5 |
- 6 |
- 7 |
\ No newline at end of file
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-client-global/__snapshots__/error-compile-html.txt b/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-client-global/__snapshots__/error-compile-html.txt
deleted file mode 100644
index 0e52a2bd8ad..00000000000
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-client-global/__snapshots__/error-compile-html.txt
+++ /dev/null
@@ -1,9 +0,0 @@
-
- at packages/runtime-tags/src/__tests__/fixtures/persisted-branch-client-global/template.marko:4:8
- 2 |
- 3 | 1)>
- > 4 | ${$global.brand}
- | ^^^^^^^^^^^^^^^^ Persisted templates cannot patch this faithfully yet: `$global` cannot be read inside client-owned structure.
- 5 |
- 6 |
- 7 |
\ No newline at end of file
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-client-global/__snapshots__/html.bundle.debug.js b/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-client-global/__snapshots__/html.bundle.debug.js
new file mode 100644
index 00000000000..fef48618be9
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-client-global/__snapshots__/html.bundle.debug.js
@@ -0,0 +1,29 @@
+// template.marko
+const $template = "";
+const $walks = "D%b l";
+_shells({ "__tests__/template.marko": "__tests__/template.marko !__tests__/template.marko_0;D%b ;" });
+var template_default = _template_persisted("__tests__/template.marko", (input) => {
+ const $scope0_reason = _persisted_reason();
+ const $scope0_id = _scope_id();
+ const $global$1 = $global();
+ let count = 0;
+ _html("");
+ if ($scope0_reason) _if(() => {
+ if (count > 1) {
+ const $scope1_id = _scope_id();
+ _html(`${_text_resume($scope1_id, "#text/0", $global$1.brand)}
`);
+ _scope($scope1_id, {}, "__tests__/template.marko", "3:4");
+ return 0;
+ }
+ }, $scope0_id, "#text/0", 1, 1, 1, 0, 1);
+ _html(`${_el_resume($scope0_id, "#button/1")}`);
+ _script($scope0_id, "__tests__/template.marko_0");
+ $scope0_reason ? _scope($scope0_id, {
+ count,
+ $global_brand: $global$1?.brand
+ }, "__tests__/template.marko", 0, {
+ count: "1:6",
+ $global_brand: ["$global.brand"]
+ }) : _patch_value($scope0_id, "__tests__/template.marko0", $global$1?.brand);
+ _resume_branch($scope0_id);
+}, 1, 1);
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-client-global/__snapshots__/html.bundle.js b/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-client-global/__snapshots__/html.bundle.js
new file mode 100644
index 00000000000..8917c63de8b
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-client-global/__snapshots__/html.bundle.js
@@ -0,0 +1,17 @@
+// template.marko
+_shells({ a: "a !a0;D%b ;" });
+var template_default = _template_persisted("a", (input) => {
+ const $scope0_reason = _persisted_reason();
+ const $scope0_id = _scope_id();
+ const $global$1 = $global();
+ let count = 0;
+ _html("");
+ if ($scope0_reason) _if(() => {}, $scope0_id, "a", 1, 1, 1, 0, 1);
+ _html(`${_el_resume($scope0_id, "b")}`);
+ _script($scope0_id, "a0");
+ $scope0_reason ? _scope($scope0_id, {
+ c: count,
+ d: $global$1?.brand
+ }) : _patch_value($scope0_id, "a0", $global$1?.brand);
+ _resume_branch($scope0_id);
+}, 1, 1);
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-client-global/__snapshots__/patches.debug.js b/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-client-global/__snapshots__/patches.debug.js
new file mode 100644
index 00000000000..7378221e868
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-client-global/__snapshots__/patches.debug.js
@@ -0,0 +1,4 @@
+// PATCH
+{
+ "PatchValue:packages/runtime-tags/src/__tests__/fixtures/persisted-branch-client-global/template.marko0": "bmce"
+}
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-client-global/__snapshots__/patches.js b/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-client-global/__snapshots__/patches.js
new file mode 100644
index 00000000000..5014312e4f3
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-client-global/__snapshots__/patches.js
@@ -0,0 +1,4 @@
+// PATCH
+{
+ va0: "bmce"
+}
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-client-global/__snapshots__/render.debug.md b/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-client-global/__snapshots__/render.debug.md
new file mode 100644
index 00000000000..b5c127d1ae1
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-client-global/__snapshots__/render.debug.md
@@ -0,0 +1,35 @@
+# Render `{"$global":{"brand":"acme"}}`
+```html
+
+
+
+```
+
+# Update
+```js
+document.querySelector("button").click();
+```
+
+# Update `{"$global":{"brand":"bmce"}}`
+
+# Update
+```js
+document.querySelector("button").click();
+```
+```html
+
+
+ bmce
+
+
+
+```
+## Change
+```
+INSERT: main > p
+UPDATE: main > p::text " " => "bmce"
+```
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-client-global/__snapshots__/render.md b/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-client-global/__snapshots__/render.md
new file mode 100644
index 00000000000..b5c127d1ae1
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-client-global/__snapshots__/render.md
@@ -0,0 +1,35 @@
+# Render `{"$global":{"brand":"acme"}}`
+```html
+
+
+
+```
+
+# Update
+```js
+document.querySelector("button").click();
+```
+
+# Update `{"$global":{"brand":"bmce"}}`
+
+# Update
+```js
+document.querySelector("button").click();
+```
+```html
+
+
+ bmce
+
+
+
+```
+## Change
+```
+INSERT: main > p
+UPDATE: main > p::text " " => "bmce"
+```
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-client-global/__snapshots__/writes.debug.html b/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-client-global/__snapshots__/writes.debug.html
new file mode 100644
index 00000000000..414d38f7fc9
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-client-global/__snapshots__/writes.debug.html
@@ -0,0 +1,11 @@
+
+
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-client-global/__snapshots__/writes.html b/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-client-global/__snapshots__/writes.html
new file mode 100644
index 00000000000..ac9cdfdcc3b
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-client-global/__snapshots__/writes.html
@@ -0,0 +1,9 @@
+
+
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-client-global/sizes.json b/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-client-global/sizes.json
new file mode 100644
index 00000000000..ba967917cdb
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-client-global/sizes.json
@@ -0,0 +1,16 @@
+{
+ "dom": {
+ "template.marko.page.mjs": {
+ "min": 7342,
+ "brotli": 3306
+ }
+ },
+ "html": {
+ "min": 374,
+ "brotli": 261
+ },
+ "patch": {
+ "min": 13,
+ "brotli": 17
+ }
+}
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-client-global/test.ts b/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-client-global/test.ts
index 3e12946ec38..758f533cf14 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-client-global/test.ts
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-client-global/test.ts
@@ -1,8 +1,18 @@
import type { TestConfig } from "../../main.test";
-// A `$global` hole inside client-owned structure has no delivery channel:
-// its capture would ride the branch body patch renders skip.
+const inc = (document: Document) => {
+ document.querySelector("button")!.click();
+};
+
+// A `$global` hole inside client-owned structure: the read hoists into a
+// root derivation delivered as a fill, so the client-revealed branch
+// renders the latest patched brand.
export const config: TestConfig = {
- error_compiler: true,
persisted: true,
+ steps: [
+ { $global: { brand: "acme" } },
+ inc,
+ { $global: { brand: "bmce" } },
+ inc,
+ ],
};
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-client-handler-global/__snapshots__/dom.bundle.debug.js b/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-client-handler-global/__snapshots__/dom.bundle.debug.js
new file mode 100644
index 00000000000..9b6731c0bc0
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-client-handler-global/__snapshots__/dom.bundle.debug.js
@@ -0,0 +1,18 @@
+// template.marko
+const $template = "";
+const $walks = "D%b l";
+const $if_content__setup__script = _script("__tests__/template.marko_1", ($scope) => _on($scope["#button/0"], "click", function() {
+ document.querySelector("main").dataset.title = $scope._.title;
+}));
+const $if_content__setup = $if_content__setup__script;
+const $title = /*@__PURE__*/ _const("title");
+const $if = /*@__PURE__*/ _if("#text/0", "", " ", $if_content__setup);
+const $show = /*@__PURE__*/ _let("show/4", ($scope) => $if($scope, $scope.show ? 0 : 1));
+const $setup__script = _script("__tests__/template.marko_0", ($scope) => _on($scope["#button/1"], "click", function() {
+ $show($scope, true);
+}));
+function $setup($scope) {
+ $show($scope, false);
+ $setup__script($scope);
+}
+var template_default = /*@__PURE__*/ _template("__tests__/template.marko", $template, $walks, $setup);
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-client-handler-global/__snapshots__/dom.bundle.js b/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-client-handler-global/__snapshots__/dom.bundle.js
new file mode 100644
index 00000000000..e09fb9ed45c
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-client-handler-global/__snapshots__/dom.bundle.js
@@ -0,0 +1,9 @@
+// template.marko
+const $if_content__setup = _script("a0", ($scope) => _on($scope.a, "click", function() {
+ document.querySelector("main").dataset.title = $scope._.c;
+}));
+const $if = /*@__PURE__*/ _if(0, "", " ", $if_content__setup);
+const $show = /*@__PURE__*/ _let(4, ($scope) => $if($scope, $scope.e ? 0 : 1));
+const $setup__script = _script("a1", ($scope) => _on($scope.b, "click", function() {
+ $show($scope, true);
+}));
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-client-handler-global/__snapshots__/error-compile-dom.debug.txt b/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-client-handler-global/__snapshots__/error-compile-dom.debug.txt
deleted file mode 100644
index 38803906353..00000000000
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-client-handler-global/__snapshots__/error-compile-dom.debug.txt
+++ /dev/null
@@ -1,9 +0,0 @@
-
- at packages/runtime-tags/src/__tests__/fixtures/persisted-branch-client-handler-global/template.marko:5:18
- 3 |
- 4 |
- > 5 | read
- 8 |
\ No newline at end of file
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-client-handler-global/__snapshots__/error-compile-dom.txt b/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-client-handler-global/__snapshots__/error-compile-dom.txt
deleted file mode 100644
index 38803906353..00000000000
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-client-handler-global/__snapshots__/error-compile-dom.txt
+++ /dev/null
@@ -1,9 +0,0 @@
-
- at packages/runtime-tags/src/__tests__/fixtures/persisted-branch-client-handler-global/template.marko:5:18
- 3 |
- 4 |
- > 5 | read
- 8 |
\ No newline at end of file
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-client-handler-global/__snapshots__/error-compile-html.debug.txt b/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-client-handler-global/__snapshots__/error-compile-html.debug.txt
deleted file mode 100644
index 38803906353..00000000000
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-client-handler-global/__snapshots__/error-compile-html.debug.txt
+++ /dev/null
@@ -1,9 +0,0 @@
-
- at packages/runtime-tags/src/__tests__/fixtures/persisted-branch-client-handler-global/template.marko:5:18
- 3 |
- 4 |
- > 5 | read
- 8 |
\ No newline at end of file
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-client-handler-global/__snapshots__/error-compile-html.txt b/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-client-handler-global/__snapshots__/error-compile-html.txt
deleted file mode 100644
index 38803906353..00000000000
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-client-handler-global/__snapshots__/error-compile-html.txt
+++ /dev/null
@@ -1,9 +0,0 @@
-
- at packages/runtime-tags/src/__tests__/fixtures/persisted-branch-client-handler-global/template.marko:5:18
- 3 |
- 4 |
- > 5 | read
- 8 |
\ No newline at end of file
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-client-handler-global/__snapshots__/html.bundle.debug.js b/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-client-handler-global/__snapshots__/html.bundle.debug.js
new file mode 100644
index 00000000000..7cb47a9c87c
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-client-handler-global/__snapshots__/html.bundle.debug.js
@@ -0,0 +1,25 @@
+// template.marko
+const $template = "";
+const $walks = "D%b l";
+_shells({ "__tests__/template.marko": "__tests__/template.marko !__tests__/template.marko_0;D%b ;" });
+var template_default = _template_persisted("__tests__/template.marko", (input) => {
+ const $scope0_reason = _persisted_reason();
+ const $scope0_id = _scope_id();
+ const $global$1 = $global();
+ const title = $global$1.title + "!";
+ let show = false;
+ _html("");
+ if ($scope0_reason) _if(() => {
+ if (show) {
+ const $scope1_id = _scope_id();
+ _html(`${_el_resume($scope1_id, "#button/0")}`);
+ _script($scope1_id, "__tests__/template.marko_1");
+ _scope($scope1_id, {}, "__tests__/template.marko", "4:4");
+ return 0;
+ }
+ }, $scope0_id, "#text/0", 1, 1, 1, 0, 1);
+ _html(`${_el_resume($scope0_id, "#button/1")}`);
+ _script($scope0_id, "__tests__/template.marko_0");
+ $scope0_reason ? _scope($scope0_id, { title }, "__tests__/template.marko", 0, { title: "1:8" }) : _patch_write($scope0_id, "title", title);
+ _resume_branch($scope0_id);
+}, 1, 1);
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-client-handler-global/__snapshots__/html.bundle.js b/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-client-handler-global/__snapshots__/html.bundle.js
new file mode 100644
index 00000000000..e8cdffd4d80
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-client-handler-global/__snapshots__/html.bundle.js
@@ -0,0 +1,13 @@
+// template.marko
+_shells({ a: "a !a1;D%b ;" });
+var template_default = _template_persisted("a", (input) => {
+ const $scope0_reason = _persisted_reason();
+ const $scope0_id = _scope_id();
+ const title = $global().title + "!";
+ _html("");
+ if ($scope0_reason) _if(() => {}, $scope0_id, "a", 1, 1, 1, 0, 1);
+ _html(`${_el_resume($scope0_id, "b")}`);
+ _script($scope0_id, "a1");
+ $scope0_reason ? _scope($scope0_id, { c: title }) : _patch_write($scope0_id, "c", title);
+ _resume_branch($scope0_id);
+}, 1, 1);
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-client-handler-global/__snapshots__/patches.debug.js b/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-client-handler-global/__snapshots__/patches.debug.js
new file mode 100644
index 00000000000..d6e90fa9da1
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-client-handler-global/__snapshots__/patches.debug.js
@@ -0,0 +1,4 @@
+// PATCH
+{
+ "PatchWrite:title": "second!"
+}
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-client-handler-global/__snapshots__/patches.js b/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-client-handler-global/__snapshots__/patches.js
new file mode 100644
index 00000000000..62696c679b2
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-client-handler-global/__snapshots__/patches.js
@@ -0,0 +1,4 @@
+// PATCH
+{
+ wc: "second!"
+}
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-client-handler-global/__snapshots__/render.debug.md b/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-client-handler-global/__snapshots__/render.debug.md
new file mode 100644
index 00000000000..90f197fcfdd
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-client-handler-global/__snapshots__/render.debug.md
@@ -0,0 +1,85 @@
+# Render `{"$global":{"title":"first"}}`
+```html
+
+
+
+```
+
+# Update
+```js
+document.querySelector(".step").click();
+```
+```html
+
+
+
+
+```
+## Change
+```
+INSERT: main > .read
+```
+
+# Update
+```js
+document.querySelector(".read").click();
+```
+```html
+
+
+
+
+```
+## Change
+```
+UPDATE: main[data-title] null => "first!"
+```
+
+# Update `{"$global":{"title":"second"}}`
+
+# Update
+```js
+document.querySelector(".read").click();
+```
+```html
+
+
+
+
+```
+## Change
+```
+UPDATE: main[data-title] "first!" => "second!"
+```
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-client-handler-global/__snapshots__/render.md b/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-client-handler-global/__snapshots__/render.md
new file mode 100644
index 00000000000..90f197fcfdd
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-client-handler-global/__snapshots__/render.md
@@ -0,0 +1,85 @@
+# Render `{"$global":{"title":"first"}}`
+```html
+
+
+
+```
+
+# Update
+```js
+document.querySelector(".step").click();
+```
+```html
+
+
+
+
+```
+## Change
+```
+INSERT: main > .read
+```
+
+# Update
+```js
+document.querySelector(".read").click();
+```
+```html
+
+
+
+
+```
+## Change
+```
+UPDATE: main[data-title] null => "first!"
+```
+
+# Update `{"$global":{"title":"second"}}`
+
+# Update
+```js
+document.querySelector(".read").click();
+```
+```html
+
+
+
+
+```
+## Change
+```
+UPDATE: main[data-title] "first!" => "second!"
+```
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-client-handler-global/__snapshots__/writes.debug.html b/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-client-handler-global/__snapshots__/writes.debug.html
new file mode 100644
index 00000000000..3f200b55e35
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-client-handler-global/__snapshots__/writes.debug.html
@@ -0,0 +1,11 @@
+
+
+
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-client-handler-global/__snapshots__/writes.html b/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-client-handler-global/__snapshots__/writes.html
new file mode 100644
index 00000000000..89df9e0eec4
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-client-handler-global/__snapshots__/writes.html
@@ -0,0 +1,8 @@
+
+
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-client-handler-global/sizes.json b/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-client-handler-global/sizes.json
new file mode 100644
index 00000000000..8fd2835407a
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-client-handler-global/sizes.json
@@ -0,0 +1,16 @@
+{
+ "dom": {
+ "template.marko.page.mjs": {
+ "min": 6963,
+ "brotli": 3170
+ }
+ },
+ "html": {
+ "min": 386,
+ "brotli": 265
+ },
+ "patch": {
+ "min": 15,
+ "brotli": 19
+ }
+}
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-client-handler-global/test.ts b/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-client-handler-global/test.ts
index d7dffb2da4c..21dcc8bdac4 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-client-handler-global/test.ts
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-client-handler-global/test.ts
@@ -1,8 +1,22 @@
import type { TestConfig } from "../../main.test";
-// A handler capturing a `$global`-derived value inside client-owned
-// structure would go stale: frames refresh the bag, never derived slots.
+const show = (document: Document) => {
+ document.querySelector(".step")!.click();
+};
+const read = (document: Document) => {
+ document.querySelector(".read")!.click();
+};
+
+// A handler inside client-owned structure reading a `$global`-derived
+// value: the derivation refreshes over the wire, so the handler reads the
+// latest patch's title.
export const config: TestConfig = {
- error_compiler: true,
persisted: true,
+ steps: [
+ { $global: { title: "first" } },
+ show,
+ read,
+ { $global: { title: "second" } },
+ read,
+ ],
};
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-client-handler/sizes.json b/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-client-handler/sizes.json
index 37219ab7982..c29833e2c75 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-client-handler/sizes.json
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-client-handler/sizes.json
@@ -1,8 +1,8 @@
{
"dom": {
"template.marko.page.mjs": {
- "min": 6990,
- "brotli": 3198
+ "min": 6971,
+ "brotli": 3174
}
},
"html": {
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-client-in-client/sizes.json b/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-client-in-client/sizes.json
index 7bbcbd8ce47..1e62ce674f7 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-client-in-client/sizes.json
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-client-in-client/sizes.json
@@ -1,8 +1,8 @@
{
"dom": {
"template.marko.page.mjs": {
- "min": 8055,
- "brotli": 3592
+ "min": 8033,
+ "brotli": 3582
}
},
"html": {
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-client-inner/sizes.json b/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-client-inner/sizes.json
index 7d691c41830..f1f178d91b0 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-client-inner/sizes.json
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-client-inner/sizes.json
@@ -1,8 +1,8 @@
{
"dom": {
"template.marko.page.mjs": {
- "min": 9084,
- "brotli": 4002
+ "min": 9045,
+ "brotli": 3985
}
},
"html": {
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-client-loop-outer/sizes.json b/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-client-loop-outer/sizes.json
index f74c02bd1e2..6fa40618f7a 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-client-loop-outer/sizes.json
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-client-loop-outer/sizes.json
@@ -1,8 +1,8 @@
{
"dom": {
"template.marko.page.mjs": {
- "min": 10332,
- "brotli": 4574
+ "min": 10293,
+ "brotli": 4552
}
},
"html": {
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-client-nested-deep/sizes.json b/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-client-nested-deep/sizes.json
index 219eb68454e..091af5cbc2f 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-client-nested-deep/sizes.json
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-client-nested-deep/sizes.json
@@ -1,8 +1,8 @@
{
"dom": {
"template.marko.page.mjs": {
- "min": 7889,
- "brotli": 3516
+ "min": 7867,
+ "brotli": 3502
}
},
"html": {
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-client-nested-derived/sizes.json b/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-client-nested-derived/sizes.json
index ac45437b029..f10f433bad3 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-client-nested-derived/sizes.json
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-client-nested-derived/sizes.json
@@ -1,8 +1,8 @@
{
"dom": {
"template.marko.page.mjs": {
- "min": 7957,
- "brotli": 3542
+ "min": 7935,
+ "brotli": 3538
}
},
"html": {
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-client-nested-else/sizes.json b/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-client-nested-else/sizes.json
index 92815033812..956c6632145 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-client-nested-else/sizes.json
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-client-nested-else/sizes.json
@@ -1,8 +1,8 @@
{
"dom": {
"template.marko.page.mjs": {
- "min": 7311,
- "brotli": 3284
+ "min": 7289,
+ "brotli": 3276
}
},
"html": {
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-client-nested/sizes.json b/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-client-nested/sizes.json
index 1e83445df0f..1c6b9a82f6b 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-client-nested/sizes.json
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-client-nested/sizes.json
@@ -1,8 +1,8 @@
{
"dom": {
"template.marko.page.mjs": {
- "min": 7297,
- "brotli": 3277
+ "min": 7275,
+ "brotli": 3274
}
},
"html": {
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-client-only-child/sizes.json b/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-client-only-child/sizes.json
index 389ee005472..3ae60bfbe7e 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-client-only-child/sizes.json
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-client-only-child/sizes.json
@@ -1,8 +1,8 @@
{
"dom": {
"template.marko.page.mjs": {
- "min": 7392,
- "brotli": 3311
+ "min": 7370,
+ "brotli": 3305
}
},
"html": {
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-client-owned/sizes.json b/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-client-owned/sizes.json
index c1f300c12e9..f5b688d104c 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-client-owned/sizes.json
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-client-owned/sizes.json
@@ -1,8 +1,8 @@
{
"dom": {
"template.marko.page.mjs": {
- "min": 7364,
- "brotli": 3303
+ "min": 7342,
+ "brotli": 3295
}
},
"html": {
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-closure-deep/sizes.json b/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-closure-deep/sizes.json
index c5aa71bb3f0..b4d8bd53839 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-closure-deep/sizes.json
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-closure-deep/sizes.json
@@ -1,8 +1,8 @@
{
"dom": {
"template.marko.page.mjs": {
- "min": 7877,
- "brotli": 3547
+ "min": 7859,
+ "brotli": 3535
}
},
"html": {
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-closure-derived/sizes.json b/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-closure-derived/sizes.json
index 1f3d4acf612..f6024a33b4b 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-closure-derived/sizes.json
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-closure-derived/sizes.json
@@ -1,8 +1,8 @@
{
"dom": {
"template.marko.page.mjs": {
- "min": 7611,
- "brotli": 3414
+ "min": 7593,
+ "brotli": 3405
}
},
"html": {
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-closure-nested/sizes.json b/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-closure-nested/sizes.json
index f9f8ff82165..9ff297174f1 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-closure-nested/sizes.json
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-closure-nested/sizes.json
@@ -1,8 +1,8 @@
{
"dom": {
"template.marko.page.mjs": {
- "min": 7973,
- "brotli": 3543
+ "min": 7934,
+ "brotli": 3530
}
},
"html": {
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-closure/sizes.json b/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-closure/sizes.json
index f5dc639e0d4..a1625ffc5b3 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-closure/sizes.json
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-closure/sizes.json
@@ -1,8 +1,8 @@
{
"dom": {
"template.marko.page.mjs": {
- "min": 7506,
- "brotli": 3381
+ "min": 7488,
+ "brotli": 3372
}
},
"html": {
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-const-mixed/sizes.json b/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-const-mixed/sizes.json
index 1e9813a7556..83306f7f74a 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-const-mixed/sizes.json
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-const-mixed/sizes.json
@@ -1,8 +1,8 @@
{
"dom": {
"template.marko.page.mjs": {
- "min": 8375,
- "brotli": 3693
+ "min": 8336,
+ "brotli": 3691
}
},
"html": {
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-const/sizes.json b/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-const/sizes.json
index f6a24e2a565..7139d4ab365 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-const/sizes.json
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-const/sizes.json
@@ -1,8 +1,8 @@
{
"dom": {
"template.marko.page.mjs": {
- "min": 7526,
- "brotli": 3394
+ "min": 7508,
+ "brotli": 3383
}
},
"html": {
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-content-direct/sizes.json b/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-content-direct/sizes.json
index 85066118bc0..1bf39d6e518 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-content-direct/sizes.json
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-content-direct/sizes.json
@@ -1,8 +1,8 @@
{
"dom": {
"template.marko.page.mjs": {
- "min": 10152,
- "brotli": 4359
+ "min": 10128,
+ "brotli": 4348
}
},
"html": {
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-ctrl-server-handler/sizes.json b/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-ctrl-server-handler/sizes.json
index aa4a41cdfb4..11cff16048d 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-ctrl-server-handler/sizes.json
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-ctrl-server-handler/sizes.json
@@ -1,8 +1,8 @@
{
"dom": {
"template.marko.page.mjs": {
- "min": 9199,
- "brotli": 4009
+ "min": 9162,
+ "brotli": 3999
}
},
"html": {
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-deep-input/__snapshots__/dom.bundle.debug.js b/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-deep-input/__snapshots__/dom.bundle.debug.js
new file mode 100644
index 00000000000..2be21570a06
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-deep-input/__snapshots__/dom.bundle.debug.js
@@ -0,0 +1,17 @@
+// template.marko
+const $template = "";
+const $walks = " b%c";
+const $if = /*@__PURE__*/ _if("#text/1", "shown");
+const $input_opts_show__OR__on = /*@__PURE__*/ _fill_join("__tests__/template.marko0", "input_opts_show", /*@__PURE__*/ _or(7, ($scope) => $if($scope, $scope.input_opts_show && $scope.on ? 0 : 1)));
+const $on = /*@__PURE__*/ _let("on/6", $input_opts_show__OR__on);
+const $setup__script = _script("__tests__/template.marko_0", ($scope) => _on($scope["#button/0"], "click", function() {
+ $on($scope, !$scope.on);
+}));
+function $setup($scope) {
+ $on($scope, true);
+ $setup__script($scope);
+}
+const $input_opts_show = /*@__PURE__*/ _fill_const("__tests__/template.marko0", "input_opts_show", $input_opts_show__OR__on);
+const $input = ($scope, input) => $input_opts($scope, input.opts);
+const $input_opts = ($scope, input_opts) => $input_opts_show($scope, input_opts?.show);
+var template_default = /*@__PURE__*/ _template("__tests__/template.marko", $template, $walks, $setup, $input);
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-deep-input/__snapshots__/dom.bundle.js b/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-deep-input/__snapshots__/dom.bundle.js
new file mode 100644
index 00000000000..7f1897b245a
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-deep-input/__snapshots__/dom.bundle.js
@@ -0,0 +1,7 @@
+// template.marko
+const $if = /*@__PURE__*/ _if(1, "shown");
+const $input_opts_show__OR__on = /*@__PURE__*/ _fill_join("a0", 5, /*@__PURE__*/ _or(7, ($scope) => $if($scope, $scope.f && $scope.g ? 0 : 1)));
+const $on = /*@__PURE__*/ _let(6, $input_opts_show__OR__on);
+const $setup__script = _script("a0", ($scope) => _on($scope.a, "click", function() {
+ $on($scope, !$scope.g);
+}));
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-deep-input/__snapshots__/html.bundle.debug.js b/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-deep-input/__snapshots__/html.bundle.debug.js
new file mode 100644
index 00000000000..655b03668f1
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-deep-input/__snapshots__/html.bundle.debug.js
@@ -0,0 +1,27 @@
+// template.marko
+const $template = "";
+const $walks = " b%c";
+_shells({ "__tests__/template.marko": "__tests__/template.marko !__tests__/template.marko_0; b%;" });
+var template_default = _template_persisted("__tests__/template.marko", (input) => {
+ const $scope0_owned = _persisted_ownership(), $scope0_reason = _persisted_reason();
+ const $scope0_id = _scope_id();
+ let on = true;
+ _html(`${_el_resume($scope0_id, "#button/0")}`);
+ if ($scope0_reason) _if(() => {
+ if (input.opts.show && on) {
+ const $scope1_id = _scope_id();
+ _html("shown");
+ _scope($scope1_id, {}, "__tests__/template.marko", "3:2");
+ return 0;
+ }
+ }, $scope0_id, "#text/1", 1, 1, 1, 0, 1);
+ _script($scope0_id, "__tests__/template.marko_0");
+ $scope0_reason ? _scope($scope0_id, {
+ input_opts_show: input.opts?.show,
+ on
+ }, "__tests__/template.marko", 0, {
+ input_opts_show: ["input.opts.show"],
+ on: "1:6"
+ }) : _owned_guard($scope0_owned, 0) && _patch_value($scope0_id, "__tests__/template.marko0", input.opts?.show);
+ _resume_branch($scope0_id);
+}, 1, 0);
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-deep-input/__snapshots__/html.bundle.js b/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-deep-input/__snapshots__/html.bundle.js
new file mode 100644
index 00000000000..acdf71268dd
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-deep-input/__snapshots__/html.bundle.js
@@ -0,0 +1,22 @@
+// template.marko
+_shells({ a: "a !a0; b%;" });
+var template_default = _template_persisted("a", (input) => {
+ const $scope0_owned = _persisted_ownership(), $scope0_reason = _persisted_reason();
+ const $scope0_id = _scope_id();
+ let on = true;
+ _html(`${_el_resume($scope0_id, "a")}`);
+ if ($scope0_reason) _if(() => {
+ if (input.opts.show && on) {
+ const $scope1_id = _scope_id();
+ _html("shown");
+ _scope($scope1_id, {});
+ return 0;
+ }
+ }, $scope0_id, "b", 1, 1, 1, 0, 1);
+ _script($scope0_id, "a0");
+ $scope0_reason ? _scope($scope0_id, {
+ f: input.opts?.show,
+ g: on
+ }) : _owned_guard($scope0_owned, 0) && _patch_value($scope0_id, "a0", input.opts?.show);
+ _resume_branch($scope0_id);
+}, 1, 0);
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-deep-input/__snapshots__/patches.debug.js b/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-deep-input/__snapshots__/patches.debug.js
new file mode 100644
index 00000000000..4a555059d41
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-deep-input/__snapshots__/patches.debug.js
@@ -0,0 +1,9 @@
+// PATCH
+{
+ "PatchValue:packages/runtime-tags/src/__tests__/fixtures/persisted-branch-deep-input/template.marko0": !1
+}
+
+// PATCH
+{
+ "PatchValue:packages/runtime-tags/src/__tests__/fixtures/persisted-branch-deep-input/template.marko0": !0
+}
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-deep-input/__snapshots__/patches.js b/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-deep-input/__snapshots__/patches.js
new file mode 100644
index 00000000000..f93d24e64ed
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-deep-input/__snapshots__/patches.js
@@ -0,0 +1,9 @@
+// PATCH
+{
+ va0: !1
+}
+
+// PATCH
+{
+ va0: !0
+}
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-deep-input/__snapshots__/render.debug.md b/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-deep-input/__snapshots__/render.debug.md
new file mode 100644
index 00000000000..249a966947d
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-deep-input/__snapshots__/render.debug.md
@@ -0,0 +1,65 @@
+# Render `{"opts":{"show":true}}`
+```html
+
+
+ shown
+
+```
+
+# Update
+```js
+document.querySelector("button").click();
+```
+```html
+
+```
+## Change
+```
+REMOVE: button + span
+```
+
+# Update
+```js
+document.querySelector("button").click();
+```
+```html
+
+
+ shown
+
+```
+## Change
+```
+INSERT: button + span
+```
+
+# Update `{"opts":{"show":false}}`
+```html
+
+```
+## Change
+```
+REMOVE: button + span
+```
+
+# Update `{"opts":{"show":true}}`
+```html
+
+
+ shown
+
+```
+## Change
+```
+INSERT: button + span
+```
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-deep-input/__snapshots__/render.md b/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-deep-input/__snapshots__/render.md
new file mode 100644
index 00000000000..249a966947d
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-deep-input/__snapshots__/render.md
@@ -0,0 +1,65 @@
+# Render `{"opts":{"show":true}}`
+```html
+
+
+ shown
+
+```
+
+# Update
+```js
+document.querySelector("button").click();
+```
+```html
+
+```
+## Change
+```
+REMOVE: button + span
+```
+
+# Update
+```js
+document.querySelector("button").click();
+```
+```html
+
+
+ shown
+
+```
+## Change
+```
+INSERT: button + span
+```
+
+# Update `{"opts":{"show":false}}`
+```html
+
+```
+## Change
+```
+REMOVE: button + span
+```
+
+# Update `{"opts":{"show":true}}`
+```html
+
+
+ shown
+
+```
+## Change
+```
+INSERT: button + span
+```
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-deep-input/__snapshots__/writes.debug.html b/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-deep-input/__snapshots__/writes.debug.html
new file mode 100644
index 00000000000..c74c5a1a561
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-deep-input/__snapshots__/writes.debug.html
@@ -0,0 +1,11 @@
+shown
+
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-deep-input/__snapshots__/writes.html b/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-deep-input/__snapshots__/writes.html
new file mode 100644
index 00000000000..41df5ba4bd3
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-deep-input/__snapshots__/writes.html
@@ -0,0 +1,9 @@
+shown
+
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-deep-input/sizes.json b/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-deep-input/sizes.json
new file mode 100644
index 00000000000..d74f8872dab
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-deep-input/sizes.json
@@ -0,0 +1,16 @@
+{
+ "dom": {
+ "template.marko.page.mjs": {
+ "min": 7228,
+ "brotli": 3253
+ }
+ },
+ "html": {
+ "min": 378,
+ "brotli": 265
+ },
+ "patch": {
+ "min": 18,
+ "brotli": 22
+ }
+}
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-deep-input/template.marko b/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-deep-input/template.marko
new file mode 100644
index 00000000000..2e3e0586d03
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-deep-input/template.marko
@@ -0,0 +1,5 @@
+
+
+
+ shown
+
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-deep-input/test.ts b/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-deep-input/test.ts
new file mode 100644
index 00000000000..c2503b3f32c
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-deep-input/test.ts
@@ -0,0 +1,17 @@
+import type { TestConfig } from "../../main.test";
+
+const toggle = (document: Document) => {
+ document.querySelector("button")!.click();
+};
+
+// A deep `input` member mixing with client state to select structure.
+export const config: TestConfig = {
+ persisted: true,
+ steps: [
+ { opts: { show: true } },
+ toggle,
+ toggle,
+ { opts: { show: false } },
+ { opts: { show: true } },
+ ],
+};
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-derived-script/sizes.json b/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-derived-script/sizes.json
index 121590a636d..9b1621f412e 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-derived-script/sizes.json
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-derived-script/sizes.json
@@ -1,8 +1,8 @@
{
"dom": {
"template.marko.page.mjs": {
- "min": 7655,
- "brotli": 3445
+ "min": 7637,
+ "brotli": 3433
}
},
"html": {
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-embedded-fn-fill/sizes.json b/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-embedded-fn-fill/sizes.json
index 2e75b37c119..bfdb081c42e 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-embedded-fn-fill/sizes.json
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-embedded-fn-fill/sizes.json
@@ -1,8 +1,8 @@
{
"dom": {
"template.marko.page.mjs": {
- "min": 7717,
- "brotli": 3456
+ "min": 7688,
+ "brotli": 3448
}
},
"html": {
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-fill-local-state/sizes.json b/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-fill-local-state/sizes.json
index 8bdfcf60f36..e274d38542a 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-fill-local-state/sizes.json
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-fill-local-state/sizes.json
@@ -1,8 +1,8 @@
{
"dom": {
"template.marko.page.mjs": {
- "min": 8516,
- "brotli": 3735
+ "min": 8477,
+ "brotli": 3727
}
},
"html": {
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-frozen-let/sizes.json b/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-frozen-let/sizes.json
index b9316b4a6aa..0d093c067b3 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-frozen-let/sizes.json
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-frozen-let/sizes.json
@@ -1,8 +1,8 @@
{
"dom": {
"template.marko.page.mjs": {
- "min": 6878,
- "brotli": 3116
+ "min": 6860,
+ "brotli": 3109
}
},
"html": {
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-handler-input/sizes.json b/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-handler-input/sizes.json
index f07940b918c..c7cc25d23de 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-handler-input/sizes.json
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-handler-input/sizes.json
@@ -1,8 +1,8 @@
{
"dom": {
"template.marko.page.mjs": {
- "min": 7286,
- "brotli": 3307
+ "min": 7268,
+ "brotli": 3288
}
},
"html": {
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-inert-test/sizes.json b/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-inert-test/sizes.json
index 6f0de51d5f4..b31c4e8c3b6 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-inert-test/sizes.json
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-inert-test/sizes.json
@@ -1,8 +1,8 @@
{
"dom": {
"template.marko.page.mjs": {
- "min": 6455,
- "brotli": 2971
+ "min": 6436,
+ "brotli": 2956
}
},
"html": {
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-intersection-chain/sizes.json b/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-intersection-chain/sizes.json
index 11d57dc5a4c..81b20810d86 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-intersection-chain/sizes.json
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-intersection-chain/sizes.json
@@ -1,8 +1,8 @@
{
"dom": {
"template.marko.page.mjs": {
- "min": 8589,
- "brotli": 3776
+ "min": 8550,
+ "brotli": 3765
}
},
"html": {
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-intersection-deep/sizes.json b/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-intersection-deep/sizes.json
index c3a49623e71..2d007ad1704 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-intersection-deep/sizes.json
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-intersection-deep/sizes.json
@@ -1,8 +1,8 @@
{
"dom": {
"template.marko.page.mjs": {
- "min": 8858,
- "brotli": 3903
+ "min": 8819,
+ "brotli": 3895
}
},
"html": {
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-intersection/sizes.json b/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-intersection/sizes.json
index dd847efbfba..38ca7577d00 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-intersection/sizes.json
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-intersection/sizes.json
@@ -1,8 +1,8 @@
{
"dom": {
"template.marko.page.mjs": {
- "min": 8358,
- "brotli": 3688
+ "min": 8319,
+ "brotli": 3684
}
},
"html": {
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-iterable-fn-fill/sizes.json b/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-iterable-fn-fill/sizes.json
index 95c6079c9a4..83078a15fb0 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-iterable-fn-fill/sizes.json
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-iterable-fn-fill/sizes.json
@@ -1,8 +1,8 @@
{
"dom": {
"template.marko.page.mjs": {
- "min": 7770,
- "brotli": 3485
+ "min": 7741,
+ "brotli": 3478
}
},
"html": {
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-late-state/sizes.json b/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-late-state/sizes.json
index b935a575893..b7b9affc03d 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-late-state/sizes.json
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-late-state/sizes.json
@@ -1,8 +1,8 @@
{
"dom": {
"template.marko.page.mjs": {
- "min": 7410,
- "brotli": 3334
+ "min": 7388,
+ "brotli": 3325
}
},
"html": {
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-let-change-accept/sizes.json b/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-let-change-accept/sizes.json
index 659df310599..625d4602086 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-let-change-accept/sizes.json
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-let-change-accept/sizes.json
@@ -1,8 +1,8 @@
{
"dom": {
"template.marko.page.mjs": {
- "min": 8001,
- "brotli": 3562
+ "min": 7962,
+ "brotli": 3548
}
},
"html": {
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-let-change-cross/sizes.json b/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-let-change-cross/sizes.json
index 49985e0a66b..3539044854e 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-let-change-cross/sizes.json
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-let-change-cross/sizes.json
@@ -1,8 +1,8 @@
{
"dom": {
"template.marko.page.mjs": {
- "min": 7991,
- "brotli": 3558
+ "min": 7952,
+ "brotli": 3543
}
},
"html": {
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-let-change-ref/sizes.json b/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-let-change-ref/sizes.json
index 4b0d6e0950d..77a577c863b 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-let-change-ref/sizes.json
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-let-change-ref/sizes.json
@@ -1,8 +1,8 @@
{
"dom": {
"template.marko.page.mjs": {
- "min": 7993,
- "brotli": 3561
+ "min": 7954,
+ "brotli": 3553
}
},
"html": {
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-let-change/sizes.json b/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-let-change/sizes.json
index 262617789e2..c30f2674c17 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-let-change/sizes.json
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-let-change/sizes.json
@@ -1,8 +1,8 @@
{
"dom": {
"template.marko.page.mjs": {
- "min": 8020,
- "brotli": 3575
+ "min": 7981,
+ "brotli": 3554
}
},
"html": {
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-let-mixed/sizes.json b/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-let-mixed/sizes.json
index ec06faf61b9..61cb5a0a367 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-let-mixed/sizes.json
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-let-mixed/sizes.json
@@ -1,8 +1,8 @@
{
"dom": {
"template.marko.page.mjs": {
- "min": 8208,
- "brotli": 3613
+ "min": 8169,
+ "brotli": 3603
}
},
"html": {
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-let-siblings/sizes.json b/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-let-siblings/sizes.json
index 0ef8274016b..772a554a86c 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-let-siblings/sizes.json
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-let-siblings/sizes.json
@@ -1,8 +1,8 @@
{
"dom": {
"template.marko.page.mjs": {
- "min": 7880,
- "brotli": 3485
+ "min": 7841,
+ "brotli": 3477
}
},
"html": {
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-let-static/sizes.json b/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-let-static/sizes.json
index 180c1d97c58..b5b169b1f82 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-let-static/sizes.json
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-let-static/sizes.json
@@ -1,8 +1,8 @@
{
"dom": {
"template.marko.page.mjs": {
- "min": 6525,
- "brotli": 2976
+ "min": 6507,
+ "brotli": 2964
}
},
"html": {
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-let/sizes.json b/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-let/sizes.json
index 5e3ed9ed89d..e13b87dbb21 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-let/sizes.json
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-let/sizes.json
@@ -1,8 +1,8 @@
{
"dom": {
"template.marko.page.mjs": {
- "min": 7793,
- "brotli": 3488
+ "min": 7754,
+ "brotli": 3474
}
},
"html": {
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-mixed-alias/sizes.json b/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-mixed-alias/sizes.json
index 8f9c93c43d6..60be5555312 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-mixed-alias/sizes.json
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-mixed-alias/sizes.json
@@ -1,8 +1,8 @@
{
"dom": {
"template.marko.page.mjs": {
- "min": 7243,
- "brotli": 3267
+ "min": 7221,
+ "brotli": 3263
}
},
"html": {
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-mixed-derived-param/sizes.json b/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-mixed-derived-param/sizes.json
index 8f9c93c43d6..60be5555312 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-mixed-derived-param/sizes.json
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-mixed-derived-param/sizes.json
@@ -1,8 +1,8 @@
{
"dom": {
"template.marko.page.mjs": {
- "min": 7243,
- "brotli": 3267
+ "min": 7221,
+ "brotli": 3263
}
},
"html": {
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-mixed-derived/sizes.json b/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-mixed-derived/sizes.json
index de4dcac2afc..27776949690 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-mixed-derived/sizes.json
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-mixed-derived/sizes.json
@@ -1,8 +1,8 @@
{
"dom": {
"template.marko.page.mjs": {
- "min": 7259,
- "brotli": 3281
+ "min": 7237,
+ "brotli": 3263
}
},
"html": {
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-mixed-destructure/sizes.json b/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-mixed-destructure/sizes.json
index 2eff2188a33..14ae8c99acf 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-mixed-destructure/sizes.json
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-mixed-destructure/sizes.json
@@ -1,8 +1,8 @@
{
"dom": {
"template.marko.page.mjs": {
- "min": 7243,
- "brotli": 3268
+ "min": 7221,
+ "brotli": 3256
}
},
"html": {
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-mixed-patch-only/sizes.json b/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-mixed-patch-only/sizes.json
index 5c82ec8e8a4..fa5f3d6f68b 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-mixed-patch-only/sizes.json
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-mixed-patch-only/sizes.json
@@ -1,8 +1,8 @@
{
"dom": {
"template.marko.page.mjs": {
- "min": 7243,
- "brotli": 3268
+ "min": 7221,
+ "brotli": 3256
}
},
"html": {
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-mixed-selector/sizes.json b/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-mixed-selector/sizes.json
index 2eff2188a33..14ae8c99acf 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-mixed-selector/sizes.json
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-mixed-selector/sizes.json
@@ -1,8 +1,8 @@
{
"dom": {
"template.marko.page.mjs": {
- "min": 7243,
- "brotli": 3268
+ "min": 7221,
+ "brotli": 3256
}
},
"html": {
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-param-const-state/sizes.json b/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-param-const-state/sizes.json
index 7afcef3e81b..4f23c8a8295 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-param-const-state/sizes.json
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-param-const-state/sizes.json
@@ -1,8 +1,8 @@
{
"dom": {
"template.marko.page.mjs": {
- "min": 8228,
- "brotli": 3642
+ "min": 8189,
+ "brotli": 3628
}
},
"html": {
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-rest-input/__snapshots__/dom.bundle.debug.js b/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-rest-input/__snapshots__/dom.bundle.debug.js
new file mode 100644
index 00000000000..70ae4c4fb04
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-rest-input/__snapshots__/dom.bundle.debug.js
@@ -0,0 +1,20 @@
+// template.marko
+const $template = "";
+const $walks = " D l%c";
+const $if = /*@__PURE__*/ _if("#text/2", "shown");
+const $input_show__OR__on = /*@__PURE__*/ _fill_join("__tests__/template.marko0", "input_show", /*@__PURE__*/ _or(8, ($scope) => $if($scope, $scope.input_show && $scope.on ? 0 : 1)));
+const $on = /*@__PURE__*/ _let("on/7", $input_show__OR__on);
+const $setup__script = _script("__tests__/template.marko_0", ($scope) => _on($scope["#button/0"], "click", function() {
+ $on($scope, !$scope.on);
+}));
+function $setup($scope) {
+ $on($scope, true);
+ $setup__script($scope);
+}
+const $label = ($scope, label) => _text($scope["#text/1"], label);
+const $input_show = /*@__PURE__*/ _fill_const("__tests__/template.marko0", "input_show", $input_show__OR__on);
+const $input = ($scope, input) => {
+ $label($scope, input.label);
+ $input_show($scope, input.show);
+};
+var template_default = /*@__PURE__*/ _template("__tests__/template.marko", $template, $walks, $setup, $input);
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-rest-input/__snapshots__/dom.bundle.js b/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-rest-input/__snapshots__/dom.bundle.js
new file mode 100644
index 00000000000..0f7c9495e86
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-rest-input/__snapshots__/dom.bundle.js
@@ -0,0 +1,7 @@
+// template.marko
+const $if = /*@__PURE__*/ _if(2, "shown");
+const $input_show__OR__on = /*@__PURE__*/ _fill_join("a0", 6, /*@__PURE__*/ _or(8, ($scope) => $if($scope, $scope.g && $scope.h ? 0 : 1)));
+const $on = /*@__PURE__*/ _let(7, $input_show__OR__on);
+const $setup__script = _script("a0", ($scope) => _on($scope.a, "click", function() {
+ $on($scope, !$scope.h);
+}));
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-rest-input/__snapshots__/html.bundle.debug.js b/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-rest-input/__snapshots__/html.bundle.debug.js
new file mode 100644
index 00000000000..449cfb85ee0
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-rest-input/__snapshots__/html.bundle.debug.js
@@ -0,0 +1,28 @@
+// template.marko
+const $template = "";
+const $walks = " D l%c";
+_shells({ "__tests__/template.marko": "__tests__/template.marko !__tests__/template.marko_0; D l%;" });
+var template_default = _template_persisted("__tests__/template.marko", (input) => {
+ const $scope0_owned = _persisted_ownership(), $scope0_reason = _persisted_reason();
+ const $scope0_id = _scope_id();
+ const { label, ...rest } = input;
+ let on = true;
+ _html(`${_el_resume($scope0_id, "#button/0")}`);
+ if ($scope0_reason) _if(() => {
+ if (rest.show && on) {
+ const $scope1_id = _scope_id();
+ _html("shown");
+ _scope($scope1_id, {}, "__tests__/template.marko", "4:2");
+ return 0;
+ }
+ }, $scope0_id, "#text/2", 1, 1, 1, 0, 1);
+ _script($scope0_id, "__tests__/template.marko_0");
+ $scope0_reason ? _scope($scope0_id, {
+ input_show: input.show,
+ on
+ }, "__tests__/template.marko", 0, {
+ input_show: ["input.show"],
+ on: "2:6"
+ }) : _owned_guard($scope0_owned, 1) && _patch_value($scope0_id, "__tests__/template.marko0", input.show);
+ _resume_branch($scope0_id);
+}, 1, 0);
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-rest-input/__snapshots__/html.bundle.js b/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-rest-input/__snapshots__/html.bundle.js
new file mode 100644
index 00000000000..23d00d28afa
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-rest-input/__snapshots__/html.bundle.js
@@ -0,0 +1,23 @@
+// template.marko
+_shells({ a: "a !a0; D l%;" });
+var template_default = _template_persisted("a", (input) => {
+ const $scope0_owned = _persisted_ownership(), $scope0_reason = _persisted_reason();
+ const $scope0_id = _scope_id();
+ const { label, ...rest } = input;
+ let on = true;
+ _html(`${_el_resume($scope0_id, "a")}`);
+ if ($scope0_reason) _if(() => {
+ if (rest.show && on) {
+ const $scope1_id = _scope_id();
+ _html("shown");
+ _scope($scope1_id, {});
+ return 0;
+ }
+ }, $scope0_id, "c", 1, 1, 1, 0, 1);
+ _script($scope0_id, "a0");
+ $scope0_reason ? _scope($scope0_id, {
+ g: input.show,
+ h: on
+ }) : _owned_guard($scope0_owned, 1) && _patch_value($scope0_id, "a0", input.show);
+ _resume_branch($scope0_id);
+}, 1, 0);
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-rest-input/__snapshots__/patches.debug.js b/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-rest-input/__snapshots__/patches.debug.js
new file mode 100644
index 00000000000..49c4f572361
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-rest-input/__snapshots__/patches.debug.js
@@ -0,0 +1,11 @@
+// PATCH
+{
+ "PatchText:#text/1": "x",
+ "PatchValue:packages/runtime-tags/src/__tests__/fixtures/persisted-branch-rest-input/template.marko0": !1
+}
+
+// PATCH
+{
+ "PatchText:#text/1": "x",
+ "PatchValue:packages/runtime-tags/src/__tests__/fixtures/persisted-branch-rest-input/template.marko0": !0
+}
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-rest-input/__snapshots__/patches.js b/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-rest-input/__snapshots__/patches.js
new file mode 100644
index 00000000000..9e7f0dce3d3
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-rest-input/__snapshots__/patches.js
@@ -0,0 +1,11 @@
+// PATCH
+{
+ tb: "x",
+ va0: !1
+}
+
+// PATCH
+{
+ tb: "x",
+ va0: !0
+}
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-rest-input/__snapshots__/render.debug.md b/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-rest-input/__snapshots__/render.debug.md
new file mode 100644
index 00000000000..948d77deb9b
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-rest-input/__snapshots__/render.debug.md
@@ -0,0 +1,67 @@
+# Render `{"label":"x","show":true}`
+```html
+
+
+ shown
+
+```
+
+# Update
+```js
+document.querySelector("button").click();
+```
+```html
+
+```
+## Change
+```
+REMOVE: button + span
+```
+
+# Update
+```js
+document.querySelector("button").click();
+```
+```html
+
+
+ shown
+
+```
+## Change
+```
+INSERT: button + span
+```
+
+# Update `{"label":"x","show":false}`
+```html
+
+```
+## Change
+```
+UPDATE: button::text "x" => "x"
+REMOVE: button + span
+```
+
+# Update `{"label":"x","show":true}`
+```html
+
+
+ shown
+
+```
+## Change
+```
+UPDATE: button::text "x" => "x"
+INSERT: button + span
+```
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-rest-input/__snapshots__/render.md b/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-rest-input/__snapshots__/render.md
new file mode 100644
index 00000000000..948d77deb9b
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-rest-input/__snapshots__/render.md
@@ -0,0 +1,67 @@
+# Render `{"label":"x","show":true}`
+```html
+
+
+ shown
+
+```
+
+# Update
+```js
+document.querySelector("button").click();
+```
+```html
+
+```
+## Change
+```
+REMOVE: button + span
+```
+
+# Update
+```js
+document.querySelector("button").click();
+```
+```html
+
+
+ shown
+
+```
+## Change
+```
+INSERT: button + span
+```
+
+# Update `{"label":"x","show":false}`
+```html
+
+```
+## Change
+```
+UPDATE: button::text "x" => "x"
+REMOVE: button + span
+```
+
+# Update `{"label":"x","show":true}`
+```html
+
+
+ shown
+
+```
+## Change
+```
+UPDATE: button::text "x" => "x"
+INSERT: button + span
+```
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-rest-input/__snapshots__/writes.debug.html b/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-rest-input/__snapshots__/writes.debug.html
new file mode 100644
index 00000000000..29bbc5c6938
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-rest-input/__snapshots__/writes.debug.html
@@ -0,0 +1,11 @@
+shown
+
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-rest-input/__snapshots__/writes.html b/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-rest-input/__snapshots__/writes.html
new file mode 100644
index 00000000000..0f013c8de58
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-rest-input/__snapshots__/writes.html
@@ -0,0 +1,9 @@
+shown
+
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-rest-input/sizes.json b/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-rest-input/sizes.json
new file mode 100644
index 00000000000..c733d5184fb
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-rest-input/sizes.json
@@ -0,0 +1,16 @@
+{
+ "dom": {
+ "template.marko.page.mjs": {
+ "min": 7262,
+ "brotli": 3265
+ }
+ },
+ "html": {
+ "min": 391,
+ "brotli": 265
+ },
+ "patch": {
+ "min": 32,
+ "brotli": 36
+ }
+}
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-rest-input/template.marko b/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-rest-input/template.marko
new file mode 100644
index 00000000000..292a7413d78
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-rest-input/template.marko
@@ -0,0 +1,6 @@
+
+
+
+
+ shown
+
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-rest-input/test.ts b/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-rest-input/test.ts
new file mode 100644
index 00000000000..831e1444d0b
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-rest-input/test.ts
@@ -0,0 +1,17 @@
+import type { TestConfig } from "../../main.test";
+
+const toggle = (document: Document) => {
+ document.querySelector("button")!.click();
+};
+
+// A rest of `input` mixing with client state to select structure.
+export const config: TestConfig = {
+ persisted: true,
+ steps: [
+ { label: "x", show: true },
+ toggle,
+ toggle,
+ { label: "x", show: false },
+ { label: "x", show: true },
+ ],
+};
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-script-el/sizes.json b/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-script-el/sizes.json
index bf46ffcb6ce..b3eadf73112 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-script-el/sizes.json
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-script-el/sizes.json
@@ -1,8 +1,8 @@
{
"dom": {
"template.marko.page.mjs": {
- "min": 6643,
- "brotli": 3026
+ "min": 6625,
+ "brotli": 3016
}
},
"html": {
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-script-global/__snapshots__/dom.bundle.debug.js b/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-script-global/__snapshots__/dom.bundle.debug.js
index 47050319c37..e3d0caa950b 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-script-global/__snapshots__/dom.bundle.debug.js
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-script-global/__snapshots__/dom.bundle.debug.js
@@ -1,17 +1,16 @@
// template.marko
const $template = "
";
const $walks = "E l%l";
-const $if_content__setup__script = _script("__tests__/template.marko_1", ($scope) => {
+const $setup = () => {};
+const $if_content__$global_brand__script = _script("__tests__/template.marko_1_$global_brand#5", ($scope) => {
{
const el = document.querySelector("main");
- el.dataset.log = (el.dataset.log || "") + "[" + $scope.$global.brand + "]";
+ el.dataset.log = (el.dataset.log || "") + "[" + $scope._.$global_brand + "]";
}
});
-const $if_content__setup = $if_content__setup__script;
-function $setup($scope) {
- _text($scope["#text/0"], $scope.$global.brand);
-}
+const $if_content__$global_brand = /*@__PURE__*/ _if_closure("#text/1", 0, $if_content__$global_brand__script);
+const $if_content__setup = $if_content__$global_brand;
const $if = /*@__PURE__*/ _if("#text/1", "promo
", 0, $if_content__setup);
const $input_show = ($scope, input_show) => $if($scope, input_show ? 0 : 1);
const $input = ($scope, input) => $input_show($scope, input.show);
-var template_default = /*@__PURE__*/ _template("__tests__/template.marko", $template, $walks, $setup, $input);
+var template_default = /*@__PURE__*/ _template("__tests__/template.marko", $template, $walks, 0, $input);
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-script-global/__snapshots__/dom.bundle.js b/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-script-global/__snapshots__/dom.bundle.js
index f984c053e4b..14469565c18 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-script-global/__snapshots__/dom.bundle.js
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-script-global/__snapshots__/dom.bundle.js
@@ -1,7 +1,7 @@
// template.marko
-const $if_content__setup = _script("a1", ($scope) => {
+const $if_content__setup = /* @__PURE__ */ _if_closure(1, 0, _script("a1", ($scope) => {
{
const el = document.querySelector("main");
- el.dataset.log = (el.dataset.log || "") + "[" + $scope.$.brand + "]";
+ el.dataset.log = (el.dataset.log || "") + "[" + $scope._.f + "]";
}
-});
+}));
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-script-global/__snapshots__/html.bundle.debug.js b/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-script-global/__snapshots__/html.bundle.debug.js
index 07d4a2b1eea..cd5d8c03afe 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-script-global/__snapshots__/html.bundle.debug.js
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-script-global/__snapshots__/html.bundle.debug.js
@@ -3,7 +3,7 @@ const $template = "
";
const $walks = "E l%l";
_shells({
"__tests__/template.marko": "__tests__/template.marko;E l%;
",
- "__tests__/template.marko_1*shell": "__tests__/template.marko_1*shell !__tests__/template.marko_1,promo
"
+ "__tests__/template.marko_1*shell": "__tests__/template.marko_1*shell !__tests__/template.marko_1_$global_brand#5,promo
"
});
var template_default = _template_persisted("__tests__/template.marko", (input) => {
const $scope0_reason = _persisted_reason(), $sg__input_show = _source_guard($scope0_reason, 0);
@@ -14,12 +14,12 @@ var template_default = _template_persisted("__tests__/template.marko", (input) =
if (input.show) {
const $scope1_id = _scope_id();
_html("promo
");
- _script($scope1_id, "__tests__/template.marko_1");
- _patch_effect($scope1_id, "__tests__/template.marko_1", "! brand", 1);
- $scope0_reason && _scope($scope1_id, {}, "__tests__/template.marko", "3:4");
+ _script($scope1_id, "__tests__/template.marko_1_$global_brand#5");
+ _patch_effect($scope1_id, "__tests__/template.marko_1_$global_brand#5", "$global_brand 1");
+ _scope($scope1_id, { _: _scope_with_id($scope0_id) }, "__tests__/template.marko", "3:4");
return 0;
}
}, $scope0_id, "#text/1", 1, $sg__input_show, $sg__input_show, void 0, void 0, ["__tests__/template.marko_1*shell"]);
_html("");
- $scope0_reason && _scope($scope0_id, {}, "__tests__/template.marko", 0);
+ $scope0_reason ? _scope($scope0_id, { $global_brand: $global$1?.brand }, "__tests__/template.marko", 0, { $global_brand: ["$global.brand"] }) : _patch_write($scope0_id, "$global_brand", $global$1?.brand);
}, 1, 1);
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-script-global/__snapshots__/html.bundle.js b/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-script-global/__snapshots__/html.bundle.js
index 552944ab88d..8ba582da587 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-script-global/__snapshots__/html.bundle.js
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-script-global/__snapshots__/html.bundle.js
@@ -6,17 +6,18 @@ _shells({
var template_default = _template_persisted("a", (input) => {
const $scope0_reason = _persisted_reason(), $sg__input_show = _source_guard($scope0_reason, 0);
const $scope0_id = _scope_id();
- _html(`${_patch_text($scope0_id, "a", $global().brand)}
`);
+ const $global$1 = $global();
+ _html(`${_patch_text($scope0_id, "a", $global$1.brand)}
`);
_if(() => {
if (input.show) {
const $scope1_id = _scope_id();
_html("promo
");
_script($scope1_id, "a1");
- _patch_effect($scope1_id, "a1", "! brand", 1);
- $scope0_reason && _scope($scope1_id, {});
+ _patch_effect($scope1_id, "a1", "f 1");
+ _scope($scope1_id, { _: _scope_with_id($scope0_id) });
return 0;
}
}, $scope0_id, "b", 1, $sg__input_show, $sg__input_show, void 0, void 0, ["a0"]);
_html("");
- $scope0_reason && _scope($scope0_id, {});
+ $scope0_reason ? _scope($scope0_id, { f: $global$1?.brand }) : _patch_write($scope0_id, "f", $global$1?.brand);
}, 1, 1);
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-script-global/__snapshots__/patches.debug.js b/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-script-global/__snapshots__/patches.debug.js
index 6ff502691c2..ce919c65c5a 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-script-global/__snapshots__/patches.debug.js
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-script-global/__snapshots__/patches.debug.js
@@ -4,27 +4,30 @@
brand: "Marko"
},
"PatchText:#text/0": "Marko",
- "PatchBranch:#text/1": 0
+ "PatchBranch:#text/1": 0,
+ "PatchWrite:$global_brand": "Marko"
}
// PATCH
-[`packages/runtime-tags/src/__tests__/fixtures/persisted-branch-script-global/template.marko_1*shell !packages/runtime-tags/src/__tests__/fixtures/persisted-branch-script-global/template.marko_1,promo
`, {
+[`packages/runtime-tags/src/__tests__/fixtures/persisted-branch-script-global/template.marko_1*shell !packages/runtime-tags/src/__tests__/fixtures/persisted-branch-script-global/template.marko_1_$global_brand#5,promo
`, {
"$global:": {
brand: "Fresh"
},
"PatchText:#text/0": "Fresh",
"PatchBranch:#text/1": [{
- "PatchGlobalEffect:packages/runtime-tags/src/__tests__/fixtures/persisted-branch-script-global/template.marko_1": "! brand"
- }, "packages/runtime-tags/src/__tests__/fixtures/persisted-branch-script-global/template.marko_1*shell"]
+ "PatchEffect:packages/runtime-tags/src/__tests__/fixtures/persisted-branch-script-global/template.marko_1_$global_brand#5": "$global_brand 1"
+ }, "packages/runtime-tags/src/__tests__/fixtures/persisted-branch-script-global/template.marko_1*shell"],
+ "PatchWrite:$global_brand": "Fresh"
}]
// PATCH
-[`packages/runtime-tags/src/__tests__/fixtures/persisted-branch-script-global/template.marko_1*shell !packages/runtime-tags/src/__tests__/fixtures/persisted-branch-script-global/template.marko_1,promo
`, {
+[`packages/runtime-tags/src/__tests__/fixtures/persisted-branch-script-global/template.marko_1*shell !packages/runtime-tags/src/__tests__/fixtures/persisted-branch-script-global/template.marko_1_$global_brand#5,promo
`, {
"$global:": {
brand: "Patch"
},
"PatchText:#text/0": "Patch",
"PatchBranch:#text/1": [{
- "PatchGlobalEffect:packages/runtime-tags/src/__tests__/fixtures/persisted-branch-script-global/template.marko_1": "! brand"
- }, "packages/runtime-tags/src/__tests__/fixtures/persisted-branch-script-global/template.marko_1*shell"]
+ "PatchEffect:packages/runtime-tags/src/__tests__/fixtures/persisted-branch-script-global/template.marko_1_$global_brand#5": "$global_brand 1"
+ }, "packages/runtime-tags/src/__tests__/fixtures/persisted-branch-script-global/template.marko_1*shell"],
+ "PatchWrite:$global_brand": "Patch"
}]
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-script-global/__snapshots__/patches.js b/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-script-global/__snapshots__/patches.js
index 854b4973c2a..acfe3197141 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-script-global/__snapshots__/patches.js
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-script-global/__snapshots__/patches.js
@@ -4,7 +4,8 @@
brand: "Marko"
},
ta: "Marko",
- bb: 0
+ bb: 0,
+ wf: "Marko"
}
// PATCH
@@ -14,8 +15,9 @@
},
ta: "Fresh",
bb: [{
- ga1: "! brand"
- }, "a0"]
+ ea1: "f 1"
+ }, "a0"],
+ wf: "Fresh"
}]
// PATCH
@@ -25,6 +27,7 @@
},
ta: "Patch",
bb: [{
- ga1: "! brand"
- }, "a0"]
+ ea1: "f 1"
+ }, "a0"],
+ wf: "Patch"
}]
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-script-global/__snapshots__/writes.debug.html b/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-script-global/__snapshots__/writes.debug.html
index c542c7ae7fe..69a8445afe1 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-script-global/__snapshots__/writes.debug.html
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-script-global/__snapshots__/writes.debug.html
@@ -6,8 +6,12 @@ Marko
WALKER_RUNTIME("M")("_");
M._.r = [_ => [0, {
brand: "Marko"
+ }, {
+ $global_brand: "Marko"
+ }, {
+ _: _(1)
}],
- "packages/runtime-tags/src/__tests__/fixtures/persisted-branch-script-global/template.marko_1 2"
+ "packages/runtime-tags/src/__tests__/fixtures/persisted-branch-script-global/template.marko_1_$global_brand#5 2"
];
M._.w()
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-script-global/__snapshots__/writes.html b/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-script-global/__snapshots__/writes.html
index 6d1a662e3cf..faaf10fb296 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-script-global/__snapshots__/writes.html
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-script-global/__snapshots__/writes.html
@@ -6,6 +6,10 @@ Marko
WALKER_RUNTIME("M")("_");
M._.r = [_ => [0, {
brand: "Marko"
+ }, {
+ f: "Marko"
+ }, {
+ _: _(1)
}], "a1 2"];
M._.w()
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-script-global/sizes.json b/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-script-global/sizes.json
index f20ec6e1a93..bc6e9ace805 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-script-global/sizes.json
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-script-global/sizes.json
@@ -1,16 +1,16 @@
{
"dom": {
"template.marko.page.mjs": {
- "min": 7083,
- "brotli": 3220
+ "min": 7061,
+ "brotli": 3205
}
},
"html": {
- "min": 395,
- "brotli": 272
+ "min": 416,
+ "brotli": 282
},
"patch": {
- "min": 198,
- "brotli": 109
+ "min": 223,
+ "brotli": 118
}
}
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-script-input/sizes.json b/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-script-input/sizes.json
index 4b82e0b85ac..d4c80a86477 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-script-input/sizes.json
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-script-input/sizes.json
@@ -1,8 +1,8 @@
{
"dom": {
"template.marko.page.mjs": {
- "min": 7041,
- "brotli": 3193
+ "min": 7023,
+ "brotli": 3191
}
},
"html": {
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-script-mixed/__snapshots__/dom.bundle.debug.js b/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-script-mixed/__snapshots__/dom.bundle.debug.js
index 8a04ed8891a..22aa1d8b81b 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-script-mixed/__snapshots__/dom.bundle.debug.js
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-script-mixed/__snapshots__/dom.bundle.debug.js
@@ -2,14 +2,19 @@
const $template = "
";
const $walks = "E l%l";
const $setup = () => {};
-const $if_content__input_value__script = _script("__tests__/template.marko_1_input_value#6", ($scope) => {
+const $if_content__input_value__OR__$global_brand__script = _script("__tests__/template.marko_1_input_value#6_$global_brand#7", ($scope) => {
{
const el = document.querySelector("main");
- el.dataset.log = (el.dataset.log || "") + "[" + $scope._.input_value + ":" + _global_read($scope.$global, "brand") + "]";
+ el.dataset.log = (el.dataset.log || "") + "[" + $scope._.input_value + ":" + $scope._.$global_brand + "]";
}
});
-const $if_content__input_value = /*@__PURE__*/ _if_closure("#text/1", 0, $if_content__input_value__script);
-const $if_content__setup = $if_content__input_value;
+const $if_content__input_value__OR__$global_brand = /*@__PURE__*/ _or(0, $if_content__input_value__OR__$global_brand__script);
+const $if_content__input_value = /*@__PURE__*/ _if_closure("#text/1", 0, $if_content__input_value__OR__$global_brand);
+const $if_content__setup = ($scope) => {
+ $if_content__input_value._($scope);
+ $if_content__$global_brand._($scope);
+};
+const $if_content__$global_brand = /*@__PURE__*/ _if_closure("#text/1", 0, $if_content__input_value__OR__$global_brand);
const $input_title = ($scope, input_title) => _text($scope["#text/0"], input_title);
const $if = /*@__PURE__*/ _if("#text/1", "promo
", 0, $if_content__setup);
const $input_show = ($scope, input_show) => $if($scope, input_show ? 0 : 1);
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-script-mixed/__snapshots__/dom.bundle.js b/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-script-mixed/__snapshots__/dom.bundle.js
index 4855c4ecacd..ca1975dab4c 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-script-mixed/__snapshots__/dom.bundle.js
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-script-mixed/__snapshots__/dom.bundle.js
@@ -1,7 +1,7 @@
// template.marko
-const $if_content__input_value = /*@__PURE__*/ _if_closure(1, 0, _script("a1", ($scope) => {
+const $if_content__input_value__OR__$global_brand = /*@__PURE__*/ _or(0, _script("a1", ($scope) => {
{
const el = document.querySelector("main");
- el.dataset.log = (el.dataset.log || "") + "[" + $scope._.g + ":" + $scope.$.brand + "]";
+ el.dataset.log = (el.dataset.log || "") + "[" + $scope._.g + ":" + $scope._.h + "]";
}
}));
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-script-mixed/__snapshots__/html.bundle.debug.js b/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-script-mixed/__snapshots__/html.bundle.debug.js
index 8b2cd12fa9d..937b0d67c1b 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-script-mixed/__snapshots__/html.bundle.debug.js
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-script-mixed/__snapshots__/html.bundle.debug.js
@@ -3,7 +3,7 @@ const $template = "
";
const $walks = "E l%l";
_shells({
"__tests__/template.marko": "__tests__/template.marko;E l%;
",
- "__tests__/template.marko_1*shell": "__tests__/template.marko_1*shell !__tests__/template.marko_1_input_value#6,promo
"
+ "__tests__/template.marko_1*shell": "__tests__/template.marko_1*shell !__tests__/template.marko_1_input_value#6_$global_brand#7,promo
"
});
var template_default = _template_persisted("__tests__/template.marko", (input) => {
const $scope0_owned = _persisted_ownership(), $scope0_reason = _persisted_reason(), $sg__input_show = _source_guard($scope0_reason, 2);
@@ -14,12 +14,18 @@ var template_default = _template_persisted("__tests__/template.marko", (input) =
if (input.show) {
const $scope1_id = _scope_id();
_html("promo
");
- _script($scope1_id, "__tests__/template.marko_1_input_value#6");
- _patch_effect($scope1_id, "__tests__/template.marko_1_input_value#6", "input_value 1 ! brand", 1);
+ _script($scope1_id, "__tests__/template.marko_1_input_value#6_$global_brand#7");
+ _patch_effect($scope1_id, "__tests__/template.marko_1_input_value#6_$global_brand#7", "input_value $global_brand 1");
_scope($scope1_id, { _: _scope_with_id($scope0_id) }, "__tests__/template.marko", "3:4");
return 0;
}
}, $scope0_id, "#text/1", 1, $sg__input_show, $sg__input_show, void 0, void 0, ["__tests__/template.marko_1*shell"]);
_html("");
- $scope0_reason ? _scope($scope0_id, { input_value: input.value }, "__tests__/template.marko", 0, { input_value: ["input.value"] }) : _owned_guard($scope0_owned, 3) && _patch_write($scope0_id, "input_value", input.value);
+ $scope0_reason ? _scope($scope0_id, {
+ input_value: input.value,
+ $global_brand: $global$1?.brand
+ }, "__tests__/template.marko", 0, {
+ input_value: ["input.value"],
+ $global_brand: ["$global.brand"]
+ }) : (_owned_guard($scope0_owned, 3) && _patch_write($scope0_id, "input_value", input.value), _patch_write($scope0_id, "$global_brand", $global$1?.brand));
}, 1, 1);
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-script-mixed/__snapshots__/html.bundle.js b/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-script-mixed/__snapshots__/html.bundle.js
index 5c1ebb3416c..6e29ac5b757 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-script-mixed/__snapshots__/html.bundle.js
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-script-mixed/__snapshots__/html.bundle.js
@@ -6,18 +6,21 @@ _shells({
var template_default = _template_persisted("a", (input) => {
const $scope0_owned = _persisted_ownership(), $scope0_reason = _persisted_reason(), $sg__input_show = _source_guard($scope0_reason, 2);
const $scope0_id = _scope_id();
- $global();
+ const $global$1 = $global();
_html(`${_patch_text($scope0_id, "a", input.title, void 0, $scope0_owned, 1)}
`);
_if(() => {
if (input.show) {
const $scope1_id = _scope_id();
_html("promo
");
_script($scope1_id, "a1");
- _patch_effect($scope1_id, "a1", "g 1 ! brand", 1);
+ _patch_effect($scope1_id, "a1", "g h 1");
_scope($scope1_id, { _: _scope_with_id($scope0_id) });
return 0;
}
}, $scope0_id, "b", 1, $sg__input_show, $sg__input_show, void 0, void 0, ["a0"]);
_html("");
- $scope0_reason ? _scope($scope0_id, { g: input.value }) : _owned_guard($scope0_owned, 3) && _patch_write($scope0_id, "g", input.value);
+ $scope0_reason ? _scope($scope0_id, {
+ g: input.value,
+ h: $global$1?.brand
+ }) : (_owned_guard($scope0_owned, 3) && _patch_write($scope0_id, "g", input.value), _patch_write($scope0_id, "h", $global$1?.brand));
}, 1, 1);
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-script-mixed/__snapshots__/patches.debug.js b/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-script-mixed/__snapshots__/patches.debug.js
index 030807b24fc..60469f0d769 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-script-mixed/__snapshots__/patches.debug.js
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-script-mixed/__snapshots__/patches.debug.js
@@ -1,35 +1,38 @@
// PATCH
-[`packages/runtime-tags/src/__tests__/fixtures/persisted-branch-script-mixed/template.marko_1*shell !packages/runtime-tags/src/__tests__/fixtures/persisted-branch-script-mixed/template.marko_1_input_value#6,promo
`, {
+[`packages/runtime-tags/src/__tests__/fixtures/persisted-branch-script-mixed/template.marko_1*shell !packages/runtime-tags/src/__tests__/fixtures/persisted-branch-script-mixed/template.marko_1_input_value#6_$global_brand#7,promo
`, {
"$global:": {
brand: "Marko"
},
"PatchText:#text/0": "Store",
"PatchBranch:#text/1": [{
- "PatchGlobalEffect:packages/runtime-tags/src/__tests__/fixtures/persisted-branch-script-mixed/template.marko_1_input_value#6": "input_value 1 ! brand"
+ "PatchEffect:packages/runtime-tags/src/__tests__/fixtures/persisted-branch-script-mixed/template.marko_1_input_value#6_$global_brand#7": "input_value $global_brand 1"
}, "packages/runtime-tags/src/__tests__/fixtures/persisted-branch-script-mixed/template.marko_1*shell"],
- "PatchWrite:input_value": "b"
+ "PatchWrite:input_value": "b",
+ "PatchWrite:$global_brand": "Marko"
}]
// PATCH
-[`packages/runtime-tags/src/__tests__/fixtures/persisted-branch-script-mixed/template.marko_1*shell !packages/runtime-tags/src/__tests__/fixtures/persisted-branch-script-mixed/template.marko_1_input_value#6,promo
`, {
+[`packages/runtime-tags/src/__tests__/fixtures/persisted-branch-script-mixed/template.marko_1*shell !packages/runtime-tags/src/__tests__/fixtures/persisted-branch-script-mixed/template.marko_1_input_value#6_$global_brand#7,promo
`, {
"$global:": {
brand: "Marko"
},
"PatchText:#text/0": "Store!",
"PatchBranch:#text/1": [{
- "PatchGlobalEffect:packages/runtime-tags/src/__tests__/fixtures/persisted-branch-script-mixed/template.marko_1_input_value#6": "input_value 1 ! brand"
+ "PatchEffect:packages/runtime-tags/src/__tests__/fixtures/persisted-branch-script-mixed/template.marko_1_input_value#6_$global_brand#7": "input_value $global_brand 1"
}, "packages/runtime-tags/src/__tests__/fixtures/persisted-branch-script-mixed/template.marko_1*shell"],
- "PatchWrite:input_value": "b"
+ "PatchWrite:input_value": "b",
+ "PatchWrite:$global_brand": "Marko"
}]
// PATCH
-[`packages/runtime-tags/src/__tests__/fixtures/persisted-branch-script-mixed/template.marko_1*shell !packages/runtime-tags/src/__tests__/fixtures/persisted-branch-script-mixed/template.marko_1_input_value#6,promo
`, {
+[`packages/runtime-tags/src/__tests__/fixtures/persisted-branch-script-mixed/template.marko_1*shell !packages/runtime-tags/src/__tests__/fixtures/persisted-branch-script-mixed/template.marko_1_input_value#6_$global_brand#7,promo
`, {
"$global:": {
brand: "Fresh"
},
"PatchText:#text/0": "Store",
"PatchBranch:#text/1": [{
- "PatchGlobalEffect:packages/runtime-tags/src/__tests__/fixtures/persisted-branch-script-mixed/template.marko_1_input_value#6": "input_value 1 ! brand"
+ "PatchEffect:packages/runtime-tags/src/__tests__/fixtures/persisted-branch-script-mixed/template.marko_1_input_value#6_$global_brand#7": "input_value $global_brand 1"
}, "packages/runtime-tags/src/__tests__/fixtures/persisted-branch-script-mixed/template.marko_1*shell"],
- "PatchWrite:input_value": "b"
+ "PatchWrite:input_value": "b",
+ "PatchWrite:$global_brand": "Fresh"
}]
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-script-mixed/__snapshots__/patches.js b/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-script-mixed/__snapshots__/patches.js
index b75b12d0d8d..e981fa3271c 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-script-mixed/__snapshots__/patches.js
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-script-mixed/__snapshots__/patches.js
@@ -5,9 +5,10 @@
},
ta: "Store",
bb: [{
- ga1: "g 1 ! brand"
+ ea1: "g h 1"
}, "a0"],
- wg: "b"
+ wg: "b",
+ wh: "Marko"
}]
// PATCH
@@ -17,9 +18,10 @@
},
ta: "Store!",
bb: [{
- ga1: "g 1 ! brand"
+ ea1: "g h 1"
}, "a0"],
- wg: "b"
+ wg: "b",
+ wh: "Marko"
}]
// PATCH
@@ -29,7 +31,8 @@
},
ta: "Store",
bb: [{
- ga1: "g 1 ! brand"
+ ea1: "g h 1"
}, "a0"],
- wg: "b"
+ wg: "b",
+ wh: "Fresh"
}]
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-script-mixed/__snapshots__/writes.debug.html b/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-script-mixed/__snapshots__/writes.debug.html
index ff284231933..77470a5a81b 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-script-mixed/__snapshots__/writes.debug.html
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-script-mixed/__snapshots__/writes.debug.html
@@ -7,11 +7,12 @@ Store
M._.r = [_ => [0, {
brand: "Marko"
}, {
- input_value: "a"
+ input_value: "a",
+ $global_brand: "Marko"
}, {
_: _(1)
}],
- "packages/runtime-tags/src/__tests__/fixtures/persisted-branch-script-mixed/template.marko_1_input_value#6 2"
+ "packages/runtime-tags/src/__tests__/fixtures/persisted-branch-script-mixed/template.marko_1_input_value#6_$global_brand#7 2"
];
M._.w()
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-script-mixed/__snapshots__/writes.html b/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-script-mixed/__snapshots__/writes.html
index cc735b195a4..7b5dc55e507 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-script-mixed/__snapshots__/writes.html
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-script-mixed/__snapshots__/writes.html
@@ -7,7 +7,8 @@ Store
M._.r = [_ => [0, {
brand: "Marko"
}, {
- g: "a"
+ g: "a",
+ h: "Marko"
}, {
_: _(1)
}], "a1 2"];
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-script-mixed/sizes.json b/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-script-mixed/sizes.json
index f109fa29cfd..289b084b2be 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-script-mixed/sizes.json
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-script-mixed/sizes.json
@@ -1,16 +1,16 @@
{
"dom": {
"template.marko.page.mjs": {
- "min": 7093,
- "brotli": 3225
+ "min": 7071,
+ "brotli": 3211
}
},
"html": {
- "min": 412,
- "brotli": 284
+ "min": 422,
+ "brotli": 289
},
"patch": {
- "min": 277,
- "brotli": 109
+ "min": 292,
+ "brotli": 128
}
}
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-script-state/sizes.json b/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-script-state/sizes.json
index e79dd96fce1..1c99cb6d82c 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-script-state/sizes.json
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-script-state/sizes.json
@@ -1,8 +1,8 @@
{
"dom": {
"template.marko.page.mjs": {
- "min": 7468,
- "brotli": 3375
+ "min": 7450,
+ "brotli": 3367
}
},
"html": {
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-script/sizes.json b/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-script/sizes.json
index 91bc242e25f..9351c66e379 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-script/sizes.json
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-script/sizes.json
@@ -1,8 +1,8 @@
{
"dom": {
"template.marko.page.mjs": {
- "min": 6703,
- "brotli": 3046
+ "min": 6685,
+ "brotli": 3038
}
},
"html": {
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-state/sizes.json b/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-state/sizes.json
index 7ce49c5cc24..1fe21c3c05a 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-state/sizes.json
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-state/sizes.json
@@ -1,8 +1,8 @@
{
"dom": {
"template.marko.page.mjs": {
- "min": 7531,
- "brotli": 3391
+ "min": 7513,
+ "brotli": 3394
}
},
"html": {
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-static-const-state/sizes.json b/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-static-const-state/sizes.json
index 0507adc7ad3..f847514da4a 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-static-const-state/sizes.json
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-static-const-state/sizes.json
@@ -1,8 +1,8 @@
{
"dom": {
"template.marko.page.mjs": {
- "min": 8223,
- "brotli": 3638
+ "min": 8184,
+ "brotli": 3637
}
},
"html": {
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-unassigned-let/sizes.json b/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-unassigned-let/sizes.json
index bd85e232dd9..fddc1ea238a 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-unassigned-let/sizes.json
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-branch-unassigned-let/sizes.json
@@ -1,8 +1,8 @@
{
"dom": {
"template.marko.page.mjs": {
- "min": 7495,
- "brotli": 3390
+ "min": 7477,
+ "brotli": 3385
}
},
"html": {
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-branch/sizes.json b/packages/runtime-tags/src/__tests__/fixtures/persisted-branch/sizes.json
index 5f828d7cf85..ec2a7f5191a 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-branch/sizes.json
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-branch/sizes.json
@@ -1,8 +1,8 @@
{
"dom": {
"template.marko.page.mjs": {
- "min": 7327,
- "brotli": 3313
+ "min": 7309,
+ "brotli": 3304
}
},
"html": {
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-capture-escapes/sizes.json b/packages/runtime-tags/src/__tests__/fixtures/persisted-capture-escapes/sizes.json
index 67b15e00f0d..4abd587fabf 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-capture-escapes/sizes.json
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-capture-escapes/sizes.json
@@ -1,8 +1,8 @@
{
"dom": {
"template.marko.page.mjs": {
- "min": 2285,
- "brotli": 1158
+ "min": 2268,
+ "brotli": 1147
}
},
"html": {
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-child-alias-patch/sizes.json b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-alias-patch/sizes.json
index 45ca854c3b5..2386ea12d17 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-child-alias-patch/sizes.json
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-alias-patch/sizes.json
@@ -1,8 +1,8 @@
{
"dom": {
"template.marko.page.mjs": {
- "min": 2165,
- "brotli": 1120
+ "min": 2164,
+ "brotli": 1122
}
},
"html": {
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-child-arg-structural/__snapshots__/error-compile-dom.debug.txt b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-arg-structural/__snapshots__/error-compile-dom.debug.txt
new file mode 100644
index 00000000000..1d78e326861
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-arg-structural/__snapshots__/error-compile-dom.debug.txt
@@ -0,0 +1,9 @@
+
+ at packages/runtime-tags/src/__tests__/fixtures/persisted-child-arg-structural/template.marko:5:5
+ 3 |
+ 4 |
+ > 5 |
+ | ^^^^^^^^^^^^^^^^^^^^^^^^^^ Persisted templates cannot patch this faithfully yet: an input the child needs server-owned cannot feed from client-owned structure.
+ 6 |
+ 7 |
+ 8 |
\ No newline at end of file
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-child-arg-structural/__snapshots__/error-compile-dom.txt b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-arg-structural/__snapshots__/error-compile-dom.txt
new file mode 100644
index 00000000000..1d78e326861
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-arg-structural/__snapshots__/error-compile-dom.txt
@@ -0,0 +1,9 @@
+
+ at packages/runtime-tags/src/__tests__/fixtures/persisted-child-arg-structural/template.marko:5:5
+ 3 |
+ 4 |
+ > 5 |
+ | ^^^^^^^^^^^^^^^^^^^^^^^^^^ Persisted templates cannot patch this faithfully yet: an input the child needs server-owned cannot feed from client-owned structure.
+ 6 |
+ 7 |
+ 8 |
\ No newline at end of file
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-child-arg-structural/__snapshots__/error-compile-html.debug.txt b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-arg-structural/__snapshots__/error-compile-html.debug.txt
new file mode 100644
index 00000000000..1d78e326861
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-arg-structural/__snapshots__/error-compile-html.debug.txt
@@ -0,0 +1,9 @@
+
+ at packages/runtime-tags/src/__tests__/fixtures/persisted-child-arg-structural/template.marko:5:5
+ 3 |
+ 4 |
+ > 5 |
+ | ^^^^^^^^^^^^^^^^^^^^^^^^^^ Persisted templates cannot patch this faithfully yet: an input the child needs server-owned cannot feed from client-owned structure.
+ 6 |
+ 7 |
+ 8 |
\ No newline at end of file
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-child-arg-structural/__snapshots__/error-compile-html.txt b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-arg-structural/__snapshots__/error-compile-html.txt
new file mode 100644
index 00000000000..1d78e326861
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-arg-structural/__snapshots__/error-compile-html.txt
@@ -0,0 +1,9 @@
+
+ at packages/runtime-tags/src/__tests__/fixtures/persisted-child-arg-structural/template.marko:5:5
+ 3 |
+ 4 |
+ > 5 |
+ | ^^^^^^^^^^^^^^^^^^^^^^^^^^ Persisted templates cannot patch this faithfully yet: an input the child needs server-owned cannot feed from client-owned structure.
+ 6 |
+ 7 |
+ 8 |
\ No newline at end of file
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-child-arg-structural/helper.ts b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-arg-structural/helper.ts
new file mode 100644
index 00000000000..5cf59f8001f
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-arg-structural/helper.ts
@@ -0,0 +1 @@
+export let thing = false;
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-child-arg-structural/tags/struct/index.marko b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-arg-structural/tags/struct/index.marko
new file mode 100644
index 00000000000..f6632a65560
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-arg-structural/tags/struct/index.marko
@@ -0,0 +1,6 @@
+
+ a
+
+
+ b
+
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-child-arg-structural/template.marko b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-arg-structural/template.marko
new file mode 100644
index 00000000000..a12fe9a375a
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-arg-structural/template.marko
@@ -0,0 +1,8 @@
+import { thing } from "./helper";
+
+
+
+
+
+
+
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-child-arg-structural/test.ts b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-arg-structural/test.ts
new file mode 100644
index 00000000000..445628588cc
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-arg-structural/test.ts
@@ -0,0 +1,8 @@
+import type { TestConfig } from "../../main.test";
+
+// A provenance-free ARGUMENT gating a child's structural param has no
+// delivery channel, exactly like the named-attribute form.
+export const config: TestConfig = {
+ error_compiler: true,
+ persisted: true,
+};
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-child-args-spread/__snapshots__/error-compile-dom.debug.txt b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-args-spread/__snapshots__/error-compile-dom.debug.txt
new file mode 100644
index 00000000000..6b89de38524
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-args-spread/__snapshots__/error-compile-dom.debug.txt
@@ -0,0 +1,9 @@
+
+ at packages/runtime-tags/src/__tests__/fixtures/persisted-child-args-spread/template.marko:4:12
+ 2 |
+ 3 |
+ > 4 |
+ | ^^^^^^^^^^^^^^ Persisted templates cannot patch this faithfully yet: a spread argument for a child inside client-owned structure is not supported yet.
+ 5 |
+ 6 |
+ 7 |
\ No newline at end of file
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-child-args-spread/__snapshots__/error-compile-dom.txt b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-args-spread/__snapshots__/error-compile-dom.txt
new file mode 100644
index 00000000000..6b89de38524
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-args-spread/__snapshots__/error-compile-dom.txt
@@ -0,0 +1,9 @@
+
+ at packages/runtime-tags/src/__tests__/fixtures/persisted-child-args-spread/template.marko:4:12
+ 2 |
+ 3 |
+ > 4 |
+ | ^^^^^^^^^^^^^^ Persisted templates cannot patch this faithfully yet: a spread argument for a child inside client-owned structure is not supported yet.
+ 5 |
+ 6 |
+ 7 |
\ No newline at end of file
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-child-args-spread/__snapshots__/error-compile-html.debug.txt b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-args-spread/__snapshots__/error-compile-html.debug.txt
new file mode 100644
index 00000000000..6b89de38524
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-args-spread/__snapshots__/error-compile-html.debug.txt
@@ -0,0 +1,9 @@
+
+ at packages/runtime-tags/src/__tests__/fixtures/persisted-child-args-spread/template.marko:4:12
+ 2 |
+ 3 |
+ > 4 |
+ | ^^^^^^^^^^^^^^ Persisted templates cannot patch this faithfully yet: a spread argument for a child inside client-owned structure is not supported yet.
+ 5 |
+ 6 |
+ 7 |
\ No newline at end of file
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-child-args-spread/__snapshots__/error-compile-html.txt b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-args-spread/__snapshots__/error-compile-html.txt
new file mode 100644
index 00000000000..6b89de38524
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-args-spread/__snapshots__/error-compile-html.txt
@@ -0,0 +1,9 @@
+
+ at packages/runtime-tags/src/__tests__/fixtures/persisted-child-args-spread/template.marko:4:12
+ 2 |
+ 3 |
+ > 4 |
+ | ^^^^^^^^^^^^^^ Persisted templates cannot patch this faithfully yet: a spread argument for a child inside client-owned structure is not supported yet.
+ 5 |
+ 6 |
+ 7 |
\ No newline at end of file
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-child-args-spread/tags/badge/index.marko b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-args-spread/tags/badge/index.marko
new file mode 100644
index 00000000000..f21a69b36fb
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-args-spread/tags/badge/index.marko
@@ -0,0 +1 @@
+${input}
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-child-args-spread/template.marko b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-args-spread/template.marko
new file mode 100644
index 00000000000..2a7b73019c9
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-args-spread/template.marko
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-child-args-spread/test.ts b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-args-spread/test.ts
new file mode 100644
index 00000000000..f8a2ea1e80f
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-args-spread/test.ts
@@ -0,0 +1,8 @@
+import type { TestConfig } from "../../main.test";
+
+// A spread argument hides which child params it feeds, so per-group
+// channel analysis cannot run: fail closed at the call site.
+export const config: TestConfig = {
+ error_compiler: true,
+ persisted: true,
+};
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-child-args/__snapshots__/dom.bundle.debug.js b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-args/__snapshots__/dom.bundle.debug.js
new file mode 100644
index 00000000000..b5a655ea013
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-args/__snapshots__/dom.bundle.debug.js
@@ -0,0 +1,27 @@
+// tags/badge/index.marko
+const $template$1 = " ";
+const $walks$1 = "D l";
+const $setup$1 = () => {};
+const $input$1 = ($scope, input) => _text($scope["#text/0"], input);
+var badge_default = /*@__PURE__*/ _template("__tests__/tags/badge/index.marko", $template$1, "D l", 0, $input$1);
+
+// template.marko
+const $template = "";
+const $walks = "D%b l";
+const $if_content__input_tag = /*@__PURE__*/ _fill_join("__tests__/template.marko0", "input_tag", /*@__PURE__*/ _if_closure("#text/0", 0, ($scope) => $input$1($scope["#childScope/1"], $scope._.input_tag)));
+const $if_content__setup = ($scope) => {
+ $if_content__input_tag._($scope);
+ $input$1($scope["#childScope/0"], "x");
+};
+const $if = /*@__PURE__*/ _if("#text/0", /*@__PURE__*/ ((_w0, _w1) => `${_w0}${_w1}`)($template$1, $template$1), /*@__PURE__*/ ((_w0, _w1) => `/${_w0}&/${_w1}&`)("D l", "D l"), $if_content__setup);
+const $show = /*@__PURE__*/ _let("show/5", ($scope) => $if($scope, $scope.show ? 0 : 1));
+const $setup__script = _script("__tests__/template.marko_0", ($scope) => _on($scope["#button/1"], "click", function() {
+ $show($scope, !$scope.show);
+}));
+function $setup($scope) {
+ $show($scope, true);
+ $setup__script($scope);
+}
+const $input = ($scope, input) => $input_tag($scope, input.tag);
+const $input_tag = /*@__PURE__*/ _fill_const("__tests__/template.marko0", "input_tag", $if_content__input_tag);
+var template_default = /*@__PURE__*/ _template("__tests__/template.marko", $template, $walks, $setup, $input);
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-child-args/__snapshots__/dom.bundle.js b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-args/__snapshots__/dom.bundle.js
new file mode 100644
index 00000000000..44cf0082097
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-args/__snapshots__/dom.bundle.js
@@ -0,0 +1,15 @@
+// tags/badge/index.marko
+const $template = " ";
+const $input = ($scope, input) => _text($scope.a, input);
+
+// template.marko
+const $if_content__input_tag = /*@__PURE__*/ _fill_join("a0", 4, /*@__PURE__*/ _if_closure(0, 0, ($scope) => $input($scope.b, $scope._.e)));
+const $if_content__setup = ($scope) => {
+ $if_content__input_tag._($scope);
+ $input($scope.a, "x");
+};
+const $if = /*@__PURE__*/ _if(0, /*@__PURE__*/ ((_w0, _w1) => `${_w0}${_w1}`)($template, $template), /*@__PURE__*/ ((_w0, _w1) => `/${_w0}&/${_w1}&`)("D l", "D l"), $if_content__setup);
+const $show = /*@__PURE__*/ _let(5, ($scope) => $if($scope, $scope.f ? 0 : 1));
+const $setup__script = _script("a0", ($scope) => _on($scope.b, "click", function() {
+ $show($scope, !$scope.f);
+}));
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-child-args/__snapshots__/error-compile-dom.debug.txt b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-args/__snapshots__/error-compile-dom.debug.txt
deleted file mode 100644
index e0d061d3e95..00000000000
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-child-args/__snapshots__/error-compile-dom.debug.txt
+++ /dev/null
@@ -1,9 +0,0 @@
-
- at packages/runtime-tags/src/__tests__/fixtures/persisted-child-args/template.marko:4:5
- 2 |
- 3 |
- > 4 |
- | ^^^^^^^^^^^^^ Persisted templates cannot patch this faithfully yet: arguments for a child inside client-owned structure are not supported yet.
- 5 |
- 6 |
- 7 |
\ No newline at end of file
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-child-args/__snapshots__/error-compile-dom.txt b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-args/__snapshots__/error-compile-dom.txt
deleted file mode 100644
index e0d061d3e95..00000000000
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-child-args/__snapshots__/error-compile-dom.txt
+++ /dev/null
@@ -1,9 +0,0 @@
-
- at packages/runtime-tags/src/__tests__/fixtures/persisted-child-args/template.marko:4:5
- 2 |
- 3 |
- > 4 |
- | ^^^^^^^^^^^^^ Persisted templates cannot patch this faithfully yet: arguments for a child inside client-owned structure are not supported yet.
- 5 |
- 6 |
- 7 |
\ No newline at end of file
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-child-args/__snapshots__/error-compile-html.debug.txt b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-args/__snapshots__/error-compile-html.debug.txt
deleted file mode 100644
index e0d061d3e95..00000000000
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-child-args/__snapshots__/error-compile-html.debug.txt
+++ /dev/null
@@ -1,9 +0,0 @@
-
- at packages/runtime-tags/src/__tests__/fixtures/persisted-child-args/template.marko:4:5
- 2 |
- 3 |
- > 4 |
- | ^^^^^^^^^^^^^ Persisted templates cannot patch this faithfully yet: arguments for a child inside client-owned structure are not supported yet.
- 5 |
- 6 |
- 7 |
\ No newline at end of file
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-child-args/__snapshots__/error-compile-html.txt b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-args/__snapshots__/error-compile-html.txt
deleted file mode 100644
index e0d061d3e95..00000000000
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-child-args/__snapshots__/error-compile-html.txt
+++ /dev/null
@@ -1,9 +0,0 @@
-
- at packages/runtime-tags/src/__tests__/fixtures/persisted-child-args/template.marko:4:5
- 2 |
- 3 |
- > 4 |
- | ^^^^^^^^^^^^^ Persisted templates cannot patch this faithfully yet: arguments for a child inside client-owned structure are not supported yet.
- 5 |
- 6 |
- 7 |
\ No newline at end of file
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-child-args/__snapshots__/html.bundle.debug.js b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-args/__snapshots__/html.bundle.debug.js
new file mode 100644
index 00000000000..7438fcb759b
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-args/__snapshots__/html.bundle.debug.js
@@ -0,0 +1,47 @@
+// tags/badge/index.marko
+const $template$1 = " ";
+const $walks$1 = "D l";
+_shells({ "__tests__/tags/badge/index.marko": "__tests__/tags/badge/index.marko;D ; " });
+var badge_default = _template_persisted("__tests__/tags/badge/index.marko", (input) => {
+ const $scope0_owned = _persisted_ownership(), $scope0_reason = _persisted_reason();
+ const $scope0_id = _scope_id();
+ _html(`${_patch_text($scope0_id, "#text/0", input, void 0, $scope0_owned, 0)}`);
+ $scope0_reason && _scope($scope0_id, {}, "__tests__/tags/badge/index.marko", 0);
+}, 0, 0);
+
+// template.marko
+const $template = "";
+const $walks = "D%b l";
+_shells({ "__tests__/template.marko": "__tests__/template.marko !__tests__/template.marko_0;D%b ;" });
+var template_default = _template_persisted("__tests__/template.marko", (input) => {
+ const $scope0_owned = _persisted_ownership(), $scope0_reason = _persisted_reason();
+ const $scope0_id = _scope_id();
+ let show = true;
+ _html("");
+ if ($scope0_reason) _if(() => {
+ if (show) {
+ const $scope1_id = _scope_id();
+ _set_serialize_reason(1);
+ const $childScope = _peek_scope_id();
+ badge_default("x");
+ _set_serialize_reason(1);
+ const $childScope2 = _peek_scope_id();
+ badge_default(input.tag);
+ _scope($scope1_id, {
+ "#childScope/0": _existing_scope($childScope),
+ "#childScope/1": _existing_scope($childScope2)
+ }, "__tests__/template.marko", "3:4");
+ return 0;
+ }
+ }, $scope0_id, "#text/0");
+ _html(`${_el_resume($scope0_id, "#button/1")}`);
+ _script($scope0_id, "__tests__/template.marko_0");
+ $scope0_reason ? _scope($scope0_id, {
+ input_tag: input.tag,
+ show
+ }, "__tests__/template.marko", 0, {
+ input_tag: ["input.tag"],
+ show: "1:6"
+ }) : _owned_guard($scope0_owned, 0) && _patch_value($scope0_id, "__tests__/template.marko0", input.tag);
+ _resume_branch($scope0_id);
+}, 1, () => [badge_default]);
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-child-args/__snapshots__/html.bundle.js b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-args/__snapshots__/html.bundle.js
new file mode 100644
index 00000000000..6af30550bbf
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-args/__snapshots__/html.bundle.js
@@ -0,0 +1,40 @@
+// tags/badge/index.marko
+_shells({ b: "b;D ; " });
+var badge_default = _template_persisted("b", (input) => {
+ const $scope0_owned = _persisted_ownership(), $scope0_reason = _persisted_reason();
+ const $scope0_id = _scope_id();
+ _html(`${_patch_text($scope0_id, "a", input, void 0, $scope0_owned, 0)}`);
+ $scope0_reason && _scope($scope0_id, {});
+}, 0, 0);
+
+// template.marko
+_shells({ a: "a !a0;D%b ;" });
+var template_default = _template_persisted("a", (input) => {
+ const $scope0_owned = _persisted_ownership(), $scope0_reason = _persisted_reason();
+ const $scope0_id = _scope_id();
+ let show = true;
+ _html("");
+ if ($scope0_reason) _if(() => {
+ {
+ const $scope1_id = _scope_id();
+ _set_serialize_reason(1);
+ const $childScope = _peek_scope_id();
+ badge_default("x");
+ _set_serialize_reason(1);
+ const $childScope2 = _peek_scope_id();
+ badge_default(input.tag);
+ _scope($scope1_id, {
+ a: _existing_scope($childScope),
+ b: _existing_scope($childScope2)
+ });
+ return 0;
+ }
+ }, $scope0_id, "a");
+ _html(`${_el_resume($scope0_id, "b")}`);
+ _script($scope0_id, "a0");
+ $scope0_reason ? _scope($scope0_id, {
+ e: input.tag,
+ f: show
+ }) : _owned_guard($scope0_owned, 0) && _patch_value($scope0_id, "a0", input.tag);
+ _resume_branch($scope0_id);
+}, 1, () => [badge_default]);
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-child-args/__snapshots__/patches.debug.js b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-args/__snapshots__/patches.debug.js
new file mode 100644
index 00000000000..64f199d14ba
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-args/__snapshots__/patches.debug.js
@@ -0,0 +1,9 @@
+// PATCH
+{
+ "PatchValue:packages/runtime-tags/src/__tests__/fixtures/persisted-child-args/template.marko0": "t2"
+}
+
+// PATCH
+{
+ "PatchValue:packages/runtime-tags/src/__tests__/fixtures/persisted-child-args/template.marko0": "t3"
+}
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-child-args/__snapshots__/patches.js b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-args/__snapshots__/patches.js
new file mode 100644
index 00000000000..d6f3494302c
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-args/__snapshots__/patches.js
@@ -0,0 +1,9 @@
+// PATCH
+{
+ va0: "t2"
+}
+
+// PATCH
+{
+ va0: "t3"
+}
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-child-args/__snapshots__/render.debug.md b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-args/__snapshots__/render.debug.md
new file mode 100644
index 00000000000..afd889128f0
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-args/__snapshots__/render.debug.md
@@ -0,0 +1,76 @@
+# Render `{"tag":"t1"}`
+```html
+
+
+ x
+
+
+ t1
+
+
+
+```
+
+# Update
+```js
+document.querySelector("button").click();
+```
+```html
+
+
+
+```
+## Change
+```
+REMOVE: main > em
+REMOVE: main > em
+```
+
+# Update `{"tag":"t2"}`
+
+# Update
+```js
+document.querySelector("button").click();
+```
+```html
+
+
+ x
+
+
+ t2
+
+
+
+```
+## Change
+```
+INSERT: main > :is(em, em)
+UPDATE: main > em:nth-of-type(2)::text " " => "t2"
+UPDATE: main > em:nth-of-type(1)::text " " => "x"
+```
+
+# Update `{"tag":"t3"}`
+```html
+
+
+ x
+
+
+ t3
+
+
+
+```
+## Change
+```
+UPDATE: main > em:nth-of-type(2)::text "t2" => "t3"
+```
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-child-args/__snapshots__/render.md b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-args/__snapshots__/render.md
new file mode 100644
index 00000000000..afd889128f0
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-args/__snapshots__/render.md
@@ -0,0 +1,76 @@
+# Render `{"tag":"t1"}`
+```html
+
+
+ x
+
+
+ t1
+
+
+
+```
+
+# Update
+```js
+document.querySelector("button").click();
+```
+```html
+
+
+
+```
+## Change
+```
+REMOVE: main > em
+REMOVE: main > em
+```
+
+# Update `{"tag":"t2"}`
+
+# Update
+```js
+document.querySelector("button").click();
+```
+```html
+
+
+ x
+
+
+ t2
+
+
+
+```
+## Change
+```
+INSERT: main > :is(em, em)
+UPDATE: main > em:nth-of-type(2)::text " " => "t2"
+UPDATE: main > em:nth-of-type(1)::text " " => "x"
+```
+
+# Update `{"tag":"t3"}`
+```html
+
+
+ x
+
+
+ t3
+
+
+
+```
+## Change
+```
+UPDATE: main > em:nth-of-type(2)::text "t2" => "t3"
+```
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-child-args/__snapshots__/writes.debug.html b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-args/__snapshots__/writes.debug.html
new file mode 100644
index 00000000000..ecc1aea82a6
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-args/__snapshots__/writes.debug.html
@@ -0,0 +1,16 @@
+
+ xt1
+
+
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-child-args/__snapshots__/writes.html b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-args/__snapshots__/writes.html
new file mode 100644
index 00000000000..27049975659
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-args/__snapshots__/writes.html
@@ -0,0 +1,14 @@
+
+ xt1
+
+
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-child-args/sizes.json b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-args/sizes.json
new file mode 100644
index 00000000000..bb4cafc43fc
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-args/sizes.json
@@ -0,0 +1,22 @@
+{
+ "dom": {
+ "template.marko.page.mjs": {
+ "total": {
+ "min": 7486,
+ "brotli": 3363
+ },
+ "files": {
+ "tags/badge/index.marko": 136,
+ "template.marko": 665
+ }
+ }
+ },
+ "html": {
+ "min": 448,
+ "brotli": 297
+ },
+ "patch": {
+ "min": 22,
+ "brotli": 26
+ }
+}
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-child-args/template.marko b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-args/template.marko
index 50849e24371..ecbdd08743a 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-child-args/template.marko
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-args/template.marko
@@ -2,6 +2,7 @@
+
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-child-args/test.ts b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-args/test.ts
index 7a0ac0e9bf4..81561e60db7 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-child-args/test.ts
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-args/test.ts
@@ -1,6 +1,12 @@
import type { TestConfig } from "../../main.test";
+const toggle = (document: Document) => {
+ document.querySelector("button")!.click();
+};
+
+// Arguments are prop-tree props: a constant arg recomputes client-side and
+// a server-fed arg delivers as a fill, like named attributes.
export const config: TestConfig = {
- error_compiler: true,
persisted: true,
+ steps: [{ tag: "t1" }, toggle, { tag: "t2" }, toggle, { tag: "t3" }],
};
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-child-attr-tag-spread/__snapshots__/error-compile-dom.debug.txt b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-attr-tag-spread/__snapshots__/error-compile-dom.debug.txt
new file mode 100644
index 00000000000..cd97d900a5c
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-attr-tag-spread/__snapshots__/error-compile-dom.debug.txt
@@ -0,0 +1,9 @@
+
+ at packages/runtime-tags/src/__tests__/fixtures/persisted-child-attr-tag-spread/template.marko:5:5
+ 3 |
+ 4 |
+ > 5 |
+ | ^ Persisted templates cannot patch this faithfully yet: an input the child needs server-owned cannot feed from client-owned structure.
+ 6 | <@tab ...thing2/>
+ 7 |
+ 8 |
\ No newline at end of file
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-child-attr-tag-spread/__snapshots__/error-compile-dom.txt b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-attr-tag-spread/__snapshots__/error-compile-dom.txt
new file mode 100644
index 00000000000..cd97d900a5c
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-attr-tag-spread/__snapshots__/error-compile-dom.txt
@@ -0,0 +1,9 @@
+
+ at packages/runtime-tags/src/__tests__/fixtures/persisted-child-attr-tag-spread/template.marko:5:5
+ 3 |
+ 4 |
+ > 5 |
+ | ^ Persisted templates cannot patch this faithfully yet: an input the child needs server-owned cannot feed from client-owned structure.
+ 6 | <@tab ...thing2/>
+ 7 |
+ 8 |
\ No newline at end of file
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-child-attr-tag-spread/__snapshots__/error-compile-html.debug.txt b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-attr-tag-spread/__snapshots__/error-compile-html.debug.txt
new file mode 100644
index 00000000000..cd97d900a5c
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-attr-tag-spread/__snapshots__/error-compile-html.debug.txt
@@ -0,0 +1,9 @@
+
+ at packages/runtime-tags/src/__tests__/fixtures/persisted-child-attr-tag-spread/template.marko:5:5
+ 3 |
+ 4 |
+ > 5 |
+ | ^ Persisted templates cannot patch this faithfully yet: an input the child needs server-owned cannot feed from client-owned structure.
+ 6 | <@tab ...thing2/>
+ 7 |
+ 8 |
\ No newline at end of file
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-child-attr-tag-spread/__snapshots__/error-compile-html.txt b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-attr-tag-spread/__snapshots__/error-compile-html.txt
new file mode 100644
index 00000000000..cd97d900a5c
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-attr-tag-spread/__snapshots__/error-compile-html.txt
@@ -0,0 +1,9 @@
+
+ at packages/runtime-tags/src/__tests__/fixtures/persisted-child-attr-tag-spread/template.marko:5:5
+ 3 |
+ 4 |
+ > 5 |
+ | ^ Persisted templates cannot patch this faithfully yet: an input the child needs server-owned cannot feed from client-owned structure.
+ 6 | <@tab ...thing2/>
+ 7 |
+ 8 |
\ No newline at end of file
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-child-attr-tag-spread/helper.ts b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-attr-tag-spread/helper.ts
new file mode 100644
index 00000000000..20e9d2b51ef
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-attr-tag-spread/helper.ts
@@ -0,0 +1 @@
+export let thing2 = { on: false };
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-child-attr-tag-spread/tags/tabs/index.marko b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-attr-tag-spread/tags/tabs/index.marko
new file mode 100644
index 00000000000..5a7f42868d9
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-attr-tag-spread/tags/tabs/index.marko
@@ -0,0 +1,6 @@
+
+ a
+
+
+ b
+
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-child-attr-tag-spread/template.marko b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-attr-tag-spread/template.marko
new file mode 100644
index 00000000000..d63e5643be6
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-attr-tag-spread/template.marko
@@ -0,0 +1,10 @@
+import { thing2 } from "./helper";
+
+
+
+
+ <@tab ...thing2/>
+
+
+
+
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-child-attr-tag-spread/test.ts b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-attr-tag-spread/test.ts
new file mode 100644
index 00000000000..28498ae3d87
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-attr-tag-spread/test.ts
@@ -0,0 +1,8 @@
+import type { TestConfig } from "../../main.test";
+
+// A spread on an attr tag may carry any property of its group: a
+// provenance-free spread value gates the structural group it feeds.
+export const config: TestConfig = {
+ error_compiler: true,
+ persisted: true,
+};
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-child-attr-tag-state/__snapshots__/dom.bundle.debug.js b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-attr-tag-state/__snapshots__/dom.bundle.debug.js
new file mode 100644
index 00000000000..b613d09f0b8
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-attr-tag-state/__snapshots__/dom.bundle.debug.js
@@ -0,0 +1,37 @@
+// tags/tabs/index.marko
+const $template$1 = "";
+const $walks$1 = "b%c";
+const $setup$1 = () => {};
+const $if_content__input_tab_on = /*@__PURE__*/ _if_closure("#text/0", 0, ($scope) => _text($scope["#text/0"], $scope._.input_tab_on));
+const $if_content__setup$1 = $if_content__input_tab_on;
+const $if$1 = /*@__PURE__*/ _if("#text/0", "a
", "Db%", $if_content__setup$1, "b");
+const $input_tab = ($scope, input_tab) => {
+ $input_tab_on($scope, input_tab?.on);
+ $if$1($scope, input_tab ? 0 : 1);
+};
+const $input = ($scope, input) => $input_tab($scope, input.tab);
+const $input_tab_on = /*@__PURE__*/ _const("input_tab_on", $if_content__input_tab_on);
+var tabs_default = /*@__PURE__*/ _template("__tests__/tags/tabs/index.marko", $template$1, "b%c", 0, $input);
+
+// template.marko
+const $template = "";
+const $walks = "D%b b l";
+const $if_content__on = /*@__PURE__*/ _if_closure("#text/0", 0, ($scope) => $input_tab($scope["#childScope/0"], attrTag({ on: $scope._.on })));
+const $if_content__setup = $if_content__on;
+const $if = /*@__PURE__*/ _if("#text/0", /*@__PURE__*/ ((_w0) => `${_w0}`)($template$1), /*@__PURE__*/ ((_w0) => `b/${_w0}&b`)("b%c"), $if_content__setup);
+const $show = /*@__PURE__*/ _let("show/3", ($scope) => $if($scope, $scope.show ? 0 : 1));
+const $on = /*@__PURE__*/ _let("on/4", $if_content__on);
+const $setup__script = _script("__tests__/template.marko_0", ($scope) => {
+ _on($scope["#button/1"], "click", function() {
+ $on($scope, !$scope.on);
+ });
+ _on($scope["#button/2"], "click", function() {
+ $show($scope, !$scope.show);
+ });
+});
+function $setup($scope) {
+ $show($scope, true);
+ $on($scope, false);
+ $setup__script($scope);
+}
+var template_default = /*@__PURE__*/ _template("__tests__/template.marko", $template, $walks, $setup);
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-child-attr-tag-state/__snapshots__/dom.bundle.js b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-attr-tag-state/__snapshots__/dom.bundle.js
new file mode 100644
index 00000000000..acb34815945
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-attr-tag-state/__snapshots__/dom.bundle.js
@@ -0,0 +1,23 @@
+// tags/tabs/index.marko
+const $template = "";
+const $if_content__input_tab_on = /*@__PURE__*/ _if_closure(0, 0, ($scope) => _text($scope.a, $scope._.e));
+const $if$1 = /*@__PURE__*/ _if(0, "a
", "Db%", $if_content__input_tab_on, "b");
+const $input_tab = ($scope, input_tab) => {
+ $input_tab_on($scope, input_tab?.on);
+ $if$1($scope, input_tab ? 0 : 1);
+};
+const $input_tab_on = /*@__PURE__*/ _const(4, $if_content__input_tab_on);
+
+// template.marko
+const $if_content__on = /*@__PURE__*/ _if_closure(0, 0, ($scope) => $input_tab($scope.a, attrTag({ on: $scope._.e })));
+const $if = /*@__PURE__*/ _if(0, /*@__PURE__*/ ((_w0) => `${_w0}`)($template), /*@__PURE__*/ ((_w0) => `b/${_w0}&b`)("b%c"), $if_content__on);
+const $show = /*@__PURE__*/ _let(3, ($scope) => $if($scope, $scope.d ? 0 : 1));
+const $on = /*@__PURE__*/ _let(4, $if_content__on);
+const $setup__script = _script("a0", ($scope) => {
+ _on($scope.b, "click", function() {
+ $on($scope, !$scope.e);
+ });
+ _on($scope.c, "click", function() {
+ $show($scope, !$scope.d);
+ });
+});
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-child-attr-tag-state/__snapshots__/html.bundle.debug.js b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-attr-tag-state/__snapshots__/html.bundle.debug.js
new file mode 100644
index 00000000000..d5a3011abb8
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-attr-tag-state/__snapshots__/html.bundle.debug.js
@@ -0,0 +1,58 @@
+// tags/tabs/index.marko
+const $template$1 = "";
+const $walks$1 = "b%c";
+_shells({
+ "__tests__/tags/tabs/index.marko": "__tests__/tags/tabs/index.marko;b%;",
+ "__tests__/tags/tabs/index.marko_1*shell": "__tests__/tags/tabs/index.marko_1*shell;Db%;a
",
+ "__tests__/tags/tabs/index.marko_2*shell": "__tests__/tags/tabs/index.marko_2*shell,b"
+});
+var tabs_default = _template_persisted("__tests__/tags/tabs/index.marko", (input) => {
+ const $scope0_owned = _persisted_ownership(), $scope0_reason = _persisted_reason(), $sg__input_tab = _source_guard($scope0_reason, 0);
+ const $scope0_id = _scope_id();
+ _if(() => {
+ if (input.tab) {
+ const $scope1_id = _scope_id();
+ _html(`a ${_patch_text($scope1_id, "#text/0", input.tab.on, 2, $scope0_owned, 1)}
`);
+ _scope($scope1_id, { _: _scope_with_id($scope0_id) }, "__tests__/tags/tabs/index.marko", "1:2");
+ return 0;
+ } else {
+ const $scope2_id = _scope_id();
+ _html("b");
+ $scope0_reason && _scope($scope2_id, {}, "__tests__/tags/tabs/index.marko", "4:2");
+ return 1;
+ }
+ }, $scope0_id, "#text/0", 1, $sg__input_tab, $sg__input_tab, void 0, void 0, ["__tests__/tags/tabs/index.marko_1*shell", "__tests__/tags/tabs/index.marko_2*shell"]);
+ $scope0_reason && _scope($scope0_id, { input_tab_on: input.tab?.on }, "__tests__/tags/tabs/index.marko", 0, { input_tab_on: ["input.tab.on"] });
+}, 0, 0);
+
+// template.marko
+const $template = "";
+const $walks = "D%b b l";
+_shells({ "__tests__/template.marko": "__tests__/template.marko !__tests__/template.marko_0;D%b b ;" });
+var template_default = _template_persisted("__tests__/template.marko", (input) => {
+ const $scope0_reason = _persisted_reason();
+ const $scope0_id = _scope_id();
+ let show = true;
+ let on = false;
+ _html("");
+ if ($scope0_reason) _if(() => {
+ if (show) {
+ const $scope1_id = _scope_id();
+ _set_serialize_reason(1);
+ const $childScope = _peek_scope_id();
+ tabs_default({ tab: attrTag({ on }) });
+ _scope($scope1_id, { "#childScope/0": _existing_scope($childScope) }, "__tests__/template.marko", "4:4");
+ return 0;
+ }
+ }, $scope0_id, "#text/0");
+ _html(`${_el_resume($scope0_id, "#button/1")}${_el_resume($scope0_id, "#button/2")}`);
+ _script($scope0_id, "__tests__/template.marko_0");
+ $scope0_reason && _scope($scope0_id, {
+ show,
+ on
+ }, "__tests__/template.marko", 0, {
+ show: "1:6",
+ on: "2:6"
+ });
+ _resume_branch($scope0_id);
+}, 1, () => [tabs_default]);
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-child-attr-tag-state/__snapshots__/html.bundle.js b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-attr-tag-state/__snapshots__/html.bundle.js
new file mode 100644
index 00000000000..2f30a9ff4ca
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-attr-tag-state/__snapshots__/html.bundle.js
@@ -0,0 +1,51 @@
+// tags/tabs/index.marko
+_shells({
+ b: "b;b%;",
+ b0: "b0;Db%;a
",
+ b1: "b1,b"
+});
+var tabs_default = _template_persisted("b", (input) => {
+ const $scope0_owned = _persisted_ownership(), $scope0_reason = _persisted_reason(), $sg__input_tab = _source_guard($scope0_reason, 0);
+ const $scope0_id = _scope_id();
+ _if(() => {
+ if (input.tab) {
+ const $scope1_id = _scope_id();
+ _html(`a ${_patch_text($scope1_id, "a", input.tab.on, 2, $scope0_owned, 1)}
`);
+ _scope($scope1_id, { _: _scope_with_id($scope0_id) });
+ return 0;
+ } else {
+ const $scope2_id = _scope_id();
+ _html("b");
+ $scope0_reason && _scope($scope2_id, {});
+ return 1;
+ }
+ }, $scope0_id, "a", 1, $sg__input_tab, $sg__input_tab, void 0, void 0, ["b0", "b1"]);
+ $scope0_reason && _scope($scope0_id, { e: input.tab?.on });
+}, 0, 0);
+
+// template.marko
+_shells({ a: "a !a0;D%b b ;" });
+var template_default = _template_persisted("a", (input) => {
+ const $scope0_reason = _persisted_reason();
+ const $scope0_id = _scope_id();
+ let show = true;
+ let on = false;
+ _html("");
+ if ($scope0_reason) _if(() => {
+ {
+ const $scope1_id = _scope_id();
+ _set_serialize_reason(1);
+ const $childScope = _peek_scope_id();
+ tabs_default({ tab: attrTag({ on }) });
+ _scope($scope1_id, { a: _existing_scope($childScope) });
+ return 0;
+ }
+ }, $scope0_id, "a");
+ _html(`${_el_resume($scope0_id, "b")}${_el_resume($scope0_id, "c")}`);
+ _script($scope0_id, "a0");
+ $scope0_reason && _scope($scope0_id, {
+ d: show,
+ e: on
+ });
+ _resume_branch($scope0_id);
+}, 1, () => [tabs_default]);
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-child-attr-tag-state/__snapshots__/patches.debug.js b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-attr-tag-state/__snapshots__/patches.debug.js
new file mode 100644
index 00000000000..d7bdae7b7c3
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-attr-tag-state/__snapshots__/patches.debug.js
@@ -0,0 +1,7 @@
+// PATCH
+
+
+// PATCH
+
+
+// PATCH
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-child-attr-tag-state/__snapshots__/patches.js b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-attr-tag-state/__snapshots__/patches.js
new file mode 100644
index 00000000000..d7bdae7b7c3
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-attr-tag-state/__snapshots__/patches.js
@@ -0,0 +1,7 @@
+// PATCH
+
+
+// PATCH
+
+
+// PATCH
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-child-attr-tag-state/__snapshots__/render.debug.md b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-attr-tag-state/__snapshots__/render.debug.md
new file mode 100644
index 00000000000..f97638dcf61
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-attr-tag-state/__snapshots__/render.debug.md
@@ -0,0 +1,94 @@
+# Render
+```html
+
+
+ a
+
+
+
+
+```
+
+# Update
+```js
+document.querySelector("button.flip").click();
+```
+```html
+
+
+ a true
+
+
+
+
+```
+## Change
+```
+UPDATE: main > div::text@2 "" => "true"
+```
+
+# Update
+```js
+document.querySelector("button.toggle").click();
+```
+```html
+
+
+
+
+```
+## Change
+```
+REMOVE: main > div
+```
+
+# Update
+```js
+document.querySelector("button.toggle").click();
+```
+```html
+
+
+ a true
+
+
+
+
+```
+## Change
+```
+INSERT: main > div
+UPDATE: main > div::text@2 "" => "true"
+```
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-child-attr-tag-state/__snapshots__/render.md b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-attr-tag-state/__snapshots__/render.md
new file mode 100644
index 00000000000..f97638dcf61
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-attr-tag-state/__snapshots__/render.md
@@ -0,0 +1,94 @@
+# Render
+```html
+
+
+ a
+
+
+
+
+```
+
+# Update
+```js
+document.querySelector("button.flip").click();
+```
+```html
+
+
+ a true
+
+
+
+
+```
+## Change
+```
+UPDATE: main > div::text@2 "" => "true"
+```
+
+# Update
+```js
+document.querySelector("button.toggle").click();
+```
+```html
+
+
+
+
+```
+## Change
+```
+REMOVE: main > div
+```
+
+# Update
+```js
+document.querySelector("button.toggle").click();
+```
+```html
+
+
+ a true
+
+
+
+
+```
+## Change
+```
+INSERT: main > div
+UPDATE: main > div::text@2 "" => "true"
+```
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-child-attr-tag-state/__snapshots__/writes.debug.html b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-attr-tag-state/__snapshots__/writes.debug.html
new file mode 100644
index 00000000000..1c2e9faf376
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-attr-tag-state/__snapshots__/writes.debug.html
@@ -0,0 +1,22 @@
+
+ a
+
+
+
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-child-attr-tag-state/__snapshots__/writes.html b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-attr-tag-state/__snapshots__/writes.html
new file mode 100644
index 00000000000..43402a30282
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-attr-tag-state/__snapshots__/writes.html
@@ -0,0 +1,19 @@
+
+ a
+
+
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-child-attr-tag-state/sizes.json b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-attr-tag-state/sizes.json
new file mode 100644
index 00000000000..cccff29c5cc
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-attr-tag-state/sizes.json
@@ -0,0 +1,22 @@
+{
+ "dom": {
+ "template.marko.page.mjs": {
+ "total": {
+ "min": 8343,
+ "brotli": 3753
+ },
+ "files": {
+ "tags/tabs/index.marko": 487,
+ "template.marko": 632
+ }
+ }
+ },
+ "html": {
+ "min": 514,
+ "brotli": 309
+ },
+ "patch": {
+ "min": 0,
+ "brotli": 1
+ }
+}
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-child-attr-tag-state/tags/tabs/index.marko b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-attr-tag-state/tags/tabs/index.marko
new file mode 100644
index 00000000000..6134c3a74ec
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-attr-tag-state/tags/tabs/index.marko
@@ -0,0 +1,6 @@
+
+ a ${input.tab.on}
+
+
+ b
+
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-child-attr-tag-state/template.marko b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-attr-tag-state/template.marko
new file mode 100644
index 00000000000..01915776294
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-attr-tag-state/template.marko
@@ -0,0 +1,11 @@
+
+
+
+
+
+ <@tab on=on/>
+
+
+ f
+ t
+
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-child-attr-tag-state/test.ts b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-attr-tag-state/test.ts
new file mode 100644
index 00000000000..5c134258d7c
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-attr-tag-state/test.ts
@@ -0,0 +1,15 @@
+import type { TestConfig } from "../../main.test";
+
+const flip = (document: Document) => {
+ document.querySelector("button.flip")!.click();
+};
+const toggle = (document: Document) => {
+ document.querySelector("button.toggle")!.click();
+};
+
+// A tracked client-state feed riding an attr-tag attribute gates nothing:
+// the group is client-owned, exactly like the plain-attribute form.
+export const config: TestConfig = {
+ persisted: true,
+ steps: [{}, flip, {}, toggle, {}, toggle, {}],
+};
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-child-body/sizes.json b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-body/sizes.json
index 21fdedb55c3..023b1b62278 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-child-body/sizes.json
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-body/sizes.json
@@ -2,8 +2,8 @@
"dom": {
"template.marko.page.mjs": {
"total": {
- "min": 6623,
- "brotli": 3044
+ "min": 6604,
+ "brotli": 3033
},
"files": {
"tags/widget/index.marko": 162,
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-child-branch-const/sizes.json b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-branch-const/sizes.json
index a7f32ebfa07..1f25f55b1dc 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-child-branch-const/sizes.json
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-branch-const/sizes.json
@@ -1,8 +1,8 @@
{
"dom": {
"template.marko.page.mjs": {
- "min": 6761,
- "brotli": 3039
+ "min": 6743,
+ "brotli": 3038
}
},
"html": {
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-child-client-const/sizes.json b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-client-const/sizes.json
index 0a8404bf550..c5a85fafccd 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-child-client-const/sizes.json
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-client-const/sizes.json
@@ -2,8 +2,8 @@
"dom": {
"template.marko.page.mjs": {
"total": {
- "min": 7284,
- "brotli": 3271
+ "min": 7262,
+ "brotli": 3268
},
"files": {
"tags/widget/index.marko": 476,
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-child-client-controllable/sizes.json b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-client-controllable/sizes.json
index 607e5d8ad37..41359fb7d14 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-child-client-controllable/sizes.json
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-client-controllable/sizes.json
@@ -2,8 +2,8 @@
"dom": {
"template.marko.page.mjs": {
"total": {
- "min": 8780,
- "brotli": 3850
+ "min": 8748,
+ "brotli": 3845
},
"files": {
"tags/field/index.marko": 527,
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-child-client-mix/sizes.json b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-client-mix/sizes.json
index 52c051e31b0..921873707b5 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-child-client-mix/sizes.json
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-client-mix/sizes.json
@@ -2,8 +2,8 @@
"dom": {
"template.marko.page.mjs": {
"total": {
- "min": 7715,
- "brotli": 3459
+ "min": 7693,
+ "brotli": 3449
},
"files": {
"tags/label/index.marko": 151,
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-child-client-tag-var/__snapshots__/dom.bundle.debug.js b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-client-tag-var/__snapshots__/dom.bundle.debug.js
new file mode 100644
index 00000000000..991283b3292
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-client-tag-var/__snapshots__/dom.bundle.debug.js
@@ -0,0 +1,40 @@
+// tags/widget/index.marko
+const $template$1 = " x";
+const $walks$1 = "D%c%l b";
+const $count = /*@__PURE__*/ _fill_let("__tests__/tags/widget/index.marko0", "count/6", ($scope) => {
+ _text($scope["#text/1"], $scope.count);
+ _return($scope, $scope.count);
+});
+const $setup__script$1 = _script("__tests__/tags/widget/index.marko_0", ($scope) => _on($scope["#button/2"], "click", function() {
+ $count($scope, +$scope.count + 1);
+}));
+function $setup$1($scope) {
+ $count($scope, 1);
+ $setup__script$1($scope);
+}
+const $input_label$1 = ($scope, input_label) => _text($scope["#text/0"], input_label);
+const $input$1 = ($scope, input) => $input_label$1($scope, input.label);
+var widget_default = /*@__PURE__*/ _template("__tests__/tags/widget/index.marko", $template$1, $walks$1, $setup$1, $input$1);
+
+// template.marko
+const $template = "";
+const $walks = "D%b l";
+const $if_content__input_label = /*@__PURE__*/ _fill_join("__tests__/template.marko0", "input_label", /*@__PURE__*/ _if_closure("#text/0", 0, ($scope) => $input_label$1($scope["#childScope/0"], $scope._.input_label)));
+const $if_content__setup = ($scope) => {
+ _var($scope, "#childScope/0", $if_content__w);
+ $if_content__input_label._($scope);
+ $setup$1($scope["#childScope/0"]);
+};
+const $if_content__w = _var_resume("__tests__/template.marko_1_w#3/var", ($scope, w) => _text($scope["#text/2"], w));
+const $if = /*@__PURE__*/ _if("#text/0", /*@__PURE__*/ ((_w0) => `${_w0}
`)($template$1), /*@__PURE__*/ ((_w0) => `0${_w0}&D l`)($walks$1), $if_content__setup);
+const $show = /*@__PURE__*/ _let("show/5", ($scope) => $if($scope, $scope.show ? 0 : 1));
+const $setup__script = _script("__tests__/template.marko_0", ($scope) => _on($scope["#button/1"], "click", function() {
+ $show($scope, !$scope.show);
+}));
+function $setup($scope) {
+ $show($scope, true);
+ $setup__script($scope);
+}
+const $input = ($scope, input) => $input_label($scope, input.label);
+const $input_label = /*@__PURE__*/ _fill_const("__tests__/template.marko0", "input_label", $if_content__input_label);
+var template_default = /*@__PURE__*/ _template("__tests__/template.marko", $template, $walks, $setup, $input);
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-child-client-tag-var/__snapshots__/dom.bundle.js b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-client-tag-var/__snapshots__/dom.bundle.js
new file mode 100644
index 00000000000..93f24e9e81a
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-client-tag-var/__snapshots__/dom.bundle.js
@@ -0,0 +1,29 @@
+// tags/widget/index.marko
+const $template = " x";
+const $walks = "D%c%l b";
+const $count = /*@__PURE__*/ _fill_let("b0", 6, ($scope) => {
+ _text($scope.b, $scope.g);
+ _return($scope, $scope.g);
+});
+const $setup__script$1 = _script("b0", ($scope) => _on($scope.c, "click", function() {
+ $count($scope, +$scope.g + 1);
+}));
+function $setup($scope) {
+ $count($scope, 1);
+ $setup__script$1($scope);
+}
+const $input_label = ($scope, input_label) => _text($scope.a, input_label);
+
+// template.marko
+const $if_content__input_label = /*@__PURE__*/ _fill_join("a0", 4, /*@__PURE__*/ _if_closure(0, 0, ($scope) => $input_label($scope.a, $scope._.e)));
+const $if_content__setup = ($scope) => {
+ _var($scope, 0, $if_content__w);
+ $if_content__input_label._($scope);
+ $setup($scope.a);
+};
+const $if_content__w = _var_resume("a0", ($scope, w) => _text($scope.c, w));
+const $if = /*@__PURE__*/ _if(0, /*@__PURE__*/ ((_w0) => `${_w0}
`)($template), /*@__PURE__*/ ((_w0) => `0${_w0}&D l`)($walks), $if_content__setup);
+const $show = /*@__PURE__*/ _let(5, ($scope) => $if($scope, $scope.f ? 0 : 1));
+const $setup__script = _script("a1", ($scope) => _on($scope.b, "click", function() {
+ $show($scope, !$scope.f);
+}));
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-child-client-tag-var/__snapshots__/error-compile-dom.debug.txt b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-client-tag-var/__snapshots__/error-compile-dom.debug.txt
deleted file mode 100644
index fe8da16a309..00000000000
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-child-client-tag-var/__snapshots__/error-compile-dom.debug.txt
+++ /dev/null
@@ -1,9 +0,0 @@
-
- at packages/runtime-tags/src/__tests__/fixtures/persisted-child-client-tag-var/template.marko:4:5
- 2 |
- 3 |
- > 4 |
- | ^^^^^^^^^^^^^^^^^^^^^ Persisted templates cannot patch this faithfully yet: a tag variable on a child inside client-owned structure is not supported yet.
- 5 |
- 6 |
- 7 |
\ No newline at end of file
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-child-client-tag-var/__snapshots__/error-compile-dom.txt b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-client-tag-var/__snapshots__/error-compile-dom.txt
deleted file mode 100644
index fe8da16a309..00000000000
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-child-client-tag-var/__snapshots__/error-compile-dom.txt
+++ /dev/null
@@ -1,9 +0,0 @@
-
- at packages/runtime-tags/src/__tests__/fixtures/persisted-child-client-tag-var/template.marko:4:5
- 2 |
- 3 |
- > 4 |
- | ^^^^^^^^^^^^^^^^^^^^^ Persisted templates cannot patch this faithfully yet: a tag variable on a child inside client-owned structure is not supported yet.
- 5 |
- 6 |
- 7 |
\ No newline at end of file
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-child-client-tag-var/__snapshots__/error-compile-html.debug.txt b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-client-tag-var/__snapshots__/error-compile-html.debug.txt
deleted file mode 100644
index fe8da16a309..00000000000
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-child-client-tag-var/__snapshots__/error-compile-html.debug.txt
+++ /dev/null
@@ -1,9 +0,0 @@
-
- at packages/runtime-tags/src/__tests__/fixtures/persisted-child-client-tag-var/template.marko:4:5
- 2 |
- 3 |
- > 4 |
- | ^^^^^^^^^^^^^^^^^^^^^ Persisted templates cannot patch this faithfully yet: a tag variable on a child inside client-owned structure is not supported yet.
- 5 |
- 6 |
- 7 |
\ No newline at end of file
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-child-client-tag-var/__snapshots__/error-compile-html.txt b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-client-tag-var/__snapshots__/error-compile-html.txt
deleted file mode 100644
index fe8da16a309..00000000000
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-child-client-tag-var/__snapshots__/error-compile-html.txt
+++ /dev/null
@@ -1,9 +0,0 @@
-
- at packages/runtime-tags/src/__tests__/fixtures/persisted-child-client-tag-var/template.marko:4:5
- 2 |
- 3 |
- > 4 |
- | ^^^^^^^^^^^^^^^^^^^^^ Persisted templates cannot patch this faithfully yet: a tag variable on a child inside client-owned structure is not supported yet.
- 5 |
- 6 |
- 7 |
\ No newline at end of file
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-child-client-tag-var/__snapshots__/html.bundle.debug.js b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-client-tag-var/__snapshots__/html.bundle.debug.js
new file mode 100644
index 00000000000..228513b1746
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-client-tag-var/__snapshots__/html.bundle.debug.js
@@ -0,0 +1,49 @@
+// tags/widget/index.marko
+const $template$1 = " x";
+const $walks$1 = "D%c%l b";
+_shells({ "__tests__/tags/widget/index.marko": "__tests__/tags/widget/index.marko !__tests__/tags/widget/index.marko_0;D%c%l ; x" });
+var widget_default = _template_persisted("__tests__/tags/widget/index.marko", (input) => {
+ const $scope0_owned = _persisted_ownership(), $scope0_reason = _persisted_reason();
+ const $scope0_id = _scope_id();
+ let count = 1;
+ _html(`${_patch_text($scope0_id, "#text/0", input.label, void 0, $scope0_owned, 0)} x${_text_resume($scope0_id, "#text/1", count, 2)}${_el_resume($scope0_id, "#button/2")}`);
+ const $return = count;
+ _script($scope0_id, "__tests__/tags/widget/index.marko_0");
+ _patch_value($scope0_id, "__tests__/tags/widget/index.marko0", count, 1);
+ $scope0_reason && _scope($scope0_id, { count }, "__tests__/tags/widget/index.marko", 0, { count: "1:6" });
+ _resume_branch($scope0_id);
+ return $return;
+}, 0, 0);
+
+// template.marko
+const $template = "";
+const $walks = "D%b l";
+_shells({ "__tests__/template.marko": "__tests__/template.marko !__tests__/template.marko_0;D%b ;" });
+var template_default = _template_persisted("__tests__/template.marko", (input) => {
+ const $scope0_owned = _persisted_ownership(), $scope0_reason = _persisted_reason();
+ const $scope0_id = _scope_id();
+ let show = true;
+ _html("");
+ if ($scope0_reason) _if(() => {
+ if (show) {
+ const $scope1_id = _scope_id();
+ _set_serialize_reason(1);
+ const $childScope = _peek_scope_id();
+ let w = widget_default({ label: input.label });
+ _var($scope1_id, "#scopeOffset/1", $childScope, "__tests__/template.marko_1_w#3/var");
+ _html(`${_text_resume($scope1_id, "#text/2", w)}
`);
+ _scope($scope1_id, { "#childScope/0": _existing_scope($childScope) }, "__tests__/template.marko", "3:4");
+ return 0;
+ }
+ }, $scope0_id, "#text/0");
+ _html(`${_el_resume($scope0_id, "#button/1")}`);
+ _script($scope0_id, "__tests__/template.marko_0");
+ $scope0_reason ? _scope($scope0_id, {
+ input_label: input.label,
+ show
+ }, "__tests__/template.marko", 0, {
+ input_label: ["input.label"],
+ show: "1:6"
+ }) : _owned_guard($scope0_owned, 0) && _patch_value($scope0_id, "__tests__/template.marko0", input.label);
+ _resume_branch($scope0_id);
+}, 1, () => [widget_default]);
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-child-client-tag-var/__snapshots__/html.bundle.js b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-client-tag-var/__snapshots__/html.bundle.js
new file mode 100644
index 00000000000..744b5b3c40d
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-client-tag-var/__snapshots__/html.bundle.js
@@ -0,0 +1,42 @@
+// tags/widget/index.marko
+_shells({ b: "b !b0;D%c%l ; x" });
+var widget_default = _template_persisted("b", (input) => {
+ const $scope0_owned = _persisted_ownership(), $scope0_reason = _persisted_reason();
+ const $scope0_id = _scope_id();
+ let count = 1;
+ _html(`${_patch_text($scope0_id, "a", input.label, void 0, $scope0_owned, 0)} x${_text_resume($scope0_id, "b", count, 2)}${_el_resume($scope0_id, "c")}`);
+ const $return = count;
+ _script($scope0_id, "b0");
+ _patch_value($scope0_id, "b0", count, 1);
+ $scope0_reason && _scope($scope0_id, { g: count });
+ _resume_branch($scope0_id);
+ return $return;
+}, 0, 0);
+
+// template.marko
+_shells({ a: "a !a1;D%b ;" });
+var template_default = _template_persisted("a", (input) => {
+ const $scope0_owned = _persisted_ownership(), $scope0_reason = _persisted_reason();
+ const $scope0_id = _scope_id();
+ let show = true;
+ _html("");
+ if ($scope0_reason) _if(() => {
+ {
+ const $scope1_id = _scope_id();
+ _set_serialize_reason(1);
+ const $childScope = _peek_scope_id();
+ let w = widget_default({ label: input.label });
+ _var($scope1_id, "b", $childScope, "a0");
+ _html(`${_text_resume($scope1_id, "c", w)}
`);
+ _scope($scope1_id, { a: _existing_scope($childScope) });
+ return 0;
+ }
+ }, $scope0_id, "a");
+ _html(`${_el_resume($scope0_id, "b")}`);
+ _script($scope0_id, "a1");
+ $scope0_reason ? _scope($scope0_id, {
+ e: input.label,
+ f: show
+ }) : _owned_guard($scope0_owned, 0) && _patch_value($scope0_id, "a0", input.label);
+ _resume_branch($scope0_id);
+}, 1, () => [widget_default]);
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-child-client-tag-var/__snapshots__/patches.debug.js b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-client-tag-var/__snapshots__/patches.debug.js
new file mode 100644
index 00000000000..920f8b4c043
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-client-tag-var/__snapshots__/patches.debug.js
@@ -0,0 +1,14 @@
+// PATCH
+{
+ "PatchValue:packages/runtime-tags/src/__tests__/fixtures/persisted-child-client-tag-var/template.marko0": "b"
+}
+
+// PATCH
+{
+ "PatchValue:packages/runtime-tags/src/__tests__/fixtures/persisted-child-client-tag-var/template.marko0": "c"
+}
+
+// PATCH
+{
+ "PatchValue:packages/runtime-tags/src/__tests__/fixtures/persisted-child-client-tag-var/template.marko0": "d"
+}
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-child-client-tag-var/__snapshots__/patches.js b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-client-tag-var/__snapshots__/patches.js
new file mode 100644
index 00000000000..b190f50ad97
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-client-tag-var/__snapshots__/patches.js
@@ -0,0 +1,14 @@
+// PATCH
+{
+ va0: "b"
+}
+
+// PATCH
+{
+ va0: "c"
+}
+
+// PATCH
+{
+ va0: "d"
+}
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-child-client-tag-var/__snapshots__/render.debug.md b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-client-tag-var/__snapshots__/render.debug.md
new file mode 100644
index 00000000000..791ddcccf4b
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-client-tag-var/__snapshots__/render.debug.md
@@ -0,0 +1,167 @@
+# Render `{"label":"a"}`
+```html
+
+
+ a x1
+
+
+
+ 1
+
+
+
+```
+
+# Update
+```js
+document.querySelector("button.bump").click();
+```
+```html
+
+
+ a x2
+
+
+
+ 2
+
+
+
+```
+## Change
+```
+UPDATE: main > em::text@3 "1" => "2"
+UPDATE: .echo::text "1" => "2"
+```
+
+# Update `{"label":"b"}`
+```html
+
+
+ b x2
+
+
+
+ 2
+
+
+
+```
+## Change
+```
+UPDATE: main > em::text@0 "a" => "b"
+```
+
+# Update
+```js
+document.querySelector("button.toggle").click();
+```
+```html
+
+
+
+```
+## Change
+```
+REMOVE: main > em
+REMOVE: main > button
+REMOVE: main > p
+```
+
+# Update `{"label":"c"}`
+
+# Update
+```js
+document.querySelector("button.toggle").click();
+```
+```html
+
+
+ c x1
+
+
+
+ 1
+
+
+
+```
+## Change
+```
+INSERT: main > :is(em, .bump, .echo)
+UPDATE: main > em::text@0 "" => "c"
+UPDATE: main > em::text@3 "" => "1"
+UPDATE: .echo::text " " => "1"
+```
+
+# Update `{"label":"d"}`
+```html
+
+
+ d x1
+
+
+
+ 1
+
+
+
+```
+## Change
+```
+UPDATE: main > em::text@0 "c" => "d"
+```
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-child-client-tag-var/__snapshots__/render.md b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-client-tag-var/__snapshots__/render.md
new file mode 100644
index 00000000000..791ddcccf4b
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-client-tag-var/__snapshots__/render.md
@@ -0,0 +1,167 @@
+# Render `{"label":"a"}`
+```html
+
+
+ a x1
+
+
+
+ 1
+
+
+
+```
+
+# Update
+```js
+document.querySelector("button.bump").click();
+```
+```html
+
+
+ a x2
+
+
+
+ 2
+
+
+
+```
+## Change
+```
+UPDATE: main > em::text@3 "1" => "2"
+UPDATE: .echo::text "1" => "2"
+```
+
+# Update `{"label":"b"}`
+```html
+
+
+ b x2
+
+
+
+ 2
+
+
+
+```
+## Change
+```
+UPDATE: main > em::text@0 "a" => "b"
+```
+
+# Update
+```js
+document.querySelector("button.toggle").click();
+```
+```html
+
+
+
+```
+## Change
+```
+REMOVE: main > em
+REMOVE: main > button
+REMOVE: main > p
+```
+
+# Update `{"label":"c"}`
+
+# Update
+```js
+document.querySelector("button.toggle").click();
+```
+```html
+
+
+ c x1
+
+
+
+ 1
+
+
+
+```
+## Change
+```
+INSERT: main > :is(em, .bump, .echo)
+UPDATE: main > em::text@0 "" => "c"
+UPDATE: main > em::text@3 "" => "1"
+UPDATE: .echo::text " " => "1"
+```
+
+# Update `{"label":"d"}`
+```html
+
+
+ d x1
+
+
+
+ 1
+
+
+
+```
+## Change
+```
+UPDATE: main > em::text@0 "c" => "d"
+```
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-child-client-tag-var/__snapshots__/writes.debug.html b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-client-tag-var/__snapshots__/writes.debug.html
new file mode 100644
index 00000000000..33fff04105c
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-client-tag-var/__snapshots__/writes.debug.html
@@ -0,0 +1,24 @@
+a x1
+ 1
+
+
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-child-client-tag-var/__snapshots__/writes.html b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-client-tag-var/__snapshots__/writes.html
new file mode 100644
index 00000000000..8301a5ecf7d
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-client-tag-var/__snapshots__/writes.html
@@ -0,0 +1,20 @@
+a x1
+ 1
+
+
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-child-client-tag-var/sizes.json b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-client-tag-var/sizes.json
new file mode 100644
index 00000000000..3e90cd682ca
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-client-tag-var/sizes.json
@@ -0,0 +1,22 @@
+{
+ "dom": {
+ "template.marko.page.mjs": {
+ "total": {
+ "min": 7860,
+ "brotli": 3516
+ },
+ "files": {
+ "tags/widget/index.marko": 538,
+ "template.marko": 762
+ }
+ }
+ },
+ "html": {
+ "min": 553,
+ "brotli": 348
+ },
+ "patch": {
+ "min": 30,
+ "brotli": 34
+ }
+}
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-child-client-tag-var/tags/price-card.marko b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-client-tag-var/tags/price-card.marko
deleted file mode 100644
index abaa84c05b2..00000000000
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-child-client-tag-var/tags/price-card.marko
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
${input.label + " x" + qty}
- +
-
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-child-client-tag-var/tags/widget/index.marko b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-client-tag-var/tags/widget/index.marko
index e18b824e7cd..7a03c24cdaf 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-child-client-tag-var/tags/widget/index.marko
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-client-tag-var/tags/widget/index.marko
@@ -1 +1,4 @@
-${input.label || "x"}
+
+${input.label} x${count}
++
+
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-child-client-tag-var/template.marko b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-client-tag-var/template.marko
index 471b81558a5..4c485950236 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-child-client-tag-var/template.marko
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-client-tag-var/template.marko
@@ -1,7 +1,8 @@
-
+
+ ${w}
-
+ t
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-child-client-tag-var/test.ts b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-client-tag-var/test.ts
index 7a0ac0e9bf4..20939428df7 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-child-client-tag-var/test.ts
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-client-tag-var/test.ts
@@ -1,6 +1,23 @@
import type { TestConfig } from "../../main.test";
+const bump = (document: Document) => {
+ document.querySelector("button.bump")!.click();
+};
+const toggle = (document: Document) => {
+ document.querySelector("button.toggle")!.click();
+};
+
+// An unassigned tag variable on a child inside client-owned structure is a
+// local read: the return recomputes wholly client-side each render.
export const config: TestConfig = {
- error_compiler: true,
persisted: true,
+ steps: [
+ { label: "a" },
+ bump,
+ { label: "b" },
+ toggle,
+ { label: "c" },
+ toggle,
+ { label: "d" },
+ ],
};
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-child-composed-mixed/sizes.json b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-composed-mixed/sizes.json
index 624647e4360..f13f93167a0 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-child-composed-mixed/sizes.json
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-composed-mixed/sizes.json
@@ -2,8 +2,8 @@
"dom": {
"template.marko.page.mjs": {
"total": {
- "min": 4102,
- "brotli": 1958
+ "min": 4080,
+ "brotli": 1954
},
"files": {
"tags/relay/tags/leaf/index.marko": 129,
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-child-composed/sizes.json b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-composed/sizes.json
index 2638b9d95ad..8aaea5554c5 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-child-composed/sizes.json
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-composed/sizes.json
@@ -2,7 +2,7 @@
"dom": {
"template.marko.page.mjs": {
"total": {
- "min": 3306,
+ "min": 3305,
"brotli": 1642
},
"files": {
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-child-const-attr/sizes.json b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-const-attr/sizes.json
index 833040b9d06..13121a96f8f 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-child-const-attr/sizes.json
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-const-attr/sizes.json
@@ -1,8 +1,8 @@
{
"dom": {
"template.marko.page.mjs": {
- "min": 7384,
- "brotli": 3328
+ "min": 7366,
+ "brotli": 3319
}
},
"html": {
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-child-const-branch/sizes.json b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-const-branch/sizes.json
index eb593abb262..8878818d892 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-child-const-branch/sizes.json
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-const-branch/sizes.json
@@ -1,8 +1,8 @@
{
"dom": {
"template.marko.page.mjs": {
- "min": 7384,
- "brotli": 3328
+ "min": 7366,
+ "brotli": 3319
}
},
"html": {
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-child-const-clobber/sizes.json b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-const-clobber/sizes.json
index aa783bfdef8..015a7c5fa63 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-child-const-clobber/sizes.json
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-const-clobber/sizes.json
@@ -2,8 +2,8 @@
"dom": {
"template.marko.page.mjs": {
"total": {
- "min": 3467,
- "brotli": 1690
+ "min": 3466,
+ "brotli": 1694
},
"files": {
"tags/card/index.marko": 118,
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-child-content-attr-tags/__snapshots__/dom.bundle.debug.js b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-content-attr-tags/__snapshots__/dom.bundle.debug.js
new file mode 100644
index 00000000000..651425f2759
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-content-attr-tags/__snapshots__/dom.bundle.debug.js
@@ -0,0 +1,30 @@
+// tags/panel/index.marko
+const $template$1 = "";
+const $walks$1 = "D%l";
+const $setup$1 = () => {};
+const $input_header_direct = /*@__PURE__*/ _dynamic_tag_content("#text/0");
+const $dynamicTag = /*@__PURE__*/ _dynamic_tag("#text/0");
+const $input_header = $dynamicTag;
+const $input$1 = ($scope, input) => $input_header($scope, input.header);
+var panel_default = /*@__PURE__*/ _template("__tests__/tags/panel/index.marko", $template$1, "D%l", 0, $input$1);
+
+// template.marko
+const $template = "";
+const $walks = "D%b l";
+const $header_content__input_title = /*@__PURE__*/ _fill_join_closure("__tests__/template.marko0", "input_title", /*@__PURE__*/ _closure_get("input_title", ($scope) => _text($scope["#text/0"], $scope._._.input_title), ($scope) => $scope._._), 0);
+const $header_content__setup = $header_content__input_title;
+const $header_content = /*@__PURE__*/ _content("__tests__/template.marko_2*content", "hi
", "Db%", $header_content__setup);
+const $if_content__setup = ($scope) => $input_header($scope["#childScope/0"], attrTag({ content: $header_content($scope) }));
+const $if = /*@__PURE__*/ _if("#text/0", $template$1, /*@__PURE__*/ ((_w0) => `/${_w0}&`)("D%l"), $if_content__setup);
+const $open = /*@__PURE__*/ _let("open/5", ($scope) => $if($scope, $scope.open ? 0 : 1));
+const $setup__script = _script("__tests__/template.marko_0", ($scope) => _on($scope["#button/1"], "click", function() {
+ $open($scope, !$scope.open);
+}));
+function $setup($scope) {
+ $open($scope, false);
+ $setup__script($scope);
+}
+const $input = ($scope, input) => $input_title($scope, input.title);
+const $input_title__closure = /*@__PURE__*/ _closure($header_content__input_title);
+const $input_title = /*@__PURE__*/ _fill_const("__tests__/template.marko0", "input_title", $input_title__closure);
+var template_default = /*@__PURE__*/ _template("__tests__/template.marko", $template, $walks, $setup, $input);
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-child-content-attr-tags/__snapshots__/dom.bundle.js b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-content-attr-tags/__snapshots__/dom.bundle.js
new file mode 100644
index 00000000000..3403ea69a51
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-content-attr-tags/__snapshots__/dom.bundle.js
@@ -0,0 +1,14 @@
+// tags/panel/index.marko
+const $template = "";
+const $dynamicTag = /*@__PURE__*/ _dynamic_tag(0);
+const $input_header = $dynamicTag;
+
+// template.marko
+const $header_content__input_title = /*@__PURE__*/ _fill_join_closure("a0", 4, /*@__PURE__*/ _closure_get(6, ($scope) => _text($scope.a, $scope._._.e), ($scope) => $scope._._), 0);
+const $header_content = /*@__PURE__*/ _content$1("a0", "hi
", "Db%", $header_content__input_title);
+const $if_content__setup = ($scope) => $input_header($scope.a, attrTag({ content: $header_content($scope) }));
+const $if = /*@__PURE__*/ _if(0, $template, /*@__PURE__*/ ((_w0) => `/${_w0}&`)("D%l"), $if_content__setup);
+const $open = /*@__PURE__*/ _let(5, ($scope) => $if($scope, $scope.f ? 0 : 1));
+const $setup__script = _script("a1", ($scope) => _on($scope.b, "click", function() {
+ $open($scope, !$scope.f);
+}));
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-child-content-attr-tags/__snapshots__/error-compile-dom.debug.txt b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-content-attr-tags/__snapshots__/error-compile-dom.debug.txt
deleted file mode 100644
index 7cec9c07605..00000000000
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-child-content-attr-tags/__snapshots__/error-compile-dom.debug.txt
+++ /dev/null
@@ -1,9 +0,0 @@
-
- at packages/runtime-tags/src/__tests__/fixtures/persisted-child-content-attr-tags/template.marko:4:5
- 2 |
- 3 |
- > 4 |
- | ^ Persisted templates cannot patch this faithfully yet: attribute tags for a child inside client-owned structure are not supported yet.
- 5 | <@header>
- 6 | hi
- 7 | @header>
\ No newline at end of file
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-child-content-attr-tags/__snapshots__/error-compile-dom.txt b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-content-attr-tags/__snapshots__/error-compile-dom.txt
deleted file mode 100644
index 7cec9c07605..00000000000
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-child-content-attr-tags/__snapshots__/error-compile-dom.txt
+++ /dev/null
@@ -1,9 +0,0 @@
-
- at packages/runtime-tags/src/__tests__/fixtures/persisted-child-content-attr-tags/template.marko:4:5
- 2 |
- 3 |
- > 4 |
- | ^ Persisted templates cannot patch this faithfully yet: attribute tags for a child inside client-owned structure are not supported yet.
- 5 | <@header>
- 6 | hi
- 7 | @header>
\ No newline at end of file
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-child-content-attr-tags/__snapshots__/error-compile-html.debug.txt b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-content-attr-tags/__snapshots__/error-compile-html.debug.txt
deleted file mode 100644
index 7cec9c07605..00000000000
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-child-content-attr-tags/__snapshots__/error-compile-html.debug.txt
+++ /dev/null
@@ -1,9 +0,0 @@
-
- at packages/runtime-tags/src/__tests__/fixtures/persisted-child-content-attr-tags/template.marko:4:5
- 2 |
- 3 |
- > 4 |
- | ^ Persisted templates cannot patch this faithfully yet: attribute tags for a child inside client-owned structure are not supported yet.
- 5 | <@header>
- 6 | hi
- 7 | @header>
\ No newline at end of file
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-child-content-attr-tags/__snapshots__/error-compile-html.txt b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-content-attr-tags/__snapshots__/error-compile-html.txt
deleted file mode 100644
index 7cec9c07605..00000000000
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-child-content-attr-tags/__snapshots__/error-compile-html.txt
+++ /dev/null
@@ -1,9 +0,0 @@
-
- at packages/runtime-tags/src/__tests__/fixtures/persisted-child-content-attr-tags/template.marko:4:5
- 2 |
- 3 |
- > 4 |
- | ^ Persisted templates cannot patch this faithfully yet: attribute tags for a child inside client-owned structure are not supported yet.
- 5 | <@header>
- 6 | hi
- 7 | @header>
\ No newline at end of file
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-child-content-attr-tags/__snapshots__/html.bundle.debug.js b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-content-attr-tags/__snapshots__/html.bundle.debug.js
new file mode 100644
index 00000000000..c4771398663
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-content-attr-tags/__snapshots__/html.bundle.debug.js
@@ -0,0 +1,55 @@
+// tags/panel/index.marko
+const $template$1 = "";
+const $walks$1 = "D%l";
+_shells({ "__tests__/tags/panel/index.marko": "__tests__/tags/panel/index.marko;D%;" });
+var panel_default = _template_persisted("__tests__/tags/panel/index.marko", (input) => {
+ const $scope0_owned = _persisted_ownership(), $scope0_reason = _persisted_reason();
+ const $scope0_id = _scope_id();
+ _html("");
+ _patch_dynamic_tag($scope0_id, "#text/0", input.header, $scope0_owned, 0);
+ _dynamic_tag($scope0_id, "#text/0", input.header, {}, 0, 0, _source_guard($scope0_reason, 0), 1);
+ _html("
");
+ $scope0_reason && _scope($scope0_id, {}, "__tests__/tags/panel/index.marko", 0);
+}, 0, 0);
+
+// template.marko
+const $template = "";
+const $walks = "D%b l";
+_shells({
+ "__tests__/template.marko_2*content": "__tests__/template.marko_2*content;Db%;hi
",
+ "__tests__/template.marko": "__tests__/template.marko !__tests__/template.marko_0;D%b ;"
+});
+var template_default = _template_persisted("__tests__/template.marko", (input) => {
+ const $scope0_owned = _persisted_ownership(), $scope0_reason = _persisted_reason();
+ const $scope0_id = _scope_id();
+ const $input_title__closures = new Set();
+ let open = false;
+ _html("");
+ if ($scope0_reason) _if(() => {
+ if (open) {
+ const $scope1_id = _scope_id();
+ _set_serialize_reason(1);
+ const $childScope = _peek_scope_id();
+ panel_default({ header: attrTag({ content: _content_elide("__tests__/template.marko_2*content", () => {
+ const $scope2_reason = _persisted_reason();
+ const $scope2_id = _scope_id();
+ _html(`hi ${_text_resume($scope2_id, "#text/0", input.title, 2)}
`);
+ _subscribe(_source_if($scope0_reason, 0) && $input_title__closures, _scope($scope2_id, { _: _scope_with_id($scope1_id) }, "__tests__/template.marko", "5:8"));
+ _resume_branch($scope2_id);
+ }, $scope1_id) }) });
+ _scope($scope1_id, { "#childScope/0": _existing_scope($childScope) }, "__tests__/template.marko", "3:4");
+ return 0;
+ }
+ }, $scope0_id, "#text/0", 1, 1, 1, 0, 1);
+ _html(`${_el_resume($scope0_id, "#button/1")}`);
+ _script($scope0_id, "__tests__/template.marko_0");
+ $scope0_reason ? _scope($scope0_id, {
+ input_title: input.title,
+ open,
+ "ClosureScopes:input_title": $input_title__closures
+ }, "__tests__/template.marko", 0, {
+ input_title: ["input.title"],
+ open: "1:6"
+ }) : _owned_guard($scope0_owned, 0) && _patch_value($scope0_id, "__tests__/template.marko0", input.title);
+ _resume_branch($scope0_id);
+}, 1, () => [panel_default]);
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-child-content-attr-tags/__snapshots__/html.bundle.js b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-content-attr-tags/__snapshots__/html.bundle.js
new file mode 100644
index 00000000000..98ecf32b847
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-content-attr-tags/__snapshots__/html.bundle.js
@@ -0,0 +1,33 @@
+// tags/panel/index.marko
+_shells({ b: "b;D%;" });
+var panel_default = _template_persisted("b", (input) => {
+ const $scope0_owned = _persisted_ownership(), $scope0_reason = _persisted_reason();
+ const $scope0_id = _scope_id();
+ _html("");
+ _patch_dynamic_tag($scope0_id, "a", input.header, $scope0_owned, 0);
+ _dynamic_tag($scope0_id, "a", input.header, {}, 0, 0, _source_guard($scope0_reason, 0), 1);
+ _html("
");
+ $scope0_reason && _scope($scope0_id, {});
+}, 0, 0);
+
+// template.marko
+_shells({
+ a0: "a0;Db%;hi
",
+ a: "a !a1;D%b ;"
+});
+var template_default = _template_persisted("a", (input) => {
+ const $scope0_owned = _persisted_ownership(), $scope0_reason = _persisted_reason();
+ const $scope0_id = _scope_id();
+ const $input_title__closures = /* @__PURE__ */ new Set();
+ let open = false;
+ _html("");
+ if ($scope0_reason) _if(() => {}, $scope0_id, "a", 1, 1, 1, 0, 1);
+ _html(`${_el_resume($scope0_id, "b")}`);
+ _script($scope0_id, "a1");
+ $scope0_reason ? _scope($scope0_id, {
+ e: input.title,
+ f: open,
+ g: $input_title__closures
+ }) : _owned_guard($scope0_owned, 0) && _patch_value($scope0_id, "a0", input.title);
+ _resume_branch($scope0_id);
+}, 1, () => [panel_default]);
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-child-content-attr-tags/__snapshots__/patches.debug.js b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-content-attr-tags/__snapshots__/patches.debug.js
new file mode 100644
index 00000000000..05e3e8aed92
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-content-attr-tags/__snapshots__/patches.debug.js
@@ -0,0 +1,14 @@
+// PATCH
+{
+ "PatchValue:packages/runtime-tags/src/__tests__/fixtures/persisted-child-content-attr-tags/template.marko0": "b"
+}
+
+// PATCH
+{
+ "PatchValue:packages/runtime-tags/src/__tests__/fixtures/persisted-child-content-attr-tags/template.marko0": "c"
+}
+
+// PATCH
+{
+ "PatchValue:packages/runtime-tags/src/__tests__/fixtures/persisted-child-content-attr-tags/template.marko0": "d"
+}
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-child-content-attr-tags/__snapshots__/patches.js b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-content-attr-tags/__snapshots__/patches.js
new file mode 100644
index 00000000000..b190f50ad97
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-content-attr-tags/__snapshots__/patches.js
@@ -0,0 +1,14 @@
+// PATCH
+{
+ va0: "b"
+}
+
+// PATCH
+{
+ va0: "c"
+}
+
+// PATCH
+{
+ va0: "d"
+}
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-child-content-attr-tags/__snapshots__/render.debug.md b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-content-attr-tags/__snapshots__/render.debug.md
new file mode 100644
index 00000000000..f5e4a454848
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-content-attr-tags/__snapshots__/render.debug.md
@@ -0,0 +1,116 @@
+# Render `{"title":"a"}`
+```html
+
+
+
+```
+
+# Update
+```js
+document.querySelector("button").click();
+```
+```html
+
+
+
+ hi a
+
+
+
+
+```
+## Change
+```
+INSERT: main > .panel
+INSERT: .panel > h1
+UPDATE: .panel > h1::text@3 "" => "a"
+```
+
+# Update `{"title":"b"}`
+```html
+
+
+
+ hi b
+
+
+
+
+```
+## Change
+```
+UPDATE: .panel > h1::text@3 "a" => "b"
+```
+
+# Update
+```js
+document.querySelector("button").click();
+```
+```html
+
+
+
+```
+## Change
+```
+REMOVE: main > div
+```
+
+# Update `{"title":"c"}`
+
+# Update
+```js
+document.querySelector("button").click();
+```
+```html
+
+
+
+ hi c
+
+
+
+
+```
+## Change
+```
+INSERT: main > .panel
+INSERT: .panel > h1
+UPDATE: .panel > h1::text@3 "" => "c"
+```
+
+# Update `{"title":"d"}`
+```html
+
+
+
+ hi d
+
+
+
+
+```
+## Change
+```
+UPDATE: .panel > h1::text@3 "c" => "d"
+```
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-child-content-attr-tags/__snapshots__/render.md b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-content-attr-tags/__snapshots__/render.md
new file mode 100644
index 00000000000..f5e4a454848
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-content-attr-tags/__snapshots__/render.md
@@ -0,0 +1,116 @@
+# Render `{"title":"a"}`
+```html
+
+
+
+```
+
+# Update
+```js
+document.querySelector("button").click();
+```
+```html
+
+
+
+ hi a
+
+
+
+
+```
+## Change
+```
+INSERT: main > .panel
+INSERT: .panel > h1
+UPDATE: .panel > h1::text@3 "" => "a"
+```
+
+# Update `{"title":"b"}`
+```html
+
+
+
+ hi b
+
+
+
+
+```
+## Change
+```
+UPDATE: .panel > h1::text@3 "a" => "b"
+```
+
+# Update
+```js
+document.querySelector("button").click();
+```
+```html
+
+
+
+```
+## Change
+```
+REMOVE: main > div
+```
+
+# Update `{"title":"c"}`
+
+# Update
+```js
+document.querySelector("button").click();
+```
+```html
+
+
+
+ hi c
+
+
+
+
+```
+## Change
+```
+INSERT: main > .panel
+INSERT: .panel > h1
+UPDATE: .panel > h1::text@3 "" => "c"
+```
+
+# Update `{"title":"d"}`
+```html
+
+
+
+ hi d
+
+
+
+
+```
+## Change
+```
+UPDATE: .panel > h1::text@3 "c" => "d"
+```
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-child-content-attr-tags/__snapshots__/writes.debug.html b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-content-attr-tags/__snapshots__/writes.debug.html
new file mode 100644
index 00000000000..5cc935d7bf1
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-content-attr-tags/__snapshots__/writes.debug.html
@@ -0,0 +1,12 @@
+
+
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-child-content-attr-tags/__snapshots__/writes.html b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-content-attr-tags/__snapshots__/writes.html
new file mode 100644
index 00000000000..35694fce683
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-content-attr-tags/__snapshots__/writes.html
@@ -0,0 +1,10 @@
+
+
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-child-content-attr-tags/sizes.json b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-content-attr-tags/sizes.json
new file mode 100644
index 00000000000..348ba12ff67
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-content-attr-tags/sizes.json
@@ -0,0 +1,22 @@
+{
+ "dom": {
+ "template.marko.page.mjs": {
+ "total": {
+ "min": 11512,
+ "brotli": 4906
+ },
+ "files": {
+ "tags/panel/index.marko": 180,
+ "template.marko": 748
+ }
+ }
+ },
+ "html": {
+ "min": 382,
+ "brotli": 269
+ },
+ "patch": {
+ "min": 30,
+ "brotli": 34
+ }
+}
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-child-content-attr-tags/template.marko b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-content-attr-tags/template.marko
index fb86b0418ea..1bd485ef6bd 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-child-content-attr-tags/template.marko
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-content-attr-tags/template.marko
@@ -3,7 +3,7 @@
<@header>
- hi
+ hi ${input.title}
@header>
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-child-content-attr-tags/test.ts b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-content-attr-tags/test.ts
index a417c0b3d9c..f7fbce26c8f 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-child-content-attr-tags/test.ts
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-content-attr-tags/test.ts
@@ -1,8 +1,20 @@
import type { TestConfig } from "../../main.test";
-// Attribute tags have per-name channels the region checks cannot see
-// through yet: fail closed at the call site.
+const toggle = (document: Document) => {
+ document.querySelector("button")!.click();
+};
+
+// An attr tag feeds a client-owned child like body content: its body
+// compiles in this file and its filled reads stay fresh across patches.
export const config: TestConfig = {
- error_compiler: true,
persisted: true,
+ steps: [
+ { title: "a" },
+ toggle,
+ { title: "b" },
+ toggle,
+ { title: "c" },
+ toggle,
+ { title: "d" },
+ ],
};
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-child-content-deep/sizes.json b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-content-deep/sizes.json
index 97a001d8e18..e917e454f51 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-child-content-deep/sizes.json
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-content-deep/sizes.json
@@ -2,8 +2,8 @@
"dom": {
"template.marko.page.mjs": {
"total": {
- "min": 11695,
- "brotli": 4952
+ "min": 11630,
+ "brotli": 4926
},
"files": {
"tags/card/index.marko": 173,
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-child-content-open/sizes.json b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-content-open/sizes.json
index 952db6028f0..08ce123e5d1 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-child-content-open/sizes.json
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-content-open/sizes.json
@@ -2,8 +2,8 @@
"dom": {
"template.marko.page.mjs": {
"total": {
- "min": 11597,
- "brotli": 4919
+ "min": 11532,
+ "brotli": 4901
},
"files": {
"tags/box/index.marko": 159,
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-child-content-structure/sizes.json b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-content-structure/sizes.json
index 61fe9dcebda..02de5830441 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-child-content-structure/sizes.json
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-content-structure/sizes.json
@@ -2,8 +2,8 @@
"dom": {
"template.marko.page.mjs": {
"total": {
- "min": 11674,
- "brotli": 4951
+ "min": 11609,
+ "brotli": 4927
},
"files": {
"tags/box/index.marko": 159,
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-child-content/sizes.json b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-content/sizes.json
index ee84d3a4249..44c94fa82c7 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-child-content/sizes.json
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-content/sizes.json
@@ -2,8 +2,8 @@
"dom": {
"template.marko.page.mjs": {
"total": {
- "min": 11597,
- "brotli": 4919
+ "min": 11532,
+ "brotli": 4901
},
"files": {
"tags/box/index.marko": 159,
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-child-controllable-loop/sizes.json b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-controllable-loop/sizes.json
index 64c1da9512a..2783bfb9574 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-child-controllable-loop/sizes.json
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-controllable-loop/sizes.json
@@ -2,8 +2,8 @@
"dom": {
"template.marko.page.mjs": {
"total": {
- "min": 9915,
- "brotli": 4415
+ "min": 9876,
+ "brotli": 4404
},
"files": {
"tags/counter/index.marko": 301,
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-child-controllable-passthrough/sizes.json b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-controllable-passthrough/sizes.json
index 1a0f2876107..b8d6f68edfe 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-child-controllable-passthrough/sizes.json
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-controllable-passthrough/sizes.json
@@ -2,8 +2,8 @@
"dom": {
"template.marko.page.mjs": {
"total": {
- "min": 8056,
- "brotli": 3583
+ "min": 8017,
+ "brotli": 3572
},
"files": {
"tags/counter/index.marko": 301,
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-child-controllable-poison/sizes.json b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-controllable-poison/sizes.json
index aba04697b29..4b3bc978b34 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-child-controllable-poison/sizes.json
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-controllable-poison/sizes.json
@@ -2,8 +2,8 @@
"dom": {
"template.marko.page.mjs": {
"total": {
- "min": 10162,
- "brotli": 4516
+ "min": 10123,
+ "brotli": 4509
},
"files": {
"tags/counter/index.marko": 309,
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-child-controllable-siblings/sizes.json b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-controllable-siblings/sizes.json
index 5ad8f5711f9..a51524e079c 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-child-controllable-siblings/sizes.json
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-controllable-siblings/sizes.json
@@ -2,8 +2,8 @@
"dom": {
"template.marko.page.mjs": {
"total": {
- "min": 8113,
- "brotli": 3597
+ "min": 8074,
+ "brotli": 3584
},
"files": {
"tags/counter/index.marko": 301,
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-child-controllable-swap/sizes.json b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-controllable-swap/sizes.json
index 4c3cec054c3..0cbf03a5654 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-child-controllable-swap/sizes.json
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-controllable-swap/sizes.json
@@ -2,8 +2,8 @@
"dom": {
"template.marko.page.mjs": {
"total": {
- "min": 8075,
- "brotli": 3593
+ "min": 8036,
+ "brotli": 3576
},
"files": {
"tags/counter/index.marko": 301,
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-child-controllable/sizes.json b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-controllable/sizes.json
index 363823741aa..7f39111d688 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-child-controllable/sizes.json
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-controllable/sizes.json
@@ -2,8 +2,8 @@
"dom": {
"template.marko.page.mjs": {
"total": {
- "min": 8056,
- "brotli": 3583
+ "min": 8017,
+ "brotli": 3572
},
"files": {
"tags/counter/index.marko": 301,
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-child-ctrl-input/sizes.json b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-ctrl-input/sizes.json
index cfcf1104164..90ac36bf7f8 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-child-ctrl-input/sizes.json
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-ctrl-input/sizes.json
@@ -2,8 +2,8 @@
"dom": {
"template.marko.page.mjs": {
"total": {
- "min": 9131,
- "brotli": 4010
+ "min": 9099,
+ "brotli": 4004
},
"files": {
"tags/field/index.marko": 589,
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-child-ctrl-server-handler/sizes.json b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-ctrl-server-handler/sizes.json
index 8b426a3c36b..41fbe10ff79 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-child-ctrl-server-handler/sizes.json
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-ctrl-server-handler/sizes.json
@@ -2,8 +2,8 @@
"dom": {
"template.marko.page.mjs": {
"total": {
- "min": 9393,
- "brotli": 4117
+ "min": 9355,
+ "brotli": 4101
},
"files": {
"tags/field/index.marko": 501,
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-child-fn-server/sizes.json b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-fn-server/sizes.json
index 4e74d204bbb..5a2a9a3cec9 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-child-fn-server/sizes.json
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-fn-server/sizes.json
@@ -2,8 +2,8 @@
"dom": {
"template.marko.page.mjs": {
"total": {
- "min": 4118,
- "brotli": 1971
+ "min": 4096,
+ "brotli": 1964
},
"files": {
"tags/dump/index.marko": 123,
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-child-global-derived/__snapshots__/dom.bundle.debug.js b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-global-derived/__snapshots__/dom.bundle.debug.js
new file mode 100644
index 00000000000..f39bc9cacb5
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-global-derived/__snapshots__/dom.bundle.debug.js
@@ -0,0 +1,24 @@
+// tags/widget/index.marko
+const $template$1 = " ";
+const $walks$1 = "D l";
+const $setup$1 = () => {};
+const $input_text = ($scope, input_text) => _text($scope["#text/0"], input_text);
+const $input = ($scope, input) => $input_text($scope, input.text);
+var widget_default = /*@__PURE__*/ _template("__tests__/tags/widget/index.marko", $template$1, "D l", 0, $input);
+
+// template.marko
+const $template = "";
+const $walks = "D%b l";
+const $if_content__brand = /*@__PURE__*/ _fill_join("__tests__/template.marko0", "brand", /*@__PURE__*/ _if_closure("#text/0", 0, ($scope) => $input_text($scope["#childScope/0"], $scope._.brand)));
+const $if_content__setup = $if_content__brand;
+const $brand = /*@__PURE__*/ _fill_const("__tests__/template.marko0", "brand", $if_content__brand);
+const $if = /*@__PURE__*/ _if("#text/0", $template$1, /*@__PURE__*/ ((_w0) => `/${_w0}&`)("D l"), $if_content__setup);
+const $show = /*@__PURE__*/ _let("show/4", ($scope) => $if($scope, $scope.show ? 0 : 1));
+const $setup__script = _script("__tests__/template.marko_0", ($scope) => _on($scope["#button/1"], "click", function() {
+ $show($scope, !$scope.show);
+}));
+function $setup($scope) {
+ $show($scope, true);
+ $setup__script($scope);
+}
+var template_default = /*@__PURE__*/ _template("__tests__/template.marko", $template, $walks, $setup);
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-child-global-derived/__snapshots__/dom.bundle.js b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-global-derived/__snapshots__/dom.bundle.js
new file mode 100644
index 00000000000..b7fa0b25c4b
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-global-derived/__snapshots__/dom.bundle.js
@@ -0,0 +1,11 @@
+// tags/widget/index.marko
+const $template = " ";
+const $input_text = ($scope, input_text) => _text($scope.a, input_text);
+
+// template.marko
+const $if_content__setup = /* @__PURE__ */ _fill_join("a0", 2, /*@__PURE__*/ _if_closure(0, 0, ($scope) => $input_text($scope.a, $scope._.c)));
+const $if = /*@__PURE__*/ _if(0, $template, /*@__PURE__*/ ((_w0) => `/${_w0}&`)("D l"), $if_content__setup);
+const $show = /*@__PURE__*/ _let(4, ($scope) => $if($scope, $scope.e ? 0 : 1));
+const $setup__script = _script("a0", ($scope) => _on($scope.b, "click", function() {
+ $show($scope, !$scope.e);
+}));
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-child-global-derived/__snapshots__/error-compile-dom.debug.txt b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-global-derived/__snapshots__/error-compile-dom.debug.txt
deleted file mode 100644
index 069e1baf9c2..00000000000
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-child-global-derived/__snapshots__/error-compile-dom.debug.txt
+++ /dev/null
@@ -1,9 +0,0 @@
-
- at packages/runtime-tags/src/__tests__/fixtures/persisted-child-global-derived/template.marko:5:13
- 3 |
- 4 |
- > 5 |
- | ^^^^^^^^^^ Persisted templates cannot patch this faithfully yet: `$global` cannot be read inside client-owned structure.
- 6 |
- 7 |
- 8 |
\ No newline at end of file
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-child-global-derived/__snapshots__/error-compile-dom.txt b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-global-derived/__snapshots__/error-compile-dom.txt
deleted file mode 100644
index 069e1baf9c2..00000000000
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-child-global-derived/__snapshots__/error-compile-dom.txt
+++ /dev/null
@@ -1,9 +0,0 @@
-
- at packages/runtime-tags/src/__tests__/fixtures/persisted-child-global-derived/template.marko:5:13
- 3 |
- 4 |
- > 5 |
- | ^^^^^^^^^^ Persisted templates cannot patch this faithfully yet: `$global` cannot be read inside client-owned structure.
- 6 |
- 7 |
- 8 |
\ No newline at end of file
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-child-global-derived/__snapshots__/error-compile-html.debug.txt b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-global-derived/__snapshots__/error-compile-html.debug.txt
deleted file mode 100644
index 069e1baf9c2..00000000000
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-child-global-derived/__snapshots__/error-compile-html.debug.txt
+++ /dev/null
@@ -1,9 +0,0 @@
-
- at packages/runtime-tags/src/__tests__/fixtures/persisted-child-global-derived/template.marko:5:13
- 3 |
- 4 |
- > 5 |
- | ^^^^^^^^^^ Persisted templates cannot patch this faithfully yet: `$global` cannot be read inside client-owned structure.
- 6 |
- 7 |
- 8 |
\ No newline at end of file
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-child-global-derived/__snapshots__/error-compile-html.txt b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-global-derived/__snapshots__/error-compile-html.txt
deleted file mode 100644
index 069e1baf9c2..00000000000
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-child-global-derived/__snapshots__/error-compile-html.txt
+++ /dev/null
@@ -1,9 +0,0 @@
-
- at packages/runtime-tags/src/__tests__/fixtures/persisted-child-global-derived/template.marko:5:13
- 3 |
- 4 |
- > 5 |
- | ^^^^^^^^^^ Persisted templates cannot patch this faithfully yet: `$global` cannot be read inside client-owned structure.
- 6 |
- 7 |
- 8 |
\ No newline at end of file
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-child-global-derived/__snapshots__/html.bundle.debug.js b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-global-derived/__snapshots__/html.bundle.debug.js
new file mode 100644
index 00000000000..db6b39ecf0c
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-global-derived/__snapshots__/html.bundle.debug.js
@@ -0,0 +1,43 @@
+// tags/widget/index.marko
+const $template$1 = " ";
+const $walks$1 = "D l";
+_shells({ "__tests__/tags/widget/index.marko": "__tests__/tags/widget/index.marko;D ; " });
+var widget_default = _template_persisted("__tests__/tags/widget/index.marko", (input) => {
+ const $scope0_owned = _persisted_ownership(), $scope0_reason = _persisted_reason();
+ const $scope0_id = _scope_id();
+ _html(`${_patch_text($scope0_id, "#text/0", input.text, void 0, $scope0_owned, 0)}`);
+ $scope0_reason && _scope($scope0_id, {}, "__tests__/tags/widget/index.marko", 0);
+}, 0, 0);
+
+// template.marko
+const $template = "";
+const $walks = "D%b l";
+_shells({ "__tests__/template.marko": "__tests__/template.marko !__tests__/template.marko_0;D%b ;" });
+var template_default = _template_persisted("__tests__/template.marko", (input) => {
+ const $scope0_reason = _persisted_reason();
+ const $scope0_id = _scope_id();
+ const $global$1 = $global();
+ const brand = `${$global$1.brand}`;
+ let show = true;
+ _html("");
+ if ($scope0_reason) _if(() => {
+ if (show) {
+ const $scope1_id = _scope_id();
+ _set_serialize_reason(1);
+ const $childScope = _peek_scope_id();
+ widget_default({ text: brand });
+ _scope($scope1_id, { "#childScope/0": _existing_scope($childScope) }, "__tests__/template.marko", "4:4");
+ return 0;
+ }
+ }, $scope0_id, "#text/0", 1, 1, 1, 0, 1);
+ _html(`${_el_resume($scope0_id, "#button/1")}`);
+ _script($scope0_id, "__tests__/template.marko_0");
+ $scope0_reason ? _scope($scope0_id, {
+ brand,
+ show
+ }, "__tests__/template.marko", 0, {
+ brand: "1:8",
+ show: "2:6"
+ }) : _patch_value($scope0_id, "__tests__/template.marko0", brand);
+ _resume_branch($scope0_id);
+}, 1, 1);
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-child-global-derived/__snapshots__/html.bundle.js b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-global-derived/__snapshots__/html.bundle.js
new file mode 100644
index 00000000000..acbbd4f9a73
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-global-derived/__snapshots__/html.bundle.js
@@ -0,0 +1,35 @@
+// tags/widget/index.marko
+_shells({ b: "b;D ; " });
+var widget_default = _template_persisted("b", (input) => {
+ const $scope0_owned = _persisted_ownership(), $scope0_reason = _persisted_reason();
+ const $scope0_id = _scope_id();
+ _html(`${_patch_text($scope0_id, "a", input.text, void 0, $scope0_owned, 0)}`);
+ $scope0_reason && _scope($scope0_id, {});
+}, 0, 0);
+
+// template.marko
+_shells({ a: "a !a0;D%b ;" });
+var template_default = _template_persisted("a", (input) => {
+ const $scope0_reason = _persisted_reason();
+ const $scope0_id = _scope_id();
+ const brand = `${$global().brand}`;
+ let show = true;
+ _html("");
+ if ($scope0_reason) _if(() => {
+ {
+ const $scope1_id = _scope_id();
+ _set_serialize_reason(1);
+ const $childScope = _peek_scope_id();
+ widget_default({ text: brand });
+ _scope($scope1_id, { a: _existing_scope($childScope) });
+ return 0;
+ }
+ }, $scope0_id, "a", 1, 1, 1, 0, 1);
+ _html(`${_el_resume($scope0_id, "b")}`);
+ _script($scope0_id, "a0");
+ $scope0_reason ? _scope($scope0_id, {
+ c: brand,
+ e: show
+ }) : _patch_value($scope0_id, "a0", brand);
+ _resume_branch($scope0_id);
+}, 1, 1);
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-child-global-derived/__snapshots__/patches.debug.js b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-global-derived/__snapshots__/patches.debug.js
new file mode 100644
index 00000000000..06a52d082ac
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-global-derived/__snapshots__/patches.debug.js
@@ -0,0 +1,4 @@
+// PATCH
+{
+ "PatchValue:packages/runtime-tags/src/__tests__/fixtures/persisted-child-global-derived/template.marko0": "bmce"
+}
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-child-global-derived/__snapshots__/patches.js b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-global-derived/__snapshots__/patches.js
new file mode 100644
index 00000000000..5014312e4f3
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-global-derived/__snapshots__/patches.js
@@ -0,0 +1,4 @@
+// PATCH
+{
+ va0: "bmce"
+}
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-child-global-derived/__snapshots__/render.debug.md b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-global-derived/__snapshots__/render.debug.md
new file mode 100644
index 00000000000..f4314eed842
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-global-derived/__snapshots__/render.debug.md
@@ -0,0 +1,63 @@
+# Render `{"$global":{"brand":"acme"}}`
+```html
+
+
+ acme
+
+
+
+```
+
+# Update `{"$global":{"brand":"bmce"}}`
+```html
+
+
+ bmce
+
+
+
+```
+## Change
+```
+UPDATE: main > em::text "acme" => "bmce"
+```
+
+# Update
+```js
+document.querySelector("button").click();
+```
+```html
+
+
+
+```
+## Change
+```
+REMOVE: main > em
+```
+
+# Update
+```js
+document.querySelector("button").click();
+```
+```html
+
+
+ bmce
+
+
+
+```
+## Change
+```
+INSERT: main > em
+UPDATE: main > em::text " " => "bmce"
+```
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-child-global-derived/__snapshots__/render.md b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-global-derived/__snapshots__/render.md
new file mode 100644
index 00000000000..f4314eed842
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-global-derived/__snapshots__/render.md
@@ -0,0 +1,63 @@
+# Render `{"$global":{"brand":"acme"}}`
+```html
+
+
+ acme
+
+
+
+```
+
+# Update `{"$global":{"brand":"bmce"}}`
+```html
+
+
+ bmce
+
+
+
+```
+## Change
+```
+UPDATE: main > em::text "acme" => "bmce"
+```
+
+# Update
+```js
+document.querySelector("button").click();
+```
+```html
+
+
+
+```
+## Change
+```
+REMOVE: main > em
+```
+
+# Update
+```js
+document.querySelector("button").click();
+```
+```html
+
+
+ bmce
+
+
+
+```
+## Change
+```
+INSERT: main > em
+UPDATE: main > em::text " " => "bmce"
+```
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-child-global-derived/__snapshots__/writes.debug.html b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-global-derived/__snapshots__/writes.debug.html
new file mode 100644
index 00000000000..e10c0a5ea2c
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-global-derived/__snapshots__/writes.debug.html
@@ -0,0 +1,15 @@
+
+ acme
+
+
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-child-global-derived/__snapshots__/writes.html b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-global-derived/__snapshots__/writes.html
new file mode 100644
index 00000000000..7baecea664b
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-global-derived/__snapshots__/writes.html
@@ -0,0 +1,12 @@
+acme
+
+
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-child-global-derived/sizes.json b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-global-derived/sizes.json
new file mode 100644
index 00000000000..d175d6e0443
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-global-derived/sizes.json
@@ -0,0 +1,22 @@
+{
+ "dom": {
+ "template.marko.page.mjs": {
+ "total": {
+ "min": 7414,
+ "brotli": 3339
+ },
+ "files": {
+ "tags/widget/index.marko": 152,
+ "template.marko": 488
+ }
+ }
+ },
+ "html": {
+ "min": 412,
+ "brotli": 285
+ },
+ "patch": {
+ "min": 13,
+ "brotli": 17
+ }
+}
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-child-global-derived/test.ts b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-global-derived/test.ts
index b33af38f028..182feb13242 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-child-global-derived/test.ts
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-global-derived/test.ts
@@ -1,7 +1,18 @@
import type { TestConfig } from "../../main.test";
-// A `$global`-derived feed never re-ships, so it fails closed.
+const toggle = (document: Document) => {
+ document.querySelector("button")!.click();
+};
+
+// A child inside client-owned structure fed a `$global`-derived value: the
+// derivation delivers as a fill, so the re-shown child renders the latest
+// patch's brand.
export const config: TestConfig = {
- error_compiler: true,
persisted: true,
+ steps: [
+ { $global: { brand: "acme" } },
+ { $global: { brand: "bmce" } },
+ toggle,
+ toggle,
+ ],
};
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-child-global-owned/__snapshots__/dom.bundle.debug.js b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-global-owned/__snapshots__/dom.bundle.debug.js
index 6485612c9b5..35abb5e06c5 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-child-global-owned/__snapshots__/dom.bundle.debug.js
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-global-owned/__snapshots__/dom.bundle.debug.js
@@ -1,12 +1,10 @@
// tags/g-badge/index.marko
const $template$1 = "
";
const $walks$1 = "D%c%l";
+const $setup$1 = () => {};
const $input_value = ($scope, input_value) => _text($scope["#text/0"], input_value);
-function $setup$1($scope) {
- _text($scope["#text/1"], $scope.$global.flag);
-}
const $input = ($scope, input) => $input_value($scope, input.value);
-var g_badge_default = /*@__PURE__*/ _template("__tests__/tags/g-badge/index.marko", $template$1, $walks$1, $setup$1, $input);
+var g_badge_default = /*@__PURE__*/ _template("__tests__/tags/g-badge/index.marko", $template$1, $walks$1, 0, $input);
// template.marko
const $template = /*@__PURE__*/ ((_w0) => `${_w0}`)($template$1);
@@ -16,7 +14,6 @@ const $setup__script = _script("__tests__/template.marko_0", ($scope) => _on($sc
$count($scope, +$scope.count + 1);
}));
function $setup($scope) {
- $setup$1($scope["#childScope/0"]);
$count($scope, 0);
$setup__script($scope);
}
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-child-global-owned/sizes.json b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-global-owned/sizes.json
index 5d7699efa68..aaa937a34a7 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-child-global-owned/sizes.json
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-global-owned/sizes.json
@@ -2,8 +2,8 @@
"dom": {
"template.marko.page.mjs": {
"total": {
- "min": 3288,
- "brotli": 1631
+ "min": 3287,
+ "brotli": 1634
},
"files": {
"tags/g-badge/index.marko": 124,
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-child-globals/__snapshots__/error-compile-dom.debug.txt b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-globals/__snapshots__/error-compile-dom.debug.txt
index 68d529c3541..e08b864ecf1 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-child-globals/__snapshots__/error-compile-dom.debug.txt
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-globals/__snapshots__/error-compile-dom.debug.txt
@@ -3,7 +3,7 @@
2 |
3 |
> 4 |
- | ^^^^^^^^^ Persisted templates cannot patch this faithfully yet: a child inside client-owned structure reads `$global` (it would go stale).
+ | ^^^^^^^^^ Persisted templates cannot patch this faithfully yet: a child inside client-owned structure reads a `$global`-derived value (it would go stale).
5 |
6 |
7 |
\ No newline at end of file
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-child-globals/__snapshots__/error-compile-dom.txt b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-globals/__snapshots__/error-compile-dom.txt
index 68d529c3541..e08b864ecf1 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-child-globals/__snapshots__/error-compile-dom.txt
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-globals/__snapshots__/error-compile-dom.txt
@@ -3,7 +3,7 @@
2 |
3 |
> 4 |
- | ^^^^^^^^^ Persisted templates cannot patch this faithfully yet: a child inside client-owned structure reads `$global` (it would go stale).
+ | ^^^^^^^^^ Persisted templates cannot patch this faithfully yet: a child inside client-owned structure reads a `$global`-derived value (it would go stale).
5 |
6 |
7 |
\ No newline at end of file
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-child-globals/__snapshots__/error-compile-html.debug.txt b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-globals/__snapshots__/error-compile-html.debug.txt
index 68d529c3541..e08b864ecf1 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-child-globals/__snapshots__/error-compile-html.debug.txt
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-globals/__snapshots__/error-compile-html.debug.txt
@@ -3,7 +3,7 @@
2 |
3 |
> 4 |
- | ^^^^^^^^^ Persisted templates cannot patch this faithfully yet: a child inside client-owned structure reads `$global` (it would go stale).
+ | ^^^^^^^^^ Persisted templates cannot patch this faithfully yet: a child inside client-owned structure reads a `$global`-derived value (it would go stale).
5 |
6 |
7 |
\ No newline at end of file
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-child-globals/__snapshots__/error-compile-html.txt b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-globals/__snapshots__/error-compile-html.txt
index 68d529c3541..e08b864ecf1 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-child-globals/__snapshots__/error-compile-html.txt
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-globals/__snapshots__/error-compile-html.txt
@@ -3,7 +3,7 @@
2 |
3 |
> 4 |
- | ^^^^^^^^^ Persisted templates cannot patch this faithfully yet: a child inside client-owned structure reads `$global` (it would go stale).
+ | ^^^^^^^^^ Persisted templates cannot patch this faithfully yet: a child inside client-owned structure reads a `$global`-derived value (it would go stale).
5 |
6 |
7 |
\ No newline at end of file
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-child-grandchild-var-assigned/__snapshots__/error-compile-dom.debug.txt b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-grandchild-var-assigned/__snapshots__/error-compile-dom.debug.txt
new file mode 100644
index 00000000000..8fa8347cfa3
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-grandchild-var-assigned/__snapshots__/error-compile-dom.debug.txt
@@ -0,0 +1,9 @@
+
+ at packages/runtime-tags/src/__tests__/fixtures/persisted-child-grandchild-var-assigned/template.marko:4:5
+ 2 |
+ 3 |
+ > 4 |
+ | ^^^^^^^^^ Persisted templates cannot patch this faithfully yet: a child inside client-owned structure renders a nested child with an assigned tag variable.
+ 5 |
+ 6 | t
+ 7 |
\ No newline at end of file
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-child-grandchild-var-assigned/__snapshots__/error-compile-dom.txt b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-grandchild-var-assigned/__snapshots__/error-compile-dom.txt
new file mode 100644
index 00000000000..8fa8347cfa3
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-grandchild-var-assigned/__snapshots__/error-compile-dom.txt
@@ -0,0 +1,9 @@
+
+ at packages/runtime-tags/src/__tests__/fixtures/persisted-child-grandchild-var-assigned/template.marko:4:5
+ 2 |
+ 3 |
+ > 4 |
+ | ^^^^^^^^^ Persisted templates cannot patch this faithfully yet: a child inside client-owned structure renders a nested child with an assigned tag variable.
+ 5 |
+ 6 | t
+ 7 |
\ No newline at end of file
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-child-grandchild-var-assigned/__snapshots__/error-compile-html.debug.txt b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-grandchild-var-assigned/__snapshots__/error-compile-html.debug.txt
new file mode 100644
index 00000000000..8fa8347cfa3
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-grandchild-var-assigned/__snapshots__/error-compile-html.debug.txt
@@ -0,0 +1,9 @@
+
+ at packages/runtime-tags/src/__tests__/fixtures/persisted-child-grandchild-var-assigned/template.marko:4:5
+ 2 |
+ 3 |
+ > 4 |
+ | ^^^^^^^^^ Persisted templates cannot patch this faithfully yet: a child inside client-owned structure renders a nested child with an assigned tag variable.
+ 5 |
+ 6 | t
+ 7 |
\ No newline at end of file
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-child-grandchild-var-assigned/__snapshots__/error-compile-html.txt b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-grandchild-var-assigned/__snapshots__/error-compile-html.txt
new file mode 100644
index 00000000000..8fa8347cfa3
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-grandchild-var-assigned/__snapshots__/error-compile-html.txt
@@ -0,0 +1,9 @@
+
+ at packages/runtime-tags/src/__tests__/fixtures/persisted-child-grandchild-var-assigned/template.marko:4:5
+ 2 |
+ 3 |
+ > 4 |
+ | ^^^^^^^^^ Persisted templates cannot patch this faithfully yet: a child inside client-owned structure renders a nested child with an assigned tag variable.
+ 5 |
+ 6 | t
+ 7 |
\ No newline at end of file
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-child-grandchild-var-assigned/tags/widget/index.marko b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-grandchild-var-assigned/tags/widget/index.marko
new file mode 100644
index 00000000000..23ff0341385
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-grandchild-var-assigned/tags/widget/index.marko
@@ -0,0 +1,3 @@
+
+${v}
+r
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-child-grandchild-var-assigned/tags/widget/tags/inner/index.marko b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-grandchild-var-assigned/tags/widget/tags/inner/index.marko
new file mode 100644
index 00000000000..f8aea48cdbd
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-grandchild-var-assigned/tags/widget/tags/inner/index.marko
@@ -0,0 +1,3 @@
+
++
+
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-child-grandchild-var-assigned/template.marko b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-grandchild-var-assigned/template.marko
new file mode 100644
index 00000000000..eec18b3a185
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-grandchild-var-assigned/template.marko
@@ -0,0 +1,7 @@
+
+
+
+
+
+ t
+
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-child-grandchild-var-assigned/test.ts b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-grandchild-var-assigned/test.ts
new file mode 100644
index 00000000000..9b6e975fede
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-grandchild-var-assigned/test.ts
@@ -0,0 +1,8 @@
+import type { TestConfig } from "../../main.test";
+
+// Assigning a grandchild's tag variable needs the `_var_change` chain the
+// instance memo cannot vouch for: the call site fails closed.
+export const config: TestConfig = {
+ error_compiler: true,
+ persisted: true,
+};
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-child-grandchild-var/__snapshots__/dom.bundle.debug.js b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-grandchild-var/__snapshots__/dom.bundle.debug.js
new file mode 100644
index 00000000000..205ffdbc820
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-grandchild-var/__snapshots__/dom.bundle.debug.js
@@ -0,0 +1,39 @@
+// tags/widget/tags/inner/index.marko
+const $template$2 = "";
+const $walks$2 = " b";
+const $n = /*@__PURE__*/ _fill_let("__tests__/tags/widget/tags/inner/index.marko0", "n/1", ($scope) => _return($scope, $scope.n));
+const $setup__script$1 = _script("__tests__/tags/widget/tags/inner/index.marko_0", ($scope) => _on($scope["#button/0"], "click", function() {
+ $n($scope, +$scope.n + 1);
+}));
+function $setup$2($scope) {
+ $n($scope, 1);
+ $setup__script$1($scope);
+}
+var inner_default = /*@__PURE__*/ _template("__tests__/tags/widget/tags/inner/index.marko", $template$2, " b", $setup$2);
+
+// tags/widget/index.marko
+const $template$1 = /*@__PURE__*/ ((_w0) => `${_w0} `)($template$2);
+const $walks$1 = /*@__PURE__*/ ((_w0) => `0${_w0}&D l`)(" b");
+const $v = _var_resume("__tests__/tags/widget/index.marko_0_v#3/var", ($scope, v) => _text($scope["#text/2"], v));
+function $setup$1($scope) {
+ _var($scope, "#childScope/0", $v);
+ $setup$2($scope["#childScope/0"]);
+}
+var widget_default = /*@__PURE__*/ _template("__tests__/tags/widget/index.marko", $template$1, $walks$1, $setup$1);
+
+// template.marko
+const $template = "";
+const $walks = "D%b l";
+const $if_content__setup = ($scope) => {
+ $setup$1($scope["#childScope/0"]);
+};
+const $if = /*@__PURE__*/ _if("#text/0", $template$1, /*@__PURE__*/ ((_w0) => `/${_w0}&`)($walks$1), $if_content__setup);
+const $show = /*@__PURE__*/ _let("show/2", ($scope) => $if($scope, $scope.show ? 0 : 1));
+const $setup__script = _script("__tests__/template.marko_0", ($scope) => _on($scope["#button/1"], "click", function() {
+ $show($scope, !$scope.show);
+}));
+function $setup($scope) {
+ $show($scope, true);
+ $setup__script($scope);
+}
+var template_default = /*@__PURE__*/ _template("__tests__/template.marko", $template, $walks, $setup);
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-child-grandchild-var/__snapshots__/dom.bundle.js b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-grandchild-var/__snapshots__/dom.bundle.js
new file mode 100644
index 00000000000..a566ea0cff0
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-grandchild-var/__snapshots__/dom.bundle.js
@@ -0,0 +1,29 @@
+// tags/widget/tags/inner/index.marko
+const $template$1 = "";
+const $n = /*@__PURE__*/ _fill_let("c0", 1, ($scope) => _return($scope, $scope.b));
+const $setup__script$1 = _script("c0", ($scope) => _on($scope.a, "click", function() {
+ $n($scope, +$scope.b + 1);
+}));
+function $setup$1($scope) {
+ $n($scope, 1);
+ $setup__script$1($scope);
+}
+
+// tags/widget/index.marko
+const $template = /*@__PURE__*/ ((_w0) => `${_w0} `)($template$1);
+const $walks = /*@__PURE__*/ ((_w0) => `0${_w0}&D l`)(" b");
+const $v = _var_resume("b0", ($scope, v) => _text($scope.c, v));
+function $setup($scope) {
+ _var($scope, 0, $v);
+ $setup$1($scope.a);
+}
+
+// template.marko
+const $if_content__setup = ($scope) => {
+ $setup($scope.a);
+};
+const $if = /*@__PURE__*/ _if(0, $template, /*@__PURE__*/ ((_w0) => `/${_w0}&`)($walks), $if_content__setup);
+const $show = /*@__PURE__*/ _let(2, ($scope) => $if($scope, $scope.c ? 0 : 1));
+const $setup__script = _script("a0", ($scope) => _on($scope.b, "click", function() {
+ $show($scope, !$scope.c);
+}));
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-child-grandchild-var/__snapshots__/html.bundle.debug.js b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-grandchild-var/__snapshots__/html.bundle.debug.js
new file mode 100644
index 00000000000..53f4740aabe
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-grandchild-var/__snapshots__/html.bundle.debug.js
@@ -0,0 +1,54 @@
+// tags/widget/tags/inner/index.marko
+const $template$2 = "";
+const $walks$2 = " b";
+_shells({ "__tests__/tags/widget/tags/inner/index.marko": "__tests__/tags/widget/tags/inner/index.marko !__tests__/tags/widget/tags/inner/index.marko_0; ;" });
+var inner_default = _template_persisted("__tests__/tags/widget/tags/inner/index.marko", (input) => {
+ const $scope0_reason = _persisted_reason();
+ const $scope0_id = _scope_id();
+ let n = 1;
+ _html(`${_el_resume($scope0_id, "#button/0")}`);
+ const $return = n;
+ _script($scope0_id, "__tests__/tags/widget/tags/inner/index.marko_0");
+ _patch_value($scope0_id, "__tests__/tags/widget/tags/inner/index.marko0", n, 1);
+ $scope0_reason && _scope($scope0_id, { n }, "__tests__/tags/widget/tags/inner/index.marko", 0, { n: "1:6" });
+ _resume_branch($scope0_id);
+ return $return;
+}, 0, 0);
+
+// tags/widget/index.marko
+const $template$1 = /*@__PURE__*/ ((_w0) => `${_w0} `)($template$2);
+const $walks$1 = /*@__PURE__*/ ((_w0) => `0${_w0}&D l`)(" b");
+var widget_default = _template_persisted("__tests__/tags/widget/index.marko", (input) => {
+ const $scope0_reason = _persisted_reason();
+ const $scope0_id = _scope_id();
+ const $childScope = _peek_scope_id();
+ _patch_child($scope0_id, "#childScope/0", $childScope);
+ let v = inner_default({});
+ _var($scope0_id, "#scopeOffset/1", $childScope, "__tests__/tags/widget/index.marko_0_v#3/var");
+ _html(`${_text_resume($scope0_id, "#text/2", v)}`);
+ $scope0_reason && _scope($scope0_id, { "#childScope/0": _existing_scope($childScope) }, "__tests__/tags/widget/index.marko", 0);
+}, 0, () => [inner_default]);
+
+// template.marko
+const $template = "";
+const $walks = "D%b l";
+_shells({ "__tests__/template.marko": "__tests__/template.marko !__tests__/template.marko_0;D%b ;" });
+var template_default = _template_persisted("__tests__/template.marko", (input) => {
+ const $scope0_reason = _persisted_reason();
+ const $scope0_id = _scope_id();
+ let show = true;
+ _html("");
+ if ($scope0_reason) _if(() => {
+ if (show) {
+ const $scope1_id = _scope_id();
+ const $childScope = _peek_scope_id();
+ widget_default({});
+ _scope($scope1_id, { "#childScope/0": _existing_scope($childScope) }, "__tests__/template.marko", "3:4");
+ return 0;
+ }
+ }, $scope0_id, "#text/0");
+ _html(`${_el_resume($scope0_id, "#button/1")}`);
+ _script($scope0_id, "__tests__/template.marko_0");
+ $scope0_reason && _scope($scope0_id, { show }, "__tests__/template.marko", 0, { show: "1:6" });
+ _resume_branch($scope0_id);
+}, 1, () => [widget_default]);
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-child-grandchild-var/__snapshots__/html.bundle.js b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-grandchild-var/__snapshots__/html.bundle.js
new file mode 100644
index 00000000000..8816f18df98
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-grandchild-var/__snapshots__/html.bundle.js
@@ -0,0 +1,48 @@
+// tags/widget/tags/inner/index.marko
+_shells({ c: "c !c0; ;" });
+var inner_default = _template_persisted("c", (input) => {
+ const $scope0_reason = _persisted_reason();
+ const $scope0_id = _scope_id();
+ let n = 1;
+ _html(`${_el_resume($scope0_id, "a")}`);
+ const $return = n;
+ _script($scope0_id, "c0");
+ _patch_value($scope0_id, "c0", n, 1);
+ $scope0_reason && _scope($scope0_id, { b: n });
+ _resume_branch($scope0_id);
+ return $return;
+}, 0, 0);
+
+// tags/widget/index.marko
+var widget_default = _template_persisted("b", (input) => {
+ const $scope0_reason = _persisted_reason();
+ const $scope0_id = _scope_id();
+ const $childScope = _peek_scope_id();
+ _patch_child($scope0_id, "a", $childScope);
+ let v = inner_default({});
+ _var($scope0_id, "b", $childScope, "b0");
+ _html(`${_text_resume($scope0_id, "c", v)}`);
+ $scope0_reason && _scope($scope0_id, { a: _existing_scope($childScope) });
+}, 0, () => [inner_default]);
+
+// template.marko
+_shells({ a: "a !a0;D%b ;" });
+var template_default = _template_persisted("a", (input) => {
+ const $scope0_reason = _persisted_reason();
+ const $scope0_id = _scope_id();
+ let show = true;
+ _html("");
+ if ($scope0_reason) _if(() => {
+ {
+ const $scope1_id = _scope_id();
+ const $childScope = _peek_scope_id();
+ widget_default({});
+ _scope($scope1_id, { a: _existing_scope($childScope) });
+ return 0;
+ }
+ }, $scope0_id, "a");
+ _html(`${_el_resume($scope0_id, "b")}`);
+ _script($scope0_id, "a0");
+ $scope0_reason && _scope($scope0_id, { c: show });
+ _resume_branch($scope0_id);
+}, 1, () => [widget_default]);
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-child-grandchild-var/__snapshots__/patches.debug.js b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-grandchild-var/__snapshots__/patches.debug.js
new file mode 100644
index 00000000000..d7bdae7b7c3
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-grandchild-var/__snapshots__/patches.debug.js
@@ -0,0 +1,7 @@
+// PATCH
+
+
+// PATCH
+
+
+// PATCH
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-child-grandchild-var/__snapshots__/patches.js b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-grandchild-var/__snapshots__/patches.js
new file mode 100644
index 00000000000..d7bdae7b7c3
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-grandchild-var/__snapshots__/patches.js
@@ -0,0 +1,7 @@
+// PATCH
+
+
+// PATCH
+
+
+// PATCH
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-child-grandchild-var/__snapshots__/render.debug.md b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-grandchild-var/__snapshots__/render.debug.md
new file mode 100644
index 00000000000..2154c4c79d6
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-grandchild-var/__snapshots__/render.debug.md
@@ -0,0 +1,90 @@
+# Render
+```html
+
+
+
+ 1
+
+
+
+```
+
+# Update
+```js
+document.querySelector("button.bump").click();
+```
+```html
+
+
+
+ 2
+
+
+
+```
+## Change
+```
+UPDATE: main > em::text "1" => "2"
+```
+
+# Update
+```js
+document.querySelector("button.toggle").click();
+```
+```html
+
+
+
+```
+## Change
+```
+REMOVE: main > button
+REMOVE: main > em
+```
+
+# Update
+```js
+document.querySelector("button.toggle").click();
+```
+```html
+
+
+
+ 1
+
+
+
+```
+## Change
+```
+INSERT: main > :is(.bump, em)
+UPDATE: main > em::text " " => "1"
+```
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-child-grandchild-var/__snapshots__/render.md b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-grandchild-var/__snapshots__/render.md
new file mode 100644
index 00000000000..2154c4c79d6
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-grandchild-var/__snapshots__/render.md
@@ -0,0 +1,90 @@
+# Render
+```html
+
+
+
+ 1
+
+
+
+```
+
+# Update
+```js
+document.querySelector("button.bump").click();
+```
+```html
+
+
+
+ 2
+
+
+
+```
+## Change
+```
+UPDATE: main > em::text "1" => "2"
+```
+
+# Update
+```js
+document.querySelector("button.toggle").click();
+```
+```html
+
+
+
+```
+## Change
+```
+REMOVE: main > button
+REMOVE: main > em
+```
+
+# Update
+```js
+document.querySelector("button.toggle").click();
+```
+```html
+
+
+
+ 1
+
+
+
+```
+## Change
+```
+INSERT: main > :is(.bump, em)
+UPDATE: main > em::text " " => "1"
+```
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-child-grandchild-var/__snapshots__/writes.debug.html b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-grandchild-var/__snapshots__/writes.debug.html
new file mode 100644
index 00000000000..035ee9d36be
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-grandchild-var/__snapshots__/writes.debug.html
@@ -0,0 +1,23 @@
+1
+
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-child-grandchild-var/__snapshots__/writes.html b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-grandchild-var/__snapshots__/writes.html
new file mode 100644
index 00000000000..4e4ec2334be
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-grandchild-var/__snapshots__/writes.html
@@ -0,0 +1,19 @@
+1
+
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-child-grandchild-var/sizes.json b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-grandchild-var/sizes.json
new file mode 100644
index 00000000000..5909de663e3
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-grandchild-var/sizes.json
@@ -0,0 +1,23 @@
+{
+ "dom": {
+ "template.marko.page.mjs": {
+ "total": {
+ "min": 7472,
+ "brotli": 3354
+ },
+ "files": {
+ "tags/widget/tags/inner/index.marko": 388,
+ "tags/widget/index.marko": 320,
+ "template.marko": 408
+ }
+ }
+ },
+ "html": {
+ "min": 505,
+ "brotli": 325
+ },
+ "patch": {
+ "min": 0,
+ "brotli": 1
+ }
+}
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-child-grandchild-var/tags/widget/index.marko b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-grandchild-var/tags/widget/index.marko
new file mode 100644
index 00000000000..dd676a7587f
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-grandchild-var/tags/widget/index.marko
@@ -0,0 +1,2 @@
+
+${v}
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-child-grandchild-var/tags/widget/tags/inner/index.marko b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-grandchild-var/tags/widget/tags/inner/index.marko
new file mode 100644
index 00000000000..f8aea48cdbd
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-grandchild-var/tags/widget/tags/inner/index.marko
@@ -0,0 +1,3 @@
+
++
+
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-child-grandchild-var/template.marko b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-grandchild-var/template.marko
new file mode 100644
index 00000000000..eec18b3a185
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-grandchild-var/template.marko
@@ -0,0 +1,7 @@
+
+
+
+
+
+ t
+
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-child-grandchild-var/test.ts b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-grandchild-var/test.ts
new file mode 100644
index 00000000000..e6620935fb0
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-grandchild-var/test.ts
@@ -0,0 +1,15 @@
+import type { TestConfig } from "../../main.test";
+
+const bump = (document: Document) => {
+ document.querySelector("button.bump")!.click();
+};
+const toggle = (document: Document) => {
+ document.querySelector("button.toggle")!.click();
+};
+
+// A nested child reading a grandchild's UNASSIGNED tag variable is still a
+// self-contained client instance: the return recomputes on every render.
+export const config: TestConfig = {
+ persisted: true,
+ steps: [{}, bump, {}, toggle, {}, toggle, {}],
+};
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-child-grandchild/sizes.json b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-grandchild/sizes.json
index fb1f4f10724..b414949a2f3 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-child-grandchild/sizes.json
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-grandchild/sizes.json
@@ -2,7 +2,7 @@
"dom": {
"template.marko.page.mjs": {
"total": {
- "min": 6531,
+ "min": 6530,
"brotli": 2996
},
"files": {
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-child-handler-import/sizes.json b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-handler-import/sizes.json
index 2848cafb80b..6df60a9ec83 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-child-handler-import/sizes.json
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-handler-import/sizes.json
@@ -2,8 +2,8 @@
"dom": {
"template.marko.page.mjs": {
"total": {
- "min": 8009,
- "brotli": 3576
+ "min": 7987,
+ "brotli": 3561
},
"files": {
"tags/widget/helper.ts": 94,
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-child-in-loop/sizes.json b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-in-loop/sizes.json
index d85e7bca0fe..5b97f54ab52 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-child-in-loop/sizes.json
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-in-loop/sizes.json
@@ -2,8 +2,8 @@
"dom": {
"template.marko.page.mjs": {
"total": {
- "min": 8444,
- "brotli": 3825
+ "min": 8422,
+ "brotli": 3818
},
"files": {
"tags/badge/index.marko": 151,
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-child-intersection/sizes.json b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-intersection/sizes.json
index 26fe73ebcc4..277edb26579 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-child-intersection/sizes.json
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-intersection/sizes.json
@@ -1,8 +1,8 @@
{
"dom": {
"template.marko.page.mjs": {
- "min": 4149,
- "brotli": 1981
+ "min": 4127,
+ "brotli": 1969
}
},
"html": {
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-child-local-client-fed/sizes.json b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-local-client-fed/sizes.json
index 7e396759cf0..0f9de9d5759 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-child-local-client-fed/sizes.json
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-local-client-fed/sizes.json
@@ -2,8 +2,8 @@
"dom": {
"template.marko.page.mjs": {
"total": {
- "min": 8677,
- "brotli": 3814
+ "min": 8638,
+ "brotli": 3801
},
"files": {
"tags/child.marko": 785,
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-child-mixed-attr/sizes.json b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-mixed-attr/sizes.json
index 68008507e65..8126e8aec1f 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-child-mixed-attr/sizes.json
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-mixed-attr/sizes.json
@@ -2,7 +2,7 @@
"dom": {
"template.marko.page.mjs": {
"total": {
- "min": 3288,
+ "min": 3287,
"brotli": 1635
},
"files": {
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-child-nested-structural-attr/__snapshots__/error-compile-dom.debug.txt b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-nested-structural-attr/__snapshots__/error-compile-dom.debug.txt
new file mode 100644
index 00000000000..e73e7d11215
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-nested-structural-attr/__snapshots__/error-compile-dom.debug.txt
@@ -0,0 +1,9 @@
+
+ at packages/runtime-tags/src/__tests__/fixtures/persisted-child-nested-structural-attr/template.marko:5:5
+ 3 |
+ 4 |
+ > 5 |
+ | ^^^^^^^^^^^^^^^^^^ Persisted templates cannot patch this faithfully yet: an input the child needs server-owned cannot feed from client-owned structure.
+ 6 |
+ 7 |
+ 8 |
\ No newline at end of file
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-child-nested-structural-attr/__snapshots__/error-compile-dom.txt b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-nested-structural-attr/__snapshots__/error-compile-dom.txt
new file mode 100644
index 00000000000..e73e7d11215
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-nested-structural-attr/__snapshots__/error-compile-dom.txt
@@ -0,0 +1,9 @@
+
+ at packages/runtime-tags/src/__tests__/fixtures/persisted-child-nested-structural-attr/template.marko:5:5
+ 3 |
+ 4 |
+ > 5 |
+ | ^^^^^^^^^^^^^^^^^^ Persisted templates cannot patch this faithfully yet: an input the child needs server-owned cannot feed from client-owned structure.
+ 6 |
+ 7 |
+ 8 |
\ No newline at end of file
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-child-nested-structural-attr/__snapshots__/error-compile-html.debug.txt b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-nested-structural-attr/__snapshots__/error-compile-html.debug.txt
new file mode 100644
index 00000000000..e73e7d11215
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-nested-structural-attr/__snapshots__/error-compile-html.debug.txt
@@ -0,0 +1,9 @@
+
+ at packages/runtime-tags/src/__tests__/fixtures/persisted-child-nested-structural-attr/template.marko:5:5
+ 3 |
+ 4 |
+ > 5 |
+ | ^^^^^^^^^^^^^^^^^^ Persisted templates cannot patch this faithfully yet: an input the child needs server-owned cannot feed from client-owned structure.
+ 6 |
+ 7 |
+ 8 |
\ No newline at end of file
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-child-nested-structural-attr/__snapshots__/error-compile-html.txt b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-nested-structural-attr/__snapshots__/error-compile-html.txt
new file mode 100644
index 00000000000..e73e7d11215
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-nested-structural-attr/__snapshots__/error-compile-html.txt
@@ -0,0 +1,9 @@
+
+ at packages/runtime-tags/src/__tests__/fixtures/persisted-child-nested-structural-attr/template.marko:5:5
+ 3 |
+ 4 |
+ > 5 |
+ | ^^^^^^^^^^^^^^^^^^ Persisted templates cannot patch this faithfully yet: an input the child needs server-owned cannot feed from client-owned structure.
+ 6 |
+ 7 |
+ 8 |
\ No newline at end of file
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-child-nested-structural-attr/helper.ts b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-nested-structural-attr/helper.ts
new file mode 100644
index 00000000000..5cf59f8001f
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-nested-structural-attr/helper.ts
@@ -0,0 +1 @@
+export let thing = false;
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-child-nested-structural-attr/tags/tabs2/index.marko b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-nested-structural-attr/tags/tabs2/index.marko
new file mode 100644
index 00000000000..5a7f42868d9
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-nested-structural-attr/tags/tabs2/index.marko
@@ -0,0 +1,6 @@
+
+ a
+
+
+ b
+
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-child-nested-structural-attr/template.marko b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-nested-structural-attr/template.marko
new file mode 100644
index 00000000000..0bc893d017e
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-nested-structural-attr/template.marko
@@ -0,0 +1,8 @@
+import { thing } from "./helper";
+
+
+
+
+
+
+
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-child-nested-structural-attr/test.ts b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-nested-structural-attr/test.ts
new file mode 100644
index 00000000000..b90fd253e2e
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-nested-structural-attr/test.ts
@@ -0,0 +1,8 @@
+import type { TestConfig } from "../../main.test";
+
+// A plain attribute feeding a NESTED structural param matches through the
+// input root property, so a provenance-free feed still fails closed.
+export const config: TestConfig = {
+ error_compiler: true,
+ persisted: true,
+};
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-child-nested-structural/__snapshots__/error-compile-dom.debug.txt b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-nested-structural/__snapshots__/error-compile-dom.debug.txt
new file mode 100644
index 00000000000..1f071a90d8d
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-nested-structural/__snapshots__/error-compile-dom.debug.txt
@@ -0,0 +1,9 @@
+
+ at packages/runtime-tags/src/__tests__/fixtures/persisted-child-nested-structural/template.marko:5:5
+ 3 |
+ 4 |
+ > 5 |
+ | ^ Persisted templates cannot patch this faithfully yet: an input the child needs server-owned cannot feed from client-owned structure.
+ 6 | <@tab on=thing/>
+ 7 |
+ 8 |
\ No newline at end of file
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-child-nested-structural/__snapshots__/error-compile-dom.txt b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-nested-structural/__snapshots__/error-compile-dom.txt
new file mode 100644
index 00000000000..1f071a90d8d
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-nested-structural/__snapshots__/error-compile-dom.txt
@@ -0,0 +1,9 @@
+
+ at packages/runtime-tags/src/__tests__/fixtures/persisted-child-nested-structural/template.marko:5:5
+ 3 |
+ 4 |
+ > 5 |
+ | ^ Persisted templates cannot patch this faithfully yet: an input the child needs server-owned cannot feed from client-owned structure.
+ 6 | <@tab on=thing/>
+ 7 |
+ 8 |
\ No newline at end of file
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-child-nested-structural/__snapshots__/error-compile-html.debug.txt b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-nested-structural/__snapshots__/error-compile-html.debug.txt
new file mode 100644
index 00000000000..1f071a90d8d
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-nested-structural/__snapshots__/error-compile-html.debug.txt
@@ -0,0 +1,9 @@
+
+ at packages/runtime-tags/src/__tests__/fixtures/persisted-child-nested-structural/template.marko:5:5
+ 3 |
+ 4 |
+ > 5 |
+ | ^ Persisted templates cannot patch this faithfully yet: an input the child needs server-owned cannot feed from client-owned structure.
+ 6 | <@tab on=thing/>
+ 7 |
+ 8 |
\ No newline at end of file
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-child-nested-structural/__snapshots__/error-compile-html.txt b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-nested-structural/__snapshots__/error-compile-html.txt
new file mode 100644
index 00000000000..1f071a90d8d
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-nested-structural/__snapshots__/error-compile-html.txt
@@ -0,0 +1,9 @@
+
+ at packages/runtime-tags/src/__tests__/fixtures/persisted-child-nested-structural/template.marko:5:5
+ 3 |
+ 4 |
+ > 5 |
+ | ^ Persisted templates cannot patch this faithfully yet: an input the child needs server-owned cannot feed from client-owned structure.
+ 6 | <@tab on=thing/>
+ 7 |
+ 8 |
\ No newline at end of file
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-child-nested-structural/helper.ts b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-nested-structural/helper.ts
new file mode 100644
index 00000000000..5cf59f8001f
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-nested-structural/helper.ts
@@ -0,0 +1 @@
+export let thing = false;
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-child-nested-structural/tags/tabs/index.marko b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-nested-structural/tags/tabs/index.marko
new file mode 100644
index 00000000000..5a7f42868d9
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-nested-structural/tags/tabs/index.marko
@@ -0,0 +1,6 @@
+
+ a
+
+
+ b
+
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-child-nested-structural/template.marko b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-nested-structural/template.marko
new file mode 100644
index 00000000000..b6f21456233
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-nested-structural/template.marko
@@ -0,0 +1,10 @@
+import { thing } from "./helper";
+
+
+
+
+ <@tab on=thing/>
+
+
+
+
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-child-nested-structural/test.ts b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-nested-structural/test.ts
new file mode 100644
index 00000000000..42fd0b1a648
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-nested-structural/test.ts
@@ -0,0 +1,8 @@
+import type { TestConfig } from "../../main.test";
+
+// Group params carry LEAF property names: matching walks up to the input
+// ROOT property, so a nested structural feed still gates its group.
+export const config: TestConfig = {
+ error_compiler: true,
+ persisted: true,
+};
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-child-rest-attr/sizes.json b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-rest-attr/sizes.json
index b7b027bd4c5..3cb2701bce4 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-child-rest-attr/sizes.json
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-rest-attr/sizes.json
@@ -2,8 +2,8 @@
"dom": {
"template.marko.page.mjs": {
"total": {
- "min": 3312,
- "brotli": 1648
+ "min": 3311,
+ "brotli": 1647
},
"files": {
"tags/dump/index.marko": 119,
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-child-rest-deep/sizes.json b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-rest-deep/sizes.json
index 45ca854c3b5..2386ea12d17 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-child-rest-deep/sizes.json
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-rest-deep/sizes.json
@@ -1,8 +1,8 @@
{
"dom": {
"template.marko.page.mjs": {
- "min": 2165,
- "brotli": 1120
+ "min": 2164,
+ "brotli": 1122
}
},
"html": {
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-child-rest-effect/sizes.json b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-rest-effect/sizes.json
index d34d77ed8cc..55f840ba146 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-child-rest-effect/sizes.json
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-rest-effect/sizes.json
@@ -2,8 +2,8 @@
"dom": {
"template.marko.page.mjs": {
"total": {
- "min": 4529,
- "brotli": 2168
+ "min": 4507,
+ "brotli": 2158
},
"files": {
"tags/dump/index.marko": 356,
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-child-rest-mixed-feed/sizes.json b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-rest-mixed-feed/sizes.json
index 9bdfd717e10..cd0e7bde1fa 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-child-rest-mixed-feed/sizes.json
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-rest-mixed-feed/sizes.json
@@ -2,8 +2,8 @@
"dom": {
"template.marko.page.mjs": {
"total": {
- "min": 4120,
- "brotli": 1978
+ "min": 4098,
+ "brotli": 1962
},
"files": {
"tags/echo/index.marko": 214,
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-child-rest-mixed/sizes.json b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-rest-mixed/sizes.json
index c55be33ec28..86e7da572be 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-child-rest-mixed/sizes.json
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-rest-mixed/sizes.json
@@ -2,8 +2,8 @@
"dom": {
"template.marko.page.mjs": {
"total": {
- "min": 4112,
- "brotli": 1965
+ "min": 4090,
+ "brotli": 1961
},
"files": {
"tags/dump/index.marko": 119,
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-child-rest-named/sizes.json b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-rest-named/sizes.json
index a840f670870..dd3e8777c3c 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-child-rest-named/sizes.json
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-rest-named/sizes.json
@@ -2,8 +2,8 @@
"dom": {
"template.marko.page.mjs": {
"total": {
- "min": 3312,
- "brotli": 1644
+ "min": 3311,
+ "brotli": 1646
},
"files": {
"tags/card/index.marko": 116,
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-child-rest-patch/sizes.json b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-rest-patch/sizes.json
index 1a8fa3bb0ff..b2e096e21e8 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-child-rest-patch/sizes.json
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-rest-patch/sizes.json
@@ -1,8 +1,8 @@
{
"dom": {
"template.marko.page.mjs": {
- "min": 2165,
- "brotli": 1120
+ "min": 2164,
+ "brotli": 1122
}
},
"html": {
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-child-script-global/__snapshots__/dom.bundle.debug.js b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-script-global/__snapshots__/dom.bundle.debug.js
index 0a37f9efd4a..1331be2f0d2 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-child-script-global/__snapshots__/dom.bundle.debug.js
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-script-global/__snapshots__/dom.bundle.debug.js
@@ -1,22 +1,17 @@
// tags/badge/index.marko
const $template$1 = " ";
const $walks$1 = "D l";
-const $setup__script = _script("__tests__/tags/badge/index.marko_0", ($scope) => {
+const $setup$1 = () => {};
+const $global_brand__script = _script("__tests__/tags/badge/index.marko_0_$global_brand#1", ($scope) => {
{
const el = document.querySelector("main");
- el.dataset.log = (el.dataset.log || "") + "[" + $scope.$global.brand + "]";
+ el.dataset.log = (el.dataset.log || "") + "[" + $scope.$global_brand + "]";
}
});
-function $setup$1($scope) {
- _text($scope["#text/0"], $scope.$global.brand);
- $setup__script($scope);
-}
-var badge_default = /*@__PURE__*/ _template("__tests__/tags/badge/index.marko", $template$1, "D l", $setup$1);
+var badge_default = /*@__PURE__*/ _template("__tests__/tags/badge/index.marko", $template$1, "D l");
// template.marko
const $template = /*@__PURE__*/ ((_w0) => `${_w0}`)($template$1);
const $walks = /*@__PURE__*/ ((_w0) => `D/${_w0}&l`)("D l");
-function $setup($scope) {
- $setup$1($scope["#childScope/0"]);
-}
-var template_default = /*@__PURE__*/ _template("__tests__/template.marko", $template, $walks, $setup);
+const $setup = () => {};
+var template_default = /*@__PURE__*/ _template("__tests__/template.marko", $template, $walks);
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-child-script-global/__snapshots__/dom.bundle.js b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-script-global/__snapshots__/dom.bundle.js
index 5bbc9704cbe..0bffa691ab1 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-child-script-global/__snapshots__/dom.bundle.js
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-script-global/__snapshots__/dom.bundle.js
@@ -1,7 +1,7 @@
// tags/badge/index.marko
-const $setup__script = _script("b0", ($scope) => {
+_script("b0", ($scope) => {
{
const el = document.querySelector("main");
- el.dataset.log = (el.dataset.log || "") + "[" + $scope.$.brand + "]";
+ el.dataset.log = (el.dataset.log || "") + "[" + $scope.b + "]";
}
});
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-child-script-global/__snapshots__/html.bundle.debug.js b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-script-global/__snapshots__/html.bundle.debug.js
index 3471add7ded..eafeaa108b1 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-child-script-global/__snapshots__/html.bundle.debug.js
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-script-global/__snapshots__/html.bundle.debug.js
@@ -1,15 +1,15 @@
// tags/badge/index.marko
const $template$1 = " ";
const $walks$1 = "D l";
-_shells({ "__tests__/tags/badge/index.marko": "__tests__/tags/badge/index.marko !__tests__/tags/badge/index.marko_0;D ; " });
+_shells({ "__tests__/tags/badge/index.marko": "__tests__/tags/badge/index.marko !__tests__/tags/badge/index.marko_0_$global_brand#1;D ; " });
var badge_default = _template_persisted("__tests__/tags/badge/index.marko", (input) => {
const $scope0_reason = _persisted_reason();
const $scope0_id = _scope_id();
const $global$1 = $global();
_html(`${_patch_text($scope0_id, "#text/0", $global$1.brand)}`);
- _script($scope0_id, "__tests__/tags/badge/index.marko_0");
- _patch_effect($scope0_id, "__tests__/tags/badge/index.marko_0", "! brand", 1);
- $scope0_reason && _scope($scope0_id, {}, "__tests__/tags/badge/index.marko", 0);
+ _script($scope0_id, "__tests__/tags/badge/index.marko_0_$global_brand#1");
+ _patch_effect($scope0_id, "__tests__/tags/badge/index.marko_0_$global_brand#1", "$global_brand");
+ $scope0_reason ? _scope($scope0_id, { $global_brand: $global$1?.brand }, "__tests__/tags/badge/index.marko", 0, { $global_brand: ["$global.brand"] }) : _patch_write($scope0_id, "$global_brand", $global$1?.brand);
}, 0, 1);
// template.marko
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-child-script-global/__snapshots__/html.bundle.js b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-script-global/__snapshots__/html.bundle.js
index 5b1a3b1883d..42e5eba9fbb 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-child-script-global/__snapshots__/html.bundle.js
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-script-global/__snapshots__/html.bundle.js
@@ -4,10 +4,11 @@ _shells({ b: "b !b0;D ; " });
var badge_default = _template_persisted("b", (input) => {
const $scope0_reason = _persisted_reason();
const $scope0_id = _scope_id();
- _html(`${_patch_text($scope0_id, "a", $global().brand)}`);
+ const $global$1 = $global();
+ _html(`${_patch_text($scope0_id, "a", $global$1.brand)}`);
_script($scope0_id, "b0");
- _patch_effect($scope0_id, "b0", "! brand", 1);
- $scope0_reason && _scope($scope0_id, {});
+ _patch_effect($scope0_id, "b0", "b");
+ $scope0_reason ? _scope($scope0_id, { b: $global$1?.brand }) : _patch_write($scope0_id, "b", $global$1?.brand);
}, 0, 1);
// template.marko
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-child-script-global/__snapshots__/patches.debug.js b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-script-global/__snapshots__/patches.debug.js
index 7b2cb5769fd..88a3910f3a0 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-child-script-global/__snapshots__/patches.debug.js
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-script-global/__snapshots__/patches.debug.js
@@ -5,7 +5,8 @@
},
"PatchChild:#childScope/0": {
"PatchText:#text/0": "Marko",
- "PatchGlobalEffect:packages/runtime-tags/src/__tests__/fixtures/persisted-child-script-global/tags/badge/index.marko_0": "! brand"
+ "PatchEffect:packages/runtime-tags/src/__tests__/fixtures/persisted-child-script-global/tags/badge/index.marko_0_$global_brand#1": "$global_brand",
+ "PatchWrite:$global_brand": "Marko"
}
}
@@ -16,6 +17,7 @@
},
"PatchChild:#childScope/0": {
"PatchText:#text/0": "Runtime",
- "PatchGlobalEffect:packages/runtime-tags/src/__tests__/fixtures/persisted-child-script-global/tags/badge/index.marko_0": "! brand"
+ "PatchEffect:packages/runtime-tags/src/__tests__/fixtures/persisted-child-script-global/tags/badge/index.marko_0_$global_brand#1": "$global_brand",
+ "PatchWrite:$global_brand": "Runtime"
}
}
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-child-script-global/__snapshots__/patches.js b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-script-global/__snapshots__/patches.js
index 522b971adec..afb3321adab 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-child-script-global/__snapshots__/patches.js
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-script-global/__snapshots__/patches.js
@@ -5,7 +5,8 @@
},
ca: {
ta: "Marko",
- gb0: "! brand"
+ eb0: "b",
+ wb: "Marko"
}
}
@@ -16,6 +17,7 @@
},
ca: {
ta: "Runtime",
- gb0: "! brand"
+ eb0: "b",
+ wb: "Runtime"
}
}
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-child-script-global/__snapshots__/writes.debug.html b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-script-global/__snapshots__/writes.debug.html
index 2c207085320..500b2b5371b 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-child-script-global/__snapshots__/writes.debug.html
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-script-global/__snapshots__/writes.debug.html
@@ -5,8 +5,10 @@
brand: "Marko"
}, {
"#childScope/0": _(2)
+ }, {
+ $global_brand: "Marko"
}],
- "packages/runtime-tags/src/__tests__/fixtures/persisted-child-script-global/tags/badge/index.marko_0 2"
+ "packages/runtime-tags/src/__tests__/fixtures/persisted-child-script-global/tags/badge/index.marko_0_$global_brand#1 2"
];
M._.w()
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-child-script-global/__snapshots__/writes.html b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-script-global/__snapshots__/writes.html
index ab7c826aa63..aebeb628fe9 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-child-script-global/__snapshots__/writes.html
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-script-global/__snapshots__/writes.html
@@ -5,6 +5,8 @@
brand: "Marko"
}, {
a: _(2)
+ }, {
+ b: "Marko"
}], "b0 2"];
M._.w()
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-child-script-global/sizes.json b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-script-global/sizes.json
index 903e4893e47..8431ee7de6e 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-child-script-global/sizes.json
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-script-global/sizes.json
@@ -1,16 +1,16 @@
{
"dom": {
"template.marko.page.mjs": {
- "min": 2799,
- "brotli": 1400
+ "min": 2792,
+ "brotli": 1398
}
},
"html": {
- "min": 371,
- "brotli": 263
+ "min": 383,
+ "brotli": 267
},
"patch": {
- "min": 104,
- "brotli": 68
+ "min": 116,
+ "brotli": 88
}
}
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-child-server-required/sizes.json b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-server-required/sizes.json
index 0bf27a0661c..4cbef3d7448 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-child-server-required/sizes.json
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-server-required/sizes.json
@@ -2,8 +2,8 @@
"dom": {
"template.marko.page.mjs": {
"total": {
- "min": 8523,
- "brotli": 3785
+ "min": 8484,
+ "brotli": 3772
},
"files": {
"tags/widget/index.marko": 210,
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-child-slot-optional/sizes.json b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-slot-optional/sizes.json
index f6b34085bc3..66ae6b5b043 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-child-slot-optional/sizes.json
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-slot-optional/sizes.json
@@ -1,8 +1,8 @@
{
"dom": {
"template.marko.page.mjs": {
- "min": 10261,
- "brotli": 4394
+ "min": 10216,
+ "brotli": 4380
}
},
"html": {
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-child-spread-state/sizes.json b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-spread-state/sizes.json
index cc2f465370b..f87f174bab0 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-child-spread-state/sizes.json
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-spread-state/sizes.json
@@ -2,8 +2,8 @@
"dom": {
"template.marko.page.mjs": {
"total": {
- "min": 7919,
- "brotli": 3533
+ "min": 7897,
+ "brotli": 3530
},
"files": {
"tags/badge.marko": 158,
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-child-spread/sizes.json b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-spread/sizes.json
index 970457019b4..4f07c94a802 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-child-spread/sizes.json
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-spread/sizes.json
@@ -2,8 +2,8 @@
"dom": {
"template.marko.page.mjs": {
"total": {
- "min": 7944,
- "brotli": 3517
+ "min": 7905,
+ "brotli": 3503
},
"files": {
"tags/card.marko": 263,
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-child-state-arg/sizes.json b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-state-arg/sizes.json
index 2e4bca1d596..1724b3f81a7 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-child-state-arg/sizes.json
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-state-arg/sizes.json
@@ -2,8 +2,8 @@
"dom": {
"template.marko.page.mjs": {
"total": {
- "min": 3318,
- "brotli": 1648
+ "min": 3317,
+ "brotli": 1647
},
"files": {
"tags/arg-badge/index.marko": 195,
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-child-state-attr/sizes.json b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-state-attr/sizes.json
index e765e366861..df35baea295 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-child-state-attr/sizes.json
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-state-attr/sizes.json
@@ -2,8 +2,8 @@
"dom": {
"template.marko.page.mjs": {
"total": {
- "min": 3871,
- "brotli": 1834
+ "min": 3849,
+ "brotli": 1826
},
"files": {
"tags/counter/index.marko": 336,
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-child-state-spread-feed/__snapshots__/dom.bundle.debug.js b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-state-spread-feed/__snapshots__/dom.bundle.debug.js
new file mode 100644
index 00000000000..200d5c298b0
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-state-spread-feed/__snapshots__/dom.bundle.debug.js
@@ -0,0 +1,49 @@
+// tags/tabs/index.marko
+const $template$1 = "";
+const $walks$1 = "b%c";
+const $setup$1 = () => {};
+const $if_content__input_tab_on = /*@__PURE__*/ _if_closure("#text/0", 0, ($scope) => _text($scope["#text/0"], $scope._.input_tab_on));
+const $if_content__setup$1 = $if_content__input_tab_on;
+const $if$1 = /*@__PURE__*/ _if("#text/0", "a
", "Db%", $if_content__setup$1, "b");
+const $input_tab = ($scope, input_tab) => {
+ $input_tab_on($scope, input_tab?.on);
+ $if$1($scope, input_tab ? 0 : 1);
+};
+const $input = ($scope, input) => $input_tab($scope, input.tab);
+const $input_tab_on = /*@__PURE__*/ _const("input_tab_on", $if_content__input_tab_on);
+var tabs_default = /*@__PURE__*/ _template("__tests__/tags/tabs/index.marko", $template$1, "b%c", 0, $input);
+
+// template.marko
+const $template = "";
+const $walks = "D%b b l";
+const $if_content__on = /*@__PURE__*/ _if_closure("#text/0", 0, ($scope) => {
+ $input_tab($scope["#childScope/0"], attrTag({ ...{ on: $scope._.on } }));
+ const $tabs_input_spread = { tab: { on: $scope._.on } };
+ $input_tab($scope["#childScope/2"], $tabs_input_spread.tab);
+});
+const $if_content__setup = ($scope) => {
+ $if_content__on._($scope);
+ $if_content__o._($scope);
+};
+const $if_content__o = /*@__PURE__*/ _if_closure("#text/0", 0, ($scope) => $input_tab($scope["#childScope/1"], attrTag({ ...$scope._.o })));
+const $if = /*@__PURE__*/ _if("#text/0", /*@__PURE__*/ ((_w0, _w1, _w2) => `${_w0}${_w1}${_w2}`)($template$1, $template$1, $template$1), /*@__PURE__*/ ((_w0, _w1, _w2) => `b/${_w0}&/${_w1}&/${_w2}&b`)("b%c", "b%c", "b%c"), $if_content__setup);
+const $show = /*@__PURE__*/ _let("show/3", ($scope) => $if($scope, $scope.show ? 0 : 1));
+const $o = /*@__PURE__*/ _const("o", $if_content__o);
+const $on = /*@__PURE__*/ _let("on/4", ($scope) => {
+ $o($scope, { on: $scope.on });
+ $if_content__on($scope);
+});
+const $setup__script = _script("__tests__/template.marko_0", ($scope) => {
+ _on($scope["#button/1"], "click", function() {
+ $on($scope, !$scope.on);
+ });
+ _on($scope["#button/2"], "click", function() {
+ $show($scope, !$scope.show);
+ });
+});
+function $setup($scope) {
+ $show($scope, true);
+ $on($scope, false);
+ $setup__script($scope);
+}
+var template_default = /*@__PURE__*/ _template("__tests__/template.marko", $template, $walks, $setup);
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-child-state-spread-feed/__snapshots__/dom.bundle.js b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-state-spread-feed/__snapshots__/dom.bundle.js
new file mode 100644
index 00000000000..a0a6c90f331
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-state-spread-feed/__snapshots__/dom.bundle.js
@@ -0,0 +1,36 @@
+// tags/tabs/index.marko
+const $template = "";
+const $if_content__input_tab_on = /*@__PURE__*/ _if_closure(0, 0, ($scope) => _text($scope.a, $scope._.e));
+const $if$1 = /*@__PURE__*/ _if(0, "a
", "Db%", $if_content__input_tab_on, "b");
+const $input_tab = ($scope, input_tab) => {
+ $input_tab_on($scope, input_tab?.on);
+ $if$1($scope, input_tab ? 0 : 1);
+};
+const $input_tab_on = /*@__PURE__*/ _const(4, $if_content__input_tab_on);
+
+// template.marko
+const $if_content__on = /*@__PURE__*/ _if_closure(0, 0, ($scope) => {
+ $input_tab($scope.a, attrTag({ on: $scope._.e }));
+ const $tabs_input_spread = { tab: { on: $scope._.e } };
+ $input_tab($scope.c, $tabs_input_spread.tab);
+});
+const $if_content__setup = ($scope) => {
+ $if_content__on._($scope);
+ $if_content__o._($scope);
+};
+const $if_content__o = /*@__PURE__*/ _if_closure(0, 0, ($scope) => $input_tab($scope.b, attrTag({ ...$scope._.f })));
+const $if = /*@__PURE__*/ _if(0, /*@__PURE__*/ ((_w0, _w1, _w2) => `${_w0}${_w1}${_w2}`)($template, $template, $template), /*@__PURE__*/ ((_w0, _w1, _w2) => `b/${_w0}&/${_w1}&/${_w2}&b`)("b%c", "b%c", "b%c"), $if_content__setup);
+const $show = /*@__PURE__*/ _let(3, ($scope) => $if($scope, $scope.d ? 0 : 1));
+const $o = /*@__PURE__*/ _const(5, $if_content__o);
+const $on = /*@__PURE__*/ _let(4, ($scope) => {
+ $o($scope, { on: $scope.e });
+ $if_content__on($scope);
+});
+const $setup__script = _script("a0", ($scope) => {
+ _on($scope.b, "click", function() {
+ $on($scope, !$scope.e);
+ });
+ _on($scope.c, "click", function() {
+ $show($scope, !$scope.d);
+ });
+});
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-child-state-spread-feed/__snapshots__/html.bundle.debug.js b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-state-spread-feed/__snapshots__/html.bundle.debug.js
new file mode 100644
index 00000000000..b6fa161b324
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-state-spread-feed/__snapshots__/html.bundle.debug.js
@@ -0,0 +1,71 @@
+// tags/tabs/index.marko
+const $template$1 = "";
+const $walks$1 = "b%c";
+_shells({
+ "__tests__/tags/tabs/index.marko": "__tests__/tags/tabs/index.marko;b%;",
+ "__tests__/tags/tabs/index.marko_1*shell": "__tests__/tags/tabs/index.marko_1*shell;Db%;a
",
+ "__tests__/tags/tabs/index.marko_2*shell": "__tests__/tags/tabs/index.marko_2*shell,b"
+});
+var tabs_default = _template_persisted("__tests__/tags/tabs/index.marko", (input) => {
+ const $scope0_owned = _persisted_ownership(), $scope0_reason = _persisted_reason(), $sg__input_tab = _source_guard($scope0_reason, 0);
+ const $scope0_id = _scope_id();
+ _if(() => {
+ if (input.tab) {
+ const $scope1_id = _scope_id();
+ _html(`a ${_patch_text($scope1_id, "#text/0", input.tab.on, 2, $scope0_owned, 1)}
`);
+ _scope($scope1_id, { _: _scope_with_id($scope0_id) }, "__tests__/tags/tabs/index.marko", "1:2");
+ return 0;
+ } else {
+ const $scope2_id = _scope_id();
+ _html("b");
+ $scope0_reason && _scope($scope2_id, {}, "__tests__/tags/tabs/index.marko", "4:2");
+ return 1;
+ }
+ }, $scope0_id, "#text/0", 1, $sg__input_tab, $sg__input_tab, void 0, void 0, ["__tests__/tags/tabs/index.marko_1*shell", "__tests__/tags/tabs/index.marko_2*shell"]);
+ $scope0_reason && _scope($scope0_id, { input_tab_on: input.tab?.on }, "__tests__/tags/tabs/index.marko", 0, { input_tab_on: ["input.tab.on"] });
+}, 0, 0);
+
+// template.marko
+const $template = "";
+const $walks = "D%b b l";
+_shells({ "__tests__/template.marko": "__tests__/template.marko !__tests__/template.marko_0;D%b b ;" });
+var template_default = _template_persisted("__tests__/template.marko", (input) => {
+ const $scope0_reason = _persisted_reason();
+ const $scope0_id = _scope_id();
+ let show = true;
+ let on = false;
+ const o = { on };
+ _html("");
+ if ($scope0_reason) _if(() => {
+ if (show) {
+ const $scope1_id = _scope_id();
+ _set_serialize_reason(1);
+ const $childScope = _peek_scope_id();
+ tabs_default({ tab: attrTag({ ...{ on } }) });
+ _set_serialize_reason(1);
+ const $childScope2 = _peek_scope_id();
+ tabs_default({ tab: attrTag({ ...o }) });
+ _set_serialize_reason(1);
+ const $childScope3 = _peek_scope_id();
+ tabs_default({ tab: { on } });
+ _scope($scope1_id, {
+ "#childScope/0": _existing_scope($childScope),
+ "#childScope/1": _existing_scope($childScope2),
+ "#childScope/2": _existing_scope($childScope3)
+ }, "__tests__/template.marko", "5:4");
+ return 0;
+ }
+ }, $scope0_id, "#text/0");
+ _html(`${_el_resume($scope0_id, "#button/1")}${_el_resume($scope0_id, "#button/2")}`);
+ _script($scope0_id, "__tests__/template.marko_0");
+ $scope0_reason && _scope($scope0_id, {
+ show,
+ on,
+ o
+ }, "__tests__/template.marko", 0, {
+ show: "1:6",
+ on: "2:6",
+ o: "3:8"
+ });
+ _resume_branch($scope0_id);
+}, 1, () => [tabs_default]);
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-child-state-spread-feed/__snapshots__/html.bundle.js b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-state-spread-feed/__snapshots__/html.bundle.js
new file mode 100644
index 00000000000..1e37a5ff8e2
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-state-spread-feed/__snapshots__/html.bundle.js
@@ -0,0 +1,63 @@
+// tags/tabs/index.marko
+_shells({
+ b: "b;b%;",
+ b0: "b0;Db%;a
",
+ b1: "b1,b"
+});
+var tabs_default = _template_persisted("b", (input) => {
+ const $scope0_owned = _persisted_ownership(), $scope0_reason = _persisted_reason(), $sg__input_tab = _source_guard($scope0_reason, 0);
+ const $scope0_id = _scope_id();
+ _if(() => {
+ if (input.tab) {
+ const $scope1_id = _scope_id();
+ _html(`a ${_patch_text($scope1_id, "a", input.tab.on, 2, $scope0_owned, 1)}
`);
+ _scope($scope1_id, { _: _scope_with_id($scope0_id) });
+ return 0;
+ } else {
+ const $scope2_id = _scope_id();
+ _html("b");
+ $scope0_reason && _scope($scope2_id, {});
+ return 1;
+ }
+ }, $scope0_id, "a", 1, $sg__input_tab, $sg__input_tab, void 0, void 0, ["b0", "b1"]);
+ $scope0_reason && _scope($scope0_id, { e: input.tab?.on });
+}, 0, 0);
+
+// template.marko
+_shells({ a: "a !a0;D%b b ;" });
+var template_default = _template_persisted("a", (input) => {
+ const $scope0_reason = _persisted_reason();
+ const $scope0_id = _scope_id();
+ let show = true;
+ let on = false;
+ const o = { on };
+ _html("");
+ if ($scope0_reason) _if(() => {
+ {
+ const $scope1_id = _scope_id();
+ _set_serialize_reason(1);
+ const $childScope = _peek_scope_id();
+ tabs_default({ tab: attrTag({ on }) });
+ _set_serialize_reason(1);
+ const $childScope2 = _peek_scope_id();
+ tabs_default({ tab: attrTag({ ...o }) });
+ _set_serialize_reason(1);
+ const $childScope3 = _peek_scope_id();
+ tabs_default({ tab: { on } });
+ _scope($scope1_id, {
+ a: _existing_scope($childScope),
+ b: _existing_scope($childScope2),
+ c: _existing_scope($childScope3)
+ });
+ return 0;
+ }
+ }, $scope0_id, "a");
+ _html(`${_el_resume($scope0_id, "b")}${_el_resume($scope0_id, "c")}`);
+ _script($scope0_id, "a0");
+ $scope0_reason && _scope($scope0_id, {
+ d: show,
+ e: on,
+ f: o
+ });
+ _resume_branch($scope0_id);
+}, 1, () => [tabs_default]);
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-child-state-spread-feed/__snapshots__/patches.debug.js b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-state-spread-feed/__snapshots__/patches.debug.js
new file mode 100644
index 00000000000..d7bdae7b7c3
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-state-spread-feed/__snapshots__/patches.debug.js
@@ -0,0 +1,7 @@
+// PATCH
+
+
+// PATCH
+
+
+// PATCH
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-child-state-spread-feed/__snapshots__/patches.js b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-state-spread-feed/__snapshots__/patches.js
new file mode 100644
index 00000000000..d7bdae7b7c3
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-state-spread-feed/__snapshots__/patches.js
@@ -0,0 +1,7 @@
+// PATCH
+
+
+// PATCH
+
+
+// PATCH
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-child-state-spread-feed/__snapshots__/render.debug.md b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-state-spread-feed/__snapshots__/render.debug.md
new file mode 100644
index 00000000000..8deb361186b
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-state-spread-feed/__snapshots__/render.debug.md
@@ -0,0 +1,120 @@
+# Render
+```html
+
+
+ a
+
+
+ a
+
+
+ a
+
+
+
+
+```
+
+# Update
+```js
+document.querySelector("button.flip").click();
+```
+```html
+
+
+ a true
+
+
+ a true
+
+
+ a true
+
+
+
+
+```
+## Change
+```
+UPDATE: main > div:nth-of-type(1)::text@2 "" => "true"
+UPDATE: main > div:nth-of-type(2)::text@2 "" => "true"
+UPDATE: main > div:nth-of-type(3)::text@2 "" => "true"
+```
+
+# Update
+```js
+document.querySelector("button.toggle").click();
+```
+```html
+
+
+
+
+```
+## Change
+```
+REMOVE: main > div
+REMOVE: main > div
+REMOVE: main > div
+```
+
+# Update
+```js
+document.querySelector("button.toggle").click();
+```
+```html
+
+
+ a true
+
+
+ a true
+
+
+ a true
+
+
+
+
+```
+## Change
+```
+INSERT: main > div
+INSERT: main > div:nth-of-type(2) + div
+INSERT: main > div:nth-of-type(1) + div
+UPDATE: main > div:nth-of-type(1)::text@2 "" => "true"
+UPDATE: main > div:nth-of-type(3)::text@2 "" => "true"
+UPDATE: main > div:nth-of-type(2)::text@2 "" => "true"
+```
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-child-state-spread-feed/__snapshots__/render.md b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-state-spread-feed/__snapshots__/render.md
new file mode 100644
index 00000000000..8deb361186b
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-state-spread-feed/__snapshots__/render.md
@@ -0,0 +1,120 @@
+# Render
+```html
+
+
+ a
+
+
+ a
+
+
+ a
+
+
+
+
+```
+
+# Update
+```js
+document.querySelector("button.flip").click();
+```
+```html
+
+
+ a true
+
+
+ a true
+
+
+ a true
+
+
+
+
+```
+## Change
+```
+UPDATE: main > div:nth-of-type(1)::text@2 "" => "true"
+UPDATE: main > div:nth-of-type(2)::text@2 "" => "true"
+UPDATE: main > div:nth-of-type(3)::text@2 "" => "true"
+```
+
+# Update
+```js
+document.querySelector("button.toggle").click();
+```
+```html
+
+
+
+
+```
+## Change
+```
+REMOVE: main > div
+REMOVE: main > div
+REMOVE: main > div
+```
+
+# Update
+```js
+document.querySelector("button.toggle").click();
+```
+```html
+
+
+ a true
+
+
+ a true
+
+
+ a true
+
+
+
+
+```
+## Change
+```
+INSERT: main > div
+INSERT: main > div:nth-of-type(2) + div
+INSERT: main > div:nth-of-type(1) + div
+UPDATE: main > div:nth-of-type(1)::text@2 "" => "true"
+UPDATE: main > div:nth-of-type(3)::text@2 "" => "true"
+UPDATE: main > div:nth-of-type(2)::text@2 "" => "true"
+```
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-child-state-spread-feed/__snapshots__/writes.debug.html b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-state-spread-feed/__snapshots__/writes.debug.html
new file mode 100644
index 00000000000..2bd74d51d56
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-state-spread-feed/__snapshots__/writes.debug.html
@@ -0,0 +1,37 @@
+
+ a
+ a
+ a
+
+
+
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-child-state-spread-feed/__snapshots__/writes.html b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-state-spread-feed/__snapshots__/writes.html
new file mode 100644
index 00000000000..af3200714fe
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-state-spread-feed/__snapshots__/writes.html
@@ -0,0 +1,34 @@
+
+ a
+ a
+ a
+
+
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-child-state-spread-feed/sizes.json b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-state-spread-feed/sizes.json
new file mode 100644
index 00000000000..d8cc48c236e
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-state-spread-feed/sizes.json
@@ -0,0 +1,22 @@
+{
+ "dom": {
+ "template.marko.page.mjs": {
+ "total": {
+ "min": 8531,
+ "brotli": 3826
+ },
+ "files": {
+ "tags/tabs/index.marko": 487,
+ "template.marko": 1155
+ }
+ }
+ },
+ "html": {
+ "min": 672,
+ "brotli": 356
+ },
+ "patch": {
+ "min": 0,
+ "brotli": 1
+ }
+}
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-child-state-spread-feed/tags/tabs/index.marko b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-state-spread-feed/tags/tabs/index.marko
new file mode 100644
index 00000000000..6134c3a74ec
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-state-spread-feed/tags/tabs/index.marko
@@ -0,0 +1,6 @@
+
+ a ${input.tab.on}
+
+
+ b
+
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-child-state-spread-feed/template.marko b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-state-spread-feed/template.marko
new file mode 100644
index 00000000000..42b34e21942
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-state-spread-feed/template.marko
@@ -0,0 +1,16 @@
+
+
+
+
+
+
+ <@tab ...{ on: on }/>
+
+
+ <@tab ...o/>
+
+
+
+ f
+ t
+
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-child-state-spread-feed/test.ts b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-state-spread-feed/test.ts
new file mode 100644
index 00000000000..e415a13698f
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-state-spread-feed/test.ts
@@ -0,0 +1,15 @@
+import type { TestConfig } from "../../main.test";
+
+const flip = (document: Document) => {
+ document.querySelector("button.flip")!.click();
+};
+const toggle = (document: Document) => {
+ document.querySelector("button.toggle")!.click();
+};
+
+// State feeds riding spreads (attr-tag level, a `` of state, and
+// tag level) resolve through the merged extra: all client-owned, admitted.
+export const config: TestConfig = {
+ persisted: true,
+ steps: [{}, flip, {}, toggle, {}, toggle, {}],
+};
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-child-stateful/sizes.json b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-stateful/sizes.json
index 0cb6e908846..c2e44f167c7 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-child-stateful/sizes.json
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-stateful/sizes.json
@@ -2,8 +2,8 @@
"dom": {
"template.marko.page.mjs": {
"total": {
- "min": 7207,
- "brotli": 3242
+ "min": 7185,
+ "brotli": 3231
},
"files": {
"tags/counter/index.marko": 393,
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-child-tag-var-assigned/__snapshots__/error-compile-dom.debug.txt b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-tag-var-assigned/__snapshots__/error-compile-dom.debug.txt
new file mode 100644
index 00000000000..24b7bd3c4a0
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-tag-var-assigned/__snapshots__/error-compile-dom.debug.txt
@@ -0,0 +1,9 @@
+
+ at packages/runtime-tags/src/__tests__/fixtures/persisted-child-tag-var-assigned/template.marko:4:5
+ 2 |
+ 3 |
+ > 4 |
+ | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Persisted templates cannot patch this faithfully yet: assigning a child's tag variable inside client-owned structure is not supported yet.
+ 5 | ${count}
+ 6 | r
+ 7 |
\ No newline at end of file
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-child-tag-var-assigned/__snapshots__/error-compile-dom.txt b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-tag-var-assigned/__snapshots__/error-compile-dom.txt
new file mode 100644
index 00000000000..24b7bd3c4a0
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-tag-var-assigned/__snapshots__/error-compile-dom.txt
@@ -0,0 +1,9 @@
+
+ at packages/runtime-tags/src/__tests__/fixtures/persisted-child-tag-var-assigned/template.marko:4:5
+ 2 |
+ 3 |
+ > 4 |
+ | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Persisted templates cannot patch this faithfully yet: assigning a child's tag variable inside client-owned structure is not supported yet.
+ 5 | ${count}
+ 6 | r
+ 7 |
\ No newline at end of file
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-child-tag-var-assigned/__snapshots__/error-compile-html.debug.txt b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-tag-var-assigned/__snapshots__/error-compile-html.debug.txt
new file mode 100644
index 00000000000..24b7bd3c4a0
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-tag-var-assigned/__snapshots__/error-compile-html.debug.txt
@@ -0,0 +1,9 @@
+
+ at packages/runtime-tags/src/__tests__/fixtures/persisted-child-tag-var-assigned/template.marko:4:5
+ 2 |
+ 3 |
+ > 4 |
+ | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Persisted templates cannot patch this faithfully yet: assigning a child's tag variable inside client-owned structure is not supported yet.
+ 5 | ${count}
+ 6 | r
+ 7 |
\ No newline at end of file
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-child-tag-var-assigned/__snapshots__/error-compile-html.txt b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-tag-var-assigned/__snapshots__/error-compile-html.txt
new file mode 100644
index 00000000000..24b7bd3c4a0
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-tag-var-assigned/__snapshots__/error-compile-html.txt
@@ -0,0 +1,9 @@
+
+ at packages/runtime-tags/src/__tests__/fixtures/persisted-child-tag-var-assigned/template.marko:4:5
+ 2 |
+ 3 |
+ > 4 |
+ | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Persisted templates cannot patch this faithfully yet: assigning a child's tag variable inside client-owned structure is not supported yet.
+ 5 | ${count}
+ 6 | r
+ 7 |
\ No newline at end of file
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-child-tag-var-assigned/tags/counter-box/index.marko b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-tag-var-assigned/tags/counter-box/index.marko
new file mode 100644
index 00000000000..6abc9dd7bcf
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-tag-var-assigned/tags/counter-box/index.marko
@@ -0,0 +1,3 @@
+
+box ${count}
+
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-child-tag-var-assigned/template.marko b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-tag-var-assigned/template.marko
new file mode 100644
index 00000000000..b1d8635b647
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-tag-var-assigned/template.marko
@@ -0,0 +1,9 @@
+
+
+
+
+ ${count}
+ r
+
+ t
+
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-child-tag-var-assigned/test.ts b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-tag-var-assigned/test.ts
new file mode 100644
index 00000000000..af97003d4ca
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-tag-var-assigned/test.ts
@@ -0,0 +1,8 @@
+import type { TestConfig } from "../../main.test";
+
+// The `_var_change` write-back for an assigned tag variable is not wired
+// for a pure client instance yet: fail closed at the call site.
+export const config: TestConfig = {
+ error_compiler: true,
+ persisted: true,
+};
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-child-tag-var-destructured/__snapshots__/error-compile-dom.debug.txt b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-tag-var-destructured/__snapshots__/error-compile-dom.debug.txt
new file mode 100644
index 00000000000..561184cc615
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-tag-var-destructured/__snapshots__/error-compile-dom.debug.txt
@@ -0,0 +1,9 @@
+
+ at packages/runtime-tags/src/__tests__/fixtures/persisted-child-tag-var-destructured/template.marko:4:5
+ 2 |
+ 3 |
+ > 4 |
+ | ^^^^^^^^^^^^^^^^^^^^ Persisted templates cannot patch this faithfully yet: assigning a child's tag variable inside client-owned structure is not supported yet.
+ 5 | ${value}
+ 6 | r
+ 7 |
\ No newline at end of file
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-child-tag-var-destructured/__snapshots__/error-compile-dom.txt b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-tag-var-destructured/__snapshots__/error-compile-dom.txt
new file mode 100644
index 00000000000..561184cc615
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-tag-var-destructured/__snapshots__/error-compile-dom.txt
@@ -0,0 +1,9 @@
+
+ at packages/runtime-tags/src/__tests__/fixtures/persisted-child-tag-var-destructured/template.marko:4:5
+ 2 |
+ 3 |
+ > 4 |
+ | ^^^^^^^^^^^^^^^^^^^^ Persisted templates cannot patch this faithfully yet: assigning a child's tag variable inside client-owned structure is not supported yet.
+ 5 | ${value}
+ 6 | r
+ 7 |
\ No newline at end of file
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-child-tag-var-destructured/__snapshots__/error-compile-html.debug.txt b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-tag-var-destructured/__snapshots__/error-compile-html.debug.txt
new file mode 100644
index 00000000000..561184cc615
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-tag-var-destructured/__snapshots__/error-compile-html.debug.txt
@@ -0,0 +1,9 @@
+
+ at packages/runtime-tags/src/__tests__/fixtures/persisted-child-tag-var-destructured/template.marko:4:5
+ 2 |
+ 3 |
+ > 4 |
+ | ^^^^^^^^^^^^^^^^^^^^ Persisted templates cannot patch this faithfully yet: assigning a child's tag variable inside client-owned structure is not supported yet.
+ 5 | ${value}
+ 6 | r
+ 7 |
\ No newline at end of file
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-child-tag-var-destructured/__snapshots__/error-compile-html.txt b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-tag-var-destructured/__snapshots__/error-compile-html.txt
new file mode 100644
index 00000000000..561184cc615
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-tag-var-destructured/__snapshots__/error-compile-html.txt
@@ -0,0 +1,9 @@
+
+ at packages/runtime-tags/src/__tests__/fixtures/persisted-child-tag-var-destructured/template.marko:4:5
+ 2 |
+ 3 |
+ > 4 |
+ | ^^^^^^^^^^^^^^^^^^^^ Persisted templates cannot patch this faithfully yet: assigning a child's tag variable inside client-owned structure is not supported yet.
+ 5 | ${value}
+ 6 | r
+ 7 |
\ No newline at end of file
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-child-tag-var-destructured/tags/counter/index.marko b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-tag-var-destructured/tags/counter/index.marko
new file mode 100644
index 00000000000..cd8801f10db
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-tag-var-destructured/tags/counter/index.marko
@@ -0,0 +1,3 @@
+
+box ${count}
+
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-child-tag-var-destructured/template.marko b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-tag-var-destructured/template.marko
new file mode 100644
index 00000000000..e819044b08a
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-tag-var-destructured/template.marko
@@ -0,0 +1,9 @@
+
+
+
+
+ ${value}
+ r
+
+ t
+
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-child-tag-var-destructured/test.ts b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-tag-var-destructured/test.ts
new file mode 100644
index 00000000000..55c290170a3
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-tag-var-destructured/test.ts
@@ -0,0 +1,8 @@
+import type { TestConfig } from "../../main.test";
+
+// A DESTRUCTURED tag variable hangs its bindings on the pattern's
+// identifiers: an assignment to any of them still fails closed.
+export const config: TestConfig = {
+ error_compiler: true,
+ persisted: true,
+};
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-child-try/sizes.json b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-try/sizes.json
index 7b9930b6731..c851239a76f 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-child-try/sizes.json
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-try/sizes.json
@@ -2,8 +2,8 @@
"dom": {
"template.marko.page.mjs": {
"total": {
- "min": 8448,
- "brotli": 3793
+ "min": 8429,
+ "brotli": 3781
},
"files": {
"tags/widget/index.marko": 291,
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-child-two-fills/sizes.json b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-two-fills/sizes.json
index 62e694c2ff6..b1cf2f5e50e 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-child-two-fills/sizes.json
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-two-fills/sizes.json
@@ -2,8 +2,8 @@
"dom": {
"template.marko.page.mjs": {
"total": {
- "min": 7533,
- "brotli": 3378
+ "min": 7511,
+ "brotli": 3376
},
"files": {
"tags/card/index.marko": 259,
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-child-unfed-structural/sizes.json b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-unfed-structural/sizes.json
index 079cdb8578d..f82fe5db98c 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-child-unfed-structural/sizes.json
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-unfed-structural/sizes.json
@@ -2,8 +2,8 @@
"dom": {
"template.marko.page.mjs": {
"total": {
- "min": 8794,
- "brotli": 3902
+ "min": 8755,
+ "brotli": 3886
},
"files": {
"tags/badge/index.marko": 310,
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-child-var/sizes.json b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-var/sizes.json
index eb6f23bc865..272412a40a6 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-child-var/sizes.json
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-var/sizes.json
@@ -2,8 +2,8 @@
"dom": {
"template.marko.page.mjs": {
"total": {
- "min": 4279,
- "brotli": 2028
+ "min": 4257,
+ "brotli": 2019
},
"files": {
"tags/price-card.marko": 416,
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-child-whole-member/sizes.json b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-whole-member/sizes.json
index f9c2bf0de3c..219b1a7673c 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-child-whole-member/sizes.json
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-child-whole-member/sizes.json
@@ -2,8 +2,8 @@
"dom": {
"template.marko.page.mjs": {
"total": {
- "min": 4147,
- "brotli": 1992
+ "min": 4125,
+ "brotli": 1979
},
"files": {
"tags/duo/index.marko": 236,
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-class-attribute/sizes.json b/packages/runtime-tags/src/__tests__/fixtures/persisted-class-attribute/sizes.json
index baef2e30f22..cb9c8e6006c 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-class-attribute/sizes.json
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-class-attribute/sizes.json
@@ -1,8 +1,8 @@
{
"dom": {
"template.marko.page.mjs": {
- "min": 2251,
- "brotli": 1145
+ "min": 2234,
+ "brotli": 1135
}
},
"html": {
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-class-intersection/sizes.json b/packages/runtime-tags/src/__tests__/fixtures/persisted-class-intersection/sizes.json
index e9d8a643570..161c496afa4 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-class-intersection/sizes.json
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-class-intersection/sizes.json
@@ -1,8 +1,8 @@
{
"dom": {
"template.marko.page.mjs": {
- "min": 8468,
- "brotli": 3729
+ "min": 8429,
+ "brotli": 3710
}
},
"html": {
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-client-intersections/__snapshots__/dom.bundle.debug.js b/packages/runtime-tags/src/__tests__/fixtures/persisted-client-intersections/__snapshots__/dom.bundle.debug.js
index 622c51f0526..fc8e339140e 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-client-intersections/__snapshots__/dom.bundle.debug.js
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-client-intersections/__snapshots__/dom.bundle.debug.js
@@ -47,8 +47,6 @@ const $template = /*@__PURE__*/ ((_w0, _w1, _w2) => `
${_
const $walks = /*@__PURE__*/ ((_w0, _w1, _w2) => `E l D l/${_w0}&/${_w1}&/${_w2}&l`)($walks$3, $walks$2, "D l");
const $input_title = ($scope, input_title) => _text($scope["#text/0"], input_title);
function $setup($scope) {
- _attr($scope["#p/1"], "title", $scope.$global.locale);
- _text($scope["#text/2"], $scope.$global.brand);
$setup$3($scope["#childScope/3"]);
$setup$2($scope["#childScope/4"]);
$input_text($scope["#childScope/4"], "Sale");
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-client-intersections/sizes.json b/packages/runtime-tags/src/__tests__/fixtures/persisted-client-intersections/sizes.json
index 58eb44a36dd..a2005d6df32 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-client-intersections/sizes.json
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-client-intersections/sizes.json
@@ -2,8 +2,8 @@
"dom": {
"template.marko.page.mjs": {
"total": {
- "min": 4450,
- "brotli": 2053
+ "min": 4428,
+ "brotli": 2041
},
"files": {
"tags/price-card.marko": 416,
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-content-alias-render/sizes.json b/packages/runtime-tags/src/__tests__/fixtures/persisted-content-alias-render/sizes.json
index ef619fc473d..019439a760b 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-content-alias-render/sizes.json
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-content-alias-render/sizes.json
@@ -1,8 +1,8 @@
{
"dom": {
"template.marko.page.mjs": {
- "min": 9695,
- "brotli": 4144
+ "min": 9650,
+ "brotli": 4125
}
},
"html": {
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-content-attr-tag-client-owned/sizes.json b/packages/runtime-tags/src/__tests__/fixtures/persisted-content-attr-tag-client-owned/sizes.json
index 2d910e6bee2..35224948873 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-content-attr-tag-client-owned/sizes.json
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-content-attr-tag-client-owned/sizes.json
@@ -2,8 +2,8 @@
"dom": {
"template.marko.page.mjs": {
"total": {
- "min": 10805,
- "brotli": 4588
+ "min": 10783,
+ "brotli": 4584
},
"files": {
"tags/card/index.marko": 602,
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-content-attr-tags-construct/sizes.json b/packages/runtime-tags/src/__tests__/fixtures/persisted-content-attr-tags-construct/sizes.json
index e049f7ec017..5ab184b800a 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-content-attr-tags-construct/sizes.json
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-content-attr-tags-construct/sizes.json
@@ -1,8 +1,8 @@
{
"dom": {
"template.marko.page.mjs": {
- "min": 10221,
- "brotli": 4369
+ "min": 10177,
+ "brotli": 4356
}
},
"html": {
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-content-attr-tags/sizes.json b/packages/runtime-tags/src/__tests__/fixtures/persisted-content-attr-tags/sizes.json
index 1f7a2863add..763990c1c09 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-content-attr-tags/sizes.json
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-content-attr-tags/sizes.json
@@ -1,8 +1,8 @@
{
"dom": {
"template.marko.page.mjs": {
- "min": 9695,
- "brotli": 4144
+ "min": 9650,
+ "brotli": 4125
}
},
"html": {
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-content-await/__snapshots__/html.bundle.debug.js b/packages/runtime-tags/src/__tests__/fixtures/persisted-content-await/__snapshots__/html.bundle.debug.js
index b4748ce0400..c0efe6cee78 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-content-await/__snapshots__/html.bundle.debug.js
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-content-await/__snapshots__/html.bundle.debug.js
@@ -44,7 +44,7 @@ var template_default = _template_persisted("__tests__/template.marko", (input) =
"ClosureSignalIndex:input_value": 1
}, "__tests__/template.marko", "4:8"));
_resume_branch($scope3_id);
- }, void 0, "__tests__/template.marko_2_#text#0/await");
+ }, 1, "__tests__/template.marko_2_#text#0/await");
$scope0_reason && _subscribe($si__input_value && $input_value__closures, _scope($scope2_id, { _: _scope_with_id($scope1_id) }, "__tests__/template.marko", "3:6"));
_resume_branch($scope2_id);
}, $scope1_id) });
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-content-await/__snapshots__/html.bundle.js b/packages/runtime-tags/src/__tests__/fixtures/persisted-content-await/__snapshots__/html.bundle.js
index 687d44d07a0..fdb17c8b2f8 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-content-await/__snapshots__/html.bundle.js
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-content-await/__snapshots__/html.bundle.js
@@ -41,7 +41,7 @@ var template_default = _template_persisted("a", (input) => {
Cf: 1
}));
_resume_branch($scope3_id);
- }, void 0, "a1");
+ }, 1, "a1");
$scope0_reason && _subscribe($si__input_value && $input_value__closures, _scope($scope2_id, { _: _scope_with_id($scope1_id) }));
_resume_branch($scope2_id);
}, $scope1_id) });
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-content-await/sizes.json b/packages/runtime-tags/src/__tests__/fixtures/persisted-content-await/sizes.json
index 975b87873b2..fa9b48a287a 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-content-await/sizes.json
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-content-await/sizes.json
@@ -1,8 +1,8 @@
{
"dom": {
"template.marko.page.mjs": {
- "min": 12540,
- "brotli": 5206
+ "min": 12477,
+ "brotli": 5187
}
},
"html": {
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-content-body-branch/sizes.json b/packages/runtime-tags/src/__tests__/fixtures/persisted-content-body-branch/sizes.json
index cd561f0b187..02ba7452b4f 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-content-body-branch/sizes.json
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-content-body-branch/sizes.json
@@ -1,8 +1,8 @@
{
"dom": {
"template.marko.page.mjs": {
- "min": 10221,
- "brotli": 4361
+ "min": 10177,
+ "brotli": 4340
}
},
"html": {
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-content-branch-nested/sizes.json b/packages/runtime-tags/src/__tests__/fixtures/persisted-content-branch-nested/sizes.json
index a3b11976617..07372411302 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-content-branch-nested/sizes.json
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-content-branch-nested/sizes.json
@@ -1,8 +1,8 @@
{
"dom": {
"template.marko.page.mjs": {
- "min": 10221,
- "brotli": 4361
+ "min": 10177,
+ "brotli": 4340
}
},
"html": {
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-content-branch-scriptless/sizes.json b/packages/runtime-tags/src/__tests__/fixtures/persisted-content-branch-scriptless/sizes.json
index 83c2543f39c..5d0bdf04f15 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-content-branch-scriptless/sizes.json
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-content-branch-scriptless/sizes.json
@@ -1,8 +1,8 @@
{
"dom": {
"template.marko.page.mjs": {
- "min": 10221,
- "brotli": 4361
+ "min": 10177,
+ "brotli": 4340
}
},
"html": {
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-content-child-branch-static/sizes.json b/packages/runtime-tags/src/__tests__/fixtures/persisted-content-child-branch-static/sizes.json
index 5c170188267..df5e6214f67 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-content-child-branch-static/sizes.json
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-content-child-branch-static/sizes.json
@@ -1,8 +1,8 @@
{
"dom": {
"template.marko.page.mjs": {
- "min": 10273,
- "brotli": 4388
+ "min": 10229,
+ "brotli": 4368
}
},
"html": {
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-content-child-branch/sizes.json b/packages/runtime-tags/src/__tests__/fixtures/persisted-content-child-branch/sizes.json
index 0177ace4c40..5f130d8e798 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-content-child-branch/sizes.json
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-content-child-branch/sizes.json
@@ -1,8 +1,8 @@
{
"dom": {
"template.marko.page.mjs": {
- "min": 10221,
- "brotli": 4357
+ "min": 10177,
+ "brotli": 4340
}
},
"html": {
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-content-child-client-owned-const/sizes.json b/packages/runtime-tags/src/__tests__/fixtures/persisted-content-child-client-owned-const/sizes.json
index f3a7276552a..281286f17aa 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-content-child-client-owned-const/sizes.json
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-content-child-client-owned-const/sizes.json
@@ -2,8 +2,8 @@
"dom": {
"template.marko.page.mjs": {
"total": {
- "min": 10839,
- "brotli": 4598
+ "min": 10817,
+ "brotli": 4592
},
"files": {
"tags/card/index.marko": 604,
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-content-child-client-owned/sizes.json b/packages/runtime-tags/src/__tests__/fixtures/persisted-content-child-client-owned/sizes.json
index fd3ba51bbc3..f64487ac0f2 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-content-child-client-owned/sizes.json
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-content-child-client-owned/sizes.json
@@ -2,8 +2,8 @@
"dom": {
"template.marko.page.mjs": {
"total": {
- "min": 10839,
- "brotli": 4597
+ "min": 10817,
+ "brotli": 4591
},
"files": {
"tags/card/index.marko": 604,
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-content-child-loop/sizes.json b/packages/runtime-tags/src/__tests__/fixtures/persisted-content-child-loop/sizes.json
index 1d89fbbb802..397017d8224 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-content-child-loop/sizes.json
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-content-child-loop/sizes.json
@@ -1,8 +1,8 @@
{
"dom": {
"template.marko.page.mjs": {
- "min": 11544,
- "brotli": 4976
+ "min": 11500,
+ "brotli": 4954
}
},
"html": {
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-content-client-owned/sizes.json b/packages/runtime-tags/src/__tests__/fixtures/persisted-content-client-owned/sizes.json
index c7727b04256..4c7772a11ee 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-content-client-owned/sizes.json
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-content-client-owned/sizes.json
@@ -2,8 +2,8 @@
"dom": {
"template.marko.page.mjs": {
"total": {
- "min": 11875,
- "brotli": 5022
+ "min": 11810,
+ "brotli": 5003
},
"files": {
"tags/card/index.marko": 268,
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-content-closure-mix/__snapshots__/dom.bundle.debug.js b/packages/runtime-tags/src/__tests__/fixtures/persisted-content-closure-mix/__snapshots__/dom.bundle.debug.js
index 95eb467161b..55a90994549 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-content-closure-mix/__snapshots__/dom.bundle.debug.js
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-content-closure-mix/__snapshots__/dom.bundle.debug.js
@@ -15,9 +15,10 @@ const $setup = () => {};
const $card_content__input_prefix = /*@__PURE__*/ _closure_get("input_prefix", ($scope) => _text($scope["#text/1"], $scope._._.input_prefix), ($scope) => $scope._._);
const $card_content__setup = ($scope) => {
$card_content__input_prefix($scope);
+ $card_content__$global_brand($scope);
$card_content__item($scope);
- _text($scope["#text/0"], $scope.$global.brand);
};
+const $card_content__$global_brand = /*@__PURE__*/ _closure_get("$global_brand", ($scope) => _text($scope["#text/0"], $scope._._.$global_brand), ($scope) => $scope._._);
const $card_content__item = /*@__PURE__*/ _closure_get("item", ($scope) => _text($scope["#text/2"], $scope._.item));
const $card_content = /*@__PURE__*/ _content("__tests__/template.marko_2*content", "::", "D%c%c%", $card_content__setup);
const $for_content__setup = ($scope) => $input_content_direct($scope["#childScope/0"], $card_content($scope));
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-content-closure-mix/__snapshots__/html.bundle.debug.js b/packages/runtime-tags/src/__tests__/fixtures/persisted-content-closure-mix/__snapshots__/html.bundle.debug.js
index 640627a74f2..062230e3af8 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-content-closure-mix/__snapshots__/html.bundle.debug.js
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-content-closure-mix/__snapshots__/html.bundle.debug.js
@@ -24,6 +24,7 @@ var template_default = _template_persisted("__tests__/template.marko", (input) =
const $scope0_owned = _persisted_ownership(), $scope0_reason = _persisted_reason(), $sg__input_items = _source_guard($scope0_reason, 1);
const $scope0_id = _scope_id();
const $input_prefix__closures = new Set();
+ const $global_brand__closures = new Set();
const $global$1 = $global();
_html("");
_for_of(input.items, (item) => {
@@ -36,7 +37,7 @@ var template_default = _template_persisted("__tests__/template.marko", (input) =
const $scope2_reason = _persisted_reason();
const $scope2_id = _scope_id();
_html(`${_patch_text($scope2_id, "#text/0", $global$1.brand)}:${_patch_text($scope2_id, "#text/1", input.prefix, 2, $scope0_owned, 2)}:${_patch_text($scope2_id, "#text/2", item, 2, $scope0_owned, 1)}`);
- _subscribe($scope0_reason && $for_content__item__closures, _subscribe(_source_if($scope0_reason, 2) && $input_prefix__closures, _scope($scope2_id, { _: _scope_with_id($scope1_id) }, "__tests__/template.marko", "3:6")));
+ _subscribe($scope0_reason && $for_content__item__closures, _subscribe($scope0_reason && $global_brand__closures, _subscribe(_source_if($scope0_reason, 2) && $input_prefix__closures, _scope($scope2_id, { _: _scope_with_id($scope1_id) }, "__tests__/template.marko", "3:6"))));
_resume_branch($scope2_id);
}, $scope1_id) });
_scope($scope1_id, {
@@ -48,6 +49,11 @@ var template_default = _template_persisted("__tests__/template.marko", (input) =
_html(`${_el_resume($scope0_id, "#main/0", $sg__input_items)}`);
$scope0_reason && _scope($scope0_id, {
input_prefix: input.prefix,
- "ClosureScopes:input_prefix": $input_prefix__closures
- }, "__tests__/template.marko", 0, { input_prefix: ["input.prefix"] });
+ $global_brand: $global$1?.brand,
+ "ClosureScopes:input_prefix": $input_prefix__closures,
+ "ClosureScopes:$global_brand": $global_brand__closures
+ }, "__tests__/template.marko", 0, {
+ input_prefix: ["input.prefix"],
+ $global_brand: ["$global.brand"]
+ });
}, 1, 1);
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-content-closure-mix/__snapshots__/html.bundle.js b/packages/runtime-tags/src/__tests__/fixtures/persisted-content-closure-mix/__snapshots__/html.bundle.js
index bb6773b529d..809662cd265 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-content-closure-mix/__snapshots__/html.bundle.js
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-content-closure-mix/__snapshots__/html.bundle.js
@@ -21,6 +21,7 @@ var template_default = _template_persisted("a", (input) => {
const $scope0_owned = _persisted_ownership(), $scope0_reason = _persisted_reason(), $sg__input_items = _source_guard($scope0_reason, 1);
const $scope0_id = _scope_id();
const $input_prefix__closures = /* @__PURE__ */ new Set();
+ const $global_brand__closures = /* @__PURE__ */ new Set();
const $global$1 = $global();
_html("");
_for_of(input.items, (item) => {
@@ -33,7 +34,7 @@ var template_default = _template_persisted("a", (input) => {
_persisted_reason();
const $scope2_id = _scope_id();
_html(`${_patch_text($scope2_id, "a", $global$1.brand)}:${_patch_text($scope2_id, "b", input.prefix, 2, $scope0_owned, 2)}:${_patch_text($scope2_id, "c", item, 2, $scope0_owned, 1)}`);
- _subscribe($scope0_reason && $for_content__item__closures, _subscribe(_source_if($scope0_reason, 2) && $input_prefix__closures, _scope($scope2_id, { _: _scope_with_id($scope1_id) })));
+ _subscribe($scope0_reason && $for_content__item__closures, _subscribe($scope0_reason && $global_brand__closures, _subscribe(_source_if($scope0_reason, 2) && $input_prefix__closures, _scope($scope2_id, { _: _scope_with_id($scope1_id) }))));
_resume_branch($scope2_id);
}, $scope1_id) });
_scope($scope1_id, {
@@ -45,6 +46,8 @@ var template_default = _template_persisted("a", (input) => {
_html(`${_el_resume($scope0_id, "a", $sg__input_items)}`);
$scope0_reason && _scope($scope0_id, {
e: input.prefix,
- f: $input_prefix__closures
+ f: $global$1?.brand,
+ g: $input_prefix__closures,
+ h: $global_brand__closures
});
}, 1, 1);
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-content-closure-mix/__snapshots__/writes.debug.html b/packages/runtime-tags/src/__tests__/fixtures/persisted-content-closure-mix/__snapshots__/writes.debug.html
index 4c2d461f2f9..60cf4b85f20 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-content-closure-mix/__snapshots__/writes.debug.html
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-content-closure-mix/__snapshots__/writes.debug.html
@@ -11,7 +11,9 @@
brand: "Acme"
}, {
input_prefix: "p",
- "ClosureScopes:input_prefix": new Set([_(4), _(7)])
+ $global_brand: "Acme",
+ "ClosureScopes:input_prefix": new Set([_(4), _(7)]),
+ "ClosureScopes:$global_brand": new Set([_(4), _(7)])
}, {
_: _(1),
"ClosureScopes:item": new Set([_(4)]),
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-content-closure-mix/__snapshots__/writes.html b/packages/runtime-tags/src/__tests__/fixtures/persisted-content-closure-mix/__snapshots__/writes.html
index 2aa096f6ca9..18327b4ac9d 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-content-closure-mix/__snapshots__/writes.html
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-content-closure-mix/__snapshots__/writes.html
@@ -10,7 +10,9 @@
brand: "Acme"
}, {
e: "p",
- f: new Set([_(4), _(7)])
+ f: "Acme",
+ g: new Set([_(4), _(7)]),
+ h: new Set([_(4), _(7)])
}, {
_: _(1),
d: new Set([_(4)]),
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-content-closure-mix/sizes.json b/packages/runtime-tags/src/__tests__/fixtures/persisted-content-closure-mix/sizes.json
index 6f09b2dabbc..268dbcf161f 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-content-closure-mix/sizes.json
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-content-closure-mix/sizes.json
@@ -1,13 +1,13 @@
{
"dom": {
"template.marko.page.mjs": {
- "min": 11544,
- "brotli": 4984
+ "min": 11500,
+ "brotli": 4961
}
},
"html": {
- "min": 721,
- "brotli": 367
+ "min": 753,
+ "brotli": 373
},
"patch": {
"min": 423,
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-content-dynamic-body-construct/sizes.json b/packages/runtime-tags/src/__tests__/fixtures/persisted-content-dynamic-body-construct/sizes.json
index d6fd8c7a724..f4f1445732b 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-content-dynamic-body-construct/sizes.json
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-content-dynamic-body-construct/sizes.json
@@ -1,8 +1,8 @@
{
"dom": {
"template.marko.page.mjs": {
- "min": 10221,
- "brotli": 4361
+ "min": 10177,
+ "brotli": 4340
}
},
"html": {
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-content-dynamic-body/sizes.json b/packages/runtime-tags/src/__tests__/fixtures/persisted-content-dynamic-body/sizes.json
index 57afe5c3605..6d7845fab22 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-content-dynamic-body/sizes.json
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-content-dynamic-body/sizes.json
@@ -1,8 +1,8 @@
{
"dom": {
"template.marko.page.mjs": {
- "min": 10221,
- "brotli": 4361
+ "min": 10177,
+ "brotli": 4340
}
},
"html": {
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-content-for-intersect/sizes.json b/packages/runtime-tags/src/__tests__/fixtures/persisted-content-for-intersect/sizes.json
index e61f7e43aea..e5092eb3401 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-content-for-intersect/sizes.json
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-content-for-intersect/sizes.json
@@ -2,8 +2,8 @@
"dom": {
"template.marko.page.mjs": {
"total": {
- "min": 13131,
- "brotli": 5633
+ "min": 13066,
+ "brotli": 5626
},
"files": {
"tags/box/index.marko": 159,
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-content-global-scriptless/__snapshots__/dom.bundle.debug.js b/packages/runtime-tags/src/__tests__/fixtures/persisted-content-global-scriptless/__snapshots__/dom.bundle.debug.js
index 06342904a55..a2aa3c6c78b 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-content-global-scriptless/__snapshots__/dom.bundle.debug.js
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-content-global-scriptless/__snapshots__/dom.bundle.debug.js
@@ -15,13 +15,15 @@ var card_default = /*@__PURE__*/ _template("__tests__/tags/card/index.marko", $t
// template.marko
const $template = /*@__PURE__*/ ((_w0) => `${_w0}`)($template$1);
const $walks = /*@__PURE__*/ ((_w0) => `D/${_w0}&%l`)($walks$1);
-const $card_content2__setup = ($scope) => _text($scope["#text/0"], $scope.$global.brand);
+const $card_content2__$global_brand = /*@__PURE__*/ _closure_get("$global_brand", ($scope) => _text($scope["#text/0"], $scope._._.$global_brand), ($scope) => $scope._._);
+const $card_content2__setup = $card_content2__$global_brand;
const $card_content2 = /*@__PURE__*/ _content("__tests__/template.marko_3*content", " ", "D ", $card_content2__setup);
const $if_content__setup = ($scope) => {
$input_content_direct($scope["#childScope/0"], $card_content2($scope));
$input_title$1($scope["#childScope/0"], "x");
};
-const $card_content__setup = ($scope) => _text($scope["#text/0"], $scope.$global.brand);
+const $card_content__$global_brand = /*@__PURE__*/ _closure_get("$global_brand", ($scope) => _text($scope["#text/0"], $scope._.$global_brand));
+const $card_content__setup = $card_content__$global_brand;
const $card_content = /*@__PURE__*/ _content("__tests__/template.marko_1*content", " ", "D ", $card_content__setup);
function $setup($scope) {
$input_content_direct($scope["#childScope/0"], $card_content($scope));
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-content-global-scriptless/__snapshots__/html.bundle.debug.js b/packages/runtime-tags/src/__tests__/fixtures/persisted-content-global-scriptless/__snapshots__/html.bundle.debug.js
index fce27f3d8f8..412195d4187 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-content-global-scriptless/__snapshots__/html.bundle.debug.js
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-content-global-scriptless/__snapshots__/html.bundle.debug.js
@@ -24,6 +24,7 @@ _shells({
var template_default = _template_persisted("__tests__/template.marko", (input) => {
const $scope0_owned = _persisted_ownership(), $scope0_reason = _persisted_reason(), $sg__input_show = _source_guard($scope0_reason, 1);
const $scope0_id = _scope_id();
+ const $global_brand__closures = new Set();
const $global$1 = $global();
_html("");
_set_serialize_reason({ 0: _mask_group($scope0_owned, 0) });
@@ -35,7 +36,8 @@ var template_default = _template_persisted("__tests__/template.marko", (input) =
const $scope1_reason = _persisted_reason();
const $scope1_id = _scope_id();
_html(`${_patch_text($scope1_id, "#text/0", $global$1.brand)}`);
- _scope($scope1_id, {}, "__tests__/template.marko", "2:4");
+ _subscribe($scope0_reason && $global_brand__closures, _scope($scope1_id, { _: _scope_with_id($scope0_id) }, "__tests__/template.marko", "2:4"));
+ _resume_branch($scope1_id);
}, $scope0_id)
});
_if(() => {
@@ -50,13 +52,24 @@ var template_default = _template_persisted("__tests__/template.marko", (input) =
const $scope3_reason = _persisted_reason();
const $scope3_id = _scope_id();
_html(`${_patch_text($scope3_id, "#text/0", $global$1.brand)}`);
- _scope($scope3_id, {}, "__tests__/template.marko", "6:6");
+ _subscribe($scope0_reason && $global_brand__closures, _scope($scope3_id, {
+ _: _scope_with_id($scope2_id),
+ "ClosureSignalIndex:$global_brand": 1
+ }, "__tests__/template.marko", "6:6"));
+ _resume_branch($scope3_id);
}, $scope2_id)
});
- _scope($scope2_id, { "#childScope/0": _existing_scope($childScope2) }, "__tests__/template.marko", "5:4");
+ _scope($scope2_id, {
+ _: _scope_with_id($scope0_id),
+ "#childScope/0": _existing_scope($childScope2)
+ }, "__tests__/template.marko", "5:4");
return 0;
}
}, $scope0_id, "#text/1", 1, $sg__input_show, $sg__input_show, void 0, void 0, ["__tests__/template.marko_2*shell"]);
_html("");
- $scope0_reason && _scope($scope0_id, { "#childScope/0": _existing_scope($childScope) }, "__tests__/template.marko", 0);
+ $scope0_reason && _scope($scope0_id, {
+ $global_brand: $global$1?.brand,
+ "ClosureScopes:$global_brand": $global_brand__closures,
+ "#childScope/0": _existing_scope($childScope)
+ }, "__tests__/template.marko", 0, { $global_brand: ["$global.brand"] });
}, 1, 1);
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-content-global-scriptless/__snapshots__/html.bundle.js b/packages/runtime-tags/src/__tests__/fixtures/persisted-content-global-scriptless/__snapshots__/html.bundle.js
index ba83f8ea086..fd717f9fb75 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-content-global-scriptless/__snapshots__/html.bundle.js
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-content-global-scriptless/__snapshots__/html.bundle.js
@@ -22,6 +22,7 @@ _shells({
var template_default = _template_persisted("a", (input) => {
const $scope0_owned = _persisted_ownership(), $scope0_reason = _persisted_reason(), $sg__input_show = _source_guard($scope0_reason, 1);
const $scope0_id = _scope_id();
+ const $global_brand__closures = /* @__PURE__ */ new Set();
const $global$1 = $global();
_html("");
_set_serialize_reason({ 0: _mask_group($scope0_owned, 0) });
@@ -33,7 +34,8 @@ var template_default = _template_persisted("a", (input) => {
_persisted_reason();
const $scope1_id = _scope_id();
_html(`${_patch_text($scope1_id, "a", $global$1.brand)}`);
- _scope($scope1_id, {});
+ _subscribe($scope0_reason && $global_brand__closures, _scope($scope1_id, { _: _scope_with_id($scope0_id) }));
+ _resume_branch($scope1_id);
}, $scope0_id)
});
_if(() => {
@@ -48,13 +50,24 @@ var template_default = _template_persisted("a", (input) => {
_persisted_reason();
const $scope3_id = _scope_id();
_html(`${_patch_text($scope3_id, "a", $global$1.brand)}`);
- _scope($scope3_id, {});
+ _subscribe($scope0_reason && $global_brand__closures, _scope($scope3_id, {
+ _: _scope_with_id($scope2_id),
+ Ch: 1
+ }));
+ _resume_branch($scope3_id);
}, $scope2_id)
});
- _scope($scope2_id, { a: _existing_scope($childScope2) });
+ _scope($scope2_id, {
+ _: _scope_with_id($scope0_id),
+ a: _existing_scope($childScope2)
+ });
return 0;
}
}, $scope0_id, "b", 1, $sg__input_show, $sg__input_show, void 0, void 0, ["a2"]);
_html("");
- $scope0_reason && _scope($scope0_id, { a: _existing_scope($childScope) });
+ $scope0_reason && _scope($scope0_id, {
+ g: $global$1?.brand,
+ h: $global_brand__closures,
+ a: _existing_scope($childScope)
+ });
}, 1, 1);
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-content-global-scriptless/__snapshots__/writes.debug.html b/packages/runtime-tags/src/__tests__/fixtures/persisted-content-global-scriptless/__snapshots__/writes.debug.html
index de7b4f9bb6f..a36dcbab417 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-content-global-scriptless/__snapshots__/writes.debug.html
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-content-global-scriptless/__snapshots__/writes.debug.html
@@ -9,9 +9,13 @@ a
M._.r = [_ => [0, {
brand: "Acme"
}, {
+ $global_brand: "Acme",
+ "ClosureScopes:$global_brand": new Set([_(3)]),
"#childScope/0": _(2)
}, {
"ConditionalRenderer:#text/1": "packages/runtime-tags/src/__tests__/fixtures/persisted-content-global-scriptless/template.marko_1*content 1"
+ }, {
+ _: _(1)
}]];
M._.w()
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-content-global-scriptless/__snapshots__/writes.html b/packages/runtime-tags/src/__tests__/fixtures/persisted-content-global-scriptless/__snapshots__/writes.html
index 7a81fa3bed2..923fad9bed3 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-content-global-scriptless/__snapshots__/writes.html
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-content-global-scriptless/__snapshots__/writes.html
@@ -8,9 +8,13 @@ a
Acme
M._.r = [_ => [0, {
brand: "Acme"
}, {
+ g: "Acme",
+ h: new Set([_(3)]),
a: _(2)
}, {
Db: "a1 1"
+ }, {
+ _: _(1)
}]];
M._.w()
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-content-global-scriptless/sizes.json b/packages/runtime-tags/src/__tests__/fixtures/persisted-content-global-scriptless/sizes.json
index 45f065ef999..d690ec2d2f1 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-content-global-scriptless/sizes.json
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-content-global-scriptless/sizes.json
@@ -1,13 +1,13 @@
{
"dom": {
"template.marko.page.mjs": {
- "min": 10221,
- "brotli": 4361
+ "min": 10177,
+ "brotli": 4340
}
},
"html": {
- "min": 450,
- "brotli": 296
+ "min": 486,
+ "brotli": 317
},
"patch": {
"min": 477,
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-content-global/__snapshots__/dom.bundle.debug.js b/packages/runtime-tags/src/__tests__/fixtures/persisted-content-global/__snapshots__/dom.bundle.debug.js
index e014ba7eb38..87d590fd603 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-content-global/__snapshots__/dom.bundle.debug.js
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-content-global/__snapshots__/dom.bundle.debug.js
@@ -15,7 +15,8 @@ var widget_default = /*@__PURE__*/ _template("__tests__/tags/widget/index.marko"
// template.marko
const $template = /*@__PURE__*/ ((_w0) => `${_w0}`)($template$1);
const $walks = /*@__PURE__*/ ((_w0) => `D/${_w0}& l`)($walks$1);
-const $widget_content__setup = ($scope) => _text($scope["#text/0"], $scope.$global.brand);
+const $widget_content__$global_brand = /*@__PURE__*/ _closure_get("$global_brand", ($scope) => _text($scope["#text/0"], $scope._.$global_brand));
+const $widget_content__setup = $widget_content__$global_brand;
const $widget_content = /*@__PURE__*/ _content("__tests__/template.marko_1*content", "
", "D ", $widget_content__setup);
const $count = /*@__PURE__*/ _let("count/2", ($scope) => $input_value($scope["#childScope/0"], $scope.count));
const $setup__script = _script("__tests__/template.marko_0", ($scope) => _on($scope["#button/1"], "click", function() {
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-content-global/__snapshots__/html.bundle.debug.js b/packages/runtime-tags/src/__tests__/fixtures/persisted-content-global/__snapshots__/html.bundle.debug.js
index 646f9f80bee..540eeea7296 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-content-global/__snapshots__/html.bundle.debug.js
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-content-global/__snapshots__/html.bundle.debug.js
@@ -22,6 +22,7 @@ _shells({
var template_default = _template_persisted("__tests__/template.marko", (input) => {
const $scope0_reason = _persisted_reason();
const $scope0_id = _scope_id();
+ const $global_brand__closures = new Set();
const $global$1 = $global();
let count = 0;
_html("");
@@ -34,13 +35,15 @@ var template_default = _template_persisted("__tests__/template.marko", (input) =
const $scope1_reason = _persisted_reason();
const $scope1_id = _scope_id();
_html(`${_patch_text($scope1_id, "#text/0", $global$1.brand)}
`);
- _scope($scope1_id, {}, "__tests__/template.marko", "3:4");
+ _subscribe($scope0_reason && $global_brand__closures, _scope($scope1_id, { _: _scope_with_id($scope0_id) }, "__tests__/template.marko", "3:4"));
+ _resume_branch($scope1_id);
}, $scope0_id)
});
_html(`${_el_resume($scope0_id, "#button/1")}`);
_script($scope0_id, "__tests__/template.marko_0");
$scope0_reason && _scope($scope0_id, {
count,
+ "ClosureScopes:$global_brand": $global_brand__closures,
"#childScope/0": _existing_scope($childScope)
}, "__tests__/template.marko", 0, { count: "1:6" });
_resume_branch($scope0_id);
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-content-global/__snapshots__/html.bundle.js b/packages/runtime-tags/src/__tests__/fixtures/persisted-content-global/__snapshots__/html.bundle.js
index 58b0ed1e0ef..bbe1739af09 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-content-global/__snapshots__/html.bundle.js
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-content-global/__snapshots__/html.bundle.js
@@ -20,6 +20,7 @@ _shells({
var template_default = _template_persisted("a", (input) => {
const $scope0_reason = _persisted_reason();
const $scope0_id = _scope_id();
+ const $global_brand__closures = /* @__PURE__ */ new Set();
const $global$1 = $global();
let count = 0;
_html("");
@@ -32,13 +33,15 @@ var template_default = _template_persisted("a", (input) => {
_persisted_reason();
const $scope1_id = _scope_id();
_html(`${_patch_text($scope1_id, "a", $global$1.brand)}
`);
- _scope($scope1_id, {});
+ _subscribe($scope0_reason && $global_brand__closures, _scope($scope1_id, { _: _scope_with_id($scope0_id) }));
+ _resume_branch($scope1_id);
}, $scope0_id)
});
_html(`${_el_resume($scope0_id, "b")}`);
_script($scope0_id, "a1");
$scope0_reason && _scope($scope0_id, {
c: count,
+ e: $global_brand__closures,
a: _existing_scope($childScope)
});
_resume_branch($scope0_id);
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-content-global/__snapshots__/writes.debug.html b/packages/runtime-tags/src/__tests__/fixtures/persisted-content-global/__snapshots__/writes.debug.html
index 852037ccbfb..2ea412ffc5d 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-content-global/__snapshots__/writes.debug.html
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-content-global/__snapshots__/writes.debug.html
@@ -9,9 +9,12 @@
brand: "Acme"
}, {
count: 0,
+ "ClosureScopes:$global_brand": new Set([_(3)]),
"#childScope/0": _(2)
}, {
"ConditionalRenderer:#text/1": "packages/runtime-tags/src/__tests__/fixtures/persisted-content-global/template.marko_1*content 1"
+ }, {
+ _: _(1)
}],
"packages/runtime-tags/src/__tests__/fixtures/persisted-content-global/template.marko_0 1"
];
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-content-global/__snapshots__/writes.html b/packages/runtime-tags/src/__tests__/fixtures/persisted-content-global/__snapshots__/writes.html
index bc719e5b86c..b3fc0034316 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-content-global/__snapshots__/writes.html
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-content-global/__snapshots__/writes.html
@@ -9,9 +9,12 @@
brand: "Acme"
}, {
c: 0,
+ e: new Set([_(3)]),
a: _(2)
}, {
Db: "a0 1"
+ }, {
+ _: _(1)
}], "a1 1"];
M._.w()
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-content-global/sizes.json b/packages/runtime-tags/src/__tests__/fixtures/persisted-content-global/sizes.json
index 087eb16e27f..82de4984045 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-content-global/sizes.json
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-content-global/sizes.json
@@ -2,8 +2,8 @@
"dom": {
"template.marko.page.mjs": {
"total": {
- "min": 10281,
- "brotli": 4403
+ "min": 10236,
+ "brotli": 4390
},
"files": {
"tags/widget/index.marko": 123,
@@ -12,8 +12,8 @@
}
},
"html": {
- "min": 485,
- "brotli": 311
+ "min": 512,
+ "brotli": 331
},
"patch": {
"min": 38,
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-content-hole/sizes.json b/packages/runtime-tags/src/__tests__/fixtures/persisted-content-hole/sizes.json
index b549b0be9ba..27a8fc599ad 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-content-hole/sizes.json
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-content-hole/sizes.json
@@ -1,8 +1,8 @@
{
"dom": {
"template.marko.page.mjs": {
- "min": 9695,
- "brotli": 4144
+ "min": 9650,
+ "brotli": 4125
}
},
"html": {
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-content-inner-branch/sizes.json b/packages/runtime-tags/src/__tests__/fixtures/persisted-content-inner-branch/sizes.json
index e50a725985f..c4e72b44c6c 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-content-inner-branch/sizes.json
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-content-inner-branch/sizes.json
@@ -1,8 +1,8 @@
{
"dom": {
"template.marko.page.mjs": {
- "min": 10221,
- "brotli": 4361
+ "min": 10177,
+ "brotli": 4340
}
},
"html": {
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-content-intersect-mixed/sizes.json b/packages/runtime-tags/src/__tests__/fixtures/persisted-content-intersect-mixed/sizes.json
index a03eccadba0..35195b36b57 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-content-intersect-mixed/sizes.json
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-content-intersect-mixed/sizes.json
@@ -2,8 +2,8 @@
"dom": {
"template.marko.page.mjs": {
"total": {
- "min": 12002,
- "brotli": 5090
+ "min": 11937,
+ "brotli": 5071
},
"files": {
"tags/box/index.marko": 159,
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-content-intersect/sizes.json b/packages/runtime-tags/src/__tests__/fixtures/persisted-content-intersect/sizes.json
index 726e45f55a0..24fe14297d9 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-content-intersect/sizes.json
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-content-intersect/sizes.json
@@ -2,8 +2,8 @@
"dom": {
"template.marko.page.mjs": {
"total": {
- "min": 11787,
- "brotli": 5007
+ "min": 11722,
+ "brotli": 4984
},
"files": {
"tags/box/index.marko": 159,
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-content-loop/sizes.json b/packages/runtime-tags/src/__tests__/fixtures/persisted-content-loop/sizes.json
index 285b70e6707..a521fae6837 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-content-loop/sizes.json
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-content-loop/sizes.json
@@ -1,8 +1,8 @@
{
"dom": {
"template.marko.page.mjs": {
- "min": 11544,
- "brotli": 4984
+ "min": 11500,
+ "brotli": 4961
}
},
"html": {
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-content-nested-child-client-owned/sizes.json b/packages/runtime-tags/src/__tests__/fixtures/persisted-content-nested-child-client-owned/sizes.json
index fbb8d79bc1e..3ed4d963d50 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-content-nested-child-client-owned/sizes.json
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-content-nested-child-client-owned/sizes.json
@@ -2,8 +2,8 @@
"dom": {
"template.marko.page.mjs": {
"total": {
- "min": 10839,
- "brotli": 4589
+ "min": 10817,
+ "brotli": 4584
},
"files": {
"tags/grand/index.marko": 605,
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-content-nested-client-owned/sizes.json b/packages/runtime-tags/src/__tests__/fixtures/persisted-content-nested-client-owned/sizes.json
index 8e4cb181500..08a8d865ca5 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-content-nested-client-owned/sizes.json
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-content-nested-client-owned/sizes.json
@@ -2,8 +2,8 @@
"dom": {
"template.marko.page.mjs": {
"total": {
- "min": 11788,
- "brotli": 5001
+ "min": 11723,
+ "brotli": 4984
},
"files": {
"tags/grand/index.marko": 173,
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-content-nested-renderer/sizes.json b/packages/runtime-tags/src/__tests__/fixtures/persisted-content-nested-renderer/sizes.json
index 8ad4f3bbe65..f22fa496b23 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-content-nested-renderer/sizes.json
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-content-nested-renderer/sizes.json
@@ -1,8 +1,8 @@
{
"dom": {
"template.marko.page.mjs": {
- "min": 10221,
- "brotli": 4361
+ "min": 10177,
+ "brotli": 4340
}
},
"html": {
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-content-nested-stateful-consumer/sizes.json b/packages/runtime-tags/src/__tests__/fixtures/persisted-content-nested-stateful-consumer/sizes.json
index 0ff08ccef10..f7faf3a1e7f 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-content-nested-stateful-consumer/sizes.json
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-content-nested-stateful-consumer/sizes.json
@@ -2,8 +2,8 @@
"dom": {
"template.marko.page.mjs": {
"total": {
- "min": 11762,
- "brotli": 4963
+ "min": 11697,
+ "brotli": 4942
},
"files": {
"tags/grand/index.marko": 169,
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-content-nested-swap/sizes.json b/packages/runtime-tags/src/__tests__/fixtures/persisted-content-nested-swap/sizes.json
index 90d8796f2b5..fc235f6908f 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-content-nested-swap/sizes.json
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-content-nested-swap/sizes.json
@@ -1,8 +1,8 @@
{
"dom": {
"template.marko.page.mjs": {
- "min": 10753,
- "brotli": 4593
+ "min": 10709,
+ "brotli": 4587
}
},
"html": {
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-content-nested/sizes.json b/packages/runtime-tags/src/__tests__/fixtures/persisted-content-nested/sizes.json
index ccecf5f8693..653df14566f 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-content-nested/sizes.json
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-content-nested/sizes.json
@@ -1,8 +1,8 @@
{
"dom": {
"template.marko.page.mjs": {
- "min": 9695,
- "brotli": 4144
+ "min": 9650,
+ "brotli": 4125
}
},
"html": {
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-content-placeholder-scriptless/__snapshots__/html.bundle.debug.js b/packages/runtime-tags/src/__tests__/fixtures/persisted-content-placeholder-scriptless/__snapshots__/html.bundle.debug.js
index 1c732e8cb94..af00ba57f3d 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-content-placeholder-scriptless/__snapshots__/html.bundle.debug.js
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-content-placeholder-scriptless/__snapshots__/html.bundle.debug.js
@@ -18,7 +18,7 @@ var card_default = _template_persisted("__tests__/tags/card/index.marko", (input
_await($scope2_id, "#text/0", input.promise, () => {
const $scope3_id = _scope_id();
_html("done");
- }, 0, "__tests__/tags/card/index.marko_2_#text#0/await");
+ }, 1, "__tests__/tags/card/index.marko_2_#text#0/await");
$scope0_reason && _subscribe($input_promise__closures, _scope($scope2_id, { _: _scope_with_id($scope0_id) }, "__tests__/tags/card/index.marko", "2:4"));
_resume_branch($scope2_id);
}, $scope0_id), { placeholder: attrTag({ content: _content_elide("__tests__/tags/card/index.marko_1*content", () => {
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-content-placeholder-scriptless/__snapshots__/html.bundle.js b/packages/runtime-tags/src/__tests__/fixtures/persisted-content-placeholder-scriptless/__snapshots__/html.bundle.js
index 88dc9aef04b..48d16806a3a 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-content-placeholder-scriptless/__snapshots__/html.bundle.js
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-content-placeholder-scriptless/__snapshots__/html.bundle.js
@@ -17,7 +17,7 @@ var card_default = _template_persisted("b", (input) => {
_await($scope2_id, "a", input.promise, () => {
_scope_id();
_html("done");
- }, 0, "b1");
+ }, 1, "b1");
$scope0_reason && _subscribe($input_promise__closures, _scope($scope2_id, { _: _scope_with_id($scope0_id) }));
_resume_branch($scope2_id);
}, $scope0_id), { placeholder: attrTag({ content: _content_elide("b3", () => {
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-content-placeholder-scriptless/__snapshots__/patches.debug.js b/packages/runtime-tags/src/__tests__/fixtures/persisted-content-placeholder-scriptless/__snapshots__/patches.debug.js
index 169236898da..6ae8fc90e1e 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-content-placeholder-scriptless/__snapshots__/patches.debug.js
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-content-placeholder-scriptless/__snapshots__/patches.debug.js
@@ -2,7 +2,8 @@
[`packages/runtime-tags/src/__tests__/fixtures/persisted-content-placeholder-scriptless/tags/card/index.marko_2_#text#0/await,done`, {
"PatchChild:#childScope/0": {
"PatchChild:BranchScopes:#text/0": {
- "PatchPending:#text/0": "packages/runtime-tags/src/__tests__/fixtures/persisted-content-placeholder-scriptless/tags/card/index.marko_2_#text#0/await"
+ "PatchPending:#text/0": "packages/runtime-tags/src/__tests__/fixtures/persisted-content-placeholder-scriptless/tags/card/index.marko_2_#text#0/await",
+ "PatchChild:BranchScopes:#text/0": {}
}
}
}]
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-content-placeholder-scriptless/__snapshots__/patches.js b/packages/runtime-tags/src/__tests__/fixtures/persisted-content-placeholder-scriptless/__snapshots__/patches.js
index f41a3dba879..23a6e681b89 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-content-placeholder-scriptless/__snapshots__/patches.js
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-content-placeholder-scriptless/__snapshots__/patches.js
@@ -2,7 +2,8 @@
[`b1,done`, {
ca: {
cAa: {
- pa: "b1"
+ pa: "b1",
+ cAa: {}
}
}
}]
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-content-placeholder-scriptless/__snapshots__/render.debug.md b/packages/runtime-tags/src/__tests__/fixtures/persisted-content-placeholder-scriptless/__snapshots__/render.debug.md
index c70a301b919..768944dc60b 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-content-placeholder-scriptless/__snapshots__/render.debug.md
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-content-placeholder-scriptless/__snapshots__/render.debug.md
@@ -10,5 +10,3 @@
```
# Update `{"promise":{},"note":"y"}`
-
-## Patch rejected (navigate)
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-content-placeholder-scriptless/__snapshots__/render.md b/packages/runtime-tags/src/__tests__/fixtures/persisted-content-placeholder-scriptless/__snapshots__/render.md
index c70a301b919..768944dc60b 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-content-placeholder-scriptless/__snapshots__/render.md
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-content-placeholder-scriptless/__snapshots__/render.md
@@ -10,5 +10,3 @@
```
# Update `{"promise":{},"note":"y"}`
-
-## Patch rejected (navigate)
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-content-placeholder-scriptless/__snapshots__/writes.debug.html b/packages/runtime-tags/src/__tests__/fixtures/persisted-content-placeholder-scriptless/__snapshots__/writes.debug.html
index 34209235a50..fa0a6c0c804 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-content-placeholder-scriptless/__snapshots__/writes.debug.html
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-content-placeholder-scriptless/__snapshots__/writes.debug.html
@@ -1,5 +1,7 @@
-
+
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-controllable-checked-value-multiple/__snapshots__/writes.html b/packages/runtime-tags/src/__tests__/fixtures/persisted-controllable-checked-value-multiple/__snapshots__/writes.html
new file mode 100644
index 00000000000..c6bfbc2a380
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-controllable-checked-value-multiple/__snapshots__/writes.html
@@ -0,0 +1,13 @@
+
+
+
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-controllable-checked-value-multiple/sizes.json b/packages/runtime-tags/src/__tests__/fixtures/persisted-controllable-checked-value-multiple/sizes.json
new file mode 100644
index 00000000000..202e5178fe3
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-controllable-checked-value-multiple/sizes.json
@@ -0,0 +1,16 @@
+{
+ "dom": {
+ "template.marko.page.mjs": {
+ "min": 5231,
+ "brotli": 2358
+ }
+ },
+ "html": {
+ "min": 496,
+ "brotli": 302
+ },
+ "patch": {
+ "min": 133,
+ "brotli": 71
+ }
+}
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-controllable-checked-value-multiple/template.marko b/packages/runtime-tags/src/__tests__/fixtures/persisted-controllable-checked-value-multiple/template.marko
new file mode 100644
index 00000000000..7d15934bae9
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-controllable-checked-value-multiple/template.marko
@@ -0,0 +1,6 @@
+
+
+${last}
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-controllable-checked-value-multiple/test.ts b/packages/runtime-tags/src/__tests__/fixtures/persisted-controllable-checked-value-multiple/test.ts
new file mode 100644
index 00000000000..bd20cb29a40
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-controllable-checked-value-multiple/test.ts
@@ -0,0 +1,25 @@
+import type { TestConfig } from "../../main.test";
+
+const toggleB = (document: Document) => {
+ document.querySelectorAll("input")[1]!.click();
+};
+
+const probe = (document: Document) => {
+ const [a, b] = document.querySelectorAll("input");
+ document.querySelector("p")!.textContent = `a:${a!.checked} b:${b!.checked}`;
+};
+
+// An array `checkedValue` (checkbox group): the entry re-ships the array by
+// value each frame and each box compares its own `value` against it.
+export const config: TestConfig = {
+ persisted: true,
+ steps: [
+ { picked: ["a"] },
+ toggleB,
+ probe,
+ { picked: ["a", "b"] },
+ probe,
+ { picked: [] },
+ probe,
+ ],
+};
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-controllable-checked-value/__snapshots__/dom.bundle.debug.js b/packages/runtime-tags/src/__tests__/fixtures/persisted-controllable-checked-value/__snapshots__/dom.bundle.debug.js
new file mode 100644
index 00000000000..0dc7f317610
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-controllable-checked-value/__snapshots__/dom.bundle.debug.js
@@ -0,0 +1,26 @@
+// template.marko
+const $template = "
";
+const $walks = "D b lD l";
+const $note = /*@__PURE__*/ _let("note/6", ($scope) => _text($scope["#text/2"], $scope.note));
+const $setup__script = _script("__tests__/template.marko_0", ($scope) => {
+ _attr_input_checkedValue_script($scope, "#input/0");
+ _attr_input_checkedValue_script($scope, "#input/1");
+});
+function $setup($scope) {
+ $note($scope, "");
+ $setup__script($scope);
+}
+const $input_picked = /*@__PURE__*/ _const("input_picked", ($scope) => {
+ _attr_input_checkedValue($scope, "#input/0", $scope.input_picked, $checkedValueChange($scope), "a");
+ _attr_input_checkedValue($scope, "#input/1", $scope.input_picked, $checkedValueChange2($scope), "b");
+});
+const $input = ($scope, input) => $input_picked($scope, input.picked);
+const $checkedValueChange2 = ($scope) => function(next) {
+ $note($scope, next);
+};
+const $checkedValueChange = ($scope) => function(next) {
+ $note($scope, next);
+};
+_resume("__tests__/template.marko_0/checkedValueChange2", $checkedValueChange2);
+_resume("__tests__/template.marko_0/checkedValueChange", $checkedValueChange);
+var template_default = /*@__PURE__*/ _template("__tests__/template.marko", $template, $walks, $setup, $input);
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-controllable-checked-value/__snapshots__/dom.bundle.js b/packages/runtime-tags/src/__tests__/fixtures/persisted-controllable-checked-value/__snapshots__/dom.bundle.js
new file mode 100644
index 00000000000..ba01f50c9da
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-controllable-checked-value/__snapshots__/dom.bundle.js
@@ -0,0 +1,14 @@
+// template.marko
+const $note = /*@__PURE__*/ _let(6, ($scope) => _text($scope.c, $scope.g));
+const $setup__script = _script("a2", ($scope) => {
+ _attr_input_checkedValue_script($scope, "a");
+ _attr_input_checkedValue_script($scope, "b");
+});
+const $checkedValueChange2 = ($scope) => function(next) {
+ $note($scope, next);
+};
+const $checkedValueChange = ($scope) => function(next) {
+ $note($scope, next);
+};
+_resume("a1", $checkedValueChange2);
+_resume("a0", $checkedValueChange);
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-controllable-checked-value/__snapshots__/error-compile-dom.debug.txt b/packages/runtime-tags/src/__tests__/fixtures/persisted-controllable-checked-value/__snapshots__/error-compile-dom.debug.txt
deleted file mode 100644
index 5f37726fe1b..00000000000
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-controllable-checked-value/__snapshots__/error-compile-dom.debug.txt
+++ /dev/null
@@ -1,5 +0,0 @@
-
- at packages/runtime-tags/src/__tests__/fixtures/persisted-controllable-checked-value/template.marko:1:1
- > 1 |
- | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Persisted templates cannot patch this faithfully yet: `checkedValue` groups are not patchable.
- 2 |
\ No newline at end of file
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-controllable-checked-value/__snapshots__/error-compile-dom.txt b/packages/runtime-tags/src/__tests__/fixtures/persisted-controllable-checked-value/__snapshots__/error-compile-dom.txt
deleted file mode 100644
index 5f37726fe1b..00000000000
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-controllable-checked-value/__snapshots__/error-compile-dom.txt
+++ /dev/null
@@ -1,5 +0,0 @@
-
- at packages/runtime-tags/src/__tests__/fixtures/persisted-controllable-checked-value/template.marko:1:1
- > 1 |
- | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Persisted templates cannot patch this faithfully yet: `checkedValue` groups are not patchable.
- 2 |
\ No newline at end of file
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-controllable-checked-value/__snapshots__/error-compile-html.debug.txt b/packages/runtime-tags/src/__tests__/fixtures/persisted-controllable-checked-value/__snapshots__/error-compile-html.debug.txt
deleted file mode 100644
index 5f37726fe1b..00000000000
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-controllable-checked-value/__snapshots__/error-compile-html.debug.txt
+++ /dev/null
@@ -1,5 +0,0 @@
-
- at packages/runtime-tags/src/__tests__/fixtures/persisted-controllable-checked-value/template.marko:1:1
- > 1 |
- | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Persisted templates cannot patch this faithfully yet: `checkedValue` groups are not patchable.
- 2 |
\ No newline at end of file
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-controllable-checked-value/__snapshots__/error-compile-html.txt b/packages/runtime-tags/src/__tests__/fixtures/persisted-controllable-checked-value/__snapshots__/error-compile-html.txt
deleted file mode 100644
index 5f37726fe1b..00000000000
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-controllable-checked-value/__snapshots__/error-compile-html.txt
+++ /dev/null
@@ -1,5 +0,0 @@
-
- at packages/runtime-tags/src/__tests__/fixtures/persisted-controllable-checked-value/template.marko:1:1
- > 1 |
- | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Persisted templates cannot patch this faithfully yet: `checkedValue` groups are not patchable.
- 2 |
\ No newline at end of file
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-controllable-checked-value/__snapshots__/html.bundle.debug.js b/packages/runtime-tags/src/__tests__/fixtures/persisted-controllable-checked-value/__snapshots__/html.bundle.debug.js
new file mode 100644
index 00000000000..b0740fe056a
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-controllable-checked-value/__snapshots__/html.bundle.debug.js
@@ -0,0 +1,24 @@
+// template.marko
+const $template = "
";
+const $walks = "D b lD l";
+_shells({ "__tests__/template.marko": "__tests__/template.marko !__tests__/template.marko_0;D b lD ;
" });
+var template_default = _template_persisted("__tests__/template.marko", (input) => {
+ const $scope0_owned = _persisted_ownership(), $scope0_reason = _persisted_reason();
+ const $scope0_id = _scope_id();
+ let note = "";
+ _html(`${_text_resume($scope0_id, "#text/2", note)}
`);
+ _script($scope0_id, "__tests__/template.marko_0");
+ $scope0_reason && _scope($scope0_id, {}, "__tests__/template.marko", 0, {
+ "ControlledHandler:#input/0": ["checkedValueChange", "3:51"],
+ "ControlledHandler:#input/1": ["checkedValueChange", "4:51"]
+ });
+ _resume_branch($scope0_id);
+}, 1, 0);
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-controllable-checked-value/__snapshots__/html.bundle.js b/packages/runtime-tags/src/__tests__/fixtures/persisted-controllable-checked-value/__snapshots__/html.bundle.js
new file mode 100644
index 00000000000..427c836dbcd
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-controllable-checked-value/__snapshots__/html.bundle.js
@@ -0,0 +1,19 @@
+// template.marko
+_shells({ a: "a !a2;D b lD ;
" });
+var template_default = _template_persisted("a", (input) => {
+ const $scope0_owned = _persisted_ownership(), $scope0_reason = _persisted_reason();
+ const $scope0_id = _scope_id();
+ let note = "";
+ _html(`${_text_resume($scope0_id, "c", note)}
`);
+ _script($scope0_id, "a2");
+ $scope0_reason && _scope($scope0_id, {});
+ _resume_branch($scope0_id);
+}, 1, 0);
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-controllable-checked-value/__snapshots__/patches.debug.js b/packages/runtime-tags/src/__tests__/fixtures/persisted-controllable-checked-value/__snapshots__/patches.debug.js
new file mode 100644
index 00000000000..41244f05c28
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-controllable-checked-value/__snapshots__/patches.debug.js
@@ -0,0 +1,15 @@
+// PATCH
+{
+ "PatchBind:1": ["packages/runtime-tags/src/__tests__/fixtures/persisted-controllable-checked-value/template.marko_0/checkedValueChange", "ControlledHandler:#input/0"],
+ "PatchControl:1#input/0": ["a", "a"],
+ "PatchBind:2": ["packages/runtime-tags/src/__tests__/fixtures/persisted-controllable-checked-value/template.marko_0/checkedValueChange2", "ControlledHandler:#input/1"],
+ "PatchControl:1#input/1": ["a", "b"]
+}
+
+// PATCH
+{
+ "PatchBind:1": ["packages/runtime-tags/src/__tests__/fixtures/persisted-controllable-checked-value/template.marko_0/checkedValueChange", "ControlledHandler:#input/0"],
+ "PatchControl:1#input/0": ["b", "a"],
+ "PatchBind:2": ["packages/runtime-tags/src/__tests__/fixtures/persisted-controllable-checked-value/template.marko_0/checkedValueChange2", "ControlledHandler:#input/1"],
+ "PatchControl:1#input/1": ["b", "b"]
+}
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-controllable-checked-value/__snapshots__/patches.js b/packages/runtime-tags/src/__tests__/fixtures/persisted-controllable-checked-value/__snapshots__/patches.js
new file mode 100644
index 00000000000..87ab94b0a67
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-controllable-checked-value/__snapshots__/patches.js
@@ -0,0 +1,15 @@
+// PATCH
+{
+ d1: ["a0", "Ea"],
+ n1a: ["a", "a"],
+ d2: ["a1", "Eb"],
+ n1b: ["a", "b"]
+}
+
+// PATCH
+{
+ d1: ["a0", "Ea"],
+ n1a: ["b", "a"],
+ d2: ["a1", "Eb"],
+ n1b: ["b", "b"]
+}
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-controllable-checked-value/__snapshots__/render.debug.md b/packages/runtime-tags/src/__tests__/fixtures/persisted-controllable-checked-value/__snapshots__/render.debug.md
new file mode 100644
index 00000000000..7477c77be52
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-controllable-checked-value/__snapshots__/render.debug.md
@@ -0,0 +1,136 @@
+# Render `{"picked":"a"}`
+```html
+
+
+```
+
+# Update
+```js
+document.querySelectorAll("input")[1].click();
+```
+```html
+
+
+ b
+
+```
+## Change
+```
+UPDATE: p::text "" => "b"
+```
+
+# Update
+```js
+const [a, b] = document.querySelectorAll("input");
+document.querySelector("p").textContent = `a:${a .checked} b:${b .checked}`;
+```
+```html
+
+
+ a:true b:false
+
+```
+## Change
+```
+REMOVE: p::text("b")
+INSERT: p::text("a:true b:false")
+```
+
+# Update `{"picked":"a"}`
+
+# Update
+```js
+const [a, b] = document.querySelectorAll("input");
+document.querySelector("p").textContent = `a:${a .checked} b:${b .checked}`;
+```
+```html
+
+
+ a:true b:false
+
+```
+## Change
+```
+REMOVE: p::text("a:true b:false")
+INSERT: p::text("a:true b:false")
+```
+
+# Update `{"picked":"b"}`
+
+# Update
+```js
+const [a, b] = document.querySelectorAll("input");
+document.querySelector("p").textContent = `a:${a .checked} b:${b .checked}`;
+```
+```html
+
+
+ a:false b:true
+
+```
+## Change
+```
+REMOVE: p::text("a:true b:false")
+INSERT: p::text("a:false b:true")
+```
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-controllable-checked-value/__snapshots__/render.md b/packages/runtime-tags/src/__tests__/fixtures/persisted-controllable-checked-value/__snapshots__/render.md
new file mode 100644
index 00000000000..7477c77be52
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-controllable-checked-value/__snapshots__/render.md
@@ -0,0 +1,136 @@
+# Render `{"picked":"a"}`
+```html
+
+
+```
+
+# Update
+```js
+document.querySelectorAll("input")[1].click();
+```
+```html
+
+
+ b
+
+```
+## Change
+```
+UPDATE: p::text "" => "b"
+```
+
+# Update
+```js
+const [a, b] = document.querySelectorAll("input");
+document.querySelector("p").textContent = `a:${a .checked} b:${b .checked}`;
+```
+```html
+
+
+ a:true b:false
+
+```
+## Change
+```
+REMOVE: p::text("b")
+INSERT: p::text("a:true b:false")
+```
+
+# Update `{"picked":"a"}`
+
+# Update
+```js
+const [a, b] = document.querySelectorAll("input");
+document.querySelector("p").textContent = `a:${a .checked} b:${b .checked}`;
+```
+```html
+
+
+ a:true b:false
+
+```
+## Change
+```
+REMOVE: p::text("a:true b:false")
+INSERT: p::text("a:true b:false")
+```
+
+# Update `{"picked":"b"}`
+
+# Update
+```js
+const [a, b] = document.querySelectorAll("input");
+document.querySelector("p").textContent = `a:${a .checked} b:${b .checked}`;
+```
+```html
+
+
+ a:false b:true
+
+```
+## Change
+```
+REMOVE: p::text("a:true b:false")
+INSERT: p::text("a:false b:true")
+```
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-controllable-checked-value/__snapshots__/writes.debug.html b/packages/runtime-tags/src/__tests__/fixtures/persisted-controllable-checked-value/__snapshots__/writes.debug.html
new file mode 100644
index 00000000000..87bdc28af74
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-controllable-checked-value/__snapshots__/writes.debug.html
@@ -0,0 +1,17 @@
+
+
+
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-controllable-checked-value/__snapshots__/writes.html b/packages/runtime-tags/src/__tests__/fixtures/persisted-controllable-checked-value/__snapshots__/writes.html
new file mode 100644
index 00000000000..30b4cc470e0
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-controllable-checked-value/__snapshots__/writes.html
@@ -0,0 +1,11 @@
+
+
+
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-controllable-checked-value/sizes.json b/packages/runtime-tags/src/__tests__/fixtures/persisted-controllable-checked-value/sizes.json
new file mode 100644
index 00000000000..c6d5d58c06f
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-controllable-checked-value/sizes.json
@@ -0,0 +1,16 @@
+{
+ "dom": {
+ "template.marko.page.mjs": {
+ "min": 5211,
+ "brotli": 2363
+ }
+ },
+ "html": {
+ "min": 473,
+ "brotli": 291
+ },
+ "patch": {
+ "min": 120,
+ "brotli": 63
+ }
+}
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-controllable-checked-value/template.marko b/packages/runtime-tags/src/__tests__/fixtures/persisted-controllable-checked-value/template.marko
index 80ac799a8b8..c2c549dac94 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-controllable-checked-value/template.marko
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-controllable-checked-value/template.marko
@@ -1 +1,6 @@
-
+
+
+${note}
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-controllable-checked-value/test.ts b/packages/runtime-tags/src/__tests__/fixtures/persisted-controllable-checked-value/test.ts
index c12e6a0b78d..51952f96343 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-controllable-checked-value/test.ts
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-controllable-checked-value/test.ts
@@ -1,7 +1,26 @@
import type { TestConfig } from "../../main.test";
-// Stays fail-closed: the wire cannot yet express this control faithfully.
+const pickB = (document: Document) => {
+ document.querySelectorAll("input")[1]!.click();
+};
+
+const probe = (document: Document) => {
+ const [a, b] = document.querySelectorAll("input");
+ document.querySelector("p")!.textContent = `a:${a!.checked} b:${b!.checked}`;
+};
+
+// A `checkedValue` group: each input's entry carries `[checkedValue, value]`
+// and applies through the same helper CSR uses, so a live selection survives
+// an unchanged frame while a changed server value re-selects the group.
export const config: TestConfig = {
- error_compiler: true,
persisted: true,
+ steps: [
+ { picked: "a" },
+ pickB,
+ probe,
+ { picked: "a" },
+ probe,
+ { picked: "b" },
+ probe,
+ ],
};
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-controllable-checked/sizes.json b/packages/runtime-tags/src/__tests__/fixtures/persisted-controllable-checked/sizes.json
index d1a12687b00..6e1dbed8ccc 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-controllable-checked/sizes.json
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-controllable-checked/sizes.json
@@ -1,8 +1,8 @@
{
"dom": {
"template.marko.page.mjs": {
- "min": 4519,
- "brotli": 2093
+ "min": 4488,
+ "brotli": 2081
}
},
"html": {
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-controllable-details/sizes.json b/packages/runtime-tags/src/__tests__/fixtures/persisted-controllable-details/sizes.json
index 8616d05e5cf..cbfbbb8d862 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-controllable-details/sizes.json
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-controllable-details/sizes.json
@@ -1,8 +1,8 @@
{
"dom": {
"template.marko.page.mjs": {
- "min": 3491,
- "brotli": 1695
+ "min": 3460,
+ "brotli": 1673
}
},
"html": {
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-controllable-multiple/sizes.json b/packages/runtime-tags/src/__tests__/fixtures/persisted-controllable-multiple/sizes.json
index a61b6634e0c..87dcc2fe16c 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-controllable-multiple/sizes.json
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-controllable-multiple/sizes.json
@@ -1,8 +1,8 @@
{
"dom": {
"template.marko.page.mjs": {
- "min": 4919,
- "brotli": 2191
+ "min": 4888,
+ "brotli": 2179
}
},
"html": {
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-controllable-removal/sizes.json b/packages/runtime-tags/src/__tests__/fixtures/persisted-controllable-removal/sizes.json
index b87023d73c7..538b8e9ec4d 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-controllable-removal/sizes.json
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-controllable-removal/sizes.json
@@ -1,8 +1,8 @@
{
"dom": {
"template.marko.page.mjs": {
- "min": 4552,
- "brotli": 2112
+ "min": 4521,
+ "brotli": 2101
}
},
"html": {
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-controllable-select/sizes.json b/packages/runtime-tags/src/__tests__/fixtures/persisted-controllable-select/sizes.json
index afc8cf82de3..4276304fa6c 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-controllable-select/sizes.json
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-controllable-select/sizes.json
@@ -1,8 +1,8 @@
{
"dom": {
"template.marko.page.mjs": {
- "min": 4734,
- "brotli": 2124
+ "min": 4703,
+ "brotli": 2116
}
},
"html": {
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-controllable-spread/__snapshots__/dom.bundle.debug.js b/packages/runtime-tags/src/__tests__/fixtures/persisted-controllable-spread/__snapshots__/dom.bundle.debug.js
new file mode 100644
index 00000000000..e6485c84606
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-controllable-spread/__snapshots__/dom.bundle.debug.js
@@ -0,0 +1,25 @@
+// template.marko
+const $template = "
";
+const $walks = " bD l";
+const $text = /*@__PURE__*/ _let("text/5", ($scope) => _text($scope["#text/1"], $scope.text));
+function $setup($scope) {
+ $text($scope, "");
+}
+const $field2__script = _script("__tests__/template.marko_0_field#6", ($scope) => _attrs_script($scope, "#input/0"));
+const $field2 = /*@__PURE__*/ _const("field", ($scope) => {
+ _attrs($scope, "#input/0", {
+ type: "text",
+ ...$scope.field
+ }, _controllable_input);
+ $field2__script($scope);
+});
+const $input_field = ($scope, input_field) => $field2($scope, {
+ ...input_field,
+ valueChange: $field($scope)
+});
+const $input = ($scope, input) => $input_field($scope, input.field);
+const $field = ($scope) => (next) => {
+ $text($scope, next);
+};
+_resume("__tests__/template.marko_0/field", $field);
+var template_default = /*@__PURE__*/ _template("__tests__/template.marko", $template, $walks, $setup, $input);
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-controllable-spread/__snapshots__/dom.bundle.js b/packages/runtime-tags/src/__tests__/fixtures/persisted-controllable-spread/__snapshots__/dom.bundle.js
new file mode 100644
index 00000000000..d049c98eebf
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-controllable-spread/__snapshots__/dom.bundle.js
@@ -0,0 +1,7 @@
+// template.marko
+const $text = /*@__PURE__*/ _let(5, ($scope) => _text($scope.b, $scope.f));
+const $field2__script = _script("a1", ($scope) => _attrs_script($scope, "a"));
+const $field = ($scope) => (next) => {
+ $text($scope, next);
+};
+_resume("a0", $field);
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-controllable-spread/__snapshots__/error-compile-dom.debug.txt b/packages/runtime-tags/src/__tests__/fixtures/persisted-controllable-spread/__snapshots__/error-compile-dom.debug.txt
deleted file mode 100644
index 06d06f68b9a..00000000000
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-controllable-spread/__snapshots__/error-compile-dom.debug.txt
+++ /dev/null
@@ -1,5 +0,0 @@
-
- at packages/runtime-tags/src/__tests__/fixtures/persisted-controllable-spread/template.marko:1:8
- > 1 |
- | ^^^^^^^^^^^^^^ Persisted templates currently support only escaped dynamic text and dynamic attributes in native HTML.
- 2 |
\ No newline at end of file
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-controllable-spread/__snapshots__/error-compile-dom.txt b/packages/runtime-tags/src/__tests__/fixtures/persisted-controllable-spread/__snapshots__/error-compile-dom.txt
deleted file mode 100644
index 06d06f68b9a..00000000000
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-controllable-spread/__snapshots__/error-compile-dom.txt
+++ /dev/null
@@ -1,5 +0,0 @@
-
- at packages/runtime-tags/src/__tests__/fixtures/persisted-controllable-spread/template.marko:1:8
- > 1 |
- | ^^^^^^^^^^^^^^ Persisted templates currently support only escaped dynamic text and dynamic attributes in native HTML.
- 2 |
\ No newline at end of file
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-controllable-spread/__snapshots__/error-compile-html.debug.txt b/packages/runtime-tags/src/__tests__/fixtures/persisted-controllable-spread/__snapshots__/error-compile-html.debug.txt
deleted file mode 100644
index 06d06f68b9a..00000000000
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-controllable-spread/__snapshots__/error-compile-html.debug.txt
+++ /dev/null
@@ -1,5 +0,0 @@
-
- at packages/runtime-tags/src/__tests__/fixtures/persisted-controllable-spread/template.marko:1:8
- > 1 |
- | ^^^^^^^^^^^^^^ Persisted templates currently support only escaped dynamic text and dynamic attributes in native HTML.
- 2 |
\ No newline at end of file
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-controllable-spread/__snapshots__/error-compile-html.txt b/packages/runtime-tags/src/__tests__/fixtures/persisted-controllable-spread/__snapshots__/error-compile-html.txt
deleted file mode 100644
index 06d06f68b9a..00000000000
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-controllable-spread/__snapshots__/error-compile-html.txt
+++ /dev/null
@@ -1,5 +0,0 @@
-
- at packages/runtime-tags/src/__tests__/fixtures/persisted-controllable-spread/template.marko:1:8
- > 1 |
- | ^^^^^^^^^^^^^^ Persisted templates currently support only escaped dynamic text and dynamic attributes in native HTML.
- 2 |
\ No newline at end of file
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-controllable-spread/__snapshots__/html.bundle.debug.js b/packages/runtime-tags/src/__tests__/fixtures/persisted-controllable-spread/__snapshots__/html.bundle.debug.js
new file mode 100644
index 00000000000..1271a986a07
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-controllable-spread/__snapshots__/html.bundle.debug.js
@@ -0,0 +1,25 @@
+// template.marko
+const $template = "
";
+const $walks = " bD l";
+_shells({ "__tests__/template.marko": "__tests__/template.marko !__tests__/template.marko_0_field#6; bD ;
" });
+var template_default = _template_persisted("__tests__/template.marko", (input) => {
+ const $scope0_owned = _persisted_ownership(), $scope0_reason = _persisted_reason();
+ const $scope0_id = _scope_id();
+ let text = "";
+ const field = {
+ ...input.field,
+ valueChange: _resume((next) => {
+ text = next;
+ }, "__tests__/template.marko_0/field", $scope0_id)
+ };
+ _html(`${_el_resume($scope0_id, "#input/0")}${_text_resume($scope0_id, "#text/1", text)}
`);
+ _script($scope0_id, "__tests__/template.marko_0_field#6");
+ $scope0_reason && _scope($scope0_id, {}, "__tests__/template.marko", 0, {
+ "ControlledHandler:#input/0": ["...field", "3:23"],
+ "EventAttributes:#input/0": ["...field", "3:23"]
+ });
+ _resume_branch($scope0_id);
+}, 1, 0);
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-controllable-spread/__snapshots__/html.bundle.js b/packages/runtime-tags/src/__tests__/fixtures/persisted-controllable-spread/__snapshots__/html.bundle.js
new file mode 100644
index 00000000000..d932e430197
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-controllable-spread/__snapshots__/html.bundle.js
@@ -0,0 +1,17 @@
+// template.marko
+_shells({ a: "a !a1; bD ;
" });
+var template_default = _template_persisted("a", (input) => {
+ const $scope0_owned = _persisted_ownership(), $scope0_reason = _persisted_reason();
+ const $scope0_id = _scope_id();
+ let text = "";
+ _html(` {
+ text = next;
+ }, "a0", $scope0_id)
+ }, "a", $scope0_id, "input", 1, $scope0_owned, 0)}>${_el_resume($scope0_id, "a")}${_text_resume($scope0_id, "b", text)}
`);
+ _script($scope0_id, "a1");
+ $scope0_reason && _scope($scope0_id, {});
+ _resume_branch($scope0_id);
+}, 1, 0);
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-controllable-spread/__snapshots__/patches.debug.js b/packages/runtime-tags/src/__tests__/fixtures/persisted-controllable-spread/__snapshots__/patches.debug.js
new file mode 100644
index 00000000000..dd9841b9f25
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-controllable-spread/__snapshots__/patches.debug.js
@@ -0,0 +1,21 @@
+// PATCH
+{
+ "PatchBindSource:1": "packages/runtime-tags/src/__tests__/fixtures/persisted-controllable-spread/template.marko_0/field",
+ "PatchAttrs:#input/0": [{
+ type: "text",
+ value: "a",
+ placeholder: "p2",
+ valueChange: bind(1)
+ }, 0, 1]
+}
+
+// PATCH
+{
+ "PatchBindSource:1": "packages/runtime-tags/src/__tests__/fixtures/persisted-controllable-spread/template.marko_0/field",
+ "PatchAttrs:#input/0": [{
+ type: "text",
+ value: "b",
+ placeholder: "p2",
+ valueChange: bind(1)
+ }, 0, 1]
+}
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-controllable-spread/__snapshots__/patches.js b/packages/runtime-tags/src/__tests__/fixtures/persisted-controllable-spread/__snapshots__/patches.js
new file mode 100644
index 00000000000..cd30d087da6
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-controllable-spread/__snapshots__/patches.js
@@ -0,0 +1,21 @@
+// PATCH
+{
+ h1: "a0",
+ ja: [{
+ type: "text",
+ value: "a",
+ placeholder: "p2",
+ valueChange: b(1)
+ }, 0, 1]
+}
+
+// PATCH
+{
+ h1: "a0",
+ ja: [{
+ type: "text",
+ value: "b",
+ placeholder: "p2",
+ valueChange: b(1)
+ }, 0, 1]
+}
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-controllable-spread/__snapshots__/render.debug.md b/packages/runtime-tags/src/__tests__/fixtures/persisted-controllable-spread/__snapshots__/render.debug.md
new file mode 100644
index 00000000000..4e4893d810f
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-controllable-spread/__snapshots__/render.debug.md
@@ -0,0 +1,112 @@
+# Render `{"field":{"value":"a","placeholder":"p1"}}`
+```html
+
+
+```
+
+# Update
+```js
+const el = document.querySelector("input");
+el.value = "typed";
+el.dispatchEvent(new document.defaultView.Event("input", { bubbles: true }));
+```
+```html
+
+
+ typed
+
+```
+## Change
+```
+UPDATE: p::text "" => "typed"
+```
+
+# Update
+```js
+document.querySelector("p").textContent =
+`live:${document.querySelector("input") .value}`;
+```
+```html
+
+
+ live:a
+
+```
+## Change
+```
+REMOVE: p::text("typed")
+INSERT: p::text("live:a")
+```
+
+# Update `{"field":{"value":"a","placeholder":"p2"}}`
+```html
+
+
+ live:a
+
+```
+## Change
+```
+UPDATE: input[placeholder] "p1" => "p2"
+```
+
+# Update
+```js
+document.querySelector("p").textContent =
+`live:${document.querySelector("input") .value}`;
+```
+```html
+
+
+ live:a
+
+```
+## Change
+```
+REMOVE: p::text("live:a")
+INSERT: p::text("live:a")
+```
+
+# Update `{"field":{"value":"b","placeholder":"p2"}}`
+
+# Update
+```js
+document.querySelector("p").textContent =
+`live:${document.querySelector("input") .value}`;
+```
+```html
+
+
+ live:b
+
+```
+## Change
+```
+REMOVE: p::text("live:a")
+INSERT: p::text("live:b")
+```
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-controllable-spread/__snapshots__/render.md b/packages/runtime-tags/src/__tests__/fixtures/persisted-controllable-spread/__snapshots__/render.md
new file mode 100644
index 00000000000..4e4893d810f
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-controllable-spread/__snapshots__/render.md
@@ -0,0 +1,112 @@
+# Render `{"field":{"value":"a","placeholder":"p1"}}`
+```html
+
+
+```
+
+# Update
+```js
+const el = document.querySelector("input");
+el.value = "typed";
+el.dispatchEvent(new document.defaultView.Event("input", { bubbles: true }));
+```
+```html
+
+
+ typed
+
+```
+## Change
+```
+UPDATE: p::text "" => "typed"
+```
+
+# Update
+```js
+document.querySelector("p").textContent =
+`live:${document.querySelector("input") .value}`;
+```
+```html
+
+
+ live:a
+
+```
+## Change
+```
+REMOVE: p::text("typed")
+INSERT: p::text("live:a")
+```
+
+# Update `{"field":{"value":"a","placeholder":"p2"}}`
+```html
+
+
+ live:a
+
+```
+## Change
+```
+UPDATE: input[placeholder] "p1" => "p2"
+```
+
+# Update
+```js
+document.querySelector("p").textContent =
+`live:${document.querySelector("input") .value}`;
+```
+```html
+
+
+ live:a
+
+```
+## Change
+```
+REMOVE: p::text("live:a")
+INSERT: p::text("live:a")
+```
+
+# Update `{"field":{"value":"b","placeholder":"p2"}}`
+
+# Update
+```js
+document.querySelector("p").textContent =
+`live:${document.querySelector("input") .value}`;
+```
+```html
+
+
+ live:b
+
+```
+## Change
+```
+REMOVE: p::text("live:a")
+INSERT: p::text("live:b")
+```
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-controllable-spread/__snapshots__/writes.debug.html b/packages/runtime-tags/src/__tests__/fixtures/persisted-controllable-spread/__snapshots__/writes.debug.html
new file mode 100644
index 00000000000..d3392f1a912
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-controllable-spread/__snapshots__/writes.debug.html
@@ -0,0 +1,14 @@
+
+
+
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-controllable-spread/__snapshots__/writes.html b/packages/runtime-tags/src/__tests__/fixtures/persisted-controllable-spread/__snapshots__/writes.html
new file mode 100644
index 00000000000..c4b591cd33e
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-controllable-spread/__snapshots__/writes.html
@@ -0,0 +1,10 @@
+
+
+
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-controllable-spread/sizes.json b/packages/runtime-tags/src/__tests__/fixtures/persisted-controllable-spread/sizes.json
new file mode 100644
index 00000000000..fa6fe0e5f74
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-controllable-spread/sizes.json
@@ -0,0 +1,16 @@
+{
+ "dom": {
+ "template.marko.page.mjs": {
+ "min": 10431,
+ "brotli": 4006
+ }
+ },
+ "html": {
+ "min": 395,
+ "brotli": 273
+ },
+ "patch": {
+ "min": 154,
+ "brotli": 82
+ }
+}
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-controllable-spread/template.marko b/packages/runtime-tags/src/__tests__/fixtures/persisted-controllable-spread/template.marko
index ac74f2bea39..b6765aa798d 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-controllable-spread/template.marko
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-controllable-spread/template.marko
@@ -1 +1,4 @@
-
+
+ { text = next } }/>
+
+${text}
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-controllable-spread/test.ts b/packages/runtime-tags/src/__tests__/fixtures/persisted-controllable-spread/test.ts
index c12e6a0b78d..333f87f431f 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-controllable-spread/test.ts
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-controllable-spread/test.ts
@@ -1,7 +1,29 @@
import type { TestConfig } from "../../main.test";
-// Stays fail-closed: the wire cannot yet express this control faithfully.
+const type = (document: Document) => {
+ const el = document.querySelector("input")!;
+ el.value = "typed";
+ el.dispatchEvent(new document.defaultView!.Event("input", { bubbles: true }));
+};
+
+const probe = (document: Document) => {
+ document.querySelector("p")!.textContent =
+ `live:${document.querySelector("input")!.value}`;
+};
+
+// A spread carrying a controllable: the patched set re-claims the control
+// through the run-time claim table, so the change handler stays live, an
+// unchanged frame preserves the controlled value, and a changed server
+// value wins the input.
export const config: TestConfig = {
- error_compiler: true,
persisted: true,
+ steps: [
+ { field: { value: "a", placeholder: "p1" } },
+ type,
+ probe,
+ { field: { value: "a", placeholder: "p2" } },
+ probe,
+ { field: { value: "b", placeholder: "p2" } },
+ probe,
+ ],
};
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-controllable-static-with-spread/__snapshots__/dom.bundle.debug.js b/packages/runtime-tags/src/__tests__/fixtures/persisted-controllable-static-with-spread/__snapshots__/dom.bundle.debug.js
new file mode 100644
index 00000000000..e33cad30000
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-controllable-static-with-spread/__snapshots__/dom.bundle.debug.js
@@ -0,0 +1,26 @@
+// template.marko
+const $template = "
";
+const $walks = " bD l";
+const $input_rest__OR__text__script = _script("__tests__/template.marko_0_input_rest#4_text#5", ($scope) => _attrs_script($scope, "#input/0"));
+const $input_rest__OR__text = /*@__PURE__*/ _fill_join("__tests__/template.marko0", "input_rest", /*@__PURE__*/ _or(6, ($scope) => {
+ _attrs($scope, "#input/0", {
+ value: $scope.text,
+ valueChange: $valueChange($scope),
+ ...$scope.input_rest
+ }, _controllable_input);
+ $input_rest__OR__text__script($scope);
+}));
+const $text = /*@__PURE__*/ _let("text/5", ($scope) => {
+ _text($scope["#text/1"], $scope.text);
+ $input_rest__OR__text($scope);
+});
+function $setup($scope) {
+ $text($scope, "init");
+}
+const $input_rest = /*@__PURE__*/ _fill_const("__tests__/template.marko0", "input_rest", $input_rest__OR__text);
+const $input = ($scope, input) => $input_rest($scope, input.rest);
+const $valueChange = ($scope) => (_new_text) => {
+ $text($scope, _new_text);
+};
+_resume("__tests__/template.marko_0/valueChange", $valueChange);
+var template_default = /*@__PURE__*/ _template("__tests__/template.marko", $template, $walks, $setup, $input);
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-controllable-static-with-spread/__snapshots__/dom.bundle.js b/packages/runtime-tags/src/__tests__/fixtures/persisted-controllable-static-with-spread/__snapshots__/dom.bundle.js
new file mode 100644
index 00000000000..b7280d96990
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-controllable-static-with-spread/__snapshots__/dom.bundle.js
@@ -0,0 +1,18 @@
+// template.marko
+const $input_rest__OR__text__script = _script("a1", ($scope) => _attrs_script($scope, "a"));
+const $input_rest__OR__text = /*@__PURE__*/ _fill_join("a0", 4, /*@__PURE__*/ _or(6, ($scope) => {
+ _attrs($scope, "a", {
+ value: $scope.f,
+ valueChange: $valueChange($scope),
+ ...$scope.e
+ }, _controllable_input);
+ $input_rest__OR__text__script($scope);
+}));
+const $text = /*@__PURE__*/ _let(5, ($scope) => {
+ _text($scope.b, $scope.f);
+ $input_rest__OR__text($scope);
+});
+const $valueChange = ($scope) => (_new_text) => {
+ $text($scope, _new_text);
+};
+_resume("a0", $valueChange);
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-controllable-static-with-spread/__snapshots__/html.bundle.debug.js b/packages/runtime-tags/src/__tests__/fixtures/persisted-controllable-static-with-spread/__snapshots__/html.bundle.debug.js
new file mode 100644
index 00000000000..7ddc6f09509
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-controllable-static-with-spread/__snapshots__/html.bundle.debug.js
@@ -0,0 +1,27 @@
+// template.marko
+const $template = "
";
+const $walks = " bD l";
+_shells({ "__tests__/template.marko": "__tests__/template.marko !; bD ;
" });
+var template_default = _template_persisted("__tests__/template.marko", (input) => {
+ const $scope0_owned = _persisted_ownership(), $scope0_reason = _persisted_reason();
+ const $scope0_id = _scope_id();
+ let text = "init";
+ _html(` {
+ text = _new_text;
+ }, "__tests__/template.marko_0/valueChange", $scope0_id),
+ ...input.rest
+ }, "#input/0", $scope0_id, "input")}>${_el_resume($scope0_id, "#input/0")}${_text_resume($scope0_id, "#text/1", text)}
`);
+ _script($scope0_id, "__tests__/template.marko_0_input_rest#4_text#5");
+ $scope0_reason ? _scope($scope0_id, {
+ input_rest: input.rest,
+ text
+ }, "__tests__/template.marko", 0, {
+ input_rest: ["input.rest"],
+ text: "1:6",
+ "ControlledHandler:#input/0": ["...input.rest", "2:23"],
+ "EventAttributes:#input/0": ["...input.rest", "2:23"]
+ }) : _owned_guard($scope0_owned, 0) && _patch_value($scope0_id, "__tests__/template.marko0", input.rest);
+ _resume_branch($scope0_id);
+}, 1, 0);
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-controllable-static-with-spread/__snapshots__/html.bundle.js b/packages/runtime-tags/src/__tests__/fixtures/persisted-controllable-static-with-spread/__snapshots__/html.bundle.js
new file mode 100644
index 00000000000..a6f6ffacf13
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-controllable-static-with-spread/__snapshots__/html.bundle.js
@@ -0,0 +1,20 @@
+// template.marko
+_shells({ a: "a !; bD ;
" });
+var template_default = _template_persisted("a", (input) => {
+ const $scope0_owned = _persisted_ownership(), $scope0_reason = _persisted_reason();
+ const $scope0_id = _scope_id();
+ let text = "init";
+ _html(` {
+ text = _new_text;
+ }, "a0", $scope0_id),
+ ...input.rest
+ }, "a", $scope0_id, "input")}>${_el_resume($scope0_id, "a")}${_text_resume($scope0_id, "b", text)}
`);
+ _script($scope0_id, "a1");
+ $scope0_reason ? _scope($scope0_id, {
+ e: input.rest,
+ f: text
+ }) : _owned_guard($scope0_owned, 0) && _patch_value($scope0_id, "a0", input.rest);
+ _resume_branch($scope0_id);
+}, 1, 0);
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-controllable-static-with-spread/__snapshots__/patches.debug.js b/packages/runtime-tags/src/__tests__/fixtures/persisted-controllable-static-with-spread/__snapshots__/patches.debug.js
new file mode 100644
index 00000000000..a92eb8f1b15
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-controllable-static-with-spread/__snapshots__/patches.debug.js
@@ -0,0 +1,6 @@
+// PATCH
+{
+ "PatchValue:packages/runtime-tags/src/__tests__/fixtures/persisted-controllable-static-with-spread/template.marko0": {
+ placeholder: "p2"
+ }
+}
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-controllable-static-with-spread/__snapshots__/patches.js b/packages/runtime-tags/src/__tests__/fixtures/persisted-controllable-static-with-spread/__snapshots__/patches.js
new file mode 100644
index 00000000000..3e0fbb03003
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-controllable-static-with-spread/__snapshots__/patches.js
@@ -0,0 +1,6 @@
+// PATCH
+{
+ va0: {
+ placeholder: "p2"
+ }
+}
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-controllable-static-with-spread/__snapshots__/render.debug.md b/packages/runtime-tags/src/__tests__/fixtures/persisted-controllable-static-with-spread/__snapshots__/render.debug.md
new file mode 100644
index 00000000000..8337b345759
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-controllable-static-with-spread/__snapshots__/render.debug.md
@@ -0,0 +1,96 @@
+# Render `{"rest":{"placeholder":"p1"}}`
+```html
+
+
+ init
+
+```
+
+# Update
+```js
+const el = document.querySelector("input");
+el.value = "typed";
+el.dispatchEvent(new document.defaultView.Event("input", { bubbles: true }));
+```
+```html
+
+
+ typed
+
+```
+## Change
+```
+UPDATE: p::text "init" => "typed"
+```
+
+# Update `{"rest":{"placeholder":"p2"}}`
+```html
+
+
+ typed
+
+```
+## Change
+```
+UPDATE: input[placeholder] "p1" => "p2"
+```
+
+# Update
+```js
+document.querySelector("p").textContent =
+`live:${document.querySelector("input") .value}`;
+```
+```html
+
+
+ live:typed
+
+```
+## Change
+```
+REMOVE: p::text("typed")
+INSERT: p::text("live:typed")
+```
+
+# Update
+```js
+const el = document.querySelector("input");
+el.value = "typed";
+el.dispatchEvent(new document.defaultView.Event("input", { bubbles: true }));
+```
+
+# Update
+```js
+document.querySelector("p").textContent =
+`live:${document.querySelector("input") .value}`;
+```
+```html
+
+
+ live:typed
+
+```
+## Change
+```
+REMOVE: p::text("live:typed")
+INSERT: p::text("live:typed")
+```
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-controllable-static-with-spread/__snapshots__/render.md b/packages/runtime-tags/src/__tests__/fixtures/persisted-controllable-static-with-spread/__snapshots__/render.md
new file mode 100644
index 00000000000..8337b345759
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-controllable-static-with-spread/__snapshots__/render.md
@@ -0,0 +1,96 @@
+# Render `{"rest":{"placeholder":"p1"}}`
+```html
+
+
+ init
+
+```
+
+# Update
+```js
+const el = document.querySelector("input");
+el.value = "typed";
+el.dispatchEvent(new document.defaultView.Event("input", { bubbles: true }));
+```
+```html
+
+
+ typed
+
+```
+## Change
+```
+UPDATE: p::text "init" => "typed"
+```
+
+# Update `{"rest":{"placeholder":"p2"}}`
+```html
+
+
+ typed
+
+```
+## Change
+```
+UPDATE: input[placeholder] "p1" => "p2"
+```
+
+# Update
+```js
+document.querySelector("p").textContent =
+`live:${document.querySelector("input") .value}`;
+```
+```html
+
+
+ live:typed
+
+```
+## Change
+```
+REMOVE: p::text("typed")
+INSERT: p::text("live:typed")
+```
+
+# Update
+```js
+const el = document.querySelector("input");
+el.value = "typed";
+el.dispatchEvent(new document.defaultView.Event("input", { bubbles: true }));
+```
+
+# Update
+```js
+document.querySelector("p").textContent =
+`live:${document.querySelector("input") .value}`;
+```
+```html
+
+
+ live:typed
+
+```
+## Change
+```
+REMOVE: p::text("live:typed")
+INSERT: p::text("live:typed")
+```
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-controllable-static-with-spread/__snapshots__/writes.debug.html b/packages/runtime-tags/src/__tests__/fixtures/persisted-controllable-static-with-spread/__snapshots__/writes.debug.html
new file mode 100644
index 00000000000..07fca796a8f
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-controllable-static-with-spread/__snapshots__/writes.debug.html
@@ -0,0 +1,18 @@
+
+init
+
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-controllable-static-with-spread/__snapshots__/writes.html b/packages/runtime-tags/src/__tests__/fixtures/persisted-controllable-static-with-spread/__snapshots__/writes.html
new file mode 100644
index 00000000000..144ddaa7c29
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-controllable-static-with-spread/__snapshots__/writes.html
@@ -0,0 +1,14 @@
+
+init
+
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-controllable-static-with-spread/sizes.json b/packages/runtime-tags/src/__tests__/fixtures/persisted-controllable-static-with-spread/sizes.json
new file mode 100644
index 00000000000..d8b3c6b6cc1
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-controllable-static-with-spread/sizes.json
@@ -0,0 +1,16 @@
+{
+ "dom": {
+ "template.marko.page.mjs": {
+ "min": 10870,
+ "brotli": 4192
+ }
+ },
+ "html": {
+ "min": 422,
+ "brotli": 289
+ },
+ "patch": {
+ "min": 25,
+ "brotli": 29
+ }
+}
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-controllable-static-with-spread/template.marko b/packages/runtime-tags/src/__tests__/fixtures/persisted-controllable-static-with-spread/template.marko
new file mode 100644
index 00000000000..557199ec758
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-controllable-static-with-spread/template.marko
@@ -0,0 +1,3 @@
+
+
+${text}
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-controllable-static-with-spread/test.ts b/packages/runtime-tags/src/__tests__/fixtures/persisted-controllable-static-with-spread/test.ts
new file mode 100644
index 00000000000..9f5b3527676
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-controllable-static-with-spread/test.ts
@@ -0,0 +1,27 @@
+import type { TestConfig } from "../../main.test";
+
+const type = (document: Document) => {
+ const el = document.querySelector("input")!;
+ el.value = "typed";
+ el.dispatchEvent(new document.defaultView!.Event("input", { bubbles: true }));
+};
+
+const probe = (document: Document) => {
+ document.querySelector("p")!.textContent =
+ `live:${document.querySelector("input")!.value}`;
+};
+
+// A control owned by a static (client-state) attr with a server spread: a
+// frame carrying only the spread must leave the live control alone — the
+// binding, handler, and typed value all survive the patch.
+export const config: TestConfig = {
+ persisted: true,
+ steps: [
+ { rest: { placeholder: "p1" } },
+ type,
+ { rest: { placeholder: "p2" } },
+ probe,
+ type,
+ probe,
+ ],
+};
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-controllable-swap/sizes.json b/packages/runtime-tags/src/__tests__/fixtures/persisted-controllable-swap/sizes.json
index 1dc3fc23059..ae2ead4da11 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-controllable-swap/sizes.json
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-controllable-swap/sizes.json
@@ -1,8 +1,8 @@
{
"dom": {
"template.marko.page.mjs": {
- "min": 4637,
- "brotli": 2137
+ "min": 4606,
+ "brotli": 2120
}
},
"html": {
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-controllable-textarea/sizes.json b/packages/runtime-tags/src/__tests__/fixtures/persisted-controllable-textarea/sizes.json
index 4ca18fb5a88..087915c2592 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-controllable-textarea/sizes.json
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-controllable-textarea/sizes.json
@@ -1,8 +1,8 @@
{
"dom": {
"template.marko.page.mjs": {
- "min": 4553,
- "brotli": 2112
+ "min": 4522,
+ "brotli": 2102
}
},
"html": {
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-controllable-value/sizes.json b/packages/runtime-tags/src/__tests__/fixtures/persisted-controllable-value/sizes.json
index 5777ef8ba0f..25ac1abc942 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-controllable-value/sizes.json
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-controllable-value/sizes.json
@@ -1,8 +1,8 @@
{
"dom": {
"template.marko.page.mjs": {
- "min": 4031,
- "brotli": 1859
+ "min": 4000,
+ "brotli": 1841
}
},
"html": {
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-ctrl-handler-param/sizes.json b/packages/runtime-tags/src/__tests__/fixtures/persisted-ctrl-handler-param/sizes.json
index 38393dd40a4..e31aac2f4e0 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-ctrl-handler-param/sizes.json
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-ctrl-handler-param/sizes.json
@@ -1,8 +1,8 @@
{
"dom": {
"template.marko.page.mjs": {
- "min": 9131,
- "brotli": 3982
+ "min": 9094,
+ "brotli": 3963
}
},
"html": {
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-dynamic-attribute/sizes.json b/packages/runtime-tags/src/__tests__/fixtures/persisted-dynamic-attribute/sizes.json
index 7f550c6561a..1081180e26f 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-dynamic-attribute/sizes.json
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-dynamic-attribute/sizes.json
@@ -1,8 +1,8 @@
{
"dom": {
"template.marko.page.mjs": {
- "min": 2285,
- "brotli": 1159
+ "min": 2268,
+ "brotli": 1146
}
},
"html": {
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-dynamic-body/sizes.json b/packages/runtime-tags/src/__tests__/fixtures/persisted-dynamic-body/sizes.json
index 50932aa54b9..ab0313d56c9 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-dynamic-body/sizes.json
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-dynamic-body/sizes.json
@@ -1,8 +1,8 @@
{
"dom": {
"template.marko.page.mjs": {
- "min": 9695,
- "brotli": 4144
+ "min": 9650,
+ "brotli": 4125
}
},
"html": {
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-dynamic-renderer-swap/sizes.json b/packages/runtime-tags/src/__tests__/fixtures/persisted-dynamic-renderer-swap/sizes.json
index 9aa5cf4c9f4..fbfd0076ba6 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-dynamic-renderer-swap/sizes.json
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-dynamic-renderer-swap/sizes.json
@@ -1,8 +1,8 @@
{
"dom": {
"template.marko.page.mjs": {
- "min": 10261,
- "brotli": 4396
+ "min": 10216,
+ "brotli": 4381
}
},
"html": {
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-dynamic-scriptless-swap/sizes.json b/packages/runtime-tags/src/__tests__/fixtures/persisted-dynamic-scriptless-swap/sizes.json
index 15b6b5df30f..416733e87b5 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-dynamic-scriptless-swap/sizes.json
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-dynamic-scriptless-swap/sizes.json
@@ -1,8 +1,8 @@
{
"dom": {
"template.marko.page.mjs": {
- "min": 9689,
- "brotli": 4159
+ "min": 9644,
+ "brotli": 4142
}
},
"html": {
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-dynamic-swap-effects/sizes.json b/packages/runtime-tags/src/__tests__/fixtures/persisted-dynamic-swap-effects/sizes.json
index 3744275428b..736f37a5a50 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-dynamic-swap-effects/sizes.json
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-dynamic-swap-effects/sizes.json
@@ -1,8 +1,8 @@
{
"dom": {
"template.marko.page.mjs": {
- "min": 10728,
- "brotli": 4553
+ "min": 10663,
+ "brotli": 4538
}
},
"html": {
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-effect-only/sizes.json b/packages/runtime-tags/src/__tests__/fixtures/persisted-effect-only/sizes.json
index e05c80b6428..e9b676f7188 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-effect-only/sizes.json
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-effect-only/sizes.json
@@ -1,8 +1,8 @@
{
"dom": {
"template.marko.page.mjs": {
- "min": 3179,
- "brotli": 1591
+ "min": 3162,
+ "brotli": 1570
}
},
"html": {
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-effects/sizes.json b/packages/runtime-tags/src/__tests__/fixtures/persisted-effects/sizes.json
index 3398986bce8..5d8a98b380e 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-effects/sizes.json
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-effects/sizes.json
@@ -1,8 +1,8 @@
{
"dom": {
"template.marko.page.mjs": {
- "min": 2548,
- "brotli": 1286
+ "min": 2531,
+ "brotli": 1276
}
},
"html": {
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-fill-asymmetric-if/sizes.json b/packages/runtime-tags/src/__tests__/fixtures/persisted-fill-asymmetric-if/sizes.json
index 7420f5ed013..aaaf37c2a49 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-fill-asymmetric-if/sizes.json
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-fill-asymmetric-if/sizes.json
@@ -1,8 +1,8 @@
{
"dom": {
"template.marko.page.mjs": {
- "min": 8857,
- "brotli": 3908
+ "min": 8818,
+ "brotli": 3893
}
},
"html": {
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-fill-bound-pair/sizes.json b/packages/runtime-tags/src/__tests__/fixtures/persisted-fill-bound-pair/sizes.json
index d4573d5f7f7..bd88308be86 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-fill-bound-pair/sizes.json
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-fill-bound-pair/sizes.json
@@ -1,8 +1,8 @@
{
"dom": {
"template.marko.page.mjs": {
- "min": 7907,
- "brotli": 3554
+ "min": 7878,
+ "brotli": 3536
}
},
"html": {
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-fill-content-attr/sizes.json b/packages/runtime-tags/src/__tests__/fixtures/persisted-fill-content-attr/sizes.json
index 012d42fc0f9..78c925e68fc 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-fill-content-attr/sizes.json
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-fill-content-attr/sizes.json
@@ -1,8 +1,8 @@
{
"dom": {
"template.marko.page.mjs": {
- "min": 11284,
- "brotli": 4807
+ "min": 11219,
+ "brotli": 4780
}
},
"html": {
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-fill-content-await/__snapshots__/html.bundle.debug.js b/packages/runtime-tags/src/__tests__/fixtures/persisted-fill-content-await/__snapshots__/html.bundle.debug.js
index ed3afcca5bb..f3393b59831 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-fill-content-await/__snapshots__/html.bundle.debug.js
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-fill-content-await/__snapshots__/html.bundle.debug.js
@@ -39,7 +39,7 @@ var template_default = _template_persisted("__tests__/template.marko", (input) =
const $scope2_id = _scope_id();
_html(`${_text_resume($scope2_id, "#text/0", value)}
`);
_scope($scope2_id, {}, "__tests__/template.marko", "4:6");
- }, void 0, "__tests__/template.marko_1_#text#0/await", 1);
+ }, 1, "__tests__/template.marko_1_#text#0/await");
_subscribe($showSecond__closures, _subscribe(_source_if($scope0_reason, 1) && $input_first__closures, _subscribe(_source_if($scope0_reason, 0) && $input_second__closures, _scope($scope1_id, { _: _scope_with_id($scope0_id) }, "__tests__/template.marko", "3:4"))));
_resume_branch($scope1_id);
}, $scope0_id) });
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-fill-content-await/__snapshots__/html.bundle.js b/packages/runtime-tags/src/__tests__/fixtures/persisted-fill-content-await/__snapshots__/html.bundle.js
index f229ea39cb9..144751dd80e 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-fill-content-await/__snapshots__/html.bundle.js
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-fill-content-await/__snapshots__/html.bundle.js
@@ -36,7 +36,7 @@ var template_default = _template_persisted("a", (input) => {
const $scope2_id = _scope_id();
_html(`${_text_resume($scope2_id, "a", value)}
`);
_scope($scope2_id, {});
- }, void 0, "a1", 1);
+ }, 1, "a1");
_subscribe($showSecond__closures, _subscribe(_source_if($scope0_reason, 1) && $input_first__closures, _subscribe(_source_if($scope0_reason, 0) && $input_second__closures, _scope($scope1_id, { _: _scope_with_id($scope0_id) }))));
_resume_branch($scope1_id);
}, $scope0_id) });
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-fill-content-await/sizes.json b/packages/runtime-tags/src/__tests__/fixtures/persisted-fill-content-await/sizes.json
index be88d9edb19..57cf289283a 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-fill-content-await/sizes.json
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-fill-content-await/sizes.json
@@ -1,8 +1,8 @@
{
"dom": {
"template.marko.page.mjs": {
- "min": 15662,
- "brotli": 6392
+ "min": 15578,
+ "brotli": 6376
}
},
"html": {
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-fill-content-in-stateful/__snapshots__/dom.bundle.debug.js b/packages/runtime-tags/src/__tests__/fixtures/persisted-fill-content-in-stateful/__snapshots__/dom.bundle.debug.js
new file mode 100644
index 00000000000..b6ea1681e85
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-fill-content-in-stateful/__snapshots__/dom.bundle.debug.js
@@ -0,0 +1,39 @@
+// tags/wrap/index.marko
+const $template$1 = "";
+const $walks$1 = "D%l";
+const $setup$1 = () => {};
+const $input_content_direct = /*@__PURE__*/ _dynamic_tag_content("#text/0");
+const $dynamicTag = /*@__PURE__*/ _dynamic_tag("#text/0");
+const $input_content = $dynamicTag;
+const $input$1 = ($scope, input) => $input_content($scope, input.content);
+var wrap_default = /*@__PURE__*/ _template("__tests__/tags/wrap/index.marko", $template$1, "D%l", 0, $input$1);
+
+// template.marko
+const $template = "";
+const $walks = " b%c";
+const $wrap_content__input_msg__OR__count = /*@__PURE__*/ _or(1, ($scope) => _text($scope["#text/0"], $scope._._.input_msg + ":" + $scope._._.count));
+const $wrap_content__input_msg = /*@__PURE__*/ _fill_join_closure("__tests__/template.marko0", "input_msg", /*@__PURE__*/ _closure_get("input_msg", $wrap_content__input_msg__OR__count, ($scope) => $scope._._), 0);
+const $wrap_content__setup = ($scope) => {
+ $wrap_content__input_msg($scope);
+ $wrap_content__count($scope);
+};
+const $wrap_content__count = /*@__PURE__*/ _closure_get("count", $wrap_content__input_msg__OR__count, ($scope) => $scope._._);
+const $wrap_content = /*@__PURE__*/ _content("__tests__/template.marko_2*content", " ", "D ", $wrap_content__setup);
+const $if_content__setup = ($scope) => $input_content_direct($scope["#childScope/0"], $wrap_content($scope));
+const $if = /*@__PURE__*/ _if("#text/1", $template$1, /*@__PURE__*/ ((_w0) => `/${_w0}&`)("D%l"), $if_content__setup);
+const $count__closure = /*@__PURE__*/ _closure($wrap_content__count);
+const $count = /*@__PURE__*/ _let("count/5", ($scope) => {
+ $if($scope, $scope.count < 2 ? 0 : 1);
+ $count__closure($scope);
+});
+const $setup__script = _script("__tests__/template.marko_0", ($scope) => _on($scope["#button/0"], "click", function() {
+ $count($scope, +$scope.count + 1);
+}));
+function $setup($scope) {
+ $count($scope, 0);
+ $setup__script($scope);
+}
+const $input = ($scope, input) => $input_msg($scope, input.msg);
+const $input_msg__closure = /*@__PURE__*/ _closure($wrap_content__input_msg);
+const $input_msg = /*@__PURE__*/ _fill_const("__tests__/template.marko0", "input_msg", $input_msg__closure);
+var template_default = /*@__PURE__*/ _template("__tests__/template.marko", $template, $walks, $setup, $input);
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-fill-content-in-stateful/__snapshots__/dom.bundle.js b/packages/runtime-tags/src/__tests__/fixtures/persisted-fill-content-in-stateful/__snapshots__/dom.bundle.js
new file mode 100644
index 00000000000..75bc6fbed6c
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-fill-content-in-stateful/__snapshots__/dom.bundle.js
@@ -0,0 +1,23 @@
+// tags/wrap/index.marko
+const $template = "";
+const $input_content_direct = /*@__PURE__*/ _dynamic_tag_content(0);
+
+// template.marko
+const $wrap_content__input_msg__OR__count = /*@__PURE__*/ _or(1, ($scope) => _text($scope.a, $scope._._.e + ":" + $scope._._.f));
+const $wrap_content__input_msg = /*@__PURE__*/ _fill_join_closure("a0", 4, /*@__PURE__*/ _closure_get(6, $wrap_content__input_msg__OR__count, ($scope) => $scope._._), 0);
+const $wrap_content__setup = ($scope) => {
+ $wrap_content__input_msg($scope);
+ $wrap_content__count($scope);
+};
+const $wrap_content__count = /*@__PURE__*/ _closure_get(7, $wrap_content__input_msg__OR__count, ($scope) => $scope._._);
+const $wrap_content = /*@__PURE__*/ _content$1("a0", " ", "D ", $wrap_content__setup);
+const $if_content__setup = ($scope) => $input_content_direct($scope.a, $wrap_content($scope));
+const $if = /*@__PURE__*/ _if(1, $template, /*@__PURE__*/ ((_w0) => `/${_w0}&`)("D%l"), $if_content__setup);
+const $count__closure = /*@__PURE__*/ _closure($wrap_content__count);
+const $count = /*@__PURE__*/ _let(5, ($scope) => {
+ $if($scope, $scope.f < 2 ? 0 : 1);
+ $count__closure($scope);
+});
+const $setup__script = _script("a1", ($scope) => _on($scope.a, "click", function() {
+ $count($scope, +$scope.f + 1);
+}));
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-fill-content-in-stateful/__snapshots__/html.bundle.debug.js b/packages/runtime-tags/src/__tests__/fixtures/persisted-fill-content-in-stateful/__snapshots__/html.bundle.debug.js
new file mode 100644
index 00000000000..b251b12b562
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-fill-content-in-stateful/__snapshots__/html.bundle.debug.js
@@ -0,0 +1,56 @@
+// tags/wrap/index.marko
+const $template$1 = "";
+const $walks$1 = "D%l";
+_shells({ "__tests__/tags/wrap/index.marko": "__tests__/tags/wrap/index.marko;D%;" });
+var wrap_default = _template_persisted("__tests__/tags/wrap/index.marko", (input) => {
+ const $scope0_owned = _persisted_ownership(), $scope0_reason = _persisted_reason();
+ const $scope0_id = _scope_id();
+ _html("");
+ _patch_dynamic_tag($scope0_id, "#text/0", input.content, $scope0_owned, 0);
+ _dynamic_tag($scope0_id, "#text/0", input.content, {}, 0, 0, _source_guard($scope0_reason, 0), 1);
+ _html("
");
+ $scope0_reason && _scope($scope0_id, {}, "__tests__/tags/wrap/index.marko", 0);
+}, 0, 0);
+
+// template.marko
+const $template = "";
+const $walks = " b%c";
+_shells({
+ "__tests__/template.marko_2*content": "__tests__/template.marko_2*content;D ; ",
+ "__tests__/template.marko": "__tests__/template.marko !__tests__/template.marko_0; b%;"
+});
+var template_default = _template_persisted("__tests__/template.marko", (input) => {
+ const $scope0_owned = _persisted_ownership(), $scope0_reason = _persisted_reason();
+ const $scope0_id = _scope_id();
+ const $input_msg__closures = new Set();
+ const $count__closures = new Set();
+ let count = 0;
+ _html(`${_el_resume($scope0_id, "#button/0")}`);
+ if ($scope0_reason) _if(() => {
+ if (count < 2) {
+ const $scope1_id = _scope_id();
+ _set_serialize_reason(1);
+ const $childScope = _peek_scope_id();
+ wrap_default({ content: _content_elide("__tests__/template.marko_2*content", () => {
+ const $scope2_reason = _persisted_reason();
+ const $scope2_id = _scope_id();
+ _html(`${_text_resume($scope2_id, "#text/0", input.msg + ":" + count)}`);
+ _subscribe($count__closures, _subscribe(_source_if($scope0_reason, 0) && $input_msg__closures, _scope($scope2_id, { _: _scope_with_id($scope1_id) }, "__tests__/template.marko", "4:4")));
+ _resume_branch($scope2_id);
+ }, $scope1_id) });
+ _scope($scope1_id, { "#childScope/0": _existing_scope($childScope) }, "__tests__/template.marko", "3:2");
+ return 0;
+ }
+ }, $scope0_id, "#text/1", 1, 1, 1, 0, 1);
+ _script($scope0_id, "__tests__/template.marko_0");
+ $scope0_reason ? _scope($scope0_id, {
+ input_msg: input.msg,
+ count,
+ "ClosureScopes:input_msg": $input_msg__closures,
+ "ClosureScopes:count": $count__closures
+ }, "__tests__/template.marko", 0, {
+ input_msg: ["input.msg"],
+ count: "1:6"
+ }) : _owned_guard($scope0_owned, 0) && _patch_value($scope0_id, "__tests__/template.marko0", input.msg);
+ _resume_branch($scope0_id);
+}, 1, () => [wrap_default]);
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-fill-content-in-stateful/__snapshots__/html.bundle.js b/packages/runtime-tags/src/__tests__/fixtures/persisted-fill-content-in-stateful/__snapshots__/html.bundle.js
new file mode 100644
index 00000000000..e98ab9e7d07
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-fill-content-in-stateful/__snapshots__/html.bundle.js
@@ -0,0 +1,49 @@
+// tags/wrap/index.marko
+_shells({ b: "b;D%;" });
+var wrap_default = _template_persisted("b", (input) => {
+ const $scope0_owned = _persisted_ownership(), $scope0_reason = _persisted_reason();
+ const $scope0_id = _scope_id();
+ _html("");
+ _patch_dynamic_tag($scope0_id, "a", input.content, $scope0_owned, 0);
+ _dynamic_tag($scope0_id, "a", input.content, {}, 0, 0, _source_guard($scope0_reason, 0), 1);
+ _html("
");
+ $scope0_reason && _scope($scope0_id, {});
+}, 0, 0);
+
+// template.marko
+_shells({
+ a0: "a0;D ; ",
+ a: "a !a1; b%;"
+});
+var template_default = _template_persisted("a", (input) => {
+ const $scope0_owned = _persisted_ownership(), $scope0_reason = _persisted_reason();
+ const $scope0_id = _scope_id();
+ const $input_msg__closures = /* @__PURE__ */ new Set();
+ const $count__closures = /* @__PURE__ */ new Set();
+ let count = 0;
+ _html(`${_el_resume($scope0_id, "a")}`);
+ if ($scope0_reason) _if(() => {
+ {
+ const $scope1_id = _scope_id();
+ _set_serialize_reason(1);
+ const $childScope = _peek_scope_id();
+ wrap_default({ content: _content_elide("a0", () => {
+ _persisted_reason();
+ const $scope2_id = _scope_id();
+ _html(`${_text_resume($scope2_id, "a", input.msg + ":0")}`);
+ _subscribe($count__closures, _subscribe(_source_if($scope0_reason, 0) && $input_msg__closures, _scope($scope2_id, { _: _scope_with_id($scope1_id) })));
+ _resume_branch($scope2_id);
+ }, $scope1_id) });
+ _scope($scope1_id, { a: _existing_scope($childScope) });
+ return 0;
+ }
+ }, $scope0_id, "b", 1, 1, 1, 0, 1);
+ _script($scope0_id, "a1");
+ $scope0_reason ? _scope($scope0_id, {
+ e: input.msg,
+ f: count,
+ g: $input_msg__closures,
+ h: $count__closures
+ }) : _owned_guard($scope0_owned, 0) && _patch_value($scope0_id, "a0", input.msg);
+ _resume_branch($scope0_id);
+}, 1, () => [wrap_default]);
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-fill-content-in-stateful/__snapshots__/patches.debug.js b/packages/runtime-tags/src/__tests__/fixtures/persisted-fill-content-in-stateful/__snapshots__/patches.debug.js
new file mode 100644
index 00000000000..1ae1d1f9dce
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-fill-content-in-stateful/__snapshots__/patches.debug.js
@@ -0,0 +1,9 @@
+// PATCH
+{
+ "PatchValue:packages/runtime-tags/src/__tests__/fixtures/persisted-fill-content-in-stateful/template.marko0": "b"
+}
+
+// PATCH
+{
+ "PatchValue:packages/runtime-tags/src/__tests__/fixtures/persisted-fill-content-in-stateful/template.marko0": "c"
+}
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-fill-content-in-stateful/__snapshots__/patches.js b/packages/runtime-tags/src/__tests__/fixtures/persisted-fill-content-in-stateful/__snapshots__/patches.js
new file mode 100644
index 00000000000..6bd84df9cea
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-fill-content-in-stateful/__snapshots__/patches.js
@@ -0,0 +1,9 @@
+// PATCH
+{
+ va0: "b"
+}
+
+// PATCH
+{
+ va0: "c"
+}
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-fill-content-in-stateful/__snapshots__/render.debug.md b/packages/runtime-tags/src/__tests__/fixtures/persisted-fill-content-in-stateful/__snapshots__/render.debug.md
new file mode 100644
index 00000000000..ef017d62877
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-fill-content-in-stateful/__snapshots__/render.debug.md
@@ -0,0 +1,62 @@
+# Render `{"msg":"a"}`
+```html
+
+
+
+ a:0
+
+
+```
+
+# Update
+```js
+document.querySelector("button").click();
+```
+```html
+
+
+
+ a:1
+
+
+```
+## Change
+```
+UPDATE: div > span::text "a:0" => "a:1"
+```
+
+# Update `{"msg":"b"}`
+```html
+
+
+
+ b:1
+
+
+```
+## Change
+```
+UPDATE: div > span::text "a:1" => "b:1"
+```
+
+# Update
+```js
+document.querySelector("button").click();
+```
+```html
+
+```
+## Change
+```
+REMOVE: button + div
+```
+
+# Update `{"msg":"c"}`
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-fill-content-in-stateful/__snapshots__/render.md b/packages/runtime-tags/src/__tests__/fixtures/persisted-fill-content-in-stateful/__snapshots__/render.md
new file mode 100644
index 00000000000..ef017d62877
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-fill-content-in-stateful/__snapshots__/render.md
@@ -0,0 +1,62 @@
+# Render `{"msg":"a"}`
+```html
+
+
+
+ a:0
+
+
+```
+
+# Update
+```js
+document.querySelector("button").click();
+```
+```html
+
+
+
+ a:1
+
+
+```
+## Change
+```
+UPDATE: div > span::text "a:0" => "a:1"
+```
+
+# Update `{"msg":"b"}`
+```html
+
+
+
+ b:1
+
+
+```
+## Change
+```
+UPDATE: div > span::text "a:1" => "b:1"
+```
+
+# Update
+```js
+document.querySelector("button").click();
+```
+```html
+
+```
+## Change
+```
+REMOVE: button + div
+```
+
+# Update `{"msg":"c"}`
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-fill-content-in-stateful/__snapshots__/writes.debug.html b/packages/runtime-tags/src/__tests__/fixtures/persisted-fill-content-in-stateful/__snapshots__/writes.debug.html
new file mode 100644
index 00000000000..55cfdc58652
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-fill-content-in-stateful/__snapshots__/writes.debug.html
@@ -0,0 +1,21 @@
+
+a:0
+
+
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-fill-content-in-stateful/__snapshots__/writes.html b/packages/runtime-tags/src/__tests__/fixtures/persisted-fill-content-in-stateful/__snapshots__/writes.html
new file mode 100644
index 00000000000..021036dc2e2
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-fill-content-in-stateful/__snapshots__/writes.html
@@ -0,0 +1,18 @@
+
+a:0
+
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-fill-content-in-stateful/sizes.json b/packages/runtime-tags/src/__tests__/fixtures/persisted-fill-content-in-stateful/sizes.json
new file mode 100644
index 00000000000..41a1b344c84
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-fill-content-in-stateful/sizes.json
@@ -0,0 +1,22 @@
+{
+ "dom": {
+ "template.marko.page.mjs": {
+ "total": {
+ "min": 11872,
+ "brotli": 5046
+ },
+ "files": {
+ "tags/wrap/index.marko": 150,
+ "template.marko": 1185
+ }
+ }
+ },
+ "html": {
+ "min": 493,
+ "brotli": 327
+ },
+ "patch": {
+ "min": 20,
+ "brotli": 24
+ }
+}
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-fill-content-in-stateful/tags/wrap/index.marko b/packages/runtime-tags/src/__tests__/fixtures/persisted-fill-content-in-stateful/tags/wrap/index.marko
new file mode 100644
index 00000000000..a707eb13af2
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-fill-content-in-stateful/tags/wrap/index.marko
@@ -0,0 +1 @@
+<${input.content}/>
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-fill-content-in-stateful/template.marko b/packages/runtime-tags/src/__tests__/fixtures/persisted-fill-content-in-stateful/template.marko
new file mode 100644
index 00000000000..6313ce0ab4b
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-fill-content-in-stateful/template.marko
@@ -0,0 +1,7 @@
+
+
+
+
+ ${input.msg + ":" + count}
+
+
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-fill-content-in-stateful/test.ts b/packages/runtime-tags/src/__tests__/fixtures/persisted-fill-content-in-stateful/test.ts
new file mode 100644
index 00000000000..9855cff4be8
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-fill-content-in-stateful/test.ts
@@ -0,0 +1,13 @@
+import type { TestConfig } from "../../main.test";
+
+const click = (document: Document) => {
+ document.querySelector("button")!.click();
+};
+
+// An intersection read (`input.msg` × `count`) inside a content section
+// nested in a client-owned branch: the fill must still reach the content
+// scope after a patch changes `msg`.
+export const config: TestConfig = {
+ persisted: true,
+ steps: [{ msg: "a" }, click, { msg: "b" }, click, { msg: "c" }],
+};
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-fill-content-section/sizes.json b/packages/runtime-tags/src/__tests__/fixtures/persisted-fill-content-section/sizes.json
index c47a1e25f24..11b7d0953c9 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-fill-content-section/sizes.json
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-fill-content-section/sizes.json
@@ -1,8 +1,8 @@
{
"dom": {
"template.marko.page.mjs": {
- "min": 11367,
- "brotli": 4833
+ "min": 11302,
+ "brotli": 4814
}
},
"html": {
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-fill-content-subscribers/sizes.json b/packages/runtime-tags/src/__tests__/fixtures/persisted-fill-content-subscribers/sizes.json
index 998f69b76d6..224ab6fb179 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-fill-content-subscribers/sizes.json
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-fill-content-subscribers/sizes.json
@@ -1,8 +1,8 @@
{
"dom": {
"template.marko.page.mjs": {
- "min": 11505,
- "brotli": 4879
+ "min": 11440,
+ "brotli": 4851
}
},
"html": {
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-fill-depth-3/sizes.json b/packages/runtime-tags/src/__tests__/fixtures/persisted-fill-depth-3/sizes.json
index 65ffeb736c4..3bc81786e5c 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-fill-depth-3/sizes.json
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-fill-depth-3/sizes.json
@@ -1,8 +1,8 @@
{
"dom": {
"template.marko.page.mjs": {
- "min": 10801,
- "brotli": 4763
+ "min": 10762,
+ "brotli": 4764
}
},
"html": {
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-fill-embedded-fn/sizes.json b/packages/runtime-tags/src/__tests__/fixtures/persisted-fill-embedded-fn/sizes.json
index cc7e6993dec..5cba8b9adf2 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-fill-embedded-fn/sizes.json
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-fill-embedded-fn/sizes.json
@@ -1,8 +1,8 @@
{
"dom": {
"template.marko.page.mjs": {
- "min": 7641,
- "brotli": 3428
+ "min": 7612,
+ "brotli": 3417
}
},
"html": {
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-fill-fn-destructure/sizes.json b/packages/runtime-tags/src/__tests__/fixtures/persisted-fill-fn-destructure/sizes.json
index 70ad964a2f7..cd4e58f002c 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-fill-fn-destructure/sizes.json
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-fill-fn-destructure/sizes.json
@@ -2,8 +2,8 @@
"dom": {
"template.marko.page.mjs": {
"total": {
- "min": 7731,
- "brotli": 3473
+ "min": 7702,
+ "brotli": 3471
},
"files": {
"tags/card/index.marko": 143,
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-fill-fn-select/sizes.json b/packages/runtime-tags/src/__tests__/fixtures/persisted-fill-fn-select/sizes.json
index c950a46b3a7..21935bb7556 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-fill-fn-select/sizes.json
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-fill-fn-select/sizes.json
@@ -1,8 +1,8 @@
{
"dom": {
"template.marko.page.mjs": {
- "min": 7665,
- "brotli": 3429
+ "min": 7636,
+ "brotli": 3427
}
},
"html": {
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-fill-loops-grow/sizes.json b/packages/runtime-tags/src/__tests__/fixtures/persisted-fill-loops-grow/sizes.json
index 32481c46f66..d59cd599d74 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-fill-loops-grow/sizes.json
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-fill-loops-grow/sizes.json
@@ -1,8 +1,8 @@
{
"dom": {
"template.marko.page.mjs": {
- "min": 10170,
- "brotli": 4522
+ "min": 10131,
+ "brotli": 4484
}
},
"html": {
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-fill-loops-of-loops/sizes.json b/packages/runtime-tags/src/__tests__/fixtures/persisted-fill-loops-of-loops/sizes.json
index 2000d6c9190..a206db0abac 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-fill-loops-of-loops/sizes.json
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-fill-loops-of-loops/sizes.json
@@ -1,8 +1,8 @@
{
"dom": {
"template.marko.page.mjs": {
- "min": 10170,
- "brotli": 4522
+ "min": 10131,
+ "brotli": 4484
}
},
"html": {
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-fill-multicap/sizes.json b/packages/runtime-tags/src/__tests__/fixtures/persisted-fill-multicap/sizes.json
index 74b2a17aeea..75939c43bb9 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-fill-multicap/sizes.json
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-fill-multicap/sizes.json
@@ -1,8 +1,8 @@
{
"dom": {
"template.marko.page.mjs": {
- "min": 7645,
- "brotli": 3432
+ "min": 7616,
+ "brotli": 3422
}
},
"html": {
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-fill-offset-if/sizes.json b/packages/runtime-tags/src/__tests__/fixtures/persisted-fill-offset-if/sizes.json
index 24088f85283..2cd214cd2a2 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-fill-offset-if/sizes.json
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-fill-offset-if/sizes.json
@@ -1,8 +1,8 @@
{
"dom": {
"template.marko.page.mjs": {
- "min": 8891,
- "brotli": 3915
+ "min": 8852,
+ "brotli": 3905
}
},
"html": {
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-fill-offset-loops/sizes.json b/packages/runtime-tags/src/__tests__/fixtures/persisted-fill-offset-loops/sizes.json
index 99aa538fe16..c535f46a0aa 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-fill-offset-loops/sizes.json
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-fill-offset-loops/sizes.json
@@ -1,8 +1,8 @@
{
"dom": {
"template.marko.page.mjs": {
- "min": 10205,
- "brotli": 4512
+ "min": 10166,
+ "brotli": 4522
}
},
"html": {
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-global-derived-fill/__snapshots__/dom.bundle.debug.js b/packages/runtime-tags/src/__tests__/fixtures/persisted-global-derived-fill/__snapshots__/dom.bundle.debug.js
new file mode 100644
index 00000000000..74640920236
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-global-derived-fill/__snapshots__/dom.bundle.debug.js
@@ -0,0 +1,28 @@
+// template.marko
+const $template = "";
+const $walks = " b%c";
+const $if_content__greeting = /*@__PURE__*/ _fill_join("__tests__/template.marko0", "greeting", /*@__PURE__*/ _if_closure("#text/1", 0, ($scope) => _text($scope["#text/0"], $scope._.greeting)));
+const $if_content__setup = ($scope) => {
+ $if_content__greeting._($scope);
+ $if_content__count._($scope);
+};
+const $if_content__count = /*@__PURE__*/ _if_closure("#text/1", 0, ($scope) => _text($scope["#text/1"], $scope._.count));
+const $greeting = /*@__PURE__*/ _fill_const("__tests__/template.marko0", "greeting", $if_content__greeting);
+const $input_name__OR__$global_prefix = ($scope) => {
+ $greeting($scope, $scope.$global_prefix + ":" + $scope.input_name);
+};
+const $input_name = /*@__PURE__*/ _const("input_name", $input_name__OR__$global_prefix);
+const $if = /*@__PURE__*/ _if("#text/1", " ", "D%c%", $if_content__setup);
+const $count = /*@__PURE__*/ _let("count/7", ($scope) => {
+ $if($scope, $scope.count < 2 ? 0 : 1);
+ $if_content__count($scope);
+});
+const $setup__script = _script("__tests__/template.marko_0", ($scope) => _on($scope["#button/0"], "click", function() {
+ $count($scope, +$scope.count + 1);
+}));
+function $setup($scope) {
+ $count($scope, 0);
+ $setup__script($scope);
+}
+const $input = ($scope, input) => $input_name($scope, input.name);
+var template_default = /*@__PURE__*/ _template("__tests__/template.marko", $template, $walks, $setup, $input);
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-global-derived-fill/__snapshots__/dom.bundle.js b/packages/runtime-tags/src/__tests__/fixtures/persisted-global-derived-fill/__snapshots__/dom.bundle.js
new file mode 100644
index 00000000000..9e97c3bc137
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-global-derived-fill/__snapshots__/dom.bundle.js
@@ -0,0 +1,15 @@
+// template.marko
+const $if_content__greeting = /*@__PURE__*/ _fill_join("a0", 5, /*@__PURE__*/ _if_closure(1, 0, ($scope) => _text($scope.a, $scope._.f)));
+const $if_content__setup = ($scope) => {
+ $if_content__greeting._($scope);
+ $if_content__count._($scope);
+};
+const $if_content__count = /*@__PURE__*/ _if_closure(1, 0, ($scope) => _text($scope.b, $scope._.h));
+const $if = /*@__PURE__*/ _if(1, " ", "D%c%", $if_content__setup);
+const $count = /*@__PURE__*/ _let(7, ($scope) => {
+ $if($scope, $scope.h < 2 ? 0 : 1);
+ $if_content__count($scope);
+});
+const $setup__script = _script("a0", ($scope) => _on($scope.a, "click", function() {
+ $count($scope, +$scope.h + 1);
+}));
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-global-derived-fill/__snapshots__/html.bundle.debug.js b/packages/runtime-tags/src/__tests__/fixtures/persisted-global-derived-fill/__snapshots__/html.bundle.debug.js
new file mode 100644
index 00000000000..a1b3c651c34
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-global-derived-fill/__snapshots__/html.bundle.debug.js
@@ -0,0 +1,31 @@
+// template.marko
+const $template = "";
+const $walks = " b%c";
+_shells({ "__tests__/template.marko": "__tests__/template.marko !__tests__/template.marko_0; b%;" });
+var template_default = _template_persisted("__tests__/template.marko", (input) => {
+ const $scope0_owned = _persisted_ownership(), $scope0_reason = _persisted_reason();
+ const $scope0_id = _scope_id();
+ const $global$1 = $global();
+ const greeting = $global$1.prefix + ":" + input.name;
+ let count = 0;
+ _html(`${_el_resume($scope0_id, "#button/0")}`);
+ if ($scope0_reason) _if(() => {
+ if (count < 2) {
+ const $scope1_id = _scope_id();
+ _html(`${_text_resume($scope1_id, "#text/0", greeting)} ${_text_resume($scope1_id, "#text/1", count, 2)}`);
+ _scope($scope1_id, {}, "__tests__/template.marko", "4:2");
+ return 0;
+ }
+ }, $scope0_id, "#text/1", 1, 1, 1, 0, 1);
+ _script($scope0_id, "__tests__/template.marko_0");
+ $scope0_reason ? _scope($scope0_id, {
+ greeting,
+ $global_prefix: $global$1?.prefix,
+ count
+ }, "__tests__/template.marko", 0, {
+ greeting: "1:8",
+ $global_prefix: ["$global.prefix"],
+ count: "2:6"
+ }) : _owned_guard($scope0_owned, 0) && _patch_value($scope0_id, "__tests__/template.marko0", greeting);
+ _resume_branch($scope0_id);
+}, 1, 1);
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-global-derived-fill/__snapshots__/html.bundle.js b/packages/runtime-tags/src/__tests__/fixtures/persisted-global-derived-fill/__snapshots__/html.bundle.js
new file mode 100644
index 00000000000..25955f6dec4
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-global-derived-fill/__snapshots__/html.bundle.js
@@ -0,0 +1,25 @@
+// template.marko
+_shells({ a: "a !a0; b%;" });
+var template_default = _template_persisted("a", (input) => {
+ const $scope0_owned = _persisted_ownership(), $scope0_reason = _persisted_reason();
+ const $scope0_id = _scope_id();
+ const $global$1 = $global();
+ const greeting = $global$1.prefix + ":" + input.name;
+ let count = 0;
+ _html(`${_el_resume($scope0_id, "a")}`);
+ if ($scope0_reason) _if(() => {
+ {
+ const $scope1_id = _scope_id();
+ _html(`${_text_resume($scope1_id, "a", greeting)} ${_text_resume($scope1_id, "b", count, 2)}`);
+ _scope($scope1_id, {});
+ return 0;
+ }
+ }, $scope0_id, "b", 1, 1, 1, 0, 1);
+ _script($scope0_id, "a0");
+ $scope0_reason ? _scope($scope0_id, {
+ f: greeting,
+ g: $global$1?.prefix,
+ h: count
+ }) : _owned_guard($scope0_owned, 0) && _patch_value($scope0_id, "a0", greeting);
+ _resume_branch($scope0_id);
+}, 1, 1);
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-global-derived-fill/__snapshots__/patches.debug.js b/packages/runtime-tags/src/__tests__/fixtures/persisted-global-derived-fill/__snapshots__/patches.debug.js
new file mode 100644
index 00000000000..b1700ffa7f0
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-global-derived-fill/__snapshots__/patches.debug.js
@@ -0,0 +1,9 @@
+// PATCH
+{
+ "PatchValue:packages/runtime-tags/src/__tests__/fixtures/persisted-global-derived-fill/template.marko0": "yo:amy"
+}
+
+// PATCH
+{
+ "PatchValue:packages/runtime-tags/src/__tests__/fixtures/persisted-global-derived-fill/template.marko0": "yo:bob"
+}
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-global-derived-fill/__snapshots__/patches.js b/packages/runtime-tags/src/__tests__/fixtures/persisted-global-derived-fill/__snapshots__/patches.js
new file mode 100644
index 00000000000..ec7f13988ba
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-global-derived-fill/__snapshots__/patches.js
@@ -0,0 +1,9 @@
+// PATCH
+{
+ va0: "yo:amy"
+}
+
+// PATCH
+{
+ va0: "yo:bob"
+}
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-global-derived-fill/__snapshots__/render.debug.md b/packages/runtime-tags/src/__tests__/fixtures/persisted-global-derived-fill/__snapshots__/render.debug.md
new file mode 100644
index 00000000000..cc255ddb791
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-global-derived-fill/__snapshots__/render.debug.md
@@ -0,0 +1,56 @@
+# Render `{"name":"amy","$global":{"prefix":"hi"}}`
+```html
+
+
+ hi:amy 0
+
+```
+
+# Update
+```js
+document.querySelector("button").click();
+```
+```html
+
+
+ hi:amy 1
+
+```
+## Change
+```
+UPDATE: span::text@7 "0" => "1"
+```
+
+# Update `{"name":"amy","$global":{"prefix":"yo"}}`
+```html
+
+
+ yo:amy 1
+
+```
+## Change
+```
+UPDATE: span::text@0 "hi:amy" => "yo:amy"
+```
+
+# Update
+```js
+document.querySelector("button").click();
+```
+```html
+
+```
+## Change
+```
+REMOVE: button + span
+```
+
+# Update `{"name":"bob","$global":{"prefix":"yo"}}`
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-global-derived-fill/__snapshots__/render.md b/packages/runtime-tags/src/__tests__/fixtures/persisted-global-derived-fill/__snapshots__/render.md
new file mode 100644
index 00000000000..cc255ddb791
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-global-derived-fill/__snapshots__/render.md
@@ -0,0 +1,56 @@
+# Render `{"name":"amy","$global":{"prefix":"hi"}}`
+```html
+
+
+ hi:amy 0
+
+```
+
+# Update
+```js
+document.querySelector("button").click();
+```
+```html
+
+
+ hi:amy 1
+
+```
+## Change
+```
+UPDATE: span::text@7 "0" => "1"
+```
+
+# Update `{"name":"amy","$global":{"prefix":"yo"}}`
+```html
+
+
+ yo:amy 1
+
+```
+## Change
+```
+UPDATE: span::text@0 "hi:amy" => "yo:amy"
+```
+
+# Update
+```js
+document.querySelector("button").click();
+```
+```html
+
+```
+## Change
+```
+REMOVE: button + span
+```
+
+# Update `{"name":"bob","$global":{"prefix":"yo"}}`
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-global-derived-fill/__snapshots__/writes.debug.html b/packages/runtime-tags/src/__tests__/fixtures/persisted-global-derived-fill/__snapshots__/writes.debug.html
new file mode 100644
index 00000000000..7e69d144353
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-global-derived-fill/__snapshots__/writes.debug.html
@@ -0,0 +1,14 @@
+hi:amy
+ 0
+
+
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-global-derived-fill/__snapshots__/writes.html b/packages/runtime-tags/src/__tests__/fixtures/persisted-global-derived-fill/__snapshots__/writes.html
new file mode 100644
index 00000000000..f23ca4310f3
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-global-derived-fill/__snapshots__/writes.html
@@ -0,0 +1,12 @@
+hi:amy
+ 0
+
+
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-global-derived-fill/sizes.json b/packages/runtime-tags/src/__tests__/fixtures/persisted-global-derived-fill/sizes.json
new file mode 100644
index 00000000000..0e50d951d76
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-global-derived-fill/sizes.json
@@ -0,0 +1,16 @@
+{
+ "dom": {
+ "template.marko.page.mjs": {
+ "min": 7419,
+ "brotli": 3337
+ }
+ },
+ "html": {
+ "min": 424,
+ "brotli": 283
+ },
+ "patch": {
+ "min": 30,
+ "brotli": 34
+ }
+}
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-global-derived-fill/template.marko b/packages/runtime-tags/src/__tests__/fixtures/persisted-global-derived-fill/template.marko
new file mode 100644
index 00000000000..d3504ba5f3a
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-global-derived-fill/template.marko
@@ -0,0 +1,6 @@
+
+
+
+
+ ${greeting} ${count}
+
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-global-derived-fill/test.ts b/packages/runtime-tags/src/__tests__/fixtures/persisted-global-derived-fill/test.ts
new file mode 100644
index 00000000000..c866d488c3a
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-global-derived-fill/test.ts
@@ -0,0 +1,19 @@
+import type { TestConfig } from "../../main.test";
+
+const click = (document: Document) => {
+ document.querySelector("button")!.click();
+};
+
+// A `$global`-derived value read inside client-owned structure delivers as
+// a fill: each frame re-ships it (globals can change per response), so the
+// revealed branch re-renders with the current derivation.
+export const config: TestConfig = {
+ persisted: true,
+ steps: [
+ { name: "amy", $global: { prefix: "hi" } },
+ click,
+ { name: "amy", $global: { prefix: "yo" } },
+ click,
+ { name: "bob", $global: { prefix: "yo" } },
+ ],
+};
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-global-read-in-stateful/__snapshots__/dom.bundle.debug.js b/packages/runtime-tags/src/__tests__/fixtures/persisted-global-read-in-stateful/__snapshots__/dom.bundle.debug.js
new file mode 100644
index 00000000000..3287bb34720
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-global-read-in-stateful/__snapshots__/dom.bundle.debug.js
@@ -0,0 +1,15 @@
+// template.marko
+const $template = "";
+const $walks = " b%c";
+const $if_content__$global_brand = /*@__PURE__*/ _fill_join("__tests__/template.marko0", "$global_brand", /*@__PURE__*/ _if_closure("#text/1", 0, ($scope) => _text($scope["#text/0"], $scope._.$global_brand)));
+const $if_content__setup = $if_content__$global_brand;
+const $if = /*@__PURE__*/ _if("#text/1", " ", "D ", $if_content__setup);
+const $on = /*@__PURE__*/ _let("on/2", ($scope) => $if($scope, $scope.on ? 0 : 1));
+const $setup__script = _script("__tests__/template.marko_0", ($scope) => _on($scope["#button/0"], "click", function() {
+ $on($scope, !$scope.on);
+}));
+function $setup($scope) {
+ $on($scope, true);
+ $setup__script($scope);
+}
+var template_default = /*@__PURE__*/ _template("__tests__/template.marko", $template, $walks, $setup);
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-global-read-in-stateful/__snapshots__/dom.bundle.js b/packages/runtime-tags/src/__tests__/fixtures/persisted-global-read-in-stateful/__snapshots__/dom.bundle.js
new file mode 100644
index 00000000000..f65ad49ba54
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-global-read-in-stateful/__snapshots__/dom.bundle.js
@@ -0,0 +1,7 @@
+// template.marko
+const $if_content__setup = /* @__PURE__ */ _fill_join("a0", 3, /*@__PURE__*/ _if_closure(1, 0, ($scope) => _text($scope.a, $scope._.d)));
+const $if = /*@__PURE__*/ _if(1, " ", "D ", $if_content__setup);
+const $on = /*@__PURE__*/ _let(2, ($scope) => $if($scope, $scope.c ? 0 : 1));
+const $setup__script = _script("a0", ($scope) => _on($scope.a, "click", function() {
+ $on($scope, !$scope.c);
+}));
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-global-read-in-stateful/__snapshots__/html.bundle.debug.js b/packages/runtime-tags/src/__tests__/fixtures/persisted-global-read-in-stateful/__snapshots__/html.bundle.debug.js
new file mode 100644
index 00000000000..ca96ebcc3f6
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-global-read-in-stateful/__snapshots__/html.bundle.debug.js
@@ -0,0 +1,28 @@
+// template.marko
+const $template = "";
+const $walks = " b%c";
+_shells({ "__tests__/template.marko": "__tests__/template.marko !__tests__/template.marko_0; b%;" });
+var template_default = _template_persisted("__tests__/template.marko", (input) => {
+ const $scope0_reason = _persisted_reason();
+ const $scope0_id = _scope_id();
+ const $global$1 = $global();
+ let on = true;
+ _html(`${_el_resume($scope0_id, "#button/0")}`);
+ if ($scope0_reason) _if(() => {
+ if (on) {
+ const $scope1_id = _scope_id();
+ _html(`${_text_resume($scope1_id, "#text/0", $global$1.brand)}`);
+ _scope($scope1_id, {}, "__tests__/template.marko", "3:2");
+ return 0;
+ }
+ }, $scope0_id, "#text/1", 1, 1, 1, 0, 1);
+ _script($scope0_id, "__tests__/template.marko_0");
+ $scope0_reason ? _scope($scope0_id, {
+ on,
+ $global_brand: $global$1?.brand
+ }, "__tests__/template.marko", 0, {
+ on: "1:6",
+ $global_brand: ["$global.brand"]
+ }) : _patch_value($scope0_id, "__tests__/template.marko0", $global$1?.brand);
+ _resume_branch($scope0_id);
+}, 1, 1);
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-global-read-in-stateful/__snapshots__/html.bundle.js b/packages/runtime-tags/src/__tests__/fixtures/persisted-global-read-in-stateful/__snapshots__/html.bundle.js
new file mode 100644
index 00000000000..b579e3f1972
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-global-read-in-stateful/__snapshots__/html.bundle.js
@@ -0,0 +1,23 @@
+// template.marko
+_shells({ a: "a !a0; b%;" });
+var template_default = _template_persisted("a", (input) => {
+ const $scope0_reason = _persisted_reason();
+ const $scope0_id = _scope_id();
+ const $global$1 = $global();
+ let on = true;
+ _html(`${_el_resume($scope0_id, "a")}`);
+ if ($scope0_reason) _if(() => {
+ {
+ const $scope1_id = _scope_id();
+ _html(`${_text_resume($scope1_id, "a", $global$1.brand)}`);
+ _scope($scope1_id, {});
+ return 0;
+ }
+ }, $scope0_id, "b", 1, 1, 1, 0, 1);
+ _script($scope0_id, "a0");
+ $scope0_reason ? _scope($scope0_id, {
+ c: on,
+ d: $global$1?.brand
+ }) : _patch_value($scope0_id, "a0", $global$1?.brand);
+ _resume_branch($scope0_id);
+}, 1, 1);
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-global-read-in-stateful/__snapshots__/patches.debug.js b/packages/runtime-tags/src/__tests__/fixtures/persisted-global-read-in-stateful/__snapshots__/patches.debug.js
new file mode 100644
index 00000000000..a29ef710f4f
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-global-read-in-stateful/__snapshots__/patches.debug.js
@@ -0,0 +1,4 @@
+// PATCH
+{
+ "PatchValue:packages/runtime-tags/src/__tests__/fixtures/persisted-global-read-in-stateful/template.marko0": "bmce"
+}
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-global-read-in-stateful/__snapshots__/patches.js b/packages/runtime-tags/src/__tests__/fixtures/persisted-global-read-in-stateful/__snapshots__/patches.js
new file mode 100644
index 00000000000..5014312e4f3
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-global-read-in-stateful/__snapshots__/patches.js
@@ -0,0 +1,4 @@
+// PATCH
+{
+ va0: "bmce"
+}
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-global-read-in-stateful/__snapshots__/render.debug.md b/packages/runtime-tags/src/__tests__/fixtures/persisted-global-read-in-stateful/__snapshots__/render.debug.md
new file mode 100644
index 00000000000..e4c806dd6e0
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-global-read-in-stateful/__snapshots__/render.debug.md
@@ -0,0 +1,55 @@
+# Render `{"$global":{"brand":"acme"}}`
+```html
+
+
+ acme
+
+```
+
+# Update `{"$global":{"brand":"bmce"}}`
+```html
+
+
+ bmce
+
+```
+## Change
+```
+UPDATE: em::text "acme" => "bmce"
+```
+
+# Update
+```js
+document.querySelector("button").click();
+```
+```html
+
+```
+## Change
+```
+REMOVE: button + em
+```
+
+# Update
+```js
+document.querySelector("button").click();
+```
+```html
+
+
+ bmce
+
+```
+## Change
+```
+INSERT: button + em
+UPDATE: em::text " " => "bmce"
+```
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-global-read-in-stateful/__snapshots__/render.md b/packages/runtime-tags/src/__tests__/fixtures/persisted-global-read-in-stateful/__snapshots__/render.md
new file mode 100644
index 00000000000..e4c806dd6e0
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-global-read-in-stateful/__snapshots__/render.md
@@ -0,0 +1,55 @@
+# Render `{"$global":{"brand":"acme"}}`
+```html
+
+
+ acme
+
+```
+
+# Update `{"$global":{"brand":"bmce"}}`
+```html
+
+
+ bmce
+
+```
+## Change
+```
+UPDATE: em::text "acme" => "bmce"
+```
+
+# Update
+```js
+document.querySelector("button").click();
+```
+```html
+
+```
+## Change
+```
+REMOVE: button + em
+```
+
+# Update
+```js
+document.querySelector("button").click();
+```
+```html
+
+
+ bmce
+
+```
+## Change
+```
+INSERT: button + em
+UPDATE: em::text " " => "bmce"
+```
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-global-read-in-stateful/__snapshots__/writes.debug.html b/packages/runtime-tags/src/__tests__/fixtures/persisted-global-read-in-stateful/__snapshots__/writes.debug.html
new file mode 100644
index 00000000000..84f2d193645
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-global-read-in-stateful/__snapshots__/writes.debug.html
@@ -0,0 +1,11 @@
+acme
+
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-global-read-in-stateful/__snapshots__/writes.html b/packages/runtime-tags/src/__tests__/fixtures/persisted-global-read-in-stateful/__snapshots__/writes.html
new file mode 100644
index 00000000000..cbd7afc47ac
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-global-read-in-stateful/__snapshots__/writes.html
@@ -0,0 +1,9 @@
+acme
+
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-global-read-in-stateful/sizes.json b/packages/runtime-tags/src/__tests__/fixtures/persisted-global-read-in-stateful/sizes.json
new file mode 100644
index 00000000000..8738ddaf55f
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-global-read-in-stateful/sizes.json
@@ -0,0 +1,16 @@
+{
+ "dom": {
+ "template.marko.page.mjs": {
+ "min": 7338,
+ "brotli": 3293
+ }
+ },
+ "html": {
+ "min": 390,
+ "brotli": 270
+ },
+ "patch": {
+ "min": 13,
+ "brotli": 17
+ }
+}
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-global-read-in-stateful/template.marko b/packages/runtime-tags/src/__tests__/fixtures/persisted-global-read-in-stateful/template.marko
new file mode 100644
index 00000000000..984976d7a80
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-global-read-in-stateful/template.marko
@@ -0,0 +1,5 @@
+
+
+
+ ${$global.brand}
+
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-global-read-in-stateful/test.ts b/packages/runtime-tags/src/__tests__/fixtures/persisted-global-read-in-stateful/test.ts
new file mode 100644
index 00000000000..3de002c286b
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-global-read-in-stateful/test.ts
@@ -0,0 +1,18 @@
+import type { TestConfig } from "../../main.test";
+
+const toggle = (document: Document) => {
+ document.querySelector("button")!.click();
+};
+
+// A direct `$global` member read inside client-owned structure hoists into
+// a root derivation delivered as a fill: a patched global re-renders the
+// read, and a re-shown branch renders the latest value.
+export const config: TestConfig = {
+ persisted: true,
+ steps: [
+ { $global: { brand: "acme" } },
+ { $global: { brand: "bmce" } },
+ toggle,
+ toggle,
+ ],
+};
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-global-reads/__snapshots__/dom.bundle.debug.js b/packages/runtime-tags/src/__tests__/fixtures/persisted-global-reads/__snapshots__/dom.bundle.debug.js
index 581d43b1985..93c53fa694c 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-global-reads/__snapshots__/dom.bundle.debug.js
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-global-reads/__snapshots__/dom.bundle.debug.js
@@ -1,10 +1,7 @@
// template.marko
const $template = "";
const $walks = "D D lD m";
-function $setup($scope) {
- _attr($scope["#h1/0"], "title", $scope.$global.locale);
- _text($scope["#text/1"], $scope.$global.brand);
-}
+const $setup = () => {};
const $input_name = ($scope, input_name) => _text($scope["#text/2"], input_name);
const $input = ($scope, input) => $input_name($scope, input.name);
-var template_default = /*@__PURE__*/ _template("__tests__/template.marko", $template, $walks, $setup, $input);
+var template_default = /*@__PURE__*/ _template("__tests__/template.marko", $template, $walks, 0, $input);
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-global-reads/sizes.json b/packages/runtime-tags/src/__tests__/fixtures/persisted-global-reads/sizes.json
index 109fd4fd2fd..7699d512e85 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-global-reads/sizes.json
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-global-reads/sizes.json
@@ -1,8 +1,8 @@
{
"dom": {
"template.marko.page.mjs": {
- "min": 2285,
- "brotli": 1159
+ "min": 2268,
+ "brotli": 1146
}
},
"html": {
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-global-update/__snapshots__/dom.bundle.debug.js b/packages/runtime-tags/src/__tests__/fixtures/persisted-global-update/__snapshots__/dom.bundle.debug.js
index 540ebbc0db1..b99c0c42ca1 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-global-update/__snapshots__/dom.bundle.debug.js
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-global-update/__snapshots__/dom.bundle.debug.js
@@ -2,12 +2,10 @@
const $template = "
";
const $walks = "E l bD m";
const $read = /*@__PURE__*/ _let("read/3", ($scope) => _text($scope["#text/2"], $scope.read));
-const $setup__script = _script("__tests__/template.marko_0", ($scope) => _on($scope["#button/1"], "click", function() {
- $read($scope, $scope.$global.brand);
-}));
function $setup($scope) {
- _text($scope["#text/0"], $scope.$global.brand);
$read($scope, "");
- $setup__script($scope);
}
+const $global_brand__script = _script("__tests__/template.marko_0_$global_brand#4", ($scope) => _on($scope["#button/1"], "click", function() {
+ $read($scope, $scope.$global_brand);
+}));
var template_default = /*@__PURE__*/ _template("__tests__/template.marko", $template, $walks, $setup);
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-global-update/__snapshots__/dom.bundle.js b/packages/runtime-tags/src/__tests__/fixtures/persisted-global-update/__snapshots__/dom.bundle.js
index 33dcaa78525..86abd299694 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-global-update/__snapshots__/dom.bundle.js
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-global-update/__snapshots__/dom.bundle.js
@@ -1,5 +1,5 @@
// template.marko
const $read = /*@__PURE__*/ _let(3, ($scope) => _text($scope.c, $scope.d));
-const $setup__script = _script("a0", ($scope) => _on($scope.b, "click", function() {
- $read($scope, $scope.$.brand);
+_script("a0", ($scope) => _on($scope.b, "click", function() {
+ $read($scope, $scope.e);
}));
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-global-update/__snapshots__/html.bundle.debug.js b/packages/runtime-tags/src/__tests__/fixtures/persisted-global-update/__snapshots__/html.bundle.debug.js
index 2d7c9d58e48..72c97b3f0bd 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-global-update/__snapshots__/html.bundle.debug.js
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-global-update/__snapshots__/html.bundle.debug.js
@@ -1,14 +1,15 @@
// template.marko
const $template = "
";
const $walks = "E l bD m";
-_shells({ "__tests__/template.marko": "__tests__/template.marko !__tests__/template.marko_0;E l bD ;
" });
+_shells({ "__tests__/template.marko": "__tests__/template.marko !__tests__/template.marko_0_$global_brand#4;E l bD ;
" });
var template_default = _template_persisted("__tests__/template.marko", (input) => {
const $scope0_reason = _persisted_reason();
const $scope0_id = _scope_id();
const $global$1 = $global();
let read = "";
_html(`${_patch_text($scope0_id, "#text/0", $global$1.brand)}
${_el_resume($scope0_id, "#button/1")}${_text_resume($scope0_id, "#text/2", read)}
`);
- _script($scope0_id, "__tests__/template.marko_0");
- $scope0_reason && _scope($scope0_id, {}, "__tests__/template.marko", 0);
+ _script($scope0_id, "__tests__/template.marko_0_$global_brand#4");
+ _patch_effect($scope0_id, "__tests__/template.marko_0_$global_brand#4", "$global_brand");
+ $scope0_reason ? _scope($scope0_id, { $global_brand: $global$1?.brand }, "__tests__/template.marko", 0, { $global_brand: ["$global.brand"] }) : _patch_write($scope0_id, "$global_brand", $global$1?.brand);
_resume_branch($scope0_id);
}, 1, 1);
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-global-update/__snapshots__/html.bundle.js b/packages/runtime-tags/src/__tests__/fixtures/persisted-global-update/__snapshots__/html.bundle.js
index eb1178b695b..2da349095d5 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-global-update/__snapshots__/html.bundle.js
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-global-update/__snapshots__/html.bundle.js
@@ -3,8 +3,10 @@ _shells({ a: "a !a0;E l bD ;
var template_default = _template_persisted("a", (input) => {
const $scope0_reason = _persisted_reason();
const $scope0_id = _scope_id();
- _html(`${_patch_text($scope0_id, "a", $global().brand)}
${_el_resume($scope0_id, "b")}${_text_resume($scope0_id, "c", "")}
`);
+ const $global$1 = $global();
+ _html(`${_patch_text($scope0_id, "a", $global$1.brand)}
${_el_resume($scope0_id, "b")}${_text_resume($scope0_id, "c", "")}
`);
_script($scope0_id, "a0");
- $scope0_reason && _scope($scope0_id, {});
+ _patch_effect($scope0_id, "a0", "e");
+ $scope0_reason ? _scope($scope0_id, { e: $global$1?.brand }) : _patch_write($scope0_id, "e", $global$1?.brand);
_resume_branch($scope0_id);
}, 1, 1);
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-global-update/__snapshots__/patches.debug.js b/packages/runtime-tags/src/__tests__/fixtures/persisted-global-update/__snapshots__/patches.debug.js
index 9a0e805c1b5..46a66f6ade3 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-global-update/__snapshots__/patches.debug.js
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-global-update/__snapshots__/patches.debug.js
@@ -3,7 +3,9 @@
"$global:": {
brand: "Runtime"
},
- "PatchText:#text/0": "Runtime"
+ "PatchText:#text/0": "Runtime",
+ "PatchEffect:packages/runtime-tags/src/__tests__/fixtures/persisted-global-update/template.marko_0_$global_brand#4": "$global_brand",
+ "PatchWrite:$global_brand": "Runtime"
}
// PATCH
@@ -11,5 +13,7 @@
"$global:": {
brand: $
},
- "PatchText:#text/0": ""
+ "PatchText:#text/0": "",
+ "PatchEffect:packages/runtime-tags/src/__tests__/fixtures/persisted-global-update/template.marko_0_$global_brand#4": "$global_brand",
+ "PatchWrite:$global_brand": $
}
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-global-update/__snapshots__/patches.js b/packages/runtime-tags/src/__tests__/fixtures/persisted-global-update/__snapshots__/patches.js
index 9bb365f71f3..7e1033ccbf3 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-global-update/__snapshots__/patches.js
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-global-update/__snapshots__/patches.js
@@ -3,7 +3,9 @@
$: {
brand: "Runtime"
},
- ta: "Runtime"
+ ta: "Runtime",
+ ea0: "e",
+ we: "Runtime"
}
// PATCH
@@ -11,5 +13,7 @@
$: {
brand: $
},
- ta: ""
+ ta: "",
+ ea0: "e",
+ we: $
}
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-global-update/__snapshots__/writes.debug.html b/packages/runtime-tags/src/__tests__/fixtures/persisted-global-update/__snapshots__/writes.debug.html
index ddce9314978..7409ac04179 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-global-update/__snapshots__/writes.debug.html
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-global-update/__snapshots__/writes.debug.html
@@ -6,8 +6,10 @@ Marko
WALKER_RUNTIME("M")("_");
M._.r = [_ => [0, {
brand: "Marko"
+ }, {
+ $global_brand: "Marko"
}],
- "packages/runtime-tags/src/__tests__/fixtures/persisted-global-update/template.marko_0 1"
+ "packages/runtime-tags/src/__tests__/fixtures/persisted-global-update/template.marko_0_$global_brand#4 1"
];
M._.w()
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-global-update/__snapshots__/writes.html b/packages/runtime-tags/src/__tests__/fixtures/persisted-global-update/__snapshots__/writes.html
index 7c4bff00c63..2181bc826b8 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-global-update/__snapshots__/writes.html
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-global-update/__snapshots__/writes.html
@@ -6,6 +6,8 @@ Marko
WALKER_RUNTIME("M")("_");
M._.r = [_ => [0, {
brand: "Marko"
+ }, {
+ e: "Marko"
}], "a0 1"];
M._.w()
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-global-update/sizes.json b/packages/runtime-tags/src/__tests__/fixtures/persisted-global-update/sizes.json
index b234dfea61e..e8054322698 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-global-update/sizes.json
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-global-update/sizes.json
@@ -1,16 +1,16 @@
{
"dom": {
"template.marko.page.mjs": {
- "min": 3216,
- "brotli": 1605
+ "min": 3619,
+ "brotli": 1780
}
},
"html": {
- "min": 412,
- "brotli": 277
+ "min": 424,
+ "brotli": 280
},
"patch": {
- "min": 55,
- "brotli": 54
+ "min": 89,
+ "brotli": 74
}
}
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-grand-arrow-shadow/sizes.json b/packages/runtime-tags/src/__tests__/fixtures/persisted-grand-arrow-shadow/sizes.json
index ccbe16cbfb1..397bcaa581e 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-grand-arrow-shadow/sizes.json
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-grand-arrow-shadow/sizes.json
@@ -2,8 +2,8 @@
"dom": {
"template.marko.page.mjs": {
"total": {
- "min": 7882,
- "brotli": 3536
+ "min": 7860,
+ "brotli": 3527
},
"files": {
"tags/widget/index.marko": 468,
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-grand-arrow/sizes.json b/packages/runtime-tags/src/__tests__/fixtures/persisted-grand-arrow/sizes.json
index cb3bafe309b..ab49eccaeef 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-grand-arrow/sizes.json
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-grand-arrow/sizes.json
@@ -2,8 +2,8 @@
"dom": {
"template.marko.page.mjs": {
"total": {
- "min": 7466,
- "brotli": 3357
+ "min": 7444,
+ "brotli": 3355
},
"files": {
"tags/widget/index.marko": 234,
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-grand-deep/sizes.json b/packages/runtime-tags/src/__tests__/fixtures/persisted-grand-deep/sizes.json
index 3137665412e..31b9f5a51e4 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-grand-deep/sizes.json
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-grand-deep/sizes.json
@@ -2,8 +2,8 @@
"dom": {
"template.marko.page.mjs": {
"total": {
- "min": 7870,
- "brotli": 3478
+ "min": 7848,
+ "brotli": 3472
},
"files": {
"tags/l1/tags/l2/tags/l3/index.marko": 168,
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-grand-diamond/sizes.json b/packages/runtime-tags/src/__tests__/fixtures/persisted-grand-diamond/sizes.json
index f9a5b5c485f..d43b9d5937d 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-grand-diamond/sizes.json
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-grand-diamond/sizes.json
@@ -2,8 +2,8 @@
"dom": {
"template.marko.page.mjs": {
"total": {
- "min": 7683,
- "brotli": 3412
+ "min": 7661,
+ "brotli": 3405
},
"files": {
"tags/dia-d/index.marko": 155,
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-grand-fill/sizes.json b/packages/runtime-tags/src/__tests__/fixtures/persisted-grand-fill/sizes.json
index 17f558104a9..b8d0db59a7b 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-grand-fill/sizes.json
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-grand-fill/sizes.json
@@ -2,8 +2,8 @@
"dom": {
"template.marko.page.mjs": {
"total": {
- "min": 7652,
- "brotli": 3417
+ "min": 7630,
+ "brotli": 3411
},
"files": {
"tags/card/tags/badge/index.marko": 163,
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-grand-global/__snapshots__/error-compile-dom.debug.txt b/packages/runtime-tags/src/__tests__/fixtures/persisted-grand-global/__snapshots__/error-compile-dom.debug.txt
index 55c70d5820a..36881e6e9cb 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-grand-global/__snapshots__/error-compile-dom.debug.txt
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-grand-global/__snapshots__/error-compile-dom.debug.txt
@@ -3,7 +3,7 @@
2 |
3 |
> 4 |
- | ^^^^^^^^ Persisted templates cannot patch this faithfully yet: a child inside client-owned structure reads `$global` (it would go stale).
+ | ^^^^^^^^ Persisted templates cannot patch this faithfully yet: a child inside client-owned structure reads a `$global`-derived value (it would go stale).
5 |
6 |
7 |
\ No newline at end of file
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-grand-global/__snapshots__/error-compile-dom.txt b/packages/runtime-tags/src/__tests__/fixtures/persisted-grand-global/__snapshots__/error-compile-dom.txt
index 55c70d5820a..36881e6e9cb 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-grand-global/__snapshots__/error-compile-dom.txt
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-grand-global/__snapshots__/error-compile-dom.txt
@@ -3,7 +3,7 @@
2 |
3 |
> 4 |
- | ^^^^^^^^ Persisted templates cannot patch this faithfully yet: a child inside client-owned structure reads `$global` (it would go stale).
+ | ^^^^^^^^ Persisted templates cannot patch this faithfully yet: a child inside client-owned structure reads a `$global`-derived value (it would go stale).
5 |
6 |
7 |
\ No newline at end of file
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-grand-global/__snapshots__/error-compile-html.debug.txt b/packages/runtime-tags/src/__tests__/fixtures/persisted-grand-global/__snapshots__/error-compile-html.debug.txt
index 55c70d5820a..36881e6e9cb 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-grand-global/__snapshots__/error-compile-html.debug.txt
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-grand-global/__snapshots__/error-compile-html.debug.txt
@@ -3,7 +3,7 @@
2 |
3 |
> 4 |
- | ^^^^^^^^ Persisted templates cannot patch this faithfully yet: a child inside client-owned structure reads `$global` (it would go stale).
+ | ^^^^^^^^ Persisted templates cannot patch this faithfully yet: a child inside client-owned structure reads a `$global`-derived value (it would go stale).
5 |
6 |
7 |
\ No newline at end of file
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-grand-global/__snapshots__/error-compile-html.txt b/packages/runtime-tags/src/__tests__/fixtures/persisted-grand-global/__snapshots__/error-compile-html.txt
index 55c70d5820a..36881e6e9cb 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-grand-global/__snapshots__/error-compile-html.txt
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-grand-global/__snapshots__/error-compile-html.txt
@@ -3,7 +3,7 @@
2 |
3 |
> 4 |
- | ^^^^^^^^ Persisted templates cannot patch this faithfully yet: a child inside client-owned structure reads `$global` (it would go stale).
+ | ^^^^^^^^ Persisted templates cannot patch this faithfully yet: a child inside client-owned structure reads a `$global`-derived value (it would go stale).
5 |
6 |
7 |
\ No newline at end of file
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-grand-server-fn/sizes.json b/packages/runtime-tags/src/__tests__/fixtures/persisted-grand-server-fn/sizes.json
index 19e5b568ff7..d39c95d3e83 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-grand-server-fn/sizes.json
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-grand-server-fn/sizes.json
@@ -2,8 +2,8 @@
"dom": {
"template.marko.page.mjs": {
"total": {
- "min": 7731,
- "brotli": 3476
+ "min": 7702,
+ "brotli": 3471
},
"files": {
"tags/card/index.marko": 143,
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-grand-server-required/sizes.json b/packages/runtime-tags/src/__tests__/fixtures/persisted-grand-server-required/sizes.json
index 5dfcefb859a..22b11b2ef0b 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-grand-server-required/sizes.json
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-grand-server-required/sizes.json
@@ -2,8 +2,8 @@
"dom": {
"template.marko.page.mjs": {
"total": {
- "min": 8645,
- "brotli": 3827
+ "min": 8606,
+ "brotli": 3809
},
"files": {
"tags/outer/tags/inner/index.marko": 219,
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-grand-spread/sizes.json b/packages/runtime-tags/src/__tests__/fixtures/persisted-grand-spread/sizes.json
index fd782c0bf5a..18d6102cc97 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-grand-spread/sizes.json
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-grand-spread/sizes.json
@@ -2,8 +2,8 @@
"dom": {
"template.marko.page.mjs": {
"total": {
- "min": 7534,
- "brotli": 3364
+ "min": 7512,
+ "brotli": 3360
},
"files": {
"tags/mid/tags/leaf/index.marko": 163,
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-grand-unfed-structural/sizes.json b/packages/runtime-tags/src/__tests__/fixtures/persisted-grand-unfed-structural/sizes.json
index de8952c118d..44dc4f936d2 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-grand-unfed-structural/sizes.json
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-grand-unfed-structural/sizes.json
@@ -2,8 +2,8 @@
"dom": {
"template.marko.page.mjs": {
"total": {
- "min": 8841,
- "brotli": 3922
+ "min": 8802,
+ "brotli": 3908
},
"files": {
"tags/badge/index.marko": 314,
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-handler-input/sizes.json b/packages/runtime-tags/src/__tests__/fixtures/persisted-handler-input/sizes.json
index f23b7eda774..96b0868fe91 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-handler-input/sizes.json
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-handler-input/sizes.json
@@ -1,8 +1,8 @@
{
"dom": {
"template.marko.page.mjs": {
- "min": 2935,
- "brotli": 1467
+ "min": 2918,
+ "brotli": 1454
}
},
"html": {
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-input-branches/sizes.json b/packages/runtime-tags/src/__tests__/fixtures/persisted-input-branches/sizes.json
index 9f1deb44c6d..6d65c3e1c15 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-input-branches/sizes.json
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-input-branches/sizes.json
@@ -1,8 +1,8 @@
{
"dom": {
"template.marko.page.mjs": {
- "min": 8385,
- "brotli": 3828
+ "min": 8367,
+ "brotli": 3823
}
},
"html": {
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-intersection/sizes.json b/packages/runtime-tags/src/__tests__/fixtures/persisted-intersection/sizes.json
index 19ae151c1ca..ea84d735541 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-intersection/sizes.json
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-intersection/sizes.json
@@ -1,8 +1,8 @@
{
"dom": {
"template.marko.page.mjs": {
- "min": 4029,
- "brotli": 1939
+ "min": 4007,
+ "brotli": 1925
}
},
"html": {
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-lazy-tag-chunk-failed/__snapshots__/dom.bundle.debug.js b/packages/runtime-tags/src/__tests__/fixtures/persisted-lazy-tag-chunk-failed/__snapshots__/dom.bundle.debug.js
new file mode 100644
index 00000000000..96b132f5ae5
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-lazy-tag-chunk-failed/__snapshots__/dom.bundle.debug.js
@@ -0,0 +1,32 @@
+// child.marko
+const $template = "";
+const $walks = " D%c%l";
+const $count = /*@__PURE__*/ _fill_let("__tests__/child.marko0", "count/6", ($scope) => _text($scope["#text/2"], $scope.count));
+const $setup__script = _script("__tests__/child.marko_0", ($scope) => _on($scope["#button/0"], "click", function() {
+ $count($scope, +$scope.count + 1);
+}));
+function $setup($scope) {
+ $count($scope, 0);
+ $setup__script($scope);
+}
+const $input_label = ($scope, input_label) => _text($scope["#text/1"], input_label);
+const $input = ($scope, input) => $input_label($scope, input.label);
+var child_default = /*@__PURE__*/ _template("__tests__/child.marko", $template, $walks, $setup, $input);
+
+// template.marko
+const $template = "";
+const $walks = "D%/&l";
+const $load_Child_trigger = /*@__PURE__*/ _load_event_trigger("click", "body");
+let $load_Child_setup = /*@__PURE__*/ _load_setup("#text/0", "#childScope/1", /*@__PURE__*/ $load_Child_trigger(() => import("./v:child.marko.setup.mjs")), "ready:__tests__/child.marko");
+let $load_Child_tag_input_label = /*@__PURE__*/ _load_signal(/*@__PURE__*/ $load_Child_trigger(() => import("./v:child.marko.input_label.mjs")));
+const $setup = $load_Child_setup;
+const $input_label = ($scope, input_label) => $load_Child_tag_input_label($scope["#childScope/1"], input_label);
+const $input = ($scope, input) => $input_label($scope, input.label);
+var template_default = /*@__PURE__*/ _template("__tests__/template.marko", $template, $walks, $setup, $input);
+
+// v:child.marko.setup.js
+const _ = [
+ $template,
+ $walks,
+ $setup
+];
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-lazy-tag-chunk-failed/__snapshots__/dom.bundle.js b/packages/runtime-tags/src/__tests__/fixtures/persisted-lazy-tag-chunk-failed/__snapshots__/dom.bundle.js
new file mode 100644
index 00000000000..e999323991e
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-lazy-tag-chunk-failed/__snapshots__/dom.bundle.js
@@ -0,0 +1,5 @@
+// child.marko
+const $count = /*@__PURE__*/ _fill_let("a0", 6, ($scope) => _text($scope.c, $scope.g));
+const $setup__script = _script("a0", ($scope) => _on($scope.a, "click", function() {
+ $count($scope, +$scope.g + 1);
+}));
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-lazy-tag-chunk-failed/__snapshots__/html.bundle.debug.js b/packages/runtime-tags/src/__tests__/fixtures/persisted-lazy-tag-chunk-failed/__snapshots__/html.bundle.debug.js
new file mode 100644
index 00000000000..597f4002194
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-lazy-tag-chunk-failed/__snapshots__/html.bundle.debug.js
@@ -0,0 +1,34 @@
+// child.marko
+const $template$1 = "";
+const $walks$1 = " D%c%l";
+_shells({ "__tests__/child.marko": "__tests__/child.marko !__tests__/child.marko_0; D%c%;" });
+var child_default = _template_persisted("__tests__/child.marko", (input) => {
+ const $scope0_owned = _persisted_ownership(), $scope0_reason = _persisted_reason();
+ const $scope0_id = _scope_id();
+ let count = 0;
+ _html(`${_el_resume($scope0_id, "#button/0")}`);
+ _script($scope0_id, "__tests__/child.marko_0");
+ _patch_value($scope0_id, "__tests__/child.marko0", count, 1);
+ $scope0_reason && _scope($scope0_id, { count }, "__tests__/child.marko", 0, { count: "1:6" });
+ _resume_branch($scope0_id);
+}, 0, 0);
+
+// template.marko
+const $Child_withLoadAssets = withLoadAssets(child_default, "ready:__tests__/child.marko", [{
+ type: "on-click",
+ selector: "body"
+}], 1);
+const $template = "";
+const $walks = "D%/&l";
+_shells({ "__tests__/template.marko": "__tests__/template.marko __tests__/template.marko_0_#text#0/init;D%/&;" });
+var template_default = _template_persisted("__tests__/template.marko", (input) => {
+ const $scope0_owned = _persisted_ownership(), $scope0_reason = _persisted_reason();
+ const $scope0_id = _scope_id();
+ _html("");
+ _set_serialize_reason({ 0: _mask_group($scope0_owned, 0) });
+ const $childScope = _peek_scope_id();
+ _patch_child($scope0_id, "#childScope/1", $childScope);
+ $Child_withLoadAssets({ label: input.label });
+ _html("");
+ $scope0_reason && _scope($scope0_id, { "#childScope/1": _existing_scope($childScope) }, "__tests__/template.marko", 0);
+}, 1, () => [$Child_withLoadAssets]);
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-lazy-tag-chunk-failed/__snapshots__/html.bundle.js b/packages/runtime-tags/src/__tests__/fixtures/persisted-lazy-tag-chunk-failed/__snapshots__/html.bundle.js
new file mode 100644
index 00000000000..972f3a9d324
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-lazy-tag-chunk-failed/__snapshots__/html.bundle.js
@@ -0,0 +1,30 @@
+// child.marko
+_shells({ a: "a !a0; D%c%;" });
+var child_default = _template_persisted("a", (input) => {
+ const $scope0_owned = _persisted_ownership(), $scope0_reason = _persisted_reason();
+ const $scope0_id = _scope_id();
+ let count = 0;
+ _html(`${_el_resume($scope0_id, "a")}`);
+ _script($scope0_id, "a0");
+ _patch_value($scope0_id, "a0", count, 1);
+ $scope0_reason && _scope($scope0_id, { g: count });
+ _resume_branch($scope0_id);
+}, 0, 0);
+
+// template.marko
+const $Child_withLoadAssets = withLoadAssets(child_default, "_a", [{
+ type: "on-click",
+ selector: "body"
+}], 1);
+_shells({ b: "b b1;D%/&;" });
+var template_default = _template_persisted("b", (input) => {
+ const $scope0_owned = _persisted_ownership(), $scope0_reason = _persisted_reason();
+ const $scope0_id = _scope_id();
+ _html("");
+ _set_serialize_reason({ 0: _mask_group($scope0_owned, 0) });
+ const $childScope = _peek_scope_id();
+ _patch_child($scope0_id, "b", $childScope);
+ $Child_withLoadAssets({ label: input.label });
+ _html("");
+ $scope0_reason && _scope($scope0_id, { b: _existing_scope($childScope) });
+}, 1, () => [$Child_withLoadAssets]);
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-lazy-tag-chunk-failed/__snapshots__/patches.debug.js b/packages/runtime-tags/src/__tests__/fixtures/persisted-lazy-tag-chunk-failed/__snapshots__/patches.debug.js
new file mode 100644
index 00000000000..7426232b28c
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-lazy-tag-chunk-failed/__snapshots__/patches.debug.js
@@ -0,0 +1,8 @@
+// PATCH
+ready({
+ "ready:packages/runtime-tags/src/__tests__/fixtures/persisted-lazy-tag-chunk-failed/child.marko": [{
+ "PatchChild:#childScope/1": {
+ "PatchText:#text/1": "b"
+ }
+ }]
+})
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-lazy-tag-chunk-failed/__snapshots__/patches.js b/packages/runtime-tags/src/__tests__/fixtures/persisted-lazy-tag-chunk-failed/__snapshots__/patches.js
new file mode 100644
index 00000000000..7960de2f234
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-lazy-tag-chunk-failed/__snapshots__/patches.js
@@ -0,0 +1,8 @@
+// PATCH
+y({
+ _a: [{
+ cb: {
+ tb: "b"
+ }
+ }]
+})
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-lazy-tag-chunk-failed/__snapshots__/render-ssr.debug.md b/packages/runtime-tags/src/__tests__/fixtures/persisted-lazy-tag-chunk-failed/__snapshots__/render-ssr.debug.md
new file mode 100644
index 00000000000..e3c3d1d234e
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-lazy-tag-chunk-failed/__snapshots__/render-ssr.debug.md
@@ -0,0 +1,21 @@
+# Render `{"label":"a"}`
+```html
+
+
+
+```
+
+# Update
+```js
+setTimeout(() => document.body.click());
+```
+
+# Update `{"label":"b"}`
+## Console
+```
+ERROR "The lazy module for \"ready:packages/runtime-tags/src/__tests__/fixtures/persisted-lazy-tag-chunk-failed/child.marko\" failed to load; its server-rendered content cannot become interactive."
+```
+
+## Patch rejected (navigate)
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-lazy-tag-chunk-failed/__snapshots__/render-ssr.md b/packages/runtime-tags/src/__tests__/fixtures/persisted-lazy-tag-chunk-failed/__snapshots__/render-ssr.md
new file mode 100644
index 00000000000..84c11528d88
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-lazy-tag-chunk-failed/__snapshots__/render-ssr.md
@@ -0,0 +1,17 @@
+# Render `{"label":"a"}`
+```html
+
+
+
+```
+
+# Update
+```js
+setTimeout(() => document.body.click());
+```
+
+# Update `{"label":"b"}`
+
+## Patch rejected (navigate)
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-lazy-tag-chunk-failed/__snapshots__/writes.debug.html b/packages/runtime-tags/src/__tests__/fixtures/persisted-lazy-tag-chunk-failed/__snapshots__/writes.debug.html
new file mode 100644
index 00000000000..8904f173a0e
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-lazy-tag-chunk-failed/__snapshots__/writes.debug.html
@@ -0,0 +1,30 @@
+
+
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-lazy-tag-chunk-failed/__snapshots__/writes.html b/packages/runtime-tags/src/__tests__/fixtures/persisted-lazy-tag-chunk-failed/__snapshots__/writes.html
new file mode 100644
index 00000000000..4ce0ed57eb2
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-lazy-tag-chunk-failed/__snapshots__/writes.html
@@ -0,0 +1,21 @@
+
+
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-lazy-tag-chunk-failed/child.marko b/packages/runtime-tags/src/__tests__/fixtures/persisted-lazy-tag-chunk-failed/child.marko
new file mode 100644
index 00000000000..ceb9cd77764
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-lazy-tag-chunk-failed/child.marko
@@ -0,0 +1,2 @@
+
+
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-lazy-tag-chunk-failed/sizes.json b/packages/runtime-tags/src/__tests__/fixtures/persisted-lazy-tag-chunk-failed/sizes.json
new file mode 100644
index 00000000000..10529a1d5cf
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-lazy-tag-chunk-failed/sizes.json
@@ -0,0 +1,28 @@
+{
+ "dom": {
+ "child.marko.load.mjs": {
+ "min": 98,
+ "brotli": 80
+ },
+ "template.marko.page.mjs": {
+ "min": 1945,
+ "brotli": 949
+ },
+ "child.mjs": {
+ "min": 535,
+ "brotli": 326
+ },
+ "shared": {
+ "min": 5686,
+ "brotli": 2610
+ }
+ },
+ "html": {
+ "min": 776,
+ "brotli": 468
+ },
+ "patch": {
+ "min": 24,
+ "brotli": 28
+ }
+}
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-lazy-tag-chunk-failed/template.marko b/packages/runtime-tags/src/__tests__/fixtures/persisted-lazy-tag-chunk-failed/template.marko
new file mode 100644
index 00000000000..878c4704051
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-lazy-tag-chunk-failed/template.marko
@@ -0,0 +1,3 @@
+import Child from "./child.marko" with { load: "on-click body" }
+
+
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-lazy-tag-chunk-failed/test.ts b/packages/runtime-tags/src/__tests__/fixtures/persisted-lazy-tag-chunk-failed/test.ts
new file mode 100644
index 00000000000..a3700ec608a
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-lazy-tag-chunk-failed/test.ts
@@ -0,0 +1,19 @@
+import type { TestConfig } from "../../main.test";
+
+const load = (document: Document) => {
+ setTimeout(() => document.body.click());
+};
+
+// A patch defers on the lazy channel; the loader script evaluates but its
+// inner template chunk import rejects (deploy skew): the load entry reports
+// the failure so the pending `applyPatch` promise settles as rejected (the
+// caller navigates) instead of hanging.
+export const config: TestConfig = {
+ // Debug intentionally logs the load-failure diagnostic optimize cannot.
+ skip_parity: true,
+ persisted: true,
+ equivalent: false,
+ expect_rejection: true,
+ reject_load: ["child.mjs"],
+ steps: [{ label: "a" }, load, { label: "b" }],
+};
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-lazy-tag-conditional/__snapshots__/dom.bundle.debug.js b/packages/runtime-tags/src/__tests__/fixtures/persisted-lazy-tag-conditional/__snapshots__/dom.bundle.debug.js
index 35c27c1dba9..12be49e6eff 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-lazy-tag-conditional/__snapshots__/dom.bundle.debug.js
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-lazy-tag-conditional/__snapshots__/dom.bundle.debug.js
@@ -18,9 +18,9 @@ const $template = "";
const $walks = " b";
const $setup = () => {};
const $load_Child_trigger = /*@__PURE__*/ _load_event_trigger("click", "body");
-let $load_Child_setup = /*@__PURE__*/ _load_setup("#text/0", "#childScope/1", /*@__PURE__*/ $load_Child_trigger(() => import("./v:child.marko.setup.mjs")));
+let $load_Child_setup = _resume("__tests__/template.marko_1_#text#0/init", /*@__PURE__*/ _load_setup("#text/0", "#childScope/1", /*@__PURE__*/ $load_Child_trigger(() => import("./v:child.marko.setup.mjs")), "ready:__tests__/child.marko"));
let $load_Child_tag_input_label = /*@__PURE__*/ _load_signal(/*@__PURE__*/ $load_Child_trigger(() => import("./v:child.marko.input_label.mjs")));
-const $if_content__input_label = /*@__PURE__*/ _if_closure("#main/0", 0, ($scope) => $load_Child_tag_input_label($scope["#childScope/1"], $scope._.input_label));
+const $if_content__input_label = _resume_init_if_closure("__tests__/template.marko_1_input_label#4/init", "#main/0", 0, ($scope) => $load_Child_tag_input_label($scope["#childScope/1"], $scope._.input_label));
const $if_content__setup = ($scope) => {
$if_content__input_label._($scope);
$load_Child_setup($scope);
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-lazy-tag-conditional/__snapshots__/dom.bundle.js b/packages/runtime-tags/src/__tests__/fixtures/persisted-lazy-tag-conditional/__snapshots__/dom.bundle.js
index e999323991e..3317fa09712 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-lazy-tag-conditional/__snapshots__/dom.bundle.js
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-lazy-tag-conditional/__snapshots__/dom.bundle.js
@@ -1,5 +1,25 @@
+// template.marko
+const $load_Child_trigger = /*@__PURE__*/ _load_event_trigger("click", "body");
+let $load_Child_setup = _resume("b3", /*@__PURE__*/ _load_setup(0, 1, /*@__PURE__*/ $load_Child_trigger(() => import("./v:child.marko.setup.mjs")), "_a"));
+let $load_Child_tag_input_label = /*@__PURE__*/ _load_signal(/*@__PURE__*/ $load_Child_trigger(() => import("./v:child.marko.input_label.mjs")));
+const $if_content__input_label = _init_if_closure("b2", 0, 0, ($scope) => $load_Child_tag_input_label($scope.b, $scope._.e));
+
// child.marko
+const $template = "";
+const $walks = " D%c%l";
const $count = /*@__PURE__*/ _fill_let("a0", 6, ($scope) => _text($scope.c, $scope.g));
const $setup__script = _script("a0", ($scope) => _on($scope.a, "click", function() {
$count($scope, +$scope.g + 1);
}));
+function $setup($scope) {
+ $count($scope, 0);
+ $setup__script($scope);
+}
+const $input_label = ($scope, input_label) => _text($scope.b, input_label);
+
+// v:child.marko.setup.js
+const _ = [
+ $template,
+ $walks,
+ $setup
+];
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-lazy-tag-conditional/__snapshots__/html.bundle.debug.js b/packages/runtime-tags/src/__tests__/fixtures/persisted-lazy-tag-conditional/__snapshots__/html.bundle.debug.js
index 6b0c0ce2791..74b552203f7 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-lazy-tag-conditional/__snapshots__/html.bundle.debug.js
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-lazy-tag-conditional/__snapshots__/html.bundle.debug.js
@@ -17,10 +17,13 @@ var child_default = _template_persisted("__tests__/child.marko", (input) => {
const $Child_withLoadAssets = withLoadAssets(child_default, "ready:__tests__/child.marko", [{
type: "on-click",
selector: "body"
-}]);
+}], 1);
const $template = "";
const $walks = " b";
-_shells({ "__tests__/template.marko": "__tests__/template.marko; ;" });
+_shells({
+ "__tests__/template.marko": "__tests__/template.marko; ;",
+ "__tests__/template.marko_1*shell": "__tests__/template.marko_1*shell __tests__/template.marko_1_input_label#4/init __tests__/template.marko_1_#text#0/init;b%/&;"
+});
var template_default = _template_persisted("__tests__/template.marko", (input) => {
const $scope0_owned = _persisted_ownership(), $scope0_reason = _persisted_reason(), $sg__input_show = _source_guard($scope0_reason, 1);
const $scope0_id = _scope_id();
@@ -38,7 +41,7 @@ var template_default = _template_persisted("__tests__/template.marko", (input) =
}, "__tests__/template.marko", "4:4");
return 0;
}
- }, $scope0_id, "#main/0", 1, $sg__input_show, $sg__input_show, void 0, void 0, [0]);
+ }, $scope0_id, "#main/0", 1, $sg__input_show, $sg__input_show, void 0, void 0, ["__tests__/template.marko_1*shell"]);
_html(`${_el_resume($scope0_id, "#main/0", $sg__input_show)}`);
$scope0_reason && _scope($scope0_id, { input_label: input.label }, "__tests__/template.marko", 0, { input_label: ["input.label"] });
}, 1, () => [$Child_withLoadAssets]);
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-lazy-tag-conditional/__snapshots__/html.bundle.js b/packages/runtime-tags/src/__tests__/fixtures/persisted-lazy-tag-conditional/__snapshots__/html.bundle.js
index e79988d91aa..b2bd4f35f09 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-lazy-tag-conditional/__snapshots__/html.bundle.js
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-lazy-tag-conditional/__snapshots__/html.bundle.js
@@ -15,8 +15,11 @@ var child_default = _template_persisted("a", (input) => {
const $Child_withLoadAssets = withLoadAssets(child_default, "_a", [{
type: "on-click",
selector: "body"
-}]);
-_shells({ b: "b; ;" });
+}], 1);
+_shells({
+ b: "b; ;",
+ b0: "b0 b2 b3;b%/&;"
+});
var template_default = _template_persisted("b", (input) => {
const $scope0_owned = _persisted_ownership(), $scope0_reason = _persisted_reason(), $sg__input_show = _source_guard($scope0_reason, 1);
const $scope0_id = _scope_id();
@@ -34,7 +37,7 @@ var template_default = _template_persisted("b", (input) => {
});
return 0;
}
- }, $scope0_id, "a", 1, $sg__input_show, $sg__input_show, void 0, void 0, [0]);
+ }, $scope0_id, "a", 1, $sg__input_show, $sg__input_show, void 0, void 0, ["b0"]);
_html(`${_el_resume($scope0_id, "a", $sg__input_show)}`);
$scope0_reason && _scope($scope0_id, { e: input.label });
}, 1, () => [$Child_withLoadAssets]);
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-lazy-tag-conditional/__snapshots__/patches.debug.js b/packages/runtime-tags/src/__tests__/fixtures/persisted-lazy-tag-conditional/__snapshots__/patches.debug.js
index e2351ca8920..bc1cd45ce26 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-lazy-tag-conditional/__snapshots__/patches.debug.js
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-lazy-tag-conditional/__snapshots__/patches.debug.js
@@ -1,7 +1,7 @@
// PATCH
-ready({
+(ready({
"ready:packages/runtime-tags/src/__tests__/fixtures/persisted-lazy-tag-conditional/child.marko": [{
- "PatchBranch:#main/0": [{
+ "PatchChild:BranchScopes:#main/0": {
"PatchChild:#childScope/1": {
"PatchText:#text/1": "b",
"PatchSetup:": {
@@ -9,9 +9,11 @@ ready({
"PatchValue:packages/runtime-tags/src/__tests__/fixtures/persisted-lazy-tag-conditional/child.marko0": 0
}
}
- }]
+ }
}]
-})
+}), [`packages/runtime-tags/src/__tests__/fixtures/persisted-lazy-tag-conditional/template.marko_1*shell packages/runtime-tags/src/__tests__/fixtures/persisted-lazy-tag-conditional/template.marko_1_input_label#4/init packages/runtime-tags/src/__tests__/fixtures/persisted-lazy-tag-conditional/template.marko_1_#text#0/init;b%/&;`, {
+ "PatchBranch:#main/0": "packages/runtime-tags/src/__tests__/fixtures/persisted-lazy-tag-conditional/template.marko_1*shell"
+}])
// PATCH
{
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-lazy-tag-conditional/__snapshots__/patches.js b/packages/runtime-tags/src/__tests__/fixtures/persisted-lazy-tag-conditional/__snapshots__/patches.js
index d7e0f1a9d67..eee3d760c69 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-lazy-tag-conditional/__snapshots__/patches.js
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-lazy-tag-conditional/__snapshots__/patches.js
@@ -1,7 +1,7 @@
// PATCH
-y({
+(y({
_a: [{
- ba: [{
+ cAa: {
cb: {
tb: "b",
s: {
@@ -9,9 +9,11 @@ y({
va0: 0
}
}
- }]
+ }
}]
-})
+}), [`b0 b2 b3;b%/&;`, {
+ ba: "b0"
+}])
// PATCH
{
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-lazy-tag-conditional/__snapshots__/render-ssr.debug.md b/packages/runtime-tags/src/__tests__/fixtures/persisted-lazy-tag-conditional/__snapshots__/render-ssr.debug.md
index e966bd0e7bc..3d911cd029f 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-lazy-tag-conditional/__snapshots__/render-ssr.debug.md
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-lazy-tag-conditional/__snapshots__/render-ssr.debug.md
@@ -13,17 +13,6 @@ setTimeout(() => document.body.click());
```
# Update `{"show":true,"label":"b"}`
-```html
-
-
-
-```
-## Change
-```
-UPDATE: main > button::text@0 "a" => "b"
-```
# Update
```js
@@ -32,7 +21,7 @@ document.querySelector("button").click();
```html
```
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-lazy-tag-conditional/__snapshots__/render-ssr.md b/packages/runtime-tags/src/__tests__/fixtures/persisted-lazy-tag-conditional/__snapshots__/render-ssr.md
index e966bd0e7bc..3d911cd029f 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-lazy-tag-conditional/__snapshots__/render-ssr.md
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-lazy-tag-conditional/__snapshots__/render-ssr.md
@@ -13,17 +13,6 @@ setTimeout(() => document.body.click());
```
# Update `{"show":true,"label":"b"}`
-```html
-
-
-
-```
-## Change
-```
-UPDATE: main > button::text@0 "a" => "b"
-```
# Update
```js
@@ -32,7 +21,7 @@ document.querySelector("button").click();
```html
```
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-lazy-tag-conditional/__snapshots__/writes.debug.html b/packages/runtime-tags/src/__tests__/fixtures/persisted-lazy-tag-conditional/__snapshots__/writes.debug.html
index 82bb6a3a0c6..4d8721427c3 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-lazy-tag-conditional/__snapshots__/writes.debug.html
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-lazy-tag-conditional/__snapshots__/writes.debug.html
@@ -4,9 +4,11 @@
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-lazy-tag-construct/__snapshots__/writes.html b/packages/runtime-tags/src/__tests__/fixtures/persisted-lazy-tag-construct/__snapshots__/writes.html
new file mode 100644
index 00000000000..7ad6fe0a4a1
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-lazy-tag-construct/__snapshots__/writes.html
@@ -0,0 +1,8 @@
+
+
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-lazy-tag-construct/child.marko b/packages/runtime-tags/src/__tests__/fixtures/persisted-lazy-tag-construct/child.marko
new file mode 100644
index 00000000000..ceb9cd77764
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-lazy-tag-construct/child.marko
@@ -0,0 +1,2 @@
+
+
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-lazy-tag-construct/sizes.json b/packages/runtime-tags/src/__tests__/fixtures/persisted-lazy-tag-construct/sizes.json
new file mode 100644
index 00000000000..581c1c5acb9
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-lazy-tag-construct/sizes.json
@@ -0,0 +1,32 @@
+{
+ "dom": {
+ "child.marko.load.mjs": {
+ "min": 98,
+ "brotli": 81
+ },
+ "template.marko.page.mjs": {
+ "min": 3978,
+ "brotli": 1919
+ },
+ "child.mjs": {
+ "min": 692,
+ "brotli": 414
+ },
+ "v:child.marko.setup.mjs": {
+ "min": 95,
+ "brotli": 81
+ },
+ "shared": {
+ "min": 8185,
+ "brotli": 3564
+ }
+ },
+ "html": {
+ "min": 342,
+ "brotli": 242
+ },
+ "patch": {
+ "min": 88,
+ "brotli": 80
+ }
+}
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-lazy-tag-construct/template.marko b/packages/runtime-tags/src/__tests__/fixtures/persisted-lazy-tag-construct/template.marko
new file mode 100644
index 00000000000..d733dd19d5d
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-lazy-tag-construct/template.marko
@@ -0,0 +1,7 @@
+import Child from "./child.marko" with { load: "render" }
+
+
+
+
+
+
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-lazy-tag-construct/test.ts b/packages/runtime-tags/src/__tests__/fixtures/persisted-lazy-tag-construct/test.ts
new file mode 100644
index 00000000000..6c7590b55d8
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-lazy-tag-construct/test.ts
@@ -0,0 +1,16 @@
+import type { TestConfig } from "../../main.test";
+import { wait } from "../../utils/resolve";
+
+// A patch REVEALS the branch holding a not-yet-loaded lazy child: the shell
+// ships the site's marker only, the construct starts the client-side load,
+// and the loaded module drives the child's ready channel so the deferred
+// frame data drains and the page becomes interactive.
+export const config: TestConfig = {
+ persisted: true,
+ equivalent: false,
+ steps: [{ show: false, label: "a" }, { show: true, label: "a" }, wait, click],
+};
+
+function click(document: Document) {
+ document.querySelector("button")!.click();
+}
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-lazy-tag-failed-before-patch/__snapshots__/dom.bundle.debug.js b/packages/runtime-tags/src/__tests__/fixtures/persisted-lazy-tag-failed-before-patch/__snapshots__/dom.bundle.debug.js
new file mode 100644
index 00000000000..96b132f5ae5
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-lazy-tag-failed-before-patch/__snapshots__/dom.bundle.debug.js
@@ -0,0 +1,32 @@
+// child.marko
+const $template = "";
+const $walks = " D%c%l";
+const $count = /*@__PURE__*/ _fill_let("__tests__/child.marko0", "count/6", ($scope) => _text($scope["#text/2"], $scope.count));
+const $setup__script = _script("__tests__/child.marko_0", ($scope) => _on($scope["#button/0"], "click", function() {
+ $count($scope, +$scope.count + 1);
+}));
+function $setup($scope) {
+ $count($scope, 0);
+ $setup__script($scope);
+}
+const $input_label = ($scope, input_label) => _text($scope["#text/1"], input_label);
+const $input = ($scope, input) => $input_label($scope, input.label);
+var child_default = /*@__PURE__*/ _template("__tests__/child.marko", $template, $walks, $setup, $input);
+
+// template.marko
+const $template = "";
+const $walks = "D%/&l";
+const $load_Child_trigger = /*@__PURE__*/ _load_event_trigger("click", "body");
+let $load_Child_setup = /*@__PURE__*/ _load_setup("#text/0", "#childScope/1", /*@__PURE__*/ $load_Child_trigger(() => import("./v:child.marko.setup.mjs")), "ready:__tests__/child.marko");
+let $load_Child_tag_input_label = /*@__PURE__*/ _load_signal(/*@__PURE__*/ $load_Child_trigger(() => import("./v:child.marko.input_label.mjs")));
+const $setup = $load_Child_setup;
+const $input_label = ($scope, input_label) => $load_Child_tag_input_label($scope["#childScope/1"], input_label);
+const $input = ($scope, input) => $input_label($scope, input.label);
+var template_default = /*@__PURE__*/ _template("__tests__/template.marko", $template, $walks, $setup, $input);
+
+// v:child.marko.setup.js
+const _ = [
+ $template,
+ $walks,
+ $setup
+];
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-lazy-tag-failed-before-patch/__snapshots__/dom.bundle.js b/packages/runtime-tags/src/__tests__/fixtures/persisted-lazy-tag-failed-before-patch/__snapshots__/dom.bundle.js
new file mode 100644
index 00000000000..e999323991e
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-lazy-tag-failed-before-patch/__snapshots__/dom.bundle.js
@@ -0,0 +1,5 @@
+// child.marko
+const $count = /*@__PURE__*/ _fill_let("a0", 6, ($scope) => _text($scope.c, $scope.g));
+const $setup__script = _script("a0", ($scope) => _on($scope.a, "click", function() {
+ $count($scope, +$scope.g + 1);
+}));
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-lazy-tag-failed-before-patch/__snapshots__/html.bundle.debug.js b/packages/runtime-tags/src/__tests__/fixtures/persisted-lazy-tag-failed-before-patch/__snapshots__/html.bundle.debug.js
new file mode 100644
index 00000000000..597f4002194
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-lazy-tag-failed-before-patch/__snapshots__/html.bundle.debug.js
@@ -0,0 +1,34 @@
+// child.marko
+const $template$1 = "";
+const $walks$1 = " D%c%l";
+_shells({ "__tests__/child.marko": "__tests__/child.marko !__tests__/child.marko_0; D%c%;" });
+var child_default = _template_persisted("__tests__/child.marko", (input) => {
+ const $scope0_owned = _persisted_ownership(), $scope0_reason = _persisted_reason();
+ const $scope0_id = _scope_id();
+ let count = 0;
+ _html(`${_el_resume($scope0_id, "#button/0")}`);
+ _script($scope0_id, "__tests__/child.marko_0");
+ _patch_value($scope0_id, "__tests__/child.marko0", count, 1);
+ $scope0_reason && _scope($scope0_id, { count }, "__tests__/child.marko", 0, { count: "1:6" });
+ _resume_branch($scope0_id);
+}, 0, 0);
+
+// template.marko
+const $Child_withLoadAssets = withLoadAssets(child_default, "ready:__tests__/child.marko", [{
+ type: "on-click",
+ selector: "body"
+}], 1);
+const $template = "";
+const $walks = "D%/&l";
+_shells({ "__tests__/template.marko": "__tests__/template.marko __tests__/template.marko_0_#text#0/init;D%/&;" });
+var template_default = _template_persisted("__tests__/template.marko", (input) => {
+ const $scope0_owned = _persisted_ownership(), $scope0_reason = _persisted_reason();
+ const $scope0_id = _scope_id();
+ _html("");
+ _set_serialize_reason({ 0: _mask_group($scope0_owned, 0) });
+ const $childScope = _peek_scope_id();
+ _patch_child($scope0_id, "#childScope/1", $childScope);
+ $Child_withLoadAssets({ label: input.label });
+ _html("");
+ $scope0_reason && _scope($scope0_id, { "#childScope/1": _existing_scope($childScope) }, "__tests__/template.marko", 0);
+}, 1, () => [$Child_withLoadAssets]);
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-lazy-tag-failed-before-patch/__snapshots__/html.bundle.js b/packages/runtime-tags/src/__tests__/fixtures/persisted-lazy-tag-failed-before-patch/__snapshots__/html.bundle.js
new file mode 100644
index 00000000000..972f3a9d324
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-lazy-tag-failed-before-patch/__snapshots__/html.bundle.js
@@ -0,0 +1,30 @@
+// child.marko
+_shells({ a: "a !a0; D%c%;" });
+var child_default = _template_persisted("a", (input) => {
+ const $scope0_owned = _persisted_ownership(), $scope0_reason = _persisted_reason();
+ const $scope0_id = _scope_id();
+ let count = 0;
+ _html(`${_el_resume($scope0_id, "a")}`);
+ _script($scope0_id, "a0");
+ _patch_value($scope0_id, "a0", count, 1);
+ $scope0_reason && _scope($scope0_id, { g: count });
+ _resume_branch($scope0_id);
+}, 0, 0);
+
+// template.marko
+const $Child_withLoadAssets = withLoadAssets(child_default, "_a", [{
+ type: "on-click",
+ selector: "body"
+}], 1);
+_shells({ b: "b b1;D%/&;" });
+var template_default = _template_persisted("b", (input) => {
+ const $scope0_owned = _persisted_ownership(), $scope0_reason = _persisted_reason();
+ const $scope0_id = _scope_id();
+ _html("");
+ _set_serialize_reason({ 0: _mask_group($scope0_owned, 0) });
+ const $childScope = _peek_scope_id();
+ _patch_child($scope0_id, "b", $childScope);
+ $Child_withLoadAssets({ label: input.label });
+ _html("");
+ $scope0_reason && _scope($scope0_id, { b: _existing_scope($childScope) });
+}, 1, () => [$Child_withLoadAssets]);
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-lazy-tag-failed-before-patch/__snapshots__/patches.debug.js b/packages/runtime-tags/src/__tests__/fixtures/persisted-lazy-tag-failed-before-patch/__snapshots__/patches.debug.js
new file mode 100644
index 00000000000..41a5f50cb01
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-lazy-tag-failed-before-patch/__snapshots__/patches.debug.js
@@ -0,0 +1,8 @@
+// PATCH
+ready({
+ "ready:packages/runtime-tags/src/__tests__/fixtures/persisted-lazy-tag-failed-before-patch/child.marko": [{
+ "PatchChild:#childScope/1": {
+ "PatchText:#text/1": "b"
+ }
+ }]
+})
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-lazy-tag-failed-before-patch/__snapshots__/patches.js b/packages/runtime-tags/src/__tests__/fixtures/persisted-lazy-tag-failed-before-patch/__snapshots__/patches.js
new file mode 100644
index 00000000000..7960de2f234
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-lazy-tag-failed-before-patch/__snapshots__/patches.js
@@ -0,0 +1,8 @@
+// PATCH
+y({
+ _a: [{
+ cb: {
+ tb: "b"
+ }
+ }]
+})
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-lazy-tag-failed-before-patch/__snapshots__/render-ssr.debug.md b/packages/runtime-tags/src/__tests__/fixtures/persisted-lazy-tag-failed-before-patch/__snapshots__/render-ssr.debug.md
new file mode 100644
index 00000000000..82cd59d54bc
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-lazy-tag-failed-before-patch/__snapshots__/render-ssr.debug.md
@@ -0,0 +1,23 @@
+# Render `{"label":"a"}`
+```html
+
+
+
+```
+
+# Update
+```js
+setTimeout(() => document.body.click());
+```
+
+# Update
+## Console
+```
+ERROR "The lazy module for \"ready:packages/runtime-tags/src/__tests__/fixtures/persisted-lazy-tag-failed-before-patch/child.marko\" failed to load; its server-rendered content cannot become interactive."
+```
+
+# Update `{"label":"b"}`
+
+## Patch rejected (navigate)
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-lazy-tag-failed-before-patch/__snapshots__/render-ssr.md b/packages/runtime-tags/src/__tests__/fixtures/persisted-lazy-tag-failed-before-patch/__snapshots__/render-ssr.md
new file mode 100644
index 00000000000..84c11528d88
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-lazy-tag-failed-before-patch/__snapshots__/render-ssr.md
@@ -0,0 +1,17 @@
+# Render `{"label":"a"}`
+```html
+
+
+
+```
+
+# Update
+```js
+setTimeout(() => document.body.click());
+```
+
+# Update `{"label":"b"}`
+
+## Patch rejected (navigate)
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-lazy-tag-failed-before-patch/__snapshots__/writes.debug.html b/packages/runtime-tags/src/__tests__/fixtures/persisted-lazy-tag-failed-before-patch/__snapshots__/writes.debug.html
new file mode 100644
index 00000000000..812bb2227a6
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-lazy-tag-failed-before-patch/__snapshots__/writes.debug.html
@@ -0,0 +1,30 @@
+
+
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-lazy-tag-failed-before-patch/__snapshots__/writes.html b/packages/runtime-tags/src/__tests__/fixtures/persisted-lazy-tag-failed-before-patch/__snapshots__/writes.html
new file mode 100644
index 00000000000..4ce0ed57eb2
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-lazy-tag-failed-before-patch/__snapshots__/writes.html
@@ -0,0 +1,21 @@
+
+
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-lazy-tag-failed-before-patch/child.marko b/packages/runtime-tags/src/__tests__/fixtures/persisted-lazy-tag-failed-before-patch/child.marko
new file mode 100644
index 00000000000..ceb9cd77764
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-lazy-tag-failed-before-patch/child.marko
@@ -0,0 +1,2 @@
+
+
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-lazy-tag-failed-before-patch/sizes.json b/packages/runtime-tags/src/__tests__/fixtures/persisted-lazy-tag-failed-before-patch/sizes.json
new file mode 100644
index 00000000000..10529a1d5cf
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-lazy-tag-failed-before-patch/sizes.json
@@ -0,0 +1,28 @@
+{
+ "dom": {
+ "child.marko.load.mjs": {
+ "min": 98,
+ "brotli": 80
+ },
+ "template.marko.page.mjs": {
+ "min": 1945,
+ "brotli": 949
+ },
+ "child.mjs": {
+ "min": 535,
+ "brotli": 326
+ },
+ "shared": {
+ "min": 5686,
+ "brotli": 2610
+ }
+ },
+ "html": {
+ "min": 776,
+ "brotli": 468
+ },
+ "patch": {
+ "min": 24,
+ "brotli": 28
+ }
+}
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-lazy-tag-failed-before-patch/template.marko b/packages/runtime-tags/src/__tests__/fixtures/persisted-lazy-tag-failed-before-patch/template.marko
new file mode 100644
index 00000000000..878c4704051
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-lazy-tag-failed-before-patch/template.marko
@@ -0,0 +1,3 @@
+import Child from "./child.marko" with { load: "on-click body" }
+
+
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-lazy-tag-failed-before-patch/test.ts b/packages/runtime-tags/src/__tests__/fixtures/persisted-lazy-tag-failed-before-patch/test.ts
new file mode 100644
index 00000000000..297e4f402a1
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-lazy-tag-failed-before-patch/test.ts
@@ -0,0 +1,19 @@
+import type { TestConfig } from "../../main.test";
+import { wait } from "../../utils/resolve";
+
+const load = (document: Document) => {
+ setTimeout(() => document.body.click());
+};
+
+// The lazy chunk fails with NO patch pending on its channel: the page must
+// stay as it is (no reload), and a later frame naming the dead channel
+// rejects into navigation instead of parking forever.
+export const config: TestConfig = {
+ // Debug intentionally logs the load-failure diagnostic optimize cannot.
+ skip_parity: true,
+ persisted: true,
+ equivalent: false,
+ expect_rejection: true,
+ reject_load: ["child.mjs"],
+ steps: [{ label: "a" }, load, wait, { label: "b" }],
+};
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-lazy-tag-load-failed/__snapshots__/dom.bundle.debug.js b/packages/runtime-tags/src/__tests__/fixtures/persisted-lazy-tag-load-failed/__snapshots__/dom.bundle.debug.js
new file mode 100644
index 00000000000..96b132f5ae5
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-lazy-tag-load-failed/__snapshots__/dom.bundle.debug.js
@@ -0,0 +1,32 @@
+// child.marko
+const $template = "";
+const $walks = " D%c%l";
+const $count = /*@__PURE__*/ _fill_let("__tests__/child.marko0", "count/6", ($scope) => _text($scope["#text/2"], $scope.count));
+const $setup__script = _script("__tests__/child.marko_0", ($scope) => _on($scope["#button/0"], "click", function() {
+ $count($scope, +$scope.count + 1);
+}));
+function $setup($scope) {
+ $count($scope, 0);
+ $setup__script($scope);
+}
+const $input_label = ($scope, input_label) => _text($scope["#text/1"], input_label);
+const $input = ($scope, input) => $input_label($scope, input.label);
+var child_default = /*@__PURE__*/ _template("__tests__/child.marko", $template, $walks, $setup, $input);
+
+// template.marko
+const $template = "";
+const $walks = "D%/&l";
+const $load_Child_trigger = /*@__PURE__*/ _load_event_trigger("click", "body");
+let $load_Child_setup = /*@__PURE__*/ _load_setup("#text/0", "#childScope/1", /*@__PURE__*/ $load_Child_trigger(() => import("./v:child.marko.setup.mjs")), "ready:__tests__/child.marko");
+let $load_Child_tag_input_label = /*@__PURE__*/ _load_signal(/*@__PURE__*/ $load_Child_trigger(() => import("./v:child.marko.input_label.mjs")));
+const $setup = $load_Child_setup;
+const $input_label = ($scope, input_label) => $load_Child_tag_input_label($scope["#childScope/1"], input_label);
+const $input = ($scope, input) => $input_label($scope, input.label);
+var template_default = /*@__PURE__*/ _template("__tests__/template.marko", $template, $walks, $setup, $input);
+
+// v:child.marko.setup.js
+const _ = [
+ $template,
+ $walks,
+ $setup
+];
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-lazy-tag-load-failed/__snapshots__/dom.bundle.js b/packages/runtime-tags/src/__tests__/fixtures/persisted-lazy-tag-load-failed/__snapshots__/dom.bundle.js
new file mode 100644
index 00000000000..e999323991e
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-lazy-tag-load-failed/__snapshots__/dom.bundle.js
@@ -0,0 +1,5 @@
+// child.marko
+const $count = /*@__PURE__*/ _fill_let("a0", 6, ($scope) => _text($scope.c, $scope.g));
+const $setup__script = _script("a0", ($scope) => _on($scope.a, "click", function() {
+ $count($scope, +$scope.g + 1);
+}));
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-lazy-tag-load-failed/__snapshots__/html.bundle.debug.js b/packages/runtime-tags/src/__tests__/fixtures/persisted-lazy-tag-load-failed/__snapshots__/html.bundle.debug.js
new file mode 100644
index 00000000000..597f4002194
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-lazy-tag-load-failed/__snapshots__/html.bundle.debug.js
@@ -0,0 +1,34 @@
+// child.marko
+const $template$1 = "";
+const $walks$1 = " D%c%l";
+_shells({ "__tests__/child.marko": "__tests__/child.marko !__tests__/child.marko_0; D%c%;" });
+var child_default = _template_persisted("__tests__/child.marko", (input) => {
+ const $scope0_owned = _persisted_ownership(), $scope0_reason = _persisted_reason();
+ const $scope0_id = _scope_id();
+ let count = 0;
+ _html(`${_el_resume($scope0_id, "#button/0")}`);
+ _script($scope0_id, "__tests__/child.marko_0");
+ _patch_value($scope0_id, "__tests__/child.marko0", count, 1);
+ $scope0_reason && _scope($scope0_id, { count }, "__tests__/child.marko", 0, { count: "1:6" });
+ _resume_branch($scope0_id);
+}, 0, 0);
+
+// template.marko
+const $Child_withLoadAssets = withLoadAssets(child_default, "ready:__tests__/child.marko", [{
+ type: "on-click",
+ selector: "body"
+}], 1);
+const $template = "";
+const $walks = "D%/&l";
+_shells({ "__tests__/template.marko": "__tests__/template.marko __tests__/template.marko_0_#text#0/init;D%/&;" });
+var template_default = _template_persisted("__tests__/template.marko", (input) => {
+ const $scope0_owned = _persisted_ownership(), $scope0_reason = _persisted_reason();
+ const $scope0_id = _scope_id();
+ _html("");
+ _set_serialize_reason({ 0: _mask_group($scope0_owned, 0) });
+ const $childScope = _peek_scope_id();
+ _patch_child($scope0_id, "#childScope/1", $childScope);
+ $Child_withLoadAssets({ label: input.label });
+ _html("");
+ $scope0_reason && _scope($scope0_id, { "#childScope/1": _existing_scope($childScope) }, "__tests__/template.marko", 0);
+}, 1, () => [$Child_withLoadAssets]);
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-lazy-tag-load-failed/__snapshots__/html.bundle.js b/packages/runtime-tags/src/__tests__/fixtures/persisted-lazy-tag-load-failed/__snapshots__/html.bundle.js
new file mode 100644
index 00000000000..972f3a9d324
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-lazy-tag-load-failed/__snapshots__/html.bundle.js
@@ -0,0 +1,30 @@
+// child.marko
+_shells({ a: "a !a0; D%c%;" });
+var child_default = _template_persisted("a", (input) => {
+ const $scope0_owned = _persisted_ownership(), $scope0_reason = _persisted_reason();
+ const $scope0_id = _scope_id();
+ let count = 0;
+ _html(`${_el_resume($scope0_id, "a")}`);
+ _script($scope0_id, "a0");
+ _patch_value($scope0_id, "a0", count, 1);
+ $scope0_reason && _scope($scope0_id, { g: count });
+ _resume_branch($scope0_id);
+}, 0, 0);
+
+// template.marko
+const $Child_withLoadAssets = withLoadAssets(child_default, "_a", [{
+ type: "on-click",
+ selector: "body"
+}], 1);
+_shells({ b: "b b1;D%/&;" });
+var template_default = _template_persisted("b", (input) => {
+ const $scope0_owned = _persisted_ownership(), $scope0_reason = _persisted_reason();
+ const $scope0_id = _scope_id();
+ _html("");
+ _set_serialize_reason({ 0: _mask_group($scope0_owned, 0) });
+ const $childScope = _peek_scope_id();
+ _patch_child($scope0_id, "b", $childScope);
+ $Child_withLoadAssets({ label: input.label });
+ _html("");
+ $scope0_reason && _scope($scope0_id, { b: _existing_scope($childScope) });
+}, 1, () => [$Child_withLoadAssets]);
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-lazy-tag-load-failed/__snapshots__/patches.debug.js b/packages/runtime-tags/src/__tests__/fixtures/persisted-lazy-tag-load-failed/__snapshots__/patches.debug.js
new file mode 100644
index 00000000000..afac4e46c91
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-lazy-tag-load-failed/__snapshots__/patches.debug.js
@@ -0,0 +1,8 @@
+// PATCH
+ready({
+ "ready:packages/runtime-tags/src/__tests__/fixtures/persisted-lazy-tag-load-failed/child.marko": [{
+ "PatchChild:#childScope/1": {
+ "PatchText:#text/1": "b"
+ }
+ }]
+})
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-lazy-tag-load-failed/__snapshots__/patches.js b/packages/runtime-tags/src/__tests__/fixtures/persisted-lazy-tag-load-failed/__snapshots__/patches.js
new file mode 100644
index 00000000000..7960de2f234
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-lazy-tag-load-failed/__snapshots__/patches.js
@@ -0,0 +1,8 @@
+// PATCH
+y({
+ _a: [{
+ cb: {
+ tb: "b"
+ }
+ }]
+})
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-lazy-tag-load-failed/__snapshots__/render-ssr.debug.md b/packages/runtime-tags/src/__tests__/fixtures/persisted-lazy-tag-load-failed/__snapshots__/render-ssr.debug.md
new file mode 100644
index 00000000000..372aa65f749
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-lazy-tag-load-failed/__snapshots__/render-ssr.debug.md
@@ -0,0 +1,22 @@
+# Render `{"label":"a"}`
+```html
+
+
+
+```
+
+# Update
+```js
+setTimeout(() => document.body.click());
+```
+
+# Update `{"label":"b"}`
+## Console
+```
+ERROR "The lazy module for \"ready:packages/runtime-tags/src/__tests__/fixtures/persisted-lazy-tag-load-failed/child.marko\" failed to load; its server-rendered content cannot become interactive."
+ERROR "The lazy module for \"ready:packages/runtime-tags/src/__tests__/fixtures/persisted-lazy-tag-load-failed/child.marko\" failed to load; its server-rendered content cannot become interactive."
+```
+
+## Patch rejected (navigate)
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-lazy-tag-load-failed/__snapshots__/render-ssr.md b/packages/runtime-tags/src/__tests__/fixtures/persisted-lazy-tag-load-failed/__snapshots__/render-ssr.md
new file mode 100644
index 00000000000..84c11528d88
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-lazy-tag-load-failed/__snapshots__/render-ssr.md
@@ -0,0 +1,17 @@
+# Render `{"label":"a"}`
+```html
+
+
+
+```
+
+# Update
+```js
+setTimeout(() => document.body.click());
+```
+
+# Update `{"label":"b"}`
+
+## Patch rejected (navigate)
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-lazy-tag-load-failed/__snapshots__/writes.debug.html b/packages/runtime-tags/src/__tests__/fixtures/persisted-lazy-tag-load-failed/__snapshots__/writes.debug.html
new file mode 100644
index 00000000000..cbe1c181af9
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-lazy-tag-load-failed/__snapshots__/writes.debug.html
@@ -0,0 +1,30 @@
+
+
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-lazy-tag-load-failed/__snapshots__/writes.html b/packages/runtime-tags/src/__tests__/fixtures/persisted-lazy-tag-load-failed/__snapshots__/writes.html
new file mode 100644
index 00000000000..4ce0ed57eb2
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-lazy-tag-load-failed/__snapshots__/writes.html
@@ -0,0 +1,21 @@
+
+
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-lazy-tag-load-failed/child.marko b/packages/runtime-tags/src/__tests__/fixtures/persisted-lazy-tag-load-failed/child.marko
new file mode 100644
index 00000000000..ceb9cd77764
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-lazy-tag-load-failed/child.marko
@@ -0,0 +1,2 @@
+
+
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-lazy-tag-load-failed/sizes.json b/packages/runtime-tags/src/__tests__/fixtures/persisted-lazy-tag-load-failed/sizes.json
new file mode 100644
index 00000000000..10529a1d5cf
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-lazy-tag-load-failed/sizes.json
@@ -0,0 +1,28 @@
+{
+ "dom": {
+ "child.marko.load.mjs": {
+ "min": 98,
+ "brotli": 80
+ },
+ "template.marko.page.mjs": {
+ "min": 1945,
+ "brotli": 949
+ },
+ "child.mjs": {
+ "min": 535,
+ "brotli": 326
+ },
+ "shared": {
+ "min": 5686,
+ "brotli": 2610
+ }
+ },
+ "html": {
+ "min": 776,
+ "brotli": 468
+ },
+ "patch": {
+ "min": 24,
+ "brotli": 28
+ }
+}
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-lazy-tag-load-failed/template.marko b/packages/runtime-tags/src/__tests__/fixtures/persisted-lazy-tag-load-failed/template.marko
new file mode 100644
index 00000000000..878c4704051
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-lazy-tag-load-failed/template.marko
@@ -0,0 +1,3 @@
+import Child from "./child.marko" with { load: "on-click body" }
+
+
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-lazy-tag-load-failed/test.ts b/packages/runtime-tags/src/__tests__/fixtures/persisted-lazy-tag-load-failed/test.ts
new file mode 100644
index 00000000000..c296b5353ca
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-lazy-tag-load-failed/test.ts
@@ -0,0 +1,19 @@
+import type { TestConfig } from "../../main.test";
+
+const load = (document: Document) => {
+ setTimeout(() => document.body.click());
+};
+
+// A patch defers on the lazy channel, then the loader SCRIPT fails at the
+// network level (script error, no evaluation): the
+// pending `applyPatch` promise settles as rejected (the caller navigates)
+// instead of hanging, and later frames naming the channel reject outright.
+export const config: TestConfig = {
+ // Debug intentionally logs the load-failure diagnostic optimize cannot.
+ skip_parity: true,
+ persisted: true,
+ equivalent: false,
+ expect_rejection: true,
+ reject_load: ["load.mjs"],
+ steps: [{ label: "a" }, load, { label: "b" }],
+};
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-lazy-tag-pending/__snapshots__/dom.bundle.debug.js b/packages/runtime-tags/src/__tests__/fixtures/persisted-lazy-tag-pending/__snapshots__/dom.bundle.debug.js
index 7773ef04318..96b132f5ae5 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-lazy-tag-pending/__snapshots__/dom.bundle.debug.js
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-lazy-tag-pending/__snapshots__/dom.bundle.debug.js
@@ -17,7 +17,7 @@ var child_default = /*@__PURE__*/ _template("__tests__/child.marko", $template,
const $template = "";
const $walks = "D%/&l";
const $load_Child_trigger = /*@__PURE__*/ _load_event_trigger("click", "body");
-let $load_Child_setup = /*@__PURE__*/ _load_setup("#text/0", "#childScope/1", /*@__PURE__*/ $load_Child_trigger(() => import("./v:child.marko.setup.mjs")));
+let $load_Child_setup = /*@__PURE__*/ _load_setup("#text/0", "#childScope/1", /*@__PURE__*/ $load_Child_trigger(() => import("./v:child.marko.setup.mjs")), "ready:__tests__/child.marko");
let $load_Child_tag_input_label = /*@__PURE__*/ _load_signal(/*@__PURE__*/ $load_Child_trigger(() => import("./v:child.marko.input_label.mjs")));
const $setup = $load_Child_setup;
const $input_label = ($scope, input_label) => $load_Child_tag_input_label($scope["#childScope/1"], input_label);
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-lazy-tag-pending/__snapshots__/html.bundle.debug.js b/packages/runtime-tags/src/__tests__/fixtures/persisted-lazy-tag-pending/__snapshots__/html.bundle.debug.js
index e3a3c2cf7de..597f4002194 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-lazy-tag-pending/__snapshots__/html.bundle.debug.js
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-lazy-tag-pending/__snapshots__/html.bundle.debug.js
@@ -17,9 +17,10 @@ var child_default = _template_persisted("__tests__/child.marko", (input) => {
const $Child_withLoadAssets = withLoadAssets(child_default, "ready:__tests__/child.marko", [{
type: "on-click",
selector: "body"
-}]);
+}], 1);
const $template = "";
const $walks = "D%/&l";
+_shells({ "__tests__/template.marko": "__tests__/template.marko __tests__/template.marko_0_#text#0/init;D%/&;" });
var template_default = _template_persisted("__tests__/template.marko", (input) => {
const $scope0_owned = _persisted_ownership(), $scope0_reason = _persisted_reason();
const $scope0_id = _scope_id();
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-lazy-tag-pending/__snapshots__/html.bundle.js b/packages/runtime-tags/src/__tests__/fixtures/persisted-lazy-tag-pending/__snapshots__/html.bundle.js
index 11352a39970..972f3a9d324 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-lazy-tag-pending/__snapshots__/html.bundle.js
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-lazy-tag-pending/__snapshots__/html.bundle.js
@@ -15,7 +15,8 @@ var child_default = _template_persisted("a", (input) => {
const $Child_withLoadAssets = withLoadAssets(child_default, "_a", [{
type: "on-click",
selector: "body"
-}]);
+}], 1);
+_shells({ b: "b b1;D%/&;" });
var template_default = _template_persisted("b", (input) => {
const $scope0_owned = _persisted_ownership(), $scope0_reason = _persisted_reason();
const $scope0_id = _scope_id();
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-lazy-tag-pending/__snapshots__/render-ssr.debug.md b/packages/runtime-tags/src/__tests__/fixtures/persisted-lazy-tag-pending/__snapshots__/render-ssr.debug.md
index eac65b8c42e..f6f86e33764 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-lazy-tag-pending/__snapshots__/render-ssr.debug.md
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-lazy-tag-pending/__snapshots__/render-ssr.debug.md
@@ -13,17 +13,6 @@ setTimeout(() => document.body.click());
```
# Update `{"label":"b"}`
-```html
-
-
-
-```
-## Change
-```
-UPDATE: main > button::text@0 "a" => "b"
-```
# Update
```js
@@ -32,7 +21,7 @@ document.querySelector("button").click();
```html
```
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-lazy-tag-pending/__snapshots__/render-ssr.md b/packages/runtime-tags/src/__tests__/fixtures/persisted-lazy-tag-pending/__snapshots__/render-ssr.md
index eac65b8c42e..f6f86e33764 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-lazy-tag-pending/__snapshots__/render-ssr.md
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-lazy-tag-pending/__snapshots__/render-ssr.md
@@ -13,17 +13,6 @@ setTimeout(() => document.body.click());
```
# Update `{"label":"b"}`
-```html
-
-
-
-```
-## Change
-```
-UPDATE: main > button::text@0 "a" => "b"
-```
# Update
```js
@@ -32,7 +21,7 @@ document.querySelector("button").click();
```html
```
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-lazy-tag-pending/__snapshots__/writes.debug.html b/packages/runtime-tags/src/__tests__/fixtures/persisted-lazy-tag-pending/__snapshots__/writes.debug.html
index fa93d977425..1329d65949a 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-lazy-tag-pending/__snapshots__/writes.debug.html
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-lazy-tag-pending/__snapshots__/writes.debug.html
@@ -3,9 +3,11 @@
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-loop-by-fill/__snapshots__/writes.html b/packages/runtime-tags/src/__tests__/fixtures/persisted-loop-by-fill/__snapshots__/writes.html
new file mode 100644
index 00000000000..97fa6739210
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-loop-by-fill/__snapshots__/writes.html
@@ -0,0 +1,24 @@
+
+
+
+
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-loop-by-fill/sizes.json b/packages/runtime-tags/src/__tests__/fixtures/persisted-loop-by-fill/sizes.json
new file mode 100644
index 00000000000..86a3cea757a
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-loop-by-fill/sizes.json
@@ -0,0 +1,16 @@
+{
+ "dom": {
+ "template.marko.page.mjs": {
+ "min": 8310,
+ "brotli": 3771
+ }
+ },
+ "html": {
+ "min": 473,
+ "brotli": 311
+ },
+ "patch": {
+ "min": 0,
+ "brotli": 1
+ }
+}
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-loop-by-fill/template.marko b/packages/runtime-tags/src/__tests__/fixtures/persisted-loop-by-fill/template.marko
new file mode 100644
index 00000000000..a099d9d4aa1
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-loop-by-fill/template.marko
@@ -0,0 +1,9 @@
+
+
+
+
+
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-loop-by-fill/test.ts b/packages/runtime-tags/src/__tests__/fixtures/persisted-loop-by-fill/test.ts
new file mode 100644
index 00000000000..aefb69b3488
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-loop-by-fill/test.ts
@@ -0,0 +1,12 @@
+import type { TestConfig } from "../../main.test";
+
+const add = (document: Document) => {
+ document.querySelector("button")!.click();
+};
+
+// A locally written `by` keyer inside a client-owned loop reading a server
+// value: the read delivers as a fill, so client re-lists key correctly.
+export const config: TestConfig = {
+ persisted: true,
+ steps: [{ keyField: "id" }, add],
+};
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-loop-by-local/sizes.json b/packages/runtime-tags/src/__tests__/fixtures/persisted-loop-by-local/sizes.json
index 411ea031d4e..50f81202e37 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-loop-by-local/sizes.json
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-loop-by-local/sizes.json
@@ -1,8 +1,8 @@
{
"dom": {
"template.marko.page.mjs": {
- "min": 7586,
- "brotli": 3503
+ "min": 7567,
+ "brotli": 3485
}
},
"html": {
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-loop-child-tag/sizes.json b/packages/runtime-tags/src/__tests__/fixtures/persisted-loop-child-tag/sizes.json
index c544115d502..cd3099d7039 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-loop-child-tag/sizes.json
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-loop-child-tag/sizes.json
@@ -1,8 +1,8 @@
{
"dom": {
"template.marko.page.mjs": {
- "min": 8679,
- "brotli": 3931
+ "min": 8661,
+ "brotli": 3922
}
},
"html": {
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-loop-client-inner/sizes.json b/packages/runtime-tags/src/__tests__/fixtures/persisted-loop-client-inner/sizes.json
index 0000cb2615c..29a3e5cd22d 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-loop-client-inner/sizes.json
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-loop-client-inner/sizes.json
@@ -1,8 +1,8 @@
{
"dom": {
"template.marko.page.mjs": {
- "min": 8948,
- "brotli": 4091
+ "min": 8929,
+ "brotli": 4050
}
},
"html": {
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-loop-client-owned/sizes.json b/packages/runtime-tags/src/__tests__/fixtures/persisted-loop-client-owned/sizes.json
index da553039b58..d4ac3e34459 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-loop-client-owned/sizes.json
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-loop-client-owned/sizes.json
@@ -1,8 +1,8 @@
{
"dom": {
"template.marko.page.mjs": {
- "min": 8350,
- "brotli": 3785
+ "min": 8328,
+ "brotli": 3778
}
},
"html": {
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-loop-closure/sizes.json b/packages/runtime-tags/src/__tests__/fixtures/persisted-loop-closure/sizes.json
index 2eb521666fa..43ea9d49f33 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-loop-closure/sizes.json
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-loop-closure/sizes.json
@@ -1,8 +1,8 @@
{
"dom": {
"template.marko.page.mjs": {
- "min": 8814,
- "brotli": 3983
+ "min": 8795,
+ "brotli": 3979
}
},
"html": {
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-loop-content-branch/sizes.json b/packages/runtime-tags/src/__tests__/fixtures/persisted-loop-content-branch/sizes.json
index fbc7f96d128..a3af915b95a 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-loop-content-branch/sizes.json
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-loop-content-branch/sizes.json
@@ -1,8 +1,8 @@
{
"dom": {
"template.marko.page.mjs": {
- "min": 11983,
- "brotli": 5158
+ "min": 11939,
+ "brotli": 5137
}
},
"html": {
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-loop-empty-growth/sizes.json b/packages/runtime-tags/src/__tests__/fixtures/persisted-loop-empty-growth/sizes.json
index f2bbb351e20..ae210dad8c2 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-loop-empty-growth/sizes.json
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-loop-empty-growth/sizes.json
@@ -1,8 +1,8 @@
{
"dom": {
"template.marko.page.mjs": {
- "min": 7558,
- "brotli": 3483
+ "min": 7539,
+ "brotli": 3474
}
},
"html": {
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-loop-fill-intersection/sizes.json b/packages/runtime-tags/src/__tests__/fixtures/persisted-loop-fill-intersection/sizes.json
index 7232583e9fc..165cb2f77f1 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-loop-fill-intersection/sizes.json
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-loop-fill-intersection/sizes.json
@@ -1,8 +1,8 @@
{
"dom": {
"template.marko.page.mjs": {
- "min": 8596,
- "brotli": 3886
+ "min": 8573,
+ "brotli": 3875
}
},
"html": {
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-loop-frozen-inner/sizes.json b/packages/runtime-tags/src/__tests__/fixtures/persisted-loop-frozen-inner/sizes.json
index 5740f17d82c..d7c1612d606 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-loop-frozen-inner/sizes.json
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-loop-frozen-inner/sizes.json
@@ -1,8 +1,8 @@
{
"dom": {
"template.marko.page.mjs": {
- "min": 7895,
- "brotli": 3616
+ "min": 7876,
+ "brotli": 3602
}
},
"html": {
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-loop-grow-state/sizes.json b/packages/runtime-tags/src/__tests__/fixtures/persisted-loop-grow-state/sizes.json
index abca196afa0..645b4c659da 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-loop-grow-state/sizes.json
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-loop-grow-state/sizes.json
@@ -1,8 +1,8 @@
{
"dom": {
"template.marko.page.mjs": {
- "min": 9669,
- "brotli": 4314
+ "min": 9630,
+ "brotli": 4293
}
},
"html": {
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-loop-handler/sizes.json b/packages/runtime-tags/src/__tests__/fixtures/persisted-loop-handler/sizes.json
index edda6094531..09785d82c8f 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-loop-handler/sizes.json
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-loop-handler/sizes.json
@@ -1,8 +1,8 @@
{
"dom": {
"template.marko.page.mjs": {
- "min": 7650,
- "brotli": 3524
+ "min": 7631,
+ "brotli": 3510
}
},
"html": {
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-loop-in-client-if/sizes.json b/packages/runtime-tags/src/__tests__/fixtures/persisted-loop-in-client-if/sizes.json
index fac04c3c7ee..77dde36e542 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-loop-in-client-if/sizes.json
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-loop-in-client-if/sizes.json
@@ -1,8 +1,8 @@
{
"dom": {
"template.marko.page.mjs": {
- "min": 9330,
- "brotli": 4192
+ "min": 9307,
+ "brotli": 4169
}
},
"html": {
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-loop-in-object/sizes.json b/packages/runtime-tags/src/__tests__/fixtures/persisted-loop-in-object/sizes.json
index 7274d987e6c..571d97ac2cd 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-loop-in-object/sizes.json
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-loop-in-object/sizes.json
@@ -1,8 +1,8 @@
{
"dom": {
"template.marko.page.mjs": {
- "min": 8351,
- "brotli": 3817
+ "min": 8329,
+ "brotli": 3785
}
},
"html": {
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-loop-intersection-deep/sizes.json b/packages/runtime-tags/src/__tests__/fixtures/persisted-loop-intersection-deep/sizes.json
index f92d15834bd..3dbde408e76 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-loop-intersection-deep/sizes.json
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-loop-intersection-deep/sizes.json
@@ -1,8 +1,8 @@
{
"dom": {
"template.marko.page.mjs": {
- "min": 10787,
- "brotli": 4762
+ "min": 10748,
+ "brotli": 4750
}
},
"html": {
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-loop-intersection/sizes.json b/packages/runtime-tags/src/__tests__/fixtures/persisted-loop-intersection/sizes.json
index 689e02ebab1..089921bccd3 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-loop-intersection/sizes.json
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-loop-intersection/sizes.json
@@ -1,8 +1,8 @@
{
"dom": {
"template.marko.page.mjs": {
- "min": 9669,
- "brotli": 4314
+ "min": 9630,
+ "brotli": 4293
}
},
"html": {
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-loop-item-content/sizes.json b/packages/runtime-tags/src/__tests__/fixtures/persisted-loop-item-content/sizes.json
index db2d7dfe9e4..cfd37ed136c 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-loop-item-content/sizes.json
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-loop-item-content/sizes.json
@@ -1,8 +1,8 @@
{
"dom": {
"template.marko.page.mjs": {
- "min": 11544,
- "brotli": 4984
+ "min": 11500,
+ "brotli": 4961
}
},
"html": {
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-loop-let-index/sizes.json b/packages/runtime-tags/src/__tests__/fixtures/persisted-loop-let-index/sizes.json
index 715d158f51d..ebbd44ef6fa 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-loop-let-index/sizes.json
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-loop-let-index/sizes.json
@@ -1,8 +1,8 @@
{
"dom": {
"template.marko.page.mjs": {
- "min": 9039,
- "brotli": 4058
+ "min": 9000,
+ "brotli": 4070
}
},
"html": {
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-loop-let-nested/sizes.json b/packages/runtime-tags/src/__tests__/fixtures/persisted-loop-let-nested/sizes.json
index 76d46a841c7..c682bfd37be 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-loop-let-nested/sizes.json
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-loop-let-nested/sizes.json
@@ -1,8 +1,8 @@
{
"dom": {
"template.marko.page.mjs": {
- "min": 9607,
- "brotli": 4312
+ "min": 9568,
+ "brotli": 4289
}
},
"html": {
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-loop-let/sizes.json b/packages/runtime-tags/src/__tests__/fixtures/persisted-loop-let/sizes.json
index f345bcb4c9f..71c728ea880 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-loop-let/sizes.json
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-loop-let/sizes.json
@@ -1,8 +1,8 @@
{
"dom": {
"template.marko.page.mjs": {
- "min": 9039,
- "brotli": 4058
+ "min": 9000,
+ "brotli": 4073
}
},
"html": {
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-loop-mixed/sizes.json b/packages/runtime-tags/src/__tests__/fixtures/persisted-loop-mixed/sizes.json
index 478e25b2486..3716eb482ce 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-loop-mixed/sizes.json
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-loop-mixed/sizes.json
@@ -1,8 +1,8 @@
{
"dom": {
"template.marko.page.mjs": {
- "min": 8302,
- "brotli": 3770
+ "min": 8280,
+ "brotli": 3762
}
},
"html": {
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-loop-nested-grow-outer/sizes.json b/packages/runtime-tags/src/__tests__/fixtures/persisted-loop-nested-grow-outer/sizes.json
index 5f136b8981a..59ca69dfe30 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-loop-nested-grow-outer/sizes.json
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-loop-nested-grow-outer/sizes.json
@@ -1,8 +1,8 @@
{
"dom": {
"template.marko.page.mjs": {
- "min": 10098,
- "brotli": 4499
+ "min": 10059,
+ "brotli": 4453
}
},
"html": {
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-loop-nested/sizes.json b/packages/runtime-tags/src/__tests__/fixtures/persisted-loop-nested/sizes.json
index aeaf2317a88..ce43ddc1dd2 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-loop-nested/sizes.json
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-loop-nested/sizes.json
@@ -1,8 +1,8 @@
{
"dom": {
"template.marko.page.mjs": {
- "min": 9054,
- "brotli": 4069
+ "min": 9031,
+ "brotli": 4061
}
},
"html": {
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-loop-pure-call/sizes.json b/packages/runtime-tags/src/__tests__/fixtures/persisted-loop-pure-call/sizes.json
index 181fa4ae6c6..fb19ac5f64d 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-loop-pure-call/sizes.json
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-loop-pure-call/sizes.json
@@ -1,8 +1,8 @@
{
"dom": {
"template.marko.page.mjs": {
- "min": 8259,
- "brotli": 3785
+ "min": 8237,
+ "brotli": 3755
}
},
"html": {
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-loop-reorder-fill/sizes.json b/packages/runtime-tags/src/__tests__/fixtures/persisted-loop-reorder-fill/sizes.json
index d0805961a66..01d7c67625e 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-loop-reorder-fill/sizes.json
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-loop-reorder-fill/sizes.json
@@ -1,8 +1,8 @@
{
"dom": {
"template.marko.page.mjs": {
- "min": 8374,
- "brotli": 3794
+ "min": 8352,
+ "brotli": 3804
}
},
"html": {
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-loop-rest-state/sizes.json b/packages/runtime-tags/src/__tests__/fixtures/persisted-loop-rest-state/sizes.json
index c2181d5119f..1aa782d8fd5 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-loop-rest-state/sizes.json
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-loop-rest-state/sizes.json
@@ -1,8 +1,8 @@
{
"dom": {
"template.marko.page.mjs": {
- "min": 9529,
- "brotli": 4267
+ "min": 9490,
+ "brotli": 4251
}
},
"html": {
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-loop-selector-fill/sizes.json b/packages/runtime-tags/src/__tests__/fixtures/persisted-loop-selector-fill/sizes.json
index 7854996eede..392052df309 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-loop-selector-fill/sizes.json
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-loop-selector-fill/sizes.json
@@ -1,8 +1,8 @@
{
"dom": {
"template.marko.page.mjs": {
- "min": 8979,
- "brotli": 4035
+ "min": 8956,
+ "brotli": 4029
}
},
"html": {
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-loop-server-nested/sizes.json b/packages/runtime-tags/src/__tests__/fixtures/persisted-loop-server-nested/sizes.json
index 479ce5bcd67..0b06367e1d7 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-loop-server-nested/sizes.json
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-loop-server-nested/sizes.json
@@ -1,8 +1,8 @@
{
"dom": {
"template.marko.page.mjs": {
- "min": 8443,
- "brotli": 3842
+ "min": 8420,
+ "brotli": 3810
}
},
"html": {
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-loop-shift/sizes.json b/packages/runtime-tags/src/__tests__/fixtures/persisted-loop-shift/sizes.json
index 12b0332acdf..daea4be55fd 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-loop-shift/sizes.json
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-loop-shift/sizes.json
@@ -1,8 +1,8 @@
{
"dom": {
"template.marko.page.mjs": {
- "min": 9191,
- "brotli": 4175
+ "min": 9173,
+ "brotli": 4172
}
},
"html": {
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-loop-spread/__snapshots__/html.bundle.debug.js b/packages/runtime-tags/src/__tests__/fixtures/persisted-loop-spread/__snapshots__/html.bundle.debug.js
index 499f9c5c30c..cf8998f4b40 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-loop-spread/__snapshots__/html.bundle.debug.js
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-loop-spread/__snapshots__/html.bundle.debug.js
@@ -12,7 +12,7 @@ var template_default = _template_persisted("__tests__/template.marko", (input) =
_html("");
_for_of(input.items, (item) => {
const $scope1_id = _scope_id();
- _html(`- ${_patch_text($scope1_id, "#text/1", item.id, void 0, $scope0_owned, 0)}
${_el_resume($scope1_id, "#li/0")}`);
+ _html(`- ${_patch_text($scope1_id, "#text/1", item.id, void 0, $scope0_owned, 0)}
${_el_resume($scope1_id, "#li/0")}`);
_script($scope1_id, "__tests__/template.marko_1_item_attrs#4");
_scope($scope1_id, {}, "__tests__/template.marko", "3:4", { "EventAttributes:#li/0": ["...item.attrs", "4:12"] });
}, (item) => item.id, $scope0_id, "#ul/0", 1, $sg__input_items, $sg__input_items, void 0, void 0, "__tests__/template.marko_1*shell");
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-loop-spread/__snapshots__/html.bundle.js b/packages/runtime-tags/src/__tests__/fixtures/persisted-loop-spread/__snapshots__/html.bundle.js
index e42af2c0d0d..68452a97e29 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-loop-spread/__snapshots__/html.bundle.js
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-loop-spread/__snapshots__/html.bundle.js
@@ -10,7 +10,7 @@ var template_default = _template_persisted("a", (input) => {
_html("");
_for_of(input.items, (item) => {
const $scope1_id = _scope_id();
- _html(`- ${_patch_text($scope1_id, "b", item.id, void 0, $scope0_owned, 0)}
${_el_resume($scope1_id, "a")}`);
+ _html(`- ${_patch_text($scope1_id, "b", item.id, void 0, $scope0_owned, 0)}
${_el_resume($scope1_id, "a")}`);
_script($scope1_id, "a1");
_scope($scope1_id, {});
}, (item) => item.id, $scope0_id, "a", 1, $sg__input_items, $sg__input_items, void 0, void 0, "a0");
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-loop-spread/sizes.json b/packages/runtime-tags/src/__tests__/fixtures/persisted-loop-spread/sizes.json
index bc968d9caa1..3482f6ab9a1 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-loop-spread/sizes.json
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-loop-spread/sizes.json
@@ -1,8 +1,8 @@
{
"dom": {
"template.marko.page.mjs": {
- "min": 11040,
- "brotli": 4766
+ "min": 11032,
+ "brotli": 4790
}
},
"html": {
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-loop-state/sizes.json b/packages/runtime-tags/src/__tests__/fixtures/persisted-loop-state/sizes.json
index 49a910ebf6a..1556caffc77 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-loop-state/sizes.json
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-loop-state/sizes.json
@@ -1,8 +1,8 @@
{
"dom": {
"template.marko.page.mjs": {
- "min": 8840,
- "brotli": 4013
+ "min": 8821,
+ "brotli": 3987
}
},
"html": {
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-loop-static-content/sizes.json b/packages/runtime-tags/src/__tests__/fixtures/persisted-loop-static-content/sizes.json
index 147fdc3e7c8..9369fad2c01 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-loop-static-content/sizes.json
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-loop-static-content/sizes.json
@@ -1,8 +1,8 @@
{
"dom": {
"template.marko.page.mjs": {
- "min": 7817,
- "brotli": 3587
+ "min": 7799,
+ "brotli": 3586
}
},
"html": {
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-loop-static-holes/sizes.json b/packages/runtime-tags/src/__tests__/fixtures/persisted-loop-static-holes/sizes.json
index dab1602ddb0..9c3d7892719 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-loop-static-holes/sizes.json
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-loop-static-holes/sizes.json
@@ -1,8 +1,8 @@
{
"dom": {
"template.marko.page.mjs": {
- "min": 8385,
- "brotli": 3841
+ "min": 8367,
+ "brotli": 3821
}
},
"html": {
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-loop-static/sizes.json b/packages/runtime-tags/src/__tests__/fixtures/persisted-loop-static/sizes.json
index b0a27e1eaf3..d81c65dd206 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-loop-static/sizes.json
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-loop-static/sizes.json
@@ -1,8 +1,8 @@
{
"dom": {
"template.marko.page.mjs": {
- "min": 7817,
- "brotli": 3587
+ "min": 7799,
+ "brotli": 3586
}
},
"html": {
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-loop-to-range/sizes.json b/packages/runtime-tags/src/__tests__/fixtures/persisted-loop-to-range/sizes.json
index e6f54cd63c6..059d8688337 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-loop-to-range/sizes.json
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-loop-to-range/sizes.json
@@ -1,8 +1,8 @@
{
"dom": {
"template.marko.page.mjs": {
- "min": 8247,
- "brotli": 3753
+ "min": 8225,
+ "brotli": 3744
}
},
"html": {
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-loop-until-step/sizes.json b/packages/runtime-tags/src/__tests__/fixtures/persisted-loop-until-step/sizes.json
index 907235538b7..2111ddcdf29 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-loop-until-step/sizes.json
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-loop-until-step/sizes.json
@@ -1,8 +1,8 @@
{
"dom": {
"template.marko.page.mjs": {
- "min": 8246,
- "brotli": 3751
+ "min": 8224,
+ "brotli": 3747
}
},
"html": {
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-loop/sizes.json b/packages/runtime-tags/src/__tests__/fixtures/persisted-loop/sizes.json
index 50ed433417b..874ebeb960e 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-loop/sizes.json
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-loop/sizes.json
@@ -1,8 +1,8 @@
{
"dom": {
"template.marko.page.mjs": {
- "min": 8622,
- "brotli": 3926
+ "min": 8603,
+ "brotli": 3914
}
},
"html": {
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-native-content-attr/sizes.json b/packages/runtime-tags/src/__tests__/fixtures/persisted-native-content-attr/sizes.json
index 8a026640977..d765ef38094 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-native-content-attr/sizes.json
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-native-content-attr/sizes.json
@@ -1,8 +1,8 @@
{
"dom": {
"template.marko.page.mjs": {
- "min": 9772,
- "brotli": 4180
+ "min": 9727,
+ "brotli": 4163
}
},
"html": {
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-nested-flow/sizes.json b/packages/runtime-tags/src/__tests__/fixtures/persisted-nested-flow/sizes.json
index 6e1f4b8c3d3..05e7ece9bea 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-nested-flow/sizes.json
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-nested-flow/sizes.json
@@ -1,8 +1,8 @@
{
"dom": {
"template.marko.page.mjs": {
- "min": 9664,
- "brotli": 4335
+ "min": 9625,
+ "brotli": 4309
}
},
"html": {
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-only-child-branch/sizes.json b/packages/runtime-tags/src/__tests__/fixtures/persisted-only-child-branch/sizes.json
index c144fbd179a..c0301d6f988 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-only-child-branch/sizes.json
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-only-child-branch/sizes.json
@@ -1,8 +1,8 @@
{
"dom": {
"template.marko.page.mjs": {
- "min": 7327,
- "brotli": 3313
+ "min": 7309,
+ "brotli": 3299
}
},
"html": {
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-option-attrs/sizes.json b/packages/runtime-tags/src/__tests__/fixtures/persisted-option-attrs/sizes.json
index 57643fd63d0..60c2c2a2093 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-option-attrs/sizes.json
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-option-attrs/sizes.json
@@ -1,8 +1,8 @@
{
"dom": {
"template.marko.page.mjs": {
- "min": 9929,
- "brotli": 4368
+ "min": 9881,
+ "brotli": 4346
}
},
"html": {
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-placeholder-server-read-in-content/__snapshots__/dom.bundle.debug.js b/packages/runtime-tags/src/__tests__/fixtures/persisted-placeholder-server-read-in-content/__snapshots__/dom.bundle.debug.js
new file mode 100644
index 00000000000..648fe470079
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-placeholder-server-read-in-content/__snapshots__/dom.bundle.debug.js
@@ -0,0 +1,44 @@
+// tags/wrap/index.marko
+const $template$1 = "";
+const $walks$1 = "D%l";
+const $setup$1 = () => {};
+const $input_content_direct = /*@__PURE__*/ _dynamic_tag_content("#text/0");
+const $dynamicTag = /*@__PURE__*/ _dynamic_tag("#text/0");
+const $input_content = $dynamicTag;
+const $input$1 = ($scope, input) => $input_content($scope, input.content);
+var wrap_default = /*@__PURE__*/ _template("__tests__/tags/wrap/index.marko", $template$1, "D%l", 0, $input$1);
+
+// template.marko
+const $template = /*@__PURE__*/ ((_w0) => `${_w0}`)($template$1);
+const $walks = /*@__PURE__*/ ((_w0) => ` D l/${_w0}&`)("D%l");
+const $await_content = /*@__PURE__*/ _await_content("#text/0", "done
");
+const $try_content__await_promise = /*@__PURE__*/ _await_promise("#text/0");
+const $try_content__input_promise = /*@__PURE__*/ _closure_get("input_promise", ($scope) => $try_content__await_promise($scope, $scope._._.input_promise), ($scope) => $scope._._);
+const $try_content__setup = ($scope) => {
+ $try_content__input_promise($scope);
+ $await_content($scope);
+};
+const $placeholder_content__input_msg = /*@__PURE__*/ _fill_join_closure("__tests__/template.marko0", "input_msg", /*@__PURE__*/ _closure_get("input_msg", ($scope) => _text($scope["#text/0"], $scope._._.input_msg), ($scope) => $scope._._), 0);
+const $placeholder_content__setup = $placeholder_content__input_msg;
+const $placeholder_content = _content_resume("__tests__/template.marko_2*content", "loading ", "Db%", $placeholder_content__setup);
+const $wrap_content__try = /*@__PURE__*/ _try("#text/0", "", "b%", $try_content__setup);
+const $wrap_content__setup = ($scope) => $wrap_content__try($scope, { placeholder: attrTag({ content: $placeholder_content($scope) }) });
+const $wrap_content = /*@__PURE__*/ _content("__tests__/template.marko_1*content", "", "b%", $wrap_content__setup);
+const $count = /*@__PURE__*/ _let("count/7", ($scope) => _text($scope["#text/1"], $scope.count));
+const $setup__script = _script("__tests__/template.marko_0", ($scope) => _on($scope["#button/0"], "click", function() {
+ $count($scope, +$scope.count + 1);
+}));
+function $setup($scope) {
+ $input_content_direct($scope["#childScope/2"], $wrap_content($scope));
+ $count($scope, 0);
+ $setup__script($scope);
+}
+const $input = ($scope, input) => {
+ $input_msg($scope, input.msg);
+ $input_promise($scope, input.promise);
+};
+const $input_msg__closure = /*@__PURE__*/ _closure($placeholder_content__input_msg);
+const $input_msg = /*@__PURE__*/ _fill_const("__tests__/template.marko0", "input_msg", $input_msg__closure);
+const $input_promise__closure = /*@__PURE__*/ _closure($try_content__input_promise);
+const $input_promise = /*@__PURE__*/ _const("input_promise", $input_promise__closure);
+var template_default = /*@__PURE__*/ _template("__tests__/template.marko", $template, $walks, $setup, $input);
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-placeholder-server-read-in-content/__snapshots__/dom.bundle.js b/packages/runtime-tags/src/__tests__/fixtures/persisted-placeholder-server-read-in-content/__snapshots__/dom.bundle.js
new file mode 100644
index 00000000000..b1da6bb6abc
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-placeholder-server-read-in-content/__snapshots__/dom.bundle.js
@@ -0,0 +1,7 @@
+// template.marko
+const $placeholder_content__input_msg = /*@__PURE__*/ _fill_join_closure("a0", 5, /*@__PURE__*/ _closure_get(8, ($scope) => _text($scope.a, $scope._._.f), ($scope) => $scope._._), 0);
+const $placeholder_content = _content_resume("a3", "loading ", "Db%", $placeholder_content__input_msg);
+const $count = /*@__PURE__*/ _let(7, ($scope) => _text($scope.b, $scope.h));
+const $setup__script = _script("a5", ($scope) => _on($scope.a, "click", function() {
+ $count($scope, +$scope.h + 1);
+}));
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-placeholder-server-read-in-content/__snapshots__/html.bundle.debug.js b/packages/runtime-tags/src/__tests__/fixtures/persisted-placeholder-server-read-in-content/__snapshots__/html.bundle.debug.js
new file mode 100644
index 00000000000..35993ba7a00
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-placeholder-server-read-in-content/__snapshots__/html.bundle.debug.js
@@ -0,0 +1,66 @@
+// tags/wrap/index.marko
+const $template$1 = "";
+const $walks$1 = "D%l";
+_shells({ "__tests__/tags/wrap/index.marko": "__tests__/tags/wrap/index.marko;D%;" });
+var wrap_default = _template_persisted("__tests__/tags/wrap/index.marko", (input) => {
+ const $scope0_owned = _persisted_ownership(), $scope0_reason = _persisted_reason();
+ const $scope0_id = _scope_id();
+ _html("");
+ _patch_dynamic_tag($scope0_id, "#text/0", input.content, $scope0_owned, 0);
+ _dynamic_tag($scope0_id, "#text/0", input.content, {}, 0, 0, _source_guard($scope0_reason, 0), 1);
+ _html("");
+ $scope0_reason && _scope($scope0_id, {}, "__tests__/tags/wrap/index.marko", 0);
+}, 0, 0);
+
+// template.marko
+const $template = /*@__PURE__*/ ((_w0) => `${_w0}`)($template$1);
+const $walks = /*@__PURE__*/ ((_w0) => ` D l/${_w0}&`)("D%l");
+_shells({
+ "__tests__/template.marko_4*content": "__tests__/template.marko_4*content,done
",
+ "__tests__/template.marko_3_#text#0/await": "__tests__/template.marko_3_#text#0/await,done
",
+ "__tests__/template.marko_3*content": "__tests__/template.marko_3*content;b%;"
+});
+var template_default = _template_persisted("__tests__/template.marko", (input) => {
+ const $scope0_owned = _persisted_ownership(), $scope0_reason = _persisted_reason();
+ const $scope0_id = _scope_id();
+ const $input_msg__closures = new Set();
+ const $input_promise__closures = new Set();
+ let count = 0;
+ _html(`${_el_resume($scope0_id, "#button/0")}`);
+ _set_serialize_reason(0);
+ const $childScope = _peek_scope_id();
+ _patch_child($scope0_id, "#childScope/2", $childScope);
+ wrap_default({ content: _content("__tests__/template.marko_1*content", () => {
+ const $scope1_reason = _persisted_reason();
+ const $scope1_id = _scope_id();
+ _try($scope1_id, "#text/0", _content_resume("__tests__/template.marko_3*content", () => {
+ const $scope3_id = _scope_id();
+ const $scope3_reason = _persisted_reason();
+ _await($scope3_id, "#text/0", input.promise, () => {
+ const $scope4_id = _scope_id();
+ _html("done
");
+ }, 1, "__tests__/template.marko_3_#text#0/await");
+ $scope0_reason && _subscribe($input_promise__closures, _scope($scope3_id, { _: _scope_with_id($scope1_id) }, "__tests__/template.marko", "4:4"));
+ _resume_branch($scope3_id);
+ }, $scope1_id), { placeholder: attrTag({ content: _content_resume("__tests__/template.marko_2*content", () => {
+ const $scope2_reason = _persisted_reason();
+ const $scope2_id = _scope_id();
+ _html(`loading ${_text_resume($scope2_id, "#text/0", input.msg, 2)}`);
+ _subscribe(_source_if($scope0_reason, 0) && $input_msg__closures, _scope($scope2_id, { _: _scope_with_id($scope1_id) }, "__tests__/template.marko", "8:6"));
+ _resume_branch($scope2_id);
+ }, $scope1_id) }) });
+ _scope($scope1_id, { _: _scope_with_id($scope0_id) }, "__tests__/template.marko", "3:2");
+ }, $scope0_id) });
+ _script($scope0_id, "__tests__/template.marko_0");
+ $scope0_reason ? _scope($scope0_id, {
+ input_msg: input.msg,
+ count,
+ "ClosureScopes:input_msg": $input_msg__closures,
+ "ClosureScopes:input_promise": $input_promise__closures,
+ "#childScope/2": _existing_scope($childScope)
+ }, "__tests__/template.marko", 0, {
+ input_msg: ["input.msg"],
+ count: "1:6"
+ }) : _owned_guard($scope0_owned, 0) && _patch_value($scope0_id, "__tests__/template.marko0", input.msg);
+ _resume_branch($scope0_id);
+}, 1, () => [wrap_default]);
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-placeholder-server-read-in-content/__snapshots__/html.bundle.js b/packages/runtime-tags/src/__tests__/fixtures/persisted-placeholder-server-read-in-content/__snapshots__/html.bundle.js
new file mode 100644
index 00000000000..49856013e62
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-placeholder-server-read-in-content/__snapshots__/html.bundle.js
@@ -0,0 +1,59 @@
+// tags/wrap/index.marko
+_shells({ b: "b;D%;" });
+var wrap_default = _template_persisted("b", (input) => {
+ const $scope0_owned = _persisted_ownership(), $scope0_reason = _persisted_reason();
+ const $scope0_id = _scope_id();
+ _html("");
+ _patch_dynamic_tag($scope0_id, "a", input.content, $scope0_owned, 0);
+ _dynamic_tag($scope0_id, "a", input.content, {}, 0, 0, _source_guard($scope0_reason, 0), 1);
+ _html("");
+ $scope0_reason && _scope($scope0_id, {});
+}, 0, 0);
+
+// template.marko
+_shells({
+ a0: "a0,done
",
+ a1: "a1,done
",
+ a2: "a2;b%;"
+});
+var template_default = _template_persisted("a", (input) => {
+ const $scope0_owned = _persisted_ownership(), $scope0_reason = _persisted_reason();
+ const $scope0_id = _scope_id();
+ const $input_msg__closures = /* @__PURE__ */ new Set();
+ const $input_promise__closures = /* @__PURE__ */ new Set();
+ let count = 0;
+ _html(`${_el_resume($scope0_id, "a")}`);
+ _set_serialize_reason(0);
+ const $childScope = _peek_scope_id();
+ _patch_child($scope0_id, "c", $childScope);
+ wrap_default({ content: _content("a4", () => {
+ _persisted_reason();
+ const $scope1_id = _scope_id();
+ _try($scope1_id, "a", _content_resume("a2", () => {
+ const $scope3_id = _scope_id();
+ _persisted_reason();
+ _await($scope3_id, "a", input.promise, () => {
+ _scope_id();
+ _html("done
");
+ }, 1, "a1");
+ $scope0_reason && _subscribe($input_promise__closures, _scope($scope3_id, { _: _scope_with_id($scope1_id) }));
+ _resume_branch($scope3_id);
+ }, $scope1_id), { placeholder: attrTag({ content: _content_resume("a3", () => {
+ _persisted_reason();
+ const $scope2_id = _scope_id();
+ _html(`loading ${_text_resume($scope2_id, "a", input.msg, 2)}`);
+ _subscribe(_source_if($scope0_reason, 0) && $input_msg__closures, _scope($scope2_id, { _: _scope_with_id($scope1_id) }));
+ _resume_branch($scope2_id);
+ }, $scope1_id) }) });
+ _scope($scope1_id, { _: _scope_with_id($scope0_id) });
+ }, $scope0_id) });
+ _script($scope0_id, "a5");
+ $scope0_reason ? _scope($scope0_id, {
+ f: input.msg,
+ h: count,
+ i: $input_msg__closures,
+ j: $input_promise__closures,
+ c: _existing_scope($childScope)
+ }) : _owned_guard($scope0_owned, 0) && _patch_value($scope0_id, "a0", input.msg);
+ _resume_branch($scope0_id);
+}, 1, () => [wrap_default]);
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-placeholder-server-read-in-content/__snapshots__/patches.debug.js b/packages/runtime-tags/src/__tests__/fixtures/persisted-placeholder-server-read-in-content/__snapshots__/patches.debug.js
new file mode 100644
index 00000000000..fa9f6c08c1f
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-placeholder-server-read-in-content/__snapshots__/patches.debug.js
@@ -0,0 +1,12 @@
+// PATCH
+[`packages/runtime-tags/src/__tests__/fixtures/persisted-placeholder-server-read-in-content/template.marko_3_#text#0/await,done
`, `packages/runtime-tags/src/__tests__/fixtures/persisted-placeholder-server-read-in-content/template.marko_3*content;b%;`, {
+ "PatchChild:#childScope/2": {
+ "PatchChild:BranchScopes:#text/0": {
+ "PatchChild:BranchScopes:#text/0": [{
+ "PatchPending:#text/0": "packages/runtime-tags/src/__tests__/fixtures/persisted-placeholder-server-read-in-content/template.marko_3_#text#0/await",
+ "PatchChild:BranchScopes:#text/0": {}
+ }, "packages/runtime-tags/src/__tests__/fixtures/persisted-placeholder-server-read-in-content/template.marko_3*content", $, "packages/runtime-tags/src/__tests__/fixtures/persisted-placeholder-server-read-in-content/template.marko_2*content"]
+ }
+ },
+ "PatchValue:packages/runtime-tags/src/__tests__/fixtures/persisted-placeholder-server-read-in-content/template.marko0": "b"
+}]
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-placeholder-server-read-in-content/__snapshots__/patches.js b/packages/runtime-tags/src/__tests__/fixtures/persisted-placeholder-server-read-in-content/__snapshots__/patches.js
new file mode 100644
index 00000000000..f330dad221b
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-placeholder-server-read-in-content/__snapshots__/patches.js
@@ -0,0 +1,12 @@
+// PATCH
+[`a1,done
`, `a2;b%;`, {
+ cc: {
+ cAa: {
+ cAa: [{
+ pa: "a1",
+ cAa: {}
+ }, "a2", $, "a3"]
+ }
+ },
+ va0: "b"
+}]
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-placeholder-server-read-in-content/__snapshots__/render.debug.md b/packages/runtime-tags/src/__tests__/fixtures/persisted-placeholder-server-read-in-content/__snapshots__/render.debug.md
new file mode 100644
index 00000000000..7133e6dd987
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-placeholder-server-read-in-content/__snapshots__/render.debug.md
@@ -0,0 +1,33 @@
+# Render `{"msg":"a","promise":{"value":2}}`
+```html
+
+
+```
+
+# Update
+```html
+
+
+```
+## Change
+```
+INSERT: #done::text("done")
+REMOVE: section > em
+INSERT: section > #done
+```
+
+# Update `{"msg":"b","promise":{"value":2}}`
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-placeholder-server-read-in-content/__snapshots__/render.md b/packages/runtime-tags/src/__tests__/fixtures/persisted-placeholder-server-read-in-content/__snapshots__/render.md
new file mode 100644
index 00000000000..7133e6dd987
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-placeholder-server-read-in-content/__snapshots__/render.md
@@ -0,0 +1,33 @@
+# Render `{"msg":"a","promise":{"value":2}}`
+```html
+
+
+```
+
+# Update
+```html
+
+
+```
+## Change
+```
+INSERT: #done::text("done")
+REMOVE: section > em
+INSERT: section > #done
+```
+
+# Update `{"msg":"b","promise":{"value":2}}`
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-placeholder-server-read-in-content/__snapshots__/writes.debug.html b/packages/runtime-tags/src/__tests__/fixtures/persisted-placeholder-server-read-in-content/__snapshots__/writes.debug.html
new file mode 100644
index 00000000000..b30be4426ef
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-placeholder-server-read-in-content/__snapshots__/writes.debug.html
@@ -0,0 +1,43 @@
+
+
+
+
+
+
+
+
+ done
+
+
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-placeholder-server-read-in-content/__snapshots__/writes.html b/packages/runtime-tags/src/__tests__/fixtures/persisted-placeholder-server-read-in-content/__snapshots__/writes.html
new file mode 100644
index 00000000000..e62d70234f0
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-placeholder-server-read-in-content/__snapshots__/writes.html
@@ -0,0 +1,37 @@
+
+
+
+
+
+
+
+
+ done
+
+
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-placeholder-server-read-in-content/sizes.json b/packages/runtime-tags/src/__tests__/fixtures/persisted-placeholder-server-read-in-content/sizes.json
new file mode 100644
index 00000000000..0b5754eb0dc
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-placeholder-server-read-in-content/sizes.json
@@ -0,0 +1,16 @@
+{
+ "dom": {
+ "template.marko.page.mjs": {
+ "min": 13962,
+ "brotli": 5772
+ }
+ },
+ "html": {
+ "min": 1219,
+ "brotli": 691
+ },
+ "patch": {
+ "min": 105,
+ "brotli": 101
+ }
+}
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-placeholder-server-read-in-content/tags/wrap/index.marko b/packages/runtime-tags/src/__tests__/fixtures/persisted-placeholder-server-read-in-content/tags/wrap/index.marko
new file mode 100644
index 00000000000..e74490cbca8
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-placeholder-server-read-in-content/tags/wrap/index.marko
@@ -0,0 +1 @@
+
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-placeholder-server-read-in-content/template.marko b/packages/runtime-tags/src/__tests__/fixtures/persisted-placeholder-server-read-in-content/template.marko
new file mode 100644
index 00000000000..6388856269a
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-placeholder-server-read-in-content/template.marko
@@ -0,0 +1,12 @@
+
+
+
+
+
+ done
+
+ <@placeholder>
+ loading ${input.msg}
+ @placeholder>
+
+
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-placeholder-server-read-in-content/test.ts b/packages/runtime-tags/src/__tests__/fixtures/persisted-placeholder-server-read-in-content/test.ts
new file mode 100644
index 00000000000..1ee7408a36c
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-placeholder-server-read-in-content/test.ts
@@ -0,0 +1,17 @@
+import type { TestConfig } from "../../main.test";
+import { flush, resolveAfter, wait } from "../../utils/resolve";
+
+// A server value read inside `@placeholder` content under a content section
+// must re-render with the patched value when a construct re-shows the
+// placeholder, in optimize and debug alike.
+export const config: TestConfig = {
+ persisted: true,
+ steps: () => [
+ { msg: "a", promise: resolveAfter(2) },
+ wait,
+ flush,
+ { msg: "b", promise: resolveAfter(2) },
+ wait,
+ flush,
+ ],
+};
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-placeholder-server-read/__snapshots__/dom.bundle.debug.js b/packages/runtime-tags/src/__tests__/fixtures/persisted-placeholder-server-read/__snapshots__/dom.bundle.debug.js
new file mode 100644
index 00000000000..065f5ffd0fd
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-placeholder-server-read/__snapshots__/dom.bundle.debug.js
@@ -0,0 +1,32 @@
+// template.marko
+const $template = "";
+const $walks = " D l%c";
+const $await_content = /*@__PURE__*/ _await_content("#text/0", "done
");
+const $try_content__await_promise = /*@__PURE__*/ _await_promise("#text/0");
+const $try_content__input_promise = /*@__PURE__*/ _closure_get("input_promise", ($scope) => $try_content__await_promise($scope, $scope._.input_promise));
+const $try_content__setup = ($scope) => {
+ $try_content__input_promise($scope);
+ $await_content($scope);
+};
+const $placeholder_content__input_msg = /*@__PURE__*/ _fill_join_closure("__tests__/template.marko0", "input_msg", /*@__PURE__*/ _closure_get("input_msg", ($scope) => _text($scope["#text/0"], $scope._.input_msg)), 0);
+const $placeholder_content__setup = $placeholder_content__input_msg;
+const $placeholder_content = _content_resume("__tests__/template.marko_1*content", "loading ", "Db%", $placeholder_content__setup);
+const $count = /*@__PURE__*/ _let("count/7", ($scope) => _text($scope["#text/1"], $scope.count));
+const $try = /*@__PURE__*/ _try("#text/2", "", "b%", $try_content__setup);
+const $setup__script = _script("__tests__/template.marko_0", ($scope) => _on($scope["#button/0"], "click", function() {
+ $count($scope, +$scope.count + 1);
+}));
+function $setup($scope) {
+ $count($scope, 0);
+ $try($scope, { placeholder: attrTag({ content: $placeholder_content($scope) }) });
+ $setup__script($scope);
+}
+const $input = ($scope, input) => {
+ $input_msg($scope, input.msg);
+ $input_promise($scope, input.promise);
+};
+const $input_msg__closure = /*@__PURE__*/ _closure($placeholder_content__input_msg);
+const $input_msg = /*@__PURE__*/ _fill_const("__tests__/template.marko0", "input_msg", $input_msg__closure);
+const $input_promise__closure = /*@__PURE__*/ _closure($try_content__input_promise);
+const $input_promise = /*@__PURE__*/ _const("input_promise", $input_promise__closure);
+var template_default = /*@__PURE__*/ _template("__tests__/template.marko", $template, $walks, $setup, $input);
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-placeholder-server-read/__snapshots__/dom.bundle.js b/packages/runtime-tags/src/__tests__/fixtures/persisted-placeholder-server-read/__snapshots__/dom.bundle.js
new file mode 100644
index 00000000000..26e851eef2c
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-placeholder-server-read/__snapshots__/dom.bundle.js
@@ -0,0 +1,7 @@
+// template.marko
+const $placeholder_content__input_msg = /*@__PURE__*/ _fill_join_closure("a0", 5, /*@__PURE__*/ _closure_get(8, ($scope) => _text($scope.a, $scope._.f)), 0);
+const $placeholder_content = _content_resume("a3", "loading ", "Db%", $placeholder_content__input_msg);
+const $count = /*@__PURE__*/ _let(7, ($scope) => _text($scope.b, $scope.h));
+const $setup__script = _script("a4", ($scope) => _on($scope.a, "click", function() {
+ $count($scope, +$scope.h + 1);
+}));
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-placeholder-server-read/__snapshots__/html.bundle.debug.js b/packages/runtime-tags/src/__tests__/fixtures/persisted-placeholder-server-read/__snapshots__/html.bundle.debug.js
new file mode 100644
index 00000000000..b0fb844e781
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-placeholder-server-read/__snapshots__/html.bundle.debug.js
@@ -0,0 +1,43 @@
+// template.marko
+const $template = "";
+const $walks = " D l%c";
+_shells({
+ "__tests__/template.marko_3*content": "__tests__/template.marko_3*content,done
",
+ "__tests__/template.marko_2_#text#0/await": "__tests__/template.marko_2_#text#0/await,done
",
+ "__tests__/template.marko_2*content": "__tests__/template.marko_2*content;b%;"
+});
+var template_default = _template_persisted("__tests__/template.marko", (input) => {
+ const $scope0_owned = _persisted_ownership(), $scope0_reason = _persisted_reason();
+ const $scope0_id = _scope_id();
+ const $input_msg__closures = new Set();
+ const $input_promise__closures = new Set();
+ let count = 0;
+ _html(`${_el_resume($scope0_id, "#button/0")}`);
+ _try($scope0_id, "#text/2", _content_resume("__tests__/template.marko_2*content", () => {
+ const $scope2_id = _scope_id();
+ const $scope2_reason = _persisted_reason();
+ _await($scope2_id, "#text/0", input.promise, () => {
+ const $scope3_id = _scope_id();
+ _html("done
");
+ }, 1, "__tests__/template.marko_2_#text#0/await");
+ $scope0_reason && _subscribe($input_promise__closures, _scope($scope2_id, { _: _scope_with_id($scope0_id) }, "__tests__/template.marko", "3:2"));
+ _resume_branch($scope2_id);
+ }, $scope0_id), { placeholder: attrTag({ content: _content_resume("__tests__/template.marko_1*content", () => {
+ const $scope1_reason = _persisted_reason();
+ const $scope1_id = _scope_id();
+ _html(`loading ${_text_resume($scope1_id, "#text/0", input.msg, 2)}`);
+ _subscribe(_source_if($scope0_reason, 0) && $input_msg__closures, _scope($scope1_id, { _: _scope_with_id($scope0_id) }, "__tests__/template.marko", "7:4"));
+ _resume_branch($scope1_id);
+ }, $scope0_id) }) }, 1);
+ _script($scope0_id, "__tests__/template.marko_0");
+ $scope0_reason ? _scope($scope0_id, {
+ input_msg: input.msg,
+ count,
+ "ClosureScopes:input_msg": $input_msg__closures,
+ "ClosureScopes:input_promise": $input_promise__closures
+ }, "__tests__/template.marko", 0, {
+ input_msg: ["input.msg"],
+ count: "1:6"
+ }) : _owned_guard($scope0_owned, 0) && _patch_value($scope0_id, "__tests__/template.marko0", input.msg);
+ _resume_branch($scope0_id);
+}, 1, 0);
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-placeholder-server-read/__snapshots__/html.bundle.js b/packages/runtime-tags/src/__tests__/fixtures/persisted-placeholder-server-read/__snapshots__/html.bundle.js
new file mode 100644
index 00000000000..da4153ed45b
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-placeholder-server-read/__snapshots__/html.bundle.js
@@ -0,0 +1,38 @@
+// template.marko
+_shells({
+ a0: "a0,done
",
+ a1: "a1,done
",
+ a2: "a2;b%;"
+});
+var template_default = _template_persisted("a", (input) => {
+ const $scope0_owned = _persisted_ownership(), $scope0_reason = _persisted_reason();
+ const $scope0_id = _scope_id();
+ const $input_msg__closures = /* @__PURE__ */ new Set();
+ const $input_promise__closures = /* @__PURE__ */ new Set();
+ let count = 0;
+ _html(`${_el_resume($scope0_id, "a")}`);
+ _try($scope0_id, "c", _content_resume("a2", () => {
+ const $scope2_id = _scope_id();
+ _persisted_reason();
+ _await($scope2_id, "a", input.promise, () => {
+ _scope_id();
+ _html("done
");
+ }, 1, "a1");
+ $scope0_reason && _subscribe($input_promise__closures, _scope($scope2_id, { _: _scope_with_id($scope0_id) }));
+ _resume_branch($scope2_id);
+ }, $scope0_id), { placeholder: attrTag({ content: _content_resume("a3", () => {
+ _persisted_reason();
+ const $scope1_id = _scope_id();
+ _html(`loading ${_text_resume($scope1_id, "a", input.msg, 2)}`);
+ _subscribe(_source_if($scope0_reason, 0) && $input_msg__closures, _scope($scope1_id, { _: _scope_with_id($scope0_id) }));
+ _resume_branch($scope1_id);
+ }, $scope0_id) }) }, 1);
+ _script($scope0_id, "a4");
+ $scope0_reason ? _scope($scope0_id, {
+ f: input.msg,
+ h: count,
+ i: $input_msg__closures,
+ j: $input_promise__closures
+ }) : _owned_guard($scope0_owned, 0) && _patch_value($scope0_id, "a0", input.msg);
+ _resume_branch($scope0_id);
+}, 1, 0);
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-placeholder-server-read/__snapshots__/patches.debug.js b/packages/runtime-tags/src/__tests__/fixtures/persisted-placeholder-server-read/__snapshots__/patches.debug.js
new file mode 100644
index 00000000000..b020c57ac63
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-placeholder-server-read/__snapshots__/patches.debug.js
@@ -0,0 +1,8 @@
+// PATCH
+[`packages/runtime-tags/src/__tests__/fixtures/persisted-placeholder-server-read/template.marko_2_#text#0/await,done
`, {
+ "PatchChild:BranchScopes:#text/2": {
+ "PatchPending:#text/0": "packages/runtime-tags/src/__tests__/fixtures/persisted-placeholder-server-read/template.marko_2_#text#0/await",
+ "PatchChild:BranchScopes:#text/0": {}
+ },
+ "PatchValue:packages/runtime-tags/src/__tests__/fixtures/persisted-placeholder-server-read/template.marko0": "b"
+}]
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-placeholder-server-read/__snapshots__/patches.js b/packages/runtime-tags/src/__tests__/fixtures/persisted-placeholder-server-read/__snapshots__/patches.js
new file mode 100644
index 00000000000..112413bfb2c
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-placeholder-server-read/__snapshots__/patches.js
@@ -0,0 +1,8 @@
+// PATCH
+[`a1,done
`, {
+ cAc: {
+ pa: "a1",
+ cAa: {}
+ },
+ va0: "b"
+}]
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-placeholder-server-read/__snapshots__/render.debug.md b/packages/runtime-tags/src/__tests__/fixtures/persisted-placeholder-server-read/__snapshots__/render.debug.md
new file mode 100644
index 00000000000..3531fe2a768
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-placeholder-server-read/__snapshots__/render.debug.md
@@ -0,0 +1,29 @@
+# Render `{"msg":"a","promise":{"value":2}}`
+```html
+
+
+ loading a
+
+```
+
+# Update
+```html
+
+
+ done
+
+```
+## Change
+```
+INSERT: #done::text("done")
+REMOVE: em
+INSERT: button + #done
+```
+
+# Update `{"msg":"b","promise":{"value":2}}`
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-placeholder-server-read/__snapshots__/render.md b/packages/runtime-tags/src/__tests__/fixtures/persisted-placeholder-server-read/__snapshots__/render.md
new file mode 100644
index 00000000000..3531fe2a768
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-placeholder-server-read/__snapshots__/render.md
@@ -0,0 +1,29 @@
+# Render `{"msg":"a","promise":{"value":2}}`
+```html
+
+
+ loading a
+
+```
+
+# Update
+```html
+
+
+ done
+
+```
+## Change
+```
+INSERT: #done::text("done")
+REMOVE: em
+INSERT: button + #done
+```
+
+# Update `{"msg":"b","promise":{"value":2}}`
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-placeholder-server-read/__snapshots__/writes.debug.html b/packages/runtime-tags/src/__tests__/fixtures/persisted-placeholder-server-read/__snapshots__/writes.debug.html
new file mode 100644
index 00000000000..a047aadc5aa
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-placeholder-server-read/__snapshots__/writes.debug.html
@@ -0,0 +1,35 @@
+loading
+ a
+
+
+
+
+
+
+ done
+
+
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-placeholder-server-read/__snapshots__/writes.html b/packages/runtime-tags/src/__tests__/fixtures/persisted-placeholder-server-read/__snapshots__/writes.html
new file mode 100644
index 00000000000..7825e259ed1
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-placeholder-server-read/__snapshots__/writes.html
@@ -0,0 +1,30 @@
+loading
+ a
+
+
+
+
+
+
+ done
+
+
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-placeholder-server-read/sizes.json b/packages/runtime-tags/src/__tests__/fixtures/persisted-placeholder-server-read/sizes.json
new file mode 100644
index 00000000000..06037c64075
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-placeholder-server-read/sizes.json
@@ -0,0 +1,16 @@
+{
+ "dom": {
+ "template.marko.page.mjs": {
+ "min": 11052,
+ "brotli": 4695
+ }
+ },
+ "html": {
+ "min": 1143,
+ "brotli": 663
+ },
+ "patch": {
+ "min": 62,
+ "brotli": 66
+ }
+}
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-placeholder-server-read/template.marko b/packages/runtime-tags/src/__tests__/fixtures/persisted-placeholder-server-read/template.marko
new file mode 100644
index 00000000000..21db9879c58
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-placeholder-server-read/template.marko
@@ -0,0 +1,10 @@
+
+
+
+
+ done
+
+ <@placeholder>
+ loading ${input.msg}
+ @placeholder>
+
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-placeholder-server-read/test.ts b/packages/runtime-tags/src/__tests__/fixtures/persisted-placeholder-server-read/test.ts
new file mode 100644
index 00000000000..f0e1e36cde3
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-placeholder-server-read/test.ts
@@ -0,0 +1,17 @@
+import type { TestConfig } from "../../main.test";
+import { flush, resolveAfter, wait } from "../../utils/resolve";
+
+// A server value read inside `@placeholder` content must re-render with the
+// patched value when a construct re-shows the placeholder, in optimize and
+// debug alike (the fill registration is retained for the placeholder's read).
+export const config: TestConfig = {
+ persisted: true,
+ steps: () => [
+ { msg: "a", promise: resolveAfter(2) },
+ wait,
+ flush,
+ { msg: "b", promise: resolveAfter(2) },
+ wait,
+ flush,
+ ],
+};
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-script-global-alias/__snapshots__/dom.bundle.debug.js b/packages/runtime-tags/src/__tests__/fixtures/persisted-script-global-alias/__snapshots__/dom.bundle.debug.js
new file mode 100644
index 00000000000..0335c884481
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-script-global-alias/__snapshots__/dom.bundle.debug.js
@@ -0,0 +1,10 @@
+// template.marko
+const $template = "
";
+const $walks = "E m";
+const $setup = () => {};
+const $brand__script = _script("__tests__/template.marko_0_brand#1", ($scope) => document.querySelector("main").dataset.brand = $scope.brand);
+const $brand = /*@__PURE__*/ _const("brand", ($scope) => {
+ _text($scope["#text/0"], $scope.brand);
+ $brand__script($scope);
+});
+var template_default = /*@__PURE__*/ _template("__tests__/template.marko", $template, "E m");
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-script-global-alias/__snapshots__/dom.bundle.js b/packages/runtime-tags/src/__tests__/fixtures/persisted-script-global-alias/__snapshots__/dom.bundle.js
new file mode 100644
index 00000000000..13912eb312f
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-script-global-alias/__snapshots__/dom.bundle.js
@@ -0,0 +1,2 @@
+// template.marko
+_script("a0", ($scope) => document.querySelector("main").dataset.brand = $scope.b);
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-script-global-alias/__snapshots__/error-compile-dom.debug.txt b/packages/runtime-tags/src/__tests__/fixtures/persisted-script-global-alias/__snapshots__/error-compile-dom.debug.txt
deleted file mode 100644
index 02b6930cf91..00000000000
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-script-global-alias/__snapshots__/error-compile-dom.debug.txt
+++ /dev/null
@@ -1,2 +0,0 @@
-Persisted templates currently support only escaped dynamic text and dynamic attributes in native HTML.
- at packages/runtime-tags/src/__tests__/fixtures/persisted-script-global-alias/template.marko
\ No newline at end of file
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-script-global-alias/__snapshots__/error-compile-dom.txt b/packages/runtime-tags/src/__tests__/fixtures/persisted-script-global-alias/__snapshots__/error-compile-dom.txt
deleted file mode 100644
index 02b6930cf91..00000000000
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-script-global-alias/__snapshots__/error-compile-dom.txt
+++ /dev/null
@@ -1,2 +0,0 @@
-Persisted templates currently support only escaped dynamic text and dynamic attributes in native HTML.
- at packages/runtime-tags/src/__tests__/fixtures/persisted-script-global-alias/template.marko
\ No newline at end of file
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-script-global-alias/__snapshots__/error-compile-html.debug.txt b/packages/runtime-tags/src/__tests__/fixtures/persisted-script-global-alias/__snapshots__/error-compile-html.debug.txt
deleted file mode 100644
index 02b6930cf91..00000000000
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-script-global-alias/__snapshots__/error-compile-html.debug.txt
+++ /dev/null
@@ -1,2 +0,0 @@
-Persisted templates currently support only escaped dynamic text and dynamic attributes in native HTML.
- at packages/runtime-tags/src/__tests__/fixtures/persisted-script-global-alias/template.marko
\ No newline at end of file
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-script-global-alias/__snapshots__/error-compile-html.txt b/packages/runtime-tags/src/__tests__/fixtures/persisted-script-global-alias/__snapshots__/error-compile-html.txt
deleted file mode 100644
index 02b6930cf91..00000000000
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-script-global-alias/__snapshots__/error-compile-html.txt
+++ /dev/null
@@ -1,2 +0,0 @@
-Persisted templates currently support only escaped dynamic text and dynamic attributes in native HTML.
- at packages/runtime-tags/src/__tests__/fixtures/persisted-script-global-alias/template.marko
\ No newline at end of file
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-script-global-alias/__snapshots__/html.bundle.debug.js b/packages/runtime-tags/src/__tests__/fixtures/persisted-script-global-alias/__snapshots__/html.bundle.debug.js
new file mode 100644
index 00000000000..01e03f42082
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-script-global-alias/__snapshots__/html.bundle.debug.js
@@ -0,0 +1,14 @@
+// template.marko
+const $template = "
";
+const $walks = "E m";
+_shells({ "__tests__/template.marko": "__tests__/template.marko !__tests__/template.marko_0_brand#1;E ;
" });
+var template_default = _template_persisted("__tests__/template.marko", (input) => {
+ const $scope0_reason = _persisted_reason();
+ const $scope0_id = _scope_id();
+ const $global$1 = $global();
+ const brand = $global$1.brand;
+ _html(`${_patch_text($scope0_id, "#text/0", brand)}
`);
+ _script($scope0_id, "__tests__/template.marko_0_brand#1");
+ _patch_effect($scope0_id, "__tests__/template.marko_0_brand#1", "brand");
+ $scope0_reason ? _scope($scope0_id, { brand }, "__tests__/template.marko", 0, { brand: "1:8" }) : _patch_write($scope0_id, "brand", brand);
+}, 1, 1);
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-script-global-alias/__snapshots__/html.bundle.js b/packages/runtime-tags/src/__tests__/fixtures/persisted-script-global-alias/__snapshots__/html.bundle.js
new file mode 100644
index 00000000000..c8222fd44a1
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-script-global-alias/__snapshots__/html.bundle.js
@@ -0,0 +1,11 @@
+// template.marko
+_shells({ a: "a !a0;E ;
" });
+var template_default = _template_persisted("a", (input) => {
+ const $scope0_reason = _persisted_reason();
+ const $scope0_id = _scope_id();
+ const brand = $global().brand;
+ _html(`${_patch_text($scope0_id, "a", brand)}
`);
+ _script($scope0_id, "a0");
+ _patch_effect($scope0_id, "a0", "b");
+ $scope0_reason ? _scope($scope0_id, { b: brand }) : _patch_write($scope0_id, "b", brand);
+}, 1, 1);
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-script-global-alias/__snapshots__/patches.debug.js b/packages/runtime-tags/src/__tests__/fixtures/persisted-script-global-alias/__snapshots__/patches.debug.js
new file mode 100644
index 00000000000..03efb79c502
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-script-global-alias/__snapshots__/patches.debug.js
@@ -0,0 +1,6 @@
+// PATCH
+{
+ "PatchText:#text/0": "bmce",
+ "PatchEffect:packages/runtime-tags/src/__tests__/fixtures/persisted-script-global-alias/template.marko_0_brand#1": "brand",
+ "PatchWrite:brand": "bmce"
+}
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-script-global-alias/__snapshots__/patches.js b/packages/runtime-tags/src/__tests__/fixtures/persisted-script-global-alias/__snapshots__/patches.js
new file mode 100644
index 00000000000..91ffe4e9e29
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-script-global-alias/__snapshots__/patches.js
@@ -0,0 +1,6 @@
+// PATCH
+{
+ ta: "bmce",
+ ea0: "b",
+ wb: "bmce"
+}
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-script-global-alias/__snapshots__/render.debug.md b/packages/runtime-tags/src/__tests__/fixtures/persisted-script-global-alias/__snapshots__/render.debug.md
new file mode 100644
index 00000000000..7c698dbefbd
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-script-global-alias/__snapshots__/render.debug.md
@@ -0,0 +1,26 @@
+# Render `{"$global":{"brand":"acme"}}`
+```html
+
+
+ acme
+
+
+```
+
+# Update `{"$global":{"brand":"bmce"}}`
+```html
+
+
+ bmce
+
+
+```
+## Change
+```
+UPDATE: main > h1::text "acme" => "bmce"
+UPDATE: main[data-brand] "acme" => "bmce"
+```
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-script-global-alias/__snapshots__/render.md b/packages/runtime-tags/src/__tests__/fixtures/persisted-script-global-alias/__snapshots__/render.md
new file mode 100644
index 00000000000..7c698dbefbd
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-script-global-alias/__snapshots__/render.md
@@ -0,0 +1,26 @@
+# Render `{"$global":{"brand":"acme"}}`
+```html
+
+
+ acme
+
+
+```
+
+# Update `{"$global":{"brand":"bmce"}}`
+```html
+
+
+ bmce
+
+
+```
+## Change
+```
+UPDATE: main > h1::text "acme" => "bmce"
+UPDATE: main[data-brand] "acme" => "bmce"
+```
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-script-global-alias/__snapshots__/writes.debug.html b/packages/runtime-tags/src/__tests__/fixtures/persisted-script-global-alias/__snapshots__/writes.debug.html
new file mode 100644
index 00000000000..a0d0624558e
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-script-global-alias/__snapshots__/writes.debug.html
@@ -0,0 +1,12 @@
+
+ acme
+
+
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-script-global-alias/__snapshots__/writes.html b/packages/runtime-tags/src/__tests__/fixtures/persisted-script-global-alias/__snapshots__/writes.html
new file mode 100644
index 00000000000..0f6530c7274
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-script-global-alias/__snapshots__/writes.html
@@ -0,0 +1,10 @@
+
+ acme
+
+
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-script-global-alias/sizes.json b/packages/runtime-tags/src/__tests__/fixtures/persisted-script-global-alias/sizes.json
new file mode 100644
index 00000000000..30e0da289b4
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-script-global-alias/sizes.json
@@ -0,0 +1,16 @@
+{
+ "dom": {
+ "template.marko.page.mjs": {
+ "min": 2681,
+ "brotli": 1346
+ }
+ },
+ "html": {
+ "min": 352,
+ "brotli": 255
+ },
+ "patch": {
+ "min": 30,
+ "brotli": 34
+ }
+}
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-script-global-alias/test.ts b/packages/runtime-tags/src/__tests__/fixtures/persisted-script-global-alias/test.ts
index df62ffe6fdd..67410dca285 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-script-global-alias/test.ts
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-script-global-alias/test.ts
@@ -1,8 +1,11 @@
import type { TestConfig } from "../../main.test";
-// A `
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-script-global-keys/__snapshots__/writes.html b/packages/runtime-tags/src/__tests__/fixtures/persisted-script-global-keys/__snapshots__/writes.html
index 53dedea8711..1a1c1756e3e 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-script-global-keys/__snapshots__/writes.html
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-script-global-keys/__snapshots__/writes.html
@@ -7,6 +7,9 @@ x
brand: "Marko",
locale: "en",
other: "x"
+ }, {
+ c: "Marko",
+ d: "en"
}], "a0 1"];
M._.w()
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-script-global-keys/sizes.json b/packages/runtime-tags/src/__tests__/fixtures/persisted-script-global-keys/sizes.json
index e29cef7ab03..8b24a6e20ec 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-script-global-keys/sizes.json
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-script-global-keys/sizes.json
@@ -1,16 +1,16 @@
{
"dom": {
"template.marko.page.mjs": {
- "min": 2757,
- "brotli": 1385
+ "min": 2727,
+ "brotli": 1368
}
},
"html": {
- "min": 376,
- "brotli": 268
+ "min": 395,
+ "brotli": 276
},
"patch": {
- "min": 210,
- "brotli": 87
+ "min": 234,
+ "brotli": 92
}
}
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-script-global-opaque/__snapshots__/dom.bundle.debug.js b/packages/runtime-tags/src/__tests__/fixtures/persisted-script-global-opaque/__snapshots__/dom.bundle.debug.js
index 067b6b05829..e9723fb5e68 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-script-global-opaque/__snapshots__/dom.bundle.debug.js
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-script-global-opaque/__snapshots__/dom.bundle.debug.js
@@ -8,8 +8,5 @@ const $setup__script = _script("__tests__/template.marko_0", ($scope) => {
el.dataset.log = (el.dataset.log || "") + "[" + g.brand + "]";
}
});
-function $setup($scope) {
- _text($scope["#text/0"], $scope.$global.other);
- $setup__script($scope);
-}
+const $setup = $setup__script;
var template_default = /*@__PURE__*/ _template("__tests__/template.marko", $template, "E m", $setup);
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-script-global-opaque/sizes.json b/packages/runtime-tags/src/__tests__/fixtures/persisted-script-global-opaque/sizes.json
index e1a42639214..0a333333e68 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-script-global-opaque/sizes.json
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-script-global-opaque/sizes.json
@@ -1,8 +1,8 @@
{
"dom": {
"template.marko.page.mjs": {
- "min": 2746,
- "brotli": 1380
+ "min": 2729,
+ "brotli": 1371
}
},
"html": {
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-script-global/__snapshots__/dom.bundle.debug.js b/packages/runtime-tags/src/__tests__/fixtures/persisted-script-global/__snapshots__/dom.bundle.debug.js
index 69f56a40d66..8e35c7098f6 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-script-global/__snapshots__/dom.bundle.debug.js
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-script-global/__snapshots__/dom.bundle.debug.js
@@ -1,14 +1,11 @@
// template.marko
const $template = "
";
const $walks = "E m";
-const $setup__script = _script("__tests__/template.marko_0", ($scope) => {
+const $setup = () => {};
+const $global_brand__script = _script("__tests__/template.marko_0_$global_brand#1", ($scope) => {
{
const el = document.querySelector("main");
- el.dataset.log = (el.dataset.log || "") + "[" + $scope.$global.brand + "]";
+ el.dataset.log = (el.dataset.log || "") + "[" + $scope.$global_brand + "]";
}
});
-function $setup($scope) {
- _text($scope["#text/0"], $scope.$global.brand);
- $setup__script($scope);
-}
-var template_default = /*@__PURE__*/ _template("__tests__/template.marko", $template, "E m", $setup);
+var template_default = /*@__PURE__*/ _template("__tests__/template.marko", $template, "E m");
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-script-global/__snapshots__/dom.bundle.js b/packages/runtime-tags/src/__tests__/fixtures/persisted-script-global/__snapshots__/dom.bundle.js
index db99d9fc630..9cba7c10321 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-script-global/__snapshots__/dom.bundle.js
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-script-global/__snapshots__/dom.bundle.js
@@ -1,7 +1,7 @@
// template.marko
-const $setup__script = _script("a0", ($scope) => {
+_script("a0", ($scope) => {
{
const el = document.querySelector("main");
- el.dataset.log = (el.dataset.log || "") + "[" + $scope.$.brand + "]";
+ el.dataset.log = (el.dataset.log || "") + "[" + $scope.b + "]";
}
});
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-script-global/__snapshots__/html.bundle.debug.js b/packages/runtime-tags/src/__tests__/fixtures/persisted-script-global/__snapshots__/html.bundle.debug.js
index 138de5669b7..469521ac128 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-script-global/__snapshots__/html.bundle.debug.js
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-script-global/__snapshots__/html.bundle.debug.js
@@ -1,13 +1,13 @@
// template.marko
const $template = "
";
const $walks = "E m";
-_shells({ "__tests__/template.marko": "__tests__/template.marko !__tests__/template.marko_0;E ;
" });
+_shells({ "__tests__/template.marko": "__tests__/template.marko !__tests__/template.marko_0_$global_brand#1;E ;
" });
var template_default = _template_persisted("__tests__/template.marko", (input) => {
const $scope0_reason = _persisted_reason();
const $scope0_id = _scope_id();
const $global$1 = $global();
_html(`${_patch_text($scope0_id, "#text/0", $global$1.brand)}
`);
- _script($scope0_id, "__tests__/template.marko_0");
- _patch_effect($scope0_id, "__tests__/template.marko_0", "! brand", 1);
- $scope0_reason && _scope($scope0_id, {}, "__tests__/template.marko", 0);
+ _script($scope0_id, "__tests__/template.marko_0_$global_brand#1");
+ _patch_effect($scope0_id, "__tests__/template.marko_0_$global_brand#1", "$global_brand");
+ $scope0_reason ? _scope($scope0_id, { $global_brand: $global$1?.brand }, "__tests__/template.marko", 0, { $global_brand: ["$global.brand"] }) : _patch_write($scope0_id, "$global_brand", $global$1?.brand);
}, 1, 1);
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-script-global/__snapshots__/html.bundle.js b/packages/runtime-tags/src/__tests__/fixtures/persisted-script-global/__snapshots__/html.bundle.js
index a290639badd..2af6b4bbaba 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-script-global/__snapshots__/html.bundle.js
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-script-global/__snapshots__/html.bundle.js
@@ -3,8 +3,9 @@ _shells({ a: "a !a0;E ;
" });
var template_default = _template_persisted("a", (input) => {
const $scope0_reason = _persisted_reason();
const $scope0_id = _scope_id();
- _html(`${_patch_text($scope0_id, "a", $global().brand)}
`);
+ const $global$1 = $global();
+ _html(`${_patch_text($scope0_id, "a", $global$1.brand)}
`);
_script($scope0_id, "a0");
- _patch_effect($scope0_id, "a0", "! brand", 1);
- $scope0_reason && _scope($scope0_id, {});
+ _patch_effect($scope0_id, "a0", "b");
+ $scope0_reason ? _scope($scope0_id, { b: $global$1?.brand }) : _patch_write($scope0_id, "b", $global$1?.brand);
}, 1, 1);
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-script-global/__snapshots__/patches.debug.js b/packages/runtime-tags/src/__tests__/fixtures/persisted-script-global/__snapshots__/patches.debug.js
index 163dca0e0a1..c367db0bda3 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-script-global/__snapshots__/patches.debug.js
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-script-global/__snapshots__/patches.debug.js
@@ -4,7 +4,8 @@
brand: "Marko"
},
"PatchText:#text/0": "Marko",
- "PatchGlobalEffect:packages/runtime-tags/src/__tests__/fixtures/persisted-script-global/template.marko_0": "! brand"
+ "PatchEffect:packages/runtime-tags/src/__tests__/fixtures/persisted-script-global/template.marko_0_$global_brand#1": "$global_brand",
+ "PatchWrite:$global_brand": "Marko"
}
// PATCH
@@ -13,5 +14,6 @@
brand: "Runtime"
},
"PatchText:#text/0": "Runtime",
- "PatchGlobalEffect:packages/runtime-tags/src/__tests__/fixtures/persisted-script-global/template.marko_0": "! brand"
+ "PatchEffect:packages/runtime-tags/src/__tests__/fixtures/persisted-script-global/template.marko_0_$global_brand#1": "$global_brand",
+ "PatchWrite:$global_brand": "Runtime"
}
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-script-global/__snapshots__/patches.js b/packages/runtime-tags/src/__tests__/fixtures/persisted-script-global/__snapshots__/patches.js
index d1d1462db7b..0091256ac52 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-script-global/__snapshots__/patches.js
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-script-global/__snapshots__/patches.js
@@ -4,7 +4,8 @@
brand: "Marko"
},
ta: "Marko",
- ga0: "! brand"
+ ea0: "b",
+ wb: "Marko"
}
// PATCH
@@ -13,5 +14,6 @@
brand: "Runtime"
},
ta: "Runtime",
- ga0: "! brand"
+ ea0: "b",
+ wb: "Runtime"
}
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-script-global/__snapshots__/writes.debug.html b/packages/runtime-tags/src/__tests__/fixtures/persisted-script-global/__snapshots__/writes.debug.html
index 3b210c4df86..0e28a9b6dca 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-script-global/__snapshots__/writes.debug.html
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-script-global/__snapshots__/writes.debug.html
@@ -5,8 +5,10 @@ Marko
WALKER_RUNTIME("M")("_");
M._.r = [_ => [0, {
brand: "Marko"
+ }, {
+ $global_brand: "Marko"
}],
- "packages/runtime-tags/src/__tests__/fixtures/persisted-script-global/template.marko_0 1"
+ "packages/runtime-tags/src/__tests__/fixtures/persisted-script-global/template.marko_0_$global_brand#1 1"
];
M._.w()
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-script-global/__snapshots__/writes.html b/packages/runtime-tags/src/__tests__/fixtures/persisted-script-global/__snapshots__/writes.html
index 8399dfe1660..d8da4be4fe4 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-script-global/__snapshots__/writes.html
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-script-global/__snapshots__/writes.html
@@ -5,6 +5,8 @@ Marko
WALKER_RUNTIME("M")("_");
M._.r = [_ => [0, {
brand: "Marko"
+ }, {
+ b: "Marko"
}], "a0 1"];
M._.w()
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-script-global/sizes.json b/packages/runtime-tags/src/__tests__/fixtures/persisted-script-global/sizes.json
index 438b70bf458..447ebb81995 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-script-global/sizes.json
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-script-global/sizes.json
@@ -1,16 +1,16 @@
{
"dom": {
"template.marko.page.mjs": {
- "min": 2742,
- "brotli": 1378
+ "min": 2719,
+ "brotli": 1366
}
},
"html": {
- "min": 358,
- "brotli": 259
+ "min": 370,
+ "brotli": 261
},
"patch": {
- "min": 94,
- "brotli": 81
+ "min": 106,
+ "brotli": 88
}
}
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-script-input/sizes.json b/packages/runtime-tags/src/__tests__/fixtures/persisted-script-input/sizes.json
index 4eee923cc2f..c8c61c8afff 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-script-input/sizes.json
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-script-input/sizes.json
@@ -1,8 +1,8 @@
{
"dom": {
"template.marko.page.mjs": {
- "min": 2759,
- "brotli": 1380
+ "min": 2742,
+ "brotli": 1368
}
},
"html": {
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-script-inputs/sizes.json b/packages/runtime-tags/src/__tests__/fixtures/persisted-script-inputs/sizes.json
index 4592e9df271..f5ed7a08e1a 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-script-inputs/sizes.json
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-script-inputs/sizes.json
@@ -1,8 +1,8 @@
{
"dom": {
"template.marko.page.mjs": {
- "min": 2759,
- "brotli": 1379
+ "min": 2742,
+ "brotli": 1366
}
},
"html": {
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-shell-holes/sizes.json b/packages/runtime-tags/src/__tests__/fixtures/persisted-shell-holes/sizes.json
index e877272edfb..641a109cb88 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-shell-holes/sizes.json
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-shell-holes/sizes.json
@@ -1,8 +1,8 @@
{
"dom": {
"template.marko.page.mjs": {
- "min": 6704,
- "brotli": 3022
+ "min": 6686,
+ "brotli": 3015
}
},
"html": {
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-spread-attributes/__snapshots__/html.bundle.debug.js b/packages/runtime-tags/src/__tests__/fixtures/persisted-spread-attributes/__snapshots__/html.bundle.debug.js
index 16fd121c091..318616d1067 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-spread-attributes/__snapshots__/html.bundle.debug.js
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-spread-attributes/__snapshots__/html.bundle.debug.js
@@ -12,14 +12,14 @@ var template_default = _template_persisted("__tests__/template.marko", (input) =
_html(`${_patch_text($scope0_id, "#text/1", input.label, void 0, $scope0_owned, 2)}${_el_resume($scope0_id, "#a/0")}`);
+ }, "#a/0", $scope0_id, "a", void 0, $scope0_owned, 1)}>${_patch_text($scope0_id, "#text/1", input.label, void 0, $scope0_owned, 2)}${_el_resume($scope0_id, "#a/0")}`);
_if(() => {
if (input.show) {
const $scope1_id = _scope_id();
_html(`
${_el_resume($scope1_id, "#img/0")}`);
+ }, "#img/0", $scope1_id, "img", void 0, $scope0_owned, 4)}>${_el_resume($scope1_id, "#img/0")}`);
_script($scope1_id, "__tests__/template.marko_1_input_img#10");
_scope($scope1_id, { _: _scope_with_id($scope0_id) }, "__tests__/template.marko", "4:4", { "EventAttributes:#img/0": ["...input.img", "5:24"] });
return 0;
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-spread-attributes/__snapshots__/html.bundle.js b/packages/runtime-tags/src/__tests__/fixtures/persisted-spread-attributes/__snapshots__/html.bundle.js
index 6a6f914ae7a..9f436ec0241 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-spread-attributes/__snapshots__/html.bundle.js
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-spread-attributes/__snapshots__/html.bundle.js
@@ -10,14 +10,14 @@ var template_default = _template_persisted("a", (input) => {
_html(`${_patch_text($scope0_id, "b", input.label, void 0, $scope0_owned, 2)}${_el_resume($scope0_id, "a")}`);
+ }, "a", $scope0_id, "a", void 0, $scope0_owned, 1)}>${_patch_text($scope0_id, "b", input.label, void 0, $scope0_owned, 2)}${_el_resume($scope0_id, "a")}`);
_if(() => {
if (input.show) {
const $scope1_id = _scope_id();
_html(`
${_el_resume($scope1_id, "a")}`);
+ }, "a", $scope1_id, "img", void 0, $scope0_owned, 4)}>${_el_resume($scope1_id, "a")}`);
_script($scope1_id, "a1");
_scope($scope1_id, { _: _scope_with_id($scope0_id) });
return 0;
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-spread-attributes/sizes.json b/packages/runtime-tags/src/__tests__/fixtures/persisted-spread-attributes/sizes.json
index 978419587be..3b10c6bf058 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-spread-attributes/sizes.json
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-spread-attributes/sizes.json
@@ -1,8 +1,8 @@
{
"dom": {
"template.marko.page.mjs": {
- "min": 9815,
- "brotli": 4195
+ "min": 9807,
+ "brotli": 4212
}
},
"html": {
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-spread-client-owned/sizes.json b/packages/runtime-tags/src/__tests__/fixtures/persisted-spread-client-owned/sizes.json
index a1209de0184..c0f33825d8d 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-spread-client-owned/sizes.json
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-spread-client-owned/sizes.json
@@ -1,8 +1,8 @@
{
"dom": {
"template.marko.page.mjs": {
- "min": 9350,
- "brotli": 4026
+ "min": 9358,
+ "brotli": 4037
}
},
"html": {
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-spread-handler/__snapshots__/html.bundle.debug.js b/packages/runtime-tags/src/__tests__/fixtures/persisted-spread-handler/__snapshots__/html.bundle.debug.js
index 47b8a52e4b7..b9e57d04741 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-spread-handler/__snapshots__/html.bundle.debug.js
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-spread-handler/__snapshots__/html.bundle.debug.js
@@ -18,7 +18,7 @@ var template_default = _template_persisted("__tests__/template.marko", (input) =
onClick: _resume(function() {
count++;
}, "__tests__/template.marko_1/onClick", $scope1_id)
- }, "#a/0", $scope1_id, "a", $scope0_owned, 2)}>go${_el_resume($scope1_id, "#a/0")}`);
+ }, "#a/0", $scope1_id, "a", void 0, $scope0_owned, 2)}>go${_el_resume($scope1_id, "#a/0")}`);
_script($scope1_id, "__tests__/template.marko_1_input_attrs#5");
_scope($scope1_id, { _: _scope_with_id($scope0_id) }, "__tests__/template.marko", "3:4", { "EventAttributes:#a/0": ["...{ ...input.attrs, onClick() { count++ } }", "4:11"] });
return 0;
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-spread-handler/__snapshots__/html.bundle.js b/packages/runtime-tags/src/__tests__/fixtures/persisted-spread-handler/__snapshots__/html.bundle.js
index b8fdd601243..393b3f3bb8e 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-spread-handler/__snapshots__/html.bundle.js
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-spread-handler/__snapshots__/html.bundle.js
@@ -16,7 +16,7 @@ var template_default = _template_persisted("a", (input) => {
onClick: _resume(function() {
count++;
}, "a0", $scope1_id)
- }, "a", $scope1_id, "a", $scope0_owned, 2)}>go${_el_resume($scope1_id, "a")}`);
+ }, "a", $scope1_id, "a", void 0, $scope0_owned, 2)}>go${_el_resume($scope1_id, "a")}`);
_script($scope1_id, "a2");
_scope($scope1_id, { _: _scope_with_id($scope0_id) });
return 0;
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-spread-handler/sizes.json b/packages/runtime-tags/src/__tests__/fixtures/persisted-spread-handler/sizes.json
index b2ab0d4b32f..541dc0996af 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-spread-handler/sizes.json
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-spread-handler/sizes.json
@@ -1,8 +1,8 @@
{
"dom": {
"template.marko.page.mjs": {
- "min": 9748,
- "brotli": 4177
+ "min": 9740,
+ "brotli": 4183
}
},
"html": {
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-spread-partial/__snapshots__/html.bundle.debug.js b/packages/runtime-tags/src/__tests__/fixtures/persisted-spread-partial/__snapshots__/html.bundle.debug.js
index 5c0cd3ad395..634e64e825d 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-spread-partial/__snapshots__/html.bundle.debug.js
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-spread-partial/__snapshots__/html.bundle.debug.js
@@ -6,7 +6,7 @@ var template_default = _template_persisted("__tests__/template.marko", (input) =
const $scope0_owned = _persisted_ownership(), $scope0_reason = _persisted_reason();
const $scope0_id = _scope_id();
let count = 0;
- _html(`${_el_resume($scope0_id, "#button/0")}${_patch_text($scope0_id, "#text/3", input.label, void 0, $scope0_owned, 2)}
${_el_resume($scope0_id, "#div/2")}`);
+ _html(`${_el_resume($scope0_id, "#button/0")}${_patch_text($scope0_id, "#text/3", input.label, void 0, $scope0_owned, 2)}
${_el_resume($scope0_id, "#div/2")}`);
_script($scope0_id, "__tests__/template.marko_0_input_box#7");
_script($scope0_id, "__tests__/template.marko_0_input_attrs#6");
_script($scope0_id, "__tests__/template.marko_0");
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-spread-partial/__snapshots__/html.bundle.js b/packages/runtime-tags/src/__tests__/fixtures/persisted-spread-partial/__snapshots__/html.bundle.js
index a6c84514cc1..9e2e76534fe 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-spread-partial/__snapshots__/html.bundle.js
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-spread-partial/__snapshots__/html.bundle.js
@@ -4,7 +4,7 @@ var template_default = _template_persisted("a", (input) => {
const $scope0_owned = _persisted_ownership(), $scope0_reason = _persisted_reason();
const $scope0_id = _scope_id();
let count = 0;
- _html(`${_el_resume($scope0_id, "a")}${_patch_text($scope0_id, "d", input.label, void 0, $scope0_owned, 2)}
${_el_resume($scope0_id, "c")}`);
+ _html(`${_el_resume($scope0_id, "a")}${_patch_text($scope0_id, "d", input.label, void 0, $scope0_owned, 2)}
${_el_resume($scope0_id, "c")}`);
_script($scope0_id, "a0");
_script($scope0_id, "a1");
_script($scope0_id, "a2");
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-spread-partial/sizes.json b/packages/runtime-tags/src/__tests__/fixtures/persisted-spread-partial/sizes.json
index 2030927c608..8ba387fea23 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-spread-partial/sizes.json
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-spread-partial/sizes.json
@@ -1,8 +1,8 @@
{
"dom": {
"template.marko.page.mjs": {
- "min": 5720,
- "brotli": 2539
+ "min": 5729,
+ "brotli": 2549
}
},
"html": {
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-spread-state/sizes.json b/packages/runtime-tags/src/__tests__/fixtures/persisted-spread-state/sizes.json
index 2abee79bdf1..f462fdc98b2 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-spread-state/sizes.json
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-spread-state/sizes.json
@@ -1,8 +1,8 @@
{
"dom": {
"template.marko.page.mjs": {
- "min": 10374,
- "brotli": 4441
+ "min": 10366,
+ "brotli": 4454
}
},
"html": {
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-state/sizes.json b/packages/runtime-tags/src/__tests__/fixtures/persisted-state/sizes.json
index 94ad17b978a..ca00825c9af 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-state/sizes.json
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-state/sizes.json
@@ -1,8 +1,8 @@
{
"dom": {
"template.marko.page.mjs": {
- "min": 3213,
- "brotli": 1608
+ "min": 3196,
+ "brotli": 1599
}
},
"html": {
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-static-scriptlets/sizes.json b/packages/runtime-tags/src/__tests__/fixtures/persisted-static-scriptlets/sizes.json
index 710ac8cc8d1..e10695e362c 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-static-scriptlets/sizes.json
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-static-scriptlets/sizes.json
@@ -1,8 +1,8 @@
{
"dom": {
"template.marko.page.mjs": {
- "min": 8472,
- "brotli": 3762
+ "min": 8433,
+ "brotli": 3744
}
},
"html": {
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-text-holes/sizes.json b/packages/runtime-tags/src/__tests__/fixtures/persisted-text-holes/sizes.json
index 4388c8a206a..0d3636ba049 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-text-holes/sizes.json
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-text-holes/sizes.json
@@ -1,8 +1,8 @@
{
"dom": {
"template.marko.page.mjs": {
- "min": 2108,
- "brotli": 1103
+ "min": 2091,
+ "brotli": 1087
}
},
"html": {
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-try-abort-disconnect/__snapshots__/dom.bundle.debug.js b/packages/runtime-tags/src/__tests__/fixtures/persisted-try-abort-disconnect/__snapshots__/dom.bundle.debug.js
new file mode 100644
index 00000000000..0b503156c1d
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-try-abort-disconnect/__snapshots__/dom.bundle.debug.js
@@ -0,0 +1,31 @@
+// template.marko
+const $template = "";
+const $walks = " D l%c";
+const $await_content__v = ($scope, v) => _text($scope["#text/0"], v);
+const $await_content__$params = ($scope, $params2) => $await_content__v($scope, $params2[0]);
+const $catch_content = _content_resume("__tests__/template.marko_3*content", "caught-a");
+const $placeholder_content = _content_resume("__tests__/template.marko_2*content", "wait");
+const $await_content = /*@__PURE__*/ _await_content("#text/0", "A:
", "Db%");
+const $try_content__await_promise = /*@__PURE__*/ _await_promise("#text/0", $await_content__$params);
+const $try_content__input_a = /*@__PURE__*/ _closure_get("input_a", ($scope) => $try_content__await_promise($scope, $scope._.input_a));
+const $try_content__setup = ($scope) => {
+ $try_content__input_a($scope);
+ $await_content($scope);
+};
+const $n = /*@__PURE__*/ _let("n/6", ($scope) => _text($scope["#text/1"], $scope.n));
+const $try = /*@__PURE__*/ _try("#text/2", "", "b%", $try_content__setup);
+const $setup__script = _script("__tests__/template.marko_0", ($scope) => _on($scope["#button/0"], "click", function() {
+ $n($scope, +$scope.n + 1);
+}));
+function $setup($scope) {
+ $n($scope, 0);
+ $try($scope, {
+ placeholder: attrTag({ content: $placeholder_content($scope) }),
+ catch: attrTag({ content: $catch_content($scope) })
+ });
+ $setup__script($scope);
+}
+const $input = ($scope, input) => $input_a($scope, input.a);
+const $input_a__closure = /*@__PURE__*/ _closure($try_content__input_a);
+const $input_a = /*@__PURE__*/ _const("input_a", $input_a__closure);
+var template_default = /*@__PURE__*/ _template("__tests__/template.marko", $template, $walks, $setup, $input);
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-try-abort-disconnect/__snapshots__/dom.bundle.js b/packages/runtime-tags/src/__tests__/fixtures/persisted-try-abort-disconnect/__snapshots__/dom.bundle.js
new file mode 100644
index 00000000000..0b699d0319e
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-try-abort-disconnect/__snapshots__/dom.bundle.js
@@ -0,0 +1,7 @@
+// template.marko
+const $catch_content = _content_resume("a1", "caught-a");
+const $placeholder_content = _content_resume("a2", "wait");
+const $n = /*@__PURE__*/ _let(6, ($scope) => _text($scope.b, $scope.g));
+const $setup__script = _script("a5", ($scope) => _on($scope.a, "click", function() {
+ $n($scope, +$scope.g + 1);
+}));
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-try-abort-disconnect/__snapshots__/html.bundle.debug.js b/packages/runtime-tags/src/__tests__/fixtures/persisted-try-abort-disconnect/__snapshots__/html.bundle.debug.js
new file mode 100644
index 00000000000..ea906a09583
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-try-abort-disconnect/__snapshots__/html.bundle.debug.js
@@ -0,0 +1,38 @@
+// template.marko
+const $template = "";
+const $walks = " D l%c";
+_shells({
+ "__tests__/template.marko_4*content": "__tests__/template.marko_4*content;Db%;A:
",
+ "__tests__/template.marko_3*content": "__tests__/template.marko_3*content,caught-a",
+ "__tests__/template.marko_2*content": "__tests__/template.marko_2*content,wait",
+ "__tests__/template.marko_1_#text#0/await": "__tests__/template.marko_1_#text#0/await;Db%;A:
",
+ "__tests__/template.marko_1*content": "__tests__/template.marko_1*content;b%;",
+ "__tests__/template.marko": "__tests__/template.marko !__tests__/template.marko_0; D l%;"
+});
+var template_default = _template_persisted("__tests__/template.marko", (input) => {
+ const $scope0_owned = _persisted_ownership(), $scope0_reason = _persisted_reason();
+ const $scope0_id = _scope_id();
+ const $input_a__closures = new Set();
+ let n = 0;
+ _html(`${_el_resume($scope0_id, "#button/0")}`);
+ _try($scope0_id, "#text/2", _content_resume("__tests__/template.marko_1*content", () => {
+ const $scope1_id = _scope_id();
+ const $scope1_reason = _persisted_reason();
+ _await($scope1_id, "#text/0", input.a, (v) => {
+ const $scope4_id = _scope_id();
+ _html(`A:${_patch_text($scope4_id, "#text/0", v, 2, $scope0_owned, 0)}
`);
+ _scope($scope4_id, {}, "__tests__/template.marko", "4:4");
+ }, 1, "__tests__/template.marko_1_#text#0/await", 1);
+ $scope0_reason && _subscribe($input_a__closures, _scope($scope1_id, { _: _scope_with_id($scope0_id) }, "__tests__/template.marko", "3:2"));
+ _resume_branch($scope1_id);
+ }, $scope0_id), {
+ placeholder: attrTag({ content: _content_record("__tests__/template.marko_2*content", $scope0_id) }),
+ catch: attrTag({ content: _content_record("__tests__/template.marko_3*content", $scope0_id) })
+ }, 1);
+ _script($scope0_id, "__tests__/template.marko_0");
+ $scope0_reason && _scope($scope0_id, {
+ n,
+ "ClosureScopes:input_a": $input_a__closures
+ }, "__tests__/template.marko", 0, { n: "1:6" });
+ _resume_branch($scope0_id);
+}, 1, 0);
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-try-abort-disconnect/__snapshots__/html.bundle.js b/packages/runtime-tags/src/__tests__/fixtures/persisted-try-abort-disconnect/__snapshots__/html.bundle.js
new file mode 100644
index 00000000000..80cd6fdc1f3
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-try-abort-disconnect/__snapshots__/html.bundle.js
@@ -0,0 +1,36 @@
+// template.marko
+_shells({
+ a0: "a0;Db%;A:
",
+ a1: "a1,caught-a",
+ a2: "a2,wait",
+ a3: "a3;Db%;A:
",
+ a4: "a4;b%;",
+ a: "a !a5; D l%;"
+});
+var template_default = _template_persisted("a", (input) => {
+ const $scope0_owned = _persisted_ownership(), $scope0_reason = _persisted_reason();
+ const $scope0_id = _scope_id();
+ const $input_a__closures = /* @__PURE__ */ new Set();
+ let n = 0;
+ _html(`${_el_resume($scope0_id, "a")}`);
+ _try($scope0_id, "c", _content_resume("a4", () => {
+ const $scope1_id = _scope_id();
+ _persisted_reason();
+ _await($scope1_id, "a", input.a, (v) => {
+ const $scope4_id = _scope_id();
+ _html(`A:${_patch_text($scope4_id, "a", v, 2, $scope0_owned, 0)}
`);
+ _scope($scope4_id, {});
+ }, 1, "a3", 1);
+ $scope0_reason && _subscribe($input_a__closures, _scope($scope1_id, { _: _scope_with_id($scope0_id) }));
+ _resume_branch($scope1_id);
+ }, $scope0_id), {
+ placeholder: attrTag({ content: _content_record("a2", $scope0_id) }),
+ catch: attrTag({ content: _content_record("a1", $scope0_id) })
+ }, 1);
+ _script($scope0_id, "a5");
+ $scope0_reason && _scope($scope0_id, {
+ g: n,
+ h: $input_a__closures
+ });
+ _resume_branch($scope0_id);
+}, 1, 0);
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-try-abort-disconnect/__snapshots__/patches.debug.js b/packages/runtime-tags/src/__tests__/fixtures/persisted-try-abort-disconnect/__snapshots__/patches.debug.js
new file mode 100644
index 00000000000..8b137891791
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-try-abort-disconnect/__snapshots__/patches.debug.js
@@ -0,0 +1 @@
+
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-try-abort-disconnect/__snapshots__/patches.js b/packages/runtime-tags/src/__tests__/fixtures/persisted-try-abort-disconnect/__snapshots__/patches.js
new file mode 100644
index 00000000000..8b137891791
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-try-abort-disconnect/__snapshots__/patches.js
@@ -0,0 +1 @@
+
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-try-abort-disconnect/__snapshots__/render.debug.md b/packages/runtime-tags/src/__tests__/fixtures/persisted-try-abort-disconnect/__snapshots__/render.debug.md
new file mode 100644
index 00000000000..f40b13007f0
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-try-abort-disconnect/__snapshots__/render.debug.md
@@ -0,0 +1,26 @@
+# Render `{"a":{},"$global":{"signal":{}}}`
+```html
+
+
+ wait
+
+```
+
+# Update
+```js
+document.querySelector("button").click();
+```
+```html
+
+
+ wait
+
+```
+## Change
+```
+UPDATE: button::text "0" => "1"
+```
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-try-abort-disconnect/__snapshots__/render.md b/packages/runtime-tags/src/__tests__/fixtures/persisted-try-abort-disconnect/__snapshots__/render.md
new file mode 100644
index 00000000000..f40b13007f0
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-try-abort-disconnect/__snapshots__/render.md
@@ -0,0 +1,26 @@
+# Render `{"a":{},"$global":{"signal":{}}}`
+```html
+
+
+ wait
+
+```
+
+# Update
+```js
+document.querySelector("button").click();
+```
+```html
+
+
+ wait
+
+```
+## Change
+```
+UPDATE: button::text "0" => "1"
+```
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-try-abort-disconnect/__snapshots__/writes.debug.html b/packages/runtime-tags/src/__tests__/fixtures/persisted-try-abort-disconnect/__snapshots__/writes.debug.html
new file mode 100644
index 00000000000..20c62559c76
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-try-abort-disconnect/__snapshots__/writes.debug.html
@@ -0,0 +1,22 @@
+wait
+
+
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-try-abort-disconnect/__snapshots__/writes.html b/packages/runtime-tags/src/__tests__/fixtures/persisted-try-abort-disconnect/__snapshots__/writes.html
new file mode 100644
index 00000000000..e2187d53e2b
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-try-abort-disconnect/__snapshots__/writes.html
@@ -0,0 +1,16 @@
+wait
+
+
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-try-abort-disconnect/sizes.json b/packages/runtime-tags/src/__tests__/fixtures/persisted-try-abort-disconnect/sizes.json
new file mode 100644
index 00000000000..1862c7a526e
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-try-abort-disconnect/sizes.json
@@ -0,0 +1,16 @@
+{
+ "dom": {
+ "template.marko.page.mjs": {
+ "min": 10032,
+ "brotli": 4316
+ }
+ },
+ "html": {
+ "min": 1039,
+ "brotli": 616
+ },
+ "patch": {
+ "min": 0,
+ "brotli": 1
+ }
+}
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-try-abort-disconnect/template.marko b/packages/runtime-tags/src/__tests__/fixtures/persisted-try-abort-disconnect/template.marko
new file mode 100644
index 00000000000..9083ec51474
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-try-abort-disconnect/template.marko
@@ -0,0 +1,9 @@
+
+
+
+
+ A:${v}
+
+ <@placeholder>wait@placeholder>
+ <@catch>caught-a@catch>
+
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-try-abort-disconnect/test.ts b/packages/runtime-tags/src/__tests__/fixtures/persisted-try-abort-disconnect/test.ts
new file mode 100644
index 00000000000..27369db032b
--- /dev/null
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-try-abort-disconnect/test.ts
@@ -0,0 +1,29 @@
+import type { TestConfig } from "../../main.test";
+
+// A persisted page whose initial stream disconnects while an await pends:
+// the shared abort signal strands the body (no broken pairing data flushes)
+// and the resumed prefix stays interactive.
+export const config: TestConfig = {
+ persisted: true,
+ abort_ssr: true,
+ skip_fresh_render: true,
+ steps: (signal) => [
+ { a: afterAbort(signal, "A") },
+ (document: Document) => {
+ document.querySelector("button")!.click();
+ },
+ ],
+};
+
+function afterAbort(signal: AbortSignal | undefined, value: string) {
+ return new Promise((resolve) => {
+ if (!signal) return resolve(value);
+ signal.addEventListener(
+ "abort",
+ () => setTimeout(() => resolve(value), 0),
+ {
+ once: true,
+ },
+ );
+ });
+}
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-var-effect/sizes.json b/packages/runtime-tags/src/__tests__/fixtures/persisted-var-effect/sizes.json
index 4943e503f7e..b93ff2c16d4 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-var-effect/sizes.json
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-var-effect/sizes.json
@@ -1,8 +1,8 @@
{
"dom": {
"template.marko.page.mjs": {
- "min": 3888,
- "brotli": 1902
+ "min": 3887,
+ "brotli": 1905
}
},
"html": {
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-var-global-child/__snapshots__/dom.bundle.debug.js b/packages/runtime-tags/src/__tests__/fixtures/persisted-var-global-child/__snapshots__/dom.bundle.debug.js
index b3b0271cb1f..3239c4a2d99 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-var-global-child/__snapshots__/dom.bundle.debug.js
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-var-global-child/__snapshots__/dom.bundle.debug.js
@@ -1,13 +1,11 @@
// tags/greet/index.marko
const $template$1 = " ";
const $walks$1 = "D l";
-function $setup$1($scope) {
- _text($scope["#text/0"], $scope.$global.locale);
-}
+const $setup$1 = () => {};
const $double = /*@__PURE__*/ _const("double", ($scope) => _return($scope, $scope.double));
const $input_n = ($scope, input_n) => $double($scope, input_n * 2);
const $input = ($scope, input) => $input_n($scope, input.n);
-var greet_default = /*@__PURE__*/ _template("__tests__/tags/greet/index.marko", $template$1, "D l", $setup$1, $input);
+var greet_default = /*@__PURE__*/ _template("__tests__/tags/greet/index.marko", $template$1, "D l", 0, $input);
// template.marko
const $template = /*@__PURE__*/ ((_w0) => `${_w0}
`)($template$1);
@@ -18,7 +16,6 @@ const $setup__script = _script("__tests__/template.marko_0", ($scope) => _on($sc
}));
function $setup($scope) {
_var($scope, "#childScope/0", $d);
- $setup$1($scope["#childScope/0"]);
$count($scope, 1);
$setup__script($scope);
}
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-var-global-child/__snapshots__/dom.bundle.js b/packages/runtime-tags/src/__tests__/fixtures/persisted-var-global-child/__snapshots__/dom.bundle.js
index d2ab946ccef..6f63c2b36fb 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-var-global-child/__snapshots__/dom.bundle.js
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-var-global-child/__snapshots__/dom.bundle.js
@@ -1,5 +1,5 @@
// tags/greet/index.marko
-const $double = /*@__PURE__*/ _const(4, ($scope) => _return($scope, $scope.e));
+const $double = /*@__PURE__*/ _const(5, ($scope) => _return($scope, $scope.f));
const $input_n = ($scope, input_n) => $double($scope, input_n * 2);
// template.marko
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-var-global-child/sizes.json b/packages/runtime-tags/src/__tests__/fixtures/persisted-var-global-child/sizes.json
index f288945e06a..4fcc6fe9027 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-var-global-child/sizes.json
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-var-global-child/sizes.json
@@ -2,8 +2,8 @@
"dom": {
"template.marko.page.mjs": {
"total": {
- "min": 3478,
- "brotli": 1704
+ "min": 3477,
+ "brotli": 1712
},
"files": {
"tags/greet/index.marko": 194,
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-var-pure-server/sizes.json b/packages/runtime-tags/src/__tests__/fixtures/persisted-var-pure-server/sizes.json
index 89bd51bfcae..7b3134804c1 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-var-pure-server/sizes.json
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-var-pure-server/sizes.json
@@ -1,8 +1,8 @@
{
"dom": {
"template.marko.page.mjs": {
- "min": 2131,
- "brotli": 1103
+ "min": 2130,
+ "brotli": 1116
}
},
"html": {
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-var-server-if/sizes.json b/packages/runtime-tags/src/__tests__/fixtures/persisted-var-server-if/sizes.json
index 6788a47c21f..90bc6ed19c2 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-var-server-if/sizes.json
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-var-server-if/sizes.json
@@ -1,8 +1,8 @@
{
"dom": {
"template.marko.page.mjs": {
- "min": 8088,
- "brotli": 3628
+ "min": 8070,
+ "brotli": 3636
}
},
"html": {
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-var-server/sizes.json b/packages/runtime-tags/src/__tests__/fixtures/persisted-var-server/sizes.json
index b1cb7cb19ae..ec9974c65b4 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-var-server/sizes.json
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-var-server/sizes.json
@@ -1,8 +1,8 @@
{
"dom": {
"template.marko.page.mjs": {
- "min": 3337,
- "brotli": 1647
+ "min": 3336,
+ "brotli": 1653
}
},
"html": {
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-var-state/sizes.json b/packages/runtime-tags/src/__tests__/fixtures/persisted-var-state/sizes.json
index aa2be596b03..c98a36f06e1 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-var-state/sizes.json
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-var-state/sizes.json
@@ -2,8 +2,8 @@
"dom": {
"template.marko.page.mjs": {
"total": {
- "min": 3444,
- "brotli": 1702
+ "min": 3443,
+ "brotli": 1700
},
"files": {
"tags/doubler/index.marko": 212,
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-var-structure/sizes.json b/packages/runtime-tags/src/__tests__/fixtures/persisted-var-structure/sizes.json
index 827d4860951..5f3f583fad1 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-var-structure/sizes.json
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-var-structure/sizes.json
@@ -2,8 +2,8 @@
"dom": {
"template.marko.page.mjs": {
"total": {
- "min": 6724,
- "brotli": 3071
+ "min": 6723,
+ "brotli": 3065
},
"files": {
"tags/doubler/index.marko": 212,
diff --git a/packages/runtime-tags/src/__tests__/fixtures/persisted-var-two-hop/sizes.json b/packages/runtime-tags/src/__tests__/fixtures/persisted-var-two-hop/sizes.json
index b72f3f9afd0..6636cfdc74f 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/persisted-var-two-hop/sizes.json
+++ b/packages/runtime-tags/src/__tests__/fixtures/persisted-var-two-hop/sizes.json
@@ -2,8 +2,8 @@
"dom": {
"template.marko.page.mjs": {
"total": {
- "min": 3502,
- "brotli": 1731
+ "min": 3501,
+ "brotli": 1718
},
"files": {
"tags/doubler/index.marko": 214,
diff --git a/packages/runtime-tags/src/dom.ts b/packages/runtime-tags/src/dom.ts
index 190b93245a6..3692b9b8655 100644
--- a/packages/runtime-tags/src/dom.ts
+++ b/packages/runtime-tags/src/dom.ts
@@ -120,6 +120,13 @@ export {
_init_for_closure,
_init_for_selector,
_init_if_closure,
+ // A `tagNameLoad` input init has no module-graph reference (a construct
+ // resolves it by serialized id), so the translator emits these `_resume`
+ // aliases — which the pure-call list excludes — to keep the registration.
+ _init_closure_get as _resume_init_closure_get,
+ _init_for_closure as _resume_init_for_closure,
+ _init_for_selector as _resume_init_for_selector,
+ _init_if_closure as _resume_init_if_closure,
_let,
_let_change,
_or,
diff --git a/packages/runtime-tags/src/dom/load.ts b/packages/runtime-tags/src/dom/load.ts
index 314c3a6bf3e..3494b2ad57a 100644
--- a/packages/runtime-tags/src/dom/load.ts
+++ b/packages/runtime-tags/src/dom/load.ts
@@ -9,9 +9,9 @@ import {
type Template,
} from "../common/types";
import { addAwaitCounter, renderCatch } from "./control-flow";
-import { queueAsyncRender, runId } from "./queue";
+import { queueAsyncRender, queueEffect, runId } from "./queue";
import { _content, type Renderer, setupBranch, type SetupFn } from "./renderer";
-import { readyFailed, withLazy } from "./resume";
+import { ready, readyFailed, withLazy } from "./resume";
import { insertBranchBefore, syncGen } from "./scope";
import type { Signal } from "./signals";
import { _template } from "./template";
@@ -53,7 +53,13 @@ export const _load_template = /*@__PURE__*/ withLazy(
),
);
},
- loadFailed(branch as BranchScope, awaitCounter),
+ // The template's ready-channel id (the client half of the
+ // translator's `getReadyId`; the prefix pairs with its optimize flag).
+ loadFailed(
+ branch as BranchScope,
+ awaitCounter,
+ (MARKO_DEBUG ? "ready:" : "_") + id,
+ ),
);
},
_load_signal(() =>
@@ -69,6 +75,9 @@ export const _load_setup = /*@__PURE__*/ withLazy(
nodeAccessor: EncodedAccessor,
childScopeAccessor: EncodedAccessor,
load: () => Promise,
+ // Only a persisted `linkAssets` build has a channel (and deferred frame
+ // data) for the load to drive; other builds omit it.
+ readyId?: string,
) => {
if (!MARKO_DEBUG) {
nodeAccessor = decodeAccessor(nodeAccessor as number);
@@ -81,6 +90,8 @@ export const _load_setup = /*@__PURE__*/ withLazy(
return (owner: Scope) => {
const child = owner[childScopeAccessor] as BranchScope;
if (renderer) {
+ // A later instance of an already-loaded module: the first load
+ // already counted down and drove the channel.
insertLoaded(renderer, child, owner[nodeAccessor] as ChildNode);
} else {
const awaitCounter = addAwaitCounter(owner);
@@ -94,10 +105,11 @@ export const _load_setup = /*@__PURE__*/ withLazy(
child,
owner[nodeAccessor] as ChildNode,
awaitCounter,
+ readyId,
),
);
},
- loadFailed(child, awaitCounter),
+ loadFailed(child, awaitCounter, readyId),
);
}
};
@@ -109,6 +121,7 @@ function insertLoaded(
branch: BranchScope,
marker: ChildNode,
awaitCounter?: ReturnType,
+ readyId?: string,
) {
const parent = marker.parentNode as Element,
values = branch[AccessorProp.Load] as LoadValues,
@@ -116,13 +129,16 @@ function insertLoaded(
insertBranchBefore(branch, parent, marker);
marker.remove();
awaitCounter?.c();
+ // A constructed site drives its channel once the content is live, so
+ // deferred frame data (re-shipping this render's state) drains after.
+ if (readyId) queueEffect(branch, () => ready(readyId));
};
let remaining: number;
syncGen(branch);
renderer[RendererProp.Clone]!(branch, parent.namespaceURI!);
branch[AccessorProp.Load] = 0;
if ((remaining = values?.size as number)) {
- const fail = loadFailed(branch, awaitCounter);
+ const fail = loadFailed(branch, awaitCounter, readyId);
for (const [promise, entry] of values!) {
promise.then(
(signal) => {
@@ -152,6 +168,7 @@ function insertLoaded(
function loadFailed(
scope: BranchScope,
awaitCounter?: ReturnType,
+ readyId?: string,
) {
return (error: unknown) => {
if (awaitCounter) {
@@ -160,7 +177,7 @@ function loadFailed(
if (awaitCounter.m) awaitCounter.i = 0;
else awaitCounter.c();
}
- readyFailed();
+ readyFailed(readyId);
queueAsyncRender(scope, renderCatch, error);
};
}
diff --git a/packages/runtime-tags/src/dom/patch-attrs.feat.ts b/packages/runtime-tags/src/dom/patch-attrs.feat.ts
index f3330183550..91329afee6c 100644
--- a/packages/runtime-tags/src/dom/patch-attrs.feat.ts
+++ b/packages/runtime-tags/src/dom/patch-attrs.feat.ts
@@ -1,18 +1,36 @@
import { type Accessor, PatchKey } from "../common/types";
+import { controllableRenders } from "./controllable";
import { _attrs, _attrs_partial, _attrs_script } from "./dom";
// The set may carry bound handlers.
import "./patch-value-bind.feat";
import { queueEffect } from "./queue";
import { patchers } from "./resume";
-// A spread's set re-applies as its render would (a `[set, skip]` pair
-// leaves the statics after the spread alone); its effect then re-attaches.
+// A spread's set re-applies as its render would (`[set, skip]` leaves the
+// statics alone; a trailing `1` re-claims the element's controllable).
patchers[PatchKey.Attrs] = (scope, key, value) => {
const accessor = key.slice(PatchKey.Attrs.length) as Accessor;
+ let skip: Record | 0 | undefined;
+ let controllable: (typeof controllableRenders)[string] | undefined;
if (Array.isArray(value)) {
- _attrs_partial(scope, accessor, value[0] || undefined, value[1]);
+ skip = value[1] as typeof skip;
+ if (value[2]) {
+ controllable = controllableRenders[(scope[accessor] as Element).tagName];
+ }
+ value = value[0];
+ }
+ // The wire's empty-set `0` flows through as-is: every consumer only
+ // truthiness-checks or `for..in`s the set, so it acts like `undefined`.
+ if (skip) {
+ _attrs_partial(
+ scope,
+ accessor,
+ value as Record,
+ skip,
+ controllable,
+ );
} else {
- _attrs(scope, accessor, (value || undefined) as Record);
+ _attrs(scope, accessor, value as Record, controllable);
}
queueEffect(scope, () => _attrs_script(scope, accessor));
};
diff --git a/packages/runtime-tags/src/dom/patch-boundary.feat.ts b/packages/runtime-tags/src/dom/patch-boundary.feat.ts
index f23fa5d85e6..800bbbb9df7 100644
--- a/packages/runtime-tags/src/dom/patch-boundary.feat.ts
+++ b/packages/runtime-tags/src/dom/patch-boundary.feat.ts
@@ -141,10 +141,12 @@ patchers[PatchKey.Pending] = (scope, key, value) => {
// The server now owns this await frame. Invalidate a promise started while
// setting up a newly constructed parent body so its stale resolution drops.
scope[(AccessorPrefix.Promise + accessor) as Accessor] = 0 as never;
+ // A settle from an earlier response must not hide this frame's pending UI.
+ settled.get(scope)?.delete(accessor);
// A construct has no live await branch: the entry's id delivers the body
// content record its frame shipped. Mirrors `_await_content`.
if (typeof value === "string" && !scope[link]) {
- const renderer = getShellContent(shells[value] || failPatch());
+ const renderer = getShellContent(shells[value]);
const pendingScopes = collectScopes(
() =>
((
@@ -207,10 +209,7 @@ function resolveBoundaryContent(id: string | 0, owner: Scope) {
if (id === 0) return 0;
const shell = shells[id];
if (shell) return getShellContent(shell, id, owner);
- const registered = getRegisteredWithScope(id) as
- | ((owner: Scope) => unknown)
- | undefined;
- return registered ? registered(owner) : failPatch();
+ return (getRegisteredWithScope(id) as (owner: Scope) => unknown)(owner);
}
const applyChild = patchers[PatchKey.Child];
@@ -230,9 +229,8 @@ patchers[PatchKey.Child] = (scope, key, value) => {
if (!scope[link]) {
const shell = shells[contentId];
const renderer = ((shell && getShellContent(shell, contentId)) ||
- getRegisteredWithScope(contentId) ||
- failPatch()) as Renderer;
- const marker = (scope[accessor as Accessor] || failPatch()) as ChildNode;
+ getRegisteredWithScope(contentId)) as Renderer;
+ const marker = scope[accessor as Accessor] as ChildNode;
const inside = marker.nodeType === 1;
const parentNode = inside
? (marker as unknown as Element)
diff --git a/packages/runtime-tags/src/dom/patch-child.feat.ts b/packages/runtime-tags/src/dom/patch-child.feat.ts
index 8214339a7bd..8f97bb9a7c8 100644
--- a/packages/runtime-tags/src/dom/patch-child.feat.ts
+++ b/packages/runtime-tags/src/dom/patch-child.feat.ts
@@ -11,6 +11,8 @@ import { failPatch, patchers, patchScope } from "./resume";
// construct's walk created it; it takes the parent as owner here).
patchers[PatchKey.Child] = (scope, key, value) => {
const child = scope[key.slice(PatchKey.Child.length) as Accessor] as Scope;
+ // Same-build reachable: a patch during the initial stream can precede
+ // the boundary's resumed branch (see pair-patches-into-still-streaming).
if (!child) failPatch();
child[AccessorProp.Owner] ??= scope;
patchScope(value as Scope, child);
diff --git a/packages/runtime-tags/src/dom/patch-control-checked-value.feat.ts b/packages/runtime-tags/src/dom/patch-control-checked-value.feat.ts
new file mode 100644
index 00000000000..22c0830cb35
--- /dev/null
+++ b/packages/runtime-tags/src/dom/patch-control-checked-value.feat.ts
@@ -0,0 +1,19 @@
+import { type Accessor, ControlledType, type Scope } from "../common/types";
+import { _attr_input_checkedValue } from "./controllable";
+import { patchControls } from "./patch-control.feat";
+
+// A group entry carries `[checkedValue, value]`: each input in the group
+// applies its own comparison through the same helper CSR uses.
+patchControls[ControlledType.InputCheckedValue] = (
+ scope: Scope,
+ accessor: Accessor,
+ value: unknown,
+ handler?: unknown,
+) =>
+ _attr_input_checkedValue(
+ scope,
+ accessor,
+ (value as unknown[])[0],
+ handler,
+ (value as unknown[])[1],
+ );
diff --git a/packages/runtime-tags/src/dom/patch-control.feat.ts b/packages/runtime-tags/src/dom/patch-control.feat.ts
index 70245d8e4f5..bf40c8b5a16 100644
--- a/packages/runtime-tags/src/dom/patch-control.feat.ts
+++ b/packages/runtime-tags/src/dom/patch-control.feat.ts
@@ -7,7 +7,7 @@ import {
type Scope,
} from "../common/types";
import { queueRender } from "./queue";
-import { failPatch, patchers } from "./resume";
+import { patchers } from "./resume";
// Kind-keyed control applies, filled by the per-kind patch feats a page's
// controls link: the wire keys `kind + accessor` (kind is a
@@ -27,11 +27,10 @@ export const patchControls: {
patchers[PatchKey.Control] = (scope, key, value) => {
const type = +key[PatchKey.Control.length] as ControlledType;
const accessor = key.slice(PatchKey.Control.length + 1) as Accessor;
- const apply = patchControls[type] || failPatch();
queueRender(
scope,
(scope) =>
- apply(
+ patchControls[type]!(
scope,
accessor,
value,
diff --git a/packages/runtime-tags/src/dom/patch-dynamic-tag.feat.ts b/packages/runtime-tags/src/dom/patch-dynamic-tag.feat.ts
index db656f19e00..e8167117e80 100644
--- a/packages/runtime-tags/src/dom/patch-dynamic-tag.feat.ts
+++ b/packages/runtime-tags/src/dom/patch-dynamic-tag.feat.ts
@@ -10,12 +10,7 @@ import { _dynamic_tag } from "./control-flow";
import "./patch-child.feat";
import { getShellContent, shells } from "./patch-shells";
import type { Renderer } from "./renderer";
-import {
- constructPatchers,
- failPatch,
- getRegisteredWithScope,
- patchers,
-} from "./resume";
+import { constructPatchers, getRegisteredWithScope, patchers } from "./resume";
// Re-renders the tag's `input` content through its signal; an id-only
// entry constructs its content record, else pairs the same one or rejects.
@@ -34,10 +29,7 @@ patchers[PatchKey.DynamicTag] = constructPatchers[PatchKey.DynamicTag] = (
const shell = shells[id];
renderer = shell
? getShellContent(shell, id)
- : (getRegisteredWithScope(id) as Renderer) || failPatch();
- } else if (renderer === undefined) {
- // Its registration was shaken or never loaded: skew, reject (`0` is none).
- failPatch();
+ : (getRegisteredWithScope(id) as Renderer);
}
_dynamic_tag(
(MARKO_DEBUG ? accessor : encodeAccessor(accessor)) as EncodedAccessor,
diff --git a/packages/runtime-tags/src/dom/patch-ready.feat.ts b/packages/runtime-tags/src/dom/patch-ready.feat.ts
index 0ea65fc191c..45204b79490 100644
--- a/packages/runtime-tags/src/dom/patch-ready.feat.ts
+++ b/packages/runtime-tags/src/dom/patch-ready.feat.ts
@@ -27,9 +27,15 @@ installReady(markReady, failReady);
// Receives a frame's ready-channel record (an explicit call in the frame
// text): data for a loaded channel merges into the live render's ready
// record for this frame's run; the rest waits for its module.
+// Live-record pushes of the frame being applied (alternating batch,
+// prior length), undone if it rejects.
+const framePushes: (unknown[] | number)[] = [];
+
function acceptReady(record: Record) {
const render = patchRender as RenderData;
+ framePushes.length = 0;
for (const readyId in record) {
+ if (failed.has(readyId)) throw 0;
if (isReady(readyId)) {
pushBatch(render, readyId, record[readyId]);
} else {
@@ -58,6 +64,7 @@ function acceptReady(record: Record) {
// strings keep their native resume handling.
function pushBatch(render: RenderData, readyId: string, batch: unknown[]) {
const target = ((render.b ??= {})[readyId] ??= []);
+ framePushes.push(target, target.length);
for (const partial of batch) {
target.push(
typeof partial === "object" && partial && !Array.isArray(partial)
@@ -90,12 +97,28 @@ function markReady(readyId: string) {
}
}
-function failReady() {
- for (const entry of pending.values()) settle(entry, false);
- pending.clear();
+// A dead channel can never make its server content whole: pending appliers
+// settle rejected (their caller navigates) and later frames naming it reject.
+const failed = new Set();
+function failReady(readyId: string) {
+ failed.add(readyId);
+ for (const [render, entry] of pending) {
+ if (entry.c.has(readyId)) {
+ pending.delete(render);
+ settle(entry, false);
+ }
+ }
}
function discardReady(render: RenderData) {
+ // A rejected frame's channel pushes must not survive to a later run;
+ // truncating is exact unless the batch was partially consumed mid-run —
+ // then the caller is navigating anyway and dropping the rest is safe.
+ while (framePushes.length) {
+ const length = framePushes.pop() as number;
+ const batch = framePushes.pop() as unknown[];
+ if (batch.length > length) batch.length = length;
+ }
const entry = pending.get(render);
if (entry) {
pending.delete(render);
diff --git a/packages/runtime-tags/src/dom/patch-shells.ts b/packages/runtime-tags/src/dom/patch-shells.ts
index e837cb13f34..1afd7dd5fe0 100644
--- a/packages/runtime-tags/src/dom/patch-shells.ts
+++ b/packages/runtime-tags/src/dom/patch-shells.ts
@@ -11,7 +11,6 @@ import {
_patch_records,
constructing,
constructPatchers,
- failPatch,
getRegisteredWithScope,
patchConstruct,
patchers,
@@ -41,15 +40,13 @@ constructPatchers[PatchKey.Init] = (scope, _key, ids) =>
type SetupFn = (branch: Scope) => void;
type SetupIds = [inits: SetupFn[], effects?: SetupFn[]];
-// A missing registration means required client code was tree-shaken:
-// constructing would silently misrender. Closure renders ride as `._`.
+// Closure renders ride as `._`.
export const resolveSetupIds = (ids: string) =>
ids.split("!").map((part) =>
part
? part.split(" ").map((id) => {
- const fn = getRegisteredWithScope(id);
- return ((fn && ((fn as { _?: unknown })._ || fn)) ||
- failPatch()) as SetupFn;
+ const fn = getRegisteredWithScope(id) as { _?: unknown };
+ return (fn._ || fn) as SetupFn;
})
: [],
) as SetupIds;
diff --git a/packages/runtime-tags/src/dom/patch-value-bind.feat.ts b/packages/runtime-tags/src/dom/patch-value-bind.feat.ts
index 98516a27a62..55ffe5bdff4 100644
--- a/packages/runtime-tags/src/dom/patch-value-bind.feat.ts
+++ b/packages/runtime-tags/src/dom/patch-value-bind.feat.ts
@@ -20,9 +20,7 @@ const binds = () => {
};
patchers[PatchKey.BindSource] = (scope, key, id) => {
binds()[key.slice(PatchKey.BindSource.length)] = (
- (getRegisteredWithScope(id as string) || failPatch()) as (
- scope: Scope,
- ) => unknown
+ getRegisteredWithScope(id as string) as (scope: Scope) => unknown
)(scope);
};
// The frame's bind references: each wrapper resolves lazily (its bind
diff --git a/packages/runtime-tags/src/dom/patch-value.feat.ts b/packages/runtime-tags/src/dom/patch-value.feat.ts
index fd7da03fb39..8f21123065c 100644
--- a/packages/runtime-tags/src/dom/patch-value.feat.ts
+++ b/packages/runtime-tags/src/dom/patch-value.feat.ts
@@ -12,17 +12,16 @@ import {
import { patchFills } from "./signals";
// A soft miss is a fill whose intersection was tree-shaken: nothing to
-// update. A construct's seed missing means required client code is gone.
+// update. A construct's seed is required, so a miss crashes to reject.
patchers[PatchKey.Value] = (scope, key, value) =>
patchFills[key.slice(PatchKey.Value.length)]?.(scope, value);
constructPatchers[PatchKey.Value] = (scope, key, value) =>
- (patchFills[key.slice(PatchKey.Value.length)] || failPatch())(scope, value);
+ patchFills[key.slice(PatchKey.Value.length)](scope, value);
// A bind installs a handler the way CSR setup does: anchored at the scope
// its factory was registered against, writing down the child-link path
// (`[registerId, ...links, slot]`) after the apply so freshly constructed
-// targets exist. Any break — poison `0`, missing link, missing
-// registration — rejects the patch.
+// targets exist. A poison `0` (withheld handler path) rejects the patch.
patchers[PatchKey.Bind] = (scope, _key, entry) => {
if (!entry) failPatch();
queueEffect(scope, (scope) => {
@@ -42,12 +41,9 @@ patchers[PatchKey.Bind] = (scope, _key, entry) => {
)
: target[link as Accessor]
) as Scope;
- if (!target) failPatch();
}
target[slot] = (
- (getRegisteredWithScope(registerId) || failPatch()) as (
- scope: Scope,
- ) => unknown
+ getRegisteredWithScope(registerId) as (scope: Scope) => unknown
)(scope);
});
};
diff --git a/packages/runtime-tags/src/dom/resume.ts b/packages/runtime-tags/src/dom/resume.ts
index 2ae54e1a27f..c6a5d766b26 100644
--- a/packages/runtime-tags/src/dom/resume.ts
+++ b/packages/runtime-tags/src/dom/resume.ts
@@ -43,6 +43,11 @@ export interface RenderData {
m?(effects: unknown[]): unknown[];
// Blocking resumes keyed by ready id.
b?: Record;
+ // Load-error sink: a lazy loader script's `onerror` reports its channel
+ // id here once the runtime has installed it (`init`)...
+ e?(readyId?: string): void;
+ // ...and parks it here before then (`init` drains this queue).
+ f?: string[] | void;
/* --- Used by inline runtime --- */
// Document
@@ -67,35 +72,32 @@ export let onPatchRecord: ((entry: string) => void) | undefined;
export const _patch_records = (handler: NonNullable) =>
(onPatchRecord = handler);
// Rejects the applying patch: unwinds to `applyPatch`'s catch, and the
-// caller falls back to a full document navigation.
+// caller falls back to a full document navigation. Only conditions
+// reachable in a matched build guard explicitly (lazy load failures,
+// withheld handlers, server-decided sentinels); skew rejects upstream via
+// the build id, so anything else crashes naturally into the same catch.
export const failPatch = () => {
throw 0;
};
// Construct application dispatch: everything in a setup envelope is
-// REQUIRED, so misses fail (paired refresh via `patchers` stays soft —
-// a shaken fill is a correct no-op).
+// REQUIRED (paired refresh via `patchers` stays soft — a shaken fill is
+// a correct no-op).
export const constructPatchers: typeof patchers = {};
export const patchConstruct = (setup: Scope, live: Scope) => {
for (const key in setup) {
- (
- constructPatchers[
- MARKO_DEBUG ? key.slice(0, key.indexOf(":") + 1) : key[0]
- ] || failPatch()
- )(live, key, setup[key as keyof Scope]);
+ constructPatchers[
+ MARKO_DEBUG ? key.slice(0, key.indexOf(":") + 1) : key[0]
+ ](live, key, setup[key as keyof Scope]);
}
};
// Applies a patch partial to its live counterpart; structural patchers
-// recurse back through here, so no scope is ever addressed by id. An
-// entry kind this bundle has no patcher for rejects: skew, never a
-// silently unapplied frame.
+// recurse back through here, so no scope is ever addressed by id.
export const patchScope = (partial: Scope, live: Scope) => {
for (const key in partial) {
- (
- patchers[
- // Debug accessor prefixes are multi-character, ending ":".
- MARKO_DEBUG ? key.slice(0, key.indexOf(":") + 1) : key[0]
- ] || failPatch()
- )(live, key, partial[key as keyof Scope]);
+ patchers[
+ // Debug accessor prefixes are multi-character, ending ":".
+ MARKO_DEBUG ? key.slice(0, key.indexOf(":") + 1) : key[0]
+ ](live, key, partial[key as keyof Scope]);
}
};
let curRenders: Renders;
@@ -105,9 +107,8 @@ let embedRenders:
// Only assigned by `ready()`, so the lazy stream machinery guarded by
// `readyIds` checks is dropped from apps without lazy tags.
let readyIds: undefined | Set;
-let failedIds: undefined | Set;
let patchReady: undefined | ((readyId: string) => void);
-let patchReadyFailed: undefined | (() => void);
+let patchReadyFailed: undefined | ((readyId: string) => void);
// Lazy load support latch, set as `dom/load.ts`'s runtime is evaluated, which
// is before any resume; a page without lazy tags folds it and the retention away.
let lazyEnabled: undefined | 1;
@@ -120,6 +121,9 @@ export let patchId = 0;
export function beginPatch(renderId: string) {
const render = (patchRender = curRenders[renderId]);
+ // A page with no effects never wrote a walk call; pairing into resumed
+ // branches needs the walked links, so finish the resume before patching.
+ render.w();
patching = 1;
patchId++;
return render;
@@ -150,26 +154,25 @@ export function ready(readyId: string) {
export function installReady(
onReady: (readyId: string) => void,
- onFail: () => void,
+ onFail: (readyId: string) => void,
) {
patchReady = onReady;
patchReadyFailed = onFail;
}
-// A lazy module that will never arrive can never drain a deferred patch;
-// pending patches settle as rejected so their callers navigate, and the
-// debug build reports the channel instead of staying silent (repeat
-// reports fold).
+// A channel module that will never arrive can never drain the data waiting
+// on it: the persisted feature (when installed) settles pending patches and
+// rejects later frames naming the channel. Id-less runtime-managed load
+// failures never gate a channel (each channel's entry reports itself).
export function readyFailed(readyId?: string) {
if (MARKO_DEBUG) {
- if (readyId && !failedIds?.has(readyId) && !readyIds?.has(readyId)) {
- (failedIds ||= new Set()).add(readyId);
+ if (readyId && !readyIds?.has(readyId)) {
console.error(
`The lazy module for "${readyId}" failed to load; its server-rendered content cannot become interactive.`,
);
}
}
- patchReadyFailed?.();
+ if (readyId) patchReadyFailed?.(readyId);
}
export function isReady(readyId: string) {
@@ -490,6 +493,14 @@ export function init(runtimeId = DEFAULT_RUNTIME_ID) {
}
}
+ // Loader `onerror` sink (`html/assets.ts`); installed only when the
+ // patch-ready feature latches, which shakes it from other bundles.
+ // A loader that failed before this module evaluated parked its id
+ // on the queue; from here on failures report directly.
+ if (patchReadyFailed) {
+ render.e = readyFailed;
+ render.f = render.f?.forEach(readyFailed);
+ }
render.m = (effects: unknown[]) => {
processResumes(render.r, effects);
diff --git a/packages/runtime-tags/src/html/assets.ts b/packages/runtime-tags/src/html/assets.ts
index 4f8af71387b..b777f2c9418 100644
--- a/packages/runtime-tags/src/html/assets.ts
+++ b/packages/runtime-tags/src/html/assets.ts
@@ -7,6 +7,7 @@ import {
_html,
$global,
getState,
+ requireMainRuntime,
writeScript,
writeWaitReady,
} from "./writer";
@@ -43,6 +44,9 @@ type Trigger = LoadTrigger;
interface Asset {
id: string;
triggers?: Trigger[];
+ /** A persisted page's loader reports load errors to the ready-failed
+ * sink (`render.e`) in production, so pending patches settle. */
+ reportErrors?: 1;
}
declare module "../common/types" {
@@ -66,13 +70,14 @@ export function withLoadAssets(
renderer: ServerRenderer,
assetId: string,
triggers?: Trigger[],
+ reportErrors?: 1,
): ServerRenderer {
return Object.assign((input: unknown) => {
if (getState().writesPatches) {
return writeWaitReady(assetId, renderer, input);
}
const g = $global();
- addAsset(g, assetId, triggers);
+ addAsset(g, assetId, triggers, reportErrors);
_html(flush(g, ""));
return writeWaitReady(assetId, renderer, input);
}, renderer);
@@ -132,10 +137,12 @@ function flush(g: $Global, html: string) {
}
for (; di < length; di++) {
- const { id, triggers } = assets[di];
+ const { id, triggers, reportErrors } = assets[di];
const deferHTML = assetFlush(g, "defer", id);
if (triggers) {
- if (deferHTML) writeTriggerScript(id, deferHTML, triggers);
+ if (deferHTML) {
+ writeTriggerScript(g, id, deferHTML, triggers, reportErrors);
+ }
} else {
result += deferHTML;
}
@@ -146,13 +153,18 @@ function flush(g: $Global, html: string) {
return result + html;
}
-function addAsset(g: $Global, id: string, triggers?: Trigger[]) {
+function addAsset(
+ g: $Global,
+ id: string,
+ triggers?: Trigger[],
+ reportErrors?: 1,
+) {
const assets = g[kAssets];
if (!assets) {
- g[kAssets] = [{ id, triggers }];
+ g[kAssets] = [{ id, triggers, reportErrors }];
g[kBlockIndex] = g[kDeferIndex] = 0;
} else if (!assets.find((a) => a.id === id)) {
- assets.push({ id, triggers });
+ assets.push({ id, triggers, reportErrors });
} else if (MARKO_DEBUG) {
// Invariant: an asset streams one trigger script, so it must be requested
// with a single consistent `load` trigger; only the first one applies.
@@ -165,17 +177,39 @@ function addAsset(g: $Global, id: string, triggers?: Trigger[]) {
}
}
-function writeTriggerScript(id: string, html: string, triggers: Trigger[]) {
+function writeTriggerScript(
+ g: $Global,
+ id: string,
+ html: string,
+ triggers: Trigger[],
+ reportErrors?: 1,
+) {
const htmlStr = _escape_script(JSON.stringify(html));
- // A loader script that fails at the network level never evaluates, so the
- // debug build reports from the script's own error event; matches the
- // load-entry rejection arm's diagnostic.
- const insert = MARKO_DEBUG
- ? `(d=new Range().createContextualFragment(h),d.querySelectorAll("script").forEach(s=>s.onerror=()=>console.error(${_escape_script(
+ // The error sink hangs off the walker-created render object; make sure the
+ // bootstrap is emitted even if no resume content needed it yet.
+ if (reportErrors) requireMainRuntime();
+ // A loader that fails at the network level never evaluates, so its own
+ // error event reports to the ready-failed sink (`render.e`).
+ const onError = [
+ MARKO_DEBUG &&
+ `console.error(${_escape_script(
JSON.stringify(
`The lazy module for "${id}" failed to load; its server-rendered content cannot become interactive.`,
),
- )})),p.after(d))`
+ )})`,
+ reportErrors &&
+ // The runtime installs the sink (`render.e`) only once its module
+ // evaluates; a failure before then parks its id on `render.f`, which
+ // `init` (dom/resume.ts) drains. Both ids are identifier-safe
+ // (`runtimePrefix` dot-joins them).
+ `((r,f)=>r.e?r.e(f):(r.f||=[]).push(f))(self.${g.runtimeId}.${
+ g.renderId
+ },${_escape_script(JSON.stringify(id))})`,
+ ].filter(Boolean);
+ const insert = onError.length
+ ? `(d=new Range().createContextualFragment(h),d.querySelectorAll("script").forEach(s=>s.onerror=()=>${
+ onError.length > 1 ? `(${onError.join(",")})` : onError[0]
+ }),p.after(d))`
: `p.after(new Range().createContextualFragment(d=h))`;
const exprs = triggers.map((trigger) => {
const options = trigger.options && toObjectExpression(trigger.options);
diff --git a/packages/runtime-tags/src/html/patch.ts b/packages/runtime-tags/src/html/patch.ts
index cb11d8249a3..36d11678f45 100644
--- a/packages/runtime-tags/src/html/patch.ts
+++ b/packages/runtime-tags/src/html/patch.ts
@@ -38,6 +38,7 @@ import {
isInResumedBranch,
maskGroup,
patchPartial,
+ peekPatchPartial,
type ScopeInternals,
type SerializeReasonValue,
State,
@@ -147,7 +148,7 @@ class PatchState extends State {
contentId?: string,
slotIds?: (string | 0 | undefined)[],
) {
- if (!this.patchInert && !this.patchPartials?.[branchId]) {
+ if (!this.patchInert && !peekPatchPartial(this, branchId)) {
const link = AccessorPrefix.BranchScopes + accessor;
(this.patchParents ??= {})[branchId] = [scopeId, link];
(this.patchPending ??= {})[branchId] = [
@@ -179,8 +180,7 @@ class PatchState extends State {
}
const out = scripts ? scripts + "\n" : "";
this.patchFlushed = undefined;
- this.patchPartials = undefined;
- this.patchSerializeStates = undefined;
+ this.patchTrees = undefined;
this.serializer = new Serializer();
return out;
}
@@ -233,27 +233,23 @@ class PatchState extends State {
// Shape-typed entry, densest form first: a bare number is the
// selection + 1 (`0` hides), and empty/zero members drop.
const branchPartial =
- branchIndex === undefined ? undefined : this.patchPartials?.[branchId];
- writePatch(
- scopeId,
- {
- [PatchKey.Branch + accessor]:
- branchIndex === undefined
- ? 0
- : branchIndex
- ? branchPartial || shellId
- ? shellId
- ? [branchIndex, branchPartial || {}, shellId]
- : [branchIndex, branchPartial || {}]
- : branchIndex + 1
- : branchPartial
- ? shellId
- ? [branchPartial, shellId]
- : [branchPartial]
- : shellId || 1,
- },
- this.patchSerializeStates?.[branchId],
- );
+ branchIndex === undefined ? undefined : peekPatchPartial(this, branchId);
+ writePatch(scopeId, {
+ [PatchKey.Branch + accessor]:
+ branchIndex === undefined
+ ? 0
+ : branchIndex
+ ? branchPartial || shellId
+ ? shellId
+ ? [branchIndex, branchPartial || {}, shellId]
+ : [branchIndex, branchPartial || {}]
+ : branchIndex + 1
+ : branchPartial
+ ? shellId
+ ? [branchPartial, shellId]
+ : [branchPartial]
+ : shellId || 1,
+ });
// Later settle frames nest under the live branch as a Child apply.
if (branchIndex !== undefined) {
(this.patchPending ??= {})[branchId] = [
@@ -397,7 +393,7 @@ export function _patch_child(
const state = getState();
if (state.writesPatches) {
(state.patchParents ??= {})[childScopeId] = [scopeId, accessor];
- const partial = state.patchPartials?.[childScopeId];
+ const partial = peekPatchPartial(state, childScopeId);
if (partial) {
writePatch(scopeId, {
[PatchKey.Child + accessor]: partial,
@@ -693,6 +689,7 @@ export function _patch_attrs(
accessor: Accessor,
scopeId: number,
tagName: string,
+ controllable?: 1,
owned?: SerializeReasonValue,
group?: number,
) {
@@ -700,7 +697,17 @@ export function _patch_attrs(
if (state.writesPatches) {
if (ownedWrite(owned, group)) {
writeEmbeddedBinds(state as PatchState, data);
- writeOwned(scopeId, PatchKey.Attrs + accessor, data ?? 0, owned, group);
+ // `controllable` marks a spread that owns the element's controllable
+ // (no static attr does), so only then does the client re-claim it.
+ // A bare set is the common entry; the array form (`Array.isArray`
+ // discriminates) carries `skip`/`controllable` without key bytes.
+ writeOwned(
+ scopeId,
+ PatchKey.Attrs + accessor,
+ controllable ? [data ?? 0, 0, 1] : (data ?? 0),
+ owned,
+ group,
+ );
}
} else {
getChunk()!.needsWalk = true;
@@ -715,6 +722,7 @@ export function _patch_attrs_partial(
accessor: Accessor,
scopeId: number,
tagName: string,
+ controllable?: 1,
owned?: SerializeReasonValue,
group?: number,
) {
@@ -725,7 +733,7 @@ export function _patch_attrs_partial(
writeOwned(
scopeId,
PatchKey.Attrs + accessor,
- [data ?? 0, skip],
+ controllable ? [data ?? 0, skip, 1] : [data ?? 0, skip],
owned,
group,
);
diff --git a/packages/runtime-tags/src/html/writer.ts b/packages/runtime-tags/src/html/writer.ts
index 0b5340f2525..e8c1f53b6f8 100644
--- a/packages/runtime-tags/src/html/writer.ts
+++ b/packages/runtime-tags/src/html/writer.ts
@@ -181,6 +181,12 @@ export function writeScript(script: string) {
$chunk.writeScript(script);
}
+// Guarantees the walker bootstrap (which creates `self[runtimeId][renderId]`)
+// flushes with or before this chunk's scripts.
+export function requireMainRuntime() {
+ $chunk.boundary.state.needsMainRuntime = true;
+}
+
export function _script(scopeId: number, registryId: string) {
if ($chunk.serializeState.readyId || $chunk.context?.[kIsAsync]) {
_resume_branch(scopeId);
@@ -339,20 +345,44 @@ export function writePatch(
}
}
+export function peekPatchPartial(state: State, scopeId: number) {
+ return state.patchTrees?.get($chunk.serializeState)?.[scopeId];
+}
+
export function patchPartial(
state: State,
scopeId: number,
- serializeState = $chunk.serializeState,
-) {
+ serializeState: SerializeState = $chunk.serializeState,
+): Record {
if (state.patchInert) return {};
- const partials = (state.patchPartials ??= {});
+ // One flush-lived merge tree per serialize state (a ready channel's
+ // content must not apply before its module); `flushChunk` drops the map.
+ const trees = (state.patchTrees ??= new Map());
+ let partials = trees.get(serializeState);
+ if (!partials) trees.set(serializeState, (partials = {}));
let partial = partials[scopeId];
if (!partial) {
- partial = partials[scopeId] = {};
- if (serializeState.readyId) {
- (state.patchSerializeStates ??= {})[scopeId] = serializeState;
- }
const pending = state.patchPending?.[scopeId];
+ if (serializeState.readyId && !pending && scopeId !== state.rootScopeId) {
+ const link = state.patchParents?.[scopeId];
+ if (link && typeof link[1] === "string") {
+ // Hang this scope's partial off its parent's boundary child entry
+ // (parent scope `link[0]`, slot `link[1]`): the live page reaches
+ // it by following that slot when the channel's module applies.
+ partial = partials[scopeId] = {};
+ writePatch(
+ link[0],
+ { [PatchKey.Child + link[1]]: partial },
+ serializeState,
+ );
+ return partial;
+ }
+ // No linkable hop (keyed loop items): the write rides the main tree
+ // embedded in its structural entry, so it cannot defer — construct
+ // data naming a not-yet-registered id then rejects at apply.
+ return patchPartial(state, scopeId, state);
+ }
+ partial = partials[scopeId] = {};
if (pending) {
// A child links into its parent's entry on its first write; boundary
// construct ids ride it and a paired branch ignores them.
@@ -1147,6 +1177,9 @@ export function _await(
if (resumeMarker) {
const branchId = _peek_scope_id();
$chunk.boundary.state.pairBranch?.(scopeId, accessor, branchId);
+ // The Child entry is the settle signal: force it so a body
+ // with no writes of its own still attaches the pending UI.
+ if (writesPatches) patchPartial(boundary.state, branchId);
$chunk.writeHTML(
$chunk.boundary.state.mark(ResumeSymbol.BranchStart, ""),
);
@@ -1443,7 +1476,10 @@ export class State implements SerializeState {
slotIds?: (string | 0 | undefined)[],
): void;
declare rootScopeId?: number;
- declare patchPartials?: Record>;
+ declare patchTrees?: Map<
+ SerializeState,
+ Record>
+ >;
declare patchBinds?: number;
declare patchParents?: Record<
number,
@@ -1458,7 +1494,6 @@ export class State implements SerializeState {
slotIds?: (string | 0 | undefined)[],
]
>;
- declare patchSerializeStates?: Record;
declare patchFlushed?: 1;
declare patchInert?: 1;
declare patchDeferred?: 1;
diff --git a/packages/runtime-tags/src/translator/core/await.ts b/packages/runtime-tags/src/translator/core/await.ts
index b377adf2972..1617558c88a 100644
--- a/packages/runtime-tags/src/translator/core/await.ts
+++ b/packages/runtime-tags/src/translator/core/await.ts
@@ -10,7 +10,10 @@ import { WalkCode } from "../../common/types";
import { assertNoSpreadAttrs } from "../util/assert";
import evaluate from "../util/evaluate";
import { isPersisted } from "../util/marko-config";
-import { boundaryAlwaysPairs } from "../util/persisted/structure";
+import {
+ boundaryAlwaysPairs,
+ inStatefulBranch,
+} from "../util/persisted/structure";
import {
type Binding,
BindingType,
@@ -203,7 +206,15 @@ export default {
node.body.params,
toFirstExpressionOrBlock(node.body.body),
),
- getSerializeGuard(section, bodySection?.serializeReason, true),
+ // A persisted page always marks a patchable boundary: the
+ // frame pairs its body through the resumed branch link.
+ isPersisted() && !inStatefulBranch(section)
+ ? t.numericLiteral(1)
+ : getSerializeGuard(
+ section,
+ bodySection?.serializeReason,
+ true,
+ ),
patchContent,
// An always-pairing body's Pending entry drops its
// construct id outside divergent contexts.
diff --git a/packages/runtime-tags/src/translator/core/for.ts b/packages/runtime-tags/src/translator/core/for.ts
index e503d3f2c03..c050d6714a6 100644
--- a/packages/runtime-tags/src/translator/core/for.ts
+++ b/packages/runtime-tags/src/translator/core/for.ts
@@ -446,9 +446,11 @@ export default {
setClosureSignalBuilder(
tag,
{ kind: "for", ref: nodeRef },
- (closure, render, initId) => {
+ (closure, render, initId, retain) => {
const selectorKeyBinding = getForSelectorKey(bodySection, closure);
const init = initId && t.stringLiteral(initId);
+ // The `_resume` aliases keep a `tagNameLoad` input's registration
+ // out of the pure-call list (nothing else references it).
if (selectorKeyBinding) {
const args = [
getScopeAccessorLiteral(nodeRef, true),
@@ -457,12 +459,16 @@ export default {
render,
];
return init
- ? callRuntime("_init_for_selector", init, ...args)
+ ? callRuntime(
+ retain ? "_resume_init_for_selector" : "_init_for_selector",
+ init,
+ ...args,
+ )
: callRuntime("_for_selector", ...args);
}
return init
? callRuntime(
- "_init_for_closure",
+ retain ? "_resume_init_for_closure" : "_init_for_closure",
init,
getScopeAccessorLiteral(nodeRef, true),
render,
diff --git a/packages/runtime-tags/src/translator/util/persisted/admission.ts b/packages/runtime-tags/src/translator/util/persisted/admission.ts
index 5a5be3c8d55..9f8297ff0d9 100644
--- a/packages/runtime-tags/src/translator/util/persisted/admission.ts
+++ b/packages/runtime-tags/src/translator/util/persisted/admission.ts
@@ -6,19 +6,23 @@ import { types as t } from "@marko/compiler";
import {
getProgram,
getTagDef,
+ isAttributeTag,
loadFileForTag,
} from "@marko/compiler/babel-utils";
import { isEventHandler } from "../../../common/helpers";
import {
getRelatedControllable,
- isAttrsOnlySpread,
+ isAttrSetSpread,
} from "../../visitors/tag/native-tag";
import * as BindingType from "../constants/binding-type";
import evaluate from "../evaluate";
+import { forEachIdentifier } from "../for-each-identifier";
+import { getTagName } from "../get-tag-name";
import { isConditionTag, isCoreTagName } from "../is-core-tag";
import { isEventOrChangeHandler } from "../is-event-or-change-handler";
import { getParamGroupFeeds, type ParamGroupFeeds } from "../known-tag";
+import { getAttrTagPaths } from "../nested-attribute-tags";
import { every, forEach, type Opt } from "../optional";
import { type Binding, getCanonicalExtra } from "../references";
import { getSection, getSectionForBody } from "../sections";
@@ -81,14 +85,11 @@ export function assertSupportedPatch(program: t.NodePath) {
}
forEach(extra?.referencedBindings, (binding) => {
const sources = getSerializeSourcesForRef(binding);
- if (sources?.global) {
- unsupported(
- node,
- "`$global` cannot be read inside client-owned structure",
- );
- }
+ // A `$global`-derived value delivers like any server value: its fill
+ // re-ships each frame, so only an unfillable read rejects.
if (
- sources?.param &&
+ sources &&
+ (sources.param || sources.global) &&
!sources.state &&
!isPatchFillBinding(binding) &&
!inStatefulBranch(binding.section)
@@ -153,7 +154,7 @@ export function assertSupportedPatch(program: t.NodePath) {
if (!t.isStringLiteral(node.name)) {
// Rendering an `input` property is the body-content channel:
// what it renders is validated where it was compiled.
- if (!isContentRenderTag(inner)) {
+ if (!isContentRenderTag(inner, file.path)) {
reason = "renders a dynamic tag";
}
return;
@@ -177,25 +178,40 @@ export function assertSupportedPatch(program: t.NodePath) {
: instanceValueUnsafety(attrPath.get("value") as t.NodePath);
if (reason) return;
}
- if (getTagDef(inner)?.template) {
- if (node.var) {
- reason = "renders a nested child with a tag variable";
- } else if (node.attributeTags?.length || node.arguments?.length) {
- reason = "renders a nested child with attribute tags or arguments";
- } else {
- // An inputless child has no groups: anything fed must analyze.
- const feeds = node.extra && getParamGroupFeeds(node.extra);
- if (!feeds && node.attributes.length) {
- reason = "renders a nested child without analyzable input";
+ if (!isAttributeTag(inner) && getTagDef(inner)?.template) {
+ // The `_var_change` write-back is not wired for a pure client
+ // instance; an unassigned variable is just a local read.
+ if (node.var && varAssigned(node.var)) {
+ reason = "renders a nested child with an assigned tag variable";
+ return;
+ }
+ if (node.arguments?.length) {
+ for (const argPath of inner.get("arguments") as t.NodePath[]) {
+ reason ||= t.isSpreadElement(argPath.node)
+ ? "renders a nested child with a spread argument"
+ : instanceValueUnsafety(argPath);
}
- for (const group of feeds || []) {
- if (group.sources?.global) {
- reason = "feeds a nested child a `$global`-derived input";
- break;
- }
+ if (reason) return;
+ }
+ // An inputless child has no groups: anything fed must analyze
+ // (attr-tag attribute values validate as this traverse reaches them).
+ const feeds = node.extra && getParamGroupFeeds(node.extra);
+ if (
+ !feeds &&
+ (node.attributes.length ||
+ node.arguments?.length ||
+ node.attributeTags?.length ||
+ node.body.attributeTags)
+ ) {
+ reason = "renders a nested child without analyzable input";
+ }
+ for (const group of feeds || []) {
+ if (group.sources?.global) {
+ reason = "feeds a nested child a `$global`-derived input";
+ break;
}
- reason ||= getInstanceUnsafety(inner);
}
+ reason ||= getInstanceUnsafety(inner);
}
},
});
@@ -276,22 +292,93 @@ export function assertSupportedPatch(program: t.NodePath) {
};
// Provenance-free feeds (imports, opaque reads) have no fill channel, so
// only a tracked (param/state) or constant feed can gate structure.
+ // The child input root a group param feeds from: its program param
+ // index plus the property directly under it (none for a whole param).
+ const getGroupParamRoot = (param: Binding) => {
+ let prop: string | undefined;
+ for (let b: Binding | undefined = param; b; b = b.upstreamAlias) {
+ if (b.upstreamAlias === b.section.params) {
+ return b.property === undefined
+ ? undefined
+ : { index: b.property, prop };
+ }
+ if (b.property !== undefined) prop = b.property;
+ }
+ };
const groupFedUnsafely = (
- attributes: (t.MarkoAttribute | t.MarkoSpreadAttribute)[],
+ tag: t.NodePath,
group: ParamGroupFeeds,
) => {
- let names: Set | undefined;
+ const { node } = tag;
+ const roots: { index: string; prop: string | undefined }[] = [];
+ let unresolved = false;
forEach(group.params, (param) => {
- (names ??= new Set()).add(param.property ?? param.name);
+ const root = getGroupParamRoot(param);
+ if (root) roots.push(root);
+ else unresolved = true;
});
- return attributes.some(
- (attr) =>
- attr.type === "MarkoAttribute" &&
- names?.has(attr.name) &&
- !evaluate(attr.value).confident &&
- !getSerializeSourcesForExpr(attr.value.extra || {}),
+ // A param whose feed cannot be located has no checkable channel.
+ if (unresolved) return true;
+ // Attr-tag and spread values merge their references into the group or
+ // tag extra: the canonical extra sees the tracked sources they carry.
+ const unsafeValue = (value: t.Expression) =>
+ !evaluate(value).confident &&
+ !getSerializeSourcesForExpr(getCanonicalExtra(value.extra || {}));
+ if (
+ node.arguments?.some(
+ (arg, i) =>
+ !t.isSpreadElement(arg) &&
+ roots.some((root) => root.index === i + "") &&
+ unsafeValue(arg),
+ )
+ ) {
+ return true;
+ }
+ // Named attributes and attr tags feed the program param AFTER the
+ // positional arguments; a spread may carry any of its properties.
+ const attrsIndex = (node.arguments?.length || 0) + "";
+ const attrRoots = roots.filter((root) => root.index === attrsIndex);
+ if (!attrRoots.length) return false;
+ const feedsRoot = (name: string) =>
+ attrRoots.some((root) => root.prop === undefined || root.prop === name);
+ if (
+ node.attributes.some((attr) =>
+ attr.type === "MarkoAttribute"
+ ? feedsRoot(attr.name) && unsafeValue(attr.value)
+ : unsafeValue(attr.value),
+ )
+ ) {
+ return true;
+ }
+ // An attr tag itself feeds like body content; only a provenance-free
+ // attribute VALUE anywhere inside one gates the group it feeds.
+ const attrTagFeedsUnsafely = (attrTag: t.NodePath): boolean =>
+ attrTag.node.attributes.some((attr) => unsafeValue(attr.value)) ||
+ getAttrTagPaths(attrTag).some(
+ (child) =>
+ child.isMarkoTag() &&
+ isAttributeTag(child) &&
+ attrTagFeedsUnsafely(child),
+ );
+ const lookup = node.extra?.attributeTags;
+ return (
+ !!lookup &&
+ getAttrTagPaths(tag).some((child) => {
+ if (!child.isMarkoTag() || !isAttributeTag(child)) return false;
+ const meta = lookup[getTagName(child)];
+ return !!meta && feedsRoot(meta.name) && attrTagFeedsUnsafely(child);
+ })
);
};
+ // Whether any binding the tag variable declares is assigned somewhere
+ // (destructured vars hang their bindings on the pattern's identifiers).
+ const varAssigned = (varNode: t.LVal) => {
+ let assigned = false;
+ forEachIdentifier(varNode, (id) => {
+ assigned ||= !!id.extra?.binding?.assignmentSections;
+ });
+ return assigned;
+ };
program.traverse({
MarkoPlaceholder(placeholder) {
const { node } = placeholder;
@@ -330,14 +417,9 @@ export function assertSupportedPatch(program: t.NodePath) {
forEach(ref as Opt, (binding) => {
if (binding.section === localSection) return;
const sources = getSerializeSourcesForRef(binding);
- if (sources?.global) {
- unsupported(
- n,
- `a \`$global\`-derived value inside \`<${attrName}>\` content would go stale`,
- );
- }
if (
- sources?.param &&
+ sources &&
+ (sources.param || sources.global) &&
!sources.state &&
!isPatchFillBinding(binding) &&
!inStatefulBranch(binding.section)
@@ -382,10 +464,18 @@ export function assertSupportedPatch(program: t.NodePath) {
if (stateful) {
for (const attr of node.attributes) {
if (attr.type !== "MarkoAttribute") continue;
- // A local `by` invokes client-side per re-list; any server
- // source anywhere in the keyer would read stale.
+ // A locally written keyer re-invokes client-side (reads stay
+ // current via fills); a server-provided keyer VALUE cannot ship.
if (attr.name === "by") {
- if (exprHasServerSources(attr.value)) {
+ if (
+ t.isFunction(attr.value)
+ ? attr.value.extra?.globalBindings ||
+ hasUnfillablePatchReads(
+ (attr.value.extra as t.FunctionExtra | undefined)
+ ?.referencedBindingsInFunction,
+ )
+ : exprHasServerSources(attr.value)
+ ) {
unsupported(
attr,
"a server-derived `by` key inside a client-owned loop would read stale",
@@ -439,16 +529,12 @@ export function assertSupportedPatch(program: t.NodePath) {
}
return;
}
- // Fills and direct `$global` reads stay current over the wire; a
- // global-DERIVED binding never re-ships, so its reads reject as stale.
if (tagName === "script") {
for (const attr of node.attributes) {
if (attr.type === "MarkoAttribute" && attr.name === "value") {
- if (
- getSerializeSourcesForRef(attr.value.extra?.referencedBindings)
- ?.global ||
- hasUnfillablePatchReads(attr.value.extra?.referencedBindings)
- ) {
+ // `$global`-derived reads deliver like any server value, so
+ // only an unfillable read rejects.
+ if (hasUnfillablePatchReads(attr.value.extra?.referencedBindings)) {
unsupported(attr);
}
// A script's re-run entry rides the branch partial the frame no
@@ -509,27 +595,45 @@ export function assertSupportedPatch(program: t.NodePath) {
// Inside client-owned structure a child is a pure client instance
// (input re-applies via tag-args signals; server values fill).
if (inStatefulBranch(getSection(tag))) {
- if (node.var) {
- unsupported(
- node,
- "a tag variable on a child inside client-owned structure is not supported yet",
- );
- }
- // Body content compiles here, so its expressions are already
- // checked in their own (client-owned) sections; attr tags are not.
- if (node.attributeTags?.length) {
+ // The `_var_change` write-back is not wired for a pure client
+ // instance, so an assigned tag variable stays closed.
+ if (node.var && varAssigned(node.var)) {
unsupported(
node,
- "attribute tags for a child inside client-owned structure are not supported yet",
+ "assigning a child's tag variable inside client-owned structure is not supported yet",
);
}
- // Arguments have no per-group channel: only named attrs deliver.
- if (node.arguments?.length) {
- unsupported(
- node,
- "arguments for a child inside client-owned structure are not supported yet",
- );
+ for (const arg of node.arguments || []) {
+ // A spread argument hides which params it feeds from the
+ // per-group analysis below.
+ if (t.isSpreadElement(arg)) {
+ unsupported(
+ arg,
+ "a spread argument for a child inside client-owned structure is not supported yet",
+ );
+ } else {
+ assertDeliverableInClientOwned(arg, arg, arg.extra);
+ }
}
+ // Attr-tag bodies compile in this file (this traverse visits
+ // them); only their attribute expressions need checking here.
+ const checkAttrTagAttrs = (owner: t.NodePath) => {
+ for (const child of getAttrTagPaths(owner)) {
+ if (child.isMarkoTag() && isAttributeTag(child)) {
+ for (const attr of child.node.attributes) {
+ assertDeliverableInClientOwned(
+ attr,
+ attr.value,
+ attr.type === "MarkoAttribute"
+ ? attr.value.extra
+ : node.extra,
+ );
+ }
+ checkAttrTagAttrs(child);
+ }
+ }
+ };
+ checkAttrTagAttrs(tag);
// Transitive safety composes per-template facts with a memo:
// every template below must be a self-contained client instance.
const unsafety = getInstanceUnsafety(tag);
@@ -553,21 +657,22 @@ export function assertSupportedPatch(program: t.NodePath) {
// An inputless child has no groups to classify; anything fed
// must analyze so each group's channel can be checked.
const feeds = node.extra && getParamGroupFeeds(node.extra);
- if (!feeds && (node.attributes.length || node.arguments?.length)) {
+ if (
+ !feeds &&
+ (node.attributes.length ||
+ node.arguments?.length ||
+ node.attributeTags?.length ||
+ node.body.attributeTags)
+ ) {
unsupported(
node,
"a child inside client-owned structure must have analyzable input",
);
}
for (const group of feeds || []) {
- // Fills keep tracked params current and the instance
- // re-selects client-side; a provenance-free structural feed
- // has no channel, and `$global` never re-ships.
- if (
- (group.structuralOrGlobal &&
- groupFedUnsafely(node.attributes, group)) ||
- group.sources?.global
- ) {
+ // Fills keep tracked params current and the instance re-selects
+ // client-side; a provenance-free structural feed has no channel.
+ if (group.structuralOrGlobal && groupFedUnsafely(tag, group)) {
unsupported(
node,
"an input the child needs server-owned cannot feed from client-owned structure",
@@ -687,12 +792,8 @@ export function assertSupportedPatch(program: t.NodePath) {
if (attr.type === "MarkoAttribute") seen[attr.name] = attr;
}
const related = getRelatedControllable(tagName as string, seen);
- if (related) {
- if (related.helper === "_attr_input_checkedValue") {
- unsupported(node, "`checkedValue` groups are not patchable");
- } else if ("valueMode" in related && related.valueMode) {
- unsupported(node, "a dynamic `type=` can change the control kind");
- }
+ if (related && "valueMode" in related && related.valueMode) {
+ unsupported(node, "a dynamic `type=` can change the control kind");
}
const controlled = new Set(
related ? (related.attrs.filter(Boolean) as t.Node[]) : [],
@@ -710,10 +811,13 @@ export function assertSupportedPatch(program: t.NodePath) {
(attr.value.extra as t.FunctionExtra | undefined)
?.referencedBindingsInFunction,
(binding) => {
- // Direct reads (BindingType.global) see the live bag.
+ // Direct reads (BindingType.global) see the live bag; a
+ // derived value stays current through its fill/wire write.
if (
binding.type !== BindingType.global &&
- getSerializeSourcesForRef(binding)?.global
+ getSerializeSourcesForRef(binding)?.global &&
+ !isPatchFillBinding(binding) &&
+ !isPatchWriteBinding(binding)
) {
unsupported(
attr,
@@ -755,7 +859,7 @@ export function assertSupportedPatch(program: t.NodePath) {
attr.type === "MarkoSpreadAttribute"
? // A controllable or content-carrying spread cannot patch.
!evaluate(attr.value).confident &&
- !isAttrsOnlySpread(tag, tagName as string)
+ !isAttrSetSpread(tag, tagName as string)
: !evaluate(attr.value).confident &&
((isEventOrChangeHandler(attr.name) &&
!isEventHandler(attr.name)) ||
diff --git a/packages/runtime-tags/src/translator/util/persisted/decisions.ts b/packages/runtime-tags/src/translator/util/persisted/decisions.ts
index 63dff5b6e6b..fe3aacabf88 100644
--- a/packages/runtime-tags/src/translator/util/persisted/decisions.ts
+++ b/packages/runtime-tags/src/translator/util/persisted/decisions.ts
@@ -2,7 +2,11 @@
// facts (nothing is stored on the AST); they outlive the admission guard's
// removal.
import { types as t } from "@marko/compiler";
-import { isAttributeTag, loadFileForTag } from "@marko/compiler/babel-utils";
+import {
+ getProgram,
+ isAttributeTag,
+ loadFileForTag,
+} from "@marko/compiler/babel-utils";
import evaluate from "../evaluate";
import isStatic from "../is-static";
@@ -42,7 +46,12 @@ export function hasInertCall(value: t.Node) {
// A dynamic tag rendering `input` content (a body or attribute tag) and
// nothing else: its name reads one property of the template's input, through
// any alias; resolved references are required, so call at finalize or later.
-export function isContentRenderTag(tag: t.NodePath) {
+export function isContentRenderTag(
+ tag: t.NodePath,
+ // The admission guard walks a loaded child file's AST while `getProgram()`
+ // still points at the compiling parent; it passes the child program.
+ program: t.NodePath = getProgram(),
+) {
const { node } = tag;
if (
t.isStringLiteral(node.name) ||
@@ -60,7 +69,7 @@ export function isContentRenderTag(tag: t.NodePath) {
!Array.isArray(binding) &&
binding.property !== undefined &&
!!binding.upstreamAlias &&
- getCanonicalBinding(binding.upstreamAlias) === getInputBinding(tag)
+ getCanonicalBinding(binding.upstreamAlias) === getInputBinding(program)
);
}
// A dynamic tag whose renderer and every input the server owns (any client
@@ -100,11 +109,9 @@ export function hasStateFeed(extra: t.NodeExtra | undefined) {
);
}
-// The template's `input` param binding (the first program param).
-function getInputBinding(tag: t.NodePath) {
- return (
- tag.hub.file as { ast: { program: t.Program } }
- ).ast.program.extra?.binding?.propertyAliases.get("0");
+// The `input` param binding of the given template program.
+function getInputBinding(program: t.NodePath) {
+ return program.node.extra?.binding?.propertyAliases.get("0");
}
export interface ChildPatchPlan {
diff --git a/packages/runtime-tags/src/translator/util/persisted/delivery.ts b/packages/runtime-tags/src/translator/util/persisted/delivery.ts
index e7d72fcb3c7..a6bf1e7bd34 100644
--- a/packages/runtime-tags/src/translator/util/persisted/delivery.ts
+++ b/packages/runtime-tags/src/translator/util/persisted/delivery.ts
@@ -64,19 +64,21 @@ function hasWritableShape(binding: Binding) {
);
}
-// The shape a patch can keep current: a canonical root server value (only
-// canonical bindings get ordinals and server writes — an alias never
-// qualifies, so its reads reject rather than going silently stale).
+// The shape a patch can keep current: a canonical root server value (an
+// alias never gets ordinals or writes, so its reads reject, never go stale).
function isPatchRefreshableBinding(binding: Binding) {
return (
isPersisted() &&
getCanonicalBinding(binding) === binding &&
!binding.section.parent &&
- !!binding.sources?.param &&
+ !!binding.sources &&
+ !!(binding.sources.param || binding.sources.global) &&
!binding.sources.state &&
(binding.type === BindingType.input ||
binding.type === BindingType.param ||
binding.type === BindingType.derived ||
+ // A keyed `$global` read; the bag itself never re-ships.
+ (binding.type === BindingType.global && !!binding.upstreamAlias) ||
(binding.type === BindingType.let && !binding.assignmentSections))
);
}
@@ -163,20 +165,32 @@ export function isPatchWriteBinding(binding: Binding) {
export function hasPatchEffectReads(binding: Binding) {
for (const read of binding.reads) {
// A serialized spread's set is its own delivery.
- if (read.isEffect && !read.serializedSpread) return true;
+ if (read.isEffect && !read.attrSetSpread) return true;
}
return false;
}
// Closures whose construct INITs render a fresh scope: state closures
-// through their own signal, fill closures as arrivals at the joins they feed.
+// through their own signal, fill closures as arrivals at the joins they feed,
+// and lazy-child input feeds (the stash must exist before the module loads).
export function getConstructInitClosures(section: Section) {
return filter(
section.referencedClosures as Opt,
- (closure) => !!closure.sources?.state || fillJoinsIn(closure, section),
+ (closure) =>
+ !!closure.sources?.state ||
+ fillJoinsIn(closure, section) ||
+ feedsTagNameLoadIn(closure, section),
);
}
+// A closure read in `section` that is a `tagNameLoad` tag's input.
+export function feedsTagNameLoadIn(closure: Binding, section: Section) {
+ for (const read of closure.reads) {
+ if (read.section === section && read.tagNameLoadInput) return true;
+ }
+ return false;
+}
+
// A fill closure feeding a state intersection read in `section` (which
// then rides a `_fill_join_*` wrapper registering the closure's init).
function fillJoinsIn(closure: Binding, section: Section) {
@@ -210,11 +224,11 @@ export function getLocalFillFeeds(section: Section) {
}
// A local the server computes without client state: a param property
-// (or rest, a declared object), or a derivation/never-assigned let.
+// (or rest, a declared object), or a derivation/never-assigned let. A
+// `$global` contribution is fine — the shipped value is per-frame current.
function isSeedableLocal(binding: Binding) {
return (
!binding.sources?.state &&
- !binding.sources?.global &&
(isSectionParam(binding) ||
binding.type === BindingType.derived ||
(binding.type === BindingType.let && !binding.assignmentSections))
@@ -233,11 +247,12 @@ function isSectionParam(binding: Binding) {
// Server-sourced reads a patch cannot keep current: param-sourced bindings
// that neither fill nor refresh over the wire read stale after any patch.
export function hasUnfillablePatchReads(refs: Opt) {
- return some(
- refs,
- (binding) =>
- !!getSerializeSourcesForRef(binding)?.param &&
+ return some(refs, (binding) => {
+ const sources = getSerializeSourcesForRef(binding);
+ return (
+ !!(sources?.param || sources?.global) &&
!isPatchFillBinding(binding) &&
- !isPatchWriteBinding(binding),
- );
+ !isPatchWriteBinding(binding)
+ );
+ });
}
diff --git a/packages/runtime-tags/src/translator/util/persisted/structure.ts b/packages/runtime-tags/src/translator/util/persisted/structure.ts
index f1e5aacfd4e..c70e2028b63 100644
--- a/packages/runtime-tags/src/translator/util/persisted/structure.ts
+++ b/packages/runtime-tags/src/translator/util/persisted/structure.ts
@@ -20,6 +20,9 @@ export function boundaryAlwaysPairs(bodySection: Section) {
if (!bodySection.serializeReason) return false;
for (let s: Section | undefined = bodySection; s; s = s.parent) {
if (s.isBranch || s.boundaryContent) return false;
+ // A content section can materialize at any site (or none), so nothing
+ // below it is provably live and unique on every page.
+ if (s !== bodySection && !s.isBoundary && s.parent) return false;
}
return true;
}
diff --git a/packages/runtime-tags/src/translator/util/references.ts b/packages/runtime-tags/src/translator/util/references.ts
index c44878cfbdc..6ba7c8daf6d 100644
--- a/packages/runtime-tags/src/translator/util/references.ts
+++ b/packages/runtime-tags/src/translator/util/references.ts
@@ -213,10 +213,13 @@ declare module "@marko/compiler/dist/types" {
* (dynamic/aliased) read, a property alias names the key. */
globalBindings?: ReferencedBindings;
spreadFrom?: Binding;
+ /** An input expression of a `tagNameLoad` tag (its value stashes until
+ * the child's module arrives). */
+ tagNameLoadInput?: true;
nativeTagSpread?: true;
- /** A native tag spread whose attribute set is serialized with the
- * persisted structure, so its effect read needs no other delivery. */
- serializedSpread?: true;
+ /** A native tag spread that is the element's whole attribute set (no
+ * content renderer it could carry). */
+ attrSetSpread?: true;
nativeTagSpreadMerged?: true;
merged?: NodeExtra;
}
@@ -1132,10 +1135,9 @@ export function finalizeReferences() {
for (const binding of bindings) {
const { name, section } = binding;
- // `$global` bindings resolve sources only: no collision rename (it
- // would burn a UID and shift later generated names), no section
- // membership, no closures — reads compile verbatim.
- if (binding.type === BindingType.global) {
+ // Verbatim globals resolve sources only: no collision rename (it would
+ // burn a UID and shift later generated names), no section, no closures.
+ if (isVerbatimGlobal(binding)) {
resolveBindingSources(binding);
// LOCAL-only bit (no cross-file roll-up): the html output exports it
// as the template's intrinsics, composed across templates at render.
@@ -1669,6 +1671,15 @@ const [getResolvedSources] = createProgramState(() => new Set());
const [getBindingValueExprs] = createProgramState(
() => new Map>(),
);
+// A `$global` read compiles verbatim (no read slot, signal, or register
+// id) unless persisted keys it: a keyed read delivers like any reference.
+function isVerbatimGlobal(binding: Binding) {
+ return (
+ binding.type === BindingType.global &&
+ !(isPersisted() && binding.upstreamAlias)
+ );
+}
+
function resolveBindingSources(binding: Binding) {
const resolvedSources = getResolvedSources();
if (resolvedSources.has(binding)) return;
@@ -2625,16 +2636,14 @@ function resolveReferencedBindings(
if (upstreamRoot) {
binding = upstreamRoot;
}
- } else if (binding.type !== BindingType.global) {
+ } else if (!isVerbatimGlobal(binding)) {
extra.section = expr.section;
({ binding } = extra.read ??= resolveExpressionReference(
rootBindings,
binding,
));
}
- if (binding.type === BindingType.global) {
- // `$global` reads stay verbatim member chains: no read slot,
- // no signal, no register-id participation.
+ if (isVerbatimGlobal(binding)) {
globalBindings = bindingUtil.add(globalBindings, binding);
} else if (isLazyRead(expr, read, binding, isChangeHandlerRead)) {
lazyBindings = bindingUtil.add(lazyBindings, binding);
@@ -2656,9 +2665,7 @@ function resolveReferencedBindings(
binding.hoists = sectionUtil.add(binding.hoists, getter.hoisted);
hoistedBindings = bindingUtil.add(hoistedBindings, binding);
}
- } else if (binding.type === BindingType.global) {
- // `$global` reads stay verbatim member chains: no read slot,
- // no signal, no register-id participation.
+ } else if (isVerbatimGlobal(binding)) {
globalBindings = binding;
} else {
extra.read = createRead(binding, undefined, ownVar);
diff --git a/packages/runtime-tags/src/translator/util/runtime.ts b/packages/runtime-tags/src/translator/util/runtime.ts
index 751ccea1df6..bbb042bc294 100644
--- a/packages/runtime-tags/src/translator/util/runtime.ts
+++ b/packages/runtime-tags/src/translator/util/runtime.ts
@@ -130,6 +130,7 @@ export type DOMRuntimeFeature =
| "patch-child"
| "patch-content"
| "patch-control"
+ | "patch-control-checked-value"
| "patch-control-input"
| "patch-control-open"
| "patch-control-select"
diff --git a/packages/runtime-tags/src/translator/util/sections.ts b/packages/runtime-tags/src/translator/util/sections.ts
index fec2aff9ae8..c5396799b5e 100644
--- a/packages/runtime-tags/src/translator/util/sections.ts
+++ b/packages/runtime-tags/src/translator/util/sections.ts
@@ -171,6 +171,8 @@ export interface Section {
/** Awaits a construct must deliver body content for (marker binding +
* body section); `buildShells` prunes those no shipped shell reaches. */
constructSetups: { binding: Binding; body: Section }[] | undefined;
+ /** Lazily loaded child sites in this section, by their marker binding. */
+ loadSites: Binding[] | undefined;
/** Branch whose shell would construct unfaithfully: the first blocker's
* reason code sticks, no shell ships, patches fail closed. */
shellBlocked: ShellBlocker.Value | undefined;
@@ -262,6 +264,7 @@ export function startSection(
boundaryContent: false,
contentRecord: false,
constructSetups: undefined,
+ loadSites: undefined,
shellBlocked: undefined,
structure: parentSection && !parentSection.structure ? null : [],
};
diff --git a/packages/runtime-tags/src/translator/util/shell.ts b/packages/runtime-tags/src/translator/util/shell.ts
index 4a2bb1ba3d0..7184d95214c 100644
--- a/packages/runtime-tags/src/translator/util/shell.ts
+++ b/packages/runtime-tags/src/translator/util/shell.ts
@@ -172,11 +172,14 @@ function isShellExpressible(section: Section) {
op.kind !== StructureKind.Text &&
// A known child composes when its root is expressible (nested
// branches/boundaries pair via their own entries) and has no tag var.
+ // A renderer-less child is a lazy site: only its marker expresses
+ // (the loaded module renders the markup client-side).
!(
op.kind === StructureKind.Child &&
!op.hasVar &&
- op.renderer?.kind === StructureKind.ExportRef &&
- isShellExpressible(op.renderer.program.section!)
+ (!op.renderer ||
+ (op.renderer.kind === StructureKind.ExportRef &&
+ isShellExpressible(op.renderer.program.section!)))
)
) {
return false;
diff --git a/packages/runtime-tags/src/translator/util/signals.ts b/packages/runtime-tags/src/translator/util/signals.ts
index 073baa56b7e..a89cb0d3169 100644
--- a/packages/runtime-tags/src/translator/util/signals.ts
+++ b/packages/runtime-tags/src/translator/util/signals.ts
@@ -25,6 +25,7 @@ import {
toArray,
} from "./optional";
import {
+ feedsTagNameLoadIn,
getLocalFillFeeds,
getPatchFillBindings,
getPatchFillKey,
@@ -136,6 +137,7 @@ type closureSignalBuilder = (
closure: Binding,
render: t.Expression,
initId?: string,
+ retain?: boolean,
) => t.Expression;
// Structured facts about a branch section's closure hop: what kind of
// branch it is and which accessor (plus branch index) addresses it.
@@ -152,8 +154,8 @@ const [getClosureSignal, _setClosureSignal] = createSectionState<
export function setClosureSignalBuilder(
tag: t.NodePath,
hop: ClosureHop,
- build: closureSignalBuilder = (_closure, render, initId) =>
- buildClosureHop(hop, render, initId),
+ build: closureSignalBuilder = (_closure, render, initId, retain) =>
+ buildClosureHop(hop, render, initId, retain),
) {
_setClosureSignal(getSectionForBody(tag.get("body"))!, { hop, build });
}
@@ -162,13 +164,16 @@ function buildClosureHop(
hop: ClosureHop,
render: t.Expression,
initId?: string,
+ retain?: boolean,
) {
const accessor = getScopeAccessorLiteral(hop.ref, true);
const init = initId && t.stringLiteral(initId);
return hop.kind === "if"
? init
? callRuntime(
- "_init_if_closure",
+ // The `_resume` alias keeps a `tagNameLoad` input's registration
+ // out of the pure-call list (nothing else references it).
+ retain ? "_resume_init_if_closure" : "_init_if_closure",
init,
accessor,
t.numericLiteral(hop.index),
@@ -181,7 +186,12 @@ function buildClosureHop(
render,
)
: init
- ? callRuntime("_init_for_closure", init, accessor, render)
+ ? callRuntime(
+ retain ? "_resume_init_for_closure" : "_init_for_closure",
+ init,
+ accessor,
+ render,
+ )
: callRuntime("_for_closure", accessor, render);
}
@@ -441,13 +451,20 @@ export function getSignal(
const initId = constructsWithInit(section, closure)
? getResumeRegisterId(section, closure, "init")
: undefined;
+ const retain = !!initId && feedsTagNameLoadIn(closure, section);
if (closureSignal && !isDynamicClosure(section, closure)) {
- return closureSignal.build(closure, render, initId);
+ return closureSignal.build(closure, render, initId, retain);
}
return callRuntime(
- initId ? "_init_closure_get" : "_closure_get",
+ initId
+ ? // The `_resume` alias keeps a `tagNameLoad` input's registration
+ // out of the pure-call list (nothing else references it).
+ retain
+ ? "_resume_init_closure_get"
+ : "_init_closure_get"
+ : "_closure_get",
...(initId ? [t.stringLiteral(initId)] : []),
// Optimized builds pass the reserved closure accessor id.
isOptimize()
@@ -473,6 +490,15 @@ export function getSignal(
return signal;
}
+// A dynamic content record elides the chain's dom renderers, and with them
+// the `_closure_get` pending registration the replay script would look up.
+function inRecordDeliveredChain(section: Section) {
+ for (let cur: Section | undefined = section; cur; cur = cur.parent) {
+ if (cur.contentRecord === true) return true;
+ }
+ return false;
+}
+
function underTryPlaceholder(section: Section) {
let curSection = section.parent;
while (curSection) {
@@ -1129,10 +1155,7 @@ export function writeSignals(section: Section) {
// A chain that leaves the branch ladder delivers through the
// member's own closure signal (`_fill_join_closure`) instead.
if (!isBranchSectionChain(signal.section, member.section)) {
- if (
- inStatefulBranch(signal.section) ||
- inBoundaryContent(signal.section)
- ) {
+ if (inStatefulBranch(signal.section)) {
continue;
}
const closureSignal = getSignal(signal.section, member);
@@ -1217,7 +1240,10 @@ export function writeSignals(section: Section) {
inBoundaryContent(signal.section)) &&
isPatchFillBinding(signal.referencedBindings) &&
signal.section !== signal.referencedBindings.section &&
- isBranchChainTo(signal.section, signal.referencedBindings.section) &&
+ // A dynamic closure dispatches through its owner-anchored
+ // subscriber set, so its chain shape does not matter.
+ (isBranchChainTo(signal.section, signal.referencedBindings.section) ||
+ isDynamicClosure(signal.section, signal.referencedBindings)) &&
hasFillDeliveredRead(signal.referencedBindings, signal.section)
) {
// Inside client-owned structure a lone closure over a server
@@ -1533,12 +1559,14 @@ export function sectionHasGlobalEffect(section: Section) {
function constructsWithInit(section: Section, closure: Binding) {
return (
sectionConstructs(section) &&
- (!!closure.sources?.state || includes(getLocalFillFeeds(section), closure))
+ (!!closure.sources?.state ||
+ includes(getLocalFillFeeds(section), closure) ||
+ feedsTagNameLoadIn(closure, section))
);
}
// A branch body that ships a shell, so a patch may construct it.
-function sectionConstructs(section: Section) {
+export function sectionConstructs(section: Section) {
return (
isPersisted() &&
section.isBranch &&
@@ -1591,23 +1619,20 @@ function isSerializedSpreadEffect(signal: Signal) {
!!refs &&
some(refs, (binding) => {
for (const read of binding.reads) {
- if (read.referencedBindings === refs && read.serializedSpread)
- return true;
+ if (read.referencedBindings === refs && read.attrSetSpread) return true;
}
return false;
})
);
}
-// An effect read the wire cannot keep current (unfillable params, global-
-// derived bindings) blocks constructs; direct `$global` reads re-queue.
+// An effect read the wire cannot keep current blocks constructs; fill and
+// wire-write deliveries (param- and `$global`-derived alike) stay current,
+// and direct `$global` reads re-queue against the live bag.
export function sectionHasServerEffect(section: Section) {
for (const signal of getSignals(section).values()) {
if (signal.hasHTMLEffect && !isSerializedSpreadEffect(signal)) {
- if (
- getSerializeSourcesForRef(signal.referencedBindings)?.global ||
- hasUnfillablePatchReads(signal.referencedBindings)
- ) {
+ if (hasUnfillablePatchReads(signal.referencedBindings)) {
return true;
}
}
@@ -1685,10 +1710,12 @@ export function writeHTMLResumeStatements(
}
if (underTryPlaceholder(section)) {
- // A scriptless page never registers the pending replay (constructs
- // get content via patch entries), so the envelope must not need it.
+ // A scriptless page or a record-delivered chain never registers
+ // the pending replay, so the envelope must not reference it.
const reason =
- isPersisted() && !getProgram().node.extra.isInteractive
+ isPersisted() &&
+ (!getProgram().node.extra.isInteractive ||
+ inRecordDeliveredChain(section))
? undefined
: getSerializeReason(section);
if (reason) {
diff --git a/packages/runtime-tags/src/translator/visitors/import-declaration.ts b/packages/runtime-tags/src/translator/visitors/import-declaration.ts
index 0966edcc093..2bdf73ad49b 100644
--- a/packages/runtime-tags/src/translator/visitors/import-declaration.ts
+++ b/packages/runtime-tags/src/translator/visitors/import-declaration.ts
@@ -254,7 +254,10 @@ function getOrCreateHtmlLoadWrapped(
"withLoadAssets",
originalIdentifier,
t.stringLiteral(readyId),
- triggers ? t.valueToNode(triggers) : undefined,
+ triggers && t.valueToNode(triggers),
+ // A persisted page may hold a deferred patch on this channel,
+ // so its loader scripts report load errors.
+ isPersisted() && t.numericLiteral(1),
),
),
]),
diff --git a/packages/runtime-tags/src/translator/visitors/program/html.ts b/packages/runtime-tags/src/translator/visitors/program/html.ts
index 8154781dd41..974bbc38275 100644
--- a/packages/runtime-tags/src/translator/visitors/program/html.ts
+++ b/packages/runtime-tags/src/translator/visitors/program/html.ts
@@ -252,6 +252,11 @@ export default {
marker +=
(marker && " ") + getResumeRegisterId(section, closure, "init");
});
+ // Lazy sites wire their load (and channel) as construct inits.
+ for (const site of section.loadSites || []) {
+ marker +=
+ (marker && " ") + getResumeRegisterId(section, site, "init");
+ }
// An effect the construct's own renders queue (an init, seed,
// or item write cascades into it) is not replayed.
const effectIds = getSectionEffectRegisterIds(
diff --git a/packages/runtime-tags/src/translator/visitors/program/index.ts b/packages/runtime-tags/src/translator/visitors/program/index.ts
index 30c96804a8d..431ad585e06 100644
--- a/packages/runtime-tags/src/translator/visitors/program/index.ts
+++ b/packages/runtime-tags/src/translator/visitors/program/index.ts
@@ -172,11 +172,9 @@ export default {
const entryFile = getFile();
const { filename } = entryFile.opts;
const readyId = getReadyId(entryFile)!;
- // A rejected chunk blocks this ready id forever: the debug build
- // reports it instead of leaving the content silently inert, while
- // production keeps the arm's bytes out (the failure still surfaces
- // as a network error in devtools).
- const report = !markoOpts.optimize;
+ // A rejected chunk blocks this ready id forever: debug reports it;
+ // persisted also reports in production so deferred patches settle.
+ const report = !markoOpts.optimize || isPersisted();
program.node.body = [
t.importDeclaration(
[
diff --git a/packages/runtime-tags/src/translator/visitors/referenced-identifier.ts b/packages/runtime-tags/src/translator/visitors/referenced-identifier.ts
index 3f91744a851..011e300c345 100644
--- a/packages/runtime-tags/src/translator/visitors/referenced-identifier.ts
+++ b/packages/runtime-tags/src/translator/visitors/referenced-identifier.ts
@@ -78,6 +78,18 @@ export default {
case "$global": {
// An HTML read resolves to the `$global` const the program declares.
if (isOutputHTML()) break;
+ // Only a persisted keyed read (`$global.key`) becomes a tracked
+ // binding — it needs an identity a fill can deliver through — so the
+ // standard read replacement rewrites the whole member expression.
+ // Every other shape (dynamic/aliased reads, whole-bag reads, and all
+ // non-persisted builds) has no binding and stays a bag access here.
+ if (
+ (t.isMemberExpression(identifier.parent) ||
+ t.isOptionalMemberExpression(identifier.parent)) &&
+ identifier.parent.extra?.read
+ ) {
+ break;
+ }
const globalRead = t.memberExpression(
scopeIdentifier,
diff --git a/packages/runtime-tags/src/translator/visitors/tag/custom-tag.ts b/packages/runtime-tags/src/translator/visitors/tag/custom-tag.ts
index bb38be6261e..f45536cb0fc 100644
--- a/packages/runtime-tags/src/translator/visitors/tag/custom-tag.ts
+++ b/packages/runtime-tags/src/translator/visitors/tag/custom-tag.ts
@@ -29,7 +29,12 @@ import {
knownTagTranslateDOM,
knownTagTranslateHTML,
} from "../../util/known-tag";
-import { getMarkoOpts, isOutputHTML } from "../../util/marko-config";
+import {
+ getMarkoOpts,
+ getReadyId,
+ isOutputHTML,
+ isPersisted,
+} from "../../util/marko-config";
import type { Binding } from "../../util/references";
import {
BindingType,
@@ -40,7 +45,12 @@ import { callRuntime, importRuntimeFeature } from "../../util/runtime";
import { createScopeReadExpression } from "../../util/scope-read";
import { getOrCreateSection, StructureKind } from "../../util/sections";
import { addSetupStatement } from "../../util/setup-statements";
-import { addStatement, getSignal } from "../../util/signals";
+import {
+ addStatement,
+ getResumeRegisterId,
+ getSignal,
+ sectionConstructs,
+} from "../../util/signals";
import { createProgramState } from "../../util/state";
import * as structure from "../../util/structure";
import type { TemplateVisitor } from "../../util/visitors";
@@ -92,11 +102,19 @@ export default {
}
if (tagExtra.tagNameLoad) {
+ const section = getOrCreateSection(tag);
tagExtra[kLoadTagBinding] = createBinding(
"#text",
BindingType.dom,
- getOrCreateSection(tag),
+ section,
);
+ (section.loadSites ??= []).push(tagExtra[kLoadTagBinding]!);
+ tagExtra.tagNameLoadInput = true;
+ // Reference tracking fills these same extras later, so the fact is
+ // recorded ahead of it on each attr value.
+ for (const attr of tag.node.attributes) {
+ (attr.value.extra ??= {}).tagNameLoadInput = true;
+ }
}
if (tagExtra.tagNameLoad || !childExtra.domExports?.setupEmpty) {
@@ -252,22 +270,42 @@ function translateDOM(tag: t.NodePath) {
]),
);
importRuntimeFeature("catch");
+ const loadSetupCall = callRuntime(
+ "_load_setup",
+ getScopeAccessorLiteral(node.extra![kLoadTagBinding]!, true),
+ getScopeAccessorLiteral(childBinding, true),
+ triggerIdent
+ ? t.addComment(
+ t.callExpression(triggerIdent, [setupLoadExpr]),
+ "leading",
+ "@__PURE__",
+ )
+ : setupLoadExpr,
+ // A construct's client-side load drives the child's ready
+ // channel, so its deferred frame data drains after insert.
+ isPersisted() &&
+ getReadyId(childFile) !== undefined &&
+ t.stringLiteral(getReadyId(childFile)!),
+ );
getProgram().node.body.push(
t.variableDeclaration("let", [
t.variableDeclarator(
setupIdent,
- callRuntime(
- "_load_setup",
- getScopeAccessorLiteral(node.extra![kLoadTagBinding]!, true),
- getScopeAccessorLiteral(childBinding, true),
- triggerIdent
- ? t.addComment(
- t.callExpression(triggerIdent, [setupLoadExpr]),
- "leading",
- "@__PURE__",
- )
- : setupLoadExpr,
- ),
+ // A constructing branch runs the site's load wiring as a shell
+ // init; `_resume` (impure) survives tree-shaking to deliver it.
+ isPersisted() && sectionConstructs(section)
+ ? callRuntime(
+ "_resume",
+ t.stringLiteral(
+ getResumeRegisterId(
+ section,
+ node.extra![kLoadTagBinding]!,
+ "init",
+ ),
+ ),
+ loadSetupCall,
+ )
+ : loadSetupCall,
),
]),
);
diff --git a/packages/runtime-tags/src/translator/visitors/tag/native-tag.ts b/packages/runtime-tags/src/translator/visitors/tag/native-tag.ts
index 3fc30f1342c..c8e706d2ed0 100644
--- a/packages/runtime-tags/src/translator/visitors/tag/native-tag.ts
+++ b/packages/runtime-tags/src/translator/visitors/tag/native-tag.ts
@@ -56,6 +56,7 @@ import {
getPrefixedScopeAccessor,
getScopeAccessorLiteral,
mergeReferences,
+ mergeSources,
trackDomVarReferences,
} from "../../util/references";
import {
@@ -363,10 +364,13 @@ export default {
ensurePersistedWriteGroups(() => value.extra || {});
}
}
- if (spreadReferenceNodes && isAttrsOnlySpread(tag, tagName)) {
+ if (spreadReferenceNodes && isAttrSetSpread(tag, tagName)) {
addRuntimeFeatureAsset("patch-attrs");
+ if (controllableClaimFor(tagName)) {
+ addRuntimeFeatureAsset("controllable");
+ }
ensurePersistedWriteGroups(() => node.extra || {});
- (node.extra ??= {}).serializedSpread = true;
+ (node.extra ??= {}).attrSetSpread = true;
}
}
@@ -648,11 +652,10 @@ export default {
}
// A patched control wires like a fill: the handler installs first
- // (binds queue ahead of the control's apply), then the value entry
- // makes the server's value authoritative through the registered
- // controlled helper — paired refresh and construct alike.
+ // (binds queue ahead), then the value entry applies authoritatively.
if (isPersisted() && isBranchPathSection(tagSection)) {
- const [valueAttr, changeAttr] = staticControllable.attrs;
+ const [valueAttr, changeAttr, groupValueAttr] =
+ staticControllable.attrs;
if (changeAttr) {
// A param-fed handler binds only under server ownership, so
// a client-owned control never rebinds a stale handler.
@@ -672,17 +675,38 @@ export default {
)}`;
}
// A param-fed control value writes only under server ownership.
+ // A group entry (`checkedValue`) also carries the input's own
+ // `value`: each node applies its own comparison client-side.
+ const groupEntry =
+ staticControllable.helper === "_attr_input_checkedValue";
write`${callRuntime(
"_patch_control",
getScopeIdIdentifier(tagSection),
t.cloneNode(visitAccessor!, true),
t.numericLiteral(getControlledType(staticControllable)),
- valueAttr ? t.cloneNode(valueAttr.value, true) : buildUndefined(),
- ...(valueAttr
- ? getPatchWriteOwnership(
- getSerializeSourcesForExpr(valueAttr.value.extra || {}),
- )
- : []),
+ groupEntry
+ ? t.arrayExpression([
+ valueAttr
+ ? t.cloneNode(valueAttr.value, true)
+ : buildUndefined(),
+ groupValueAttr
+ ? t.cloneNode(groupValueAttr.value, true)
+ : buildUndefined(),
+ ])
+ : valueAttr && t.cloneNode(valueAttr.value, true),
+ ...getPatchWriteOwnership(
+ groupEntry
+ ? mergeSources(
+ valueAttr &&
+ getSerializeSourcesForExpr(valueAttr.value.extra || {}),
+ groupValueAttr &&
+ getSerializeSourcesForExpr(
+ groupValueAttr.value.extra || {},
+ ),
+ )
+ : valueAttr &&
+ getSerializeSourcesForExpr(valueAttr.value.extra || {}),
+ ),
)}`;
}
}
@@ -879,7 +903,7 @@ export default {
if (isTextOnly || isOpenOnly || hasChildren || staticContentAttr) {
const patches =
- isAttrsOnlySpread(tag, tagName) &&
+ isAttrSetSpread(tag, tagName) &&
writesPatchAttr(tag, tagSection, "spread", tag.node.extra);
if (skipExpression) {
write`${callRuntime(
@@ -890,9 +914,14 @@ export default {
getScopeIdIdentifier(tagSection),
t.stringLiteral(tagName),
...(patches
- ? getPatchWriteOwnership(
- getSerializeSourcesForExpr(tag.node.extra || {}),
- )
+ ? [
+ !staticControllable &&
+ controllableClaimFor(tagName) &&
+ t.numericLiteral(1),
+ ...getPatchWriteOwnership(
+ getSerializeSourcesForExpr(tag.node.extra || {}),
+ ),
+ ]
: []),
)}`;
} else if (patches) {
@@ -904,6 +933,9 @@ export default {
visitAccessor,
getScopeIdIdentifier(tagSection),
t.stringLiteral(tagName),
+ !staticControllable &&
+ controllableClaimFor(tagName) &&
+ t.numericLiteral(1),
...getPatchWriteOwnership(
getSerializeSourcesForExpr(tag.node.extra || {}),
),
@@ -1321,9 +1353,14 @@ export default {
if (
isPersisted() &&
isBranchPathSection(tagSection) &&
- isAttrsOnlySpread(tag, staticName)
+ isAttrSetSpread(tag, staticName)
) {
importRuntimeFeature("patch-attrs");
+ // A spread that owns the element's controllable (no static attr
+ // does) re-claims it through the run-time claim table.
+ if (!staticControllable && controllableClaimFor(staticName)) {
+ importRuntimeFeature("controllable");
+ }
}
if (skipExpression) {
addStatement(
@@ -1463,15 +1500,15 @@ function writesPatchAttr(
return false;
}
-// A spread whose set is plain attributes: no controllable descriptor and no
-// `content` renderer (the tag has its own body or admits none).
-export function isAttrsOnlySpread(
+// A spread that is the element's whole attribute set: no `content` renderer
+// can ride it (the tag has its own body or admits none). Patches re-apply
+// such a set as-is, controllable claims included.
+export function isAttrSetSpread(
tag: t.NodePath,
tagName: string | undefined,
) {
return (
!!tagName &&
- !controllableClaimFor(tagName) &&
tagName !== "option" &&
!!(
isTextOnlyNativeTag(tag) ||
@@ -1581,7 +1618,9 @@ function getPatchControlFeature(
? ("patch-control-select" as const)
: controllable.helper.endsWith("_open")
? ("patch-control-open" as const)
- : ("patch-control-input" as const);
+ : controllable.helper === "_attr_input_checkedValue"
+ ? ("patch-control-checked-value" as const)
+ : ("patch-control-input" as const);
}
// The wire's control kind ids mirror `ControlledType`.
@@ -1589,6 +1628,8 @@ function getControlledType(controllable: NonNullable) {
switch (controllable.helper) {
case "_attr_input_checked":
return ControlledType.InputChecked;
+ case "_attr_input_checkedValue":
+ return ControlledType.InputCheckedValue;
case "_attr_select_value":
return ControlledType.SelectValue;
case "_attr_input_value":