Skip to content

fix(modules): skip the __esModule marker when extracting a component - #4148

Merged
kwakayama merged 15 commits into
mainfrom
fix/issue-4087-extract-component
Aug 25, 2026
Merged

fix(modules): skip the __esModule marker when extracting a component#4148
kwakayama merged 15 commits into
mainfrom
fix/issue-4087-extract-component

Conversation

@kojiwakayama

@kojiwakayama kojiwakayama commented Aug 25, 2026

Copy link
Copy Markdown
Contributor

Description

extractComponent fell back to the first key of the module namespace when there was no default export:

const firstKey = Object.keys(moduleObj)[0];
const component = moduleObj.default ?? (firstKey ? moduleObj[firstKey] : undefined);

For a transpiled CommonJS namespace shaped { __esModule: true, Named }, moduleObj.default is undefined and firstKey is "__esModule", so the extracted "component" was the boolean true. That is what many transpilers emit for a module with only named exports, so it is not an exotic input.

true is truthy, so the existing guard let it through. The caller received true where it expected a component and rendering failed later and further from the cause. extractComponent is reached from both loadComponentFromSource and the SSR module loader, so this is on the core render path.

Fix

Select the first export that can actually be rendered: a function (function or class component) or an object, which is what React.memo, React.forwardRef and React.lazy produce. The __esModule marker is skipped explicitly.

Two consequences worth calling out:

  • A default export that is not renderable no longer shadows a usable named export. Previously { default: true, Named } returned true; it now returns Named.
  • A namespace carrying only the marker now throws the existing No component exported from <file> error at the point of extraction, which is where the diagnosis belongs.

Object exports are deliberately accepted rather than restricted to functions, because rejecting them would break memo/forwardRef/lazy components.

Related Issue(s)

Fixes #4087

Type of Change

  • Bug fix (non-breaking change that fixes an issue)

Checklist

  • I have added tests that prove my fix is effective

Testing

Five cases added to extract-component.test.ts, all verified to fail before the fix and pass after: the __esModule fallback, a marker-only namespace, primitive exports declared ahead of the component, a memo-shaped object component, and an unrenderable default alongside a usable named export. The four pre-existing tests are unchanged and still pass.

deno task test:file src/modules/react-loader/     27 passed (267 steps) | 0 failed
deno check src/modules/index.ts
deno task lint:anti-slop / lint:test-semantic-dispositions / lint:module-boundaries
deno fmt --check, deno lint

Summary by CodeRabbit

  • Bug Fixes
    • Improved component detection when modules export multiple values.
    • Ignores internal and non-renderable exports when selecting a component.
    • Supports React built-in component types and safely handles problematic getters.
    • Preserves default exports and uses suitable object exports as a fallback.

extractComponent fell back to the first key of the module namespace when
there was no default export:

  const firstKey = Object.keys(moduleObj)[0];
  const component = moduleObj.default ?? moduleObj[firstKey];

For a transpiled CommonJS namespace shaped { __esModule: true, Named },
moduleObj.default is undefined and firstKey is "__esModule", so the
extracted "component" was the boolean true. That shape is what many
transpilers emit for a module with only named exports, so it is not an
exotic input. The caller then received true where it expected a
component, and rendering failed later and further from the cause than it
would have if extraction had reported no component at all.

Select the first export that can actually be rendered instead: a function
(function or class component) or an object, which is what React.memo,
React.forwardRef and React.lazy produce. The __esModule marker is skipped
explicitly, and a default export that is not renderable no longer shadows
a usable named export. A namespace carrying only the marker now throws
the existing "No component exported" error at the point of extraction.

Claude-Session: https://claude.ai/code/session_01TNbcqUy64goaeCShfjbRmf

@greptile-apps greptile-apps Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

kojiwakayama has reached the 50-credit limit for trial accounts. To continue receiving code reviews, upgrade your plan.

@coderabbitai

coderabbitai Bot commented Aug 25, 2026

