diff --git a/.changeset/bright-files-beg.md b/.changeset/bright-files-beg.md new file mode 100644 index 000000000..260a15f5a --- /dev/null +++ b/.changeset/bright-files-beg.md @@ -0,0 +1,6 @@ +--- +'@linaria/babel-preset': patch +'@linaria/vite': patch +--- + +A workaround for an issue with Vite and imports from some third-party libs. diff --git a/packages/babel/src/module.ts b/packages/babel/src/module.ts index 00098579e..f359eccc5 100644 --- a/packages/babel/src/module.ts +++ b/packages/babel/src/module.ts @@ -78,6 +78,14 @@ const NOOP = () => {}; const padStart = (num: number, len: number) => num.toString(10).padStart(len, '0'); +const hasKey = ( + obj: unknown, + key: TKey +): obj is Record => + (typeof obj === 'object' || typeof obj === 'function') && + obj !== null && + key in obj; + class Module { static invalidate: () => void; @@ -197,6 +205,20 @@ class Module { // e.g `exports.hasOwnProperty` value = Reflect.get(target, key); } + + if (value === undefined && this.#lazyValues.has('default')) { + const defaultValue = this.#lazyValues.get('default')?.(); + if (hasKey(defaultValue, key)) { + this.debug( + 'evaluated', + '⚠️ %s has been found in `default`. It indicates that ESM to CJS conversion of %s went wrong.', + key, + filename + ); + value = defaultValue[key]; + } + } + this.debug('evaluated', 'get %s: %o', key, value); return value; },