diff --git a/package.json b/package.json index fe4338a0..c9717506 100644 --- a/package.json +++ b/package.json @@ -93,7 +93,7 @@ }, "dependencies": { "acorn": "^8.7.0", - "brotli-size": "0.0.3", + "brotli-size": "4.0.0", "gzip-size": "^5.0.0", "prettier": "^1.18.2", "pretty-bytes": "^5.1.0" diff --git a/packages/analytics-plugin-google-analytics-v3/README.md b/packages/analytics-plugin-google-analytics-v3/README.md index 3acbd806..4f9de812 100644 --- a/packages/analytics-plugin-google-analytics-v3/README.md +++ b/packages/analytics-plugin-google-analytics-v3/README.md @@ -127,18 +127,19 @@ const analytics = Analytics({ ### Configuration options for browser -| Option | description | -|:---------------------------|:-----------| -| `trackingId`
**required** - string| Google Analytics site tracking Id | -| `debug`
_optional_ - boolean| Enable Google Analytics debug mode | -| `anonymizeIp`
_optional_ - boolean| Enable [Anonymizing IP addresses](https://bit.ly/3c660Rd) sent to Google Analytics. [See details below](#anonymize-visitor-ips) | -| `customDimensions`
_optional_ - object| Map [Custom dimensions](https://bit.ly/3c5de88) to send extra information to Google Analytics. [See details below](#using-ga-custom-dimensions) | +| Option | description | +|:------------------------------------------------------|:-----------| +| `trackingId`
**required** - string | Google Analytics site tracking Id | +| `debug`
_optional_ - boolean | Enable Google Analytics debug mode | +| `anonymizeIp`
_optional_ - boolean | Enable [Anonymizing IP addresses](https://bit.ly/3c660Rd) sent to Google Analytics. [See details below](#anonymize-visitor-ips) | +| `customDimensions`
_optional_ - object | Map [Custom dimensions](https://bit.ly/3c5de88) to send extra information to Google Analytics. [See details below](#using-ga-custom-dimensions) | | `resetCustomDimensionsOnPage`
_optional_ - object| Reset custom dimensions by key on analytics.page() calls. Useful for single page apps. | -| `setCustomDimensionsToPage`
_optional_ - boolean| Mapped dimensions will be set to the page & sent as properties of all subsequent events on that page. If false, analytics will only pass custom dimensions as part of individual events | -| `instanceName`
_optional_ - string| Custom tracker name for google analytics. Use this if you need multiple googleAnalytics scripts loaded | -| `customScriptSrc`
_optional_ - string| Custom URL for google analytics script, if proxying calls | -| `cookieConfig`
_optional_ - object| Additional cookie properties for configuring the [ga cookie](https://developers.google.com/analytics/devguides/collection/analyticsjs/cookies-user-id#configuring_cookie_field_settings) | -| `tasks`
_optional_ - object| [Set custom google analytic tasks](https://developers.google.com/analytics/devguides/collection/analyticsjs/tasks) | +| `setCustomDimensionsToPage`
_optional_ - boolean | Mapped dimensions will be set to the page & sent as properties of all subsequent events on that page. If false, analytics will only pass custom dimensions as part of individual events | +| `instanceName`
_optional_ - string | Custom tracker name for google analytics. Use this if you need multiple googleAnalytics scripts loaded | +| `customScriptSrc`
_optional_ - string | Custom URL for google analytics script, if proxying calls | +| `cookieConfig`
_optional_ - object | Additional cookie properties for configuring the [ga cookie](https://developers.google.com/analytics/devguides/collection/analyticsjs/cookies-user-id#configuring_cookie_field_settings) | +| `tasks`
_optional_ - object | [Set custom google analytic tasks](https://developers.google.com/analytics/devguides/collection/analyticsjs/tasks) | +| `nonce`
_optional_ - string | Content-Security-Policy nonce value | ## Server-side usage diff --git a/packages/analytics-plugin-google-analytics-v3/src/browser.js b/packages/analytics-plugin-google-analytics-v3/src/browser.js index 1adf131f..35182043 100644 --- a/packages/analytics-plugin-google-analytics-v3/src/browser.js +++ b/packages/analytics-plugin-google-analytics-v3/src/browser.js @@ -37,6 +37,7 @@ let loadedInstances = {} * @param {string} [pluginConfig.customScriptSrc] - Custom URL for google analytics script, if proxying calls * @param {object} [pluginConfig.cookieConfig] - Additional cookie properties for configuring the [ga cookie](https://developers.google.com/analytics/devguides/collection/analyticsjs/cookies-user-id#configuring_cookie_field_settings) * @param {object} [pluginConfig.tasks] - [Set custom google analytic tasks](https://developers.google.com/analytics/devguides/collection/analyticsjs/tasks) + * @param {string} [pluginConfig.nonce] - Content-Security-Policy nonce value * @return {*} * @example * @@ -58,7 +59,7 @@ function googleAnalyticsV3(pluginConfig = {}) { initialize: (pluginApi) => { const { config, instance } = pluginApi if (!config.trackingId) throw new Error('No GA trackingId defined') - const { customDimensions, customScriptSrc } = config + const { customDimensions, customScriptSrc, nonce } = config // var to hoist const scriptSrc = customScriptSrc || 'https://www.google-analytics.com/analytics.js' // Load google analytics script to page @@ -68,7 +69,7 @@ function googleAnalyticsV3(pluginConfig = {}) { i['GoogleAnalyticsObject'] = r; i[r] = i[r] || function() { (i[r].q = i[r].q || []).push(arguments) }, i[r].l = 1 * new Date(); a = s.createElement(o), - m = s.getElementsByTagName(o)[0]; a.async = 1; a.src = g; m.parentNode.insertBefore(a, m) + m = s.getElementsByTagName(o)[0]; a.async = 1; a.src = g; nonce && a.setAttribute('nonce', nonce); m.parentNode.insertBefore(a, m) })(window, document, 'script', scriptSrc, 'ga') /* eslint-enable */ } diff --git a/packages/analytics-plugin-google-analytics/README.md b/packages/analytics-plugin-google-analytics/README.md index 010c9e88..fcdcb9a0 100644 --- a/packages/analytics-plugin-google-analytics/README.md +++ b/packages/analytics-plugin-google-analytics/README.md @@ -108,19 +108,20 @@ const analytics = Analytics({ ### Configuration options for browser -| Option | description | -|:---------------------------|:-----------| -| `measurementIds`
**required** - Array.| Google Analytics MEASUREMENT IDs | -| `debug`
_optional_ - boolean| Enable Google Analytics debug mode | -| `dataLayerName`
_optional_ - string| The optional name for dataLayer object. Defaults to ga4DataLayer. | -| `gtagName`
_optional_ - string| The optional name for dataLayer object. Defaults to `gtag`. | -| `gtagConfig.anonymize_ip`
_optional_ - boolean| Enable [Anonymizing IP addresses](https://bit.ly/3c660Rd) sent to Google Analytics. | -| `gtagConfig.cookie_domain`
_optional_ - object| Additional cookie properties for configuring the [ga cookie](https://developers.google.com/analytics/devguides/collection/analyticsjs/cookies-user-id#configuring_cookie_field_settings) | +| Option | description | +|:----------------------------------------------------|:-----------| +| `measurementIds`
**required** - Array. | Google Analytics MEASUREMENT IDs | +| `debug`
_optional_ - boolean | Enable Google Analytics debug mode | +| `dataLayerName`
_optional_ - string | The optional name for dataLayer object. Defaults to ga4DataLayer. | +| `gtagName`
_optional_ - string | The optional name for dataLayer object. Defaults to `gtag`. | +| `gtagConfig.anonymize_ip`
_optional_ - boolean | Enable [Anonymizing IP addresses](https://bit.ly/3c660Rd) sent to Google Analytics. | +| `gtagConfig.cookie_domain`
_optional_ - object | Additional cookie properties for configuring the [ga cookie](https://developers.google.com/analytics/devguides/collection/analyticsjs/cookies-user-id#configuring_cookie_field_settings) | | `gtagConfig.cookie_expires`
_optional_ - object| Additional cookie properties for configuring the [ga cookie](https://developers.google.com/analytics/devguides/collection/analyticsjs/cookies-user-id#configuring_cookie_field_settings) | -| `gtagConfig.cookie_prefix`
_optional_ - object| Additional cookie properties for configuring the [ga cookie](https://developers.google.com/analytics/devguides/collection/analyticsjs/cookies-user-id#configuring_cookie_field_settings) | -| `gtagConfig.cookie_update`
_optional_ - object| Additional cookie properties for configuring the [ga cookie](https://developers.google.com/analytics/devguides/collection/analyticsjs/cookies-user-id#configuring_cookie_field_settings) | -| `gtagConfig.cookie_flags`
_optional_ - object| Additional cookie properties for configuring the [ga cookie](https://developers.google.com/analytics/devguides/collection/analyticsjs/cookies-user-id#configuring_cookie_field_settings) | -| `customScriptSrc`
_optional_ - string| Custom URL for google analytics script, if proxying calls | +| `gtagConfig.cookie_prefix`
_optional_ - object | Additional cookie properties for configuring the [ga cookie](https://developers.google.com/analytics/devguides/collection/analyticsjs/cookies-user-id#configuring_cookie_field_settings) | +| `gtagConfig.cookie_update`
_optional_ - object | Additional cookie properties for configuring the [ga cookie](https://developers.google.com/analytics/devguides/collection/analyticsjs/cookies-user-id#configuring_cookie_field_settings) | +| `gtagConfig.cookie_flags`
_optional_ - object | Additional cookie properties for configuring the [ga cookie](https://developers.google.com/analytics/devguides/collection/analyticsjs/cookies-user-id#configuring_cookie_field_settings) | +| `customScriptSrc`
_optional_ - string | Custom URL for google analytics script, if proxying calls | +| `nonce`
_optional_ - string | Content-Security-Policy nonce value | ## Additional examples diff --git a/packages/analytics-plugin-google-analytics/src/browser.js b/packages/analytics-plugin-google-analytics/src/browser.js index 944e68bf..609a77c8 100644 --- a/packages/analytics-plugin-google-analytics/src/browser.js +++ b/packages/analytics-plugin-google-analytics/src/browser.js @@ -62,6 +62,7 @@ const defaultConfig = { * @param {object} [pluginConfig.gtagConfig.cookie_update] - Additional cookie properties for configuring the [ga cookie](https://developers.google.com/analytics/devguides/collection/analyticsjs/cookies-user-id#configuring_cookie_field_settings) * @param {object} [pluginConfig.gtagConfig.cookie_flags] - Additional cookie properties for configuring the [ga cookie](https://developers.google.com/analytics/devguides/collection/analyticsjs/cookies-user-id#configuring_cookie_field_settings) * @param {string} [pluginConfig.customScriptSrc] - Custom URL for google analytics script, if proxying calls + * @param {string} [pluginConfig.nonce] - Content-Security-Policy nonce value * @return {*} * @example * @@ -82,7 +83,7 @@ function googleAnalytics(pluginConfig = {}) { config: initConfig, // Load gtag.js and define gtag initialize: ({ config, instance }) => { - const { dataLayerName, customScriptSrc, gtagName, gtagConfig, debug } = config + const { dataLayerName, customScriptSrc, gtagName, gtagConfig, debug, nonce } = config /* Inject google gtag.js script if not found */ /* If other gtags are loaded already, add ours anyway */ const customLayerName = dataLayerName ? `&l=${dataLayerName}` : ""; @@ -91,6 +92,9 @@ function googleAnalytics(pluginConfig = {}) { const script = document.createElement('script') script.async = true script.src = src + if (nonce) { + script.setAttribute('nonce', nonce); + } document.body.appendChild(script) } /* Set up gtag and datalayer */ diff --git a/packages/analytics-plugin-google-analytics/x.js b/packages/analytics-plugin-google-analytics/x.js deleted file mode 100644 index e69de29b..00000000 diff --git a/packages/analytics-plugin-google-tag-manager/README.md b/packages/analytics-plugin-google-tag-manager/README.md index 8230e8ed..450c9f3a 100644 --- a/packages/analytics-plugin-google-tag-manager/README.md +++ b/packages/analytics-plugin-google-tag-manager/README.md @@ -104,14 +104,15 @@ const analytics = Analytics({ ### Configuration options for browser -| Option | description | -|:---------------------------|:-----------| -| `containerId`
**required** - string| The Container ID uniquely identifies the GTM Container. | -| `dataLayerName`
_optional_ - string| The optional name for dataLayer-object. Defaults to dataLayer. | -| `customScriptSrc`
_optional_ - string| Load Google Tag Manager script from a custom source | -| `preview`
_optional_ - string| The preview-mode environment | -| `auth`
_optional_ - string| The preview-mode authentication credentials | -| `execution`
_optional_ - string| The script execution mode | +| Option | description | +|:-------------------------------------------|:---------------------------------------------------------------| +| `containerId`
**required** - string | The Container ID uniquely identifies the GTM Container. | +| `dataLayerName`
_optional_ - string | The optional name for dataLayer-object. Defaults to dataLayer. | +| `customScriptSrc`
_optional_ - string | Load Google Tag Manager script from a custom source | +| `preview`
_optional_ - string | The preview-mode environment | +| `auth`
_optional_ - string | The preview-mode authentication credentials | +| `execution`
_optional_ - string | The script execution mode | +| `nonce`
_optional_ - string | Content-Security-Policy nonce value | ## Additional examples diff --git a/packages/analytics-plugin-google-tag-manager/src/browser.js b/packages/analytics-plugin-google-tag-manager/src/browser.js index a2f14a74..0bb30ccc 100644 --- a/packages/analytics-plugin-google-tag-manager/src/browser.js +++ b/packages/analytics-plugin-google-tag-manager/src/browser.js @@ -22,6 +22,7 @@ let initializedDataLayerName; * @param {string} [pluginConfig.preview] - The preview-mode environment * @param {string} [pluginConfig.auth] - The preview-mode authentication credentials * @param {string} [pluginConfig.execution] - The script execution mode + * @param {string} [pluginConfig.nonce] - Content-Security-Policy nonce value * @return {object} Analytics plugin * @example * @@ -41,7 +42,7 @@ function googleTagManager(pluginConfig = {}) { ...pluginConfig }, initialize: ({ config }) => { - const { containerId, dataLayerName, customScriptSrc, preview, auth, execution } = config + const { containerId, dataLayerName, customScriptSrc, preview, auth, execution, nonce } = config if (!containerId) { throw new Error('No google tag manager containerId defined') } @@ -64,6 +65,9 @@ function googleTagManager(pluginConfig = {}) { j[execution] = true; } j.src = `${scriptSrc}?id=` + i + dl + p; + if (nonce) { + j.setAttribute('nonce', nonce); + } f.parentNode.insertBefore(j, f); })(window, document, 'script', dataLayerName, containerId); /* eslint-enable */ diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index ce18951e..354fdac5 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -12,8 +12,8 @@ importers: specifier: ^8.7.0 version: 8.7.0 brotli-size: - specifier: 0.0.3 - version: 0.0.3 + specifier: 4.0.0 + version: 4.0.0 gzip-size: specifier: ^5.0.0 version: 5.1.1 @@ -142,7 +142,7 @@ importers: packages/analytics: dependencies: '@analytics/core': - specifier: ^0.12.9 + specifier: ^0.12.15 version: link:../analytics-core '@analytics/storage-utils': specifier: ^0.4.2 @@ -307,7 +307,7 @@ importers: specifier: ^0.1.2 version: link:../analytics-util-queue '@analytics/session-utils': - specifier: ^0.1.19 + specifier: ^0.2.0 version: link:../analytics-util-session '@analytics/type-utils': specifier: ^0.3.1 @@ -342,7 +342,7 @@ importers: version: 7.15.3(@babel/core@7.15.8) aws-sdk-client-mock: specifier: ^0.5.5 - version: 0.5.5(@aws-sdk/client-s3@3.511.0)(@aws-sdk/types@3.38.0) + version: 0.5.5(@aws-sdk/client-s3@3.511.0)(@aws-sdk/types@3.511.0) c8: specifier: ^7.10.0 version: 7.10.0 @@ -2261,6 +2261,7 @@ packages: /@aws-sdk/types@3.38.0: resolution: {integrity: sha512-Opux3HLwMlWb7GIJxERsOnmbHrT2A1gsd8aF5zHapWPPH5Z0rYsgTIq64qgim896XlKlOw6/YzhD5CdyNjlQWg==} engines: {node: '>= 10.0.0'} + dev: false /@aws-sdk/types@3.511.0: resolution: {integrity: sha512-P03ufufxmkvd7nO46oOeEqYIMPJ8qMCKxAsfJk1JBVPQ1XctVntbail4/UFnrnzij8DTl4Mk/D62uGo7+RolXA==} @@ -5843,6 +5844,7 @@ packages: /@humanwhocodes/config-array@0.11.14: resolution: {integrity: sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==} engines: {node: '>=10.10.0'} + deprecated: Use @eslint/config-array instead dependencies: '@humanwhocodes/object-schema': 2.0.2 debug: 4.3.2(supports-color@8.1.1) @@ -5858,6 +5860,7 @@ packages: /@humanwhocodes/object-schema@2.0.2: resolution: {integrity: sha512-6EwiSjwWYP7pTckG6I5eyFANjPhmPjUX9JRLUSfNPC7FX7zK9gyZAfUEaECL6ALTpGX5AjnBq3C9XmVWPitNpw==} + deprecated: Use @eslint/object-schema instead dev: true /@istanbuljs/schema@0.1.3: @@ -8531,6 +8534,7 @@ packages: /ansi-regex@2.1.1: resolution: {integrity: sha1-w7M6te42DYbg5ijwRorn7yfWVN8=} engines: {node: '>=0.10.0'} + dev: true /ansi-regex@3.0.0: resolution: {integrity: sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=} @@ -8598,6 +8602,7 @@ packages: /aproba@1.2.0: resolution: {integrity: sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==} + dev: true /aproba@2.0.0: resolution: {integrity: sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==} @@ -8612,6 +8617,7 @@ packages: dependencies: delegates: 1.0.0 readable-stream: 2.3.7 + dev: true /arg@2.0.0: resolution: {integrity: sha512-XxNTUzKnz1ctK3ZIcI2XUPlD96wbHP2nGqkPKpvk/HNRlPveYrXIVSTk9m3LcqOgDPg3B1nMvdV/K8wZd7PG4w==} @@ -8964,14 +8970,14 @@ packages: - supports-color dev: true - /aws-sdk-client-mock@0.5.5(@aws-sdk/client-s3@3.511.0)(@aws-sdk/types@3.38.0): + /aws-sdk-client-mock@0.5.5(@aws-sdk/client-s3@3.511.0)(@aws-sdk/types@3.511.0): resolution: {integrity: sha512-djwyYj4vRAXGGH0nycd04/qxj4lK4UscK12dgRgYLigFzQ8EdM0+eZoFobbjXnXoPBG+YeN57UqrEbE1YW1qag==} peerDependencies: '@aws-sdk/client-s3': ^3.0.0 '@aws-sdk/types': ^3.0.0 dependencies: '@aws-sdk/client-s3': 3.511.0 - '@aws-sdk/types': 3.38.0 + '@aws-sdk/types': 3.511.0 '@types/sinon': 10.0.2 sinon: 11.1.2 tslib: 2.3.1 @@ -9310,6 +9316,7 @@ packages: /base64-js@1.5.1: resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} + dev: true /base@0.11.2: resolution: {integrity: sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==} @@ -9376,6 +9383,7 @@ packages: buffer: 5.7.1 inherits: 2.0.4 readable-stream: 3.6.0 + dev: true /bluebird@3.7.2: resolution: {integrity: sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==} @@ -9474,20 +9482,11 @@ packages: resolution: {integrity: sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=} dev: true - /brotli-size@0.0.3: - resolution: {integrity: sha512-bBIdd8uUGxKGldAVykxOqPegl+HlIm4FpXJamwWw5x77WCE8jO7AhXFE1YXOhOB28gS+2pTQete0FqRE6U5hQQ==} - engines: {node: '>=0.12.0'} - dependencies: - duplexer: 0.1.2 - iltorb: 2.4.5 - dev: false - /brotli-size@4.0.0: resolution: {integrity: sha512-uA9fOtlTRC0iqKfzff1W34DXUA3GyVqbUaeo3Rw3d4gd1eavKVCETXrn3NzO74W+UVkG3UHu8WxUi+XvKI/huA==} engines: {node: '>= 10.16.0'} dependencies: duplexer: 0.1.1 - dev: true /browser-process-hrtime@1.0.0: resolution: {integrity: sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow==} @@ -9614,6 +9613,7 @@ packages: dependencies: base64-js: 1.5.1 ieee754: 1.2.1 + dev: true /builtin-modules@3.2.0: resolution: {integrity: sha512-lGzLKcioL90C7wMczpkY0n/oART3MbBa8R9OFGE1rJxoVI86u4WAGfEk8Wjv10eKSyTHVGkSo3bvBylCEtk7LA==} @@ -10006,6 +10006,7 @@ packages: /chownr@1.1.4: resolution: {integrity: sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==} + dev: true /chownr@2.0.0: resolution: {integrity: sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==} @@ -10246,6 +10247,7 @@ packages: /code-point-at@1.1.0: resolution: {integrity: sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=} engines: {node: '>=0.10.0'} + dev: true /coffee-script@1.12.7: resolution: {integrity: sha512-fLeEhqwymYat/MpTPUjSKHVYYl0ec2mOyALEMLmzr5i1isuG+6jfI2j2d5oBO3VIzgUXgBVIcOT9uH1TFxBckw==} @@ -10534,6 +10536,7 @@ packages: /console-control-strings@1.1.0: resolution: {integrity: sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=} + dev: true /constants-browserify@1.0.0: resolution: {integrity: sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U=} @@ -11080,13 +11083,6 @@ packages: mimic-response: 1.0.1 dev: true - /decompress-response@4.2.1: - resolution: {integrity: sha512-jOSne2qbyE+/r8G1VU+G/82LBs2Fs4LAsTiLSHOCOMZQl2OKZ6i8i4IyHemTe+/yIXOtTcRQMzPcgyhoFlqPkw==} - engines: {node: '>=8'} - dependencies: - mimic-response: 2.1.0 - dev: false - /decompress-response@6.0.0: resolution: {integrity: sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==} engines: {node: '>=10'} @@ -11112,6 +11108,7 @@ packages: /deep-extend@0.6.0: resolution: {integrity: sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==} engines: {node: '>=4.0.0'} + dev: true /deep-is@0.1.4: resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} @@ -11209,6 +11206,7 @@ packages: /delegates@1.0.0: resolution: {integrity: sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=} + dev: true /depd@1.1.2: resolution: {integrity: sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=} @@ -11241,12 +11239,6 @@ packages: engines: {node: '>=8'} dev: true - /detect-libc@1.0.3: - resolution: {integrity: sha1-+hN8S9aY7fVc1c0CrFWfkaTEups=} - engines: {node: '>=0.10'} - hasBin: true - dev: false - /dezalgo@1.0.3: resolution: {integrity: sha1-f3Qt4Gb8dIvI24IFad3c5Jvw1FY=} dependencies: @@ -11407,8 +11399,7 @@ packages: dev: true /duplexer@0.1.1: - resolution: {integrity: sha1-rOb/gIwc5mtX0ev5eXessCM0z8E=} - dev: true + resolution: {integrity: sha512-sxNZ+ljy+RA1maXoUReeqBBpBC6RLKmg5ewzV+x+mSETmWNoKdZN6vcQjpFROemza23hGFskJtFNoUWUaQ+R4Q==} /duplexer@0.1.2: resolution: {integrity: sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==} @@ -11895,11 +11886,6 @@ packages: fill-range: 2.2.4 dev: false - /expand-template@2.0.3: - resolution: {integrity: sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==} - engines: {node: '>=6'} - dev: false - /extend-shallow@2.0.1: resolution: {integrity: sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=} engines: {node: '>=0.10.0'} @@ -12321,6 +12307,7 @@ packages: /fs-constants@1.0.0: resolution: {integrity: sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==} + dev: true /fs-extra@1.0.0: resolution: {integrity: sha1-zTzl9+fLYUWIP8rjGR6Yd/hYeVA=} @@ -12416,6 +12403,7 @@ packages: string-width: 1.0.2 strip-ansi: 3.0.1 wide-align: 1.1.5 + dev: true /gen-esm-wrapper@1.1.3: resolution: {integrity: sha512-LNHZ+QpaCW/0VhABIbXn45V+P8kFvjjwuue9hbV23eOjuFVz6c0FE3z1XpLX9pSjLW7UmtCkXo5F9vhZWVs8oQ==} @@ -12576,10 +12564,6 @@ packages: ini: 1.3.8 dev: true - /github-from-package@0.0.0: - resolution: {integrity: sha1-l/tdlr/eiXMxPyDoKI75oWf6ZM4=} - dev: false - /github-slugger@1.4.0: resolution: {integrity: sha512-w0dzqw/nt51xMVmlaV1+JRzN+oCa1KfcgGEWhxUG16wbdA+Xnt/yoFO8Z8x/V82ZcZ0wy6ln9QDup5avbhiDhQ==} dev: true @@ -12911,6 +12895,7 @@ packages: /has-unicode@2.0.1: resolution: {integrity: sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=} + dev: true /has-value@0.3.1: resolution: {integrity: sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=} @@ -13181,6 +13166,7 @@ packages: /ieee754@1.2.1: resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} + dev: true /iferr@0.1.5: resolution: {integrity: sha1-xg7taebY/bazEEofy8ocGS3FtQE=} @@ -13219,18 +13205,6 @@ packages: engines: {node: '>= 4'} dev: true - /iltorb@2.4.5: - resolution: {integrity: sha512-EMCMl3LnnNSZJS5QrxyZmMTaAC4+TJkM5woD+xbpm9RB+mFYCr7C05GFE3TEGCsVQSVHmjX+3sf5AiwsylNInQ==} - deprecated: The zlib module provides APIs for brotli compression/decompression starting with Node.js v10.16.0, please use it over iltorb - requiresBuild: true - dependencies: - detect-libc: 1.0.3 - nan: 2.15.0 - npmlog: 4.1.2 - prebuild-install: 5.3.6 - which-pm-runs: 1.0.0 - dev: false - /import-cwd@3.0.0: resolution: {integrity: sha512-4pnzH16plW+hgvRECbDWpQl3cqtvSofHWh44met7ESfZ8UZOWWddm8hEyDTqREJ9RbYHY8gi8DqmaelApoOGMg==} engines: {node: '>=8'} @@ -13332,6 +13306,7 @@ packages: /ini@1.3.8: resolution: {integrity: sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==} + dev: true /ini@2.0.0: resolution: {integrity: sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA==} @@ -13588,6 +13563,7 @@ packages: engines: {node: '>=0.10.0'} dependencies: number-is-nan: 1.0.1 + dev: true /is-fullwidth-code-point@2.0.0: resolution: {integrity: sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=} @@ -15495,11 +15471,6 @@ packages: resolution: {integrity: sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==} engines: {node: '>=4'} - /mimic-response@2.1.0: - resolution: {integrity: sha512-wXqjST+SLt7R009ySCglWBCFpjUygmCIfD790/kVbiGmUgfYGuB14PiTd5DwVxSV4NcYHjzMkoj5LjQZwTQLEA==} - engines: {node: '>=8'} - dev: false - /mimic-response@3.1.0: resolution: {integrity: sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==} engines: {node: '>=10'} @@ -15648,6 +15619,7 @@ packages: /mkdirp-classic@0.5.3: resolution: {integrity: sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==} + dev: true /mkdirp-promise@5.0.1: resolution: {integrity: sha1-6bj2jlUsaKnBcTuEiD96HdA5uKE=} @@ -15733,6 +15705,9 @@ packages: /nan@2.15.0: resolution: {integrity: sha512-8ZtvEnA2c5aYCZYd1cvgdnU6cqwixRoYg70xPLWUws5ORTa/lnw+u4amixRS/Ac5U5mQVgp9pnlSUnbNWFaWZQ==} + requiresBuild: true + dev: true + optional: true /nanocolors@0.1.12: resolution: {integrity: sha512-2nMHqg1x5PU+unxX7PGY7AuYxl2qDx7PSrTRjizr8sxdd3l/3hBuWWaki62qmtYm2U5i4Z5E7GbjlyDFhs9/EQ==} @@ -15768,10 +15743,6 @@ packages: engines: {node: ^8.0.0 || ^10.0.0 || ^12.0.0 || ^14.0.0 || >=16.0.0} dev: true - /napi-build-utils@1.0.2: - resolution: {integrity: sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg==} - dev: false - /natural-compare@1.4.0: resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} dev: true @@ -15813,12 +15784,6 @@ packages: path-to-regexp: 1.8.0 dev: true - /node-abi@2.30.1: - resolution: {integrity: sha512-/2D0wOQPgaUWzVSVgRMx+trKJRC2UG4SUc4oCJoXx9Uxjtp0Vy3/kt7zcbxHF8+Z/pK3UloLWzBISg72brfy1w==} - dependencies: - semver: 5.7.1 - dev: false - /node-fetch-npm@2.0.4: resolution: {integrity: sha512-iOuIQDWDyjhv9qSDrj9aq/klt6F9z1p2otB3AV7v3zBDcL/x+OfGsvGQZZCcMZbUf4Ujw1xGNQkjvGnVT22cKg==} engines: {node: '>=4'} @@ -15911,10 +15876,6 @@ packages: resolution: {integrity: sha512-CqyzN6z7Q6aMeF/ktcMVTzhAHCEpf8SOarwpzpf8pNBY2k5/oM34UHldUwp8VKI7uxct2HxSRdJjBaZeESzcxA==} dev: true - /noop-logger@0.1.1: - resolution: {integrity: sha1-lKKxYzxPExdVMAfYlm/Q6EG2pMI=} - dev: false - /nopt@4.0.3: resolution: {integrity: sha512-CvaGwVMztSMJLOeXPrez7fyfObdZqNUK1cPAEzLHrTybIua9pMdmmPR5YwtfNftIOMv3DPUhFaxsZMNTQO20Kg==} hasBin: true @@ -16142,6 +16103,7 @@ packages: console-control-strings: 1.1.0 gauge: 2.7.4 set-blocking: 2.0.0 + dev: true /nth-check@2.0.1: resolution: {integrity: sha512-it1vE95zF6dTT9lBsYbxvqh0Soy4SPowchj0UBGj/V6cTPnXXtQOPUbhZ6CmGzAD/rW22LQK6E96pcdJXk4A4w==} @@ -16152,6 +16114,7 @@ packages: /number-is-nan@1.0.1: resolution: {integrity: sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=} engines: {node: '>=0.10.0'} + dev: true /nwsapi@2.2.0: resolution: {integrity: sha512-h2AatdwYH+JHiZpv7pt/gSX1XoRGb7L/qSIeuqA6GwYoF9w1vP1cw42TO0aI2pNyshRK5893hNSl+1//vHK7hQ==} @@ -17283,28 +17246,6 @@ packages: source-map-js: 0.6.2 dev: true - /prebuild-install@5.3.6: - resolution: {integrity: sha512-s8Aai8++QQGi4sSbs/M1Qku62PFK49Jm1CbgXklGz4nmHveDq0wzJkg7Na5QbnO1uNH8K7iqx2EQ/mV0MZEmOg==} - engines: {node: '>=6'} - hasBin: true - dependencies: - detect-libc: 1.0.3 - expand-template: 2.0.3 - github-from-package: 0.0.0 - minimist: 1.2.5 - mkdirp-classic: 0.5.3 - napi-build-utils: 1.0.2 - node-abi: 2.30.1 - noop-logger: 0.1.1 - npmlog: 4.1.2 - pump: 3.0.0 - rc: 1.2.8 - simple-get: 3.1.0 - tar-fs: 2.1.1 - tunnel-agent: 0.6.0 - which-pm-runs: 1.0.0 - dev: false - /prelude-ls@1.1.2: resolution: {integrity: sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=} engines: {node: '>= 0.8.0'} @@ -17653,6 +17594,7 @@ packages: ini: 1.3.8 minimist: 1.2.5 strip-json-comments: 2.0.1 + dev: true /react-is@16.13.1: resolution: {integrity: sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==} @@ -17809,6 +17751,7 @@ packages: inherits: 2.0.4 string_decoder: 1.3.0 util-deprecate: 1.0.2 + dev: true /readable-web-to-node-stream@2.0.0: resolution: {integrity: sha512-+oZJurc4hXpaaqsN68GoZGQAQIA3qr09Or4fqEsargABnbe5Aau8hFn6ISVleT3cpY/0n/8drn7huyyEvTbghA==} @@ -18549,6 +18492,7 @@ packages: /semver@5.7.1: resolution: {integrity: sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==} hasBin: true + dev: true /semver@6.3.0: resolution: {integrity: sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==} @@ -18626,6 +18570,7 @@ packages: /set-blocking@2.0.0: resolution: {integrity: sha1-BF+XgtARrppoA93TgrJDkrPYkPc=} + dev: true /set-getter@0.1.1: resolution: {integrity: sha512-9sVWOy+gthr+0G9DzqqLaYNA7+5OKkSmcqjL9cBpDEaZrr3ShQlyX2cZ/O/ozE41oxn/Tt0LGEM/w4Rub3A3gw==} @@ -18707,18 +18652,7 @@ packages: /signal-exit@3.0.5: resolution: {integrity: sha512-KWcOiKeQj6ZyXx7zq4YxSMgHRlod4czeBQZrPb8OKcohcqAXShm7E20kEMle9WBt26hFcAf0qLOcp5zmY7kOqQ==} - - /simple-concat@1.0.1: - resolution: {integrity: sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==} - dev: false - - /simple-get@3.1.0: - resolution: {integrity: sha512-bCR6cP+aTdScaQCnQKbPKtJOKDp/hj9EDLJo3Nw4y1QksqaovlW/bnptB6/c1e+qmNIDHRK+oXFDdEqBT8WzUA==} - dependencies: - decompress-response: 4.2.1 - once: 1.4.0 - simple-concat: 1.0.1 - dev: false + dev: true /sinon@11.1.2: resolution: {integrity: sha512-59237HChms4kg7/sXhiRcUzdSkKuydDeTiamT/jesUVHshBgL8XAmhgFo0GfK6RruMDM/iRSij1EybmMog9cJw==} @@ -19119,6 +19053,7 @@ packages: code-point-at: 1.1.0 is-fullwidth-code-point: 1.0.0 strip-ansi: 3.0.1 + dev: true /string-width@2.1.1: resolution: {integrity: sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==} @@ -19192,12 +19127,14 @@ packages: resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==} dependencies: safe-buffer: 5.2.1 + dev: true /strip-ansi@3.0.1: resolution: {integrity: sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=} engines: {node: '>=0.10.0'} dependencies: ansi-regex: 2.1.1 + dev: true /strip-ansi@4.0.0: resolution: {integrity: sha1-qEeQIusaw2iocTibY1JixQXuNo8=} @@ -19279,6 +19216,7 @@ packages: /strip-json-comments@2.0.1: resolution: {integrity: sha1-PFMZQukIwml8DsNEhYwobHygpgo=} engines: {node: '>=0.10.0'} + dev: true /strip-json-comments@3.1.1: resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} @@ -19460,6 +19398,7 @@ packages: mkdirp-classic: 0.5.3 pump: 3.0.0 tar-stream: 2.2.0 + dev: true /tar-stream@2.2.0: resolution: {integrity: sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==} @@ -19470,6 +19409,7 @@ packages: fs-constants: 1.0.0 inherits: 2.0.4 readable-stream: 3.6.0 + dev: true /tar@4.4.19: resolution: {integrity: sha512-a20gEsvHnWe0ygBY8JbxoM4w3SJdhc7ZAuxkLqh+nvNQN2IOt0B5lLgM490X5Hl8FF0dl0tOf2ewFYAlIFgzVA==} @@ -20583,10 +20523,6 @@ packages: resolution: {integrity: sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=} dev: true - /which-pm-runs@1.0.0: - resolution: {integrity: sha1-Zws6+8VS4LVd9rd4DKdGFfI60cs=} - dev: false - /which@1.3.1: resolution: {integrity: sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==} hasBin: true @@ -20606,6 +20542,7 @@ packages: resolution: {integrity: sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==} dependencies: string-width: 1.0.2 + dev: true /widest-line@2.0.1: resolution: {integrity: sha512-Ba5m9/Fa4Xt9eb2ELXt77JxVDV8w7qQrH0zS/TWSJdLyAwQjWoOzpzj5lwVftDz6n/EOu3tNACS84v509qwnJA==}