Copy link
Copy Markdown

Review Change Stack

Warning

Review limit reached

Next included review available in 7 minutes.

View limit details

Limit details: You’ve used the included review currently available.

You've used all free OSS reviews for now. Wait for the free limit to reset to keep reviewing this public repository.

Learn how review limits work.

Review configuration:

⚙️ Run configuration

Configuration used: Repository UI

Review profile: CHILL

Plan: Pro Plus

Run ID: e6423360-d4c2-4f1a-b458-e16c7654de7f

📥 Commits

Reviewing files that changed from the base of the PR and between b207689 and 8eef848.

📒 Files selected for processing (2)
  • src/modules/react-loader/extract-component.test.ts
  • src/modules/react-loader/extract-component.ts
📝 Walkthrough

Walkthrough

extractComponent now scans module exports for renderable component values. It skips module markers, primitive data, rendered nodes, invalid symbols, and failing getters while supporting React component objects and built-in types. New tests cover these cases and default-export behavior.

Changes

Component export resolution

Layer / File(s) Summary
Export classification and ordered scanning
src/modules/react-loader/extract-component.ts, src/modules/react-loader/extract-component.test.ts
The resolver scans exports in declaration order, skips default and __esModule, handles throwing getters, accepts functions and supported React values, and excludes rendered-node tags and unrelated symbols.
Default export resolution
src/modules/react-loader/extract-component.ts, src/modules/react-loader/extract-component.test.ts
The resolver uses a defined default export first and preserves non-renderable defaults for caller validation.

Estimated code review effort: 3 (Moderate) | ~20 minutes

Merge Risk: 🔵 Low · up to b2076

Component extraction may select a standalone React memo marker instead of a valid component, causing rendering to fail when that export appears first. The PR is otherwise mergeable with explicit owner awareness and a targeted allowlist fix.

Suggested reviewers: kwakayama

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title clearly identifies the primary fix: skipping the __esModule marker during component extraction. It is concise and related to issue #4087.
Linked Issues check ✅ Passed The changes satisfy issue #4087. Named-export fallback skips __esModule and non-component values, supports valid React component types, preserves default-export behavior, and returns the existing erro…
Out of Scope Changes check ✅ Passed The changes remain within the component-extraction objective. Additional React type recognition, getter handling, export-order scanning, and tests support correct named-export selection and do not int…
Docstring Coverage ✅ Passed Docstring coverage is 80.00% which is sufficient. The required threshold is 80.00%. Docstring coverage is scoped to functions touched by this diff. Analyzed 5 functions across 2 files.
Full details: Linked Issues check

Explanation

The changes satisfy issue #4087. Named-export fallback skips __esModule and non-component values, supports valid React component types, preserves default-export behavior, and returns the existing error for marker-only namespaces. Tests cover the required cases.

Full details: Out of Scope Changes check

Explanation

The changes remain within the component-extraction objective. Additional React type recognition, getter handling, export-order scanning, and tests support correct named-export selection and do not introduce unrelated functionality.

✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch fix/issue-4087-extract-component

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@github-actions

github-actions Bot commented Aug 25, 2026

Copy link
Copy Markdown

📦 Client bundle boundary

Entrypoint Modules Source size Server leaks
src/index.client.ts 330 1972 KiB ✅ 0

A server module in a client graph aborts hydration in the browser. New leaks fail CI; known leaks are tracked in scripts/lint/client-bundle-baseline.json to burn down.

Validating the default export as well as the named fallback went beyond
the reported defect and cost a better diagnostic. A layout whose default
export is not a component, as in "export default 42", previously reached
build-app-route-renderer's own check and failed with "Invalid layout
component", which names the slot that is wrong. Rejecting it inside
extractComponent replaced that with the vaguer "No component exported".

Restore the original default handling and keep the change to the named
fallback, which is what the issue is about. Callers that need a stricter
contract already enforce it and can report it better than this function
can.

