diff options
| author | ruki <waruqi@gmail.com> | 2018-11-08 00:38:48 +0800 |
|---|---|---|
| committer | ruki <waruqi@gmail.com> | 2018-11-07 21:53:09 +0800 |
| commit | 26105034da4fcce7ac883c899d781f016559310d (patch) | |
| tree | c459a5dc4e3aa0972d9919033ece511ce76dd129 /node_modules/workbox-google-analytics | |
| parent | 2c77f00f1a7ecb6c8192f9c16d3b2001b254a107 (diff) | |
| download | xmake-docs-26105034da4fcce7ac883c899d781f016559310d.tar.gz xmake-docs-26105034da4fcce7ac883c899d781f016559310d.zip | |
switch to vuepress
Diffstat (limited to 'node_modules/workbox-google-analytics')
| -rw-r--r-- | node_modules/workbox-google-analytics/LICENSE | 201 | ||||
| -rw-r--r-- | node_modules/workbox-google-analytics/README.md | 1 | ||||
| -rw-r--r-- | node_modules/workbox-google-analytics/_default.mjs | 212 | ||||
| -rw-r--r-- | node_modules/workbox-google-analytics/_version.mjs | 1 | ||||
| -rw-r--r-- | node_modules/workbox-google-analytics/browser.mjs | 18 | ||||
| -rw-r--r-- | node_modules/workbox-google-analytics/index.mjs | 22 | ||||
| -rw-r--r-- | node_modules/workbox-google-analytics/package.json | 36 | ||||
| -rw-r--r-- | node_modules/workbox-google-analytics/utils/constants.mjs | 30 |
8 files changed, 521 insertions, 0 deletions
diff --git a/node_modules/workbox-google-analytics/LICENSE b/node_modules/workbox-google-analytics/LICENSE new file mode 100644 index 00000000..136b9039 --- /dev/null +++ b/node_modules/workbox-google-analytics/LICENSE @@ -0,0 +1,201 @@ + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "{}" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright 2017 Google, Inc. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/node_modules/workbox-google-analytics/README.md b/node_modules/workbox-google-analytics/README.md new file mode 100644 index 00000000..3678fb2f --- /dev/null +++ b/node_modules/workbox-google-analytics/README.md @@ -0,0 +1 @@ +This module's documentation can be found at https://developers.google.com/web/tools/workbox/modules/workbox-google-analytics diff --git a/node_modules/workbox-google-analytics/_default.mjs b/node_modules/workbox-google-analytics/_default.mjs new file mode 100644 index 00000000..306915bc --- /dev/null +++ b/node_modules/workbox-google-analytics/_default.mjs @@ -0,0 +1,212 @@ +/* + Copyright 2017 Google Inc. All Rights Reserved. + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ + +import {Plugin} from 'workbox-background-sync/Plugin.mjs'; +import {cacheNames} from 'workbox-core/_private/cacheNames.mjs'; +import {Route} from 'workbox-routing/Route.mjs'; +import {Router} from 'workbox-routing/Router.mjs'; +import {NetworkFirst} from 'workbox-strategies/NetworkFirst.mjs'; +import {NetworkOnly} from 'workbox-strategies/NetworkOnly.mjs'; +import { + QUEUE_NAME, + MAX_RETENTION_TIME, + GOOGLE_ANALYTICS_HOST, + GTM_HOST, + ANALYTICS_JS_PATH, + GTAG_JS_PATH, + COLLECT_PATHS_REGEX, +} from './utils/constants.mjs'; +import './_version.mjs'; + +/** + * Promisifies the FileReader API to await a text response from a Blob. + * + * @param {Blob} blob + * @return {Promise<string>} + * + * @private + */ +const getTextFromBlob = async (blob) => { + // This usage of `return await new Promise...` is intentional to work around + // a bug in the transpiled/minified output. + // See https://github.com/GoogleChrome/workbox/issues/1186 + return await new Promise((resolve, reject) => { + const reader = new FileReader(); + reader.onloadend = () => resolve(reader.result); + reader.onerror = () => reject(reader.error); + reader.readAsText(blob); + }); +}; + +/** + * Creates the requestWillDequeue callback to be used with the background + * sync queue plugin. The callback takes the failed request and adds the + * `qt` param based on the current time, as well as applies any other + * user-defined hit modifications. + * + * @param {Object} config See workbox.googleAnalytics.initialize. + * @return {Function} The requestWillDequeu callback function. + * + * @private + */ +const createRequestWillReplayCallback = (config) => { + return async (storableRequest) => { + let {url, requestInit, timestamp} = storableRequest; + url = new URL(url); + + // Measurement protocol requests can set their payload parameters in either + // the URL query string (for GET requests) or the POST body. + let params; + if (requestInit.body) { + const payload = requestInit.body instanceof Blob ? + await getTextFromBlob(requestInit.body) : requestInit.body; + + params = new URLSearchParams(payload); + } else { + params = url.searchParams; + } + + // Calculate the qt param, accounting for the fact that an existing + // qt param may be present and should be updated rather than replaced. + const originalHitTime = timestamp - (Number(params.get('qt')) || 0); + const queueTime = Date.now() - originalHitTime; + + // Set the qt param prior to applying the hitFilter or parameterOverrides. + params.set('qt', queueTime); + + if (config.parameterOverrides) { + for (const param of Object.keys(config.parameterOverrides)) { + const value = config.parameterOverrides[param]; + params.set(param, value); + } + } + + if (typeof config.hitFilter === 'function') { + config.hitFilter.call(null, params); + } + + requestInit.body = params.toString(); + requestInit.method = 'POST'; + requestInit.mode = 'cors'; + requestInit.credentials = 'omit'; + requestInit.headers = {'Content-Type': 'text/plain'}; + + // Ignore URL search params as they're now in the post body. + storableRequest.url = `${url.origin}${url.pathname}`; + }; +}; + +/** + * Creates GET and POST routes to catch failed Measurement Protocol hits. + * + * @param {Plugin} queuePlugin + * @return {Array<Route>} The created routes. + * + * @private + */ +const createCollectRoutes = (queuePlugin) => { + const match = ({url}) => url.hostname === GOOGLE_ANALYTICS_HOST && + COLLECT_PATHS_REGEX.test(url.pathname); + + const handler = new NetworkOnly({ + plugins: [queuePlugin], + }); + + return [ + new Route(match, handler, 'GET'), + new Route(match, handler, 'POST'), + ]; +}; + +/** + * Creates a route with a network first strategy for the analytics.js script. + * + * @param {string} cacheName + * @return {Route} The created route. + * + * @private + */ +const createAnalyticsJsRoute = (cacheName) => { + const match = ({url}) => url.hostname === GOOGLE_ANALYTICS_HOST && + url.pathname === ANALYTICS_JS_PATH; + const handler = new NetworkFirst({cacheName}); + + return new Route(match, handler, 'GET'); +}; + +/** + * Creates a route with a network first strategy for the gtag.js script. + * + * @param {string} cacheName + * @return {Route} The created route. + * + * @private + */ +const createGtagJsRoute = (cacheName) => { + const match = ({url}) => url.hostname === GTM_HOST && + url.pathname === GTAG_JS_PATH; + const handler = new NetworkFirst({cacheName}); + + return new Route(match, handler, 'GET'); +}; + +/** + * @param {Object=} [options] + * @param {Object} [options.cacheName] The cache name to store and retrieve + * analytics.js. Defaults to the cache names provided by `workbox-core`. + * @param {Object} [options.parameterOverrides] + * [Measurement Protocol parameters](https://developers.google.com/analytics/devguides/collection/protocol/v1/parameters), + * expressed as key/value pairs, to be added to replayed Google Analytics + * requests. This can be used to, e.g., set a custom dimension indicating + * that the request was replayed. + * @param {Function} [options.hitFilter] A function that allows you to modify + * the hit parameters prior to replaying + * the hit. The function is invoked with the original hit's URLSearchParams + * object as its only argument. + * + * @memberof workbox.googleAnalytics + */ +const initialize = (options = {}) => { + const cacheName = cacheNames.getGoogleAnalyticsName(options.cacheName); + + const queuePlugin = new Plugin(QUEUE_NAME, { + maxRetentionTime: MAX_RETENTION_TIME, + callbacks: { + requestWillReplay: createRequestWillReplayCallback(options), + }, + }); + + const routes = [ + createAnalyticsJsRoute(cacheName), + createGtagJsRoute(cacheName), + ...createCollectRoutes(queuePlugin), + ]; + + const router = new Router(); + for (const route of routes) { + router.registerRoute(route); + } + + self.addEventListener('fetch', (evt) => { + const responsePromise = router.handleRequest(evt); + if (responsePromise) { + evt.respondWith(responsePromise); + } + }); +}; + +export { + initialize, +}; diff --git a/node_modules/workbox-google-analytics/_version.mjs b/node_modules/workbox-google-analytics/_version.mjs new file mode 100644 index 00000000..efbe0efc --- /dev/null +++ b/node_modules/workbox-google-analytics/_version.mjs @@ -0,0 +1 @@ +try{self.workbox.v['workbox:google-analytics:3.6.3']=1;}catch(e){} // eslint-disable-line
\ No newline at end of file diff --git a/node_modules/workbox-google-analytics/browser.mjs b/node_modules/workbox-google-analytics/browser.mjs new file mode 100644 index 00000000..fdea18d9 --- /dev/null +++ b/node_modules/workbox-google-analytics/browser.mjs @@ -0,0 +1,18 @@ +/* + Copyright 2017 Google Inc. All Rights Reserved. + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ + +import './_version.mjs'; + +export * from './_default.mjs'; diff --git a/node_modules/workbox-google-analytics/index.mjs b/node_modules/workbox-google-analytics/index.mjs new file mode 100644 index 00000000..a63c22f0 --- /dev/null +++ b/node_modules/workbox-google-analytics/index.mjs @@ -0,0 +1,22 @@ +/* + Copyright 2017 Google Inc. All Rights Reserved. + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ + +import './_version.mjs'; + +/** + * @namespace workbox.googleAnalytics + */ + +export * from './_default.mjs'; diff --git a/node_modules/workbox-google-analytics/package.json b/node_modules/workbox-google-analytics/package.json new file mode 100644 index 00000000..919ff797 --- /dev/null +++ b/node_modules/workbox-google-analytics/package.json @@ -0,0 +1,36 @@ +{ + "name": "workbox-google-analytics", + "version": "3.6.3", + "license": "Apache-2.0", + "author": "Google's Web DevRel Team", + "description": "Queues failed requests and uses the Background Sync API to replay them when the network is available", + "repository": "googlechrome/workbox", + "bugs": "https://github.com/googlechrome/workbox/issues", + "homepage": "https://github.com/GoogleChrome/workbox", + "keywords": [ + "workbox", + "workboxjs", + "service worker", + "sw", + "offline", + "google", + "analytics" + ], + "scripts": { + "build": "gulp build-packages --package workbox-google-analytics", + "version": "npm run build", + "prepare": "npm run build" + }, + "workbox": { + "browserNamespace": "workbox.googleAnalytics", + "packageType": "browser" + }, + "main": "build/workbox-google-analytics.prod.js", + "module": "index.mjs", + "dependencies": { + "workbox-background-sync": "^3.6.3", + "workbox-core": "^3.6.3", + "workbox-routing": "^3.6.3", + "workbox-strategies": "^3.6.3" + } +} diff --git a/node_modules/workbox-google-analytics/utils/constants.mjs b/node_modules/workbox-google-analytics/utils/constants.mjs new file mode 100644 index 00000000..d52cf431 --- /dev/null +++ b/node_modules/workbox-google-analytics/utils/constants.mjs @@ -0,0 +1,30 @@ +/* + Copyright 2017 Google Inc. All Rights Reserved. + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ + +import '../_version.mjs'; + +export const QUEUE_NAME = 'workbox-google-analytics'; +export const MAX_RETENTION_TIME = 60 * 48; // Two days in minutes +export const GOOGLE_ANALYTICS_HOST = 'www.google-analytics.com'; +export const GTM_HOST = 'www.googletagmanager.com'; +export const ANALYTICS_JS_PATH = '/analytics.js'; +export const GTAG_JS_PATH = '/gtag/js'; +export const COLLECT_DEFAULT_PATH = '/collect'; + +// This RegExp matches all known Measurement Protocol single-hit collect +// endpoints. Most of the time the default path (/collect) is used, but +// occasionally an experimental endpoint is used when testing new features, +// (e.g. /r/collect or /j/collect) +export const COLLECT_PATHS_REGEX = /^\/(\w+\/)?collect/; |
