123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838 |
- define(['exports'], function (t) {
- 'use strict';
- try {
- self['workbox:core:7.0.0'] && _();
- } catch (t) {}
- const e = (t, ...e) => {
- let s = t;
- return e.length > 0 && (s += ` :: ${JSON.stringify(e)}`), s;
- };
- class s extends Error {
- constructor(t, s) {
- super(e(t, s)), (this.name = t), (this.details = s);
- }
- }
- try {
- self['workbox:routing:7.0.0'] && _();
- } catch (t) {}
- const n = t => (t && 'object' == typeof t ? t : { handle: t });
- class i {
- constructor(t, e, s = 'GET') {
- (this.handler = n(e)), (this.match = t), (this.method = s);
- }
- setCatchHandler(t) {
- this.catchHandler = n(t);
- }
- }
- class r extends i {
- constructor(t, e, s) {
- super(
- ({ url: e }) => {
- const s = t.exec(e.href);
- if (s && (e.origin === location.origin || 0 === s.index))
- return s.slice(1);
- },
- e,
- s
- );
- }
- }
- class o {
- constructor() {
- (this.t = new Map()), (this.i = new Map());
- }
- get routes() {
- return this.t;
- }
- addFetchListener() {
- self.addEventListener('fetch', t => {
- const { request: e } = t,
- s = this.handleRequest({ request: e, event: t });
- s && t.respondWith(s);
- });
- }
- addCacheListener() {
- self.addEventListener('message', t => {
- if (t.data && 'CACHE_URLS' === t.data.type) {
- const { payload: e } = t.data,
- s = Promise.all(
- e.urlsToCache.map(e => {
- 'string' == typeof e && (e = [e]);
- const s = new Request(...e);
- return this.handleRequest({ request: s, event: t });
- })
- );
- t.waitUntil(s),
- t.ports && t.ports[0] && s.then(() => t.ports[0].postMessage(!0));
- }
- });
- }
- handleRequest({ request: t, event: e }) {
- const s = new URL(t.url, location.href);
- if (!s.protocol.startsWith('http')) return;
- const n = s.origin === location.origin,
- { params: i, route: r } = this.findMatchingRoute({
- event: e,
- request: t,
- sameOrigin: n,
- url: s
- });
- let o = r && r.handler;
- const c = t.method;
- if ((!o && this.i.has(c) && (o = this.i.get(c)), !o)) return;
- let a;
- try {
- a = o.handle({ url: s, request: t, event: e, params: i });
- } catch (t) {
- a = Promise.reject(t);
- }
- const h = r && r.catchHandler;
- return (
- a instanceof Promise &&
- (this.o || h) &&
- (a = a.catch(async n => {
- if (h)
- try {
- return await h.handle({
- url: s,
- request: t,
- event: e,
- params: i
- });
- } catch (t) {
- t instanceof Error && (n = t);
- }
- if (this.o) return this.o.handle({ url: s, request: t, event: e });
- throw n;
- })),
- a
- );
- }
- findMatchingRoute({ url: t, sameOrigin: e, request: s, event: n }) {
- const i = this.t.get(s.method) || [];
- for (const r of i) {
- let i;
- const o = r.match({ url: t, sameOrigin: e, request: s, event: n });
- if (o)
- return (
- (i = o),
- ((Array.isArray(i) && 0 === i.length) ||
- (o.constructor === Object && 0 === Object.keys(o).length) ||
- 'boolean' == typeof o) &&
- (i = void 0),
- { route: r, params: i }
- );
- }
- return {};
- }
- setDefaultHandler(t, e = 'GET') {
- this.i.set(e, n(t));
- }
- setCatchHandler(t) {
- this.o = n(t);
- }
- registerRoute(t) {
- this.t.has(t.method) || this.t.set(t.method, []),
- this.t.get(t.method).push(t);
- }
- unregisterRoute(t) {
- if (!this.t.has(t.method))
- throw new s('unregister-route-but-not-found-with-method', {
- method: t.method
- });
- const e = this.t.get(t.method).indexOf(t);
- if (!(e > -1)) throw new s('unregister-route-route-not-registered');
- this.t.get(t.method).splice(e, 1);
- }
- }
- let c;
- const a = () => (
- c || ((c = new o()), c.addFetchListener(), c.addCacheListener()), c
- );
- function h(t, e, n) {
- let o;
- if ('string' == typeof t) {
- const s = new URL(t, location.href);
- o = new i(({ url: t }) => t.href === s.href, e, n);
- } else if (t instanceof RegExp) o = new r(t, e, n);
- else if ('function' == typeof t) o = new i(t, e, n);
- else {
- if (!(t instanceof i))
- throw new s('unsupported-route-type', {
- moduleName: 'workbox-routing',
- funcName: 'registerRoute',
- paramName: 'capture'
- });
- o = t;
- }
- return a().registerRoute(o), o;
- }
- const u = {
- googleAnalytics: 'googleAnalytics',
- precache: 'precache-v2',
- prefix: 'workbox',
- runtime: 'runtime',
- suffix: 'undefined' != typeof registration ? registration.scope : ''
- },
- l = t => [u.prefix, t, u.suffix].filter(t => t && t.length > 0).join('-'),
- f = t => t || l(u.precache),
- w = t => t || l(u.runtime);
- function d(t, e) {
- const s = e();
- return t.waitUntil(s), s;
- }
- try {
- self['workbox:precaching:7.0.0'] && _();
- } catch (t) {}
- function p(t) {
- if (!t) throw new s('add-to-cache-list-unexpected-type', { entry: t });
- if ('string' == typeof t) {
- const e = new URL(t, location.href);
- return { cacheKey: e.href, url: e.href };
- }
- const { revision: e, url: n } = t;
- if (!n) throw new s('add-to-cache-list-unexpected-type', { entry: t });
- if (!e) {
- const t = new URL(n, location.href);
- return { cacheKey: t.href, url: t.href };
- }
- const i = new URL(n, location.href),
- r = new URL(n, location.href);
- return (
- i.searchParams.set('__WB_REVISION__', e),
- { cacheKey: i.href, url: r.href }
- );
- }
- class y {
- constructor() {
- (this.updatedURLs = []),
- (this.notUpdatedURLs = []),
- (this.handlerWillStart = async ({ request: t, state: e }) => {
- e && (e.originalRequest = t);
- }),
- (this.cachedResponseWillBeUsed = async ({
- event: t,
- state: e,
- cachedResponse: s
- }) => {
- if (
- 'install' === t.type &&
- e &&
- e.originalRequest &&
- e.originalRequest instanceof Request
- ) {
- const t = e.originalRequest.url;
- s ? this.notUpdatedURLs.push(t) : this.updatedURLs.push(t);
- }
- return s;
- });
- }
- }
- class g {
- constructor({ precacheController: t }) {
- (this.cacheKeyWillBeUsed = async ({ request: t, params: e }) => {
- const s =
- (null == e ? void 0 : e.cacheKey) || this.h.getCacheKeyForURL(t.url);
- return s ? new Request(s, { headers: t.headers }) : t;
- }),
- (this.h = t);
- }
- }
- let R;
- async function m(t, e) {
- let n = null;
- if (t.url) {
- n = new URL(t.url).origin;
- }
- if (n !== self.location.origin)
- throw new s('cross-origin-copy-response', { origin: n });
- const i = t.clone(),
- r = {
- headers: new Headers(i.headers),
- status: i.status,
- statusText: i.statusText
- },
- o = e ? e(r) : r,
- c = (function () {
- if (void 0 === R) {
- const t = new Response('');
- if ('body' in t)
- try {
- new Response(t.body), (R = !0);
- } catch (t) {
- R = !1;
- }
- R = !1;
- }
- return R;
- })()
- ? i.body
- : await i.blob();
- return new Response(c, o);
- }
- function v(t, e) {
- const s = new URL(t);
- for (const t of e) s.searchParams.delete(t);
- return s.href;
- }
- class q {
- constructor() {
- this.promise = new Promise((t, e) => {
- (this.resolve = t), (this.reject = e);
- });
- }
- }
- const U = new Set();
- try {
- self['workbox:strategies:7.0.0'] && _();
- } catch (t) {}
- function L(t) {
- return 'string' == typeof t ? new Request(t) : t;
- }
- class b {
- constructor(t, e) {
- (this.u = {}),
- Object.assign(this, e),
- (this.event = e.event),
- (this.l = t),
- (this.p = new q()),
- (this.g = []),
- (this.R = [...t.plugins]),
- (this.m = new Map());
- for (const t of this.R) this.m.set(t, {});
- this.event.waitUntil(this.p.promise);
- }
- async fetch(t) {
- const { event: e } = this;
- let n = L(t);
- // 检查预加载响应
- if ("navigate" === n.mode && e instanceof FetchEvent && e.preloadResponse) {
- const t = await e.preloadResponse;
- if (t) return t;
- }
- const i = this.hasCallback("fetchDidFail") ? n.clone() : null;
- try {
- // 执行 requestWillFetch 回调
- for (const t of this.iterateCallbacks("requestWillFetch")) {
- n = await t({
- request: n.clone(),
- event: e
- });
- }
- } catch (t) {
- if (t instanceof Error) {
- console.error("requestWillFetch error:", t);
- throw new s("plugin-error-request-will-fetch", {
- thrownErrorMessage: t.message
- });
- }
- }
- const r = n.clone();
- try {
- // 发起 fetch 请求
- let t = await fetch(n, "navigate" === n.mode ? void 0 : this.l.fetchOptions);
- // 执行 fetchDidSucceed 回调
- for (const s of this.iterateCallbacks("fetchDidSucceed")) {
- t = await s({
- event: e,
- request: r,
- response: t
- });
- }
- return t;
- } catch (t) {
- console.error("Fetch failed:", t);
- // 执行 fetchDidFail 回调
- if (i) {
- await this.runCallbacks("fetchDidFail", {
- error: t,
- event: e,
- originalRequest: i.clone(),
- request: r.clone()
- });
- }
- throw t;
- }
- }
- async fetchAndCachePut(t) {
- const e = await this.fetch(t),
- s = e.clone();
- return this.waitUntil(this.cachePut(t, s)), e;
- }
- async cacheMatch(t) {
- const e = L(t);
- let s;
- const { cacheName: n, matchOptions: i } = this.l,
- r = await this.getCacheKey(e, 'read'),
- o = Object.assign(Object.assign({}, i), { cacheName: n });
- s = await caches.match(r, o);
- for (const t of this.iterateCallbacks('cachedResponseWillBeUsed'))
- s =
- (await t({
- cacheName: n,
- matchOptions: i,
- cachedResponse: s,
- request: r,
- event: this.event
- })) || void 0;
- return s;
- }
- async cachePut(t, e) {
- const n = L(t);
- var i;
- await ((i = 0), new Promise(t => setTimeout(t, i)));
- const r = await this.getCacheKey(n, 'write');
- if (!e)
- throw new s('cache-put-with-no-response', {
- url:
- ((o = r.url),
- new URL(String(o), location.href).href.replace(
- new RegExp(`^${location.origin}`),
- ''
- ))
- });
- var o;
- const c = await this.v(e);
- if (!c) return !1;
- const { cacheName: a, matchOptions: h } = this.l,
- u = await self.caches.open(a),
- l = this.hasCallback('cacheDidUpdate'),
- f = l
- ? await (async function (t, e, s, n) {
- const i = v(e.url, s);
- if (e.url === i) return t.match(e, n);
- const r = Object.assign(Object.assign({}, n), {
- ignoreSearch: !0
- }),
- o = await t.keys(e, r);
- for (const e of o) if (i === v(e.url, s)) return t.match(e, n);
- })(u, r.clone(), ['__WB_REVISION__'], h)
- : null;
- try {
- await u.put(r, l ? c.clone() : c);
- } catch (t) {
- if (t instanceof Error)
- throw (
- ('QuotaExceededError' === t.name &&
- (await (async function () {
- for (const t of U) await t();
- })()),
- t)
- );
- }
- for (const t of this.iterateCallbacks('cacheDidUpdate'))
- await t({
- cacheName: a,
- oldResponse: f,
- newResponse: c.clone(),
- request: r,
- event: this.event
- });
- return !0;
- }
- async getCacheKey(t, e) {
- const s = `${t.url} | ${e}`;
- if (!this.u[s]) {
- let n = t;
- for (const t of this.iterateCallbacks('cacheKeyWillBeUsed'))
- n = L(
- await t({
- mode: e,
- request: n,
- event: this.event,
- params: this.params
- })
- );
- this.u[s] = n;
- }
- return this.u[s];
- }
- hasCallback(t) {
- for (const e of this.l.plugins) if (t in e) return !0;
- return !1;
- }
- async runCallbacks(t, e) {
- for (const s of this.iterateCallbacks(t)) await s(e);
- }
- *iterateCallbacks(t) {
- for (const e of this.l.plugins)
- if ('function' == typeof e[t]) {
- const s = this.m.get(e),
- n = n => {
- const i = Object.assign(Object.assign({}, n), { state: s });
- return e[t](i);
- };
- yield n;
- }
- }
- waitUntil(t) {
- return this.g.push(t), t;
- }
- async doneWaiting() {
- let t;
- for (; (t = this.g.shift()); ) await t;
- }
- destroy() {
- this.p.resolve(null);
- }
- async v(t) {
- let e = t,
- s = !1;
- for (const t of this.iterateCallbacks('cacheWillUpdate'))
- if (
- ((e =
- (await t({
- request: this.request,
- response: e,
- event: this.event
- })) || void 0),
- (s = !0),
- !e)
- )
- break;
- return s || (e && 200 !== e.status && (e = void 0)), e;
- }
- }
- class C {
- constructor(t = {}) {
- (this.cacheName = w(t.cacheName)),
- (this.plugins = t.plugins || []),
- (this.fetchOptions = t.fetchOptions),
- (this.matchOptions = t.matchOptions);
- }
- handle(t) {
- const [e] = this.handleAll(t);
- return e;
- }
- handleAll(t) {
- t instanceof FetchEvent && (t = { event: t, request: t.request });
- const e = t.event,
- s = 'string' == typeof t.request ? new Request(t.request) : t.request,
- n = 'params' in t ? t.params : void 0,
- i = new b(this, { event: e, request: s, params: n }),
- r = this.q(i, s, e);
- return [r, this.U(r, i, s, e)];
- }
- async q(t, e, n) {
- let i;
- await t.runCallbacks('handlerWillStart', { event: n, request: e });
- try {
- if (((i = await this.L(e, t)), !i || 'error' === i.type))
- throw new s('no-response', { url: e.url });
- } catch (s) {
- if (s instanceof Error)
- for (const r of t.iterateCallbacks('handlerDidError'))
- if (((i = await r({ error: s, event: n, request: e })), i)) break;
- if (!i) throw s;
- }
- for (const s of t.iterateCallbacks('handlerWillRespond'))
- i = await s({ event: n, request: e, response: i });
- return i;
- }
- async U(t, e, s, n) {
- let i, r;
- try {
- i = await t;
- } catch (r) {}
- try {
- await e.runCallbacks('handlerDidRespond', {
- event: n,
- request: s,
- response: i
- }),
- await e.doneWaiting();
- } catch (t) {
- t instanceof Error && (r = t);
- }
- if (
- (await e.runCallbacks('handlerDidComplete', {
- event: n,
- request: s,
- response: i,
- error: r
- }),
- e.destroy(),
- r)
- )
- throw r;
- }
- }
- class E extends C {
- constructor(t = {}) {
- (t.cacheName = f(t.cacheName)),
- super(t),
- (this._ = !1 !== t.fallbackToNetwork),
- this.plugins.push(E.copyRedirectedCacheableResponsesPlugin);
- }
- async L(t, e) {
- const s = await e.cacheMatch(t);
- return (
- s ||
- (e.event && 'install' === e.event.type
- ? await this.C(t, e)
- : await this.O(t, e))
- );
- }
- async O(t, e) {
- let n;
- const i = e.params || {};
- if (!this._)
- throw new s('missing-precache-entry', {
- cacheName: this.cacheName,
- url: t.url
- });
- {
- const s = i.integrity,
- r = t.integrity,
- o = !r || r === s;
- (n = await e.fetch(
- new Request(t, { integrity: 'no-cors' !== t.mode ? r || s : void 0 })
- )),
- s &&
- o &&
- 'no-cors' !== t.mode &&
- (this.N(), await e.cachePut(t, n.clone()));
- }
- return n;
- }
- async C(t, e) {
- this.N();
- const n = await e.fetch(t);
- if (!(await e.cachePut(t, n.clone())))
- throw new s('bad-precaching-response', {
- url: t.url,
- status: n.status
- });
- return n;
- }
- N() {
- let t = null,
- e = 0;
- for (const [s, n] of this.plugins.entries())
- n !== E.copyRedirectedCacheableResponsesPlugin &&
- (n === E.defaultPrecacheCacheabilityPlugin && (t = s),
- n.cacheWillUpdate && e++);
- 0 === e
- ? this.plugins.push(E.defaultPrecacheCacheabilityPlugin)
- : e > 1 && null !== t && this.plugins.splice(t, 1);
- }
- }
- (E.defaultPrecacheCacheabilityPlugin = {
- cacheWillUpdate: async ({ response: t }) =>
- !t || t.status >= 400 ? null : t
- }),
- (E.copyRedirectedCacheableResponsesPlugin = {
- cacheWillUpdate: async ({ response: t }) =>
- t.redirected ? await m(t) : t
- });
- class O {
- constructor({
- cacheName: t,
- plugins: e = [],
- fallbackToNetwork: s = !0
- } = {}) {
- (this.k = new Map()),
- (this.K = new Map()),
- (this.P = new Map()),
- (this.l = new E({
- cacheName: f(t),
- plugins: [...e, new g({ precacheController: this })],
- fallbackToNetwork: s
- })),
- (this.install = this.install.bind(this)),
- (this.activate = this.activate.bind(this));
- }
- get strategy() {
- return this.l;
- }
- precache(t) {
- this.addToCacheList(t),
- this.T ||
- (self.addEventListener('install', this.install),
- self.addEventListener('activate', this.activate),
- (this.T = !0));
- }
- addToCacheList(t) {
- const e = [];
- for (const n of t) {
- 'string' == typeof n
- ? e.push(n)
- : n && void 0 === n.revision && e.push(n.url);
- const { cacheKey: t, url: i } = p(n),
- r = 'string' != typeof n && n.revision ? 'reload' : 'default';
- if (this.k.has(i) && this.k.get(i) !== t)
- throw new s('add-to-cache-list-conflicting-entries', {
- firstEntry: this.k.get(i),
- secondEntry: t
- });
- if ('string' != typeof n && n.integrity) {
- if (this.P.has(t) && this.P.get(t) !== n.integrity)
- throw new s('add-to-cache-list-conflicting-integrities', {
- url: i
- });
- this.P.set(t, n.integrity);
- }
- if ((this.k.set(i, t), this.K.set(i, r), e.length > 0)) {
- const t = `Workbox is precaching URLs without revision info: ${e.join(
- ', '
- )}\nThis is generally NOT safe. Learn more at https://bit.ly/wb-precache`;
- console.warn(t);
- }
- }
- }
- install(t) {
- return d(t, async () => {
- const e = new y();
- this.strategy.plugins.push(e);
- for (const [e, s] of this.k) {
- const n = this.P.get(s),
- i = this.K.get(e),
- r = new Request(e, {
- integrity: n,
- cache: i,
- credentials: 'same-origin'
- });
- await Promise.all(
- this.strategy.handleAll({
- params: { cacheKey: s },
- request: r,
- event: t
- })
- );
- }
- const { updatedURLs: s, notUpdatedURLs: n } = e;
- return { updatedURLs: s, notUpdatedURLs: n };
- });
- }
- activate(t) {
- return d(t, async () => {
- const t = await self.caches.open(this.strategy.cacheName),
- e = await t.keys(),
- s = new Set(this.k.values()),
- n = [];
- for (const i of e) s.has(i.url) || (await t.delete(i), n.push(i.url));
- return { deletedURLs: n };
- });
- }
- getURLsToCacheKeys() {
- return this.k;
- }
- getCachedURLs() {
- return [...this.k.keys()];
- }
- getCacheKeyForURL(t) {
- const e = new URL(t, location.href);
- return this.k.get(e.href);
- }
- getIntegrityForCacheKey(t) {
- return this.P.get(t);
- }
- async matchPrecache(t) {
- const e = t instanceof Request ? t.url : t,
- s = this.getCacheKeyForURL(e);
- if (s) {
- return (await self.caches.open(this.strategy.cacheName)).match(s);
- }
- }
- createHandlerBoundToURL(t) {
- const e = this.getCacheKeyForURL(t);
- if (!e) throw new s('non-precached-url', { url: t });
- return s => (
- (s.request = new Request(t)),
- (s.params = Object.assign({ cacheKey: e }, s.params)),
- this.strategy.handle(s)
- );
- }
- }
- let x;
- const N = () => (x || (x = new O()), x);
- class k extends i {
- constructor(t, e) {
- super(({ request: s }) => {
- const n = t.getURLsToCacheKeys();
- for (const i of (function* (
- t,
- {
- ignoreURLParametersMatching: e = [/^utm_/, /^fbclid$/],
- directoryIndex: s = 'index.html',
- cleanURLs: n = !0,
- urlManipulation: i
- } = {}
- ) {
- const r = new URL(t, location.href);
- (r.hash = ''), yield r.href;
- const o = (function (t, e = []) {
- for (const s of [...t.searchParams.keys()])
- e.some(t => t.test(s)) && t.searchParams.delete(s);
- return t;
- })(r, e);
- if ((yield o.href, s && o.pathname.endsWith('/'))) {
- const t = new URL(o.href);
- (t.pathname += s), yield t.href;
- }
- if (n) {
- const t = new URL(o.href);
- (t.pathname += '.html'), yield t.href;
- }
- if (i) {
- const t = i({ url: r });
- for (const e of t) yield e.href;
- }
- })(s.url, e)) {
- const e = n.get(i);
- if (e) {
- return { cacheKey: e, integrity: t.getIntegrityForCacheKey(e) };
- }
- }
- }, t.strategy);
- }
- }
- (t.NavigationRoute = class extends i {
- constructor(t, { allowlist: e = [/./], denylist: s = [] } = {}) {
- super(t => this.W(t), t), (this.j = e), (this.M = s);
- }
- W({ url: t, request: e }) {
- if (e && 'navigate' !== e.mode) return !1;
- const s = t.pathname + t.search;
- for (const t of this.M) if (t.test(s)) return !1;
- return !!this.j.some(t => t.test(s));
- }
- }),
- (t.cleanupOutdatedCaches = function () {
- self.addEventListener('activate', t => {
- const e = f();
- t.waitUntil(
- (async (t, e = '-precache-') => {
- const s = (await self.caches.keys()).filter(
- s =>
- s.includes(e) && s.includes(self.registration.scope) && s !== t
- );
- return await Promise.all(s.map(t => self.caches.delete(t))), s;
- })(e).then(t => {})
- );
- });
- }),
- (t.createHandlerBoundToURL = function (t) {
- return N().createHandlerBoundToURL(t);
- }),
- (t.precacheAndRoute = function (t, e) {
- !(function (t) {
- N().precache(t);
- })(t),
- (function (t) {
- const e = N();
- h(new k(e, t));
- })(e);
- }),
- (t.registerRoute = h);
- });
|