Also prefer a function over an object when scanning named exports, so a
module pairing data with a component, such as an App Router page
exporting metadata, resolves to the component rather than the metadata.
Objects are still accepted, since React.memo, React.forwardRef and
React.lazy all produce one.

Claude-Session: https://claude.ai/code/session_01TNbcqUy64goaeCShfjbRmf

@greptile-apps greptile-apps Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

kojiwakayama has reached the 50-credit limit for trial accounts. To continue receiving code reviews, upgrade your plan.

@kojiwakayama

Copy link
Copy Markdown
Contributor Author

Pushed e61e1d9ec after CI caught a real regression in coverage shard 8/8.

What broke: src/server/build-app-route-renderer.test.ts — "fails when an existing layout is invalid". Its fixture is export default 42;. My first commit validated the default export as well as the named fallback, so extractComponent threw No component exported from .../layout.tsx before the layout loader could reach its own typeof Layout !== "function" check and raise the far more useful Invalid layout component.

Why the test was right and I was wrong: that file does export a default. The failure is "your default export is not a component", and only the caller knows the export is a layout. Moving the rejection earlier traded a specific message for a vaguer one.

Fix: default-export handling is now byte-for-byte the original moduleObj.default ?? <fallback>. The change is confined to the named-export fallback, which is what #4087 actually reports. Callers that want a stricter contract already enforce one and can name the slot.

One deliberate addition while narrowing: the fallback now prefers a function export over an object one, so a module exporting App Router metadata alongside its component resolves to the component. Objects remain acceptable because memo/forwardRef/lazy produce them.

Verified locally across the surface the shard covers: src/server/ src/rendering/ src/modules/ all pass, including the layout test that failed.

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: e61e1d9ec7

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread src/modules/react-loader/extract-component.ts Outdated
Preferring every function over every object was wrong for a module
exporting an object component ahead of a helper, such as
{ Page: React.memo(...), loader() {} }: the helper won and the memo page
was discarded.

React.memo, React.forwardRef and React.lazy all tag their result with a
well-known symbol on $$typeof, which distinguishes a component object
from an ordinary data export. Functions and tagged objects are therefore
both treated as components and declaration order decides between them,
which restores the original contract for the memo case while still
skipping an App Router metadata object.

An untagged object is neither obviously a component nor obviously not
one, so it stays as a last resort. A module whose only candidate is an
unrecognised component shape still resolves rather than reporting no
component at all.

Claude-Session: https://claude.ai/code/session_01TNbcqUy64goaeCShfjbRmf

@greptile-apps greptile-apps Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

kojiwakayama has reached the 50-credit limit for trial accounts. To continue receiving code reviews, upgrade your plan.

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 09adc73a11

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread src/modules/react-loader/extract-component.ts Outdated
A React element carries a symbol-valued $$typeof too, so accepting any
tagged object let an exported element win over the module's actual
component. An element is a rendered node rather than a component type, so
the caller then handed React something it cannot instantiate.

Match the tags memo, forwardRef and lazy produce instead. An object
carrying any other tag falls to the untagged last-resort tier rather than
being selected outright, so an unfamiliar shape still degrades safely.

Claude-Session: https://claude.ai/code/session_01TNbcqUy64goaeCShfjbRmf

@greptile-apps greptile-apps Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

kojiwakayama has reached the 50-credit limit for trial accounts. To continue receiving code reviews, upgrade your plan.

@chatgpt-codex-connector

Copy link
Copy Markdown

You have reached your Codex usage limits for security reviews. Please try again later.

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 5357c2cb6f

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread src/modules/react-loader/extract-component.ts Outdated
Comment thread src/modules/react-loader/extract-component.ts Outdated
Context and provider objects are renderable React types, so leaving them
out of the tag set let a later helper function win against one. Added to
the whitelist.

Object.entries also materialised every export value before the loop ran.
A module namespace exposes its exports as getters, and one can throw
while a usable component sits further along, as happens with a circular
import. Read one key at a time and skip a value that throws.

