what-compiler 0.6.0 → 0.6.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -503,6 +503,27 @@ function whatBabelPlugin({ types: t }) {
503
503
  continue;
504
504
  }
505
505
  const attrName = getAttrName(attr);
506
+ if (attrName === "ref") {
507
+ const refExpr = getAttributeValue(attr.value);
508
+ statements.push(
509
+ t.expressionStatement(
510
+ t.conditionalExpression(
511
+ t.binaryExpression(
512
+ "===",
513
+ t.unaryExpression("typeof", refExpr),
514
+ t.stringLiteral("function")
515
+ ),
516
+ t.callExpression(t.cloneNode(refExpr), [t.identifier(elId)]),
517
+ t.assignmentExpression(
518
+ "=",
519
+ t.memberExpression(t.cloneNode(refExpr), t.identifier("current")),
520
+ t.identifier(elId)
521
+ )
522
+ )
523
+ )
524
+ );
525
+ continue;
526
+ }
506
527
  if (attrName.startsWith("on") && !attrName.includes("|")) {
507
528
  const event = attrName.slice(2).toLowerCase();
508
529
  const handler = getAttributeValue(attr.value);
@@ -653,6 +674,7 @@ function whatBabelPlugin({ types: t }) {
653
674
  }
654
675
  }
655
676
  function applyDynamicChildren(statements, elId, children, parentNode, state) {
677
+ const entries = [];
656
678
  let childIndex = 0;
657
679
  for (const child of children) {
658
680
  if (t.isJSXText(child)) {
@@ -662,8 +684,57 @@ function whatBabelPlugin({ types: t }) {
662
684
  }
663
685
  if (t.isJSXExpressionContainer(child)) {
664
686
  if (t.isJSXEmptyExpression(child.expression)) continue;
665
- const expr = child.expression;
666
- const marker = buildChildAccess(elId, childIndex);
687
+ entries.push({ type: "expression", child, childIndex });
688
+ childIndex++;
689
+ continue;
690
+ }
691
+ if (t.isJSXElement(child)) {
692
+ const childTag = child.openingElement.name.name;
693
+ if (isComponent(childTag) || childTag === "For" || childTag === "Show") {
694
+ entries.push({ type: "component", child, childIndex });
695
+ childIndex++;
696
+ } else {
697
+ const hasAnythingDynamic = child.openingElement.attributes.some(isDynamicAttr) || child.openingElement.attributes.some((a) => !t.isJSXSpreadAttribute(a) && getAttrName(a)?.startsWith("on")) || !child.children.every(isStaticChild);
698
+ entries.push({ type: "static", child, childIndex, hasAnythingDynamic });
699
+ childIndex++;
700
+ }
701
+ continue;
702
+ }
703
+ if (t.isJSXFragment(child)) {
704
+ entries.push({ type: "fragment", child });
705
+ }
706
+ }
707
+ const entriesNeedingRef = entries.filter(
708
+ (e) => e.type === "expression" || e.type === "component" || e.type === "static" && e.hasAnythingDynamic
709
+ );
710
+ const hasDynamicInsert = entries.some((e) => e.type === "expression" || e.type === "component");
711
+ const needsPreCapture = entriesNeedingRef.length >= 2 && hasDynamicInsert;
712
+ const markerVars = /* @__PURE__ */ new Map();
713
+ if (needsPreCapture) {
714
+ for (const entry of entriesNeedingRef) {
715
+ const varName = `_m$${entry.childIndex}`;
716
+ const markerVar = state.nextVarId();
717
+ markerVars.set(entry.childIndex, markerVar);
718
+ statements.push(
719
+ t.variableDeclaration("const", [
720
+ t.variableDeclarator(
721
+ t.identifier(markerVar),
722
+ buildChildAccess(elId, entry.childIndex)
723
+ )
724
+ ])
725
+ );
726
+ }
727
+ }
728
+ function getMarker(idx) {
729
+ if (markerVars.has(idx)) {
730
+ return t.identifier(markerVars.get(idx));
731
+ }
732
+ return buildChildAccess(elId, idx);
733
+ }
734
+ for (const entry of entries) {
735
+ if (entry.type === "expression") {
736
+ const expr = entry.child.expression;
737
+ const marker = getMarker(entry.childIndex);
667
738
  state.needsInsert = true;
668
739
  if (isPotentiallyReactive(expr, state.signalNames, state.importedIdentifiers)) {
669
740
  const insertCall = t.callExpression(t.identifier("_$insert"), [
@@ -691,46 +762,44 @@ function whatBabelPlugin({ types: t }) {
691
762
  )
692
763
  );
693
764
  }
694
- childIndex++;
695
765
  continue;
696
766
  }
697
- if (t.isJSXElement(child)) {
698
- const childTag = child.openingElement.name.name;
699
- if (isComponent(childTag) || childTag === "For" || childTag === "Show") {
700
- const transformed = transformElementFineGrained({ node: child }, state);
701
- const marker = buildChildAccess(elId, childIndex);
702
- state.needsInsert = true;
767
+ if (entry.type === "component") {
768
+ const transformed = transformElementFineGrained({ node: entry.child }, state);
769
+ const marker = getMarker(entry.childIndex);
770
+ state.needsInsert = true;
771
+ statements.push(
772
+ t.expressionStatement(
773
+ t.callExpression(t.identifier("_$insert"), [
774
+ t.identifier(elId),
775
+ transformed,
776
+ marker
777
+ ])
778
+ )
779
+ );
780
+ continue;
781
+ }
782
+ if (entry.type === "static" && entry.hasAnythingDynamic) {
783
+ let childElRef;
784
+ if (markerVars.has(entry.childIndex)) {
785
+ childElRef = markerVars.get(entry.childIndex);
786
+ } else {
787
+ childElRef = state.nextVarId();
703
788
  statements.push(
704
- t.expressionStatement(
705
- t.callExpression(t.identifier("_$insert"), [
706
- t.identifier(elId),
707
- transformed,
708
- marker
709
- ])
710
- )
789
+ t.variableDeclaration("const", [
790
+ t.variableDeclarator(
791
+ t.identifier(childElRef),
792
+ buildChildAccess(elId, entry.childIndex)
793
+ )
794
+ ])
711
795
  );
712
- childIndex++;
713
- } else {
714
- const hasAnythingDynamic = child.openingElement.attributes.some(isDynamicAttr) || child.openingElement.attributes.some((a) => !t.isJSXSpreadAttribute(a) && getAttrName(a)?.startsWith("on")) || !child.children.every(isStaticChild);
715
- if (hasAnythingDynamic) {
716
- const childElId = state.nextVarId();
717
- statements.push(
718
- t.variableDeclaration("const", [
719
- t.variableDeclarator(
720
- t.identifier(childElId),
721
- buildChildAccess(elId, childIndex)
722
- )
723
- ])
724
- );
725
- applyDynamicAttrs(statements, childElId, child.openingElement.attributes, state);
726
- applyDynamicChildren(statements, childElId, child.children, child, state);
727
- }
728
- childIndex++;
729
796
  }
797
+ applyDynamicAttrs(statements, childElRef, entry.child.openingElement.attributes, state);
798
+ applyDynamicChildren(statements, childElRef, entry.child.children, entry.child, state);
730
799
  continue;
731
800
  }
732
- if (t.isJSXFragment(child)) {
733
- for (const fChild of child.children) {
801
+ if (entry.type === "fragment") {
802
+ for (const fChild of entry.child.children) {
734
803
  if (t.isJSXExpressionContainer(fChild) && !t.isJSXEmptyExpression(fChild.expression)) {
735
804
  state.needsInsert = true;
736
805
  const expr = fChild.expression;
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../src/babel-plugin.js"],
4
- "sourcesContent": ["/**\n * What Framework Babel Plugin \u2014 Fine-Grained Only\n *\n * JSX \u2192 template() + insert() + effect() calls\n * Static HTML extracted to module-level templates, dynamic expressions wrapped in effects.\n * Components run ONCE. All reactivity is signal-driven.\n *\n * Output:\n * const _tmpl$1 = template('<div class=\"container\"><h1>Title</h1><p></p></div>');\n * function App() {\n * const _el$ = _tmpl$1();\n * insert(_el$.childNodes[1], () => desc());\n * return _el$;\n * }\n *\n * Template calls are hoisted to module scope \u2014 each unique HTML string gets one\n * top-level const. Component functions just clone: `const _el$ = _tmpl$1()`.\n */\n\nconst EVENT_MODIFIERS = new Set(['preventDefault', 'stopPropagation', 'once', 'capture', 'passive', 'self']);\nconst EVENT_OPTION_MODIFIERS = new Set(['once', 'capture', 'passive']);\nconst VOID_HTML_ELEMENTS = new Set([\n 'area', 'base', 'br', 'col', 'embed', 'hr', 'img', 'input',\n 'link', 'meta', 'param', 'source', 'track', 'wbr'\n]);\n\n// Events that use document-level delegation for performance.\n// The compiler emits `el.__click = handler` instead of addEventListener.\n// A one-time document listener walks event.target upward to find the handler.\nconst DELEGATED_EVENTS = new Set([\n 'click', 'input', 'change', 'keydown', 'keyup', 'submit',\n 'focusin', 'focusout', 'mousedown', 'mouseup',\n]);\n\n// Known non-reactive call expressions \u2014 these should NOT be wrapped in effects\n// unless their arguments contain signal reads.\nconst SAFE_GLOBAL_CALLS = new Set([\n 'Math', 'Number', 'String', 'Boolean', 'parseInt', 'parseFloat',\n 'isNaN', 'isFinite', 'encodeURIComponent', 'decodeURIComponent',\n 'encodeURI', 'decodeURI', 'JSON', 'Date', 'Array', 'Object',\n 'console', 'RegExp',\n]);\n\n// Known signal-creating functions\nconst SIGNAL_CREATORS = new Set([\n 'useSignal', 'signal', 'computed', 'useComputed', 'useState', 'useReducer',\n 'createResource', 'useSWR', 'useQuery', 'useInfiniteQuery',\n]);\n\nexport default function whatBabelPlugin({ types: t }) {\n // =====================================================\n // Shared utilities\n // =====================================================\n\n function parseEventModifiers(name) {\n const parts = name.split('|');\n const eventName = parts[0];\n const modifiers = parts.slice(1).filter(m => EVENT_MODIFIERS.has(m));\n return { eventName, modifiers };\n }\n\n function isBindingAttribute(name) {\n return name.startsWith('bind:');\n }\n\n function getBindingProperty(name) {\n return name.slice(5);\n }\n\n function isComponent(name) {\n return /^[A-Z]/.test(name);\n }\n\n function isVoidHtmlElement(name) {\n return VOID_HTML_ELEMENTS.has(String(name).toLowerCase());\n }\n\n function getAttributeValue(value) {\n if (!value) return t.booleanLiteral(true);\n if (t.isJSXExpressionContainer(value)) return value.expression;\n if (t.isStringLiteral(value)) return value;\n return t.stringLiteral(value.value || '');\n }\n\n function normalizeAttrName(attrName) {\n if (attrName === 'className') return 'class';\n if (attrName === 'htmlFor') return 'for';\n return attrName;\n }\n\n // Safely extract attribute name, handling JSXNamespacedName (e.g., client:idle, bind:value)\n function getAttrName(attr) {\n if (t.isJSXNamespacedName(attr.name)) {\n return `${attr.name.namespace.name}:${attr.name.name.name}`;\n }\n return typeof attr.name.name === 'string' ? attr.name.name : String(attr.name.name);\n }\n\n function createEventHandler(handler, modifiers) {\n if (modifiers.length === 0) return handler;\n\n let wrappedHandler = handler;\n\n for (const mod of modifiers) {\n switch (mod) {\n case 'preventDefault':\n wrappedHandler = t.arrowFunctionExpression(\n [t.identifier('e')],\n t.blockStatement([\n t.expressionStatement(\n t.callExpression(\n t.memberExpression(t.identifier('e'), t.identifier('preventDefault')),\n []\n )\n ),\n t.expressionStatement(\n t.callExpression(wrappedHandler, [t.identifier('e')])\n )\n ])\n );\n break;\n\n case 'stopPropagation':\n wrappedHandler = t.arrowFunctionExpression(\n [t.identifier('e')],\n t.blockStatement([\n t.expressionStatement(\n t.callExpression(\n t.memberExpression(t.identifier('e'), t.identifier('stopPropagation')),\n []\n )\n ),\n t.expressionStatement(\n t.callExpression(wrappedHandler, [t.identifier('e')])\n )\n ])\n );\n break;\n\n case 'self':\n wrappedHandler = t.arrowFunctionExpression(\n [t.identifier('e')],\n t.blockStatement([\n t.ifStatement(\n t.binaryExpression(\n '===',\n t.memberExpression(t.identifier('e'), t.identifier('target')),\n t.memberExpression(t.identifier('e'), t.identifier('currentTarget'))\n ),\n t.expressionStatement(\n t.callExpression(wrappedHandler, [t.identifier('e')])\n )\n )\n ])\n );\n break;\n\n case 'once':\n case 'capture':\n case 'passive':\n break;\n }\n }\n\n return wrappedHandler;\n }\n\n // =====================================================\n // Reactivity Detection \u2014 Signal-Aware\n // =====================================================\n\n // Check if an identifier is known to be a signal (from useSignal/signal/computed/useState)\n function isSignalIdentifier(name, signalNames) {\n return signalNames.has(name);\n }\n\n // Collect signal identifiers using Babel's scope analysis.\n // Walks the scope chain from the given path upward, collecting signals\n // defined in each lexical scope (function/block).\n function collectSignalNamesFromScope(path) {\n const signalNames = new Set();\n\n // Helper: extract signal names from a VariableDeclarator node\n function extractFromDeclarator(decl) {\n const init = decl.init;\n if (!init || !t.isCallExpression(init)) return;\n\n const callee = init.callee;\n let calleeName = '';\n if (t.isIdentifier(callee)) {\n calleeName = callee.name;\n } else if (t.isMemberExpression(callee) && t.isIdentifier(callee.property)) {\n calleeName = callee.property.name;\n }\n\n if (SIGNAL_CREATORS.has(calleeName)) {\n const id = decl.id;\n if (t.isIdentifier(id)) {\n signalNames.add(id.name);\n } else if (t.isArrayPattern(id)) {\n for (const el of id.elements) {\n if (t.isIdentifier(el)) signalNames.add(el.name);\n }\n } else if (t.isObjectPattern(id)) {\n for (const prop of id.properties) {\n if (t.isObjectProperty(prop) && t.isIdentifier(prop.value)) {\n signalNames.add(prop.value.name);\n }\n }\n }\n }\n }\n\n // Walk up the scope chain using Babel's scope API\n let scope = path.scope;\n while (scope) {\n // Check all bindings in this scope\n for (const [name, binding] of Object.entries(scope.bindings)) {\n if (binding.path.isVariableDeclarator()) {\n extractFromDeclarator(binding.path.node);\n }\n // Also check function params (destructured props)\n if (binding.path.isIdentifier() || binding.kind === 'param') {\n const fnPath = binding.scope.path;\n if (fnPath && fnPath.node && fnPath.node.params) {\n for (const param of fnPath.node.params) {\n if (t.isObjectPattern(param)) {\n for (const prop of param.properties) {\n if (t.isObjectProperty(prop) && t.isIdentifier(prop.value)) {\n signalNames.add(prop.value.name);\n } else if (t.isRestElement(prop) && t.isIdentifier(prop.argument)) {\n signalNames.add(prop.argument.name);\n }\n }\n }\n }\n }\n }\n }\n scope = scope.parent;\n }\n\n return signalNames;\n }\n\n // Legacy wrapper for backward compat (used in collectSignalNames calls)\n function collectSignalNames(path) {\n return collectSignalNamesFromScope(path);\n }\n\n // Check if a call expression is a safe (non-reactive) global call\n function isSafeGlobalCall(expr) {\n if (!t.isCallExpression(expr)) return false;\n const callee = expr.callee;\n\n // Math.max(), Number.parseInt(), etc.\n if (t.isMemberExpression(callee) && t.isIdentifier(callee.object)) {\n return SAFE_GLOBAL_CALLS.has(callee.object.name);\n }\n\n // parseInt(), isNaN(), etc.\n if (t.isIdentifier(callee)) {\n return SAFE_GLOBAL_CALLS.has(callee.name);\n }\n\n return false;\n }\n\n // Check if an expression's reactivity is uncertain \u2014 e.g., a non-signal function call\n // whose arguments happen to contain signal reads. The function itself may not produce\n // a reactive result, so the compiler wraps it conservatively.\n function isUncertainReactive(expr, signalNames, importedIds) {\n if (!signalNames) return false;\n if (t.isCallExpression(expr)) {\n // Callee is a known signal \u2014 definitely reactive, not uncertain\n if (t.isIdentifier(expr.callee) && isSignalIdentifier(expr.callee.name, signalNames)) {\n return false;\n }\n // Imported identifier called as function \u2014 definitely reactive (not uncertain)\n if (importedIds && t.isIdentifier(expr.callee) && importedIds.has(expr.callee.name) &&\n !SAFE_GLOBAL_CALLS.has(expr.callee.name)) {\n return false;\n }\n // Callee is a member of a known signal \u2014 definitely reactive\n if (t.isMemberExpression(expr.callee) && t.isIdentifier(expr.callee.object) &&\n isSignalIdentifier(expr.callee.object.name, signalNames)) {\n return false;\n }\n // Safe global call (Math.max, etc.) with reactive args \u2014 still deterministic, not uncertain\n if (isSafeGlobalCall(expr)) return false;\n // Unknown function call \u2014 if args are reactive, the wrapping is uncertain\n if (expr.arguments.some(arg => isPotentiallyReactive(arg, signalNames, importedIds))) {\n return true;\n }\n }\n return false;\n }\n\n // Check if an expression is potentially reactive (reads a signal)\n // importedIds: Set of identifiers imported from other modules \u2014 any imported\n // function call is conservatively treated as potentially reactive since the\n // imported binding could be a signal from another file.\n function isPotentiallyReactive(expr, signalNames, importedIds) {\n if (!signalNames) signalNames = new Set();\n\n if (t.isCallExpression(expr)) {\n // If callee is a known signal identifier being called (signal read), it's reactive\n if (t.isIdentifier(expr.callee) && isSignalIdentifier(expr.callee.name, signalNames)) {\n return true;\n }\n // Imported identifier called as a function \u2014 conservatively reactive.\n // Handles: import { count } from './store'; ... {count()} in JSX\n if (importedIds && t.isIdentifier(expr.callee) && importedIds.has(expr.callee.name)) {\n // Exclude known safe globals that happen to also be imported\n if (!SAFE_GLOBAL_CALLS.has(expr.callee.name)) {\n return true;\n }\n }\n // member.call() \u2014 e.g., data(), isLoading()\n if (t.isMemberExpression(expr.callee)) {\n // Check if the object is a signal\n if (t.isIdentifier(expr.callee.object) && isSignalIdentifier(expr.callee.object.name, signalNames)) {\n return true;\n }\n }\n // Safe global calls like Math.max \u2014 only reactive if their args are\n if (isSafeGlobalCall(expr)) {\n return expr.arguments.some(arg => isPotentiallyReactive(arg, signalNames, importedIds));\n }\n // Unknown call \u2014 check if callee or args contain signal reads\n if (t.isIdentifier(expr.callee)) {\n // Could be a function that reads signals internally\n // Be conservative: if it's not a known safe call and not a signal, still check args\n return expr.arguments.some(arg => isPotentiallyReactive(arg, signalNames, importedIds));\n }\n // For any other call expression, check recursively\n return isPotentiallyReactive(expr.callee, signalNames, importedIds) ||\n expr.arguments.some(arg => isPotentiallyReactive(arg, signalNames, importedIds));\n }\n\n if (t.isIdentifier(expr)) {\n return isSignalIdentifier(expr.name, signalNames);\n }\n\n if (t.isMemberExpression(expr)) {\n return isPotentiallyReactive(expr.object, signalNames, importedIds);\n }\n\n if (t.isConditionalExpression(expr)) {\n return isPotentiallyReactive(expr.test, signalNames, importedIds) ||\n isPotentiallyReactive(expr.consequent, signalNames, importedIds) ||\n isPotentiallyReactive(expr.alternate, signalNames, importedIds);\n }\n\n if (t.isBinaryExpression(expr) || t.isLogicalExpression(expr)) {\n return isPotentiallyReactive(expr.left, signalNames, importedIds) ||\n isPotentiallyReactive(expr.right, signalNames, importedIds);\n }\n\n if (t.isUnaryExpression(expr)) {\n return isPotentiallyReactive(expr.argument, signalNames, importedIds);\n }\n\n if (t.isTemplateLiteral(expr)) {\n return expr.expressions.some(e => isPotentiallyReactive(e, signalNames, importedIds));\n }\n\n if (t.isObjectExpression(expr)) {\n return expr.properties.some(prop =>\n t.isObjectProperty(prop) && isPotentiallyReactive(prop.value, signalNames, importedIds)\n );\n }\n\n if (t.isArrayExpression(expr)) {\n return expr.elements.some(el => el && isPotentiallyReactive(el, signalNames, importedIds));\n }\n\n if (t.isArrowFunctionExpression(expr) || t.isFunctionExpression(expr)) {\n // Function expressions are not reactive themselves \u2014 they're callbacks\n return false;\n }\n\n return false;\n }\n\n // =====================================================\n // Fine-Grained Mode (template + insert + effect)\n // =====================================================\n\n // Check if a JSX child is static (no expressions)\n function isStaticChild(child) {\n if (t.isJSXText(child)) return true;\n if (t.isJSXExpressionContainer(child)) return false;\n if (t.isJSXElement(child)) {\n const el = child.openingElement;\n const tagName = el.name.name;\n if (isComponent(tagName)) return false;\n for (const attr of el.attributes) {\n if (t.isJSXSpreadAttribute(attr)) return false;\n const value = attr.value;\n if (t.isJSXExpressionContainer(value)) return false;\n }\n return child.children.every(isStaticChild);\n }\n return false;\n }\n\n // Check if an attribute value is dynamic\n function isDynamicAttr(attr) {\n if (t.isJSXSpreadAttribute(attr)) return true;\n if (!attr.value) return false;\n return t.isJSXExpressionContainer(attr.value);\n }\n\n // Extract static HTML from JSX element for template()\n function extractStaticHTML(node) {\n if (t.isJSXText(node)) {\n const text = node.value.replace(/\\n\\s+/g, ' ').trim();\n return text ? escapeHTML(text) : '';\n }\n\n if (t.isJSXExpressionContainer(node)) {\n if (t.isJSXEmptyExpression(node.expression)) return '';\n return '<!--$-->';\n }\n\n if (!t.isJSXElement(node)) return '';\n\n const el = node.openingElement;\n const tagName = el.name.name;\n\n if (isComponent(tagName)) return '';\n\n let html = `<${tagName}`;\n\n for (const attr of el.attributes) {\n if (t.isJSXSpreadAttribute(attr)) continue;\n const name = getAttrName(attr);\n if (name.startsWith('on') || name.startsWith('bind:') || name.includes('|')) continue;\n\n let domName = name;\n if (name === 'className') domName = 'class';\n if (name === 'htmlFor') domName = 'for';\n\n if (!attr.value) {\n html += ` ${domName}`;\n } else if (t.isStringLiteral(attr.value)) {\n html += ` ${domName}=\"${escapeAttr(attr.value.value)}\"`;\n } else if (t.isJSXExpressionContainer(attr.value)) {\n continue; // Dynamic attr \u2014 set via effect\n }\n }\n\n const selfClosing = node.openingElement.selfClosing;\n if (selfClosing && isVoidHtmlElement(tagName)) {\n html += '>';\n return html;\n }\n\n if (selfClosing) {\n html += `></${tagName}>`;\n return html;\n }\n\n html += '>';\n\n for (const child of node.children) {\n if (t.isJSXText(child)) {\n const text = child.value.replace(/\\n\\s+/g, ' ').trim();\n if (text) html += escapeHTML(text);\n } else if (t.isJSXExpressionContainer(child)) {\n if (!t.isJSXEmptyExpression(child.expression)) {\n html += '<!--$-->';\n }\n } else if (t.isJSXElement(child)) {\n if (isComponent(child.openingElement.name.name)) {\n html += '<!--$-->';\n } else {\n html += extractStaticHTML(child);\n }\n }\n }\n\n html += `</${tagName}>`;\n return html;\n }\n\n function escapeHTML(str) {\n return str.replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;');\n }\n\n function escapeAttr(str) {\n return str.replace(/&/g, '&amp;').replace(/\"/g, '&quot;').replace(/</g, '&lt;').replace(/>/g, '&gt;');\n }\n\n // Analyze JSX tree and generate fine-grained output\n function transformElementFineGrained(path, state) {\n const { node } = path;\n const openingElement = node.openingElement;\n const tagName = openingElement.name.name;\n\n if (isComponent(tagName)) {\n return transformComponentFineGrained(path, state);\n }\n\n // Control flow components (lowercase but special)\n if (tagName === 'For') {\n return transformForFineGrained(path, state);\n }\n if (tagName === 'Show') {\n return transformShowFineGrained(path, state);\n }\n\n const attributes = openingElement.attributes;\n const children = node.children;\n\n // Check if this entire subtree is purely static\n const allChildrenStatic = children.every(isStaticChild);\n const allAttrsStatic = attributes.every(attr => !isDynamicAttr(attr));\n const noEvents = attributes.every(attr => {\n if (t.isJSXSpreadAttribute(attr)) return false;\n const name = getAttrName(attr);\n return !name?.startsWith('on') && !name?.startsWith('bind:');\n });\n\n if (allChildrenStatic && allAttrsStatic && noEvents) {\n // Fully static element \u2014 extract to template, return clone call\n const html = extractStaticHTML(node);\n if (html) {\n const tmplId = getOrCreateTemplate(state, html);\n state.needsTemplate = true;\n return t.callExpression(t.identifier(tmplId), []);\n }\n }\n\n // Mixed static/dynamic element \u2014 extract template, add effects for dynamic parts\n const html = extractStaticHTML(node);\n if (!html) {\n // Template extraction failed \u2014 emit a detailed compile warning and use h() as fallback\n const loc = node.loc;\n const fileName = state.filename || state.file?.opts?.filename || '<unknown>';\n const lineInfo = loc ? `:${loc.start.line}:${loc.start.column}` : '';\n console.warn(\n `[what-compiler] Could not extract template for <${tagName}> at ${fileName}${lineInfo}. ` +\n `Falling back to h() for this element. ` +\n `This element could not be statically analyzed. Consider simplifying the JSX.`\n );\n state.needsH = true;\n return transformElementAsH(path, state);\n }\n\n const tmplId = getOrCreateTemplate(state, html);\n state.needsTemplate = true;\n\n const elId = state.nextVarId();\n\n // Build statements: _el$ = _tmpl$1()\n // NO IIFE wrapping \u2014 statements are inlined into the containing function\n const statements = [\n t.variableDeclaration('const', [\n t.variableDeclarator(t.identifier(elId), t.callExpression(t.identifier(tmplId), []))\n ])\n ];\n\n // Apply dynamic attributes and events\n applyDynamicAttrs(statements, elId, attributes, state);\n\n // Handle dynamic children\n applyDynamicChildren(statements, elId, children, node, state);\n\n // Instead of wrapping in an IIFE, store setup statements for hoisting.\n // The JSXElement visitor will insert them before the enclosing statement.\n if (!state._pendingSetup) state._pendingSetup = [];\n state._pendingSetup.push(...statements);\n return t.identifier(elId);\n }\n\n // Fallback: transform element using h() when template extraction fails\n function transformElementAsH(path, state) {\n const { node } = path;\n const openingElement = node.openingElement;\n const tagName = openingElement.name.name;\n const attributes = openingElement.attributes;\n const children = node.children;\n\n const props = [];\n for (const attr of attributes) {\n if (t.isJSXSpreadAttribute(attr)) continue;\n const attrName = getAttrName(attr);\n const value = getAttributeValue(attr.value);\n let domAttrName = normalizeAttrName(attrName);\n props.push(\n t.objectProperty(\n /^[a-zA-Z_$][a-zA-Z0-9_$]*$/.test(domAttrName)\n ? t.identifier(domAttrName)\n : t.stringLiteral(domAttrName),\n value\n )\n );\n }\n\n const transformedChildren = [];\n for (const child of children) {\n if (t.isJSXText(child)) {\n const text = child.value.replace(/\\n\\s+/g, ' ').trim();\n if (text) transformedChildren.push(t.stringLiteral(text));\n } else if (t.isJSXExpressionContainer(child)) {\n if (!t.isJSXEmptyExpression(child.expression)) {\n transformedChildren.push(child.expression);\n }\n } else if (t.isJSXElement(child)) {\n transformedChildren.push(transformElementFineGrained({ node: child }, state));\n } else if (t.isJSXFragment(child)) {\n transformedChildren.push(transformFragmentFineGrained({ node: child }, state));\n }\n }\n\n const propsExpr = props.length > 0 ? t.objectExpression(props) : t.nullLiteral();\n return t.callExpression(t.identifier('h'), [t.stringLiteral(tagName), propsExpr, ...transformedChildren]);\n }\n\n function applyDynamicAttrs(statements, elId, attributes, state) {\n function buildSetPropCall(propName, valueExpr) {\n state.needsSetProp = true;\n return t.callExpression(t.identifier('_$setProp'), [\n t.identifier(elId),\n t.stringLiteral(propName),\n valueExpr\n ]);\n }\n\n for (const attr of attributes) {\n if (t.isJSXSpreadAttribute(attr)) {\n state.needsSpread = true;\n statements.push(\n t.expressionStatement(\n t.callExpression(t.identifier('_$spread'), [t.identifier(elId), attr.argument])\n )\n );\n continue;\n }\n\n const attrName = getAttrName(attr);\n\n // Event handlers\n if (attrName.startsWith('on') && !attrName.includes('|')) {\n const event = attrName.slice(2).toLowerCase();\n const handler = getAttributeValue(attr.value);\n\n if (DELEGATED_EVENTS.has(event)) {\n // Use event delegation: el.__click = handler\n state.needsDelegation = true;\n if (!state.delegatedEvents) state.delegatedEvents = new Set();\n state.delegatedEvents.add(event);\n statements.push(\n t.expressionStatement(\n t.assignmentExpression('=',\n t.memberExpression(\n t.identifier(elId),\n t.identifier(`__${event}`)\n ),\n handler\n )\n )\n );\n } else {\n // Non-delegated: use per-element addEventListener\n statements.push(\n t.expressionStatement(\n t.callExpression(\n t.memberExpression(t.identifier(elId), t.identifier('addEventListener')),\n [t.stringLiteral(event), handler]\n )\n )\n );\n }\n continue;\n }\n\n // Event with modifiers\n if (attrName.startsWith('on') && attrName.includes('|')) {\n const { eventName, modifiers } = parseEventModifiers(attrName);\n const handler = getAttributeValue(attr.value);\n const wrappedHandler = createEventHandler(handler, modifiers);\n const event = eventName.slice(2).toLowerCase();\n\n const optionMods = modifiers.filter(m => EVENT_OPTION_MODIFIERS.has(m));\n const addEventArgs = [t.stringLiteral(event), wrappedHandler];\n if (optionMods.length > 0) {\n const optsProps = optionMods.map(m =>\n t.objectProperty(t.identifier(m), t.booleanLiteral(true))\n );\n addEventArgs.push(t.objectExpression(optsProps));\n }\n\n statements.push(\n t.expressionStatement(\n t.callExpression(\n t.memberExpression(t.identifier(elId), t.identifier('addEventListener')),\n addEventArgs\n )\n )\n );\n continue;\n }\n\n // Binding\n if (isBindingAttribute(attrName)) {\n const bindProp = getBindingProperty(attrName);\n const signalExpr = attr.value.expression;\n state.needsEffect = true;\n\n if (bindProp === 'value') {\n statements.push(\n t.expressionStatement(\n t.callExpression(t.identifier('_$effect'), [\n t.arrowFunctionExpression([], t.assignmentExpression('=',\n t.memberExpression(t.identifier(elId), t.identifier('value')),\n t.callExpression(t.cloneNode(signalExpr), [])\n ))\n ])\n )\n );\n statements.push(\n t.expressionStatement(\n t.callExpression(\n t.memberExpression(t.identifier(elId), t.identifier('addEventListener')),\n [\n t.stringLiteral('input'),\n t.arrowFunctionExpression(\n [t.identifier('e')],\n t.callExpression(\n t.memberExpression(t.cloneNode(signalExpr), t.identifier('set')),\n [t.memberExpression(\n t.memberExpression(t.identifier('e'), t.identifier('target')),\n t.identifier('value')\n )]\n )\n )\n ]\n )\n )\n );\n } else if (bindProp === 'checked') {\n state.needsEffect = true;\n statements.push(\n t.expressionStatement(\n t.callExpression(t.identifier('_$effect'), [\n t.arrowFunctionExpression([], t.assignmentExpression('=',\n t.memberExpression(t.identifier(elId), t.identifier('checked')),\n t.callExpression(t.cloneNode(signalExpr), [])\n ))\n ])\n )\n );\n statements.push(\n t.expressionStatement(\n t.callExpression(\n t.memberExpression(t.identifier(elId), t.identifier('addEventListener')),\n [\n t.stringLiteral('change'),\n t.arrowFunctionExpression(\n [t.identifier('e')],\n t.callExpression(\n t.memberExpression(t.cloneNode(signalExpr), t.identifier('set')),\n [t.memberExpression(\n t.memberExpression(t.identifier('e'), t.identifier('target')),\n t.identifier('checked')\n )]\n )\n )\n ]\n )\n )\n );\n }\n continue;\n }\n\n // Dynamic attribute (expression)\n if (t.isJSXExpressionContainer(attr.value)) {\n const expr = attr.value.expression;\n const domName = normalizeAttrName(attrName);\n\n if (isPotentiallyReactive(expr, state.signalNames, state.importedIdentifiers)) {\n state.needsEffect = true;\n const effectCall = t.callExpression(t.identifier('_$effect'), [\n t.arrowFunctionExpression([], buildSetPropCall(domName, expr))\n ]);\n // In dev mode, add a leading comment when the effect wrapping is uncertain\n // (non-signal function call whose args happen to contain signal reads)\n if (isUncertainReactive(expr, state.signalNames, state.importedIdentifiers)) {\n t.addComment(effectCall, 'leading',\n ' @what-dev: effect wrapping may be unnecessary \u2014 expression contains a non-signal function call with reactive args ',\n false\n );\n }\n statements.push(t.expressionStatement(effectCall));\n } else {\n // Static expression (no signal calls) \u2014 set once\n statements.push(t.expressionStatement(buildSetPropCall(domName, expr)));\n }\n }\n }\n }\n\n function applyDynamicChildren(statements, elId, children, parentNode, state) {\n let childIndex = 0;\n\n for (const child of children) {\n if (t.isJSXText(child)) {\n const text = child.value.replace(/\\n\\s+/g, ' ').trim();\n if (text) childIndex++;\n continue;\n }\n\n if (t.isJSXExpressionContainer(child)) {\n if (t.isJSXEmptyExpression(child.expression)) continue;\n\n const expr = child.expression;\n const marker = buildChildAccess(elId, childIndex);\n state.needsInsert = true;\n\n if (isPotentiallyReactive(expr, state.signalNames, state.importedIdentifiers)) {\n const insertCall = t.callExpression(t.identifier('_$insert'), [\n t.identifier(elId),\n t.arrowFunctionExpression([], expr),\n marker\n ]);\n // In dev mode, add a leading comment when the reactive wrapping is uncertain\n if (isUncertainReactive(expr, state.signalNames, state.importedIdentifiers)) {\n t.addComment(insertCall, 'leading',\n ' @what-dev: reactive wrapping may be unnecessary \u2014 expression contains a non-signal function call with reactive args ',\n false\n );\n }\n statements.push(t.expressionStatement(insertCall));\n } else {\n statements.push(\n t.expressionStatement(\n t.callExpression(t.identifier('_$insert'), [\n t.identifier(elId),\n expr,\n marker\n ])\n )\n );\n }\n childIndex++;\n continue;\n }\n\n if (t.isJSXElement(child)) {\n const childTag = child.openingElement.name.name;\n if (isComponent(childTag) || childTag === 'For' || childTag === 'Show') {\n const transformed = transformElementFineGrained({ node: child }, state);\n const marker = buildChildAccess(elId, childIndex);\n state.needsInsert = true;\n statements.push(\n t.expressionStatement(\n t.callExpression(t.identifier('_$insert'), [\n t.identifier(elId),\n transformed,\n marker\n ])\n )\n );\n childIndex++;\n } else {\n // Static child element \u2014 already in template\n // But check if it has dynamic children/attrs that need effects\n const hasAnythingDynamic = child.openingElement.attributes.some(isDynamicAttr) ||\n child.openingElement.attributes.some(a => !t.isJSXSpreadAttribute(a) && getAttrName(a)?.startsWith('on')) ||\n !child.children.every(isStaticChild);\n\n if (hasAnythingDynamic) {\n const childElId = state.nextVarId();\n statements.push(\n t.variableDeclaration('const', [\n t.variableDeclarator(\n t.identifier(childElId),\n buildChildAccess(elId, childIndex)\n )\n ])\n );\n applyDynamicAttrs(statements, childElId, child.openingElement.attributes, state);\n applyDynamicChildren(statements, childElId, child.children, child, state);\n }\n childIndex++;\n }\n continue;\n }\n\n if (t.isJSXFragment(child)) {\n for (const fChild of child.children) {\n if (t.isJSXExpressionContainer(fChild) && !t.isJSXEmptyExpression(fChild.expression)) {\n state.needsInsert = true;\n const expr = fChild.expression;\n if (isPotentiallyReactive(expr, state.signalNames, state.importedIdentifiers)) {\n statements.push(\n t.expressionStatement(\n t.callExpression(t.identifier('_$insert'), [\n t.identifier(elId),\n t.arrowFunctionExpression([], expr)\n ])\n )\n );\n } else {\n statements.push(\n t.expressionStatement(\n t.callExpression(t.identifier('_$insert'), [\n t.identifier(elId),\n expr\n ])\n )\n );\n }\n }\n }\n }\n }\n }\n\n function buildChildAccess(elId, index) {\n // Use firstChild/nextSibling chains instead of childNodes[N]\n // This is more robust with whitespace text nodes\n if (index === 0) {\n return t.memberExpression(t.identifier(elId), t.identifier('firstChild'));\n }\n // Chain .nextSibling for subsequent indices\n let expr = t.memberExpression(t.identifier(elId), t.identifier('firstChild'));\n for (let i = 0; i < index; i++) {\n expr = t.memberExpression(expr, t.identifier('nextSibling'));\n }\n return expr;\n }\n\n function transformComponentFineGrained(path, state) {\n const { node } = path;\n const openingElement = node.openingElement;\n const componentName = openingElement.name.name;\n const attributes = openingElement.attributes;\n const children = node.children;\n\n // Check for client: directive (islands)\n let clientDirective = null;\n const filteredAttrs = [];\n\n for (const attr of attributes) {\n if (t.isJSXAttribute(attr)) {\n // Handle both simple names and namespaced names (client:idle)\n let name;\n if (t.isJSXNamespacedName(attr.name)) {\n name = `${attr.name.namespace.name}:${attr.name.name.name}`;\n } else {\n name = attr.name.name;\n }\n if (name && typeof name === 'string' && name.startsWith('client:')) {\n const mode = name.slice(7);\n if (attr.value) {\n clientDirective = { type: mode, value: attr.value.value };\n } else {\n clientDirective = { type: mode };\n }\n continue;\n }\n }\n filteredAttrs.push(attr);\n }\n\n if (clientDirective) {\n state.needsCreateComponent = true;\n state.needsIsland = true;\n\n const islandProps = [\n t.objectProperty(t.identifier('component'), t.identifier(componentName)),\n t.objectProperty(t.identifier('mode'), t.stringLiteral(clientDirective.type)),\n ];\n\n if (clientDirective.value) {\n islandProps.push(\n t.objectProperty(t.identifier('mediaQuery'), t.stringLiteral(clientDirective.value))\n );\n }\n\n for (const attr of filteredAttrs) {\n if (t.isJSXSpreadAttribute(attr)) continue;\n const attrName = getAttrName(attr);\n const value = getAttributeValue(attr.value);\n islandProps.push(t.objectProperty(t.identifier(attrName), value));\n }\n\n return t.callExpression(\n t.identifier('_$createComponent'),\n [t.identifier('Island'), t.objectExpression(islandProps), t.arrayExpression([])]\n );\n }\n\n // Regular component \u2014 use _$createComponent to instantiate, component runs once\n state.needsCreateComponent = true;\n\n const props = [];\n let hasSpread = false;\n let spreadExpr = null;\n\n for (const attr of filteredAttrs) {\n if (t.isJSXSpreadAttribute(attr)) {\n hasSpread = true;\n spreadExpr = attr.argument;\n continue;\n }\n\n const attrName = getAttrName(attr);\n\n // Handle bind: attributes for components\n if (isBindingAttribute(attrName)) {\n const bindProp = getBindingProperty(attrName);\n const signalExpr = attr.value.expression;\n\n if (bindProp === 'value') {\n props.push(\n t.objectProperty(t.identifier('value'), t.callExpression(t.cloneNode(signalExpr), []))\n );\n props.push(\n t.objectProperty(\n t.identifier('onInput'),\n t.arrowFunctionExpression(\n [t.identifier('e')],\n t.callExpression(\n t.memberExpression(t.cloneNode(signalExpr), t.identifier('set')),\n [t.memberExpression(\n t.memberExpression(t.identifier('e'), t.identifier('target')),\n t.identifier('value')\n )]\n )\n )\n )\n );\n } else if (bindProp === 'checked') {\n props.push(\n t.objectProperty(t.identifier('checked'), t.callExpression(t.cloneNode(signalExpr), []))\n );\n props.push(\n t.objectProperty(\n t.identifier('onChange'),\n t.arrowFunctionExpression(\n [t.identifier('e')],\n t.callExpression(\n t.memberExpression(t.cloneNode(signalExpr), t.identifier('set')),\n [t.memberExpression(\n t.memberExpression(t.identifier('e'), t.identifier('target')),\n t.identifier('checked')\n )]\n )\n )\n )\n );\n }\n continue;\n }\n\n // Handle event modifiers on components\n if (attrName.startsWith('on') && attrName.includes('|')) {\n const { eventName, modifiers } = parseEventModifiers(attrName);\n const handler = getAttributeValue(attr.value);\n const wrappedHandler = createEventHandler(handler, modifiers);\n props.push(t.objectProperty(t.identifier(eventName), wrappedHandler));\n continue;\n }\n\n const value = getAttributeValue(attr.value);\n\n props.push(\n t.objectProperty(\n /^[a-zA-Z_$][a-zA-Z0-9_$]*$/.test(attrName)\n ? t.identifier(attrName)\n : t.stringLiteral(attrName),\n value\n )\n );\n }\n\n // Transform children\n const transformedChildren = [];\n for (const child of children) {\n if (t.isJSXText(child)) {\n const text = child.value.replace(/\\n\\s+/g, ' ').trim();\n if (text) transformedChildren.push(t.stringLiteral(text));\n } else if (t.isJSXExpressionContainer(child)) {\n if (!t.isJSXEmptyExpression(child.expression)) {\n transformedChildren.push(child.expression);\n }\n } else if (t.isJSXElement(child)) {\n transformedChildren.push(transformElementFineGrained({ node: child }, state));\n } else if (t.isJSXFragment(child)) {\n transformedChildren.push(transformFragmentFineGrained({ node: child }, state));\n }\n }\n\n let propsExpr;\n if (hasSpread) {\n if (props.length > 0) {\n propsExpr = t.callExpression(\n t.memberExpression(t.identifier('Object'), t.identifier('assign')),\n [t.objectExpression([]), spreadExpr, t.objectExpression(props)]\n );\n } else {\n propsExpr = spreadExpr;\n }\n } else if (props.length > 0) {\n propsExpr = t.objectExpression(props);\n } else {\n propsExpr = t.nullLiteral();\n }\n\n const childrenArray = transformedChildren.length > 0\n ? t.arrayExpression(transformedChildren)\n : t.arrayExpression([]);\n\n return t.callExpression(t.identifier('_$createComponent'), [t.identifier(componentName), propsExpr, childrenArray]);\n }\n\n function transformForFineGrained(path, state) {\n const { node } = path;\n const attributes = node.openingElement.attributes;\n const children = node.children;\n\n // <For each={data}>{(item) => <Row />}</For>\n // \u2192 mapArray(data, (item) => ...)\n let eachExpr = null;\n for (const attr of attributes) {\n if (t.isJSXAttribute(attr) && getAttrName(attr) === 'each') {\n eachExpr = getAttributeValue(attr.value);\n }\n }\n\n if (!eachExpr) {\n console.warn('[what-compiler] <For> element missing \"each\" attribute.');\n state.needsH = true;\n return transformElementAsH(path, state);\n }\n\n let renderFn = null;\n for (const child of children) {\n if (t.isJSXExpressionContainer(child) && !t.isJSXEmptyExpression(child.expression)) {\n renderFn = child.expression;\n break;\n }\n }\n\n if (!renderFn) {\n console.warn('[what-compiler] <For> element missing render function child.');\n state.needsH = true;\n return transformElementAsH(path, state);\n }\n\n state.needsMapArray = true;\n return t.callExpression(t.identifier('_$mapArray'), [eachExpr, renderFn]);\n }\n\n function transformShowFineGrained(path, state) {\n // <Show when={cond}>{content}</Show>\n // Uses _$createComponent(Show, ...) \u2014 Show is a runtime component\n state.needsCreateComponent = true;\n return transformComponentFineGrained(path, state);\n }\n\n function transformFragmentFineGrained(path, state) {\n const { node } = path;\n const children = node.children;\n\n const transformed = [];\n for (const child of children) {\n if (t.isJSXText(child)) {\n const text = child.value.replace(/\\n\\s+/g, ' ').trim();\n if (text) transformed.push(t.stringLiteral(text));\n } else if (t.isJSXExpressionContainer(child)) {\n if (!t.isJSXEmptyExpression(child.expression)) {\n transformed.push(child.expression);\n }\n } else if (t.isJSXElement(child)) {\n transformed.push(transformElementFineGrained({ node: child }, state));\n } else if (t.isJSXFragment(child)) {\n transformed.push(transformFragmentFineGrained({ node: child }, state));\n }\n }\n\n if (transformed.length === 1) return transformed[0];\n return t.arrayExpression(transformed);\n }\n\n // Template deduplication: same HTML string \u2192 same module-level const\n function getOrCreateTemplate(state, html) {\n if (state.templateMap.has(html)) {\n return state.templateMap.get(html);\n }\n const id = `_tmpl$${state.templateCount++}`;\n state.templateMap.set(html, id);\n state.templates.push({ id, html });\n return id;\n }\n\n // =====================================================\n // Plugin entry\n // =====================================================\n\n return {\n name: 'what-jsx-transform',\n\n visitor: {\n Program: {\n enter(path, state) {\n // Fine-grained mode state\n state.needsTemplate = false;\n state.needsInsert = false;\n state.needsEffect = false;\n state.needsMapArray = false;\n state.needsSpread = false;\n state.needsSetProp = false;\n state.needsH = false;\n state.needsCreateComponent = false;\n state.needsFragment = false;\n state.needsIsland = false;\n state.needsDelegation = false;\n state.delegatedEvents = new Set();\n state.templates = [];\n state.templateMap = new Map(); // html \u2192 template id (deduplication)\n state.templateCount = 0;\n state._varCounter = 0;\n state._pendingSetup = [];\n state.nextVarId = () => `_el$${state._varCounter++}`;\n\n // Collect signal names for smart reactivity detection\n state.signalNames = new Set();\n\n // --- Imported Signal Tracking ---\n // Only mark imports as potentially reactive if they come from known\n // reactive sources: what-framework, what-framework/*, relative paths\n // (user stores), or functions matching use*/create* naming conventions.\n // This prevents over-wrapping of utility imports (lodash, etc.).\n state.importedIdentifiers = new Set();\n for (const node of path.node.body) {\n if (t.isImportDeclaration(node)) {\n const source = node.source.value;\n const isReactiveSource =\n source === 'what-framework' ||\n source.startsWith('what-framework/') ||\n source === 'what-core' ||\n source.startsWith('what-core/') ||\n source.startsWith('./') ||\n source.startsWith('../');\n\n for (const spec of node.specifiers) {\n let localName = null;\n if (t.isImportSpecifier(spec) && t.isIdentifier(spec.local)) {\n localName = spec.local.name;\n } else if (t.isImportDefaultSpecifier(spec) && t.isIdentifier(spec.local)) {\n localName = spec.local.name;\n } else if (t.isImportNamespaceSpecifier(spec) && t.isIdentifier(spec.local)) {\n localName = spec.local.name;\n }\n\n if (localName) {\n // Mark as reactive if from a reactive source, or if the name\n // matches use*/create* conventions (hooks/signal creators)\n if (isReactiveSource || /^(use|create)[A-Z]/.test(localName)) {\n state.importedIdentifiers.add(localName);\n }\n }\n }\n }\n }\n\n path.traverse({\n VariableDeclarator(declPath) {\n const init = declPath.node.init;\n if (!init || !t.isCallExpression(init)) return;\n\n const callee = init.callee;\n let calleeName = '';\n if (t.isIdentifier(callee)) {\n calleeName = callee.name;\n } else if (t.isMemberExpression(callee) && t.isIdentifier(callee.property)) {\n calleeName = callee.property.name;\n }\n\n if (SIGNAL_CREATORS.has(calleeName)) {\n const id = declPath.node.id;\n if (t.isIdentifier(id)) {\n state.signalNames.add(id.name);\n } else if (t.isArrayPattern(id)) {\n for (const el of id.elements) {\n if (t.isIdentifier(el)) state.signalNames.add(el.name);\n }\n } else if (t.isObjectPattern(id)) {\n for (const prop of id.properties) {\n if (t.isObjectProperty(prop) && t.isIdentifier(prop.value)) {\n state.signalNames.add(prop.value.name);\n }\n }\n }\n }\n }\n });\n },\n\n exit(path, state) {\n // Insert template declarations at top of program (hoisted to module scope)\n for (const tmpl of state.templates.reverse()) {\n path.unshiftContainer('body',\n t.variableDeclaration('const', [\n t.variableDeclarator(\n t.identifier(tmpl.id),\n t.callExpression(t.identifier('_$template'), [t.stringLiteral(tmpl.html)])\n )\n ])\n );\n }\n\n // Build fine-grained imports\n const fgSpecifiers = [];\n if (state.needsTemplate) {\n fgSpecifiers.push(\n t.importSpecifier(t.identifier('_$template'), t.identifier('template'))\n );\n }\n if (state.needsInsert) {\n fgSpecifiers.push(\n t.importSpecifier(t.identifier('_$insert'), t.identifier('insert'))\n );\n }\n if (state.needsEffect) {\n fgSpecifiers.push(\n t.importSpecifier(t.identifier('_$effect'), t.identifier('effect'))\n );\n }\n if (state.needsMapArray) {\n fgSpecifiers.push(\n t.importSpecifier(t.identifier('_$mapArray'), t.identifier('mapArray'))\n );\n }\n if (state.needsSpread) {\n fgSpecifiers.push(\n t.importSpecifier(t.identifier('_$spread'), t.identifier('spread'))\n );\n }\n if (state.needsSetProp) {\n fgSpecifiers.push(\n t.importSpecifier(t.identifier('_$setProp'), t.identifier('setProp'))\n );\n }\n if (state.needsCreateComponent) {\n fgSpecifiers.push(\n t.importSpecifier(t.identifier('_$createComponent'), t.identifier('_$createComponent'))\n );\n }\n if (state.needsDelegation) {\n fgSpecifiers.push(\n t.importSpecifier(t.identifier('_$delegateEvents'), t.identifier('delegateEvents'))\n );\n }\n\n // Core imports (h/Fragment/Island for components)\n const coreSpecifiers = [];\n if (state.needsH) {\n coreSpecifiers.push(\n t.importSpecifier(t.identifier('h'), t.identifier('h'))\n );\n }\n if (state.needsFragment) {\n coreSpecifiers.push(\n t.importSpecifier(t.identifier('Fragment'), t.identifier('Fragment'))\n );\n }\n if (state.needsIsland) {\n coreSpecifiers.push(\n t.importSpecifier(t.identifier('Island'), t.identifier('Island'))\n );\n }\n\n if (fgSpecifiers.length > 0) {\n let existingRenderImport = null;\n for (const node of path.node.body) {\n if (t.isImportDeclaration(node) && (\n node.source.value === 'what-framework/render' ||\n node.source.value === 'what-core/render'\n )) {\n existingRenderImport = node;\n break;\n }\n }\n\n if (existingRenderImport) {\n const existingNames = new Set(\n existingRenderImport.specifiers\n .filter(s => t.isImportSpecifier(s))\n .map(s => s.imported.name)\n );\n for (const spec of fgSpecifiers) {\n if (!existingNames.has(spec.imported.name)) {\n existingRenderImport.specifiers.push(spec);\n }\n }\n } else {\n path.unshiftContainer('body',\n t.importDeclaration(fgSpecifiers, t.stringLiteral('what-framework/render'))\n );\n }\n }\n\n if (coreSpecifiers.length > 0) {\n addCoreImports(path, t, coreSpecifiers);\n }\n\n // Emit event delegation setup call if any delegated events were used\n if (state.needsDelegation && state.delegatedEvents && state.delegatedEvents.size > 0) {\n const eventArray = t.arrayExpression(\n [...state.delegatedEvents].map(e => t.stringLiteral(e))\n );\n path.pushContainer('body',\n t.expressionStatement(\n t.callExpression(t.identifier('_$delegateEvents'), [eventArray])\n )\n );\n }\n }\n },\n\n JSXElement(path, state) {\n // FIX-1: Use scope-aware signal detection instead of file-global\n state.signalNames = collectSignalNamesFromScope(path);\n state._pendingSetup = [];\n const transformed = transformElementFineGrained(path, state);\n const pending = state._pendingSetup;\n state._pendingSetup = [];\n\n if (pending.length > 0) {\n // Find the enclosing statement to hoist setup before it\n let stmtPath = path;\n while (stmtPath && !stmtPath.isStatement()) {\n stmtPath = stmtPath.parentPath;\n }\n if (stmtPath && stmtPath.isStatement()) {\n // Insert setup statements before the enclosing statement\n for (const stmt of pending) {\n stmtPath.insertBefore(stmt);\n }\n path.replaceWith(transformed);\n } else {\n // Fallback: if we can't find a statement parent, use IIFE\n pending.push(t.returnStatement(transformed));\n path.replaceWith(\n t.callExpression(\n t.arrowFunctionExpression([], t.blockStatement(pending)),\n []\n )\n );\n }\n } else {\n path.replaceWith(transformed);\n }\n },\n\n JSXFragment(path, state) {\n const transformed = transformFragmentFineGrained(path, state);\n path.replaceWith(transformed);\n }\n }\n };\n}\n\nfunction addCoreImports(path, t, coreSpecifiers) {\n let existingImport = null;\n for (const node of path.node.body) {\n if (t.isImportDeclaration(node) && (\n node.source.value === 'what-core' || node.source.value === 'what-framework'\n )) {\n existingImport = node;\n break;\n }\n }\n\n if (existingImport) {\n const existingNames = new Set(\n existingImport.specifiers\n .filter(s => t.isImportSpecifier(s))\n .map(s => s.imported.name)\n );\n for (const spec of coreSpecifiers) {\n if (!existingNames.has(spec.imported.name)) {\n existingImport.specifiers.push(spec);\n }\n }\n } else {\n const importDecl = t.importDeclaration(\n coreSpecifiers,\n t.stringLiteral('what-framework')\n );\n path.unshiftContainer('body', importDecl);\n }\n}\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["/**\n * What Framework Babel Plugin \u2014 Fine-Grained Only\n *\n * JSX \u2192 template() + insert() + effect() calls\n * Static HTML extracted to module-level templates, dynamic expressions wrapped in effects.\n * Components run ONCE. All reactivity is signal-driven.\n *\n * Output:\n * const _tmpl$1 = template('<div class=\"container\"><h1>Title</h1><p></p></div>');\n * function App() {\n * const _el$ = _tmpl$1();\n * insert(_el$.childNodes[1], () => desc());\n * return _el$;\n * }\n *\n * Template calls are hoisted to module scope \u2014 each unique HTML string gets one\n * top-level const. Component functions just clone: `const _el$ = _tmpl$1()`.\n */\n\nconst EVENT_MODIFIERS = new Set(['preventDefault', 'stopPropagation', 'once', 'capture', 'passive', 'self']);\nconst EVENT_OPTION_MODIFIERS = new Set(['once', 'capture', 'passive']);\nconst VOID_HTML_ELEMENTS = new Set([\n 'area', 'base', 'br', 'col', 'embed', 'hr', 'img', 'input',\n 'link', 'meta', 'param', 'source', 'track', 'wbr'\n]);\n\n// Events that use document-level delegation for performance.\n// The compiler emits `el.__click = handler` instead of addEventListener.\n// A one-time document listener walks event.target upward to find the handler.\nconst DELEGATED_EVENTS = new Set([\n 'click', 'input', 'change', 'keydown', 'keyup', 'submit',\n 'focusin', 'focusout', 'mousedown', 'mouseup',\n]);\n\n// Known non-reactive call expressions \u2014 these should NOT be wrapped in effects\n// unless their arguments contain signal reads.\nconst SAFE_GLOBAL_CALLS = new Set([\n 'Math', 'Number', 'String', 'Boolean', 'parseInt', 'parseFloat',\n 'isNaN', 'isFinite', 'encodeURIComponent', 'decodeURIComponent',\n 'encodeURI', 'decodeURI', 'JSON', 'Date', 'Array', 'Object',\n 'console', 'RegExp',\n]);\n\n// Known signal-creating functions\nconst SIGNAL_CREATORS = new Set([\n 'useSignal', 'signal', 'computed', 'useComputed', 'useState', 'useReducer',\n 'createResource', 'useSWR', 'useQuery', 'useInfiniteQuery',\n]);\n\nexport default function whatBabelPlugin({ types: t }) {\n // =====================================================\n // Shared utilities\n // =====================================================\n\n function parseEventModifiers(name) {\n const parts = name.split('|');\n const eventName = parts[0];\n const modifiers = parts.slice(1).filter(m => EVENT_MODIFIERS.has(m));\n return { eventName, modifiers };\n }\n\n function isBindingAttribute(name) {\n return name.startsWith('bind:');\n }\n\n function getBindingProperty(name) {\n return name.slice(5);\n }\n\n function isComponent(name) {\n return /^[A-Z]/.test(name);\n }\n\n function isVoidHtmlElement(name) {\n return VOID_HTML_ELEMENTS.has(String(name).toLowerCase());\n }\n\n function getAttributeValue(value) {\n if (!value) return t.booleanLiteral(true);\n if (t.isJSXExpressionContainer(value)) return value.expression;\n if (t.isStringLiteral(value)) return value;\n return t.stringLiteral(value.value || '');\n }\n\n function normalizeAttrName(attrName) {\n if (attrName === 'className') return 'class';\n if (attrName === 'htmlFor') return 'for';\n return attrName;\n }\n\n // Safely extract attribute name, handling JSXNamespacedName (e.g., client:idle, bind:value)\n function getAttrName(attr) {\n if (t.isJSXNamespacedName(attr.name)) {\n return `${attr.name.namespace.name}:${attr.name.name.name}`;\n }\n return typeof attr.name.name === 'string' ? attr.name.name : String(attr.name.name);\n }\n\n function createEventHandler(handler, modifiers) {\n if (modifiers.length === 0) return handler;\n\n let wrappedHandler = handler;\n\n for (const mod of modifiers) {\n switch (mod) {\n case 'preventDefault':\n wrappedHandler = t.arrowFunctionExpression(\n [t.identifier('e')],\n t.blockStatement([\n t.expressionStatement(\n t.callExpression(\n t.memberExpression(t.identifier('e'), t.identifier('preventDefault')),\n []\n )\n ),\n t.expressionStatement(\n t.callExpression(wrappedHandler, [t.identifier('e')])\n )\n ])\n );\n break;\n\n case 'stopPropagation':\n wrappedHandler = t.arrowFunctionExpression(\n [t.identifier('e')],\n t.blockStatement([\n t.expressionStatement(\n t.callExpression(\n t.memberExpression(t.identifier('e'), t.identifier('stopPropagation')),\n []\n )\n ),\n t.expressionStatement(\n t.callExpression(wrappedHandler, [t.identifier('e')])\n )\n ])\n );\n break;\n\n case 'self':\n wrappedHandler = t.arrowFunctionExpression(\n [t.identifier('e')],\n t.blockStatement([\n t.ifStatement(\n t.binaryExpression(\n '===',\n t.memberExpression(t.identifier('e'), t.identifier('target')),\n t.memberExpression(t.identifier('e'), t.identifier('currentTarget'))\n ),\n t.expressionStatement(\n t.callExpression(wrappedHandler, [t.identifier('e')])\n )\n )\n ])\n );\n break;\n\n case 'once':\n case 'capture':\n case 'passive':\n break;\n }\n }\n\n return wrappedHandler;\n }\n\n // =====================================================\n // Reactivity Detection \u2014 Signal-Aware\n // =====================================================\n\n // Check if an identifier is known to be a signal (from useSignal/signal/computed/useState)\n function isSignalIdentifier(name, signalNames) {\n return signalNames.has(name);\n }\n\n // Collect signal identifiers using Babel's scope analysis.\n // Walks the scope chain from the given path upward, collecting signals\n // defined in each lexical scope (function/block).\n function collectSignalNamesFromScope(path) {\n const signalNames = new Set();\n\n // Helper: extract signal names from a VariableDeclarator node\n function extractFromDeclarator(decl) {\n const init = decl.init;\n if (!init || !t.isCallExpression(init)) return;\n\n const callee = init.callee;\n let calleeName = '';\n if (t.isIdentifier(callee)) {\n calleeName = callee.name;\n } else if (t.isMemberExpression(callee) && t.isIdentifier(callee.property)) {\n calleeName = callee.property.name;\n }\n\n if (SIGNAL_CREATORS.has(calleeName)) {\n const id = decl.id;\n if (t.isIdentifier(id)) {\n signalNames.add(id.name);\n } else if (t.isArrayPattern(id)) {\n for (const el of id.elements) {\n if (t.isIdentifier(el)) signalNames.add(el.name);\n }\n } else if (t.isObjectPattern(id)) {\n for (const prop of id.properties) {\n if (t.isObjectProperty(prop) && t.isIdentifier(prop.value)) {\n signalNames.add(prop.value.name);\n }\n }\n }\n }\n }\n\n // Walk up the scope chain using Babel's scope API\n let scope = path.scope;\n while (scope) {\n // Check all bindings in this scope\n for (const [name, binding] of Object.entries(scope.bindings)) {\n if (binding.path.isVariableDeclarator()) {\n extractFromDeclarator(binding.path.node);\n }\n // Also check function params (destructured props)\n if (binding.path.isIdentifier() || binding.kind === 'param') {\n const fnPath = binding.scope.path;\n if (fnPath && fnPath.node && fnPath.node.params) {\n for (const param of fnPath.node.params) {\n if (t.isObjectPattern(param)) {\n for (const prop of param.properties) {\n if (t.isObjectProperty(prop) && t.isIdentifier(prop.value)) {\n signalNames.add(prop.value.name);\n } else if (t.isRestElement(prop) && t.isIdentifier(prop.argument)) {\n signalNames.add(prop.argument.name);\n }\n }\n }\n }\n }\n }\n }\n scope = scope.parent;\n }\n\n return signalNames;\n }\n\n // Legacy wrapper for backward compat (used in collectSignalNames calls)\n function collectSignalNames(path) {\n return collectSignalNamesFromScope(path);\n }\n\n // Check if a call expression is a safe (non-reactive) global call\n function isSafeGlobalCall(expr) {\n if (!t.isCallExpression(expr)) return false;\n const callee = expr.callee;\n\n // Math.max(), Number.parseInt(), etc.\n if (t.isMemberExpression(callee) && t.isIdentifier(callee.object)) {\n return SAFE_GLOBAL_CALLS.has(callee.object.name);\n }\n\n // parseInt(), isNaN(), etc.\n if (t.isIdentifier(callee)) {\n return SAFE_GLOBAL_CALLS.has(callee.name);\n }\n\n return false;\n }\n\n // Check if an expression's reactivity is uncertain \u2014 e.g., a non-signal function call\n // whose arguments happen to contain signal reads. The function itself may not produce\n // a reactive result, so the compiler wraps it conservatively.\n function isUncertainReactive(expr, signalNames, importedIds) {\n if (!signalNames) return false;\n if (t.isCallExpression(expr)) {\n // Callee is a known signal \u2014 definitely reactive, not uncertain\n if (t.isIdentifier(expr.callee) && isSignalIdentifier(expr.callee.name, signalNames)) {\n return false;\n }\n // Imported identifier called as function \u2014 definitely reactive (not uncertain)\n if (importedIds && t.isIdentifier(expr.callee) && importedIds.has(expr.callee.name) &&\n !SAFE_GLOBAL_CALLS.has(expr.callee.name)) {\n return false;\n }\n // Callee is a member of a known signal \u2014 definitely reactive\n if (t.isMemberExpression(expr.callee) && t.isIdentifier(expr.callee.object) &&\n isSignalIdentifier(expr.callee.object.name, signalNames)) {\n return false;\n }\n // Safe global call (Math.max, etc.) with reactive args \u2014 still deterministic, not uncertain\n if (isSafeGlobalCall(expr)) return false;\n // Unknown function call \u2014 if args are reactive, the wrapping is uncertain\n if (expr.arguments.some(arg => isPotentiallyReactive(arg, signalNames, importedIds))) {\n return true;\n }\n }\n return false;\n }\n\n // Check if an expression is potentially reactive (reads a signal)\n // importedIds: Set of identifiers imported from other modules \u2014 any imported\n // function call is conservatively treated as potentially reactive since the\n // imported binding could be a signal from another file.\n function isPotentiallyReactive(expr, signalNames, importedIds) {\n if (!signalNames) signalNames = new Set();\n\n if (t.isCallExpression(expr)) {\n // If callee is a known signal identifier being called (signal read), it's reactive\n if (t.isIdentifier(expr.callee) && isSignalIdentifier(expr.callee.name, signalNames)) {\n return true;\n }\n // Imported identifier called as a function \u2014 conservatively reactive.\n // Handles: import { count } from './store'; ... {count()} in JSX\n if (importedIds && t.isIdentifier(expr.callee) && importedIds.has(expr.callee.name)) {\n // Exclude known safe globals that happen to also be imported\n if (!SAFE_GLOBAL_CALLS.has(expr.callee.name)) {\n return true;\n }\n }\n // member.call() \u2014 e.g., data(), isLoading()\n if (t.isMemberExpression(expr.callee)) {\n // Check if the object is a signal\n if (t.isIdentifier(expr.callee.object) && isSignalIdentifier(expr.callee.object.name, signalNames)) {\n return true;\n }\n }\n // Safe global calls like Math.max \u2014 only reactive if their args are\n if (isSafeGlobalCall(expr)) {\n return expr.arguments.some(arg => isPotentiallyReactive(arg, signalNames, importedIds));\n }\n // Unknown call \u2014 check if callee or args contain signal reads\n if (t.isIdentifier(expr.callee)) {\n // Could be a function that reads signals internally\n // Be conservative: if it's not a known safe call and not a signal, still check args\n return expr.arguments.some(arg => isPotentiallyReactive(arg, signalNames, importedIds));\n }\n // For any other call expression, check recursively\n return isPotentiallyReactive(expr.callee, signalNames, importedIds) ||\n expr.arguments.some(arg => isPotentiallyReactive(arg, signalNames, importedIds));\n }\n\n if (t.isIdentifier(expr)) {\n return isSignalIdentifier(expr.name, signalNames);\n }\n\n if (t.isMemberExpression(expr)) {\n return isPotentiallyReactive(expr.object, signalNames, importedIds);\n }\n\n if (t.isConditionalExpression(expr)) {\n return isPotentiallyReactive(expr.test, signalNames, importedIds) ||\n isPotentiallyReactive(expr.consequent, signalNames, importedIds) ||\n isPotentiallyReactive(expr.alternate, signalNames, importedIds);\n }\n\n if (t.isBinaryExpression(expr) || t.isLogicalExpression(expr)) {\n return isPotentiallyReactive(expr.left, signalNames, importedIds) ||\n isPotentiallyReactive(expr.right, signalNames, importedIds);\n }\n\n if (t.isUnaryExpression(expr)) {\n return isPotentiallyReactive(expr.argument, signalNames, importedIds);\n }\n\n if (t.isTemplateLiteral(expr)) {\n return expr.expressions.some(e => isPotentiallyReactive(e, signalNames, importedIds));\n }\n\n if (t.isObjectExpression(expr)) {\n return expr.properties.some(prop =>\n t.isObjectProperty(prop) && isPotentiallyReactive(prop.value, signalNames, importedIds)\n );\n }\n\n if (t.isArrayExpression(expr)) {\n return expr.elements.some(el => el && isPotentiallyReactive(el, signalNames, importedIds));\n }\n\n if (t.isArrowFunctionExpression(expr) || t.isFunctionExpression(expr)) {\n // Function expressions are not reactive themselves \u2014 they're callbacks\n return false;\n }\n\n return false;\n }\n\n // =====================================================\n // Fine-Grained Mode (template + insert + effect)\n // =====================================================\n\n // Check if a JSX child is static (no expressions)\n function isStaticChild(child) {\n if (t.isJSXText(child)) return true;\n if (t.isJSXExpressionContainer(child)) return false;\n if (t.isJSXElement(child)) {\n const el = child.openingElement;\n const tagName = el.name.name;\n if (isComponent(tagName)) return false;\n for (const attr of el.attributes) {\n if (t.isJSXSpreadAttribute(attr)) return false;\n const value = attr.value;\n if (t.isJSXExpressionContainer(value)) return false;\n }\n return child.children.every(isStaticChild);\n }\n return false;\n }\n\n // Check if an attribute value is dynamic\n function isDynamicAttr(attr) {\n if (t.isJSXSpreadAttribute(attr)) return true;\n if (!attr.value) return false;\n return t.isJSXExpressionContainer(attr.value);\n }\n\n // Extract static HTML from JSX element for template()\n function extractStaticHTML(node) {\n if (t.isJSXText(node)) {\n const text = node.value.replace(/\\n\\s+/g, ' ').trim();\n return text ? escapeHTML(text) : '';\n }\n\n if (t.isJSXExpressionContainer(node)) {\n if (t.isJSXEmptyExpression(node.expression)) return '';\n return '<!--$-->';\n }\n\n if (!t.isJSXElement(node)) return '';\n\n const el = node.openingElement;\n const tagName = el.name.name;\n\n if (isComponent(tagName)) return '';\n\n let html = `<${tagName}`;\n\n for (const attr of el.attributes) {\n if (t.isJSXSpreadAttribute(attr)) continue;\n const name = getAttrName(attr);\n if (name.startsWith('on') || name.startsWith('bind:') || name.includes('|')) continue;\n\n let domName = name;\n if (name === 'className') domName = 'class';\n if (name === 'htmlFor') domName = 'for';\n\n if (!attr.value) {\n html += ` ${domName}`;\n } else if (t.isStringLiteral(attr.value)) {\n html += ` ${domName}=\"${escapeAttr(attr.value.value)}\"`;\n } else if (t.isJSXExpressionContainer(attr.value)) {\n continue; // Dynamic attr \u2014 set via effect\n }\n }\n\n const selfClosing = node.openingElement.selfClosing;\n if (selfClosing && isVoidHtmlElement(tagName)) {\n html += '>';\n return html;\n }\n\n if (selfClosing) {\n html += `></${tagName}>`;\n return html;\n }\n\n html += '>';\n\n for (const child of node.children) {\n if (t.isJSXText(child)) {\n const text = child.value.replace(/\\n\\s+/g, ' ').trim();\n if (text) html += escapeHTML(text);\n } else if (t.isJSXExpressionContainer(child)) {\n if (!t.isJSXEmptyExpression(child.expression)) {\n html += '<!--$-->';\n }\n } else if (t.isJSXElement(child)) {\n if (isComponent(child.openingElement.name.name)) {\n html += '<!--$-->';\n } else {\n html += extractStaticHTML(child);\n }\n }\n }\n\n html += `</${tagName}>`;\n return html;\n }\n\n function escapeHTML(str) {\n return str.replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;');\n }\n\n function escapeAttr(str) {\n return str.replace(/&/g, '&amp;').replace(/\"/g, '&quot;').replace(/</g, '&lt;').replace(/>/g, '&gt;');\n }\n\n // Analyze JSX tree and generate fine-grained output\n function transformElementFineGrained(path, state) {\n const { node } = path;\n const openingElement = node.openingElement;\n const tagName = openingElement.name.name;\n\n if (isComponent(tagName)) {\n return transformComponentFineGrained(path, state);\n }\n\n // Control flow components (lowercase but special)\n if (tagName === 'For') {\n return transformForFineGrained(path, state);\n }\n if (tagName === 'Show') {\n return transformShowFineGrained(path, state);\n }\n\n const attributes = openingElement.attributes;\n const children = node.children;\n\n // Check if this entire subtree is purely static\n const allChildrenStatic = children.every(isStaticChild);\n const allAttrsStatic = attributes.every(attr => !isDynamicAttr(attr));\n const noEvents = attributes.every(attr => {\n if (t.isJSXSpreadAttribute(attr)) return false;\n const name = getAttrName(attr);\n return !name?.startsWith('on') && !name?.startsWith('bind:');\n });\n\n if (allChildrenStatic && allAttrsStatic && noEvents) {\n // Fully static element \u2014 extract to template, return clone call\n const html = extractStaticHTML(node);\n if (html) {\n const tmplId = getOrCreateTemplate(state, html);\n state.needsTemplate = true;\n return t.callExpression(t.identifier(tmplId), []);\n }\n }\n\n // Mixed static/dynamic element \u2014 extract template, add effects for dynamic parts\n const html = extractStaticHTML(node);\n if (!html) {\n // Template extraction failed \u2014 emit a detailed compile warning and use h() as fallback\n const loc = node.loc;\n const fileName = state.filename || state.file?.opts?.filename || '<unknown>';\n const lineInfo = loc ? `:${loc.start.line}:${loc.start.column}` : '';\n console.warn(\n `[what-compiler] Could not extract template for <${tagName}> at ${fileName}${lineInfo}. ` +\n `Falling back to h() for this element. ` +\n `This element could not be statically analyzed. Consider simplifying the JSX.`\n );\n state.needsH = true;\n return transformElementAsH(path, state);\n }\n\n const tmplId = getOrCreateTemplate(state, html);\n state.needsTemplate = true;\n\n const elId = state.nextVarId();\n\n // Build statements: _el$ = _tmpl$1()\n // NO IIFE wrapping \u2014 statements are inlined into the containing function\n const statements = [\n t.variableDeclaration('const', [\n t.variableDeclarator(t.identifier(elId), t.callExpression(t.identifier(tmplId), []))\n ])\n ];\n\n // Apply dynamic attributes and events\n applyDynamicAttrs(statements, elId, attributes, state);\n\n // Handle dynamic children\n applyDynamicChildren(statements, elId, children, node, state);\n\n // Instead of wrapping in an IIFE, store setup statements for hoisting.\n // The JSXElement visitor will insert them before the enclosing statement.\n if (!state._pendingSetup) state._pendingSetup = [];\n state._pendingSetup.push(...statements);\n return t.identifier(elId);\n }\n\n // Fallback: transform element using h() when template extraction fails\n function transformElementAsH(path, state) {\n const { node } = path;\n const openingElement = node.openingElement;\n const tagName = openingElement.name.name;\n const attributes = openingElement.attributes;\n const children = node.children;\n\n const props = [];\n for (const attr of attributes) {\n if (t.isJSXSpreadAttribute(attr)) continue;\n const attrName = getAttrName(attr);\n const value = getAttributeValue(attr.value);\n let domAttrName = normalizeAttrName(attrName);\n props.push(\n t.objectProperty(\n /^[a-zA-Z_$][a-zA-Z0-9_$]*$/.test(domAttrName)\n ? t.identifier(domAttrName)\n : t.stringLiteral(domAttrName),\n value\n )\n );\n }\n\n const transformedChildren = [];\n for (const child of children) {\n if (t.isJSXText(child)) {\n const text = child.value.replace(/\\n\\s+/g, ' ').trim();\n if (text) transformedChildren.push(t.stringLiteral(text));\n } else if (t.isJSXExpressionContainer(child)) {\n if (!t.isJSXEmptyExpression(child.expression)) {\n transformedChildren.push(child.expression);\n }\n } else if (t.isJSXElement(child)) {\n transformedChildren.push(transformElementFineGrained({ node: child }, state));\n } else if (t.isJSXFragment(child)) {\n transformedChildren.push(transformFragmentFineGrained({ node: child }, state));\n }\n }\n\n const propsExpr = props.length > 0 ? t.objectExpression(props) : t.nullLiteral();\n return t.callExpression(t.identifier('h'), [t.stringLiteral(tagName), propsExpr, ...transformedChildren]);\n }\n\n function applyDynamicAttrs(statements, elId, attributes, state) {\n function buildSetPropCall(propName, valueExpr) {\n state.needsSetProp = true;\n return t.callExpression(t.identifier('_$setProp'), [\n t.identifier(elId),\n t.stringLiteral(propName),\n valueExpr\n ]);\n }\n\n for (const attr of attributes) {\n if (t.isJSXSpreadAttribute(attr)) {\n state.needsSpread = true;\n statements.push(\n t.expressionStatement(\n t.callExpression(t.identifier('_$spread'), [t.identifier(elId), attr.argument])\n )\n );\n continue;\n }\n\n const attrName = getAttrName(attr);\n\n // Ref handling \u2014 assign element to ref object/callback\n if (attrName === 'ref') {\n const refExpr = getAttributeValue(attr.value);\n // Generate: typeof ref === 'function' ? ref(el) : ref.current = el\n statements.push(\n t.expressionStatement(\n t.conditionalExpression(\n t.binaryExpression('===',\n t.unaryExpression('typeof', refExpr),\n t.stringLiteral('function')\n ),\n t.callExpression(t.cloneNode(refExpr), [t.identifier(elId)]),\n t.assignmentExpression('=',\n t.memberExpression(t.cloneNode(refExpr), t.identifier('current')),\n t.identifier(elId)\n )\n )\n )\n );\n continue;\n }\n\n // Event handlers\n if (attrName.startsWith('on') && !attrName.includes('|')) {\n const event = attrName.slice(2).toLowerCase();\n const handler = getAttributeValue(attr.value);\n\n if (DELEGATED_EVENTS.has(event)) {\n // Use event delegation: el.__click = handler\n state.needsDelegation = true;\n if (!state.delegatedEvents) state.delegatedEvents = new Set();\n state.delegatedEvents.add(event);\n statements.push(\n t.expressionStatement(\n t.assignmentExpression('=',\n t.memberExpression(\n t.identifier(elId),\n t.identifier(`__${event}`)\n ),\n handler\n )\n )\n );\n } else {\n // Non-delegated: use per-element addEventListener\n statements.push(\n t.expressionStatement(\n t.callExpression(\n t.memberExpression(t.identifier(elId), t.identifier('addEventListener')),\n [t.stringLiteral(event), handler]\n )\n )\n );\n }\n continue;\n }\n\n // Event with modifiers\n if (attrName.startsWith('on') && attrName.includes('|')) {\n const { eventName, modifiers } = parseEventModifiers(attrName);\n const handler = getAttributeValue(attr.value);\n const wrappedHandler = createEventHandler(handler, modifiers);\n const event = eventName.slice(2).toLowerCase();\n\n const optionMods = modifiers.filter(m => EVENT_OPTION_MODIFIERS.has(m));\n const addEventArgs = [t.stringLiteral(event), wrappedHandler];\n if (optionMods.length > 0) {\n const optsProps = optionMods.map(m =>\n t.objectProperty(t.identifier(m), t.booleanLiteral(true))\n );\n addEventArgs.push(t.objectExpression(optsProps));\n }\n\n statements.push(\n t.expressionStatement(\n t.callExpression(\n t.memberExpression(t.identifier(elId), t.identifier('addEventListener')),\n addEventArgs\n )\n )\n );\n continue;\n }\n\n // Binding\n if (isBindingAttribute(attrName)) {\n const bindProp = getBindingProperty(attrName);\n const signalExpr = attr.value.expression;\n state.needsEffect = true;\n\n if (bindProp === 'value') {\n statements.push(\n t.expressionStatement(\n t.callExpression(t.identifier('_$effect'), [\n t.arrowFunctionExpression([], t.assignmentExpression('=',\n t.memberExpression(t.identifier(elId), t.identifier('value')),\n t.callExpression(t.cloneNode(signalExpr), [])\n ))\n ])\n )\n );\n statements.push(\n t.expressionStatement(\n t.callExpression(\n t.memberExpression(t.identifier(elId), t.identifier('addEventListener')),\n [\n t.stringLiteral('input'),\n t.arrowFunctionExpression(\n [t.identifier('e')],\n t.callExpression(\n t.memberExpression(t.cloneNode(signalExpr), t.identifier('set')),\n [t.memberExpression(\n t.memberExpression(t.identifier('e'), t.identifier('target')),\n t.identifier('value')\n )]\n )\n )\n ]\n )\n )\n );\n } else if (bindProp === 'checked') {\n state.needsEffect = true;\n statements.push(\n t.expressionStatement(\n t.callExpression(t.identifier('_$effect'), [\n t.arrowFunctionExpression([], t.assignmentExpression('=',\n t.memberExpression(t.identifier(elId), t.identifier('checked')),\n t.callExpression(t.cloneNode(signalExpr), [])\n ))\n ])\n )\n );\n statements.push(\n t.expressionStatement(\n t.callExpression(\n t.memberExpression(t.identifier(elId), t.identifier('addEventListener')),\n [\n t.stringLiteral('change'),\n t.arrowFunctionExpression(\n [t.identifier('e')],\n t.callExpression(\n t.memberExpression(t.cloneNode(signalExpr), t.identifier('set')),\n [t.memberExpression(\n t.memberExpression(t.identifier('e'), t.identifier('target')),\n t.identifier('checked')\n )]\n )\n )\n ]\n )\n )\n );\n }\n continue;\n }\n\n // Dynamic attribute (expression)\n if (t.isJSXExpressionContainer(attr.value)) {\n const expr = attr.value.expression;\n const domName = normalizeAttrName(attrName);\n\n if (isPotentiallyReactive(expr, state.signalNames, state.importedIdentifiers)) {\n state.needsEffect = true;\n const effectCall = t.callExpression(t.identifier('_$effect'), [\n t.arrowFunctionExpression([], buildSetPropCall(domName, expr))\n ]);\n // In dev mode, add a leading comment when the effect wrapping is uncertain\n // (non-signal function call whose args happen to contain signal reads)\n if (isUncertainReactive(expr, state.signalNames, state.importedIdentifiers)) {\n t.addComment(effectCall, 'leading',\n ' @what-dev: effect wrapping may be unnecessary \u2014 expression contains a non-signal function call with reactive args ',\n false\n );\n }\n statements.push(t.expressionStatement(effectCall));\n } else {\n // Static expression (no signal calls) \u2014 set once\n statements.push(t.expressionStatement(buildSetPropCall(domName, expr)));\n }\n }\n }\n }\n\n function applyDynamicChildren(statements, elId, children, parentNode, state) {\n // Two-pass approach: first collect all children needing DOM references,\n // then pre-capture markers before any _$insert() calls shift indices.\n // This fixes issue #1: childNodes index shifting with multiple dynamic children.\n\n // --- Pass 1: Scan children and collect entries ---\n const entries = [];\n let childIndex = 0;\n\n for (const child of children) {\n if (t.isJSXText(child)) {\n const text = child.value.replace(/\\n\\s+/g, ' ').trim();\n if (text) childIndex++;\n continue;\n }\n\n if (t.isJSXExpressionContainer(child)) {\n if (t.isJSXEmptyExpression(child.expression)) continue;\n entries.push({ type: 'expression', child, childIndex });\n childIndex++;\n continue;\n }\n\n if (t.isJSXElement(child)) {\n const childTag = child.openingElement.name.name;\n if (isComponent(childTag) || childTag === 'For' || childTag === 'Show') {\n entries.push({ type: 'component', child, childIndex });\n childIndex++;\n } else {\n const hasAnythingDynamic = child.openingElement.attributes.some(isDynamicAttr) ||\n child.openingElement.attributes.some(a => !t.isJSXSpreadAttribute(a) && getAttrName(a)?.startsWith('on')) ||\n !child.children.every(isStaticChild);\n\n entries.push({ type: 'static', child, childIndex, hasAnythingDynamic });\n childIndex++;\n }\n continue;\n }\n\n if (t.isJSXFragment(child)) {\n entries.push({ type: 'fragment', child });\n }\n }\n\n // --- Pre-capture marker references if needed ---\n // When there are multiple entries needing DOM refs and at least one _$insert(),\n // capture all markers upfront to avoid index shifting after DOM mutations.\n const entriesNeedingRef = entries.filter(e =>\n e.type === 'expression' || e.type === 'component' ||\n (e.type === 'static' && e.hasAnythingDynamic)\n );\n const hasDynamicInsert = entries.some(e => e.type === 'expression' || e.type === 'component');\n const needsPreCapture = entriesNeedingRef.length >= 2 && hasDynamicInsert;\n\n const markerVars = new Map(); // childIndex \u2192 variable name\n if (needsPreCapture) {\n for (const entry of entriesNeedingRef) {\n const varName = `_m$${entry.childIndex}`;\n // Use a unique name to avoid collisions with element vars\n const markerVar = state.nextVarId();\n markerVars.set(entry.childIndex, markerVar);\n statements.push(\n t.variableDeclaration('const', [\n t.variableDeclarator(\n t.identifier(markerVar),\n buildChildAccess(elId, entry.childIndex)\n )\n ])\n );\n }\n }\n\n // Helper: get a marker reference (pre-captured var or inline access)\n function getMarker(idx) {\n if (markerVars.has(idx)) {\n return t.identifier(markerVars.get(idx));\n }\n return buildChildAccess(elId, idx);\n }\n\n // --- Pass 2: Generate code using stable references ---\n for (const entry of entries) {\n if (entry.type === 'expression') {\n const expr = entry.child.expression;\n const marker = getMarker(entry.childIndex);\n state.needsInsert = true;\n\n if (isPotentiallyReactive(expr, state.signalNames, state.importedIdentifiers)) {\n const insertCall = t.callExpression(t.identifier('_$insert'), [\n t.identifier(elId),\n t.arrowFunctionExpression([], expr),\n marker\n ]);\n if (isUncertainReactive(expr, state.signalNames, state.importedIdentifiers)) {\n t.addComment(insertCall, 'leading',\n ' @what-dev: reactive wrapping may be unnecessary \u2014 expression contains a non-signal function call with reactive args ',\n false\n );\n }\n statements.push(t.expressionStatement(insertCall));\n } else {\n statements.push(\n t.expressionStatement(\n t.callExpression(t.identifier('_$insert'), [\n t.identifier(elId),\n expr,\n marker\n ])\n )\n );\n }\n continue;\n }\n\n if (entry.type === 'component') {\n const transformed = transformElementFineGrained({ node: entry.child }, state);\n const marker = getMarker(entry.childIndex);\n state.needsInsert = true;\n statements.push(\n t.expressionStatement(\n t.callExpression(t.identifier('_$insert'), [\n t.identifier(elId),\n transformed,\n marker\n ])\n )\n );\n continue;\n }\n\n if (entry.type === 'static' && entry.hasAnythingDynamic) {\n // Static child with dynamic content \u2014 get element reference\n let childElRef;\n if (markerVars.has(entry.childIndex)) {\n childElRef = markerVars.get(entry.childIndex);\n } else {\n childElRef = state.nextVarId();\n statements.push(\n t.variableDeclaration('const', [\n t.variableDeclarator(\n t.identifier(childElRef),\n buildChildAccess(elId, entry.childIndex)\n )\n ])\n );\n }\n applyDynamicAttrs(statements, childElRef, entry.child.openingElement.attributes, state);\n applyDynamicChildren(statements, childElRef, entry.child.children, entry.child, state);\n continue;\n }\n\n if (entry.type === 'fragment') {\n for (const fChild of entry.child.children) {\n if (t.isJSXExpressionContainer(fChild) && !t.isJSXEmptyExpression(fChild.expression)) {\n state.needsInsert = true;\n const expr = fChild.expression;\n if (isPotentiallyReactive(expr, state.signalNames, state.importedIdentifiers)) {\n statements.push(\n t.expressionStatement(\n t.callExpression(t.identifier('_$insert'), [\n t.identifier(elId),\n t.arrowFunctionExpression([], expr)\n ])\n )\n );\n } else {\n statements.push(\n t.expressionStatement(\n t.callExpression(t.identifier('_$insert'), [\n t.identifier(elId),\n expr\n ])\n )\n );\n }\n }\n }\n }\n }\n }\n\n function buildChildAccess(elId, index) {\n // Use firstChild/nextSibling chains instead of childNodes[N]\n // This is more robust with whitespace text nodes\n if (index === 0) {\n return t.memberExpression(t.identifier(elId), t.identifier('firstChild'));\n }\n // Chain .nextSibling for subsequent indices\n let expr = t.memberExpression(t.identifier(elId), t.identifier('firstChild'));\n for (let i = 0; i < index; i++) {\n expr = t.memberExpression(expr, t.identifier('nextSibling'));\n }\n return expr;\n }\n\n function transformComponentFineGrained(path, state) {\n const { node } = path;\n const openingElement = node.openingElement;\n const componentName = openingElement.name.name;\n const attributes = openingElement.attributes;\n const children = node.children;\n\n // Check for client: directive (islands)\n let clientDirective = null;\n const filteredAttrs = [];\n\n for (const attr of attributes) {\n if (t.isJSXAttribute(attr)) {\n // Handle both simple names and namespaced names (client:idle)\n let name;\n if (t.isJSXNamespacedName(attr.name)) {\n name = `${attr.name.namespace.name}:${attr.name.name.name}`;\n } else {\n name = attr.name.name;\n }\n if (name && typeof name === 'string' && name.startsWith('client:')) {\n const mode = name.slice(7);\n if (attr.value) {\n clientDirective = { type: mode, value: attr.value.value };\n } else {\n clientDirective = { type: mode };\n }\n continue;\n }\n }\n filteredAttrs.push(attr);\n }\n\n if (clientDirective) {\n state.needsCreateComponent = true;\n state.needsIsland = true;\n\n const islandProps = [\n t.objectProperty(t.identifier('component'), t.identifier(componentName)),\n t.objectProperty(t.identifier('mode'), t.stringLiteral(clientDirective.type)),\n ];\n\n if (clientDirective.value) {\n islandProps.push(\n t.objectProperty(t.identifier('mediaQuery'), t.stringLiteral(clientDirective.value))\n );\n }\n\n for (const attr of filteredAttrs) {\n if (t.isJSXSpreadAttribute(attr)) continue;\n const attrName = getAttrName(attr);\n const value = getAttributeValue(attr.value);\n islandProps.push(t.objectProperty(t.identifier(attrName), value));\n }\n\n return t.callExpression(\n t.identifier('_$createComponent'),\n [t.identifier('Island'), t.objectExpression(islandProps), t.arrayExpression([])]\n );\n }\n\n // Regular component \u2014 use _$createComponent to instantiate, component runs once\n state.needsCreateComponent = true;\n\n const props = [];\n let hasSpread = false;\n let spreadExpr = null;\n\n for (const attr of filteredAttrs) {\n if (t.isJSXSpreadAttribute(attr)) {\n hasSpread = true;\n spreadExpr = attr.argument;\n continue;\n }\n\n const attrName = getAttrName(attr);\n\n // Handle bind: attributes for components\n if (isBindingAttribute(attrName)) {\n const bindProp = getBindingProperty(attrName);\n const signalExpr = attr.value.expression;\n\n if (bindProp === 'value') {\n props.push(\n t.objectProperty(t.identifier('value'), t.callExpression(t.cloneNode(signalExpr), []))\n );\n props.push(\n t.objectProperty(\n t.identifier('onInput'),\n t.arrowFunctionExpression(\n [t.identifier('e')],\n t.callExpression(\n t.memberExpression(t.cloneNode(signalExpr), t.identifier('set')),\n [t.memberExpression(\n t.memberExpression(t.identifier('e'), t.identifier('target')),\n t.identifier('value')\n )]\n )\n )\n )\n );\n } else if (bindProp === 'checked') {\n props.push(\n t.objectProperty(t.identifier('checked'), t.callExpression(t.cloneNode(signalExpr), []))\n );\n props.push(\n t.objectProperty(\n t.identifier('onChange'),\n t.arrowFunctionExpression(\n [t.identifier('e')],\n t.callExpression(\n t.memberExpression(t.cloneNode(signalExpr), t.identifier('set')),\n [t.memberExpression(\n t.memberExpression(t.identifier('e'), t.identifier('target')),\n t.identifier('checked')\n )]\n )\n )\n )\n );\n }\n continue;\n }\n\n // Handle event modifiers on components\n if (attrName.startsWith('on') && attrName.includes('|')) {\n const { eventName, modifiers } = parseEventModifiers(attrName);\n const handler = getAttributeValue(attr.value);\n const wrappedHandler = createEventHandler(handler, modifiers);\n props.push(t.objectProperty(t.identifier(eventName), wrappedHandler));\n continue;\n }\n\n const value = getAttributeValue(attr.value);\n\n props.push(\n t.objectProperty(\n /^[a-zA-Z_$][a-zA-Z0-9_$]*$/.test(attrName)\n ? t.identifier(attrName)\n : t.stringLiteral(attrName),\n value\n )\n );\n }\n\n // Transform children\n const transformedChildren = [];\n for (const child of children) {\n if (t.isJSXText(child)) {\n const text = child.value.replace(/\\n\\s+/g, ' ').trim();\n if (text) transformedChildren.push(t.stringLiteral(text));\n } else if (t.isJSXExpressionContainer(child)) {\n if (!t.isJSXEmptyExpression(child.expression)) {\n transformedChildren.push(child.expression);\n }\n } else if (t.isJSXElement(child)) {\n transformedChildren.push(transformElementFineGrained({ node: child }, state));\n } else if (t.isJSXFragment(child)) {\n transformedChildren.push(transformFragmentFineGrained({ node: child }, state));\n }\n }\n\n let propsExpr;\n if (hasSpread) {\n if (props.length > 0) {\n propsExpr = t.callExpression(\n t.memberExpression(t.identifier('Object'), t.identifier('assign')),\n [t.objectExpression([]), spreadExpr, t.objectExpression(props)]\n );\n } else {\n propsExpr = spreadExpr;\n }\n } else if (props.length > 0) {\n propsExpr = t.objectExpression(props);\n } else {\n propsExpr = t.nullLiteral();\n }\n\n const childrenArray = transformedChildren.length > 0\n ? t.arrayExpression(transformedChildren)\n : t.arrayExpression([]);\n\n return t.callExpression(t.identifier('_$createComponent'), [t.identifier(componentName), propsExpr, childrenArray]);\n }\n\n function transformForFineGrained(path, state) {\n const { node } = path;\n const attributes = node.openingElement.attributes;\n const children = node.children;\n\n // <For each={data}>{(item) => <Row />}</For>\n // \u2192 mapArray(data, (item) => ...)\n let eachExpr = null;\n for (const attr of attributes) {\n if (t.isJSXAttribute(attr) && getAttrName(attr) === 'each') {\n eachExpr = getAttributeValue(attr.value);\n }\n }\n\n if (!eachExpr) {\n console.warn('[what-compiler] <For> element missing \"each\" attribute.');\n state.needsH = true;\n return transformElementAsH(path, state);\n }\n\n let renderFn = null;\n for (const child of children) {\n if (t.isJSXExpressionContainer(child) && !t.isJSXEmptyExpression(child.expression)) {\n renderFn = child.expression;\n break;\n }\n }\n\n if (!renderFn) {\n console.warn('[what-compiler] <For> element missing render function child.');\n state.needsH = true;\n return transformElementAsH(path, state);\n }\n\n state.needsMapArray = true;\n return t.callExpression(t.identifier('_$mapArray'), [eachExpr, renderFn]);\n }\n\n function transformShowFineGrained(path, state) {\n // <Show when={cond}>{content}</Show>\n // Uses _$createComponent(Show, ...) \u2014 Show is a runtime component\n state.needsCreateComponent = true;\n return transformComponentFineGrained(path, state);\n }\n\n function transformFragmentFineGrained(path, state) {\n const { node } = path;\n const children = node.children;\n\n const transformed = [];\n for (const child of children) {\n if (t.isJSXText(child)) {\n const text = child.value.replace(/\\n\\s+/g, ' ').trim();\n if (text) transformed.push(t.stringLiteral(text));\n } else if (t.isJSXExpressionContainer(child)) {\n if (!t.isJSXEmptyExpression(child.expression)) {\n transformed.push(child.expression);\n }\n } else if (t.isJSXElement(child)) {\n transformed.push(transformElementFineGrained({ node: child }, state));\n } else if (t.isJSXFragment(child)) {\n transformed.push(transformFragmentFineGrained({ node: child }, state));\n }\n }\n\n if (transformed.length === 1) return transformed[0];\n return t.arrayExpression(transformed);\n }\n\n // Template deduplication: same HTML string \u2192 same module-level const\n function getOrCreateTemplate(state, html) {\n if (state.templateMap.has(html)) {\n return state.templateMap.get(html);\n }\n const id = `_tmpl$${state.templateCount++}`;\n state.templateMap.set(html, id);\n state.templates.push({ id, html });\n return id;\n }\n\n // =====================================================\n // Plugin entry\n // =====================================================\n\n return {\n name: 'what-jsx-transform',\n\n visitor: {\n Program: {\n enter(path, state) {\n // Fine-grained mode state\n state.needsTemplate = false;\n state.needsInsert = false;\n state.needsEffect = false;\n state.needsMapArray = false;\n state.needsSpread = false;\n state.needsSetProp = false;\n state.needsH = false;\n state.needsCreateComponent = false;\n state.needsFragment = false;\n state.needsIsland = false;\n state.needsDelegation = false;\n state.delegatedEvents = new Set();\n state.templates = [];\n state.templateMap = new Map(); // html \u2192 template id (deduplication)\n state.templateCount = 0;\n state._varCounter = 0;\n state._pendingSetup = [];\n state.nextVarId = () => `_el$${state._varCounter++}`;\n\n // Collect signal names for smart reactivity detection\n state.signalNames = new Set();\n\n // --- Imported Signal Tracking ---\n // Only mark imports as potentially reactive if they come from known\n // reactive sources: what-framework, what-framework/*, relative paths\n // (user stores), or functions matching use*/create* naming conventions.\n // This prevents over-wrapping of utility imports (lodash, etc.).\n state.importedIdentifiers = new Set();\n for (const node of path.node.body) {\n if (t.isImportDeclaration(node)) {\n const source = node.source.value;\n const isReactiveSource =\n source === 'what-framework' ||\n source.startsWith('what-framework/') ||\n source === 'what-core' ||\n source.startsWith('what-core/') ||\n source.startsWith('./') ||\n source.startsWith('../');\n\n for (const spec of node.specifiers) {\n let localName = null;\n if (t.isImportSpecifier(spec) && t.isIdentifier(spec.local)) {\n localName = spec.local.name;\n } else if (t.isImportDefaultSpecifier(spec) && t.isIdentifier(spec.local)) {\n localName = spec.local.name;\n } else if (t.isImportNamespaceSpecifier(spec) && t.isIdentifier(spec.local)) {\n localName = spec.local.name;\n }\n\n if (localName) {\n // Mark as reactive if from a reactive source, or if the name\n // matches use*/create* conventions (hooks/signal creators)\n if (isReactiveSource || /^(use|create)[A-Z]/.test(localName)) {\n state.importedIdentifiers.add(localName);\n }\n }\n }\n }\n }\n\n path.traverse({\n VariableDeclarator(declPath) {\n const init = declPath.node.init;\n if (!init || !t.isCallExpression(init)) return;\n\n const callee = init.callee;\n let calleeName = '';\n if (t.isIdentifier(callee)) {\n calleeName = callee.name;\n } else if (t.isMemberExpression(callee) && t.isIdentifier(callee.property)) {\n calleeName = callee.property.name;\n }\n\n if (SIGNAL_CREATORS.has(calleeName)) {\n const id = declPath.node.id;\n if (t.isIdentifier(id)) {\n state.signalNames.add(id.name);\n } else if (t.isArrayPattern(id)) {\n for (const el of id.elements) {\n if (t.isIdentifier(el)) state.signalNames.add(el.name);\n }\n } else if (t.isObjectPattern(id)) {\n for (const prop of id.properties) {\n if (t.isObjectProperty(prop) && t.isIdentifier(prop.value)) {\n state.signalNames.add(prop.value.name);\n }\n }\n }\n }\n }\n });\n },\n\n exit(path, state) {\n // Insert template declarations at top of program (hoisted to module scope)\n for (const tmpl of state.templates.reverse()) {\n path.unshiftContainer('body',\n t.variableDeclaration('const', [\n t.variableDeclarator(\n t.identifier(tmpl.id),\n t.callExpression(t.identifier('_$template'), [t.stringLiteral(tmpl.html)])\n )\n ])\n );\n }\n\n // Build fine-grained imports\n const fgSpecifiers = [];\n if (state.needsTemplate) {\n fgSpecifiers.push(\n t.importSpecifier(t.identifier('_$template'), t.identifier('template'))\n );\n }\n if (state.needsInsert) {\n fgSpecifiers.push(\n t.importSpecifier(t.identifier('_$insert'), t.identifier('insert'))\n );\n }\n if (state.needsEffect) {\n fgSpecifiers.push(\n t.importSpecifier(t.identifier('_$effect'), t.identifier('effect'))\n );\n }\n if (state.needsMapArray) {\n fgSpecifiers.push(\n t.importSpecifier(t.identifier('_$mapArray'), t.identifier('mapArray'))\n );\n }\n if (state.needsSpread) {\n fgSpecifiers.push(\n t.importSpecifier(t.identifier('_$spread'), t.identifier('spread'))\n );\n }\n if (state.needsSetProp) {\n fgSpecifiers.push(\n t.importSpecifier(t.identifier('_$setProp'), t.identifier('setProp'))\n );\n }\n if (state.needsCreateComponent) {\n fgSpecifiers.push(\n t.importSpecifier(t.identifier('_$createComponent'), t.identifier('_$createComponent'))\n );\n }\n if (state.needsDelegation) {\n fgSpecifiers.push(\n t.importSpecifier(t.identifier('_$delegateEvents'), t.identifier('delegateEvents'))\n );\n }\n\n // Core imports (h/Fragment/Island for components)\n const coreSpecifiers = [];\n if (state.needsH) {\n coreSpecifiers.push(\n t.importSpecifier(t.identifier('h'), t.identifier('h'))\n );\n }\n if (state.needsFragment) {\n coreSpecifiers.push(\n t.importSpecifier(t.identifier('Fragment'), t.identifier('Fragment'))\n );\n }\n if (state.needsIsland) {\n coreSpecifiers.push(\n t.importSpecifier(t.identifier('Island'), t.identifier('Island'))\n );\n }\n\n if (fgSpecifiers.length > 0) {\n let existingRenderImport = null;\n for (const node of path.node.body) {\n if (t.isImportDeclaration(node) && (\n node.source.value === 'what-framework/render' ||\n node.source.value === 'what-core/render'\n )) {\n existingRenderImport = node;\n break;\n }\n }\n\n if (existingRenderImport) {\n const existingNames = new Set(\n existingRenderImport.specifiers\n .filter(s => t.isImportSpecifier(s))\n .map(s => s.imported.name)\n );\n for (const spec of fgSpecifiers) {\n if (!existingNames.has(spec.imported.name)) {\n existingRenderImport.specifiers.push(spec);\n }\n }\n } else {\n path.unshiftContainer('body',\n t.importDeclaration(fgSpecifiers, t.stringLiteral('what-framework/render'))\n );\n }\n }\n\n if (coreSpecifiers.length > 0) {\n addCoreImports(path, t, coreSpecifiers);\n }\n\n // Emit event delegation setup call if any delegated events were used\n if (state.needsDelegation && state.delegatedEvents && state.delegatedEvents.size > 0) {\n const eventArray = t.arrayExpression(\n [...state.delegatedEvents].map(e => t.stringLiteral(e))\n );\n path.pushContainer('body',\n t.expressionStatement(\n t.callExpression(t.identifier('_$delegateEvents'), [eventArray])\n )\n );\n }\n }\n },\n\n JSXElement(path, state) {\n // FIX-1: Use scope-aware signal detection instead of file-global\n state.signalNames = collectSignalNamesFromScope(path);\n state._pendingSetup = [];\n const transformed = transformElementFineGrained(path, state);\n const pending = state._pendingSetup;\n state._pendingSetup = [];\n\n if (pending.length > 0) {\n // Find the enclosing statement to hoist setup before it\n let stmtPath = path;\n while (stmtPath && !stmtPath.isStatement()) {\n stmtPath = stmtPath.parentPath;\n }\n if (stmtPath && stmtPath.isStatement()) {\n // Insert setup statements before the enclosing statement\n for (const stmt of pending) {\n stmtPath.insertBefore(stmt);\n }\n path.replaceWith(transformed);\n } else {\n // Fallback: if we can't find a statement parent, use IIFE\n pending.push(t.returnStatement(transformed));\n path.replaceWith(\n t.callExpression(\n t.arrowFunctionExpression([], t.blockStatement(pending)),\n []\n )\n );\n }\n } else {\n path.replaceWith(transformed);\n }\n },\n\n JSXFragment(path, state) {\n const transformed = transformFragmentFineGrained(path, state);\n path.replaceWith(transformed);\n }\n }\n };\n}\n\nfunction addCoreImports(path, t, coreSpecifiers) {\n let existingImport = null;\n for (const node of path.node.body) {\n if (t.isImportDeclaration(node) && (\n node.source.value === 'what-core' || node.source.value === 'what-framework'\n )) {\n existingImport = node;\n break;\n }\n }\n\n if (existingImport) {\n const existingNames = new Set(\n existingImport.specifiers\n .filter(s => t.isImportSpecifier(s))\n .map(s => s.imported.name)\n );\n for (const spec of coreSpecifiers) {\n if (!existingNames.has(spec.imported.name)) {\n existingImport.specifiers.push(spec);\n }\n }\n } else {\n const importDecl = t.importDeclaration(\n coreSpecifiers,\n t.stringLiteral('what-framework')\n );\n path.unshiftContainer('body', importDecl);\n }\n}\n"],
5
+ "mappings": "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",
6
6
  "names": ["html", "tmplId"]
7
7
  }