diff --git a/.changeset/ts-optimizer-captured-prop-tags.md b/.changeset/ts-optimizer-captured-prop-tags.md new file mode 100644 index 00000000000..1080a42e29b --- /dev/null +++ b/.changeset/ts-optimizer-captured-prop-tags.md @@ -0,0 +1,5 @@ +--- +'@qwik.dev/core': patch +--- + +fix: the TypeScript optimizer now resolves destructured props used as JSX tags inside `$` callbacks, like `onClick$={() => render()}` diff --git a/.changeset/ts-optimizer-destructured-prop-tags.md b/.changeset/ts-optimizer-destructured-prop-tags.md new file mode 100644 index 00000000000..8633b45da5f --- /dev/null +++ b/.changeset/ts-optimizer-destructured-prop-tags.md @@ -0,0 +1,5 @@ +--- +'@qwik.dev/core': patch +--- + +fix: the TypeScript optimizer no longer fails when a destructured prop with a default or a string key is used as a JSX tag diff --git a/.ruler/skills/qwik-optimizer-development/SKILL.md b/.ruler/skills/qwik-optimizer-development/SKILL.md index 2270051f407..434191aaced 100644 --- a/.ruler/skills/qwik-optimizer-development/SKILL.md +++ b/.ruler/skills/qwik-optimizer-development/SKILL.md @@ -87,6 +87,10 @@ starting with `[a-z]` is an intrinsic element, while ``, `<_Foo>` and the o (or `isNonReferenceIdentifier`) whether a `JSXIdentifier` reads a binding, and `isHtmlElement` whether a tag is intrinsic. +A pass that rewrites reads of a binding must rewrite its JSX tag reads too. A tag holds only a +member chain, so a read with a default, a quoted key or a conditional waits for the JSX transform: +return it as `DeferredTagReads` and apply `resolveDeferredTagReads` (`rewrite/raw-props.ts`) after it. + ## Worker pool changes The transform worker pool (`packages/ts-optimizer/src/worker-pool.ts`) never starts real workers diff --git a/packages/optimizer/core/src/snapshots/qwik_core__test__captured_props_as_jsx_tags.snap b/packages/optimizer/core/src/snapshots/qwik_core__test__captured_props_as_jsx_tags.snap new file mode 100644 index 00000000000..5311448754d --- /dev/null +++ b/packages/optimizer/core/src/snapshots/qwik_core__test__captured_props_as_jsx_tags.snap @@ -0,0 +1,200 @@ +--- +source: packages/optimizer/core/src/test.rs +expression: output +--- +==INPUT== + + +import { component$ } from '@qwik.dev/core'; +import { Fallback, fallback, render } from './x'; + +export const Cmp = component$(({ Model = Fallback }: { Model?: any }) => { + return