Claude-Session: https://claude.ai/code/session_01TNbcqUy64goaeCShfjbRmf

@greptile-apps greptile-apps Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

kojiwakayama has reached the 50-credit limit for trial accounts. To continue receiving code reviews, upgrade your plan.

@chatgpt-codex-connector

Copy link
Copy Markdown

You have reached your Codex usage limits for security reviews. Please try again later.

@github-actions

Copy link
Copy Markdown

@codex review

@greptile-apps greptile-apps Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

kojiwakayama has reached the 50-credit limit for trial accounts. To continue receiving code reviews, upgrade your plan.

@kwakayama

Copy link
Copy Markdown
Contributor

@codex review\n\nPlease review the exact current head cbe30c4721f976a54b0d9a0d35ea693ef792fa39. All existing review threads are resolved. Please report any remaining findings against this SHA.

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: cbe30c4721

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread src/modules/react-loader/extract-component.ts Outdated
Fragment, Suspense, StrictMode and Profiler are registered symbols rather
than functions or tagged objects, so a layout that is one lost to a
helper declared after it. Verified against react@19.2.4: all four report
typeof "symbol" with react.* registry keys.

Match on the registry key rather than an enumerated list, so types React
adds later are covered without the list silently falling behind. A bare
symbol cannot be an element, so this does not reopen the element case
REACT_COMPONENT_TAGS exists to exclude, and an unrelated registered
symbol such as Symbol.for("app.marker") is still skipped.

Claude-Session: https://claude.ai/code/session_01TNbcqUy64goaeCShfjbRmf

@greptile-apps greptile-apps Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

kojiwakayama has reached the 50-credit limit for trial accounts. To continue receiving code reviews, upgrade your plan.

@chatgpt-codex-connector

Copy link
Copy Markdown

You have reached your Codex usage limits for security reviews. Please try again later.

@kwakayama

Copy link
Copy Markdown
Contributor

@codex review

Please review the exact current head . All existing review threads are resolved. Please report any remaining findings against this SHA.

1 similar comment
@kwakayama

Copy link
Copy Markdown
Contributor

@codex review

Please review the exact current head . All existing review threads are resolved. Please report any remaining findings against this SHA.

extractComponent returns React.ComponentType, so comparing its result
against an object-literal fixture such as a memo, provider, consumer or
client reference fails assertEquals' parameter inference. The suite runs
with --no-check, so this only surfaced in lint:test-typecheck.

Widen the call result to unknown at the seven affected assertions, which
is what the symbol and non-renderable-default cases already do.

Claude-Session: https://claude.ai/code/session_01TNbcqUy64goaeCShfjbRmf

@greptile-apps greptile-apps Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

kojiwakayama has reached the 50-credit limit for trial accounts. To continue receiving code reviews, upgrade your plan.

@chatgpt-codex-connector

Copy link
Copy Markdown

You have reached your Codex usage limits for security reviews. Please try again later.

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 1bc0b7808b

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread src/modules/react-loader/extract-component.ts Outdated
Accepting any react.* symbol was wrong. react-is re-exports Memo,
ForwardRef, Lazy, ContextProvider and ContextConsumer as the bare symbols
React uses for $$typeof, and React rejects every one of them as an
element type. A module re-exporting one would have had it selected over
its actual component.

Verified rather than reasoned: react-is 19.2.4's own isValidElementType
returns true for react.fragment, react.suspense, react.strict_mode and
react.profiler standing alone, and false for react.memo,
react.forward_ref, react.lazy, react.context, react.provider,
react.consumer, react.client.reference, react.element and react.portal.
Enumerating react@19.2.4's symbol-valued exports gives Fragment,
Suspense, StrictMode, Profiler and Activity.

Activity is included on React's export rather than react-is, which
reports false for it and has evidently not caught up with the 19.2
feature.

