Uh oh!
There was an error while loading. Please reload this page.
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🧩 Analysis chain
🏁 Script executed:
Repository: TanStack/ai
Length of output: 553
🌐 Web query:
What does the tsup shims option do for ESM bundles with dynamic require calls?💡 Result:
The
shimsoption intsupis designed to provide compatibility polyfills when building code that assumes the presence of Node.js-specific global variables or module system features in formats where they are not natively available [1][2]. Specifically, it injects code to supportdirnameandfilenamein ESM bundles (which natively only provideimport.meta.url) and providesimport.meta.urlin CJS bundles [1][2]. While theshimsoption is intended to bridge these gaps, it is not a comprehensive solution for "dynamic require" errors in ESM bundles [3][4]. 1. Purpose of Shims: When enabled (shims: true),tsupautomatically injects polyfills viaesbuild'sinjectconfiguration [1]. These polyfills definedirnameandfilenameusingnode:pathandnode:urlutilities within ESM [1]. 2. Limitations with Dynamic Require: Enablingshimsdoes not automatically provide a globalrequirefunction in ESM [5]. If your code performs dynamicrequire()calls (a CJS-specific feature), it will fail in an ESM environment because ESM does not natively supportrequire[3][4]. 3. Recommended Workarounds: - Manual Shim Injection: To support dynamicrequirein ESM, developers must often manually create arequirefunction usingcreateRequirefrom thenode:modulepackage [5][3]. - Configuration Pattern: A common approach involves usingtsup'sinjectoption to point to a custom shim file that definesglobalThis.require = createRequire(import.meta.url)[5]. Alternatively, some developers use thebanneroption to prepend this definition to the generated ESM output [3]. In summary, theshimsoption handles specific variable compatibility (dirname/filename) but does not resolve dynamicrequirelimitations in ESM [1][2]. Resolving dynamicrequirecalls typically requires manual injection of acreateRequirepolyfill [5][3].Citations:
Fix
tsup shimsexplanation/mechanism:shims: trueusually doesn’t providecreateRequirefor ESM dynamicrequire()packages/ai-mcp/tsup.bin.config.tscomments claimshims: true“inject[s] createRequire” so CJSrequire()calls fromjson-schema-to-typescriptwork in the ESM bundle, buttsup’sshimsoption is primarily for ESM/Node global compatibility (e.g.,dirname/filename) and is not generally a solution for ESM “Dynamic require” failures. To address that crash, usetsup’sinject/bannerto define arequireviacreateRequire(import.meta.url), and update the inline comments to match the actual mechanism.🤖 Prompt for AI Agents