Major
-
Updated Node.js support to
^18.15.0 || >=20.4.0. -
Updated the
@apollo/clientpeer dependency to^3.8.0. -
Updated the
extract-filesdependency to v13.-
React Native is no longer supported out of the box.
The class
ReactNativeFileis no longer exported, or matched by the functionisExtractableFile.This class was bloating non React Native environments with an extra module, increasing bundle sizes when building and adding an extra step to ESM loading waterfalls in browsers.
It’s the responsibility of Facebook to adhere to web standards and implement spec-complaint
Blob,File, andFormDataglobals in the React Native environment.To migrate, React Native projects that are unable to use the standard globals can manually implement a class
ReactNativeFileand match it with a custom functionisReactNativeFilefor use with the functioncreateUploadLinkoptionisExtractableFile. -
“Plain” objects in the GraphQL operation that aren’t
Objectinstances (e.g.Object.create(null)) are now also deep cloned when searching for extractable files.
-
-
Updated dev dependencies, some of which require newer Node.js versions than previously supported.
-
Use the Node.js test runner API and remove the dev dependency
test-director. -
Refactored tests to use the standard
AbortController,AbortSignal,File,FormData, andResponseAPIs available in modern Node.js and removed the dev dependenciesabort-controller,formdata-node, andnode-fetch. -
Public modules are now individually listed in the package
filesandexportsfields. -
Removed the package main index module; deep imports must be used. To migrate:
- import { - createUploadLink, - formDataAppendFile, - isExtractableFile - } from "apollo-upload-client"; + import createUploadLink from "apollo-upload-client/createUploadLink.mjs"; + import formDataAppendFile from "apollo-upload-client/formDataAppendFile.mjs"; + import isExtractableFile from "apollo-upload-client/isExtractableFile.mjs";
-
Shortened public module deep import paths, removing the
/public/. To migrate:- import createUploadLink from "apollo-upload-client/public/createUploadLink.js"; + import createUploadLink from "apollo-upload-client/createUploadLink.mjs"; - import formDataAppendFile from "apollo-upload-client/public/formDataAppendFile.js"; + import formDataAppendFile from "apollo-upload-client/formDataAppendFile.mjs"; - import isExtractableFile from "apollo-upload-client/public/isExtractableFile.js"; + import isExtractableFile from "apollo-upload-client/isExtractableFile.mjs";
-
The API is now ESM in
.mjsfiles instead of CJS in.jsfiles, accessible viaimportbut notrequire. -
Implemented TypeScript types via JSDoc comments.
Types published in
@types/apollo-upload-clientshould no longer be used.Projects must configure TypeScript to use types from the ECMAScript modules that have a
// @ts-checkcomment:compilerOptions.allowJsshould betrue.compilerOptions.maxNodeModuleJsDepthshould be reasonably large, e.g.10.compilerOptions.moduleshould be"node16"or"nodenext".
-
Internally, use the function
selectHttpOptionsAndBodyInternalthat was added in@apollo/clientv3.5.5.
Minor
- Added a new option
printfor the functioncreateUploadLink, to customize how the GraphQL query or mutation AST prints to a string for transport. It works like the same option forHttpLink.
Patch
- Updated dev dependencies.
- Simplified dev dependencies and config for ESLint.
- Integrated the ESLint plugin
eslint-plugin-optimal-modules. - Check TypeScript types via a new package
typesscript. - Removed the
jsdoc-mddev dependency and the related package scripts, replacing the readme “API” section with a manually written “Exports” section. - Updated the
package.jsonfieldrepositoryto conform to new npm requirements. - Updated GitHub Actions CI config:
- The workflow still triggers on push, but no longer on pull request.
- The workflow can now be manually triggered.
- Run tests with Node.js v18, v20, v21.
- Updated
actions/checkoutto v4. - Updated
actions/setup-nodeto v3.
- Use the
node:URL scheme for Node.js builtin module imports. - Reorganized the test file structure.
- In tests, for objects with the property
headersthat as of@apollo/clientv3.7.0 is a null-prototype object, use the assertiondeepEqualinstead ofdeepStrictEqual. - Tweaked code for type safety.
- Updated documentation, including link URLs.
- Refactored example code in the readme.
- Removed the readme badges.