Skip to content

Fix ESM support

Changes made

  • add type: module, to package.json
  • Use tsup for bundle
  • Use pattern for fetch subpath exports
  • Use named import for Jsona, broken when trying to use DS otherwise
  • Rename jest.config to .cjs
  • Workaround for jest tests - use node-fetch v2 for test to workaround ESM compat
  • Move some non-deps to devDeps
  • Lockfile was updated to v3 automatically
  • Remove postpublish script, js files now emit to ./dist

Explanation

I removed rollup but it is quite possible I misunderstood it's purpose, so I apologize if that is the case and can re-add it or refactor the rollup build to work for out needs. I feel more comfortable with tsup right now and it uses rollup under the hood so I figured it shouldn't be too different.

These changes have been tested with npx publint and npx @arethetypeswrong/cli, which still reports an issue about the CJS version of the bundle "Masquerading as ESM" (see https://github.com/arethetypeswrong/arethetypeswrong.github.io/blob/main/docs/problems/FalseESM.md for the full explanation). Even when emitting both d.mts and d.ts files, I could not fix all of the lint warnings, but at least this version of the bundle works using Next 13's app router. I also tested the bundle in a vanilla TypeScript create-vite-app.

This should also close https://www.drupal.org/project/drupal_state/issues/3231626 as the compiled js now emits to ./dist

Closes #3231626 Closes #3341130

Merge request reports