{"version":3,"file":"workbox-offline-ga.dev.js","sources":["../_version.mjs","../utils/constants.mjs","../initialize.mjs","../index.mjs"],"sourcesContent":["try{self['workbox:google-analytics:4.3.1']&&_()}catch(e){}// eslint-disable-line","/*\n  Copyright 2018 Google LLC\n\n  Use of this source code is governed by an MIT-style\n  license that can be found in the LICENSE file or at\n  https://opensource.org/licenses/MIT.\n*/\n\nimport '../_version.mjs';\n\nexport const QUEUE_NAME = 'workbox-google-analytics';\nexport const MAX_RETENTION_TIME = 60 * 48; // Two days in minutes\nexport const GOOGLE_ANALYTICS_HOST = 'www.google-analytics.com';\nexport const GTM_HOST = 'www.googletagmanager.com';\nexport const ANALYTICS_JS_PATH = '/analytics.js';\nexport const GTAG_JS_PATH = '/gtag/js';\nexport const GTM_JS_PATH = '/gtm.js';\nexport const COLLECT_DEFAULT_PATH = '/collect';\n\n// This RegExp matches all known Measurement Protocol single-hit collect\n// endpoints. Most of the time the default path (/collect) is used, but\n// occasionally an experimental endpoint is used when testing new features,\n// (e.g. /r/collect or /j/collect)\nexport const COLLECT_PATHS_REGEX = /^\\/(\\w+\\/)?collect/;\n","/*\n  Copyright 2018 Google LLC\n\n  Use of this source code is governed by an MIT-style\n  license that can be found in the LICENSE file or at\n  https://opensource.org/licenses/MIT.\n*/\n\nimport {Plugin} from 'workbox-background-sync/Plugin.mjs';\nimport {cacheNames} from 'workbox-core/_private/cacheNames.mjs';\nimport {getFriendlyURL} from 'workbox-core/_private/getFriendlyURL.mjs';\nimport {logger} from 'workbox-core/_private/logger.mjs';\nimport {Route} from 'workbox-routing/Route.mjs';\nimport {Router} from 'workbox-routing/Router.mjs';\nimport {NetworkFirst} from 'workbox-strategies/NetworkFirst.mjs';\nimport {NetworkOnly} from 'workbox-strategies/NetworkOnly.mjs';\nimport {\n  QUEUE_NAME,\n  MAX_RETENTION_TIME,\n  GOOGLE_ANALYTICS_HOST,\n  GTM_HOST,\n  ANALYTICS_JS_PATH,\n  GTAG_JS_PATH,\n  GTM_JS_PATH,\n  COLLECT_PATHS_REGEX,\n} from './utils/constants.mjs';\nimport './_version.mjs';\n\n/**\n * Creates the requestWillDequeue callback to be used with the background\n * sync queue plugin. The callback takes the failed request and adds the\n * `qt` param based on the current time, as well as applies any other\n * user-defined hit modifications.\n *\n * @param {Object} config See workbox.googleAnalytics.initialize.\n * @return {Function} The requestWillDequeu callback function.\n *\n * @private\n */\nconst createOnSyncCallback = (config) => {\n  return async ({queue}) => {\n    let entry;\n    while (entry = await queue.shiftRequest()) {\n      const {request, timestamp} = entry;\n      const url = new URL(request.url);\n\n      try {\n        // Measurement protocol requests can set their payload parameters in\n        // either the URL query string (for GET requests) or the POST body.\n        const params = request.method === 'POST' ?\n            new URLSearchParams(await request.clone().text()) :\n            url.searchParams;\n\n        // Calculate the qt param, accounting for the fact that an existing\n        // qt param may be present and should be updated rather than replaced.\n        const originalHitTime = timestamp - (Number(params.get('qt')) || 0);\n        const queueTime = Date.now() - originalHitTime;\n\n        // Set the qt param prior to applying hitFilter or parameterOverrides.\n        params.set('qt', queueTime);\n\n        // Apply `paramterOverrideds`, if set.\n        if (config.parameterOverrides) {\n          for (const param of Object.keys(config.parameterOverrides)) {\n            const value = config.parameterOverrides[param];\n            params.set(param, value);\n          }\n        }\n\n        // Apply `hitFilter`, if set.\n        if (typeof config.hitFilter === 'function') {\n          config.hitFilter.call(null, params);\n        }\n\n        // Retry the fetch. Ignore URL search params from the URL as they're\n        // now in the post body.\n        await fetch(new Request(url.origin + url.pathname, {\n          body: params.toString(),\n          method: 'POST',\n          mode: 'cors',\n          credentials: 'omit',\n          headers: {'Content-Type': 'text/plain'},\n        }));\n\n\n        if (process.env.NODE_ENV !== 'production') {\n          logger.log(`Request for '${getFriendlyURL(url.href)}'` +\n             `has been replayed`);\n        }\n      } catch (err) {\n        await queue.unshiftRequest(entry);\n\n        if (process.env.NODE_ENV !== 'production') {\n          logger.log(`Request for '${getFriendlyURL(url.href)}'` +\n             `failed to replay, putting it back in the queue.`);\n        }\n        throw err;\n      }\n    }\n    if (process.env.NODE_ENV !== 'production') {\n      logger.log(`All Google Analytics request successfully replayed; ` +\n          `the queue is now empty!`);\n    }\n  };\n};\n\n/**\n * Creates GET and POST routes to catch failed Measurement Protocol hits.\n *\n * @param {Plugin} queuePlugin\n * @return {Array<Route>} The created routes.\n *\n * @private\n */\nconst createCollectRoutes = (queuePlugin) => {\n  const match = ({url}) => url.hostname === GOOGLE_ANALYTICS_HOST &&\n      COLLECT_PATHS_REGEX.test(url.pathname);\n\n  const handler = new NetworkOnly({\n    plugins: [queuePlugin],\n  });\n\n  return [\n    new Route(match, handler, 'GET'),\n    new Route(match, handler, 'POST'),\n  ];\n};\n\n/**\n * Creates a route with a network first strategy for the analytics.js script.\n *\n * @param {string} cacheName\n * @return {Route} The created route.\n *\n * @private\n */\nconst createAnalyticsJsRoute = (cacheName) => {\n  const match = ({url}) => url.hostname === GOOGLE_ANALYTICS_HOST &&\n      url.pathname === ANALYTICS_JS_PATH;\n  const handler = new NetworkFirst({cacheName});\n\n  return new Route(match, handler, 'GET');\n};\n\n/**\n * Creates a route with a network first strategy for the gtag.js script.\n *\n * @param {string} cacheName\n * @return {Route} The created route.\n *\n * @private\n */\nconst createGtagJsRoute = (cacheName) => {\n  const match = ({url}) => url.hostname === GTM_HOST &&\n      url.pathname === GTAG_JS_PATH;\n  const handler = new NetworkFirst({cacheName});\n\n  return new Route(match, handler, 'GET');\n};\n\n/**\n * Creates a route with a network first strategy for the gtm.js script.\n *\n * @param {string} cacheName\n * @return {Route} The created route.\n *\n * @private\n */\nconst createGtmJsRoute = (cacheName) => {\n  const match = ({url}) => url.hostname === GTM_HOST &&\n      url.pathname === GTM_JS_PATH;\n  const handler = new NetworkFirst({cacheName});\n\n  return new Route(match, handler, 'GET');\n};\n\n/**\n * @param {Object=} [options]\n * @param {Object} [options.cacheName] The cache name to store and retrieve\n *     analytics.js. Defaults to the cache names provided by `workbox-core`.\n * @param {Object} [options.parameterOverrides]\n *     [Measurement Protocol parameters](https://developers.google.com/analytics/devguides/collection/protocol/v1/parameters),\n *     expressed as key/value pairs, to be added to replayed Google Analytics\n *     requests. This can be used to, e.g., set a custom dimension indicating\n *     that the request was replayed.\n * @param {Function} [options.hitFilter] A function that allows you to modify\n *     the hit parameters prior to replaying\n *     the hit. The function is invoked with the original hit's URLSearchParams\n *     object as its only argument.\n *\n * @memberof workbox.googleAnalytics\n */\nconst initialize = (options = {}) => {\n  const cacheName = cacheNames.getGoogleAnalyticsName(options.cacheName);\n\n  const queuePlugin = new Plugin(QUEUE_NAME, {\n    maxRetentionTime: MAX_RETENTION_TIME,\n    onSync: createOnSyncCallback(options),\n  });\n\n  const routes = [\n    createGtmJsRoute(cacheName),\n    createAnalyticsJsRoute(cacheName),\n    createGtagJsRoute(cacheName),\n    ...createCollectRoutes(queuePlugin),\n  ];\n\n  const router = new Router();\n  for (const route of routes) {\n    router.registerRoute(route);\n  }\n\n  router.addFetchListener();\n};\n\nexport {\n  initialize,\n};\n","/*\n  Copyright 2018 Google LLC\n\n  Use of this source code is governed by an MIT-style\n  license that can be found in the LICENSE file or at\n  https://opensource.org/licenses/MIT.\n*/\n\nimport {initialize} from './initialize.mjs';\nimport './_version.mjs';\n\n\n/**\n * @namespace workbox.googleAnalytics\n */\n\nexport {\n  initialize,\n};\n"],"names":["self","_","e","QUEUE_NAME","MAX_RETENTION_TIME","GOOGLE_ANALYTICS_HOST","GTM_HOST","ANALYTICS_JS_PATH","GTAG_JS_PATH","GTM_JS_PATH","COLLECT_PATHS_REGEX","createOnSyncCallback","config","queue","entry","shiftRequest","request","timestamp","url","URL","params","method","URLSearchParams","clone","text","searchParams","originalHitTime","Number","get","queueTime","Date","now","set","parameterOverrides","param","Object","keys","value","hitFilter","call","fetch","Request","origin","pathname","body","toString","mode","credentials","headers","logger","log","getFriendlyURL","href","err","unshiftRequest","createCollectRoutes","queuePlugin","match","hostname","test","handler","NetworkOnly","plugins","Route","createAnalyticsJsRoute","cacheName","NetworkFirst","createGtagJsRoute","createGtmJsRoute","initialize","options","cacheNames","getGoogleAnalyticsName","Plugin","maxRetentionTime","onSync","routes","router","Router","route","registerRoute","addFetchListener"],"mappings":";;;;EAAA,IAAG;EAACA,EAAAA,IAAI,CAAC,gCAAD,CAAJ,IAAwCC,CAAC,EAAzC;EAA4C,CAAhD,CAAgD,OAAMC,CAAN,EAAQ;;ECAxD;;;;;;;AAQA,EAEO,MAAMC,UAAU,GAAG,0BAAnB;AACP,EAAO,MAAMC,kBAAkB,GAAG,KAAK,EAAhC;;AACP,EAAO,MAAMC,qBAAqB,GAAG,0BAA9B;AACP,EAAO,MAAMC,QAAQ,GAAG,0BAAjB;AACP,EAAO,MAAMC,iBAAiB,GAAG,eAA1B;AACP,EAAO,MAAMC,YAAY,GAAG,UAArB;AACP,EAAO,MAAMC,WAAW,GAAG,SAApB;AACP,EAGA;EACA;EACA;;AACA,EAAO,MAAMC,mBAAmB,GAAG,oBAA5B;;ECvBP;;;;;;;AAQA,EAoBA;;;;;;;;;;;;EAWA,MAAMC,oBAAoB,GAAIC,MAAD,IAAY;EACvC,SAAO,OAAO;EAACC,IAAAA;EAAD,GAAP,KAAmB;EACxB,QAAIC,KAAJ;;EACA,WAAOA,KAAK,GAAG,MAAMD,KAAK,CAACE,YAAN,EAArB,EAA2C;EACzC,YAAM;EAACC,QAAAA,OAAD;EAAUC,QAAAA;EAAV,UAAuBH,KAA7B;EACA,YAAMI,GAAG,GAAG,IAAIC,GAAJ,CAAQH,OAAO,CAACE,GAAhB,CAAZ;;EAEA,UAAI;EACF;EACA;EACA,cAAME,MAAM,GAAGJ,OAAO,CAACK,MAAR,KAAmB,MAAnB,GACX,IAAIC,eAAJ,EAAoB,MAAMN,OAAO,CAACO,KAAR,GAAgBC,IAAhB,EAA1B,EADW,GAEXN,GAAG,CAACO,YAFR,CAHE;EAQF;;EACA,cAAMC,eAAe,GAAGT,SAAS,IAAIU,MAAM,CAACP,MAAM,CAACQ,GAAP,CAAW,IAAX,CAAD,CAAN,IAA4B,CAAhC,CAAjC;EACA,cAAMC,SAAS,GAAGC,IAAI,CAACC,GAAL,KAAaL,eAA/B,CAVE;;EAaFN,QAAAA,MAAM,CAACY,GAAP,CAAW,IAAX,EAAiBH,SAAjB,EAbE;;EAgBF,YAAIjB,MAAM,CAACqB,kBAAX,EAA+B;EAC7B,eAAK,MAAMC,KAAX,IAAoBC,MAAM,CAACC,IAAP,CAAYxB,MAAM,CAACqB,kBAAnB,CAApB,EAA4D;EAC1D,kBAAMI,KAAK,GAAGzB,MAAM,CAACqB,kBAAP,CAA0BC,KAA1B,CAAd;EACAd,YAAAA,MAAM,CAACY,GAAP,CAAWE,KAAX,EAAkBG,KAAlB;EACD;EACF,SArBC;;;EAwBF,YAAI,OAAOzB,MAAM,CAAC0B,SAAd,KAA4B,UAAhC,EAA4C;EAC1C1B,UAAAA,MAAM,CAAC0B,SAAP,CAAiBC,IAAjB,CAAsB,IAAtB,EAA4BnB,MAA5B;EACD,SA1BC;EA6BF;;;EACA,cAAMoB,KAAK,CAAC,IAAIC,OAAJ,CAAYvB,GAAG,CAACwB,MAAJ,GAAaxB,GAAG,CAACyB,QAA7B,EAAuC;EACjDC,UAAAA,IAAI,EAAExB,MAAM,CAACyB,QAAP,EAD2C;EAEjDxB,UAAAA,MAAM,EAAE,MAFyC;EAGjDyB,UAAAA,IAAI,EAAE,MAH2C;EAIjDC,UAAAA,WAAW,EAAE,MAJoC;EAKjDC,UAAAA,OAAO,EAAE;EAAC,4BAAgB;EAAjB;EALwC,SAAvC,CAAD,CAAX;;EASA,QAA2C;EACzCC,UAAAA,iBAAM,CAACC,GAAP,CAAY,gBAAeC,iCAAc,CAACjC,GAAG,CAACkC,IAAL,CAAW,GAAzC,GACP,mBADJ;EAED;EACF,OA3CD,CA2CE,OAAOC,GAAP,EAAY;EACZ,cAAMxC,KAAK,CAACyC,cAAN,CAAqBxC,KAArB,CAAN;;EAEA,QAA2C;EACzCmC,UAAAA,iBAAM,CAACC,GAAP,CAAY,gBAAeC,iCAAc,CAACjC,GAAG,CAACkC,IAAL,CAAW,GAAzC,GACP,iDADJ;EAED;;EACD,cAAMC,GAAN;EACD;EACF;;EACD,IAA2C;EACzCJ,MAAAA,iBAAM,CAACC,GAAP,CAAY,sDAAD,GACN,yBADL;EAED;EACF,GA/DD;EAgED,CAjED;EAmEA;;;;;;;;;;EAQA,MAAMK,mBAAmB,GAAIC,WAAD,IAAiB;EAC3C,QAAMC,KAAK,GAAG,CAAC;EAACvC,IAAAA;EAAD,GAAD,KAAWA,GAAG,CAACwC,QAAJ,KAAiBrD,qBAAjB,IACrBK,mBAAmB,CAACiD,IAApB,CAAyBzC,GAAG,CAACyB,QAA7B,CADJ;;EAGA,QAAMiB,OAAO,GAAG,IAAIC,2BAAJ,CAAgB;EAC9BC,IAAAA,OAAO,EAAE,CAACN,WAAD;EADqB,GAAhB,CAAhB;EAIA,SAAO,CACL,IAAIO,eAAJ,CAAUN,KAAV,EAAiBG,OAAjB,EAA0B,KAA1B,CADK,EAEL,IAAIG,eAAJ,CAAUN,KAAV,EAAiBG,OAAjB,EAA0B,MAA1B,CAFK,CAAP;EAID,CAZD;EAcA;;;;;;;;;;EAQA,MAAMI,sBAAsB,GAAIC,SAAD,IAAe;EAC5C,QAAMR,KAAK,GAAG,CAAC;EAACvC,IAAAA;EAAD,GAAD,KAAWA,GAAG,CAACwC,QAAJ,KAAiBrD,qBAAjB,IACrBa,GAAG,CAACyB,QAAJ,KAAiBpC,iBADrB;;EAEA,QAAMqD,OAAO,GAAG,IAAIM,6BAAJ,CAAiB;EAACD,IAAAA;EAAD,GAAjB,CAAhB;EAEA,SAAO,IAAIF,eAAJ,CAAUN,KAAV,EAAiBG,OAAjB,EAA0B,KAA1B,CAAP;EACD,CAND;EAQA;;;;;;;;;;EAQA,MAAMO,iBAAiB,GAAIF,SAAD,IAAe;EACvC,QAAMR,KAAK,GAAG,CAAC;EAACvC,IAAAA;EAAD,GAAD,KAAWA,GAAG,CAACwC,QAAJ,KAAiBpD,QAAjB,IACrBY,GAAG,CAACyB,QAAJ,KAAiBnC,YADrB;;EAEA,QAAMoD,OAAO,GAAG,IAAIM,6BAAJ,CAAiB;EAACD,IAAAA;EAAD,GAAjB,CAAhB;EAEA,SAAO,IAAIF,eAAJ,CAAUN,KAAV,EAAiBG,OAAjB,EAA0B,KAA1B,CAAP;EACD,CAND;EAQA;;;;;;;;;;EAQA,MAAMQ,gBAAgB,GAAIH,SAAD,IAAe;EACtC,QAAMR,KAAK,GAAG,CAAC;EAACvC,IAAAA;EAAD,GAAD,KAAWA,GAAG,CAACwC,QAAJ,KAAiBpD,QAAjB,IACrBY,GAAG,CAACyB,QAAJ,KAAiBlC,WADrB;;EAEA,QAAMmD,OAAO,GAAG,IAAIM,6BAAJ,CAAiB;EAACD,IAAAA;EAAD,GAAjB,CAAhB;EAEA,SAAO,IAAIF,eAAJ,CAAUN,KAAV,EAAiBG,OAAjB,EAA0B,KAA1B,CAAP;EACD,CAND;EAQA;;;;;;;;;;;;;;;;;;AAgBA,QAAMS,UAAU,GAAG,CAACC,OAAO,GAAG,EAAX,KAAkB;EACnC,QAAML,SAAS,GAAGM,yBAAU,CAACC,sBAAX,CAAkCF,OAAO,CAACL,SAA1C,CAAlB;EAEA,QAAMT,WAAW,GAAG,IAAIiB,iBAAJ,CAAWtE,UAAX,EAAuB;EACzCuE,IAAAA,gBAAgB,EAAEtE,kBADuB;EAEzCuE,IAAAA,MAAM,EAAEhE,oBAAoB,CAAC2D,OAAD;EAFa,GAAvB,CAApB;EAKA,QAAMM,MAAM,GAAG,CACbR,gBAAgB,CAACH,SAAD,CADH,EAEbD,sBAAsB,CAACC,SAAD,CAFT,EAGbE,iBAAiB,CAACF,SAAD,CAHJ,EAIb,GAAGV,mBAAmB,CAACC,WAAD,CAJT,CAAf;EAOA,QAAMqB,MAAM,GAAG,IAAIC,iBAAJ,EAAf;;EACA,OAAK,MAAMC,KAAX,IAAoBH,MAApB,EAA4B;EAC1BC,IAAAA,MAAM,CAACG,aAAP,CAAqBD,KAArB;EACD;;EAEDF,EAAAA,MAAM,CAACI,gBAAP;EACD,CArBD;;EChMA;;;;;;;;;;;;;;;;"}