Workbox v6.2.0 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
The 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 workbox-build
. [#2867]
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-cli
and 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, worbox-window
's 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.
Previously, 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 TrustedScriptURL
s in workbox-window
. This release improves that support. [#2872]
rangeRequests option in runtimeCaching
Setting 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?
workbox-core
- The
HandlerDidErrorCallbackParam
type definition is now exported alongside the other relevant TypeScript types. [#2886]
workbox-webpack-plugin
- A bug was fixed that could lead to invalid generated code when quotation chars when
webpack
'seval-cheap-source-map
is used along with theInjectManifest
plugin. [#2847]
workbox-window
-
ports
was missing on theWorkboxMessageEvent
. It's been added, mirroring the value of the underlyingMessageEvent
, when used in anonmessage
handler. [#2874] -
The
WorkboxEventMap
type definition is now exported alongside the other relevant TypeScript types. [#2870]
Thanks!
Thank you @rockwalrus for contributing a PR [#2857] that went into this release!