serwist
Version:
A Swiss Army knife for service workers.
89 lines (79 loc) • 2.63 kB
text/typescript
/*
Copyright 2018 Google LLC
Use of this source code is governed by an MIT-style
license that can be found in the LICENSE file or at
https://opensource.org/licenses/MIT.
*/
import type { initializeGoogleAnalytics } from "../lib/googleAnalytics/initializeGoogleAnalytics.js";
declare let registration: ServiceWorkerRegistration | undefined;
export interface CacheNameDetails {
googleAnalytics: string;
precache: string;
prefix: string;
runtime: string;
suffix: string;
}
export interface PartialCacheNameDetails {
/**
* The string to add to the beginning of the precache and runtime cache names.
*/
prefix?: string;
/**
* The string to add to the end of the precache and runtime cache names.
*/
suffix?: string;
/**
* The cache name to use for precache caching.
*/
precache?: string;
/**
* The cache name to use for runtime caching.
*/
runtime?: string;
/**
* The cache name to use for {@linkcode initializeGoogleAnalytics}.
*/
googleAnalytics?: string;
[propName: string]: string | undefined;
}
export type CacheNameDetailsProp = "googleAnalytics" | "precache" | "prefix" | "runtime" | "suffix";
const _cacheNameDetails: CacheNameDetails = {
googleAnalytics: "googleAnalytics",
precache: "precache-v2",
prefix: "serwist",
runtime: "runtime",
suffix: typeof registration !== "undefined" ? registration.scope : "",
};
const _createCacheName = (cacheName: string): string => {
return [_cacheNameDetails.prefix, cacheName, _cacheNameDetails.suffix].filter((value) => value && value.length > 0).join("-");
};
const eachCacheNameDetail = (fn: (key: CacheNameDetailsProp) => void): void => {
for (const key of Object.keys(_cacheNameDetails)) {
fn(key as CacheNameDetailsProp);
}
};
export const cacheNames = {
updateDetails: (details: PartialCacheNameDetails): void => {
eachCacheNameDetail((key: CacheNameDetailsProp): void => {
const detail = details[key];
if (typeof detail === "string") {
_cacheNameDetails[key] = detail;
}
});
},
getGoogleAnalyticsName: (userCacheName?: string): string => {
return userCacheName || _createCacheName(_cacheNameDetails.googleAnalytics);
},
getPrecacheName: (userCacheName?: string): string => {
return userCacheName || _createCacheName(_cacheNameDetails.precache);
},
getPrefix: (): string => {
return _cacheNameDetails.prefix;
},
getRuntimeName: (userCacheName?: string): string => {
return userCacheName || _createCacheName(_cacheNameDetails.runtime);
},
getSuffix: (): string => {
return _cacheNameDetails.suffix;
},
};