From efef711c93e065bc7db84cd5a70bb5fc3f8cc5c4 Mon Sep 17 00:00:00 2001 From: Michael Rawlings Date: Wed, 29 Nov 2023 18:03:43 -0500 Subject: [PATCH] feat: tag params ssr tags-to-class (resume still not working) --- .../src/runtime/helpers/tags-compat-html.js | 6 +- .../__snapshots__/html.expected/template.js | 3 + .../html.expected/components/class-layout.js | 3 + .../__snapshots__/html.expected/template.js | 4 +- .../__snapshots__/ssr.expected.md | 77 ++++++++++++++++++- .../interop-tag-params-tags-to-class/test.ts | 1 - .../translator/src/visitors/tag/custom-tag.ts | 11 +-- .../src/visitors/tag/dynamic-tag.ts | 11 +-- 8 files changed, 87 insertions(+), 29 deletions(-) diff --git a/packages/marko/src/runtime/helpers/tags-compat-html.js b/packages/marko/src/runtime/helpers/tags-compat-html.js index 829a45ee6..994c38651 100644 --- a/packages/marko/src/runtime/helpers/tags-compat-html.js +++ b/packages/marko/src/runtime/helpers/tags-compat-html.js @@ -86,7 +86,11 @@ patchDynamicTag( if (renderer5) { renderer5(input, out); } else { - renderBody5(out, ...input.value); + if (Array.isArray(input?.value)) { + renderBody5(out, ...input.value); + } else { + renderBody5(out); + } } const componentsContext = ___getComponentsContext(out); diff --git a/packages/translator-interop/src/__tests__/fixtures/interop-tag-params-class-to-tags/__snapshots__/html.expected/template.js b/packages/translator-interop/src/__tests__/fixtures/interop-tag-params-class-to-tags/__snapshots__/html.expected/template.js index fcf667831..e46cd7c5f 100644 --- a/packages/translator-interop/src/__tests__/fixtures/interop-tag-params-class-to-tags/__snapshots__/html.expected/template.js +++ b/packages/translator-interop/src/__tests__/fixtures/interop-tag-params-class-to-tags/__snapshots__/html.expected/template.js @@ -6,6 +6,8 @@ import { x as _marko_escapeXml } from "marko/src/runtime/html/helpers/escape-xml import _marko_tags_compat from "marko/src/runtime/helpers/tags-compat-html.js"; import _tagsLayout from "./components/tags-layout.marko"; import _marko_dynamic_tag from "marko/src/runtime/helpers/dynamic-tag.js"; +import _initComponents from "marko/src/core-tags/components/init-components-tag.js"; +import _marko_tag from "marko/src/runtime/helpers/render-tag.js"; import _marko_renderer from "marko/src/runtime/components/renderer.js"; const _marko_component = { onCreate() { @@ -30,6 +32,7 @@ _marko_template._ = _marko_renderer(function (input, out, _componentDef, _compon out.w(_marko_escapeXml(baseCount * state.multiplier)); out.w(""); }, null, null, _componentDef, "0"); + _marko_tag(_initComponents, {}, out, _componentDef, "3"); }, { t: _marko_componentType, d: true diff --git a/packages/translator-interop/src/__tests__/fixtures/interop-tag-params-tags-to-class/__snapshots__/html.expected/components/class-layout.js b/packages/translator-interop/src/__tests__/fixtures/interop-tag-params-tags-to-class/__snapshots__/html.expected/components/class-layout.js index 3d35bc2b4..b0d668cda 100644 --- a/packages/translator-interop/src/__tests__/fixtures/interop-tag-params-tags-to-class/__snapshots__/html.expected/components/class-layout.js +++ b/packages/translator-interop/src/__tests__/fixtures/interop-tag-params-tags-to-class/__snapshots__/html.expected/components/class-layout.js @@ -4,6 +4,8 @@ const _marko_componentType = "packages/translator-interop/src/__tests__/fixtures export default _marko_template; import { x as _marko_escapeXml } from "marko/src/runtime/html/helpers/escape-xml.js"; import _marko_dynamic_tag from "marko/src/runtime/helpers/dynamic-tag.js"; +import _initComponents from "marko/src/core-tags/components/init-components-tag.js"; +import _marko_tag from "marko/src/runtime/helpers/render-tag.js"; import _marko_renderer from "marko/src/runtime/components/renderer.js"; const _marko_component = { onCreate() { @@ -22,6 +24,7 @@ _marko_template._ = _marko_renderer(function (input, out, _componentDef, _compon out.w("
"); _marko_dynamic_tag(out, input.renderBody, null, null, [state.count, "hello"], null, _componentDef, "2"); out.w("
"); + _marko_tag(_initComponents, {}, out, _componentDef, "3"); }, { t: _marko_componentType, d: true diff --git a/packages/translator-interop/src/__tests__/fixtures/interop-tag-params-tags-to-class/__snapshots__/html.expected/template.js b/packages/translator-interop/src/__tests__/fixtures/interop-tag-params-tags-to-class/__snapshots__/html.expected/template.js index c9d6b3855..f1b459e40 100644 --- a/packages/translator-interop/src/__tests__/fixtures/interop-tag-params-tags-to-class/__snapshots__/html.expected/template.js +++ b/packages/translator-interop/src/__tests__/fixtures/interop-tag-params-tags-to-class/__snapshots__/html.expected/template.js @@ -5,9 +5,7 @@ const _renderer = /* @__PURE__ */_createRenderer((input, _tagVar) => { const _scope0_id = _nextScopeId(); const multiplier = 1; const _dynamicScope = _dynamicTag(_classLayout, {}, /* @__PURE__ */_createRenderer(({ - value: [{ - value: [baseCount, message] - }] + value: [baseCount, message] }) => { const _scope1_id = _nextScopeId(); _write(`

${_escapeXML(message)}${_markResumeNode(_scope1_id, "#text/0")}

${_markResumeNode(_scope1_id, "#button/1")}`); diff --git a/packages/translator-interop/src/__tests__/fixtures/interop-tag-params-tags-to-class/__snapshots__/ssr.expected.md b/packages/translator-interop/src/__tests__/fixtures/interop-tag-params-tags-to-class/__snapshots__/ssr.expected.md index 8cdd0b863..f39463a27 100644 --- a/packages/translator-interop/src/__tests__/fixtures/interop-tag-params-tags-to-class/__snapshots__/ssr.expected.md +++ b/packages/translator-interop/src/__tests__/fixtures/interop-tag-params-tags-to-class/__snapshots__/ssr.expected.md @@ -1,9 +1,9 @@ # Write - + -# Emit error - TypeError: Cannot read properties of null (reading 'isSync') +# Write +

hello

# Render "End" @@ -13,7 +13,47 @@ + + +
+ +

+ hello + +

+ + + + +
+ + + + @@ -27,4 +67,33 @@ inserted #document/html0/body1 inserted #document/html0/body1/#comment0 inserted #document/html0/body1/script1 inserted #document/html0/body1/script1/#text0 +inserted #document/html0/body1/#comment2 +inserted #document/html0/body1/button3 +inserted #document/html0/body1/button3/#text0 +inserted #document/html0/body1/div4 +inserted #document/html0/body1/div4/#comment0 +inserted #document/html0/body1/div4/h11 +inserted #document/html0/body1/div4/h11/#text0 +inserted #document/html0/body1/div4/h11/#comment1 +inserted #document/html0/body1/div4/button2 +inserted #document/html0/body1/div4/button2/#text0 +inserted #document/html0/body1/div4/button2/#comment1 +inserted #document/html0/body1/div4/button2/#text2 +inserted #document/html0/body1/div4/button2/#comment3 +inserted #document/html0/body1/div4/button2/#text4 +inserted #document/html0/body1/div4/button2/#comment5 +inserted #document/html0/body1/div4/button2/#text6 +inserted #document/html0/body1/div4/button2/#comment7 +inserted #document/html0/body1/div4/button2/#text8 +inserted #document/html0/body1/div4/button2/#comment9 +inserted #document/html0/body1/div4/#comment3 +inserted #document/html0/body1/div4/script4 +inserted #document/html0/body1/div4/script4/#text0 +inserted #document/html0/body1/div4/#comment5 +inserted #document/html0/body1/#comment5 +inserted #document/html0/body1/script6 +inserted #document/html0/body1/script6/#text0 +inserted #document/html0/body1/#comment7 +inserted #document/html0/body1/script8 +inserted #document/html0/body1/script8/#text0 ``` \ No newline at end of file diff --git a/packages/translator-interop/src/__tests__/fixtures/interop-tag-params-tags-to-class/test.ts b/packages/translator-interop/src/__tests__/fixtures/interop-tag-params-tags-to-class/test.ts index 7e74a16c9..07fbe4559 100644 --- a/packages/translator-interop/src/__tests__/fixtures/interop-tag-params-tags-to-class/test.ts +++ b/packages/translator-interop/src/__tests__/fixtures/interop-tag-params-tags-to-class/test.ts @@ -15,5 +15,4 @@ function clickTags(container: Element) { (container.querySelector("#tags") as HTMLButtonElement).click(); } -export const skip_ssr = true; export const skip_resume = true; diff --git a/packages/translator/src/visitors/tag/custom-tag.ts b/packages/translator/src/visitors/tag/custom-tag.ts index 5ea21cb1e..318616ead 100644 --- a/packages/translator/src/visitors/tag/custom-tag.ts +++ b/packages/translator/src/visitors/tag/custom-tag.ts @@ -144,16 +144,7 @@ function translateHTML(tag: t.NodePath) { callRuntime( "createRenderer", t.arrowFunctionExpression( - renderBodyProp.params.length - ? [ - t.objectPattern([ - t.objectProperty( - t.identifier("value"), - t.arrayPattern(renderBodyProp.params) - ), - ]), - ] - : [], + renderBodyProp.params, renderBodyProp.body ) ) diff --git a/packages/translator/src/visitors/tag/dynamic-tag.ts b/packages/translator/src/visitors/tag/dynamic-tag.ts index f84c17790..f5f57d796 100644 --- a/packages/translator/src/visitors/tag/dynamic-tag.ts +++ b/packages/translator/src/visitors/tag/dynamic-tag.ts @@ -145,16 +145,7 @@ export default { callRuntime( "createRenderer", t.arrowFunctionExpression( - renderBodyProp.params.length - ? [ - t.objectPattern([ - t.objectProperty( - t.identifier("value"), - t.arrayPattern(renderBodyProp.params) - ), - ]), - ] - : [], + renderBodyProp.params, toFirstExpressionOrBlock(renderBodyProp.body) ) )