diff --git a/.changeset/sixty-fans-repair.md b/.changeset/sixty-fans-repair.md new file mode 100644 index 0000000000..a185e08e94 --- /dev/null +++ b/.changeset/sixty-fans-repair.md @@ -0,0 +1,6 @@ +--- +"@marko/runtime-tags": patch +"@marko/translator-interop-class-tags": patch +--- + +Increase specificity of dynamic tag normalization diff --git a/.sizes.json b/.sizes.json index 580b1df5e9..ee59d3885f 100644 --- a/.sizes.json +++ b/.sizes.json @@ -7,8 +7,8 @@ { "name": "*", "total": { - "min": 19308, - "brotli": 7346 + "min": 19360, + "brotli": 7338 } }, { diff --git a/.sizes/dom.js b/.sizes/dom.js index 1bac9a48e8..e3761838c1 100644 --- a/.sizes/dom.js +++ b/.sizes/dom.js @@ -1,4 +1,4 @@ -// size: 19308 (min) 7346 (brotli) +// size: 19360 (min) 7338 (brotli) var empty = [], rest = Symbol(); function attrTag(attrs) { @@ -69,7 +69,11 @@ function getEventHandlerName(name) { return "-" === name[2] ? name.slice(3) : name.slice(2).toLowerCase(); } function normalizeDynamicRenderer(value) { - return value ? value.content || value.default || value : void 0; + if (value) { + if ("string" == typeof value) return value; + let normalized = value.content || value.default || value; + if ("___id" in normalized) return normalized; + } } var defaultDelegator = createDelegator(); function _on(element, type, handler) { diff --git a/packages/runtime-tags/src/__tests__/fixtures/dynamic-tag-content-default/__snapshots__/.name-cache.json b/packages/runtime-tags/src/__tests__/fixtures/dynamic-tag-content-default/__snapshots__/.name-cache.json new file mode 100644 index 0000000000..db413faf9a --- /dev/null +++ b/packages/runtime-tags/src/__tests__/fixtures/dynamic-tag-content-default/__snapshots__/.name-cache.json @@ -0,0 +1,5 @@ +{ + "vars": { + "props": {} + } +} diff --git a/packages/runtime-tags/src/__tests__/fixtures/dynamic-tag-content-default/__snapshots__/csr-sanitized.expected.md b/packages/runtime-tags/src/__tests__/fixtures/dynamic-tag-content-default/__snapshots__/csr-sanitized.expected.md new file mode 100644 index 0000000000..2dde79321e --- /dev/null +++ b/packages/runtime-tags/src/__tests__/fixtures/dynamic-tag-content-default/__snapshots__/csr-sanitized.expected.md @@ -0,0 +1,7 @@ +# Render +```html +
+
+ Hello +
+``` diff --git a/packages/runtime-tags/src/__tests__/fixtures/dynamic-tag-content-default/__snapshots__/csr.expected.md b/packages/runtime-tags/src/__tests__/fixtures/dynamic-tag-content-default/__snapshots__/csr.expected.md new file mode 100644 index 0000000000..1f1ba4caad --- /dev/null +++ b/packages/runtime-tags/src/__tests__/fixtures/dynamic-tag-content-default/__snapshots__/csr.expected.md @@ -0,0 +1,12 @@ +# Render +```html +
+
+ Hello +
+``` + +# Mutations +``` +INSERT div0, div1 +``` \ No newline at end of file diff --git a/packages/runtime-tags/src/__tests__/fixtures/dynamic-tag-content-default/__snapshots__/dom.expected/tags/child.js b/packages/runtime-tags/src/__tests__/fixtures/dynamic-tag-content-default/__snapshots__/dom.expected/tags/child.js new file mode 100644 index 0000000000..342521381e --- /dev/null +++ b/packages/runtime-tags/src/__tests__/fixtures/dynamic-tag-content-default/__snapshots__/dom.expected/tags/child.js @@ -0,0 +1,7 @@ +export const $template = "
"; +export const $walks = /* next(1), replace, out(1) */"D%l"; +export const $setup = () => {}; +import * as _ from "@marko/runtime-tags/debug/dom"; +const $dynamicTag = /* @__PURE__ */_._dynamic_tag("#text/0"); +export const $input = /* @__PURE__ */_._const("input", $dynamicTag); +export default /* @__PURE__ */_._template("__tests__/tags/child.marko", $template, $walks, $setup, $input); \ No newline at end of file diff --git a/packages/runtime-tags/src/__tests__/fixtures/dynamic-tag-content-default/__snapshots__/dom.expected/template.hydrate.js b/packages/runtime-tags/src/__tests__/fixtures/dynamic-tag-content-default/__snapshots__/dom.expected/template.hydrate.js new file mode 100644 index 0000000000..3eb9cd79d3 --- /dev/null +++ b/packages/runtime-tags/src/__tests__/fixtures/dynamic-tag-content-default/__snapshots__/dom.expected/template.hydrate.js @@ -0,0 +1 @@ +// size: 0 diff --git a/packages/runtime-tags/src/__tests__/fixtures/dynamic-tag-content-default/__snapshots__/dom.expected/template.js b/packages/runtime-tags/src/__tests__/fixtures/dynamic-tag-content-default/__snapshots__/dom.expected/template.js new file mode 100644 index 0000000000..933766c133 --- /dev/null +++ b/packages/runtime-tags/src/__tests__/fixtures/dynamic-tag-content-default/__snapshots__/dom.expected/template.js @@ -0,0 +1,14 @@ +export const $template = `${_child_template}${_child_template}`; +export const $walks = /* beginChild, _child_walks, endChild, beginChild, _child_walks, endChild */`/${_child_walks}&/${_child_walks}&`; +import { $setup as _child, $input as _child_input, $template as _child_template, $walks as _child_walks } from "./tags/child.marko"; +import * as _ from "@marko/runtime-tags/debug/dom"; +const $child_content = /* @__PURE__ */_._content("__tests__/template.marko_1_content", "Hello", /* over(1) */"b"); +export function $setup($scope) { + _child($scope["#childScope/0"]); + _child_input($scope["#childScope/0"], {}); + _child($scope["#childScope/1"]); + _child_input($scope["#childScope/1"], { + content: $child_content($scope) + }); +} +export default /* @__PURE__ */_._template("__tests__/template.marko", $template, $walks, $setup); \ No newline at end of file diff --git a/packages/runtime-tags/src/__tests__/fixtures/dynamic-tag-content-default/__snapshots__/html.expected/tags/child.js b/packages/runtime-tags/src/__tests__/fixtures/dynamic-tag-content-default/__snapshots__/html.expected/tags/child.js new file mode 100644 index 0000000000..0cc5407339 --- /dev/null +++ b/packages/runtime-tags/src/__tests__/fixtures/dynamic-tag-content-default/__snapshots__/html.expected/tags/child.js @@ -0,0 +1,9 @@ +import * as _ from "@marko/runtime-tags/debug/html"; +export default _._template("__tests__/tags/child.marko", input => { + const $serialize = _._get_serialize_reason(); + const $scope0_id = _._scope_id(); + _._html("
"); + _._dynamic_tag($scope0_id, "#text/0", input, {}, 0, 0, _._serialize_guard($serialize, /* input */0)); + _._html("
"); + _._serialize_guard($serialize, /* input */0) && _._scope($scope0_id, {}, "__tests__/tags/child.marko", 0); +}); \ No newline at end of file diff --git a/packages/runtime-tags/src/__tests__/fixtures/dynamic-tag-content-default/__snapshots__/html.expected/template.js b/packages/runtime-tags/src/__tests__/fixtures/dynamic-tag-content-default/__snapshots__/html.expected/template.js new file mode 100644 index 0000000000..4698cd08c2 --- /dev/null +++ b/packages/runtime-tags/src/__tests__/fixtures/dynamic-tag-content-default/__snapshots__/html.expected/template.js @@ -0,0 +1,12 @@ +import _child from "./tags/child.marko"; +import * as _ from "@marko/runtime-tags/debug/html"; +export default _._template("__tests__/template.marko", input => { + const $scope0_id = _._scope_id(); + _child({}); + _child({ + content: _._content("__tests__/template.marko_1_content", () => { + const $scope1_id = _._scope_id(); + _._html("Hello"); + }) + }); +}); \ No newline at end of file diff --git a/packages/runtime-tags/src/__tests__/fixtures/dynamic-tag-content-default/__snapshots__/resume-sanitized.expected.md b/packages/runtime-tags/src/__tests__/fixtures/dynamic-tag-content-default/__snapshots__/resume-sanitized.expected.md new file mode 100644 index 0000000000..2dde79321e --- /dev/null +++ b/packages/runtime-tags/src/__tests__/fixtures/dynamic-tag-content-default/__snapshots__/resume-sanitized.expected.md @@ -0,0 +1,7 @@ +# Render +```html +
+
+ Hello +
+``` diff --git a/packages/runtime-tags/src/__tests__/fixtures/dynamic-tag-content-default/__snapshots__/resume.expected.md b/packages/runtime-tags/src/__tests__/fixtures/dynamic-tag-content-default/__snapshots__/resume.expected.md new file mode 100644 index 0000000000..188645878f --- /dev/null +++ b/packages/runtime-tags/src/__tests__/fixtures/dynamic-tag-content-default/__snapshots__/resume.expected.md @@ -0,0 +1,12 @@ +# Render +```html + + + +
+
+ Hello +
+ + +``` diff --git a/packages/runtime-tags/src/__tests__/fixtures/dynamic-tag-content-default/__snapshots__/ssr-sanitized.expected.md b/packages/runtime-tags/src/__tests__/fixtures/dynamic-tag-content-default/__snapshots__/ssr-sanitized.expected.md new file mode 100644 index 0000000000..ad503ca5b6 --- /dev/null +++ b/packages/runtime-tags/src/__tests__/fixtures/dynamic-tag-content-default/__snapshots__/ssr-sanitized.expected.md @@ -0,0 +1,7 @@ +# Render End +```html +
+
+ Hello +
+``` diff --git a/packages/runtime-tags/src/__tests__/fixtures/dynamic-tag-content-default/__snapshots__/ssr.expected.md b/packages/runtime-tags/src/__tests__/fixtures/dynamic-tag-content-default/__snapshots__/ssr.expected.md new file mode 100644 index 0000000000..0b9a55e3ea --- /dev/null +++ b/packages/runtime-tags/src/__tests__/fixtures/dynamic-tag-content-default/__snapshots__/ssr.expected.md @@ -0,0 +1,27 @@ +# Write +```html +
Hello
+``` + +# Render End +```html + + + +
+
+ Hello +
+ + +``` + +# Mutations +``` +INSERT html +INSERT html/head +INSERT html/body +INSERT html/body/div0 +INSERT html/body/div1 +INSERT html/body/div1/#text +``` \ No newline at end of file diff --git a/packages/runtime-tags/src/__tests__/fixtures/dynamic-tag-content-default/tags/child.marko b/packages/runtime-tags/src/__tests__/fixtures/dynamic-tag-content-default/tags/child.marko new file mode 100644 index 0000000000..f7270cf3d5 --- /dev/null +++ b/packages/runtime-tags/src/__tests__/fixtures/dynamic-tag-content-default/tags/child.marko @@ -0,0 +1,2 @@ +div + ${input} \ No newline at end of file diff --git a/packages/runtime-tags/src/__tests__/fixtures/dynamic-tag-content-default/template.marko b/packages/runtime-tags/src/__tests__/fixtures/dynamic-tag-content-default/template.marko new file mode 100644 index 0000000000..5e5f13f3a8 --- /dev/null +++ b/packages/runtime-tags/src/__tests__/fixtures/dynamic-tag-content-default/template.marko @@ -0,0 +1,2 @@ + +Hello \ No newline at end of file diff --git a/packages/runtime-tags/src/common/helpers.ts b/packages/runtime-tags/src/common/helpers.ts index 98d4160b6d..225ad82f01 100644 --- a/packages/runtime-tags/src/common/helpers.ts +++ b/packages/runtime-tags/src/common/helpers.ts @@ -67,5 +67,11 @@ export function alphaEncode(num: number): string { export function normalizeDynamicRenderer( value: any, ): Renderer | string | undefined { - return value ? value.content || value.default || value : undefined; + if (value) { + if (typeof value === "string") return value; + const normalized = value.content || value.default || value; + if ("___id" in normalized) { + return normalized; + } + } }