diff --git a/.changeset/green-roses-flow.md b/.changeset/green-roses-flow.md new file mode 100644 index 00000000000..f98e28bbbb4 --- /dev/null +++ b/.changeset/green-roses-flow.md @@ -0,0 +1,5 @@ +--- +"@apollo/client": patch +--- + +Added `exports` field to `package.json` for better ESM interop diff --git a/config/entryPoints.js b/config/entryPoints.js index cad194d61aa..1d72d348ea4 100644 --- a/config/entryPoints.js +++ b/config/entryPoints.js @@ -51,6 +51,10 @@ exports.map = function map(callback, context) { return entryPoints.map(callback, context); }; +exports.reduce = function (callback, context) { + return entryPoints.reduce(callback, context); +}; + const path = require("path").posix; exports.check = function (id, parentId) { diff --git a/config/prepareDist.js b/config/prepareDist.js index b0a4a1d2bd8..b6621247723 100644 --- a/config/prepareDist.js +++ b/config/prepareDist.js @@ -38,6 +38,27 @@ delete packageJson.scripts; delete packageJson.bundlesize; delete packageJson.engines; +packageJson.exports = { + ".": { + types: packageJson.types, + import: packageJson.module, + require: packageJson.main, + }, + "./package.json": { + default: "./package.json", + }, + ...entryPoints.reduce((acc, { dirs, bundleName = dirs[dirs.length - 1] }) => { + if (!dirs.length) return acc; + let path = `./${dirs.join("/")}`; + acc[path] = { + types: `${path}/index.d.ts`, + import: `${path}/index.js`, + require: `${path}/${bundleName}.cjs`, + }; + return acc; + }, {}), +} + // The root package.json points to the CJS/ESM source in "dist", to support // on-going package development (e.g. running tests, supporting npm link, etc.). // When publishing from "dist" however, we need to update the package.json