From 7edb4babf5d096f92809d59169e44ba849c2bb1d Mon Sep 17 00:00:00 2001 From: dpiercey Date: Wed, 7 Aug 2024 09:41:40 -0700 Subject: [PATCH 1/2] fix: cached values inside attribute tags --- .changeset/nine-pumas-raise.md | 5 +++ .../single/node.render.expected.html | 18 +++++++++++ .../single/web.render.expected.html | 18 +++++++++++ .../misc/attribute-tags/components/test.marko | 17 ++++++++++ .../misc/attribute-tags/index.test.ts | 5 +++ .../attribute-tags/templates/single.marko | 17 ++++++++++ src/transform/wrapper-component.ts | 32 ++++++++++++++++++- 7 files changed, 111 insertions(+), 1 deletion(-) create mode 100644 .changeset/nine-pumas-raise.md create mode 100644 src/__tests__/fixtures/misc/attribute-tags/__snapshots__/misc-attribute-tags/single/node.render.expected.html create mode 100644 src/__tests__/fixtures/misc/attribute-tags/__snapshots__/misc-attribute-tags/single/web.render.expected.html create mode 100644 src/__tests__/fixtures/misc/attribute-tags/components/test.marko create mode 100644 src/__tests__/fixtures/misc/attribute-tags/index.test.ts create mode 100644 src/__tests__/fixtures/misc/attribute-tags/templates/single.marko diff --git a/.changeset/nine-pumas-raise.md b/.changeset/nine-pumas-raise.md new file mode 100644 index 0000000..71ee143 --- /dev/null +++ b/.changeset/nine-pumas-raise.md @@ -0,0 +1,5 @@ +--- +"@marko/tags-api-preview": patch +--- + +Fix issue with cached values inside attribute tags. diff --git a/src/__tests__/fixtures/misc/attribute-tags/__snapshots__/misc-attribute-tags/single/node.render.expected.html b/src/__tests__/fixtures/misc/attribute-tags/__snapshots__/misc-attribute-tags/single/node.render.expected.html new file mode 100644 index 0000000..ba77883 --- /dev/null +++ b/src/__tests__/fixtures/misc/attribute-tags/__snapshots__/misc-attribute-tags/single/node.render.expected.html @@ -0,0 +1,18 @@ +
+ Hello Frank! +
+
+ Hello Frank! +
+
+ Hello John! +
\ No newline at end of file diff --git a/src/__tests__/fixtures/misc/attribute-tags/__snapshots__/misc-attribute-tags/single/web.render.expected.html b/src/__tests__/fixtures/misc/attribute-tags/__snapshots__/misc-attribute-tags/single/web.render.expected.html new file mode 100644 index 0000000..ba77883 --- /dev/null +++ b/src/__tests__/fixtures/misc/attribute-tags/__snapshots__/misc-attribute-tags/single/web.render.expected.html @@ -0,0 +1,18 @@ +
+ Hello Frank! +
+
+ Hello Frank! +
+
+ Hello John! +
\ No newline at end of file diff --git a/src/__tests__/fixtures/misc/attribute-tags/components/test.marko b/src/__tests__/fixtures/misc/attribute-tags/components/test.marko new file mode 100644 index 0000000..ac1a32e --- /dev/null +++ b/src/__tests__/fixtures/misc/attribute-tags/components/test.marko @@ -0,0 +1,17 @@ + + + + + +
+ <${item}/> +
+ + + +
+ <${value}/> +
+
+ + diff --git a/src/__tests__/fixtures/misc/attribute-tags/index.test.ts b/src/__tests__/fixtures/misc/attribute-tags/index.test.ts new file mode 100644 index 0000000..5aca3cb --- /dev/null +++ b/src/__tests__/fixtures/misc/attribute-tags/index.test.ts @@ -0,0 +1,5 @@ +import fixture from "../../../fixture"; + +describe("misc attribute tags", () => { + describe("single", fixture("./templates/single.marko")); +}); diff --git a/src/__tests__/fixtures/misc/attribute-tags/templates/single.marko b/src/__tests__/fixtures/misc/attribute-tags/templates/single.marko new file mode 100644 index 0000000..757436d --- /dev/null +++ b/src/__tests__/fixtures/misc/attribute-tags/templates/single.marko @@ -0,0 +1,17 @@ + + + <@hello name="Frank" onClick() { + console.log('Hello Frank!'); + }> + Hello Frank! + + + + + <@hello name=name onClick() { + console.log('Hello ' + name + '!'); + }> + Hello ${name}! + + + diff --git a/src/transform/wrapper-component.ts b/src/transform/wrapper-component.ts index 3a9ef41..dc2525d 100644 --- a/src/transform/wrapper-component.ts +++ b/src/transform/wrapper-component.ts @@ -1,5 +1,11 @@ import { types as t } from "@marko/compiler"; -import { isNativeTag, getTagDef } from "@marko/babel-utils"; +import { + isNativeTag, + isTransparentTag, + isAttributeTag, + findParentTag, + getTagDef, +} from "@marko/babel-utils"; import { taglibId } from "../util/taglib-id"; import isApi from "../util/is-api"; @@ -96,6 +102,14 @@ export function ensureLifecycle(tag: t.NodePath, client = true) { isNativeTag(root as t.NodePath) ); + if (isAttributeTagLike(tag)) { + if (isTransparentTag(root as t.NodePath)) { + root = findParentTag(root as t.NodePath) || program; + } + + root = findParentTag(root as t.NodePath) || program; + } + if (root.node) { const roots = lifecycleRootsForProgram.get(program)!; let extra = root.node.extra; @@ -182,3 +196,19 @@ function buildNestedLifecycle(tag: t.NodePath): t.Statement[] { return result; } + +function isAttributeTagLike(tag: t.NodePath) { + if (isAttributeTag(tag)) { + return true; + } + + if (isTransparentTag(tag)) { + for (const child of tag.get("body").get("body")) { + if (child.isMarkoTag() && isAttributeTagLike(child)) { + return true; + } + } + } + + return false; +} From f1c7024c61e56d594a17d678d3c36ff7ebb18f04 Mon Sep 17 00:00:00 2001 From: dpiercey Date: Wed, 7 Aug 2024 11:08:42 -0700 Subject: [PATCH 2/2] chore: remove stack trace from error snapshots --- .../const-mutation-error/web.render.error.expected.txt | 3 +-- .../web.step-0.error.expected.txt | 5 +---- .../web.step-0.error.expected.txt | 5 +---- .../web.step-0.error.expected.txt | 5 +---- .../node.render.error.expected.txt | 5 +---- .../web.render.error.expected.txt | 3 +-- .../node.render.error.expected.txt | 6 +----- .../web.render.error.expected.txt | 4 +--- .../error-read-before-mount/node.render.error.expected.txt | 3 +-- .../error-read-before-mount/web.render.error.expected.txt | 3 +-- src/__tests__/snapshot.ts | 3 +-- 11 files changed, 11 insertions(+), 34 deletions(-) diff --git a/src/__tests__/fixtures/const/__snapshots__/const-mutation-error/web.render.error.expected.txt b/src/__tests__/fixtures/const/__snapshots__/const-mutation-error/web.render.error.expected.txt index 6a9b7e8..448179e 100644 --- a/src/__tests__/fixtures/const/__snapshots__/const-mutation-error/web.render.error.expected.txt +++ b/src/__tests__/fixtures/const/__snapshots__/const-mutation-error/web.render.error.expected.txt @@ -1,2 +1 @@ -TypeError: Cannot add property fullName, object is not extensible - at /src/__tests__/fixture.ts \ No newline at end of file +TypeError: Cannot add property fullName, object is not extensible \ No newline at end of file diff --git a/src/__tests__/fixtures/get-and-set/__snapshots__/get-read-assign-to-missing-context/web.step-0.error.expected.txt b/src/__tests__/fixtures/get-and-set/__snapshots__/get-read-assign-to-missing-context/web.step-0.error.expected.txt index 44a8ba6..9a98371 100644 --- a/src/__tests__/fixtures/get-and-set/__snapshots__/get-read-assign-to-missing-context/web.step-0.error.expected.txt +++ b/src/__tests__/fixtures/get-and-set/__snapshots__/get-read-assign-to-missing-context/web.step-0.error.expected.txt @@ -1,4 +1 @@ -Error: Assignment to constant variable. - at /src/__tests__/fire-event.ts - at /src/__tests__/fixtures/get-and-set/index.test.ts - at /src/__tests__/fixture.ts \ No newline at end of file +Error: Assignment to constant variable. \ No newline at end of file diff --git a/src/__tests__/fixtures/get-and-set/__snapshots__/get-set-assign-to-const-set/web.step-0.error.expected.txt b/src/__tests__/fixtures/get-and-set/__snapshots__/get-set-assign-to-const-set/web.step-0.error.expected.txt index 44a8ba6..9a98371 100644 --- a/src/__tests__/fixtures/get-and-set/__snapshots__/get-set-assign-to-const-set/web.step-0.error.expected.txt +++ b/src/__tests__/fixtures/get-and-set/__snapshots__/get-set-assign-to-const-set/web.step-0.error.expected.txt @@ -1,4 +1 @@ -Error: Assignment to constant variable. - at /src/__tests__/fire-event.ts - at /src/__tests__/fixtures/get-and-set/index.test.ts - at /src/__tests__/fixture.ts \ No newline at end of file +Error: Assignment to constant variable. \ No newline at end of file diff --git a/src/__tests__/fixtures/get-and-set/__snapshots__/get-set-assign-to-nested-const-set/web.step-0.error.expected.txt b/src/__tests__/fixtures/get-and-set/__snapshots__/get-set-assign-to-nested-const-set/web.step-0.error.expected.txt index 44a8ba6..9a98371 100644 --- a/src/__tests__/fixtures/get-and-set/__snapshots__/get-set-assign-to-nested-const-set/web.step-0.error.expected.txt +++ b/src/__tests__/fixtures/get-and-set/__snapshots__/get-set-assign-to-nested-const-set/web.step-0.error.expected.txt @@ -1,4 +1 @@ -Error: Assignment to constant variable. - at /src/__tests__/fire-event.ts - at /src/__tests__/fixtures/get-and-set/index.test.ts - at /src/__tests__/fixture.ts \ No newline at end of file +Error: Assignment to constant variable. \ No newline at end of file diff --git a/src/__tests__/fixtures/misc/hoisting/__snapshots__/misc-hoisting/error-maybe-sync-read-before-with-custom-tag/node.render.error.expected.txt b/src/__tests__/fixtures/misc/hoisting/__snapshots__/misc-hoisting/error-maybe-sync-read-before-with-custom-tag/node.render.error.expected.txt index a2e3044..d07d6cf 100644 --- a/src/__tests__/fixtures/misc/hoisting/__snapshots__/misc-hoisting/error-maybe-sync-read-before-with-custom-tag/node.render.error.expected.txt +++ b/src/__tests__/fixtures/misc/hoisting/__snapshots__/misc-hoisting/error-maybe-sync-read-before-with-custom-tag/node.render.error.expected.txt @@ -1,4 +1 @@ -ReferenceError: Cannot access 'x' before initialization - at /src/transform/hoist-tag-vars/index.ts - at /src/__tests__/fixtures/misc/hoisting/templates/error-hoisting-maybe-sync-read-before-with-custom-tag.marko - at /src/__tests__/fixture.ts \ No newline at end of file +ReferenceError: Cannot access 'x' before initialization \ No newline at end of file diff --git a/src/__tests__/fixtures/misc/hoisting/__snapshots__/misc-hoisting/error-maybe-sync-read-before-with-custom-tag/web.render.error.expected.txt b/src/__tests__/fixtures/misc/hoisting/__snapshots__/misc-hoisting/error-maybe-sync-read-before-with-custom-tag/web.render.error.expected.txt index 7475a60..d07d6cf 100644 --- a/src/__tests__/fixtures/misc/hoisting/__snapshots__/misc-hoisting/error-maybe-sync-read-before-with-custom-tag/web.render.error.expected.txt +++ b/src/__tests__/fixtures/misc/hoisting/__snapshots__/misc-hoisting/error-maybe-sync-read-before-with-custom-tag/web.render.error.expected.txt @@ -1,2 +1 @@ -ReferenceError: Cannot access 'x' before initialization - at /src/__tests__/fixtures/misc/hoisting/templates/error-hoisting-maybe-sync-read-before-with-custom-tag.marko \ No newline at end of file +ReferenceError: Cannot access 'x' before initialization \ No newline at end of file diff --git a/src/__tests__/fixtures/misc/hoisting/__snapshots__/misc-hoisting/error-maybe-sync-read-before/node.render.error.expected.txt b/src/__tests__/fixtures/misc/hoisting/__snapshots__/misc-hoisting/error-maybe-sync-read-before/node.render.error.expected.txt index cc9c1a4..d07d6cf 100644 --- a/src/__tests__/fixtures/misc/hoisting/__snapshots__/misc-hoisting/error-maybe-sync-read-before/node.render.error.expected.txt +++ b/src/__tests__/fixtures/misc/hoisting/__snapshots__/misc-hoisting/error-maybe-sync-read-before/node.render.error.expected.txt @@ -1,5 +1 @@ -ReferenceError: Cannot access 'x' before initialization - at /src/transform/hoist-tag-vars/index.ts - at /src/__tests__/fixtures/misc/hoisting/templates/error-hoisting-maybe-sync-read-before.marko - at /src/__tests__/fixtures/misc/hoisting/templates/error-hoisting-maybe-sync-read-before.marko - at /src/__tests__/fixture.ts \ No newline at end of file +ReferenceError: Cannot access 'x' before initialization \ No newline at end of file diff --git a/src/__tests__/fixtures/misc/hoisting/__snapshots__/misc-hoisting/error-maybe-sync-read-before/web.render.error.expected.txt b/src/__tests__/fixtures/misc/hoisting/__snapshots__/misc-hoisting/error-maybe-sync-read-before/web.render.error.expected.txt index d5b9870..d07d6cf 100644 --- a/src/__tests__/fixtures/misc/hoisting/__snapshots__/misc-hoisting/error-maybe-sync-read-before/web.render.error.expected.txt +++ b/src/__tests__/fixtures/misc/hoisting/__snapshots__/misc-hoisting/error-maybe-sync-read-before/web.render.error.expected.txt @@ -1,3 +1 @@ -ReferenceError: Cannot access 'x' before initialization - at /src/__tests__/fixtures/misc/hoisting/templates/error-hoisting-maybe-sync-read-before.marko - at /src/__tests__/fixtures/misc/hoisting/templates/error-hoisting-maybe-sync-read-before.marko \ No newline at end of file +ReferenceError: Cannot access 'x' before initialization \ No newline at end of file diff --git a/src/__tests__/fixtures/misc/native-tag-var/__snapshots__/misc-native-tag-vars/error-read-before-mount/node.render.error.expected.txt b/src/__tests__/fixtures/misc/native-tag-var/__snapshots__/misc-native-tag-vars/error-read-before-mount/node.render.error.expected.txt index 78c34fd..b8deb64 100644 --- a/src/__tests__/fixtures/misc/native-tag-var/__snapshots__/misc-native-tag-vars/error-read-before-mount/node.render.error.expected.txt +++ b/src/__tests__/fixtures/misc/native-tag-var/__snapshots__/misc-native-tag-vars/error-read-before-mount/node.render.error.expected.txt @@ -1,2 +1 @@ -Error: Cannot read an element reference while rendering. - at /src/__tests__/fixture.ts \ No newline at end of file +Error: Cannot read an element reference while rendering. \ No newline at end of file diff --git a/src/__tests__/fixtures/misc/native-tag-var/__snapshots__/misc-native-tag-vars/error-read-before-mount/web.render.error.expected.txt b/src/__tests__/fixtures/misc/native-tag-var/__snapshots__/misc-native-tag-vars/error-read-before-mount/web.render.error.expected.txt index 78c34fd..b8deb64 100644 --- a/src/__tests__/fixtures/misc/native-tag-var/__snapshots__/misc-native-tag-vars/error-read-before-mount/web.render.error.expected.txt +++ b/src/__tests__/fixtures/misc/native-tag-var/__snapshots__/misc-native-tag-vars/error-read-before-mount/web.render.error.expected.txt @@ -1,2 +1 @@ -Error: Cannot read an element reference while rendering. - at /src/__tests__/fixture.ts \ No newline at end of file +Error: Cannot read an element reference while rendering. \ No newline at end of file diff --git a/src/__tests__/snapshot.ts b/src/__tests__/snapshot.ts index efd24b8..0c0d168 100644 --- a/src/__tests__/snapshot.ts +++ b/src/__tests__/snapshot.ts @@ -144,8 +144,7 @@ function format(data: any): string { // eslint-disable-next-line no-control-regex .replace(/\x1B[[(?);]{0,2}(;?\d)*./g, "") .replaceAll(process.cwd(), "") - .replace(/\r?\n +at (?![/\\]src[/\\])[^\n]+$/gm, "") - .replace(/(\r?\n +at [/\\]src[/\\].*[^\n]):\d+:\d+$/gm, "$1") + .replace(/\r?\n +at [^\n]+$/gm, "") ); } }