Skip to content

Releases: jaydenseric/graphql-react

Version 20.0.0

29 Aug 10:57
Compare
Choose a tag to compare

Major

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

05 Aug 01:00
Compare
Choose a tag to compare

Major

  • Updated Node.js support to ^14.17.0 || ^16.0.0 || >= 18.0.0.

Patch

  • Updated the react peer dependency to 16.14 - 18.
  • Removed the redundant react-dom peer dependency.
  • Updated dependencies.
  • Removed the @testing-library/react-hooks dev dependency and rewrote React hook tests using react-test-renderer, a new test utility function createReactTestRenderer, and a custom React component ReactHookTest.
  • Removed the fetch-blob and formdata-node dev dependencies. Instead, File and FormData are imported from node-fetch.
  • Updated jsconfig.json:
    • Set compilerOptions.maxNodeModuleJsDepth to 10.
    • Set compilerOptions.module to nodenext.
  • 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 global fetch API unavailable for new versions of Node.js that have the fetch global.
  • Use globalThis instead of global in tests.
  • Use ReactTestRenderer instead of ReactDOMServer.renderToStaticMarkup in some React context related tests.
  • Removed some unnecessary JSDoc comments in tests.
  • Fixed some JSDoc links.
  • Revamped the readme:

Version 18.0.0

01 Apr 05:42
Compare
Choose a tag to compare

Major

  • Renamed the type FetchGraphQLResultErrors to FetchGraphQLResultError in fetchGraphQL.mjs.

Minor

  • Added the new type FetchGraphQLResultErrorLoading to fetchGraphQL.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

17 Jan 04:32
Compare
Choose a tag to compare

Major

Patch

  • Updated dev dependencies.
  • Sorted the contents of the package files and exports fields.
  • Removed the jsdoc-md dev dependency and the package docs-update and docs-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 with formdata-polyfill and fetch-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

27 Nov 11:51
Compare
Choose a tag to compare

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 and exports fields.
  • Removed ./package from the package exports field; the full package.json filename must be used in a require 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 via import but not require.
  • 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 the React.useCallback React hook.
  • Avoid named imports from react and react-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

11 Jun 12:01
Compare
Choose a tag to compare

Major

  • Updated the extract-files dependency to v11. This dependency is used by the function fetchOptionsGraphQL.

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

19 May 05:55
Compare
Choose a tag to compare

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. Deep require paths within graphql-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 of webpack and disposable-directory.
  • Increased the documented bundle size to “< 4 kB” to match that of esbuild instead of webpack.
  • Use the correct kB symbol instead of KB wherever bundle size is mentioned in the package description and readme.
  • Don’t destructure require from react to slightly improve the esbuild bundle size.
  • Use the .js file extension in internal require 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

19 Apr 07:03
Compare
Choose a tag to compare

Major

  • Updated Node.js version support to ^12.0.0 || >= 13.7.0.

  • Stopped supporting Internet Explorer.

  • Updated the react and react-dom peer dependencies to 16.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 from react-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 the CacheContext React context) is separated from the API for loading (centered around a Loading instance provided in the LoadingContext 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, the Cache and Loading classes extend the native EventTarget 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 and cacheEntryDelete update a particular entry, and cacheDelete deletes all cache.

    There is a new approach for dealing with stale cache. The function cacheEntryStale signals a single entry is stale, and cacheStale 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 the useLoadOnStale 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, or cachePrune for all entries, fixing #55. These functions work by dispatching cache entry prune events on the Cache instance, and for each event not cancelled by a listener with event.preventDefault(), the cache entry is deleted. The useCacheEntryPrunePrevention 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 old fnv1a 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.

  • 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.
  • Stop using hard-rejection to detect unhandled Promise rejections in tests, as Node.js v15+ does this natively.
  • Test the bundle size manually using webpack v5, and remove size-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

27 Oct 23:30
Compare
Choose a tag to compare

Patch

  • Updated the react and react-dom peer dependencies to 16.8 - 17.
  • Updated dependencies.
  • Also run GitHub Actions with Node.js v15.

Version 12.0.0

06 Oct 08:50
Compare
Choose a tag to compare

Major

  • Concurrent GraphQL operations with the same cache key no longer share the first request.

  • The GraphQL instance property operations 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 method operate option reloadOnLoad in isolation.
  • Test better the order of the GraphQL instance method operate triggered events.
  • Refactored the GraphQL instance method operate to eliminate the GraphQL private instance method fetch and reduce the chance of race conditions in consumer code.
  • Reduced the number of promises created by the GraphQL instance method operate when the reloadOnLoad and reloadOnLoad options are false.
  • 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.