The bare-symbol check is therefore a whitelist while the object check
stays an exclusion list. Component wrappers are open-ended, so excluding
rendered nodes is what stays true there; bare element types are a closed
set, and everything else is a marker.

Claude-Session: https://claude.ai/code/session_01TNbcqUy64goaeCShfjbRmf

@greptile-apps greptile-apps Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

kojiwakayama has reached the 50-credit limit for trial accounts. To continue receiving code reviews, upgrade your plan.

@chatgpt-codex-connector

Copy link
Copy Markdown

You have reached your Codex usage limits for security reviews. Please try again later.

@greptile-apps greptile-apps Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

kojiwakayama has reached the 50-credit limit for trial accounts. To continue receiving code reviews, upgrade your plan.

@kwakayama

Copy link
Copy Markdown
Contributor

@codex review

Please review the exact current head 962a5cae053e915cda8815a468dcf9bfd36fd37b. All existing review threads are resolved. Please report any remaining findings against this SHA.

@kwakayama kwakayama left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Reviewed exact head 962a5ca. React object classification now rejects invalid tagged fallbacks while retaining React 18 Flight references and React 19 SuspenseList; focused and integration suites plus verify:quick pass.

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 962a5cae05

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread src/modules/react-loader/extract-component.test.ts Outdated
Comment thread src/modules/react-loader/extract-component.ts Fixed
tests (bun) failed on "keeps a React 18 Flight module reference declared
before a helper". The failing assertion was isValidElementType18(Page)
for a react.module.reference tag, which is gated behind a build-time
feature flag in react-is, so Bun resolves a build that answers
differently from the one Deno and Node resolve. The assertion
characterised react-is rather than this module, and it could not hold
across the runtimes CI covers.

Remove both react-is imports and the three assertions that only restated
library behaviour. What each test exists to check, that extractComponent
selects the component and keeps declaration order, is unchanged, and
SuspenseList is now the bare symbol it always was. The lockfile is back
to matching main.

That also closes the standing review request to keep these fixtures
dependency-free.

Also replace two `value === null` guards with truthiness checks. CodeQL
flags the comparison after the typeof narrowing; the behaviour for null,
undefined and every non-object primitive is unchanged.

Claude-Session: https://claude.ai/code/session_01TNbcqUy64goaeCShfjbRmf
Comment thread src/modules/react-loader/extract-component.ts Fixed

@greptile-apps greptile-apps Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

kojiwakayama has reached the 50-credit limit for trial accounts. To continue receiving code reviews, upgrade your plan.

@chatgpt-codex-connector

Copy link
Copy Markdown

You have reached your Codex usage limits for security reviews. Please try again later.

@sonarqubecloud

Copy link
Copy Markdown

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 8eef848a76

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread src/modules/react-loader/extract-component.ts
@kojiwakayama

Copy link
Copy Markdown
Contributor Author

@codex review

Please re-review the exact current head 8eef848a76c222beec6ff14dbb714d37c85d7adb. The sole exact-head finding was checked against the pinned React 19.2.4 exports and isValidElementType, documented as a false positive, and its thread is resolved. Please report any remaining findings against this SHA.

@kojiwakayama
kojiwakayama enabled auto-merge August 25, 2026 16:48
@chatgpt-codex-connector

Copy link
Copy Markdown

Codex Review: Didn't find any major issues. Can't wait for the next one!

Reviewed commit: 8eef848a76

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

@kojiwakayama
kojiwakayama added this pull request to the merge queue Aug 25, 2026
@github-merge-queue
github-merge-queue Bot removed this pull request from the merge queue due to no response for status checks Aug 25, 2026
@kwakayama
kwakayama added this pull request to the merge queue Aug 25, 2026
Merged via the queue into main with commit 9ef4339 Aug 25, 2026
57 of 59 checks passed
@kwakayama
kwakayama deleted the fix/issue-4087-extract-component branch August 25, 2026 20:56
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

extractComponent returns the boolean true for a CommonJS namespace whose first key is __esModule

3 participants