Workbox v6.2.0. It includes a number of bug fixes and internal refactoring described below.
Our intention is not to include any breaking changes in v6.2.0, and we've made an effort to maintain the same public interfaces and general behaviors while rewriting some of Workbox's internals.
🎉 What's New?
workbox-build TypeScript rewrite
workbox-build module has been rewritten in TypeScript, following the earlier migration of the
workbox-cli module. (
workbox-webpack-plugin has not yet been migrated.) Developers who use
workbox-build from their own TypeScript code should benefit from the official, accurate type definitions that are now published alongside
Build tool option validation
As part of this change,
workbox-build now uses the TypeScript definitions as the source of truth when validating the configuration options developers provide. Previously,
joi was used for validation with its own set of schema, and this would sometimes lead to mismatches between what the validation logic thought was okay and what the code actually expected. Developers who inspect the validation errors returned by
workbox-build will likely see different error strings in v6.2.0. We expect that moving forward, using TypeScript as the source of truth will lead to fewer of those mismatches.This change applies to both
workbox-webpack-plugin, as well, which rely on
workbox-build under the hood.
IndexedDB code migration
Another refactoring is the replacement of our previous custom IndexedDB logic with the
idb library. No developer-visible changes are expected due to this migration. [#2838]
Multiple controlling events during a page's lifetime
Following this change,
controlling event is fired each time the underlying
oncontrollerchange event happens. Multiple
controlling events can occur on a long-lived page in which multiple service worker updates take place.
isExternal: true will be set when the service worker that takes control is "external," which will always be the case for multiple updates.
controlling would only be fired once per lifetime of the page, which does not match the documented behavior. This change is considered a bug fix to match the expected behavior, and developers are encouraged to test their logic to ensure that they were not relying on the previous, buggy behavior. [#2817]
TrustedScriptURL support in workbox-window
Developers who have opted-in to the CSP policy
"require-trusted-types-for 'script'" and who are using TypeScript would have previously had trouble using
workbox-window. This release improves that support. [#2872]
rangeRequests option in runtimeCaching
rangeRequests: true inside of a
runtimeCaching configuration entry will add the RangeRequestsPlugin to the service worker generated by Workbox's build tools. [#2871]
🐛 What's Fixed?
HandlerDidErrorCallbackParamtype definition is now exported alongside the other relevant TypeScript types. [#2886]
- A bug was fixed that could lead to invalid generated code when quotation chars when
eval-cheap-source-mapis used along with the
portswas missing on the
WorkboxMessageEvent. It's been added, mirroring the value of the underlying
MessageEvent, when used in an
WorkboxEventMaptype definition is now exported alongside the other relevant TypeScript types. [#2870]
Thank you @rockwalrus for contributing a PR [#2857] that went into this release!