From 22b2c116b952da6d6400f68cd0a4a2348895efe0 Mon Sep 17 00:00:00 2001 From: Owen Buckley Date: Thu, 11 Jun 2026 09:32:01 -0400 Subject: [PATCH 1/2] bug: #258 fix naive jsx shadow root detection check --- src/jsx-loader.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/jsx-loader.js b/src/jsx-loader.js index 2e24c74..87cbb93 100644 --- a/src/jsx-loader.js +++ b/src/jsx-loader.js @@ -432,7 +432,7 @@ export function parseJsx(moduleURL) { // TODO: (good first issue) find a more AST (visitor) based way to check for this // https://github.com/ProjectEvergreen/wcc/issues/258 hasShadowRoot = - moduleContents.slice(node.body.start, node.body.end).indexOf('this.attachShadow(') > 0; + result.code.slice(node.body.start, node.body.end).indexOf('this.attachShadow(') > 0; for (const n1 of node.body.body) { if (n1.type === 'MethodDefinition') { @@ -773,6 +773,7 @@ export function parseJsx(moduleURL) { ) { // TODO: do we even need this filter? const trackingAttrs = observedAttributes.filter((attr) => typeof attr === 'string'); + // TODO: should we append cleanup functions if user has their own disconnected callback? const disconnectedCallbackContents = hasDisconnectedCallback ? '' : ` From be5e586c2752d57fa4cbeaa7c44162761c454e2a Mon Sep 17 00:00:00 2001 From: Owen Buckley Date: Sat, 27 Jun 2026 10:14:38 -0400 Subject: [PATCH 2/2] chore: #258 add comments --- src/jsx-loader.js | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/jsx-loader.js b/src/jsx-loader.js index 87cbb93..cbf5f8c 100644 --- a/src/jsx-loader.js +++ b/src/jsx-loader.js @@ -773,7 +773,7 @@ export function parseJsx(moduleURL) { ) { // TODO: do we even need this filter? const trackingAttrs = observedAttributes.filter((attr) => typeof attr === 'string'); - // TODO: should we append cleanup functions if user has their own disconnected callback? + // create a disconnectedCallback function if not present to append effect cleanup functions const disconnectedCallbackContents = hasDisconnectedCallback ? '' : ` @@ -817,13 +817,13 @@ export function parseJsx(moduleURL) { } }, MethodDefinition(node) { + // append DOM references and effect functions for signals if (node.key.name === 'connectedCallback') { const root = hasShadowRoot ? 'this.shadowRoot' : 'this'; const effectElements = reactiveElements .map((el, idx) => `this.$el${idx} = ${root}.querySelector('${el.selector}');`) .join('\n'); const effectContents = generateEffectsForReactiveElements(reactiveElements); - const effectElementsTree = acorn.parse(effectElements, acornParseOptions); const effectContentsTree = acorn.parse(effectContents, acornParseOptions); @@ -834,6 +834,7 @@ export function parseJsx(moduleURL) { ]; } + // append cleanup functions.if component already has a disconnectedCallback if (node.key.name === 'disconnectedCallback' && hasDisconnectedCallback) { const effectCleanupContents = generateEffectsCleanupForReactiveElements(reactiveElements);