diff --git a/.changeset/old-badgers-pretend.md b/.changeset/old-badgers-pretend.md
new file mode 100644
index 0000000000..2ebd24f444
--- /dev/null
+++ b/.changeset/old-badgers-pretend.md
@@ -0,0 +1,5 @@
+---
+"@marko/translator-tags": patch
+---
+
+XML Declarations are now a compile error (like cdata).
diff --git a/packages/translator-tags/src/__tests__/fixtures/declaration/__snapshots__/dom.expected/template.error.txt b/packages/translator-tags/src/__tests__/fixtures/declaration/__snapshots__/dom.expected/template.error.txt
new file mode 100644
index 0000000000..3b0c3fcab8
--- /dev/null
+++ b/packages/translator-tags/src/__tests__/fixtures/declaration/__snapshots__/dom.expected/template.error.txt
@@ -0,0 +1,7 @@
+
+ at packages/translator-tags/src/__tests__/fixtures/declaration/template.marko:1:1
+ > 1 |
+ | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ XML declarations sections are not supported in Marko.
+ 2 |
+ 3 | Hello World
+ 4 |
\ No newline at end of file
diff --git a/packages/translator-tags/src/__tests__/fixtures/declaration/__snapshots__/dom.expected/template.js b/packages/translator-tags/src/__tests__/fixtures/declaration/__snapshots__/dom.expected/template.js
deleted file mode 100644
index a12a2a965a..0000000000
--- a/packages/translator-tags/src/__tests__/fixtures/declaration/__snapshots__/dom.expected/template.js
+++ /dev/null
@@ -1,5 +0,0 @@
-export const _template_ = "Hello World";
-export const _walks_ = /* over(1) */"Db";
-export const _setup_ = () => {};
-import { createRenderer as _createRenderer, createTemplate as _createTemplate } from "@marko/runtime-tags/debug/dom";
-export default /* @__PURE__ */_createTemplate(/* @__PURE__ */_createRenderer(_template_, _walks_, _setup_), "packages/translator-tags/src/__tests__/fixtures/declaration/template.marko");
\ No newline at end of file
diff --git a/packages/translator-tags/src/__tests__/fixtures/declaration/__snapshots__/html.expected/template.error.txt b/packages/translator-tags/src/__tests__/fixtures/declaration/__snapshots__/html.expected/template.error.txt
new file mode 100644
index 0000000000..3b0c3fcab8
--- /dev/null
+++ b/packages/translator-tags/src/__tests__/fixtures/declaration/__snapshots__/html.expected/template.error.txt
@@ -0,0 +1,7 @@
+
+ at packages/translator-tags/src/__tests__/fixtures/declaration/template.marko:1:1
+ > 1 |
+ | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ XML declarations sections are not supported in Marko.
+ 2 |
+ 3 | Hello World
+ 4 |
\ No newline at end of file
diff --git a/packages/translator-tags/src/__tests__/fixtures/declaration/__snapshots__/html.expected/template.js b/packages/translator-tags/src/__tests__/fixtures/declaration/__snapshots__/html.expected/template.js
deleted file mode 100644
index e40dca9d94..0000000000
--- a/packages/translator-tags/src/__tests__/fixtures/declaration/__snapshots__/html.expected/template.js
+++ /dev/null
@@ -1,6 +0,0 @@
-import { write as _write, nextScopeId as _nextScopeId, createRenderer as _createRenderer, createTemplate as _createTemplate } from "@marko/runtime-tags/debug/html";
-const _renderer = /* @__PURE__ */_createRenderer((input, _tagVar) => {
- const _scope0_id = _nextScopeId();
- _write("Hello World");
-});
-export default /* @__PURE__ */_createTemplate(_renderer, "packages/translator-tags/src/__tests__/fixtures/declaration/template.marko");
\ No newline at end of file
diff --git a/packages/translator-tags/src/__tests__/fixtures/declaration/test.ts b/packages/translator-tags/src/__tests__/fixtures/declaration/test.ts
index b81d90e10b..e4595ef7d0 100644
--- a/packages/translator-tags/src/__tests__/fixtures/declaration/test.ts
+++ b/packages/translator-tags/src/__tests__/fixtures/declaration/test.ts
@@ -1,2 +1 @@
-export const skip_csr = true;
-export const skip_ssr = true;
+export const error_compiler = true;
diff --git a/packages/translator-tags/src/index.ts b/packages/translator-tags/src/index.ts
index 862d74988d..7092ff6850 100644
--- a/packages/translator-tags/src/index.ts
+++ b/packages/translator-tags/src/index.ts
@@ -1,6 +1,7 @@
-import type { Config, types as t } from "@marko/compiler";
+import type { Config } from "@marko/compiler";
import coreTagLib from "./core";
+import { extractVisitors } from "./util/visitors";
import AssignmentExpression from "./visitors/assignment-expression";
import MarkoCDATA from "./visitors/cdata";
import MarkoComment from "./visitors/comment";
@@ -16,7 +17,7 @@ import MarkoTag from "./visitors/tag";
import MarkoText from "./visitors/text";
import UpdateExpression from "./visitors/update-expression";
-const visitors = {
+const visitors = extractVisitors({
Program,
Function,
AssignmentExpression,
@@ -31,29 +32,16 @@ const visitors = {
MarkoPlaceholder,
MarkoScriptlet,
MarkoComment,
-};
-
-const getVisitorOfType = (
- typename: "migrate" | "transform" | "analyze" | "translate",
-): t.Visitor =>
- Object.entries(visitors).reduce((visitor, [name, value]) => {
- if (typename in value) {
- visitor[name as any] = (value as any)[typename];
- }
- return visitor;
- }, {} as t.Visitor);
+});
export { default as internalEntryBuilder } from "./util/entry-builder";
-
-export const transform = getVisitorOfType("transform");
-export const analyze = getVisitorOfType("analyze");
-export const translate = getVisitorOfType("translate");
+export const { transform, analyze, translate } = visitors;
export const taglibs = [
[
__dirname,
{
...coreTagLib,
- migrate: getVisitorOfType("migrate"),
+ migrate: visitors.migrate,
},
],
];
diff --git a/packages/translator-tags/src/util/visitors.ts b/packages/translator-tags/src/util/visitors.ts
new file mode 100644
index 0000000000..11a175e230
--- /dev/null
+++ b/packages/translator-tags/src/util/visitors.ts
@@ -0,0 +1,27 @@
+import type { types as t } from "@marko/compiler";
+
+export type VisitorType = "migrate" | "transform" | "analyze" | "translate";
+export type TemplateVisitor = Partial<
+ Record>
+>;
+
+export function extractVisitors<
+ Visitors extends Partial>>,
+>(visitors: Visitors) {
+ const result: Record = {
+ migrate: {},
+ transform: {},
+ analyze: {},
+ translate: {},
+ };
+
+ for (const _name in visitors) {
+ const name = _name as any;
+ const value = visitors[name]!;
+ if (value.migrate) result.migrate[name] = value.migrate;
+ if (value.transform) result.transform[name] = value.transform;
+ if (value.analyze) result.analyze[name] = value.analyze;
+ if (value.translate) result.translate[name] = value.translate;
+ }
+ return result;
+}
diff --git a/packages/translator-tags/src/visitors/assignment-expression.ts b/packages/translator-tags/src/visitors/assignment-expression.ts
index ad2859bae6..24cab787e2 100644
--- a/packages/translator-tags/src/visitors/assignment-expression.ts
+++ b/packages/translator-tags/src/visitors/assignment-expression.ts
@@ -2,17 +2,18 @@ import { types as t } from "@marko/compiler";
import { isOutputDOM } from "../util/marko-config";
import { getSection } from "../util/sections";
+import type { TemplateVisitor } from "../util/visitors";
import { currentProgramPath } from "./program";
export default {
translate: {
- exit(assignment: t.NodePath) {
+ exit(assignment) {
if (isOutputDOM()) {
handleDestructure(assignment, assignment.node.left);
}
},
},
-};
+} satisfies TemplateVisitor;
function handleDestructure(
assignment: t.NodePath,
diff --git a/packages/translator-tags/src/visitors/cdata.ts b/packages/translator-tags/src/visitors/cdata.ts
index 443532c8b1..a3ad224d65 100644
--- a/packages/translator-tags/src/visitors/cdata.ts
+++ b/packages/translator-tags/src/visitors/cdata.ts
@@ -1,11 +1,13 @@
import type { types as t } from "@marko/compiler";
+import type { TemplateVisitor } from "../util/visitors";
+
export default {
translate: {
- enter(path: t.NodePath) {
- throw path.buildCodeFrameError(
+ enter(cdata) {
+ throw cdata.buildCodeFrameError(
"CDATA sections are not supported in Marko.",
);
},
},
-};
+} satisfies TemplateVisitor;
diff --git a/packages/translator-tags/src/visitors/comment.ts b/packages/translator-tags/src/visitors/comment.ts
index 1b81ac21d1..969abeb907 100644
--- a/packages/translator-tags/src/visitors/comment.ts
+++ b/packages/translator-tags/src/visitors/comment.ts
@@ -1,9 +1,11 @@
import type { types as t } from "@marko/compiler";
+import type { TemplateVisitor } from "../util/visitors";
+
export default {
translate: {
- exit(comment: t.NodePath) {
+ exit(comment) {
comment.remove();
},
},
-};
+} satisfies TemplateVisitor;
diff --git a/packages/translator-tags/src/visitors/declaration.ts b/packages/translator-tags/src/visitors/declaration.ts
index 13d342c69f..05e2dc9479 100644
--- a/packages/translator-tags/src/visitors/declaration.ts
+++ b/packages/translator-tags/src/visitors/declaration.ts
@@ -1,16 +1,13 @@
import type { types as t } from "@marko/compiler";
-import { isOutputHTML } from "../util/marko-config";
-import * as writer from "../util/writer";
+import type { TemplateVisitor } from "../util/visitors";
export default {
translate: {
- exit(declaration: t.NodePath) {
- if (isOutputHTML()) {
- writer.writeTo(declaration)`${declaration.node.value}?>`;
- }
-
- declaration.remove();
+ enter(decl) {
+ throw decl.buildCodeFrameError(
+ "XML declarations sections are not supported in Marko.",
+ );
},
},
-};
+} satisfies TemplateVisitor;
diff --git a/packages/translator-tags/src/visitors/document-type.ts b/packages/translator-tags/src/visitors/document-type.ts
index 2a18579df5..7a3825e92b 100644
--- a/packages/translator-tags/src/visitors/document-type.ts
+++ b/packages/translator-tags/src/visitors/document-type.ts
@@ -1,15 +1,16 @@
import type { types as t } from "@marko/compiler";
import { isOutputHTML } from "../util/marko-config";
+import type { TemplateVisitor } from "../util/visitors";
import * as writer from "../util/writer";
export default {
translate: {
- exit(documentType: t.NodePath) {
+ exit(documentType) {
if (isOutputHTML()) {
writer.writeTo(documentType)``;
}
documentType.remove();
},
},
-};
+} satisfies TemplateVisitor;
diff --git a/packages/translator-tags/src/visitors/function.ts b/packages/translator-tags/src/visitors/function.ts
index e4ff3e1ce4..b0c3fee4ad 100644
--- a/packages/translator-tags/src/visitors/function.ts
+++ b/packages/translator-tags/src/visitors/function.ts
@@ -14,6 +14,7 @@ import {
type Section,
} from "../util/sections";
import { getSerializedScopeProperties } from "../util/signals";
+import type { TemplateVisitor } from "../util/visitors";
import { currentProgramPath, scopeIdentifier } from "./program";
const functionIdsBySection = new WeakMap>();
const registeredFunctions = new WeakSet();
@@ -36,7 +37,7 @@ declare module "@marko/compiler/dist/types" {
}
export default {
- analyze(fn: t.NodePath) {
+ analyze(fn) {
const markoRoot = getMarkoRoot(fn);
const isStatic = !markoRoot || markoRoot.isMarkoScriptlet({ static: true });
if (!isFunction(fn, isStatic)) return;
@@ -103,7 +104,7 @@ export default {
);
},
translate: {
- exit(fn: t.NodePath) {
+ exit(fn) {
const markoRoot = getMarkoRoot(fn);
const isStatic =
!markoRoot || markoRoot.isMarkoScriptlet({ static: true });
@@ -226,7 +227,7 @@ export default {
}
},
},
-};
+} satisfies TemplateVisitor;
function isFunction(
fn: t.NodePath,
diff --git a/packages/translator-tags/src/visitors/import-declaration.ts b/packages/translator-tags/src/visitors/import-declaration.ts
index 6c2ba914f3..8047b4e70f 100644
--- a/packages/translator-tags/src/visitors/import-declaration.ts
+++ b/packages/translator-tags/src/visitors/import-declaration.ts
@@ -1,8 +1,10 @@
import { resolveTagImport } from "@marko/babel-utils";
import type { types as t } from "@marko/compiler";
+import type { TemplateVisitor } from "../util/visitors";
+
export default {
- analyze(importDecl: t.NodePath) {
+ analyze(importDecl) {
const { node } = importDecl;
const { source } = node;
const { value } = source;
@@ -18,7 +20,7 @@ export default {
}
},
translate: {
- exit(importDecl: t.NodePath) {
+ exit(importDecl) {
const { node } = importDecl;
const { extra } = node;
const tagImport = extra?.tagImport as string | undefined;
@@ -27,4 +29,4 @@ export default {
}
},
},
-};
+} satisfies TemplateVisitor;
diff --git a/packages/translator-tags/src/visitors/placeholder.ts b/packages/translator-tags/src/visitors/placeholder.ts
index 08f4c47092..c2f5868569 100644
--- a/packages/translator-tags/src/visitors/placeholder.ts
+++ b/packages/translator-tags/src/visitors/placeholder.ts
@@ -19,6 +19,7 @@ import {
getSection,
} from "../util/sections";
import { addStatement } from "../util/signals";
+import type { TemplateVisitor } from "../util/visitors";
import * as walks from "../util/walks";
import * as writer from "../util/writer";
import { scopeIdentifier } from "./program";
@@ -46,7 +47,7 @@ type HTMLMethod = "escapeScript" | "escapeStyle" | "escapeXML" | "toString";
type DOMMethod = "html" | "data";
export default {
- analyze(placeholder: t.NodePath) {
+ analyze(placeholder) {
const { node } = placeholder;
const { confident, computed } = evaluate(placeholder);
@@ -62,7 +63,7 @@ export default {
}
},
translate: {
- exit(placeholder: t.NodePath) {
+ exit(placeholder) {
const isHTML = isOutputHTML();
const write = writer.writeTo(placeholder);
const { node } = placeholder;
@@ -132,7 +133,7 @@ export default {
placeholder.remove();
},
},
-};
+} satisfies TemplateVisitor;
function getParentTagName({ parentPath }: t.NodePath) {
return (
diff --git a/packages/translator-tags/src/visitors/program/dom.ts b/packages/translator-tags/src/visitors/program/dom.ts
index e19c87ad09..019ad5bc7b 100644
--- a/packages/translator-tags/src/visitors/program/dom.ts
+++ b/packages/translator-tags/src/visitors/program/dom.ts
@@ -17,12 +17,13 @@ import {
replaceAssignments,
writeSignals,
} from "../../util/signals";
+import type { TemplateVisitor } from "../../util/visitors";
import { visit } from "../../util/walks";
import * as writer from "../../util/writer";
export default {
translate: {
- exit(program: t.NodePath) {
+ exit(program) {
visit(program);
const section = getSection(program);
const { walks, writes, setup } = writer.getSectionMeta(section);
@@ -150,4 +151,4 @@ export default {
);
},
},
-};
+} satisfies TemplateVisitor;
diff --git a/packages/translator-tags/src/visitors/program/html.ts b/packages/translator-tags/src/visitors/program/html.ts
index 1f9c566c89..0b8169e3ba 100644
--- a/packages/translator-tags/src/visitors/program/html.ts
+++ b/packages/translator-tags/src/visitors/program/html.ts
@@ -5,11 +5,12 @@ import isStatic from "../../util/is-static";
import { callRuntime } from "../../util/runtime";
import { getSection } from "../../util/sections";
import { renameBindings, writeHTMLResumeStatements } from "../../util/signals";
+import type { TemplateVisitor } from "../../util/visitors";
import { flushInto } from "../../util/writer";
export default {
translate: {
- exit(program: t.NodePath) {
+ exit(program) {
const section = getSection(program);
const tagVarIdentifier = program.scope.generateUidIdentifier("tagVar");
@@ -62,4 +63,4 @@ export default {
]);
},
},
-};
+} satisfies TemplateVisitor;
diff --git a/packages/translator-tags/src/visitors/program/index.ts b/packages/translator-tags/src/visitors/program/index.ts
index 6da6f13d9f..5dddf4e779 100644
--- a/packages/translator-tags/src/visitors/program/index.ts
+++ b/packages/translator-tags/src/visitors/program/index.ts
@@ -16,6 +16,7 @@ import {
trackParamsReferences,
} from "../../util/references";
import { startSection } from "../../util/sections";
+import type { TemplateVisitor } from "../../util/visitors";
import programDOM from "./dom";
import programHTML from "./html";
@@ -46,7 +47,7 @@ declare module "@marko/compiler/dist/types" {
export default {
migrate: {
- enter(program: t.NodePath) {
+ enter(program) {
previousProgramPath.set(program, currentProgramPath);
program.node.params = [t.identifier("input")];
currentProgramPath = program;
@@ -57,7 +58,7 @@ export default {
},
},
analyze: {
- enter(program: t.NodePath) {
+ enter(program) {
previousProgramPath.set(program, currentProgramPath);
currentProgramPath = program;
startSection(program);
@@ -73,7 +74,7 @@ export default {
};
},
- exit(program: t.NodePath) {
+ exit(program) {
finalizeReferences();
const {
scope,
@@ -90,7 +91,7 @@ export default {
},
},
translate: {
- enter(program: t.NodePath) {
+ enter(program) {
previousProgramPath.set(program, currentProgramPath);
currentProgramPath = program;
scopeIdentifier = isOutputDOM()
@@ -121,7 +122,7 @@ export default {
return;
}
},
- exit(program: t.NodePath) {
+ exit(program) {
if (isOutputHTML()) {
programHTML.translate.exit(program);
} else {
@@ -130,7 +131,7 @@ export default {
currentProgramPath = previousProgramPath.get(currentProgramPath)!;
},
},
-};
+} satisfies TemplateVisitor;
function resolveRelativeToEntry(
entryFile: t.BabelFile,
diff --git a/packages/translator-tags/src/visitors/referenced-identifier.ts b/packages/translator-tags/src/visitors/referenced-identifier.ts
index 132cf1ee3a..b612751e50 100644
--- a/packages/translator-tags/src/visitors/referenced-identifier.ts
+++ b/packages/translator-tags/src/visitors/referenced-identifier.ts
@@ -9,6 +9,7 @@ import {
type Section,
} from "../util/sections";
import { addStatement } from "../util/signals";
+import type { TemplateVisitor } from "../util/visitors";
import * as writer from "../util/writer";
import { scopeIdentifier } from "./program";
@@ -18,7 +19,7 @@ const abortIdsByExpressionForSection = new WeakMap<
>();
export default {
- migrate(identifier: t.NodePath) {
+ migrate(identifier) {
const { name } = identifier.node;
if (identifier.scope.hasBinding(name)) return;
switch (name) {
@@ -37,7 +38,7 @@ export default {
break;
}
},
- translate(identifier: t.NodePath) {
+ translate(identifier) {
const { name } = identifier.node;
if (identifier.scope.hasBinding(name)) return;
switch (name) {
@@ -119,4 +120,4 @@ export default {
}
}
},
-};
+} satisfies TemplateVisitor;
diff --git a/packages/translator-tags/src/visitors/scriptlet.ts b/packages/translator-tags/src/visitors/scriptlet.ts
index 719301ad71..d23e9b7ff2 100644
--- a/packages/translator-tags/src/visitors/scriptlet.ts
+++ b/packages/translator-tags/src/visitors/scriptlet.ts
@@ -4,13 +4,14 @@ import { isOutputHTML } from "../util/marko-config";
import { mergeReferences } from "../util/references";
import { getSection } from "../util/sections";
import { addStatement } from "../util/signals";
+import type { TemplateVisitor } from "../util/visitors";
export default {
- analyze(scriptlet: t.NodePath) {
+ analyze(scriptlet) {
mergeReferences(scriptlet, scriptlet.node.body);
},
translate: {
- exit(scriptlet: t.NodePath) {
+ exit(scriptlet) {
const { node } = scriptlet;
if (isOutputHTML()) {
if (node.static) return; // handled in program exit for html currently.
@@ -32,4 +33,4 @@ export default {
}
},
},
-};
+} satisfies TemplateVisitor;
diff --git a/packages/translator-tags/src/visitors/tag/attribute-tag.ts b/packages/translator-tags/src/visitors/tag/attribute-tag.ts
index 2488e7d015..7e0466849a 100644
--- a/packages/translator-tags/src/visitors/tag/attribute-tag.ts
+++ b/packages/translator-tags/src/visitors/tag/attribute-tag.ts
@@ -5,12 +5,13 @@ import attrsToObject from "../../util/attrs-to-object";
import { isOutputHTML } from "../../util/marko-config";
import { getSection, startSection } from "../../util/sections";
import { TagNameType } from "../../util/tag-name-type";
+import type { TemplateVisitor } from "../../util/visitors";
import * as writer from "../../util/writer";
import { scopeIdentifier } from "../program";
export default {
analyze: {
- enter(tag: t.NodePath) {
+ enter(tag) {
assertNoVar(tag);
assertNoArgs(tag);
@@ -18,7 +19,7 @@ export default {
},
},
translate: {
- exit(tag: t.NodePath) {
+ exit(tag) {
const parentTag = findParentTag(tag);
if (!parentTag) {
@@ -107,4 +108,4 @@ export default {
}
},
},
-};
+} satisfies TemplateVisitor;
diff --git a/packages/translator-tags/src/visitors/tag/custom-tag.ts b/packages/translator-tags/src/visitors/tag/custom-tag.ts
index ab5ca2e5e1..cd3b149206 100644
--- a/packages/translator-tags/src/visitors/tag/custom-tag.ts
+++ b/packages/translator-tags/src/visitors/tag/custom-tag.ts
@@ -37,6 +37,7 @@ import {
writeHTMLResumeStatements,
} from "../../util/signals";
import translateVar from "../../util/translate-var";
+import type { TemplateVisitor } from "../../util/visitors";
import * as walks from "../../util/walks";
import * as writer from "../../util/writer";
import { currentProgramPath, scopeIdentifier } from "../program";
@@ -51,7 +52,7 @@ declare module "@marko/compiler/dist/types" {
export default {
analyze: {
- enter(tag: t.NodePath) {
+ enter(tag) {
const section = getOrCreateSection(tag);
const tagBody = tag.get("body");
@@ -94,14 +95,14 @@ export default {
},
},
translate: {
- enter(tag: t.NodePath) {
+ enter(tag) {
assertAttributesOrSingleArg(tag);
walks.visit(tag);
if (isOutputHTML()) {
writer.flushBefore(tag);
}
},
- exit(tag: t.NodePath) {
+ exit(tag) {
if (isOutputHTML()) {
translateHTML(tag);
} else {
@@ -109,7 +110,7 @@ export default {
}
},
},
-};
+} satisfies TemplateVisitor;
function translateHTML(tag: t.NodePath) {
const tagBody = tag.get("body");
diff --git a/packages/translator-tags/src/visitors/tag/dynamic-tag.ts b/packages/translator-tags/src/visitors/tag/dynamic-tag.ts
index 8d38f3e9ee..a6ed75ed0a 100644
--- a/packages/translator-tags/src/visitors/tag/dynamic-tag.ts
+++ b/packages/translator-tags/src/visitors/tag/dynamic-tag.ts
@@ -39,6 +39,7 @@ import {
} from "../../util/signals";
import toFirstExpressionOrBlock from "../../util/to-first-expression-or-block";
import translateVar from "../../util/translate-var";
+import type { TemplateVisitor } from "../../util/visitors";
import * as walks from "../../util/walks";
import * as writer from "../../util/writer";
import { currentProgramPath, scopeIdentifier } from "../program";
@@ -54,7 +55,7 @@ declare module "@marko/compiler/dist/types" {
export default {
analyze: {
- enter(tag: t.NodePath) {
+ enter(tag) {
const section = getOrCreateSection(tag);
const tagExtra = (tag.node.extra ??= {});
const tagBody = tag.get("body");
@@ -86,7 +87,7 @@ export default {
},
},
translate: {
- enter(tag: t.NodePath) {
+ enter(tag) {
walks.visit(tag, WalkCode.Replace);
assertAttributesOrArgs(tag);
@@ -96,7 +97,7 @@ export default {
writer.flushBefore(tag);
}
},
- exit(tag: t.NodePath) {
+ exit(tag) {
const { node } = tag;
const extra = node.extra!;
const nodeRef = extra[kDOMBinding]!;
@@ -349,4 +350,4 @@ export default {
}
},
},
-};
+} satisfies TemplateVisitor;
diff --git a/packages/translator-tags/src/visitors/tag/index.ts b/packages/translator-tags/src/visitors/tag/index.ts
index e5d668e6f7..af804f1ed4 100644
--- a/packages/translator-tags/src/visitors/tag/index.ts
+++ b/packages/translator-tags/src/visitors/tag/index.ts
@@ -5,6 +5,7 @@ import { isOutputHTML } from "../../util/marko-config";
import analyzeAttributeTags from "../../util/nested-attribute-tags";
import * as hooks from "../../util/plugin-hooks";
import analyzeTagNameType, { TagNameType } from "../../util/tag-name-type";
+import type { TemplateVisitor } from "../../util/visitors";
import AttributeTag from "./attribute-tag";
import CustomTag from "./custom-tag";
import DynamicTag from "./dynamic-tag";
@@ -12,7 +13,7 @@ import NativeTag from "./native-tag";
export default {
transform: {
- enter(tag: t.NodePath) {
+ enter(tag) {
const attrs = tag.get("attributes");
for (let i = 0; i < attrs.length; i++) {
@@ -38,7 +39,7 @@ export default {
},
},
analyze: {
- enter(tag: t.NodePath) {
+ enter(tag) {
const tagDef = getTagDef(tag);
const type = analyzeTagNameType(tag);
const hook = tagDef?.analyzer?.hook as Plugin;
@@ -67,7 +68,7 @@ export default {
break;
}
},
- exit(tag: t.NodePath) {
+ exit(tag) {
const hook = getTagDef(tag)?.analyzer?.hook as Plugin;
if (hook) {
@@ -92,7 +93,7 @@ export default {
},
},
translate: {
- enter(tag: t.NodePath) {
+ enter(tag) {
const tagDef = getTagDef(tag);
const extra = tag.node.extra!;
@@ -157,7 +158,7 @@ export default {
}
},
- exit(tag: t.NodePath) {
+ exit(tag) {
const translator = getTagDef(tag)?.translator;
if (translator) {
@@ -181,7 +182,7 @@ export default {
}
},
},
-};
+} satisfies TemplateVisitor;
function getChangeHandler(
tag: t.NodePath,
diff --git a/packages/translator-tags/src/visitors/tag/native-tag.ts b/packages/translator-tags/src/visitors/tag/native-tag.ts
index 2da0216426..56480ace59 100644
--- a/packages/translator-tags/src/visitors/tag/native-tag.ts
+++ b/packages/translator-tags/src/visitors/tag/native-tag.ts
@@ -30,6 +30,7 @@ import {
getSerializedScopeProperties,
} from "../../util/signals";
import translateVar from "../../util/translate-var";
+import type { TemplateVisitor } from "../../util/visitors";
import * as walks from "../../util/walks";
import * as writer from "../../util/writer";
import { currentProgramPath, scopeIdentifier } from "../program";
@@ -48,7 +49,7 @@ declare module "@marko/compiler/dist/types" {
export default {
analyze: {
- enter(tag: t.NodePath) {
+ enter(tag) {
const { node } = tag;
const attrs = tag.get("attributes");
const tagVar = tag.node.var;
@@ -108,7 +109,7 @@ export default {
},
},
translate: {
- enter(tag: t.NodePath) {
+ enter(tag) {
assertNoArgs(tag);
const extra = tag.node.extra!;
@@ -332,7 +333,7 @@ export default {
walks.enter(tag);
},
- exit(tag: t.NodePath) {
+ exit(tag) {
const extra = tag.node.extra!;
const nodeRef = extra[kNativeTagBinding];
const isHTML = isOutputHTML();
@@ -371,7 +372,7 @@ export default {
tag.remove();
},
},
-};
+} satisfies TemplateVisitor;
function isSpreadAttr(
attr: t.NodePath,
diff --git a/packages/translator-tags/src/visitors/text.ts b/packages/translator-tags/src/visitors/text.ts
index f492a9fd7e..caae994cb0 100644
--- a/packages/translator-tags/src/visitors/text.ts
+++ b/packages/translator-tags/src/visitors/text.ts
@@ -1,14 +1,15 @@
import { types as t } from "@marko/compiler";
+import type { TemplateVisitor } from "../util/visitors";
import * as walks from "../util/walks";
import * as writer from "../util/writer";
export default {
translate: {
- exit(text: t.NodePath) {
+ exit(text) {
writer.writeTo(text)`${text.node.value}`;
walks.enterShallow(text);
text.remove();
},
},
-};
+} satisfies TemplateVisitor;
diff --git a/packages/translator-tags/src/visitors/update-expression.ts b/packages/translator-tags/src/visitors/update-expression.ts
index cc10d15794..397e468aba 100644
--- a/packages/translator-tags/src/visitors/update-expression.ts
+++ b/packages/translator-tags/src/visitors/update-expression.ts
@@ -2,21 +2,22 @@ import { types as t } from "@marko/compiler";
import { isOutputDOM } from "../util/marko-config";
import { getSection } from "../util/sections";
+import type { TemplateVisitor } from "../util/visitors";
import { currentProgramPath } from "./program";
export default {
translate: {
- exit(assignment: t.NodePath) {
+ exit(expr) {
if (isOutputDOM()) {
- const source = assignment.node.argument.extra?.source;
+ const source = expr.node.argument.extra?.source;
if (source) {
- const section = getSection(assignment);
+ const section = getSection(expr);
(currentProgramPath.node.extra.assignments ??= []).push([
section,
- assignment,
+ expr,
]);
}
}
},
},
-};
+} satisfies TemplateVisitor;