Releases: jaydenseric/graphql-react
Version 20.0.0
Major
- Updated the
react-waterfall-render
dependency to v5.
Patch
- Updated the
extract-files
dependency to v13. - Updated dev dependencies.
- Use the
node:
URL scheme for Node.js builtin module imports in tests. - Updated ESLint config.
- Replaced TypeScript
Record
types with index signatures. - Added missing readme “Installation” section import map instructions for
is-plain-obj
. - Added Browserslist links to the readme.
- Tweaked the readme.
- Fixed broken links in the readme.
- Fixed a broken link in the v13.0.0 changelog entry.
Version 19.0.0
Major
- Updated Node.js support to
^14.17.0 || ^16.0.0 || >= 18.0.0
.
Patch
- Updated the
react
peer dependency to16.14 - 18
. - Removed the redundant
react-dom
peer dependency. - Updated dependencies.
- Removed the
@testing-library/react-hooks
dev dependency and rewrote React hook tests usingreact-test-renderer
, a new test utility functioncreateReactTestRenderer
, and a custom React componentReactHookTest
. - Removed the
fetch-blob
andformdata-node
dev dependencies. Instead,File
andFormData
are imported fromnode-fetch
. - Updated
jsconfig.json
:- Set
compilerOptions.maxNodeModuleJsDepth
to10
. - Set
compilerOptions.module
tonodenext
.
- Set
- Updated GitHub Actions CI config:
- Run tests with Node.js v14, v16, v18.
- Removed the now redundant
not IE > 0
from the Browserslist query. - Updated
react-dom/server
imports in tests to suit React v18. - Fixed the
fetchGraphQL
test with the globalfetch
API unavailable for new versions of Node.js that have thefetch
global. - Use
globalThis
instead ofglobal
in tests. - Use
ReactTestRenderer
instead ofReactDOMServer.renderToStaticMarkup
in some React context related tests. - Removed some unnecessary JSDoc comments in tests.
- Fixed some JSDoc links.
- Revamped the readme:
- Removed the badges.
- Updated the “Examples” section to reflect the
graphql-react
examples repo migration from Node.js, Next.js, and Vercel to Deno, Ruck, and Fly.io. - Added information about Deno, import maps, TypeScript config, and optimal JavaScript module design.
Version 18.0.0
Major
- Renamed the type
FetchGraphQLResultErrors
toFetchGraphQLResultError
infetchGraphQL.mjs
.
Minor
- Added the new type
FetchGraphQLResultErrorLoading
tofetchGraphQL.mjs
containing the GraphQL result error types related to loading that are generated on the client, not the GraphQL server.
Patch
- Updated dev dependencies.
- Simplified dev dependencies and config for ESLint.
- Updated GitHub Actions CI config.
- Fixed issues with GraphQL result related types from
types.mjs
. - Improved various JSDoc descriptions.
- Improved the types relating to the
Deferred
class used in tests.
Version 17.0.0
Major
- Updated the
extract-files
dependency. - Updated the
react-waterfall-render
dependency. - Implemented TypeScript types via JSDoc comments, fixing #6.
Patch
- Updated dev dependencies.
- Sorted the contents of the package
files
andexports
fields. - Removed the
jsdoc-md
dev dependency and the packagedocs-update
anddocs-check
scripts, replacing the readme “API” section with a manually written “Exports” section. - Check TypeScript types via a new package
types
script. - Replaced the
formdata-node
dev dependency withformdata-polyfill
andfetch-blob
. - Updated GraphQL spec URLs in JSDoc and regular comments.
- Readme tweaks.
- Added a
license.md
MIT License file, fixing #54.
Version 16.0.0
Major
- Updated Node.js support to
^12.22.0 || ^14.17.0 || >= 16.0.0
. - Updated dependencies, some of which require newer Node.js versions than previously supported.
- Public modules are now individually listed in the package
files
andexports
fields. - Removed
./package
from the packageexports
field; the fullpackage.json
filename must be used in arequire
path. - Removed the package main index module; deep imports must be used.
- Shortened public module deep import paths, removing the
/public/
. - The API is now ESM in
.mjs
files instead of CJS in.js
files, accessible viaimport
but notrequire
. - Switched back to using
React.createElement
instead of the the new React JSX runtime.
Patch
- Also run GitHub Actions CI with Node.js v17.
- Simplified package scripts.
- Removed the
isobject
dependency. - Refactored the
useCacheEntryPrunePrevention
React hook to avoid theReact.useCallback
React hook. - Avoid named imports from
react
andreact-dom
as they’re not proper Node.js ESM. - Removed conditionality on the Node.js global
process.env.NODE_ENV
. - Configured polyfilled globals in ESLint config for
eslint-plugin-compat
. - Fixed JSDoc grammar typos.
- Reorganized the test file structure.
- Corrected a test name.
- Test the bundle sizes for public modules individually.
- Use a new
assertBundleSize
function to assert module bundle size in tests:- Failure message contains details about the bundle size and how much the limit was exceeded.
- Errors when the surplus is greater than 25% of the limit, suggesting the limit should be reduced.
- Resolves the minified bundle and its gzipped size for debugging in tests.
- Configured Prettier option
singleQuote
to the default,false
. - Documentation tweaks.
Version 15.0.0
Major
- Updated the
extract-files
dependency to v11. This dependency is used by the functionfetchOptionsGraphQL
.
Patch
- Updated dev dependencies.
- Renamed imports in the test index module.
- Amended the changelog entries for v11.0.0, v11.0.2, and v14.0.0.
Version 14.0.0
Major
- Updated Node.js support to
^12.20 || >= 14.13
. - Updated dependencies, some of which require newer Node.js versions than were previously supported.
- Replaced the the
package.json
exports
field public subpath folder mapping (deprecated by Node.js) with a subpath pattern. Deeprequire
paths withingraphql-react/public/
must now include the.js
file extension. - The tests are now ESM in
.mjs
files instead of CJS in.js
files.
Patch
- Updated GitHub Actions CI config to run tests with Node.js v12, v14, v16.
- Simplified JSDoc related package scripts now that
jsdoc-md
v10+ automatically generates a Prettier formatted readme. - Added a package
test:jsdoc
script that checks the readme API docs are up to date with the source JSDoc. - Test the bundle size using
esbuild
instead ofwebpack
anddisposable-directory
. - Increased the documented bundle size to “< 4 kB” to match that of
esbuild
instead ofwebpack
. - Use the correct
kB
symbol instead ofKB
wherever bundle size is mentioned in the package description and readme. - Don’t destructure
require
fromreact
to slightly improve theesbuild
bundle size. - Use the
.js
file extension in internalrequire
paths. - Updated the example Next.js app URL in the readme.
- Readme tweaks.
- The file
changelog.md
is no longer published.
Version 13.0.0
Major
-
Updated Node.js version support to
^12.0.0 || >= 13.7.0
. -
Stopped supporting Internet Explorer.
-
Updated the
react
andreact-dom
peer dependencies to16.14 - 17
. -
Use the new JSX runtime.
-
Reorganized the file structure and replaced the entire API:
- Removed all of the previous public exports for the old API:
GraphQL
GraphQLContext
GraphQLProvider
hashObject
reportCacheErrors
useGraphQL
ssr
- Added public exports for the new API, available as named imports from the index and as deep imports from
graphql-react/public/
.js
CJS modules:Cache
CacheContext
HYDRATION_TIME_MS
HydrationTimeStampContext
Loading
LoadingCacheValue
LoadingContext
Provider
cacheDelete
cacheEntryDelete
cacheEntryPrune
cacheEntrySet
cacheEntryStale
cachePrune
cacheStale
fetchGraphQL
fetchOptionsGraphQL
useAutoAbortLoad
useAutoLoad
useCache
useCacheEntry
useCacheEntryPrunePrevention
useLoadGraphQL
useLoadOnDelete
useLoadOnMount
useLoadOnStale
useLoading
useLoadingEntry
useWaterfallLoad
- The function
waterfallRender
fromreact-waterfall-render
should now be used for server side rendering, fixing #57. - In addition to the previously required globals, consider polyfilling:
The API for the cache (centered around a
Cache
instance provided in theCacheContext
React context) is separated from the API for loading (centered around aLoading
instance provided in theLoadingContext
React context). Although the new loading system should work well for everyone, it could be totally avoided in an app that implements a custom alternative.Instead of using the old
mitt
dependency for events, theCache
andLoading
classes extend the nativeEventTarget
global available in modern browsers and Node.js; a powerful and familiar event system with zero bundle size cost.The new API avoids class methods that add to bundle size regardless if they are used, in favor of focused functions that can be imported to process instances as arguments. For example, one route in your app may only render a cache entry, while another may have a form that makes the global cache stale. If the functionality to make the cache stale was a
Cache
instance method, it would increase the bundle size for the entire app, whereas a function imported in the second route will only grow the bundle size for that route. Features can be added to the API over time without growing everyone’s bundles.There are now functions that can be imported to directly manipulate the cache. The functions
cacheEntrySet
andcacheEntryDelete
update a particular entry, andcacheDelete
deletes all cache.There is a new approach for dealing with stale cache. The function
cacheEntryStale
signals a single entry is stale, andcacheStale
does the same for all entries (useful after a mutation). These functions don’t actually update cache entries; they simply dispatch cache entry stale events and it’s up to components to listen for this event and reload the cache entry in response, typically via theuseLoadOnStale
React hook.Cache entries that are not relevant to the current view can now be pruned on demand using the functions
cacheEntryPrune
for a single entry, orcachePrune
for all entries, fixing #55. These functions work by dispatching cache entry prune events on theCache
instance, and for each event not cancelled by a listener withevent.preventDefault()
, the cache entry is deleted. TheuseCacheEntryPrunePrevention
React hook can be used to automatically cancel pruning of a cache entry used in a component.Cache keys are now manually defined instead of automatically derived from
fetch
options hashes, fixing #56. This is easier to understand, is faster to render, and results in a smaller bundle size without the oldfnv1a
dependency for hashing.Instead of one
useGraphQL
React hook with complex options that all add to a component’s bundle size regardless if they are used, there are now several more focused React hooks that can be composed to do exactly the work required, fixing #53.The React hooks can be composed with custom ones to load and cache any type of data, not just GraphQL, using any method, not just
fetch
.The new loading system provides the ability to abort loading at any time, implemented using the native
AbortController
global available in modern browsers and Node.js, fixing #24. Many of the new React hooks leverage this for features such as automatically aborting loading a cache entry when the component loading it unmounts. The new API makes it trivially easy to build features as auto-suggest search inputs that abort the last loading on new input, or page queries that abort loading if the user abandons the route.While the new API may seem to have an intimidating number of public exports, the average Next.js app that queries and renders data from a GraphQL API will only use a few. For inspiration, see the readme “Examples” section.
- Removed all of the previous public exports for the old API:
-
Published modules now contain JSDoc comments, which might affect TypeScript projects.
Patch
- Updated dependencies.
- Removed Babel and related dependencies and config.
- Updated GitHub Actions CI config:
- Updated
actions/checkout
to v2. - Updated
actions/setup-node
to v2. - Don’t specify the
CI
environment variable as it’s set by default.
- Updated
- Stop using
hard-rejection
to detect unhandledPromise
rejections in tests, as Node.js v15+ does this natively. - Test the bundle size manually using
webpack
v5, and removesize-limit
related dev dependencies, config, and scripts. - Tweaked the package description.
- Readme edits, including:
- Updated the Relay and Apollo URLs.
- Mention polyfilling any required globals in the “Setup” section.
- Removed the “Usage” section.
- Tweaked links in the “Support” section.
- Removed the “Apollo comparison” section.
Version 12.0.1
Version 12.0.0
Major
-
Concurrent GraphQL operations with the same cache key no longer share the first request.
-
The
GraphQL
instance propertyoperations
type has changed:- object<GraphQLCacheKey, Promise<GraphQLCacheValue>> + object<GraphQLCacheKey, Array<Promise<GraphQLCacheValue>>>
Patch
- Updated dev dependencies.
- Improved the test utility
promisifyEvent
function. - Test the the
GraphQL
instance methodoperate
optionreloadOnLoad
in isolation. - Test better the order of the
GraphQL
instance methodoperate
triggered events. - Refactored the
GraphQL
instance methodoperate
to eliminate theGraphQL
private instance methodfetch
and reduce the chance of race conditions in consumer code. - Reduced the number of promises created by the
GraphQL
instance methodoperate
when thereloadOnLoad
andreloadOnLoad
options arefalse
. - Added a code example for how to await all loading GraphQL operations.
- Used consistent JSDoc types for promises that resolve
void
. - Tweaked JSDoc.
- Tweaked changelog entries.