gitextract_424215io/ ├── .gitattributes ├── .github/ │ ├── ISSUE_TEMPLATE.md │ ├── PULL_REQUEST_TEMPLATE.md │ └── workflows/ │ ├── pull-request.yml │ └── scorecards-analysis.yml ├── .gitignore ├── .husky/ │ ├── .gitignore │ ├── pre-commit │ └── pre-push ├── .ncurc.js ├── .nvmrc ├── .prettierignore ├── CODE_OF_CONDUCT.md ├── CONTRIBUTING.md ├── LICENSE ├── README.md ├── cdn-details.json ├── demos/ │ ├── README.md │ └── src/ │ ├── workbox-background-sync-demo/ │ │ ├── index.html │ │ ├── package.json │ │ ├── public/ │ │ │ └── example.txt │ │ ├── sw.js │ │ └── updateServer.js │ ├── workbox-broadcast-update-demo/ │ │ ├── index.html │ │ ├── package.json │ │ ├── sw.js │ │ └── updateServer.js │ ├── workbox-cacheable-response/ │ │ ├── index.html │ │ ├── package.json │ │ ├── server.js │ │ └── sw.js │ ├── workbox-core/ │ │ ├── index.html │ │ ├── package.json │ │ ├── sw.js │ │ └── updateServer.js │ ├── workbox-expiration/ │ │ ├── index.html │ │ ├── package.json │ │ ├── sw.js │ │ └── updateServer.js │ ├── workbox-google-analytics/ │ │ ├── index.html │ │ ├── package.json │ │ ├── sw.js │ │ └── updateServer.js │ ├── workbox-navigation-preload/ │ │ ├── index.html │ │ ├── package.json │ │ ├── sw.js │ │ └── updateServer.js │ ├── workbox-precaching/ │ │ ├── index.html │ │ ├── package.json │ │ ├── public/ │ │ │ ├── hello-world.1234.txt │ │ │ ├── hello-world.5678.txt │ │ │ └── test-file.txt │ │ ├── sw-1.js │ │ ├── sw-2.js │ │ └── updateServer.js │ ├── workbox-range-requests/ │ │ ├── index.html │ │ ├── package.json │ │ ├── sw.js │ │ └── updateServer.js │ ├── workbox-routing/ │ │ ├── index.html │ │ ├── package.json │ │ ├── sw.js │ │ └── updateServer.js │ ├── workbox-strategies/ │ │ ├── index.html │ │ ├── public/ │ │ │ ├── cache-first.txt │ │ │ ├── network-first.txt │ │ │ ├── network-only.txt │ │ │ └── stale-while-revalidate.txt │ │ ├── sw.js │ │ └── updateServer.js │ ├── workbox-streams/ │ │ ├── index.html │ │ ├── package.json │ │ ├── server.js │ │ └── sw.js │ ├── workbox-sw/ │ │ ├── README.md │ │ ├── index.html │ │ ├── package.json │ │ ├── sw.js │ │ └── updateServer.js │ └── workbox-window/ │ ├── index.html │ ├── package.json │ ├── sw.js │ └── updateServer.js ├── gulp-tasks/ │ ├── analyze-properties.js │ ├── build-node-packages.js │ ├── build-packages.js │ ├── build-sw-packages.js │ ├── build-window-packages.js │ ├── build.js │ ├── docs.js │ ├── lint.js │ ├── publish-cdn.js │ ├── publish-github.js │ ├── publish-glitch.js │ ├── publish-lerna.js │ ├── publish.js │ ├── test-integration.js │ ├── test-node.js │ ├── test-server.js │ ├── test.js │ ├── transpile-typescript.js │ └── utils/ │ ├── analyse-properties.js │ ├── cdn-helper.js │ ├── constants.js │ ├── get-packages.js │ ├── github-helper.js │ ├── node-projects-babel.config.json │ ├── output-filename-to-package-map.js │ ├── package-runner.js │ ├── pkg-path-to-name.js │ ├── publish-helpers.js │ ├── rollup-helper.js │ ├── version-module.js │ └── versioned-cdn-url.js ├── gulpfile.js ├── infra/ │ ├── pr-bot/ │ │ └── aggregate-size-plugin.js │ ├── templates/ │ │ └── reference-docs/ │ │ └── jsdoc/ │ │ ├── lang/ │ │ │ └── en.yaml │ │ ├── lib/ │ │ │ └── publishjob.js │ │ ├── publish.js │ │ ├── static/ │ │ │ └── jsdoc.css │ │ └── views/ │ │ ├── augments.hbs │ │ ├── classes-links.hbs │ │ ├── details-table-row.hbs │ │ ├── details-table.hbs │ │ ├── implements.hbs │ │ ├── index-all.hbs │ │ ├── index.hbs │ │ ├── layout.hbs │ │ ├── params.hbs │ │ ├── properties.hbs │ │ ├── see.hbs │ │ ├── signature.hbs │ │ ├── symbol-content.hbs │ │ ├── symbol-detail.hbs │ │ ├── symbol-header.hbs │ │ ├── symbol-index-section.hbs │ │ ├── symbol-index.hbs │ │ ├── symbol-labels.hbs │ │ ├── symbol-overview.hbs │ │ └── toc-yaml.hbs │ ├── testing/ │ │ ├── activate-and-control.js │ │ ├── activate-sw-safari.js │ │ ├── auto-stub-logger.mjs │ │ ├── clean-sw.js │ │ ├── comlink/ │ │ │ ├── node-interface.js │ │ │ ├── sw-interface.js │ │ │ └── window-interface.js │ │ ├── confirm-directory-contains.js │ │ ├── env-it.js │ │ ├── expectError.js │ │ ├── generate-variant-tests.js │ │ ├── helpers/ │ │ │ ├── compareResponses.mjs │ │ │ ├── extendable-event-utils.mjs │ │ │ ├── generateOpaqueResponse.mjs │ │ │ ├── generateUniqueResponse.mjs │ │ │ └── sleep.mjs │ │ ├── server/ │ │ │ ├── cross-origin-server.js │ │ │ ├── index.js │ │ │ ├── request-counter.js │ │ │ ├── routes/ │ │ │ │ ├── build-file.js │ │ │ │ ├── comlink.js │ │ │ │ ├── integration-html.js │ │ │ │ ├── sw-bundle.js │ │ │ │ ├── templates-update.js │ │ │ │ ├── templates.js │ │ │ │ ├── test-sw.js │ │ │ │ ├── test-window.js │ │ │ │ ├── unique-etag.js │ │ │ │ └── unique-value.js │ │ │ ├── static/ │ │ │ │ └── integration.html │ │ │ ├── template-data.js │ │ │ └── templates/ │ │ │ ├── integration.html.njk │ │ │ ├── sw-clients-claim.js.njk │ │ │ ├── sw-no-skip-waiting.js.njk │ │ │ ├── sw-script-version.js.njk │ │ │ ├── sw-skip-waiting-deferred.js.njk │ │ │ ├── sw-skip-waiting-on-message.js.njk │ │ │ ├── sw-skip-waiting.js.njk │ │ │ ├── sw-window-ready.js.njk │ │ │ ├── test-sw-runner.js.njk │ │ │ ├── test-sw.html.njk │ │ │ └── test-window.html.njk │ │ ├── validator/ │ │ │ └── service-worker-runtime.js │ │ ├── wait-until.js │ │ ├── webdriver/ │ │ │ ├── IframeManager.js │ │ │ ├── executeAsyncAndCatch.js │ │ │ ├── runUnitTests.js │ │ │ ├── unregisterAllSWs.js │ │ │ └── windowLoaded.js │ │ └── webpack-build-check.js │ ├── type-overrides.d.ts │ └── utils/ │ ├── AsyncDebounce.js │ └── log-helper.js ├── javascript.eslintrc.js ├── jsdoc.conf ├── lerna.json ├── package.json ├── packages/ │ ├── workbox-background-sync/ │ │ ├── README.md │ │ ├── package.json │ │ ├── src/ │ │ │ ├── BackgroundSyncPlugin.ts │ │ │ ├── Queue.ts │ │ │ ├── QueueStore.ts │ │ │ ├── StorableRequest.ts │ │ │ ├── _version.ts │ │ │ ├── index.ts │ │ │ └── lib/ │ │ │ ├── QueueDb.ts │ │ │ ├── QueueStore.ts │ │ │ └── StorableRequest.ts │ │ └── tsconfig.json │ ├── workbox-broadcast-update/ │ │ ├── README.md │ │ ├── package.json │ │ ├── src/ │ │ │ ├── BroadcastCacheUpdate.ts │ │ │ ├── BroadcastUpdatePlugin.ts │ │ │ ├── _version.ts │ │ │ ├── index.ts │ │ │ ├── responsesAreSame.ts │ │ │ └── utils/ │ │ │ └── constants.ts │ │ └── tsconfig.json │ ├── workbox-build/ │ │ ├── .ncurc.js │ │ ├── README.md │ │ ├── package.json │ │ ├── src/ │ │ │ ├── _types.js │ │ │ ├── cdn-details.json │ │ │ ├── generate-sw.ts │ │ │ ├── get-manifest.ts │ │ │ ├── index.ts │ │ │ ├── inject-manifest.ts │ │ │ ├── lib/ │ │ │ │ ├── additional-manifest-entries-transform.ts │ │ │ │ ├── bundle.ts │ │ │ │ ├── cdn-utils.ts │ │ │ │ ├── copy-workbox-libraries.ts │ │ │ │ ├── errors.ts │ │ │ │ ├── escape-regexp.ts │ │ │ │ ├── get-composite-details.ts │ │ │ │ ├── get-file-details.ts │ │ │ │ ├── get-file-hash.ts │ │ │ │ ├── get-file-manifest-entries.ts │ │ │ │ ├── get-file-size.ts │ │ │ │ ├── get-source-map-url.ts │ │ │ │ ├── get-string-details.ts │ │ │ │ ├── get-string-hash.ts │ │ │ │ ├── maximum-size-transform.ts │ │ │ │ ├── modify-url-prefix-transform.ts │ │ │ │ ├── module-registry.ts │ │ │ │ ├── no-revision-for-urls-matching-transform.ts │ │ │ │ ├── populate-sw-template.ts │ │ │ │ ├── rebase-path.ts │ │ │ │ ├── replace-and-update-source-map.ts │ │ │ │ ├── runtime-caching-converter.ts │ │ │ │ ├── stringify-without-comments.ts │ │ │ │ ├── transform-manifest.ts │ │ │ │ ├── translate-url-to-sourcemap-paths.ts │ │ │ │ ├── validate-options.ts │ │ │ │ └── write-sw-using-default-template.ts │ │ │ ├── rollup-plugin-off-main-thread.d.ts │ │ │ ├── schema/ │ │ │ │ ├── GenerateSWOptions.json │ │ │ │ ├── GetManifestOptions.json │ │ │ │ ├── InjectManifestOptions.json │ │ │ │ ├── WebpackGenerateSWOptions.json │ │ │ │ └── WebpackInjectManifestOptions.json │ │ │ ├── strip-comments.d.ts │ │ │ ├── templates/ │ │ │ │ └── sw-template.ts │ │ │ └── types.ts │ │ └── tsconfig.json │ ├── workbox-cacheable-response/ │ │ ├── README.md │ │ ├── package.json │ │ ├── src/ │ │ │ ├── CacheableResponse.ts │ │ │ ├── CacheableResponsePlugin.ts │ │ │ ├── _version.ts │ │ │ └── index.ts │ │ └── tsconfig.json │ ├── workbox-cli/ │ │ ├── README.md │ │ ├── package.json │ │ ├── src/ │ │ │ ├── app.ts │ │ │ ├── bin.ts │ │ │ └── lib/ │ │ │ ├── cleanup-stack-trace.ts │ │ │ ├── constants.ts │ │ │ ├── errors.ts │ │ │ ├── help-text.ts │ │ │ ├── logger.ts │ │ │ ├── questions/ │ │ │ │ ├── ask-config-location.ts │ │ │ │ ├── ask-extensions-to-cache.ts │ │ │ │ ├── ask-questions.ts │ │ │ │ ├── ask-root-of-web-app.ts │ │ │ │ ├── ask-start_url-query-params.ts │ │ │ │ ├── ask-sw-dest.ts │ │ │ │ └── ask-sw-src.ts │ │ │ ├── read-config.ts │ │ │ └── run-wizard.ts │ │ └── tsconfig.json │ ├── workbox-core/ │ │ ├── README.md │ │ ├── package.json │ │ ├── src/ │ │ │ ├── _private/ │ │ │ │ ├── Deferred.ts │ │ │ │ ├── WorkboxError.ts │ │ │ │ ├── assert.ts │ │ │ │ ├── cacheMatchIgnoreParams.ts │ │ │ │ ├── cacheNames.ts │ │ │ │ ├── canConstructReadableStream.ts │ │ │ │ ├── canConstructResponseFromBodyStream.ts │ │ │ │ ├── dontWaitFor.ts │ │ │ │ ├── executeQuotaErrorCallbacks.ts │ │ │ │ ├── getFriendlyURL.ts │ │ │ │ ├── logger.ts │ │ │ │ ├── resultingClientExists.ts │ │ │ │ ├── timeout.ts │ │ │ │ └── waitUntil.ts │ │ │ ├── _private.ts │ │ │ ├── _version.ts │ │ │ ├── cacheNames.ts │ │ │ ├── clientsClaim.ts │ │ │ ├── copyResponse.ts │ │ │ ├── index.ts │ │ │ ├── models/ │ │ │ │ ├── messages/ │ │ │ │ │ ├── messageGenerator.ts │ │ │ │ │ └── messages.ts │ │ │ │ ├── pluginEvents.ts │ │ │ │ └── quotaErrorCallbacks.ts │ │ │ ├── registerQuotaErrorCallback.ts │ │ │ ├── setCacheNameDetails.ts │ │ │ ├── skipWaiting.ts │ │ │ ├── types.ts │ │ │ └── utils/ │ │ │ ├── pluginUtils.ts │ │ │ └── welcome.ts │ │ └── tsconfig.json │ ├── workbox-expiration/ │ │ ├── README.md │ │ ├── package.json │ │ ├── src/ │ │ │ ├── CacheExpiration.ts │ │ │ ├── ExpirationPlugin.ts │ │ │ ├── _version.ts │ │ │ ├── index.ts │ │ │ └── models/ │ │ │ └── CacheTimestampsModel.ts │ │ └── tsconfig.json │ ├── workbox-google-analytics/ │ │ ├── README.md │ │ ├── package.json │ │ ├── src/ │ │ │ ├── _version.ts │ │ │ ├── index.ts │ │ │ ├── initialize.ts │ │ │ └── utils/ │ │ │ └── constants.ts │ │ └── tsconfig.json │ ├── workbox-navigation-preload/ │ │ ├── README.md │ │ ├── package.json │ │ ├── src/ │ │ │ ├── _version.ts │ │ │ ├── disable.ts │ │ │ ├── enable.ts │ │ │ ├── index.ts │ │ │ └── isSupported.ts │ │ └── tsconfig.json │ ├── workbox-precaching/ │ │ ├── README.md │ │ ├── package.json │ │ ├── src/ │ │ │ ├── PrecacheController.ts │ │ │ ├── PrecacheFallbackPlugin.ts │ │ │ ├── PrecacheRoute.ts │ │ │ ├── PrecacheStrategy.ts │ │ │ ├── _types.ts │ │ │ ├── _version.ts │ │ │ ├── addPlugins.ts │ │ │ ├── addRoute.ts │ │ │ ├── cleanupOutdatedCaches.ts │ │ │ ├── createHandlerBoundToURL.ts │ │ │ ├── getCacheKeyForURL.ts │ │ │ ├── index.ts │ │ │ ├── matchPrecache.ts │ │ │ ├── precache.ts │ │ │ ├── precacheAndRoute.ts │ │ │ └── utils/ │ │ │ ├── PrecacheCacheKeyPlugin.ts │ │ │ ├── PrecacheInstallReportPlugin.ts │ │ │ ├── createCacheKey.ts │ │ │ ├── deleteOutdatedCaches.ts │ │ │ ├── generateURLVariations.ts │ │ │ ├── getCacheKeyForURL.ts │ │ │ ├── getOrCreatePrecacheController.ts │ │ │ ├── printCleanupDetails.ts │ │ │ ├── printInstallDetails.ts │ │ │ └── removeIgnoredSearchParams.ts │ │ └── tsconfig.json │ ├── workbox-range-requests/ │ │ ├── README.md │ │ ├── package.json │ │ ├── src/ │ │ │ ├── RangeRequestsPlugin.ts │ │ │ ├── _version.ts │ │ │ ├── createPartialResponse.ts │ │ │ ├── index.ts │ │ │ └── utils/ │ │ │ ├── calculateEffectiveBoundaries.ts │ │ │ └── parseRangeHeader.ts │ │ └── tsconfig.json │ ├── workbox-recipes/ │ │ ├── README.md │ │ ├── package.json │ │ ├── src/ │ │ │ ├── _version.ts │ │ │ ├── googleFontsCache.ts │ │ │ ├── imageCache.ts │ │ │ ├── index.ts │ │ │ ├── offlineFallback.ts │ │ │ ├── pageCache.ts │ │ │ ├── staticResourceCache.ts │ │ │ └── warmStrategyCache.ts │ │ └── tsconfig.json │ ├── workbox-routing/ │ │ ├── README.md │ │ ├── package.json │ │ ├── src/ │ │ │ ├── NavigationRoute.ts │ │ │ ├── RegExpRoute.ts │ │ │ ├── Route.ts │ │ │ ├── Router.ts │ │ │ ├── _types.ts │ │ │ ├── _version.ts │ │ │ ├── index.ts │ │ │ ├── registerRoute.ts │ │ │ ├── setCatchHandler.ts │ │ │ ├── setDefaultHandler.ts │ │ │ └── utils/ │ │ │ ├── constants.ts │ │ │ ├── getOrCreateDefaultRouter.ts │ │ │ └── normalizeHandler.ts │ │ └── tsconfig.json │ ├── workbox-strategies/ │ │ ├── README.md │ │ ├── package.json │ │ ├── src/ │ │ │ ├── CacheFirst.ts │ │ │ ├── CacheOnly.ts │ │ │ ├── NetworkFirst.ts │ │ │ ├── NetworkOnly.ts │ │ │ ├── StaleWhileRevalidate.ts │ │ │ ├── Strategy.ts │ │ │ ├── StrategyHandler.ts │ │ │ ├── _version.ts │ │ │ ├── index.ts │ │ │ ├── plugins/ │ │ │ │ └── cacheOkAndOpaquePlugin.ts │ │ │ └── utils/ │ │ │ └── messages.ts │ │ └── tsconfig.json │ ├── workbox-streams/ │ │ ├── README.md │ │ ├── package.json │ │ ├── src/ │ │ │ ├── _types.ts │ │ │ ├── _version.ts │ │ │ ├── concatenate.ts │ │ │ ├── concatenateToResponse.ts │ │ │ ├── index.ts │ │ │ ├── isSupported.ts │ │ │ ├── strategy.ts │ │ │ └── utils/ │ │ │ └── createHeaders.ts │ │ └── tsconfig.json │ ├── workbox-sw/ │ │ ├── README.md │ │ ├── _types.mjs │ │ ├── _version.mjs │ │ ├── controllers/ │ │ │ └── WorkboxSW.mjs │ │ ├── index.mjs │ │ └── package.json │ ├── workbox-webpack-plugin/ │ │ ├── README.md │ │ ├── package.json │ │ ├── src/ │ │ │ ├── generate-sw.ts │ │ │ ├── index.ts │ │ │ ├── inject-manifest.ts │ │ │ └── lib/ │ │ │ ├── get-asset-hash.ts │ │ │ ├── get-manifest-entries-from-compilation.ts │ │ │ ├── get-script-files-for-chunks.ts │ │ │ ├── get-sourcemap-asset-name.ts │ │ │ ├── relative-to-output-path.ts │ │ │ └── resolve-webpack-url.ts │ │ └── tsconfig.json │ └── workbox-window/ │ ├── README.md │ ├── package.json │ ├── src/ │ │ ├── Workbox.ts │ │ ├── _version.ts │ │ ├── index.ts │ │ ├── messageSW.ts │ │ └── utils/ │ │ ├── WorkboxEvent.ts │ │ ├── WorkboxEventTarget.ts │ │ └── urlsMatch.ts │ └── tsconfig.json ├── prettier.config.js ├── test/ │ ├── all/ │ │ └── node/ │ │ ├── test-exports.js │ │ ├── test-jsdocs.js │ │ ├── test-package.js │ │ ├── test-prod-builds.js │ │ └── test-yarn-installation.js │ ├── workbox-background-sync/ │ │ ├── integration/ │ │ │ └── test-all.js │ │ ├── static/ │ │ │ └── basic-example/ │ │ │ ├── example.txt │ │ │ ├── index.html │ │ │ └── sw.js │ │ └── sw/ │ │ ├── lib/ │ │ │ ├── test-QueueDb.mjs │ │ │ ├── test-QueueStore.mjs │ │ │ └── test-StorableRequest.mjs │ │ ├── test-BackgroundSyncPlugin.mjs │ │ └── test-Queue.mjs │ ├── workbox-broadcast-update/ │ │ ├── integration/ │ │ │ └── test-all.js │ │ ├── static/ │ │ │ ├── index.html │ │ │ └── sw.js │ │ └── sw/ │ │ ├── test-BroadcastCacheUpdate.mjs │ │ ├── test-BroadcastUpdatePlugin.mjs │ │ └── test-responsesAreSame.mjs │ ├── workbox-build/ │ │ ├── node/ │ │ │ ├── dependency-check.js │ │ │ ├── generate-sw.js │ │ │ ├── get-manifest.js │ │ │ ├── inject-manifest.js │ │ │ └── lib/ │ │ │ ├── additional-manifest-entries-transform.js │ │ │ ├── bundle.js │ │ │ ├── cdn-utils.js │ │ │ ├── copy-workbox-libraries.js │ │ │ ├── escape-regexp.js │ │ │ ├── get-composite-details.js │ │ │ ├── get-file-details.js │ │ │ ├── get-file-hash.js │ │ │ ├── get-file-manifest-entries.js │ │ │ ├── get-file-size.js │ │ │ ├── get-string-details.js │ │ │ ├── get-string-hash.js │ │ │ ├── modify-url-prefix-transform.js │ │ │ ├── module-registry.js │ │ │ ├── no-revision-for-urls-matching-transform.js │ │ │ ├── populate-sw-template.js │ │ │ ├── replace-and-update-source-map.js │ │ │ ├── runtime-caching-converter.js │ │ │ ├── transform-manifest.js │ │ │ ├── translate-url-to-sourcemap-paths.js │ │ │ ├── validate-options.js │ │ │ └── write-sw-using-default-template.js │ │ └── static/ │ │ ├── example-project-1/ │ │ │ ├── .hidden-directory/ │ │ │ │ ├── hello.html │ │ │ │ └── hello.js │ │ │ ├── index.html │ │ │ ├── page-1.html │ │ │ ├── page-2.html │ │ │ ├── styles/ │ │ │ │ ├── stylesheet-1.css │ │ │ │ └── stylesheet-2.css │ │ │ └── webpackEntry.js │ │ └── sw-injections/ │ │ ├── bad-multiple-injection.js │ │ ├── bad-no-injection.js │ │ ├── basic-with-invalid-sourcemap.js.nolint │ │ ├── basic-with-sourcemap-data-url.js.nolint │ │ ├── basic-with-sourcemap.js.nolint │ │ ├── basic.js │ │ ├── custom-injection-point.js │ │ ├── multiple-calls.js │ │ ├── precache-and-route-options.js │ │ └── sample-import.js │ ├── workbox-cacheable-response/ │ │ ├── integration/ │ │ │ └── test-all.js │ │ ├── static/ │ │ │ └── cacheable-response-plugin/ │ │ │ ├── example-1.txt │ │ │ └── sw.js │ │ └── sw/ │ │ ├── test-CacheableResponse.mjs │ │ └── test-CacheableResponsePlugin.mjs │ ├── workbox-cli/ │ │ └── node/ │ │ ├── app.js │ │ ├── dependency-check.js │ │ └── lib/ │ │ ├── cleanup-stack-trace.js │ │ ├── help-text.js │ │ ├── logger.js │ │ ├── questions/ │ │ │ ├── ask-config-location.js │ │ │ ├── ask-extensions-to-cache.js │ │ │ ├── ask-questions.js │ │ │ ├── ask-root-of-web-app.js │ │ │ ├── ask-start_url-query-params.js │ │ │ ├── ask-sw-dest.js │ │ │ └── ask-sw-src.js │ │ └── run-wizard.js │ ├── workbox-core/ │ │ ├── integration/ │ │ │ └── test-all.js │ │ ├── static/ │ │ │ ├── core-in-browser/ │ │ │ │ ├── index.html │ │ │ │ └── sw.js │ │ │ └── logger.html │ │ └── sw/ │ │ ├── _private/ │ │ │ ├── test-Deferred.mjs │ │ │ ├── test-assert.mjs │ │ │ ├── test-cacheMatchIgnoreParams.mjs │ │ │ ├── test-executeQuotaErrorCallbacks.mjs │ │ │ ├── test-getFriendlyURL.mjs │ │ │ ├── test-logger.mjs │ │ │ ├── test-resultingClientExists.mjs │ │ │ ├── test-timeout.mjs │ │ │ └── test-waitUntil.mjs │ │ ├── models/ │ │ │ └── messages/ │ │ │ └── test-messageGenerator.mjs │ │ ├── test-cacheNames.mjs │ │ ├── test-clientsClaim.mjs │ │ ├── test-copyResponse.mjs │ │ ├── test-registerQuotaErrorCallback.mjs │ │ └── test-skipWaiting.mjs │ ├── workbox-expiration/ │ │ ├── integration/ │ │ │ └── test-all.js │ │ ├── static/ │ │ │ ├── expiration-plugin/ │ │ │ │ ├── example-1.txt │ │ │ │ ├── example-2.txt │ │ │ │ ├── sw-deletion.js │ │ │ │ ├── sw-max-age-seconds.js │ │ │ │ └── sw-max-entries.js │ │ │ └── isURLExpired.html │ │ └── sw/ │ │ ├── test-CacheExpiration.mjs │ │ ├── test-CacheTimestampsModel.mjs │ │ └── test-ExpirationPlugin.mjs │ ├── workbox-google-analytics/ │ │ ├── integration/ │ │ │ └── test-all.js │ │ ├── static/ │ │ │ └── basic-example/ │ │ │ ├── index.html │ │ │ └── sw.js │ │ └── sw/ │ │ └── test-initialize.mjs │ ├── workbox-navigation-preload/ │ │ ├── integration/ │ │ │ ├── test-disable.js │ │ │ ├── test-enable.js │ │ │ └── test-sw.js │ │ ├── static/ │ │ │ ├── sw-custom-header.js │ │ │ ├── sw-default-header.js │ │ │ └── sw-disable.js │ │ └── sw/ │ │ ├── test-disable.mjs │ │ ├── test-enable.mjs │ │ └── test-isSupported.mjs │ ├── workbox-precaching/ │ │ ├── integration/ │ │ │ ├── test-cleanup-outdated-caches.js │ │ │ ├── test-precache-and-update.js │ │ │ └── test-sw.js │ │ ├── static/ │ │ │ ├── addToCacheList.html │ │ │ ├── cleanup-outdated-caches/ │ │ │ │ ├── sw.js │ │ │ │ └── test.txt │ │ │ ├── precache-and-update/ │ │ │ │ ├── hashed-file.abcd1234.txt │ │ │ │ ├── index.html │ │ │ │ ├── styles/ │ │ │ │ │ └── index.css │ │ │ │ ├── sw-1.js │ │ │ │ └── sw-2.js │ │ │ ├── precache.html │ │ │ └── project/ │ │ │ ├── example-2.html │ │ │ ├── example-a.html │ │ │ ├── example-b.html │ │ │ ├── example-timestamp.html │ │ │ ├── example.html │ │ │ └── index.html │ │ └── sw/ │ │ ├── resetDefaultPrecacheController.mjs │ │ ├── test-PrecacheController.mjs │ │ ├── test-PrecacheFallbackPlugin.mjs │ │ ├── test-PrecacheRoute.mjs │ │ ├── test-PrecacheStrategy.mjs │ │ ├── test-addPlugins.mjs │ │ ├── test-addRoute.mjs │ │ ├── test-cleanupOutdatedCaches.mjs │ │ ├── test-createHandlerBoundToURL.mjs │ │ ├── test-getCacheKeyForURL.mjs │ │ ├── test-matchPrecache.mjs │ │ ├── test-precache.mjs │ │ ├── test-precacheAndRoute.mjs │ │ └── utils/ │ │ ├── test-deleteOutdatedCaches.mjs │ │ ├── test-printCleanupDetails.mjs │ │ └── test-printInstallDetails.mjs │ ├── workbox-range-requests/ │ │ ├── integration/ │ │ │ └── test-all.js │ │ ├── static/ │ │ │ ├── index.html │ │ │ └── sw.js │ │ └── sw/ │ │ ├── test-RangeRequestsPlugin.mjs │ │ ├── test-createPartialResponse.mjs │ │ └── utils/ │ │ ├── test-calculateEffectiveBoundaries.mjs │ │ └── test-parseRangeHeader.mjs │ ├── workbox-routing/ │ │ ├── integration/ │ │ │ ├── test-navigation-route.js │ │ │ ├── test-routing-basic.js │ │ │ ├── test-routing-regex.js │ │ │ └── test-sw.js │ │ ├── static/ │ │ │ ├── routing-basic/ │ │ │ │ ├── index.html │ │ │ │ └── sw.js │ │ │ ├── routing-navigation/ │ │ │ │ ├── index.html │ │ │ │ └── sw.js │ │ │ ├── routing-regex/ │ │ │ │ ├── index.html │ │ │ │ └── sw.js │ │ │ ├── routing.html │ │ │ └── sw.js │ │ └── sw/ │ │ ├── test-NavigationRoute.mjs │ │ ├── test-RegExpRoute.mjs │ │ ├── test-Route.mjs │ │ ├── test-Router.mjs │ │ ├── test-registerRoute.mjs │ │ ├── test-setCatchHandler.mjs │ │ ├── test-setDefaultHandler.mjs │ │ └── utils/ │ │ └── test-normalizeHandler.mjs │ ├── workbox-strategies/ │ │ ├── integration/ │ │ │ ├── test-cacheFirst.js │ │ │ ├── test-cacheOnly.js │ │ │ ├── test-networkFirst.js │ │ │ ├── test-networkOnly.js │ │ │ ├── test-staleWhileRevalidate.js │ │ │ └── test-sw.js │ │ ├── static/ │ │ │ ├── cache-first/ │ │ │ │ ├── example.txt │ │ │ │ └── sw.js │ │ │ ├── cache-only/ │ │ │ │ └── sw.js │ │ │ ├── network-first/ │ │ │ │ └── sw.js │ │ │ ├── network-only/ │ │ │ │ └── sw.js │ │ │ └── stale-while-revalidate/ │ │ │ └── sw.js │ │ └── sw/ │ │ ├── plugins/ │ │ │ └── test-cacheOkAndOpaquePlugin.mjs │ │ ├── test-CacheFirst.mjs │ │ ├── test-CacheOnly.mjs │ │ ├── test-NetworkFirst.mjs │ │ ├── test-NetworkOnly.mjs │ │ ├── test-StaleWhileRevalidate.mjs │ │ ├── test-Strategy.mjs │ │ ├── test-StrategyHandler.mjs │ │ └── test-UsageWithRouter.mjs │ ├── workbox-streams/ │ │ ├── integration/ │ │ │ └── test-all.js │ │ ├── static/ │ │ │ ├── 4.txt │ │ │ ├── index.html │ │ │ └── sw.js │ │ └── sw/ │ │ ├── test-isSupported.mjs │ │ └── utils/ │ │ └── test-createHeaders.mjs │ ├── workbox-sw/ │ │ ├── integration/ │ │ │ └── test-all.js │ │ ├── static/ │ │ │ ├── example.css │ │ │ ├── example.js │ │ │ ├── index.html │ │ │ ├── integration/ │ │ │ │ ├── index.html │ │ │ │ ├── invalid-sw.js │ │ │ │ └── valid-sw.js │ │ │ └── sw.js │ │ └── sw/ │ │ └── controllers/ │ │ └── test-WorkboxSW.mjs │ ├── workbox-webpack-plugin/ │ │ ├── node/ │ │ │ ├── dependency-check.js │ │ │ ├── v4/ │ │ │ │ ├── generate-sw.js │ │ │ │ ├── inject-manifest.js │ │ │ │ └── lib/ │ │ │ │ └── create-webpack-asset-plugin.js │ │ │ └── v5/ │ │ │ ├── generate-sw.js │ │ │ ├── inject-manifest.js │ │ │ └── lib/ │ │ │ └── create-webpack-asset-plugin.js │ │ └── static/ │ │ ├── bad-multiple-injection.js │ │ ├── example-project-1/ │ │ │ ├── index.html │ │ │ ├── page-1.html │ │ │ ├── page-2.html │ │ │ ├── splitChunksEntry.js │ │ │ ├── styles/ │ │ │ │ ├── stylesheet-1.css │ │ │ │ └── stylesheet-2.css │ │ │ └── webpackEntry.js │ │ ├── injected-manifest.js │ │ ├── injected-manifest.json │ │ ├── module-import-sw.js │ │ ├── sw-src-define-plugin.js │ │ ├── sw-src-missing-sourcemap.js │ │ ├── sw-src.js │ │ ├── sw.ts │ │ └── wasm-project/ │ │ ├── add.wasm │ │ ├── index.js │ │ └── worker.js │ └── workbox-window/ │ ├── integration/ │ │ └── test-all.js │ ├── static/ │ │ └── index.html │ └── window/ │ ├── sw-error.js │ ├── sw-message-reply.js │ └── test-Workbox.mjs ├── tsconfig.json └── typescript.eslintrc.js