diff --git a/.changeset/light-worms-arrive.md b/.changeset/light-worms-arrive.md
new file mode 100644
index 0000000000..ada9b5b54d
--- /dev/null
+++ b/.changeset/light-worms-arrive.md
@@ -0,0 +1,6 @@
+---
+"@marko/translator-interop-class-tags": patch
+"marko": patch
+---
+
+Update tags api interop layer.
diff --git a/.changeset/purple-crabs-brush.md b/.changeset/purple-crabs-brush.md
new file mode 100644
index 0000000000..dac02aadfe
--- /dev/null
+++ b/.changeset/purple-crabs-brush.md
@@ -0,0 +1,5 @@
+---
+"@marko/runtime-tags": patch
+---
+
+Avoid registering body content when known downstream usage is not serialized.
diff --git a/packages/runtime-class/src/runtime/helpers/tags-compat/runtime-html.js b/packages/runtime-class/src/runtime/helpers/tags-compat/runtime-html.js
index 00c044ea2a..74370f8343 100644
--- a/packages/runtime-class/src/runtime/helpers/tags-compat/runtime-html.js
+++ b/packages/runtime-class/src/runtime/helpers/tags-compat/runtime-html.js
@@ -7,8 +7,8 @@ const defaultCreateOut = require("../../createOut");
const dynamicTag5 = require("../dynamic-tag");
exports.p = function (htmlCompat) {
- const isMarko6 = (fn) => !!fn.___isTagsAPI;
- const isMarko5 = (fn) => !fn.___isTagsAPI;
+ const isMarko6 = (fn) => htmlCompat.isTagsAPI(fn);
+ const isMarko5 = (fn) => !isMarko6(fn);
const writeHTML = (result) => {
const state = result.out._state;
const writer = state.writer;
@@ -63,77 +63,71 @@ exports.p = function (htmlCompat) {
{},
);
- htmlCompat.patchDynamicTag(
- function getRenderer(tag) {
- const renderer = tag._ || tag.renderBody || tag;
- if (isMarko6(renderer)) return renderer;
+ htmlCompat.patchDynamicTag(function getRenderer(tag) {
+ const renderer = tag._ || tag.renderBody || tag;
+ if (isMarko6(renderer)) return renderer;
- const renderer5 =
- tag._ ||
- tag.render ||
- (tag.renderer && tag.renderer.renderer) ||
- tag.renderer;
- const renderBody5 = tag.renderBody || tag;
+ const renderer5 =
+ tag._ ||
+ tag.render ||
+ (tag.renderer && tag.renderer.renderer) ||
+ tag.renderer;
+ const renderBody5 = tag.renderBody || tag;
- if (!renderer5 && renderBody5) {
- htmlCompat.registerRenderBody(renderBody5);
- }
- return (input, ...args) => {
- const out = defaultCreateOut();
- let customEvents;
-
- if (renderer5) {
- const normalizedInput = {};
-
- for (const key in input) {
- const value = input[key];
- if (/^on[-A-Z]/.test(key)) {
- if (typeof value === "function") {
- (customEvents || (customEvents = [])).push([
- key[2] === "-" ? key.slice(3) : key.slice(2).toLowerCase(),
- value,
- ]);
- value.toJSON = htmlCompat.toJSON;
- }
- } else {
- normalizedInput[key === "content" ? "renderBody" : key] = value;
+ if (!renderer5 && renderBody5) {
+ htmlCompat.registerRenderBody(renderBody5);
+ }
+ return (input, ...args) => {
+ const out = defaultCreateOut();
+ let customEvents;
+
+ if (renderer5) {
+ const normalizedInput = {};
+
+ for (const key in input) {
+ const value = input[key];
+ if (/^on[-A-Z]/.test(key)) {
+ if (typeof value === "function") {
+ (customEvents || (customEvents = [])).push([
+ key[2] === "-" ? key.slice(3) : key.slice(2).toLowerCase(),
+ value,
+ ]);
+ value.toJSON = htmlCompat.toJSON;
}
+ } else {
+ normalizedInput[key === "content" ? "renderBody" : key] = value;
}
- renderer5(normalizedInput, out);
- } else {
- renderBody5(out, input, ...args);
}
+ renderer5(normalizedInput, out);
+ } else {
+ renderBody5(out, input, ...args);
+ }
- const componentsContext = ___getComponentsContext(out);
- const component = componentsContext.___components[0];
- if (component) {
- component.___component.___customEvents = customEvents;
- htmlCompat.writeSetScopeForComponent(component.id);
- }
+ const componentsContext = ___getComponentsContext(out);
+ const component = componentsContext.___components[0];
+ if (component) {
+ component.___component.___customEvents = customEvents;
+ htmlCompat.writeSetScopeForComponent(component.id);
+ }
- initComponentsTag({}, out);
+ initComponentsTag({}, out);
- let async;
- out.once("finish", (result) => {
- if (!async) {
- async = false;
- writeHTML(result);
- }
- });
+ let async;
+ out.once("finish", (result) => {
+ if (!async) {
+ async = false;
+ writeHTML(result);
+ }
+ });
- out.end();
+ out.end();
- if (async !== false) {
- async = true;
- htmlCompat.fork(out, writeHTML);
- }
- };
- },
- function createRenderer(renderFn) {
- renderFn.___isTagsAPI = true;
- return renderFn;
- },
- );
+ if (async !== false) {
+ async = true;
+ htmlCompat.fork(out, writeHTML);
+ }
+ };
+ });
return htmlCompat.registerRenderer;
};
diff --git a/packages/runtime-tags/src/__tests__/fixtures/abort-signal-render-phase-error/__snapshots__/html.expected/template.js b/packages/runtime-tags/src/__tests__/fixtures/abort-signal-render-phase-error/__snapshots__/html.expected/template.js
index 9546b27064..bb894d811c 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/abort-signal-render-phase-error/__snapshots__/html.expected/template.js
+++ b/packages/runtime-tags/src/__tests__/fixtures/abort-signal-render-phase-error/__snapshots__/html.expected/template.js
@@ -1,9 +1,8 @@
import * as _$ from "@marko/runtime-tags/debug/html";
-const _renderer = /* @__PURE__ */_$.createRenderer(input => {
+export default /* @__PURE__ */_$.createTemplate("__tests__/template.marko", input => {
const _scope0_id = _$.nextScopeId();
_$.write(`
${_$.escapeXML((() => {
throw new Error("Cannot use $signal in a server render.");
})().onabort = () => {})}
`);
_$.resumeClosestBranch(_scope0_id);
-});
-export default /* @__PURE__ */_$.createTemplate("__tests__/template.marko", _renderer);
\ No newline at end of file
+});
\ No newline at end of file
diff --git a/packages/runtime-tags/src/__tests__/fixtures/assign-to-owner-closure/__snapshots__/html.expected/template.js b/packages/runtime-tags/src/__tests__/fixtures/assign-to-owner-closure/__snapshots__/html.expected/template.js
index 53a3ac84ae..df5cb61c98 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/assign-to-owner-closure/__snapshots__/html.expected/template.js
+++ b/packages/runtime-tags/src/__tests__/fixtures/assign-to-owner-closure/__snapshots__/html.expected/template.js
@@ -1,5 +1,5 @@
import * as _$ from "@marko/runtime-tags/debug/html";
-const _renderer = /* @__PURE__ */_$.createRenderer(input => {
+export default /* @__PURE__ */_$.createTemplate("__tests__/template.marko", input => {
const _scope0_id = _$.nextScopeId();
let _ifScopeId, _ifBranch;
const hide = undefined;
@@ -20,5 +20,4 @@ const _renderer = /* @__PURE__ */_$.createRenderer(input => {
"#text/0!": _$.getScopeById(_ifScopeId)
}, "__tests__/template.marko", 0);
_$.resumeClosestBranch(_scope0_id);
-});
-export default /* @__PURE__ */_$.createTemplate("__tests__/template.marko", _renderer);
\ No newline at end of file
+});
\ No newline at end of file
diff --git a/packages/runtime-tags/src/__tests__/fixtures/assignment-before-tag-var/__snapshots__/html.expected/template.js b/packages/runtime-tags/src/__tests__/fixtures/assignment-before-tag-var/__snapshots__/html.expected/template.js
index 9cde14d56e..a9316296a9 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/assignment-before-tag-var/__snapshots__/html.expected/template.js
+++ b/packages/runtime-tags/src/__tests__/fixtures/assignment-before-tag-var/__snapshots__/html.expected/template.js
@@ -1,5 +1,5 @@
import * as _$ from "@marko/runtime-tags/debug/html";
-const _renderer = /* @__PURE__ */_$.createRenderer(input => {
+export default /* @__PURE__ */_$.createTemplate("__tests__/template.marko", input => {
const _scope0_id = _$.nextScopeId();
const clickCount = 0;
const lastClickCount = undefined;
@@ -11,5 +11,4 @@ const _renderer = /* @__PURE__ */_$.createRenderer(input => {
clickCount: "6:6"
});
_$.resumeClosestBranch(_scope0_id);
-});
-export default /* @__PURE__ */_$.createTemplate("__tests__/template.marko", _renderer);
\ No newline at end of file
+});
\ No newline at end of file
diff --git a/packages/runtime-tags/src/__tests__/fixtures/at-tag-inside-if-tag/__snapshots__/html.expected/tags/custom-tag/index.js b/packages/runtime-tags/src/__tests__/fixtures/at-tag-inside-if-tag/__snapshots__/html.expected/tags/custom-tag/index.js
index fccdfbc557..e4951a029e 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/at-tag-inside-if-tag/__snapshots__/html.expected/tags/custom-tag/index.js
+++ b/packages/runtime-tags/src/__tests__/fixtures/at-tag-inside-if-tag/__snapshots__/html.expected/tags/custom-tag/index.js
@@ -1,5 +1,5 @@
import * as _$ from "@marko/runtime-tags/debug/html";
-const _renderer = /* @__PURE__ */_$.createRenderer(input => {
+export default /* @__PURE__ */_$.createTemplate("__tests__/tags/custom-tag/index.marko", input => {
const _scope0_id = _$.nextScopeId();
const {
thing: {
@@ -12,7 +12,6 @@ const _renderer = /* @__PURE__ */_$.createRenderer(input => {
_$.write(`${_$.escapeXML(x)}${_$.markResumeNode(_scope0_id, "#text/1")}
`);
_$.writeScope(_scope0_id, {
"#text/0!": _$.writeExistingScope(_dynamicScope),
- "#text/0(": _$.normalizeDynamicRenderer(content)
+ "#text/0(": _$.dynamicTagId(content)
}, "__tests__/tags/custom-tag/index.marko", 0);
-});
-export default /* @__PURE__ */_$.createTemplate("__tests__/tags/custom-tag/index.marko", _renderer);
\ No newline at end of file
+});
\ No newline at end of file
diff --git a/packages/runtime-tags/src/__tests__/fixtures/at-tag-inside-if-tag/__snapshots__/html.expected/template.js b/packages/runtime-tags/src/__tests__/fixtures/at-tag-inside-if-tag/__snapshots__/html.expected/template.js
index 7f9d88d804..a198e954a1 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/at-tag-inside-if-tag/__snapshots__/html.expected/template.js
+++ b/packages/runtime-tags/src/__tests__/fixtures/at-tag-inside-if-tag/__snapshots__/html.expected/template.js
@@ -1,6 +1,6 @@
import * as _$ from "@marko/runtime-tags/debug/html";
import _customTag from "./tags/custom-tag/index.marko";
-const _renderer = /* @__PURE__ */_$.createRenderer(input => {
+export default /* @__PURE__ */_$.createTemplate("__tests__/template.marko", input => {
const _scope0_id = _$.nextScopeId();
const {
x
@@ -10,18 +10,18 @@ const _renderer = /* @__PURE__ */_$.createRenderer(input => {
if (x) {
_thing = _$.attrTag({
x: 1,
- content: _$.register(/* @__PURE__ */_$.createRenderer(() => {
+ content: _$.registerContent("__tests__/template.marko_1_renderer", () => {
const _scope1_id = _$.nextScopeId();
_$.write("Hello");
- }), "__tests__/template.marko_1_renderer", _scope0_id)
+ }, _scope0_id)
});
} else {
_thing = _$.attrTag({
x: 2,
- content: _$.register(/* @__PURE__ */_$.createRenderer(() => {
+ content: _$.registerContent("__tests__/template.marko_2_renderer", () => {
const _scope2_id = _$.nextScopeId();
_$.write("Goodbye");
- }), "__tests__/template.marko_2_renderer", _scope0_id)
+ }, _scope0_id)
});
}
_customTag({
@@ -30,5 +30,4 @@ const _renderer = /* @__PURE__ */_$.createRenderer(input => {
_$.writeScope(_scope0_id, {
"#childScope/0": _$.writeExistingScope(_childScope)
}, "__tests__/template.marko", 0);
-});
-export default /* @__PURE__ */_$.createTemplate("__tests__/template.marko", _renderer);
\ No newline at end of file
+});
\ No newline at end of file
diff --git a/packages/runtime-tags/src/__tests__/fixtures/at-tag-inside-if-tag/__snapshots__/resume.expected.md b/packages/runtime-tags/src/__tests__/fixtures/at-tag-inside-if-tag/__snapshots__/resume.expected.md
index 33141792c6..70ea1e3cd0 100644
--- a/packages/runtime-tags/src/__tests__/fixtures/at-tag-inside-if-tag/__snapshots__/resume.expected.md
+++ b/packages/runtime-tags/src/__tests__/fixtures/at-tag-inside-if-tag/__snapshots__/resume.expected.md
@@ -12,7 +12,7 @@