diff --git a/.changeset/gentle-eyes-vanish.md b/.changeset/gentle-eyes-vanish.md
new file mode 100644
index 000000000..4267d75da
--- /dev/null
+++ b/.changeset/gentle-eyes-vanish.md
@@ -0,0 +1,6 @@
+---
+"@marko/translator-interop-class-tags": patch
+"@marko/translator-tags": patch
+---
+
+State based registration & serialization
diff --git a/packages/translator-interop/src/__tests__/fixtures/interop-nested-tags-to-class/__snapshots__/html.expected/template.js b/packages/translator-interop/src/__tests__/fixtures/interop-nested-tags-to-class/__snapshots__/html.expected/template.js
index d6e77f764..dd1004f5a 100644
--- a/packages/translator-interop/src/__tests__/fixtures/interop-nested-tags-to-class/__snapshots__/html.expected/template.js
+++ b/packages/translator-interop/src/__tests__/fixtures/interop-nested-tags-to-class/__snapshots__/html.expected/template.js
@@ -7,8 +7,8 @@ const _renderer = /* @__PURE__ */_createRenderer((input, _tagVar) => {
const _dynamicScope = _dynamicTagInput(_classLayout, {}, _register( /* @__PURE__ */_createRenderer(() => {
const _scope1_id = _nextScopeId();
_write(`${_markResumeNode(_scope1_id, "#button/0")}`);
- _writeEffect(_scope1_id, "packages/translator-interop/src/__tests__/fixtures/interop-nested-tags-to-class/template.marko_1_count");
_writeEffect(_scope1_id, "packages/translator-interop/src/__tests__/fixtures/interop-nested-tags-to-class/template.marko_1_count/subscriber");
+ _writeEffect(_scope1_id, "packages/translator-interop/src/__tests__/fixtures/interop-nested-tags-to-class/template.marko_1_count");
_writeScope(_scope1_id, {
"_": _serializedScope(_scope0_id)
});
diff --git a/packages/translator-interop/src/__tests__/fixtures/interop-nested-tags-to-class/__snapshots__/resume.expected.md b/packages/translator-interop/src/__tests__/fixtures/interop-nested-tags-to-class/__snapshots__/resume.expected.md
index c2c832d34..e5dda3e10 100644
--- a/packages/translator-interop/src/__tests__/fixtures/interop-nested-tags-to-class/__snapshots__/resume.expected.md
+++ b/packages/translator-interop/src/__tests__/fixtures/interop-nested-tags-to-class/__snapshots__/resume.expected.md
@@ -21,7 +21,7 @@
+
# Render "End"
@@ -31,7 +31,7 @@
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 8b37ad2cf..919d5b1f1 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
@@ -7,8 +7,8 @@ const _renderer = /* @__PURE__ */_createRenderer((input, _tagVar) => {
const _dynamicScope = _dynamicTagInput(_classLayout, {}, _register( /* @__PURE__ */_createRenderer((baseCount, message) => {
const _scope1_id = _nextScopeId();
_write(`${_escapeXML(message)}${_markResumeNode(_scope1_id, "#text/0")}
${_markResumeNode(_scope1_id, "#button/1")}`);
- _writeEffect(_scope1_id, "packages/translator-interop/src/__tests__/fixtures/interop-tag-params-tags-to-class/template.marko_1_multiplier");
_writeEffect(_scope1_id, "packages/translator-interop/src/__tests__/fixtures/interop-tag-params-tags-to-class/template.marko_1_multiplier/subscriber");
+ _writeEffect(_scope1_id, "packages/translator-interop/src/__tests__/fixtures/interop-tag-params-tags-to-class/template.marko_1_multiplier");
_writeScope(_scope1_id, {
"baseCount": baseCount,
"_": _serializedScope(_scope0_id)
diff --git a/packages/translator-interop/src/__tests__/fixtures/interop-tag-params-tags-to-class/__snapshots__/resume.expected.md b/packages/translator-interop/src/__tests__/fixtures/interop-tag-params-tags-to-class/__snapshots__/resume.expected.md
index 8d466f5e3..91d39ada5 100644
--- a/packages/translator-interop/src/__tests__/fixtures/interop-tag-params-tags-to-class/__snapshots__/resume.expected.md
+++ b/packages/translator-interop/src/__tests__/fixtures/interop-tag-params-tags-to-class/__snapshots__/resume.expected.md
@@ -33,7 +33,7 @@
+ hello
# Render "End"
@@ -43,7 +43,7 @@
diff --git a/packages/translator-tags/src/__tests__/fixtures/at-tag-inside-if-tag/__snapshots__/html.expected/template.js b/packages/translator-tags/src/__tests__/fixtures/at-tag-inside-if-tag/__snapshots__/html.expected/template.js
index 53a9c29ab..44d1e2d4c 100644
--- a/packages/translator-tags/src/__tests__/fixtures/at-tag-inside-if-tag/__snapshots__/html.expected/template.js
+++ b/packages/translator-tags/src/__tests__/fixtures/at-tag-inside-if-tag/__snapshots__/html.expected/template.js
@@ -1,4 +1,4 @@
-import { write as _write, createRenderer as _createRenderer, writeScope as _writeScope, nextScopeId as _nextScopeId, register as _register, markResumeControlSingleNodeEnd as _markResumeControlSingleNodeEnd, serializedScope as _serializedScope, peekSerializedScope as _peekSerializedScope, createTemplate as _createTemplate } from "@marko/runtime-tags/debug/html";
+import { write as _write, createRenderer as _createRenderer, writeScope as _writeScope, nextScopeId as _nextScopeId, register as _register, markResumeControlSingleNodeEnd as _markResumeControlSingleNodeEnd, serializedScope as _serializedScope, writeEffect as _writeEffect, peekSerializedScope as _peekSerializedScope, createTemplate as _createTemplate } from "@marko/runtime-tags/debug/html";
import _customTag from "./components/custom-tag/index.marko";
const _renderer = /* @__PURE__ */_createRenderer((input, _tagVar) => {
const _scope0_id = _nextScopeId();
@@ -21,9 +21,10 @@ const _renderer = /* @__PURE__ */_createRenderer((input, _tagVar) => {
_ifScopeId = _scope2_id;
}
_write(`${_markResumeControlSingleNodeEnd(_scope1_id, "#text/0", _ifScopeId)}`);
+ _writeEffect(_scope1_id, "packages/translator-tags/src/__tests__/fixtures/at-tag-inside-if-tag/template.marko_1_x/subscriber");
_writeScope(_scope1_id, {
- "#text/0!": _scope2_,
"#text/0(": _ifRenderer,
+ "#text/0!": _scope2_,
"_": _serializedScope(_scope0_id)
});
const _childScope = _peekSerializedScope();
@@ -31,6 +32,7 @@ const _renderer = /* @__PURE__ */_createRenderer((input, _tagVar) => {
thing: _thing
});
_writeScope(_scope0_id, {
+ "x": x,
"#childScope/0": _childScope
});
});
diff --git a/packages/translator-tags/src/__tests__/fixtures/at-tags-dynamic-with-params/__snapshots__/html.expected/template.js b/packages/translator-tags/src/__tests__/fixtures/at-tags-dynamic-with-params/__snapshots__/html.expected/template.js
index eb83ad7a6..95ea13aae 100644
--- a/packages/translator-tags/src/__tests__/fixtures/at-tags-dynamic-with-params/__snapshots__/html.expected/template.js
+++ b/packages/translator-tags/src/__tests__/fixtures/at-tags-dynamic-with-params/__snapshots__/html.expected/template.js
@@ -1,4 +1,4 @@
-import { escapeXML as _escapeXML, write as _write, createRenderer as _createRenderer, writeScope as _writeScope, nextScopeId as _nextScopeId, register as _register, markResumeControlSingleNodeEnd as _markResumeControlSingleNodeEnd, serializedScope as _serializedScope, peekSerializedScope as _peekSerializedScope, createTemplate as _createTemplate } from "@marko/runtime-tags/debug/html";
+import { escapeXML as _escapeXML, write as _write, createRenderer as _createRenderer, writeScope as _writeScope, nextScopeId as _nextScopeId, register as _register, markResumeControlSingleNodeEnd as _markResumeControlSingleNodeEnd, serializedScope as _serializedScope, writeEffect as _writeEffect, peekSerializedScope as _peekSerializedScope, createTemplate as _createTemplate } from "@marko/runtime-tags/debug/html";
import _hello from "./components/hello/index.marko";
const _renderer = /* @__PURE__ */_createRenderer((input, _tagVar) => {
const _scope0_id = _nextScopeId();
@@ -20,9 +20,10 @@ const _renderer = /* @__PURE__ */_createRenderer((input, _tagVar) => {
_ifScopeId = _scope2_id;
}
_write(`${_markResumeControlSingleNodeEnd(_scope1_id, "#text/0", _ifScopeId)}`);
+ _writeEffect(_scope1_id, "packages/translator-tags/src/__tests__/fixtures/at-tags-dynamic-with-params/template.marko_1_x/subscriber");
_writeScope(_scope1_id, {
- "#text/0!": _scope2_,
"#text/0(": _ifRenderer,
+ "#text/0!": _scope2_,
"_": _serializedScope(_scope0_id)
});
const _childScope = _peekSerializedScope();
@@ -30,6 +31,7 @@ const _renderer = /* @__PURE__ */_createRenderer((input, _tagVar) => {
item: _item
});
_writeScope(_scope0_id, {
+ "x": x,
"#childScope/0": _childScope
});
});
diff --git a/packages/translator-tags/src/__tests__/fixtures/at-tags-dynamic/__snapshots__/html.expected/template.js b/packages/translator-tags/src/__tests__/fixtures/at-tags-dynamic/__snapshots__/html.expected/template.js
index 20aeaae1b..6f8bae2a3 100644
--- a/packages/translator-tags/src/__tests__/fixtures/at-tags-dynamic/__snapshots__/html.expected/template.js
+++ b/packages/translator-tags/src/__tests__/fixtures/at-tags-dynamic/__snapshots__/html.expected/template.js
@@ -1,4 +1,4 @@
-import { write as _write, createRenderer as _createRenderer, serializedScope as _serializedScope, writeScope as _writeScope, nextScopeId as _nextScopeId, maybeFlush as _maybeFlush, escapeXML as _escapeXML, peekSerializedScope as _peekSerializedScope, createTemplate as _createTemplate } from "@marko/runtime-tags/debug/html";
+import { write as _write, createRenderer as _createRenderer, nextScopeId as _nextScopeId, maybeFlush as _maybeFlush, escapeXML as _escapeXML, writeScope as _writeScope, peekSerializedScope as _peekSerializedScope, createTemplate as _createTemplate } from "@marko/runtime-tags/debug/html";
import _hello from "./components/hello/index.marko";
const _renderer = /* @__PURE__ */_createRenderer((input, _tagVar) => {
const _scope0_id = _nextScopeId();
@@ -17,9 +17,6 @@ const _renderer = /* @__PURE__ */_createRenderer((input, _tagVar) => {
_write("foo");
})
});
- _writeScope(_scope4_id, {
- "_": _serializedScope(_scope3_id)
- });
} else {
const _scope5_id = _nextScopeId();
_item.push({
@@ -30,9 +27,6 @@ const _renderer = /* @__PURE__ */_createRenderer((input, _tagVar) => {
_write("bar");
})
});
- _writeScope(_scope5_id, {
- "_": _serializedScope(_scope3_id)
- });
}
_maybeFlush();
}
@@ -49,12 +43,18 @@ const _renderer = /* @__PURE__ */_createRenderer((input, _tagVar) => {
_write(`${_escapeXML(row)}`);
})
});
+ _writeScope(_scope10_id, {
+ "row": row
+ });
_maybeFlush();
}
_col.push({
x: i,
row: _row
});
+ _writeScope(_scope8_id, {
+ "col": col
+ });
_maybeFlush();
}
_col.push({
diff --git a/packages/translator-tags/src/__tests__/fixtures/basic-component-renderBody/__snapshots__/dom.expected/template.hydrate.js b/packages/translator-tags/src/__tests__/fixtures/basic-component-renderBody/__snapshots__/dom.expected/template.hydrate.js
new file mode 100644
index 000000000..5ef5a064f
--- /dev/null
+++ b/packages/translator-tags/src/__tests__/fixtures/basic-component-renderBody/__snapshots__/dom.expected/template.hydrate.js
@@ -0,0 +1,4 @@
+import { init } from "@marko/runtime-tags/debug/dom";
+import "./template.marko";
+import "./components/my-button.marko";
+init();
\ No newline at end of file
diff --git a/packages/translator-tags/src/__tests__/fixtures/basic-component-renderBody/__snapshots__/html.expected/template.js b/packages/translator-tags/src/__tests__/fixtures/basic-component-renderBody/__snapshots__/html.expected/template.js
index d1b9c654c..5925b1168 100644
--- a/packages/translator-tags/src/__tests__/fixtures/basic-component-renderBody/__snapshots__/html.expected/template.js
+++ b/packages/translator-tags/src/__tests__/fixtures/basic-component-renderBody/__snapshots__/html.expected/template.js
@@ -1,4 +1,4 @@
-import { escapeXML as _escapeXML, markResumeNode as _markResumeNode, write as _write, serializedScope as _serializedScope, writeScope as _writeScope, nextScopeId as _nextScopeId, register as _register, createRenderer as _createRenderer, peekSerializedScope as _peekSerializedScope, createTemplate as _createTemplate } from "@marko/runtime-tags/debug/html";
+import { escapeXML as _escapeXML, markResumeNode as _markResumeNode, write as _write, serializedScope as _serializedScope, writeEffect as _writeEffect, writeScope as _writeScope, nextScopeId as _nextScopeId, register as _register, createRenderer as _createRenderer, peekSerializedScope as _peekSerializedScope, createTemplate as _createTemplate } from "@marko/runtime-tags/debug/html";
import _myButton from "./components/my-button.marko";
const _renderer = /* @__PURE__ */_createRenderer((input, _tagVar) => {
const _scope0_id = _nextScopeId();
@@ -11,6 +11,7 @@ const _renderer = /* @__PURE__ */_createRenderer((input, _tagVar) => {
renderBody: /* @__PURE__ */_createRenderer(() => {
const _scope1_id = _nextScopeId();
_write(`${_escapeXML(clickCount)}${_markResumeNode(_scope1_id, "#text/0")}`);
+ _writeEffect(_scope1_id, "packages/translator-tags/src/__tests__/fixtures/basic-component-renderBody/template.marko_1_clickCount/subscriber");
_writeScope(_scope1_id, {
"_": _serializedScope(_scope0_id)
});
diff --git a/packages/translator-tags/src/__tests__/fixtures/basic-component-renderBody/__snapshots__/resume-sanitized.expected.md b/packages/translator-tags/src/__tests__/fixtures/basic-component-renderBody/__snapshots__/resume-sanitized.expected.md
new file mode 100644
index 000000000..cf47116d6
--- /dev/null
+++ b/packages/translator-tags/src/__tests__/fixtures/basic-component-renderBody/__snapshots__/resume-sanitized.expected.md
@@ -0,0 +1,36 @@
+# Render {}
+```html
+
+```
+
+
+# Render
+container.querySelector("button").click()
+
+```html
+
+```
+
+
+# Render
+container.querySelector("button").click()
+
+```html
+
+```
+
+
+# Render
+container.querySelector("button").click()
+
+```html
+
+```
\ No newline at end of file
diff --git a/packages/translator-tags/src/__tests__/fixtures/basic-component-renderBody/__snapshots__/resume.expected.md b/packages/translator-tags/src/__tests__/fixtures/basic-component-renderBody/__snapshots__/resume.expected.md
new file mode 100644
index 000000000..3176ba0fe
--- /dev/null
+++ b/packages/translator-tags/src/__tests__/fixtures/basic-component-renderBody/__snapshots__/resume.expected.md
@@ -0,0 +1,102 @@
+# Render {}
+```html
+
+
+
+
+
+
+
+```
+
+# Mutations
+```
+
+```
+
+
+# Render
+container.querySelector("button").click()
+
+```html
+
+
+
+
+
+
+
+```
+
+# Mutations
+```
+inserted #document/html0/body1/button0/#text0
+removed #comment after #document/html0/body1/button0/#text0
+removed #text after #document/html0/body1/button0/#text0
+removed #comment after #document/html0/body1/button0/#text0
+#document/html0/body1/button0/#text0: " " => "1"
+```
+
+
+# Render
+container.querySelector("button").click()
+
+```html
+
+
+
+
+
+
+
+```
+
+# Mutations
+```
+#document/html0/body1/button0/#text0: "1" => "2"
+```
+
+
+# Render
+container.querySelector("button").click()
+
+```html
+
+
+
+
+
+
+
+```
+
+# Mutations
+```
+#document/html0/body1/button0/#text0: "2" => "3"
+```
\ No newline at end of file
diff --git a/packages/translator-tags/src/__tests__/fixtures/basic-component-renderBody/__snapshots__/ssr.expected.md b/packages/translator-tags/src/__tests__/fixtures/basic-component-renderBody/__snapshots__/ssr.expected.md
index 6647399b1..9bb1f1b79 100644
--- a/packages/translator-tags/src/__tests__/fixtures/basic-component-renderBody/__snapshots__/ssr.expected.md
+++ b/packages/translator-tags/src/__tests__/fixtures/basic-component-renderBody/__snapshots__/ssr.expected.md
@@ -1,5 +1,5 @@
# Write
-
+
# Render "End"
@@ -15,7 +15,7 @@