[bug]: `algoliasearch` fails with `tsx` and ESM ("type": "module")
I originally reported this over here, but the "skipLibCheck": false was a red herring for my particular issue (still leaving it open in case it's interesting on its own): https://github.com/algolia/algoliasearch-client-javascript/issues/1564
Description
CodeSandbox: https://codesandbox.io/p/devbox/p6w2mq?file=%2F.codesandbox%2Ftasks.json%3A12%2C15
Running algoliasearch with tsx and ESM ("type": "module") will cause a crash
- Create an ESM project with
"type": "module"inpackage.json - Add
algoliasearchandtsx - Create a
index.tsfile with a simple named import ofalgoliasearch - Run
pnpm tsx index.ts - 💥 Observe the crash with the error message below
cc @shortcuts wonder if this is related to https://github.com/algolia/api-clients-automation/pull/3966 (considering that the error is in a .ts file)
Client
Search
Version
5.9.1
Relevant log output
pnpm tsx index.ts
/project/workspace/node_modules/.pnpm/[email protected]/node_modules/algoliasearch/builds/models.ts:19
import { EventType } from '@algolia/client-personalization';
^
SyntaxError: The requested module '@algolia/client-personalization' does not provide an export named 'EventType'
at ModuleJob._instantiate (node:internal/modules/esm/module_job:134:21)
at async ModuleJob.run (node:internal/modules/esm/module_job:217:5)
at async ModuleLoader.import (node:internal/modules/esm/loader:323:24)
at async loadESM (node:internal/process/esm_loader:28:7)
at async handleMainPromise (node:internal/modules/run_main:113:12)
Node.js v20.12.0
~~This is blocking our deploys and reverting to earlier versions doesn't seem to help. Not sure why yet - I didn't even upgrade the algoliasearch package and this just started happening on its own. Doesn't make sense but putting it out there.~~
Reverting to 5.8.1 did fix it for now. (our deploy script wasn't respecting the package.json resolutions field we use locally)
Hey @karlhorky thanks for reporting the issue and the investigation!!
I thought it was due to some treeshaking removing unused deps but leaving type imports, but you are right we shouldn't publish this typescript file!
edit: although I wonder why it worked before 🤔 I'll continue the investigation
It looks like this fix has been released, but I'm still seeing these compiling errors, any suggestions? I'm seeing them in a slightly different place from what's shown here and in issue #1566:
ERROR in ./node_modules/algoliasearch/dist/browser.js 22:19-28
export 'EventType' (imported as 'EventType') was not found in '@algolia/client-personalization' (possible exports: apiClientVersion, personalizationClient)
ERROR in ./node_modules/algoliasearch/dist/browser.js 23:16-22
export 'Status' (imported as 'Status') was not found in '@algolia/client-abtesting' (possible exports: abtestingClient, apiClientVersion)
ERROR in ./node_modules/algoliasearch/dist/browser.js 40:19-28
export 'EventType' (imported as 'EventType') was not found in '@algolia/client-personalization' (possible exports: apiClientVersion, personalizationClient)
ERROR in ./node_modules/algoliasearch/dist/browser.js 41:16-22
export 'Status' (imported as 'Status') was not found in '@algolia/client-abtesting' (possible exports: abtestingClient, apiClientVersion)
ERROR in ./node_modules/algoliasearch/dist/browser.js 140:0-145:2
export 'EventType' (reexported as 'EventType') was not found in '@algolia/client-personalization' (possible exports: apiClientVersion, personalizationClient)
ERROR in ./node_modules/algoliasearch/dist/browser.js 140:0-145:2
export 'Status' (reexported as 'Status') was not found in '@algolia/client-abtesting' (possible exports: abtestingClient, apiClientVersion)```
@shortcuts @Haroenv thanks for the release of [email protected] and [email protected], but as @sgilberg mentioned, the problem is not resolved.
I updated my reproduction to both versions and the same output appears:
CodeSandbox: https://codesandbox.io/p/devbox/algoliasearch-tsx-forked-d9q3d8?file=%2Fpackage.json
$ pnpm tsx index.ts
/project/workspace/node_modules/.pnpm/[email protected]/node_modules/algoliasearch/builds/models.ts:19
import { EventType } from '@algolia/client-personalization';
^
SyntaxError: The requested module '@algolia/client-personalization' does not provide an export named 'EventType'
at ModuleJob._instantiate (node:internal/modules/esm/module_job:134:21)
at async ModuleJob.run (node:internal/modules/esm/module_job:217:5)
at async ModuleLoader.import (node:internal/modules/esm/loader:323:24)
at async loadESM (node:internal/process/esm_loader:28:7)
at async handleMainPromise (node:internal/modules/run_main:113:12)
Node.js v20.12.0
Can this issue be reopened?
Hey @sgilberg @karlhorky I finally found the issue, thanks to your stacktraces and reproduction!
seems like omitting the type in the import statement prevents our bundler from removing the type imports from the outputted files, so you endup with ts definitions in js files.. see https://www.npmjs.com/package/algoliasearch?activeTab=code L53-L54
@shortcuts I can confirm that this is now resolved in [email protected] (via https://github.com/algolia/api-clients-automation/pull/4020 ) 🎉
CodeSandbox: https://codesandbox.io/p/devbox/algoliasearch-tsx-forked-wdgllg?file=%2Fpackage.json
$ pnpm start
> [email protected] start /project/workspace
> tsx index.ts
algoliasearch [Function: algoliasearch]
lets gooooo thanks @karlhorky for testing!